ল্যাট / লম্বা এবং কিমি দূরত্বের সাথে কাজ করার জন্য সহজ গণনা?


119

আমি কি এমন একটি সাধারণ গণনা করতে পারি যা কিঃমিঃকে এমন একটি মানতে রূপান্তরিত করবে যা আমি অনুসন্ধানের জন্য একটি সীমাবদ্ধ বাক্স গণনা করার জন্য একটি ল্যাট বা লম্বা ফ্লোতে যুক্ত করতে পারি? এটি সম্পূর্ণ নির্ভুল হওয়ার দরকার নেই।

উদাহরণস্বরূপ: যদি আমাকে লন্ডন, ইংল্যান্ডের জন্য একটি ল্যাট / দীর্ঘ দেওয়া হয় (51.5001524, -0.1262362) এবং আমি গণনা করতে চেয়েছিলাম যে বিন্দুটি সেই স্থান থেকে 25km পূর্ব / পশ্চিমে এবং লম্বটি কি উত্তর / দক্ষিণে 25km হবে? বিন্দু, উপরের মানগুলিতে যুক্ত করতে 25km দশমিক দশকে রূপান্তর করতে আমার কী করতে হবে?

আমি একটি সাধারণ নিয়মের থাম্ব খুঁজছি, অর্থাত: 1 কিলোমিটার == +/- 0.XXX

সম্পাদনা:

"ল্যাট লোন" এর জন্য আমার আসল অনুসন্ধান এই ফলাফলটি ফেরেনি:

প্রদত্ত ল্যাট / এলএনজি অবস্থানের জন্য বাউন্ডিং বক্সটি কীভাবে গণনা করবেন?

গৃহীত উত্তরটি আমার প্রয়োজনীয়তার জন্য যথেষ্ট বলে মনে হচ্ছে।


উত্তর:


220

আনুমানিক রূপান্তরগুলি হ'ল:

  • অক্ষাংশ: 1 ডিগ্রি = 110.574 কিমি
  • দ্রাঘিমাংশ: 1 ডিগ্রি = 111.320 * কোস (অক্ষাংশ) কিমি

এটি পৃথিবীর পোলার সমতলতার জন্য পুরোপুরি সঠিকভাবে আসে না - এর জন্য আপনি সম্ভবত WGS84 রেফারেন্স এলিপসয়েড (জিপিএসের জন্য ব্যবহৃত মডেল) ব্যবহার করে আরও জটিল সূত্র চান। তবে ত্রুটিটি সম্ভবত আপনার উদ্দেশ্যে তুচ্ছ।

সূত্র: http://en.wikedia.org/wiki/Latitude

সতর্কতা : সচেতন থাকুন যে দীর্ঘতর স্থানাঙ্কগুলি ডিগ্রিতে প্রকাশিত হয়, যখন cosবেশিরভাগ (সমস্ত?) ভাষায় ফাংশন সাধারণত রেডিয়ান গ্রহণ করে, সুতরাং রেডিয়ান রূপান্তরের জন্য একটি ডিগ্রি প্রয়োজন needed


দ্বিতীয় সূত্রে আপনার অর্থ কোস (দ্রাঘিমাংশ)?
ওডিস

1
আপনি কিভাবে এটি নিয়ে এসেছেন? আমি কিছু মিস করছি, অনুগ্রহ করে দ্রাঘিমাংশের গণনাগুলি বিস্তারিতভাবে বর্ণনা করতে পারেন? Ty
ওডিস

5
@ ওডিস: আপনি যদি দুটি পয়েন্টের তুলনা করছেন যা একই দ্রাঘিমাংশের (উত্তর / দক্ষিণ) উপর অবস্থিত, তবে তারা একটি দুর্দান্ত বৃত্তে থাকে এবং রূপান্তর ফ্যাক্টরটি কেবলমাত্র পৃথিবীর মেরু পরিধি 360 ডিগ্রি দ্বারা বিভক্ত হয়। তবে এটি পূর্ব-পশ্চিম পরিমাপের জন্য পৃথক, কারণ (নিরক্ষীয় বাদে) আপনি একটি "দুর্দান্ত বৃত্ত" বরাবর পরিমাপ করছেন না, সুতরাং নির্দিষ্ট অক্ষাংশে "পরিধি" ছোট is এবং সংশোধন ফ্যাক্টরটি অক্ষাংশের কোসাইন হিসাবে দেখা গেছে।
জিম লুইস

17
আমার ব্যাখ্যা: cos(0°) = 1=> সুতরাং নিরক্ষীয় অঞ্চলে গণনা করে কোনও সংশোধন ফ্যাক্টর প্রয়োগ করা হয়নি applied দ্রাঘিমাংশ সেখানে প্রশস্ত। cos(90°) = 0=> মেরুতে দ্রাঘিমাংশ এক বিন্দুতে মিলিত হয়। গণনা করার মতো কোনও দূরত্ব নেই।
জেনি ও'রিলি

4
@ স্টিজন: ম্যাথাকোস () কল করার আগে আপনাকে ডিগ্রি থেকে রেডিয়ানে রূপান্তর করতে হবে।
জিম লুইস

5

আপনি যদি জাভা, জাভাস্ক্রিপ্ট বা পিএইচপি ব্যবহার করে থাকেন, তবে একটি গ্রন্থাগার রয়েছে যা কিছু মজাদারভাবে জটিল (তবে এখনও দ্রুত) ত্রিকোণমিতি ব্যবহার করে ঠিক এই গণনাগুলি করবে:

http://www.jstott.me.uk/jcoord/


সাইটটিতে এখন লাইব্রেরি রয়েছে।
মিডফিল্ড

2
লিংকটা ভেঙে গেছে!
চ্যাটজিচ

পিএইচপি-র জন্য, আপনি এই কাঁটাচামচটি ব্যবহার করতে পারেন: github.com/dvdoug/PHPCoord
dearsina


1

আকর্ষণীয় যে আমি ইউটিএম স্থানাঙ্কের উল্লেখ দেখতে পাইনি।

https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system

কমপক্ষে আপনি যদি একই জোনে কিমি যুক্ত করতে চান তবে এটি সোজা হওয়া উচিত (পাইথনে: https://pypi.org/project/utm/ )

utm.from_latlon এবং utm.to_latlon।


ইউটিএম লিঙ্কের জন্য ধন্যবাদ। অবাক করে দেওয়ার মতো মনে হচ্ছে এটির কোনও নথি নেই।
ওয়েস্টওয়ার্ড

1

জিম লুইস তার দুর্দান্ত উত্তরের জন্য ধন্যবাদ এবং আমি এই সমাধানটি সুইফটে আমার ফাংশন দ্বারা চিত্রিত করতে চাই:

func getRandomLocation(forLocation location: CLLocation, withOffsetKM offset: Double) -> CLLocation {
        let latDistance = (Double(arc4random()) / Double(UInt32.max)) * offset * 2.0 - offset
        let longDistanceMax = sqrt(offset * offset - latDistance * latDistance)
        let longDistance = (Double(arc4random()) / Double(UInt32.max)) * longDistanceMax * 2.0 - longDistanceMax

        let lat: CLLocationDegrees = location.coordinate.latitude + latDistance / 110.574
        let lng: CLLocationDegrees = location.coordinate.longitude + longDistance / (111.320 * cos(lat / .pi / 180))
        return CLLocation(latitude: lat, longitude: lng)
    }

দূরত্ব রূপান্তর করতে এই ফাংশনে আমি নিম্নলিখিত সূত্রগুলি ব্যবহার করি:

latDistance / 110.574
longDistance / (111.320 * cos(lat / .pi / 180))

আমি মনে করি এটি "ল্যাট * পাই / 180" হওয়া উচিত
ম্যাগামিগ

1

কেন সঠিকভাবে তৈরি করা জিওপ্যাটিয়াল কোয়েরি ব্যবহার করবেন না ???

এখানে এসটিকিউএল সার্ভারের রেফারেন্স পৃষ্ঠাটি এসটিসিটেনস জিওপ্যাটিয়াল ফাংশনে রয়েছে:

https://docs.microsoft.com/en-us/sql/t-sql/spatial-geography/stcontains-geography-data-type?view=sql-server-ver15

অথবা আপনি যদি বাক্স এবং রেডিয়ান রূপান্তরটি ব্যবহার করতে অপেক্ষা না করেন তবে আপনার প্রয়োজনীয় পয়েন্টগুলি সন্ধান করতে আপনি সর্বদা দূরত্ব ফাংশনটি ব্যবহার করেন:

DECLARE @CurrentLocation geography; 
SET @CurrentLocation  = geography::Point(12.822222, 80.222222, 4326)

SELECT * , Round (GeoLocation.STDistance(@CurrentLocation ),0) AS Distance FROM [Landmark]
WHERE GeoLocation.STDistance(@CurrentLocation )<= 2000 -- 2 Km

প্রায় কোনও ডাটাবেসের জন্য একই কার্যকারিতা থাকা উচিত।

আপনি যদি জিওপ্যাটিয়াল ইনডেক্সিং সঠিকভাবে প্রয়োগ করে থাকেন তবে আপনার অনুসন্ধানগুলি আপনি যে পদ্ধতির ব্যবহার করছেন তার চেয়ে দ্রুত গতিতে হবে


1
দয়া করে মাধ্যমে পড়া করার জন্য একটু সময় সম্পাদনা সাহায্যের মধ্যে সহায়তা কেন্দ্র । স্ট্যাক ওভারফ্লোতে ফর্ম্যাট করা অন্যান্য সাইটের চেয়ে আলাদা।
ধর্মমান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.