Карта Bing ShowInfoBox () всегда отображается в центре карты? - PullRequest
0 голосов
/ 18 мая 2010

Код 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> 

1 Ответ

2 голосов
/ 01 июня 2010

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

Что вам нужно сделать, это добавить 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 (); методы динамического извлечения данных формы, с которыми (в долгосрочной перспективе) будет легче иметь дело.

...