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

如何在Python中为Shapefile中的多边形绘制其索引序号

如何在Python中为Shapefile中的多边形绘制其索引序号

嘿,我来帮你搞定在多边形里标注索引的问题!首先提个小细节,你原来的代码里有个笔误:gdf= = gpd.read_file应该改成gdf = gpd.read_file哦。

其实你完全不用把索引导出到CSV再用Basemap处理,直接用GeoPandas配合Matplotlib就能轻松在每个多边形内部标注对应的索引序号。下面是具体的解决方案:

核心思路

  1. 完整读取Shapefile数据,保留原有的索引和所有属性;
  2. 计算每个多边形的内部代表点(这个点会确保落在多边形内部,比中心更靠谱);
  3. 先绘制多边形的边界,再遍历每个多边形,把索引标注在代表点的位置。

完整代码示例

import geopandas as gpd
import matplotlib.pyplot as plt

# 读取Shapefile,保留所有原始数据(包括默认索引)
gdf = gpd.read_file("path/to/shapefile")

# 为每个多边形计算内部代表点,存为新列
gdf['rep_point'] = gdf['geometry'].representative_point()

# 创建绘图画布
fig, ax = plt.subplots(figsize=(5, 5))

# 绘制多边形的红色边框(无填充色)
gdf.plot(ax=ax, color='none', edgecolor='r', linewidths=1.8)

# 遍历每个多边形,标注索引
for idx, row in gdf.iterrows():
    # 获取代表点的坐标
    x, y = row['rep_point'].x, row['rep_point'].y
    # 在坐标位置标注索引,可调整字体大小、对齐方式
    plt.text(x, y, str(idx), fontsize=10, ha='center', va='center')

plt.show()

对你问题的解答

  • 关于获取索引:你之前写的gdf=shp['index']是不对的,GeoDataFrame的索引可以直接通过gdf.index获取,或者像上面代码里那样用iterrows()遍历的时候直接拿到每个行的索引idx,根本不需要导出到CSV。
  • 关于直接绘制索引:当然可以直接在Python里完成!上面的代码就是直接把索引标注在多边形内部,不需要额外工具。

可选优化小技巧

  • 如果你的Shapefile里有自己定义的编号列(不是默认的整数索引),只需要把str(idx)换成str(row['你的编号列名'])就行;
  • 如果觉得代表点位置不合适,也可以用多边形的中心row['geometry'].centroid,但要注意:有些特殊形状的多边形(比如环形),中心可能落在多边形外面,这时候representative_point()会更稳妥。

备注:内容来源于stack exchange,提问作者Zilore Mumba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:04:49