Ga naar inhoud

Kaarttegels genereren

QCAD wordt geleverd met twee opdrachtregelprogramma’s om kaarttegels te maken voor gebruik met online kaartweergaven zoals Leaflet. Leaflet is een JavaScript-bibliotheek om met interactieve kaarten in een browser te werken.

Het eenvoudigste gebruiksscenario voor een online kaart is om bezoekers van een website een interactieve, zoombare weergave van een tekening te bieden.

Hier is een voorbeeld dat de kaarttegels voor een willekeurig tekeningbestand genereert:

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

De schakelaar -z geeft de te genereren zoomniveaus op, hier van zoomniveau 0 tot zoomniveau 6. Dit betekent dat de gebruiker, uitgaande van niveau 0 (hele tekening of automatische zoom), 6 keer kan inzoomen totdat de limiet is bereikt. Elke keer dat de gebruiker inzoomt, wordt de tekening met een factor 2 vergroot, zodat de gebruiker met 6 zoomniveaus met een factor 2^6 (=64) kan inzoomen. Het genereren van meer zoomniveaus vergt meer tijd en schijfruimte. Elk extra zoomniveau vergt doorgaans vier keer zoveel tijd en schijfruimte om te genereren als het vorige.

De tegels worden gegenereerd in de opgegeven uitvoermap (-o) met de standaardmapstructuur en bestandsnamen voor kaarttegels (z/x/y.png).

In het bovenstaande voorbeeld willen we dat de tekening op een witte achtergrond wordt gerenderd (-b white). Witte lijnen moeten naar zwart worden gecorrigeerd om ervoor te zorgen dat alle lijnen zichtbaar zijn (-c).

Het argument -hq-postfix=@2x vertelt dwg2maptiles om hogekwaliteitstegels (hq, hoge resolutie, retina) van 512x512px te genereren naast de tegels met standaardresolutie van 256x256px.

Om de kwaliteit verder te verhogen, gebruiken we ook de schakelaar -a voor antialiasing.

Bekijk het voorbeeld online met Leaflet

dwg2maptiles kan ook worden gebruikt om exacte overlays voor wereldkaarten te genereren. Hiervoor moet een tekening gewoonlijk worden getransformeerd van een lokaal coördinatensysteem naar Web Mercator-coördinaten, zoals die vaak door online kaarten worden gebruikt.

QCAD Professional wordt geleverd met een apart opdrachtregelprogramma om tekeningen van het ene coördinatenreferentiesysteem (CRS) naar het andere te transformeren: dwgmapconvert.

dwgmapconvert wordt doorgaans gebruikt om alle coördinaten in een gegeven tekeningbestand van een bekend, lokaal coördinatensysteem om te zetten naar het coördinatensysteem EPSG:3857 (soms “Web Mercator” genoemd). Dit is het coördinatensysteem dat door de meeste online kaarten wordt gebruikt, bijvoorbeeld Google Maps of Mapbox. Om een tekening als invoer voor dwg2maptiles te gebruiken en georefereerde kaarttegels te maken, moet de tekening in het coördinatensysteem EPSG:3857 staan.

In het coördinatensysteem EPSG:3857 past de hele wereldkaart bij zoomniveau 0 in een vierkant van 20037508.3427892m. Als een tekening naar dit coördinatensysteem wordt omgezet, wordt de tekening zo getransformeerd dat ze in dat wereldvierkant past en dat de tekening zich op de juiste, geprojecteerde wereldcoördinaten bevindt.

Als een tekening bijvoorbeeld is gemaakt in EPSG:2056 (ook LV95, het lokale Zwitserse coördinatensysteem), kan ze met dwgmapconvert als volgt naar EPSG:3857 worden getransformeerd:

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

Aangezien kaartprojecties gewoonlijk niet-lineair zijn, moeten krommen en langere lijnen worden opgesplitst in kleine lijnsegmenten die vervolgens op niet-lineaire wijze kunnen worden geprojecteerd. Als de schakelaar -segment-length wordt opgegeven, voert dwgmapconvert deze segmentatie automatisch uit met de opgegeven segmentlengte. De segmentlengte wordt opgegeven in tekeningeenheden van de oorspronkelijke tekening (hier meter).

-crs-in wordt gebruikt om het invoercoördinatensysteem op te geven, hier EPSG:2056.

-crs-out wordt gebruikt om het uitvoercoördinatensysteem op te geven, dat EPSG:3857 moet zijn als de uitvoer later met dwg2maptiles moet worden gebruikt.

dwgmapconvert biedt ondersteuning voor LV95 als invoer en WebMercator als uitvoer.

Andere coördinatensystemen worden in toekomstige releases toegevoegd of kunnen door de gebruiker worden toegevoegd.

Om ondersteuning voor een nieuw coördinatensysteem toe te voegen, moeten twee vergelijkingen worden verstrekt om de coördinaten van het nieuwe coördinatensysteem om te zetten naar WGS84 (lengtegraad/breedtegraad, zoals GPS-coördinaten).

Nieuwe coördinatensystemen kunnen worden toegevoegd aan een JSON-configuratiebestand genaamd CRS.json, dat zich in de map “scripts” van de gebruikte QCAD-installatie bevindt. Hier is een voorbeeld van een CRS.json-bestand dat het coördinatensysteem LV95 configureert. Om LV95 als invoer voor het dwgmapconvert-programma te kunnen gebruiken, moeten we de sectie “toWgs84” verstrekken met vergelijkingen voor de omzetting van de x- en y-coördinaten. Hier gebruiken we ook twee hulpvariabelen, x_ en y_, die in de x-vergelijking moeten worden geïnitialiseerd om in beide vergelijkingen toegankelijk te zijn.

We zouden ook een sectie “fromWgs84” kunnen verstrekken om de omzetting van andere coördinatensystemen naar LV95 mogelijk te maken. Beide secties zijn optioneel, afhankelijk van de omzettingsrichting die u wilt ondersteunen.

{
"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" ]
}
]
}

Zodra we de tekening naar EPSG:3857-coördinaten hebben omgezet, kunnen we dwg2maptiles gebruiken om de tegels voor de overlaylaag in Leaflet te genereren:

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

Merk op dat we de schakelaar -web-mercator aan dwg2maptiles moeten meegeven om aan te geven dat het geen automatische zoom moet uitvoeren, maar een kaartoverlay in exacte EPSG:3857-coördinaten moet genereren zoals aanwezig in het bestand.

-skip-empty vertelt dwg2maptiles om geen tegels te genereren die geen enkel deel van de tekening bevatten. Zonder deze schakelaar worden er per zoomniveau 2^zoomLevel tegels gegenereerd. Dat zouden 4’194’304 tegels zijn voor zoomniveau 22. Aangezien een overlaytekening zeer waarschijnlijk slechts een heel klein deel van de wereldkaart beslaat, zou deze schakelaar altijd moeten worden gebruikt bij het maken van overlaykaarten.

-b transparent stelt de achtergrond in op transparant, zodat de kaart als overlay voor een bestaande wereldkaart kan worden gebruikt (bijv. Google Map, Mapbox, enz.). Om te bepalen in welke kleur zwarte of witte lijnen worden weergegeven, kan de achtergrond worden ingesteld op zwart transparant of wit transparant met respectievelijk -b "#00ffffff" (wit transparante achtergrond, zwarte lijnen) of -b "#00000000" (zwart transparante achtergrond, witte lijnen). Zorg er in dat geval voor dat u ook de schakelaar -c meegeeft om automatische kleurcorrectie af te dwingen.

Het argument -hq-postfix=@2x kan worden gebruikt om tegels met hoge resolutie (512px) te genereren naast de normale tegels van 256px. De waarde “@2x” wordt aanbevolen en veelvuldig gebruikt voor tegels met hoge resolutie, ook in Leaflet. Met deze schakelaar wordt voor elke tegel met lage resolutie “N.png” een tegel met hoge resolutie “[email protected]” gemaakt.

Meerdere processen (en CPU-cores) gebruiken

Section titled “Meerdere processen (en CPU-cores) gebruiken”

Het genereren van kaarttegels kan een CPU-intensieve taak zijn, afhankelijk van de zoomniveaus, de complexiteit van de tekening en andere instellingen.

Om kaarttegels sneller te genereren, kunt u de taak over meerdere beschikbare CPU-cores verdelen. Voor deze functie biedt dwg2maptiles de schakelaar -s om slechts een deel (slice) van de vereiste tegels te genereren. De schakelaar -s verwacht twee door komma’s gescheiden parameters: de te genereren slice en het totale aantal gebruikte slices. -s 1,4 zou bijvoorbeeld de eerste van in totaal vier slices genereren. Om alle tegels van het bovenstaande voorbeeld met vier CPU-cores te genereren, zou u kunnen uitvoeren:

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

Uiteraard zou u de taken ook per zoomniveau kunnen verdelen of slices alleen voor hogere zoomniveaus gebruiken en één enkel proces voor alle lagere (goedkopere) zoomniveaus, enz.

Een interactief voorbeeld biedt twee overlaylagen aan de kaart van het Zwitserse kanton Zürich: het beschermde bosgebied en de wildcorridors. De originele gegevens waren in EPSG:2056-coördinaten (LV95) en werden met dwgmapconvert naar EPSG:3857 getransformeerd.

Bekijk het voorbeeld online met Leaflet