Menu
  • Hem
  • Dokument
  • Om Mig
Geosupportsystem

QGIS, Python och meridiankonvergens

Posted on 2016-10-31

I nya QGIS så kan man rotera grafik i utskriftslayouter efter ”sann” norr, och inte enbart kart-norr. Det jag saknat är ett sätt att beräkna och skriva ut denna meridiankonvergens i kartlayouten.
Nu har jag hittat en lösning med Python, som dessutom ger mig ytterligare möjligheter.
I din QGIS katalog (.qgis) finns det en underkatalog som innehåller pythonskript. I denna finns bland annat dina plug-in, men även dina uttryck (.qgis2/python/expressions/).
Vill du använda mina uttryck så kan du hämta min skriptfil på GitHub (länk) och spara den på denna sökväg.
Jag skall inte gå igenom skriptet i detalj här utan försöka sammanfatta det lite kort.

def map_extent():
 composers = iface.activeComposers()
 composer = composers[0]
 composition = composer.composition()
 map = composition.getComposerMapById(0)
 return map.currentMapExtent()

Funktionen ovan tar den första kartan i den första layouten och returnerar utsträckningen.
I ett skript jag hittade på Internet så användes layout-namn och kart-id som indata i funktionerna, vilket ger större flexibilitet, men för mig så är det i 99 fall av 100 just den första kartan i den första layouten som är intressant. Min variant är därför inte lika flexibel, men anropet är i de flesta fall mycket enklare.
I skriptet så anropar jag sedan funktionen och tilldelar en variabel dess resultat.

extent = map_extent()

sedan kan jag enkelt få fram max och min koordinater för kartans utsträckning med exempelvis:

extent.xMaximum()

Andra egenskaper är xMinimum, yMaximum, yMinimum. Ur detta kan jag beräkna även koordinaterna för kartcentrum och med lite kreativ beräkning skapa punkter som motsvarar sann norr.
En koordinattransformation och riktningsberäkning ger sedan meridiankonvergensen för kartans centrum.

return center_start.azimuth(true_north_point)

Uttrycken är tillgängliga i uttrycksdialogen under rubriken Python. Jag har inkluderat en kort beskrivning på engelska för varje funktion som jag skapat.
Skärmbild_2016-10-25_20-00-15.png
I exemplet ovan avrundar jag meridiankonvergensen till två decimaler, och lägger till ett gradtecken med html-kod.
Koden är inte 100% säker då den i princip kräver en karta med ett godkänt koordinatsystem, som SWEREF99TM. Det har gett mig lite felmeddelande emellanåt och koden kan säkert förenklas och göras mer robust, men jag har i alla fall lärt mig en del nytt om Python i QGIS.
I helgen så ”live” sände jag lite om det jag beskriver här på YouTube. Vill du se det nu i efterhand så går det också bra:

Lämna ett svar Avbryt svar

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

Translate with Google

GBR In English
GER Auf Deutch
FRA En Français
ESP En Español
Swedish is a hard language for a machine to translate. Nuance and detail will likely be lost.
     

Bok om QGIS på Svenska

Bok

Beställ Boken/E-bok genom att klicka på bilden (även förhandsgranskning).

Senaste kommentarer

  • Lene Fischer om Skapa bildmask för WebODM
  • Gabriel om Punktmoln i QGIS 3.18
  • klakar om Punktmoln i QGIS 3.18
  • Gabriel om Punktmoln i QGIS 3.18
  • Hector Garrido om QGIS LTR vs LTR

Arkiv

Prenumerera på Geosupportsystem

Skriv in namn och epost för att prenumerera på meddelanden från denna blogg.
Loading

geosupport

YouTube video to frames. Processed in OpenDroneMap YouTube video to frames. Processed in OpenDroneMap and visualized in QGIS 3.17.
Japp! Dubbelbeställde TVÅ gånger. En annan mode Japp! Dubbelbeställde TVÅ gånger. En annan modell levererades idag.
Ooops. Tryckte nog för många gånger på bestäl Ooops. Tryckte nog för många gånger på beställ-knappen...
Ladda mer...

Meta

  • Logga in
  • Flöde för inlägg
  • Flöde för kommentarer
  • WordPress.org
©2021 Geosupportsystem | WordPress Theme by Superbthemes.com