Generare tessere di mappa
Introduzione
Sezione intitolata “Introduzione”QCAD include due strumenti da riga di comando per creare tessere di mappa da usare con visualizzatori di mappe online come Leaflet. Leaflet è una libreria JavaScript per lavorare con mappe interattive in un browser.
Presentare un disegno online
Sezione intitolata “Presentare un disegno online”Il caso d’uso più semplice per una mappa online consiste nel fornire ai visitatori di un sito web una vista interattiva e ingrandibile di un disegno.
Ecco un esempio che genera le tessere di mappa per un dato file di disegno:
dwg2maptiles -z 0-6 -c -b white -hq-postfix=@2x -a -o path/to/output/directory drawing.dxfLo switch -z specifica i livelli di zoom da generare, qui dal livello di zoom 0 al livello di zoom 6. Ciò significa che, partendo dal livello 0 (intero disegno o zoom automatico), l’utente può ingrandire 6 volte fino a raggiungere il limite. Ogni volta che l’utente ingrandisce, 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 ulteriori livelli di zoom richiede più tempo e spazio su disco. Ogni livello di zoom aggiuntivo richiede in genere quattro volte più tempo e spazio su disco per la generazione rispetto al precedente.
Le tessere vengono generate nella cartella di output data (-o) con la struttura di cartelle e i nomi di file standard per le tessere di mappa (z/x/y.png).
Nell’esempio precedente, vogliamo che il disegno sia reso su 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 tessere di alta qualità (hq, alta risoluzione, retina) a 512x512px oltre alle tessere a risoluzione standard a 256x256px.
Per aumentare ulteriormente la qualità, usiamo anche lo switch -a per l’antialiasing.
Vedi l’esempio con Leaflet online
Generare tessere di mappa georeferenziate
Sezione intitolata “Generare tessere di mappa georeferenziate”dwg2maptiles può essere usato anche per generare overlay esatti per mappe del mondo. A tal fine, un disegno di solito deve essere trasformato da un sistema di coordinate locale in coordinate Web Mercator, come comunemente usate dalle mappe online.
QCAD Professional include uno strumento da riga di comando separato per trasformare i disegni da un sistema di riferimento delle coordinate (CRS) a un altro: dwgmapconvert.
dwgmapconvert è tipicamente usato per convertire tutte le coordinate in un dato file di disegno da un sistema di coordinate locale noto al sistema di coordinate EPSG:3857 (a volte chiamato “Web Mercator”). Questo è il sistema di coordinate usato dalla maggior parte delle mappe online, ad esempio Google Maps o Mapbox. Per usare un disegno come input per dwg2maptiles e produrre tessere di mappa georeferenziate, il disegno deve essere nel sistema di coordinate EPSG:3857.
Nel sistema di coordinate EPSG:3857, l’intera mappa del mondo rientra in un quadrato di 20037508.3427892m al livello di zoom 0. Se un disegno viene convertito in questo sistema di coordinate, il disegno viene trasformato in modo tale da rientrare in quel quadrato del mondo e da trovarsi alle corrette coordinate mondiali proiettate.
Ad 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.dxfPoiché le proiezioni cartografiche sono di solito 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 lo switch -segment-length viene fornito, dwgmapconvert esegue questa segmentazione automaticamente, usando la lunghezza di segmento data. La lunghezza di segmento è specificata in unità di disegno del disegno originale (qui metri).
-crs-in è usato per specificare il sistema di coordinate di input, qui EPSG:2056.
-crs-out è usato per specificare il sistema di coordinate di output, che deve essere EPSG:3857 se l’output deve essere usato successivamente con dwg2maptiles.
dwgmapconvert supporta LV95 come input e WebMercator come output.
Altri sistemi di coordinate verranno aggiunti nelle versioni future o possono essere aggiunti dall’utente.
Per aggiungere il supporto per un nuovo sistema di coordinate, è necessario fornire due equazioni per convertire le coordinate dal nuovo sistema di coordinate a WGS84 (longitudine/latitudine, come le coordinate GPS).
Nuovi sistemi di coordinate possono essere aggiunti a un file di configurazione JSON chiamato CRS.json, situato nella cartella “scripts” dell’installazione di QCAD usata. Ecco un esempio di file CRS.json che configura il sistema di coordinate LV95. Per poter usare LV95 come input per lo strumento dwgmapconvert, dobbiamo fornire la sezione “toWgs84” con equazioni per la conversione delle coordinate x e y. Qui usiamo anche due variabili ausiliarie, x_ e y_, che devono essere inizializzate nell’equazione x per essere accessibili in entrambe le equazioni.
Potremmo anche fornire una sezione “fromWgs84” per consentire la conversione da altri sistemi di coordinate a LV95. Entrambe le sezioni sono facoltative, a seconda della direzione di conversione che si desidera supportare.
{ "CRS" : [ { "id" : "EPSG:2056 CH1903+ / LV95", "toWgs84" : { "x": "x_ = (y-1200000)/1000000; y_ = (x-2600000)/1000000; (2.6779094 + 4.728982*y_ + 0.791484*y_*x_ + 0.1306*y_*x_*x_ - 0.0436*y_*y_*y_) * 100 / 3", "y": "(16.9023892 + 3.238272*x_ - 0.270978*y_*y_ - 0.002528*x_*x_ - 0.0447*y_*y_*x_ - 0.0140*x_*x_*x_) * 100 / 36" }, "aliases" : [ "LV95", "Swiss" ] } ]}Generare le tessere di mappa
Sezione intitolata “Generare le tessere di mappa”Una volta convertito il disegno in coordinate EPSG:3857, possiamo usare dwg2maptiles per generare le tessere per il livello overlay in Leaflet:
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -b transparent -o path/to/output/directory drawing_epsg3857.dxfNotate che dobbiamo passare lo switch -web-mercator a dwg2maptiles per comunicargli che non deve eseguire uno zoom automatico, ma generare un overlay di mappa in coordinate EPSG:3857 esatte come presenti nel file.
-skip-empty indica a dwg2maptiles di non generare tessere che non contengono alcuna parte del disegno. Senza questo switch, verranno generate 2^zoomLevel tessere per livello di zoom. Ciò equivarrebbe a 4’194’304 tessere per il livello di zoom 22. Poiché un disegno overlay molto probabilmente copre solo una parte molto piccola della mappa del mondo, questo switch dovrebbe essere sempre usato quando si creano mappe overlay.
-b transparent imposta lo sfondo su trasparente, in modo che la mappa possa essere usata come overlay per una mappa del mondo esistente (ad esempio Google Map, Mapbox, ecc.). Per controllare il colore in cui vengono visualizzate le linee nere o bianche, lo sfondo può essere impostato su nero trasparente o bianco trasparente con -b "#00ffffff" (sfondo bianco trasparente, linee nere) o -b "#00000000" (sfondo nero trasparente, linee bianche) rispettivamente. In questo caso, assicuratevi di passare anche lo switch -c per forzare una correzione automatica del colore.
L’argomento -hq-postfix=@2x può essere usato per generare tessere ad alta risoluzione (512px) oltre alle normali tessere da 256px. Il valore “@2x” è consigliato e ampiamente usato per le tessere ad alta risoluzione, anche in Leaflet. Con questo switch, per ogni tessera a bassa risoluzione “N.png” viene creata una tessera ad alta risoluzione “[email protected]”.
Usare più processi (e core della CPU)
Sezione intitolata “Usare più processi (e core della CPU)”La generazione di tessere di mappa può essere un’attività a uso intensivo della CPU, a seconda dei livelli di zoom, della complessità del disegno e di altre impostazioni.
Per generare le tessere di mappa più velocemente, potete suddividere il lavoro tra più core della CPU disponibili. Per questa funzione, dwg2maptiles offre lo switch -s per generare solo una porzione (slice) delle tessere necessarie. Lo switch -s si aspetta due parametri separati da virgola: la porzione da generare e il numero totale di porzioni usate. Ad esempio, -s 1,4 genererebbe la prima porzione di quattro in totale. Per generare tutte le tessere dell’esempio precedente usando quattro core della CPU, potreste 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 &waitNaturalmente, potreste anche suddividere le attività per livelli di zoom o usare le porzioni solo per i livelli di zoom più alti e un singolo processo per tutti i livelli di zoom più bassi (più economici), ecc.
Esempio
Sezione intitolata “Esempio”Un esempio interattivo fornisce due livelli overlay alla mappa del cantone svizzero di Zurigo: l’area forestale protetta e i corridoi faunistici. I dati originali erano in coordinate EPSG:2056 (LV95) e sono stati trasformati in EPSG:3857 usando dwgmapconvert.