Leaflet - 将Popup添加到Multiple Toggle Layers中使用的GeoJSON点

时间:2016-07-28 16:52:43

标签: leaflet

使用Leaflet,我创建了一个包含多个切换图层的地图。每个层都是GeoJSON线串和多个点的组合,其中每个点用于多个层(总线路径和路径上的所有停靠点)。这就是我到目前为止(遗漏了所有混乱的GeoJSON数据):

var busStops = L.geoJson([busStop1, busStop2, busStop3, busStop4]);
var busRoute10 = L.geoJson([route10, busStop1, busStop3]);
var busRoute12 = L.geoJson([route12, busStop2, busStop4]);

var baseLayers = {
  "Route 12": busRoute10,
  "Route 12": busRoute12,
  "All Bus Stops": busStops,
};

L.control.layers(null, baseLayers, {collapsed: false}).setPosition ('topright').addTo(map);

效果很好。我的问题是将弹出窗口绑定到每个点,因此当您单击公共汽车站时,名称会弹出。我正在使用:

function onEachFeature(feature, layer) {
// does this feature have a property named popupContent?
if (feature.properties && feature.properties.popupContent) {
    layer.bindPopup(feature.properties.popupContent);
}}

但我正在努力弄清楚在哪里调用它。唯一有效的是:

var busStops = L.geoJson([busStop1, busStop2, busStop3, busStop4],{
onEachFeature: onEachFeature});
var busRoute10 = L.geoJson([route10, busStop1, busStop3],{
onEachFeature: onEachFeature});
var busRoute12 = L.geoJson([route12, busStop2, busStop4],{
onEachFeature: onEachFeature});

这看起来真的非常多余。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

实际上,您可以将相同弹出内容的多次绑定到多个GeoJSON组中出现的公交车站...但实际上您多次构建您的公交车站。

如果这些是带阴影的默认标记,当您显示共享相同停靠点的线路时,您应该看到阴影堆叠起来(即背景应该变暗)。

现在,如果你想避免这些多个公共汽车站的副本,那就需要更复杂的方法,因为删除busLine1 busStop1会将busLine2从地图中删除,即使它也是data-ft:{ "src":10, "sty":46, "actrs":"14385334364", "pub_time":1289830690, "fbid":"1485431831867", "s_obj":11, "s_edge":1, "s_prnt":11, "pos":1, "sec":"new", "filter":"lf", "app_id":"201278444497" } 的一部分仍然在地图上......

演示:https://jsfiddle.net/3v7hd2vx/52/