2017-07-10 1 views
0

J'ai un écran dans mon application d'où je gère les polygones et des informations relatives aux polygones en utilisant la carte Bing. Je voulais afficher les détails du polygone lorsque quelqu'un cliquait sur les polygones. J'ai donc ajouté un événement click sur les polygones et son fonctionnement correct.Impossible de supprimer un polygone de la carte Bing

Je veux également permettre à l'utilisateur d'éditer le polygone tout en regardant/modifiant les autres informations après l'événement de clic. J'ai donc prévu de supprimer le polygone après l'événement click des entités de la carte et de l'ajouter au gestionnaire de dessin pour une nouvelle édition. Cependant, je ne suis pas en mesure de supprimer un polygone particulier des entités de la carte. J'ai essayé de préparer le même polygone et de le passer à la fonction de suppression des entités de la carte, mais cela ne fonctionne pas. Ci-dessous un exemple de code pour même et mon application est développée dans angulaire:

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 
}); 

Répondre

1

Dans votre gestionnaire d'événements clic vous créez un nouveau polygone qui peut avoir les mêmes endroits que un autre polygone, mais est un rien d'autre objet moins . Vous devez passer dans une instance de l'objet de forme réel que vous voulez supprimer pas une copie de celui-ci. Voici une version modifiée de votre code:

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

Merci rbrundritt. Je suis capable d'enlever les polygones maintenant. Je voulais juste savoir, si je veux trouver une entité/polygone de entitycollection en utilisant entity.id, puis le supprimer. Comment puis-je le faire? –

+0

Parcourez toutes les formes de la collection et vérifiez la valeur de la propriété jusqu'à ce que vous trouviez la forme que vous recherchez, puis utilisez la fonction de suppression de la collection et sortez de la boucle. Au lieu d'ajouter une propriété d'entité aux formes, utilisez la propriété metadata. L'API Bing Maps a spécifiquement réservé le nom de propriété des métadonnées aux développeurs afin qu'ils puissent ajouter des métadonnées personnalisées telles qu'un ID à une forme sans risque que l'équipe Bing Maps n'utilise ce nom et ne casse les applications. Le nom de la propriété de l'entité est utilisé par l'équipe de Bing Maps et il pourrait y avoir des problèmes avec l'utilisation future. – rbrundritt