我明白了:
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数据?
答案 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
});