Mapbox GL Js:添加和删除GeoJSON源和图层

时间:2018-04-14 23:03:33

标签: mapbox-gl-js

我在mapbox gl中添加和删除图层时遇到问题。

我有这一层:

Counter

然后我通过执行以下操作删除它:

from collections import Counter

s = 'AAAAATTT'
print([(k*2, v - 1) for k, v in Counter(list(s)).items() if v > 1])

#output: [('AA', 4), ('TT', 2)]

一切正常。

但是,当尝试再次添加同一层时,我收到以下错误:

   map.addLayer({
        "id": "route",
        "type": "line",
        "source": {
            "type": "geojson",
            "data": {
                "type": "Feature",
                "properties": {},
                "geometry": {
                    "type": "LineString",
                    "coordinates": [
                        [-122.48369693756104, 37.83381888486939],
                        [-122.48348236083984, 37.83317489144141],
                        [-122.48339653015138, 37.83270036637107],
                        [-122.48356819152832, 37.832056363179625],
                        [-122.48404026031496, 37.83114119107971],
                        [-122.48404026031496, 37.83049717427869],
                        [-122.48348236083984, 37.829920943955045],
                        [-122.48356819152832, 37.82954808664175],
                        [-122.48507022857666, 37.82944639795659],
                        [-122.48610019683838, 37.82880236636284],
                        [-122.48695850372314, 37.82931081282506],
                        [-122.48700141906738, 37.83080223556934],
                        [-122.48751640319824, 37.83168351665737],
                        [-122.48803138732912, 37.832158048267786],
                        [-122.48888969421387, 37.83297152392784],
                        [-122.48987674713133, 37.83263257682617],
                        [-122.49043464660643, 37.832937629287755],
                        [-122.49125003814696, 37.832429207817725],
                        [-122.49163627624512, 37.832564787218985],
                        [-122.49223709106445, 37.83337825839438],
                        [-122.49378204345702, 37.83368330777276]
                    ]
                }
            }
        },
        "layout": {
            "line-join": "round",
            "line-cap": "round"
        },
        "paint": {
            "line-color": "#888",
            "line-width": 8
        }
    });

即使我添加了一个图层。我不知道如何删除源代码,因为源代码没有ID。

我的最终结果是能够通过单击按钮添加和删除此图层。

有人可以帮我吗?

3 个答案:

答案 0 :(得分:6)

我刚刚发现创建的源代码具有与图层中相同的ID,所以:

map.removeSource('route')

完美地完全移除了图层和来源。

答案 1 :(得分:1)

您应该先删除图层,然后再删除其源。

map.removeLayer(id);
map.removeSource(id);

对于您的情况id = 'route'

答案 2 :(得分:0)

...并尝试删除源/层之前,先检查它们是否存在

if (map.getLayer(id)) {
  map.removeLayer(id);
}
if (map.getSource(id)) {
  map.removeSource(id);
}