¿Cuál es la mejor manera de convertir mediante programación entre WKT y Proj4 string?

14

Algunos archivos de forma tienen un archivo .prj asociado, y el archivo .prj contiene la información de proyección del archivo de forma en el formato de WKT. A veces necesito convertir WKT a una cadena proj4, y a veces necesito volver a convertirlo.

¿Hay alguna biblioteca preparada para hacer esto?

Cui Pengfei 崔鹏飞
fuente

Respuestas:

12

La parte de referencia espacial de OGR de GDAL debería hacer el truco. capooti proporcionó una excelente respuesta a otra pregunta que demuestra cómo realizar la traducción de un archivo shape a WKT. También puede consultar la referencia de clase . Lo contrario es simplemente:

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
fuente
¿Alguien tiene una solución que no requiere osgeo, que no parece funcionar para Python 3?
Dan Nguyen
OP preguntó sobre Proj4. ¿Querías decir ExportToProj4()en la última línea en su lugar?
astrojuanlu
2

También puedes usar PyCRS :

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
fuente
1

No conozco ninguna biblioteca, pero puede usar este sitio para obtener las traducciones: http://spatialreference.org/

EDITAR: Encontré un script de python que funciona con enlaces ogr python para hacer eso. Aquí se trata .

Pablo
fuente
gracias, pero necesito hacer eso programáticamente.
Cui Pengfei 崔鹏飞
1
Después de buscar en Google: spatialreference.org también funciona con GDAL y, al parecer, utiliza la misma ruta de código (más o menos).
Dan S.
Eso es interesante
Pablo
0

Necesito transformar pragramáticamente a una proyección personalizada basada en la cadena proj4text, así utilizada

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
fuente