合并多个DbGeography多边形

4
我正在寻找一种将多个多边形合并以减少点数的方法。这是否是正确的方式:
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() 实现相同。

附注:我刚刚在 TSQL 中运行了 STUnion,并注意到它也没有产生预期的结果(即联合体包含合并多边形内的点)。


1
有一个 UnionAggregate 函数,它应该尽可能地从结果联合的多边形中删除内部边界(就像 Union 一样),但在测试中似乎并没有这样做。 - Ben Thul
我认为这对于dbgeography也不起作用... - cs0815
1
我可以确认 union 会产生 某些东西 - 只是不是你所谓的 union。试图实现 setzkorn 所追求的目标 - 并获得相同的结果。只是使用库并从 C# 中调用它们,而不是在 SQL Server 中实际执行此操作。 - Hiro Protagonist
我已经花了最后一个小时试图弄清楚GeographyUnionAggregate(在c#界)的用法,但是毫无进展。文档很差,除了我面前的书籍中没有看到任何用法示例,也没有C#相关的信息。 - Eric
1个回答

0

这不是我看到的结果。

这是一个查询:

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)

这是结果:

enter image description here

如果您在问题中添加@pol3,您可能会看到一个接缝形成。尝试使用Geometry而不是Geography运行查询,接缝将消失。我怀疑这是地球的膨胀将其推出去,因此如果使用Geography,则可能需要更多点来“缝合”它们。
(实际上我正在尝试使它不加入,如这里描述的。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接