计算地球表面两点之间的距离

根据经度度,计算两点之间的距离

def geodistance(lng1, lat1, lng2, lat2):
    # lng1,lat1,lng2,lat2 = (120.12802999999997,30.28708,115.86572000000001,28.7427)
    lng1, lat1, lng2, lat2 = map(radians, [float(lng1), float(lat1), float(lng2), float(lat2)])  # 经纬度转换成弧度
    dlon = lng2 - lng1
    dlat = lat2 - lat1
    a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2
    distance = 2 * asin(sqrt(a)) * 6371 * 1000  # 地球平均半径,6371km
    distance = round(distance / 1000, 3)
    return distance

lng1, lat1, lng2, lat2 = (120.12802999999997, 30.28708, 115.86572000000001, 28.7427)
print(geodistance(lng1, lat1, lng2, lat2))
# 返回 446.721 千米

利用布尔莎七参数实现坐标转换-基准面转换

在坐标转换中,除了正投影和反投影的转换之外,还有不同基准面之间的转换。基准面的转换有很多种转换模型,常见的有三参数和七参数转换。三参数的转换主要是通过对x,y,z三个坐标轴进行平移操作,适用于小范围的地方坐标基准之间的转换,对精度要求不高。相对于三参数转换,七参数转换在基基础上增加对x/y/z三个坐标轴的旋转分量以及缩放比例。
我们对一个经纬度坐标进行七参数转换时,一般先将其转换到地心坐标系(以地心为原点的三维坐标系),再利用空间直角坐标系的转换公式,使用七参数对其进行转换,将转换的结果再转回经纬度坐标,即可完成椭球基准的转换。

  1. 经纬度坐标转地心空间直角坐标
    转换公式:
    { X = ( N + H ) cos ⁡ B cos ⁡ L Y = ( N + H ) cos ⁡ B sin ⁡ L Z = ( N ∗ ( 1 − c 2 ) + H ) sin ⁡ B \left\{ \begin{aligned} &X = (N+H)\cos B \cos L\\ &Y=(N+H)\cos B \sin L\\ &Z = (N * (1-c^2)+H)\sin B \end{aligned} \right. X=(N+H)cosBcosLY=(N+H)cosBsinLZ=(N(1c2)+H)sinB
    其中
    { A N = a W W = 1 − e 2 sin ⁡ 2 B e 2 = a 2 − b 2 a 2 \left\{ \begin{aligned} &AN = \frac{a}{W}\\ &W = \sqrt{1-e^2\sin^2 B}\\ &e^2 = \frac{a^2-b^2}{a^2} \end{aligned} \right. AN=WaW=1e2sin2B e2=a2a2b2

  2. 基准转换

七参数基准转换的原理同三维坐标系之间的坐标转换原理类似,这里给出公式如下:
[ X B Y B Z B ] = [ △ X 0 △ Y 0 △ Z 0 ] + ( 1 + m ) [ 1 ω Z − ω Y − ω Z 1 ω X ω Y − ω X 1 ] [ X A Y A Z A ] \left[ \begin{matrix} X_B\\ Y_B\\ Z_B \end{matrix} \right]= \left[ \begin{matrix} \triangle X_0\\ \triangle Y_0\\ \triangle Z_0 \end{matrix} \right]+(1+m) \left[ \begin{matrix} 1 & \omega_Z & -\omega_Y\\ -\omega_Z & 1 & \omega_X\\ \omega_Y & -\omega_X & 1 \end{matrix} \right] \left[ \begin{matrix} X_A\\ Y_A\\ Z_A \end{matrix} \right] XBYBZB=X0Y0Z0+(1+m)1ωZωYωZ1ωXωYωX1XAYAZA
其中, △ X \triangle X X △ Y \triangle Y Y, △ Z \triangle Z Z为平移分量, m m m为缩放分量, m m m为缩放系数, ω \omega ω为旋转矩阵。

  1. 地心空间直角坐标转经纬度
    将地心空间坐标转换为经纬度坐标,公式如下:
    { L = a r c t a n ( Y X ) B = a r c t a n ( Z ( N + H ) ( X 2 + Y 2 ) [ N ( 1 − e 2 ) + H ] ) H = Z sin ⁡ B − N ( 1 − e 2 ) \left\{ \begin{aligned} &L=arctan(\frac{Y}{X})\\ &B=arctan(\frac{Z(N+H)}{\sqrt{(X^2+Y^2)[N(1-e^2)+H]}})\\ &H=\frac{Z}{\sin B}-N(1-e^2) \end{aligned} \right. L=arctan(XY)B=arctan((X2+Y2)[N(1e2)+H] Z(N+H))H=sinBZN(1e2)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值