求解两个经纬点之间的距离和角度(mm级精度)
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级精度)相关推荐
- python计算两个点之间的距离_python实现两个经纬度点之间的距离和方位角的方法...
最近做有关GPS轨迹上有关的东西,花费心思较多,对两个常用的函数总结一下,求距离和求方位角,比较精确,欢迎交流! 1. 求两个经纬点的方位角,P0(latA, lonA), P1(latB, lonB ...
- 计算地图经纬点之间的距离
<!doctype html> <html><head><meta charset="utf-8"><title>计算经 ...
- python 计算两个经纬度的距离_python实现两个经纬度点之间的距离和方位角的方法...
最近做有关GPS轨迹上有关的东西,花费心思较多,对两个常用的函数总结一下,求距离和求方位角,比较精确,欢迎交流! 1. 求两个经纬点的方位角,P0(latA, lonA), P1(latB, lonB ...
- python 笔记 haversine (两个经纬度坐标之间的距离)
1 安装包 pip install haversine 2 haversine:计算两个点经纬度之间的距离 from haversine import haversine lyon = (45.759 ...
- ITK:计算两个3D点之间的距离
ITK:计算两个3D点之间的距离 内容提要 输出结果 C++实现代码 内容提要 计算两个3D点之间的距离.可以通过更改常量Dimension轻松地将其扩展为ND. 输出结果 Dist: 1.73205 ...
- 采用成员函数和友元函数计算给定两个坐标点之间的距离
设计一个用来表示直角坐标系的Location类,在主程序中创建类Location的两个对象A和B,要求A的坐标点在第3象限,B的坐标点在第2象限,分别采用成员函数和友元函数计算给定两个坐标点之间的距离 ...
- java编程-计算两个坐标点之间的距离
设计一个MyPoint类,表示一个具有x坐标和y坐标的点 1.需求分析 •两个私有成员变量x和y表示坐标值: •成员变量x和y的访问器和修改器 •无参构造方法创建点(0,0): •一个有参构造方法,根 ...
- geotools 计算两个经纬度点之间的距离
geotools 计算两个经纬度点之间的距离 主要的maven依赖 代码实现 最近研究geotools,发现网上的直接搜索相关实现比较少,所以贴出示例代码,方便大家寻找. 主要的maven依赖 < ...
- pythongps距离_在Python中求两个gps点之间的距离
我有下面的方法(haversine)返回两个gps点之间的距离.下表是我的数据帧.在 当我使用在dataframe上应用函数时,我得到错误"cannot convert the series ...
最新文章
- python判断字符类型alpha_Python3.10第二个alpha版本来了!最新特性值得关注
- 算法训练营04-map,set,dequeue,stack
- matlab 常用m文件,MATLAB基础课程 第三章 M文件知识(4)
- Johnny and Another Rating Drop CodeForces - 1362C(规律)
- 物联网在水位监测中的应用
- python实现k均值算法_python实现kMeans算法
- 操作系统中抢占式和非抢占式内核的区别
- excel制作一个信息录入系统_制作Excel仓库入库单,一键完成数据录入、计算及保存操作...
- flush mysql_请教一下,mysql什么时候需要flush privileges?
- 【Java】关于Java的一些基础知识点
- 华为p20:拍美景,听讲解,旅行更智能
- 测试用例,怎么写 ?
- Linux用户管理命令和压缩解压命令
- 3、Keras中的顺序模型Sequential和函数式模型Model
- DirectShow系统概述
- android layoutinflater 高度,从LayoutInflater.inflate看View的创建过程
- [计算机数值分析]开方公式-牛顿法
- 计算机组成原理简答课后答案,计算机组成原理_习题集(含答案).doc
- 目标检测从两阶段R-CNN系列到单阶段YOLO系列精炼
- Python将 Unicode 转换为 utf-8 格式