Tutorial: Generazione di tessere di mappa

Traduzione automatica

Tabella dei contenuti

 

Introduzione

QCAD è dotato di due strumenti a riga di comando per creare piastrelle di mappe da utilizzare con i visualizzatori di mappe online come Leaflet. Leaflet è una libreria JavaScript per lavorare con mappe interattive in un browser. 

Presentare un disegno online

Il caso d'uso più semplice per una mappa online è quello di fornire ai visitatori di un sito web una vista interattiva e zoomabile di un disegno.

Ecco un esempio che genera le tessere della mappa per qualsiasi file di disegno:

dwg2maptiles -z 0-6 -c -b white -hq-postfix=@2x -a -o path/to/output/directory drawing.dxf

L'opzione -z specifica i livelli di zoom da generare, in questo caso dal livello di zoom 0 al livello di zoom 6. Ciò significa che a partire dal livello 0 (disegno intero con zoom automatico), l'utente può ingrandire 6 volte fino a raggiungere il limite. Ogni volta che l'utente esegue lo zoom, il disegno viene ingrandito di un fattore 2, quindi con 6 livelli di zoom, l'utente può ingrandire di un fattore 2^6 (=64). La generazione di più livelli di zoom richiede più tempo e spazio su disco. Ogni livello di zoom aggiuntivo richiede in genere un tempo e uno spazio su disco quattro volte superiore a quello del livello precedente.

Le tessere vengono generate nella directory di output indicata (-o) con la struttura di directory e i nomi di file standard per le tessere delle mappe (z/x/y.png).

Nell'esempio precedente, vogliamo che il disegno sia reso su uno sfondo bianco (-b white). Le linee bianche dovrebbero essere corrette in nero per assicurarsi che tutte le linee siano visibili (-c).

L'argomento -hq-postfix=@2x indica a dwg2maptiles di generare piastrelle di alta qualità (hq, high-res, retina) a 512x512px insieme alle piastrelle a risoluzione standard a 256x256px.

Per aumentare ulteriormente la qualità, utilizziamo anche lo switch -a per l'antialiasing.

Ecco il risultato di una visualizzazione interattiva del disegno generata con dwg2maptiles:

 

Generazione di piastrelle di mappe georeferenziate

dwg2maptiles può essere usato anche per generare sovrapposizioni esatte per le mappe del mondo. A questo scopo, un disegno deve essere trasformato da un sistema di coordinate locali in coordinate Web Mercator, come quelle comunemente utilizzate dalle mappe online.

QCAD Professional è dotato di uno strumento a riga di comando separato per trasformare i disegni da un sistema di riferimento di coordinate (CRS) a un altro: dwgmapconvert.

dwgmapconvert si usa di solito per convertire tutte le coordinate di un dato file di disegno da un sistema di coordinate locale noto al sistema di coordinate EPSG:3857 (talvolta chiamato "Web Mercator"). Questo è il sistema di coordinate utilizzato dalla maggior parte delle mappe online, ad esempio Google Maps o mapbox. Per utilizzare un disegno come input per dwg2maptiles e produrre piastrelle di mappa georeferenziate, il disegno deve essere nel sistema di coordinate EPSG:3857.

Nel sistema di coordinate EPSG:3857 l'intera mappa del mondo si inserisce in un quadrato di 20037508,3427892 m a livello di zoom 0. Se si converte un disegno in questo sistema di coordinate, il disegno viene trasformato in modo da adattarsi al quadrato del mondo e da posizionare il disegno alle coordinate mondiali corrette e proiettate.

Per esempio, se un disegno è stato creato in EPSG:2056 (anche LV95, il sistema di coordinate locale svizzero), può essere trasformato in EPSG:3857 con dwgmapconvert come segue:

dwgmapconvert -segment-length=0.5 -crs-in=EPSG:2056 -crs-out=EPSG:3857 -f -o drawing_epsg3857.dxf drawing_epsg2056.dxf

Siccome le proiezioni delle mappe sono solitamente non lineari, le curve e le linee più lunghe devono essere suddivise in piccoli segmenti di linea che possono poi essere proiettati in modo non lineare. Se si fornisce l'opzione -segmento-lunghezza, dwgmapconvert esegue automaticamente questa segmentazione, utilizzando la lunghezza del segmento indicata. La lunghezza del segmento è specificata in unità di disegno del disegno originale (qui Meter).

-crs-in è usato per specificare il sistema di coordinate di input, qui EPSG:2056.

-crs-out è usato per specificare il sistema di coordinate di uscita, che deve essere EPSG:3857 se l'output deve essere usato in seguito con dwg2maptiles.

Generazione delle piastrelle della mappa

Una volta convertito il disegno in coordinate EPSG:3857, possiamo usare dwg2maptiles per generare le piastrelle per il livello di sovrapposizione in leaflet:

dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -b transparent -o path/to/output/directory drawing_epsg3857.dxf

Nota che dobbiamo passare lo switch -web-mercator a dwg2maptiles per fargli sapere che non deve eseguire uno zoom automatico ma generare una sovrapposizione della mappa nelle esatte coordinate EPSG:3857 presenti nel file.

-skip-empty indica a dwg2maptiles di non generare piastrelle che non contengono alcuna parte del disegno. Senza questo interruttore, verranno generate 2^zoomLevel per ogni livello di zoom. Ciò significa 4'194'304 tile per il livello di zoom 22. Poiché è molto probabile che un disegno di sovrapposizione copra solo una piccola parte della mappa del mondo, questo interruttore dovrebbe essere sempre usato quando si creano mappe di sovrapposizione.

-b transparent imposta lo sfondo su trasparente, in modo che la mappa possa essere usata come sovrapposizione a una mappa del mondo esistente (ad esempio Google Map, mapbox, ecc.). Per controllare il colore in cui vengono visualizzate le linee bianche o nere, lo sfondo può essere impostato rispettivamente su nero trasparente o bianco trasparente con -b "#00ffffff" (sfondo bianco trasparente, linee nere) o -b "#00000000" (sfondo nero trasparente, linee bianche). Assicuratevi di passare anche lo switch -c in questo caso per forzare la correzione automatica del colore.

L'argomento -hq-postfix=@2x può essere usato per generare piastrelle ad alta risoluzione (512px) oltre alle normali piastrelle da 256px. Il valore "@2x" è raccomandato e ampiamente utilizzato per le tessere ad alta risoluzione, anche in leaflet. Con questo interruttore, per ogni tile a bassa risoluzione "N.png", viene creato un tile ad alta risoluzione "[email protected]".

Utilizzo di più processi (e core della CPU)

Generare le tessere di una mappa può essere un'attività intensiva per la CPU, a seconda dei livelli di zoom, della complessità del disegno e di altre impostazioni.

Per generare più velocemente le tessere della mappa, è possibile dividere il lavoro tra più core della CPU disponibili. Per questa funzione, dwg2maptiles offre l'opzione -s per generare solo una fetta delle tessere richieste. L'opzione -s richiede due parametri separati da virgole: la fetta da generare e il numero totale di fette utilizzate. Ad esempio, -s 1,4 genera la prima fetta di quattro fette in totale. Per generare tutti i riquadri dell'esempio precedente utilizzando quattro core della CPU, si potrebbe eseguire:

dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 1,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 2,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 3,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 4,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &
wait

Ovviamente si potrebbero anche dividere i compiti per livelli di zoom o usare slices solo per i livelli di zoom più alti e un singolo processo per tutti i livelli di zoom più bassi (più economici), ecc.

Esempio

In questo esempio, forniamo due livelli di sovrapposizione alla mappa del cantone svizzero di Zurigo: l'area forestale protetta e i corridoi faunistici. I dati originali sono stati forniti in coordinate EPSG:2056 (LV95) e sono stati trasformati in EPSG:3857 utilizzando dwgmapconvert.