如何使用带有纯GeoJSON数据的leaflet-pip插件?

时间:2016-05-17 10:55:07

标签: javascript leaflet point-in-polygon

我使用leaflet-pip时遇到问题: 我从这里得到geojson数据:http://polygons.openstreetmap.fr/get_geojson.py?id=1320234&params=0

我应该如何用这样的数据调用leafletPip.pointInLayer? 我有几次尝试,但它返回空数组,但我知道这些层中有一些标记。

1 个答案:

答案 0 :(得分:0)

为了以防万一,请先注意Leaflet-PIP需要将L.GeoJSON组作为第二个参数传递。从GeoJSON数据(L.geoJson(myGeoJSONdata))构建一个数据是微不足道的。实际上,它甚至只需要一个L.LayerGroup

然后,似乎Leaflet-PIP不处理嵌套的图层组。

您的数据由MultiPolygons组成,Leaflet在L.GeoJSON组内转换为L.Polygon组。因此,Leaflet-PIP不会处理它们。

所以你只需要'#34; flatten"您的小组才能正确使用Leaflet-PIP。解析该组并将所有非组图层提取到另一个组中。

var gjLayer = L.geoJson(myGeoJSONdata).addTo(map);

var groupOfNonGroup = L.layerGroup();

function copyToGroupOfNonGroup(group) {
  group.eachLayer(function (layer) {
    if (layer instanceof L.LayerGroup) {
      copyToGroupOfNonGroup(layer);
    } else {
      layer.addTo(groupOfNonGroup);
    }
  });
}

copyToGroupOfNonGroup(gjLayer);

var results = leafletPip.pointInLayer([lng, lat], groupOfNonGroup);

演示:https://plnkr.co/edit/6hRKHHtvWOVdWg4jZ8AJ?p=preview