我用来查询其他点范围内的多边形的语法
SELECT *
FROM dbo.myTable
INNER JOIN
dbo.myPOI ON myTable.geog.STIntersects(myPOI.geog) = 1
但是,为了查询兴趣点,我使用了一个半径,我正在使用它。
SELECT *
FROM dbo.myTable
INNER JOIN
dbo.myPOI2 ON myTable.geog.STDistance(myPOI2.geog) <= POI2.Point_Radius
有没有更好的方法来写这个?可以改进查询吗?
是的。那会很慢。您可以通过缓冲点并找到以下内容来极大地改进该查询
intersects
:你可以在你的情况下做得更好,因为半径是在行上而不是在查询中提供的。您可以将返回的几何存储在
STBuffer
表上而不是点上。如果您想找到中心点(您可能永远不需要),您可以使用 GIS 函数STCentroid。其他实现
作为旁注,这种类型的查询是
ST_DWithin
在 PostGIS 中完成的,并将在索引上运行。