Карта Bing ShowInfoBox() всегда отображается в центре карты?

Код javascript прикреплен ниже. На карту Bing добавляются две канцелярские кнопки. Когда они наведены, описание отображается рядом с булавками. Добавляются две кнопки, и ShowInfoBox(shape) вызывается в событии click. Когда кнопки нажимаются, по какой-то причине информационное окно всегда всплывает из центра, независимо от того, где находятся канцелярские кнопки. Это известная ошибка? Может ли кто-нибудь предложить обходной путь?

<!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> 

person Jazure    schedule 18.05.2010    source источник
comment
Я не думаю, что вам нужно передавать эти два дополнительных параметра map.ShowInfoBox(), не так ли? Только форма...   -  person Crescent Fresh    schedule 18.05.2010


Ответы (1)


Дело не в том, что он не установит якорь, а в том, что якорь застревает на той широте/долготе, которую вы щелкнули первой. Попробуйте масштабировать между щелчками. Вы увидите, что это работает.

Что вам нужно сделать, так это добавить HideInfoBox() прямо перед показом.

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

 }

Просто примечание: установка ваших фигур в глобальном масштабе, а не прототипирование GetShapeByTitle() или что-то еще, вызовет у вас огорчение, если вы увеличите это. Если вы можете использовать VEMap.GetShapeByID(); и VEShape.GetID(); методы динамического извлечения данных формы, с ними (в долгосрочной перспективе) будет легче иметь дело.

person iivel    schedule 01.06.2010