Förbearbeta geometrier i QGIS

Om du har ett polygonlager med angränsande områden, där du vill välja ut några av dessa och sätta en gränslinje runt alla. Hur gör du det i QGIS? Utan att köra en sammanslagning och ”dissolve” och därmed skapa ett nytt dataset?

Det är inte helt enkelt att lista ut, men när man väl vet hur, så blir det väldigt kraftfullt.

Det normala är att man skapar ett nytt polygonlager där man har utvalda polygoner som man ”löst upp” gränserna kring. Detta är helt ok, men det skapar nya data som inte uppdateras när originallagret uppdateras, det tar plats, med flera bekymmer.

För att testa så skapar jag ett lager i GeoPackage med topologiskt angränsande polygoner över Eksjö.

Skärmbild_2017-03-25_07-08-35.png

Om jag vill skapa en ”gräns” runt de markerade ytorna ovan så skulle jag kunna använda ett objektfilter (under fliken Allmänt i lageregenskaperna) och sedan inverterad polygonfyllning, med en kantlinjefyllning.

Skärmbild_2017-03-25_07-26-35.png

Om man väljer att endast rita ut linje inuti polygonen så kan man nästan nå hela vägen fram, men det är fortfarande flera polygoner, där det ”lyser igenom” lite i skarvarna.

Jag hade en idé om att använda ”geometrigeneratorn” för att slå samman de filtrerade polygonerna till en enda polygon, men det blir väldigt snabbt komplicerat med många rader kod om man skall använda den metoden. Gemetrigeneratorn blir därför inte ett alternativ.

Det bästa vore om man kunde göra urval och sammanslagning innan man börjar stilsätta lagret, och vet ni vad. Det går! Och det kräver bara en rad med kod.

Skärmbild_2017-03-25_08-16-17

Om man använder virtuella lager (från QGIS 2.14) så kan man nämligen göra allt som behövs i ett SQL kommando!

Klicka bara på knappen ”Lägg till/redigera virtuellt lager” och fyll i SQL kommandot:

SELECT st_union(geometry) FROM polygonlager WHERE "fid" in (1,2,9)

I satsen ovan byter du ut ”polygonlager” mot namnet på ditt polygonlager och ”fid” med tillhörande lista (1,2,9) mot ditt attributfält och urvalsvärden som är aktuella.

Satsen returnerar en sammanslagen (union) polygon bestående av de polygoner som har attributvärden som finns i listan. Denna kan sedan enkelt kan stilsättas som vanligt!

Skärmbild_2017-03-25_08-21-22.png

Det är en polygon utan mellanrum (så länge grundlagret är topologiskt korrekt). Det behöver inte vara helt närliggande polygoner då resultatet blir en ”multi-polygon”. Det vill säga en logisk polygon som kan bestå av flera geometrier.

Det följer inte med några attribut i sammanslagningen, utan det är enbart en geometri, men det är nog det som i huvudsak behövs.

En stor fördel mot att skapa nya lager är att om man ändrar käll-lagret så kommer geometrierna att ändras även i det virtuella lagret.

Skall jag ändra urvalet av polygoner som skapar det sammanslagna lagret så behöver jag bara klicka på ”Lägg till/redigera virtuellt lager” igen och ändra listan med värden i WHERE satsen.

Advertisements

Taggar:

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

%d bloggare gillar detta: