SQL Spatial Join
Asked Answered
E

1

12

I have 2 tables one with points as geographies and other with polygons as geographies. I am able to find which polygon a single point falls(from the point table) by the following query:

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;

However, I want to do a join between the two tables and get the polygons in which each of the points in the Point Table fall. Is it even possible? Or do I need to loop through the Point table and call the above query multiple times?

Enjoyment answered 5/10, 2011 at 0:11 Comment(0)
O
18

This should work:

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

I have added an index hint " WITH(INDEX(...)) " as this will speed up the query.

Osteopath answered 6/10, 2011 at 10:16 Comment(1)
It's important to note that the polyTable.Geog.STIntersects(pointTable.Geog) = 1 bit is totally required here. I am coming from Postgres and wrote the query using this as an example and left off the = 1 by mistake and was very frustrated until I noticed that detail.Vegetable

© 2022 - 2024 — McMap. All rights reserved.