【问题标题】:SQL Spatial JoinSQL 空间连接
【发布时间】:2011-10-05 00:11:11
【问题描述】:

我有 2 张表,其中一张以点为地理,另一张以多边形为地理。我可以通过以下查询找到单个点落在哪个多边形(从点表中):

DECLARE @p geography;
select @p = PointGeom from dbo.PointTable where ID = 1 
SELECT  a.ID, ATTRIBUTE1, geom 
from dbo.PolygonTable  a
where geom.STIntersects(@p) = 1;

但是,我想在两个表之间进行连接,并获得点表中每个点所在的多边形。甚至可能吗?还是我需要遍历Point表并多次调用上述查询?

【问题讨论】:

    标签: sql join spatial


    【解决方案1】:

    这应该可行:

    SELECT 
        polyTable.[PolygonID]
    ,   pointTable.[PointID]
    FROM 
    [PolygonTable_Name] polyTable WITH(INDEX([SPATIAL_INDEX_NAME]))
    INNER JOIN 
    [PointTabl_Name] pointTable
    ON
    polyTable.Geog.STIntersects(pointTable.Geog) = 1
    

    我添加了一个索引提示“ WITH(INDEX(...)) ”,因为这将加快查询速度。

    【讨论】:

    • 请务必注意,这里完全需要 polyTable.Geog.STIntersects(pointTable.Geog) = 1 位。我来自 Postgres,并以此为例编写了查询,并错误地忽略了 = 1,直到我注意到这个细节,我才感到非常沮丧。
    猜你喜欢
    • 2013-01-02
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多