【发布时间】:2015-03-26 10:39:28
【问题描述】:
场景
我正在尝试生成 500 到 1000 个随机坐标(纬度、经度),它们位于半径为 1 公里的圆内,中心点位于(5.418680、100.327829)。我正在尝试在 php 中对此进行编码,但未能这样做,因为我不知道应该为 $radius 提供什么值。
$radius = ?;
$origin_x = 5.420525;
$origin_y = 100.319500;
$angle = deg2rad(mt_rand(0, 359));
$pointRadius = mt_rand(0, $radius);
$point[] = array(
'x' => $origin_x + ($pointRadius * cos($angle)),
'y' => $origin_y + ($pointRadius * sin($angle))
);
我想到了另一种方法。我不想在圆内生成点,而是在正方形边界内生成点,然后应用Haversine大圆距离公式确定随机生成的点是否位于半径为1KM的圆内。
注意:生成的点可以相互重叠。
请告知,我需要大致了解我应该采取什么方法。提前致谢。
【问题讨论】:
-
Radius应该与您的 latlong 相关并且在同一范围内。半径为 1 将是 latlong 空间中的 1 坐标。您必须计算出一公里有多少纬度,并将其用作您的半径。我在某处读到一拉特是 11 公里,但我敢肯定。使用它,1 公里将是 0.09 纬度。
标签: php google-maps math coordinates