API карт Google - высота информационного окна и панорамирование - PullRequest
0 голосов
/ 06 апреля 2010

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

1 Ответ

0 голосов
/ 28 мая 2010

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

...