برنامه محاسبه فاصله بین دو نقطه روی کره زمین — راهنمای کاربردی

در این مطلب، روش نوشتن برنامه محاسبه فاصله بین دو نقطه روی کره زمین مورد بررسی قرار گرفته و پیاده‌سازی ان در زبان‌های برنامه‌نویسی گوناگون شامل «سی‌پلاس‌پلاس» (++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

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

منبع [+]

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *