L'API Maps JavaScript utilizza i seguenti sistemi di coordinate:
- Valori di latitudine e longitudine che fanno riferimento in modo univoco a un punto sulla Terra. Google utilizza lo standard World Geodetic System WGS84.
- Coordinate mondiali, che fanno riferimento in modo univoco a un punto sulla mappa.
- Coordinate dei 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à nel mondo in una località su una mappa, traduce prima i valori di latitudine e longitudine in una coordinata mondiale. L'API utilizza la proiezione Mercatore per eseguire questa trasformazione.
Per praticità, nel calcolo delle coordinate dei pixel (vedi di seguito), assumiamo che una mappa a livello di zoom 0 sia un singolo riquadro delle dimensioni del riquadro di base. Definiamo quindi le coordinate mondiali relative alle coordinate dei pixel a livello di zoom 0, utilizzando la proiezione per convertire le latitudini e le longitudini in posizioni dei pixel su questo riquadro base. Questa coordinata mondiale è un valore di punto fluttuante misurato dall'origine della proiezione della mappa alla posizione specifica. Tieni presente che, poiché questo valore è un valore a virgola mobile, potrebbe essere molto più preciso della risoluzione corrente dell'immagine della mappa visualizzata. In altre parole, una coordinata mondiale è indipendente dal livello di zoom corrente.
Le coordinate mondiali in Google Maps vengono misurate 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 (a destra) e in direzione y
verso sud (giù). Poiché il
tile di Google Maps di Mercatore di base è di 256 x 256 pixel, lo spazio di coordinate mondiali utilizzabile è {0-256}, {0-256}
.
Tieni presente che una proiezione di Mercatore ha una larghezza finita in longitudine, ma un'altezza infinita in latitudine. Tagliamo le immagini della mappa di base utilizzando la proiezione di Mercatore a circa +/- 85 gradi per rendere la forma della mappa risultante quadrata, il che consente una logica più semplice per la selezione delle schede. 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 dei pixel
Le coordinate dei pixel fanno riferimento a un pixel specifico sulla mappa a un livello di zoom specifico, mentre le coordinate mondiali riflettono le posizioni assolute su una determinata proiezione. Le coordinate dei pixel vengono calcolate utilizzando la seguente formula:
pixelCoordinate = worldCoordinate * 2zoomLevel
Dall'equazione precedente, tieni presente che ogni livello di zoom crescente è due volte più grande sia in direzione x
sia in direzione y
. Pertanto, ogni livello di zoom superiore comporta 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é abbiamo basato le coordinate mondiali sulle dimensioni dei riquadri della mappa, la parte intera di una coordinata in 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 in pixel sono uguali alle coordinate mondiali.
Ora abbiamo un modo per indicare con precisione ogni posizione sulla mappa,
a ogni livello di zoom. L'API JavaScript di Maps crea un viewport
in base al centro del livello di zoom della mappa (come LatLng
) e alle
dimensioni dell'elemento DOM contenente, e
traduce questa area delimitata in coordinate in pixel. L'API determina quindi
in modo logico tutti i riquadri della mappa che si trovano all'interno dei limiti di pixel specificati. A ciascuno 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 può caricare tutte le immagini della mappa contemporaneamente per i livelli di zoom più elevati. L'API suddivide invece le immagini a ogni livello di zoom in un insieme di riquadri della mappa, disposti in modo logico in un ordine compreso dall'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 dato punto.
I riquadri in Google Maps sono numerati dalla stessa origine di quelli per i 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 x,y
di questa origine. Ad esempio, a livello di zoom 2, quando la Terra è suddivisa in 16 riquadri, a ogni riquadro può essere associato un riferimento costituito da una coppia x,y
univoca:
Tieni presente che dividendo le coordinate dei pixel per le dimensioni del riquadro (256) e tenendo conto delle parti intere del risultato, produci come sottoprodotto la coordinata del riquadro al livello di zoom corrente.
Esempio
L'esempio seguente mostra le coordinate di Chicago, Illinois: valori di latitudine/longitudine, coordinate mondiali, coordinate in pixel e coordinate dei riquadri. Utilizza il controllo dello zoom per visualizzare i valori delle coordinate a diversi livelli di zoom.
Per vedere come sono state calcolate le coordinate, visualizza il codice.