Итак, я пытался узнать, находятся ли определенные координаты (точки) в ранее сохраненном многоугольнике, но он не вернет истину, даже если я задаю точку внутри многоугольника.
Яделая это через PHP и Mysql следующим образом:
Вот как я сохраняю это:
$bosquesDeLasLomas = [
[-99.26297668187959, 19.398757625616238],
[-99.25027373998506, 19.38920429315943],
[-99.2321634647165, 19.40847230374557],
[-99.23336509435518, 19.415191283307824],
[-99.23559669225557, 19.415029383450623],
[-99.23799995153291, 19.41187230400899],
[-99.24186233251436, 19.411710400846623],
[-99.25568107335909, 19.404424591699442],
];
// Raw query formation for Polygon
$arrayOfPoints = [];
foreach( $bosquesDeLasLomas as $point ){
$arrayOfPoints[] = new \Grimzy\LaravelMysqlSpatial\Types\Point($point[0], $point[1]);
}
// Closes the polygon for MySql
$arrayOfPoints[] = $arrayOfPoints[0];
$linestring = new \Grimzy\LaravelMysqlSpatial\Types\LineString($arrayOfPoints);
// Defines RAW string
$raw = "ST_GeomFromText('POLYGON(" .new \Grimzy\LaravelMysqlSpatial\Types\Polygon([$linestring]). ")')";
$location = new \App\Location();
$location->neighborhood = "Bosques de Las Lomas";
$location->polygon = \DB::raw($raw);
$location->save();
Вот как я смотрю на локации:
$SQL = 'st_Contains(ST_GeomFromText("POINT('.$address_longitude.' '.$address_latitude.')"), polygon)';
$isLocationAllowed = Location::whereRaw($SQL)->count();
Iпробовал с разными запросами и всегда возвращает 0.
[2018-09-21 05:16:01] local.INFO: st_Contains(ST_GeomFromText("POINT('19.3868562, -99.254208')"), polygon)
[2018-09-21 05:16:01] local.INFO: 0
[2018-09-21 05:16:05] local.INFO: st_Contains(polygon,ST_GeomFromText("POINT('19.3868562, -99.254208')"))
[2018-09-21 05:16:05] local.INFO: 0
[2018-09-21 05:16:13] local.INFO: st_Contains(ST_GeomFromText("POINT('-99.254208, 19.3868562')"), polygon)
[2018-09-21 05:16:13] local.INFO: 0
[2018-09-21 05:16:16] local.INFO: st_Contains(polygon,ST_GeomFromText("POINT('-99.254208, 19.3868562')"))
[2018-09-21 05:16:16] local.INFO: 0
[2018-09-21 05:18:43] local.INFO: st_Contains(polygon,ST_GeomFromText("POINT('-99.254208, 19.3868562')"))
[2018-09-21 05:18:43] local.INFO: 0
[2018-09-21 05:23:37] local.INFO: st_Contains(polygon,ST_GeomFromText("POINT(-99.254208, 19.3868562)"))
[2018-09-21 05:23:37] local.INFO: 0
[2018-09-21 05:25:15] local.INFO: MBRContains(polygon,ST_GeomFromText("POINT(-99.254208, 19.3868562)"))
[2018-09-21 05:25:15] local.INFO: 0
[2018-09-21 05:27:53] local.INFO: st_Contains(polygon,ST_GeomFromText("19.3868562 -99.254208"))
[2018-09-21 05:27:53] local.INFO: 0
[2018-09-21 05:29:03] local.INFO: st_Contains(ST_GeomFromText("POINT(-99.254208, 19.3868562)"), polygon)
[2018-09-21 05:29:03] local.INFO: 0
[2018-09-21 05:29:17] local.INFO: st_Contains(polygon,ST_GeomFromText("POINT(-99.254208, 19.3868562)"))
[2018-09-21 05:29:17] local.INFO: 0
[2018-09-21 05:29:34] local.INFO: st_Contains(polygon,ST_GeomFromText("POINT(-99.254208 19.3868562)"))
[2018-09-21 05:29:34] local.INFO: 0
[2018-09-21 05:29:39] local.INFO: st_Contains(ST_GeomFromText("POINT(-99.254208 19.3868562)"), polygon)
[2018-09-21 05:29:39] local.INFO: 0
Может кто-нибудь посоветовать мне?