2010-05-18 5 views
0

Le code javascript est joint ci-dessous. Deux punaises sont ajoutées à une carte Bing. Quand ils sont planés, la description est affichée à côté des épingles. Deux boutons sont ajoutés et ShowInfoBox (forme) est appelée sur l'événement click. Lorsque les boutons sont cliqués, pour une raison quelconque, l'infobox apparaît toujours à partir du centre, peu importe où sont les punaises. Est-ce un bug connu? Quelqu'un peut-il suggérer une solution de contournement?Bing Map ShowInfoBox() apparaît toujours au centre de la carte?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <title></title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2"></script> 
    <script type="text/javascript"> 
    var shape; 
    var shape1; 

var map = null; 
var infobox = "You can add html codes into the info box or change the style of the info box. You can design and show any info box you want!<br>"; 

function ShowInfoBox(sh) 
{ 
    // The anchor param does not seem to have any effect ??? 
    map.ShowInfoBox(sh, new VELatLong(sh.Latitude, sh.Longitude), new VEPixel(0, 0)); 

} 

function HideInfoBox() 
{ 
    map.HideInfoBox(); 
} 


function GetMap() 
{ 
    map = new VEMap('myMap'); 

    map.LoadMap(new VELatLong(47.610377, -122.200679), 14, VEMapStyle.Road, false, VEMapMode.Mode2D, true); 

    shape = new VEShape(VEShapeType.Pushpin, map.GetCenter()); 


    shape.SetTitle("<h2>Custom Pin0</h2>"); 
    shape.SetDescription(infobox); 

    //Add the shape the the map 
    map.AddShape(shape); 

    shape1 = new VEShape(VEShapeType.Pushpin, new VELatLong(47.612379, -122.201677)); 

    shape1.SetTitle("<h2>Custom Pin1</h2>"); 
    shape1.SetDescription(infobox); 

    //Add the shape the the map 
    map.AddShape(shape1); 
} 

</script> 
</head> 
<body onload="GetMap();"> 
    <div id='myMap' style="position:relative; width:400px; height:400px;"></div> 
    <input type="button" value="1" onclick="ShowInfoBox(shape);"> 
    <input type="button" value="2" onclick="ShowInfoBox(shape1);"> 
</body> 
</html> 
+0

Je ne pense pas que vous avez besoin de passer ces deux paramètres supplémentaires à 'map.ShowInfoBox()' et vous? Seule la forme ... –

Répondre

2

Il est pas qu'il ne sera pas mis l'ancre, il est que l'ancre est collée sur quel lat/long vous avez cliqué sur le premier. Essayez de zoomer entre les clics. Vous verrez que ça fonctionne.

Ce que vous devez faire est de lancer HideInfoBox() juste avant le spectacle.

 
function ShowInfoBox(sh) 
{ 
    // The anchor param does not seem to have any effect ??? 
    HideInfoBox(); 
    map.ShowInfoBox(shape,new VELatLong(sh.Latitude, sh.Longitude)); 

} 

Juste une note: la définition de vos formes dans un monde plutôt que le prototypage d'un GetShapeByTitle() ou quelque chose vous causera du chagrin si vous redimensionnez cela. Si vous pouvez utiliser le VEMap.GetShapeByID(); et le VEShape.GetID(); méthodes pour récupérer dynamiquement par des données de forme, il sera (à long terme) plus facile à traiter.

Questions connexes