ল্যাট / লম্বা পয়েন্টের মধ্যে দূরত্ব


10

আমি দুটি অক্ষাংশ / দ্রাঘিমাংশ পয়েন্টের মধ্যে দূরত্ব গণনা করার চেষ্টা করছি। আমার কাছে কোডের একটি টুকরা রয়েছে যা বেশিরভাগই কাজ করে যা আমি এই পোস্টটি থেকে ইয়েঙ্কড করেছিলাম তবে কীভাবে এটি কাজ করে আমি সত্যিই বুঝতে পারি না।

কোডটি এখানে:

<?php
// POINT 1
$thisLat = deg2rad(44.638);
$thisLong = deg2rad(-63.587);

// POINT 2
$otherLat = deg2rad(44.644);
$otherLong = deg2rad(-63.911);

$MeanRadius = 6378 - 21 * sin($lat1);

$xa = (Cos($thisLat)) * (Cos($thisLong));
$ya = (Cos($thisLat)) * (Sin($thisLong));
$za = (Sin($thisLat));

$xb = (Cos($otherLat)) * (Cos($otherLong));
$yb = (Cos($otherLat)) * (Sin($otherLong));
$zb = (Sin($otherLat));

$distance = $MeanRadius * Acos($xa * $xb + $ya * $yb + $za * $zb);

echo $distance;
?>

আমার কয়েকটি প্রশ্ন আছে:

  1. এক্সএ, ইয়া, জা কি? আমি বুঝতে পারি যে তারা 3 ডি কার্টেসিয়ান বিমানের পয়েন্ট তবে তারা কোথায় সম্পর্কিত? পৃথিবীর কেন্দ্র?
  2. এটি কীভাবে cos($xa * $xb + $ya * $yb + $za * $zb)পয়েন্টগুলির মধ্যে দূরত্ব গণনা করে? আমি জানি যে 2 ডি-তে আমি এটি করতাম:

বিকল্প পাঠ

Pythagorean Theorem 
distance^2 = b^2 + a^2
distance = sqr((y2-y1)^2 + (x2 - x1)^2)
  1. এটি কতটা সঠিক হবে? এটি সম্পর্কে অন্য পৃষ্ঠায় কিছু আলোচনা হয়েছিল। তবে আমি বিশেষত দূরত্বটি ব্যবহার করতে চাই যে ব্যবহারকারীরা একে অপরের 10 মি, 20 মি বা 50 মি এর মতো কোনও কিছুর মধ্যে রয়েছেন। আমি কি সঠিক নির্ভুলতার সাথে এটি করতে সক্ষম হব?
  2. আমার কী ব্যবহার করা উচিত $MeanRadius? এটি কি যুক্তিসঙ্গত মূল্য? আমি মনে করি যে সেই মানটি পৃথিবীটি একটি এলিপস বলে ধরে নিয়েছে।

উত্তর:


17

এটি সাধারণ উদ্দেশ্যে ব্যবহারের জন্য ভয়ঙ্কর কোড কারণ এটি ভ্রান্ত ফলাফল দিতে পারে বা স্বল্প দূরত্বের জন্য পুরোপুরি ব্যর্থও হতে পারে। ব্যবহার করুন Haversine ফর্মুলা পরিবর্তে।

(যে সূত্রের ভিত্তিতে আপনার কোডটি ভিত্তিক করা হয়েছে সেটি গোলকের দুটি পয়েন্টকে (একটি উপবৃত্ত নয়) তাদের 3D কার্তেসিয়ান স্থানাঙ্কগুলিতে (এক্সএ, ইয়া, জেএ) এবং (এক্সবি, ইবি, জেডবি)) ইউনিটে রূপান্তর করেগোলক এবং তাদের বিন্দু পণ্য গঠন করে, যা তাদের মধ্যবর্তী কোণের কোসাইনকে সমান করে। ACos ফাংশনটি সেই কোণটি দেয়, যা পৃথিবীর ব্যাসার্ধের দ্বারা ছোট হলে দূরত্বটি অনুমান করবে। সমস্যাটি হ'ল রেডিয়ানগুলিতে আকার 'ই' বলে একটি ছোট কোণের কোসাইন ই ^ 2/2 এর কাছাকাছি পরিমাণের সাথে 1 এর চেয়ে পৃথক হয় dif ই ভাসমান পয়েন্ট যথার্থতার দ্বিগুণের বর্গমূলের চেয়ে ছোট হলে এটি ভাসমান বিন্দু ত্রুটির মেঘের মধ্যে অদৃশ্য হয়ে যায়। আপনি যদি একক নির্ভুলতায় কম্পিউটিং করছেন তবে এর অর্থ হ'ল 0.001 এর কম ই - এর মান - প্রায় এক কিলোমিটার - শূন্যের সাথে বিভ্রান্ত হবে! দ্বিগুণ নির্ভুলতায় কাটাফটি প্রায় e = 10 ^ -8 এর কাছাকাছি, তবে ই = 10 ^ -4 বা ততক্ষণে (প্রায় 10 মিটার) আপনি সম্ভবত এতটা নির্ভুলতা হারাতে পারেন যে আপনাকে উদ্বেগের প্রয়োজন,, কিছু উচ্চ নির্ভুল অভ্যন্তরীণ গণনা অন্তর্নির্মিত আছে))।


7

এই সাইটটি দেখুন, http://www.movable-type.co.uk/scriptts/latlong.html

আপনি যদি এটি প্রয়োগ করেন এবং আপনি ভুল উত্তর পেয়ে থাকেন তবে আপনার সম্ভবত ভুল ইউনিট রয়েছে। আমি মনে করি সেই সাইটের জন্য বেশিরভাগ অপারেশন দশমিক ডিগ্রির পরিবর্তে রেডিয়ানে করা হয়।

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