90楼#
发布于: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> |
|
|
91楼#
发布于: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> |
|
|
92楼#
发布于: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> |
|
|
93楼#
发布于:2005-07-27 15:29
这么好的帖子不顶对不起啊
|
|
|
94楼#
发布于: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> |
|
|
95楼#
发布于: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> |
|
|
96楼#
发布于: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> |
|
|
97楼#
发布于:2005-07-26 21:34
<P>支持支持,能回复吗?</P>
|
|
98楼#
发布于:2005-07-26 11:02
<P>如何连接栅格文件</P>
<P> </P> <P 17.95pt">本例实现的是如何在当前激活的Map中添加一个栅格文件。</P> <P 39pt; TEXT-INDENT: -42pt"> l 要点</P> <P 17.95pt">创建一个IrasterLayer接口对象,使用IRasterLayer.CreateFromFilePath方法加载一个Raster文件,最后用IMap.AddLayer方法将IRasterLayer添加到当前激活的Map中。</P> <P 17.95pt">主要用到IRasterLayer接口。</P> <P 39pt; TEXT-INDENT: -42pt"> l 程序说明</P> <P 17.95pt">函数AddRasterFile将路径sFilePath下的栅格文件sFileName添加到当前激活的Map中。</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 AddRasterFile(sFilePath As String, sFileName As String)</P> <P 10pt"> 'sFileName: the filename of the raster dataset<BR> 'sPath: the directory where the raster dataset resides</P> <P 10pt"> Dim pRasterLy As IRasterLayer<BR> Dim pMxDoc As IMxDocument<BR> Dim pMap As IMap<BR> Dim sRasterFile As String</P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> sRasterFile = Dir(sFilePath ; sFileName)<BR> If (sRasterFile = "") Then<BR> MsgBox ("文件不存在")<BR> Exit Sub<BR> End If</P> <P 10pt"> 'Create a raster layer<BR> Set pRasterLy = New RasterLayer</P> <P 10pt"> 'This is only one of the three ways to create a RasterLayer object.<BR> 'If there is already a Raster or RasterDataset object, then<BR> 'method CreateFromDataset or CreateFromRaster can be used.<BR> pRasterLy.CreateFromFilePath sFilePath ; sFileName</P> <P 10pt"> 'Add the raster layer to ArcMap<BR> Set pMxDoc = ThisDocument<BR> Set pMap = pMxDoc.FocusMap<BR> pMap.AddLayer pRasterLy<BR> pMxDoc.ActiveView.Refresh</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> AddRasterFile pVBProject.FileName ; "\..\..\..\.." ; "\data\", "photo.tif"</P> <P 10pt"> Exit Sub</P> <P 10pt">ErrorHandler:<BR> MsgBox Err.Description</P> <P 10pt">End Sub</P></TD></TR></TABLE></P> |
|
|
99楼#
发布于:2005-07-26 11:02
<P>如何连接Coverage文件</P>
<P 17.95pt">本例实现的是如何在当前激活的Map中连接一个Coverage文件。</P> <P 39pt; TEXT-INDENT: -42pt"> l 要点</P> <P 17.95pt">使用ArcInfoWorkspaceFactory类实现IWorkSpaceFactory接口对象,用IWorkspaceFactory.Open方法打开一个Workspace,并获得Dataset对象。由于此时的Dataset对象可能有多个Coverage文件,所以要获得IEnumDataset接口对象,通过IEnumDataset.Next方法获得一个Coverage文件,并将其所有的FeatureClass放在IFeatureClassContainer对象中。最后通过IFeatureClassContainer.Class方法获得IFeatureClass接口实例,用IMap.AddLayer方法将要连接的Coverage文件的所有FeatureClass加载到当前激活的Map中。</P> <P 17.95pt">主要用到IWorkspaceFactory接口,IWorkspace接口,IPropertySet接口,IDataset接口,IEnumDataset接口,IFeatureClassContainer接口。</P> <P 39pt; TEXT-INDENT: -42pt"> l 程序说明</P> <P 17.95pt">函数ConnectCoverageFile将sFilePath指定的ArcInfo Workspace中的名称和sFileName相同的Coverage文件加载到当前激活的Map中。</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 ConnectCoverageFile(ByVal sFilePath As String, ByVal sFileName As String)</P> <P 10pt"> Dim pWorkspace As IWorkspace<BR> Dim pWorkspaceFactory As IWorkspaceFactory<BR> Dim pPropertySet As IPropertySet<BR> Dim pDataset As IDataset<BR> Dim pEnumDataset As IEnumDataset<BR> Dim pFeatureClassC As IFeatureClassContainer<BR> Dim pFeatureLayer As IFeatureLayer<BR> Dim pMxDocument As IMxDocument<BR> Dim pMap As IMap<BR> Dim nNumber As Integer<BR> Dim sWorkspace As String</P> <P 10pt">On Error GoTo ErrorHandler:</P> <P 10pt"> sWorkspace = Dir(sFilePath, vbDirectory)<BR> If (sWorkspace = "") Then<BR> MsgBox ("文件不存在")<BR> Exit Sub<BR> End If</P> <P 10pt"> Set pWorkspaceFactory = New ArcInfoWorkspaceFactory<BR> Set pPropertySet = New PropertySet</P> <P 10pt"> 'canada is an arcinfoworkspace<BR> pPropertySet.SetProperty "DATABASE", sFilePath</P> <P 10pt"> 'pWorkSp is a pointer to the IArcInfoWorkspace<BR> Set pWorkspace = pWorkspaceFactory.Open(pPropertySet, 0)</P> <P 10pt"> 'now get to dataset objects using Idataset<BR> Set pDataset = pWorkspace</P> <P 10pt"> 'use enum to get datasets<BR> Set pEnumDataset = pDataset.Subsets</P> <P 10pt"> pEnumDataset.Reset</P> <P 10pt"> 'use FeatureClassContainer to get datasets<BR> Set pFeatureClassC = pEnumDataset.Next</P> <P 10pt"> Do While Not pFeatureClassC Is Nothing<BR> Set pDataset = pFeatureClassC<BR> If (pDataset.Name <> sFileName) Then<BR> Set pFeatureClassC = pEnumDataset.Next<BR> Else<BR> Exit Do<BR> End If<BR> Loop</P> <P 10pt"> 'add FeatureClassContainer to map<BR> If (pFeatureClassC Is Nothing) Then<BR> MsgBox ("文件不存在")<BR> Else<BR> nNumber = 0<BR> Set pMxDocument = ThisDocument<BR> Set pMap = pMxDocument.FocusMap<BR> Do While nNumber < pFeatureClassC.ClassCount<BR> Set pFeatureLayer = New FeatureLayer<BR> Set pFeatureLayer.FeatureClass = pFeatureClassC.Class(nNumber)<BR> pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName<BR> nNumber = nNumber + 1<BR> pMap.AddLayer pFeatureLayer<BR> Loop<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> ConnectCoverageFile pVBProject.FileName ; "\..\..\..\.." ; "\data\canada", "canada"</P> <P 10pt"> Exit Sub</P> <P 10pt">ErrorHandler:<BR> MsgBox Err.Description</P> <P 10pt">End Sub</P></TD></TR></TABLE></P> |
|
|