Python生成自定义飞行KML多边形文件 经纬度点读取导入问题
修正方案
问题根源
- 你已将
bdf的索引设置为Mission列,后续筛选时调用bdf['Mission']会报错,该列已转为索引不存在于字段列表中 - 提取的
lng、lat是二维DataFrame对象,而simplekml的outerboundaryis参数要求传入(经度,纬度)元组组成的一维列表,且多边形需要首尾点坐标一致实现闭合 - 缺少按
Status_Text列取值匹配多边形颜色的逻辑
修正后代码
import pandas as pd from simplekml import Kml, Color import os # 自定义状态和颜色的映射规则,KML颜色格式为ABGR(透明度、蓝、绿、红),可按需调整 STATUS_COLOR_MAP = { "已完成": Color.green, "进行中": Color.yellow, "未开始": Color.red, # 补充你自己的Status_Text取值和对应颜色 } excel_file = '433_ALL.xlsx' df = pd.read_excel(excel_file, engine='openpyxl') # 按Mission列分组,遍历每个任务的所有点位 poly_kml = Kml() for mission_id, group in df.groupby('Mission'): # 构造坐标列表:(经度, 纬度)格式 coords = list(zip(group['Long'], group['Lat'])) # 多边形需要闭合,补充第一个点到末尾 coords.append(coords[0]) # 获取当前任务的状态,取第一个即可(同一个任务状态一致) status = group['Status_Text'].iloc[0] # 创建多边形 pol = poly_kml.newpolygon(name= f'Mission {mission_id}', outerboundaryis=coords) # 设置多边形填充颜色,优先取映射颜色,默认白色 pol.style.polystyle.color = STATUS_COLOR_MAP.get(status, Color.white) # 可选设置多边形边框颜色 pol.style.linestyle.color = Color.black pol.style.linestyle.width = 2 poly_kml_path= os.path.join('..', '..', '4.33G', 'polyfile.kml') poly_kml.save(poly_kml_path) os.startfile(poly_kml_path)
调整说明
- 提前根据你的Excel中
Status_Text的实际取值,修改STATUS_COLOR_MAP里的映射关系,颜色可使用simplekml.Color内置常量,也可以直接传入8位ABGR格式的十六进制值 - 代码改用
groupby直接按任务编号分组提取点位,逻辑更简洁,避免索引操作错误 - 自动补充首尾相同坐标实现多边形闭合,符合KML多边形的格式要求
内容的提问来源于stack exchange,提问作者Saif Faisal
相关产品推荐
相关产品推荐

