Я пытаюсь вызвать окно всплывающего окна маркера, но не повезло. Я использую кластерную карту, которая отлично работает и открывает всплывающее окно, когда пользователь нажимает на маркер. Мне нужно расширить это, например, передавая параметр через url и открывая конкретный маркер на основе значения параметра url при загрузке страницы. Я использую следующий код для кластеризации карт.openPopup() в карточке брошюры с использованием пользовательской ссылки нажмите
var latlng = L.latLng(-30.81881, 116.16596);
var map = L.map('lmap', { center: latlng, zoom: 6 });
var lcontrol = new L.control.layers();
var eb = new L.control.layers();
//clear map first
clearMap();
//resize the map
map.invalidateSize(true);
//load the map once all layers cleared
loadMap();
//reset the map size on dom ready
map.invalidateSize(true);
function loadMap() {
var markers_array = [];
var roadMutant = L.gridLayer.googleMutant({
type: 'roadmap' // valid values are 'roadmap', 'satellite', 'terrain' and 'hybrid'
}).addTo(map);
//add the control on the map
lcontrol= L.control.layers({
Roadmap: roadMutant
}, {}, {
collapsed: false
}).addTo(map);
var markers = L.markerClusterGroup({chunkedLoading: true, spiderfyOnMaxZoom: true, maxClusterRadius: 80, showCoverageOnHover: true });
//clear markers and remove all layers
markers.clearLayers();
$.ajax({
type: "GET",
url: appUrl + "/Home/map",
data: {'atype': st},
dataType: 'json',
contentType: 'application/x-www-form-urlencoded',
success: function (data) {
$.each(data, function (i, item) {
var img = (item.IconUrl).replace("~", "");
var Icon = L.icon({ iconUrl: img, iconSize: [42, 42] });
var marker = L.marker(L.latLng(item.Latitude, item.Longitude), { icon: Icon }, { title: item.Name });
var content = "<div class='infoDiv'><h3><img src='" + appUrl + img + "' width='24' />" + item.Name + "</h3><p>" + item.Title + "</p><a href='#' data-value='" + item.AlertId + "' class='btn btn-success btn-sm alertInfo' data-toggle='modal' data-target='#alertDetails'>Details</a></div>";
marker.bindPopup(content);
markers.addLayer(marker);
//add the marker to array
markers_array.push(marker);
});
}
})
.done(function() {
$(".loadingOverlay").hide();
map.invalidateSize(true);
});
//add the markers to the map
map.addLayer(markers);
}
Я попытался реализовать следующее пользовательское событие click, но не повезло.
function markerFunction(id) {
alert(markers_array.length);
for (var i = 0; i < markers.length; ++i) {
var mid = markers_array[i]["_leaflet_id"];
if (mid == id) {
alert("opening " + id);
map.markers(id).openPopup();
}
}
}
//trigger on link click
$("a").click(function() {
var id = $(this).attr("id");
alert(id);
markerFunction(id);
});
Помощь очень ценится. Заранее спасибо.
Престол [Увеличить до и Spiderfy MarkerClusterGroup, открытого всплывающее окно целевых маркеров] (https://gis.stackexchange.com/questions/181372/zoom- to-and-spiderfy-markerclustergroup-open-popup-of-target-marker/181395 # 181395) на GIS SE (но опустить часть spiderfy) – ghybs
Спасибо за вашу помощь. Я пробовал это, но он не работает. 'code' var target = markers.getLayer (markers_array [id]) markers.zoomToShowLayer (target, function() {target.openPopup(); }) – Tajuddin
Пожалуйста, убедитесь, что вы сначала отлаживаете свой код как можно больше. Измените свой вопрос, а не отправляйте код в комментарии. Если возможно, повторите свою проблему в интерактивном инструменте редактирования, используя [SO-встроенный фрагмент кода] (https://stackoverflow.blog/2014/09/introducing-runnable-javascript-css-and-html-code-snippets/), Plunker, JSFiddle, JSBin и т. Д. Все это поможет вам получить более быструю поддержку, если не позволит вам найти решение самостоятельно. – ghybs