ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

徕卡DNA03水准仪GSI-8格式解析:从原理到字段拆解与数据处理

徕卡DNA03水准仪GSI-8格式解析:从原理到字段拆解与数据处理 简介徕卡DNA03电子水准仪GSI-8格式数据含义说明.doc是一份面向测绘工程、建筑施工与地形测量从业者的技术文档重点解决电子水准仪原始观测记录难以解读的问题。文档从往测、返测两条主线出发逐行拆解GSI-8数据中后视/前视点号、距离、尺读数以及高差之差、视距累计差等计算过程附带第一、第二测站实例能让读者快速掌握DNA03输出数据的字段含义与验算方法。资源为单个doc文档大小61KB共1个文件便于直接查阅或打印归档。目前已获得228人学习内容精炼实用。对于需要外业数据核对、内业平差或学习电子水准仪原理的测量员和在校生这份资料能有效缩短上手时间减少因读错原始记录造成的返工。 干测绘的人十有八九第一次拿到徕卡DNA03导出的GSI文件时都是这个反应满屏的“110100001、1108001234”密密排在一起像是一堆排列整齐又没有规则的乱码。那会儿我刚入行把文件发给前辈人家回了一句“这是GSI-8格式去对着码表看”。问题是网上能找到的“码表”大多是全站仪TPS格式的套到DNA03水准仪数据上完全对不上越查越懵。后来自己折腾了几天才把整条记录拆明白。这篇东西就以徕卡DNA03电子水准仪输出的一份GSI-8格式数据为例从格式原理、逐块字段解读、到怎么自己动手标定字段含义、转成Excel表格一次讲透。适合正在做水准数据处理的新手也适合被仪器数据导出折磨过、想系统搞懂后台格式的同行。1. 先把GSI-8搞清楚这不是加密是另一种“Excel表格”1.1 GSI格式的出身GSI全称叫Geodetic Serial Interface是徕卡测量仪器和外部软件交换数据的一套文本协议。上世纪仪器内存小、串口传输慢搞一堆XML或二进制文件不现实于是用了这种“纯文本、定长、空格分隔”的方案每一个字符都有它存在的意义仪器固件就能用非常轻量的逻辑去读写今天的文本编辑器也照样能直接打开。GSI-8和GSI-16是这套协议下最常见的两种子格式。直观的区别是数据段宽度GSI-8每个数据块的有效数字部分最多8位GSI-16最多16位。DNA03默认导出的常常是GSI-8因为水准测量数据量相对小8位足够用文件体积也小。你可以在配套软件里改导出设置换成GSI-16但核心结构是一样的。理解GSI最好的方式是把它想成一个超市货架。每个货位有固定的宽度货架最外侧贴着标签字段编号标签后面放商品数据值。仪器按顺序往格子里塞东西软件读取时只需按格子位置取数即可不需要像读自然语言那样理解上下文。1.2 一行GSI数据就是一串“块”打开GSI文件每一行通常是一组完整记录行内用空格切分成多个块(block)。每个块的结构固定由三部分组成词条编号常见是4位数字比如1101、1102、1108相当于字段ID。符号位一个单独的或-表示数值正负。数据部分定长数字或字符如果没填满仪器有时会补0有时直接压缩具体情况看固件版本。比如“110100001”这个块词条编号是1101符号是数据值是00001。再比如“1108-001234”编号是1108符号是-数据是001234。每一行数据的含义就是由这些块按照顺序拼起来的。这里有个容易踩坑的地方很多人以为GSI-8就一定是“8位数据”所以打开文件看到“110100001”只有5位数字会怀疑文件是不是坏了。实际很多仪器为了节省空间会把无意义的0隐藏而且点号如果是字母和数字混排长度更不固定。真正可靠的做法是按块之间的空格来切分而不是死抠块的总长度。1.3 行首和空格都不能乱删GSI文件第一眼看上去最奇怪的就是有些行以开头有些以空格开头细看还不止一个空格。以开头的行通常是测量观测记录行说明这条数据是一次实测得到的原始数据而以空格或其他字符开头的行可能是注释、点名、测站信息等。不同版本固件在表示上有细微差别但共同点是行首的空白和星号是记录类型的一部分复制出来做处理时千万别“顺手”把行首空格全清掉。我之前用Excel直接打开GSI文件发现第一列全没了每行的块数对不上就是因为Excel默认把前导空格当垃圾数据吞掉了。建议先用记事本、Notepad这类纯文本工具打开把显示字体设成Consolas等宽字体列对齐了格式结构一目了然。2. 逐块拆解一行实测数据的真实含义2.1 找一条看得见的实测记录为了讲清楚我用一条简化但典型的DNA03导出数据做例子* 1101B001 11020000 1108001234 1109000567 1110-000010 1122000000 11310000000 118000000 118100000这条记录看起来像天书拆开读就不难了。按空格切开一共是9个块。行首的*代表这是一条测量记录后面的块依次记录了一个完整测点的各项属性。2.2 1101和1102点名和点代码最好认的两个字段“1101”这个块是点名/点号几乎所有徕卡GSI数据里含义都一样。例子里的“1101B001”意思是这个测点的点名是B001。点名可以是纯数字也可以是字母数字混合这由你在仪器上输入时怎么命名决定。紧跟其后的“1102”是点代码属性码用来描述点位的属性比如“已知点”“转点”“水准点”之类。没输入代码时它的值就是0000。这两个块相当于给数据行打标签告诉软件“这一行是属于哪个点的、这个点是什么性质”。2.3 1108、1109、1110观测读数区最不能照抄网上的部分“1108”“1109”“1110”这几个块属于观测读数区存放的是水准仪在实际测量中得到的原始读数、视距等信息。我把它们单独拎出来说是因为这里恰恰是网上资料最混乱、最坑人的地方。网上流传比较广的GSI字段表很多是从徕卡全站仪TPS系列抄来的里面写着1108是水平角、1109是垂直角这对全站仪是对的但DNA03是电子水准仪根本不测角度它的1108、1109含义和全站仪完全不同。你如果拿那张表去套DNA03数据100%对不上。在我的实际使用中DNA03输出的1108附近通常是水准尺读数或视距类数据但具体哪个块放后视、哪个块放前视跟测量模式、仪器固件版本、甚至工程文件设置都有关系不能死记。唯一靠谱的办法是结合仪器屏幕上的实测值去反推具体操作我在第3节展开。这里先记住一个结论1108、1109、1110这些“11开头”的块数值是随观测动态变化的它们最值得关注但也最需要逐个现场标定。2.4 1122、1131、1180/1181状态参数和附加信息区“1122”在常见配置里寄存的是仪器高或目标高相关参数如果水准测量中没用到仪器高它可能就是0000。“1131”以及后续的1132、1133等块通常在需要输出坐标、高程时才会出现对应的可能是高程、坐标分量。1180、1181这类编号出现在行尾一般是仪器的校准参数、附加状态标记正常数据处理时可以直接忽略。可能有同行会问既然字段含义不确定那给一张“全字段表”不就行了吗实际情况是DNA03的GSI输出会根据测量模式动态增减块同样的1108字段做普通水准和做三角高程内容都可能不同。与其依赖一张可能错误的表不如我教你一套更底层的思路自己把每台仪器的字段含义标定出来。这才是长久之计。3. 实操把DNA03的数据导出、解析、读懂3.1 从仪器把GSI数据导出来DNA03导出数据主要有两种路径一是通过串口数据线连接电脑后用徕卡LGOLeica Geo Office或Super控制软件下载二是如果仪器配了存储卡也可以把记录文件拷贝出来。导出时软件里一般有格式选项选GSI-8还是GSI-16全称导出即可。导出的文件后缀常见是.ghi或.gsi本质都是纯文本。拿到文件后右键用记事本打开先确认里面是不是可读的ASCII字符如果是乱码通常是传输过程中参数没配对波特率、数据位、校验位或者文件本身被加密压缩了这属于传输问题不是格式问题。3.2 用Python快速拆分GSI文件GSI格式的块结构非常规整用任何编程语言都能轻松解析。我用Python写过最简单的一版核心逻辑就几行def parse_gsi_line(line): # 去掉行首的 * 等记录标识符再按空白切块 line line.lstrip(* ).strip() blocks line.split() result [] for token in blocks: idx token[0:4] # 前4位是字段编号 sign token[4] # 第5位是正负号 value token[5:] # 剩余部分是数值/字符 result.append((idx, sign, value)) return result with open(dna03.gsi, r, encodingutf-8, errorsignore) as f: for line in f: if line.startswith(*): print(parse_gsi_line(line))这段代码做的事情很简单以空格为单位切出每一个块再把块拆成编号、正负号、数据三部分。实际项目里你可以再加个判断把1101的点名和1108附近的数据挑出来写进Excel或数据库。我用这个思路帮同事处理过一条几万点的二等水准外业数据几分钟就拆完了。3.3 没有手册怎么自己反推每个字段的含义这是我今天最想讲的部分也是我认为处理GSI格式最有价值的方法论控制变量法。具体操作分六步架好DNA03在已知点上立水准尺。在仪器里把点名设成一个独特的名字比如TEST-01然后做一次完整测量等仪器屏显稳定的读数手动记录屏显值高差、距离、高程等。导出GSI文件用文本工具打开找到点名TEST-01对应的那一行。把这行里的每个块跟你手动记录的屏显值逐一比对。数值一模一样的那个块就是这个屏显值所在的字段数值完全没变的那些块多半是状态参数或固定参数。做第二次测量改一个条件比如把仪器到标尺的距离拉长10米再导出对比两次数据中哪个块发生了变化。变化方向和你想改变的条件一致就证明这个块对应的是距离类数据。多试几组条件组合把确认的字段积累起来做一张属于自己仪器的字段表。这套方法听起来朴素但极其管用。我当初就是靠这个办法花了一个下午把自己手上那台DNA03的常用字段全部标定清楚包括后视读数、前视读数、视距这几个最容易混淆的位置。做完之后再看任何GSI文件心里都有底。3.4 用Excel做一次手工分列校验如果临时没有Python环境用Excel也能快速查看。操作流程是先把GSI文件用记事本另存为.txt格式然后在Excel里用“数据-分列-分隔符号”功能分隔符号选“空格”一步就能把每个块分到独立的列里。分列之后每一列的头部就是1101、1108这样的字段编号下方是数值。这时候把仪器记录簿里的手算结果拿过来对比哪些列数据吻合哪个字段是什么含义一目了然。4. 常见问题与排查技巧实录4.1 GSI文件用Excel打开后串列、乱码这是被问得最多的问题。GSI文件本身是纯文本乱码大概率是编码问题文件可能是老仪器导出的ANSI/GBK编码而Excel默认用UTF-8打开中文点号或注释就会乱。解决方法是先用Notepad打开然后在“编码”菜单里逐个尝试另存为UTF-8之后再导入Excel。串列则是因为分列方式不对。直接双击用Excel打开文件时Excel会把连续空格当成单个分隔符或忽略导致列错位。一定要用“文本导入向导”明确选择空格作为分隔符。4.2 行首的*号丢了数据行读不出来我在帮别人清洗数据时见过好几次数据从网页或聊天工具复制粘贴时行首的星号和空格被自动清理了导致程序无法判断这条记录是不是测量记录。所以原始GSI文件最好用文本工具直接打开不要走网页预览。如果一定要复制粘贴后要检查行首格式。4.3 点名带字母解析时数字转错了点名如果是“B001”这类字母数字混合的字符串用程序解析时如果强行转成int会报错如果转成float又会被识别成科学计数法非常头疼。我的习惯是永远先按字符串读取整个数据段后续再根据业务需求进行类型转换。分清“数据的原始形态”和“数据的业务意义”是处理这类固定格式文本的第一原则。4.4 同一台仪器不同测量模式下字段含义变了这是最隐蔽的坑。同一台DNA03你在“水准测量”模式下导出的GSI和你在“三角高程测量”模式下导出的GSI即便字段编号一样实际含义也可能不同。因为仪器会在不同模式下复用一些字段块来存放不同的计算值。所以标定字段表时最好按测量模式分别标定并在文件名上标注清楚比如“dna03_leveling.gsi”和“dna03_trig.gsi”分开存放。我曾经因为没注意这一点把两种模式的数据混在一起处理算出来的高差整整偏了一个数量级后来重新做对比测试才发现是字段表用错了。4.5 GSI-8和GSI-16导出口径不一致如果你有两台DNA03或者同一台机器在不同时间固件升级过导出格式可能会在GSI-8和GSI-16之间变化。GSI-16的数据位更宽块更长肉眼看起来差异很大。处理时最好在文件开头加一行备注或者干脆文件命名里带上格式名避免后期搞混。还有一点很多免费转换工具会擅自把GSI-16截断成GSI-8丢失尾部精度位所以涉及高精度水准成果我一般只用原始GSI文件不做无谓的格式转换。4.6 一个容易被忽略的小技巧先看文件的最后几行GSI文件末尾通常会有结束行记录测量结束的时间、测段统计信息或仪器状态。有时数据处理发现缺少某个点别急着从头找先看最后几行有没有因为传输中断导致记录不完整。我第一次处理一个大文件时所有点都解析正常就是最后少了三个点排查半天才发现是串口线接触不良导致文件尾部被截断了。我个人在实际操作中还有一个习惯每次从仪器导出数据后第一件事不是急着处理而是把原始GSI文件先备份一份然后复制出一个副本再做解析。原始文件始终保持“仪器原样”这样即使处理过程出错随时能回到源头重新来。这个习惯帮我避免过好几次事故建议你也养成。GSI-8格式并没有多高深把块结构搞清楚再结合控制变量法标定字段你就已经比很多在网上找“万能字段表”的同行领先一大步了。拿这套思路去处理你自己手头那台DNA03的数据相信很快就能像我一样面对满屏的1101和1108心里一点都不慌。本文还有配套的精品资源点击获取
返回列表