我正在使用parallel_offset包的shapely函数来获得一些多边形的偏移结构,这些多边形是闭合环。我同时有几个多边形,很多形状相似。然而,大约10-25%的人不会从parallel_offset中产生闭合环这是一个不起作用的形状的mwe:

import matplotlib.pyplot as plt
from shapely.geometry.polygon import LinearRing

def plot_line(ax, ob, color):
    x, y = ob.xy
    ax.plot(x, y, color=color, alpha=0.7, linewidth=3,
            solid_capstyle='round', zorder=2)

polygon = [[-29.675, -30.675],
           [-28.4094, -29.4094],
           [-28.325, -29.325],
           [-28.325, -29.764],
           [-28.325, -29.7933],
           [-28.4587, -29.8274],
           [-28.4676, -29.8297],
           [-28.5956, -29.8814],
           [-28.6041, -29.8848],
           [-28.724, -29.953],
           [-28.732, -29.9576],
           [-28.8417, -30.0413],
           [-28.849, -30.0469],
           [-28.9466, -30.1445],
           [-28.9531, -30.151],
           [-29.0368, -30.2607],
           [-29.0424, -30.268],
           [-29.1106, -30.3879],
           [-29.1152, -30.3959],
           [-29.1669, -30.5239],
           [-29.1703, -30.5324],
           [-29.2044, -30.6661],
           [-29.2067, -30.675],
           [-29.6457, -30.675],
           [-29.675, -30.675]]

poly_line = LinearRing(polygon)
poly_line_offset = poly_line.parallel_offset(0.05, side="left", resolution=16,
                                             join_style=2, mitre_limit=1)
fig = plt.figure()
ax = fig.add_subplot(111)
plot_line(ax, poly_line, "blue")
plot_line(ax, poly_line_offset, "green")
plt.show()

python - 匀称的parallel_offset有时不生成闭合环-LMLPHP
如您所见,绿色偏移多边形不会在顶点列表中的第一个/最后一个点处闭合。不过,其他非常相似的形状确实可以达到预期的效果它们有相同的数据结构,也有相同的起点/终点,就像我上面的例子一样join_style属性不会将结果更改为我想要的结果更改resolutiondistance也没有帮助documentation也不能解决这个问题。
你有什么指导吗?我正在使用shapely 1.6.3。

最佳答案

不完全确定为什么会发生这种情况,但是您可以使用基于buffer方法的解决方法:

poly_line = LinearRing(polygon)
poly_line_offset = poly_line.buffer(0.05,
                       resolution=16, join_style=2, mitre_limit=1).exterior

使用您的数据,这将产生(可能)所需的结果:
python - 匀称的parallel_offset有时不生成闭合环-LMLPHP

08-24 15:31