برنامه محاسبه فاصله بین دو نقطه روی کره زمین — راهنمای کاربردی
در این مطلب، روش نوشتن برنامه محاسبه فاصله بین دو نقطه روی کره زمین مورد بررسی قرار گرفته و پیادهسازی ان در زبانهای برنامهنویسی گوناگون شامل «سیپلاسپلاس» (++C)، «جاوا» (Java)، «پایتون» (Python)، «سیشارپ» (#C) و «پیاچپی» (PHP) انجام شده است.
برنامه محاسبه فاصله بین دو نقطه روی کره زمین
طول و عرض جغرافیایی به صورت درجه داده شده است. هدف، پیدا کردن فاصله بین دو نقطه روی کره زمین است.
مثال زیر، برای درک بهتر این مطلب، قابل توجه است.
Input : Latitude 1: 53.32055555555556 Latitude 2: 53.31861111111111 Longitude 1: -1.7297222222222221 Longitude 2: -1.6997222222222223 Output: Distance is: 2.0043678382716137 Kilometers
«فاصله دایره بزرگ» یا «فاصله ارتودرومیک» (Orthodromic Distance) کوتاهترین فاصله بین دو نقطه روی کره (یا سطح زمین) است. به منظور استفاده از این روش، نیاز به داشتن مختصات نقاط A و B است. روش دایره بزرگ، از دیگر روشها بهتر است.
ابتدا، مقادیر طول و عرض جغرافیایی از درجه اعشاری به رادیان تبدیل میشود. بدین منظور، مقادیر طول و عرض جغرافیای هر دو نقطه بر ۱۸۰ تقسیم بر پی (Pi)، تقسیم میشود. مقدار پی برابر با ۲۲/۷ است. مقدار ۱۸۰ تقسیم بر پی (Pi) تقریبا برابر با ۵۷٫۲۹۵۷۷۹۵۱ است. اگر هدف محاسبه فاصله بین دو مکان به مایل باشد، میتوان از مقدار ۳۹۶۳ استفاده کرد که شعاع زمین ست. اگر هدف محاسبه فاصله بین دو نقطه به کیلومتر باشد، میتوان از مقدار ۶۳۷۸/۸ استفاده کرد که شعاع زمین است.
روش پیدا کردن مقدار عرض جغرافیایی به رادیان:
مقدار عرض جغرافیایی به رادیان = عرض جغرافیایی / ۱۸۰ تقسیم بر پی (Pi)
یا
مقدار عرض جغرافیایی به رادیان = عرض جغرافیایی / ۵۷٫۲۹۵۷۷۹۵۱
روش پیدا کردن مقدار طول جغرافیایی به رادیان:
مقدار طول جغرافیایی به رادیان = طول جغرافیایی / $$(۱۸۰/pi)$$
یا
مقدار طول جغرافیایی به رادیان = طول جغرافیایی / ۵۷٫۲۹۵۷۷۹۵۱
اکنون، مختصات نقطه A به صورت طول و عرض جغرافیایی دریافت میشود. از روش تبدیل بالا، برای تبدیل مقادیر طول و عرض جغرافیایی به رادیان، استفاده میشود. این مقادیر، lat1 و long1 نامیده میشوند. کار مشابهی برای مختصاتهای نقطه B نیز انجام و lat2 و long2 دریافت میشوند. اکنون، برای محاسبه فاصله بین نقطه A و نقطه B، از رابطه زیر استفاده میشود.
Distance, d = 3963.0 * arccos[(sin(lat1) * sin(lat2)) + cos(lat1) * cos(lat2) * cos(long2 – long1)]
فاصله به دست آمده یعنی d به مایل است. اگر مقدار به کیلومتر مورد نیاز باشد، باید d را در ۱٫۶۰۹۳۴۴ ضرب کرد.
d به کیلومتر = ۱٫۶۰۹۳۴۴ * d به مایل
بنابراین، کوتاهترین فاصله بین دو نقطه روی کره زمین با استفاده از رویکرد فاصله بزرگترین دایره، به دست میآید.
برنامه محاسبه فاصله بین دو نقطه روی کره زمین در ++C
// C++ program to calculate Distance // Between Two Points on Earth #include <bits/stdc++.h> using namespace std; // Utility function for // converting degrees to radians long double toRadians(const long double °ree) { // cmath library in C++ // defines the constant // M_PI as the value of // pi accurate to 1e-30 long double one_deg = (M_PI) / 180; return (one_deg * degree); } long double distance(long double lat1, long double long1, long double lat2, long double long2) { // Convert the latitudes // and longitudes // from degree to radians. lat1 = toRadians(lat1); long1 = toRadians(long1); lat2 = toRadians(lat2); long2 = toRadians(long2); // Haversine Formula long double dlong = long2 - long1; long double dlat = lat2 - lat1; long double ans = pow(sin(dlat / 2), 2) + cos(lat1) * cos(lat2) * pow(sin(dlong / 2), 2); ans = 2 * asin(sqrt(ans)); // Radius of Earth in // Kilometers, R = 6371 // Use R = 3956 for miles long double R = 6371; // Calculate the result ans = ans * R; return ans; } // Driver Code int main() { long double lat1 = 53.32055555555556; long double long1 = -1.7297222222222221; long double lat2 = 53.31861111111111; long double long2 = -1.6997222222222223; // call the distance function cout << setprecision(15) << fixed; cout << distance(lat1, long1, lat2, long2) << " K.M"; return 0; } // This code is contributed // by Aayush Chaturvedi
برنامه محاسبه فاصله بین دو نقطه روی کره زمین در جاوا
// Java program to calculate Distance Between // Two Points on Earth import java.util.*; import java.lang.*; class GFG { public static double distance(double lat1, double lat2, double lon1, double lon2) { // The math module contains a function // named toRadians which converts from // degrees to radians. lon1 = Math.toRadians(lon1); lon2 = Math.toRadians(lon2); lat1 = Math.toRadians(lat1); lat2 = Math.toRadians(lat2); // Haversine formula double dlon = lon2 - lon1; double dlat = lat2 - lat1; double a = Math.pow(Math.sin(dlat / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon / 2),2); double c = 2 * Math.asin(Math.sqrt(a)); // Radius of earth in kilometers. Use 3956 // for miles double r = 6371; // calculate the result return(c * r); } // driver code public static void main(String[] args) { double lat1 = 53.32055555555556; double lat2 = 53.31861111111111; double lon1 = -1.7297222222222221; double lon2 = -1.6997222222222223; System.out.println(distance(lat1, lat2, lon1, lon2) + " K.M"); } } // This code is contributed by Prasad Kshirsagar
برنامه محاسبه فاصله بین دو نقطه روی کره زمین در پایتون
# Python 3 program to calculate Distance Between Two Points on Earth from math import radians, cos, sin, asin, sqrt def distance(lat1, lat2, lon1, lon2): # The math module contains a function named # radians which converts from degrees to radians. lon1 = radians(lon1) lon2 = radians(lon2) lat1 = radians(lat1) lat2 = radians(lat2) # Haversine formula dlon = lon2 - lon1 dlat = lat2 - lat1 a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2 c = 2 * asin(sqrt(a)) # Radius of earth in kilometers. Use 3956 for miles r = 6371 # calculate the result return(c * r) # driver code lat1 = 53.32055555555556 lat2 = 53.31861111111111 lon1 = -1.7297222222222221 lon2 = -1.6997222222222223 print(distance(lat1, lat2, lon1, lon2), "K.M")
برنامه محاسبه فاصله بین دو نقطه روی کره زمین در #C
// C# program to calculate // Distance Between Two // Points on Earth using System; class GFG { static double toRadians( double angleIn10thofaDegree) { // Angle in 10th // of a degree return (angleIn10thofaDegree * Math.PI) / 180; } static double distance(double lat1, double lat2, double lon1, double lon2) { // The math module contains // a function named toRadians // which converts from degrees // to radians. lon1 = toRadians(lon1); lon2 = toRadians(lon2); lat1 = toRadians(lat1); lat2 = toRadians(lat2); // Haversine formula double dlon = lon2 - lon1; double dlat = lat2 - lat1; double a = Math.Pow(Math.Sin(dlat / 2), 2) + Math.Cos(lat1) * Math.Cos(lat2) * Math.Pow(Math.Sin(dlon / 2),2); double c = 2 * Math.Asin(Math.Sqrt(a)); // Radius of earth in // kilometers. Use 3956 // for miles double r = 6371; // calculate the result return (c * r); } // Driver code static void Main() { double lat1 = 53.32055555555556; double lat2 = 53.31861111111111; double lon1 = -1.7297222222222221; double lon2 = -1.6997222222222223; Console.WriteLine(distance(lat1, lat2, lon1, lon2) + " K.M"); } } // This code is contributed by // Manish Shaw(manishshaw1)
برنامه محاسبه فاصله بین دو نقطه روی کره زمین در PHP
<?php function twopoints_on_earth($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo) { $long1 = deg2rad($longitudeFrom); $long2 = deg2rad($longitudeTo); $lat1 = deg2rad($latitudeFrom); $lat2 = deg2rad($latitudeTo); //Haversine Formula $dlong = $long2 - $long1; $dlati = $lat2 - $lat1; $val = pow(sin($dlati/2),2)+cos($lat1)*cos($lat2)*pow(sin($dlong/2),2); $res = 2 * asin(sqrt($val)); $radius = 3958.756; return ($res*$radius); } // latitude and longitude of Two Points $latitudeFrom = 19.017656 ; $longitudeFrom = 72.856178; $latitudeTo = 40.7127; $longitudeTo = -74.0059; // Distance between Mumbai and New York print_r(twopoints_on_earth( $latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo).' '.'miles'); // This code is contributed by akash1295 // https://auth.geeksforgeeks.org/user/akash1295/articles ?>
خروجی قطعه کد بالا، به صورت زیر است.
۲٫۰۰۴۳۶۷۸۳۸۲۷۱۶۱۳۷ K.M
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامه نویسی
- آموزش ساختمان دادهها
- مجموعه آموزشهای ساختمان داده و طراحی الگوریتم
- رنگآمیزی گراف به روش حریصانه — به زبان ساده
- الگوریتم دایجسترا (Dijkstra) — از صفر تا صد
- الگوریتم پریم — به زبان ساده
- متن کاوی (Text Mining) — به زبان ساده
مجموعه: برنامه نویسی برچسب ها: Distance Between Two Points, Distance Calculator, برنامه محاسبه فاصله بین دو نقطه, ماشین حساب فاصله, محاسبه فاصله بین دو نقطه, محاسبه فاصله بین نقاط, محاسبه گر فاصله