gpt4 book ai didi

ruby - RGeo - 修复自相交

转载 作者:数据小太阳 更新时间:2023-10-29 07:33:21 24 4
gpt4 key购买 nike

我有一堆具有自相交的多边形,这会导致在进一步后处理它们时出现一些错误(特别是 - 我无法计算这些多边形与其他多边形的相交面积)。这是一个 splinter 的多边形示例:

{
"type": "MultiPolygon",
"coordinates": [
[
[
[
6.881057785381658,
46.82373306675715
],
[
6.857171686909481,
46.81861230543794
],
[
6.857354659059071,
46.81856788926046
],
[
6.856993473052509,
46.82693029065604
],
[
6.8612894138116785,
46.83422796373707
],
[
6.86720955648855,
46.835636765630476
],
[
6.871281147359957,
46.83078486366309
],
[
6.871573291317274,
46.8306215963777
],
[
6.877608228639841,
46.82771553607934
],
[
6.877758462659651,
46.82772313420989
],
[
6.877852632482749,
46.827735617670285
],
[
6.880928107931434,
46.82630213148064
],
[
6.8810399979122305,
46.82622029042867
],
[
6.881117606743071,
46.826115612819855
],
[
6.881057785381658,
46.82373306675715
]
]
]
]
}

这就是它在 map 上的样子 - 如您所见,两条多边形边相交。 RGeo 抛出错误,指向交点坐标(我猜): => "Geos::GEOSException: TopologyException: Input geom 0 is invalid: Self-intersection at or near point 6.8573510795579145 46.818650764080992 at 6.8573510795579145 46.8186507264408099".所以,至少我有。

我的问题是:有没有办法自动修复那个交叉点?我读到,一个可能的解决方案是插入 2 个具有自交坐标的相似点。但问题是——多边形有特定的顺序,我不知道在哪里插入这些点。

此外,也许有一些现有的工具可以帮助解决这个问题......

self-intersection example

最佳答案

我将使用的解决方案是 postgis's ST_MakeValid option for postgres 如果这是你的一个选项,你可以按照 ST_AsText(ST_MakeValid(geom_column)) 的方式做一些事情,或者如果你更愿意传递这里的文本是使用 prepair 中显示的领结示例的示例:

select ST_AsText(ST_MakeValid(ST_GeomFromText('POLYGON((0 0, 0 10, 10 0, 10 10, 0 0))')));
st_astext
-----------------------------------------------------------
MULTIPOLYGON(((0 0,0 10,5 5,0 0)),((5 5,10 10,10 0,5 5)))
(1 row)

如果您不感兴趣,您可以导出这些几何图形并使用 prepair 之类的工具来转换它们。总结一下它在幕后是如何工作的,它将把这些“领结”分成多个多边形,然后将它们制成一个多多边形。相同类型的修复将应用于多面体。

关于ruby - RGeo - 修复自相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48785494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com