如何将坐标序列转换为kml
文章目录
- 一、预备知识
- 二、初步尝试
- 三、小结
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)
然后,小工具使用方法为:
-
打开
rtkpost.exe
,界面如下,点击最下面菜单栏第三个按钮
-
按照下图所示步骤进行操作
-
在坐标序列文件所在文件夹中就会出现转换出来的kml,然后用谷歌地球打开即可看到
-
需注意的地方
Output Waypoint
和Output Track
,其中Output Track
控制的是点与点之间的连线颜色,Output Waypoint
控制的是点的颜色。
m0_53189984: 请问bc.XYZ2ENU是自定义的一个函数吗,我运行会报错,这个函数在哪里找得到呢
zi紫夕云: 最后一个搜索空间怎么画的?
qq_39571438: 请问数据拟合后想将拟合函数作为时变参数用于运算该如何操作?
滴滴滴滴大橙子: 都有acrobat了还用ilovepdf提取那一页干嘛 直接用acrobat组织页面弄出来不就好了吗
DSZ奥利给: 作者您好,请问相同地区测站 其接收机类型一般是一样的吗?