C'è il another thread sull'argomento che è anche molto buono. Il problema che dovevo risolvere era che invece di impostare i limiti manualmente e controllare il contenimento del centro, volevo un limite impostato sul caricamento della pagina, quindi consentire il trascinamento fino al bordo se ingrandito.
Così ho impostato i limiti del panning sul caricamento della mappa, una volta. Poi controllo se la mappa è ancora allo zoom massimo e in tal caso, restituire il centro iniziale. Se ingrandito, voglio eseguire una panoramica sull'EDGE dei limiti iniziali, non solo per controllare se CENTER è contenuto, perché ciò estenderebbe il panning consentito della metà del viewport.
Sfortunatamente, anche se questo ha portato a termine il lavoro e funziona bene quando si effettua il paning lentamente, è un po 'a scatti se si esegue una panoramica veloce.
Se avete suggerimenti su come questo può essere evitato, sarei grato.
map = new google.maps.Map(// defaults
document.getElementById("map22"),
{
disableDefaultUI : true,
zoomControl : true,
zoom : 7,
minZoom : 7,
maxZoom : 10,
center : new google.maps.LatLng(
64.99473104134819,
-19.22332763671875
),
mapTypeId : google.maps.MapTypeId.ROADMAP
}
);
function borders(){
return {
maxLat : map.getBounds().getNorthEast().lat(),
maxLng : map.getBounds().getNorthEast().lng(),
minLat : map.getBounds().getSouthWest().lat(),
minLng : map.getBounds().getSouthWest().lng(),
center : map.getCenter()
}
}
google.maps.event.addListenerOnce(map,'idle',function() {
limit = borders();
});
google.maps.event.addListener(map,'drag',function() {
if(map.getZoom() == 7) return map.setCenter(limit.center);
current = borders();
if(current.maxLng < limit.maxLng && current.minLng > limit.minLng) activeCenterLng = current.center.lng();
if(current.maxLat < limit.maxLat && current.minLat > limit.minLat) activeCenterLat = current.center.lat();
map.setCenter(
new google.maps.LatLng(
activeCenterLat,
activeCenterLng
)
);
});
Sulle mappe grandi (quando il contenitore non è troppo piccolo) di default ci sono anche i controlli che consentono all'utente di navigare (pannello di navigazione). L'uso potrebbe premere la freccia sinistra/destra. Quindi i tuoi eventi non sono sufficienti per risolvere tutti i problemi. Dovrai prendere l'evento inattivo. Un buon esempio è qui http://code.google.com/p/gmaps-api-issues/issues/detail?id=1371 qualche ragazzo isaac.z.foster lo ha pubblicato. Ma in ogni caso la logica con l'azione e poi il ripristino è pessima. Anche la cosa più brutta che per impostazione predefinita google map mostra a livello di zoom massimo diversi mondi. E i marcatori sono duplicati. Il codice Google è davvero molto orribile. –
Anche riguardo a minZoomLevel. C'è l'opzione mappa minzoom. Non è necessario gestire l'evento. –