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

Posted

技术标签:

【中文标题】如何使用此 GeoJson 文件从特定国家/地区生成随机点(坐标)?【英文标题】:How can I generate a random point (coordinates) from a specific country using this GeoJson file? 【发布时间】:2019-07-02 00:07:04 【问题描述】:

我正在尝试使用以下GeoJson file

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

我了解 geojson 文件标记了每个国家/地区的边界。做这个的最好方式是什么?

我在谷歌上搜索并通过 *** 寻找示例或想法,但运气不佳,这就是我发布的原因。我已经能够按州仅对美国执行此操作,但我真的很想使用此 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"]);

包含的代码适用于各州。我想修改它以使用这个 geojson 文件。

【问题讨论】:

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

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

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

(要检查一个点是否在多边形内,您可以查看here)

此时你有两个选择:

    在包围边界的矩形内生成点,直到一个点在您的多边形中

    Decompose your polygon into triangles 然后在这些三角形中生成一个随机点

【讨论】:

以上是关于如何使用此 GeoJson 文件从特定国家/地区生成随机点(坐标)?的主要内容,如果未能解决你的问题,请参考以下文章

我们如何从特定国家/地区获取推文

隐藏特定国家/地区的产品价格 WooCommerce

如何显示/隐藏来自特定国家/地区的内容 [关闭]

如何使选择器视图从 swift 3 中的特定行显示?

如何根据地理位置显示动态图像?

如果客户端请求“en”,但我只有特定国家/地区的语言环境,我该如何解决要使用的语言环境?