首页 > 解决方案 > 如何绘制带孔的 Shapely 多边形?

问题描述

我想要一个函数plot(shapely_objects),其中shapely_objects包含多边形、点和多多边形的列表。我有一些非常相似的东西,但它填补了多边形的洞。如何绘制带孔的 Shapely 多边形?

代码

from shapely.geometry import Point, shape


def plot(shapely_objects, figure_path='fig.png'):
    from matplotlib import pyplot as plt
    import geopandas as gpd
    boundary = gpd.GeoSeries(shapely_objects)
    boundary.plot(color=['red', 'green'])
    plt.savefig(figure_path, dpi=300, bbox_inches="tight")


p = Point(12.12, 54.085)
name = ''
multi_poly = {'coordinates': (((12.11, 54.08), (12.11, 54.09),
                               (12.13, 54.09), (12.13, 54.08)),
                              ((12.11, 54.08), (12.11, 54.09),
                               (12.13, 54.09), (12.13, 54.08))),
              'type': 'Polygon'}
multi_poly = shape(multi_poly)
plot([p, multi_poly, p])

print('multi_poly.intersects(p) == {}'.format(multi_poly.intersects(p)))
print('multi_poly.touches(p) == {}'.format(multi_poly.touches(p)))
print('multi_poly.contains(p) == {}'.format(multi_poly.contains(p)))
print('p.within(multi_poly) == {}'.format(p.within(multi_poly)))

p, multi_poly = multi_poly, p
print('multi_poly.intersects(p) == {}'.format(multi_poly.intersects(p)))
print('multi_poly.touches(p) == {}'.format(multi_poly.touches(p)))
print('multi_poly.contains(p) == {}'.format(multi_poly.contains(p)))
print('p.within(multi_poly) == {}'.format(p.within(multi_poly)))

图片

绿点不在红色多边形内。洞缺失/填充。

在此处输入图像描述

标签: pythonmatplotlibvisualizationshapely

解决方案


推荐阅读