如何获得随机地理点[十进制的纬度/经度],放置在半径为 100 米的圆内的任何位置?圆的中心是另一个参考 GeoPoint。有没有实现这个的函数/公式?
基本上我正在读取我的 android 设备的 GPS 输入,并且需要在设备周围生成随机地理点 [在以我的设备为中心的半径 100 米的圆圈中]。
请注意:数据库中没有预先存储的地理点。如上所述,我需要动态创建所有地理点。
如何获得随机地理点[十进制的纬度/经度],放置在半径为 100 米的圆内的任何位置?圆的中心是另一个参考 GeoPoint。有没有实现这个的函数/公式?
基本上我正在读取我的 android 设备的 GPS 输入,并且需要在设备周围生成随机地理点 [在以我的设备为中心的半径 100 米的圆圈中]。
请注意:数据库中没有预先存储的地理点。如上所述,我需要动态创建所有地理点。
我刚刚写了一个 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
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
欢迎评论/清理!
选择正方形上的随机点(即成对的均匀随机数),然后丢弃任何不在该正方形内接圆内的点。给定 (x,y) 对,如果:
(x - c_x)^2 + (y - c_y)^2 < r,
其中 (c_x, c_y) 是圆的中心,r 是它的半径。
从这里开始:在圆内(均匀地)生成一个随机点。然后弄清楚如何以参考纬度/经度将该圆居中。然后弄清楚如何将随机生成的点映射到纬度/经度值。提示:您想将单个组件(例如,x
在y
您的圆上)添加到圆的中心。