0

我希望在谷歌地图上随机定位标记,因此希望使用 PHP 随机生成标记的经度和纬度并通过 AJAX 加载它们。我遇到的问题不仅是坐标小数,而且有些是负数。例如,我需要经度介于 -2.07137437719725 和 -1.92779606909178 之间,纬度介于 50.71603387939352 和 50.793906977546456 之间。我能找到的唯一随机函数只适用于正整数,所以不可行。我确实尝试将数字乘以十亿以删除小数,然后将生成的随机数除以相同的数量以返回使用小数,但不幸的是 PHP 无法处理如此大的数字。

我希望你能帮忙。

谢谢

保罗

4

2 回答 2

1

这是我为做到这一点而准备的一个功能。它以小数点数作为参数,并使用对偶数/奇数随机数的检查来使正/负随机化。

    $latlon = randomLatLon(4);
    print_r($latlon);

    function randomLatLon($granularity) {

            // $granularity = Number of decimal spaces.
            $power = pow(10,$granularity); // Extended 10 to the power of $granularity.

            // Generate the lat & lon (as absolutes) according to desired granularity.
            $lat = rand(0,90 * $power) / $power;
            $lon = rand(0,180 * $power) / $power;

            // Check if a random number is even to randomly make the lat/lon negative.
            if (rand(0,100) % 2 == 0) {
                    $lat = $lat * -1;
            }

            // Same for lon...
            if (rand(0,100) % 2 == 0) {
                    $lon = $lon * -1;
            }

            return array(
                    "lat" => $lat,
                    "lon" => $lon,
            );


    }
于 2013-05-22T13:32:46.793 回答
0

你可以使用这样的东西:

float Latitudes = (float)((rand(0, 180000000) - 90000000)) / 1000000);
float Latitudes = (float)((rand(0, 360000000) - 180000000)) / 1000000);

就我个人而言,我认为高达 0.001 的精度对于这些位置来说已经足够了。如果您不相信我,请在谷歌地图 (-32.833, 151.893) 和 (-32.832, 151.895) 上尝试一下,看看它们之间的距离有多远。

于 2013-05-22T12:51:22.797 回答