Mapbox没有此ID的来源

时间:2016-12-29 18:41:23

标签: mapbox mapbox-gl mapbox-gl-js

我想删除Mapbox地图上的源和图层。我设法删除了除了我添加到Mapbox地图的第一个源和图层以外的所有源和图层。

请注意,我不擅长使用jQuery $ .post。

以下是我添加所有源和图层的方法。

$.post('ajax/marker.php', function(data)
{
    var firstSplit = data.split(",");

    for(i=0;i<firstSplit.length-1;i++)
    {
        var secondSplit = firstSplit[i].split("|");
        var id = secondSplit[0];
        var lat = secondSplit[1];
        var lng = secondSplit[2];

        var point = {
            "type": "Point",
            "coordinates": [lat, lng]
        };

        map.addSource(id, { type: 'geojson', data: point });
        map.addLayer({
            "id": id,
            "type": "symbol",
            "source": id,
            "layout": {
                "icon-image": "airport-15"
            }
        }); 
    }
}); 

请记住,我设法查看Mapbox地图上的所有来源和图层。 只是我无法删除我添加到地图中的第一个源和图层。我希望有人对这个问题有一些想法。感谢。

我在循环中使用了以下两个语句来删除源和层。

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

我做了一个测试,手动删除第一个源和图层,如下所示,但它不起作用。

map.removeSource('1612280004A');
map.removeLayer('1612280004A');

但是,它适用于下一个源和层。

3 个答案:

答案 0 :(得分:5)

根据您发布的内容,我最好的猜测是,在仍有相关资源的情况下,您无法删除该图层。尝试颠倒两个陈述的顺序:

map.removeLayer('1612280004A'); map.removeSource('1612280004A');

答案 1 :(得分:0)

我的GeoJson共享了相同的ID。同时删除图层和源代码可以解决此问题

fab.setOnClickListener { view ->
    Log.d("MainActivity", "fab click")

    AWSMobileClient.getInstance().apply {

        showSignIn(
            this@MainActivity,
            SignInUIOptions.builder().apply {canCancel(true) }.build(),
            object: Callback<UserStateDetails> {
                override fun onResult(result: UserStateDetails?) {
                    Log.d(TAG, "signin success")
                }

                override fun onError(e: Exception?) {
                    Log.d(TAG, "signin failed")
                }
            })

    }
}

答案 2 :(得分:0)

在删除之前,请检查源和图层是否存在,例如:

if (map.getLayer('points')){
    map.removeLayer('points');
}

if (map.getSource('point')){
    map.removeSource('point');
}