Клуб API Карт

Найдено на тему «перетаскивание»:
Как получить координаты dragend или хотя бы drag
Евгений Блинков
20 февраля 2015, 18:17

Простите, может голова замылилась и не вижу очевидного...

пишу var coords = e.get('coords'), говорит, что undefined. По всякому пытался, ничего не получилось. В документации вычитал, что для события drag есть pixelOffset. Это работает, но не понимаю как связать пиксели с координатами? Я хочу чтобы пользователь мог подвинуть точку, если он промахнулся, когда её ставил, и получить координаты окончательной позиции точки.

3 комментария
метка,API 2.1,координаты,события,перетаскивание
Можно ли добавить 2 драггера к карте?
just8
19 декабря 2014, 14:03

Хотел бы добавить 2 драггера к карте, на основе примера - https://tech.yandex.ru/maps/jsbox/2.1/dragger.

Но не знаю как это сделать? 

Один добавляется и работает нормально. 

4 комментария
API 2.1,перетаскивание
[Решено]Координаты центра круга
fiphiker
29 сентября 2014, 10:30

Здравствуйте, как определить координаты центра круга при перемещении?
circle = new ymaps.Circle([[55.43, 37.7], 10000], null, { draggable: true });

circle.events.add('dragend', function () {
????????????
});

2 комментария
API 2.1,круг,перетаскивание
map Dragging
Удалённый пользователь
9 сентября 2014, 14:40

Не могу отследить событие перемещение карты, при перетаскивание курсором мыши. Может кто сталкивался? Версия 2.x

8 комментариев
API 2.1,перетаскивание
Jquery UI Droppable и яндекс карты
anglais2010
6 июля 2014, 05:05

Здравствуйте

Есть ли где-нибудь пример как можно совместить jquery ui droppable и яндекс карты? В общем-то задача стоит в перетаскивании на карту элементов, только в песочнице пример не совсем подходит. Смысл в том что у меня есть список (например <ul>) из строк, перетаскивая строку на карту нужно на карте создавать placemark (а сама строчка в списке остается естественно).

С jquery ui все drag&drop операции делаются просто, но я не понимаю как можно связать их с яндекс картами. Т.е. как отловить момент когда я делаю drop на карту и желательно при этом поставить placemark туда где был drop.

 

Использую апи 2.1

 

Спасибо заранее

2 комментария
API 2.1,перетаскивание
пропадание метки после drag
m343604
18 июня 2014, 21:02

вот пример:

http://dev2.martdev.ru/test.htm

вот видео

http://www.youtube.com/watch?v=DrEmbK3ioBM

 

При загрузке устанавливается метка со свойством draggable по центру карты, если подвигать карту ничего необычного не происходит

Если переместить метку на некоторое расстояние, а после этого подвигать карту - метка исчезает за какими-то невидимыми границами. Подскажите, как избежать этого?

8 комментариев
метка,API 2.1,перетаскивание
Применение метода disableDragging();
Андрей П.
11 июня 2014, 10:24

Доброго времени суток. Я новичок в использовании API. Я втроил кару и решил запретить её перемещение. Прочитал, что для этого нам необходимо применить метод disableDragging();. Только возникает вопрос как?)

 

ymaps.ready(init);

var myMap;

function init(){     

 myMap = new ymaps.Map ("map_uch_forestry", {

 center: [54.91438, 37.41392],

 zoom: 10,

 controls: []

});

 

myMap.disableDragging();

 

Так не работает.

Спасибо за помощь).

7 комментариев
API 2.1,поведения карты,перетаскивание
Установка и перетаскивание метки на карте при поиске по адресу
rimar.oleg
16 мая 2014, 15:04

Здравствуйте.

Использую на сайте код для поиска по адресу на карте объектов.

Имея адрес создаю метку:

 

            map.removeOverlay(geoResult);
            // Запуск процесса геокодирования
            var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});

            // Создание обработчика для успешного завершения геокодирования
            YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
                // Если объект был найден, то добавляем его на карту
                // и центрируем карту по области обзора найденного объекта
                if (this.length()) {
          
           
           map.removeOverlay(geoResult);


 
 geoResult = this.get(0),{draggable: true};
map.addOverlay(geoResult);
map.setBounds(geoResult.getBounds());

value содержит адрес, допустим Москва.

 

Карта переходит на координаты и ставит метку, но хтелось бы понять как сделать чтобы метку можно было перетаскивать потом.

Как я понял создаётся объект  geoResult = this.get(0);

В нём хранятся настройки метки, приписал {draggable: true}, но ничего не получилось, даже ошибку не пишет и не работает перетаскивание.

Как можно решить данную проблему?

1 комментарий
метка,API 1.x,перетаскивание
Как определить координаты перемещенной метки
alexander.drobotov
10 февраля 2014, 13:36

Добрый день!

На карте делаю метку с возможностью ее перемещения по карте:

 var myPlacemark = new ymaps.Placemark([t[1], t[0]],

 {iconContent: 1},

 {draggable: true});

myMap.geoObjects.add(myPlacemark);


Подскажите, пожалуйста, мне нужно по событию окончания перемещения метки на новое место узнать новые координаты. Как это можно сделать? Заранее спасибо!

1 комментарий
метка,события,API 2.0,перетаскивание
2.0-stable dragend координаты после перемещения.
sidpr
17 декабря 2013, 20:22

 

 // Заполняем коллекцию данными.
                myPoints.forEach(function (point) {
                    myCollection.add(new ymaps.Placemark(
                        point.coords, {
                            balloonContentBody: point.text
                        }
                    ));
                });

                // Добавляем коллекцию меток на карту.
                myMap.geoObjects.add(myCollection);

   
                myCollection.events.add('dragend', function (e) {
                    //firstGeoObject.geometry.getCoordinates()
                       // var coords = e.get('coordPosition');
                       // txt = [coords[0].toPrecision(6),coords[1].toPrecision(6)].join(', ');
                        //console.log(coords);
                });

  

Подскажите пожалуйста, как мне узнать координаты объекта, само событие работает после перетаскивания метки, но вот определить ее координаты я не могу. как это сделать?

2 комментария
метка,координаты,API 2.0,перетаскивание
Как правильно создать перетаскиваемый крутящийся объект наподобие бинокля на карте панорам?
kostroman-map
13 декабря 2013, 13:05

Здравствуйте! Пробовал поменять стиль placemark через templateLayoutFactory, объект поворачивается курсором нормально, но после того как включаешь draggable - перестаёт. Да и неправильное решение какое-то.

 

Есть ли какой-то более правильный способ? Например использовать часть функционала панорам.

4 комментария
панорамы,метка,API 2.0,перетаскивание,стили
Расчёт расстояний и стоимости + перенос обеих точек
sane10
11 декабря 2013, 12:05

Добрый день, сталкнулся с такой проблемой. 

Мне понадобилось что-бы при расчёте стоимости от точки "А" до точки "Б" можно было перемещать обе точки + геопозиционирование.

С геопозиционированием я разобрался а вот с перемещением точки "Б" всё никак

 

 

function init() {

    var geolocation = ymaps.geolocation,

        // координаты

        coords = [geolocation.latitude, geolocation.longitude],

        myMap = new ymaps.Map('map', {

            center: coords,

            zoom: 5

        }, {

            minZoom: 4,

            maxZoom: 10

        });

    myMap.controls

    // Кнопка изменения масштаба.

    .add('zoomControl', {

        left: 5,

        top: 50

    })

    search = new ymaps.control.SearchControl({

        useMapBounds: true,

        noCentering: true,

        noPlacemark: true

    }),

    calculator = new DeliveryCalculator(myMap, myMap.getCenter());

    myMap.controls.add(search, {

        left: 5,

        top: 5

    });

    search.events.add('resultselect', function (e) {

        var results = search.getResultsArray(),

            selected = e.get('resultIndex'),

            point = results[selected].geometry.getCoordinates();

        calculator.setStartPoint(point);

    });

}

 

function DeliveryCalculator(map, finish) {

    this._map = map;

    this._start = null;

    this._finish = new ymaps.Placemark(finish, {

        iconContent: 'Б'

    });

    this._route = null;

    map.events.add('click', this._onClick, this);

    map.geoObjects.add(this._finish);

}

var ptp = DeliveryCalculator.prototype;

ptp._onClick = function (e) {

    this.setStartPoint(e.get('coordPosition'));

};

ptp._onDragEnd = function (e) {

    var target = e.get('target');

    this.setStartPoint(target.geometry.getCoordinates());

}

ptp.getDirections = function () {

    var self = this,

        start = this._start.geometry.getCoordinates(),

        finish = this._finish.geometry.getCoordinates();

    if(this._route) {

        this._map.geoObjects.remove(this._route);

    }

    ymaps.geocode(start, {

        results: 1

    })

        .then(function (geocode) {

            var address = geocode.geoObjects.get(0) &&

                geocode.geoObjects.get(0).properties.get('balloonContentBody') || '';

            ymaps.route([start, finish])

                .then(function (router) {

                    var distance = Math.round(router.getLength() / 1000),

                        message = 'Расстояние: ' + distance + 'км.

' +

                            'Стоимость доставки: %sр.';

                    self._route = router.getPaths();

                    self._route.options.set({

                        strokeWidth: 5,

                        strokeColor: '0000ffff',

                        opacity: 0.5

                    });

                    self._map.geoObjects.add(self._route);

                    self._start.properties.set('balloonContentBody', address + message.replace('%s', self.calculate(distance)));

                    self._start.balloon.open();

                });

        });

};

ptp.setStartPoint = function (position) {

    if(this._start) {

        this._start.geometry.setCoordinates(position);

    }

    else {

        this._start = new ymaps.Placemark(position, {

            iconContent: 'А'

        }, {

            draggable: true

        });

        this._start.events.add('dragend', this._onDragEnd, this);

        this._map.geoObjects.add(this._start);

    }

    this.getDirections();

};

ptp.calculate = function (len) {

    // Константы.

    var DELIVERY_TARIF = 25,

        MINIMUM_COST = 500;

    return Math.max(len * DELIVERY_TARIF, MINIMUM_COST);

};

 

ymaps.ready(init);

 

2 комментария
маршрутизация,расчет стоимости доставки,API 2.0,перетаскивание,метка
Как повесить обработчик на событие начала перетаскивания карты?
Удалённый пользователь
10 декабря 2013, 13:07

Добрый день.

Существует ли способ однозначно определить событие начала перетаскивания карты мышкой по типу dragstart для геообъектов?

Из документации удалось соорудить следующее:

ymap.events.add( 'actionbegin', function( e ){
    var isFirstCallback = true;
    e.get( 'action' ).events.add( 'tick', function( tick_e ){
        if ( isFirstCallback ) {
            // условие, что зум не поменялся (cachedZoom задается выше по коду)
            if ( tick_e.originalEvent.tick.zoom === cachedZoom ) {
                // вот тут все действия, которые выполняются при начале перетаскивания карты
            }
            isFirstCallback = false;
        }
    } );
} );

 но, по-моему, это фейспалм =)

Подскажите, пожалуйста, более оптимальный способ. Спасибо!

4 комментария
карта,события,API 2.0,перетаскивание
Проблема получить данные после перетаскивания метки, после перехода на API 2.1
barkar1979
29 ноября 2013, 12:25

 

var parCentr = myMap = new ymaps.Map('map_admin', {center: [parseFloat(parCentr[0]),parseFloat(parCentr[1])], zoom: parseFloat(resEd.zoom), behaviors: ['default', 'scrollZoom'], controls: ['searchControl', 'typeSelector', 'trafficControl', 'fullscreenControl'], type: 'yandex#map'});

myMap.controls.add('rulerControl', { position: {bottom: '10px', right: '10px'} }),

coords = [parseFloat(parMet[0]),parseFloat(parMet[1])],
myPlacemark = new ymaps.Placemark(coords, { balloonContent: resEd.street }, {preset: chUrl[1]+'#icon',draggable: true});
myMap.geoObjects.add(myPlacemark);

//Отслеживаем событие перемещения метки
myPlacemark.events.add('dragend', function (e) {
coords = this.geometry.getCoordinates();console.dir(coords);
savecoordinats();
}, myPlacemark);

//Отслеживаем событие щелчка по карте
myMap.events.add('click', function (e) {
coords = e.get('coords'); console.dir(coords);
savecoordinats();
});

//Ослеживаем событие изменения области просмотра карты - масштаб и центр карты
myMap.events.add('boundschange', function (event) {
if (event.get('newZoom') != event.get('oldZoom')) {
savecoordinats();
}
if (event.get('newCenter') != event.get('oldCenter')) {
savecoordinats();
}
});

//Функция для передачи полученных значений в форму
function savecoordinats (){
var latlongmet_ch = [coords[0].toFixed(6),coords[1].toFixed(6)];
myPlacemark.getOverlay().getData().geometry.setCoordinates(latlongmet_ch);
$('#latlongmet').val(latlongmet_ch);
$('#mapzoom').val(myMap.getZoom());
var center = myMap.getCenter();
var new_center = [center[0].toFixed(6), center[1].toFixed(6)];
$('#latlongcenter').val(new_center);
}

 

  

Выдает ошибку в myPlacemark.getOverlay().getData().geometry.setCoordinates(latlongmet_ch);

Мол: Object has not method getData! 

5 комментариев
метка,API 2.1,перетаскивание
Исчезновение метки, находящейся в кластере при перетаскивании и масштабировании
Алексей
15 ноября 2013, 18:47

Написал простой пример, который выявляет следующее поведение:

1. Перетащите метку мышью.

2. Приблизьте метку колесиком мыши.

3. При определенном масштабе приближения метка исчезает. Почему?

 

Если же Вы не будете перетаскивать мышью, а сразу приблизитесь, то метка никуда не исчезнет.

 
        var myMap = new ymaps.Map("map", {
            behaviors: ['default', 'scrollZoom'],
            center: [55.76, 37.64],
            zoom: 10
        }),

        myGeoObject = new ymaps.GeoObject({
            geometry: {
                type: "Point",
                coordinates: [55.8, 37.8]
            },
            properties: {
                iconContent: 'Метка',
                balloonContent: 'Меня можно перемещать'
            }
        }, {
            preset: 'twirl#redStretchyIcon',
            draggable: true
        }),
           
        clustererSide = new ymaps.Clusterer({
            preset: 'twirl#blueClusterIcons',
            groupByCoordinates: false,
            clusterDisableClickZoom: false,
            zIndex: 300
        });

        clustererSide.add(myGeoObject);

        myMap.geoObjects.add(clustererSide);
 
1 комментарий
метка,кластеризатор,API 2.0,перетаскивание
Я огорчён документацией
Андрей Власенко
13 октября 2013, 23:40

Доброй ночи! Прошу простить меня за нецинзурщину, но какой , с*ка, наркоман делал документацию?!(и подтверждением моей позиции будет количество тем-вопросов в клубе) 

Блин, я признаю что я далеко не хороший программист, и у меня не совсем хорошо с ООП, тем более в JS, но то с чем я столкнулся это поистине издевательство над разработчиками, особенно начинающими! Ребят ну что вы делаете?! Я понимаю и безоговорочно соглашаюсь что в Яндексе работают супермега крутые девелоперы, но  это не повод делать из "справки" пособоие для гиков! 

Теперь по делу без эмоций, я хочу реализовать банальную задачу, - недвижимость на карте. Всё просто, казалось бы, пользователь подвинул карту, я с помощью события некого! получил координаты с помощью некой функции(за 3 часа выясни что это getBounds() ) получаю координаты видимой области и подгружаю с сервера все объекты на карту аяксом.

Теперь вопрос, опишите мне мою логику, которой я должен был руководствоваться, чтобы найти это самое событие при перетаскивании карты, чтобы хотя бы вывести console.log(myMap.getBounds())  начиная с этой страницы http://api.yandex.ru/maps/doc/intro/concepts/intro.xml

2 комментария
API 2.0,события,документация,перетаскивание
API 2.1-beta некорректно работает опция draggable у метки
Андрей Ерикин
11 октября 2013, 14:39

Здравствуйте!

 

В версии 2.1 после повторной смены опции draggable у метки, она перестает перетаскиваться?

Что происходит: 

1) Метка выводится с опцией draggable = false. Метка не перетаскивается. Все ОК!

2) Нажимаем на метку. Опция draggable = true. Метка перасивается. Все ОК!

3) Нажимаем на метку. Опция draggable = false. Метка не перасивается. Все ОК!

4) Нажимаем на метку. Опция draggable = true. Метка не перасивается. ERROR!

Как это исправить?

 

ymaps.ready(function () {
    var myMap = new ymaps.Map('yandex-map-id', {
        center: [59.946245, 30.315214],
        zoom: 11
    });
    var vertices = new ymaps.GeoObjectArray({}, {
        draggable: false
    });
    vertices.events.add('click', vertexClick);
    var geoObject = new ymaps.Placemark([59.946245, 30.315214]);
    vertices.add(geoObject);
    function vertexClick(e) {
        var vertex = e.get('target');
        if(vertex.options.get('draggable')) {
            selectVertex.options.set('draggable', false);
        } else {
            selectVertex.options.set('draggable', true);
        }
    }
});

 

1 комментарий
API 2.1,перетаскивание
Отключать перетаскивание карты, при mousedown на geoObject
asimv
15 июля 2013, 20:06

Сам программист, программирую много на чем, но представляете не могу решить эту проблему!?

В общем задача такая, есть на карте geoObject'ы (dragging = false), при событии mousedown, на странице создаю копию этого объекта (не на карте), чтобы можно было переместить его и дропнуть в корзину, с этим все впорядке, проблема в том, что карта продолжает тянуться за мышкой, что только не делал, не получается и все..

 

Что уже делал:

geoObject.events.add('mousedown', function(e){

e.preventDefault();

});

не помогает, также и stopPropagation() и stopImmediatePropagation(), что угодно "stop" без толку (

 

geoObject.events.add('mousedown', function(e){

map.behaviors.disable('drag');

});

Фигу, срабатывает только тогда, когда мышку отпускаем.

 

map.events.add('actiontick', function(e){

e.preventDefault();

});

такая же история.

 

Из серии "костыль, мож сработает O_o":

 

map.events.add('actiontick', function(e){

map.event.fire('actionend');

});

 

Что-то уже неплохо, карта не таскается, но geoObject'ы все равно ездят, потому что на отдельном слое похоже.

 

4 комментария
события,API 2.0,перетаскивание
Как перемещать метку по клику?
Артем
10 июля 2013, 14:45

моя метка перемещается по карте если её тащить мышкой, но пользователи просто тыкают место на карте. Как сделать чтобы при клике по карте метка становилась на место клика, при этом чтобв функция перемещения тоже работала?

8 комментариев
метка,API 2.0,перетаскивание
Возможность перетаскивать картинки
spb.pavlov
8 июля 2013, 21:11

подскажите пожалуйста почему после клика по карте, картинки находящиеся на странице перестают перетаскиваться? Т.е. сразу после загрузки страницы картинку можно перетащить но стоит один раз кликнуть по карте как эта возможность пропадает. 

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Примеры. Размещение карты на странице.</title>
<script src="http://api-maps.yandex.ru/2.0/?load=package.standard&lang=ru-RU" type="text/javascript"></script>
<script type="text/javascript">
var myMap;
ymaps.ready(init);
function init () {
    myMap = new ymaps.Map('map', {
        center:[55.76, 37.64],
        zoom:10
    });
}
</script>
</head>
<body>
<div id="map" style="width:400px; height:300px"></div>
</body>
</html>

 

4 комментария
API 2.0,drag,перетаскивание