组合几个 DbGeography 多边形

Posted

技术标签:

【中文标题】组合几个 DbGeography 多边形【英文标题】:combine several DbGeography polygons 【发布时间】:2015-06-29 16:24:11 【问题描述】:

我正在寻找组合多个多边形以减少点数的方法。这会是前进的方向吗:

var pol1 = DbGeography.PolygonFromText("POLYGON ((-2.91790532309701 53.3657440952224, -2.91790532309701 53.3567508791632, -2.90283703655041 53.3567508791632, -2.9028338560513 53.3657440952224, -2.91790532309701 53.3657440952224))", 4326);
var pol2 = DbGeography.PolygonFromText("POLYGON ((-2.90283703655041 53.3657440952224, -2.90283703655041 53.3567508791632, -2.88776875000381 53.3567508791632, -2.88776556950469 53.3657440952224, -2.90283703655041 53.3657440952224))", 4326);
var pol3 = DbGeography.PolygonFromText("POLYGON ((-2.91641048851245 53.3747373112816, -2.91641048851245 53.3657440952224, -2.90133902146673 53.3657440952224, -2.90133583925323 53.3747373112816, -2.91641048851245 53.3747373112816))", 4326);

var combined = (pol1.Union(pol2)).Union(pol3);

基本上,如果多边形相互接触,我希望将它们组合起来。不相交的多边形应保持不相交。

目前我不确定 Union 是否实现了与 TSQL 函数 STUnion() 相同的功能。

PS:我刚刚在 TSQL 中运行 STUnion 并注意到它也不会产生预期的结果(即联合包含组合多边形内的点)。

【问题讨论】:

有一个 UnionAggregate 函数应该尽可能从生成的联合多边形中删除内部边界(就像 Union 应该做的那样),但在测试中它似乎没有这样做。 我认为这也不适用于 dbgeography ... 我可以确认 union 会产生 something - 只是不是你所说的 union。试图完全实现 setzkorn 所追求的目标 - 并获得相同的结果。只是使用库并从 C# 调用它们,而不是在 SQL Server 中实际执行此操作。 我花了最后一个小时试图找出 GeographyUnionAggregate (在 c# 土地上)无济于事。文档很差,除了我面前的书,我还没有看到一个使用示例,在 C# 中也没有。 【参考方案1】:

这不是我看到的结果。

这是一个查询:

declare @pol1 Geography, @pol2 Geography

set @pol1 = Geography::STPolyFromText('POLYGON ((-2.91790532309701 53.3657440952224, -2.91790532309701 53.3567508791632, -2.90283703655041 53.3567508791632, -2.9028338560513 53.3657440952224, -2.91790532309701 53.3657440952224))', 4326);
set @pol2 = Geography::STPolyFromText('POLYGON ((-2.90283703655041 53.3657440952224, -2.90283703655041 53.3567508791632, -2.88776875000381 53.3567508791632, -2.88776556950469 53.3657440952224, -2.90283703655041 53.3657440952224))', 4326);

select @pol1.STUnion(@pol2)

结果如下:

如果您从问题中添加@pol3,您可能会看到一个接缝表单。尝试使用 Geometry 而不是 Geography 运行查询,接缝将消失。我怀疑这是地球的凸块将其推出,因此如果使用地理,您可能需要更多点来“将其缝合在一起”。

(我实际上是想让它不要加入,as described here。)

【讨论】:

以上是关于组合几个 DbGeography 多边形的主要内容,如果未能解决你的问题,请参考以下文章

如何在 EF4.1 中使用 DbGeography 空间数据类型

实体框架 DbGeography 给了我一个纬度 FormatException 错误

Azure 移动应用服务器在 GET 上不返回 DBGeography

存储用户地理位置数据的正确类型是啥?我可以在 DbGeography 中存储准确性吗?

专访保证客户高度认可的前提下提升低频效果-访JL Audio副总裁Geogre Jenkins

ZBrush常用3D术语