Qual é a melhor maneira de converter programaticamente entre WKT e Proj4?

14

Alguns shapefiles têm um arquivo .prj associado a ele, e o arquivo .prj contém as informações de projeção do shapefile no formato WKT. Às vezes, preciso converter o WKT em proj4 e, às vezes, convertê-lo novamente.

Existe alguma biblioteca pronta para fazer isso?

Cui Pengfei 崔鹏飞
fonte

Respostas:

12

A parte de Referência Espacial OGR do GDAL deve fazer o truque. capooti forneceu uma excelente resposta para outra pergunta que demonstra como executar a tradução de um shapefile para o WKT. Você também pode verificar a referência da classe . O inverso é simplesmente:

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
fonte
Alguém tem uma solução que não requer osgeo, que parece não funcionar para o Python 3?
Dan Nguyen
OP perguntou sobre o Proj4. Você quis dizer ExportToProj4()na última linha?
astrojuanlu
2

Você também pode usar o 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
fonte
1

Não conheço nenhuma biblioteca, mas você pode usar este site para obter as traduções: http://spatialreference.org/

Edição: Encontrei um script python que funciona com ligações python ogr para fazer isso. Aqui está .

Pablo
fonte
obrigado, mas eu preciso fazer isso programaticamente.
Cui Pengfei 崔鹏飞
1
Depois de pesquisar no google: spatialreference.org também é desenvolvido pelo GDAL e usa o mesmo caminho de código (mais ou menos), ao que parece.
Dan S.
Isso é interessante
Pablo
0

Preciso transformar pragrammaticamente em projeção personalizada com base na string proj4text, usada

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
fonte