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

一、使用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])/3600zhbw0=int(zhbw.split("北纬")[1].split('°')[0]) + float(zhbw.split("°")[1].split('′')[0])/60 + float(zhbw.split("′")[1])/3600else:zhdj0=int(zhdj.split("东经")[1].split('°')[0]) + float(zhdj.split("°")[1].split('′')[0])/60zhbw0=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])/3600zhbw0=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 StringDim objShell As ObjectDim pythonExePath As StringDim scriptPath As StringDim 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.ReadAllzh = 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.xdnf.cn/news/142473.html

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

相关文章

【例题】lanqiao3412 最小化战斗力差距

样例输入 3 1 2 3样例输出 1说明 样例中&#xff0c;当 a[1,3]&#xff0c;b[2]&#xff0c;此时战斗力差距为 1&#xff0c;无法得到比 1 更小的安排方式。 解题思路 目标是|max(a)-min(b)|最小&#xff0c;希望a里的最大值和b里的最小值能差距最小。 转化成&#xff1a;…

2024/9/16 英语每日一段

Stark argues that, in their gummies, at least,“The total sugar in a serving is less than in half a cherry.”Of course, cherries also provide fibre, vitamin C, and antioxidants--and 14 of them would count as one of your five-a-day. Artificial sweeteners to…

Linux操作系统文件权限管理

Linux操作系统下文件的权限分为当前用户权限、用户组权限和其他用户权限&#xff0c;然后每一类用户或组又分为读权限(r)、写权限(w)和可执行权限(x)。 如图1&#xff0c;打开任一目录&#xff0c;右键单击文件&#xff0c;在弹出菜单选择“属性”&#xff0c;在弹出的属性选项…

2022高教社杯全国大学生数学建模竞赛C题 问题一(1) Python代码演示

目录 问题 11.1 对这些玻璃文物的表面风化与其玻璃类型、纹饰和颜色的关系进行分析数据探索 -- 单个分类变量的绘图树形图条形图扇形图雷达图Cramer’s V 相关分析统计检验列联表分析卡方检验Fisher检验绘图堆积条形图分组条形图分类模型Logistic回归随机森林import matplotlib…

1.3 计算机网络的分类

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言一、按分布范围分类二、按传输技术分类三、按拓扑结构分类四、按使用者分类五、按传输介质分类 前言 计算机网络根据不同的标准可以被分为多种类型&#xff0c;本章从分布…

C语言刷题日记(附详解)(5)

一、选填部分 第一题: 下面代码在64位系统下的输出为( ) void print_array(int arr[]) {int n sizeof(arr) / sizeof(arr[0]);for (int i 0; i < n; i)printf("%d", arr[i]); } int main() {int arr[] { 1,2,3,4,5 };print_array(arr);return 0; } A . 1…

HarmonyOS使用LocationButton获取地理位置

LocationButton LocationKit getAddressesFromLocation方法 步骤&#xff1a; 整合 LocationButton并获取经纬度通过 LocationKit 将经纬度转为地址信息将地址信息渲染到页面上处理异常情况&#xff08;闪退&#xff09; LocationButton({ icon: LocationIconStyle.LINE…

robomimic基础教程(一)——基本概念

robosuite和robomimic都是由ARISE Initiative开发的开源工具&#xff0c;旨在推进机器人学习和机器人操作领域的研究。 一、基本概念 robomimic是一个用于机器人示范学习的框架。它提供了在机器人操作领域收集的大量示范数据集&#xff0c;以及用于从这些数据集中学习的离线学…

初始爬虫6

数据提取 数据提取总结 响应分类 结构化 json数据&#xff08;高频出现&#xff09; json模块 jsonpath模块 xml数据&#xff08;低频出现&#xff09; re模块 …

基于Python DoIPClient库的DoIP上位机开发手顺

代码 address, announcement DoIPClient.await_vehicle_announcement()logical_address announcement.logical_addressip, port addressprint(ip, port, logical_address) 效果 代码 address, announcement DoIPClient.get_entity(ecu_ip_addresssIp, protocol_version3…

重生归来之挖掘stm32底层知识(1)——寄存器

概念理解 要使用stm32首先要知道什么是引脚和寄存器。 如下图所示&#xff0c;芯片通过这些金属丝与电路板连接&#xff0c;这些金属丝叫做引脚。一般做软件开发是不需要了解芯片是怎么焊的&#xff0c;只要会使用就行。我们平常通过编程来控制这些引脚的输入和输出&#xff0c…

CefSharp_Vue交互(Element UI)_WinFormWeb应用(3)---通过页面锁屏和关机(含示例代码)

一、预览 实现功能:通过vue标题栏按钮锁屏和关机 1.1 预览 1.2 代码 锁屏代码csharp LockWorkStation() 关机代码chsharp 注意vue代码参数和此参数一致(0/1/2) 方法ExitWindowsEx()

Docker部署ddns-go教程(包含完整的配置过程)

本章教程教程,主要介绍如何用Docker部署ddns-go。 一、拉取容器 docker pull jeessy/ddns-go:v6.7.0二、运行容器 docker run -d \--name ddns-go \--restart unless-stopped \

鲲鹏云-docker安装mysql8.0-并设置参数(--lower-case-table-names=1)

前言&#xff1a; 由于鲲鹏云是arm架构&#xff0c;公司现有的镜像就用不了&#xff0c;为了搭建个测试环境&#xff0c;记录一下搭建过程 注意在mysql8.0里面lower-case-table-names必须在第一次安装时设置。 ①镜像的获取 鲲鹏镜像pull下来是不能跑的&#xff0c;会提示内…

Pycharm打印区打印数据不全问题

问题&#xff1a;pycharm底下的打印区打印一个比较大的数据&#xff0c;发现数据不全&#xff0c;只显示一板 解析&#xff1a;可能是打印区域的缓存不足导致的 解决办法&#xff1a; 找到pycharm的idea.properties文件&#xff0c;具体路径以下显示&#xff0c;前面路径看个人…

【十一,是忆】往事如风,回忆如诗,且行且歌

【十一&#xff0c;是忆】往事如风&#xff0c;回忆如诗&#xff0c;且行且歌 十一天的入职培训之所见、所得、所思、所感 820 启程 时隔两月&#xff0c;回到了熟悉的北京&#xff0c;我的脚又一次踏在这片土地上&#xff0c;遗憾的是周转的北京西站&#xff0c;未曾停留多久…

C语言中数据类型

一、C 语言中数据类型 基本数据类型&#xff1a; 整型&#xff08;int&#xff09;&#xff1a;用于存储整数&#xff0c;如&#xff1a;1、2、3等。字符型&#xff08;char&#xff09;&#xff1a;用于存储单个字符&#xff0c;如&#xff1a;‘a’、‘b’、c’等。浮点型&a…

Docker安装SVN,搭建自己的本地版本仓库

一、拉取镜像并运行容器 docker pull garethflowers/svn-server docker run --restart always --name svn -d -v /root/dockers/svn:/var/opt/svn -p 3690:3690 garethflowers/svn-server 1、解析 /root/dockers/svn为宿主机的文件目录&#xff0c;/var/opt/svn为容器内的文件…

线程池是啥有啥用,怎么用,如何自己实现一个

目录 一、线程池是啥&#xff0c;有啥用 二、线程池怎么用 1.构造方法 2.如何使用Java的线程池 三、简单实现一个线程池 假设我是一个&#xff08;好看有才华&#xff09; 的妹子&#xff0c;那么我就会有很多追求者&#xff0c;这些也叫备胎们&#xff0c;我们若把他…

应用性能优化实践(一)ArkTS高性能编程

在开发HarmonyOS应用时&#xff0c;优化应用性能是至关重要的。通过ArkTS高性能编程、减少丢帧卡顿、提升应用启动和响应速度&#xff0c;可以有效提升用户体验。 一、ArkTS高性能编程 ArkTS是基于TypeScript涉及的&#xff0c;但出于编码的稳定性和性能考虑&#xff0c;一些T…