Chuyển đổi tọa độ X, Y thành lat / long bằng pyproj và Proj.4 trả về tọa độ sai


10

Tôi đang viết một tập lệnh python đọc nhiều tệp XML chứa tọa độ x và y và kết hợp tất cả chúng thành một tệp csv. Vĩ độ và Kinh độ là các trường bắt buộc trong csv, nhưng tôi gặp khó khăn khi chuyển đổi tọa độ x, y trong Máy bay Bang Bắc Ohio usFt thành 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)

Cả hai phương pháp trên đều trả về cùng một kết quả, tuy nhiên thời gian dài này là một nơi nào đó trong Vịnh Hudson. Khi tôi vẽ tọa độ trong ArcMap, độ dài chính xác là: -81.142311,41.688205.

* Lưu ý tất cả các độ dài lat được cung cấp dài, lat vì đây là thứ tự Proj sử dụng

Có ai biết tại sao tôi lại nhận được tọa độ sai từ Proj.4 và pyproj không?

Câu trả lời:


8

Tôi nhận được kết quả tương tự như @geographika khi tôi chạy gdaltransformvà công cụ 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

Tuy nhiên, đảo ngược tọa độ x và y của điểm của bạn sẽ cho kết quả mà bạn nhìn thấy trong ArcMap:

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

Vì vậy, bạn sẽ cần thực hiện kiểm tra trực quan để đảm bảo bạn có tọa độ x và y đúng vòng. Đó là một vấn đề tôi đã gặp phải trong quá khứ khi bạn nhận được hai kết quả tương tự nhau, bạn đặt nó xuống làm tròn lỗi hoặc một cái gì đó.


19

PyProj giả định rằng tọa độ của bạn được tính bằng mét. Tôi đoán một cái gì đó liên quan đến feet / mét là nguyên nhân của vấn đề.

Gọi một thể hiện của lớp Proj với các đối số lon, lat sẽ chuyển đổi lon / lat (tính theo độ) sang tọa độ phép chiếu bản đồ gốc x / y (tính bằng mét)

Nếu từ khóa tùy chọn 'reserved_units' là True, các đơn vị trong tọa độ chiếu bản đồ không bị buộc phải là mét.

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

Là tọa độ ban đầu của bạn trong chân? Khi bạn tải dữ liệu vào ArcMap, bản đồ sử dụng đơn vị nào?

Điều này có được tọa độ gần hơn một chút:

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)

Một vấn đề tương tự có thể được tìm thấy ở đây .


Cảm ơn rât nhiều. Đối số reserved_units chắc chắn đã thực hiện thủ thuật, nhưng tọa độ vẫn không chính xác. @MerseyViking Câu trả lời này đã cho tôi tọa độ chính xác. Tôi ước tôi có thể đánh dấu cả hai câu trả lời là câu trả lời vì cả hai đều giúp.
Brian

Chà, nếu mọi người upvote câu trả lời của @ geographika nhiều hơn của tôi, tất cả sẽ được giải quyết :) Vui mừng vì tất cả đều hoạt động tho.
MerseyViking

kể từ khi liên kết bị hỏng, có thể hữu ích để cho thấy rằng bạn có thể viết:p1 = Proj( init="epsg:3734", preserve_units=True )
BenjaminGolder

4

Tôi thực sự đã cố gắng làm điều tương tự ngoại trừ với lưới máy bay bang OH phía nam và tôi đã gặp câu hỏi của bạn. Tôi đã nhận được kết quả sai với 3735, bây giờ tôi nhận được kết quả chính xác với 3729. Tôi hy vọng nếu bạn thay đổi từ 3734 thành 3728, bạn sẽ nhận được kết quả chính xác.

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

Tôi đã sử dụng lat được cung cấp của bạn, dài và tắt ít hơn một chân.

p2 = pyproj.Proj (init = "epsg: 3728", reserved_units = True)

p2 (-81.142311,41.688205)

(2339326.6558868014, 739401.4226131936)

so với 2339327.3, 739400.91

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.