在BoundingBox中创建一组随机的LatLng

时间:2012-10-11 18:21:09

标签: ruby gis

我正在尝试在边界框内创建随机Lat / Lng。下面的代码创建了Lat / Lngs并且它们在地图上绘制......当它们在正确的国家时,它们不在右边的“框”中

我的边界框看起来像这样:

top_left = 51.514881121099904, -0.1293877362387679 
bottom_right = 51.492151803709525, -0.09693947143827275

minLat = 51.514881121099904
maxLat = 51.492151803709525
minLng =  -0.09693947143827275
maxLng = -0.1293877362387679 

我的代码如下所示:

markers = []

10.times do
    x = minLat + rand(maxLat - minLat)
    y = minLng + rand(maxLng - minLng)
    latLng = [x,y]
    markers <<  latLng
end

markers.each do |x|
    puts "#{x[0]} , #{x[1]}"
end

但它没有输出正确的纬度/ Lngs。有什么我做错了吗?我看错了吗?

例如,一个运行输出:

51.51778835694538 , 0.8479098023328967
51.56834519895925 , 0.70003581382595
52.47933844269927 , 0.6167209565236026
51.52116824209034 , 0.8997051592766233
52.26830135905681 , 0.7514635122980192
52.143607260212896 , 0.21838042686322268
52.04649651836466 , 0.6683244476203801
52.057410769358576 , -0.08734906181439461
52.053408170846915 , 0.1600069328435182
51.8991829618331 , 0.3993135670912452

但显然52.26830135905681不在最小和最大拉特之间...所以我有点困惑

rand()是做某种排序还是四舍五入。它可以在这么大的花车上工作吗?

2 个答案:

答案 0 :(得分:3)

如何定义rand()?不记得我的头顶......

您可以使用ruby的Random类(http://www.ruby-doc.org/core-1.9.3/Random.html)并执行以下操作:

rng = Random.new(seed)
lat = minLat + rng.rand * (maxLat - minLat)
lng = minLng + rng.rand * (maxLng - minLng) 

答案 1 :(得分:0)

rand在它的论点上使用to_i.abs。更好地使用rand(minLat..maxLat)。 此外,在您的代码中,似乎最小值和最大值混合在一起。

maxLat = 51.514881121099904
minLat = 51.492151803709525
maxLng = -0.09693947143827275
minLng = -0.1293877362387679 
markers = []

10.times do
  markers << [rand(minLat..maxLat), rand(minLng..maxLng)]
end

markers.each do |lat, lng|
  puts "#{lat} , #{lng}"
end