我的应用程序中有一个屏幕,我使用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
});
答案 0 :(得分:2)
在您的点击事件处理程序中,您正在创建一个新的多边形,该多边形可能与另一个多边形具有相同的位置,但它是一个不同的对象。您必须传入要删除的实际形状对象的实例,而不是它的副本。以下是代码的修改版本:
Microsoft.Maps.Events.addHandler(polygon, 'click', function (e) {
map.entities.remove(e.target);
});