User:Twse/ektowld
Jump to navigation
Jump to search
Lantmäteriet publicerar gamla ekonomiska kartor, de kan man göra tiles av och använda i olika program, se User:Dalkvist/ekonomiska kartan.
I JOSM är ett alternativ att skapa en world file och öppna dem med pluginen PicLayer, enligt instruktion nedan.
Ladda hem karta
- Ladda ner ett kartblad av Ekonomiska kartan från lantmäteriet
- Varje karta har en beskärd sida och en komplett sida
- Exportera den beskärda sidan som en PNG-fil
- På den kompletta sidan står det två nummer längst ner till vänster, notera dem
Skapa world file
- Ladda ner och installera python och python-gdal
- Spara skriptet nedan som ektowld.py
- Kör skriptet med PNG-filen och nummer från kartan som parametrar, ex:
- python ektowld.py karta.png 6730 1565
- Skriptet skapar en .wld och .prj fil namngivna efter PNG-filen
Öppna i JOSM
- Aktivera plugin PicLayer
- Välj PicLayer/New picture layer from file, välj PNG-filen
- PicLayer kommer automatisk georeferera lagret med hjälp av world-filen
Skript
#!/usr/bin/python # -*- coding: utf-8 -*- import os import sys import osgeo.gdal as gdal import osgeo.osr as osr filnamn = sys.argv[1] #2x 4 siffror nere till vänster på kartblad kartKoordY = float(sys.argv[2])*1000 kartKoordX = float(sys.argv[3])*1000 def RT90toWEB(rt90x, rt90y): rt90 = osr.SpatialReference() #Nyare metod från Lantmäteriet rt90.ImportFromProj4("""+proj=tmerc +ellps=GRS80 +a=6378137 +rf=298.257222101 +lon_0=15.8062845294 +k=1.00000561024 +y_0=-667.711 +x_0=1500064.274 +datum=WGS84 +units=m""") #Web-format använt internt i JOSM/PicLayer web = osr.SpatialReference() web.ImportFromEPSG(3857) ct = osr.CoordinateTransformation(rt90, web) return ct.TransformPoint(rt90x, rt90y) def RT90toGCP(rt90x, rt90y, pixelX, pixelY): webX, webY, webHeight = RT90toWEB(rt90x, rt90y) gcp = gdal.GCP(webX, webY, webHeight, pixelX, pixelY) return gcp gcps=[] #SydVäst gcps.append( RT90toGCP(kartKoordX, kartKoordY, 0, 5000) ) #SydÖst gcps.append( RT90toGCP(kartKoordX+5000, kartKoordY, 5000, 5000) ) #NordVäst gcps.append( RT90toGCP(kartKoordX, kartKoordY+5000, 0,0) ) #NordÖst gcps.append( RT90toGCP(kartKoordX+5000, kartKoordY+5000, 5000, 0) ) xform = gdal.GCPsToGeoTransform(gcps) #.wld läses automatiskt av PicLayer wld = open(os.path.splitext(filnamn)[0] + '.wld', 'w') wld.write("%0.10f\n" % xform[1]) wld.write("%0.10f\n" % xform[2]) wld.write("%0.10f\n" % xform[4]) wld.write("%0.10f\n" % xform[5]) wld.write("%0.10f\n" % xform[0]) wld.write("%0.10f\n" % xform[3]) wld.close() #.prj används inte av PicLayer, kan vara bra till andra program web = osr.SpatialReference() web.ImportFromEPSG(3857) webWkt = web.ExportToWkt() prj = open(os.path.splitext(filnamn)[0] + '.prj', 'w') prj.write(webWkt) prj.close()