Apa cara terbaik untuk secara terprogram mengkonversi antara string WKT dan Proj4?

14

Beberapa shapefile memiliki file .prj yang terkait dengannya, dan file .prj berisi info proyeksi dari shapefile dalam format WKT. Terkadang saya perlu mengonversi string WKT ke proj4, dan terkadang saya perlu mengubahnya kembali.

Apakah ada perpustakaan yang sudah jadi untuk melakukan ini?

Cui Pengfei 崔鹏飞
sumber

Jawaban:

12

Bagian Referensi Tata Ruang OGR dari GDAL harus melakukan trik. capooti memberikan jawaban yang sangat baik untuk pertanyaan lain yang menunjukkan bagaimana cara menerjemahkan terjemahan dari shapefile ke WKT. Anda mungkin juga ingin memeriksa referensi kelas . Yang sebaliknya hanyalah:

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
sumber
Adakah yang punya solusi yang tidak diperlukan osgeo, yang sepertinya tidak berfungsi untuk Python 3?
Dan Nguyen
OP bertanya tentang Proj4. Apakah yang Anda maksud ExportToProj4()di baris terakhir sebagai gantinya?
astrojuanlu
2

Anda juga dapat menggunakan 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
sumber
1

Saya tidak tahu perpustakaan apa pun, tetapi Anda dapat menggunakan situs ini untuk mendapatkan terjemahan: http://spatialreference.org/

EDIT: Saya menemukan skrip python yang berfungsi dengan ogr python binding untuk melakukan itu. Ini dia .

Pablo
sumber
terima kasih, tetapi saya harus melakukan itu secara terprogram.
Cui Pengfei 崔鹏飞
1
Setelah beberapa googling: spatialreference.org juga didukung oleh GDAL & menggunakan jalur kode yang sama (kurang lebih), tampaknya.
Dan S.
Itu menarik
Pablo
0

Saya perlu pragrammatically mentransformasikan ke proyeksi kustom berdasarkan string proj4text, jadi digunakan

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
sumber