根据两经纬度点计算距离公式推导

问题

已知地球上的点E经纬度为(J1, W1),点F经纬度为(J2, W2),求两点间最短的球面距离。

推导

步骤1

假设地球是一个标准的球体,设球心为O, 地球半径为r。

earth_2_point_distance1.png

线段OE, OF, EF构成一个等腰三角形,OE=OF=r,定义∠EOF弧度为δ,定义E,F两点的最短球面距离为L

则有:

L= r*δ

根据余弦定理有:

cosδ=\frac {OE^2+OF^2-EF^2} {2*OE*OF}

将OE=OF=r代入得:

cosδ=1-{\frac {EF^2} {2*r^2} }
δ=arccos(1-{\frac {EF^2} {2*r^2} })

最后可得:

L=r*arccos(1-{\frac {EF^2} {2*r^2} }) \tag{1}

步骤2

下面来求EF。

earth_2_point_distance.png

图中,B点为北极点,C点和D点位于赤道上,OB,OC,OD构造空间直角坐标系,OCD即赤道面。过E点做垂线垂直于面OCD交于E1点,过F点做垂线垂直于面OCD交于F1点,过F点做垂线垂直于线EE1于F2点。

定义\angle EOE_1弧度为α,\angle FOF_1弧度为β,\angle E_1OF_1弧度为γ,其实α即为E点的纬度弧度,β即为F点的纬度弧度,γ即为F点和E点的经度差的弧度。

勾股定理有:

EF^2=EF_2 ^2 + FF_2 ^2

又有:

EF_2=EE_1-FF_1
FF_2=E_1F_1

则有:

EF^2=(EE_1-FF_1)^2 + E_1F_1^2 \tag{2}

\angle OE_1E\angle OF_1F为直角,则有:

EE_1 = OE*sinα = r*sinα \tag{3}
FF_1 = OF*sinβ = r*sinβ \tag{4}

根据余弦定理有:

E_1F_1^2=OE_1^2 + OF_1^2 - 2*OE_1*OF_1*cosγ

又有:

OE_1=OE*cosα=r*cosα
OF_1=OF*cosβ=r*cosβ

则有:

E_1F_1^2=r^2*cos^2α + r^2*cos^2β - 2r^2*cosα*cosβ*cosγ
E_1F_1^2=r^2(cos^2α + cos^2β - 2*cosα*cosβ*cosγ) \tag{5}

将公式 (3),(4),(5)代入 (2),并整理得:

EF^2=r^2(sin^2α+cos^2α) + r^2(sin^2β+cos^2β) - 2r^2sinαsinβ - 2r^2cosαcosβcosγ
EF^2=2r^2(1 - sinαsinβ - cosαcosβcosγ)

代入公式(1)得:

L=r*arccos(sinαsinβ + cosαcosβcosγ)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

【论文推荐】最新7篇变分自编码器(VAE)相关论文—汉语诗歌、生成模型、跨模态、MR图像重建、机器翻译、推断、合成人脸

【导读】专知内容组整理了最近七篇变分自编码器(Variational Autoencoders)相关文章,为大家进行介绍,欢迎查看! 1. Generating...

72240
来自专栏一棹烟波

OpenCV角点检测源代码分析(Harris和ShiTomasi角点)

OpenCV中常用的角点检测为Harris角点和ShiTomasi角点。 以OpenCV源代码文件 .\opencv\sources\samples\cpp\t...

63260
来自专栏云时之间

深度学习与TensorFlow:关于DBN的一些认识

最近在学习深度置信网络(DBN)的时候,看过几篇博客,但是在DBN的结构上,一大堆博客讲DBN是将受限玻尔兹曼机(RBM)像砖块一样叠加起来的一个网络,这本身是...

16540
来自专栏恰童鞋骚年

数据结构基础温故-5.图(中):最小生成树算法

图的“多对多”特性使得图在结构设计和算法实现上较为困难,这时就需要根据具体应用将图转换为不同的树来简化问题的求解。

16820
来自专栏Flutter入门

Android OpenGL ES(二)-正交投影

平移矩阵和单位矩阵和类似。但是向量[x,y,z,1]前乘这个平移矩阵后的结构就是平移矩阵中定义的偏移量。

39510
来自专栏python读书笔记

python 数据分析基础 day18-使用pandas进行数据清洗以及探索

今天是读《python数据分析基础》的第18天,读书笔记的内容是使用pandas进行数据清洗以及探索 由于原始数据在某种程度上是“脏”的,原始数据并不能完全使...

59680
来自专栏瓜大三哥

基于FPGA的Canny算子设计(一)

Canny算子计算流程: 高斯滤波和Sobel算子已经在前面讲过,所以这里主要讨论非最大值抑制和滞后分割电路设计。 非最大值一直电路设计 非最大值抑制主要是对...

31570
来自专栏小樱的经验随笔

从零基础学三分查找

今晚是我们学长第二次讲课,讲了一个三分!认真听了一下,感觉不是很难,可能会比二分还简单些!我就把上课讲的内容归纳为一篇文章概述吧!以后也会重点讲解的! 简单点说...

457100
来自专栏数据结构与算法

洛谷P1291 [SHOI2002]百事世界杯之旅(期望DP)

题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字。只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背...

31650
来自专栏云时之间

python学习之文章数据分析

通常我们在进行NLP学习的时候,会经常的处理一些语料,同时也会对这些语料进行一些分析,今天的这篇文章我们通过分析quora上的Andrew NG的一个回答来实际...

36860

扫码关注云+社区

领取腾讯云代金券