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。
我正在尝试创建一个自定义 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。