Я использую 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); });
Не идеально, но работает. Однако теперь, когда информационные окна открыты, их верхняя часть иногда закрывается краями карты, так как карта не перемещается в положение, в котором можно просмотреть все содержимое.
Итак, мои вопросы:
Есть ли способ заставить информационные окна автоматически использовать высоту, соответствующую их содержимому, чтобы избежать необходимости фиксировать заданную высоту в пикселях?
Если фиксация высоты является единственным вариантом, есть ли способ заставить карту перемещаться в более подходящее положение при открытии информационных окон? Я знаю, что класс карты имеет метод 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);