проверить широту / длинную позицию внутри полигона

Мне нужно проверить, если пользователи шире и долго проживает в многоугольнике.

моя версия mysql 5.1.73

Запрос, который я пробовал, как показано ниже

SET @g1 = ST_GEOMFROMTEXT('POLYGON((9.557417356841308 80.3155517578125, 7.993957436359008 79.7772216796875, 6.926426847059551 79.8101806640625, 6.206090498573886 80.1068115234375, 5.954826733929924 80.4254150390625, 6.446317749457659 81.7108154296875, 7.427836528738338 81.8426513671875, 8.309341443917633 81.3592529296875, 9.199715262283302 80.7879638671875, 9.438224391343347 80.4254150390625, 9.470735674130932 80.3155517578125))');

SET @g2 = ST_GEOMFROMTEXT('POINT(6.89249389 80.8487013)');

SELECT ST_Intersects(@g1,@g2);
  • у меня нет функции ST_Intersect в производственной БД, но я попробовал это в mariadb в локальной

  • Я попробовал ST_CONTAINS, но проблема остается той же.

в результате NULL. это должно быть 1 или 0, но. Полигон покрыт страной Шри-Ланки. и пользователи долго и lat также города в Шри-Ланке.

Когда я делаю это с помощью PHP, ниже моя функция, и она работает без каких-либо проблем.

/**
* to check if the given latitude and longitude reside inside the polygon coordinates
* @param mixed $value The value to be checked
* @$pointsPolygon number vertices - zero-based array
* @$verticesX x-coordinates of the vertices of the polygon
* @$verticesY y-coordinates of the vertices of the polygon
* @$longitudeX longitude to check
* @$latitudeY latitude to check
* @return boolean
*/
function inPolygon($pointsPolygon,$verticesX,$verticesY,$longitudeX,$latitudeY)
{
$i = $j = $c = 0;
for($i = 0,$j = $pointsPolygon; $i < $pointsPolygon; $j = $i++){
if((($verticesY[$i] > $latitudeY != ($verticesY[$j] > $latitudeY)) && ($longitudeX < ($verticesX[$j] - $verticesX[$i]) * ($latitudeY - $verticesY[$i]) / ($verticesY[$j] - $verticesY[$i]) + $verticesX[$i])))
$c = !$c;
}

return $c;
}

вызов функции

//sri lanka map zone
$turf = '[{"id":953,"color":"#32CD32","coordinates":[[9.557417356841308,80.3155517578125],
[7.993957436359008,79.7772216796875],[6.926426847059551,79.8101806640625],
[6.206090498573886,80.1068115234375],[5.954826733929924,80.4254150390625],
[6.446317749457659,81.7108154296875],[7.427836528738338,81.8426513671875],
[8.309341443917633,81.3592529296875],[9.199715262283302,80.7879638671875],
[9.438224391343347,80.4254150390625],[9.470735674130932,80.3155517578125]]}]'

$cordinates = $turfArr[0]['coordinates'];
$longLat = '-0.2710333,48.3490398';
$splitArr = explode(',' , $longLat);
$long = $splitArr[0];
$lat = $splitArr[1];

;

но мне нужно сделать это со стороны БД.

Цените любые выводы.

2

Решение

Я думаю, что префиксные функции ST_ полностью поддерживаются в версиях Mysql версии 5.6+. Возможно, вам придется перейти на более новую версию или перейти на PostGIS. Для более новой версии MySQL вы можете пройти через это ссылка на сайт который даст вам то, что вы хотите.

0

Другие решения

Других решений пока нет …