如何在Python中绘制带边编号的经纬度多边形并标注字母
在Python中绘制带标注的农林地块多边形
可以用matplotlib库实现需求——绘制多个多边形,为每个多边形标注字母,同时给每条边标注数字。以下是完整实现方案:
步骤说明
- 导入
matplotlib.pyplot库用于绘图 - 定义多边形坐标数据
- 遍历多边形,绘制轮廓并添加字母标注
- 计算每条边的中点,添加边的数字标注
- 调整图表样式并展示
完整代码
import matplotlib.pyplot as plt # 定义多边形坐标 polygon1_coords = [ (11.946898956, -86.109286248), (11.947196373, -86.109159886), (11.947092456, -86.108962101), (11.946897164, -86.10886504), (11.946898956, -86.109286248 ) ] polygon2_coords = [ (11.946895372, -86.110055411), (11.94718204, -86.110046254), (11.947194581, -86.109172705), (11.946900747, -86.109313718), (11.946895372, -86.110055411) ] # 打包多边形与对应标注字母 polygons = [ (polygon1_coords, 'A'), (polygon2_coords, 'B') ] # 创建绘图对象 fig, ax = plt.subplots(figsize=(8, 6)) # 批量处理每个多边形 for poly_coords, label in polygons: # 拆分经纬度坐标 lon = [coord[0] for coord in poly_coords] lat = [coord[1] for coord in poly_coords] # 绘制多边形轮廓 ax.plot(lon, lat, linewidth=2, label=f'地块{label}') # 计算多边形中心坐标,添加字母标注 center_lon = sum(lon)/len(lon) center_lat = sum(lat)/len(lat) ax.text(center_lon, center_lat, label, fontsize=14, fontweight='bold', ha='center', va='center') # 遍历每条边,添加数字标注 for i in range(len(poly_coords)-1): start = poly_coords[i] end = poly_coords[i+1] # 计算边的中点 mid_lon = (start[0] + end[0])/2 mid_lat = (start[1] + end[1])/2 # 放置数字标注 ax.text(mid_lon, mid_lat, str(i+1), fontsize=12, color='red', ha='center', va='center') # 设置图表属性 ax.set_xlabel('经度') ax.set_ylabel('纬度') ax.set_title('农林地块多边形标注图') ax.legend() # 自动调整布局,避免元素重叠 plt.tight_layout() # 展示图像 plt.show()
关键细节说明
- 多边形中心标注:通过计算所有坐标的均值得到近似中心位置,确保字母标注在多边形内部
- 边的标注:遍历多边形的端点对,计算每条边的中点后放置数字,用红色字体区分于轮廓线
- 批量处理逻辑:将多边形与标注字母打包,减少重复代码,方便后续扩展更多地块
内容的提问来源于stack exchange,提问作者Ernesto Ruiz
相关产品推荐
相关产品推荐

