物探论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 989|回复: 0

从ArcGIS 平面栅格图形到Gocad三维图像转换的开发探讨(上)

[复制链接]
发表于 2013-3-13 19:39:13 | 显示全部楼层 |阅读模式

介绍了ArcGIS 和Gocad 在处理平面栅格图形上存在的不足,然后提出了解决的方法及其实现流
程,通过具体实例成功地完成了平面栅格图形到空间曲面的转化。其方法是:首先利用ArcObjects 的接口对
ArcGIS 进行了二次开发将栅格图形转化成空间坐标数据,然后对Gocad 进行二次开发,其目的是将空间坐标
数据直接产生出Gocad 能够直接识别的空间曲面对象文件,再加载到Gocad 中以三维图形显示出来,最后将
这些功能组装起来成为一个完整的系统。
关键词: 地理信息系统;ArcGIS;ArcObjects ; Gocad ;二次开发;三维可视化;COM
中图分类号: P631 文献标识码: A 收稿日期: 2004 —10 —08THE DEVELOPMENT AND STUDY OF RASTER MAP
FROM ARCGISTO 3D SPECIAL SURFACE OF GOCAD
ZHU Yan2hui , ZHU Pei2min , J IN Dan
( Institute of Geophysics &Geomatics , China University of Geosciences , Wuhan 430074 , China)Abstract : Firstly , the lacks of ArcGIS and Gocad on dealing with Raster map are int roduced in
this paper , and then a set of workflow is designed to resolve these problems. The program listed
below in this paper is carried out , and it can make a t ransformation f rom the raster map of Ar2
cGIS to three - dimension map. The workflow is that : for one thing , using the interfaces of Ar2
cObject s to finish the secondary develop of ArcGIS , having the raster map t ransformed to spacial
data file which includes the spacial coordinate of raster map ; for another thing , the spacial data
file has been t ransformed to the spacial surface object file of Gocad by secondary development of
Gocad. The Gocad can directly load this object file and show it in three - dimensional way. At
last , all of these functions displayed in the workflow have been made of an intact system.
Key words : Geographic information system ; ArcGIS ; ArcObject s ; Gocad ; re - developed ; 3D vi2
sualization ; COM1  引 言
地理信息系统( GIS) 起源于20 世纪60 年代,它作为有关空间数据管理、空间信息分析及其传播的软件系统,在其40 多年的发展历程中已经取得了很大的成就,并得到了广泛应用[2 ] 。随着GIS 应用的深入,人们越来越多地要求从真三维空间来处理问题。目前,还没有一个真正的处理三维信息的GIS 系统。现在,一些研究者在理论上和实际中开始考虑真三维的GIS 问题,其目的对所建立的模型不仅可以实现真三维可视化,还可以进行三维空间分析[4 ] 。对于本身带有高程信息的栅格图形,ArcGIS 只能以平面的形式显示,缺乏三维可视化的功能,因此给进一步分析和解决问题带来很大的不便。在真正的三维GIS 出现之前,对于迫切需要使用三维GIS 分析问题,就必须另辟蹊径。Gocad 是由法国Nancy 大学(Mallet ,1989) 研制的地质建模软件。它是在Unix 和X —Win2dow/ motif 系统下用C 语言写成的[5 ] 。该软件使用DSI 的插值(Mallet ,1989) 来计算三维图形中线段或三角形的节点位置,因此能将线或面的粗糙程度降到最低。DSI 还帮助考虑许多类型的地质数据,例如:精确的或粗略的表面位置,局部倾角,断层的相对移动等。该软件在构造、表达三维对象上具有较强的能力,但其缺点是仅重视表达三维对象本身,对各对象间关系的表达没有足够的重视,因此管理大批量三维空间对象的能力较弱。本文的目的就是要对ArcGIS 和Gocad 分别行二次开发,然后结合起来,将ArcGIS 中的平面栅格图形转化成Gocad 中的空间曲面对象,以三维的形式显示出来。这样就能完成真正意义上的三维可视化显示和分析,从而满足广大GIS 用户的需求。2  图形转换流程
ArcGIS 拥有强大的数据库管理功能,又提供用于二次开发的组件,但其对三维地质图形的处理基本上是一种“伪三维”的方式,因此对ArcGIS进行二次开发变得非常必要和可能。对ArcGIS 进行二次开发的方法主要有:Ar2cObject s 和MapObject s 两种。此次开发主要运用第一种方法即利用ArcObject s 提供的COM 组件,以Visial Basic 为开发平台进行的。ArcOb2ject s 实际上是一个COM 组件的集合, 它是ArcInfo 8 的两个新应用程序的基石,即ArcMap和ArcCatalog。这一系列的组件包含了超过1200个对象,可以运用它们来定制、扩展和构建GIS应用程序。Gocad 软件本身是用C 语言写成的,它所提供的二次开发类库函数几乎也都是用C 语言写的,因此笔者选择使用VC + + 作为开发工具去调用Gocad 所提供的库函数,从而输出Gocad 的对象。Gocad 不仅是用来构造三维地质模型、地球物理模型和储层模型的软件系统,它同时也是一个很方便的开发平台。它为开发出用户交互式的应用程序提供了一些特殊的支持。例如:为构建、编辑和可视化显示模型提供了一套C + + 类,这些类主要分为四大类:1) Gocad 数据(Data) 类集合或者说是模型类集合,它包括以下地球科学的数据类型:井的信息、测井曲线、钻井过程中井径的路线、地质分层、地震数据体、速度体、水平面、断层、地层面、图形网格以及坐标转换等;2) 表面( Interface) 类集合:它是模型对象外部直观的表现;3) 工具包( Toolkit) 类集合:提供了一套构建用户模拟界面以及二维图形和三维图形的工具包;
图1  Raster 图形转换流程Fig11  flow chart of raster map transformation
4) 附加类(Utile) 集合:提供了一些基本的功能,例如:封装了一些操作系统的特殊函数,以及对一些基本对象的操作方法,例如:三角形、四面体、长方体等。利用上面这些Gocad 所提供的类, 然后对Gocad 进行二次开发就可以开发出满足自己需求的程序。图1 是程序开发的流程图。 图1 首先将ArcGIS 格式的Raster 图层文件输入到用VB 对ArcGIS 二次开发的程序中,然后输出含空间坐标的中间临时文件,再将这个中间数据文件输入到用VC 对Gocad 二次开发的程序中,最终就能输出Gocad 能识别的曲面对象文件。3  将ArcGIS 的Raster 图形转化成数据ArcGIS 中的栅格图形(Raster) 是利用网格存储地图信息的一种图形格式,它可以表示任何类型的数据,例如高低起伏的地形面数据、物探中的重力值、磁场值变化数据等。栅格影像( RasterImage) 是栅格数据中的主要类型,组成影像的像元属性值一般是在0~255 之间连续变化。栅格图形就是利用这种连续的颜色变化来反映连续地质界面。对于黑白图像(单波段图像) ,影像的灰度反映像元的属性值;而对于彩色图像,往往由3个波段分别以红、绿、蓝三色组合而成,影像的色彩同时取决于3 个波段的色彩强弱对比。此次主要针对单波段栅格图像进行处理。首先, 在工程中添加一个ESRIMapCont rol组件,该组件和普通控件用法基本相同,可以设置它的一系列属性。例如,为它添加图层文件、设置图形边界、鼠标指针等。实际运用中,更需要在程序运行的时候动态地添加图层或者文件。下面这段代码说明了怎样往ArcGIS 的MapCont rol 控件中添加Raster 图层文件。/ / / FilePath 是文件存放的路径If Right ( FilePath , 4) = ”. lyr”Or Right(FilePath , 4) = ”. L YR”ThenMapCont rol1. AddLayerFromFile(FilePath) / / 通过文件路径添加图层MapCont rol1. Ref resh esriViewForeground/ /刷新显示图层End IfArcMap 的地图维护了一组图层,图层是实现了ILayer 接口的对象,图层的实例包括了Fea2tureLayer、GroupLayer 、GraphicsLayer 、Annota2tionLayer 、CadLayer 、TinLayer 和RasterLayer 。ArcGIS 的栅格图形可以用其中的IRaster 接口来控制,通过IRaster 接口的成员函数Read 读出每个栅格处的属性值。下面的代码演示了怎样从栅格图层中读出每个网格的属性值。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|物探论坛 ( 鄂ICP备12002012号 微信号:iwutan )

GMT+8, 2024-5-6 07:26 , Processed in 0.060029 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表