2012-03-06 14 views
10

scroll gmapsGoogle Maps: carta di scorrimento di programmazione di x pixel

C'è un modo semplice per scorrere una mappa di Google a livello di codice di x pixel?

posso solo pensare di utilizzare setCenter, ma il problema è che avrei dovuto calcolare la nuova posizione (lat/lng) a seconda del livello di zoom ...

Riuscite a pensare a qualcosa di diverso? Dicendomi che non è possibile con l'API di Google Maps è una risposta valida se ne sei abbastanza sicuro.

ps: sto usando Gmaps4rails, quindi se riesci a pensare a un modo per farlo con la gemma, sarebbe bello. (come ad esempio la regolazione dei limiti di un sottoinsieme della mappa.) Perché alla fine il mio obiettivo è impedire al menu di nascondere alcuni indicatori. Avrei bisogno di cambiare il viewport della mappa, se questo ha senso, in modo che si adatti ai marcatori nell'area arancione, non alla mappa completa.

fit markers


Soluzione:

@Shane migliore, grande, l'idea funziona perfettamente, ma credo che la soluzione è stata per Google API v2, giusto? Ecco come ho fatto per V3:

var point = map.getCenter(); 

var overlay = new google.maps.OverlayView(); 
overlay.draw = function() {}; 
overlay.setMap(map); 

var projection = overlay.getProjection(); 

var pixelpoint = projection.fromLatLngToDivPixel(point); 
pixelpoint.x += my_value; # or .y 

point = projection.fromDivPixelToLatLng(pixelpoint); 

map.setCenter(point); 

Se qualcuno sa di una soluzione migliore con API v3, ci dice a questo proposito.

risposta

12

Date un'occhiata alla oggetto di proiezione: http://code.google.com/apis/maps/documentation/javascript/reference.html#Projection

In primo luogo si avrebbe bisogno di ottenere il centro della mappa.

var point = map.getCenter(); 

Convertire la latitudine in un valore in punti.

var pixelpoint = projection.fromLatLngToPoint(point); 

Aggiungi il valore ai valori del punto.

pixelpoint.x = pixelpoint.x + yourvalue; 
//or 
pixelpoint.y = pixelpoint.y + yourvalue; 

Converti in un latLng.

var newpoint = projection.fromPointToLatLng(pixelpoint); 

Impostare il nuovo centro con il nuovo valore.

map.setCenter(newpoint); 

Non ho provato quanto sopra ma dovrebbe funzionare.

+0

Ho intenzione di provare questo, grazie. – Robin

+0

Guardando la tua foto e cercando di capire meglio il tuo problema. Forse starai meglio con i fitbounds. http://stackoverflow.com/a/2496558/787921 –

+0

Beh ... i limiti sono definiti dai miei indicatori. È sempre lo stesso per un determinato set di marcatori.Quello che non riesco a fare, è in sostanza la modifica del viewport della mappa, per escludere la parte superiore, dove si trova il menu, in modo che il metodo fitBounds della mappa possa fare il proprio lavoro nel modo che preferisco. (perché sto già usando fitBounds per iniziare, ma alcuni indicatori potrebbero essere nascosti dal menu). – Robin

3

Credo che alla ricerca di questo:

var panListener = google.maps.event.addListenerOnce(map, 'bounds_changed', function(event) { 
        map.panBy(0,-90); 
       }); 

setTimeout(function() { 
    google.maps.event.removeListener(panListener) 
}, 2000); 

In questo caso, si muove la mappa sud con 90px.

Problemi correlati