`

常用数据入sde库的代码

J# 
阅读更多
常用数据入sde库的代码
'****************************************************************
'函数功能:  将矢量要素导入到指定数据库的数据集中,可以将shapefile,dxf,coverage格式导入倒GEodatabase中
'  参数表:
'            pInDatasetNameCol      一个存储要导入的矢量要素(IFeatureClassName类型)的Collection对象
'            pOutNameCol            一个存储导入的矢量要素名称(string类型)的Collection对象
'            strGDBPath             包含矢量要素数据集名称的GDB路径,如“D:\world\Map3D.mdb”
'****************************************************************
Public Function convFeatureClass(pInDatasetNameCol As Collection, pOutNameCol As Collection, strGDBPath As String)
'获得导入数据的数目
Dim iInFCNum As Integer
iInFCNum = pInDatasetNameCol.Count
'获得输出的数据库名和数据集名
Dim sOutFDSName As String
Dim sOutGDBName As String
sOutFDSName = GetPathName(strGDBPath, 1)
sOutGDBName = GetPathName(strGDBPath, 0)
'获得输出要素集的IFeatureDatasetName
Dim pWSF As IWorkspaceFactory
Set pWSF = New AccessWorkspaceFactory
Dim pWS As IWorkspace
Set pWS = pWSF.OpenFromFile(sOutGDBName, 0)
Dim pOutFeatureWS As IFeatureWorkspace
Set pOutFeatureWS = pWS
'获得输出要素集的Dataset Name
Dim pOutFDSName As IFeatureDatasetName
Dim pOutFDS As IFeatureDataset
Set pOutFDS = pOutFeatureWS.OpenFeatureDataset(sOutFDSName)
Set pOutFDSName = pOutFDS.FullName
Dim i As Integer
For i = 1 To iInFCNum
    Dim pOutPropertySet As IPropertySet
    Set pOutPropertySet = New PropertySet
    pOutPropertySet.SetProperty "DATASET", sOutGDBName
   
    Dim pOutWorkspaceName As IWorkspaceName
    Set pOutWorkspaceName = New WorkspaceName
    pOutWorkspaceName.ConnectionProperties = pOutPropertySet
    pOutWorkspaceName.WorkspaceFactoryProgID = "esriDataSourcesGDB.AccessWorkspaceFactory.1"
   
    '设置输出要素的FeatureClass Name
    Dim pOutFCName As IFeatureClassName
    Set pOutFCName = New FeatureClassName
    Dim pDatasetName As IDatasetName
    Set pDatasetName = pOutFCName
    Set pDatasetName.WorkspaceName = pOutWorkspaceName
   
    pDatasetName.name = pOutNameCol.Item(i)
   
    '获得输入要素的FeatureClass Name
    Dim pInDatasetName As IDatasetName
    Set pInDatasetName = pInDatasetNameCol.Item(i)

    '判断是否有重名现象
    Dim pWS2 As IWorkspace2
    Set pWS2 = pWS
   
    '如果名称已存在
    If pWS2.NameExists(esriDTFeatureClass, pDatasetName.name) Then
        Dim R
        R = MsgBox("矢量要素" & pDatasetName.name & "在数据库中已存在!" & Chr(13) & "是否覆盖?", vbExclamation + vbYesNo)
        '覆盖原矢量要素
        If R = vbYes Then
            Dim pFWS As IFeatureWorkspace
            Set pFWS = pWS
            Dim pDataset As IDataset
            Set pDataset = pFWS.OpenFeatureClass(pDatasetName.name)
            pDataset.Delete
           
            Set pFWS = Nothing
            Set pDataset = Nothing
           
        '不覆盖,则退出for循环,忽略这个要素,转入下一个要素的导入
        Else
            GoTo NextStep
        End If
       
        Set pWS2 = Nothing
       
    End If
   
    '打开Table获得Fields
    Dim pname As IName
    Dim pInTable As ITable
    Set pname = pInDatasetName
    Set pInTable = pname.Open
   
    Dim pInFields As IFields
    Set pInFields = pInTable.Fields
   
    '检查Field Name
    Dim pFieldChecker As IFieldChecker
    Set pFieldChecker = New FieldChecker
    Dim pOutFields As IFields
    pFieldChecker.Validate pInFields, Nothing, pOutFields
   
    '对Fields进行循环查,查找Geometry域
    Dim j As Integer
    Dim pGeoField As IField
    For j = 0 To pOutFields.FieldCount - 1
        If pOutFields.Field(j).Type = esriFieldTypeGeometry Then
            Set pGeoField = pOutFields.Field(j)
            Exit For
        End If
    Next j
   
    '获得Geometry Field的GeometryDef
    Dim pOutFCGeoDef As IGeometryDef
    Set pOutFCGeoDef = pGeoField.GeometryDef
   
    '设置GeometryDef的GridCount,GridSize,SpatialReference
    Dim pOutFCGeoDefEdit As IGeometryDefEdit
    Set pOutFCGeoDefEdit = pOutFCGeoDef
    pOutFCGeoDefEdit.GridCount = 1
    pOutFCGeoDefEdit.GridSize(0) = DefaultIndexGrid(pInTable)
   
    Dim re
 
     '判断空间参考是否一致,全局变量m_SpatialRef是创建的矢量要素集的空间参考
    If m_SpatialRef.name <> pGeoField.GeometryDef.SpatialReference.name Then
        re = MsgBox(pInDatasetName.name & "的空间参考与数据库中的矢量要素集空间参考不符!" & Chr(13) _
                & "导入后会丢失数据。     是否继续导入?", vbYesNo + vbExclamation)
        Set pOutFCGeoDefEdit.SpatialReference = m_SpatialRef
        If re = vbNo Then
            GoTo NextStep
       End If
    Else
        Set pOutFCGeoDefEdit.SpatialReference = pGeoField.GeometryDef.SpatialReference
    End If
    '+++++++++++++++++++
    'Set pOutFCGeoDefEdit.SpatialReference = pGeoField.GeometryDef.SpatialReference
   
    '进行导入
     Dim pConverter As IFeatureDataConverter
     Set pConverter = New FeatureDataConverter
    
     pConverter.ConvertFeatureClass pInDatasetNameCol.Item(i), Nothing, pOutFDSName, pOutFCName, pOutFCGeoDef, pOutFields, "", 1000, 0
    
     Set pOutPropertySet = Nothing
     Set pOutWorkspaceName = Nothing
     Set pOutFCName = Nothing
     Set pDatasetName = Nothing
     Set pInDatasetName = Nothing
     Set pname = Nothing
     Set pInTable = Nothing
     Set pFieldChecker = Nothing
     Set pOutFields = Nothing
     Set pGeoField = Nothing
     Set pOutFCGeoDef = Nothing
     Set pConverter = Nothing
    
  
NextStep:
Next i
Set pWSF = Nothing
Set pWS = Nothing

End Function
分享到:
评论

相关推荐

    AE开发,连接SDE,Identify

    在GIS(地理信息系统)行业中,AE(ArcObjects for .NET)开发是一种常用的技术,用于构建与ESRI ArcGIS平台交互的应用程序。AE是ESRI提供的一个强大的开发工具集,允许开发者利用.NET框架来创建定制的GIS解决方案。...

    基于Arc SDE forOracle实现erase空间分析计算

    其中,Erase操作是常用的空间分析方法之一,它用于从一个空间数据集中删除另一个空间数据集中的重叠部分,从而生成新的空间数据集。本篇文章将详细介绍如何基于ArcSDE for Oracle实现Erase空间分析计算的过程。 ###...

    winform打开esri-sde

    在.NET开发环境中,Windows Forms(Winform)是一种常用的桌面应用程序框架,用于构建用户界面。而Esri的SDE(Spatial Database Engine)是ArcGIS的核心组件,用于管理地理空间数据。当我们需要在Winform应用中与...

    ArcEngine开发集锦

    1. 目录 1 2. 用ArcEngine的工具条添加图层要素 2 3. ArcEngine中对Feature的编辑 ...33. 常用数据入sde库的代码 116 34. ArcEngine开发感想 122 35. Geometry 对象浅析 124 36. AE开发中的一些基本方法(1)数据连接 134

    arcgis开发集锦

    1. 目录 1 2. 用ArcEngine的工具条添加图层要素 2 3. ArcEngine中对Feature的编辑 ...33. 常用数据入sde库的代码 116 34. ArcEngine开发感想 122 35. Geometry 对象浅析 124 36. AE开发中的一些基本方法(1)数据连接 134

    ArcObject常用VBA代码

    - 打开工作空间:`IDataset.Workspace`属性获取数据集的工作空间,`IWorkspaceFactory.OpenFromFile`方法打开文件GDB或SDE工作空间。 - 数据源连接:`IWorkspace.OpenConnection`方法建立与数据库的连接。 10. **...

    C 代码 说明的属性 随机常微分方程 (SODE),以及 用于分析的常用算法,包括欧拉方法.rar

    在编写SDE求解器时,需要注意内存管理(例如,避免内存泄漏),确保数值稳定性和精度,以及适当使用数据结构和算法优化计算效率。 在实际应用中,除了欧拉方法,还有其他更高级的算法,如改进的欧拉方法(Heun's ...

    MATLAB随机模型工具箱[收集].pdf

    - Euler-Maruyama和Milstein近似:常用的数值解法,用于估算SDE的解。 - 方差减小技术:提高模拟效率,减少计算中的不确定性。 - 基于Monte Carlo模拟的统计:通过大量随机实验来估计SDE模型的统计特性。 - 参数...

    OvB-SDE-Test-nforne

    【压缩包子文件的文件名称列表】中的 "OvB-SDE-Test-nforne-master" 可能代表这是项目的主分支或主线版本,"master"通常是Git版本控制系统中的默认分支名,表明这是项目的主代码库。 基于以上信息,我们可以讨论...

    AE开发实例代码总结.doc

    - 通过属性设置加载数据空间的方法不仅适用于Access数据库,也可以应用于SDE(Spatial Database Engine)数据库,这是一种分布式地理数据库系统。在加载SDE数据库时,需要实例化`SdeWorkspaceFactoryClass`而不是`...

    陷阱滤波matlab代码-trapping_suite:悬浮动力学系统的数据分析、处理、仿真和参数提取

    包含用于(漂亮)绘图、谱密度估计、数据导入和其他常用功能的功能。 2- opt_trap 光阱函数(高斯光束中的极化率、质量、偶极力)。 3- paul_trap 保罗陷阱函数(特别是通过拟合 Mathieu 函数的级数截断来获得电荷)...

    sde-sheet-codes

    3. **函数与模板**:函数是代码重用的手段,而模板则允许我们创建泛型代码,适用于不同数据类型。掌握如何定义、调用函数,以及理解和使用函数模板是必备技能。 4. **类与对象**:面向对象编程是C++的一大特色,...

    三菱电梯维修调试资料:NEXWAY门机板故障代码.docx

    3. **421 CAN 传输错误**:CAN(Controller Area Network)是一种常用的工业通信协议,用于实时数据交换。如果出现传输错误,可能涉及CAN总线的物理损坏、波特率设置不匹配或节点故障。 4. **111 逆变器过电流**:...

    AE常用类、接口解释.docx

    10. **DataSourcesGDB 类库**:用于数据库数据源(如 SDE 或 FileGDB)的接口。 11. **DataSourcesOleDB 类库**:处理 OLEDB 数据源,如 Microsoft SQL Server。 12. **DataSourcesRaster 类库**:提供了处理栅格...

    Arcgis开发集锦

    #### 三十一、常用数据入sde库的代码 **知识点**: - **数据入库**:解释如何将常用数据(如矢量数据、栅格数据等)导入ArcSDE数据库。 - **实现方法**:使用`ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass`...

    SDE访谈集合:用于软件开发工程访谈的资源,问题和解决方案的集合

    8. **框架与库的使用**:如Spring Boot、MyBatis、Hibernate等Java开发常用框架,以及Apache Commons、Guava等库的熟悉程度,体现了候选人在实际项目中的实战经验。 9. **问题解决能力**:面试通常会通过提问实际...

    基于arcgis和.NET架构地图匹配软件二次开发笔记.docx

    - 从SDE获取GPS数据并加载到图层上涉及到数据导出、数据转换和ArcGIS图层管理。 11. **存取GPS点和属性值**: - 为了自由存取GPS点或shp文件属性,需要理解ArcGIS的数据结构和API,以实现读写操作。 12. **计算...

    软件工程常用术语

    18. **软件开发工程师 (SDE)**:SDE 是编写和维护软件代码的专业人员。 19. **代码行 (LOC)**:LOC 是衡量软件规模的一种度量,表示源代码中的指令或语句数量。 20. **软件设计 (SD)**:SD 包括系统的架构设计、...

    ARCGIS 开发集锦 地理信息系统的二次开发

    #### 三十一、常用数据入sde库的代码 在ARCGIS中,将数据导入SDE数据库是一项常见任务。 **实现方法:** 1. **连接数据库:** 使用`SdeWorkspaceFactoryClass`连接SDE数据库。 2. **数据导入:** 通过...

    arcsde的多种连接方式

    对于自动化任务和批量处理,Python脚本连接ArcSDE是常用方法。使用arcpy模块中的ConnectToServer函数,可以编程方式建立连接。例如: ```python import arcpy conn = arcpy.ArcSDEConnectionManager("DATABASE_TYPE...

Global site tag (gtag.js) - Google Analytics