Kategorier
12stegsprogrammet Kartritning

Steg 4 – Branter – från 350 000 till 7000 objekt enligt Kinnebergsmetoden

En av de saker jag tänkt på länge med automatiserade kartor är hur man får till branterna på ett bra sätt i ocad. Det går att använda outputen från kartapullautin antingen som bakgrundsbild eller att göra om filerna *c2.dxf och *c3.dxf till branter. Men det man får ut från kartapullautin är väldigt många korta streck där det finns branter, en brant kan bestå av lätt 20 små streck från kartapullautin.

Använder man bara bildfilerna i karttapullautin så funkar det ok, även om det går att göra snyggare. Men vill man ta in det i ocad och gör man kartor i ett område där det naturligt finns många branter – exempelvis skärgårdsnatur på västkusten, blir det lätt många brant-objekt, och det blir snart omöjligt att jobba med en kartfil i ocad. När jag över julen 2019 gjorde utkastet till en karta över Björkö så räknade jag ihop över 350 000 brantobjekt från kartapullautin på ön. Med lite hjälp från GIS-experter i klubben (tack Eskil Kinneberg) så kom jag äntligen på hur man kan förenkla detta.

Processen går enkelt till så här.

  1. Skapa ytobjekt (polygoner) i qgis som omsluter brantobjekt som ligger nära varandra.
  2. Skapa centrumlinjer i polygonerna
  3. Importera branterna i OCAD.

Jag förutsätter att man kört kartapullautin och har brantfilerna klara. I processen använder jag programmet QGIS och beskriver nedan manuellt hur man går tillväga. Jag har även skrivit skript som gör att man kan automatisera det. På det sättet kan man låta datorn ta hand om många brantfiler från ett större kartområde utan att man måste göra om inställningarna flera gånger.

Steg 1. Skapa polygoner

Brantobjekten från kartapullautin kan det se ut så här:

I exemplet ovan är det över 1000 objekt i det som borde vara tvåsiffrig mängd branter.

Att tänka på:

När man jobbar i qgis måste man se till så projektet och lagret är i rätt georeferering. Skapa ett projekt med sweref 99 TM som bas. Lägg därefter in brant-filerna, exempelvis merged_c3.dxf för din sammanslagna fil med passerar branter och se till att sätta det lagret till rätt koordinatsystem också.

I QGIS kör man sedan funktionen ”Buffer” som finns under Vector-menyn. Jag provade mig fram till att använda Distance till 2 för att få lagom polygoner. Man vill även köra Dissolve så man slår ihop polygonerna som ligger över varandra. Något annat ändrade jag inte i grundtestet.

Så här ser resultatet av Buffer ut, där jag lagt upp lagret med branterna från kartapullautin ovanför.

Steg 2 – hitta centrumlinjer för polygonerna

Från polygonerna i detta lager vill man sedan hitta centrumlinjen – det som skall bli våra branter i kartan. För det har jag använt funktionen v.voronoi.skeleton. Jag hittade den genom att söka efter centerline i toolboxen som man hittar under menyn ”Processing”. Jag ändrade en parameter från standard – smoothing sattes till 1,25 för att få mjukare linjer.

Dessa mittlinjer får ofta ett avslut som är ett litet streck ut till kanten på ytorna, vilket gör att branterna får en konstig ibland 90-gradig sväng. Genom att först köra funktionen ”Vektor > Lägg till geometriattribut” och sedan ”Välj > Välj objekt med värde” och i den dialogen sätta ”Sinousity = 1” så kan man hitta dessa konstiga ändbitar. Man tar sedan och slänger de vektorer som blivit markerade.

I bilden nedan syns polygonerna, och dess centrumlinjer som kommit ut från voronoi-formeln.

Lagret med centrumlinjerna sparar man sedan ut som en shapefil. Glöm inte sätta rätt georeferering på lagret bara i sparaprocessen. Man högerklickar på lagret och väljer ”Export” och får upp den här vyn:

Jag tycker även det är smidigt att spara ytlagret och ibland ta in även det i ocad och ha som bakgrund när jag kollar över branterna. I partier där man har branter som täcker många kurvor så vill man kanske ändå hellre ha ett brantfällt än en enkel vektor.

Glöm inte att upprepa processen både för C3 och C2 filerna så du får med både passerbara och icke passerbara branter.

Steg 3 – importera i OCAD

Hur man importerar filer i OCAD har jag gått igenom i andra artiklar. Så jag hänvisar istället till dem. Det är samma princip som om man tar in filer från kartapullautin enligt https://stefansolsida.wordpress.com/2017/06/30/att-lagga-in-kartappullautin-output-i-en-karta-orientering-kartritning-kartor/

Vektorerna kan fortfarande ha lite konstiga böjar och därför brukar jag mjuka till dem genom att välja alla importerade brantobjekt och köra ”Objekt > Ändra till kurvlinje”. Då blir branterna både enklare att editera och lite mjukare.

Här är området ovan som det ser ut just nu på kartan (som är mitt i processandet)

Automatiseringar

När man gör denna process många gånger och lärt sig hur det funkar är det skönt att kunna automatisera det. Därför har jag byggt ett script i den grafiska modellbyggaren i QGIS, där kan man med byggbitar göra ett script av olika funktioner och dess parametrar. Sen är det bara att köra det på en fil, eller en hel mapp med brantfiler som man har fått ut från karttapullautin.

Och eftersom det här förmodligen är det nerdigaste inlägget hittills på min blogg så känns det passande att även presentera modellen ovan som ett python-script. Både modellen och python-scriptet finns att hämta på https://github.com/stefankinell/Kinnebergsmetoden

Funderingar och förbättringar

Från Kartapullautin får man ibland ut branter enligt båda kategorierna som ligger över varandra. Ett steg där man sorterar bort passerbara branter som ligger över opasserbara branter kan läggas till.

Resultat

Kartan över Björkö har istället för 350 000 brantobjekt som kom ut från Karttapullautin de mer hanterbara 7000. Kartfilen blir mindre, och jag kan dessutom justera brantobjekten på ett enklare sätt.

3 svar på ”Steg 4 – Branter – från 350 000 till 7000 objekt enligt Kinnebergsmetoden”

Hi Stefan, thanks for sharing this. It’s a great solution. I’d like to use this solution for a training map. An issue is that the skeleton is not as one would expect (eg. ending perpendicular to the slope) and so i wanted to use the buffer and then to thin the areas before running the skeleton. I was looking for an erosion mechanism to be run on the areas but can’t find one. Would you possibly know where in qgis to look for it or under what term?

Gilla

I must admit that I’m not 100% happy with the end of some of the skeleton lines. They tend to make some strange bends once in a while. I’ve been playing around with different settings to see if it makes a difference, but I do not seem to find a better set up, that works well in the type of terrain I usually work with. In the end I tend to be happier with this result than I was with the many lines of the kartapullautin output. And then if I work more on a map I go over the cliffs manually and correct them,

I did in QGIS try to work with some tools of simplifying the polygons, to see if that worked better. Also trying to make them smaller by changing settings in the buffer-tool. But it did not make that big of a difference. My QGIS skills and not the best so I don’t know always what to look for, but often get good help from egis users on forums.

If you do find out a better solution – please let me know. Would love to improve the method if I can.

Gilla

Svara

Lämna en kommentar