TopologicalError:无法执行操作“ GEOSIntersection_r”

如何解决TopologicalError:无法执行操作“ GEOSIntersection_r”

大家好, 我正在尝试将区shapefile映射到装配选区。 我有Both的形状文件。基本上,我必须将人口普查数据中地区级别给定的所有变量映射到装配选区级别。 因此,我正在跟踪pycon talk。 一切工作正常,但我在get_intersection函数中遇到错误TopologicalError: The operation 'Geosintersection_r' Could not be performed. Likely cause is invalidity of the geometry <shapely.geometry.polygon.polygon object at 0x7f460250ce10>

我尝试同时使用pygeos和rtree。有一些链接说问题出在pygeos中。 因此,我使用了rtree。但无济于事。请帮助 预先感谢。

我尝试过的代码

constituencies=gpd.GeoDataFrame.from_file('/content/AC_All_Final.shp')
districts=gpd.GeoDataFrame.from_file('/content/2001_dist.shp')
districts['AREA'] = districts.geometry.area
constituencies['AREA'] = constituencies.geometry.area
merged = gpd.sjoin(districts,constituencies).reset_index().rename(
    columns={'index': 'index_left'})

def get_intersection(row):
    left_geom = districts['geometry'][row['index_left']]
    right_geom = constituencies['geometry'][row['index_right']]
    return left_geom.intersection(right_geom)

***Error is at this point***
merged['geometry'] = merged.apply(get_intersection,axis=1)
merged['AREA'] = merged.geometry.area
Error trace is given below:
TopologyException: Input geom 1 is invalid: Ring Self-intersection at or near point 77.852561819157373 14.546596140487276 at 77.852561819157373 14.546596140487276
---------------------------------------------------------------------------
TopologicalError                          Traceback (most recent call last)
<ipython-input-17-8123669e025c> in <module>()
      4     return left_geom.intersection(right_geom)
      5 
----> 6 merged['geometry'] = merged.apply(get_intersection,axis=1)
      7 merged['AREA'] = merged.geometry.area

7 frames
/usr/local/lib/python3.6/dist-packages/shapely/topology.py in _check_topology(self,err,*geoms)
     36                     "The operation '%s' Could not be performed. "
     37                     "Likely cause is invalidity of the geometry %s" % (
---> 38                         self.fn.__name__,repr(geom)))
     39         raise err
     40 

TopologicalError: The operation 'Geosintersection_r' Could not be performed. Likely cause is invalidity of the geometry <shapely.geometry.polygon.polygon object at 0x7f460250ce10>

解决方法

从 shapely 1.8 开始,会有一个 make_valid 方法

然而,目前 pypi 上的 1.8 还不是一个稳定的版本,你需要安装一个不稳定的版本

pip3 install shapely==1.8a2 

然后你可以使形状有效

from shapely.validation import make_valid

valid_shape = make_valid(invalid_shape)

请注意,形状的类型可能会发生变化,例如从多边形变为多多边形。

但是,我认为最好 (1) 正确避免无效形状或 (2) 选择 make_valid,因为它是由匀称的团队建议的,而不是 .buffer(0) 解决方法。

,

错误消息告诉您发生了什么。您的某些几何形状无效,因此在进行申请之前必须使它们有效。在大多数情况下有效的简单技巧是使用buffer(0)

merged['geometry'] = merged.buffer(0)

由于该问题与几何图形的有效性有关,并且是GEOS提出的,因此,无论您使用shape / rtree后端还是pygeos,都没有关系。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?