Как узнать, входят ли координаты в область координат?
У меня есть координаты точки. Я хочу с помощью стороннего сервиса узнать, принадлежит ли эта точка области координат. Область координат я экспортирую с Яндекс Конструктора, там она является зоной доставки.
Есть ли сервисы или иные решения на проверку, входит ли моя координата в область координат?
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;
}