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




(No Ratings Yet)