如何在地方图层中的geojson源下删除要素集合中的特定要素?

时间:2019-09-17 07:03:24

标签: mapbox

我明白了:

map.addLayer({
  "id": "places",
  "type": "symbol",
  "source": {
    "type": "geojson",
    "data": {
      "type": "FeatureCollection",
      "features": features
    }
  },
  "layout": {
    "icon-image": "{icon}-15",
    "text-field": "{title}",
    "text-font": ["Open Sans Semibold", "Arial Unicode MS Bold"],
    "text-offset": [0, 0.6],
    "text-anchor": "top"
  }
});

features是这样的对象数组:

{
  "id": SOME_ID,
  "type": "Feature",
  "properties": {
    "title": SOME_TITLE,
    "icon": "monument"
  },
  "geometry": {
    "type": "Point",
    "coordinates": SOME_COORDINATES
  }
}

我要删除此特定功能,不在整个图层中放置,该怎么做?

我尝试为每个要素创建具有预定义ID的指定图层,但是 当尝试使用map.removeLayer(SOME_ID)删除它时,这告诉我 图层ID不存在。

如何从Mapbox的要素集中删除特定的geojson要素,而又不删除缺点 层,只是json数据?

1 个答案:

答案 0 :(得分:1)

如果您想在地图上隐藏地图项,则无需从源中将其删除。您可以使用filter过滤掉此功能,因此它不会在地图上呈现。

考虑示例:

    map.addLayer({
      id: 'points',
      type: 'circle',
      source: {
        type: 'geojson',
        data: {
          type: 'FeatureCollection',
          features: [
            {
              type: 'Feature',
              id: 1,
              properties: {},
              geometry: {
                type: 'Point',
                coordinates: [127.61718749999999, 66.51326044311185]
              }
            },
            {
              type: 'Feature',
              id: 2,
              properties: {},
              geometry: {
                type: 'Point',
                coordinates: [79.1015625, 72.50172235139388]
              }
            },
            {
              type: 'Feature',
              id: 3,
              properties: {},
              geometry: {
                type: 'Point',
                coordinates: [61.17187499999999, 31.952162238024975]
              }
            }
          ]
        }
      },
      filter: ['!=', '$id', 3]
    });

这将呈现所有功能,但id = 3的功能除外。

您还可以使用map.setFilter方法设置这种过滤器。

map.setFilter('my-layer', ['==', 'name', 'USA']);

修改

如果您确实要从源中删除特定功能,则可以从features数组中过滤该功能,并使用setData更新源:

map.getSource('places').setData({
  "type": "FeatureCollection",
  features
});