API карт Google - высота информационного окна и панорамирование

Я использую API карт Google (v2) для отображения наложения страны на карту мира. Данные поступают из файла KML, который содержит координаты полигонов, а также HTML-описание для каждой страны. Это описание отображается в речевом пузыре «информационного окна» при нажатии на эту страну.

Сначала у меня были некоторые проблемы, так как информационные окна не расширялись до размера содержимого HTML, которое они содержали, поэтому более длинные окна выходили за края (это, кажется, обычная проблема). Я смог обойти это, сбросив информационное окно на определенную высоту следующим образом:

GEvent.addListener(map, "infowindowopen", function(iw) { iw = map.getInfoWindow(); iw.reset(iw.getPoint(), iw.getTabs(), new GSize(300, 295), null, null); });

Не идеально, но работает. Однако теперь, когда информационные окна открыты, их верхняя часть иногда закрывается краями карты, так как карта не перемещается в положение, в котором можно просмотреть все содержимое.

Итак, мои вопросы:

  1. Есть ли способ заставить информационные окна автоматически использовать высоту, соответствующую их содержимому, чтобы избежать необходимости фиксировать заданную высоту в пикселях?

  2. Если фиксация высоты является единственным вариантом, есть ли способ заставить карту перемещаться в более подходящее положение при открытии информационных окон? Я знаю, что класс карты имеет метод panTo(), но я не вижу способа вычислить правильные координаты.

Вот мой полный код инициализации:

google.load("maps", "2.x");

// Call this function when the page has been loaded
function initialize() {
  var map = new google.maps.Map2(document.getElementById("map"), {backgroundColor:'#99b3cc'});

  map.addControl(new GSmallZoomControl());

  map.setCenter(new google.maps.LatLng(29.01377076013671, -2.7866649627685547), 2);

  gae_countries = new GGeoXml("http://example.com/countries.kmz");
  map.addOverlay(gae_countries);

  GEvent.addListener(map, "infowindowopen", function(iw) { iw = map.getInfoWindow(); iw.reset(iw.getPoint(), iw.getTabs(), new GSize(300, 295), null, null); });
}
google.setOnLoadCallback(initialize);

person Tim Fountain    schedule 06.04.2010    source источник


Ответы (1)


В конце концов я решил эту проблему, удалив прослушиватель изменения размера и добавив некоторый текст в начало всплывающей подсказки, который затем был скрыт с помощью CSS. Потребовались некоторые пробы и ошибки, чтобы получить правильную высоту. Не идеальное решение, но оно будет работать до тех пор, пока будущие версии API не предоставят немного больше контроля.

person Tim Fountain    schedule 28.05.2010