Пространственное соединение SQL - PullRequest
9 голосов
/ 05 октября 2011

У меня есть 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 и вызвать вышеупомянутый запрос несколько раз?

1 Ответ

14 голосов
/ 06 октября 2011

Это должно работать:

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 (...))», поскольку это ускорит запрос.

...