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

Geolocation 如何在距离另一个地理点d的范围内创建随机地理点?,geolocation,gps,geocoding,convex-polygon,Geolocation,Gps,Geocoding,Convex Polygon,如何获得位于半径为100米的圆内任意位置的随机地理点[lat/long,十进制]?圆的中心是另一个参考地质点。 是否有实现此功能的函数/公式 基本上,我正在读取android设备的GPS输入,需要在设备周围生成随机地理点[在以设备为中心的半径为100米的圆圈内] 请注意:数据库中没有预先存储的地理点。我需要像上面提到的那样动态创建所有地理点。从这里开始:。然后计算出如何将该圆居中于参考lat/long。然后找出如何将随机生成的点映射到lat/long值。提示:你想(比如说,x和y在你的圆上)到圆

如何获得位于半径为100米的圆内任意位置的随机地理点[lat/long,十进制]?圆的中心是另一个参考地质点。 是否有实现此功能的函数/公式

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


请注意:数据库中没有预先存储的地理点。我需要像上面提到的那样动态创建所有地理点。

从这里开始:。然后计算出如何将该圆居中于参考lat/long。然后找出如何将随机生成的点映射到lat/long值。提示:你想(比如说,
x
y
在你的圆上)到圆的中心。

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

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

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

我刚刚编写了一个Ruby方法,它扩展了
Random
来提供这个功能

注意事项:所有点都位于一个方框内,而不是一个圆内

class Random
  def location(lat, lng, max_dist_meters)
这是通过
Random.new.location(mid_lat,mid_lng,dist)调用的
。它将返回一个点,该点可能在中点a的
max\u dist\u meters
范围内

    max_radius = Math.sqrt((max_dist_meters ** 2) / 2.0)
如果不调整到
max\u radius
,我们将得到圆外正方形内的点(即在拐角处),其中距离将大于
max\u dist\u米
。这将我们限制在圆圈内的一个正方形内,这可能更符合您的要求

    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, lng]
  end
end
欢迎评论/清理


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

我是一名新的android程序员-我阅读了一些关于最小边界矩形、地理位置等的文章。我能够通过GPS正确获取用户位置,但仍停留在下一步,这正是我上面解释的。我对你答案的第一部分有疑问。如何在正方形内获得这些点?坐标是左/长的,对吗?这就是问题所在。最好的方法是在一个方便的时间间隔内选择随机数,然后将它们转换为适合您的地理环境。所以,如果你想让点在100米范围内,长10米,从一个以(0,0)为中心的正方形开始,边长200,这样你就可以挑选一对介于-100和100之间的随机数。然后获得内接圆内的点,如上所述。现在,在半径为100的圆内有点,因此将(x,y)添加到(lat,long)以获得所需的值。添加lat+100,long+100不会给出大约100米以外的点。它宁愿指向另一个大陆的某个地点。根据我的实验,200米以外的地理位置的纬度偏移量为+-0.000500,经度偏移量为+-0.000750。这并不是特别容易,因为不同的纬度/长度在任何地方都不是相同的线性距离。你还必须决定你是想在地面上保持距离还是像乌鸦一样保持距离,以及什么样的地球形状近似值适合你的应用。对!我假设用户不会离开新西兰-因此必须适当地计算出缩放比例。非常感谢您的投入!
    [lat, lng]
  end
end