【问题标题】:Find polygon overlaps查找多边形重叠
【发布时间】:2012-04-22 05:16:31
【问题描述】:

我必须找到多边形重叠并获得它们的几何形状。有人知道怎么做吗?

这是多边形表:

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))'));

【问题讨论】:

  • 多边形重叠是什么意思?
  • 这个多边形之间的交点...

标签: sql-server tsql sql-server-2012


【解决方案1】:

这行得通吗?

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

【讨论】:

  • 我需要十字路口的实际几何形状。
  • 我会使用T.id > O.id 来避免重复的结果。 (我假设A.STIntersection(B) = B.STIntersection(A)
  • @MartinSmith 啊,我没想到,非常好。我刚试了一下,得到了相同的空间结果,所以我假设T.id <> O.id 正在返回重复项。我会进行编辑。
  • @Nenad 它应该有你现在需要的东西,感谢 Martin S.:)
  • 我认为空间索引应该有助于相交查询。尝试在你的几何列上放置一个索引,看看效果如何。
猜你喜欢
  • 2016-07-28
  • 1970-01-01
  • 2011-11-06
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多