2011-07-21 15 views
8

मैंने निम्नलिखित कोशिश की है, इनपुट: लैट/लॉन डेटा तो मैं इसके चारों ओर एक बॉक्स की गणना करूंगा, मान लीजिए कि 50 मीटर, तो +/- 50 मीटर पूर्व/उत्तर मूल्य पर।लेट/लॉन के लिए लेट/लॉन लेट/लॉन में बेहद दोषपूर्ण है, कैसे आते हैं?

अब मैं इसे अक्षांश/देशांतर के लिए reconvert और एक स्क्रिप्ट के साथ:

http://robotics.ai.uiuc.edu/~hyoon24/LatLongUTMconversion.py मैं एक परिणाम है कि अभी नहीं किया जा सकता हो, देशांतर से पहले चारों ओर 7 2.

zone, easting, northing = LLtoUTM(23, location.get_lat(), location.get_lon()) 

topUTM = northing + error 
bottomUTM = northing - error 
leftUTM = easting - error 
rightUTM = easting + error 
left, top = UTMtoLL(23, leftUTM, topUTM, zone) 

है, बाद में चारों ओर क्या मेरे कोड में त्रुटि है, या स्क्रिप्ट खराब हो सकती है?

तो मैं सिर्फ अक्षांश/देशांतर अक्षांश/देशांतर के लिए UTM के लिए देखने के लिए क्या

>>> p = pyproj.Proj(proj='utm', zone=32, ellps='WGS84') 
>>> p 
<pyproj.Proj object at 0x7ff9b8487dd0> 
>>> x,y = p(47.9941214, 7.8509671) 
>>> print x,y 
5159550.36822 1114087.43925 
>>> print p(x,y,inverse=True) 
(47.971558538495991, 7.8546573140162605) 

होता है और यहाँ के रूप में बेहद दूर नहीं है pyproj उपयोग करने के लिए कोशिश की है, बंद ऊपर से स्क्रिप्ट के साथ के रूप में, लेकिन यह अभी भी पर्याप्त रूप से पर्याप्त गलत लगता है क्योंकि इसका उपयोग करने में सक्षम नहीं है। कैसे? अधिक सटीक परिणाम प्राप्त करने के लिए मैं क्या कर सकता हूं?

संपादित करें:

मैं परीक्षण() और यह सब पारित कर दिया परीक्षण भाग गया।

ईपीएसजी फ़ाइल में ऐसी कोई चीज़ नहीं है। मुझे सबसे नज़दीकी मिला यह था:

<32632> +proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> 

कोई tmerc नहीं। इसके अलावा मुझे twgs84 को पैरामीटर के रूप में पास करने की क्या आवश्यकता होगी? ऊपर वाले लोग?

उत्तर

2

pyProj साथ आपका मुद्दा सिर्फ यहाँ वर्णित एक की तरह लगता है:

http://code.google.com/p/pyproj/issues/detail?id=3

जो हल हो गई है:

solved! in epsg file there must be

<2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <>

note the towgs84 parameter!

यदि आप pyproj का उपयोग करना जारी रखना चाहते हैं तो उस थ्रेड को जांचें।

इसके अलावा, मॉड्यूल के test() फ़ंक्शन का काम करता है? क्या आपने test निर्देशिका में इसके साथ आने वाली किसी भी स्क्रिप्ट की कोशिश की है?

+0

उम्मीद है कि उबंटू 13.04 raring एक अप-टू-डेट PyProj शामिल खुद को गलत मिलेगा होगा उन की कोशिश करो। स्रोत से स्थापित करें! – Richard

23

मैं अजगर के लिए एक छोटा सा UTM रूपांतरण पुस्तकालय पिछले हफ्ते बनाया है और अजगर पैकेज सूचकांक पर अपलोड किया है: http://pypi.python.org/pypi/utm

मैं इसे pyproj उपयोग की तुलना में है और यह तेजी से और अधिक सटीक है। अपने नमूना डेटा को देखते हुए, यह परिणाम है:

>>> import utm 

>>> u = utm.from_latlon(47.9941214, 7.8509671) 
>>> print u 
(414278, 5316285, 32, 'T') 

>>> print utm.to_latlon(*u) 
(47.994157948891505, 7.850963967574302) 

अद्यतन: रिचर्ड्स answer नीचे इस समस्या के लिए वास्तविक समाधान का वर्णन है।

+0

धन्यवाद! काम करता है बिल्कुल सही –

+0

चिल्लाओ के लिए धन्यवाद, @TBieniek! – Richard

+0

इस कार्यान्वयन के लिए बहुत बहुत धन्यवाद, बिल्कुल मूल्यवान! – Blackbrook

17

त्रुटि आपके कोड में है।

सबसे पहले, अन्य उत्तरों में से एक में सूचीबद्ध PyProj समस्या असली है। आप अपने EPSG फ़ाइल की जांच कर सुनिश्चित करें कि यह लाइन

<2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> 

नोट towgs84 पैरामीटर शामिल करना चाहिए।

PyProj के साथ आपकी समस्या प्रक्षेपण आदेश का गलत उपयोग करने से उत्पन्न होती है।

यदि हम 47.9 941214 एन, 7.8509671 ई और convert to UTM लेते हैं तो हमें जोन 32, 414278 ईस्टिंग, 5316286 नॉर्थिंग मिलता है।

आप निम्न PyProj कार्रवाई:

p = pyproj.Proj(proj='utm', zone=32, ellps='WGS84') 
>>> x,y = p(47.9941214, 7.8509671) 
>>> print x,y 
5159550.36822 1114087.43925 
>>> print p(x,y,inverse=True) 
(47.971558538495991, 7.8546573140162605) 

लेकिन, अगर हम PyProj documentation परामर्श, हम निम्न देखें:

तर्क देशांतर के साथ एक Proj वर्ग उदाहरण कॉलिंग, अक्षां इच्छा लोन/लैट (डिग्री में) x/y देशी मानचित्र प्रक्षेपण निर्देशांक में परिवर्तित करें ( मीटर में)।

के ओपी के PyProj संचालन फिर से चलाने की कोशिश करते हैं, लेकिन देशांतर/अक्षांश तर्कों का क्रम बदलने:

p = pyproj.Proj(proj='utm', zone=32, ellps='WGS84') 
>>> x,y = p(7.8509671, 47.9941214) 
>>> print x,y 
414278.16731 5316285.59492 
>>> print p(x,y,inverse=True) 
(7.850967099999812, 47.994121399999784) 

आपरेशन ही उलट (काफी) पूरी तरह से!

UTMtoLL(ReferenceEllipsoid, northing, easting, zone) 

फिर भी आप UTMtoLL(23, leftUTM, topUTM, zone) जहां leftUTM एक पूर्व की ओर है का उपयोग करें और topUTM एक उत्तर की ओर है:

अपने प्रश्न के पहले भाग का जवाब करने के लिए, यदि आप UTMtoLL की परिभाषा को http://robotics.ai.uiuc.edu/~hyoon24/LatLongUTMconversion.py में देखने के लिए, आपको निम्न ।

इसलिए, आपकी पहली स्क्रिप्ट और पायप्रोज दोनों के मामले में, आपने तर्कों के गलत क्रम का उपयोग किया है।

यह किसी भी व्यक्ति के गलत होने का सुझाव देने से पहले हमेशा अपने काम की जांच करने के लिए एक अच्छा अनुस्मारक है- (या ट्रिपल-)। उस ने कहा, पायथन का प्रलेखन not the greatest है और इस उदाहरण में पायप्रोज का दस्तावेज सबसे अच्छा है। इस कमांड का एक अच्छा वेब-आधारित स्पष्टीकरण और उसके उपयोग के उदाहरणों के साथ शायद आपके हिस्से पर एंजस्ट को रोका होगा।

1

मैं pyproj साथ कोई समस्या नहीं है, तो निम्न कोड

from pyproj import Proj 

Lat = 52.063098675 
Lon = -114.132980348 #Calgary 

ZoneNo = "11" #Manually input, or calcuated from Lat Lon 
myProj = Proj("+proj=utm +zone="+ZoneNo+",\ 
+north +ellps=WGS84 +datum=WGS84 +units=m +no_defs") #north for north hemisphere 
UTMx, UTMy = myProj(Lon, Lat) 

######################################## 

#UTM ==> Lat Lon: 
ZoneNo = "11" #Manually input or from other sources 
myProj = Proj("+proj=utm +zone="+\ 
ZoneNo+", +north +ellps=WGS84 +datum=WGS84 +units=m +no_defs") 
Lon2, Lat2 = myProj(UTMx, UTMy,inverse=True) 

print Lat2 
print Lon2 
संबंधित मुद्दे