用了多个软件才将cad文件转化为kml(Autocad转为dxf,将dxf导入奥维地图,用奥维地图定坐标比较方便,奥维地图导出ovkml文件,修改ovkml文件为kml文件,导入Bigemap大地图软件,大地图软件导出适合大疆的kml文件),导出后传到大疆app上,发现kmz文件格式不对相关提示。后来上网搜索一下发现:谷歌地球生成的kml无法导入大疆遥控器中的解决办法_大疆导入kml识别不了-优快云博客,关注他的公众号,下载他的模板kml。
PS:今天发现大地图Bigemap这么垃圾的软件居然导出kml还有试用,看了一下导出ovkml的坐标与它导出的坐标没有什么区别,果断绕过Bigemap。对下面主程序有所修改。
<?xml version="1.0" encoding="UTF-8"?>
<kml>
<Document>
<Placemark>
<name>公众号:向上的小张</name>
<visibility>1</visibility>
<Polygon>
<altitudeMode>clampToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates>
替换坐标
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Document>
</kml>
下载后,放在运行py程序的目录下:我的是E:\.spyder-py3(如果不能用,那么就关注他的公众号)
我采用的是tkinter,可以拖拉文件到窗口,比较方便,可以同时拖放多个文件,提高处理速度。
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 14 08:46:21 2025
@author: YBK
"""
import tkinter as tk
import windnd
from tkinter.messagebox import showinfo
import os
import xml.etree.ElementTree as ET
def dragged_files(files):
xmlurls = []
fileurl = ''
if len(files) == 1:
fileurl = files[0].decode('gbk')
if os.path.splitext(fileurl)[1] != '.ovkml':
showinfo("提示","请拖放ovkml文件!")
else:
xmlurls.append(fileurl)
else:
for fileurl0 in files:
fileurl = fileurl0.decode('gbk')
if os.path.splitext(fileurl)[1] != '.ovkml':
showinfo("提示","请拖放ovkml文件!")
else:
xmlurls.append(fileurl)
for xmlurl in xmlurls:
tree = ET.parse(xmlurl)
root = tree.getroot()
# 定义命名空间字典(需根据实际XML修改)
namespaces = {'ns': 'http://www.opengis.net/kml/2.2'}
node = root.findall('.//ns:name', namespaces)
# print(node)
mc = node[0].text #名称
node = root.findall('.//ns:coordinates', namespaces)
data = node[0].text #数据
mbtree = ET.parse('kml模板.kml')
outroot = mbtree.getroot()
nodes = outroot.findall('.//name')
for node in nodes:
node.text = mc
nodes = outroot.findall('.//coordinates')
for node in nodes:
node.text = data
mbtree.write(xmlurl.replace('.ovkml','_dj.kml'), encoding='utf-8', xml_declaration=True)
if __name__ == '__main__':
rootWindow = tk.Tk()
rootWindow.title("拖放修正ovkml为大疆kml")
rootWindow.geometry("300x120")
windnd.hook_dropfiles(rootWindow , func=dragged_files)
rootWindow.mainloop()
ps:
这里写导出大疆格式,但不能用。
程序界面:
拖放后生成文件在原拖放文件的位置,加_dj: