1

我对一些 GPS 计算有疑问。我的问题如下:

我有一个特定的点 P,我想计算 P 周围的 N 个点。

这是算法:

P = (x, y) // latitude, longitude
N = 8
angle_size = 360/N

points = []

for i in 1..N
    points.push compute_100meter(P, angle_size*i)
end

在这个例子中,我试图计算距离 P 100 米内的 8 个等距点。

有谁知道允许我这样做的红宝石宝石?我的问题是写内容compute_100meter

编辑:

我必须考虑地球曲率并以度数(纬度,经度)获取点坐标。

4

1 回答 1

2

只要半径足够小(应该是 100 米,除非你就在北极或南极旁边),一个简单的线性近似应该足够好:

def perimeter_point(lat, lon, angle, radius)
    # convert angle from degrees to radians
    angle *= Math::PI / 180
    # convert meters to degrees approximately, assuming spherical Earth
    radius /= 6371000 * Math::PI / 180
    # calculate relative length of the circle of longitude compared to equator
    scale = Math.cos( lat * Math::PI / 180 );
    # add offsets to longitude and latitude and return them
    # (I'm assuming that angle = 0 means due east)
    lat += radius * Math.sin(angle)
    lon += radius * Math.cos(angle) / scale
    return lat, lon
end

请注意,如果您的中心点在 180 度子午线附近,这可能会返回低于 -180 或高于 +180 的经度。如果这是一个问题,请检查它并根据需要进行标准化。(如果中心点在北极或南极附近,则±90 范围之外的输出纬度在技术上也是可行的,但无论如何我使用的近似值在两极附近都会失效。)

于 2012-12-26T16:45:35.543 回答