我正在使用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会减去重叠区域,并且不会在重叠区域中检索属性。我添加此图片以获得更多解释:
如果使用重叠的多边形,如何使此搜索正常工作?
答案 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)))"