Как я могу создать случайную точку (координаты) из определенной страны, используя этот файл GeoJson? - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь использовать следующий файл GeoJson

На моем сервере и через php я хотел бы иметь возможность вызвать URL, возможно: http://example.com/point.php?country=Argentina, а затем 1 случайныйточка будет выходной.

Я понимаю, что файл geojson отмечает границы каждой страны.Каков наилучший способ сделать это?

Я гуглил и также искал примеры или идеи через stackoverflow без особой удачи, именно поэтому я публикуюсь.Я смог сделать это только с США по штатам, но я действительно хотел бы использовать этот файл геоджона, так как он был бы более точным и позволил бы мне генерировать случайную точку из любой указанной страны.Включенный код работает для государств.Я хотел бы изменить его для работы с этим файлом 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.

1 Ответ

0 голосов
/ 07 февраля 2019

Ваш код получает координаты в прямоугольной области.

Если вы получаете координату, вы должны проверить, находится ли ваша точка на границе состояния, это неправильный многоугольник

(Чтобы проверить, находится ли точка внутри многоугольника, вы можете увидеть здесь )

На данный момент у вас есть два варианта:

  1. Создание точек внутри прямоугольника, который ограничивает границу, пока одна точка не окажется в вашем многоугольнике

  2. Разложите ваш многоугольник на треугольники и затем сгенерируйте случайную точку в этих треугольниках

Argentina coordinate example

...