L'API Maps JavaScript utilizza i seguenti sistemi di coordinate:
- Valori di latitudine e longitudine, che fanno riferimento in modo univoco a un punto del mondo. (Google utilizza lo standard World Geodetic System WGS84.)
- Coordinate mondiali, che fanno riferimento in modo univoco a un punto sulla mappa.
- Coordinate di pixel, che fanno riferimento a un pixel specifico sulla mappa a un livello di zoom specifico.
- Coordinate dei riquadri, che fanno riferimento a un riquadro specifico sulla mappa a un livello di zoom specifico.
Coordinate mondiali
Ogni volta che l'API deve tradurre una località del mondo in una località su una mappa, prima converte i valori di latitudine e longitudine in una coordinata del mondo. L'API utilizza la proiezione del Mercator per eseguire questa traduzione.
Per praticità nel calcolo delle coordinate dei pixel (vedi sotto), supponiamo che una mappa a livello di zoom 0 sia un singolo riquadro delle dimensioni del riquadro di base. Definiamo poi le coordinate del mondo rispetto alle coordinate dei pixel a livello di zoom pari a 0, utilizzando la proiezione per convertire le latitudini e le longitudini in posizioni dei pixel su questo riquadro di base. La coordinata mondiale è un valore in virgola mobile misurato dall'origine della proiezione della mappa alla località specifica. Tieni presente che, poiché questo valore è una rappresentazione in virgola mobile, potrebbe essere molto più preciso rispetto alla risoluzione attuale dell'immagine della mappa visualizzata. Una coordinata mondiale è indipendente dal livello di zoom corrente, in altre parole.
Le coordinate mondiali in Google Maps vengono misurate a partire dall'origine della proiezione di Mercatore (l'angolo nord-ovest della mappa a 180 gradi di longitudine e circa 85 gradi di latitudine) e aumentano in direzione x
verso est (destra) e aumentano in direzione y
verso sud (verso il basso). Poiché il riquadro di base di Mercatore per Google Maps è di 256 x 256 pixel, lo spazio utilizzabile delle coordinate mondiali è {0-256}, {0-256}
.
Tieni presente che una proiezione di Mercatore ha una larghezza finita longitudinalmente ma un'altezza infinita in latitudine. Abbiamo tagliato le immagini della mappa base utilizzando la proiezione di Mercatore a circa +/- 85 gradi per rendere quadrata la forma della mappa risultante, il che consente una logica più semplice per la selezione dei riquadri. Tieni presente che una proiezione potrebbe produrre coordinate mondiali al di fuori dello spazio di coordinate utilizzabile della mappa base se, ad esempio, tracci molto vicino ai poli.
Coordinate pixel
Le coordinate di pixel fanno riferimento a un pixel specifico sulla mappa a un livello di zoom specifico, mentre le coordinate mondiali riflettono posizioni assolute su una determinata proiezione. Le coordinate dei pixel vengono calcolate utilizzando la seguente formula:
pixelCoordinate = worldCoordinate * 2zoomLevel
Dalla precedente equazione, tieni presente che ogni livello di zoom crescente
è due volte più grande in entrambe le direzioni x
e y
. Pertanto, ogni livello di zoom più elevato determina una risoluzione quattro
volte superiore rispetto al livello precedente. Ad esempio, a livello di zoom 1,
la mappa è composta da 4 riquadri di 256 x 256 pixel, con uno spazio di pixel
di 512 x 512. A livello di zoom 19, è possibile fare riferimento a ogni pixel x
e y
sulla mappa utilizzando un valore compreso tra 0 e 256 * 219.
Poiché le coordinate del mondo sono basate sulle dimensioni dei riquadri della mappa, la parte intera di una coordinata di pixel ha l'effetto di identificare il pixel esatto in quella posizione nel livello di zoom corrente. Tieni presente che per il livello di zoom 0, le coordinate dei pixel sono uguali alle coordinate del mondo.
Ora abbiamo un modo per indicare con precisione ogni località sulla mappa,
a ogni livello di zoom. L'API Maps JavaScript crea un'area visibile
in base al centro del livello di zoom della mappa (come LatLng
) e alle
dimensioni dell'elemento DOM contenitore, traduce questo riquadro di delimitazione in coordinate pixel. L'API determina quindi
in modo logico tutti i riquadri della mappa che si trovano all'interno dei limiti di pixel specificati. A ognuno di questi riquadri della mappa viene fatto riferimento utilizzando le
coordinate dei riquadri, che semplificano notevolmente la visualizzazione delle immagini
della mappa.
Coordinate dei riquadri
L'API non è in grado di caricare contemporaneamente tutte le immagini della mappa per livelli di zoom più elevati. L'API suddivide invece le immagini a ogni livello di zoom in una serie di riquadri di mappe, disposti logicamente in un ordine comprensibile all'applicazione. Quando una mappa scorre fino a una nuova posizione o a un nuovo livello di zoom, l'API determina quali riquadri sono necessari utilizzando le coordinate dei pixel e converte questi valori in un insieme di riquadri da recuperare. Le coordinate dei riquadri vengono assegnate utilizzando uno schema che rende logicamente facile determinare quale riquadro contiene le immagini di un determinato punto.
I riquadri di Google Maps sono numerati dalla stessa origine dei pixel. Per l'implementazione della proiezione di Mercatore da parte di Google, il riquadro di origine è sempre nell'angolo nord-ovest della mappa, con i valori x
che aumentano da ovest a est e i valori di y
aumentano da nord a sud. I riquadri vengono indicizzati utilizzando le coordinate di x,y
da quell'origine. Ad
esempio, al livello di zoom 2, quando la Terra è divisa in 16 riquadri,
ogni riquadro può essere referenziato da una coppia x,y
univoca:
Nota che dividendo le coordinate in pixel per la dimensione del riquadro (256) e prendendo le parti intere del risultato, si ottiene come sottoprodotto la coordinata del riquadro al livello di zoom corrente.
Esempio
L'esempio seguente mostra le coordinate per Chicago, IL: valori di latitudine/longitudine, coordinate mondiali, coordinate in pixel e coordinate dei riquadri. Utilizza il controllo zoom per visualizzare i valori delle coordinate a vari livelli di zoom.
Per vedere come sono state calcolate le coordinate, visualizza il codice.