1、欢迎各位专家批评指正!,GDC二次开发,目录,基本概念 开发环境 GDC Objects开发 将GDC Objects嵌入到应用系统中,1,2,3,4,基本概念数据转换 转换模型 转换流程 映射文件 坐标系统 坐标操作 脚本文件,1,基本概念数据转换,数据转换是指将一种格式的数据转换到另一种格式。 一个数据转换操作过程逻辑上可以分为三个过程:从原数据中读取数据对读取的数据进行映射或处理将处理后的数据输出到目标格式,基本概念数据转换,“E00”数据格式转换到“GeoStar_MDB”数据格式直接转换几何类型和属性数据。 “E00”数据格式转换到“GeoStar_MDB”数据格式只读取原地物中“A
2、REA”200的地物新增属性“面积”保存“AREA”属性值到“面积”,基本概念转换模型,“瘦管道”语义转换模型这种方式是从一种数据格式直接转换到另一种数据格式只需要关注两种数据模型间的对应关系灵活性、扩展性差只能进行简单的几何转换和属性转换,基本概念转换模型,“胖管道”语义转换模型中间管道可以容纳系统1 和系统2 的数据可以实现双向转换,转换过程中信息损失较少,能够实现较复杂的语义转换,控制数据转换质量,基本概念转换流程,基本概念映射文件,映射文件在数据转换过程中扮演了重要的角色。通过使用映射文件,可以达到如下目标: 可以根据用户不同的应用需求设计不同内容的映射文件,从而满足多种多样的应用需求
3、,增加了系统的灵活性和扩展性; 使从原来简单的数据转换过渡到复杂的语义转换成为可能。,基本概念坐标系统,坐标转换是数据转换过程中的一个重要功能之一。坐标系统定义是坐标转换的基础: 坐标系统的定义包括坐标单位定义、参考椭球定义、本初子午线定义、基准定义、投影类型定义 能有效地进行各种坐标转换,包括单位的变换,同一基准下的投影变换,不同基准下的坐标转换等,基本概念坐标操作,数据坐标转换是最常见的规整化处理需求。现有数据的坐标系统与应用系统要求的数据坐标系统不一致的情况: 地方独立坐标系,应用时需要转换到国家统一坐标系 不同的历史时期采用了不同的坐标基准,需要进行不同基准间的坐标转换 GPS的广泛应
4、用,需要进行国家坐标系与全球坐标系的互相转换,基本概念脚本文件,GDC脚本文件是一个以XML格式描述用户数据转换任务的文件,一个数据转换任务可以分解为多个简单任务: 支持多任务批量处理 支持命令行方式 GDC提供根据脚本文件进行数据转换的组件进行二次开发,开发环境开发前准备 引用类型库 导入类型库,2,开发环境开发前准备,在使用GDC Objects前,确认GDC Objects组件已经正确安装,安装后你可以找到如图 所示的类型库文件,开发环境引用类型库,、新建工程 、引用GDC Objects 类型库,开发环境导入类型库,、新建工程 、导入GDC Objects 类型库,#import “T
5、ypeLibGDCOSupport.tlb“ raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude(“IAsyncManager“) #import “TypeLibGDCOWriterInterface.tlb“ raw_interfaces_only, raw_native_types, no_namespace, named_guids #import “TypeLibGDCOESRIWriter.tlb“ raw_interfaces_only, raw_native_types, no_na
6、mespace, named_guids,GDC Objects开发框架 功能 组件层次 开发方式 使用转组件开发 使用界面组件开发 使用COM组件开发 辅助组件,3,GDC Objects开发框架,基于COM组件技术开发,可用Visual Basic、C+、C# 语言进行开发,GDC Objects开发功能,格式转换支持栅格数据格式 投影变换坐标变换数据抽取数据分类属性转换,GDC Objects开发组件层次,GDC Objects 提供了三个层次的数据转换的组件:第一个层次UI层,在第二层的基础上以VB形式开发的组件第二个层次是COM 层次,在 API 层次的基础上以 VC+ ATL 形式
7、开发的组件第三个层次是API层次,GDC Objects开发开发方式,使用转换组件开发用户定制数据转换界面,然后将数据转换信息保存到一个XML格式的文件,选择执行该文件完成数据转换任务使用界面组件开发封装了数据转换过程中常用的界面,用户可以在应用程序中嵌入这些界面,从而快速地实现数据转换功能使用组件开发如果用户可希望从原数据集中读取部分数据,然后对这些数据进行必要的处理后再输出到指定的格式,GDC Objects开发使用转换组件开发,转换组件(GDCOTrans)封装了执行一个映射文件或脚本文件实现数据转换功能的方法,使用GDCOTrans组件时,需要传入一个映射文件或脚本文件,GDC Obj
8、ects开发使用转换组件开发,、创建一个 GDCOTrans 组件对象Dim piTrans As IGDCOTranslate Set appTrans = CreateObject(“GDCOTransLib.GDCOTrans“) 、选择映射文件或脚本文件Dim strXmlFile As String strXmlFile =“scriptfileExample.XML“ 、调用接口的 Translate 方法piTrans.Translate(strXmlFile, inpara),开发方法如下:,GDC Objects开发使用界面组件开发,GDCOUI组件封装了数据转换过程中常用的
9、界面:显示转换、创建映射文件、编辑任务界面; 显示输入、输出参数设置界面; 显示编辑映射文件、编辑脚本文件界面; 显示支持的坐标系统、自定义坐标系统界面。,GDC Objects开发使用界面组件开发,GDC Objects开发使用界面组件开发,开发方法如下: 、创建UI对象Dim piGDCOUI As IGDCOUI Set objApp =CreateObject(“GDCOUILib.GDCOTranslatorUI“)Set piGDCOUI = objApp 、设置参数 坐标系统文件 Dim inpara As New GDCOStringArray inpara.Add “COOR
10、DSYS_FILE_NAME“ inpara.Add “CoordSys.xml“ 、显示界面piGDCOUI.Show(inpara, Nothing),GDC Objects开发,转换、创建映射文件、编辑任务界面基本一致(参数不同):GDCOUILib.GDCOTranslatorUI,GDC Objects开发,不同的数据格式使用GDCOUI组件可以开发显示这些输入、输出参数设置界面: GDCOUILib.GDCOGWSReaderSettingUI,GDC Objects开发,GDCOUILib.GDCOE00WriterSettingUI,GDC Objects开发,GDCOUI组件
11、通过编辑映射文件、脚本文件界面,实现编辑映射文件、脚本文件的功能: GDCOUILib.GDCOMappingFileEditUI,GDC Objects开发,GDCOUILib.GDCOScriptFileEditUI,GDC Objects开发,DCOUI组件提供了选择支持的坐标系统、自定义坐标系统界面。实现投影变换和坐标转换: GDCOUILib.GDCOSRSListUI,GDC Objects开发,GDCOUILib.GDCOSRSUserDefineUI,GDC Objects开发使用COM组件开发,COM 层次的组件开发数据转换应用程序有更好的灵活性,用户可以控制数据转换过程中的
12、中间数据使用读数据组件 使用写数据组件使用映射文件组件,GDC Objects开发使用COM组件开发,读数据的流程图:,GDC Objects开发使用COM组件开发,读数据的一般流程: 创建一个 GDCOXXXReader 组件对象 调用该组件支持的 IGDCOReader 接口方法设置映射文件、读数据指示、原数据集的基本信息、空间参考系统 调用 IGDCOReader2 接口的 ReadStart 方法开始读数据 循环调用 ReadNext 方法读取每一个 GDCOFeature ,直到数据读取结束 调用 ReadCancel 方法结束读数据。读取数据过程中会发送必要的日志信息,GDC Ob
13、jects开发使用COM组件开发,写数据的流程图:,GDC Objects开发使用COM组件开发,写数据的一般流程: 创建一个 GDCOXXXWriter 组件对象 调用该组件支持的 IGDCOWriter 接口方法设置需要输出的数据集、映射文件、写数据指示、数据集的基本信息、空间参考系统 调用 IGDCOWriter2 接口的 WriterStart 方法开始写数据 调用 WriterNext 方法依次将每个数据对象输出到指定格式 调用 WriterCancel 方法结束写数据,GDC Objects开发使用COM组件开发,GDCOMappingFile,GDC Objects开发使用COM
14、组件开发,、创建读、写数据组件Set m_reader = New GDCO*ReaderSet m_writer = New GDCO*Writer、调用该组件支持的接口方法设置参数 创建空间参考系统Set m_OrgSpatialRef = New SpatialReferencem_OrgSpatialRef.属性 = 值 设置源与目标空间参考m_reader.SetSourceSRS 原空间参考m_writer.SetTargetSRS 目标空间参考,开发方法如下:,GDC Objects开发使用COM组件开发,设置读、写数据指示 Dim readDirective As New GD
15、COStringArray Dim writeDirective As New GDCOStringArray readDirective.Add “键“ readDirective.Add “值“ m_reader.SetReaderDirectives readDirective writeDirective.Add “键“ writeDirective.Add “值“ m_writer.SetWriterDirectives writeDirective,GDC Objects开发使用COM组件开发,设置比例尺Dim piMeta As New GDCOStringArraypiMeta
16、.Add “键“piMeta.Add “值“m_reader.ChangeMetaData piMetam_writer.SetMetaData piMeta 创建读、写参数Set m_ReaderParam = New GDCOStringArraym_ReaderParam.Add “键“m_ReaderParam.Add “值Set m_WriterParam = New GDCOStringArraym_WriterParam.Add “键“m_WriterParam.Add “值“,GDC Objects开发使用COM组件开发,设置映射文件Dim strMappingfileName
17、 As StringstrMappingfileName = “映射文件“Dim MappingFile As New GDCOMappingFileMappingFile. SetMappingFile strMappingfileNamem_reader.SetMappingFile strMappingfileNamem_writer.SetMappingFile strMappingfileName准备读数据写数据Dim strSourceName As StringDim strTarName As StringstrSourceName = “原数据“strTarName = “目
18、标数据“Set m_reader2 = m_readerSet m_writer2 = m_writer,GDC Objects开发使用COM组件开发,3、调用读、写组件方法进行转换 Dim ppifeature As GDCOFeature 地物 Dim tempFeature As GDCOFeature Dim GeoVector As New GDCOVector 使用映射文件之前feature数组 Dim RetVector As GDCOVector 使用映射文件后的feature数组 Dim pos As Long m_writer2.WriteStart strTarName,
19、 m_WriterParam m_reader2.ReadStart strSourceName, m_ReaderParam, pos, Nothing pos = 0 Dom_piReader2.ReadNext ppifeature, posIf Not ppifeature Is Nothing ThenSet GeoVector = Nothing 有映射文件,转换时要使用规则GeoVector.Add ppifeatureSet RetVector = piConvert.Convert(GeoVector) 使用规则For i = 0 To RetVector.GetSize -
20、 1Set tempFeature = RetVector.GetAt(i)m_piWriter2.WriteNext tempFeatureNextEnd If Loop Until pos 0 m_piReader2.ReadCancel m_piWriter2.WriteCancel,GDC Objects开发辅助组件,GDCOStringArray组件封装了字符串数组,提供了操作其成员的方法,GDC Objects开发辅助组件,GDCOVector组件是一组IUnknown接口的容器,提供操作其成员的方法,PGISONE警用GIS平台 GeoStar国土资源综合信息管理平台 GEOONE采编一体化平台通过GDC Objects组件的二次开发,完成数据建库、数据导入导出等功能,将GDC Objects嵌入到应用系统中,4,谢谢!,欢迎批评指正,我们将竭诚为您服务!,