答案 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')
这给出了: