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

asw*_*esh 4 gps geocoding geolocation convex-polygon

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

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

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

duk*_*ave 6

我刚刚写了一个Ruby方法,它扩展Random为提供这个.

警告:所有点都在一个盒子里,而不是一个圆圈.

class Random
  def location(lat, lng, max_dist_meters)
Run Code Online (Sandbox Code Playgroud)

这称为Random.new.location(mid_lat, mid_lng, dist).它将返回一个可能位于中点之内max_dist_meters的点.

    max_radius = Math.sqrt((max_dist_meters ** 2) / 2.0)
Run Code Online (Sandbox Code Playgroud)

如果不进行调整,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))
Run Code Online (Sandbox Code Playgroud)

1.115前来这里.

    lat += [1,-1].sample * lat_offset
    lng += [1,-1].sample * lng_offset
    lat = [[-90, lat].max, 90].min
    lng = [[-180, lng].max, 180].min
Run Code Online (Sandbox Code Playgroud)

我们应该在这里环绕而不是仅仅限制价值,修复欢迎.

    [lat, lng]
  end
end
Run Code Online (Sandbox Code Playgroud)

评论/收拾欢迎!

这里的示例输出,如果您在此处粘贴lat/lng,您可以很好地看到它.