我刚刚编写了一个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
,它们与IT技术有关。
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
欢迎评论和整理!
此处有示例输出,如果您将经纬度粘贴到这里,您可以清楚地看到它。