访问Mapbox中要素组中图层的geojson属性

时间:2016-07-15 15:27:57

标签: leaflet mapbox geojson

我有一个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);
});

我还没有弄清楚如何做到这一点。我尝试过在线搜索,但由于我是新手,我可能还没有在我的搜索中使用正确的关键字。

1 个答案:

答案 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);
  });
});