Задать вопрос

Как динамически выводить, удалять и изменять маркеры на карте leaflet?

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

Имеется вот такой скрипт вывода маркеров на сайт:
var markers;
	function reload_marker(map_left,map_right,map_top,map_down) {
		$.getJSON('/json.php', {left:map_left,right:map_right,top:map_top,down:map_down}, function (serv) {
			massiv =[]; // Создаем массив
			
			// Получаем данные из json.php
			serv.features.forEach(function(n) {
				marker = new L.marker([n.geometry.coordinates[0],n.geometry.coordinates[1]]);
				massiv.push(marker); // добавляем marker к массиву
			});
			
		})
		.done(function() {
			// Удаляем старые маркеры
			if(markers) {
			   markers.clearLayers();
			}
			// Добавляем новые 
			markers = L.featureGroup(massiv).addTo(map);
		});
	}


Суть в том, что при перемещении карты / загрузки карты впервые / несколько раз в процессе перемещения () выполняется функция reload_marker(map_left,map_right,map_top,map_down) где map_left и т.д. - это границы карты. Выводятся из json только те маркеры, которые попадают в просматриваемые пользователем границы.

Код выше при выполнении функции удаляет все маркеры и загружает, добавляет на карту новые на основе новых данных от json.php

Проблема в том, что никак не могу реализовать так, чтобы те маркеры которые в данный момент есть на карте не удалялись, а использовалась функция setLatLng, те маркеры которые не вернулись их json но в данный момент присутствуют на карте - удалились, новые - добавились.. Как можно реализовать такую функцию, в какую сторону смотреть?
Проблема так-же в том, что у маркеров постоянно меняется leaflet_id..
  • Вопрос задан
  • 1287 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
* Завязывайтесь не на leaflet_id, а на свой marker_id, наверняка он у вас с базе там есть.
* То что вы хотите разделять новые/старые маркеры - это называется работа со множествами, которые можно объединять, пересекать, находить разность и прочее, ищите либы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы