陈育民博士书中关于FLAC3D建模的例5-2是郑文棠博士编写的土岩双层建模的FISH程序,例中郑博士的原始数据是通过Surfer软件获得的,很多读者对用Surfer怎么获取这一系列数据的过程不是很清楚,笔者没有用过Surfer,同样也不清楚,因此琢磨出一条用ArcGIS插值生成GRID图形文件的方式来获取网格数据。 笔者是学地质工程的,大多数时候拿到的原始资料就是一张测绘过的CAD地形图,详细步骤如下: 1. 打开工作区的CAD图件,将除了等高线所在图层和0图层以外的其他图层删除(也可以不用删,只不过在MapGIS中选择不转出的图层数量比较多罢了),然后将其另存为AutoCAD 2000的dxf图件,注意此处一定要存为这个格式,其他格式貌似不能用ArcGIS打开。(此时别急着关AutoCAD,一会还有用) 2. 打开ArcMAP,用 键添加名为Drawing1的dxf文件,在添加的时候注意当找到Drawing1文件后,双击打开,里面还有几种不同的文件,对于等高线我们就只选择Polyline这种多段线的形式就可以了。如图所示: 右键点击文件名Drawing1.dxf Polyline,选择Open Attribute Table属性表,可以看到每一条线的属性,由于等高线的高程是原始CAD图形中往往就存在的,所以Elevation一项就有明确的数据显示,作为示例笔者也是事先在CAD中对每一条线赋上了多段线的标高值。 3. 打开Toolbox, 按照Spatial Analyst Tools——Interpolation——Topo to Raster的路径打开,在“Input feature data” 对话框里下拉选择文件Drawing1.dxf Polyline,此处要注意的是一定要把Field栏中的属性名称下拉改为“Elevation” ,因为是做等高线的插值。在最下面的“Output cell size”中填入输出的网格大小,此处可以随便填,在下一步转换为GRID文件输出网格大小的时候才需要输入你设计的网格大小。步骤5如图所示: 生成图形的效果: 4. 对生成的lineraster图形文件点击右键,选择“Data”下级菜单中的“Export Data”,在Cell Size中填入X Y方向的网格大小,在Format栏中下拉选择“GRID”格式,选择存储路径和文件名确定,再一次强调注意存储的路径一定不要出现中文,尤其不要把文件放在桌面上。如图所示: 生成的格网文件如图所示: 5. 本例共生成了81列,49行,可以通过该图层的Properties查看 本例中最左上角的网格中心的坐标大概是(280,1050),那么在CAD中先按这个坐标画出一个点,然后用CAD的阵列功能,向X的正方向阵列81列,向Y的负方向阵列49行,行列偏移为负,正20,然后将这个点阵文件存为AutoCAD2000的dxf,还是用步骤2中添加等高线的方法把这个点阵文件Drawing2添加进来,只不过在选择型文件的时候注意选择Point,如图所示: 可以看到大概在每个网格的中心都有了一个点,这些点就是建模所需的点,现在来获取这些点的三维坐标。 6. 在Toolbox中按照Spatial Analyst Tools——Extraction——Extract values to points的路径打开,在Input point feature一栏中下拉选择点阵Drawing 2.dxf Point文件,在Input raster一栏中下拉选择黑白的linegrid的GRID图形文件,指定输出路径后点击OK确定,会生成一个和Drawing 2.dxf Point图层一样的点阵图层,打开这个点阵图层的属性表可以看到属性表的最后一列多出了一项RASTERVALUE的属性,这些值就是每个点所对应的linegrid的底图上相应位置的值,也就是这些点的高程值,如图所示: 7. 接下来要将每个点的X Y坐标添加到属性表中再输出就可以得到每个点的三维坐标了。在Toolbox中按照Data Management Tools——Features——Add XY Coordinates的路径打开对话框,选择刚才生成的含有RASTERVALUE属性的点文件,点击OK确定后再打开这个点文件的属性表,可以看到在RASTERVALUE后面两列中出现了POINT_X和POINT_Y两个属性列,当然这两列的意思就不用我多说了哈。如图: 8. 点击属性表的“Option”按钮,选择Export,这个路径就可以随意选择了,确定后将会输出格式为dbf的属性表。在相应位置找到这个dbf的文件,用Excel打开,就可以对这些数据进行进一步的编辑和处理了。 再啰嗦几句,打开dbf表格后首要的处理当然是删除那些没用的属性列了,然后将RASTERVALUE这一列放到POINT_Y后面去。从表中X和Y数据可以看出,数据是按照从上到下,从左至右的顺序排列的,也就是从上到下将每一列的三维坐标列出后再列出第二列的,直到最后一列。而郑博士程序的原始数据Surfer_Data是按照从最下面一列的最左边往最右边排列数据的,所以要用郑博士的程序的话应该对这个dbf全表按照Y值的升序进行排列;另外郑博士的第二层基岩的数据是直接将表层的标高减3得到的,这个过程在Excel里面当然也很好操作,最后你可以新建一个txt文档,将这几列数据复制粘贴进去,也可以在Excel里面另存为的时候将“保存类型”选择为“文本文件(制表符分隔)”也行。当然,按照郑博士的做法,你只要把这个文本文件的后缀名改成dat就可以了。 最后奉上本文例中的FLAC3D模型,对郑博士程序仅改动了几个参数,如下: COMMAND文件中的改动: Col_Num=81 Row_Num=49 dx_size=20 dy_size=20 xor=280 yor=90 03_Gen_FlacModel文件中的改动: zr1=table(j+n_zon_row+1,x1) zr2=table(j+n_zon_row+2,x1) zr3=table(j+n_zon_row+2,x2) zr4=table(j+n_zon_row+1,x2) 模型如下: |