Pyproj ve Proj.4 kullanarak X, Y koordinatlarını enlem / boyuta dönüştürmek yanlış koordinatları döndürür


10

X ve y koordinatları içeren birden çok XML dosyasını okuyan ve hepsini tek bir csv dosyasına birleştiren bir python betiği yazıyorum. Enlem ve Boylam, csv'de zorunlu alanlardır, ancak Ohio North State Plane usFt'deki x, y koordinatlarını WGS84'e dönüştürmekte zorlanıyorum.

>>> 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)

Yukarıdaki her iki yöntem de aynı sonucu döndürür, ancak bu uzun lateks Hudson Körfezi'nde bir yerdedir. ArcMap'ta koordinatları çizdiğimde, doğru enlemesine uzunluk: -81.142311,41.688205.

* Projenin kullandığı sipariş olduğu için tüm lat uzunlarının uzun sağlandığına dikkat edin

Proj.4 ve pyproj'dan neden yanlış koordinatlar alacağımı bilen var mı?

Yanıtlar:


8

Ben çalıştırmak gdaltransformve proj.4 aracı @ geographika ile aynı sonuçları elde 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

Ancak noktanızın x ve y koordinatlarını ters çevirmek ArcMap'te gördüğünüz sonucu verir:

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

Bu nedenle, x ve y koordinatlarınızın doğru şekilde olduğundan emin olmak için görsel bir kontrol yapmanız gerekir. Bu, yuvarlama hatasına falan koyduğunuz kadar benzer iki sonuç aldığınızda geçmişte yaşadığım bir sorun.


19

PyProj koordinatlarınızın metre cinsinden olduğunu varsayar. Sanırım sorunun nedeni ayak / metre ile ilgili bir şeydir.

Proj argümanını lon bağımsız değişkenleriyle çağırdığınızda, lat, lon / lat (derece cinsinden) x / y yerel harita projeksiyon koordinatlarına (metre cinsinden) dönüştürür

İsteğe bağlı 'preserve_units' anahtar kelimesi True ise, harita yansıtma koordinatlarındaki birimler metre olmaya zorlanmaz.

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

İlk koordinatlarınız feet cinsinden mi? Verileri ArcMap'e yüklediğinizde, harita hangi birimleri kullanır?

Bu koordinatları biraz daha yaklaştırıyor:

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)

Benzer bir sorun burada bulunabilir .


Çok teşekkür ederim. Preserve_units argümanı kesinlikle hile yaptı, ancak koordinatlar hala yanlış. @MerseyViking Bu cevap bana doğru koordinatları verdi. Keşke her iki yanıtı da cevap olarak işaretleyebilseydim çünkü ikisi de yardımcı oldu.
Brian

Eğer insanlar @ geographika'nın cevabını benimkinden daha fazla oylarlarsa, her şey yoluna girecek :) Her şeyin işe yaradığına sevindim.
MerseyViking

bağlantı koptuğundan, yazabileceğinizi göstermeniz yararlı olabilir:p1 = Proj( init="epsg:3734", preserve_units=True )
BenjaminGolder

4

Aslında aynı şeyi OH güney eyalet düzlemi ızgarası dışında yapmaya çalışıyordum ve sorunuzla karşılaştım. 3735 ile yanlış sonuçlar alıyordum, şimdi 3729 ile doğru sonuçlar elde ediyorum. 3734'ten 3728'e geçerseniz doğru sonuçları alacaksınız.

EPSG: 3728: NAD83 (NSRS2007) / Ohio Kuzey (ftUS) EPSG: 3729: NAD83 (NSRS2007) / Ohio Güney (ftUS) EPSG: 3734: NAD83 / Ohio Kuzey (ftUS) EPSG: 3735: NAD83 / Ohio South (ftUS)

Sağladığınız lat, uzun kullandım ve bir ayaktan az uzakta kaldım.

p2 = pyproj.Proj (init = "epsg: 3728", preserve_units = Doğru)

p2 (-81.142311,41.688205)

(2339326.6558868014, 739401.4226131936)

vs 2339327.3, 739400.91

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.