Я использую 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);