2012-04-09 185 views
3

我必須找到多邊形重疊並獲取其幾何。有誰知道如何做到這一點?查找多邊形重疊

這是多邊形表:

DECLARE @Table TABLE (
    id varchar(32), 
    shape geometry); 

INSERT INTO @Table VALUES 
('California', geometry::Parse('POLYGON((-124.23 41.96, -119.97 41.93, -119.97 38.99, -113.95 34.30, -114.69 32.62, -117.11 32.43, -122.25 36.10, -124.23 41.96))')), 
('Western US', geometry::Parse('POLYGON((-124.71 48.69, -102.97 48.86, -102.88 31.72, -117.15 32.39, -124.01 39.50, -124.71 48.69))')), 
('US', geometry::Parse('POLYGON((-124.62 48.86, -94.57 48.98, -80.68 42.09, -66.88 45.02, -82.26 28.69, -98.96 26.90, -116.80 32.62, -124.36 39.77, -124.62 48.86))')), 
('Colorado', geometry::Parse('POLYGON((-108.98 40.91, -108.98 36.87, -101.95 36.87, -101.95 40.91, -108.98 40.91))')); 
+0

你是什麼意思的多邊形重疊? – Teja 2012-04-09 21:12:14

+0

這個多邊形之間的交點... – Nenad 2012-04-09 21:15:34

回答

3

將這項工作?

SELECT 
    T.id 
    , O.id 
    , T.shape.STIntersection(O.shape) Intersection 
FROM @Table T 
INNER JOIN @Table O 
    ON T.shape.STIntersects(T.shape) = 1 
    AND T.id > O.id 
+0

我需要交集的實際幾何。 – Nenad 2012-04-09 21:22:20

+0

我會使用'T.id> O.id'來避免重複的結果。 (我假設'A.STIntersection(B)= B.Stentersection(A)') – 2012-04-09 21:22:41

+0

@MartinSmith啊,我沒有想到這一點,非常好。我剛剛嘗試過並獲得了相同的空間結果,因此我假設'T.id <> O.id'返回重複項。我會做這個編輯。 – 2012-04-09 21:29:43