GIS 算法原理记录总结一:距离、方位角、沿线上的点

本文详细介绍了GIS中的球面距离计算,包括Haversine公式及其实现,经纬度与球面坐标的转换。此外,还讨论了方位角计算和根据坐标、距离、方向确定目标点的方法,以及如何沿线段计算指定距离的点。虽然在距离较远时存在误差,但提供了理解和改善误差的基础。
摘要由CSDN通过智能技术生成

GIS 算法原理记录总结一:距离、方位角、沿线上的点

一、球面距离:根据经纬度计算两点距离(turf.distance)

利用球面计算两点距离的算法公式有:大圆公式(Great-circle)公式、Haversine 公式、Vincenty 公式,TurfJS 使用的就是 Haversine 公式。

一、理解经纬度

当把地球看做一个标准的球体时,地球上某一点 P 的经度是指这一点的经线 ACD 所在的半平面 ABDO,与本初子午线 ABD(即 0° 经线)所在平面 ABDO(即参照面)的二面角 α 的度数。(如下图1)

某一点 P 的纬度是指过这一点纬线圈(即图2中与赤道平面平行的圆 O’)上的任意一点 Q 与球心 O 的连线 OQ,和赤道 ACB(0° 度纬线)所在平面的线面角 θ。

请添加图片描述

说明:

①(如图1)点 P 的经度角:<PHE = <COB = α

②(如图2)点 P 的纬度角:<FOB = <QOC = θ

③ 由内错角相等得: <POB = <OPO’ = θ,<QOC = <OQO’ = θ

二、经纬度与球面坐标

可以通过经纬度将球面上的任意一点转换为对应的球面坐标 P(x,y,z):

请添加图片描述

φ:纬度值;λ:经度值;R:地球半径

三、Haversine 公式 及其代码实现

1、Haversine 公式:

a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)
c = 2 ⋅ atan2( √a, √(1−a) )
d = R ⋅ c

φ :纬度值(单位:弧度)

λ:经度值(单位:弧度)

R:地球半径

2、代码实现
1、经纬度转弧度(角度转弧度):

请添加图片描述

2、经度(单位:弧度)差、纬度(单位:弧度)差、纬度1(单位:弧度)、纬度2(单位:弧度)

请添加图片描述

3、计算两点和地心连线的夹角

请添加图片描述
请添加图片描述

4、根据半径和两点夹角计算两端弧段距离

请添加图片描述

二、方位角:根据经纬度计算两点方位角(turf.bearing)

一、理解方位角

方位角是从某点的指北经线起,依顺时针方向到目标方向线之间的水平夹角(如图所示 θ,可以将其看成是指南针所指示的角度),也即是 OPN 平面与 OPQ 平面的所构成的二面角大小。

请添加图片描述

以北极点 N 为顶点,N-PQO 构成了一个三面角。

二面角 N-PQ-O 的大小为 θ,其平面角为 π/2 - φ2;
二面角 P-ON-Q 的大小为 λ2−λ1,其平面角为 δ;

请添加图片描述

二面角
从一条直线出发的两个半平面所组成的图形,叫做二面角。 这条直线叫做二面角的棱,每个半平面叫做二面角的面。以二面角的公共直线上任意一点为端点,在两个面内分别作垂直于公共直线的两条射线,这两条射线所成的角叫做二面角的平面角。二面角的大小, 可以用它的平面角来度量。

请添加图片描述

三面角
从一点出发并且不在同一平面内的三条射线,其中每相邻两射线可以决定一个平面,这样的三个平面所围成的立体图形叫做三面角。其中,这三条射线叫做三面角的棱,这些射线的公共端点叫做三面角的顶点,相邻两棱所夹的平面部分叫做三面角的面,在每个面内两条棱所形成的角叫做三面角的面角,过每一条棱的两个面所形成的二面角叫做三面角的二面角。一个三面角可以用它的顶点的字母来表示,例如“三面角S”;或在顶点的字母之后加一短划,并顺次写上每一条棱上的一个字母,例如“三面角S-ABC”。

请添加图片描述

二、代码实现

请添加图片描述
请添加图片描述
请添加图片描述

三、目标点:根据坐标点、距离、方向计算目标点(turf.destination)

根据前面的 一、球面距离:根据经纬度计算两点距离二、方位角:根据经纬度计算两点方位角,已经可以进行如下计算:

1、已知两个坐标,可以计算两个坐标的距离

2、已知两个坐标,可以计算两个坐标的方向

因此,在已知一个坐标,方向、距离的情况下,可以反推得到第二个坐标。

具体实现步骤为:

1、将已知坐标的经纬度、距离、方向均转为弧度

2、统一单位后,计算目标点的经度、纬度

请添加图片描述

四、沿线点:根据线段、距离计算在该线段上指定距离的点(turf.along)

根据前面的 一、球面距离:根据经纬度计算两点距离二、方位角:根据经纬度计算两点方位角三、目标点:根据坐标点、距离、方向计算目标点,已经可以进行如下计算:

1、已知两个坐标,可以计算两个坐标的距离

2、已知两个坐标,可以计算两个坐标的方向

3、已知一个坐标、距离、方向,可以计算第二个坐标

因此,已知一条线段的多个坐标之后,可以依次计算相邻两坐标点的方向、距离,在指定距离内获取相邻两个坐标点之间符合指定距离的点。

具体实现步骤为:

1、已知坐标点p1,p2,p3… ,得到两两相邻坐标点的距离,如分别为 d1,d2,d3…

2、比较 指定距离 d 与 d1,d1 + d2,d1 + d2 + d3… 的大小,如 d1 + d2 < d < d1 + d2 + d3,则说明指定距离 d 的点在坐标点 p2 和 p3 之间

3、得到距离差值:△d = d1 + d2 + d3 - d,那么 △d 就是从点 p2 出发,沿着 p3 的方向(p2和p3 的方向)的距离,满足此距离的点即为需要求的点。

因此需要使用到两个核心算法就是:计算距离和计算方位角,基于距离和方位角计算坐标点。

请添加图片描述

五、参考文献

论文:

《球面距离计算方法及精度比较》

《基于地图地理信息点的数据融合算法的改进》

《考虑地球曲率情况下两点距离问题的求解_卫宇》

文章:

Calculate distance, bearing and more between Latitude/Longitude points

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

根据经纬度对球面距离的求解

通过Math.atan2 计算角度

使用GPS坐标来计算距离和方位角

前端几何计算GIS空间分析库介绍及优缺点分析

JSTS

Turf

geometric

VJMap

六、效果与缺陷

当两个点距离较近时,根据距离、方向,求取沿线上的点,得到的结果是准确的,如下图:

请添加图片描述

但当沿线的点距离较远时,根据距离、方向,求取沿线上的点,得到的结果则是有偏差的,这个偏差在 Turf 官网的示例中也是有偏差的,如下图:

请添加图片描述

请添加图片描述

Cesium 中显示的结果也是有偏差的:

请添加图片描述
请添加图片描述

即:当一条直线的两个端点距离相当远时,此时要根据指定距离、方向计算沿线上的某点时,along 算法是有偏差的(即使指定距离相当小时)。

那么当直线距离的两个端点过长时,如何避免计算带来的误差呢?

这种误差/偏差的解决方法将在下一章节进行介绍,尽请期待!

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: GIS(地理信息系统)中可以利用两个的经纬度来计算它们之间的方位角和方位。方位角是两个之间的连线方向与正北方向之间的夹角,通常是以度数表示。而方位则是指从一个出发到达另一个所需要朝向的方向,通常是用文本描述表示(如“东南方向”)。 计算方位角需要用到三角函数,根据勾股定理可以计算两间的直线距离,然后再根据经度和纬度之差计算出两之间的夹角。最后,根据夹角与正北方向之间的关系计算出方位角。这个计算过程需要专业的软件支持,例如GIS软件中的测量工具可以直接计算出两个方位角和方位。 利用这种方法,我们可以在GIS中方便地计算出两个地之间的方位角和方位,这对于地图制图、导航以及定位等应用具有重要的作用。例如,在开发地图应用程序时,我们可以利用方位角和方位来确定用户的位置和朝向,以提高应用程序的准确性和用户体验。同时,这种计算也可以用于定位和跟踪移动设备的位置,例如车辆追踪和物流管理等领域。 ### 回答2: GIS(地理信息系统)是一种基于计算机处理能力的空间数据管理和分析系统。GIS的应用范围越来越广泛,包括地图制作与更新、城市规划、环境监测、资源管理、农业生产、交通运输等各个领域。而在GIS中,经度和纬度是表示地球表面位置的最常用坐标系统。 在GIS中,通过两经纬度可以确定这两个之间的距离方位角方位角是从一个开始沿着大圆轨道前进到另一个所需旋转的角度,可以用数学方法进行计算。通常,方位角是以正北方向为0度,向东逐渐增加至360度的角度值。 确定两之间的方位角需要考虑地球椭球体形状对大圆线的影响。由于地球并不是完全规则的球体,因此计算两之间的距离方位角时需要考虑大圆线的切线方向。这个方向可以通过两经纬度的计算来确定,并将结果转化为度数表示。 GIS中常用的计算方法包括:球面三角测量法和椭球体三角测量法。常见的GIS软件都会提供这些计算工具,以帮助用户快速准确地计算两间的距离方位角。 总之,通过两经纬度确定方位角和方位是GIS中非常基础的操作。在实际应用中,这些矢量计算方法可以帮助地理信息分析者更好地理解和分析地理现象,提高地理空间数据的效率和精度。 ### 回答3: 在GIS中,经纬度是一对地理坐标,代表了地球表面上的一个位置。而方位角则是一个方向指标,通常指的是一个相对于另一个的方向。因此,计算通过两经纬度确定方位角与方位是GIS中的常见操作之一。 要计算方位角与方位,必须先知道两个的经纬度。在GIS软件中,可以通过手动输入或者从地图中拾取的方式获取这些坐标值。接着,计算两之间的距离和方向即可得到方位角与方位。 具体计算方法如下: 1. 根据经纬度计算两间的距离,可以使用海卫公式(haversine formula)、Vincenty公式、球面余弦定理等方法。其中,Vincenty公式是最为精确的方法之一,但计算复杂度较高。如果只是简单计算,可以使用海卫公式。例如,两A和B的经纬度分别为(latA,lonA)和(latB,lonB),则它们之间的距离可以计算如下: R = 6371 # 地球半径,单位为千米 dlat = radians(latB - latA) dlon = radians(lonB - lonA) a = sin(dlat/2)**2 + cos(radians(latA)) * cos(radians(latB)) * sin(dlon/2)**2 c = 2 * atan2(sqrt(a), sqrt(1-a)) d = R * c 其中,radians()函数将角度转换为弧度。 2. 根据两间的经纬度差计算方向角,可以使用反三角函数或者向量的方法。如果使用反三角函数,可以使用atan2()函数,该函数可根据提供的两个参数计算反正切值。例如,设方向角为θ,则可以计算如下: y = sin(lonB-lonA) * cos(latB) x = cos(latA)*sin(latB) - sin(latA)*cos(latB)*cos(lonB-lonA) θ = atan2(y, x) 其中,sin()、cos()函数计算正弦和余弦值。 3. 根据方向角来确定方位。方位通常是以正北为0度,顺时针方向计算的角度,例如东方是90度,南方是180度。如果方向角为负数,则可以将其加上360度,以得到正确的方位角。 通过这个方法,我们可以轻松计算出通过两经纬度确定方位角与方位。这对于许多需要基于方向的GIS应用非常重要,例如航线规划、地质探测和导航等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

碳学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值