我正在寻找一种解决方案,以查找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还是不使用正确的函数来查找它。
任何帮助,甚至指向正确的方向,也应受到赞赏。
答案 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
。