20楼#
发布于:2005-07-26 21:34
<P>支持支持,能回复吗?</P>
|
|
21楼#
发布于:2005-07-27 13:09
<P>如何创建Shape文件</P>
<P 17.95pt">本例实现的是如何创建一个Shape文件。</P> <P 39pt; TEXT-INDENT: -42pt"> l 要点</P> <P 17.95pt">首先创建新IField接口实例,生成新字段,并获得该实例的IFieldEdit接口对象,用FieldsEdit的AddField方法将新字段加入到IFields接口对象中,最后用IFeatureWorkspace的CreateFeatureClass方法生成新的Shape文件</P> <P 17.95pt">主要用到IFeatureWorkspace接口,IWorkspaceFactory接口,IFieldsEdit接口,IFieldEdit接口,IFeatureClass接口。</P> <P 39pt; TEXT-INDENT: -42pt"> l 程序说明</P> <P 18pt">函数CreatShapeFile根据输入的文件路径和文件名,创建Shape文件。</P> <P 39pt; TEXT-INDENT: -42pt"> l 代码</P> <P> <TABLE height=43 width=541 align=center border=0><!--DWLayoutTable--> <TR> <TD vAlign=top width=535 height=75> <P 10pt">Private Sub CreatShapeFile(ByVal sFilePath As String, ByVal sFileName As String)</P> <P 10pt"> Dim pFeatureWorkspace As IFeatureWorkspace<BR> Dim pWorkspaceFactory As IWorkspaceFactory<BR> Dim pFields As IFields<BR> Dim pFieldsEdit As IFieldsEdit<BR> Dim pField As IField<BR> Dim pFieldEdit As IFieldEdit<BR> Dim pGeometryDef As IGeometryDef<BR> Dim pGeometryDefEdit As IGeometryDefEdit<BR> Dim pFeatClass As IFeatureClass<BR> Dim sShapeFieldName As String<BR> Dim sNewShapeFileName As String</P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> sNewShapeFileName = Dir(sFilePath ; sFileName ; ".shp")<BR> If (sNewShapeFileName <> "") Then<BR> MsgBox ("文件已经存在")<BR> Exit Sub<BR> End If</P> <P 10pt"> sShapeFieldName = "Shape"<BR><BR> 'Open the folder to contain the shapefile as a workspace<BR> Set pWorkspaceFactory = New ShapefileWorkspaceFactory<BR> Set pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(sFilePath, 0)</P> <P 10pt"> 'Set up a simple fields collection<BR> Set pFields = New esriCore.Fields<BR> Set pFieldsEdit = pFields</P> <P 10pt"> 'Make the shape field<BR> 'it will need a geometry definition, with a spatial reference<BR> Set pField = New esriCore.Field<BR> Set pFieldEdit = pField<BR><BR> pFieldEdit.Name = sShapeFieldName<BR> pFieldEdit.Type = esriFieldTypeGeometry<BR><BR> Set pGeometryDef = New GeometryDef<BR> Set pGeometryDefEdit = pGeometryDef<BR> With pGeometryDefEdit<BR> .GeometryType = esriGeometryPolygon<BR> Set .SpatialReference = New UnknownCoordinateSystem<BR> End With<BR> Set pFieldEdit.GeometryDef = pGeometryDef<BR><BR> pFieldsEdit.AddField pField</P> <P 10pt"> 'Add others miscellaneous text field<BR> Set pField = New esriCore.Field<BR> Set pFieldEdit = pField<BR> With pFieldEdit<BR> .Name = "SmallInteger"<BR> .Type = esriFieldTypeSmallInteger<BR> End With<BR><BR> pFieldsEdit.AddField pField</P> <P 10pt"> Set pField = New esriCore.Field<BR> Set pFieldEdit = pField<BR> With pFieldEdit<BR> .Name = "Integer"<BR> .Type = esriFieldTypeInteger<BR> End With</P> <P 10pt"> pFieldsEdit.AddField pField</P> <P 10pt"> Set pField = New esriCore.Field<BR> Set pFieldEdit = pField<BR> With pFieldEdit<BR> .Name = "Single"<BR> .Type = esriFieldTypeSingle<BR> End With</P> <P 10pt"> pFieldsEdit.AddField pField</P> <P 10pt"> Set pField = New esriCore.Field<BR> Set pFieldEdit = pField<BR> With pFieldEdit<BR> .Precision = 5<BR> .Scale = 5<BR> .Name = "Double"<BR> .Type = esriFieldTypeDouble<BR> End With</P> <P 10pt"> pFieldsEdit.AddField pField</P> <P 10pt"> Set pField = New esriCore.Field<BR> Set pFieldEdit = pField<BR> With pFieldEdit<BR> .Length = 30<BR> .Name = "String"<BR> .Type = esriFieldTypeString<BR> End With</P> <P 10pt"> pFieldsEdit.AddField pField</P> <P 10pt"> Set pField = New esriCore.Field<BR> Set pFieldEdit = pField<BR> With pFieldEdit<BR> .Name = "Date"<BR> .Type = esriFieldTypeDate<BR> End With</P> <P 10pt"> pFieldsEdit.AddField pField </P> <P 10pt"> 'Create the shapefile<BR> '(some parameters apply to geodatabase options and can be defaulted as Nothing)<BR> Set pFeatClass = pFeatureWorkspace.CreateFeatureClass _<BR> (sFileName, pFields, Nothing, Nothing, _<BR> esriFTSimple, sShapeFieldName, "")</P> <P 10pt"> sNewShapeFileName = Dir(sFilePath ; "\MyShapeFile.shp")</P> <P 10pt"> If (sNewShapeFileName = "") Then<BR> MsgBox ("Build Success")<BR> Else<BR> MsgBox ("Build Fail")<BR> End If</P> <P 10pt"> Exit Sub</P> <P 10pt">ErrorHandler:<BR> MsgBox Err.Description</P> <P 10pt">End Sub</P> <P 10pt">Private Sub UIButtonControl1_Click()</P> <P 10pt"> Dim pVBProject As VBProject</P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> Set pVBProject = ThisDocument.VBProject<BR> 'Dont include .shp extension<BR> CreatShapeFile pVBProject.FileName ; "\..\..\..\.." ; "\data\", "MyShapeFile"</P> <P 10pt"> Exit Sub</P> <P 10pt">ErrorHandler:<BR> MsgBox Err.Description</P> <P 10pt">End Sub</P> <P 10pt">Private Sub UIButtonControl1_Click()</P> <P 10pt"> Dim pVBProject As VBProject</P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> Set pVBProject = ThisDocument.VBProject<BR> 'Dont include .shp extension<BR> CreatShapeFile pVBProject.FileName ; "\..\..\..\.." ; "\data\", "MyShapeFile"</P> <P 10pt"> Exit Sub</P> <P 10pt">ErrorHandler:<BR> MsgBox Err.Description</P> <P 10pt">End Sub</P></TD></TR></TABLE></P> |
|
22楼#
发布于:2005-07-27 13:10
<P>如何创建DBF文件</P>
<P 17.95pt">本例要实现的是如何创建一个单独的DBF文件。</P> <P 39pt; TEXT-INDENT: -42pt">l 要点</P> <P 17.95pt">首先设定DBF文件的字段个数,再创建新的IField对象,生成新字段,设置其属性,再加入到IFields对象中,最后用IFeatureWorkspace.CreateTable方法创建一个新的DBF文件并返回ITable对象。</P> <P 17.95pt">主要用到IField接口,IFieldEdit接口,IFields接口,IFieldsEdit接口。</P> <P 39pt; TEXT-INDENT: -42pt">l 程序说明</P> <P 17.95pt">函数CreateDBF根据输入的路径和文件名创建一个DBF文件并返回一个ITable对象。</P> <P 39pt; TEXT-INDENT: -42pt">l 代码</P> <P> <TABLE height=43 width=541 align=center border=0><!--DWLayoutTable--> <TR> <TD vAlign=top width=535 height=75> <P 10pt">Private Function CreateDBF (sFilePath As String, sFileName As String) As ITable</P> <P 10pt">'createDBF: simple function to create a DBASE file.</P> <P 10pt">'note: the name of the DBASE file should not contain the .dbf extension</P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> Dim pFeatureWorkspace As IFeatureWorkspace</P> <P 10pt"> Dim pWorkspaceFactory As IWorkspaceFactory</P> <P 10pt"> Dim FileFolder As New Scripting.FileSystemObject</P> <P 10pt"> Dim pFieldsEdit As esriCore.IFieldsEdit</P> <P 10pt"> Dim pFieldEdit As esriCore.IFieldEdit</P> <P 10pt"> Dim pFields As IFields</P> <P 10pt"> Dim pField As IField</P> <P 10pt"> Dim sDir As String</P> <P 10pt"> 'Open the Workspace</P> <P 10pt"> Set pWorkspaceFactory = New ShapefileWorkspaceFactory</P> <P 10pt"> If Not FileFolder.FolderExists(sFilePath) Then</P> <P 10pt"> MsgBox "路径不存在" ; vbCr ; sFilePath</P> <P 10pt"> Exit Function</P> <P 10pt"> End If</P> <P 10pt"> sDir = Dir(sFilePath ; sFileName ; ".dbf")</P> <P 10pt"> If (sDir <> "") Then</P> <P 10pt"> MsgBox ("文件已存在")</P> <P 10pt"> Exit Function</P> <P 10pt"> End If</P> <P 10pt"> Set pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(sFilePath, 0)</P> <P 10pt"> 'if a fields collection is not passed in then create one</P> <P 10pt"> 'create the fields used by our object</P> <P 10pt"> Set pFields = New esriCore.Fields</P> <P 10pt"> Set pFieldsEdit = pFields</P> <P 10pt"> pFieldsEdit.FieldCount = 6</P> <P 10pt"> 'Create text Fields</P> <P 10pt"> Set pField = New Field</P> <P 10pt"> Set pFieldEdit = pField</P> <P 10pt"> With pFieldEdit</P> <P 10pt"> .Name = "SmallInteger"</P> <P 10pt"> .Type = esriFieldTypeSmallInteger</P> <P 10pt"> End With</P> <P 10pt"> Set pFieldsEdit.Field(0) = pField</P> <P 10pt"> Set pField = New Field</P> <P 10pt"> Set pFieldEdit = pField</P> <P 10pt"> With pFieldEdit</P> <P 10pt"> .Name = "Integer"</P> <P 10pt"> .Type = esriFieldTypeInteger</P> <P 10pt"> End With</P> <P 10pt"> Set pFieldsEdit.Field(1) = pField</P> <P 10pt"> Set pField = New Field</P> <P 10pt"> Set pFieldEdit = pField</P> <P 10pt"> With pFieldEdit</P> <P 10pt"> .Name = "Single"</P> <P 10pt"> .Type = esriFieldTypeSingle</P> <P 10pt"> End With</P> <P 10pt"> Set pFieldsEdit.Field(2) = pField</P> <P 10pt"> Set pField = New Field</P> <P 10pt"> Set pFieldEdit = pField</P> <P 10pt"> With pFieldEdit</P> <P 10pt"> .Precision = 5</P> <P 10pt"> .Scale = 5</P> <P 10pt"> .Name = "Double"</P> <P 10pt"> .Type = esriFieldTypeDouble</P> <P 10pt"> End With</P> <P 10pt"> Set pFieldsEdit.Field(3) = pField</P> <P 10pt"> Set pField = New Field</P> <P 10pt"> Set pFieldEdit = pField</P> <P 10pt"> With pFieldEdit</P> <P 10pt"> .Length = 30</P> <P 10pt"> .Name = "String"</P> <P 10pt"> .Type = esriFieldTypeString</P> <P 10pt"> End With</P> <P 10pt"> Set pFieldsEdit.Field(4) = pField</P> <P 10pt"> Set pField = New Field</P> <P 10pt"> Set pFieldEdit = pField</P> <P 10pt"> With pFieldEdit</P> <P 10pt"> .Name = "Date"</P> <P 10pt"> .Type = esriFieldTypeDate</P> <P 10pt"> End With</P> <P 10pt"> Set pFieldsEdit.Field(5) = pField</P> <P 10pt"> Set createDBF = pFeatureWorkspace.CreateTable(sFileName, pFields, Nothing, Nothing, "")</P> <P 10pt"> sDir = Dir(sFilePath ; sFileName ; ".dbf")</P> <P 10pt"> If (sDir <> "") Then</P> <P 10pt"> MsgBox ("Build Success")</P> <P 10pt"> Else</P> <P 10pt"> MsgBox ("Build Fail")</P> <P 10pt"> End If</P> <P 10pt"> Exit Function</P> <P 10pt">ErrorHandler:</P> <P 10pt"> MsgBox Err.Description</P> <P 10pt">End Function</P> <P 10pt">Private Sub UIButtonControl1_Click()</P> <P 10pt"> Dim pVBProject As VBProject</P> <P 10pt"> Dim pTable As ITable</P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> Set pVBProject = ThisDocument.VBProject</P> <P 10pt"> 'Dont include .dbf extension</P> <P 10pt"> Set pTable = CreateDBF (pVBProject.FileName ; "\..\..\..\.." ; "\data\", "MyDBFFile")</P> <P 10pt"> Exit Sub</P> <P 10pt">ErrorHandler:</P> <P 10pt"> MsgBox Err.Description</P> <P 10pt">End Sub</P></TD></TR></TABLE></P> |
|
23楼#
发布于:2005-07-27 13:11
<P>如何创建GeoDataBase文件</P>
<P 17.95pt">本例要实现的是如何创建一个GeoDataBase文件。</P> <P 39pt; TEXT-INDENT: -42pt">l 要点</P> <P 17.95pt">定义IWorkspaceFactory接口对象,并用esriCore. AccessWorkspaceFactory类来实现,再调用IWorkspaceFactory.Create方法创建一个GeoDataBase文件。</P> <P 17.95pt">主要用到了IWorkspaceFactory接口。</P> <P 39pt; TEXT-INDENT: -42pt">l 程序说明</P> <P 17.95pt">函数CreateAccessWorkspace根据要创建的GeoDataBase文件所在路径sFilePath和文件名sFileName创建GeoDataBase文件。</P> <P 39pt; TEXT-INDENT: -42pt">l 代码</P> <P> <TABLE height=43 width=541 align=center border=0><!--DWLayoutTable--> <TR> <TD vAlign=top width=535 height=75> <P 10pt">Private Function CreateAccessWorkspace(sFilePath As String, sFileName As String)</P> <P 10pt"> Dim pWorkspaceFactory As IWorkspaceFactory</P> <P 10pt"> Dim sDir As String</P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> </P> <P 10pt"> sDir = Dir(sFilePath ; sFileName ; ".mdb")</P> <P 10pt"> If (sDir <> "") Then</P> <P 10pt"> MsgBox ("文件已存在")</P> <P 10pt"> Exit Function</P> <P 10pt"> End If</P> <P 10pt"> </P> <P 10pt"> 'create the Access Workspace factory</P> <P 10pt"> Set pWorkspaceFactory = New esriCore.AccessWorkspaceFactory</P> <P 10pt"> pWorkspaceFactory.Create sFilePath, sFileName, Nothing, 0</P> <P 10pt"> </P> <P 10pt"> sDir = Dir(sFilePath ; sFileName ; ".mdb")</P> <P 10pt"> If (sDir <> "") Then</P> <P 10pt"> MsgBox ("Build Success")</P> <P 10pt"> Else</P> <P 10pt"> MsgBox ("Build Fail")</P> <P 10pt"> End If</P> <P 10pt"> </P> <P 10pt"> Exit Function</P> <P 10pt">ErrorHandler:</P> <P 10pt"> MsgBox Err.Description</P> <P 10pt">End Function</P> <P 10pt"> </P> <P 10pt">Private Sub UIButtonControl1_Click()</P> <P 10pt"> Dim pVBProject As VBProject</P> <P 10pt"> </P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> Set pVBProject = ThisDocument.VBProject</P> <P 10pt"> </P> <P 10pt"> 'Dont include .mdb extension</P> <P 10pt"> CreateAccessWorkspace pVBProject.FileName ; "\..\..\..\.." ; "\data\", "MyGEODataFile"</P> <P 10pt"> Exit Sub</P> <P 10pt">ErrorHandler:</P> <P 10pt"> MsgBox Err.Description</P> <P 10pt">End Sub</P></TD></TR></TABLE></P> |
|
24楼#
发布于:2005-07-27 15:29
这么好的帖子不顶对不起啊
|
|
|
25楼#
发布于:2005-07-30 15:16
<P>如何创建Coverage文件</P>
<P>本例要实现的是如何创建一个Coverage文件。</P> <P>l 要点</P> <P>首先为IWorkspaceFactory接口创建一个ArcInfoWorkspaceFactory的实例,然后根据路径sWorkspacePath使用IWorkspaceFactory.Create方法和IWorkspaceFactory.Open方法,获得一个名为sWorkspaceName的ArcInfo Workspace,最后使用IArcInfoWorkspace. CreateCoverage方法创建一个名为sFileName的Coverage文件。</P> <P>主要用到IWorkspaceFactory接口,IArcInfoWorkspace接口和IPropertySet接口。</P> <P>l 程序说明</P> <P>函数CreateCoverageFile根据路径sWorkspacePath和名称sWorkspaceName创建一个ArcInfo Workspace,再在其中创建名为sFileName的Coverage文件。</P> <P>l 代码</P> <P> <P>Private Sub CreateCoverageFile(ByVal sWorkspacePath As String,ByVal sWorkspaceName As String, ByVal sFileName As String)</P> <P> Dim pWorkspaceFactory As IWorkspaceFactory</P> <P> Dim pArcInfoWorkspace As IArcInfoWorkspace</P> <P> Dim pPropertySet As IPropertySet</P> <P> Dim pFeatureDataset As IFeatureDataset</P> <P> Dim sTemplateCoverage As String</P> <P> Dim sCoverageFile As String<BR><BR>On Error GoTo ErrorHandler:</P> <P>sCoverageFile = Dir(sWorkspacePath ; "\" ; sWorkspaceName ; "\" ; sFileName, vbDirectory)</P> <P> If (sCoverageFile <> "") Then</P> <P> MsgBox ("文件已经存在")</P> <P> Exit Sub</P> <P> End If</P> <P> Set pFeatureDataset = Nothing</P> <P> Set pPropertySet = New PropertySet</P> <P> pPropertySet.SetProperty "SERVER", sWorkspaceName</P> <P> Set pWorkspaceFactory = New ArcInfoWorkspaceFactory</P> <P> 'create an arcinfoworkspace</P> <P> pWorkspaceFactory.Create sWorkspacePath, sWorkspaceName, pPropertySet, 0</P> <P> pPropertySet.SetProperty "DATABASE", sWorkspacePath ; "\" ; sWorkspaceName</P> <P> 'pArcInfoWorkspace is a pointer to the IArcInfoWorkspace</P> <P> Set pArcInfoWorkspace = pWorkspaceFactory.Open(pPropertySet, 0)</P> <P> 'create a coverage without a template</P> <P> Set pFeatureDataset = pArcInfoWorkspace.CreateCoverage(sFileName, "", _esriCoveragePrecisionDouble)<BR><BR>' or use the methods on iarcinfoworkspace</P> <P>' sTemplateCoverage = "C:\arcgis\arcexe83\arcobjects developer kit\samples\data\canada\canada"</P> <P>' Set pFeatureDataset = pArcInfoWorkspace.CreateCoverage(sFileName, sTemplateCoverage, _esriCoveragePrecisionDouble)</P> <P> If (pFeatureDataset Is Nothing) Then</P> <P> MsgBox ("Build Success")</P> <P> Else</P> <P> MsgBox ("Build Fail")</P> <P> End If</P> <P> Exit Sub</P> <P>ErrorHandler:</P> <P> MsgBox Err.Description</P> <P>End Sub</P> <P>Private Sub UIButtonControl1_Click()</P> <P> Dim pVBProject As VBProject</P> <P>On Error GoTo ErrorHandler:</P> <P> Set pVBProject = ThisDocument.VBProject</P> <P> CreateCoverageFile pVBProject.FileName ; "\..\..\..\.." ; "\data", _</P> <P> "MyArcInfoWorkspace", "MyCoverFile"</P> <P> Exit Sub</P> <P>ErrorHandler:</P> <P> MsgBox Err.Description</P> <P>End Sub</P> <br> |
|
26楼#
发布于:2005-07-30 15:17
<P>如何建立文件连接(Join / Link)</P>
<br> <P>本例实现的是如何将地图中的一个FeatureLayer的属性表与另一个数据文件建立连接。</P> <P>l 要点</P> <P>首先需要定义两个ITable接口对象,分别用来获得地图中的属性表和需要连接的数据文件,再通过IMemoryRelationshipClassFactory.Open方法将两个ITable接口对象根据某个关键字段建立连接,</P> <P>最后使用IDisplayRelationshipClass.DisplayRelationshipClass方法将显示该连接</P> <P>主要用到IMemoryRelationshipClassFactory接口,IRelationshipClass接口和IDisplayRelationshipClass接口。</P> <P>l 程序说明</P> <P>函数Join是将当前激活的地图中名称为sLayerName的图层和路径为sFilePath、文件名为sFileName的文件按字段名为sFieldName的字段进行连接。</P> <P>l 代码</P> <P> <P>Private Function Join(ByVal sLayerName As String, ByVal sFilePath As String, _ByVal sFileName As String, ByVal sFieldName As String) As Boolean</P> <P> Dim pMxDocument As IMxDocument<BR> Dim pMap As IMa<BR> Dim pWorkspaceFactory As IWorkspaceFactory<BR> Dim pWorkspace As IWorkspace<BR> Dim pFeatureWorkspace As IFeatureWorkspace<BR> Dim pFeatureLayer As IFeatureLayer<BR> Dim pFeatureClass As IFeatureClass<BR> Dim pPrimaryTable As ITable<BR> Dim pForeignTable As ITable<BR> Dim pDisplayTable As IDisplayTable<BR> Dim pMemoryRelationshipCF As IMemoryRelationshipClassFactory<BR> Dim pRelationshipClass As IRelationshipClass<BR> Dim pDisplayRelationshipC As IDisplayRelationshipClass<BR> Dim nNumber As Integer<BR> Dim sForeignFile As String<BR><BR>On Error GoTo ErrorHandler:</P> <P> Join = False</P> <P> sForeignFile = Dir(sFilePath ; "\" ; sFileName)</P> <P> If (sForeignFile = "") Then</P> <P> MsgBox "The ForeignFile is not exist."</P> <P> Exit Function</P> <P> End If</P> <P> Set pWorkspaceFactory = New ShapefileWorkspaceFactory</P> <P> Set pWorkspace = pWorkspaceFactory.OpenFromFile(sFilePath, 0)</P> <P> Set pFeatureWorkspace = pWorkspace</P> <P> Set pForeignTable = pFeatureWorkspace.OpenTable(sFileName)</P> <P> Set pMxDocument = ThisDocument</P> <P> Set pMap = pMxDocument.FocusMap</P> <P> For nNumber = 0 To pMap.LayerCount - 1</P> <P> If pMap.Layer(nNumber).Name = sLayerName Then</P> <P> Set pFeatureLayer = pMap.Layer(nNumber)</P> <P> Exit For</P> <P> End If</P> <P> Next</P> <P> If pFeatureLayer Is Nothing Then</P> <P> MsgBox "No Layer's Name is " ; sLayerName</P> <P> Exit Function</P> <P> End If</P> <P> Set pDisplayTable = pFeatureLayer</P> <P> Set pFeatureClass = pDisplayTable.DisplayTable</P> <P> Set pPrimaryTable = pFeatureClass</P> <P> Set pMemoryRelationshipCF = New MemoryRelationshipClassFactory</P> <P> Set pRelationshipClass = pMemoryRelationshipCF.Open("TabletoLayer", pPrimaryTable, sFieldName, _</P> <P> pForeignTable, sFieldName, "forward", "backward", esriRelCardinalityOneToOne)</P> <P> Set pDisplayRelationshipC = pFeatureLayer</P> <P> pDisplayRelationshipC.DisplayRelationshipClass pRelationshipClass, esriLeftOuterJoin</P> <P> Join = True</P> <P> Exit Function</P> <P>ErrorHandler:</P> <P> MsgBox Err.Description</P> <P>End Function</P> <P>Private Sub UIButtonControl1_Click()</P> <P> Dim pVBProject As VBProject</P> <P>On Error GoTo ErrorHandler:</P> <P> Set pVBProject = ThisDocument.VBProject</P> <P> Join "WorldCountries", pVBProject.FileName ; "\..\..\..\.." ; "\data", "Continents.dbf", "FID"</P> <P> Exit Sub</P> <P>ErrorHandler:</P> <P> MsgBox Err.Description</P> <P>End Sub</P> <p> |
|
27楼#
发布于:2005-07-30 15:18
如何浏览纪录(属性查询)
<br> <P 17.95pt">本例实现的是如何按照给定的查询要求,找出满足要求的记录。</P> <P 39pt; TEXT-INDENT: -42pt">l 要点</P> <P 17.95pt">创建IQueryFilter接口对象,设置IQueryFilter.WhereClause属性为属性查询条件,使用IFeatureClass.Search方法进行查询,返回ICursor接口对象</P> <P 17.95pt">主要用到了IFeatureClass接口、IFeature接口、IFeatureCursor接口和IQueryFilter接口。</P> <P 39pt; TEXT-INDENT: -42pt">l 程序说明</P> <P 17.95pt">函数SelectFeatures在当前激活的Map的第一个图层中查出"FID < 2"的所有记录。</P> <P 39pt; TEXT-INDENT: -42pt">l 代码</P> <TABLE height=43 width=541 align=center border=0><!--DWLayoutTable--> <TR> <TD vAlign=top width=535 height=75> <P 10pt">Private Sub SelectFeatures()</P> <P 10pt"> Dim pMxDocument As IMxDocument</P> <P 10pt"> Dim pMap As IMap</P> <P 10pt"> Dim pFeatureLayer As IFeatureLayer</P> <P 10pt"> Dim pFeatureClass As IFeatureClass</P> <P 10pt"> Dim pFeature As IFeature</P> <P 10pt"> Dim pFeatureCursor As IFeatureCursor</P> <P 16.5pt; LINE-HEIGHT: 10pt">Dim pQueryFilter As IqueryFilter</P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> Set pMxDocument = ThisDocument</P> <P 10pt"> Set pMap = pMxDocument.FocusMap</P> <P 10pt"> If (pMap.LayerCount = 0) Then</P> <P 10pt"> MsgBox ("缺少数据")</P> <P 10pt"> Exit Sub</P> <P 10pt"> End If</P> <P 10pt"> Set pFeatureLayer = pMap.Layer(0)</P> <P 10pt"> Set pFeatureClass = pFeatureLayer.FeatureClass</P> <P 10pt"> Set pQueryFilter = New QueryFilter</P> <P 10pt"> pQueryFilter.WhereClause = "FID < 2"</P> <P 10pt"> Set pFeatureCursor = pFeatureClass.Search(pQueryFilter, False)</P> <P 10pt"> Set pFeature = pFeatureCursor.NextFeature</P> <P 10pt"> Do While Not pFeature Is Nothing</P> <P 10pt"> 'More Operations</P> <P 10pt"> Set pFeature = pFeatureCursor.NextFeature</P> <P 10pt"> Loop</P> <P 10pt"> Exit Sub</P> <P 10pt">ErrorHandler:</P> <P 10pt"> MsgBox Err.Description</P> <P 10pt">End Sub</P> <P 10pt">Private Sub UIButtonControl1_Click()</P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> SelectFeatures</P> <P 10pt"> Exit Sub</P> <P 10pt">ErrorHandler:</P> <P 10pt"> MsgBox Err.Description</P> <P 10pt">End Sub</P></TD></TR></TABLE> |
|
28楼#
发布于:2005-07-30 15:18
<P>如何编辑记录</P>
<P 17.95pt">本例实现的是如何修改FeatureClass中某条记录(Feature)的值。</P> <P 39pt; TEXT-INDENT: -42pt">l 要点</P> <P 17.95pt">通过IFeatureClass.Update方法获得可修改记录的IFeatureCursor接口对象,使用IFeatureCursor.NextFeature方法获得Ifeatur接口对象,修改其属性值,通过IFeatureCursor.UpdateFeature方法提交IFeature修改内容。</P> <P 18pt">主要用到IFeatureCursor接口</P> <P 39pt; TEXT-INDENT: -42pt">l 程序说明</P> <P 17.95pt">函数OpenFeatureClass获得当前激活的Map中第一层的IFeatureClass接口对象。</P> <P 17.95pt">函数EditFeature修改pFeatureClass中第一条记录的第七个字段的值。</P> <P 39pt; TEXT-INDENT: -42pt">l 代码</P> <P> <TABLE height=43 width=541 align=center border=0><!--DWLayoutTable--> <TR> <TD vAlign=top width=535 height=75> <P 10pt">Private Function EditFeature(pFeatureClass As IFeatureClass) As Boolean</P> <P 10pt"> Dim pFeature As IFeature</P> <P 10pt"> Dim pFeatureCursor As IFeatureCursor</P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> EditFeature = False</P> <P 10pt"> If (pFeatureClass Is Nothing) Then</P> <P 10pt"> Exit Function</P> <P 10pt"> End If</P> <P 10pt"> Set pFeatureCursor = pFeatureClass.Update(Nothing, False)</P> <P 10pt"> Set pFeature = pFeatureCursor.NextFeature</P> <P 10pt"> If (Not pFeature Is Nothing) Then</P> <P 10pt"> pFeature.Value(6) = "New Place"</P> <P 10pt"> pFeatureCursor.UpdateFeature pFeature</P> <P 10pt"> MsgBox ("修改成功")</P> <P 10pt"> EditFeature = True</P> <P 10pt"> Else</P> <P 10pt"> MsgBox ("修改失败")</P> <P 10pt"> End If</P> <P 10pt"> Exit Function</P> <P 10pt">ErrorHandler:</P> <P 10pt"> MsgBox Err.Description</P> <P 10pt">End Function</P> <P 10pt">Private Function OpenFeatureClass() As IFeatureClass</P> <P 10pt"> Dim pMxDocument As IMxDocument</P> <P 10pt"> Dim pMap As IMap</P> <P 10pt"> Dim pFeatureLayer As IFeatureLayer</P> <P 10pt"> Dim pFeatureClass As IFeatureClass</P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> Set OpenFeatureClass = Nothing</P> <P 10pt"> Set pMxDocument = ThisDocument</P> <P 10pt"> Set pMap = pMxDocument.FocusMap</P> <P 10pt"> If (pMap.LayerCount = 0) Then</P> <P 10pt"> MsgBox ("缺少数据")</P> <P 10pt"> Exit Function</P> <P 10pt"> End If</P> <P 10pt"> Set pFeatureLayer = pMap.Layer(0)</P> <P 10pt"> Set pFeatureClass = pFeatureLayer.FeatureClass</P> <P 10pt"> Set OpenFeatureClass = pFeatureClass</P> <P 10pt"> Exit Function</P> <P 10pt">ErrorHandler:</P> <P 10pt"> MsgBox Err.Description</P> <P 10pt">End Function</P> <P 10pt">Private Sub UIButtonControl1_Click()</P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> Dim pFeatureClass As IFeatureClass</P> <P 10pt"> Set pFeatureClass = OpenFeatureClass()</P> <P 10pt"> EditFeature pFeatureClass</P> <P 10pt"> Exit Sub</P> <P 10pt">ErrorHandler:</P> <P 10pt"> MsgBox Err.Description</P> <P 10pt">End Sub</P></TD></TR></TABLE></P> |
|
29楼#
发布于:2005-07-30 15:20
<P>如何增加记录</P>
<P>本例要实现的是如何在FeatureClass中新增一条记录(Feature)。</P> <P>l 要点</P> <P>通过IFeatureClass.Insert方法获得可插入记录的游标IFeatureCursor,然后使用IFeatureClass.CreateFeatureBuff方法获得IFeatureBuffer接口实例,使用IFeatureCursor.InsertFeature方法插入记录。</P> <P>主要用到IFeatureCursor接口。</P> <P>l 程序说明</P> <P>函数OpenFeatureClass获得当前激活的Map中第一层的IFeatureClass接口对象。</P> <P>函数InsertFeature在pFeatureClass中添加一条记录。</P> <P>l 代码</P> <P> <P>Private Function InsertFeature(pFeatureClass As IFeatureClass) As Boolean</P> <P> Dim pFeatureCursor As IFeatureCursor</P> <P> Dim pFeatureBuffer As IFeatureBuffer</P> <P> Dim nFeatureNumber As Integer</P> <P>On Error GoTo ErrorHandler:</P> <P> InsertFeature = False</P> <P> If (pFeatureClass Is Nothing) Then</P> <P> Exit Function</P> <P> End If</P> <P> Set pFeatureCursor = pFeatureClass.Insert(True)</P> <P> Set pFeatureBuffer = pFeatureClass.CreateFeatureBuffer</P> <P> nFeatureNumber = -1</P> <P> pFeatureBuffer.Value(6) = "Insert Land"</P> <P> nFeatureNumber = pFeatureCursor.InsertFeature(pFeatureBuffer)</P> <P> If (nFeatureNumber <> -1) Then</P> <P> MsgBox ("添加了第" ; nFeatureNumber ; "条记录")</P> <P> InsertFeature = True</P> <P> Else</P> <P> MsgBox ("添加失败")</P> <P> InsertFeature = False</P> <P> End If</P> <P> Exit Function</P> <P>ErrorHandler:</P> <P> MsgBox Err.Description</P> <P>End Function</P> <P>Private Function OpenFeatureClass() As IFeatureClass</P> <P> Dim pMxDocument As IMxDocument</P> <P> Dim pMap As IMap</P> <P> Dim pFeatureLayer As IFeatureLayer</P> <P> Dim pFeatureClass As IFeatureClass </P> <P>On Error GoTo ErrorHandler:</P> <P> Set OpenFeatureClass = Nothing</P> <P> Set pMxDocument = ThisDocument</P> <P> Set pMap = pMxDocument.FocusMap</P> <P> If (pMap.LayerCount = 0) Then</P> <P> MsgBox ("缺少数据")</P> <P> Exit Function</P> <P> End If</P> <P> Set pFeatureLayer = pMap.Layer(0)</P> <P> Set pFeatureClass = pFeatureLayer.FeatureClass</P> <P> Set OpenFeatureClass = pFeatureClass</P> <P> Exit Function</P> <P>ErrorHandler:</P> <P> MsgBox Err.Description</P> <P>End Function </P> <P>Private Sub UIButtonControl1_Click()</P> <P>On Error GoTo ErrorHandler:</P> <P> Dim pFeatureClass As IFeatureClass</P> <P> Set pFeatureClass = OpenFeatureClass()</P> <P> InsertFeature pFeatureClass</P> <P> Exit Sub</P> <P>ErrorHandler:</P> <P> MsgBox Err.Description</P> <P>End Sub</P> <br> |
|