如何在距离另一个地理点的距离d内创建随机地理点?

时间:2012-03-28 23:33:11

标签: geolocation gps geocoding convex-polygon

如何获得随机地理点[lat / long in decimal],放置在100米半径范围内的任何位置?圆的中心是另一个参考GeoPoint。 有没有实现这个的函数/公式?

基本上我正在阅读我的Android设备的GPS输入,需要在设备周围生成随机的地理位置[在我的设备中心的半径100米的圆圈内]。

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

3 个答案:

答案 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.115来自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

评论/清理欢迎!

示例输出here,如果您粘贴lat / lngs here,就可以很好地看到它。

答案 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(例如,圈子中的xy)到圈子的中心。