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

Sql 计算多多边形地理并集的有效技术,sql,sql-server,geography,sqlgeography,Sql,Sql Server,Geography,Sqlgeography,我的数据库表包含许多(70000+)GEOGRAPHYpolygons。(多边形是属性地块。)我们需要对由所有这些地块的地理并集组成的聚合形状(aMULTIPOLYGON)执行大量计算,例如“这些多边形覆盖凸包的百分比是多少”?(注意:这并不像听起来那么简单。重叠的地块确实会发生,我们不想重复计算它们,所以我们不能简单地将地块面积相加。) 为了执行这些计算,我们希望生成一个新的形状,该形状表示所有多边形的地理联合。根据对的回答,我尝试了以下查询: DECLARE @Shape GEOGRAPHY

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

为了执行这些计算,我们希望生成一个新的形状,该形状表示所有多边形的地理联合。根据对的回答,我尝试了以下查询:

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

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

但这个问题需要永远的时间(60分钟,目前还在计算中;还没有答案)。我想知道其他人能想到哪些技术更有效。此查询永远不需要是实时查询,但60分钟以上的时间也不会起作用。

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

上一链接中的示例:

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

我的感觉是,优化器满足这个请求的方式是g1∪ g2,拿这个结果来说∪ g3,接受这个结果∪ g4等。作为测试,查看1、10和100行需要多长时间。如果它是大致线性的,我会说我的理论是有效的,我们将不得不欺骗引擎,使其有效地工作。+1感谢我坚持这个方法!我要补充的唯一一点是,还有一个ConvexHullAggregate,它似乎与老年退休金计划的问题相匹配。