在我的数据库中,我存储了多边形。现在我需要搜索一定半径内的所有多边形。即使多边形只是区域内的一小部分,那么它也应该包含在结果中(所以一旦有最小匹配,就会有匹配)。
做这个的最好方式是什么?我一直在考虑创建另一个多边形并搜索与之相交的所有内容,但不知道这是否是一种有效的方法?
在我的数据库中,我存储了多边形。现在我需要搜索一定半径内的所有多边形。即使多边形只是区域内的一小部分,那么它也应该包含在结果中(所以一旦有最小匹配,就会有匹配)。
做这个的最好方式是什么?我一直在考虑创建另一个多边形并搜索与之相交的所有内容,但不知道这是否是一种有效的方法?
是的,我认为这是最好的方法。您可以使用ST_BUFFER创建一个多边形,然后您可以使用ST_INTERSECT来查找多边形是否会与您的多边形相交。
也许你也可以使用ST_DISTANCE来做到这一点。它将计算点到多边形的最小距离。
Select ST_DISTANCE(polygons,POINT(x, y)) as distance, polygon_id from your_polygon_table WHERE distance <= 10
我在同样的问题上苦苦挣扎,并提出了以下效果很好的方法。
select this.poly, other.poly
from table this, table other
where this.name = 'name of subject polygon'
and ST_Distance(ST_Centroid(this.polygon),ST_Centroid(other.polygon)) < 'desired distance';
这将适用于初始点与其他多边形在同一个表中。如果您有一个固定的初始点,您可以将查询简化如下:
select poly from table
where ST_Distance('26.36, -81.07',ST_Centroid(other.polygon)) < 'desired distance';