ArcGIS接口详细说明(5)

2019-08-31 17:37

Dim pMap AsImap

Set pDoc = ThisDocument Set pMap = pDoc.Maps.Item(0) Set pFeatLayer = pMap.Layer(0) Set pFeatcls = pFeatLayer.FeatureClass

Dim pFeatCur AsIFeatureCursor Dim pFeatBuf AsIFeatureBuffer Dim v AsVariant

Set pFeatCur = pFeatcls.Insert(True) Set pFeatBuf = pFeatcls.CreateFeatureBuffer v =pFeatCur.InsertFeature(pFeatBuf)

IFeatureClass接口的第八个方法CreateFeatureBuffer(方法,新建一个缓冲,返回一个IFeatureBuffer类型的变量,然后再对这个变量进行操作)

例子代码:

Dim pFeatcls AsIFeatureClass Dim pFeatLayer AsIFeatureLayer Dim pDoc AsIMxDocument Dim pMap AsIMap

Set pDoc = ThisDocument Set pMap = pDoc.Maps.Item(0) Set pFeatLayer = pMap.Layer(0) Set pFeatcls = pFeatLayer.FeatureClass

'createafeaturecursorandfeaturebufferinterface Dim pFeatCur AsIFeatureCursor Dim pFeatBuf AsIFeatureBuffer

'openthefeaturecursorandfeaturebuffer Set pFeatCur = pFeatcls.Insert(True) Set pFeatBuf = pFeatcls.CreateFeatureBuffer

'getthelistoffields Dim pFlds AsIFields Dim pFld AsIField Dim i AsLong Dim pPolygon AsIPolygon Dim pPolyline AsIPolyline Dim pPt AsIPoint

Set pPolygon = NewPolygon Set pPolyline = NewPolyline Set pPt = NewPoint

'findthegeometryfield,basedontheshapetype, 'setthevalueforthefieldtotheappropriateobject Set pFlds = pFeatcls.Fields For i = 1TopFlds.FieldCount- 1 Set pFld = pFlds.Field(i)

If (pFld.Type = esriFieldTypeGeometry)Then Dim pGeom AsIGeometry

Select CasepFeatcls.ShapeType CaseesriGeometryPolygon SetpGeom =pPolygon CaseesriGeometryPolyline SetpGeom =pPolyline CaseesriGeometryPoint SetpGeom =pPt End Select

'set the valueinthefeaturebuffer pFeatBuf.Value(i) = pGeom

'if it isnotageometrycolumn,determinewhatkindof 'field it is,andinserttheequivalentofanullvalue 'for that fieldtype Else

IfpFld.Type =esriFieldTypeIntegerThen pFeatBuf.Value(i) = CLng(0)

ElseIfpFld.Type =esriFieldTypeDoubleThen pFeatBuf.Value(i) = CDbl(0)

ElseIfpFld.Type =esriFieldTypeSmallIntegerThen pFeatBuf.Value(i) = CInt(0) ElseIfpFld.Type =esriFieldTypeStringThen pFeatBuf.Value(i) = \ Else

MsgBox\ EndIf End If

Next i

'insertthefeaturefromthebufferintothedatabase pFeatCur.InsertFeaturepFeatBuf

14. 关于ITable接口(esriGeoDatabase)

ITable是把要素类当成一个表格来看,每一列对应一个字段(Field),每一行对应一个要素(Feature),所以对要素类(IFeatureClass)接口的操作均可以类似的在Itable接口中找到。 两个接口可以进行如下强制转化:

VB语言

Dim pFC AsIFeatureClass Dim pTable AsITable Set pTable = pFC

C#语言

IFeatureClass pFC; ITable pTable; pTable =(ITable)pFC;

ITable接口的第一个方法AddField(Field)(方法,增加一个属性字段到这个表,其中传入的参数为一个IField接口的变量,此变量可以由其他表获得并赋值给要操作的表,可用IFeilds接口的Field属性来获得)

ITable接口的第二个方法GetRow(OID) (方法,通过OID来从表格数据库中获取一行,返回一个IRow接口的变量)此方法类似于IFeatureClass接口的GetFeature方法

例子代码:

Dim pWorkspace AsIWorkspace Dim pFact AsIWorkspaceFactory

' This example usesanSDEconnection.Thiscodeworksthe 'sameforanyopenIWorkspace.

Dim pPropset AsIPropertySet Set pPropset = NewPropertySet With pPropset

.SetProperty \ .SetProperty \ .SetProperty \ .SetProperty \ .SetProperty \ .SetProperty \

End With

Set pFact = NewSdeWorkspaceFactory Set pWorkspace = pFact.Open(pPropset,Me.hWnd) Dim pFeatureWorkspaceAsIFeatureWorkspace Set pFeatureWorkspace =pWorkspace

Dim pTable AsITable

Set pTable = pFeatureWorkspace.OpenTable(\ Dim pRow AsIRow

Set pRow = pTable.GetRow(59) Debug.Print pRow.Value(2)

ITable接口的第三个方法GetRows(oids, Recycling) (方法,得到一个游标ICursor,通过一个oids的OID数组参数和一个Recycling的布尔类型的参数,一般为True)此方法类似于IFeatureClass接口的GetFeatures方法

例子代码:

Dim iOIDList() AsLong Dim iOIDListCount AsLong iOIDListCount =5

ReDim iOIDList(iOIDListCount) iOIDList(0) =1 iOIDList(1) =2 iOIDList(2) =3 iOIDList(3) =4

iOIDList(4) =50

Dim pCursor AsICursor

Set pCursor = pTable.GetRows(iOIDList,True) Dim pRow AsIRow Set pRow = pCursor.NextRow While Not pRowIsNothing Debug.Print pRow.Value(2) Set pRow =pCursor.NextRow

Wend

ITable接口的第四个方法RowCount(QueryFilter) (方法,得到满足查询过滤器条件的行数。此方法IFeatureClass接口没有,所以是一个很好的有条件查询要素数量的一个方法)

15. 关于IFeatureCursor接口(esriGeoDatabase)

Dim pFeatureSelectionAsIFeatureSelection Set pFeatureSelection =pFeatureLayer Dim pSelectionSet AsISelectionSet

Set pSelectionSet = pFeatureSelection.SelectionSet Dim pFeatureCursor AsIFeatureCursor pSelectionSet.SearchNothing,True,pFeatureCursor Dim pDataStats AsIDataStatistics Set pDataStats = NewDataStatistics Set pDataStats.Cursor =pFeatureCursor pDataStats.Field =\ MsgBox pDataStats.Statistics.Mean

IFeatureCursor接口的第一个方法NextFeature(方法,将游标向前跳到下一个位置,并且返回该位置的Feature) IFeatureCursor接口的第二个方法UpdateFeature(Feature) (方法,对当前游标位置的Feature进行更新)

例子代码:

'Assume we alreadyhaveareferencetoafeatureclasswiththem_pFClassvariable Dim pFCursorAsIFeatureCursor Dim pFieldsAsIFields Dim pFeatureAsIFeature Dim iAsLong


ArcGIS接口详细说明(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016民事诉讼法简答题汇总

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: