【发布时间】:2011-12-16 10:39:04
【问题描述】:
我想知道 GPS 坐标的计算公式,最短距离计算精度 >= 5 mtr。
我已经检查过Haversine 公式和大圆距离公式。但它们适用于长距离计算。如果我们谈论 mtrs 的准确性,应该使用哪个公式?
【问题讨论】:
标签: geolocation gps geometry
我想知道 GPS 坐标的计算公式,最短距离计算精度 >= 5 mtr。
我已经检查过Haversine 公式和大圆距离公式。但它们适用于长距离计算。如果我们谈论 mtrs 的准确性,应该使用哪个公式?
【问题讨论】:
标签: geolocation gps geometry
Vincenty's formulae 在 WGS84 近似地球形状上精确到毫米级(显然,地球在这种程度上与 WGS84 不一致)。
几年前,我为distance calculation in Javascript 实现了一些算法。由于代码缺少 cmets,请随时询问您是否对算法有任何疑问。
一个潜在的问题是,这些算法在海平面上工作并且没有考虑高度差异。改用convert to geocentrical cartesian coordinates 并使用直线距离可能会更好...
经度φ、纬度λ、高度h的点的直线距离d的直接表达式为
k = √(a²·cos²φ + b²·sin²φ)
r = (a²/k + h)·cosφ
z = (b²/k + h)·sinφ
d = √((z - z')² + r² + r'² - 2·r·r'·cos(λ - λ'))
使用以下参数值
a = 6378137m
b = (a·297.257223563)/298.257223563
【讨论】:
如果 (long0, lat0) 是一个点, (long1, lat1) 是另一个:
对于小距离,您可以使用:
x0 = long0 * r_earth * cos(lat0)
y0 = lat0 * r_earth
x1 = long1 * r_earth * cos(lat1)
y1 = lat1 * r_earth
dx = x0 - x1
dy = y0 - y1
d = sqrt(dx*dx + dy*dy)
long = 经度弧度lat = 纬度弧度r_earth = 地球半径
您可以通过分解 r_earth 和/或假设 cos(lat0)==cos(lat1) 来进一步简化此公式。
【讨论】: