如何获得随机地理点[lat / long in decimal],放置在100米半径范围内的任何位置?圆的中心是另一个参考GeoPoint。 有没有实现这个的函数/公式?
基本上我正在阅读我的Android设备的GPS输入,需要在设备周围生成随机的地理位置[在我的设备中心的半径100米的圆圈内]。
请注意:数据库中没有预先存储的地理位置。如上所述,我需要动态创建所有地理点。
答案 0 :(得分:5)
我刚刚写了一个Ruby方法,它扩展了Random
来提供这个。
警告:所有点都在一个方框内,而不是一个圆圈。
class Random
def location(lat, lng, max_dist_meters)
使用Random.new.location(mid_lat, mid_lng, dist)
调用此方法。它将在中点的max_dist_meters
内返回可能的点。
max_radius = Math.sqrt((max_dist_meters ** 2) / 2.0)
如果不调整到max_radius
,我们会在圆圈外的正方形内(即角落处)获得点数,其中距离将大于max_dist_meters
。这会将我们限制在圆圈内的正方形,这可能更符合您的要求。
lat_offset = rand(10 ** (Math.log10(max_radius / 1.11)-5))
lng_offset = rand(10 ** (Math.log10(max_radius / 1.11)-5))
1.11
和5
来自here。
lat += [1,-1].sample * lat_offset
lng += [1,-1].sample * lng_offset
lat = [[-90, lat].max, 90].min
lng = [[-180, lng].max, 180].min
我们应该在这里环游,而不是仅仅限制价值,修复欢迎。
[lat, lng]
end
end
评论/清理欢迎!
答案 1 :(得分:1)
在正方形上挑选随机点(即均匀随机数对),然后丢弃任何不在该正方形内的圆内。给定(x,y)对,如果出现以下情况,则一个点位于您的圈内:
(x - c_x)^2 + (y - c_y)^2 < r,
其中(c_x,c_y)是圆的中心,r是半径。
答案 2 :(得分:0)
从这里开始:Generate a random point within a circle (uniformly)。然后弄清楚如何将该圆心对准参考纬度/长度。然后弄清楚如何将随机生成的点映射到lat / long值。提示:您希望add the individual components(例如,圈子中的x
和y
)到圈子的中心。