Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用此GeoJson文件从特定国家生成随机点(坐标)?_Php_Geolocation_Geometry_Geo - Fatal编程技术网

Php 如何使用此GeoJson文件从特定国家生成随机点(坐标)?

Php 如何使用此GeoJson文件从特定国家生成随机点(坐标)?,php,geolocation,geometry,geo,Php,Geolocation,Geometry,Geo,我正在尝试使用以下方法 在我的服务器上,通过php,我希望能够调用url,也许: http://example.com/point.php?country=Argentina然后输出一个随机点 我知道geojson文件标记了每个国家的边界。最好的方法是什么 我在谷歌上搜索过,也通过stackoverflow寻找过一些例子或想法,但运气不好,这就是我为什么要发帖的原因。我已经能够做到这一点,只是美国的国家,但我真的想使用这个geojson文件,因为它将更准确,使我能够生成一个随机点从任何指定的国家

我正在尝试使用以下方法

在我的服务器上,通过php,我希望能够调用url,也许:
http://example.com/point.php?country=Argentina
然后输出一个随机点

我知道geojson文件标记了每个国家的边界。最好的方法是什么

我在谷歌上搜索过,也通过stackoverflow寻找过一些例子或想法,但运气不好,这就是我为什么要发帖的原因。我已经能够做到这一点,只是美国的国家,但我真的想使用这个geojson文件,因为它将更准确,使我能够生成一个随机点从任何指定的国家。包含的代码适用于各州。我想修改它以使用这个geojson文件

"AK": {
    "name": "Alaska",
    "min_lat": 52.5964,
    "max_lat": 71.5232,
    "min_lng": -169.9146,
    "max_lng": -129.993
}

<?php
function float_rand($Min, $Max){
    if ($Min > $Max) {
        $min = $Max;
        $max = $Min;
    } else {
        $min = $Min;
        $max = $Max;
    }
    $randomfloat = $min + mt_rand() / mt_getrandmax() * ($max - $min);
    $randomfloat = round($randomfloat, 14);

    return $randomfloat;
}

$boundaries_json = file_get_contents("state_boundaries.json");
$boundaries = json_decode($boundaries_json, true);

$b = array();
foreach ($boundaries as $state => $bounds) {
    $b[] = $bounds;
}

$state = $b[rand(0, sizeof($b) - 1)];

//print_r($state);

// generate coords
$lat = float_rand($state["min_lat"], $state["max_lat"]);
$lon = float_rand($state["min_lng"], $state["max_lng"]);
“AK”:{
“名称”:“阿拉斯加”,
“min_lat”:52.5964,
“最大值”:71.5232,
“min_lng”:-169.9146,
“最大液化天然气”:-129.993
}

您的代码获取矩形区域中的坐标

如果你得到一个坐标,你必须检查你的点是否在状态的边界上,这是一个不规则的多边形

(检查点是否位于可以看到的多边形内)

此时,您有两个选择:

  • 在外接边界的矩形内生成点,直到多边形中有一个点为止

  • 然后在这些三角形中生成一个随机点


  • 您提供的代码似乎是在一个非常简化的状态视图上运行的,假设每个状态形成一个完美的矩形。为阿拉斯加提供的坐标确实提供了阿拉斯加境内的所有点,但也包括加拿大和俄罗斯境内的点。对于您的用例来说,这可能没问题,但是您链接的geojson文件给出了国家的实际轮廓,而不是包含这些国家的矩形。要使用此文件,需要比当前使用的算法复杂得多的算法。将其视为一个可能的起点