Distances and bearings between points on an ellipsoidal-model earth

Vincenty 对椭球体地球模型上点之间距离的解精确到0.5 mm距离,0.000015〃度。

基于球面地球模型的计算,例如(更简单的)哈弗斯线,精确到0.3%左右。

  We can use live examples at Vincenty’s solution 在线计算

  You can git the Matlab Version at git@github.com:Jason-Yoo/Vincenty-solutions.git

% Author :  doudouyoutang
% Contact:  jiduocaiyang@gmail.com
% Adress: NUAA
% License:  Copyright (c) 2020 Jiduocai Yang, All rights reserved
% This programe is implemented in matlab 2019a
% Function: Vincenty Formula
% point[latitude  longitude ]
% distance between two points  Unit: meter
function [distance,Alpha1,Alpha2]=vincenty_inverse(point1, point2)% WGS 84
a = 6378137;  % meters
f = 1 / 298.257223563;
b = 6356752.314245;  % meters; b = (1 - f)a%MILES_PER_KILOMETER = 0.621371;
MILES_PER_KILOMETER = 1;
MAX_ITERATIONS = 300;
CONVERGENCE_THRESHOLD = 1e-12;  % .000,000,000,001
convergenceFlag = 0;% short-circuit coincident points
if (point1(1) == point2(1) && point1(2) == point2(2))distance = 0;Alpha1 = 0;Alpha2 = 0;return;
end
U1 = atan((1 - f) * tan(deg2rad(point1(1))));
U2 = atan((1 - f) * tan(deg2rad(point2(1))));
L = deg2rad(point2(2) - point1(2));
Lambda = L;sinU1 = sin(U1);
cosU1 = cos(U1);
sinU2 = sin(U2);
cosU2 = cos(U2);while (--MAX_ITERATIONS>0)sinLambda = sin(Lambda);cosLambda = cos(Lambda);sinSigma = sqrt((cosU2 * sinLambda) ^ 2 + (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda) ^ 2);if(sinSigma == 0)break;  % coincident pointsendcosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;sigma = atan2(sinSigma, cosSigma);sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma;cosSqAlpha = 1 - sinAlpha ^ 2;cos2SigmaM = cosSigma - 2 * sinU1 * sinU2 / cosSqAlpha;if (isnan(cos2SigmaM))cos2SigmaM = 0;endC = f / 16 * cosSqAlpha * (4 + f * (4 - 3 * cosSqAlpha));LambdaPrev = Lambda;Lambda = L + (1 - C) * f * sinAlpha * (sigma + C * sinSigma *(cos2SigmaM + C * cosSigma *(-1 + 2 * cos2SigmaM ^ 2)));if (abs(Lambda - LambdaPrev) < CONVERGENCE_THRESHOLD)convergenceFlag = 1;break  % successful convergenceendendif(convergenceFlag == 1)uSq = cosSqAlpha * (a ^ 2 - b ^ 2) / (b ^ 2);A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma *(-1 + 2 * cos2SigmaM ^ 2) - B / 6 * cos2SigmaM *(-3 + 4 * sinSigma ^ 2) * (-3 + 4 * cos2SigmaM ^ 2)));s = b * A * (sigma - deltaSigma);Alpha1 = atan2(cosU2 * sinLambda,  cosU1*sinU2-sinU1*cosU2*cosLambda);Alpha1 = Alpha1*180/pi;if (0 >= Alpha1 || Alpha1 > 360)Alpha1 = mod(mod(Alpha1,360)+360,360); endAlpha2 = atan2(cosU1 * sinLambda,  -sinU1*cosU2+cosU1*sinU2*cosLambda);distance = s * MILES_PER_KILOMETER;  % kilometers to mileselsedistance = 0;Alpha1 = 0;Alpha2 = 0;endend

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Reign_Man/article/details/111511409

求解两个经纬点之间的距离和角度(mm级精度)相关推荐

  1. python计算两个点之间的距离_python实现两个经纬度点之间的距离和方位角的方法...

    最近做有关GPS轨迹上有关的东西,花费心思较多,对两个常用的函数总结一下,求距离和求方位角,比较精确,欢迎交流! 1. 求两个经纬点的方位角,P0(latA, lonA), P1(latB, lonB ...

  2. 计算地图经纬点之间的距离

    <!doctype html> <html><head><meta charset="utf-8"><title>计算经 ...

  3. python 计算两个经纬度的距离_python实现两个经纬度点之间的距离和方位角的方法...

    最近做有关GPS轨迹上有关的东西,花费心思较多,对两个常用的函数总结一下,求距离和求方位角,比较精确,欢迎交流! 1. 求两个经纬点的方位角,P0(latA, lonA), P1(latB, lonB ...

  4. python 笔记 haversine (两个经纬度坐标之间的距离)

    1 安装包 pip install haversine 2 haversine:计算两个点经纬度之间的距离 from haversine import haversine lyon = (45.759 ...

  5. ITK:计算两个3D点之间的距离

    ITK:计算两个3D点之间的距离 内容提要 输出结果 C++实现代码 内容提要 计算两个3D点之间的距离.可以通过更改常量Dimension轻松地将其扩展为ND. 输出结果 Dist: 1.73205 ...

  6. 采用成员函数和友元函数计算给定两个坐标点之间的距离

    设计一个用来表示直角坐标系的Location类,在主程序中创建类Location的两个对象A和B,要求A的坐标点在第3象限,B的坐标点在第2象限,分别采用成员函数和友元函数计算给定两个坐标点之间的距离 ...

  7. java编程-计算两个坐标点之间的距离

    设计一个MyPoint类,表示一个具有x坐标和y坐标的点 1.需求分析 •两个私有成员变量x和y表示坐标值: •成员变量x和y的访问器和修改器 •无参构造方法创建点(0,0): •一个有参构造方法,根 ...

  8. geotools 计算两个经纬度点之间的距离

    geotools 计算两个经纬度点之间的距离 主要的maven依赖 代码实现 最近研究geotools,发现网上的直接搜索相关实现比较少,所以贴出示例代码,方便大家寻找. 主要的maven依赖 < ...

  9. pythongps距离_在Python中求两个gps点之间的距离

    我有下面的方法(haversine)返回两个gps点之间的距离.下表是我的数据帧.在 当我使用在dataframe上应用函数时,我得到错误"cannot convert the series ...

最新文章

  1. python判断字符类型alpha_Python3.10第二个alpha版本来了!最新特性值得关注
  2. 算法训练营04-map,set,dequeue,stack
  3. matlab 常用m文件,MATLAB基础课程 第三章 M文件知识(4)
  4. Johnny and Another Rating Drop CodeForces - 1362C(规律)
  5. 物联网在水位监测中的应用
  6. python实现k均值算法_python实现kMeans算法
  7. 操作系统中抢占式和非抢占式内核的区别
  8. excel制作一个信息录入系统_制作Excel仓库入库单,一键完成数据录入、计算及保存操作...
  9. flush mysql_请教一下,mysql什么时候需要flush privileges?
  10. 【Java】关于Java的一些基础知识点
  11. 华为p20:拍美景,听讲解,旅行更智能
  12. 测试用例,怎么写 ?
  13. Linux用户管理命令和压缩解压命令
  14. 3、Keras中的顺序模型Sequential和函数式模型Model
  15. DirectShow系统概述
  16. android layoutinflater 高度,从LayoutInflater.inflate看View的创建过程
  17. [计算机数值分析]开方公式-牛顿法
  18. 计算机组成原理简答课后答案,计算机组成原理_习题集(含答案).doc
  19. 目标检测从两阶段R-CNN系列到单阶段YOLO系列精炼
  20. Python将 Unicode 转换为 utf-8 格式

热门文章

  1. java 作业调度_Java使用quartz实现作业调度
  2. java获取url的参数page返回数值page计算_Java常用代码汇总,建议背会
  3. python 迭代器相关知识
  4. SQL脚本修改数据库名称
  5. 多线程-ReentrantLock
  6. 实验四+116+陈洁
  7. SQL Server大数据表的分区存储
  8. java 多线程下载文件
  9. linux Memcached服务
  10. Linux下xargs命令的使用