python拖放ovkml文件修改为适合大疆航线导入的kml文件

用了多个软件才将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:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值