來源:https://www.open-open.com/lib/view/open1430573897802.html
#include <cmath>
#define EARTH_RADIUS 6371.0;// 地球半徑,單位千米static double HaverSin(double theta)
{double v = sin(theta / 2);return v * v;
}static double ConvertDegreesToRadians(double degrees)
{return degrees * M_PI / 180;
}/// <summary>/// 計算2個經緯度之間的距離/// </summary>/// <param name="from_lon">起始點經度</param>/// <param name="from_lat">起始點緯度</param>/// <param name="to_lon">目標點經度</param>/// <param name="to_lat">目標點緯度</param>/// <returns></returns>
double LttdLttdToDistance(double from_lon, double from_lat, double to_lon, double to_lat)
{// 用 haversine 公式計算球面兩點間的距離。// 經緯度轉換成弧度from_lon = ConvertDegreesToRadians(from_lon);from_lat = ConvertDegreesToRadians(from_lat);to_lon = ConvertDegreesToRadians(to_lon);to_lat = ConvertDegreesToRadians(to_lat);// 差值double vLon = std::abs(from_lon - to_lon);double vLat = std::abs(from_lat - to_lat);// h is the great circle distance in radians, great circle 就是一個球體上的切面,它的圓心即是球心的一個周長最大的圓。double h = HaverSin(vLat) + cos(from_lat) * cos(to_lat) * HaverSin(vLon);auto sh = sqrt(h);double distance = 2 * (asin(sqrt(h))) * EARTH_RADIUS;// 將距離轉換為米distance *= 1000;return distance;
}