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

Pab*_*ada 4 mapbox-gl-js

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

我有这层:

   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
        }
    });
Run Code Online (Sandbox Code Playgroud)

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

map.removeLayer('route')
Run Code Online (Sandbox Code Playgroud)

一切正常。

但是,当尝试再次添加同一层时,出现以下错误:

Error: There is already a source with this ID
Run Code Online (Sandbox Code Playgroud)

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

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

有人能帮我一下吗?

小智 15

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

if (map.getLayer(id)) {
  map.removeLayer(id);
}
if (map.getSource(id)) {
  map.removeSource(id);
}
Run Code Online (Sandbox Code Playgroud)


Pab*_*ada 13

我刚刚发现源的创建与图层中的ID相同,因此:

map.removeSource('route')
Run Code Online (Sandbox Code Playgroud)

完美地工作,可以完全删除图层和源。

  • 感谢您的发布。我编辑并添加了map.removeLayer()的额外步骤。如果我只是先执行了一个map.removeSource(),则Mapbox GL JS会抛出此错误。错误:“在使用图层“ route”时,无法删除源“ route”。” (3认同)

Elh*_*kim 5

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

map.removeLayer(id);
map.removeSource(id);
Run Code Online (Sandbox Code Playgroud)

在你的情况下id = 'route'