Was ist die beste Möglichkeit, programmgesteuert zwischen WKT- und Proj4-Zeichenfolgen zu konvertieren?

14

Mit einigen Shapefiles ist eine PRJ-Datei verknüpft, und die PRJ-Datei enthält die Projektionsinformationen des Shapefiles im WKT-Format. Manchmal muss ich WKT in einen ProJ4-String konvertieren und manchmal muss ich ihn zurückkonvertieren.

Gibt es dafür eine fertige Bibliothek?

Cui Pengfei 崔鹏飞
quelle

Antworten:

12

Der OGR-Raumbezugsteil von GDAL sollte den Trick machen. capooti lieferte eine hervorragende Antwort auf eine weitere Frage, die zeigt, wie die Übersetzung von einem Shapefile zu WKT durchgeführt werden kann. Möglicherweise möchten Sie auch die Klassenreferenz überprüfen . Das Gegenteil ist einfach:

from osgeo import osr

srs = osr.SpatialReference()
wkt_text = 'GEOGCS["GCS_WGS_1984",DATUM["WGS_1984",' \
           'SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],'\
           'UNIT["Degree",0.017453292519943295]]'
# Imports WKT to Spatial Reference Object
srs.ImportFromWkt(wkt_text)
srs.MorphToESRI() # converts the WKT to an ESRI-compatible format
print "ESRI compatible WKT for use as .prj:" % srs.ExportToWkt()
scw
quelle
Hat jemand eine Lösung, die nicht benötigt wird osgeo, die für Python 3 nicht zu funktionieren scheint?
Dan Nguyen
OP fragte nach Proj4. Meinten Sie ExportToProj4()stattdessen in der letzten Zeile?
Astrojuanlu
2

Sie können PyCRS auch verwenden :

import pycrs

print(pycrs.parser.from_esri_wkt(wkt_text).to_proj4())
# +proj=longlat +ellps=WGS84 +a=6378137.0 +f=298.257223563 +pm=0.0  +no_defs
Astrojuanlu
quelle
1

Ich kenne keine Bibliothek, aber Sie können diese Website verwenden, um die Übersetzungen zu erhalten: http://spatialreference.org/

BEARBEITEN: Ich habe ein Python-Skript gefunden, das mit Ogr-Python-Bindungen funktioniert, um dies zu tun. Hier ist es .

Pablo
quelle
Danke, aber ich muss das programmatisch tun.
Cui Pengfei 崔鹏飞
1
Nach einigem googeln: Spatialreference.org wird ebenfalls von GDAL betrieben und verwendet anscheinend denselben Codepfad (mehr oder weniger).
Dan S.
Das ist interessant
Pablo
0

Ich muss mich pragrammatisch in eine benutzerdefinierte Projektion umwandeln, die auf der so verwendeten Zeichenfolge proj4text basiert

projection = '+proj=lcc +lat_1=53 +lat_2=70 +lat_0=0 +lon_0=136 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs'

source = osr.SpatialReference() source.ImportFromEPSG(4326) target = osr.SpatialReference() target.ImportFromProj4(projection) transform = osr.CoordinateTransformation(source, target)

Jane
quelle