如何将坐标序列转换为kml

26 篇文章 4 订阅


ps: 初步尝试部分的内容可直接跳过,只是给自己看的笔记,有点乱七八糟

一、预备知识

  • KML(Keyhole Markup Language,Keyhole 标记语言)最初是由Google 旗下的Keyhole 公司开发和维护的一种基于XML 的标记语言,利用XML 语法格式描述地理空间数据(如点、线、面、多边形和模型等),适合网络环境下的地理信息协作与共享。2008 年4月,KML的最新版本2.2 被OGC 宣布为开放地理信息编码标准,并改由 OGC(开放地理信息联盟)维护和发展。
  • KMZ文件是压缩过的KML文件。由于 KMZ 是压缩包,因此,它不仅能包含 KML文本,也能包含其他类型的文件。如果您的地标描述中链接了本地图片等其他文件,建议您在保存地标时,保存类型选 KMZ 而不选 KML,Google Earth 会把您链接的图片等文件复制一份夹 KMZ 压缩包中。这样,您就可以将包含丰富信息的地标文件发给朋友,一起分享了。

二、初步尝试

RTKLIB 中的 rtkpost.exe 小工具可以实现这个功能,但是对文件内容有一定的要求。

它是通过下面第三个按钮KML/GPX来实现的,它会弹出来一个数据转换的对话框,将坐标序列文件路径给它,然后上面选择Google Earth KML,下面可以选择.kmz,也可不选,看自己需求,最后点解Convert就可以实现目标!

下面的文件格式可以:

但是这个就不行

因为已经有 RTKLIB 这个小工具可以实现从一到二了,所以下面有两个解决思路:一是将非RTKLIB格式转化为RTKLIB格式,即实现从零到一;二是直接写个脚本适合所有坐标格式的转换,即实现从零到二。

相较于第一种,笔者更倾向于第二种,因为第二种可以锻炼自己,可以让自己掌握一门新的技艺,但是存在“破产”的风险,并且需要花费太多时间,再加之即使掌握kml文件结构,与目前的我而言并没有太大的作用。所以,最后笔者欲取第一种方案!

首先需要考虑一个问题:RTKLIB进行kml转换,到底支持哪些格式,不支持哪些格式?肯定支持它自己生成的坐标序列的文件格式。下图是RTKLIB的说明手册中给出的坐标序列格式,可以看到它并不是ECEF的XYZ,而是经纬度。

上面的可以正常转换的文件格式如下:

% (x/y/z-ecef=WGS84,Q=1:fix,2:float,3:sbas,4:dgps,5:single,6:ppp,ns=# of satellites)
%   GPST                   x-ecef(m)      y-ecef(m)      z-ecef(m)   Q 
2188 458330.00  -2276750.9819   5006867.6107   3218522.2557   1 
2188 458331.00  -2276744.8864   5006864.1314   3218536.7382   1 
2188 458332.00  -2276737.8396   5006858.9431   3218550.0368   1 
2188 458333.00  -2276730.6307   5006853.9102   3218563.3405   1 
2188 458334.00  -2276723.3473   5006848.9348   3218576.6158   1 
2188 458335.00  -2276715.9734   5006844.1045   3218589.9054   1 
2188 458336.00  -2276708.4630   5006839.4102   3218603.1940   1 

可以看到它就是按照RTKLIB的格式来的,只是坐标是ECEC的xyz。

不支持的文件格式转换出的kml用谷歌地球显示结果为(乱七八糟的绿线):

这是为什么呢?笔者进行了n次尝试,终于找出了几点原因,如下所示:

  • 文件头的注释必须为
%   GPST                   x-ecef(m)      y-ecef(m)      z-ecef(m)   Q 
  • 数据部分前两列必须是GPS周和周内秒,其实如果不在乎时间的话,第二列可以随便给,但最好给成是连续变化的秒,比如1,2,3...

下面给一个可以正常转换的kml用谷歌地球显示的结果:

如果后面使用起来没有那么丝滑,或者想下功夫在 kml 上面,那么再来探索第二种解决方案。

三、小结

关于题目需求,使用RTKLIB中的小工具rtkpost.exe即可完美解决!

首先关于文件格式,文件内容最好按照下面的格式进行组织:

%   GPST                   x-ecef(m)      y-ecef(m)      z-ecef(m)   Q 
2188 458330.00  -2276750.9819   5006867.6107   3218522.2557   1 
2188 458331.00  -2276744.8864   5006864.1314   3218536.7382   1 
2188 458332.00  -2276737.8396   5006858.9431   3218550.0368   1 
2188 458333.00  -2276730.6307   5006853.9102   3218563.3405   1 
2188 458334.00  -2276723.3473   5006848.9348   3218576.6158   1 
2188 458335.00  -2276715.9734   5006844.1045   3218589.9054   1 
2188 458336.00  -2276708.4630   5006839.4102   3218603.1940   1 
  • 其中一定要有上面的第一行,最好直接copy
  • 数据部分,第一列给GPS周,第二列给周内秒,然后一次为XYZ
  • Q是quality质量的简称,可以要也可以不要。

笔者经常使用的文件格式通常时间总是只有1列(周内秒),只需随便在前面加一列GPS周即可,写个小函数(python)如下:

def FLT2rtkpostXYZ(f_flt,f_new):
    try:
        with open(f_flt) as f:
            lines = f.readlines()
    except FileNotFoundError:
        logging.error(f"file not found {f_flt}")
        return
    tag = 0
    with open(f_new, "w") as out:
        for line in lines:
            if line[0] == '%' or line[0] == '#':
                out.write(line)
                continue
            if tag == 0:
                out.write("%   GPST                   x-ecef(m)      y-ecef(m)      z-ecef(m)   Q \n")
                tag = 1
            tmp = "0000 " + line
            out.write(tmp)

然后,小工具使用方法为:

  1. 打开rtkpost.exe,界面如下,点击最下面菜单栏第三个按钮

  2. 按照下图所示步骤进行操作

  3. 在坐标序列文件所在文件夹中就会出现转换出来的kml,然后用谷歌地球打开即可看到

  4. 需注意的地方Output WaypointOutput Track,其中Output Track控制的是点与点之间的连线颜色,Output Waypoint控制的是点的颜色。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪猪头拯救地球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值