I detta inlägg dokumenterar jag hur jag använde geometrigeneratorer i QGIS för att separera en del av en ”wedge buffer” i QGIS.
Grunden är data med tre punkter som finns på en cirkelbåge. Vid insamlingen av de tre punkterna (beskrivits tidigare) så genereras en centrum punkt och en cirkelradie, och dessa vill jag nu kunna använda för att rita ut den aktuella cirkelbågen utan att behöva ha med hela cirkeln som en geometrigenerator.
Till hjälp så använder jag en ”wedge_buffer”.
Centrumpunkten och radien är enkla att lägga till i en geometrigenerator, men tårtbitsriktning och -vinkel blir lite jobbiga att använda ”in-line” i uttrycket. Därför så bryter jag ut vinkel mot första och sista brytpunkten med ”with_variable” uttrycket, vilket gör det mer överskådligt.
Genom att skapa två nya ”variabler” i uttrycket så blir skapandet av tårtbiten så mycket enklare.
Alla fall av cirklar fungerar det däremot inte för. Det gör sällan det när man skall jobba med vinklar. Därför är det nödvändigt att testa med flera olika typfall och sedan göra modifieringar i uttrycken som kan hantera detta. Det är rimligt att göra antaganden, som att tårtbiten antagligen är mindre än 180 grader.
Med antagandet att tårtbiten alltid är mindre än 180 grader så går det att lägga till en ”if()” funktion i skapandet av ”wedge_buffer” för att ”vända” på både riktningen (azimuth) och bredden (width).
Villkoret är helt enkelt ett test om beräknad vinkel är större än 180. Om så är fallet så skall riktningen vändas och resten av vinkeln beräknas. Jämför uttrycken ovan med de tidigare så bör skillnaden bli uppenbar.
Resultatet är att alla testfall ritas ut korrekt.
Nästa steg blir att isolera själva kurvdelen av geometrigeneratorn. Detta görs med en ny geometrigenerator istället för den linje som nu används.
Till att börja med så behöver jag veta hur polygonen ritas ut. Genom att använda markörlinjer med punkter på första (grön), sista (röd) och alla mellanliggande brytpunkter så har jag två alternativ. Det ena att utritningen börjar med bågen och det andra att vinkeln kommer först. Oavsett vilket så kan jag anpassa ett annat uttryck för att separera dessa.
Med funktionen ”line_substring” så skapar man en linje som har en början och ett slut längs en befintlig geometri. Om det visar sig att utritningen börjar med vinkeln så får jag byta plats på de värden som är angivna (och använda en positiv 3:a).
Notera att om man använder en geometrigenerator i en annan geometrigenerator, så refererar ”$geometry” till den geometri som genererats i nivån över, och inte den ursprungliga lagergeometrin.