Mengkonversi koordinat X, Y ke lat / long menggunakan pyproj dan Proj.4 mengembalikan koordinat yang salah

10

Saya sedang menulis skrip python yang membaca beberapa file XML yang berisi koordinat x dan y dan menggabungkan semuanya menjadi satu file csv. Lintang dan Bujur adalah bidang wajib dalam csv, tapi saya mengalami kesulitan mengubah koordinat x, y di Ohio North State Plane, usFt ke WGS84.

>>> p = Proj(r'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs') #Nad83 State Plane Ohio North US Feet Proj object using parameters
>>> p(739400.91,2339327.3,inverse=True)
(-80.138057868777224, 60.278230707978487)
>>> p1 = Proj(init="epsg:3734") #Nad83 State Plane Ohio North US Feet Proj object using EPSG code
>>> p1(739400.91,2339327.3,inverse=True)
(-80.138057868777224, 60.278230707978487)

Kedua metode di atas mengembalikan hasil yang sama, namun lama ini ada di Teluk Hudson. Ketika saya memplot koordinat di ArcMap, panjang lat yang benar adalah: -81.142311,41.688205.

* Perhatikan semua lat panjang disediakan lama, lat karena ini adalah perintah yang digunakan Proj

Adakah yang tahu mengapa saya mendapatkan koordinat yang salah dari Proj.4 dan pyproj?

Brian
sumber

Jawaban:

8

Saya mendapatkan hasil yang sama dengan @geographika ketika saya menjalankan gdaltransformdan alat proj.4 cs2cs:

$ gdaltransform -s_srs EPSG:3734 -t_srs EPSG:4326
739400.9 2339327.3             
-87.3195485720169 45.9860670658218 0

cs2cs +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs +to +proj=lonlat +datum=WGS84
739400.9 2339327.3
87d19'10.375"W 45d59'9.841"N 0.000

Namun, membalikkan koordinat x dan y pada titik Anda memberikan hasil yang Anda lihat di ArcMap:

gdaltransform -s_srs EPSG:3734 -t_srs EPSG:4326
2339327.3 739400.9
-81.1423086719059 41.6882035384526 0

Jadi, Anda harus melakukan pemeriksaan visual untuk memastikan Anda memiliki koordinat x dan y Anda dengan benar. Ini masalah yang saya alami di masa lalu ketika Anda mendapatkan dua hasil yang cukup mirip Anda meletakkannya ke kesalahan pembulatan atau sesuatu.

MerseyViking
sumber
19

PyProj mengasumsikan bahwa koordinat Anda dalam meter. Saya kira sesuatu yang berhubungan dengan kaki / meter adalah penyebab masalah ini.

Memanggil instance kelas Proj dengan argumen lon, lat akan mengonversi lon / lat (dalam derajat) menjadi koordinat proyeksi peta asli x / y (dalam meter)

Jika kata kunci opsional 'preserve_units' Benar, unit dalam koordinat proyeksi peta tidak dipaksa menjadi meter.

http://pyproj.googlecode.com/svn/trunk/docs/pyproj.Proj-class.html

Apakah koordinat awal Anda berjalan kaki? Saat Anda memuat data ke ArcMap, unit apa yang digunakan peta?

Ini membuat koordinat sedikit lebih dekat:

p1 = Proj(init="epsg:3734")
#1 foot = 0.3048 meters
conv = 0.3048
print p1(739400.91 * conv,2339327.3 * conv,inverse=True)
(-87.3195533069909, 45.98605408134072)

Masalah serupa dapat ditemukan di sini .

geografi
sumber
Terima kasih banyak. Argumen preserve_units pasti berhasil, tetapi koordinatnya masih salah. @MerseyViking Jawaban ini memberi saya koordinat yang benar. Saya berharap saya dapat menandai kedua jawaban sebagai jawaban karena keduanya membantu.
Brian
Nah, jika orang-orang lebih memilih jawaban @ geografisika daripada jawaban saya, semuanya akan berjalan dengan baik :) Senang semuanya berhasil ya.
MerseyViking
karena tautannya rusak, mungkin bermanfaat untuk menunjukkan bahwa Anda dapat menulis:p1 = Proj( init="epsg:3734", preserve_units=True )
BenjaminGolder
4

Saya benar-benar mencoba melakukan hal yang sama kecuali dengan jaringan OH negara bagian selatan dan saya menemukan pertanyaan Anda. Saya mendapatkan hasil yang salah dengan 3735, sekarang saya mendapatkan hasil yang benar dengan 3729. Saya berharap jika Anda mengubah dari 3734 menjadi 3728, Anda akan mendapatkan hasil yang benar.

EPSG: 3728: NAD83 (NSRS2007) / Ohio Utara (ftUS) EPSG: 3729: NAD83 (NSRS2007) / Ohio Selatan (ftUS) EPSG: 3734: NAD83 / Ohio North (ftUS) EPSG: 3735: NAD83 / Ohio South (ftUS)

Saya menggunakan lat yang disediakan, lama dan tidak aktif kurang dari satu kaki.

p2 = pyproj.Proj (init = "epsg: 3728", preserve_units = Benar)

p2 (-81.142311,41.688205)

(2339326.6558868014, 739401.4226131936)

vs 2339327.3, 739400.91

insinyur pertambangan
sumber