1

我正在尝试在边界框内创建随机纬度/经度。下面的代码创建了纬度/经度,它们在地图上绘制......虽然它们在正确的国家,但它们不在正确的“盒子”中

我的边界框如下所示:

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

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

例如一次运行输出:

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() 是否进行某种排序或四舍五入。它可以在这么大的花车上工作吗?

4

2 回答 2

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) 
于 2012-10-11T19:16:59.917 回答
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
于 2012-10-11T19:24:35.127 回答