在 geopandas 中溶解后删除多边形的内线
Deleting inner lines of polygons after dissolving in geopandas
我正在处理一个城市的地理数据框,其中每个单位都是一个地区(行政区划)。它的情节是这样的:
import geopandas as gpd
df = gpd.read_file('districts_lima.geojson')
df.plot()
然后,我将使用名为 zone
的变量将一些地理单位合并为更大的组。结果是:
df2 = df.dissolve(by='zone', aggfunc='sum')
df2.plot(column='population', legend=True, cmap='Blues')
我唯一的问题是,当我用较暗的边界重现相同的图时,很明显一些合并的多边形(区域)有内线,这是原始地理数据框的内区边界。图中清楚地显示了这一点:
df2.plot(column='population', legend=True, cmap='Blues', edgecolor='black')
有没有办法使用 geopandas 删除多边形的内线,这样它们就不会出现在最后一个图中?
我的数据可以找到here。
使用轴 (ax1) 可以在公共轴上绘制多个图层。同样使用zorder,来排列图层,较高的值将图层放在较低值的图层之上。
fig, ax1 = plt.subplots(1, 1)
...
# bottom layer (has thick black lines)
df2.plot(column='population', legend=True, cmap='Blues', edgecolor='black', ax=ax1, zorder=5, lw=6)
# top layers (thin boundary lines)
df2.plot(column='population', legend=True, cmap='Blues', ax=ax1, zorder=6)
希望顶层能隐藏几乎所有的底层,但部分外部边界线。
我实际上找到了一个很好的解决方案,它特别适用于我的问题是在应用 geopandas
的 dissolve()
属性 之后创建的。显然,问题是由连续内部单元的边界线中不明显的差异产生的,这些差异阻止了折叠以删除生成的多边形的内部线。
这是通过添加一个小缓冲区来加宽多边形线来解决的,这样那些不明显的差异就会被消除,并且初始多边形的每条内线实际上都会重叠。具体来说,我需要添加:
df2['geometry'] = df2['geometry'].buffer(0.0001)
之前
df2 = df.dissolve(by='zone', aggfunc='sum')
所以现在绘图命令
df2.plot(column='population', legend=True, cmap='Blues', edgecolor='Black')
产量:
我正在处理一个城市的地理数据框,其中每个单位都是一个地区(行政区划)。它的情节是这样的:
import geopandas as gpd
df = gpd.read_file('districts_lima.geojson')
df.plot()
然后,我将使用名为 zone
的变量将一些地理单位合并为更大的组。结果是:
df2 = df.dissolve(by='zone', aggfunc='sum')
df2.plot(column='population', legend=True, cmap='Blues')
我唯一的问题是,当我用较暗的边界重现相同的图时,很明显一些合并的多边形(区域)有内线,这是原始地理数据框的内区边界。图中清楚地显示了这一点:
df2.plot(column='population', legend=True, cmap='Blues', edgecolor='black')
有没有办法使用 geopandas 删除多边形的内线,这样它们就不会出现在最后一个图中?
我的数据可以找到here。
使用轴 (ax1) 可以在公共轴上绘制多个图层。同样使用zorder,来排列图层,较高的值将图层放在较低值的图层之上。
fig, ax1 = plt.subplots(1, 1)
...
# bottom layer (has thick black lines)
df2.plot(column='population', legend=True, cmap='Blues', edgecolor='black', ax=ax1, zorder=5, lw=6)
# top layers (thin boundary lines)
df2.plot(column='population', legend=True, cmap='Blues', ax=ax1, zorder=6)
希望顶层能隐藏几乎所有的底层,但部分外部边界线。
我实际上找到了一个很好的解决方案,它特别适用于我的问题是在应用 geopandas
的 dissolve()
属性 之后创建的。显然,问题是由连续内部单元的边界线中不明显的差异产生的,这些差异阻止了折叠以删除生成的多边形的内部线。
这是通过添加一个小缓冲区来加宽多边形线来解决的,这样那些不明显的差异就会被消除,并且初始多边形的每条内线实际上都会重叠。具体来说,我需要添加:
df2['geometry'] = df2['geometry'].buffer(0.0001)
之前
df2 = df.dissolve(by='zone', aggfunc='sum')
所以现在绘图命令
df2.plot(column='population', legend=True, cmap='Blues', edgecolor='Black')
产量: