Surfer Grid 明码文件(ASCII)格式解析

最近有一批数据需要处理,格式为Surfer Grid明码文件(*.grd),用记事本打开后发现文件格式比较简单,无论用程序去读还是经过简单处理后导入到Excel中、GIS软件中都比较方便,在这里就这类文件做一下格式说明。

Surfer Grid文件是存储(X,Y,Z)网格化数据的理想文件格式之一,明码GRD文件用记事本打开内容如下:

DSAA
11 20
0 1
0 1.9
-1.000 0.989
0.95 0.72 0.92 0.70 -0.55 0.99 0.38 -0.54 -0.96 -0.96 -0.76
0.72 0.75 -0.91 -0.29 -0.72 0.19 0.96 0.12 -0.68 -0.99 -0.94
0.92 -0.91 0.91 0.32 -0.54 -0.23 0.99 0.49 -0.39 -0.89 -1.00
0.70 -0.29 0.32 0.69 -0.98 0.01 0.99 0.58 -0.25 -0.81 -1.00
-0.55 -0.72 -0.54 -0.98 -0.54 0.60 0.99 0.47 -0.28 -0.80 -0.99
0.99 0.19 -0.23 0.01 0.60 0.99 0.80 0.20 -0.43 -0.84 -1.00
0.38 0.96 0.99 0.99 0.99 0.80 0.37 -0.16 -0.63 -0.91 -1.00
-0.54 0.12 0.49 0.58 0.47 0.20 -0.16 -0.54 -0.83 -0.98 -0.99
-0.96 -0.68 -0.39 -0.25 -0.28 -0.43 -0.63 -0.83 -0.96 -1.00 -0.95
-0.96 -0.99 -0.89 -0.81 -0.80 -0.84 -0.91 -0.98 -1.00 -0.96 -0.87
-0.76 -0.94 -1.00 -1.00 -0.99 -1.00 -1.00 -0.99 -0.95 -0.87 -0.76
-0.48 -0.71 -0.85 -0.92 -0.95 -0.95 -0.93 -0.89 -0.82 -0.73 -0.61
-0.19 -0.43 -0.60 -0.70 -0.76 -0.77 -0.76 -0.71 -0.65 -0.56 -0.45
0.06 -0.15 -0.32 -0.44 -0.51 -0.54 -0.54 -0.50 -0.45 -0.37 -0.27
0.28 0.10 -0.06 -0.17 -0.25 -0.29 -0.30 -0.28 -0.24 -0.18 -0.10
0.46 0.30 0.17 0.06 -0.01 -0.06 -0.08 -0.07 -0.04 0.00 0.06
0.60 0.48 0.36 0.27 0.20 0.15 0.13 0.12 0.14 0.17 0.22
0.71 0.61 0.52 0.44 0.38 0.33 0.31 0.30 0.30 0.32 0.36

用通用的形式表示如下:

DSAA
Ncolumns Mrows
Xmin Xmax
Ymin Ymax
Zmin Zmax
Row 1: Z11 Z12 Z13 … Z1n
Row 2: Z21 Z22 Z23 … Z2n
Row 3: Z31 Z32 Z33 … Z3n

Row M: ZM1 ZM2 ZM3 … ZMn

第一行文件头,就是固定的四个字母DSAA

第二行描述了数据的总列数和总行数

第三行描述了X值的最小值和最大值

第四行描述了Y值的最小值和最大值

第五行描述了Z值的最小值和最大值

再往下的所有行构成了数据区域,数据区域列出了所有的Z值,在Surfer软件读取过程中,数据区域的第一行是Y值最小的那一行数据的Z值,举个栗子,如果你的XYZ值分别代表若干点的经度(X)、纬度(Y)和高程(Z),则数据区域的第一行就是纬度最小的那些点的高程值,同理,每一行的最左侧的值表示X值最小的那些点的Z值。

需要特别注意的是,在Surfer软件中,如果网格数据中的某个点没有Z值,不能设置为0(0也是值),而是需要设置为1.7014100E+038。

熟悉了以上规则,就可以自己编写程序实现Surfer Grid文件的批量处理啦,或者如果你手中有一批XYZ数据需要处理或展示,就可以按照如上结构整理成Surfer Grid文件格式,然后在Surfer软件中方便的处理了。