如何填充使用 geopandas 溶解地理数据框时创建的多面体中的孔?
Posted
技术标签:
【中文标题】如何填充使用 geopandas 溶解地理数据框时创建的多面体中的孔?【英文标题】:How to fill holes in Multi-polygons created when dissolving geodataframe with geopandas? 【发布时间】:2020-11-28 17:06:39 【问题描述】:我的目标是绘制 MSOA 集群的边界(英国的连续地理单位),为此我从 here 下载了 MSOA 边界的 shapefile。然后我添加一列集群标签并使用 geopandas 解散。
df.dissolve(by='label', aggfunc='sum')
当我使用 Folium 进行绘图时,如附图所示,有多个内孔。如何删除这些?
#creates map
m = folium.Map([54.5,-3],zoom_start=6.8,tiles='cartodbpositron')
#makes boundaries plot
Boundaries = folium.GeoJson(
df,
name='Boundaries',
style_function = lambda x:
'color': 'black',
'weight': 3,
'fillOpacity': 0
).add_to(m)
m
【问题讨论】:
【参考方案1】:如果有人遇到同样的问题,我找到了一个可以上传、简化和导出形状文件的网站,名为 mapshaper,这成功地将我的边界简化为所需的形式。
【讨论】:
【参考方案2】:这有望帮助您仅使用 geopandas 来组织您的多边形。您可以使用以下函数覆盖几何图形。额外的处理用于保留或减少 MultiPolygons。我想 MapShaper 也会发生类似的事情,但这样你就不需要做额外的处理了。
from shapely.geometry import MultiPolygon, Polygon
def remove_interiors(poly):
"""
Close polygon holes by limitation to the exterior ring.
Arguments
---------
poly: shapely.geometry.Polygon
Input shapely Polygon
Returns
---------
Polygon without any interior holes
"""
if poly.interiors:
return Polygon(list(poly.exterior.coords))
else:
return poly
def pop_largest(gs):
"""
Pop the largest polygon off of a GeoSeries
Arguments
---------
gs: geopandas.GeoSeries
Geoseries of Polygon or MultiPolygon objects
Returns
---------
Largest Polygon in a Geoseries
"""
geoms = [g.area for g in gs]
return geoms.pop(geoms.index(max(geoms)))
def close_holes(geom):
"""
Remove holes in a polygon geometry
Arguments
---------
gseries: geopandas.GeoSeries
Geoseries of Polygon or MultiPolygon objects
Returns
---------
Largest Polygon in a Geoseries
"""
if isinstance(geom, MultiPolygon):
ser = gpd.GeoSeries([remove_interiors(g) for g in geom])
big = pop_largest(ser)
outers = ser.loc[~ser.within(big)].tolist()
if outers:
return MultiPolygon([big] + outers)
return Polygon(big)
if isinstance(geom, Polygon):
return remove_interiors(geom)
df.geometry = df.geometry.apply(lambda p: close_holes(p))
【讨论】:
以上是关于如何填充使用 geopandas 溶解地理数据框时创建的多面体中的孔?的主要内容,如果未能解决你的问题,请参考以下文章