如何在Shapely中输入自己交叉的无效多边形

时间:2018-08-15 19:00:23

标签: python shapely

我正在使用整形并尝试输入如下所示的多边形,

enter image description here

但是,这显然是无效的,因为它越过了自身。我想保留形状,然后将其输入到程序中。有办法吗?我不应该匀称吗?

1 个答案:

答案 0 :(得分:1)

Shapely可以“处理”无效的多边形,您可以通过is_valid属性检查其有效性。在某些情况下,为了获得没有交集的外边界,可以使用零大小缓冲区使用“技巧”,如下所示:

import math

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

import numpy as np
from shapely.geometry import Polygon

fig = plt.figure(figsize=(3, 6))

pnts = [ (math.cos(math.pi/2 - 2*math.pi*i/5), math.sin(math.pi/2 - 2*math.pi*i/5)) for i in range(5) ]
pnts = [ pnts[0], pnts[2], pnts[4], pnts[1], pnts[3] ]
P = Polygon(pnts)

print(P.is_valid) #False

Q = P.buffer(0)

ax = plt.subplot(211, aspect = 'equal')
ax.plot(*P.exterior.xy)

ax = plt.subplot(212, aspect = 'equal')
ax.plot(*Q.exterior.xy)

fig.savefig('fig.png')

这给出了:

enter image description here