根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

这篇具有很好参考价值的文章主要介绍了根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

摘要

1.半正矢公式(Haversine Formula)介绍

2.半正矢公式应用

3.半正矢公式计算

3.1 主要思路

3.2 计算步骤

3.2.1 平面向量计算方法

3.2.2 空间向量计算方法


摘要

写本文的出发点是需要在Qlik中根据经纬度计算地球上两点间的距离。我在社区上搜到了相关公式的分享,这个公式叫做“半正矢公式”。对于“半正矢”知之甚少的我,决定从头到尾将公式计算一遍,并通过这篇文章记录所有的步骤,希望它能对需要的人有所帮助。这也算是温习高中所学的三角函数了。

本文的部分图片源自其他网站,剩下的图都是通过GeoGebra制作的。这个工具非常方便,推荐大家使用。

(GeoGebra - the world’s favorite, free math tools used by over 100 million students and teachers)

1.半正矢公式(Haversine Formula)介绍

公式: 

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

(i)

如图 (i), OAC是一个圆,O是其圆心,A和C是圆上的点,r 是⊙OAC的半径。

设:r = 1, 那么 OA = OC = r =1;

过点A做一条垂线,交线段OC于点B,∠OBA=90°。

设:∠AOB=θ;

因此,AB = sinθ, OB = cosθ, BC = 反正弦 = 1 – cosθ.

所谓的半正矢就是“一半的反正弦”(Haversine = “half reversed sin”),所以:

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

 根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

最后得出:

2.半正矢公式应用

回到应用场景,已知地球上的两个点A和B,现在我们想知道这两点之间的最短距离。地球可以近似看作为一个球体,那么AB间的最短距离就是过AB两点的大圆圆弧,这个大圆是地球的内切圆,半径和圆心点都于地球相同。

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

(ii)

设:A点坐标 = (Ø1, λ1); B点坐标 = (Ø2, λ2);

Ø = 纬度, λ = 经度

d = A 和 B 的最短距离

R = 地球半径 = 6371 km

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

把 ​​​替换为 Haversin(θ)  可得:

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤  

过去的水手们可以查余弦函数、半正矢函数和半正矢函数的逆函数的数值表,从而求出距离d。只要有数值表,还是挺方便的。[1]


[1]https://plus.maths.org/content/lost-lovely-haversine

3.半正矢公式计算

3.1 主要思路

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

(iii)

如图 (iii), ⊙OAB 是地球的内切圆,圆心为O。

距离计算步骤:

  1. 计算AB,即点A和B之间的直线距离;
  2. 通过AB和地球半径R,计算∠AOB 的角度;
  3. 通过∠AOB 和R计算 ,即⊙ OAB上AB的弧长,这个弧长就是最短距离。

3.2 计算步骤

3.2.1 平面向量计算方法

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

 (iv)

与第2节相同,设:

A点坐标 = (Ø1, λ1); B点坐标 = (Ø2, λ2);

Ø = 纬度,λ = 经度;

d = AB间的最短距离;

R = 地球半径 = 6371 km;

O = 地球球心;

N = 北极点;

点C和E与点A在同一条经度线上;

点D和F与点B在同一条经度线上;

点D 与点A在同一条纬度线上;

点C 与点B在同一条纬度线上;

点E和F又是在赤道上,点A所在经度线与点B所在经度线相较于北极点。

可得:

C点坐标 = (Ø2, λ1); D点坐标 = (Ø1, λ2);

E点坐标 = (0, λ1); F点坐标 = (0, λ2);

引入  :

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

(v)

如图(v),OXY是一个圆,设r 为⊙OXY的半径,且r = 1;

OX = OY = r = 1, OZ是线段XY的垂线;

设∠XOY=θ,那么∠XOZ=∠YOZ=θ/2;

所以 XZ=  , 且 XY=2XZ= 。

回到图 (iv), ∠AOC = Ø2 – Ø1;

因为 OA = OC =R,所以 AC = 根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤 ;

同理,BD = AC;EF = 根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

点O’ 是点A和点D所在圆的圆心,O’A 长度等于圆的半径。

过点A做一条垂线,相交OE于G,∠AOG = ∠AOE = Ø1;

所以 :根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤  ;

由于 ∠GOO’ = ∠AGO = 90°,OG = O’A,所以 O’A =根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

∠AO’D = λ2 – λ1, 可得 AD =根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

同理, BC = 根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

知道AD和BC的长度后,我们在等腰梯形ADBC中就可以计算AB的长度了。

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

 (vi)

在等腰梯形ADBC中,过点A做一条垂线相交BC于点E。

那么:

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤 ;  

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤  ;

现在,AB线段的长度已经计算出来,接下来就是最后一步计算 的弧长。

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

(vii)

 

如图(vii),⊙OAB 是地球的内接圆,圆心为O,OA = R.

设:AC = √a, ∠AOB = b, ∠OCA = 90°;

那么 AC = AB/2;

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤  ;

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤  ;

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤  ; 

 根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤  ;

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

 根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤 ​​​​​​​

 根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤  ;

 

把 ​​​替换为 Haversin(θ)  :根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤  

与第二节的公式一致,计算完毕。


或者我们可以用正切函数tan:

 根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤 ​​​​​​​

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤 ​​​​​​​

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤 ​​​​​​​

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤 ​​​​​​​

这与Qlik 社区分享的计算公式一致[2]。


[2] https://community.qlik.com/t5/QlikView-App-Dev/Haversine-formula-to-find-distance-between-two-lat-long-points/m-p/234630

3.2.2 空间向量计算方法

如通过空间向量计算距离,我们需要把经纬度的坐标转换为三维空间坐标。

如图 (viii),我们建立了一个坐标系,Z轴就是地轴所在的轴,平面XOY是赤道所在的平面,平面XOZ是本初子午线所在的平面。A点是地球上任意一点。

设:A点坐标 = (Ø1, λ1),R是地球半径;

A 点的空间坐标 = (X1, Y1, Z1)

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

 (viii)

过A点做一条垂线相交平面XOY于A’点,则:

 根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

X1 = OC, Y1 = CA’, Z1 = A’A

因此,根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

同理,我们有一点 B (Ø2, λ2),则 根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤

那么:

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤 ​​​​​​​

 设根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤 ,那么我们可通过余弦定理计算θ 的值:

 根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤 ​​​​​​​

根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤 ​​​​​​​

 把cos(θ) 替换为 Haversin(θ),结果与上文等价。

参考文章

Haversine formula to find distance between two lat... - Qlik Community - 234630

Lost but lovely: The haversine | plus.maths.org

地理空间距离计算及优化(根据两个点经纬度计算距离)_ArthurKingYs的博客-CSDN博客_两个经纬度算距离公式及方法

半正矢公式(Haversine公式)

如何计算地球上两点的距离(附公式推导)_呆呆papa的博客-CSDN博客_地球两点距离文章来源地址https://www.toymoban.com/news/detail-409196.html

到了这里,关于根据经纬度计算地球上两点之间的距离——Haversine公式介绍及计算步骤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql根据经纬度计算距离

    要在MySQL中根据经纬度计算距离,你可以使用以下方法: 使用Haversine公式:Haversine公式是一种常用的方法,用于计算两个球面上点之间的距离。下面是一个示例查询,展示如何在MySQL中使用Haversine公式计算经纬度距离: 在上面的查询中, your_table 是包含经度和纬度信息的表。

    2024年02月14日
    浏览(37)
  • ElasticSearch - 根据经纬度,简单搜索指定距离范围内的数据

    ES的地图检索方式 ES支持的地图检索方式有以下几种; geo_distance geo_bounding_box geo_polygon 1、 geo_distance :直线距离检索,如给定点A,要求返回地图上距离点A三千米的商家(点外卖场景) 2、查找索引内距离北京站(116.433733,39.908404)3000米内的点 geo_distance涉及的参数如下 location:确

    2024年02月14日
    浏览(46)
  • JAVA计算两经纬度间的距离

    无需依赖外部jar,可直接计算距离。DistanceUtil.java 可根据精度来判断使用哪种方式(BigDecimal,double)。 在使用时具体保留位数可自行设置。 添加第三方jar包。 直接采用第三方jar包中的工具进行计算。DistanceUtil.java 将其结果放在一起对比,会发现第三方jar,Sphere更精准一些。

    2024年02月14日
    浏览(49)
  • 【Python】一行代码计算两经纬度点的距离及夹角

    2022.2.10更新,Python有现成的包可以直接调用。 geographiclib库 https://pypi.org/project/geographiclib/ 用法说明见博客: python 计算地球上两点距离和方位角(bearing)的包geographiclib_梓沂的博客-CSDN博客_geodesic python 通过经纬度计算地图上两点的距离及方位角,百度的结果是许多个人写的函

    2023年04月11日
    浏览(46)
  • 手机上获取地图某个定位的经纬度坐标的方法 - 查询经度、纬度 - 百度地图app、高德地图app、Earth地球

    拖动、定位、获得左上角的 东经、北纬等信息,就是经度、纬度了。 手机安装app 苹果: Earth-地球 安卓、鸿蒙: Earth地球   打开软件,拖动地图   左上角的坐标就是 经度、纬度     百度地图app、高德地图app都无法获取坐标、经度、纬度   手机也可以用 网页版坐标拾取系

    2024年02月09日
    浏览(184)
  • 高德地图根据经纬度获取地址信息

    主要是使用高德里面 地理编码与逆地理编码 的 getAddress 这个方法, 根据逆向地理编码:将地理坐标(经纬度)转换成地址描述信息,对应为AMap.Geocoder的getAddress方法。 具体使用的代码为 最后看效果 这是传的经纬度与解析出来的地理位置 如果需要正向解析将地理位置变成经

    2024年02月11日
    浏览(53)
  • 高德根据经纬度,查询所在位置信息

    根据JSON对象获取信息 String cityInfo = GaoDeUtils.getAddressByJWD(request.getClog(), request.getClat()); JSONObject resultSucces = JSONObject.parse(cityInfo); JSONObject addr=resultSucces.getJSONObject(“regeocode”); AddressComponent addressComponent = JSON.parseObject(JSON.toJSONString(addr.get(“addressComponent”)), AddressComponent.class); 创

    2024年02月08日
    浏览(51)
  • 高德百度腾讯之间经纬度的转换

    提示:这里可以添加本文要记录的大概内容: 提示:以下是本篇文章正文内容,下面案例可供参考 百度地图: 高德地图: 腾讯地图 最后转换结果 可知,高德和腾讯使用的编码方式是一样的,所以最后转换的经纬度基本一样

    2024年02月13日
    浏览(50)
  • NC文件根据经纬度提取点上数值

    Hello,Hello,Hello,大家好,时隔上一次更新已经很久了,今天主要和大家分享一组简单的代码,来提取NC文件中某一点的数值! 本次实例数据依旧使用喜闻乐见的NCEP数据,数据使用的是多层气温。或者可以直接点击这里下载 这个就是下载好的数据: 大家可以看一下,这个数

    2024年02月05日
    浏览(49)
  • Python根据经纬度在地图上显示(folium)

    1、location地图中心点 经纬度,list 或者 tuple 格式,顺序为 latitude(纬度), longitude(经度) 2、zoom_start地图等级 缩放值,默认为 10,值越大比例尺越小,地图放大级别越大 3、tiles 显示样式,默认*‘OpenStreetMap’*,也就是开启街道显示;也有一些其他的内建地图样式,如’Stamen T

    2024年02月14日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包