gpt4 book ai didi

javascript - 在 Leaflet LayerGroup 中查找特定图层,其中图层是多边形

转载 作者:可可西里 更新时间:2023-11-01 02:32:08 24 4
gpt4 key购买 nike

我正在尝试像这样定义一堆 Leaflet 多边形:

var poly = new L.Polygon([
[10.1840229, 36.8906981],
[10.1840393, 36.8906669],
[10.1840989, 36.8906868],
[10.1840826, 36.890718],
[10.1840229, 36.8906981]
], {
'id': 'someId'
});

然后我将这些多边形分组到一个 GroupLayer 中:

var group = new L.LayerGroup([poly1, poly2, ..., polyn]);
group.addTo(map);

我可以使用 group.getLayer() 通过 Id 找到那些多边形吗?或者我是否需要以不同方式定义图层/多边形才能执行此操作?

最佳答案

Leaflet 为每一层分配它自己的唯一 ID:

var marker = new L.Marker(...);
console.log(marker._leaflet_id) // 24

var polygon = new L.Polygon(...);
console.log(polygon._leaflet_id) // 25

L.LayerGroupL.FeatureGroupL.GeoJSONgetLayer 方法将这些 ID 作为一个参数:

var layerGroup = L.LayerGroup([marker, polygon]);

layerGroup.getLayer(24); // returns the marker
layerGroup.getLayer(25); // returns the polygon

您还可以轻松分配自己的 ID:

var marker = new L.Marker(...);
marker.id = 'foo';

var polygon = new L.Polygon(...);
polygon.id = 'bar';

然后像这样获取它们:

var layerGroup = L.LayerGroup([marker, polygon]);

layerGroup.eachLayer(function (layer) {
if (layer.id === 'foo') // it's the marker
if (layer.id === 'bar') // it's the polygon
});

您可以轻松地将其放入函数中并将其包含在 L.LayerGroup 中:

L.LayerGroup.include({
customGetLayer: function (id) {
for (var i in this._layers) {
if (this._layers[i].id == id) {
return this._layers[i];
}
}
}
});

var layerGroup = L.LayerGroup([marker, polygon]);

layerGroup.customGetLayer('foo'); // returns the marker
layerGroup.customGetLayer('bar'); // returns the polygon

编辑:在缩进编辑之前没有在您的示例中发现 ID。您还可以将其分配为示例中的选项,并创建自定义获取函数来检索图层:

L.LayerGroup.include({
customGetLayer: function (id) {
for (var i in this._layers) {
if (this._layers[i].options.id == id) {
return this._layers[i];
}
}
}
});

var layerGroup = L.LayerGroup([marker, polygon]);

layerGroup.customGetLayer('foo'); // returns the marker
layerGroup.customGetLayer('bar'); // returns the polygon

如果您需要识别层的类型,您可以使用 instanceof 来实现:

The instanceof operator tests whether an object has in its prototype chain the prototype property of a constructor.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof

var layerGroup = L.LayerGroup([marker, polygon]);

layerGroup.eachLayer(function (layer) {
if (layer instanceof L.Marker) // it's the marker
if (layer instanceof L.Polygon) // it's the polygon
});

但是请记住,当您发现自己在进行共同选择时,理想情况下应该将这些特征放在单独的图层/特征组中。

关于javascript - 在 Leaflet LayerGroup 中查找特定图层,其中图层是多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34322864/

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