如何搜索具有相交的多边形内的所有点?

时间:2015-11-04 18:07:28

标签: mysql geospatial

我正在使用MySQL中的空间对象。我有一个表格将数据库中的遗产位置保存为“经度”和“纬度”,我在用户请求的多边形内搜索这些遗产。我在MySQL中使用st_contains函数,如下所示:

select * from estate where ST_CONTAINS(GEOMFROMTEXT(region),POINT(plat,plon)));

在代码段中,区域具有以下格式:

"POLYGON((lat1 lng1,lat2 lng2,lat3 lng3,lat4 lng4,lat1 lng1),(lat6 lng6,lat7 lng7,lat8 lng8,lat9 lng9,lat6 lng6))"

当多边形彼此没有重叠时,一切都很好。但是,如果多边形有重叠,MySQL会减去重叠区域,并且不会在重叠区域中检索属性。我添加此图片以获得更多解释:

enter image description here

如果使用重叠的多边形,如何使此搜索正常工作?

1 个答案:

答案 0 :(得分:4)

在MySQL中,我们有针对这种情况的类型MULTIPOLYGON。您可以在MySQL Spatial Data Types中看到完整的文档。

您的region需要像这样定义:

"MULTIPOLYGON(((lat1 lng1,lat2 lng2,lat3 lng3,lat4 lng4,lat1 lng1)),((lat6 lng6,lat7 lng7,lat8 lng8,lat9 lng9,lat6 lng6)))"