Я начал использовать листовку в качестве карты с открытым исходным кодом http://leaflet.cloudmade.com/
Следующий код jQuery позволит создавать маркеры на карте при нажатии на карту:
map.on('click', onMapClick);
function onMapClick(e) {
var marker = new L.Marker(e.latlng, {draggable:true});
map.addLayer(marker);
marker.bindPopup("<b>Hello world!</b><br />I am a popup.").openPopup();
};
Но в настоящее время у меня нет возможности (в моем коде) удалить существующие маркеры или найти все маркеры, которые я создал на карте, и поместить их в массив. Может ли кто-нибудь помочь мне понять, как это сделать? Документация листовки доступна здесь: http://leaflet.cloudmade.com/reference.html
Ответы:
вы должны убрать свой «маркер var» из функции. Позже вы сможете получить к нему доступ:
тогда позже :
Но таким образом вы можете получить только последний маркер, потому что каждый раз маркер var стирается самым последним. Итак, один из способов - создать глобальный массив маркеров, и вы добавите свой маркер в глобальный массив.
источник
map._layers
.Вы также можете вставить маркеры в массив. См. Пример кода, это работает для меня:
источник
Вот код и демонстрация для добавления маркера , удаления любого маркера, а также получения всех присутствующих / добавленных маркеров :
Вот весь код JSFiddle . Также вот демонстрация полной страницы .
Добавление маркера:
Удаление маркера:
Получение всех маркеров на карте:
источник
map._layers[ml].feature
больше не работает.Вот jsFiddle, который позволяет вам создавать маркеры с помощью вашего
onMapClick
метода, а затем удалять их, щелкнув ссылку.Процесс аналогичен процессу undefined - добавьте каждый новый маркер в
markers
массив, чтобы вы могли получить доступ к определенному маркеру, когда захотите взаимодействовать с ним позже.источник
delete
чтобы удалить элемент. Напримерdelete markers[$(this).attr('id')];
.(1) добавьте группу слоев и массив для хранения слоев и ссылки на слои как глобальные переменные:
var search_group = новый L.LayerGroup (); var clickArr = новый массив ();
(2) добавить карту
(3) Добавить групповой слой на карту
map.addLayer (search_group);
(4) функция добавления на карту со всплывающим окном, содержащим ссылку, при нажатии на которую будет отображаться опция удаления. Эта ссылка будет иметь в качестве идентификатора широту точки. Затем этот идентификатор будет сравниваться с тем, когда вы нажимаете на один из созданных вами маркеров и хотите его удалить.
(5) Функция удаления, сравните длину маркера с идентификатором, запущенным при удалении:
источник
Когда вы сохраняете почтение к маркеру в функции добавления, маркер может удалить его самостоятельно. Нет необходимости в массивах.
источник
Вы
layerGroup
еще не пробовали ?Документы здесь https://leafletjs.com/reference-1.2.0.html#layergroup
Просто создайте слой, добавьте весь маркер к этому слою, тогда вы сможете легко найти и уничтожить маркер.
источник
Может быть, я уже слишком поздно для этого, но все же я создал один проект open sorce, чтобы сделать то же самое вместе с другими вещами
https://github.com/ikishanoza/ionic-leaflet
Пожалуйста, оформляйте заказ и ставьте звезду, если хотите :)
источник
В моем случае у меня есть различные группы слоев, чтобы пользователи могли отображать / скрывать кластеры схожих маркеров типа. Но в любом случае вы удаляете отдельный маркер, перебирая группы слоев, чтобы найти и удалить его. Во время зацикливания ищите маркер с настраиваемым атрибутом, в моем случае «ключом», который добавляется при добавлении маркера в группу слоев. Добавьте свой «ключ» так же, как добавление атрибута title. Позже это будет опция слоя. Когда вы найдете это совпадение, вы .removeLayer (), и он избавится от этого конкретного маркера. Надеюсь, это поможет вам!
источник