Quelle est la meilleure façon de convertir par programme entre une chaîne WKT et Proj4?

14

Certains fichiers de formes ont un fichier .prj associé et le fichier .prj contient les informations de projection du fichier de formes au format WKT. Parfois, je dois convertir WKT en chaîne proj4, et parfois je dois le reconvertir.

Existe-t-il une bibliothèque prête à l'emploi pour ce faire?

Cui Pengfei 崔鹏飞
la source

Réponses:

12

La partie OGR Spatial Reference de GDAL devrait faire l'affaire. capooti a fourni une excellente réponse à une autre question qui montre comment effectuer la traduction d'un fichier de formes vers WKT. Vous pouvez également consulter la référence de la classe . L'inverse est simplement:

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
la source
Quelqu'un a une solution qui ne nécessite pas osgeo, qui ne semble pas fonctionner pour Python 3?
Dan Nguyen
OP a posé des questions sur Proj4. Voulez-vous dire ExportToProj4()à la dernière ligne à la place?
astrojuanlu
2

Vous pouvez également utiliser 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
la source
1

Je ne connais aucune bibliothèque, mais vous pouvez utiliser ce site pour obtenir les traductions: http://spatialreference.org/

EDIT: J'ai trouvé un script python qui fonctionne avec les liaisons python ogr pour ce faire. Ça y est .

Pablo
la source
merci, mais je dois le faire par programme.
Cui Pengfei 崔鹏飞
1
Après quelques recherches sur Google: spatialreference.org est également alimenté par GDAL et utilise le même chemin de code (plus ou moins), semble-t-il.
Dan S.
C'est intéressant
Pablo
0

J'ai besoin de transformer pragrammatiquement une projection personnalisée basée sur une chaîne proj4text, donc utilisée

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)

Jeanne
la source