4

如何获得随机地理点[十进制的纬度/经度],放置在半径为 100 米的圆内的任何位置?圆的中心是另一个参考 GeoPoint。有没有实现这个的函数/公式?

基本上我正在读取我的 android 设备的 GPS 输入,并且需要在设备周围生成随机地理点 [在以我的设备为中心的半径 100 米的圆圈中]。

请注意:数据库中没有预先存储的地理点。如上所述,我需要动态创建所有地理点。

4

3 回答 3

6

我刚刚写了一个 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

欢迎评论/清理!

如果您在此处粘贴 lat/lngs,您可以在此处很好地看到示例输出。

于 2013-03-26T01:46:55.070 回答
1

选择正方形上的随机点(即成对的均匀随机数),然后丢弃任何不在该正方形内接圆内的点。给定 (x,y) 对,如果:

(x - c_x)^2 + (y - c_y)^2 < r,

其中 (c_x, c_y) 是圆的中心,r 是它的半径。

于 2012-03-28T23:52:21.477 回答
0

从这里开始:在圆内(均匀地)生成一个随机点。然后弄清楚如何以参考纬度/经度将该圆居中。然后弄清楚如何将随机生成的点映射到纬度/经度值。提示:您想将单个组件(例如,xy您的圆上)添加到圆的中心。

于 2012-03-28T23:52:00.757 回答