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

求助:如何将带十六进制色值的Matlab图CSV数据转KML/KMZ?

解决CSV转KML/KMZ的颜色与坐标映射问题

你的代码主要存在两个核心问题:KML颜色格式不兼容、硬编码列顺序易出错,以下是修正后的完整代码及说明:

import pandas as pd
import simplekml

def create_kml(data):
    kml = simplekml.Kml()

    # 遍历数据时用列名索引,避免列顺序变动导致的错误
    for _, row in data.iterrows():
        latitude = row['latitude']  # 替换为你CSV实际的纬度列名
        longitude = row['longitude']  # 替换为你CSV实际的经度列名
        altitude = row['altitude'] if 'altitude' in data.columns else 0
        rsrp = row['rsrp']  # 替换为你CSV实际的RSRP列名
        color_hex = row['color_hex'].lstrip('#')  # 去掉#号,假设CSV里是#RRGGBB格式

        # 将RGB格式转为KML要求的AABBGGRR格式(Alpha=255即不透明)
        kml_color = f'ff{color_hex[4:6]}{color_hex[2:4]}{color_hex[0:2]}'
        
        point = kml.newpoint(name=f'RSRP: {rsrp}', coords=[(longitude, latitude, altitude)])
        point.style.iconstyle.color = kml_color
        point.style.iconstyle.scale = 1.0

    return kml

def write_kmz(kml, output_file):
    kml.savekmz(output_file)

if __name__ == "__main__":
    csv_file = "C:/Users/djtil/Desktop/EE598/all_data.csv"
    data = pd.read_csv(csv_file)
    output_file = "output.kmz"

    kml = create_kml(data)
    write_kmz(kml, output_file)
    print(f"KMZ file '{output_file}' created successfully.")

关键修改说明:

  • 列名索引替代位置索引:直接按CSV的实际列名取值,避免因CSV列顺序变化导致坐标、属性赋值错误(务必把代码里的列名替换成你CSV中对应的列名)。
  • 颜色格式转换:
    • KML的颜色编码规则是AABBGGRR(Alpha透明度+蓝+绿+红),而Matlab导出的颜色通常是RRGGBB格式,需要反转颜色通道并加上全透明的Alpha值(ff)。
    • 先去掉颜色字符串开头的#,再拆分重组为KML要求的格式。
  • 兼容无海拔数据的情况:如果CSV里没有海拔列,默认设为0,避免报错。

额外验证步骤:

  • 打开生成的KMZ文件,检查点的位置是否与Matlab图形匹配,若位置偏移,确认经度、纬度的顺序是否正确(KML要求(经度, 纬度, 海拔))。
  • 检查颜色是否正确显示,若仍有问题,可直接打印转换后的kml_color值,确认是否符合AABBGGRR的十六进制格式。

内容的提问来源于stack exchange,提问作者Donovan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:53:14