I förra veckan jobbade jag mycket med layout och det militära rapporteringssystemet MGRS. Under tiden jag gjorde detta hittade jag flera alternativa lösningar som potentiellt skulle kunna förbättra användbarheten. I detta inlägg lyfter jag fram en av dessa.
Via Boundless sida på GitHub kan man hämta Pythonskriptet ”mgrspy”. Det går också att installera via ”pip”.
sudo pip install mgrspy
Det går sedan att få hjälp om kommandot efter import i python med:
from mgrspy import mgrs help(mgrs)
Det går att ”översätta” mellan lat/long och MGRS, åt båda hållen, men jag är mest intresserad av .toMgrs().
Kommandot mgrs.toMgrs() tar tre variabler. Latitud, longitud och precision eller antal siffror i svaret. Det som är viktigt att tänka på är att det är latituden, det vill säga Y-koordinaten, som är den första variabeln. Om man anger 5 som precision så kommer resultatet att presenteras med 10 siffror (5+5).
Från svaret kan man sedan utvinna UTM gzd (grid zone designator), MGRS bigram (100km ruta) och easting/northing i denna. Funktionen förutsätter dock koordinater i lat/long (WGS-84). Men detta kan man enkelt fixa med en egen Pythonfunktion.
@qgsfunction(args='auto', group='Advanced Layout') def mgrs(easting, northing, epsg, feature, parent): crsSrc = QgsCoordinateReferenceSystem(epsg) crsDst = QgsCoordinateReferenceSystem(4326) xform = QgsCoordinateTransform(crsSrc, crsDst) pt = xform.transform(QgsPoint(easting,northing)) from mgrspy import mgrs mgrs_out = mgrs.toMgrs(pt[1],pt[0],5) # Latitude first... return mgrs_out
Funktionen tar tre variabler:
- X-koordinat (easting)
- Y-koordinat (northing)
- EPSG kod (ex 32633 för UTM zon 33N)
Anropet skulle exempelvis kunna vara:
mgrs(498843,6391479,32633)
Vilket skulle resultera i: 33VVD9884391479.
Funktionen går till skillnad från den ursprungliga mgrsfunktionen att använda med koordinater i valfritt koordinatsystem, så länge man vet vilken EPSG kod de är angivna i.
Genom att kombinera detta med de kommande funktionerna i QGIS3 där man ganska enkelt kan hämta varje kartelements CRS med en inbyggd funktion, så kan man skapa MGRS angivningar i kartan oavsett var på jorden, eller vilken projektion man använder. Det går till och med att skapa mallar (templates) för ett sådant kartelement som enkelt går att återanvända i nya projekt.