Как узнать, входят ли координаты в область координат?

У меня есть координаты точки. Я хочу с помощью стороннего сервиса узнать, принадлежит ли эта точка области координат. Область координат я экспортирую с Яндекс Конструктора, там она является зоной доставки.

Есть ли сервисы или иные решения на проверку, входит ли моя координата в область координат?

P.S. Решения от Яндекса не подходит, их API доступен только при выводе карты на страницу. P.S.S. Нужного мне решения в Google Maps не нашёл.


Ответы (2 шт):

Автор решения: Ilya78rus

Вариант на PHP

public function inPolygon($point, $polygon): bool
    {
        $countPoints = count($polygon);
        $y = $point['lat'];
        $x = $point['lng'];
        $j = $countPoints - 1;
        $inside = false;
        for ($i = 0; $i < $countPoints; $j = $i++) {
            $jY = $polygon[$j]['lat'];
            $iY = $polygon[$i]['lat'];
            if ((($iY <= $y && $y < $jY) || ($jY <= $y && $y < $iY)) &&
                ($x < ($polygon[$j]['lng'] - $polygon[$i]['lng']) * ($y - $iY) / ($jY - $iY) + $polygon[$i]['lng'])) {
                return !$inside;
            }
        }
        return $inside;
    }
→ Ссылка
Автор решения: Виктор Карев

Функция на PHP.

public function pointInPoly(array $poly, float $x, float $y): bool {
    $c = false;
    $len = count($poly);
    $xj = $poly[$len - 1][0];
    $yj = $poly[$len - 1][1];
    for ($i = 0; $i < $len; $i++) {
        $xi = $poly[$i][0];
        $yi = $poly[$i][1];
        $d1 = ($yj - $yi) * ($x - $xi);
        $d2 = ($xj - $xi) * ($y - $yi);
        if ($yi <= $y && $y < $yj && $d1 > $d2 || $yj <= $y && $y < $yi && $d1 < $d2) {
            $c = !$c;
        }
        $xj = $xi;
        $yj = $yi;
    }
    return $c;
}
→ Ссылка