Mapbox - 无法将删除功能绑定到每一层

Posted

技术标签:

【中文标题】Mapbox - 无法将删除功能绑定到每一层【英文标题】:Mapbox - cannot bind removing function to each layer 【发布时间】:2016-07-11 20:49:34 【问题描述】:

我在将删除函数绑定到从 kml 文件加载的每一层(多边形)时遇到问题(甚至只是从数据库中存储的坐标)。它仅适用于第一次点击 - 我点击的第一层。之后它不适用于其他图层,似乎在第一次单击后被禁用。

当我把 bindPopup 函数放在那里时,它适用于每一层,并且弹出窗口会显示出来,或者 console.log(this) 会显示每个点击层的对象详细信息。所以我不明白为什么 removeLayer 也不适用于每一层。

我想我在这里缺少一些关于 javascript 的知识,你能告诉我吗?

(KMLfile 是 Google 制作的一个文件扩展名,用于从 google earth 应用程序中提取区域/位置/等)

加载KML文件的代码:

var filePath = 'path to my kml file';
var customLayer= 'colors, line weight, etc.';

var runLayer = omnivore.kml(filePath, null, customLayer).on('ready', function() 
            map.fitBounds(runLayer.getBounds());
            runLayer.eachLayer(function(layer) 

                //layer.bindPopup(layer.feature.properties.name+" / "+this);

                layer.on('click', function() 
                    map.removeLayer(layer); // There's the issue, itworks only on first click!
                );

            );
         ).addTo(loadedFeatureGroup);//adding polygons to predefined group

【问题讨论】:

【参考方案1】:

您应该在回调中使用事件对象

layer.on('click', function(e) 
    map.removeLayer(e.target); 
);

点击本例中的图层:http://plnkr.co/edit/iY6jqvzsnnX7lMeGuuil?p=preview

【讨论】:

对我不起作用...不同之处在于我从数据库中加载纬度/经度并在函数中创建多边形并将它们添加到现有要素图层中,所以也许我应该从那里开始,但是我不知道它是否会起作用......【参考方案2】:

所以问题在于 L_PREFER_CANVAS 设置为 true。你可以在这里阅读更多:

https://github.com/Norkart/Leaflet-MiniMap/issues/35

【讨论】:

以上是关于Mapbox - 无法将删除功能绑定到每一层的主要内容,如果未能解决你的问题,请参考以下文章

删除 Mapbox GL JS 上的所有标签?

java.lang.ClassCastException:com.google.android.gms.maps.model.LatLng 无法转换为 com.mapbox.mapboxsdk.geo

非递归遍历求二叉树的高度

LeafletJS:如何删除缩放控件

从 mapbox 地图中删除所有标记或重新初始化地图

在地图 Mapbox JS 上显示用户位置