地下管网数据导入程序设计思想.doc_第1页
地下管网数据导入程序设计思想.doc_第2页
地下管网数据导入程序设计思想.doc_第3页
地下管网数据导入程序设计思想.doc_第4页
地下管网数据导入程序设计思想.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/sundae_meng地下管网数据导入程序设计思想1问题描述基础数据的获取在排水管网地理信息系统的建设过程中处于至关重要的地位。而排水公司已有的数据包括以下几种:规划局提供的文本格式的数据,DWG格式的数据。文本格式的数据不能直接被ARCGIS使用,所以需要把文本格式的数据导入到SDE数据库中。2文本数据格式(参见附件)3两个具体的文本文件文件名:P1716L 管网类型:排水管P22100水泥 600 昆明市排水公司 0546 0546P008 0 2281935.752 64789.183 0 1.6081962.032 64791.040 1.68 1.6881988.253 64792.794 1.69 1.6982040.805 64796.286 1.72 1.7282060.655 64797.751 1.75 1.7582087.099 64799.701 1.95 1.9582113.206 64801.417 1.86 1.8682138.663 64803.058 2.00 2.0082165.066 64804.876 2.00 2.0082190.782 64806.573 1.80 1.8082216.584 64808.321 1.78 1.7882242.540 64810.124 1.80 1.8082268.401 64811.922 1.82 1.8282312.888 64814.624 1.93 1.9382339.323 64815.923 1.95 1.9582365.415 64817.354 1.80 1.8082391.956 64818.698 1.93 1.9382418.354 64820.111 1.98 1.9882444.449 64821.470 2.00 2.0082470.457 64822.801 2.20 2.2082496.755 64824.296 2.15 2.1582560.964 64827.347 1.96 0 文件名:P1716L 管网类型:排水井P2222382560.964 64827.347 1886.139 污水检修井 塑料 0.0000 179170P001 EP2815 0546P008 P2222382496.755 64824.296 1886.316 污水检修井 塑料 0.0000 179169P009 EP2816 0546P008 P2222382470.457 64822.801 1886.338 污水检修井 塑料 0.0000 179169P008 EP2817 0546P008 P2222382444.449 64821.470 1886.244 污水检修井 塑料 0.0000 179169P007 EP2818 0546P008 P2222381935.752 64789.183 1885.926 污水检修井 塑料 0.0000 179167P001 EP2819 0546P008 P2222381962.032 64791.040 1886.004 污水检修井 塑料 0.0000 179167P002 EP2820 0546P008 P2222381988.253 64792.794 1886.016 污水检修井 塑料 0.0000 179167P003 EP2821 0546P008 P2222382040.805 64796.286 1886.046 污水检修井 塑料 0.0000 179168P001 EP2823 0546P008 P2222382060.655 64797.751 1886.064 污水检修井 塑料 0.0000 179168P002 EP2824 0546P008 P2222382087.099 64799.701 1886.236 污水检修井 塑料 0.0000 179168P003 EP2825 0546P008 P2222382113.206 64801.417 1886.129 污水检修井 铸铁 0.0000 179168P004 EP2826 0546P008 P2222382138.663 64803.058 1886.267 污水检修井 铸铁 0.0000 179168P005 EP2827 0546P008 P2222382165.066 64804.876 1886.257 污水检修井 铸铁 0.0000 179168P006 EP2828 0546P008 P2222382190.782 64806.573 1886.090 污水检修井 铸铁 0.0000 179168P007 EP2829 0546P008 P2222382216.584 64808.321 1886.056 污水检修井 铸铁 0.0000 179168P008 EP2830 0546P008 P2222382242.540 64810.124 1886.147 污水检修井 铸铁 0.0000 179168P009 EP2831 0546P008 P2222382268.401 64811.922 1886.130 污水检修井 铸铁 0.0000 179169P001 EP2832 0546P008 P2222382312.888 64814.624 1886.236 污水检修井 铸铁 0.0000 179169P002 EP2833 0546P008 P2222382339.323 64815.923 1886.231 污水检修井 铸铁 0.0000 179169P003 EP2834 0546P008 P2222382365.415 64817.354 1886.095 污水检修井 铸铁 0.0000 179169P004 EP2835 0546P008 P2222382391.956 64818.698 1886.162 污水检修井 铸铁 0.0000 179169P005 EP2836 0546P008 P2222382418.354 64820.111 1886.226 污水检修井 铸铁 0.0000 179169P006 EP2837 0546P008 4设计思路从附件可以看出,该格式不仅用来描述排水管网,还用来描述其它地下管网,如:供水、电力等。为了今后导入其它管网数据的方便,数据导入程序应该考虑到其共同特征,把不同管网数据导入的共同部分提取出来形成一个基础架构(FrameWork),同时为与不同管网类型相关的部分定义共同的接口(Interface)。这样,当需要导入某种类型的管网数据时,只需要提供对这些接口与该管网类型相关的特定实现即可。实际中,由于某些原因,文本文件的格式与规定的格式有出入,其差别在于属性项的起始列与终止列与规定的格式不同,故设计时应该为考虑到这个因素。5解决方案使用文件来描述线要素和点要素文本文件的结构,描述点要素文本文件结构的文件称作PFS(Point File Structure,点要素文本文件结构),其扩展名为PFS, 描述线要素文本文件结构的文件称作LFS(Line File Structure,线要素文本文件结构),其扩展名为LFS。PFS的结构如下:第一行:”点要素文本文件结构” 用于标识PFS 第二行:类别标识 用于区分不同类型的PFS第三行:每个点要素在文本文件中所占的行数第四行开始至结束:每行表示一个属性信息项*属性信息项:要素的每个属性用一个信息项来描述,称为属性信息项LFS的结构如下:第一行:” 线要素文本文件结构” 用于标识LFS 第二行:类别标识 用于区分不同类型的LFS第三行:每个线要素的属性部分在文本文件中所占的行数第四行:每个描述线要素空间信息的点在文本文件中所占的行数第五行:一个特殊的属性信息项,顶点点数:描述线要素空间信息包含的点数第六行至结束:前边每行表示一个属性信息项,而后边每行表示一个空间信息项*二者之间的分界由程序决定*空间信息项:描述线要素空间信息的点的每个属性用一个信息项来描述,称为空间信息项信息项的结构:第一部分:属性(空间信息的点的属性 或者 点要素、线要素的属性)名称第二部分:该属性位于每个组成要素的文本行中的第几行,从1开始编号第三部分:该属性位于属性所在行中的起始列第四部分:该属性位于属性所在行中的终止列每部分之间用英文的逗号分隔,除属性名称可为UniCode外,其它部分必须为ASCII6分析与设计 基础架构(FrameWork)的功能1. 利用用户定义的PFS和LFS, 完成从文本文件提取空间和属性信息.2. 把提取的空间和属性信息转换到特定类型管线。显然,第一步与管线的类型无关,而第二步与管线的类型无关,为了使转换过程相对独立于管线的类型,需要对不同类型的管线与数据导入相关部分提供共同的接口,而各类型的管线负责实现这些接口,这样就可以实现导入过程相对独立于管线的类型。而空间和属性信息转换到特定类型管线则依赖于管线的类型。为此,用一些类来实现上述目标。基础架构(FrameWork)包含的类、窗体、模块:1 StructureItem 中文名:信息项 类型:CoClass功能:用于描述PFS和LFS的属性信息项或者空间信息项关系:属性&方法:无2 PointFileStructure 中文名:点要素文本文件结构类型:CoClass功能:用于描述点要素文本文件的结构关系:包含若干个StructureItem,包含一个PointFeatureClass属性&方法:Public LineCount As Integer 每个要素属性的行数Public Property Set PointFeatureClass(ByVal pPointFeatureClass As IPointFeatureClass)设置所属线要素类 Public Property Get PointFeatureClass() As IPointFeatureClass获取所属线要素类 Public Sub AddItem(ByRef pItem As StructureItem)功能:增加点要素的属性信息项参数:pItem 待增加的属性信息项 Public Sub SetItems(pStructureItem() As StructureItem) 功能:设置点要素的属性信息项 参数:pStructureItem 用于设置的点要素属性信息项 Public Sub GetItems(pStructureItem() As StructureItem) 功能:获取点要素的属性信息项 参数:out pStructureItem 用于返回的点要素属性信息项的数组 Public Function GetItem(nItem As Integer) As StructureItem 功能:获取点要素nItem位置的属性信息项 参数:nItem 位置 返回值:nItem位置的属性信息项 Public Function GetItemCount() As Integer功能:获取每个点要素包含的信息项数返回值:每个点要素包含的信息项数 Public Function GetItemByName(sPropertyName As String) As StructureItem功能:获取属性名称为sPropertyName的属性信息项参数: sPropertyName 属性名称返回值:属性名称为sPropertyName的属性信息项 Public Function LoadFile(FileName As String) As Boolean功能:从名称为FileName的文件加载PointFileStructure参数: FileName 文件名称返回值:true 成功 false 失败 Public Sub EditPFS()打开frmPFSEditor来编辑文件结构 Public Function SaveFile(FileName As String) As Boolean功能:保存PointFileStructure到名称为FileName的文件参数: FileName 文件名称返回值:true 成功 false 失败3 LineFileStructure 中文名:点要素文本文件结构类型:CoClass功能:用于描述点要素文本文件的结构关系:包含若干个StructureItem,包含一个PointFeatureClass属性&方法: Public PropertyLineCount As Integer 每个要素属性的行数Public SpaceLineCount As Integer 每个空间信息项所占的行数Public Property Set LineFeatureClass(pLineFeatureClass As ILineFeatureClass)设置所属线要素类 Public Property Get LineFeatureClass() As ILineFeatureClass获取所属线要素类 Public Sub AddPropertyItem(pItem As StructureItem)功能:增加线要素的属性信息项参数:pItem 待增加的线要素属性信息项Public Sub SetPropertyItems(pStructureItem() As StructureItem) 功能:设置线要素的属性信息项 参数:pStructureItem 用于设置的线要素属性信息项Public Sub GetPropertyItems(pStructureItem() As StructureItem) 功能:获取线要素的属性信息项 参数:out pStructureItem 用于返回的线要素属性信息项的数组Public Function GetPropertyItem(nItem As Integer) As StructureItem 功能:获取线要素nItem位置的属性信息项 参数:nItem 位置 返回值:nItem位置的属性信息项Public Function GetPropertyItemCount() As Integer功能:获取每个线要素包含的信息项数返回值:每个线要素包含的信息项数Public Function GetPropertyItemByName(sPropertyName As String) As StructureItem功能:获取属性名称为sPropertyName的属性信息项参数: sPropertyName 属性名称返回值:属性名称为sPropertyName的属性信息项Public Function LoadFile(FileName As String) As Boolean功能:从名称为FileName的文件加载LineFileStructure参数: FileName 文件名称返回值:true 成功 false 失败Public Function SaveFile(FileName As String) As Boolean功能:保存LineFileStructure到名称为FileName的文件参数: FileName 文件名称返回值:true 成功 false 失败Public Sub EditLFS()打开frmLFSEditor来编辑文件结构Public Sub AddSpaceItem(pItem As StructureItem)功能:增加组成线要素的点的信息项参数:pItem 待增加的组成线要素的点的信息项Public Sub SetSpaceItems(ByRef pStructureItem() As StructureItem)功能:用pStructureItem来设置组成线要素的点的信息项参数:pStructureItem 用来设置组成线要素的点的信息项Public Sub GetSpaceItems(pStructureItem() As StructureItem)功能:用pStructureItem来获取组成线要素的点的信息项参数:pStructureItem 用来获取组成线要素的点的信息项数组Public Function GetSpaceItem(nItem As Integer) As StructureItem功能:获取组成线要素的点的信息项,位置为nItem参数:nItem 位置返回值:位置为nItem,组成线要素的点的信息项Public Function GetSpaceItemCount() As Integer功能:获取组成线要素的点的信息项数返回值:组成线要素的点的信息项数Public Function GetSpaceItemByName(sPropertyName As String) As StructureItem功能:获取组成线要素的点的信息项,信息项名称为sPropertyName参数:sPropertyName 信息项名称返回值:名称为sPropertyName的信息项4 PointFile中文名:点要素文本文件类型:CoClass功能:根据PFS把点要素文本文件转换为线要素并加入ImportDirector.ImportWorkspace的点要素集关系:包含一个点要素文本文件的结构PFS,包含一个对ImportDirector的引用属性&方法: Public FileName As String 文本文件名Public Property Get ImportDirector() As ImportDirector获取对ImportDirector的引用Public Property Set ImportDirector(pImportDirector As ImportDirector) 设定对ImportDirector的引用Private Sub ParseText(sPointText() As String, sPropertyStrings() As String)功能:把包含要素信息的文本根据m_pPointFileStructure解析为若干个子项参数:sPointText 待解析的文本参数:sPropertyStrings 解析后的文本例如:sPointTextP2222382560.964 64827.347 1886.139 污水检修井 塑料 0.0000 179170P001 EP2815 0546P008 Public Function File2Features() As Boolean功能:读取文本文件,并获得点要素的信息,调用ParseText来完成转换返回值:TRUE 无错误,FALSE有错误Public Property Set PointFileStructure(pPointFileStructure As PointFileStructure) 设定PFSPublic Property Get PointFileStructure() As PointFileStructure 获取PFS 5 LineFile中文名:线要素文本文件类型:CoClass功能:根据LFS把点要素文本文件转换为线要素并加入ImportDirector.ImportWorkspace的线要素集关系:包含一个点要素文本文件的结构PFS,包含一个对ImportDirector的引用属性&方法: Public FileName As String 文本文件名Public Property Get ImportDirector() As ImportDirector获取对ImportDirector的引用Public Property Set ImportDirector(pImportDirector As ImportDirector) 设定对ImportDirector的引用 Private Sub ParsePropertyText(sLineText() As String, sPropertyStrings() As String)功能:把包含要素属性信息的文本按照属性信息项的结构解析为若干个子项参数:sLineText 待解析的文本参数:sPropertyStrings 解析后的文本例如:sLineText如下水泥 600 昆明市排水公司 0546 0546P008 05 Private Sub ParseSpaceText(sLineText() As String, sSpaceStrings() As String, nPointCount As Integer)功能:把包含空间信息的文本按照空间信息项的结构解析为若干个子项参数:sLineText 待解析的文本参数:sSpaceStrings 解析后的文本参数:nPointCount线包含的点数e.g. 如果sLineText如下:82496.755 64824.296 0 2.1582560.964 64827.347 1.96 1.9682563.860 64827.663 1.86 1.8682562.951 64796.443 0.88 0.8882563.553 64784.549 0.74 0那么:nPointCount=5sSpaceStrings为82496.75564824.29602.1582560.96464827.3471.961.9682563.86064827.6631.861.8682562.95164796.4430.880.8882563.55364784.5490.740Public Function File2Features() As Boolean 功能:读取文本文件,并获得要素的属性和空间信息,调用ParsePropertyText和ParseSpaceText来完成转换 返回值:TRUE 无错误,FALSE有错误Public Property Set LineFileStructure(pLineFileStructure As LineFileStructure)设定LFSPublic Property Get LineFileStructure() As LineFileStructure获得LFS6 IPointFeatureClass中文名:点要素类类型:Abstract功能:1.为ImportWorkspace类提供PFS文件有效性验证2.管理特定类型的点要素类:如排水井3.创建特定类型的点要素:如排水井4.创建特定类型的点要素文本文件结构:如排水井的文本文件结构关系:包含一个点要素文本文件的结构PFS,包含一个对ImportDirector的引用关系:实例化点要素文本文件的结构PFS,实例化点要素属性&方法: Public Function GetFeatureClassName() As String 获得要素类名称Public Function GetPropertyName(Index As Integer) As String 获得指定位置的要素类文本文件定义的某个属性名称Public Function CreatePointFileStructure() As PointFileStructure 创建点要素文本文件结构Public Function CreatePointFeature(PropertyStrings() As String) As IPointFeature根据从文本文件获得的属性属性值创建点要素:如排水井Public Function GetPropertyCount() As Integer 获得要素类文本文件定义的属性个数7 LineFeatureClass中文名:线要素类类型:Abstract功能:该接口的功能:1.为ImportWorkspace类提供PFS文件有效性验证2.管理特定类型的线要素类:如排水管线3.创建特定类型的线要素:如排水管线4.创建特定类型的线要素文本文件结构:如排水管线的文本文件结构关系:实例化线要素文本文件的结构LFS,实例化线要素属性&方法: Public Function GetFeatureClassName() As String 获得要素类名称 Public Function GetPropertyName(Index As Integer) As String 获取属性信息第index项的属性名Public Function GetSpaceName(Index As Integer) As String 获取组成线要素的点的空间信息 第index项的名称Public Function CreateLineFileStructure() As LineFileStructure 创建特定类型的线要素文本文件结构:如排水管线线的文本文件结构Public Function CreateLineFeature(PropertyStrings() As String, SpaceStrings() As String) As ILineFeature功能:创建线要素参数:PropertyStrings 要素属性信息参数:SpaceStrings 组成线要素的点的空间信息返回值:创建的特定类型的线要素文本文件结构remarks: PropertyStrings()的首个为空间信息项的数量Public Function GetPropertyCount() As Integer 每个线要素的属性信息项数Public Function GetSpaceCount() As Integer 组成线要素的点的空间信息项数8 IPointFeature中文名:点要素类型:Abstract功能:1.Text2PointFeature负责用字符串来初始化对象,如果有错误,返回false2.X,Y为空间信息3.SourceFile为要素所在的源文件属性&方法:Public Property Let SourceFile(ByVal FileName As String)功能:设置要素所在的源文件Public Property Get SourceFile() As String功能:获取要素所在的源文件Public Property Get Point() As esriCore.IPoint功能:获取要素的点空间信息返回值:点Public Function Text2PointFeature(PropertyStrings() As String) As Boolean功能:负责用字符串来初始化点要素对象,如果有错误,返回false参数:PropertyStrings() 描述点要素属性信息的文本返回值:如果有错误,返回false,否则返回true9 ILineFeature中文名:线要素类型:Abstract功能:1.Text2LineFeature负责用字符串来初始化线要素对象,如果有错误,返回false2.SourceFile为要素所在的源文件3.获取线要素的点数4.获取组成线要素的点5.获取组成线要素的线段数5.获取组成线要素的线段关系:包含若干个LinePoint属性&方法: Public Function Text2LineFeature(PropertyStrings() As String, SpaceStrings() As String) As Boolean功能:Text2LineFeature负责用字符串来初始化对象,如果有错误,返回false参数:PropertyStrings() 描述线要素属性信息的文本参数:SpaceStrings() 描述线要素空间信息的文本返回值:如果有错误,返回false,否则返回truePublic Property Let SourceFile(ByVal FileName As String)功能:设置要素所在的源文件Public Property Get SourceFile() As String功能:获取要素所在的源文件Public Property Get PointCount() As Integer功能:获取线要素的点数返回值:线要素的点数Public Function GetPoint(Index As Integer) As LinePoint功能:获取线要素的点参数:Index 第Index个点(从0开始算起)返回值:线要素的点Public Function GetSegment(Index As Integer) As esriCore.IGeometry功能:获取线要素的线段参数:Index 第Index个线段(从0开始算起)返回值:线要素的线段Public Property Get SegmentCount() As Integer功能:获取线要素的线段数返回值:线要素的线段数10 LinePoint中文名:线要素类型:CoCreable功能:该类用于描述组成线要素的点关系:属性&方法:Public Property Let ToZ(ByVal Z As Single)Public Property Get ToZ() As Single后向埋深Public Property Let FromZ(Z As Single)Public Property Get FromZ() As Single前向埋深 Public Sub Text2Point(SpaceStrings() As String)功能:用文本来初始化对象SpaceStrings用文本来初始化对象Public Property Set Point(pPoint As IPoint)Public Property Get Point() As IPoint点的空间信息11 ColObject中文名:对象集类型:CoCreable功能:该类用于存放各种Object关系:包含若干个Object属性&方法:Public Function Add(pObject As Object, Optional sKey As String) As Object功能:添加元素参数:pObject 待添加的元素参数:sKey 键返回值:添加的元素Public Property Get Item(ByVal IndexKey As Long) As Object功能:获取元素参数:IndexKey 位置返回值:IndexKey 位置的元素Public Property Get Count() As Long功能:获取元素个数返回值:元素个数Public Sub RemoveAll()功能:删除所有元素Public Sub Remove(ByVal IndexKey As Long)功能:删除IndexKey 位置的元素参数:IndexKey 位置12 IImportWorkspace中文名:导入工作空间类型:Abstract功能:1.为ImportDirector类提供Datast有效性验证2.管理特定类型的线要素类和点要素类:如排水井、排水管线3.和特定类型的线要素类和点要素类共同完成文本到数据集的转换remarks: 每个具体的ImportWorkspace需要保存对ImportDirector的引用关系:包含两个ColObject,分别用于存放点要素和线要素,包含一个ImportDirector的引用,包含一个对Dataset的引用,该Dataset为存储要素的数据集属性&方法:Public Property Set ImportDirector(pImportDirector As ImportDirector)设置对ImportDirector的引用Public Property Get ImportDirector() As ImportDirector返回对ImportDirector的引用Public Function Import() As Boolean功能:负责从文本文件导入到数据集返回值:true成功false失败Public Function VerifyDataset(pDataset As IDataset) As Boolean 验证数据集是否有效Public Property Get LineFeatures() As ColObject 获取线要素文件Public Function RollBack() As BooleanCalled if import fails to cancel all transactionsPublic Property Get PointFeatures() As ColObject 获取点要素文件Public Property Set Dataset(pDataset As IDataset) 设置数据集Public Property Get Dataset() As IDataset 获取数据集Public Property Get LFC() As ILineFeatureClass 获取线要素类Public Property Get PFC() As IPointFeatureClass 获取点要素类Public Function BeforeSnap(pLineFeature As IFeature, pPointFeature As IFeature, bIsFromPoint As Boolean) As BooleanCalled before snap a line to a point to do some preprocessing and to judge whether the line can be snapped to the pointPublic Sub LineSnapped2Point(pLineFeature As IFeature, pPointFeature As IFeature, bIsFromPoint As Boolean)Called after point inserted and line snapped to the inserted point feature to update the LineFeature and the point featurePublic Sub LineAttached2Point(pLineFeature As IFeature, pPointFeature As IFeature, bIsFromPoint As Boolean)Called after Line inserted and snapped to a point feature to update the LineFeature and the point featurePublic Function InsertPoint(pPointFeature As IPointFeature, pFeatureClass As IFeatureClass) As LongCalled by ImportDirector.Import to insert Point into datasetPublic Function InsertLine(pLineFeature As ILineFeature) As BooleanCalled by ImportDirector.Import to insert line into dataset,return false if fail13 ImportDirector中文名:导入工作空间类型:CoCreable功能: 1.设置ImportWorkspace需要的Datast2. 设置ImportWorkspace需要的点要素集和线要素集. 设置点文本文件、线文本文件LFS文件,PFS文件有效性验证并把文本文件转换为点要素集和线要素集3.调用ImportWorkspace的import方法完成导入或者取消(rollback)导入(遇到错误时)关系:包含一个ImportWorkspace As IImportWorkspace一个frmImport一个frmLogViewer一个frmProcessor属性&方法: 该类的功能(import方法):1.用fImport设置m_pImportWorkspace需要的Datast2 .用fImport设置m_pImportWorkspace需要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论