求助:如何将带十六进制色值的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要求的格式。
- KML的颜色编码规则是
- 兼容无海拔数据的情况:如果CSV里没有海拔列,默认设为0,避免报错。
额外验证步骤:
- 打开生成的KMZ文件,检查点的位置是否与Matlab图形匹配,若位置偏移,确认经度、纬度的顺序是否正确(KML要求
(经度, 纬度, 海拔))。 - 检查颜色是否正确显示,若仍有问题,可直接打印转换后的
kml_color值,确认是否符合AABBGGRR的十六进制格式。
内容的提问来源于stack exchange,提问作者Donovan
相关产品推荐
相关产品推荐

