फील्ड कैलकुलेटर में पायथन का उपयोग करते हुए डीएमएस से डीडी में परिवर्तित करना?


12

मुझे अक्षांश / लंबे समय को डेटा में दशमलव डिग्री में मिनट, मिनट और सेकंड के रूप में व्यक्त करने की आवश्यकता है । उदाहरण के लिए, डेटा में, उन्हें अक्षांश स्तंभ में N335042.06 और देशांतर स्तंभ में W86031.04 के रूप में सूचीबद्ध किया गया है। मैंने यह समस्या पहले की है जहाँ मैंने एक स्क्रिप्ट बनाई थी जिसने DMS को DD में बदल दिया, और इसके विपरीत, इसलिए मुझे लगता है कि मैं इसके लिए बिट्स का उपयोग कर सकता हूं। लेकिन समस्या यह है कि डेटा में 'एन' और 'डब्ल्यू' को अनदेखा करना (बेहतर शब्द की कमी के लिए) कैसे है? क्या मैं उन्हें छोड़ सकता हूं? और डीएमएस बिना किसी प्रतीक या रिक्त स्थान के सभी को एक साथ सूचीबद्ध किया गया है।

मैं उपयोग कर सकते हैं len(), range(), split()निर्दिष्ट करने के लिए कौन-सा भाग मूल्य से पढ़ने के लिए? उदाहरण के लिए, निम्नलिखित कर सकते हैं?

N335042.06 कहाँ, 33 = डिग्री 50 = मिनट 42.06 = सेकंड ...?

मैं इस ESRI लेख पर आया था , लेकिन यह VB में है। शायद इसे एक संदर्भ के रूप में उपयोग करेंगे लेकिन कुछ शब्दावली / वाक्यविन्यास पायथन से अलग है।

अंतिम कोड जो काम करता है!

# Pre-logic
def latDD(x):
  D = int(x[1:3])
  M = int(x[3:5])
  S = float(x[5:])
  DD = D + float(M)/60 + float(S)/3600
  return DD

# Expression
latDD(!Latitude!)

4
7 महीने बाद मुझे यह पता लगाना था कि यह कैसे करना है और अपना कोड पोस्ट करने के लिए धन्यवाद! :)
blah238

जवाबों:


8
  • पायथन ट्यूटोरियल में टुकड़ा करने की क्रिया पर एक नज़र डालें । आप एक स्ट्रिंग से वर्णों की एक श्रेणी को स्लाइसिंग सिंटैक्स का उपयोग करके पकड़ सकते हैं, जैसे D = int(x[1:2])

    सेकंड के लिए, प्रयास करें S = float(x[5:])। यह अनुक्रमणिका 5 से शुरू होने वाले सभी वर्णों को स्ट्रिंग के अंत तक ले जाएगा, इस स्थिति में कि आपके पास सेकंड के लिए चर लंबाई मान है।

  • !FieldName!वाक्य रचना अभिव्यक्ति बॉक्स में ही मान्य है। आपको "पूर्व-तर्क" अनुभाग में एक फ़ंक्शन को परिभाषित करना होगा जो आपके इच्छित फ़ील्ड के मूल्यों में लेता है और वांछित मान लौटाता है। फिर, अभिव्यक्ति बॉक्स में, फ़ंक्शन को कॉल करें और !FieldName!सिंटैक्स का उपयोग करके फ़ील्ड मानों में पास करें । मदद में फ़ील्ड उदाहरणों की गणना देखें ।

फ़ील्ड कैलकुलेटर में मेरे पास मेरे कोड के रूप में निम्नलिखित हैं, लेकिन यह इंगित कर रहा है कि पहली पंक्ति में त्रुटि है। कोई विचार? x = (!Latitude!) D = int(x[1:3]) M = int(x[3:5]) S = float(x[5:10]) DD = D + float(M)/60 + float(S)/3600और कोड ब्लॉक में मेरे पास है!Latitude! = DD
kaoscify

अधिक जानकारी के साथ अद्यतित उत्तर, इसे आज़माएं और हमें बताएं कि क्या आपको अभी भी परेशानी है।
ब्लाह 238

धन्यवाद! वहाँ हो रही है, लेकिन मुझे एक नई त्रुटि का सामना करना पड़ा है। मैंने अपनी पहली पोस्ट नए कोड के साथ संपादित की है। विचार? क्षमा करें, मैं पायथन के लिए नया हूं, लेकिन मैं वास्तव में आपकी मदद की सराहना करता हूं!
kaoscify

return DDइसके बजाय प्रयास करें return latDD
blah238

1
मैंने हटा दिया print DDऔर आपकी पसंद के अनुसार बदल return latDDगया return DD, और यह काम कर गया! धन्यवाद!
kaoscify

-1

बिना किसी पूर्व तर्क के सिर्फ फील्ड कैलकुलेटर का उपयोग करना मेरे लिए यह काम करने में सक्षम था। मेरे पास जो स्ट्रिंग थी वह कुछ अलग स्थानों के साथ थोड़ा अलग प्रारूप थी।

"Dd mm ss.ss" जैसे LAT मान और मैंने कैलकुलेटर में इसका उपयोग किया।

फ्लोट (LAT! [0: 2]) + फ्लोट (! LAT! [3: 5]) / 60+ फ्लोट (LAT! [6:]) / 3600

लंबे समय से "-DD मिमी ss.ss" और लंबे समय तक

फ्लोट (! LONG_! [0: 3]) + फ्लोट (! LONG_! [4: 6]) / 60+ फ्लोट (! LONG_! [7:]) / 36


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