重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
三维地质建模涉及的数据来源广、类型多、数据量大、关系复杂,为了有效地存储、管理和使用这些数据MAPGIS三维地质建模软件支持将这些数据按一定方式进行分类管理,集中存放在本地工作目录或Oracle等大型关系型数据库中,并可借助MAPGIS平台的本地数据管理模块、空间数据管理引擎(包括三维空间数据管理引擎3D SDE)和本系统专门开发的属性数据管理模块实现二维矢量数据、栅格数据、三维矢量数据、栅格数据及表格类属性数据的本地或网络化存储管理,其中网络化存储支持多用户的共享操作。
专注于为中小企业提供成都网站设计、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业藁城免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
单机环境下的本地数据接口依靠MAPGIS基础地理信息平台自身提供的基于本地文件方式的空间矢量数据(*.wt、*.wl、*.wp)、属性数据(*.wb)管理接口管理系统涉及的基础地理空间数据、剖面图、平面地质图及钻孔表格类属性数据,依靠MAPGIS TDE(MAPGIS 三维处理平台)提供的基于文件方式的三维空间数据管理接口管理三维模型,这种数据管理方式不需要第三方数据库的支持,成本低,但无法支持多个用户的共享操作。网络环境下则基于大型关系型数据库依靠空间数据引擎(SDE)实现基础地理空间数据、地质图形数据等矢量数据的管理,依靠专门开发的地质属性数据数据库管理模块实现钻孔类表格数据的管理,并依靠MAPGIS TDE提供的三维空间数据引擎实现三维模型空间数据(几何、拓扑、属性)的数据库存储管理(图4—62)。
图4—62 MAPGIS三维地质建模软件数据库接口框架结构图
近十多年来,三维地质建模技术和方法不断得到发展,并逐渐完善,相应的三维地质建模体系结构也逐渐成型(钟登华等,2006)。以建立地质对象三维模型为出发点,提出了以空间数据为基础、以地质结构建模技术为核心、以模型应用为目的的体系架构(潘懋等,2007),其总体流程可用图2.15表示。
图2.15 三维地质建模体系结构图
(1)地质数据处理。自然界地质现象的复杂多变及大量的不确定因素决定了反映地质现象的地质数据具有不确定性和复杂性等特点,因此首先需对地表地质调查、钻孔、遥感等技术手段获得的原始数据进行预处理;然后利用CAD、GIS或其他辅助软件,针对工程需要,完成所有可利用数据的耦合工作,并结合地质专家的知识,对复杂的地层、断层等地质结构进行识别、解释、描述、定位等处理;最后把所有的地质数据通过数据转换接口数字化为地质体建模可接受的输入数据格式,以保证地质体空间几何形状表达的准确性和对各种复杂空间对象关系的一致性,为三维地质建模奠定基础。
(2)地质体建模。地质体建模的核心技术是地质对象的三维表示方法,即采用的数据模型。目前,常用的数据模型有基于面、体和面体混合三种。实现地质体建模需要解决三个主要问题:①地质体对象空间几何形状的表达,即根据数据的空间分布及变化特征建立空间几何模型。②地质对象空间几何关系的描述,即三维拓扑模型的建立,反映地质对象之间的内在关系,包括地层间、构造间、地层与构造之间的各种关系。③地质对象属性信息的关联,通过建立属性数据库与图形库之间的对应关系,将属性信息关联到几何模型中相应的地质体上,以反映地质体的属性特征,如岩性描述、断层要素、岩体质量级别等。
(3)模型应用。模型应用包括地质分析、工程分析、查询及其他方面的应用等。地质分析主要是对建立的三维地质模型任意方向、任意位置和任意深度的地质剖切分析,以便帮助人们更直观、更深刻地理解区域地质环境和地质条件。工程分析主要是针对与地质条件密切相关的工程对象进行调整、优化设计、多方案对比,选择地质条件较好和处理工程量较少的布置方案,为提高工程安全性和降低工程投入提供技术支持。地质数据的多样性和复杂模型库为空间数据统计分析与查询提供了丰富的信息,基于数据挖掘和知识库的思想,设计空间数据查询、数据仓库查询及统计输出的分层查询结构,能够有效地描述、组织、管理和利用空间地质数据,有助于建立统一、完善的工程地质三维建模与分析系统。
图2.16所表达的体系架构属于一种降序体系,是D'Agnese et al.(2003)提出的一种金字塔式体系架构,该体系将系统分为四个层次:即数据(data)、信息(information)、知识(knowledge)和智慧(wisdom),其意义见表2.4。事实上,图2.16所述体系架构是对图2.15更高层次上的抽象,都强调基础数据和地质工程师专家经验知识的重要性,并最终将地质模型应用于工程实际。
图2.16 金字塔式建模体系
(据芬兰国家应用地质研究报告,有修改)
表2.4 基本术语定义
此类GIS应用软件通常多建立在OpenGL平台之上,本系统也不例外。在实现其他特殊功能之前,必须首先正确配置、安装好OpenGL环境,然后才能进行各种实用功能的开发。下面将对OpenGL做一个简短的介绍,并开始OpenGL应用程序框架的搭建工作。
OpenGL概述
OpenGL是一种到图形硬件的软件接口。从本质上说,它是一个完全可移植并且速度很快的3D图形和建模库。通过使用OpenGL,可以创建视觉质量接近射线跟踪程序的精致漂亮的3D图形。但是它在执行速度上要比射线跟踪程序快好几个数量级。OpenGL使用的是由Silicon Graphcs(SGI)公司精心开发的优化算法,这家公司在计算机图形和动画领域是公认的业界领袖。开发者可以利用OpenGL提供的150多个图形函数轻松建立三维模型并进行三维实时交互。这些函数并不要求开发者将三维物体模型的数据写成固定的数据格式,这样一 来开发者就不仅可以直接使用自己的数据,而且还可以利用其他格式的数据源,能在很大程度上缩短软件的开发周期。
OpenGL不仅可对整个三维模型进行渲染并绘制出逼真的三维景象,而且还可以进行三维交互、动作模拟等处理。其提供的基本功能具体包含以下几方面的内容:
(1)模型绘制。在OpenGL中通过对点、线和多边形等基本形体的绘制可以构造出非常复杂的三维模型。OpenGL经常通过使用模型的多边形及其顶点来描述三维模型。
(2)模型观察。在建立了三维模型后,可以通过OpenGL的描述来观察此模型。此观察过程是通过一系列的坐标变换来实现的。这种变换使得观察者能够在视点位置得到与之相适应的三维模型场景。投影变换的类型对模型的观察有很大的影响,在不同投影变换下得到的三维模型场景也是不同的。在模型观察过程的最后还要对场景进行裁剪和缩放,以决定整个三维模型场景在屏幕上的显示。
(3)颜色模式的指定。在OpenGL中可以指定模型的颜色模式(RGBA模式和颜色表模式)。除此之外,还可以通过选择模型的着色方式(平面着色和光滑着色)来对整个三维场景进行着色处理。
(4)光照效果。为使OpenGL绘制的三维模型更加逼真还必须增加光照效果。目前OpenGL仅提供了对辐射光、环境光、镜面光和漫反射光的管理方法,另外还可以指定模型表面的反射特性。
(5)图象效果增强。在增强三维场景图象效果方面,OpenGL也提供了一系列相关函数。这些函数通过反走样、混合和雾化等处理来增强图象效果。其中,反走样用于改善图象中线形图形的锯齿使其更平滑;混合用于处理模型的半透明效果;雾化使场景图象从视点到远处逐渐褪色,使其更接近现实情况。
(6)位图和图象处理。OpenGL提供有专门进行位图和图象处理的函数。
(7)纹理映射。真实物体的表面普遍存在纹理,如果建立的三维模型场景缺少此细节将显得不够真实,为更逼真地表现三维场景,OpenGL提供了纹理映射的功能。OpenGL提供的纹理映射函数可以很方便地把纹理图象贴到场景多边形上。
(8)双缓存技术。OpenGL提供的双缓存技术主要用于实时动画,为获得平滑的动画效果,需要先在内存中生成下一帧图象,然后再将其从内存拷贝到屏幕。
(9)人机交互。OpenGL提供了方便的三维图形人机交互接口,通过此接口用户可以选择修改三维景观中的物体。
OpenGL应用程序框架的建立
首先建立一个单文档应用程序,并将需要用到的头文件和导入库添加到工程,以便能够顺利通过编译。在VC++中,OpenGL的头文件一般是存放在系统头文件目录的子目录GL中,所以在指定包含的时候要指定一下相对路径:
#include gl\gl.h // OpenGL32库的头文件
#include gl\glu.h // GLu32库的头文件
#include gl\glaux.h // GLaux库的头文件
这里的gl.h是基本头文件,glu.h是应用头文件,大多数应用程序都需要同时包含这两个头文件,glaux.h是辅助头文件,只在需要使用的情况下包含。接下来调出"Project Settings"对话框并在"Link"选项页中添加glu32.lib、glaux.lib和OpenGL win32实现的标准导入库opengl32.lib到工程。
接下来初始化OpenGL,这也是本文最重要的部分。先大致讲一下基本步骤:首先获取需要在上面绘图的设备环境(DC)并为该设备环境设置像素格式,然后创建基于该设备环境的OpenGL设备。最后,初始化OpenGL绘制场景及状态设置。前三步的实现过程在SetOpenGLInterface()函数中实现:
PIXELFORMATDESCRIPTOR pfd = {
// 初始化象素存储格式
sizeof(PIXELFORMATDESCRIPTOR), // pfd的大小
1, // 版本号
PFD_DRAW_TO_WINDOW | // 支持窗口
PFD_SUPPORT_OPENGL | // 支持OpenGL
PFD_DOUBLEBUFFER, // 支持双缓存
PFD_TYPE_RGBA, // RGBA类型
24, // 24位色深度
0, 0, 0, 0, 0, 0, // 各颜色位(忽略)
0, // 无alpha缓存
0, // 忽略转换位
0, // 无累计位
0, 0, 0, 0,
32, // 32位深度缓存
0, // 无模版缓存
0, // 无辅助缓存
PFD_MAIN_PLANE, // 主绘制层
0, // 保留
0, 0, 0 // 忽略的层掩模
};
m_pDC = GetDC(); // 得到设备环境句柄
int iFormat = ChoosePixelFormat(m_pDC-m_hDC, pfd); // 设置象素格式
SetPixelFormat(m_pDC-m_hDC, iFormat, pfd);
m_hGlrc = wglCreateContext(m_pDC-m_hDC); // 创建渲染上下文
wglMakeCurrent(m_pDC-m_hDC, m_hGlrc); // 设置一个线程的当前绘图描述表
这里首先对描述像素存储格式的PIXELFORMATDESCRIPTOR结构变量进行了填充,在得到设备环境句柄后调用ChoosePixelFormat()和SetPixelFormat()函数以返回并设置最佳匹配的像素格式。最后调用wglCreateContext()创建一个渲染上下文RC并将其作为参数通过wglMakeCurrent()来建立一个当前的绘图描述表,并在绘制完毕后(通常在WM_DESTORY消息发出后执行)将其释放:
ReleaseDC(m_pDC); // 释放DC
if (m_hGlrc != NULL) // 释放RC
wglDeleteContext(m_hGlrc);
经过上面的处理OpenGL就已经初始化完毕了,但为了达到逼真的视觉效果还有必要进一步设置一下场景,这在InitOpenGL()函数中完成。具体的工作包括对光源的各种定义:
GLfloat light_position[] = {0.0, 0.0, 1.0, 0.0}; // 定义光源的位置坐标
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
GLfloat light_ambient[] = {0.0, 0.0, 0.0, 1.0}; // 定义环境反射光
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; // 定义漫反射光
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
GLfloat light_specular[] = {1.0, 1.0, 1.0, 1.0}; // 定义镜面反射光
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
GLfloat light_model_ambient[] = {0.4f, 0.4f, 0.4f, 1.0f}; // 定义光模型参数
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, light_model_ambient);
GLfloat local_view[] = {0.0};
glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);
以及各项相关功能的使能设置:
glEnable(GL_LIGHTING); // GL_LIGHTING有效
glEnable(GL_LIGHT0); // GL_LIGHT0有效
glEnable(GL_DEPTH_TEST); // 允许深度比较
glDepthFunc(GL_LESS); // 激活深度比较
glClearColor(0.1f, 0.1f, 0.5f, 0.0f); // 设置蓝色背景
glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE); // 权衡图像质量与绘制速度
通常,SetOpenGLInterface()和InitOpenGL()在WM_CREATE消息发出后即被执行,以确保在程序启动之初完成对OpenGL的环境设置。在视图初始化更新完毕后,还要进行最后的处理--进行视口的定义,下面给出的这段InitViewPort()函数实现代码将完成此功能:
CRect rect; // 得到绘图客户区的大小
GetClientRect(rect);
glMatrixMode(GL_PROJECTION); // 设置投影模式
glLoadIdentity(); // 装载单位矩阵
if (m_nViewMode == 0) // 建立一个透视投影矩阵
gluPerspective(90.0, rect.Width() / rect.Height(), 1.0, 10000.0);
if (m_nViewMode == 1) // 建立一个正射投影矩阵
glOrtho(-0.5 * 10000.0, 0.5 * 10000.0, -0.5 * 10000.0, 0.5 * 10000.0, 1.0, 10000.0); glViewport(0, 0, rect.Width(), rect.Height()); // 重定视口
glMatrixMode(GL_MODELVIEW); // 确定当前矩阵模式
glLoadIdentity(); // 装载单位矩阵
这里完成的主要工作有对投影模式的设置与对投影矩阵的建立以及对视口的重定等。其中,控制变量m_nViewMode的取值决定了投影模式(透视投影还是正射投影),并根据不同的投影模式调用函数gluPerspective()或glOrtho()建立相应的投影矩阵。函数gluPerspective()用于创建一个对称透视视景体,第一个参数定义了视野在X-Z平面的角度,取值范围为[0.0, 180.0];第二个参数是投影平面宽度与高度的比率;后两个参数分别为远近裁剪面沿Z负轴到视点的距离,总为正值。glOrtho()用于创建一个平行视景体(实际是创建一个正射投影矩阵,并以此矩阵乘以当前矩阵)。其近裁剪、远裁剪平面均为矩形,近裁剪矩形左下角点和右上角点的三维空间坐标分别为(left,bottom,-near)和(right,top,-near);远裁剪平面的相应空间坐标分别为(left,bottom,-far)和(right,top,-far)。这里所有的near、far值同时为正或同时为负。若未进行其他变换,正射投影的方向将平行于Z轴、视点朝向Z负轴。
视口确定之后就可以着手对场景的绘制了。这主要在ReDraw()中完成,并在OnSize()、OnDraw()等需要重绘的地方被调用。由于这部分不属于OpenGL框架搭建的内容,因此该函数的实现将在后续的文章中进行详细介绍,这里不再赘述
从应用的角度,地理信息系统由硬件、软件、数据、人员和方法五部分组成。硬件和软件为地理信息系统建设提供环境;数据是GIS的重要内容;方法为GIS建设提供解决方案;人员是系统建设中的关键和能动性因素,直接影响和协调其它几个组成部分。
硬件主要包括计算机和网络设备,存储设备,数据输入,显示和输出的外围设备等等。
软件主要包括以下几类:操作系统软件 、数据库管理软件 、系统开发软件 、GIS 软件,等等。 GIS软件的选型,直接影响其它软件的选择,影响系统解决方案,也影响着系统建设周期和效益。
数据是GIS的重要内容,也是GIS系统的灵魂和生命。数据组织和处理是GIS应用系统建设中的关键环节,涉及许多问题:
——应该选择何种(或哪些)比例尺的数据?
——已有数据现势性如何?
——数据精度是否能满足要求?
——数据格式是否能被已有的GIS软件集成?
——应采用何种方法进行处理和集成?
——采用何种方法进行数据的更新和维护,等等。
方法指系统需要采用何种技术路线,采用何种解决方案来实现系统目标。方法的采用会直接影响系统性能,影响系统的可用性和可维护性。
人是GIS系统的能动部分。人员的技术水平和组织管理能力是决定系统建设成败的重要因素。系统人员按不同分工有项目经理、项目开发人员、项目数据人员、系统文档撰写和系统测试人员等。各个部分齐心协力、分工协作是GIS系统成功建设的重要保证。
GIS应用系统建设需要从以上五个方面着手。
GIS 的应用领域
地理信息系统在最近的30多年内取得了惊人的发展,广泛应用于资源调查、环境评估、灾害预测、国土管理、城市规划、邮电通讯、交通运输、军事公安、水利电力、公共设施管理、农林牧业、统计、商业金融等几乎所有领域。 (加测绘、应急、石油石化等国民经济各个领域。)
以下地理信息系统的应用领域分别回答了在各自领域内的作用
◆ 资源管理 (Resource Management)
主要应用于农业和林业领域,解决农业和林业领域各种资源(如土地、森林、草场)分布、分级、统计、制图等问题。主要回答“定位”和“模式”两类问题。
◆ 资源配置 (Resource Configuration)
在城市中各种公用设施、救灾减灾中物资的分配、全国范围内能源保障、粮食供应等到机构的在各地的配置等都是资源配置问题。GIS在这类应用中的目标是保证资源的最合理配置和发挥最大效益。
◆ 城市规划和管理 (Urban Planning and Management)
空间规划是GIS的一个重要应用领域,城市规划和管理是其中的主要内容。例如,在大规模城市基础设施建设中如何保证绿地的比例和合理分布、如何保证学校、公共设施、运动场所、服务设施等能够有最大的服务面(城市资源配置问题)等。
◆ 土地信息系统和地籍管理 (Land Information System and Cadastral Applicaiton)
土地和地籍管理涉及土地使用性质变化、地块轮廓变化、地籍权属关系变化等许多内容,借助GIS技术可以高效、高质量地完成这些工作。
◆ 生态、环境管理与模拟 (Environmental Management and Modeling)
区域生态规划、环境现状评价、环境影响评价、污染物削减分配的决策支持、环境与区域可持续发展的决策支持、环保设施的管理、环境规划等。
◆ 应急响应 (Emergency Response)
解决在发生洪水、战争、核事故等重大自然或人为灾害时,如何安排最佳的人员撤离路线、并配备相应的运输和保障设施的问题。
◆ 地学研究与应用 (Application in GeoScience)
地形分析、流域分析、土地利用研究、经济地理研究、空间决策支持、空间统计分析、制图等都可以借助地理信息系统工具完成。
◆ 商业与市场 (Business and Marketing)
商业设施的建立充分考虑其市场潜力。例如大型商场的建立如果不考虑其他商场的分布、待建区周围居民区的分布和人数,建成之后就可能无法达到预期的市场和服务面。有时甚至商场销售的品种和市场定位都必须与待建区的人口结构(年 龄构成、性别构成、文化水平)、消费水平等结合起来考虑。地理信息系统的空间分析和数据库功能可以解决这些问题。房地产开发和销售过程中也可以利用GIS功能进行决策和分析。
◆ 基础设施管理 (Facilities Management)
城市的地上地下基础设施(电信、自来水、道路交通、天然气管线、排污设施、 电力设施等)广泛分布于城市的各个角落、且这些设施明显具有地理参照特征的。它们的管理、统计、汇总都可以借助GIS完成,而且可以大大提高工作效率。
◆ 选址分析 (Site Selecting Analysis)
根据区域地理环境的特点,综合考虑资源配置、市场潜力、交通条件、地形特征、环境影响等因素,在区域范围内选择最佳位置,是GIS的一个典型应用领域,充分体现了GIS的空间分析功能。
◆ 网络分析 (Newwork System Analysis)
建立交通网络、地下管线网络等的计算机模型,研究交通流量、进行交通规则、处理地下管线突发事件(爆管、断路)等应急处理。 警务和医疗救护的路径优选、车辆导航等也是GIS网络分析应用的实例。
◆ 可视化应用 (Visualization Application)
以数字地形模型为基础,建立城市、区域、或大型建筑工程、著名风景名胜区的三维可视化模型,实现多角度浏览,可广泛应用于宣传、城市和区域规划、大型工程管理和仿真、旅游等领域。
◆ 分布式地理信息应用 (Distributed Geographic Information Application)
随着网络和Internet技术的发展,运行于Intranet或Internet环境下的地理信息系统应用类型,其目标是实现地理信息的分布式存储和信息共享,以及远程空间导航等。
GIS常用软件
国外的:
AutoCAD Map3d
ArcGIS(包括ArcGIS, MapObjects, ArcIMS、ArcSDE、ArcEngine、ArcServer等)
MapInfo
GeoMedia
MGE
SmallWorld
Grass
国内的:
Supermap
MapGIS
GeoStar
TopMap
GeoBean
VRMap
MapEngine
geobrain