奥维互动地图经纬度导入,再导出ovjsn再转化为kml格式

news2024/11/14 14:02:05

一、使用python将excel表中的经纬度换算成小数格式。

在文件上看到的经纬度是东经 116°5′27.78″,北纬 23°10′57.18″,要转化为116.09105,23.182550000000003 格式。如果要用vba编写函数,可能比较麻烦,为此我使用python来转化

import sys
 
# 获取命令行参数
arguments = sys.argv
zh = arguments[1]

zh= zh.replace(",", ",")
zhdj=zh.split(',')[0]
zhbw=zh.split(',')[1]

if '″' not in zh:
    if len(zhdj.split("′")[1]) > 0:
        zhdj0=int(zhdj.split("东经")[1].split('°')[0]) + float(zhdj.split("°")[1].split('′')[0])/60 + float(zhdj.split("′")[1])/3600
        zhbw0=int(zhbw.split("北纬")[1].split('°')[0]) + float(zhbw.split("°")[1].split('′')[0])/60 + float(zhbw.split("′")[1])/3600
    else:
        zhdj0=int(zhdj.split("东经")[1].split('°')[0]) + float(zhdj.split("°")[1].split('′')[0])/60
        zhbw0=int(zhbw.split("北纬")[1].split('°')[0]) + float(zhbw.split("°")[1].split('′')[0])/60       
else:
    zhdj0=int(zhdj.split("东经")[1].split('°')[0]) + float(zhdj.split("°")[1].split('′')[0])/60 + float(zhdj.split("′")[1].split('″')[0])/3600
    zhbw0=int(zhbw.split("北纬")[1].split('°')[0]) + float(zhbw.split("°")[1].split('′')[0])/60 + float(zhbw.split("′")[1].split('″')[0])/3600
print(str(zhdj0) + "," + str(zhbw0))

上面为exzb.py源程序,用于vba传递参数并返回结果。

单元格的公式:=zh(SUBSTITUTE(SUBSTITUTE(R98,CHAR(34),"")," ",""))

用于去除字符串中的空格。

打开vba编制器:

Function zh(param1 As String) As String
    Dim objShell As Object
    Dim pythonExePath As String
    Dim scriptPath As String
    Dim command As String
    
    ' 创建WScript.Shell对象
    Set objShell = VBA.CreateObject("WScript.Shell")
    
    ' 指定Python解释器的路径
    pythonExePath = "C:/Users/YBK/.conda/envs/python38/python.exe"
    
    ' 指定Python脚本的路径
    scriptPath = "E:\.spyder-py3\exzb.py"
    
    ' 构建命令
    command = pythonExePath & " " & scriptPath & " " & param1 & " "
    
    ' 运行命令并等待完成
    result = objShell.Exec(command).StdOut.ReadAll
    zh = result
End Function

其他经纬度可以用公式转换。

导出文件内容:

{"Version":"V9.7.1","Type":1,"ObjItems":[
        {"Type":7,"ObjID":2130112827,"ParentID":2024832056,"tmModify":"2024/09/16 22:47:55","Object":
            {"Name":"测试的点","Type":7,"Comment":"","ObjectDetail":
                {"Lat":23.18255000,"Lng":116.09105000,"Gcj02":0,"Altitude":0,"EditMode":0,"OverlayIdx":0,"TxtType":1,"ShowLevel":1,"ShowLevelMax":0,"TimeUncertain":0,"SignEvent":
                    {"Radius":0,"ShowClr":0
                    },"SignPic":
                    {"SignPic":1,"AlignFlag":0,"SignClr":0,"PicScale":0,"SignPicNum":0,"SignPicNumOffx":0,"SignPicNumOffy":0,"SignPicNumClr":0,"SignPicNumSize":0
                    },"TxtShowSta":0,"TxtShowStaSet":0
            }
        }
        }]
}

使用python转化成kml格式:(自己编写的)

import json
from simplekml import Kml

# 读取.ovjsn文件
with open(r'C:\Users\YBK\Documents\测试的点.ovjsn', 'r' ,encoding='utf-8-sig') as f:
    ovjsn_data = json.load(f)
objitems = ovjsn_data['ObjItems']
zbdict = objitems[0]
objectdetail = zbdict['Object']
objname = objectdetail['Name']
objdetail = objectdetail['ObjectDetail']
if 'ObjChildren' in objdetail:
    objchildren = objdetail['ObjChildren']
else:
    objchildren = objitems
# 创建KML对象
kml = Kml()
for obj in objchildren:
    print(obj['Object']['Name'])
    print(obj['Object']['ObjectDetail']['Lng'],obj['Object']['ObjectDetail']['Lat'])
    # 创建一个地点标记
    place = kml.newpoint(name=obj['Object']['Name'], coords=[(obj['Object']['ObjectDetail']['Lng'],obj['Object']['ObjectDetail']['Lat'],0)])
    place.description = objname  # 可以添加描述
    # 将标记添加到KML文件中
 
# 将KML文件保存到文件
kml.save(fr"C:\Users\YBK\Documents\{objname}.kml")

生成的kml:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
    <Document id="9">
        <Placemark id="11">
            <name>测试的点</name>
            <description>测试的点</description>
            <Point id="10">
                <coordinates>116.09105,23.18255,0</coordinates>
            </Point>
        </Placemark>
    </Document>
</kml>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2142115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.提升客户服务体验:ChatGPT在客服中的应用(4/10)

本文大纲旨在指导撰写一篇全面探讨ChatGPT如何通过优化客户服务流程、提供实际应用案例和用户反馈&#xff0c;以提升客户服务体验的深入博客文章。 引言 在当今竞争激烈的商业环境中&#xff0c;客户服务已成为企业成功的关键因素。优质的客户服务不仅能够增强客户满意度和忠…

编程辅助工具下一个热门应用场景是什么?(二)

&#x1f381;&#x1f449;点击进入文心快码 Baidu Comate 官网&#xff0c;体验智能编码之旅&#xff0c;还有超多福利&#xff01;&#x1f381; 本系列视频来自百度工程效能部的前端研发经理杨经纬&#xff0c;她在由开源中国主办的“AI编程革新研发效能”OSC源创会杭州站1…

DFS:深搜+回溯+剪枝实战解决OJ问题

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 排列、子集问题 1.1 全排列I 1.2 子集I 1.3 找出所有子集的异或总和 1.4 全排列II 1.5 字母大小写全排列 1.6 优美的排列 二 组合问题 2.1 电话号码的数字组合 …

Qt | AI+Qt6.5.3+ubuntu20.04+FFmpeg实现音视频编解码(播放一个中秋节快乐视频为例)

点击上方"蓝字"关注我们 01、下载 >>> FFmpeg下载官网:https://ffmpeg.org// 本次选择下载linux版本的 环境准备Qt6.5.3ubuntu+虚拟机FFmpeg

解决Visual Studio中OpenCV链接错误:LNK2019无法解析的外部符号

创作不易&#xff0c;您的打赏、关注、点赞、收藏和转发是我坚持下去的动力&#xff01; 原因分析 错误提示 LNK2019: 无法解析的外部符号 表示在编译过程中&#xff0c;链接器找不到 OpenCV 的相关函数实现。这通常是由于以下原因引起的&#xff1a; 没有正确链接 OpenCV 库&…

[SaaS] FacyTech

Sora还没开源,但这家国产AIGC视频公司已经靠还原现实赚钱了我们找到了朱啸虎说“很酷”的公司https://mp.weixin.qq.com/s/rm_dylLhf4FP01c_hdU3Lw1.tryon 这图ootdiffusion+comfyui工作流吗?lora+controlnet openpose+ipa

数据结构—栈

栈 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&#xff1a;栈…

兰花种类识别系统源码分享

兰花种类识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

打印图案,输入一个整数表示输出的行数,也表示组成x的长度

//打印图案&#xff0c;输入一个整数表示输出的行数&#xff0c;也表示组成x的长度 //打印图案&#xff0c;输入一个整数表示输出的行数&#xff0c;也表示组成x的长度 //5 //*___* //_*_*_ //__* //-*-*- //*---*- #include<stdio.h> int main() {int i 3;int j 0,…

anaconda下载安装教程

anaconda是python的包管理器&#xff0c;通过它来安装python库比较方便快捷&#xff0c;可以使用conda或者pip命令进行安装。 微智启软件工作室最常用的是Anaconda3-2021.11-Windows-x86_64.exe这一个版本&#xff0c;当然如果你使用其他版本也可以&#xff0c;其他版本特别是最…

激光雷达点云处理—学习随记

一、激光雷达基本概念 激光雷达&#xff08;Light Detection and Ranging&#xff0c;LiDAR&#xff09;&#xff0c;是一种发射激光&#xff08;可见光-近红外&#xff09;于被瞄准物体表面并记录反射光被信号接收器接收到的时间以测定距离的方法。激光雷达通过以下公式确定物…

Redis学习以及SpringBoot集成使用Redis

目录 一、Redis概述 二、Linux下使用Docker安装Redis 三、SpringBoot集成使用Redis 3.1 添加redis依赖 3.2 配置连接redis 3.3 实现序列化 3.4 注入RedisTemplate 3.5 测试 四、Redis数据结构 一、Redis概述 什么是redis&#xff1f; redis 是一个高性能的&#xf…

电子电气架构---智能汽车应该是怎么样的架构?

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看一眼都是你的不…

rust GTK4 窗口创建与 wayland Subsurface (vulkan 渲染窗口初始化 (Linux) 上篇)

rust 有封装好的 GTK4 库 (gtk4-rs), 有封装好的 wayland 库 (wayland-rs), 有封装好的 vulkan 库 (vulkano), 单独使用其中的每一个, 都很简单. 但是, 把这些一起使用, 崩 !! 大坑出现了 ! 这个问题的难度超出了事先的预计 (所以原计划一篇文章分成了两篇), 而类似的事情在编…

【Elasticsearch系列九】控制台实战

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

谷粒商城のElasticsearch

文章目录 前言一、前置知识1、Elasticsearch 的结构2、倒排索引 (Inverted Index)2.1、 索引阶段2.2、查询阶段 二、环境准备1、安装Es2、安装Kibana3、安装 ik 分词器 三、项目整合1、引入依赖2、整合业务2.1、创建索引、文档、构建查询语句2.2、整合业务代码 后记 前言 本篇介…

【C/C++】程序的构建(编译)过程概述

&#x1f984;个人主页:小米里的大麦-CSDN博客 &#x1f38f;所属专栏:C_小米里的大麦的博客-CSDN博客 &#x1f381;代码托管:C: 探索C编程精髓&#xff0c;打造高效代码仓库 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、前言 二、预处理&#xff08;Preprocessi…

mac安装swoole过程

1.很重要的是得根据自己环境的php版本来选择swoole版本&#xff01;否则都是做无用功。 Swoole 文档 2.通常pecl install swoole是安装最新版本的&#xff0c;当然安装的方式很多种&#xff0c;这里选择编译安装&#xff0c;因为可以选择不同的swoole版本进行安装&#xff0c;…

鸿蒙开发入门day19-使用NDK接口构建UI(二)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;还请三连支持一波哇ヾ(&#xff20;^∇^&#xff20;)ノ&#xff09; 目录 监听组件事件 绑定手势事件 单一手势 组合手势 顺序识别 互斥…

异常知识总结

就是报错&#xff0c;就是不处理一下&#xff0c;程序运行到这里就直接终止了&#xff0c;输出报错信息。 但是我们用异常处理&#xff0c;能让他程序不停止不报错。 比如正常1/0程序肯定报错&#xff0c;用异常处理就不报错了。 ![在这里插入图片描述](https://i-blog.csdnim…