ফিল্ড ক্যালকুলেটরে পাইথন ব্যবহার করে ডিএমএস থেকে ডিডি তে রূপান্তর করছেন?


12

আমাকে ল্যাট / লম্বা রূপান্তর করতে হবে যা ডেটা, মিনিট এবং সেকেন্ড হিসাবে ডেটা দশমিক ডিগ্রীতে রূপান্তরিত হয় । উদাহরণস্বরূপ, ডেটাগুলিতে, তারা অক্ষাংশ কলামে N335042.06, এবং দ্রাঘিমাংশ কলামে W86031.04 হিসাবে তালিকাবদ্ধ রয়েছে। আমি এই সমস্যাটি আগেই করেছি যেখানে আমি একটি স্ক্রিপ্ট তৈরি করেছি যা ডিএমএসকে ডিডি তে রূপান্তর করেছিল এবং তদ্বিপরীত, তাই আমি অনুমান করি যে আমি এটি থেকে বিটগুলি ব্যবহার করতে পারি। তবে আমার যে সমস্যাটি হচ্ছে তা হ'ল কীভাবে উপাত্তগুলিতে 'এন' এবং 'ডাব্লু' উপেক্ষা করবেন (আরও ভাল শব্দের অভাবে)? আমি কি তাদের এড়িয়ে যেতে পারি? এবং ডিএমএস কোনও চিহ্ন বা স্পেস ছাড়াই একসাথে তালিকাভুক্ত হয়।

আমি ব্যবহার করতে পারি len(), range(), split()উল্লেখ করার কোন অংশে মান থেকে পড়তে? উদাহরণস্বরূপ, নিম্নলিখিত কি করতে পারেন?

N335042.06 কোথায়, 33 = ডিগ্রি 50 = মিনিট 42.06 = সেকেন্ড ...?

আমি এই ইএসআরআই নিবন্ধটি জুড়ে এসেছি , তবে এটি ভিবিতে রয়েছে। সম্ভবত এটি একটি রেফারেন্স হিসাবে ব্যবহার করবে তবে কিছু সংজ্ঞা / বাক্য গঠন পাইথনের থেকে পৃথক।

ফাইনাল কোড যে কাজ করে!

# 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
ক্যাসোসাইফ করুন

আরও তথ্যের সাথে উত্তর আপডেট হয়েছে, চেষ্টা করে দেখুন এবং আপনার এখনও সমস্যা আছে কিনা তা আমাদের জানান।
blah238

ধন্যবাদ! সেখানে পৌঁছে, তবে আমি একটি নতুন ত্রুটির মুখোমুখি হয়েছি। আমি আমার প্রথম পোস্টটি নতুন কোড দিয়ে সম্পাদনা করেছি। থটস? দুঃখিত, আমি পাইথনে নতুন, তবে আমি আপনার সহায়তার সত্যই প্রশংসা করি!
কাওসিফাই

return DDপরিবর্তে চেষ্টা করুন return latDD
blah238

1
আমি মুছে print DDএবং পরিবর্তন return latDDকরার return DDমত আপনি পরামর্শ, এবং এটা কাজ! ধন্যবাদ!
কওসিফাই করুন

-1

কোনও পূর্ব যুক্তি ছাড়াই কেবল ফিল্ড ক্যালকুলেটর ব্যবহার করে আমি আমার জন্য এই কাজটি করতে সক্ষম হয়েছি। আমার কাছে থাকা স্ট্রিংটি কিছু স্পেস সহ কিছুটা আলাদা ফর্ম্যাট ছিল।

"Dd মিমি এসএসএসএস" এর মতো ল্যাট মান এবং আমি এটি ক্যালকুলেটরে ব্যবহার করেছি।

ভাসা ((LAT! [0: 2]) + ভাসা (! LAT! [3: 5]) / 60+ ভাসা (! LAT! [6:]) / 3600

"-dd মিমি এসএসএসএস" এর মতো দীর্ঘ মূল্য এবং এটি দীর্ঘ সময়ের জন্য

ভাসা ((লং_! [0: 3]) + ভাসা ((দীর্ঘ!! [4: 6]) / 60+ ভাসা (! দীর্ঘ!! [7:]) / 3600


2
আপনার সম্ভাব্য নেতিবাচক ডিগ্রি এবং ধনাত্মক মিনিট এবং সেকেন্ড থাকার কারণে প্রকৃতপক্ষে, আপনার দীর্ঘ মানটি ভুল। import reপ্রাক-যুক্তিতে নিয়মিত অভিব্যক্তি ব্যবহার করা ভাল
মাইক টি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.