计算中心周围的等距GPS点

时间:2012-12-26 15:51:54

标签: ruby gps gem geometry coordinates

我对一些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个等距点

有人知道 ruby​​ gem 允许我这样做吗? 我的问题是编写compute_100meter

的内容

修改

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

1 个答案:

答案 0 :(得分: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范围之外输出纬度,但我使用的近似值无论如何都会靠近极点。)