X को परिवर्तित करना, Y, pyproj का उपयोग करके lat / long के लिए निर्देशांक करता है और Proj.4 गलत निर्देशांक लौटाता है


10

मैं एक पाइथन स्क्रिप्ट लिख रहा हूं जो x और y निर्देशांक वाली कई XML फ़ाइलों को पढ़ती है और उन सभी को एक एकल सीएसवी फाइल में जोड़ती है। सीएसवी में अक्षांश और देशांतर की आवश्यकता होती है, लेकिन मुझे ओह, उत्तर स्टेट प्लेन में WGS84 के लिए x, y निर्देशांक बदलने में कठिनाई हो रही है।

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

ऊपर दिए गए दोनों तरीके एक ही परिणाम देते हैं, हालांकि यह अव्यक्त लंबा हडसन की खाड़ी में कहीं है। जब मैं ArcMap में निर्देशांक प्लॉट करता हूं, तो सही अक्षांश लंबा होता है: -81.142311,41.688205।

* ध्यान दें कि सभी lat longs को लंबे समय तक प्रदान किया जाता है, जैसा कि यह है कि Proj उपयोग करता है

क्या किसी को पता है कि मुझे Proj.4 और pyproj से गलत निर्देशांक क्यों मिल रहे हैं?

जवाबों:


8

जब मैं दौड़ता हूं तो मुझे वही परिणाम मिलते हैं, जब मैं चलाता हूं gdaltransformऔर 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

अपनी बात के x और y निर्देशांक को उलट देना हालांकि परिणाम देता है जो आप ArcMap में देख रहे हैं:

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

इसलिए आपको यह सुनिश्चित करने के लिए एक दृश्य जांच करने की आवश्यकता है कि क्या आपके पास आपका x है और y सही तरीके से निर्देशांक करता है। जब आप दो परिणाम प्राप्त करते हैं तो यह एक ऐसी समस्या है जो आपको पहले से ही मिलती है और आप इसे गोल त्रुटि या कुछ और करने के लिए कहते हैं।


19

PyProj मानता है कि आपके निर्देशांक मीटर में हैं। मुझे लगता है कि पैर / मीटर से संबंधित कुछ समस्या का कारण है।

लॉज लोन के साथ एक प्रॉज क्लास इंस्टेंस को कॉल करना, lat, lon / lat (डिग्रियों में) को x / y नेटिव मैप प्रोजेक्शन निर्देशांक (मीटर में) में बदल देगा।

यदि वैकल्पिक कीवर्ड 'preserve_units' सही है, तो मानचित्र प्रक्षेपण निर्देशांक की इकाइयां मीटर होने के लिए मजबूर नहीं हैं।

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

क्या आपके शुरुआती निर्देशांक पैरों में हैं? जब आप डेटा को ArcMap में लोड करते हैं तो मैप्स किस यूनिट का उपयोग करता है?

इससे निर्देशांक थोड़ा करीब हो जाता है:

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)

इसी तरह का मुद्दा यहां पाया जा सकता है


आपका बहुत बहुत धन्यवाद। Preserve_units तर्क ने निश्चित रूप से चाल चली, लेकिन निर्देशांक अभी भी गलत हैं। @MerseyViking इस जवाब ने मुझे सही निर्देशांक दिए। काश मैं दोनों उत्तरों को जवाब के रूप में चिह्नित कर सकता क्योंकि वे दोनों मदद करते थे।
ब्रायन

अगर लोग मेरा से अधिक @ जियोग्रिका के उत्तर को अपवोट करते हैं, तो यह सभी को बाहर कर देगा :) खुशी है कि यह सब काम किया।
मर्सीवैकिंग

चूंकि लिंक टूट गया है, यह दिखाने में मददगार हो सकता है कि आप लिख सकते हैं:p1 = Proj( init="epsg:3734", preserve_units=True )
बेंजामिन

4

मैं वास्तव में ओएचई दक्षिण राज्य विमान ग्रिड को छोड़कर एक ही काम करने की कोशिश कर रहा था और मैं आपके सवाल पर आया था। मुझे 3735 के साथ गलत परिणाम मिल रहे थे, अब मुझे 3729 के साथ सही परिणाम मिलते हैं। मुझे उम्मीद है कि यदि आप 3734 से 3728 तक बदलते हैं, तो आपको सही परिणाम मिलेंगे।

EPSG: 3728: NAD83 (NSRS2007) / ओहियो नॉर्थ (ftUS) EPSG: 3729: NAD83 (NSRS2007) / ओहियो साउथ (ftUS) EPSG: 3734: NAD83 / ओहियो नॉर्थ (ftUS) EPSG: 3735: NAD83 / ओहियो साउथ (ftUS)

मैंने आपके दिए हुए लैट का उपयोग किया, लंबा और एक फुट से भी कम।

P2 = pyproj.Proj (init = "epsg: 3728", preserve_units = True)

p2 (-81.142311,41.688205)

(2339326.6558868014, 739401.4226131936)

बनाम 2339327.3, 739400.91

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.