Leaflet перемещение CircleMarker - проблема:(

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
lenny314156
Интересующийся
Сообщения: 35
Зарегистрирован: 27 июл 2013, 21:47
Репутация: 6

Leaflet перемещение CircleMarker - проблема:(

Сообщение lenny314156 » 04 май 2016, 12:06

Добрый день. Нашел следующий пример:

Код: Выделить всё

var map = L.map('map').setView([44.635, 22.653], 11);
var osm = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);

var circle = L.circleMarker([44.63, 22.65], 8).addTo(map);

circle.on({
  mousedown: function () {
    map.on('mousemove', function(e) {
      circle.setLatLng(e.latlng);
    });
  },
  click: function () {
    map.removeEventListener();
  }
});
который замечательно работает в версиях leaflet ниже 1.0 бета-мастер и т.п. Т.е. кликаешь на маркер, и пока держишь кнопку мыши нажатой - circleMarker перемещается. Если же использовать leaflet версии 1.0 (всяческие беты) или master - circleMarker перемещается, только если после клика на нем, удерживая нажатой кнопку переместить карту. Карта перемещается, маркер остается на месте. Отпускаем кнопку мыши - маркер перемещается вслед за курсором, пока не сработает

Код: Выделить всё

  click: function () {
    map.removeEventListener();
  }
Как бы исправить?

Sergik
Интересующийся
Сообщения: 22
Зарегистрирован: 25 май 2015, 09:43
Репутация: 8
Откуда: Наро-Фоминск
Контактная информация:

Re: Leaflet перемещение CircleMarker - проблема:(

Сообщение Sergik » 04 май 2016, 13:15

Попробуйте так:

Код: Выделить всё

	var map = L.map('map').setView([44.635, 22.653], 11);
	var osm = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);

	var circle = L.circleMarker([44.63, 22.65], 8).addTo(map),
		drag = new L.Draggable(circle.getElement());
	
	drag.enable();

lenny314156
Интересующийся
Сообщения: 35
Зарегистрирован: 27 июл 2013, 21:47
Репутация: 6

Re: Leaflet перемещение CircleMarker - проблема:(

Сообщение lenny314156 » 04 май 2016, 13:45

Sergik писал(а):Попробуйте так:

Код: Выделить всё

	var map = L.map('map').setView([44.635, 22.653], 11);
	var osm = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);

	var circle = L.circleMarker([44.63, 22.65], 8).addTo(map),
		drag = new L.Draggable(circle.getElement());
	
	drag.enable();
Да, это работает, спасибо. Самое интересное, что я пробовал сделать это через L.Draggable, но использовал просто circle, без .getElement(), поэтому ничего не получилось)

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

lenny314156
Интересующийся
Сообщения: 35
Зарегистрирован: 27 июл 2013, 21:47
Репутация: 6

Re: Leaflet перемещение CircleMarker - проблема:(

Сообщение lenny314156 » 04 май 2016, 16:46

lenny314156 писал(а):
Sergik писал(а):Попробуйте так:

Код: Выделить всё

	var map = L.map('map').setView([44.635, 22.653], 11);
	var osm = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);

	var circle = L.circleMarker([44.63, 22.65], 8).addTo(map),
		drag = new L.Draggable(circle.getElement());
	
	drag.enable();
Да, это работает, спасибо. Самое интересное, что я пробовал сделать это через L.Draggable, но использовал просто circle, без .getElement(), поэтому ничего не получилось)

Спасибо за помощь)
а как бы еще при этом и координаты перемещаемого объекта отслеживать?

Sergik
Интересующийся
Сообщения: 22
Зарегистрирован: 25 май 2015, 09:43
Репутация: 8
Откуда: Наро-Фоминск
Контактная информация:

Re: Leaflet перемещение CircleMarker - проблема:(

Сообщение Sergik » 11 май 2016, 15:00

А что события у http://leafletjs.com/reference.html#draggable объекта не помогают?

lenny314156
Интересующийся
Сообщения: 35
Зарегистрирован: 27 июл 2013, 21:47
Репутация: 6

Re: Leaflet перемещение CircleMarker - проблема:(

Сообщение lenny314156 » 12 май 2016, 15:41

Sergik писал(а):А что события у http://leafletjs.com/reference.html#draggable объекта не помогают?
мне интересны географические координаты маркера, из которого сделали draggable-объект. А новый объект, как я понимаю, имеет координаты, привязанные к полотну svg.

Vladimir_R
Активный участник
Сообщения: 145
Зарегистрирован: 14 апр 2010, 14:11
Репутация: 44
Откуда: Екатеринбург

Re: Leaflet перемещение CircleMarker - проблема:(

Сообщение Vladimir_R » 13 май 2016, 09:35

Если я Вас правильно понял, то можно сделать так.

Код: Выделить всё

var map = L.map('map').setView([44.635, 22.653], 11);
osm = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map),
circle = L.circleMarker([44.63, 22.65], 8).addTo(map),
      drag = new L.Draggable(circle.getElement());
   drag.enable();
   drag.on('drag', function(e){
    console.log(map.mouseEventToLatLng(e.originalEvent));
   });
jsfiddle

lenny314156
Интересующийся
Сообщения: 35
Зарегистрирован: 27 июл 2013, 21:47
Репутация: 6

Re: Leaflet перемещение CircleMarker - проблема:(

Сообщение lenny314156 » 31 май 2016, 11:38

Да, этот вариант работает, но для моей задачи не очень подходит, потому-что

Код: Выделить всё

map.mouseEventToLatLng(e.originalEvent)
зачастую не совпадает с координатами центра маркера-донора, но Вы подсказали мне выход - я создаю поверх моего circleMarker обычный маркер с divIcon и удаляю старый circleMarker.

Так что, в любом случае - спасибо.

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя