将纬度/经度转换为XY坐标

3
我希望将经纬度转换为XY坐标。我找到了下面的公式,但是无法得到预期的输出结果:
x = r λ cos(φ0)
y = r φ

这两个点的测量值为:

point1 = (-37.8206195, 144.9837765)
point2 = (-37.8193712, 144.9837765) 

尝试:

import math

avg = (-37.8206195 + -37.8193712)/2
rad_avg = math.pi / 180

point1 = (-37.8206195, 144.9837765)
point2 = (-37.8193712, 144.9837765) 

dist = rad_avg * math.cos(avg)

print(dist)

输出:

0.01732592680044846

输出应该在160m左右。

1
你是否了解角度和弧度之间的区别,以及Python函数期望弧度而纬度和经度是以度为单位的? - John Coleman
@JohnColeman,所以你的意思是这些函数不一致? - user9410826
这些函数非常一致,但必须使用它们所期望的单位输入,这些单位与纬度和经度使用的单位不同。 - John Coleman
@Cheche,谢谢。你想把它放在答案形式中,这样我就可以接受它了吗? - user9410826
@Jerfov2 是的,没错。这在我的回答中有提到。我同意这样做会减少错误,但是加入数学计算只是为了帮助其他人理解真正的计算过程。 - Cheche
显示剩余3条评论
1个回答

4

首先,math.cos 函数需要以弧度为单位的角度参数。要将角度从度转换为弧度,您需要执行以下操作:

rad_avg = avg * math.pi / 180

甚至可以这样:
math.radians(<angle_in_degrees>)

基本上,这意味着你正在使用pi将180º映射,并将其部分作为你的角度。
我假设你想通过首先将其转换为“xy”坐标(根据你的参考资料)来计算两点之间的距离。
你需要先将两个点都放在同一个坐标系中。正如链接所述,对于小区域,它们可以通过以下方式进行估计:
  • x = r λ cos(φ0)
  • y = r φ
因此,你需要执行以下操作:
import math

point1 = (-37.8206195, 144.9837765) # Lat/Long (lambda/phi)
point2 = (-37.8193712, 144.9837765) # Lat/Long (lambda/phi)

r = 6371000 # meters
phi_0 = point1[1]
cos_phi_0 = math.cos(math.radians(phi_0))

def to_xy(point, r, cos_phi_0):
    lam = point[0]
    phi = point[1]
    return (r * math.radians(lam) * cos_phi_0, r * math.radians(phi))

point1_xy = to_xy(point1, r, cos_phi_0)
point2_xy = to_xy(point2, r, cos_phi_0)

最后,要在笛卡尔坐标系中计算距离,您需要使用毕达哥拉斯定理d = sqrt(delta_x^2 + delta_y^2) 在您的示例中:
dist = math.sqrt((point1_xy[0] - point2_xy[0])**2 + (point1_xy[1] - point2_xy[1])**2)

这将产生结果:113.67954606562853。更接近您要找的。

此外,有一个快捷方式可以直接得到距离公式:

  • d = r * sqrt(x² + y²)其中x = (λ2 - λ1) * math.cos(φ0)y = (φ2 - φ1)

我已经更新了问题中的方程,但是得到了错误的答案。我做对了吗? - user9410826
重点是你的纬度/经度坐标基本上是角度。每个点由两个角度组成:纬度和经度。因此,您使用的任何三角函数“原样”需要弧度角。然后,您需要将这两个值转换为弧度。 - Cheche
@JeremyAlexander 我在我的回答中添加了一些额外的细节。如果现在有帮助,请告诉我。你是在尝试测量板球场的大小吗? - Cheche
谢谢这个。是的,它基本上是一个板球椭圆形场地的大小。所以我知道大致一个端到另一个端应该是大约160米。也许再多一点。 - user9410826

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接