python画蝴蝶结_Shapely中的多边形相交错误:“Shapely.geos.TopologicalError:geos intersection操作生成了空几何体”...

我一直在试着调试这个问题,但无法这样做。我试图找到两个Polygon对象的交集。它在大多数情况下都可以工作,但对于以下情况,它会引发以下异常:P1 area: 13.125721955

P2 area: 1.0

Traceback (most recent call last):

File "geom2d.py", line 235, in

print p1.intersection(p2)

File "/usr/local/lib/python2.7/dist-packages/shapely/geometry/base.py", line 334, in intersection

return geom_factory(self.impl['intersection'](self, other))

File "/usr/local/lib/python2.7/dist-packages/shapely/topology.py", line 47, in __call__

"The operation '%s' produced a null geometry. Likely cause is invalidity of the geometry %s" % (self.fn.__name__, repr(this)))

shapely.geos.TopologicalError: The operation 'GEOSIntersection_r' produced a null geometry. Likely cause is invalidity of the geometry

代码如下。from shapely.geometry import Point,Polygon,MultiPolygon

poly1 = [(35.0041000000000011, -88.1954999999999956), (34.9917999999999978, -85.6068000000000069), (32.8404000000000025, -85.1756000000000029), (32.2593000000000032, -84.8927000000000049), (32.1535000000000011, -85.0341999999999985), (31.7946999999999989, -85.1358000000000033), (31.5199999999999996, -85.0438000000000045), (31.3384000000000000, -85.0836000000000041), (31.2092999999999989, -85.1069999999999993), (31.0023000000000017, -84.9943999999999988), (30.9953000000000003, -87.6008999999999958), (30.9422999999999995, -87.5926000000000045), (30.8538999999999994, -87.6256000000000057), (30.6744999999999983, -87.4072000000000031), (30.4404000000000003, -87.3687999999999931), (30.1463000000000001, -87.5240000000000009), (30.1545999999999985, -88.3863999999999947), (31.8938999999999986, -88.4742999999999995), (34.8937999999999988, -88.1020999999999930), (34.9478999999999971, -88.1721000000000004), (34.9106999999999985, -88.1461000000000041)]

poly2 = [(34.7998910000000024, -88.2202139999999986), (34.7998910000000024, -87.2202139999999986), (35.7998910000000024, -87.2202139999999986), (35.7998910000000024, -88.2202139999999986)]

p1 = Polygon(poly1)

p2 = Polygon(poly2)

print 'P1 area:',p1.area

print 'P2 area:',p2.area

print p1.intersection(p2)

因为它打印了两个多边形的区域,所以我假设多边形的形状是正确的。我还(不知何故)打印了第一个多边形,以确保它确实是一个简单的多边形。

有人能解释一下为什么我会有这个例外吗?

编辑:我打印的p1.is_有效,结果是错误的。有一些解释here。搜索字符串is_valid。上面说A valid Polygon may not possess any overlapping exterior or interior rings.

有人能解释一下这意味着什么吗?如果有可能的话?

顺便说一下,我还注意到,如果我从poly1中删除最后一个坐标,那么整个过程都会正常工作。也许整个坐标列表使多边形变得复杂。

这个错误通常是由于缺少 Shapely的依赖项导致的。你可以尝试以下步骤来解决这个问题: 1. 确保你已经安装了 Shapely 库。你可以使用以下命令来安装 Shapely: ``` pip install shapely ``` 2. 如果你已经安装了 Shapely 库并且仍然遇到此错误,则可能是因为缺少 GEOS 库的安装。GEOS 是 Shapely 库的一个依赖项。你可以尝试使用以下命令来安装 GEOS 库: ``` sudo apt-get install libgeos-dev ``` 如果你使用的是 macOS,则可以使用以下命令来安装 GEOS 库: ``` brew install geos ``` 如果你使用的是 Windows,则可以从以下网站下载 GEOS 库进行安装:http://download.osgeo.org/geos/ 3. 如果你已经安装了 Shapely 库和 GEOS 库,并且仍然遇到此错误,则可能是由于环境变量未正确设置导致的。你可以尝试使用以下命令来设置环境变量: ``` export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH ``` 如果你使用的是 Windows,则可以按照以下步骤设置环境变量: - 在搜索栏搜索“环境变量”并打开“编辑系统环境变量”。 - 在“系统属性”窗口,单击“环境变量”按钮。 - 在“系统变量”下,单击“新建”按钮。 - 在“变量名”字段输入“LD_LIBRARY_PATH”,在“变量值”字段输入 Shapely 库和 GEOS 库的路径,多个路径之间用分号分隔。 - 单击“确定”按钮保存更改。 希望这些步骤能够帮助你解决问题!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值