Nel nostro tutorial precedente abbiamo esaminato come è possibile aggiungere marcatori e personalizzare i colori e i menu di una mappa di Google utilizzando l'API del servizio. Questo tutorial fa un passo in più, spiegando come è possibile creare la propria mappa personalizzata e copertura su una mappa di Google (come la mia mappa 1896 di Portsmouth).
In questo tutorial aggiungeremo una sovrapposizione delle previsioni del tempo alla mappa che abbiamo creato in precedenza. La mappa del tempo che uso è del tutto fittizia, ma le tecniche trattate ti daranno la libertà di creare ogni sorta di cose interessanti! Sarai in grado di costruire mappe storiche, mappe disegnate su misura, primi piani di aree specifiche come un campus universitario - la lista è infinita!
Alcune cose che devi sapere prima di iniziare:
Questo tutorial spiega ogni passaggio, inclusi gli strumenti software che sono (per fortuna!) Disponibili per automatizzare le cose e semplificare la vita. I file di origine per ogni passaggio sono disponibili nel pacchetto di download.
Per iniziare, il primo passo è creare un modello sul quale creare il proprio overlay.
Immagine del modello in cui crei la tua mappa. Questa immagine è in realtà 9984x11776 pixelIl tuo obiettivo è creare un modello in Photoshop (o un'applicazione grafica equivalente) che abbia esattamente le stesse dimensioni e la stessa forma della mappa di Google che stai per sovrapporre, quando è al suo livello il più alto livello di zoom. (maptiler.org è utile se non sei sicuro di quale sia il livello di zoom più alto di cui hai bisogno).
Per fare ciò, è possibile salvare una mappa modello utilizzando il mathup di Maptiler e quindi ingrandirla in Photoshop al livello di zoom massimo desiderato. Per esempio:
A questo punto, non ho intenzione di complicare le cose! Quindi, con una leggera modifica al tutorial precedente, ho modificato il livello di zoom massimo da 12 a 10 per darci una dimensione di file gestibile con cui lavorare.
Una volta che hai la tua mappa jpg utilizzando la procedura descritta sopra, aprila in Photoshop o nella tua applicazione grafica preferita.
Userai questa immagine come modello e disegnerai la tua mappa sopra di essa. Questo per garantire che la tua mappa si allinei perfettamente con la mappa di Google.
Dai un'occhiata all'immagine della mappa meteo che ho creato in questa fase, disponibile nel download sorgente.
Ci sono un paio di modi in cui puoi dividere la tua immagine per creare le tessere della mappa. Se vuoi un po 'di informazioni di base su ciò che stai facendo, continua a leggere. Altrimenti, se non ti interessa perché o come funziona, passa alla sezione successiva!
Un sistema di proiezione, nel senso geografico, è il modo in cui viene creata una mappa piatta da un oggetto rotondo, cioè il globo. Ci sono tutti i tipi di formule e algoritmi (francamente sconcertanti) usati per raggiungere questo obiettivo. Tutto ciò che devi sapere è che i diversi sistemi di proiezione danno origine a diverse mappe piane del mondo.
La proiezione di Mercatore (in alto) e la proiezione di Gall-Peters (in basso) creano mappe bidimensionali piuttosto diverse. (Le griglie delle immagini sopra non sono correlate alle tessere della mappa di Google, che sono quadrate).Per creare una sovrapposizione per una mappa di Google è necessario utilizzare il sistema "Spherical Mercator" che utilizza la proiezione di Mercator. Questo è definito come EPSG: 900913 o EPSG: 3857. Per saperne di più sui sistemi di proiezione, consulta la pagina Web di Tiles à la Google Maps.
Prima di poter generare le tue tessere, devi calcolare la posizione dei lati nord, sud, ovest ed est della mappa. Poiché stai utilizzando il sistema "Mercator sferico", questi devono essere in metri sferici anziché in latitudine o longitudine.
Puoi trovare questi valori di posizione usando questo mashup. Ho scoperto che il metodo più semplice è quello di ingrandire direttamente e trovare un lato alla volta. Quindi trova il valore per il lato ovest della mappa, prendi nota di esso, quindi trova il valore per il lato sud e così via.
Una volta che hai trovato questi quattro valori, ora puoi "affettare" la tua mappa in tessere. Ci sono un paio di opzioni disponibili.
Fortunatamente, il software MapTiler è davvero semplice da usare! Al momento di scrivere questo tutorial, MapTiler sta aggiornando il loro software. Ma indipendentemente dalla versione scaricata, questi sono i passaggi di base:
Nota: Se stai usando la nuova versione di MapTiler, c'è un trucco; le tessere della mappa sono filigranate. In alcuni casi, suppongo che in alcuni casi, forse per un progetto Uni o per un proof-of-concept tecnico, questo non sia comunque un problema. Tuttavia, ci sono un paio di modi per aggirare questo. Il modo più ovvio è comprare l'aggiornamento per $ 20, credo. L'altra opzione è usare lo script Python GDAL2Tiles. La mia preferenza personale è quella di passare all'aggiornamento perché preferirei dedicarmi alle cose creative piuttosto che sopportare le irritazioni legate alla creazione dell'ambiente di scripting, ma potresti sentirti diversamente.
Mancia: Se si riscontrano problemi nell'utilizzo del software MapTiler, il forum utente è estremamente utile.Un'alternativa a MapTiler è lo script GDAL2Tiles. Il software MapTiler è in realtà costruito sopra questo script, che viene eseguito attraverso l'interfaccia del prompt dei comandi.
GDAL2Tiles è lo script Python che si trova al centro della GUI di MapTiler. È possibile utilizzare questo script direttamente tramite l'interfaccia del prompt dei comandi.GDAL2Tiles offre ulteriori possibilità, ma è anche un po 'più complicato da usare; quindi continua a leggere solo se hai un senso di avventura!
La prima fase è la creazione dell'ambiente per eseguire lo script GDAL2Tiles. Il modo in cui lo fai dipende dal tuo sistema operativo. Se stai usando una macchina Windows a 32 bit (clicca qui se non sei sicuro), allora puoi usare OSGeo4W.
Se si utilizza una macchina Windows a 64 bit (fare clic qui se non si è sicuri), l'installazione è leggermente diversa. Queste istruzioni sono citate (con gentile concessione) direttamente dal blog di Jaerock Kwon, che merita pieno credito per aver fornito tali istruzioni dettagliate.
Quindi, supponendo che tu abbia superato il processo (talvolta traumatico!) Di configurazione dell'ambiente software GDAL2Tiles, è tempo di fare qualcosa con esso.
Il prompt dei comandi di GDAL. OSGeo4W sembra estremamente simile a questo. I comandi sono gli stessi per entrambi.Sia che tu abbia OSGeo4W o l'ambiente GDAL, il tuo prompt dei comandi dovrebbe apparire simile alla schermata precedente. Ora puoi iniziare a utilizzare lo script GDAL2Tiles.
Innanzitutto, è necessario navigare nella cartella in cui è salvata la mappa che si desidera tagliare. (Questi comandi sono utili per ottenere dove devi essere: dir
ti dà una lista di tutto nella directory corrente, CD
significa cambiare directory, CD…
significa spostare di un livello l'albero).
Una volta che sei nella cartella corretta, puoi iniziare a creare le tue tessere. Per creare la mappa dimostrativa in questo tutorial, questi sono i comandi che ho usato -
gdal_translate -of VRT -a_srs EPSG: 900913 -gcp 0 0 -910307.6791052371 8109796.717743561 -gcp 7248 0 196252.07012218982 8109796.717743561 -gcp 7248 10929 196252.07012218982 6438749.514630105 part2_rainfall_map.png out.vrt
gdal2tiles.py -p mercator -z 6-10 out.vrt
Per spiegare cosa stanno facendo questi comandi, vedere il gdal_translate
pagina e il gdal2tiles.py
pagina. Esiste anche un comando GDAL warp strettamente correlato, ma in questo caso non è necessario. Alcune cose da notare sono:
-GCP
le proprietà si riferiscono a tre angoli della tua mappa. La prima coppia di valori dopo ciascuno GCP
la proprietà si riferisce alle dimensioni in pixel del file immagine di input e la seconda coppia di valori sono le coordinate in metri sferici (non latitudine e longitudine - vedi sopra).Quindi, per applicare questo alla tua mappa:
gdal_translate -of VRT -a_srs EPSG: 900913 -gcp 0 0 ovest nord -gcp width_of_your_input_map_file_in_pixels 0 est nord -gcp width_of_your_input_map_file_in_pixels height_of_your_input_map_file_in_pixels east south your_input_file_name.png your_output_file_name.vrt
gdal2tiles.py -p mercator -z zoom_range name_of_output_file.vrt
Dopo aver sparato il secondo comando, il tuo computer prenderà vita e inizierà a tagliare la tua immagine per creare le tessere della mappa. Ti potrebbe piacere dare un'occhiata ai comandi esatti che ho digitato in OSGeo4W e negli ambienti GDAL se non sei sicuro di navigare tra le cartelle usando il prompt dei comandi.
Indipendentemente dal metodo utilizzato per generare le tue tessere, le cartelle generate saranno le stesse.
Tutte le tessere su una mappa di Google hanno un valore 'x' e 'y'. (Sì - ancora un altro sistema di coordinate diverso!) Il primo livello di cartelle è il livello di zoom, quindi all'interno del quale il livello successivo di cartelle è la coordinata 'x' e all'interno del quale il nome del file è la coordinata 'y'.
Se dai un'occhiata alla mappa su questo sito web dovresti vedere che i nomi delle tue tessere corrispondono. In altre parole, vai nella posizione desiderata, regola il livello di zoom in modo che corrisponda al nome della cartella, quindi guarda i valori di Google 'x' e 'y'. Dovresti vedere che corrispondono alla sottocartella e ai nomi dei file per le tessere della mappa corrispondenti.
Per ricontrollare le tessere è OK, consiglio vivamente di copiare una o due tessere generate per il livello di zoom più basso nel file della mappa (ad esempio il file di Photoshop) creato durante la fase precedente. Verifica che si adattino esattamente in cima alla tua mappa. Dai un'occhiata ai file sorgente che ho fornito per un esempio di questo.
Se tutto va bene allora - congratulazioni - il duro lavoro è fatto!
Oh caro. Questo accadrà se hai usato la versione precedente del software MapTiler o dello script GDAL2Tiles. I file (ma non le cartelle) sono denominati utilizzando la convenzione di denominazione TMS. Se guardi le tessere in questa pagina puoi vedere che ogni tessera ha due valori xey; vale a dire. una coppia di Google e una coppia di TMS. Abbiamo solo bisogno di rinominarli alla convenzione di denominazione delle mappe di Google.
Questa rinomina può essere eseguita manualmente, ma impiegherà troppo tempo per la maggior parte delle mappe. Fortunatamente, c'è un pratico script di shell che farà il lavoro per te. È necessario conoscere un po 'dei comandi di base di Linux, come cambiare la cartella. Prima di eseguire lo script della shell, crea una copia delle tue tessere su cui lavorare.
#! / bin / sh per thisPath in 'ls -d * / * / *' fai thisFile = $ thisPath # * / * / oldY = $ thisFile% .png zoomX = $ thisPath% / * zoom = $ thisPath% / * / * newY = $ (((1<Copia e incolla lo script sopra nel Blocco note e salvalo con il nome "rinomina" e l'estensione ".sh". Quando salvi il file "sh" nel blocco note, assicurati che "tutti i file" accanto a "salva come tipo" sia selezionato e inserisci il nome tra virgolette, ad es. “Rename.sh”.
Se si utilizza un Mac, questo script di shell può essere eseguito in Terminale (selezionare applicazioni poi Utilità poi terminale).
Se si è su una macchina Windows, quindi per eseguire script di shell (o file '.sh') è necessario utilizzare Cygwin, che è un ambiente simile a Linux per Windows:
- Scarica e installa Cygwin
- Copia il file 'rename.sh' che hai appena salvato nella cartella cygwin \ bin.
- Avvia Cygwin.
- Sposta in cygwin \ bin cartella. (vale a dire.
CD
significa cambiare directory,CD…
significa muovere l'albero di un livello, els
indica i file e le cartelle nella directory corrente.)- Rendi eseguibile rename.sh eseguendo
chmod 755 rename.sh
- È necessario anche convertirlo in un file Linux prima di eseguirlo altrimenti si otterranno errori di tipo "\ r" causati dalle interruzioni di riga. Quindi corri assicurati di essere ancora nel cygwin \ bin cartella ed eseguire
d2u rename.sh
- Quindi vai alla cartella che contiene le tue tessere (vedi la schermata sopra).
- Quindi per eseguire lo script, digitare
rename.sh
Dopo che lo script della shell è stato eseguito, puoi controllare che abbia fatto il lavoro dando un'altra occhiata ai tuoi file. Controlla se i loro nomi ora corrispondono alle coordinate di Google su questa pagina.
Se si confrontano i nomi dei file nei file "Parte 3" e "Parte 4" nei file di origine, è possibile vedere la differenza.
Comprimere i titoli della mappa
Per assicurarti che la tua mappa funzioni nel modo più fluido possibile, puoi comprimere i riquadri della mappa.
Ci sono varie utilità di compressione gratuite per le immagini png, ma ho faticato (e non sono riuscito) a trovarne una completamente libera e al lavoro. Ad esempio, il popolare software PNGGauntlet non ha conservato la struttura delle cartelle, mentre altre utilità gratuite avevano un limite sul numero massimo di file.
Alla fine ho dovuto mordere il proiettile e acquistare il software PNGOUTWin. Questo ha costato circa £ 10, che è un vero affare dato il fatto che è stato salvato! PNGOUTWin preserva entrambi la struttura del file e ti consente di comprimere tutti i tuoi file contemporaneamente.
Se usi PNGOUTWin, è piuttosto intuitivo. La mia unica parola di avvertimento è che dovresti fare una copia delle tue tessere e quindi eseguire il software sulla copia. Inoltre, fai attenzione che il software si avvii letteralmente non appena hai selezionato la cartella!
JavaScript Magic per portare tutto insieme
Ok, siamo quasi arrivati. Tutto ciò che rimane è la piccola questione di allegare le tue bellissime nuove mappe alla tua mappa di Google.
Il codice di base
Innanzitutto, dai un'occhiata a un semplice esempio di una sovrapposizione di mappe affiancate (i file di origine sono disponibili dal link nella parte superiore di questa pagina).
Se si ingrandisce e rimpicciolisce, la sovrapposizione della mappa rimane inserita.
// impostazione della mappa delle precipitazioni overlay var rainMapOverlay = new google.maps.ImageMapType (getTileUrl: function (coord, zoom) return 'tiles / rainfall' + '/' + zoom + '/' + coord.x + '/' + coord.y + '. png';, tileSize: new google.maps.Size (256, 256));Questo snippet utilizza la classe ImageMapType per creare l'overlay personalizzato. Il
coord.x
si riferisce al nome della cartella e alcoord.y
si riferisce al nome del file. Questi sono uniti nel codice per creare il percorso per ogni tessera.Agganciarlo alla mappa del festival del Regno Unito
Questo è il prodotto finale che stai mirando. Per creare questo, puoi usare le stesse tecniche spiegate verso la fine del tutorial precedente.
Per prima cosa creiamo una variabile (
rainfallOverlayToggle
) per stabilire se la sovrapposizione meteo è attualmente visualizzata o meno. E, quindi creando una nuova opzione nelhandelRequests
funzione per affrontare la situazione quando il pulsante dell'ombrello (ombrello
) viene cliccato.// Visualizza la mappa delle precipitazioni quando si fa clic sul pulsante Unbrella e rimosso se già visualizzato. altrimenti se (buttonPressed === "rainfall") // Se la mappa delle precipitazioni NON sta mostrando all'avvio allora mostrala ... if (rainfallOverlayToggle === 0) // Sovrappone la mappa delle precipitazioni sulla parte superiore del festival di Google mapMap.overlayMapTypes .insertAt (0, rainMapOverlay); // Mostra la chiave meteo. festivalMap.controls [google.maps.ControlPosition.TOP_LEFT] .push (weatherKeyDiv); rainfallOverlayToggle = 1; // Se la mappa delle precipitazioni sta già mostrando, nascondila ... else // rimuovi la mappa sovrapposta. festivalMap.overlayMapTypes.removeAt (0, rainMapOverlay); // rimuove la chiave meteo festivalMap.controls [google.maps.ControlPosition.TOP_LEFT] .pop (weatherKeyDiv); rainfallOverlayToggle = 0;
Cosa Avanti?
Ben fatto per aver raggiunto la fine! Se avete domande, per favore chiedete via nei commenti. Il prossimo tutorial vedrà la connessione all'API di Flickr, che ti permetterà di catturare automaticamente le foto da Flickr e visualizzarle sulla tua mappa.
Crediti d'immagine
- Mappa di proiezione di Mercatore - Wikipedia
- Mappa di proiezione di Gall-Peters - Wikipedia