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

QGIS, Python och meridiankonvergens

Publicerat den 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.
     Mastodon  

Bok om QGIS på Svenska

Bok

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

Senaste kommentarer

  • Go Big, or Go Home – Geosupportsystem om Sverige OpenStreetMap off-line 1 GB
  • klakar om ”Deep learning” i QGIS
  • Per-Erik Östlund om ”Deep learning” i QGIS
  • Rickard L om Öppna Polygoner
  • Del av tårtan – Geosupportsystem om Mäta kurvradier med GNSS

Arkiv

geosupport

Ett nytt fynd till boksamlingen. Ett nytt fynd till boksamlingen.
Dags att testa GNSS Dags att testa GNSS
Det går en gräns någonstans där det är mer lämpligt att använda ett program som Blender för att visualisera geografi i stället för GIS. Här har jag passerat den gränsen för ganska länge sedan...
Ladda mer...

Meta

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