#include <iostream> #include <cmath> using namespace std; #define pi 3.1415926535897932384626433832795 #define EARTH_RADIUS 6378.137 //地球半径 KM double rad(double d) { return d * pi / 180.0; } double RealDistance(double lat1, double lng1, double lat2, double lng2)//lat1第一个点纬度,lng1第一个点经度,lat2第二个点纬度,lng2第二个点经度 { double a; double b; double radLat1 = rad(lat1); double radLat2 = rad(lat2); a = radLat1 - radLat2; b = rad(lng1) - rad(lng2); double s = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(radLat1)*cos(radLat2)*pow(sin(b / 2), 2))); s = s * EARTH_RADIUS; s = s * 1000; return s; } int main() { cout << RealDistance(20.194970489552652, 110.564224161560745, 20.195110378886003, 110.564232333140893) << std::endl; getchar(); return 0; }
注意:以上方式是针对角度进行的计算,如果是弧度,则如下:
RealDistance(lat1, lng1, lat2, lng2) * 180 / pi;
海洋单位节转化成米/秒:
1节等于每小时 1海里,也就是每小时行驶1.852千米(公里) ,20节即20海里/小时,37.04公里/小时,(速度单位),也就是10.28米/秒, 20节运行100ms,可以移动10.28*0.1=1.028米!!!,运行三秒钟,可以移动30.84米
对应可运行程序如下链接:
https://download.csdn.net/download/qq_23350817/15599651