Я пытаюсь показать карту с множеством маркеров (~ 36.000), которые должны содержать некоторую информацию.
Во-первых, я SELECT
элементы из базы данных, затем кодирую его в массиве JSON с помощью PHP, затем получаю его с помощью JSS и, наконец, добавляю его на свою карту и устанавливаю содержимое всплывающего окна с данными в массиве JSON.
Проблема в том, что существует так много данных, которые генерирует PHP. Неустранимая ошибка: Allowed memory size of 134217728 bytes exhausted
.
Я думаю, что я могу сделать это, чтобы сделать запрос SQL для каждого всплывающего окна. При этом мне придется загружать несколько данных из моей базы данных (просто широта, долгота и идентификатор, чтобы знать, где SELECT
после), поэтому он не будет генерировать Fatal Error
Так вот что сейчас работает.
var map = L.map('map', {center: latlng, zoom: 9, zoomControl:false, layers: [tiles]}); var addressPoints = JSON.stringify(<?php echo $data; ?>); var arr = JSON.parse(addressPoints); var markers = L.markerClusterGroup(); for (var i = 0; i < arr.length; i++) { var marker = L.marker(new L.LatLng(a[0], a[1]), { title: my_title }); marker.bindPopup("contains the ID in order to SELECT"); markers.addLayer(marker); } map.addLayer(markers);
И это идея, которую я хочу работать (она не работает, это выдержка, которую я взял в Интернете).
marker.on('mouseover', function(){ $(popup._contentNode).html('content made by PHP after the SELECT request'); popup._updateLayout(); popup._updatePosition(); });
Проблема в том, что я понятия не имею, как получить доступ к определенному маркеру (при нажатии на него), ни к всплывающему окну, который привязан к нему.
Могу ли я помочь?
Используйте this
переменную в обработчике, выглядит так:
marker.on('click', function () { // load popup's content using ajax var popup = L.popup() .setLatLng(this.getLatLng()) .setContent("Loading ...") .openOn(MY_MAP); // replace to your map $.ajax({ // ... options success: function (data) { popup.setContent(data); } }); });
См. Подробности в http://leafletjs.com/reference-1.0.3.html#popup-on