Bing地图Api清除一层

Bing Maps Api clear a layer

本文关键字:一层 地图 Api 清除 Bing      更新时间:2023-09-26

我有一个工作良好的页面,它加载了一个Bing Map并创建了一个层,然后用多边形填充。然后,我需要重新加载生成多边形的JSON数据,这再次起作用,但数据随后被添加到另一层,因此显示在顶部。我试过删除图层、清除图层等,但似乎什么都不起作用。

有什么想法吗。

这是完成所有任务的函数。。。

        function AddData() {
        dataLayer = new Microsoft.Maps.Layer();
        Microsoft.Maps.loadModule('Microsoft.Maps.GeoJson', function () {
            var featureCollection = Microsoft.Maps.GeoJson.read(json, {
                polygonOptions: {
                    strokeColor: 'LightSkyBlue',
                    strokeThickness: 2
                }
            });
            for (var i = 0; i < featureCollection.length; i++) {
                var fillColour = featureCollection[i].metadata.FillColor;
                featureCollection[i].setOptions({ fillColor: fillColour });
                Microsoft.Maps.Events.addHandler(featureCollection[i], 'click', displayClickBox);
                Microsoft.Maps.Events.addHandler(featureCollection[i], 'mouseover', displayMouseOverBox);
                Microsoft.Maps.Events.addHandler(featureCollection[i],'mouseout', displayMouseOut);
                dataLayer.add(featureCollection[i], 0);
            }
            map.layers.insert(dataLayer);
        });
    }
        var getJson = function () {
        var onContentComplete = function (response) {
            //Load the JSON data into the local variable for use latter in the project...
            json = response.data;
            //load the map now that we have the polygon data...
            AddData();
        };
        var onError = function (reason) {
            //An error has occured so display a message to the user...
            $scope.error = "Server communication error please try again...";
            //Log the error to the console for admin debug...
            console.log(reason.data);
        };
        //Load the JSON for the map polygons into memory ready for display...
        $http.get("../JSON/MapData.json")
            .then(onContentComplete, onError);
    }

正如我所说的,我已经尝试使用首先清除该层

dataLayer.clear();

但这似乎毫无作用。

请帮帮我,因为我已经为此工作了好几个小时了。

感谢

悬崖。

根据事物的声音,你希望所有数据都在一个层中渲染,但它却在渲染两个或更多层。发生这种情况是因为每次调用AddData函数时都要创建一个新的dataLayer实例。此外,这会覆盖dataLayer的本地变量,从而丢失对试图清除/删除的原始层的引用。如果要清除或删除图层,请在初始化新图层之前执行此操作。尝试在AddData函数的顶部添加以下内容:

if(dataLayer){
   map.layers.remove(dataLayer);
}

或者,通过清除层(如果存在)或创建层(如果不存在)来重用该层:

if(dataLayer){
    dataLayer.clear();
}else{
    dataLayer = new Microsoft.Maps.Layer();
}