空间数据框架中的“左手”几何(有形状)——有办法解决吗?

655
4
06-22-2021 07:17 PM
jcarlson
通过 MVP荣誉贡献者
MVP荣誉贡献者

我试图在一对空间启用的数据框架之间做一些简单的叠加。这些层来自功能服务,使用查询(…as_df = True)

当我尝试覆盖,我得到以下消息,或类似的东西:

TopologyException:输入geom1无效:孔位于外壳外或靠近点处

在很多情况下,这完全是无稽之谈,因为所讨论的几何结构没有洞。它甚至不是多部分的!

稍微挖掘一下就会发现,这是右手定则的问题,多边形中顶点的顺序导致了这种行为。问题是,我找不到任何方法在多边形上“反转方向”,除了可能分开SHAPE列和反转顶点数组。

在我做这些麻烦之前,我想看看是否有人遇到过这种情况。有什么建议吗?

编辑:我在一个自定义的python环境,所以我的sdf来作为形状几何。Arcpy能够处理这个问题,但如果可能的话,我希望只使用ArcGIS Python API来保持这个过程的可用性。生成的脚本可以在不同的设置下由不同的用户运行,并不是所有用户都能够使用arcpy。

——乔什·卡尔森
肯德尔县GIS
0荣誉
4回复
DanPatterson
通过 尊敬的贡献者
尊敬的贡献者

如果python api没有内置的方法来自动做到这一点,我会感到惊讶,因为必须使用“orient”来改变多边形顶点的顺序似乎是可行的。

也许其他的空间表现形式在幕后进行了重新定位

Shapely用户手册- Shapely 1.7.1文档

pyqgis -将QGIS几何形状转换为形状几何形状,以使用在形状- Geogr中定义的定向方法。


...有点退休了…
jcarlson
通过 MVP荣誉贡献者
MVP荣誉贡献者

我自己也很惊讶,但API中对多边形定向的唯一参考是:

外环为顺时针方向,孔为逆时针方向。

简单地说,他们以某种方式定向,但没有提到重新定向多边形的方法,或者当定向不遵循适当的顺序时还能做什么。

东方是我想要的东西,但烦人的是,有型。多边形!=形状。多边形。此外,我的特征被返回为MultiPolygon类型,所以大量的嵌套迭代来打破这些,并正确定位它们,然后重新组装成一个几何系列的多多边形。天哪。

——乔什·卡尔森
肯德尔县GIS
0荣誉
DanPatterson
通过 尊敬的贡献者
尊敬的贡献者

这行不通秀气。多边形!=形状。Polygon(我假设你想要与arcpy进行比较

因为shape在默认情况下没有定义M和Z。

我只是简单地跳过,只是说明几何运算对arcpy的人是开放的。


...有点退休了…
0荣誉
jcarlson
通过 MVP荣誉贡献者
MVP荣誉贡献者

哈,不,我只是说polygon子模块和polygon几何对象在字面上是不相等的,也就是说,不同的东西。(我可能应该在我的叙述文本中去掉代码约定)。

东方method以多边形作为参数,所以它是

shapely.geometry.polygon。东方(Polygon(some WKT or something))

我希望我可以简单地调用一个多边形对象上的定向,Polygon.orient (),但没有这样的运气。绝对不会将实际的形状与其他任何东西进行比较。

——乔什·卡尔森
肯德尔县GIS
0荣誉