如何在gpd.GeoDataFrame中绘制LineString?(KML文件场景)
解决GeoPandas中绘制KML里LineString的问题
你的问题核心是混淆了不同几何类型的绘制方法:exterior和boundary是Polygon类的专属属性,LineString本身就是线对象,不需要调用这些属性,直接调用plot()即可。
正确实现步骤
- 读取KML文件后,GeoDataFrame会包含多种几何类型(Polygon和LineString),先通过
geometry.type筛选出对应类型的子集; - 分别对Polygon和LineString进行绘制:Polygon可选择带填充绘制或只画边界,LineString直接调用
plot()就能生成完整线条。
完整代码示例
import geopandas as gpd import matplotlib.pyplot as plt # 读取KML文件 gdf = gpd.read_file('myKmkFile.kml', driver='KML') # 创建绘图轴 fig, axs = plt.subplots(figsize=(10, 8)) # 筛选并绘制Polygon(带填充和边界) polygons = gdf[gdf.geometry.type == 'Polygon'] polygons.plot(ax=axs, facecolor='lightblue', edgecolor='darkblue', label='多边形', zorder=2) # 筛选并绘制LineString(直接绘制线条) lines = gdf[gdf.geometry.type == 'LineString'] lines.plot(ax=axs, color='red', linewidth=2, label='线条', zorder=3) # 添加图例和标题 axs.legend() axs.set_title('KML中的多边形与线条') plt.show()
原代码无效的原因
myPolys.exterior:仅Polygon类型的几何拥有exterior属性,LineString没有该属性,混合类型的GeoDataFrame调用此属性会直接忽略LineString或报错;polys.boundary:Polygon的boundary是其外围线条,但LineString的boundary是两个端点,用此方法绘制LineString只会显示端点而非整条线。
扩展处理提示
如果KML中包含MultiPolygon或MultiLineString这类复合几何类型,可以用字符串匹配来筛选:
# 筛选所有多边形类几何(含Polygon、MultiPolygon) all_polygons = gdf[gdf.geometry.type.str.contains('Polygon')] # 筛选所有线条类几何(含LineString、MultiLineString) all_lines = gdf[gdf.geometry.type.str.contains('LineString')]
内容的提问来源于stack exchange,提问作者mikezang
相关产品推荐
相关产品推荐

