我对一些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
修改
我必须考虑地球曲率并获得度数(纬度,经度)的点坐标。
答案 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范围之外输出纬度,但我使用的近似值无论如何都会靠近极点。)