实验指导书GeoDataBase2.docx

上传人:b****6 文档编号:7039702 上传时间:2023-01-16 格式:DOCX 页数:25 大小:20.19KB
下载 相关 举报
实验指导书GeoDataBase2.docx_第1页
第1页 / 共25页
实验指导书GeoDataBase2.docx_第2页
第2页 / 共25页
实验指导书GeoDataBase2.docx_第3页
第3页 / 共25页
实验指导书GeoDataBase2.docx_第4页
第4页 / 共25页
实验指导书GeoDataBase2.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

实验指导书GeoDataBase2.docx

《实验指导书GeoDataBase2.docx》由会员分享,可在线阅读,更多相关《实验指导书GeoDataBase2.docx(25页珍藏版)》请在冰豆网上搜索。

实验指导书GeoDataBase2.docx

实验指导书GeoDataBase2

1GeoDataBase

1.1如何建立文件连接(Join/Link)

本例实现的是如何将地图中的一个FeatureLayer的属性表与另一个数据文件建立连接。

●要点

首先需要定义两个ITable接口对象,分别用来获得地图中的属性表和需要连接的数据文件,再通过IMemoryRelationshipClassFactory.Open方法将两个ITable接口对象根据某个关键字段建立连接,

最后使用IDisplayRelationshipClass.DisplayRelationshipClass方法将显示该连接

主要用到IMemoryRelationshipClassFactory接口,IRelationshipClass接口和IDisplayRelationshipClass接口。

●程序说明

函数Join是将当前激活的地图中名称为sLayerName的图层和路径为sFilePath、文件名为sFileName的文件按字段名为sFieldName的字段进行连接。

●代码

PrivateFunctionJoin(ByValsLayerNameAsString,ByValsFilePathAsString,_

ByValsFileNameAsString,ByValsFieldNameAsString)AsBoolean

DimpMxDocumentAsIMxDocument

DimpMapAsIMap

DimpWorkspaceFactoryAsIWorkspaceFactory

DimpWorkspaceAsIWorkspace

DimpFeatureWorkspaceAsIFeatureWorkspace

DimpFeatureLayerAsIFeatureLayer

DimpFeatureClassAsIFeatureClass

DimpPrimaryTableAsITable

DimpForeignTableAsITable

DimpDisplayTableAsIDisplayTable

DimpMemoryRelationshipCFAsIMemoryRelationshipClassFactory

DimpRelationshipClassAsIRelationshipClass

DimpDisplayRelationshipCAsIDisplayRelationshipClass

DimnNumberAsInteger

DimsForeignFileAsString

OnErrorGoToErrorHandler:

Join=False

sForeignFile=Dir(sFilePath&"\"&sFileName)

If(sForeignFile="")Then

MsgBox"TheForeignFileisnotexist."

ExitFunction

EndIf

SetpWorkspaceFactory=NewShapefileWorkspaceFactory

SetpWorkspace=pWorkspaceFactory.OpenFromFile(sFilePath,0)

SetpFeatureWorkspace=pWorkspace

SetpForeignTable=pFeatureWorkspace.OpenTable(sFileName)

SetpMxDocument=ThisDocument

SetpMap=pMxDocument.FocusMap

FornNumber=0TopMap.LayerCount-1

IfpMap.Layer(nNumber).Name=sLayerNameThen

SetpFeatureLayer=pMap.Layer(nNumber)

ExitFor

EndIf

Next

IfpFeatureLayerIsNothingThen

MsgBox"NoLayer'sNameis"&sLayerName

ExitFunction

EndIf

SetpDisplayTable=pFeatureLayer

SetpFeatureClass=pDisplayTable.DisplayTable

SetpPrimaryTable=pFeatureClass

SetpMemoryRelationshipCF=NewMemoryRelationshipClassFactory

SetpRelationshipClass=pMemoryRelationshipCF.Open("TabletoLayer",pPrimaryTable,sFieldName,_

pForeignTable,sFieldName,"forward","backward",esriRelCardinalityOneToOne)

SetpDisplayRelationshipC=pFeatureLayer

pDisplayRelationshipC.DisplayRelationshipClasspRelationshipClass,esriLeftOuterJoin

Join=True

ExitFunction

ErrorHandler:

MsgBoxErr.Description

EndFunction

PrivateSubUIButtonControl1_Click()

DimpVBProjectAsVBProject

OnErrorGoToErrorHandler:

SetpVBProject=ThisDocument.VBProject

Join"WorldCountries",pVBProject.FileName&"\..\..\..\.."&"\data","Continents.dbf","FID"

ExitSub

ErrorHandler:

MsgBoxErr.Description

EndSub

1.2如何浏览纪录(属性查询)

本例实现的是如何按照给定的查询要求,找出满足要求的记录。

●要点

创建IQueryFilter接口对象,设置IQueryFilter.WhereClause属性为属性查询条件,使用IFeatureClass.Search方法进行查询,返回ICursor接口对象

主要用到了IFeatureClass接口、IFeature接口、IFeatureCursor接口和IQueryFilter接口。

●程序说明

函数SelectFeatures在当前激活的Map的第一个图层中查出"FID<2"的所有记录。

●代码

PrivateSubSelectFeatures()

DimpMxDocumentAsIMxDocument

DimpMapAsIMap

DimpFeatureLayerAsIFeatureLayer

DimpFeatureClassAsIFeatureClass

DimpFeatureAsIFeature

DimpFeatureCursorAsIFeatureCursor

DimpQueryFilterAsIqueryFilter

OnErrorGoToErrorHandler:

SetpMxDocument=ThisDocument

SetpMap=pMxDocument.FocusMap

If(pMap.LayerCount=0)Then

MsgBox("缺少数据")

ExitSub

EndIf

SetpFeatureLayer=pMap.Layer(0)

SetpFeatureClass=pFeatureLayer.FeatureClass

SetpQueryFilter=NewQueryFilter

pQueryFilter.WhereClause="FID<2"

SetpFeatureCursor=pFeatureClass.Search(pQueryFilter,False)

SetpFeature=pFeatureCursor.NextFeature

DoWhileNotpFeatureIsNothing

'MoreOperations

SetpFeature=pFeatureCursor.NextFeature

Loop

ExitSub

ErrorHandler:

MsgBoxErr.Description

EndSub

PrivateSubUIButtonControl1_Click()

OnErrorGoToErrorHandler:

SelectFeatures

ExitSub

ErrorHandler:

MsgBoxErr.Description

EndSub

1.3如何编辑记录

本例实现的是如何修改FeatureClass中某条记录(Feature)的值。

●要点

通过IFeatureClass.Update方法获得可修改记录的IFeatureCursor接口对象,使用IFeatureCursor.NextFeature方法获得Ifeatur接口对象,修改其属性值,通过IFeatureCursor.UpdateFeature方法提交IFeature修改内容。

主要用到IFeatureCursor接口

●程序说明

函数OpenFeatureClass获得当前激活的Map中第一层的IFeatureClass接口对象。

函数EditFeature修改pFeatureClass中第一条记录的第七个字段的值。

●代码

PrivateFunctionEditFeature(pFeatureClassAsIFeatureClass)AsBoolean

DimpFeatureAsIFeature

DimpFeatureCursorAsIFeatureCursor

OnErrorGoToErrorHandler:

EditFeature=False

If(pFeatureClassIsNothing)Then

ExitFunction

EndIf

SetpFeatureCursor=pFeatureClass.Update(Nothing,False)

SetpFeature=pFeatureCursor.NextFeature

If(NotpFeatureIsNothing)Then

pFeature.Value(6)="NewPlace"

pFeatureCursor.UpdateFeaturepFeature

MsgBox("修改成功")

EditFeature=True

Else

MsgBox("修改失败")

EndIf

ExitFunction

ErrorHandler:

MsgBoxErr.Description

EndFunction

PrivateFunctionOpenFeatureClass()AsIFeatureClass

DimpMxDocumentAsIMxDocument

DimpMapAsIMap

DimpFeatureLayerAsIFeatureLayer

DimpFeatureClassAsIFeatureClass

OnErrorGoToErrorHandler:

SetOpenFeatureClass=Nothing

SetpMxDocument=ThisDocument

SetpMap=pMxDocument.FocusMap

If(pMap.LayerCount=0)Then

MsgBox("缺少数据")

ExitFunction

EndIf

SetpFeatureLayer=pMap.Layer(0)

SetpFeatureClass=pFeatureLayer.FeatureClass

SetOpenFeatureClass=pFeatureClass

ExitFunction

ErrorHandler:

MsgBoxErr.Description

EndFunction

PrivateSubUIButtonControl1_Click()

OnErrorGoToErrorHandler:

DimpFeatureClassAsIFeatureClass

SetpFeatureClass=OpenFeatureClass()

EditFeaturepFeatureClass

ExitSub

ErrorHandler:

MsgBoxErr.Description

EndSub

1.5如何增加记录

本例要实现的是如何在FeatureClass中新增一条记录(Feature)。

●要点

通过IFeatureClass.Insert方法获得可插入记录的游标IFeatureCursor,然后使用IFeatureClass.CreateFeatureBuff方法获得IFeatureBuffer接口实例,使用IFeatureCursor.InsertFeature方法插入记录。

主要用到IFeatureCursor接口。

●程序说明

函数OpenFeatureClass获得当前激活的Map中第一层的IFeatureClass接口对象。

函数InsertFeature在pFeatureClass中添加一条记录。

●代码

PrivateFunctionInsertFeature(pFeatureClassAsIFeatureClass)AsBoolean

DimpFeatureCursorAsIFeatureCursor

DimpFeatureBufferAsIFeatureBuffer

DimnFeatureNumberAsInteger

OnErrorGoToErrorHandler:

InsertFeature=False

If(pFeatureClassIsNothing)Then

ExitFunction

EndIf

SetpFeatureCursor=pFeatureClass.Insert(True)

SetpFeatureBuffer=pFeatureClass.CreateFeatureBuffer

nFeatureNumber=-1

pFeatureBuffer.Value(6)="InsertLand"

nFeatureNumber=pFeatureCursor.InsertFeature(pFeatureBuffer)

If(nFeatureNumber<>-1)Then

MsgBox("添加了第"&nFeatureNumber&"条记录")

InsertFeature=True

Else

MsgBox("添加失败")

InsertFeature=False

EndIf

ExitFunction

ErrorHandler:

MsgBoxErr.Description

EndFunction

PrivateFunctionOpenFeatureClass()AsIFeatureClass

DimpMxDocumentAsIMxDocument

DimpMapAsIMap

DimpFeatureLayerAsIFeatureLayer

DimpFeatureClassAsIFeatureClass

OnErrorGoToErrorHandler:

SetOpenFeatureClass=Nothing

SetpMxDocument=ThisDocument

SetpMap=pMxDocument.FocusMap

If(pMap.LayerCount=0)Then

MsgBox("缺少数据")

ExitFunction

EndIf

SetpFeatureLayer=pMap.Layer(0)

SetpFeatureClass=pFeatureLayer.FeatureClass

SetOpenFeatureClass=pFeatureClass

ExitFunction

ErrorHandler:

MsgBoxErr.Description

EndFunction

PrivateSubUIButtonControl1_Click()

OnErrorGoToErrorHandler:

DimpFeatureClassAsIFeatureClass

SetpFeatureClass=OpenFeatureClass()

InsertFeaturepFeatureClass

ExitSub

ErrorHandler:

MsgBoxErr.Description

EndSub

1.6如何删除记录

本例要实现的是如何在FeatureClass中删除一条记录(Feature)。

●要点

获得游标IFeatureCursor,然后定义IFeature接口对象,并获得要删除的记录,最后使用IFeature.Delete方法删除记录。

主要用到IFeature接口和IFeatureCursor接口。

●程序说明

函数OpenFeatureClass获得当前激活的Map中第一层的IFeatureClass接口对象。

函数DeleteFeature删除PLACENAME字段值为”InsertLand”的所有记录。

●代码

PrivateSubDeleteFeature(pFeatureClassAsIFeatureClass)

DimpFeatureAsIFeature

DimpFeatureCursorAsIFeatureCursor

DimpQueryFilterAsIQueryFilter

DimnFeatureNumberAsInteger

OnErrorGoToErrorHandler:

If(pFeatureClassIsNothing)Then

ExitSub

EndIf

SetpQueryFilter=NewQueryFilter

pQueryFilter.WhereClause="PLACENAME='InsertLand'"

SetpFeatureCursor=pFeatureClass.Search(pQueryFilter,False)

SetpFeature=pFeatureCursor.NextFeature

nFeatureNumber=0

DoWhileNotpFeatureIsNothing

pFeature.Delete

nFeatureNumber=nFeatureNumber+1

SetpFeature=pFeatureCursor.NextFeature

Loop

MsgBox("Delete "&nFeatureNumber&" Features")

ExitSub

ErrorHandler:

MsgBoxErr.Description

EndSub

PrivateFunctionOpenFeatureClass()AsIFeatureClass

DimpMxDocumentAsIMxDocument

DimpMapAsIMap

DimpFeatureLayerAsIFeatureLayer

DimpFeatureClassAsIFeatureClass

OnErrorGoToErrorHandler:

SetOpenFeatureClass=Nothing

SetpMxDocument=ThisDocument

SetpMap=pMxDocument.FocusMap

If(pMap.LayerCount=0)Then

MsgBox("缺少数据")

ExitFunction

EndIf

SetpFeatureLayer=pMap.Layer(0)

SetpFeatureClass=pFeatureLayer.FeatureClass

SetOpenFeatureClass=pFeatureClass

ExitFunction

ErrorHandler:

MsgBoxErr.Description

EndFunction

PrivateSubUIButtonControl1_Click()

OnErrorGoToErrorHandler:

DimpFeatureClassAsIFeatureClass

SetpFeatureClass=OpenFeatureClass()

DeleteFeaturepFeatureClass

ExitSub

ErrorHandler:

MsgBoxErr.Description

EndSub

1.7如何纪录排序(ITableSort)

本例要实现的是如何将一个FeatureClass中的数据按某字段的值进行排序。

●要点

定义ITableSort接口对象,并用TableSort类实现之,设置排序所用到的字段、排序方式(升序或降序)以及排序的数据源,然后使用ITableSort.Sort方法进行排序。

主要用到ITableSort接口。

●程序说明

函数OpenFeatureClass获得当前激活的Map中第一层的IFeatureClass接口对象。

函数SortFeatures按照pFeatureClass的第五个字段值对pFeatureClass的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1