2017-07-10 15 views
0

アプリケーションには、Bingマップを使用してポリゴンとポリゴンに関する情報を管理する画面があります。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

あなたのクリックイベントハンドラでは、他のポリゴンと同じ場所を有することができる新しいポリゴンを作成しますが、別のオブジェクトのどれもが少ないされています。削除したい実際のシェイプオブジェクトのインスタンスを渡す必要があります。コードの変更バージョンは次のとおりです。

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

ありがとうrbrundritt。私は今ポリゴンを削除することができます。また、entity.idを使ってentitycollectionからエンティティ/ポリゴンを見つけてそれを削除したい場合は、知りたいだけです。どうしたらいいですか? –

+0

コレクション内のすべての図形をループし、探している図形が見つかるまでプロパティ値をチェックしてから、コレクションのremove関数を使用してループを抜けます。 図形にエンティティプロパティを追加する代わりに、metadataプロパティを使用します。 Bing Maps APIは、Bing Mapsチームがこの名前を使用してアプリケーションを壊すことなく、IDなどのカスタムメタデータをシェイプに追加できるように、開発者向けのメタデータプロパティ名を特別に予約しています。エンティティのプロパティ名はBing Mapsチームによって使用されており、これを将来使用する際に問題が発生する可能性があります。 – rbrundritt

関連する問題