我想在以下坐标之间生成点:52.1462 ,5.8676 - 52.1536 ,5.8376
这是绘制我的矩形的地方。
我得到了以下代码来随机化该矩形之间的点:
var x_min = rectangle.getBounds().getEast();
var x_max = rectangle.getBounds().getWest();
var y_min = rectangle.getBounds().getSouth();
var y_max = rectangle.getBounds().getNorth();
var lat = y_min + (Math.random() * (y_max - y_min));
var lng = x_min + (Math.random() * (x_max - x_min));
lngBrd.push([l , b ]); == My starting point.
lngBrd.push([lng, lat]); == should be random inside the box
lngBrd.push([lng, lat]); == should be random inside the box
但它给了我盒子外面的坐标,请参见图片。
哪里出了问题?
回复评论
如果我登录:
lngBrd.push([l , b ]); == My starting point.
lngBrd.push([lng, lat]); == should be random inside the box
lngBrd.push([lng, lat]); == should be random inside the box
我明白了:
每次刷新时。 (第一个是正确的,因为那是我的起点)
最佳答案
我认为x_min
应该是rectangle.getBounds().getWest();
和x_max
应该是rectangle.getBounds ().getEast();
假设我们位于笛卡尔平面的第一象限。
var x_min = rectangle.getBounds().getWest();
var x_max = rectangle.getBounds().getEast();
var y_min = rectangle.getBounds().getSouth();
var y_max = rectangle.getBounds().getNorth();
由于坐标为 (52.1462 ,5.8676)
(52.1536 ,5.8376)
,因此先将这些值乘以 10000
可能会很有用然后恢复。
var x_min_int = x_min * 10000;
var x_max_int = x_max * 10000;
var y_min_int = y_min * 10000;
var y_max_int = y_max * 10000;
var lat_int = y_min_int + (Math.random() * (y_max_int - y_min_int));
var lng_int = x_min_int + (Math.random() * (x_max_int - x_min_int));
var lat = lat_int / 10000;
var lng = lng_int / 10000;
由于 Math.random()
最适合整数,因此适当的随机化将适用于矩形的范围
关于Javascript坐标之间的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60616313/