我正在尝试使用DbGeography将数千个矩形组合成一个多边形。为了进行测试,我仅从两个矩形开始(因为成千上万个失败并导致全球结果)。当我使用DbGeography的并集方法时,它将返回一个多边形,其中一个矩形从另一个矩形中减去,而不是合并它们。我使用SQLGeography尝试了相同的过程,并获得了相同的结果。谁能看到我在做什么错?还是我误解了Union方法?
两个相互重叠的矩形:
联合后产生的多边形:
代码(geog1是左上矩形,geog2是右下矩形):
DbGeography geogUnion = geog1;
geogUnion = geogUnion.Union(geog2);
这是我要合并的多边形和生成的多边形的值:
geog1: POLYGON ((-114.964104 36.008963, -114.964104 36.005183, -114.958248 36.005183, -114.958248 36.008963, -114.964104 36.008963))
geog2: POLYGON ((-114.957387 36.006575, -114.957387 36.000681, -114.9608 36.000681, -114.9608 36.006575, -114.957387 36.006575))
geogUnion: POLYGON ((-114.957387 36.000681, -114.9608 36.000681, -114.96080000000012 36.005183034992221, -114.958248 36.005183, -114.95824799999998 36.00657500911889, -114.957387 36.006575, -114.957387 36.000681))
答案 0 :(得分:0)
经过大量测试,我发现了这一点。矩形以不同的方向绘制,这意味着一个是顺时针方向,另一个是逆时针方向。发生这种情况是因为我从中提取的数据在我们定义矩形的数据库中不一致。
一旦我通过以相同的方式定向两个矩形来规范化数据,它的行为就会像预期的那样。希望这对遇到类似问题的人有所帮助。