J'utilise l'API Google Maps (v2) pour afficher une superposition de pays sur une carte du monde. Les données proviennent d'un fichier KML, qui contient des coordonnées pour les polygones ainsi qu'une description HTML pour chaque pays. Cette description est affichée dans la bulle de dialogue "fenêtre d'information" lorsque vous cliquez sur ce pays. J'ai eu quelques problèmes au début car les fenêtres d'information ne se développaient pas à la taille du contenu HTML qu'elles contenaient, donc les plus longues débordaient (cela semble être un problème courant). J'ai pu contourner ce problème en réinitialisant la fenêtre d'information à une hauteur déterminée comme suit:API Google Maps - hauteur et panoramique de la fenêtre d'information
GEvent.addListener(map, "infowindowopen", function(iw) { iw = map.getInfoWindow(); iw.reset(iw.getPoint(), iw.getTabs(), new GSize(300, 295), null, null); });
Pas idéal, mais cela fonctionne. Cependant, maintenant, lorsque les fenêtres d'informations sont ouvertes, la partie supérieure est parfois masquée par les bords de la carte, car la carte ne permet pas d'afficher tout le contenu.
Mes questions:
Est-il possible d'obtenir les fenêtres d'informations à utiliser automatiquement une hauteur appropriée à leur contenu, pour éviter d'avoir à fixer à une hauteur de pixel de jeu?
Si la fixation de la hauteur est la seule option, y a-t-il un moyen d'amener la carte à une position plus appropriée lorsque les fenêtres d'informations s'ouvrent? Je sais que la classe map a une méthode panTo(), mais je ne vois pas comment calculer les coordonnées correctes.
Voici mon code complet init:
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);