1、数据导入程序设计思想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
2、.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.8
3、88 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 188
4、6.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 6
5、4789.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 P2222
6、382060.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 05
7、46P008 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 179168P0
8、09 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.0
9、000 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设计思路从附件可以看出,该格式不仅用来描述排水管网,还用来描述其它地下管网,如:供水、电力等。为了今后导入其它管网数据的方便,数据导入程序应该考虑到其共同特征,把不同管网数据导入的共同部分提取出来形成一个基础架构(Frame
10、Work),同时为与不同管网类型相关的部分定义共同的接口(Interface)。这样,当需要导入某种类型的管网数据时,只需要提供对这些接口与该管网类型相关的特定实现即可。实际中,由于某些原因,文本文件的格式与规定的格式有出入,其差别在于属性项的起始列与终止列与规定的格式不同,故设计时应该为考虑到这个因素。5解决方案使用文件来描述线要素和点要素文本文件的结构,描述点要素文本文件结构的文件称作 PFS(Point File Structure,点要素文本文件结构), 其扩展名为 PFS, 描述线要素文本文件结构的文件称作 LFS(Line File Structure,线要素文本文件结构), 其扩
11、展名为 LFS。PFS 的结构如下:第一行:”点要素文本文件结构” 用于标识 PFS第二行:类别标识 用于区分不同类型的 PFS第三行:每个点要素在文本文件中所占的行数第四行开始至结束:每行表示一个属性信息项*属性信息项:要素的每个属性用一个信息项来描述,称为属性信息项LFS 的结构如下:第一行:” 线要素文本文件结构” 用于标识 LFS第二行:类别标识 用于区分不同类型的 LFS第三行:每个线要素的属性部分在文本文件中所占的行数第四行:每个描述线要素空间信息的点在文本文件中所占的行数第五行:一个特殊的属性信息项,顶点点数:描述线要素空间信息包含的点数第六行至结束:前边每行表示一个属性信息项,
12、而后边每行表示一个空间信息项*二者之间的分界由程序决定*空间信息项:描述线要素空间信息的点的每个属性用一个信息项来描述,称为空间信息项信息项的结构:第一部分:属性(空间信息的点的属性 或者 点要素、线要素的属性)名称第二部分:该属性位于每个组成要素的文本行中的第几行,从 1 开始编号第三部分:该属性位于属性所在行中的起始列第四部分:该属性位于属性所在行中的终止列每部分之间用英文的逗号分隔,除属性名称可为 UniCode 外,其它部分必须为ASCII6分析与设计基础架构(FrameWork)的功能1. 利用用户定义的 PFS 和 LFS, 完成从文本文件提取空间和属性信息.2. 把提取的空间和属
13、性信息转换到特定类型管线。显然,第一步与管线的类型无关,而第二步与管线的类型无关,为了使转换过程相对独立于管线的类型,需要对不同类型的管线与数据导入相关部分提供共同的接口,而各类型的管线负责实现这些接口,这样就可以实现导入过程相对独立于管线的类型。而空间和属性信息转换到特定类型管线则依赖于管线的类型。为此,用一些类来实现上述目标。基础架构(FrameWork)包含的类、窗体、模块:1 StructureItem 中文名:信息项 类型:CoClass功能:用于描述 PFS 和 LFS 的属性信息项或者空间信息项关系:属性&方法:无2 PointFileStructure 中文名:点要素文本文件结
14、构类型:CoClass功能:用于描述点要素文本文件的结构关系:包含若干个 StructureItem,包含一个 PointFeatureClass属性&方法:Public LineCount As Integer 每个要素属性的行数Public Property Set PointFeatureClass(ByVal pPointFeatureClass As IPointFeatureClass)设置所属线要素类Public Property Get PointFeatureClass() As IPointFeatureClass获取所属线要素类Public Sub AddItem(ByR
15、ef pItem As StructureItem)功能:增加点要素的属性信息项参数:pItem 待增加的属性信息项Public Sub SetItems(pStructureItem() As StructureItem)功能:设置点要素的属性信息项参数:pStructureItem 用于设置的点要素属性信息项Public Sub GetItems(pStructureItem() As StructureItem)功能:获取点要素的属性信息项参数:out pStructureItem 用于返回的点要素属性信息项的数组Public Function GetItem(nItem As Inte
16、ger) As StructureItem功能:获取点要素 nItem 位置的属性信息项参数:nItem 位置返回值:nItem 位置的属性信息项Public Function GetItemCount() As Integer功能:获取每个点要素包含的信息项数返回值:每个点要素包含的信息项数Public Function GetItemByName(sPropertyName As String) As StructureItem功能:获取属性名称为 sPropertyName 的属性信息项参数: sPropertyName 属性名称返回值:属性名称为 sPropertyName 的属性信息
17、项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
18、成功 false 失败3 LineFileStructure 中文名:点要素文本文件结构类型:CoClass功能:用于描述点要素文本文件的结构关系:包含若干个 StructureItem,包含一个 PointFeatureClass属性&方法: Public PropertyLineCount As Integer 每个要素属性的行数Public SpaceLineCount As Integer 每个空间信息项所占的行数Public Property Set LineFeatureClass(pLineFeatureClass As ILineFeatureClass)设置所属线要素类Pub
19、lic Property Get LineFeatureClass() As ILineFeatureClass获取所属线要素类Public Sub AddPropertyItem(pItem As StructureItem)功能:增加线要素的属性信息项参数:pItem 待增加的线要素属性信息项Public Sub SetPropertyItems(pStructureItem() As StructureItem)功能:设置线要素的属性信息项参数:pStructureItem 用于设置的线要素属性信息项Public Sub GetPropertyItems(pStructureItem()
20、 As StructureItem)功能:获取线要素的属性信息项参数:out pStructureItem 用于返回的线要素属性信息项的数组Public Function GetPropertyItem(nItem As Integer) As StructureItem功能:获取线要素 nItem 位置的属性信息项参数:nItem 位置返回值:nItem 位置的属性信息项Public Function GetPropertyItemCount() As Integer功能:获取每个线要素包含的信息项数返回值:每个线要素包含的信息项数Public Function GetPropertyIte
21、mByName(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
22、 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)功能:用 pSt
23、ructureItem 来设置组成线要素的点的信息项参数:pStructureItem 用来设置组成线要素的点的信息项Public Sub GetSpaceItems(pStructureItem() As StructureItem)功能:用 pStructureItem 来获取组成线要素的点的信息项参数:pStructureItem 用来获取组成线要素的点的信息项数组Public Function GetSpaceItem(nItem As Integer) As StructureItem功能:获取组成线要素的点的信息项,位置为 nItem参数:nItem 位置返回值:位置为 nItem
24、,组成线要素的点的信息项Public Function GetSpaceItemCount() As Integer功能:获取组成线要素的点的信息项数返回值:组成线要素的点的信息项数Public Function GetSpaceItemByName(sPropertyName As String) As StructureItem功能:获取组成线要素的点的信息项,信息项名称为 sPropertyName参数:sPropertyName 信息项名称返回值:名称为 sPropertyName 的信息项4 PointFile中文名:点要素文本文件类型:CoClass功能:根据 PFS 把点要素文本
25、文件转换为线要素并加入ImportDirector.ImportWorkspace 的点要素集关系:包含一个点要素文本文件的结构 PFS,包含一个对 ImportDirector 的引用属性&方法: Public FileName As String 文本文件名Public Property Get ImportDirector() As ImportDirector获取对 ImportDirector 的引用Public Property Set ImportDirector(pImportDirector As ImportDirector)设定对 ImportDirector 的引用Pr
26、ivate Sub ParseText(sPointText() As String, sPropertyStrings() As String)功能:把包含要素信息的文本根据 m_pPointFileStructure 解析为若干个子项参数:sPointText 待解析的文本参数:sPropertyStrings 解析后的文本例如:sPointTextP2222382560.964 64827.347 1886.139 污水检修井 塑料 0.0000 179170P001 EP2815 0546P008Public Function File2Features() As Boolean功能:
27、读取文本文件,并获得点要素的信息,调用 ParseText 来完成转换返回值:TRUE 无错误,FALSE 有错误Public Property Set PointFileStructure(pPointFileStructure As PointFileStructure)设定 PFSPublic Property Get PointFileStructure() As PointFileStructure获取 PFS 5 LineFile中文名:线要素文本文件类型:CoClass功能:根据 LFS 把点要素文本文件转换为线要素并加入ImportDirector.ImportWorkspac
28、e 的线要素集关系:包含一个点要素文本文件的结构 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()
29、 As String, sPropertyStrings() As String)功能:把包含要素属性信息的文本按照属性信息项的结构解析为若干个子项参数:sLineText 待解析的文本参数:sPropertyStrings 解析后的文本例如:sLineText 如下水泥 600 昆明市排水公司 0546 0546P008 05Private Sub ParseSpaceText(sLineText() As String, sSpaceStrings() As String, nPointCount As Integer)功能:把包含空间信息的文本按照空间信息项的结构解析为若干个子项参数:s
30、LineText 待解析的文本参数: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.968
31、2563.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 Prope
32、rty 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创建点要素文本文件结构
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。