无法从Bing地图中删除多边形

时间:2017-07-10 11:30:47

标签: javascript bing-maps

我的应用程序中有一个屏幕,我使用Bing地图管理多边形和与多边形相关的信息。

我想在有人点击多边形时显示多边形细节。所以我在多边形上添加了一个click事件,它的工作正常。

我还希望允许用户在点击事件后查看/修改其他信息时编辑多边形。因此,我计划在地图实体的点击事件后删除多边形,并将其添加到绘图管理器以进行进一步编辑。但是我无法从地图的实体中删除特定的多边形。我尝试准备相同的多边形并将其传递给地图的实体删除功能,但它不起作用。下面是相同的示例代码,我的应用程序是以角度开发的:

var map = new Microsoft.Maps.Map(document.getElementById('myMap'), {
    credentials: 'Your Bing Maps Key'
});

var polygon1 = new Microsoft.Maps.Polygon([
    new Microsoft.Maps.Location(center.latitude + 0.01, center.longitude - 0.03),
    new Microsoft.Maps.Location(center.latitude + 0.01, center.longitude - 0.11),
    new Microsoft.Maps.Location(center.latitude + 0.05, center.longitude - 0.07)
]);
polygon1.entity = { id: 1 };
map.entities.push(polygon1);

var polygon2 = new Microsoft.Maps.Polygon([
    new Microsoft.Maps.Location(center.latitude + 0.01, center.longitude + 0.03),
    new Microsoft.Maps.Location(center.latitude + 0.01, center.longitude + 0.11),
    new Microsoft.Maps.Location(center.latitude + 0.05, center.longitude + 0.07)
]);
polygon2.entity = { id: 2 };
map.entities.push(polygon2);    

Microsoft.Maps.Events.addHandler(polygon, 'click', function (e) {   
    var geoId = e.target.entity.id;
    //Here I want to find the polygon with provided Id and remove it so that I can add it to drawing manager for further modification
    //Code to remove the polygon
    var polygonToRemove = new Microsoft.Maps.Polygon([
        new Microsoft.Maps.Location(center.latitude + 0.01, center.longitude - 0.03),
        new Microsoft.Maps.Location(center.latitude + 0.01, center.longitude - 0.11),
        new Microsoft.Maps.Location(center.latitude + 0.05, center.longitude - 0.07)
    ]);
    polygonToRemove.entity = { id: 1 };
    map.entities.remove(polygonToRemove);
    //Code to add the polygon to drawing manager
});

1 个答案:

答案 0 :(得分:2)

在您的点击事件处理程序中,您正在创建一个新的多边形,该多边形可能与另一个多边形具有相同的位置,但它是一个不同的对象。您必须传入要删除的实际形状对象的实例,而不是它的副本。以下是代码的修改版本:

Microsoft.Maps.Events.addHandler(polygon, 'click', function (e) {   
    map.entities.remove(e.target);
});