【转帖】ArcEngine连接表join

【转帖】ArcEngine连接表join

http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=15012&extra=page%3D2

本例实现的是如何将地图中的一个FeatureLayer的属性表与另一个数据文件建立连接。
l   要点
首先需要定义两个ITable接口对象,分别用来获得地图中的属性表和需要连接的数据文件,再通过IMemoryRelationshipClassFactory.Open方法将两个ITable接口对象根据某个关键字段建立连接,
最后使用IDisplayRelationshipClass.DisplayRelationshipClass方法将显示该连接
主要用到IMemoryRelationshipClassFactory接口,IRelationshipClass接口和IDisplayRelationshipClass接口。
l   程序说明
函数Join是将当前激活的地图中名称为sLayerName的图层和路径为sFilePath、文件名为sFileName的文件按字段名为sFieldName的字段进行连接。
l   代码
Private Function Join(ByVal sLayerName As String, ByVal sFilePath As String, _ByVal sFileName As String, ByVal sFieldName As String) As Boolean
    Dim pMxDocument                     As IMxDocument
    Dim pMap                            As IMap
    Dim pWorkspaceFactory               As IWorkspaceFactory
    Dim pWorkspace                      As IWorkspace
    Dim pFeatureWorkspace               As IFeatureWorkspace
    Dim pFeatureLayer                   As IFeatureLayer
    Dim pFeatureClass                   As IFeatureClass
    Dim pPrimaryTable                   As ITable
    Dim pForeignTable                   As ITable
    Dim pDisplayTable                   As IDisplayTable
    Dim pMemoryRelationshipCF           As IMemoryRelationshipClassFactory
    Dim pRelationshipClass              As IRelationshipClass
    Dim pDisplayRelationshipC           As IDisplayRelationshipClass
    Dim nNumber                         As Integer
    Dim sForeignFile                    As String
On Error GoTo ErrorHandler:
    Join = False
    sForeignFile = Dir(sFilePath & “\” & sFileName)
    If (sForeignFile = “”) Then
        MsgBox “The ForeignFile is not exist.”
        Exit Function
    End If
    Set pWorkspaceFactory = New ShapefileWorkspaceFactory
    Set pWorkspace = pWorkspaceFactory.OpenFromFile(sFilePath, 0)
    Set pFeatureWorkspace = pWorkspace
    Set pForeignTable = pFeatureWorkspace.OpenTable(sFileName)
    Set pMxDocument = ThisDocument
    Set pMap = pMxDocument.FocusMap
    For nNumber = 0 To pMap.LayerCount – 1
        If pMap.Layer(nNumber).Name = sLayerName Then
            Set pFeatureLayer = pMap.Layer(nNumber)
            Exit For
        End If
    Next
    If pFeatureLayer Is Nothing Then
        MsgBox “No Layer’s Name is ” & sLayerName
        Exit Function
    End If
    Set pDisplayTable = pFeatureLayer
    Set pFeatureClass = pDisplayTable.DisplayTable
    Set pPrimaryTable = pFeatureClass
    Set pMemoryRelationshipCF = New MemoryRelationshipClassFactory
    Set pRelationshipClass = pMemoryRelationshipCF.Open(“TabletoLayer”, pPrimaryTable, sFieldName, _
                    pForeignTable, sFieldName, “forward”, “backward”, esriRelCardinalityOneToOne)
    Set pDisplayRelationshipC = pFeatureLayer
    pDisplayRelationshipC.DisplayRelationshipClass pRelationshipClass, esriLeftOuterJoin
    Join = True
    Exit Function
ErrorHandler:
    MsgBox Err.Description
End Function
Private Sub UIButtonControl1_Click()
    Dim pVBProject              As VBProject
On Error GoTo ErrorHandler:
    Set pVBProject = ThisDocument.VBProject
    Join “WorldCountries”, pVBProject.FileName & “\..\..\..\..” & “\data”, “Continents.dbf”, “FID”
    Exit Sub
ErrorHandler:
    MsgBox Err.Description
End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110441.html原文链接:https://javaforall.net

(0)
上一篇 2021年8月17日 下午7:05
下一篇 2021年8月17日 下午7:05


相关推荐

  • Docker(三) 通过gitlab部署CICD「建议收藏」

    Docker(三) 通过gitlab部署CICD「建议收藏」文章目录Docker(三)docker通过gitlab部署CICD一、部署gitlab1.1拉取gitlab镜像1.2运行gitlab镜像1.3配置1.4若发生502报错二、CI2.1Runner搭建2.2注册Runner2.3样例测试2.3.1新建maven-tomcat项目2.3.2创建.gitlab-ci.yml2.3.3编写Dockerfile文件2.3.4编写docker-compose.yml文件三、CD3.1安装Jenkins3.2配置目标服务器及Gitla

    2022年5月2日
    130
  • Python的strftime函数与calendar模块函数

    Python的strftime函数与calendar模块函数Python 的 strftime 函数与 calendar 模块函数一 strftime 函数二 使用步骤 1 引入库 2 读入数据总结一 strftime 函数 strftime 函数的调用格式为 strftime 日期格式 表示按指定的日期格式返回当前日期二 使用步骤 1 引入库代码如下 示例 importnumpya pyplotasplti

    2026年3月16日
    1
  • 时间管理 android app推荐,干货星球 篇十三:【强烈安利】分享10个时间管理APP,每一个都堪称精品!…

    时间管理 android app推荐,干货星球 篇十三:【强烈安利】分享10个时间管理APP,每一个都堪称精品!…干货星球篇十三 强烈安利 分享 10 个时间管理 APP 每一个都堪称精品 2020 09 1721 48 2317 点赞 120 收藏 8 评论分享 10 个时间管理 习惯养成 番茄专注 APP 1 时光序 安卓 ios 时光序是完全免费的 靠爱发电 软件非常好看 可以自定义皮肤界面 可以自己添加 也可以用官方给的墙纸 我感觉天空很好看啊 第一次使用时光序 会有详细的介绍 使用门槛很低 首页是待办事项 操作方法

    2026年3月18日
    6
  • ubuntu正确安装显卡驱动的姿势

    ubuntu正确安装显卡驱动的姿势避免 sudoapt getinstallnv 安装方式造成登录界面循环 ubuntu16 04 默认安装了第三方开源的驱动程序 nouveau 安装 nvidia 显卡驱动首先需要禁用 nouveau 不然会碰到冲突的问题 导致无法安装 nvidia 显卡驱动 编辑文件 blacklist confsudovim etc modprobe d blacklist conf 若未安

    2026年3月19日
    1
  • java垃圾回收机制原理_java垃圾回收的缺点

    java垃圾回收机制原理_java垃圾回收的缺点  最近做一个ETL的项目模块,经常由于查询数据量比较大用消息中间件MQ时引起了内存溢出的报错。做完后没事研究了一下JVM和垃圾回收的相关知识点。一:垃圾回收机制的意义java 语言中一个显著的特点就是引入了java回收机制,是c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序的时候不在考虑内存管理。由于有个垃圾回收机制,java中的额对象不在有“作用域”的概念,只有…

    2022年10月13日
    5
  • Activity Result API详解,是时候放弃startActivityForResult了「建议收藏」

    Activity Result API详解,是时候放弃startActivityForResult了「建议收藏」如果你将项目中的appcompat库升级到1.3.0或更高的版本,你会发现startActivityForResult()方法已经被废弃了。这个方法相信所有做过Android的开发者都用过,它主要是用于在两个Activity之间交换数据的。那么为什么这个如此常用的方法会被废弃呢?官方给出的说法是,现在更加建议使用ActivityResultAPI来实现在两个Activity之间交换数据的功能。我个人的观点是,startActivityForResult()方法并没有什么致命的问题,只是

    2022年7月11日
    20

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号