HYPACK 数据在CAD中导出航迹线及水深的过程及对应软件的设计
不同版本的HYPACK 单波束编辑器得到的数据格式有所差异。在处理之前需要将格式统一,或者根据不同格式制定不同的处理方法。这里选择统一格式后,统一处理。格式选择与HYPACK 4.3 单波束编辑器得到的数据格式(后简称单波束数据格式)保持一致。
HYPACK4.3 单波束数据格式
如下图为HYPACK4.3 单波束数据格式,生成航迹线所需的数据已经被充填为黄色,即日期,文件名,和X,Y的数据。
问题解决思路
准备
做好准备工作,新建项目, 把我要转化的文件放入项目用于测试。
-
+GetTrackLine
-
- 示例文件
– 003_0826.EDT - 001.py
- 示例文件
开干
Step One Python文件处理
此次的文本处理主要涉及Python知识点有:
- 打开文件 open()方法
- 字符串处理方法, split(), replace(), format() 格式化
- 列表的操作, 列表索引, 列表迭代
首先来练习下Python 字符串的处理
#Open 003_0826.EDT
file_path = './示例文件/003_0826.EDT'
f = open(file_path, 'r')
#读取文件
lines = f.readlines()
#之前说过我们需要第一行的数据中的日期与文件名, 接下来先得到这两个数
print(lines[0].splilt(' ').index('003_0826.EDT'))#通过split()分割第一行的字符串,得到一个列表,然后检索到目标的位置
print(lines[0].split(' ').index('11/16/2019'))#同上
#最后我们得到
date_data = lines[0].split(' ')[40]
file_name = lines[0].split(' ')[42]
'''
日期和文件名已经得到了, 但是在航迹线中的数据格式是不同的,
这两个数据用来控制航迹线的线名, 线名格式为 191116003AA
所以在这两个数据还需要进行格式化处理。
'''
#航迹线线名 track_line_name
track_line_name = '{}{}{}{}AA'.format(date_data.split('/')[-1][-2:], date_data.split('/')[0[, date_data.split('/')[1], file_name.split('_')[0])
#接下来获取X,Y数据, 并把数据存储到一个列表中list_x_y
list_x_y = []
''' 从文件第一行到有X,Y 数据的第一行中间的数据是无用的所以来筛选以下'''
use_state = False
for line in lines:
if use_state :
x = line.split(' ')[5]
y = line.split(' ')[7]
list_x_y.append(x,y)
if '@@@@@' in line:
use_state = True
print(list_x_y)
然后将上述代码整理,并出为脚本文件,然后加上GUI窗口,即可。不想写了。。。。。
Step two 在AutoCAD中加载脚本文件
打开CAD 新建一个文件,然后在命令行输入script后回车,选择刚才生成的脚本即可。