我有一个GEOJSON,我在我的Mapbox地图中添加到功能组中,如下所示:
var featureCollection = {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"properties": {
"id": 1
},
"geometry": {
"type": "Point",
"coordinates": [0, 0]
}
},{
"type": "Feature",
"properties": {
"id": 2
},
"geometry": {
"type": "Point",
"coordinates": [30, 30]
}
},{
"type": "Feature",
"properties": {
"id": 3
},
"geometry": {
"type": "Point",
"coordinates": [-30, -30]
}
}]
};
var geojson = L.geoJson(featureCollection);
var featureGroup = L.featureGroup().addTo(map);
featureGroup.addLayer(geojson);
现在,我希望在循环通过featuregroup时访问每个图层的id属性,以便我可以将它作为参数传递给另一个函数。对于featurelayer,我可以使用以下内容轻松访问它:
var featureLayer = L.mapbox.featureLayer(featureCollection).addTo(map);
featureLayer.eachLayer(function (layer) {
layer.on('click', function (e) {
console.log('Clicked feature ID: ' + e.target.feature.properties.id);
});
});
但我希望能够在功能组内循环时访问它,而且我希望能够在没有“点击”的情况下进行访问。或任何此类事件。例如,理想情况下我会使用这样的东西:
featureGroup.eachLayer(function (layer) {
var id = layer.feature.properties.id;
testfunction(id);
});
我还没有弄清楚如何做到这一点。我尝试过在线搜索,但由于我是新手,我可能还没有在我的搜索中使用正确的关键字。
答案 0 :(得分:2)
geojson
嵌套在featureGroup
中,因此当您的eachLayer
函数运行时,它不会对geojson
中的各个要素进行操作,而是对geojson
进行操作本身。要提取每个要素的id
属性,您需要更深入一级并迭代geojson
中的要素。
幸运的是,the L.GeoJson
class也支持eachLayer
方法(因为它是L.FeatureGroup
的扩展,它本身是L.LayerGroup
的扩展名)。要打印每个功能的id
,您可以直接在eachLayer
上使用geojson
方法:
geojson.eachLayer(function (layer) {
var id = layer.feature.properties.id;
testfunction(id);
});
或者,如果您在L.GeoJson
内嵌套了一堆featureGroup
个对象,则可以使用:
featureGroup.eachLayer(function (layer) {
layer.eachLayer(function (layer) {
var id = layer.feature.properties.id;
testfunction(id);
});
});