首页 > 其他分享 >奥维互动地图经纬度导入,再导出ovjsn再转化为kml格式

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

时间:2024-09-20 11:24:14浏览次数:3  
标签:kml zh float zhdj ovjsn Object zhbw split 奥维

一、使用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>

标签:kml,zh,float,zhdj,ovjsn,Object,zhbw,split,奥维
From: https://blog.csdn.net/2401_82434226/article/details/142308187

相关文章

  • 使用 ElementTree 库解析 KML/XML
    我想利用ElementTreepython库解析SimpleData标签中找到的“ID2”名称属性。<Placemark><ExtendedData><SchemaData><SimpleDataname="ID1">123456</SimpleData><SimpleDataname="ID2">......
  • [大疆航线] 系列(2) 基于KML或WPML文件的航点动作设计与自定义航线
    关键词:无人机航线、航点动作、kml航线文件,wpml航线软件作者:ludwig1860日期:2024.7.31.KML的高级使用如果需要精准控制每个航点以及航点处的动作,就需要对KML文件进行调整。怎么调整呢?从DJIPilot地面站软件中自行编辑一个满足自己所有调整需求的航线(仅包含几个航点即可,目......
  • 【小沐学GIS】Google的kml文件的读写(C++、Python)
    文章目录1、简介1.1kml简介1.2功能点1.2.1地标1.2.2地面叠加层1.2.3路径1.2.4多边形2、下载和编译3、C++测试4、Python测试4.1安装库4.2测试14.2测试24.3测试3结语1、简介https://developers.google.cn/kml/documentation/kmzarchives?hl=zh-cn1.1kml......
  • 2024奥维互动地图最新
    随着科技的飞速发展,地图服务已经成为我们日常生活中不可或缺的一部分。在这个信息爆炸的时代,一款优秀的互动地图不仅能为我们提供准确的导航,还能带来丰富的用户体验。而作为业界翘楚的奥维互动地图,在2024年迎来了其图源的全面升级与创新。奥维互动地图介绍:奥维互动地图是一......
  • spark实验七 SparkMLlib
    1.数据导入从文件中导入数据,并转化为DataFrame。2.进行主成分分析(PCA)对6个连续型的数值型变量进行主成分分析。PCA(主成分分析)是通过正交变换把一组相关变量的观测值转化成一组线性无关的变量值,即主成分的一种方法。PCA通过使用主成分把特征向量投影到低维空间,实现对特征......
  • KML 轨迹点文件
     <?xmlversion="1.0"encoding="UTF-8"?><kmlxmlns="http://earth.google.com/kml/2.1"><Document><Placemark><name>65753.000000</name><Style><......
  • 获取乡镇、街道级别地图边界数据 (Kml、GeoJson)
    获取乡镇、街道级别地图边界数据(Kml、GeoJson)安装Bigemap工具http://www.bigemap.com/reader/download/下载BigemapGISOffice全能版,安装到windows电脑下载乡镇数据(获取kml)切换地图点击左上角切换地图选择地方高清中的地图下载数据(Kml)点击右上角选择行政区域......
  • 如何在AutoCAD中快速将矢量数据导出到shp、mdb、kml、geojson、gpx文件?
    在AutoCAD中借助GIS4CAD插件能为您提供便捷的矢量数据导出功能,不论是shp、mdb、kml、geojson还是gpx等矢量文件格式都能轻松导出。方法/步骤下载并安装GIS4CAD插件http://www.geosaas.com/download/gis4cad.exe 下载并安装GIS4CAD插件,安装成功后在AutoCAD菜单栏的最后会......
  • 如何在AutoCAD中加载shp、mdb、kml、geojson、gpx等矢量数据?
    在AutoCAD中加载矢量数据是一个非常有用的功能,它可以帮助用户将多种不同格式的数据集合在一个平台上进行分析和编辑。按照以下步骤可快速在AutoCAD中加载shp、mdb、kml、geojson、gpx等矢量数据。方法/步骤下载并安装GIS4CAD插件http://www.geosaas.com/download/gis4cad.e......
  • 能跟CAD、BIM软件联合使用的地图软件,比奥维地图还方便!
     是的,今天王工推荐的跟之前的地图工具不一样,百度、谷歌、MAPBOX那些称之为地图工具,这个简直就是地图的浏览器!而且它还可以与CAD、BIM软件联合使用!实在是比奥维地图“香......