python 中的自定义 KML 文件

Custom KML file in python

我正在尝试创建一个自定义 kml 文件,该文件将为航班创建多边形。我有一个 excel 文件,其中标记了任务编号并包含 4 个纬度、经度点。我需要根据 excel 文件中的 status_text 列为这些多边形着色。我正在努力添加适当的纬度和经度点。

import pandas as pd
from simplekml import Kml
import os 

excel_file = '433_ALL.xlsx'

df = pd.read_excel(excel_file, engine='openpyxl')

bdf = df[['Mission', 'Long', 'Lat', 'Status_Text']]

bdf = bdf.set_index('Mission')
print(bdf.index)
uniq = pd.unique(df['Mission'])
poly_kml = Kml()


for val in uniq :
    lng = bdf.loc[bdf['Mission'] == val, ['Long']]
    lat = bdf.loc[bdf['Mission'] == val, ['Lat']]
    print(lng , ' ' , lat)
    poly_kml.newpolygon(name= 'Mission ' + str(val), outerboundaryis= [(lng, lat)])


poly_kml_path= os.path.sep.join(['..', '..', '4.33G', 'polyfile.kml'])

poly_kml.save(poly_kml_path)

os.startfile(poly_kml_path)

excel file snapshot

第一个问题是如何引用DataFrame中的Lat/Long列。 Mission 列是 DataFrame 中的索引,因此必须将其引用为 bdf.index 而不是 bdf['Mission']。下一个问题是多边形 outerboundaryis 参数需要一个元组列表,而不是一个包含 lats 向量和 lon 值向量的列表。

poly_kml = Kml()
for val in uniq:
    lng = bdf.loc[bdf.index == val, 'Long'].tolist() # <----
    lat = bdf.loc[bdf.index == val, 'Lat'].tolist()  # <----
    coords = []
    for coord in zip(lng, lat): # <----
        coords.append(coord)
    poly_kml.newpolygon(name='Mission ' + str(val), outerboundaryis=coords) # <----

此外,如果数据不代表闭合多边形,那么您可能需要创建一个 LineString

poly_kml.newlinestring(name='Mission ' + str(val), coords=coords)

可以找到向生成的 KML 添加样式的示例 here