将纬度/经度转换为XY

时间:2018-11-07 00:42:55

标签: python coordinates

我想将经/纬度转换为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 个答案:

答案 0 :(得分:3)

首先math.cos期望以弧度表示的角度参数。要将度数转换为弧度,您需要执行以下操作:

rad_avg = avg * math.pi / 180

甚至:

math.radians(<angle_in_degrees>)

基本上,这意味着您正在用pi映射180º并获取您的角度部分。

那么我假设您想通过将其首先转换为“ xy”坐标(根据您的reference)来计算两点之间的距离。

您需要首先获得同一坐标系中的两个点。如链接所述,对于小区域,可以通过以下方式估算它们:

  • 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)

最后,要计算笛卡尔坐标中的距离,您需要使用Pitagoras Theorem 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)