Каков наилучший способ для программного преобразования между строк WKT и Proj4?

14

С некоторыми шейп-файлами связан файл .prj, а файл .prj содержит информацию о проекции шейп-файла в формате WKT. Иногда мне нужно конвертировать WKT в строку proj4, а иногда мне нужно конвертировать ее обратно.

Есть ли готовая библиотека для этого?

Цуй Пэнфэй 崔鹏飞
источник

Ответы:

12

Часть OGR Spatial Reference GDAL должна сделать свое дело. capooti дал отличный ответ на другой вопрос, который демонстрирует, как выполнить перевод из шейп-файла в WKT. Вы также можете проверить ссылку на класс . Обратное просто:

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
источник
У кого-нибудь есть решение, которое не требует osgeo, которое, кажется, не работает для Python 3?
Дэн Нгуен,
ОП спросил про Proj4. Вы имели ExportToProj4()в виду в последней строке вместо?
astrojuanlu
2

Вы также можете использовать 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
источник
1

Я не знаю ни одной библиотеки, но вы можете использовать этот сайт, чтобы получить переводы: http://spatialreference.org/

РЕДАКТИРОВАТЬ: я нашел скрипт Python, который работает с привязками Ogr Python, чтобы сделать это. Здесь .

Pablo
источник
спасибо, но мне нужно сделать это программно.
Цуй Пэнфэй 崔鹏飞
1
После некоторого поиска в Google: Spreal.ference также работает на GDAL и использует тот же путь кода (более или менее).
Дэн С.
Это интересно
Пабло
0

Мне нужно прагматически преобразовать в пользовательскую проекцию на основе строки proj4text, поэтому используется

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)

Джейн
источник