gpt4 book ai didi

javascript - 提取传单中标记的属性,onClick 事件

转载 作者:行者123 更新时间:2023-12-05 04:05:40 25 4
gpt4 key购买 nike

我正在使用 JSON 文件在 Leaflet 中绘制标记:

 [{
"id": 1,
"date": "1/1/2015",
"Title": "Trinity College",
"Latitude": 41.745167,
"Longitude": -72.69263},
{
"id": 2,
"date": "1/2/2015",
"Title": "Wesleyan University",
"Latitude": 41.55709,
"Longitude": -72.65691
},{...}]

我正在做的是:

      var markers = new L.markerClusterGroup(); //clustering function

var markerList = [];

for (var i = 0; i < jsonDataObject.length; i++) {
var marker = L.marker(L.latLng(parseFloat(jsonDataObject[i].Latitude), parseFloat(jsonDataObject[i].Longitude)));
marker.bindPopup(jsonDataObject[i].Title );
markerList.push(marker);
}
markers.addLayers(markerList);
map.addLayer(markers);

但是,因为我将为每个单独的标记添加额外的功能,所以我想为每个标记添加“点击”事件,并在此函数中访问每个标记的 JSON 属性。例如:

marker.on('click', onClick_Marker)

function onClick_Marker(e) {
popup = L.popup()
.setContent("The number id is: " + e.id)
.openOn(map);
}

如何在弹出窗口中访问 JSON 文件中的各个属性?

提前致谢! :)

最佳答案

由于您已经为每个标记创建了一个 Popup,因此您已经可以将 JSON 数据嵌入到其内容中。

但是如果出于某种原因您不能这样做,您只需要从您创建的传单标记中引用您的 JSON 数据,如中所述:

Leaflet: Including metadata with CircleMarkers

在您的循环中,使用上述 3 种方法中的任何一种将您的 jsonDataObject[i] 附加到您的 marker

然后在您的 “click” 处理程序中,您点击的标记可以作为 e.target 访问,然后根据您附加 JSON 数据的方式,您可以使用e.target.myJsonDatae.target.options.myJsonDatae.target.getProps().myJsonData

例如:

var jsonDataObject = [{
"id": 1,
"date": "1/1/2015",
"Title": "Trinity College",
"Latitude": 41.745167,
"Longitude": -72.69263
},
{
"id": 2,
"date": "1/2/2015",
"Title": "Wesleyan University",
"Latitude": 41.55709,
"Longitude": -72.65691
}
];

var map = L.map('map').setView([41.65, -72.67], 9);

for (var i = 0; i < jsonDataObject.length; i++) {
var marker = L.marker(L.latLng(parseFloat(jsonDataObject[i].Latitude), parseFloat(jsonDataObject[i].Longitude)));
marker.bindPopup(jsonDataObject[i].Title, {
autoClose: false
});
map.addLayer(marker);
marker.on('click', onClick_Marker)
// Attach the corresponding JSON data to your marker:
marker.myJsonData = jsonDataObject[i];
}

function onClick_Marker(e) {
var marker = e.target;
popup = L.popup()
.setLatLng(marker.getLatLng())
.setContent("The number id is: " + marker.myJsonData.id)
.openOn(map);
}

L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.1/dist/leaflet.css" integrity="sha512-Rksm5RenBEKSKFjgI3a41vrjkw4EVPlJ3+OiI65vTjIdo9brlAacEuKOiQ5OFh7cOI1bkDwLqdLw3Zg0cRJAAQ==" crossorigin="" />
<script src="https://unpkg.com/leaflet@1.3.1/dist/leaflet-src.js" integrity="sha512-IkGU/uDhB9u9F8k+2OsA6XXoowIhOuQL1NTgNZHY1nkURnqEGlDZq3GsfmdJdKFe1k1zOc6YU2K7qY+hF9AodA==" crossorigin=""></script>

<div id="map" style="height: 180px"></div>

关于javascript - 提取传单中标记的属性,onClick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50856635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com