php算球面距离,球面两点之间的距离计算

球面两点之间的距离计算

在便捷的交通中,我们的出行很时候都需要依赖于导航系统,对于短距离的移动,我们可以把地面当成一个平面进行简单的计算两点之间距离。但是,如果我们需要跨国、跨洲进行远距离的出行时候,平面计算已经不能满足我们生活的需要,因为地球是一个球体,例如我们需要去到南美洲,我们选择从西方向前行可以到达,从东方向也可以到达,但是我们到达目的地的最短距离只有一条,这个时候我们就该考虑一下球面两点的距离计算了。这个时候就要从二维计算切换到三位空间的计算

我们先看一下百度百科对“坐标系统”和“球面三角”的描述

坐标系统,是描述物质存在的空间位置(坐标)的参照系,通过定义特定基准及其参数形式来实现。坐标是描述位置的一组数值,按坐标的维度一般分为一维坐标(公路里程碑)和二维坐标(笛卡尔平面直角坐标、高斯平面直角坐标)、三维坐标(大地坐标、空间直角坐标)。为了描述或确定位置,必须建立坐标系统,坐标只有存在于某个坐标系统才有实际的意义与具体的位置。

地球是一个球体,球面上的位置,是以经纬度来表示,它称为“球面坐标系统”或“地理坐标系统”。在球面上计算角度距离十分麻烦,而且地图是印刷在平面纸张上,要将球面上的物体画到纸上,就必须展平,这种将球面转化为平面的过程,称为“投影”。

在进行计算时候,我们有两种计算方式

1、Haversine公式:采用了正弦函数

2、distance公式:采用余弦函数计算

两种计算方式的对比:

distance公式计算两点间距离很短时(比如地球表面上相距几百米的两点),余弦函数会得出0.999…的结果, 会导致较大的舍入误差。Haversine公式采用了正弦函数,即使距离很小,也能保持足够的有效数字。 采用计算机来计算时,两个公式的区别不大。 不过还是推荐采用Haversine公式。

haversin(d/R) = haversin(φ2 - φ1) + cos(φ1) cos(φ2) haversin(⊿λ)

其中:

haversin(θ) = sin(θ/2)^2 = (1- cos(θ))/2

R为地球半径,可取平均值 6371.137km

φ1, φ2 表示两点的纬度;

Δλ 表示两点经度的差值。

分享一段PHP的计算实现:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值