MySQL在多边形中找到相交的纬度点

时间:2019-02-15 16:23:49

标签: mysql database

我正在寻找一种解决方案,以查找MySQL表中任何多边形内是否包含LAT,LNG点。

由于超出我的SQL知识的某些原因,我使用ST_Intersects的查询返回了“找不到函数”。所以我在这里找了东西

SELECT `area_title` FROM `service_areas` WHERE MBRIntersects(`area_poly`, GEOMFROMTEXT('POINT(40.775032, -73.970778)'));

我的测试表非常简单,并存储了
1. area_poly GEOMETRY个商店POLYGON((-71.740723 41.360319,-71.685791 42.106374,-71.71875 42.407235,-71.905518 42.771211,-72.070312 43.036776,-72.432861 43.157109,-72.718506 43.397065,-73.190918 43.55651,-73.619385 43.580391,-74.32251 43.572432,-75.201416 43.277205,-75.717773 43.004647,-75.926514 42.795401,-76.135254 42.528796,-76.256103 42.138968,-76.289062 41.869561,-76.234131 41.442726,-76.190185 40.955011,-75.992432 40.472024,-75.849609 40.153687,-75.629883 39.783213,-75.311279 39.529467,-74.94873 39.368279,-74.520264 39.257778,-74.256592 39.478606,-71.5979 40.971604,-71.740723 41.360319))
还有
2. area_title VARCHAR(20)个商店service area 1

如上所述,我正在尝试将Point传递为POINT(40.775032, -73.970778)

预期结果将返回该点在其多边形内的任何area_title;但是,我的查询返回0 Rows

我知道在松弛和网络上有很多问题/答案,但是我没有找到尝试大多数方法的解决方案。由于缺乏SQL知识,我不确定我是正确存储Poly还是不使用正确的函数来查找它。

任何帮助,甚至指向正确的方向,也应受到赞赏。

1 个答案:

答案 0 :(得分:0)

一个遇到相同问题的人的简单解决方案:

SELECT ea.name, ea.area_poly from service_areas as ea WHERE contains(ea.area_poly, GeomFromText(AsText(point(@lat, @lng)), 4326))

我的多边形ea.area_poly在SQL中作为Polygon((lat1 lng1,lat2 lng2, etc..))类型保存为geometry