admin管理员组

文章数量:1536090

2024年1月15日发(作者:)

Surfer8绘图指南

闫昊明

二○○六年六月♦第二版

§1 Surfer8软件简介

1.1 软件运行环境及特点

Golden Software Surfer 8.0 (以下简称Surfer)是一款画三维图(等高线, image

map, 3d surface等)的软件,该软件简单易学,可以在几分钟内学会主要内容,且其自带的英文帮助(help菜单)对如何使用surfer解释的很详细,其中的tutorial教程更是清晰的介绍了surfer的简单应用,应该说surfer软件自带的帮助文件是相当完美且容易阅读的,只要学过英语的人都可以很快上手。

Surfer是具有插值功能的绘图软件,因此,即使你的数据是不等间距的,依然可以用它作图。surfer是美国Golden Software公司的系列绘图软件之一,它对中文的支图1-1

持不够友好,这不得不算是一个小小的遗憾。Golden Software公司的绘图软件还包括两维和三维平面绘图软件Grapher(最新版本6.0),数字化底图软件Diger,地图软件MapViewer和地质软件Strater等,大家可以在其官方网站/找到软件和一些有用的资料。

Surfer的主要功能是绘制等高线图(contour map),此外它还可以绘制post map, classed post

map, vector map, image map,Shaded Relief map, wireframe map,3d surface map等形式的图形。其功能比较强,但没有各种投影变化是它的一大缺点。尤其是在等高线领域,这不能不说是它的应用受到限制的地方。

Surfer的安装比较简单(目前,只有windows平台下的版本,最新为8.0版本),只要按其提示缺省安装即可。其安装软件的大小不到30M,一般的计算机硬件基本能够顺利使用该软件。安装好Surfer以后,其环境界面如图1-1所示。

1.2 软件界面及命令菜单

Surfer的软件界面非常友好,继承了windows操作系统软件的特点。从图1-1中可以看到,其最上方为命令菜单,在命令菜单的下方是命令菜单中的快捷工具栏(共两行),左侧的空白区域为目标管理窗口,用来更加方便的管理绘制的各个图形要素,右侧的空白区域为工作区,用来绘制图形,最右侧的一个竖条工具栏是绘图命令的快捷方式。下面详细介绍各个命令菜单的主要内容。

1.2.1 文件菜单(File)

图1-2给出了文件菜单中的所有命令。

New - 用来新建一个工作窗口,即出现如图1-1中的界面。

- 1 -

§1 Surfer8软件简介

Open - 打开一个已经存在的Surfer识别的文件。

Close - 关闭当前窗口。

Save - 保存当前窗口内容。

Save As - 将当前窗口内容另存为其它文件名。

Import - 输入Surfer认识的图形格式。

Export - 将窗口内容输出到图形等格式文件。

Page Setup - 设置当前页面的尺寸等属性。

Print - 打印当前窗口内容。

Preferences - 设置Surfer的默认属性,包括缺省单位,线型,字体等。

Exit - 退出Surfer。

1.2.2 编辑菜单(Edit)

图1-3给出了编辑菜单的所有命令。

Undo - 撤销

Redo - 重复上次操作

Cut - 剪切

Copy - 复制

Paste - 粘贴

Paste Special - 特殊粘贴(可以粘贴如Word格式文本,图形等特殊的对象)

Delete - 删除

Select All - 全选

Deselect All - 全部不选

Invert Selection - 反向选择

Object ID - 目标的识别标志

Reshape - 重新成形

Properties - 目标属性

1.2.3 查看菜单(View)

图1-4给出了查看菜单中的所有命令。

Fit to Window - 调整图形来满窗口显示

Page - 按正常窗口显示

Actual Size - 按物体的真实大小显示

Full Screen - 满屏显示

Zoom - 放大或缩小显示

Pan Realtime - 移动当前窗口物体

Redraw - 刷新显示

Auto Redraw - 自动刷新显示

Rulers - 在窗口显示标尺

Drawing Grid - 在窗口显示参考格子

Tool Bars - 设置工具栏显示形式

Status Bar - 显示状态栏

- 2 -

图1-2

图1-3

图1-4

Surfer8绘图指南

Object Manger - 显示目标管理栏

1.2.4 手工绘图菜单(Draw)

Text - 手工填写文字文本

Polygon - 手工绘制多边形

Polyline - 手工绘制多段直线

Symbol - 手工绘制缺省符号(+)

Rectangle - 手工绘制矩形

Rounded Rect - 手工绘制圆角矩形

Ellipse - 手工绘制椭圆

1.2.5 排列菜单(Arrange)

Order Objects - 排列对象的前后等

Order Overlay - 排列覆盖图对象的前后等

Align Objects - 对齐对象

Combine - 组合对象

Break Apart - 将组合对象拆分

Rotate… - 对对象进行旋转

Free Rotate - 对对象进行自由旋转

Transform - 对对象进行变换

1.2.6 网格化菜单(Grid)

Data… - 输入数据文件,并对其进行网格化

Variogram - 变化图命令

Function - 采用函数生成网格文件

Math - 对网格文件进行数学操作

Calculus - 对网格文件进行微分、地形建模、积分和Fourier谱分析

Filter - 对网格数据进行滤波

Spline Smooth - 对网格数据进行样条光滑

Blank - 对网格数据进行白化

Convert - 将网格化数据转换成其它格式

Extract - 从网格化数据中取部分区域数据

Transform - 对网格化数据进行变化

Mosaic - 合并两个以上的同网格范围的网格化文件

Volume - 计算网格化数据的体积

Slice - 从网格化数据中取一剖面

Residuals - 计算两个网格化数据的残差

Grid Node Editor - 对网格化数据进行编辑

1.2.7 绘图菜单(Map)

Contour Map - 绘制等高线

- 3 -

图1-5

图1-6

图1-7

§1 Surfer8软件简介

Base Map - 输入底图

Post Map - 绘制散点图(包括分类散点图)

Image Map - 绘制图像图

Shaded Relief Map - 绘制阴影地貌图

Vector Map - 绘制一维或两维向量图

Wirefram - 绘制带线框架图

Surface - 绘制3D表明图

Scale Bar - 绘制地图比例尺

Digitize - 对图形进行数字化

Trackball - 对绘制图形进行调整

Stack Maps - 水平对齐图形

Overlay Maps - 按坐标重叠图形

Break Apart Overlay - 将重叠图形拆分

1.2.8 窗口菜单(Window)

New Window

Cascade

Tile Horizontal

Tile Vertical

Arrange Icons

1.2.9 帮助菜单(Help)

Contents

Tutorial

Menu Commands

Automation Help

Check for Update

Golden Software on the Web

Feedback

About Surfer

图1-8

- 对当前窗口的内容重新在新窗口生成

- 层叠窗口

- 水平曾叠窗口

- 垂直曾叠窗口

- 排列窗口底部的图标

- 在线帮助的所有内容

- 在线教程(值得一读,遗憾的是e文)

- 菜单命令介绍

- 自动控制(Script语言)帮助

- 检查软件更新情况

- 软件的官方网站

- 信息反馈

- Surfer软件的版本等信息

图1-9

1.3 软件使用流程

图1-10

应用Surfer软件绘制图形,首先要根据不同的作图目的,提供合适格式的数据文件格式。其中,最基本的格式是ASCII码形式的XYZ数据格式(将在下一章详细介绍)。有了原始数据后,需要用Surfer软件的Grid菜单中的命令对此数据进行网格化,将数据格式转换成Surfer软件作图时识别的格式,然后再由此网格化的数据用Map菜单中的命令绘制相应的各种图形。此外,还可以直接将XYZ数据格式用特定的程序语言将其直接转化为Surfer识别的网格化数据格式,我们称之为ASCII码GRD文件,这样同样可以用此网格文件作图。简单的讲,要想用Surfer软件进行绘图,首先要讲原始数据文件整理或转换为Surfer绘图要求的文件格式,这样就可以轻松的做出各种漂亮的图形。- 4 -

Surfer8绘图指南

对于此流程,请参考图1-11,更详细的内容将在以下各章节中进行详细的介绍。

XYZ 数据文件

直接转换成ASCII码grd文件

Post和分类Post命令

网格化命令(Grid|data…)

Post和分类Post图形

网格化文件(.grd文件或其它扩展名,但符号grd格式的文件)

绘图命令(等高线Countour,网线Wireframe,图像Image,地貌Shaded Relief,3D表层Surface)

1-2维矢量图命令(Vector)

对应图形(等高线图,网线图,图像图,地貌图,3D表层图)1-2维矢量图

Surfer数据与图形的关系和流程图

图1-11

- 5 -

§1 Surfer8软件简介

- 6 -

§2 基本图形的绘制

2.1 建立XYZ数据文件

所谓的XYZ数据文件,是指ASCII码(文本)格式的数据文件,此数据文件包含三列,分别为XYZ,其中X列和Y列表示x和y坐标,Z列为在坐标(x,y)处的值(例如,高程)。XYZ数据文件的文件名后缀一般为(.dat),这是surfer要求的格式,当然,任何文本文件都可以改后缀名为(.dat),然后,surfer就可以读取此数据了。

图 2-1

数据文件可以在surfer中的工作表中手工输入,也可以是其它软件生成的文本文件,例如Excel表格数据,也可以转换成surfer所需要的数据文件。一般的,任何转换成(.txt)结尾的数据文件,都可以被surfer成果读取。Surfer支持字符,所以字符也可以用在数据文件中,除了第一行的字符可以看做是文件头外,其它的字符一般被认为是surfer的缺省值,此值在做等高线等图形时将不会显示。

2.2 数据文件的网格化(Grid)

Surfer的最主要的功能是绘制等高线图,但并不是我们具有了数据文件就可以直接绘制等高线,surfer要求绘制等高线的数据有特殊的格式要求,即首先要将数据文件转换成Surfer认识的grd文件格式,才能绘制等高线(当然,可以直接生成surfer接受的ascii 码的grd文件格式,这样就可以直接作图,此方法将在后面介绍,首先我们介绍常用的作图方法)。假设你有三列数据分别为X,Y,Z,其中Z为点(x,y)处的值,存在文件中,其中第一列是X坐标,第二列是Y坐标,第三列是(x,y)上的值Z,则在绘制等高线前,首先要将其转换为grd文件,步骤如下:

2.2.1 把数据文件转换成grd文件

1. 打开菜单Grid | ,在open对话框中选择数据文件

2. 这会打开“Grid Data”对话框。在“Data Columns”中选择要进行GRID的网格数据(X和Y坐标)以及格点上的值(Z列),这里我们不用选择,因只有3列数据且它们的排列顺利已经是XYZ了,如果是多列数据,则可以在下拉菜单中选择所需要的列数据。选择好坐标XY和Z值后,在“Girding Method"中选择一种插值方法(如果你需要比原始数据的网格X和Y更密的Z数据,或是你的网格是非均匀的),则在Grid的过程中,Surfer会自动进行插值计算,生成更密网格的数据。如果你只是想绘制原始数据的图,不想插值,则最好选择距离平方反比法(inverse distance to a power)或Kriging方法。因为这两种方法在插值点与取样点重合时,插值点的值就是样本点的值,而其它方法不能保证如此。 在"Output GridFile“中输入输出文件名,然后在“Grid Line Geometry”- 7 -

§2 基本图形的绘制

中设置网格点数。这里需要注意的是,当X和Y的数值相差很大时,这里显示的最大最小值可能有错误(即与原始数据不同),这是Surfer软件本身的问题,遇到这种情况,必须手动改正这种错误,即输入正确的最大最小值。由于我们的数据没有此类问题,因此不必手动改正最大最小值。但必须手动改正X和Y的间距“spacing” 或数据个数“#f”,这二者是相关的,改动一个,另一个自动改正。如果你的原始数据是等间距的,这里的X和Y的间距“spacing"或”#f“ 最好与原数据一致,这样可以减少插值带来的误差。我们的数据是不均匀的,所以必须插值,这里可以不进行任何改动。好了,点“ok”,画图所需要的grd文件就生成了。

Tips――Grid | Math

Grid | Math 命令可以创建一个新的grd文件,此grd文件的Z值是一个原有grd文件的Z值的转换或是原有两个grd文件Z值的组合。输出的新grd文件的Z值与应用的数学函数有关。设此函数为C = f(A,B), 这里C为输出值,而A和B为输入值。此函数会把对应的相同的(x,y)坐标上的Z值进行相应的数学计算,然后把计算结果写入新的grd文件。例如,函数C = log10(A) 会把原来A文件中的Z值做以10为底的log计算,然后把新的Z值写入新的grd文件。如果一个网格数据是空白的(blanked value),那么,新的Z值也是空白的。

2.3 绘制和设置等高线

2.3.1 绘制等高线

打开菜单“Map | Contour Map | New

Contour Map",在“Open Grid”对话框中选择刚才输出的grd文件,如,点“ok”,则一副等高线图就画完了。

2.3.2 等高线图的设置

在所画的等高线图中双击鼠标,或点击右键,选中“属性”,就会出现设置等高线的各种属性,在图的边缘双击鼠标则可以改动坐标轴的属性。

等高线图的着色(fill)和设置

双击等高线图,就会出现“Map:Contours

Properties”对话框,现在介绍此对话框中的设置。

图2-2

“General”选项卡中:

1、“input grid file”

为打开的等高线图的grid文件名,你可以修改此处,打开不同的文件(几乎没人这样做),点一下打开文件图标旁的“i”图标,则可以看到当前grid文件的基本统计信息,如最大最小值等。

2、“filled countours”

选中fill countour(在前面的方框中点一下鼠标),就可以画着色的等高线图了,如果再选中下面的“color scale”的话,则可以在等高线图旁边给出色彩棒。

3、“smothing”

选中的话可以对等高线进行平滑,在amount中有“低、中、高”三种选择。这一项一般可以不选,除非你画出的等高线图中的等高线非常的不平滑,这项只起到美化图形的结果,没有更大的意义。

- 8 -

Surfer8绘图指南

4、“blanked regions”

这项可以对空白区域进行着色,只有在你的等高线中有空白区域时才有意义,一般不用。

5、“fault line”

可以设置等高线的粗细颜色等。

“Levels” 选项卡中:

1、“level”

点击“level”可以设置等高线的最大最小值和等高线间的等高距,这可以对所有的等高线发生作用,通过调节此项可以使等高线分布均匀,易于看清楚,作图更美观。如不想人为改动,可用缺省值。双击level下面的数字,可以单独更改等高线的值,但要注意等高线从小到大的规律,不能瞎改。

2、“line”

点击“line”可以设置等高线的线型。

3、“properities”

选中“uniform”,则线型是统一的,选中“gradation”,则线的颜色是渐变的。选择好“properities”后,就可以更改下面的线型(style)和颜色(color)已经线的粗细(line)。当选“gradation”时,线的颜色是渐变的,点一下color旁边的颜色区,就会出现“color spectrum”选项,点一下“盾形”图标(在颜色条的左右两端上方),就可以分别点选下面的颜色了,当然,也可以自己加入“盾形”图标,加自己的颜色。或是用“load”调用调色板文件(*.clr),在surfer8目录下就有。“affected levels”可以有选择的对等高线的线型颜色进行设置,这里不再详细介绍,只要自己动手改改那里边的三个数字,你很快就会弄明白。此外,还可以通过双击line下面的线来改变某一根等高线的具体属性。

4、“fill”

此选项只有在着色等高线图中才有效,对单独的等高线图无作用。点击“fill”设置着色。着色与“line”选项中的内容类似,不再详细介绍。同样,可以通过双击“fill”下面的具体颜色条来对特定的等高线区域进行着色。

5、“labels”

设置等高线标注数字,比较简单。双击下面的“yes”或“no”可以改变是否显示标注。

6、“hach”

用来画等高线的上下方向(即上山或下山方向),一般不用。

7、“add”和“delete”

在右边的按钮。当选中某一level后,点“add”按钮可以在两个level之间插入一新的level。Delete按钮则删除选中的level

“view”选项卡中

用来调整等高线图的整体方向,除了在3d surface情况下,一般不用。

“scale”选项卡中

用来设置xyz轴的比例,可以调整其长度选项。一般情况不需调整,除非X和Y相差很大,为了方便看图可以调整其到合适的长度。

“limits”选项卡中:

可以用来裁剪等高线图(通过设置xy的最小最大值),从而得到感兴趣地方大小的图形。

“background”选项卡中:

- 9 -

§2 基本图形的绘制

可用来设置背景填色,一般不用。

横纵(xy)坐标轴的设置:

双击横轴和纵轴所在的位置,就可以打开坐标轴属性对话框 “map bottom(or left or top or right)axis properties”下面以bottom轴为例,其它类似:

“gernal” 选项卡:

“Title”, 在空白处可以输入轴的说明或图的说明文字,用“offset along” 和“offset from”可以设置说明文字的位置,“font”可以选择字体,“angle”可以选择文字的旋转角度。

“labels”,设置轴的刻度值。

“axis plane”设置轴平面,一般不改动。

“axis”设置轴线属性。

“ticks”选项卡:

设置轴线上刻度的长度,方向,主刻度和辅助刻度。

“scaling”选项卡:

设置刻度值(label)的起始值(first

major),间隔(major)和最后值(last major)。其它值一般不修改。

“grid lines”选项卡:

用来设置等高线图的坐标网格,用鼠标点击“show”即可。

此外,以上等高线的所有属性都可以通过双击左边的“object manager”(或图2-3

在“view”菜单中)属性窗口来设置,与直接在图中设置无异。

51200002.4 绘制Wireframe

Wireframe是对grd文件的三维表现形式,它用绘制线条的方式来表现grd文件,此线条是坐标(x,y)的网格,但每个网格的交点代表Z值。命令菜单Map | Wireframe,与绘制等高线类似,也需要grd文件。参考图2-3。

5.5 绘制Image Map

558000图2-4

Image Map是图像文件,具有很好的表现力,也需要用到grd文件,命令菜单Map | Image Map,参考图2-4。

- 10 -

Surfer8绘图指南

5

图2-6

图2-5

2.6 绘制Shaded Relief Map

Shaded Relief Map可以用来表现地貌,其表现形式立体感强,画面细腻、柔和。此图也是用grd文件格式,命令菜单为 Map | Shaded Relief Map,参考图2-5。

2.7 绘制Surface Map

Surface Map是surfer新添加的3D图形表现方式,此图形的立体表现力最强。此图需要grd文件格式,命令菜单为 Map | Surface Map,参考图2-6。

2.8 在等高线图上加上背景地图(base map)(世界或局部地图)

我们经常需要把世界地图放在等高线图下面作为参考,世界地图在surfer中的格式是*.bln,

*.gsb,*.jpg,*.gif等多种形式,比较常用的是*.bln文件,这些地图在surfer的官方网站/都有,可以自由下载。在附件中提供给大家一个世界地图的bln文件,文件名。

在surfer中打开 Map | 然后打开图2-7

文件,就可以画出世界地图了。用View

| Fit to Window可以很好的显示. 然后我们可以把相应的等高线图用§2.3部分的方法画出(注意Base

- 11 -

§2 基本图形的绘制

Map的网格坐标必须与等高线图的网格坐标一致,至少Base Map的网格坐标要包含等高线图的网格坐标)。再按F2键(选中所有对象,或ctrl+A),点击Map | Overlap Maps就可以将两幅图合成一副图。打开View | Object Manager,选中"Base",点右键,选Order Overlay | Move to Front就可以将背景图移到前面一层。这样一份好的等高线图就画好了(见图2-7) 。

2.9 bln文件及blank作图

大家看了第三部分的图有可能会奇怪,为什么你的等高线只在海洋上有,陆地上怎么没有呢?这就是此节要讲的内容。首先讲一下bln文件的格式,bln文件具有以下格式:

length,flag

x1,y1

x2,y2

...

xn,yn

length,flag

x1,y1

x2,y2

...

xn,yn

其中,length是背景地图曲线中点坐标的个数,如果xn=x1,yn=y1,那么所有的点将围成一个圈。如果不是这样,则是一条不闭合的曲线。 flag的值为1或0,当flag=1时,闭合曲线里面的等高线可以用此bln文件blank掉(即将闭合曲线中的等高线消除),如果flag=0,则是曲线外面的等高线被blank。 我所提供的bln文件为flag=1的格式,当然可以将其改成0。简单介绍了bln文件的格式,再来介绍怎样blank等高线。假设我们已经有了一个全球的等高线图,其原始数据文件为. 打开Grid | 选择文件,"ok",然后在新的对话框中选择, "ok",再在新的对话框中输入要输出的grd文件的名字,点ok就可以得到一个blank过的grd文件(假设为),则用再做等高线图,即可出现图2-7的效果.

2.10 Post Map和Classed Post Map

有时候,我们需要在Base Map中添加台站的坐标,并用三角,五星等符号将其标出,且在旁边写上台站的名字,这可以用Post Map和Classed Post Map完成。首先介绍Post Map,它的数据文件一般格式是:

x1, y1, label1

x2, y2, label2

...

xn, yn, labeln

其中,xn,yn为坐标值,label为数字或文字。我们还是以为例子,打开Map | Post Map | New , 选图2-8

择文件, 选"ok",则会出现一副Post Map的图,双- 12 -

Surfer8绘图指南

击图的中央,就会打开其属性。在Gernal选项中可以设置坐标列,以及Symbol(可更改为其它的形状,缺省为十字)。在Labels选项中,可以通过"Worksheet Column for Label"设置Label,此处我们选择c列,则c列的值会出现在每个坐标点的上方(如图2-8所示)。 至于其它的属性设置,跟等高线类似,不再详述。

至于Classed Post Map与Post Map类似,只是对不同的点,根据某些规则分类而已。 譬如还是文件,我们把c列看成是每个点的高程,则可以根据高程对各点分类。如高程在25-54的用十字表示,88-105的用三角表示等。打开Map | Post Map | New Classed ,选择文件,

选"ok",则出现一副Classed Post Map,双击图可以编辑属性,这里会多一个"Classes"选项卡,这里的选项最大最小值,Symbol等都可以改,不再详述。需要注意的是Classed Post Map至少要有三列数据,其中第三列就是分类的标准。

2.11 vector map 向量图(或风向图)

很多人是学习大气和海洋的,因此经常要画风的向量图或海流的向量图,Surfer可以轻松的完成,且图形可以调整,因此可以生成很漂亮的图形。Vector Map分1-Grid Vector Map 和 2-Grid Vector

Map两种。首先介绍1-Grid Vector Map:

1-Grid Vector Map可以给出坐标点的方向和振幅大小,但它一般表示的是等高线的下山方向和大小,是等高线图的一种特殊表现方式。先把进行网格化,得到文件。打开 Map | Vector

Map | New 1-Grid Vector Map,选中,则会出现一副箭头图。通过双击图的中央可以编辑它的属性,此图一般很少应用,因此其属性设置不再详述,感兴趣的朋友可以自己试一下。

下面主要讲2-Grid Vector Map。2-Grid Vector Map用到两个不同的grd文件,一般讲这两个文件应该有相同的坐标网格。

2-Grid Vector Map的grd文件可以有两种表示方法,一种是直角坐标形式,一种是极坐标形式。对直角坐标形式,其中一个grd文件里是x方向的值,另一个是y方向的值。对极坐标形式,一个grd文件是vector的方向,另一个grd文件是vector的振幅值。

下面举个具体的例子来说明如何作图。假设我们已经有了风分量图2-9

u和v的两个直角坐标的grd文件(包括x y windu三个分量),名字分别为和两个grd文件(需要注意的是,这两个文件已经是ascii 码的grd文件,看不到相应的三个分量,但不需要再进行grid过程,可以直接应用,至于如何生成这种形式的grd文件,请参考2.12节)。 打开Map | Vector Map | New 2-Grid Vector Map,会打开"Open X Component (Angle) Grid"对话框,此时选中(注意,需要在文件类型中选择all files(*.*)才可以选择*.dat文件),随后会打开"Open Y Component (Length) Grid"对话框,此时选中,选择"ok",就会出现一副风的箭头图,再加上Base Map就成了一副很漂亮的图(如图2-9所示)。 通过双击就可以打开此图的属性(Map Vectors Properties)。注意:在"Data"选项卡中,Coordinate System要选Cartesian (X, Y)(如果你用极坐标,就选Polar (Angle, Length))。 在- 13 -

§2 基本图形的绘制

"Symbol"选项卡中可以修改箭头的形状,线的属性,其中Frequency是设置x和y方向需要箭头的频率,此处我们改为3,3,即在x和y方向都是每3点画一个箭头,也即省略了两点。其中的Color

Scaling可以会色彩箭头,大家可以自己试一下效果(此处我没有改动)。 在"Scaling"选项卡中,可以设置箭头起始点的位置(Symbol项),以及箭头长度的比例形式(线性,log,平方根等,在Scaling项中改)。在右边还有两个选项,一个是反转箭头方向,一个是给出箭头的图标(Legend),选中后者。在下面可以设置箭头的各个属性(Magnitude,Shaft Length,Head Length和Symbol Width,分别表示风的振幅大小(可改,这里选用缺省值),箭头杆的长度,箭头头的长度和箭头的宽度,这里其最小最大值分别为(后三项) 0.04in,0.2in,0.04in,0.04in,0.01in,0.01in)。 在"Scale"选项卡中,选择X

Scale下的Length为6in,Y Scale下的Length为3in。其它属性不做改动,即可生成图2-9。 当然,你也可以给出风u、v项的角度和振幅,用极坐标来画图,这其中要注意极坐标的参考点可以是东(角度逆时针)或北(角度顺时针),请注意选择(在属性的"Data"选项卡中修改,且其角度可以用度或弧度作单位,请小心区分)。

2.12 ASCII 码的grd文件

在2.11节给出的grd文件是ASCII码的grd文件格式(等同于前面用Surfer的Grid命令生成的grd文件),无需进行grid过程,这样做简单,准确,可以在工作和学习过程中提供很多方便。下面对这一文件格式做一详细介绍:

ASCII码的grd文件格式包括5个文件头信息(关于网格的限制),然后是z的值,值得注意的是,这种文件格式必须用空格来区分两个数据。其一般格式为:

DSAA (注意,必须大写且从第一行第一列开始,即DSAA前面不能有空格)

nx ny (x 方向网格点的个数nx, y方向网格点的个数ny)

xlo xhi (x 方向网格点的最小值和最大值)

ylo yhi (y 方向网格点的最小值和最大值)

zlo zhi (z 方向网格点的最小值和最大值)

grid row 1 (z 的值在点(x1,y1), (x2,y1),....(xn,y1))

grid row 2 (z 的值在点(x1,y2), (x2,y2),....(xn,y2))

...

grid row n (z 的值在点(x1,yn), (x2,yn),....(xn,yn))

注意,此处x1

下面是一个具体的例子:

DSAA

10 10

0.0 9.0

11.0 20.0

25.00 97.19

91.03 77.21 60.55 46.67 52.73 64.05 41.19 54.99 44.30 25.00

96.04 81.10 62.38 48.74 57.50 63.27 48.67 60.81 51.78 33.63

92.10 85.05 65.09 53.01 64.44 65.64 52.53 66.54 59.29 41.33

94.04 85.63 65.56 55.32 73.18 70.88 55.35 76.27 67.20 45.78

97.19 82.00 64.21 61.97 82.99 80.34 58.55 86.28 75.02 48.75

91.36 78.73 64.05 65.60 82.58 81.37 61.16 89.09 81.36 54.87

86.31 77.58 67.71 68.50 73.37 74.84 65.35 95.55 85.92 55.76

80.88 75.56 74.35 72.47 66.93 75.49 86.39 92.10 84.41 55.00

- 14 -

Surfer8绘图指南

74.77 66.02 70.29 75.16 60.56 65.56 85.07 89.81 74.53 51.69

70.00 54.19 62.27 74.51 55.95 55.42 71.21 74.63 63.14 44.99

在这个例子中,共有100个z的值,其中x为10个,y为10个,x的最小最大值是0.0和9.0, y的最小最大值是11.0和20.0,z的最小最大值是25.00和97.19,最后是100个z的值, 每行10个值,共10行。 当然,我们也没有必要这样排列,只有顺序不变,照样可以每行只有一个值,即类似下面的排法:

.... (省略了文件头信息)

91.03

77.21

60.55

...

74.63

63.14

44.99

为了应用上的方便,这里我给出一个FORTRAN90语言生成ASCII码grd文件的子程序,仅供参考,原程序见附件中的WR_SURFER_GRID.F90

! WRITE GOLDEN SOFTWARE SURFER 8.0 GRID FORMAT DATA BY ASCII (3D)

! NUM_X,NUM_Y=NUMBER IN X AND Y DIRECTION RESPECTIVELY

! X_BEGIN,X_END,Y_BEGIN,Y_END=THE BEGIN AND END VALUE IN X AND Y DIRECTION RESPECTIVELY

! Z(NUM_X,NUM_Y)=Z VALUE AT GRID X AND Y POINT( NUM_X,NUM_Y MUST IN ASCENDING ORDER)

! IUNIT,FILENAME=OPEN FILE UNIT AND NAME TO WRITE THE 3D DATA

! BLANKVALUE= OPTIONAL PARAMETER, IF PRESENT, THEN CHANGE BLANKVALUE TO SURFER DEFAULT

VALUE 2.0E38

SUBROUTINE

WR_SURFER_GRID(NUM_X,NUM_Y,X_BEGIN,X_END,Y_BEGIN,Y_END,Z,IUNIT,FILENAME,BLANKVALUE)

IMPLICIT NONE

INTEGER,INTENT(IN):: NUM_X,NUM_Y,IUNIT

REAL,INTENT(IN)::X_BEGIN,X_END,Y_BEGIN,Y_END,Z(NUM_X,NUM_Y)

CHARACTER(LEN=*),INTENT(IN)::FILENAME

REAL,OPTIONAL,INTENT(IN):: BLANKVALUE

INTEGER I,J

REAL BLANKVALUE_SURFER,ZMIN,ZMAX

close(iunit)

open(IUNIT,file=FILENAME//'.')

WRITE(iuNit,'(4A)') 'DSAA'

WRITE(iunit,*) NUM_X,NUM_Y

WRITE(iunit,*) X_BEGIN,X_END

WRITE(iunit,*) Y_BEGIN,Y_END

IF(PRESENT(BLANKVALUE)) THEN

ZMIN=1.0E38; ZMAX=-1.0E38

do j=1,NUM_Y;do i=1,NUM_X

IF(Z(I,J)/=BLANKVALUE) THEN !FIND TRUE MIN AND MAX VALUE (EXPECT BLANKVALUE)

- 15 -

§2 基本图形的绘制

IF(Z(I,J)>=ZMAX) ZMAX=Z(I,J)

IF(Z(I,J)<=ZMIN) ZMIN=Z(I,J)

ENDIF

ENDDO;ENDDO

WRITE(IUNIT,*) ZMIN,ZMAX

ELSE

WRITE(iunit,*) MINVAL(Z),MAXVAL(Z)

ENDIF

do j=1,NUM_Y;do i=1,NUM_X

BLANKVALUE_SURFER=2.0E38 ! SURFER8 DEFAULT BLANK VALUE

IF(Z(I,J)==BLANKVALUE) THEN

WRITE(IUNIT,*) BLANKVALUE_SURFER

ELSE

WRITE(IUNIT,*) Z(I,J)

ENDIF

IF(PRESENT(BLANKVALUE)) THEN

ELSE

write(IUNIT,*) Z(i,j)

ENDIF

ENDDO;ENDDO

close(IUNIT)

PRINT *, ''

PRINT *, 'Output data to File : ', FILENAME//'.'

PRINT *, ''

END SUBROUTINE WR_SURFER_GRID

2.13 应用surfer给出数据文件的统计性质

在应用数据作图前,有时候需要知道每列数据的统计性质,如最大值,最小值,标准差等。应用Surfer的Worksheet可以很方便的解决此问题。打开File | New 选中Worksheet,则出现一个类似excel的表格,在此环境下,可以用File | Open来打开需要查看的数据文件,譬如。如果我们想知道B列的统计性质,则点击B,再打开菜单Data | ,选"ok",就会出现统计结果。 同时,我们还可以对各列进行数学运算,譬如我想生成新的一列D,它是B列的平方加上C列的和,则先点击D列(空白列),再打开菜单Data | 在Transform Equation下输入“ D=B*B+C”点击"ok",则会生成D列数据,只要将文件另存为新文档就可以了。当然,你还可以用Surfer的Worksheet做很多类似的计算。应该说,Surfer的这一功能是很实用的,当然,还可以用Data | 对数据进行排序。

2.14 surfer其它功能

Surfer还有一些辅助功能,如函数直接作图等(在grid菜单中),标注文字,画简单的图形等,请大家自己参考help进行学习,这些在现在的基础上,应该是很简单的问题。

- 16 -

§3 图形绘制的技巧

3.1 在生成grd文件时,用什么插值方法最好?

近些日子,有人问surfer8中的插值哪种好? 我个人的观点,如果你的数据的网格是均匀的,那么,最好用我提供的这种ASCII 码的grd文件直接作图。这样做的好处是显而易见的,即不会产生作图误差,且不会出现其它小问题,如不能正确处理x和y坐标(当二者差异较大时等)。我不主张在作图过程中进行插值计算。如果你的网格是非均匀的,则可能需要进行插值,我个人认为比较好的是前两种(Inverse Distance to a Power 和Kriging方法)。下面对插值方法做部分简单的介绍,至于插值方法的详细介绍请参考Help | Contents | Index 中查找interpolation主题词。

在Surfer8.0中提供了以下12种内插方法:

1) Inverse Distance to a Power(反距离加权插值法)

2) Kriging(克里金插值法)

3) Minimum Curvature(最小曲率)

4) Modified Shepard's Method(改进谢别德法)

5) Natural Neighbor(自然邻点插值法)

6) Nearest Neighbor(最近邻点插值法)

7) Polynomial Regression(多元回归法)

8) Radial Basis Function(径向基函数法)

9) Triangulation with Linear Interpolation(线性插值三角网法)

10) Moving Average(移动平均法)

11) Local Polynomial(局部多项式法)

12) Data metrics。

1)距离倒数乘方法

距离倒数乘方格网化方法是一个加权平均插值法,可以进行确切的或者圆滑的方式插值。方次参数控制着权系数如何随着离开一个格网结点距离的增加而下降。对于一个较大的方次,较近的数据点被给定一个较高的权重份额,对于一个较小的方次,权重比较均匀地分配给各数据点。

计算一个格网结点时给予一个特定数据点的权值与指定方次的从结点到观测点的该结点被赋予距离倒数成比例。当计算一个格网结点时,配给的权重是一个分数,所有权重的总和等于1.0。当一个观测点与一个格网结点重合时,该观测点被给予一个实际为 1.0 的权重,所有其它观测点被给予一个几乎为 0.0 的权重。换言之,该结点被赋给与观测点一致的值。这就是一个准确插值。

距离倒数法的特征之一是要在格网区域内产生围绕观测点位置的"牛眼"。用距离倒数格网化时可以指定一个圆滑参数。大于零的圆滑参数保证,对于一个特定的结点,没有哪个观测点被赋予全部的权值,即使观测点与该结点重合也是如此。圆滑参数通过修匀已被插值的格网来降低"牛眼"影响。

2)克里金法

克里金法是一种在许多领域都很有用的地质统计格网化方法。克里金法试图那样表示隐含在你的数据中的趋势,例如,高点会是沿一个脊连接,而不是被牛眼形等值线所孤立。

克里金法中包含了几个因子:变化图模型,漂移类型 和矿块效应。

- 17 -

§3 图形绘制的技巧

克里金(Kriging)插值法又称空间自协方差最佳插值法,它是以法国的名字命名的一种最优内插法。克里金法广泛地应用于地下水模拟、土壤制图等领域,是一种很有用的地质统计格网化方法。它首先考虑的是空间属性在空间位置上的变异分布,确定对一个待插点值有影响的距离范围,然后用此范围内的采样点来估计待插点的属性值。该方法在数学上可对所研究的对象提供一种最佳线性无偏估计(某点处的确定值)的方法。它是考虑了信息样品的形状、大小及与待估计块段相互间的空间位置等几何特征以及品位的空间结构之后,为达到线性、无偏和最小估计方差的估计,而对每一个样品赋与一定的系数,最后进行加权平均来估计块段品位的方法。但它仍是一种光滑的内插方法。在数据点多时,其内插的结果可信度较高。克里金法类型分常规克里金插值(常规克里金模型/克里金点模型)和块克里金插值。常规克里金插值其内插值与原始样本的容量有关,当样本数量较少的情况下,采用简单的常规克里金模型内插的结果图会出现明显的凹凸现象;块克里金插值是通过修改克里金方程以估计子块B内的平均值来克服克里金点模型的缺点,对估算给定面积实验小区的平均值或对给定格网大小的规则格网进行插值比较适用。块克里金插值估算的方差结果常小于常规克里金插值,所以,生成的平滑插值表面不会发生常规克里金模型的凹凸现象。按照空间场是否存在漂移(drift)可将克里金插值分为普通克里金和泛克里金,其中普通克里金(OrdinaryKriging简称OK法)常称作局部最优线性无偏估计,所谓线性是指估计值是样本值的线性组合,即加权线性平均,无偏是指理论上估计值的平均值等于实际样本值的平均值,即估计的平均误差为0, 最优是指估计的误差方差最小。

3)最小曲率法

最小曲率法广泛用于地球科学。用最小曲率法生成的插值面类似于一个通过各个数据值的,具有最小弯曲量的长条形薄弹性片。最小曲率法,试图在尽可能严格地尊重数据的同时,生成尽可能圆滑的曲面。

使用最小曲率法时要涉及到两个参数:最大残差参数和最大循环次数参数来控制最小曲率的收敛标准。

4)多元回归法

多元回归被用来确定你的数据的大规模的趋势和图案。你可以用几个选项来确定你需要的趋势面类型。多元回归实际上不是插值器,因为它并不试图预测未知的 Z 值。它实际上是一个趋势面分析作图程序。

使用多元回归法时要涉及到曲面定义和指定XY的最高方次设置,曲面定义是选择采用的数据的多项式类型,这些类型分别是简单平面、双线性鞍、二次曲面、三次曲面和用户定义的多项式。参数设置是指定多项式方程中 X 和 Y组元的最高方次 。

5)径向基本函数法

径向基本函数法是多个数据插值方法的组合。根据适应你的数据和生成一个圆滑曲面的能力,其中的复二次函数被许多人认为是最好的方法。所有径向基本函数法都是准确的插值器,它们都要为尊重你的数据而努力。为了试图生成一个更圆滑的曲面,对所有这些方法你都可以引入一个圆滑系数。你可以指定的函数类似于克里金中的变化图。当对一个格网结点插值时,这些个函数给数据点规定了一套最佳权重。

6)谢别德法

谢别德法使用距离倒数加权的最小二乘方的方法。因此,它与距离倒数乘方插值器相似,但它利用了局部最小二乘方来消除或减少所生成等值线的"牛眼"外观。谢别德法可以是一个准确或圆滑插值器。

在用谢别德法作为格网化方法时要涉及到圆滑参数的设置。圆滑参数是使谢别德法能够象一- 18 -

Surfer8绘图指南

个圆滑插值器那样工作。当你增加圆滑参数的值时,圆滑的效果越好。

7)三角网/线形插值法

三角网插值器是一种严密的插值器,它的工作路线与手工绘制等值线相近。这种方法是通过在数据点之间连线以建立起若干个三角形来工作的。原始数据点的连结方法是这样:所有三角形的边都不能与另外的三角形相交。其结果构成了一张覆盖格网范围的,由三角形拼接起来的网。

每一个三角形定义了一个覆盖该三角形内格网结点的面。三角形的倾斜和标高由定义这个三角形的三个原始数据点确定。给定三角形内的全部结点都要受到该三角形的表面的限制。因为原始数据点被用来定义各个三角形,所以你的数据是很受到尊重的。

Surfer采用的数学模型,几乎包括了目前所有的模型类型。一个软件就具有如此种类繁多的数学模型,这是其它软件所不能比拟的。

3.2 Surfer如何将所绘图形进行输出

在Surfer中做好图以后,可以按F2键,再按ctrl+c,就可以将图形复制到剪贴板,可以直接粘贴到word文档中。 此外,还可以通过File | Export 菜单输出各种格式的图形(如jpeg, wmf,eps等)。值得注意的是,Sufer输出的eps图形并不好(一般文件体积太大),可以用eps打印机进行eps图形的输出。用虚拟打印机生成eps或ps文件的方法如下:

1) 安装一款支持EPS打印的虚拟打印机。开始 | 设置 | 打印机,双击“添加打印机”从添加打印机中找到HP Color LaserJet 8500 PS打印机,然后缺省安装,在输出端口选择file,这样就有了一台将文件打印到指定文件的虚拟eps打印机。

2) 在Sufer中绘制好图形,选择File | Print,选择已经安装好的eps打印机,在PostScript中的输出选项设置为:内嵌的PostScript(EPS),这样就可以将图形打印到指定的文件(注意,文件名要用.eps或.ps结尾)。当然,.在打印时要设置为:输出到文件。

这样就可以输出矢量图形(eps图形广泛应用在各种期刊杂志上,尤其是国外的期刊,一般都接收eps格式的图形文件)。

3.3 Surfer如何忽略(或设置)缺省值

方法一: 打开菜单Grid | Data…选择需要Grid的文件,单击确定,在打开的Grid Data对话框中“Data Columns”中找到“Filtering Data…”按钮,打开“Filter”对话框,在其中的“Data Exclusion

Filter”对话框中输入需要Filter的缺省值,例如: Z>9999.9 或 Z<1.0e-10 等,就可以对Z的数据进行忽略缺省值。当然,还可以设置X和Y值的范围,对所取的范围进行Grid,例如: X>=10

Y>=19 Z=1.0e-10等。设置好后,单击确定,就可在Grid的过程中将缺省值忽略。(注意,此时缺省值的地方仍会出现插值结果,所以不是真正的忽略缺省值,也不是真正的blank)

方法二:在写数据文件(XYZ)时,将缺省值转换为任意字符,同样可以达到此目的。如在缺省值前加一个字母“q”,或用引号将数据值括起来,都是可以的(此方法类似于方法一的效果,不是真正的忽略缺省值,也不是真正的blank)。

方法三:将Grid文件格式写成ASCII的形式,在Z的最大最小值中将缺省值排除在外即可。如,对于海洋气压数据,陆地上的缺省值为0.0 (或1.0e-10),则Z的最小、最大值可设置为950.0

1100.0,这样的话,同样可以将缺省值排除(这是一个真正的可行办法,但在缺省值边缘可能会出现等高线过于密集的情况,不太符合实际情况,也不美观)。

- 19 -

§3 图形绘制的技巧

方法四:在surfer中,缺省值是1.70141e38(或大于此数,建议大家写成2.0e38,没别的原因,好记啊),因此需要blank的地方可以直接设置成此值。如果你已经生成了grd文件,那么在做此项处理时是比较费时的(至少我不喜欢在将数据重新写一次)。除了应用以前提到的用blank方法(采用bln文件进行blank)外,Surfer还提供了一种比较简单的方法,即Math方法。打开Grid | Math…,在Open Grid对话框中选择需要进行blank的grd文件,如,点击“打开”,就会出现Grid Math对话框,而会出现在“Input Grid File A”对话框中,更改“Output Grid File C”中的输出文件名,如,然后在下面的“enter a function of the form c=" 中输入类似的函数即可“ c=if(a<80,1.70141e38,a)”,这个句子的意思是在输出文件c中写入a文件的值(),

当a中的值小于80时,替换为1.70141e38, 大于80时,值不变。 点击“ok”就会获得blank后的grd文件。 再给一个例子,假如你的文件中的缺省值已经设为了0, 则可输入“c=if(a=0, 1.70141e38,

a)"。同样“c=max(a, 0) ”将所有的负值替换为0。关于此处函数的写法,请参考Help中的“Function”项。再补充一点,在Math方法中,还可以对两个不同的grd文件进行数学运算,即在Grid Math对话框中可以打开另外一个grd文件(2个grd文件的结构应该是相同的),则用以下function可以对两个grd文件中的对应值求和“c=a+b”。

Tips:什么是白化(Blank)?

Blank是将数据网格点从一个grd文件中去除的过程。具有blank属性的格点被赋予了一个特殊的数值(1.70141+e38)。具有blank属性的格点在画图(等高线)的过程中不会显示出来。

3.4 如何正确的设置label

Surfer中等值线的标注应该可以在label里自己设置,但为什么我设置后有的标注了有的却根本不标注?在Grads里只要设置set cint **,等值线都很听话得被标注好了。surfer为什么不听指挥?为什么有的标注挤在一起,其它地方却很空?

你的等高线间隔太密,所以没有合适的地方标出label。Surfer会自动调整其label显示的地方,判断是否适合显示。如果你一定要标注出label,可以试试下面的方法:

1) 将等高线的密度调疏,然后标注。

2) 你的label的字体(font)太大了,在图中写不下,所以标注不出来,你可以将其设置为更小的字号,如果合适的话,应该能标出所有的label。

3) 可能你的整个图的尺寸太小了。这种情况经常发生在你有一个很大范围的底图,但等高线的范围相对底图很小时,如果将二者Overlay Map,也会标不出label,此时可以将底图的范围调小,这样可以比较好的进行标注。

Surfer8中的label可以进行手工调整,菜单命令Map | Contour Map| Edit

。你可以试着将标注好的label用鼠标拖动的方式移动位置,这样就可以将挤在一起的label进行疏散了(注意,如果再次调用自动标注,则所有的标注调整都将丢失,必须重新进行)。

- 20 -

Surfer8绘图指南

3.5 overlay是什么含义?

简单的讲,譬如你有两幅图, 一副的坐标为全球,一副可以是全球,也可以是全球的局部, 你想把两幅图的坐标精确对齐,如果用手动调节的话,肯定不精确,这时就可以采用overlay方法. 首先将两幅图都选中,在执行Map | Overlay Maps后就可以将两副图形精确对齐了。

3.6 做2维矢量图,能设定不同流速用不同的箭头比例长度吗?

可以。譬如在两维vector map的属性中,有scaling项,在scaling中可以选择1)线性 2) log(对数) 3) square root(均方根)三种方式,都可以用来解决此问题,且不需要改变本来的数据,这应该是上上策. 此外,你还可以设置其中的sharft length的最大最小值的长度,同样可以解决此问题,只要对scaling中的参数多加调整,一定会作出漂亮的图形.

3.7如何在VB中调用surfer8?

可以参考很多有关这方面的学术文章,可以在“中国期刊网”、“维普数据库”等用VB和Surfer做关键词进行搜索,可以找到这方面的文章。当然,也可以参考sample目录下的BAS例子,详细的参考下的Surfer Automation,有所有的对象层次说明和使用指南(基于scripter)。下面的内容来源于:杨朝辉,等, 基于surfer

automation技术的三维立体渲染图的绘制, 海洋测绘, vol.23, No.4 , p26-28. 2003.

客户程序与surfer服务器的通讯

开发者必须首先引用surfer的application对象,才能在客户程序中与surfer主程序通讯。...在VB的"引用”选项中勾上“surfer 8 type library”,然后输入引用application对象的代码,就完成了对surfer的application对象的引用。即实现了与surfer服务器的通讯。

代码片断:

‘定义surfer的各层对象

Dim SurferApp As New ation

Dim PlotDoc As ocument

Dim MapFrame As ame

Public SurfaceMap As ce

把数据文件C:/ 转为格网文件 "c:/"

'algorithm 参数表示内插方法

ta DataFile="c:/",

xCol:=1,yCol:=2,zCol:=3,Algorithm:=1,-

ShowReport:=False, OutGrid:="c:/"

- 21 -

§3 图形绘制的技巧

Set PlotDoc=(1)

Set MapFrame=face("c:/")

Set SurfaceMap=ys(1)

'输出生成图像

FileName:= "c:/",

Options:= "Width=400,Height=500"

e=LoadPicture("c:/")

'在客户GIS系统中显示三维立体渲染图

3.8 请问surfer8.0自带的sample2是怎么做出来的?

图3-1

首先在surfer8中先画出Wireframe图,再画等高线图,将等高线图拖到上方一点,双击等高线图,在view选项中修改rotation为45,tilt为25(拉滚动条就可以了),ok.再用手工画上三条竖线,调整一下就可以了(图3-1)。此外,有时候,我们需要将一张底图代替上面的等高线图,但底图是不能用3D的形式来调整的,如果我们想把底图放的平一些的话,就会毫无办法。那么,该如何做到呢?其实,很简单的一个小技巧,估计你已经猜到了,就是先将底图与等高线overlay map,然后去掉等高线(将其线型选为空,且不填色),就可以将底图与等高线等同对待,任意调整了(图3-2)。

图3-3也是wirefare和contour图的结合(overlay map)得到的。数据文件为。图3-2

值得注意的是,图形边缘的浅紫色的部分是通过wirefare属性中gernal中的base下面的line的line width调整为比较大的值获得的。

3.9 surfer提供了许多种空间插值画等值线的功能,但如果能把这些格点数据读出来,那就会大大方便作资料处理,它格点化后的数据是什么格式的?

图3-3

一般讲,通过surfer的grid进行插值生成的文件是二进制的,不能直接利用,可以采用surfer自带的工具将其转换成ASCII码文件,这样就可以利用了。

- 22 -

Surfer8绘图指南

具体操作:首先生成插值的grd文件,然后用Grid | 将其转换成ASCII码的xyz文件即可。

3.10 图3-4是如何做的?

此图为Contour+Wirefarme+Classed Post Map三图组合,Contour染色,Wireframe去掉线,Classed Post Map使用3d label line,长度1cm。

3.11 如何blank多个多边形的外部数据?或用blank命令截图的时候老是显示entire grid was blanked - not saving,请问这是什么原因造成的?(请参考问题及解答:/cgi-bin/forum/?forum=3&topic=986)

当对多个多边形区域外的数据进行blank时,会出现问题,不能给出正确的blank结果。如果A多边形外部区域包含B多边形的内部区域,且B多边形的外部区域包含A多边形的内部区域,譬如A是陆地,B是海岛,则不能同时得到这两个区域里面的等高线,所有的多边形区域都会被blank掉(图3-5)。解决这个问题的方法是将A和B两个多边形组合为一个多边形,将两个区域连城一个区域(图3-6)。譬如有如下的bln文件(两个单个的多边形):

5 0

1.0 1.0 "Polygon A"

1.0 2.0

2.0 2.0

2.0 1.0

1.0 1.0

5 0

3.0 2.0 "Polygon B"

4.0 2.0

4.0 3.0

3.0 3.0

3.0 2.0

图3-4

图 3-5 当blank多个多边形的外部时,会对整个区域blank,即多边形内部也会被blank。

则在blank等高线外面的区域时会出错,(即不能只显示多边形中的等高线)。将文件作如下改动:(连成一个,即从第二个多边形起,在末尾加上第一个多边形的起点,再将所有的多边形作为一个多边形即可)用此bln文件作blank,而用原来的bln文件作底图即可。

- 23 -

图3-6 将两个多边形变成一个多边形,可以解决此问题

§3 图形绘制的技巧

更改后的bln文件(组合为一个多边形):

11 0

1.0 1.0 "Polygon A"

1.0 2.0

2.0 2.0

2.0 1.0

1.0 1.0

3.0 2.0 "Polygon B"

4.0 2.0

4.0 3.0

3.0 3.0

3.0 2.0

1.0 1.0 "Repeat 1st vertex"

图3-7

3.12沿某条曲线(不闭合)进行blank

如果有如下bln文件,代表了一条竖线,X坐标为4,Y坐标从0到5。

4 0 (或1)

4. 0.

4. 1.

4. 2.

4. 5.

则绘出图3-7所示图形,即如blank的flag为0,blank左边,如果flag为1,blank右边。同时,只显示此曲线范围的等高线。

3.13 剖面线(slice)的用法

slice是做剖面的意思。如图3-8,现有一counter文件,数据如图,想沿红线作一剖面,即想知道红线各点的高程值(z值)。红线是一bln文件,即几个点的坐标,当然也可以同时是几条剖面线,这里只给出一条的例子。那么怎么得到剖面的值呢。首先要有数据文件的grd形式和剖线的bln文件,然后在Grid |

Slice选中grd文件,再在打开的新对话框中选中剖线的bln文件,在打开的Grid Slice对话框中有两项选择,一是输出的bln文件,会输出三列,第一列为剖线的x坐标,第二列为剖线的y坐标,第三列为剖线点上的z坐标(即与等高线交点的z坐标)。一般此文件用处不大。第二个输出的是数据文件,请选择其名称。- 24 -

图3-8

图3-9

Surfer8绘图指南

此文件输出5列,分为剖线所在的x,y,z,剖线长度积累值,即第一点为0,其它各点的值是到此点的距离,最后一列为剖线标记,数字不同代表不同的剖线,相同代表同一条线。再下面是两个缺省值的设定,可以不去管。点ok,就会生成剖面数据。剖面数据的显示可以有两种方法,一是用Surfer的Post Map或Classed Post Map,即显示剖面数据的x,y和z,如图3-9所示。其次可以分别以第1,2和4列数据分别作为x轴,第3列列作为y轴,作两维图形显示各个剖面的结构(图3-10)。

3.14 图片可以做basemap,但是surfer自动给出的图片坐标是从0开始到几百,这是按什么原则出来的,象素点吗?可以更改上面的坐标吗?

在surfer中应用这样的Basemap很简单,首先选择Map|Basemap将此图片输入到Surfer中,注意不是File | Import命令,双击输入的图片,更改其坐标为合适的值即可。

3.15 Surfer8可以做地图投影吗?

surfer8本身不具备作投影图形的功能,一般的情况是用投影程序将数据先进行投影,再作图,这里介绍一个与Didger的结合实现作投影图的功能。

图3-10

用Didger导入surfer的dat数据文件。导入时确定投影类型,并设置投影参数,输出成dat文件。因其输出时将Z值去掉了,所以得再将原dat数据中的Z值加入到新产生的dat文件中。重新网格化就可以作图了。

(1)打开Didger3,File---> Import Data File -->(数据文件名) -->选择X,Y所对应的列,按Import --> Projected Coordinate -->确定

(2)在导入的图形中,点鼠标右键,选Change Projection,在System中选欲投影的类型,在Setting中设置投影参数。

(3)File --> Export --> 输出文件名,类型选Golden Software Dat文件。

(4)在Surfer中,将原数据文件Z值复制到新产生的dat文件中。重新网格化作图。

另外可以自己生成一个区域文件用于blank,将新产生的grd网格文件中投影以外的区域blank掉。

- 25 -

§3 图形绘制的技巧

为了在投影后的图形中显示投影后的网格线,可以自己生成一个格子文件,用上面同样的方法在Didger中将其进行投影,再在Surfer中将其Overlay ,这样就可以产生一个带有网格线的投影图了。

P.S.听说Surfer已经把地图投影加入到了用户需求列表中了,但不知道在哪个版本可以实现,况且,很长时间没有surfer的新版本了。

3.16制作剖面平面图(来源于动力论坛ppccxx)

使用SUFFER制作剖面平面图的原理是利用它的网格立体图制作功能,首先制作出网格立体图,然后通过图形旋转、编辑,将网格立体图转换为符合要求的剖面平面图。制作思路如下:

使用SUFFER制作形成的网格立体图,如图一所示,Z(假设为测点)、Y(假设为测线)坐标轴分别指向左前方和后前方,X轴向上。

去掉Y、Z方向的线条,再将图形旋转至X轴水平、Y轴垂直的方向,删除Z坐标轴,添加上各测线的零值轴线和适当的注记,将网格立体图转变为如图2所示的剖面平面图。

绘制剖面平面图的步骤(以版本为例)

3.1生成网格化文件:在主菜单用Grid/data(网格化/数据文件)选项对原始数据文件进行网格化;

3.2生成网格立体图:在主菜单用MapWireframe(成图/网格图)选项从网格化文件生成网格立体图;

3.3旋转网格立体图:选中网格立体图,然后用Map/3dView(成图/三维视图)选项将图形旋转到Y轴向上、X轴水平位置;

3.4设定图形纵横比例尺:选择网格立体图,用主菜单Map/Scale(成图/比例)选项调出图件比例对话框,在对话框中清除Proportional XY Scale(XY同比例)复选项前的“√”标志,根据需要分别设定X、Y、Z坐标比例尺;

3.5添加剖面零值线:双击图形的Y坐标轴,在弹出的坐标属性对话框中Grid Line(网格线)选项中选中Grid Line Show(显示网格线)选项;

3.6编辑坐标轴及标记:选中网格立体图,单击主菜单Edit Object manager(编辑物体管理器)选项,使Object manager(物体管理器)出现标志“√”,然后展开屏幕左边的Map树状目录,去掉Z坐标轴前的“√”标志并根据需要选择其它的坐标轴显示,再双击图形中的相应坐标轴进行坐标轴及注记的编辑,即可完成该剖面平面图的制作。

绘制剖面平面图中需要注意的几个方面

4.1数据网格化时,为了使形成的剖面平面图坐标轴与通常习惯一致,最好将数据文件中的测点号作为X坐标,测线号作为Y坐标,X、Y方向间距必须分别等于测点距和测线距。为了方便,在编辑数据文件时,可以将物探测网的测点号数据置于第一列、测线号置于第二列,第三列以后的各列分别存放改测点的物探观测值。

4.2绘制网格立体图时,在网格立体图属性对话框的Option中,除了在 Plot

- 26 -

Surfer8绘图指南

LinesofConstant(绘制等值线)静态框中的Y复选项打勾外,其余复选项全部不选;并将Elevation (高程)编辑框中的数值改为0。

4.3在进行网格立体图旋转时,应该选中Orthographic(正交)复选项、设置旋转角为0度,为了便于比例尺变换,倾斜角最好设为30度。

4.4由于剖面平面图是倾斜立体图转换而来,为了纠正倾斜影响,在倾斜角等于30度时,X轴比例尺的数值应该等于Y轴比例尺的两倍才能使实际打印出的剖面平面图X、Y方向比例一致。

4.5如果图件的图廓等注记比较复杂,可以将形成的剖面平面图输出为DXF格式文件,转到Autucad中进一步编辑处理。

3.17 如何调整色标(Color Scale)为水平?

Surfer8中的色标的缺省方式都是垂直放置的,当然Surfer8的中英文版也可以画出水平色标来,只是英文版的提示不清楚,如图3-11。在英文版中,等高线图填充方式时,色标属性窗口中应该是label angle的说明写成了label,只要调整此数值为90或270就可以得到水平的色标。如果是用3D-Surface的方式作图,则不会出现此问题,这里的标志非常的清晰(图3-12)。

图3-11

图3-12

3.18 能否设置类似GMT等软件中的黑白相间的色标?

如图3-13,我们经常看到如图所示的带scale bar的地图,那么怎么实现呢?很简单,首先画出世界地图的底图,用鼠标选中所画底图,打开菜单Map| Scale bar…设置number of数字,如右图的x轴则设为12,cycle设为30,label随便设一个(因我们在此不显示它),再设置右边labelsÆfonts中的points为0,及实现了不显示label。然后调整scale bar的位置,- 27 -

图3-13

§3 图形绘制的技巧

使其与底图吻合。至于y轴,同样的道理,只不过要将scale bar首先旋转90°或270°,再调整参数即可。需要注意的是,此处显示的label是底图本身的,可以调节它的位置,这样配合scale bar就可以做出令人满意的效果了。

3.19 我想用bln文件来blank一个多边形的外部,此时,如果用此bln文件来做底图(Base Map),为什么不能对外部区域进行填充(Fill),而只能填充多边形的内部?

Map | Base Map 菜单不具备填充多边形外部的功能,但可以用其它的方法来代替。这里介绍两种方法。第一种,非常简单的方法,你可以用blank后的grd文件做等高线等图形,双击所作的图,可以看到Blanked Rigions,在此下面有Fill一个选项,你可以在这里选择需要填充的颜色等。第二种方法,稍微麻烦一点,那就是吧bln文件进行修改。这个方法,类似于3.11节的方法。假设你想要填充图3-14中的白色正方形(1,1)到(2,2)外面的区域,而整个图形的区域从(0,0)到(9,7),那么你可以这样更改bln文件(如图3-14),将其变成一个多边形。

11

0.0 0.0 "(x1,y1)"

9.0 0.0

9.0 7.0

0.0 7.0

0.0 0.0 "重复(x1,y1)来闭合外部多边形."

1.0 1.0 "开始内部多边形.

2.0 1.0

2.0 2.0

1.0 2.0

图3-14

1.0 1.0 "闭合内部多边形.

0.0 0.0 "重复(x1,y1)来闭合外部多边形."

这个bln文件用一根线将两个多边形连接了起来,从而变成了一个多边形。为了更好的作图,可以设置此bln为Base Map,且线条为不可见,或是将bln文件改为BNA文件,这样就不会显示两个多边形的连接线。

下面是修改后的BNA文件

"","",11

0.0 0.0

9.0 0.0

9.0 7.0

0.0 7.0

0.0 0.0

1.0 1.0

2.0 1.0

- 28 -

Surfer8绘图指南

2.0 2.0

1.0 2.0

1.0 1.0

0.0 0.0

3.20 什么是Breaklines?

Breaklines是一个三维的线(x,y,z)。当grid算法发现breakline时,它会在breakline上寻找离grid点最近的z值,然后与附近的grid点组合来计算该点的z值。一般surfer用线性插值来确定breakline上的z值。当有breakline时,grid算法可以穿过此线到另一侧寻找值,这一点与后面讲到的断层(faults)有明显区别。如果一个点在breakline上,那么,这个点采用breakline的值。Breakline主要应用在定义流线、山脊和其它的斜坡中断。

图3-153.21 怎样做出漂亮的底图?

如图3-15是中国地区的底图,数据来自,下载地址/mgg/global/reliefgrid格式)/ETOPO2/。区域的地形数据(surfer8

可以用我给的在command命令行方式下来生成,然后可以直接在surfer8中绘图。此图用3D Surface来绘制彩色的底图,对于底图绘制的技巧是,z方向的长度要设置的比较小,这里用了0.5cm,这样底图的边缘比较整齐,其可以看出立体效果。色彩的调整可依据个人的爱好,主要是将0值附近的色彩调好即可。做完底图后,可以加上中国的边界图,这时需要注意的是不能用overlay来做,可以自己试试看,主要是这样的话底图色彩会变化,且边缘突兀。这里用到另外一个小技巧,即首先将底图和边界图的经向limits设置成统一的值,然后可以从底图scale中看到经向的长度,将边界图的经向设置为同样的长度即可。最后将边界图与底图手工对齐即可。

76543210A5432100B123456789图3-16

- 29 -

§3 图形绘制的技巧

3.22 关于断层(Faults)的用法

断层文件是一个BLN文件,里面包含了断层的点数和每点的XY坐标值(如图3-16中的红线所示)。并不是所有的GRID方法都支持断层,只有少数几种方法才支持断层GRID,如Inverse Distance to a Power,Minimum Curvature,Nearest Neighbor,Data Metrics,这几种方法才能应用断层,但值得注意的是,其中的中间两种方法有可能会导致应用断层数据进行GRID时出现错误。如果断层数据是一个闭合的多边形,则只GRID多边形内部的值。

图3-16是采用Surfer自带的数据文件用Inverse Distance to a

Power方法进行grid的结果,图3-16A没有应用断层数据,图3-16B应用了断层数据。当应用断层数据grid时,只搜索断层一侧的值进行grid,图3-16A和图3-16B在断层附近具有明显差别。

应用断层数据的具体方法是,首先生成所需的断层BLN文件,如图3-16A中的红线,然后对原始数据(dat文件)进行grid。选择Grid | Data菜单,然后选取所需的dat文件,在Grid Data对话框中选择grid的方法,必需为以上所说的4种之一,在advanced

options中选择Breaklines and Faults选项卡,接着在下面对应的Faults Traces中选择断层BLN文件,接着进行GRID就可以得到包含断层信息的grid文件,用Contour进行绘图就可以了(如图3-16B,图中的断层是自动的,不像图3-16A是自己手工加上的)。

3.23 英文版surfer8中输入中文坐标名的方法

上轴和下轴直接输入中文就可以了,字体最好选宋体,不然汉字之间的间距可能较大。

左轴:(1)先在Title中输入中文,如“你们好”,这里要根据中文的排列形式对所输入的汉字进行回车处理,如我想把汉字显示成从下到上的侧放形式,就得把“你们好”改输成“好们你”,然后把光标移到“好”字后,按<CTRL>+回车,依次把每个汉字排成竖放的形式。

(2)在angle中选270度,这一步是纵轴汉字乱码的主要原因,选270度一般就不会乱码了。

7654好们你321001234你们好56789图3-17

(3)把字体选成"@宋体",注意宋体前有个“@”,如果没有这样的字体,则需安装汉字库。

总之注意三点:

- 30 -

Surfer8绘图指南

(1)上下轴angle选0度,左右轴选270度。

(2)字体选“宋体”或“@宋体”

(3)注意汉字的排列形式。此外,在文本工具中输入汉字也是类似方法,只是在写纵轴方向的汉字时,不用调整任何角度而已。

输出的图形如图3-17所示。

3.24 Surfer中能否将Y值反向(颠倒)标注?

Surfer中标注的纵坐标的缺省方式是从下到上按从小到打排列(如图3-17),那么能否将Y坐标反向呢?即上面的标注小,下面的标注大呢?一般将,surfer不能自动做这件事情,不过可以用替代方法。第一种方法,将Y坐标都加一负号;第二种方法,在surfer中用Grid | Transform | Mirror Y对纵坐标做翻转,用新的数据作图即可(但需要手工标注label)。

- 31 -

§3 图形绘制的技巧

- 32 -

§4 Surfer8与Script

Surfer8除了可以手工绘图外,还可以调用其Script语言,从而自动处理图形,这是surfer的高级应用,也是批量成图的最简单方法。关于script语言,在这里只给几个简单的例子,更详细的内容将在以后给出。

4.1 建立和打印等高线图(Creating and Printing a Contour

Map)

This example automates the process of creating a contour map to visualize

changes in groundwater levels. The script prompts the user for a data file,

creates a grid from the file, creates a contour map, prints the map, and saves

the map in a Surfer file [.SRF].

Sub Main

'Declare object and string variables used in the script

Dim SurferApp, Plot, ContourMapFrame, ContourMap As Object

Dim InFile, GridFile, BaseName As String

'Create the Surfer Application object and assign it to the "SurferApp"

variable

Set SurferApp = CreateObject("ation")

e = True 'Make Surfer visible

'Prompt the user for the name of the data file to process.

InFile = GetFilePath("","DAT;TXT;CSV;XLS",CurDir(), "Select data file", 0)

If InFile = "" Then End 'Can't continue: no file was selected

'Get file name without the extension (for example, "" becomes

"week5")

BaseName = InFile

ExtStart = InStrRev(InFile,".")

If ExtStart > 1 Then BaseName = Left(InFile,ExtStart-1)

'Create a grid from the specified data file using the Kriging algorithm

GridFile = BaseName + ".grd"

ta DataFile:=InFile, Algorithm:=srfKriging, _

DupMethod:=srfDupNone, ShowReport:=False, OutGrid:=GridFile

'Create a plot document in Surfer and assign it to the variable named "Plot"

Set Plot = (srfDocPlot)

- 33 -

§4 Surfer8与Script

'Create a contour map. Assign the map frame to the "ContourMapFrame" variable

Set ContourMapFrame = tourMap(GridFile)

'Assign the contour map properties to the variable named "ContourMap"

Set ContourMap = ys(1)

ntours = True 'Fill the contour map levels

ut 'Print the page on the default printer

(BaseName + ".srf") 'Save the map

End Sub

4.2 打开、保存和关闭文档(Opening, Saving, and Closing

Documents)

The Documents collection provides access to the Surfer file commands. Use

the Document object’s "Open" method to open an existing plot, worksheet, or

grid file. Use the Add method to create a blank plot or worksheet. The SaveAll

method saves all open documents, and the CloseAll method closes all open

documents. To save or close an individual document, use the Document object’s

Save, SaveAs, and Close methods.

Sub Main

Set srf = CreateObject("ation")

e = True

' Create a blank plot

srfDocPlot

' Create a blank worksheet

srfDocWks

' Open an existing plot

filename$ = GetFilePath(,"SRF")

if filename$ <> "" Then

filename$

End If

' Open the sheet named "Sheet1" from an Excel file

filename$ = GetFilePath(,"XLS")

If filename$ <> "" Then

filename$, "Sheet=Sheet1"

End If

' Close the active document

- 34 -

Surfer8绘图指南

' Save the active document using its current name

If Not Then

End If

' Save the document whose window caption is "Plot1"

nts("Plot1").SaveAs "MyDocument"

' Close all documents

ll

End Sub

4.3 Overlaying Maps

To overlay maps in a script, you must first select the select the map or

MapFrame objects to be overlain, and then call the Selection collection抯

OverlayMaps method. The following subroutine demonstrates how to overlay maps:

Sub OverlayMapsExample(mapframe1 As Object, mapframe2 As Object)

' Retrieve the parent PlotDocument object

Set plot =

' Clear all selections and then select the two MapFrame objects

ctAll

ed = True

ed = True

' Overlay the selected maps

yMaps

End Sub

The subroutine would be used like this:

Sub Main

' Start Surfer and create a blank plot document

Set srf = CreateObject("ation")

e = True

Set plot = (srfDocPlot)

' Create a contour map and a vector map

gridfile$ = + ""

Set map1 = tourMap(gridfile$)

Set map2 = torMap(gridfile$)

- 35 -

§4 Surfer8与Script

' Call the example subroutine to overlay the maps

OverlayMapsExample map1, map2

End Sub

Stacking maps is similar to overlaying them. Call the Selection collection

StackMaps method rather than the OverlayMaps method

4.4 修改坐标轴(Modifying Axes)

Axis settings may be changed using the Axis object. You access Axis objects

through the Axes collection object, which in turn is accessed through a MapFrame

object. The following example does not use subroutines, but you could write the

script with subroutines instead.

Sub Main

' Start Surfer and create a blank plot document

Set srf = CreateObject("ation")

e = True

Set plot = (srfDocPlot)

' Create a contour map

gridfile$ = + ""

Set mapframe = tourMap(gridfile$)

' Turn off screen redrawing to speed up this procedure

old_update_setting = Updating

Updating = False

' Adjust the left and bottom axes

For Each axis In

If pe = srfATLeft Or pe = srfATBottom Then

With axis

.MajorTickType = srfTickCross

.MinorTickType = srfTickIn

.MinorTickLength = 0.1

.MinorTicksPerMajor = 9

.ShowMajorGridLines = True

. = 0.03

End With

End If

Next

' Restore the previous screen setting

Updating = old_update_setting

End Sub

- 36 -

§5 结束语

你所看到的这个电子版的“surfer8绘图指南”是在“Surfer8初学者中文参考手册”的基础上完成的。在写作过程中,作者得到了动力论坛(/cgi-bin/forum/ )上众,在此,对这些朋友表示由衷的感多网友的支持,也引用了动力论坛上的部分内容(恕不一一列出)谢,并请大家多提宝贵意见,使得每个需要的人都能学好用好surfer。再次感谢朋友们关注surfer作图。

任何问题和建议请发送到

addison0220_cn@“surfer8绘图指南”下载地址:/

2006-6-1

东湖梨园

37

本文标签: 文件进行数据图形绘制