Карта Bing ShowInfoBox() всегда отображается в центре карты?
Код javascript прилагается ниже. Две кнопки добавляются на карту Bing. Когда они наведены, описание показывается рядом с булавками. Добавляются две кнопки и вызывается ShowInfoBox(форма) для события 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 ответ
Дело не в том, что он не установит привязку, а в том, что привязка привязана к тому значку широты / долготы, который вы щелкнули первым. Попробуйте увеличить масштаб между щелчками. Вы увидите, что это работает.
Что вам нужно сделать, это добавить HideInfoBox() прямо перед показом.
функция ShowInfoBox(sh) { // Якорный параметр, похоже, не имеет никакого эффекта??? HideInfoBox(); map.ShowInfoBox(форма, новый VELatLong (sh.Latitude, sh.Longitude)); }
Просто примечание: настройка ваших форм в глобальном, а не прототипирование GetShapeByTitle() или чего-то еще вызовет у вас горе, если вы увеличите масштаб. Если вы можете использовать VEMap.GetShapeByID(); и VEShape.GetID(); методы динамического извлечения данных формы, с которыми (в конечном счете) будет легче иметь дело.