【问题标题】:Convert Lat/long to XY将纬度/经度转换为 XY
【发布时间】:2018-11-07 11:12:56
【问题描述】:

我想将纬度/经度转换为 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左右

【问题讨论】:

  • 您知道度数和弧度之间的区别吗?Python 函数需要弧度但纬度和经度以度为单位?
  • @JohnColeman,所以你是说功能不一致
  • 正如@JohnColeman 所说,math.cos 期望角度为弧度。做:r_avg = avg * math.pi / 180
  • 函数是完全一致的,但是它们必须使用它们期望的输入单位,这与纬度和经度使用的单位不同。
  • @Cheche,谢谢。你想以答案的形式提出来让我接受吗?

标签: python coordinates


【解决方案1】:

首先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)

【讨论】:

  • 我已经更新了问题中的方程式,但得到了错误的答案。我做对了吗?
  • 重点是您的纬度/经度坐标基本上是角度。每个点由两个角度组成:纬度和经度。然后,您使用的任何三角函数as is 都需要弧度角。然后你需要将这两个值都转换为弧度。
  • @JeremyAlexander 我在答案中添加了一些额外的细节。现在让我知道它是否对您有帮助。您是否要测量板球场的大小?
  • 谢谢。是的,它基本上是板球椭圆形的大小。所以我知道大约一端到另一端应该是大约 160m。也许更多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多