多个多边形上的多个点SQL Server空间

时间:2019-11-09 14:35:43

标签: sql sql-server spatial

我在SQL Server空间方面还是个新手。

我一直在使用2个空间数据库“点”(> 1m个条目)和“多边形”(> 800个条目)在SQL Server上运行作业

我想做的就是简单地创建一个布尔字段,该字段告诉我点是否落在多边形中。 我已经尝试了一些方法,但是没有任何决定性的或富有成效的方法。 我尝试过的查询是:

SELECT
    points_id,
    CASE
        WHEN p1.GEOM.STWithin((p2.GEOM))=1 
        THEN 'yes' 
        ELSE 'no'
    END as results
FROM [pointsdb] p1, [polydb] p2 

我得到的结果基本上是1点到所有多边形的所有可能组合,反之亦然。 我尝试使用分组方式,但是效率下降了很多。

您能帮我吗? 欢呼

1 个答案:

答案 0 :(得分:1)

请勿交叉连接表。相反,您可以将exists条件与相关子查询一起使用,如下所示:

SELECT
    points_id,
    CASE 
        WHEN EXISTS (
            SELECT 1
            FROM [polydb] p2 
            WHERE p1.GEOM.STWithin((p2.GEOM))=1 
        ) 
        THEN 'yes' 
        ELSE 'no'
    END as results
FROM [pointsdb] p1