Hoppa till innehåll
Meny
  • Hem
  • Dokument
  • Om Mig
Geosupportsystem

QGIS Funktioner från Python

Publicerat den 2018-11-29

Jag har tidigare skrivit om ett pythonskript som jag byggt för att skapa bilder som kan användas för att skapa norr referenser. Nu har jag byggt om delar av detta till en QGIS funktion…
När man kikar på originalskriptet så kan det mer än jag behöver, så det är bara svg delen som jag är intresserad av.
Skärmbild från 2018-11-25 11-53-18
Att generera en bild i PNG format är inte svårare än:

python northref.py -g 0 -m -4 -t 8 -o norrpilar.png

Resultatet kan sedan användas var som helst där PNG kan användas.
northref
Att skapa en anpassad funktion i QGIS är i det här fallet inte svårare än att kopiera just funktionen som skapar SVG koden.
Skärmbild från 2018-11-25 11-47-27.png
Funktionen som jag döpt till ”north_ref_svg” som tar tre argument. Grid norr, normalt 0. Sann norr, som kan beräknas mot en namngiven kartram, och magnetisk deklination, som kräver någon form av uppslagning.
Skärmbild från 2018-11-25 11-46-40.png
Uttrycket används som källa till en HTML ruta och den genererade från början en bild som var 2,5 cm hög. Ville man ha en större eller mindre bild så fick man redigera koden, men nu har jag lagt till en variabel som sätter storleken på SVG grafiken i centimeter. Det är därför fyra variabler i stället för bara tre (grid, sann, magnetisk, storlek).
Det går ju att beräkna sann norr automatiskt från centrum i kartans utbredning med ännu ett uttryck. Och då blir det såhär:

[% north_ref_svg( 0,
with_variable('azimuth',
degrees(azimuth(
transform(centroid(map_get(item_variables('Map'),'map_extent')),@project_crs, 'EPSG:4326'),
transform(project(centroid(map_get(item_variables('Map'),'map_extent')),1000,0), @project_crs, 'EPSG:4326')))
,if(@azimuth>180, 360-@azimuth, 0-@azimuth))
,-5,1.3)%]

Förutsättningen är att kartan man vill ha riktningen ifrån har id ”Map”, annars går ju det att ändra det i uttrycket också (två ställen). Den grafik som genereras från bilden ovan blir 1,3 centimeter stor och använder -5 grader som magnetisk deklination.
Funktionen bakar jag in i mitt plugin för layouter, men du kan hämta den direkt via denna länk: generatesvg.py. På GitHub finns även originalskriptet om man vill generera SVG och PNG filer.
Äh! Jag gör en funktion som hämtar magnetisk deklination från en tjänst på nätet baserat på angivna lat/long värden också.

get_magnetic_declination(latitud, longitud)

Den finns också med i ”Layout Loader” plugin, men kan laddas ner separat här: get_magnetic_declination.py.
Så länge man har mina funktioner och kontakt med Internet så kan man skapa en mall som automatiskt skapar en uppdaterad bild för norr-referenser baserade på den aktuella kartan.

OBSERVERA

HTML rutor i QGIS layout uppdateras inte kontinuerligt när de genereras av ett uttryck. Du kan behöva markera rutan och klicka på ”Uppdatera HTML” för att allt skall vara korrekt efter exempelvis en panorering.

Lämna ett svar Avbryt svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

     Mastodon  

Senaste kommentarer

  • Sur om Varför är stiftpennor så långa?
  • QGIS 3.44 LTR – Geosupportsystem om Zorin på gammal laptop
  • Stefan Ene om Zorin på gammal laptop
  • Samira A om Om Mig
  • Klas Karlsson om QGIS 4 – vänta…

Arkiv

Meta

  • Logga in
  • Flöde för inlägg
  • Flöde för kommentarer
  • WordPress.org
©2025 Geosupportsystem | WordPress-tema av Superbthemes.com