assa
路人甲
路人甲
  • 注册日期2004-08-04
  • 发帖数8
  • QQ
  • 铜币126枚
  • 威望0点
  • 贡献值0点
  • 银元0个
20楼#
发布于:2005-07-26 21:34
<P>支持支持,能回复吗?</P>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
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>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
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>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
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>
举报 回复(0) 喜欢(0)     评分
木白林
路人甲
路人甲
  • 注册日期2004-03-19
  • 发帖数319
  • QQ
  • 铜币824枚
  • 威望0点
  • 贡献值0点
  • 银元0个
24楼#
发布于:2005-07-27 15:29
这么好的帖子不顶对不起啊
心情卡片 一起分享...
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
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>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
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>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
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>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
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>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
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>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部