多多边形地理并集的高效计算技术

Posted

技术标签:

【中文标题】多多边形地理并集的高效计算技术【英文标题】:Efficient Technique to Calculate Geographic Union of Many Polygons 【发布时间】:2014-01-16 04:57:30 【问题描述】:

我有包含许多 (70,000+) GEOGRAPHY 多边形的数据库表。 (多边形是属性地块。)我们需要对包含所有这些地块的地理联合的聚合形状(MULTIPOLYGON)执行一些计算,例如“凸包的百分比被覆盖这些多边形”? (注意:这并不像听起来那么简单。重叠的地块确实会发生,我们不想重复计算它们,所以我们不能简单地将地块的面积相加。)

为了执行这些计算,我们想要生成一个新形状,它代表所有多边形的地理联合。根据this question的回答,我尝试了以下查询:

DECLARE @Shape GEOGRAPHY
SET @Shape = GEOGRAPHY::STGeomFromText('MULTIPOLYGON EMPTY', 4326)

SELECT @Shape = @Shape.STUnion(Shape)
FROM Parcel

但查询需要永远(到目前为止,60 分钟还在计数;还没有答案)。我想知道其他人可以想到哪些其他技术更有效。此查询不需要是实时查询,但 60 多分钟也行不通。

【问题讨论】:

我的感觉是优化器满足这个请求的方式是它采用 g1 ∪ g2,采用该结果 ∪ g3,采用 that 结果∪ g4 等。作为测试,看看 1、10 和 100 行需要多长时间。如果它大致是线性的,我会说我的理论是有效的,我们将不得不诱使引擎有效地做到这一点。 【参考方案1】:

理想情况下,您应该使用 UnionAggregate 函数,尽管它仅在 SQL Server 2012 之后才存在。

http://technet.microsoft.com/en-us/library/ff929095.aspx

上一个链接的示例:

SELECT City,
geography::UnionAggregate(SpatialLocation) AS SpatialLocation
FROM Person.Address
WHERE PostalCode LIKE('981%')
GROUP BY City;

【讨论】:

+1 让我了解这种方法!我唯一要补充的是,还有一个 ConvexHullAggregate 似乎可以很好地解决 OPs 问题。

以上是关于多多边形地理并集的高效计算技术的主要内容,如果未能解决你的问题,请参考以下文章

三维地图app的发展,离不开Infortrend GSe Pro 高效NAS共享

计算n个最近节点的大数据网络文件处理的高效算法

北大微软提出NGra:高效大规模图神经网络计算

如何计算由多坐标组成的面积?

物联网技术助力智慧农业机械实现精准租赁高效调度

利用go语言实现求数组交集的算法