You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在gpd.GeoDataFrame中绘制LineString?(KML文件场景)

解决GeoPandas中绘制KML里LineString的问题

你的问题核心是混淆了不同几何类型的绘制方法:exterior和boundary是Polygon类的专属属性,LineString本身就是线对象,不需要调用这些属性,直接调用plot()即可。

正确实现步骤

  1. 读取KML文件后,GeoDataFrame会包含多种几何类型(Polygon和LineString),先通过geometry.type筛选出对应类型的子集;
  2. 分别对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 01:50:56