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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:42:00