ArcGIS中的连接和关联表
大多数数据库的设计指导方针都倾向于将数据库组织成多个表 - 每个表关注一个特定的主题 - 而非一个包含所有必要字段的大型表。设置多个表可以避免数据库中的信息发生重复,因为只会将信息在一个表中存储一次。当需要当前表中未包含的信息时,可以将两个表关联起来。
例如,您可能会从组织中的其他部门获取数据,向供应商购买具有商业价值的数据,或者直接从 Internet 下载数据。如果这些信息本身存储在表文件(如 dBASE、INFO 或地理数据库表)中,您就可以将其与地理要素相关联,而后在地图上显示这些数据。
ArcGIS 允许您通过一个公用字段(也称为键)将一个表中的记录与另一个表中的记录相关联。可通过多种方式进行此类关联,其中包括在地图中临时连接或关联表,或者在地理数据库中创建可以保持更长久关联的关系类。例如,可将宗地所有权信息表与宗地图层进行关联,因为它们共享一个宗地 ID 字段。
当对两表进行连接时,基于两个表的公用字段可以将属性从一个表追加到另一个表上。关联表也用于定义两个表间的关系 - 这也基于公用字段 - 但并不把属性从一个表追加到另一个表;而是在需要时访问关联的数据。
连接表的属性
通常,会根据在这两个表中均可找到的字段值将数据表连接到图层。这一字段的名称可以不同,但数据类型必须相同;例如,必须将数字连接到数字,将字符串连接到字符串,依此类推。可以使用连接数据对话框(通过在 ArcMap 中右键单击某个图层来访问)或添加连接工具执行连接操作。
假设您已获取反映各国家人口百分率变化的数据,并想要根据此信息生成人口增长地图。只要人口数据存储在数据库的表中并且与您当前图层共享公用字段,您就可以将其连接到地理要素,然后使用其他字段来符号化、标注、查询或分析该图层要素。
一对一和多对一的关系
在 ArcMap 中连接表时,将在图层属性表和包含要连接的信息的表之间建立一对一或多对一的关系。下例说明了每个国家与其国家人口数据变化之间的一对一的关系。也就是说,一个国家对应着一个人口变化。
下面是一个多对一的关系示例。假设您有一个图层,按其土地利用类型来对每个面要素进行归类。图层属性表仅存储土地利用编码;而独立表中存储了每个土地利用类型的全部类型描述。连接这两个表可建立一个多对一的关系,因为图层属性表中的许多记录都将连接到土地利用描述表中的同一记录。然后,当为您的地图生成图例时,就可以使用更多的描述文本。
一对多和多对多的关系
使用存在一对多或多对多关系的数据时,应使用关联或关系类来建立数据集之间的关系。但是,也可在这些情况下创建连接。在这种情况下创建连接时,会根据数据的来源,工具和其他特定图层设置的工作方式而存在差别。如果使用地理数据库数据创建连接,则返回所有匹配记录。如果使用 shapefile 或 dBASE 表等非数据库数据创建连接,则只返回第一条匹配记录。
这意味着,如果使用地理数据库数据创建了一对多或多对多连接,则在生成的报表中可以看到多条记录,每个匹配项对应一条记录。在符号化连接图层、标注、识别要素、生成图表和使用“查找”或“超链接”工具时,如果使用连接字段也可以看到多个匹配项。如果使用连接图层作为地理处理工具的输入或用在导出操作中,则将使用多条匹配记录。
在所有一对多连接的情况下,仅连接第一条匹配记录并显示在图层的属性表中。
按空间位置连接数据
当地图上的图层未共享公共属性字段时,可以使用空间连接将其连接起来,即根据图层中要素的位置连接两个图层的属性。
可以使用连接数据对话框(通过在 ArcMap 中右键单击某个图层来访问)或空间连接工具执行空间连接操作。
使用空间连接,您可以找到以下任意内容:
- 距其他要素最近的要素
- 要素内包括什么
- 什么与要素相交
- 落在每个面要素内的点数
按位置连接(或空间连接)将使用空间关联在所涉及的图层之间将一个图层中的字段追加到另一个图层。空间连接与属性和关系类连接不同,它不是动态连接,而是需要将结果保存到新的输出图层中。
可使用下述三种关联中的其中一种来执行空间连接:
- 将每个要素与最近的一个或多个要素匹配:在此关联中,您可以添加最近要素的属性或最近要素数字属性的一个聚合(最小、最大等)。
- 将每个要素与其所属的要素匹配:在此情况下,追加当前要素所属的要素的属性。例如,这种类似情况包括落在面要素内的点或者完全包含(也就是重叠)在其他线段内的线段。
- 将每个要素与其相交的一个或多个要素匹配:类似于上面提到的最近要素关联,您可以追加一个相交要素的属性或相交要素数值型属性的一个聚合。
对于每个点、面和线的组合,只有最常用的这些关联在连接对话框中才可用。但使用 VBA,可以执行基于任何关联的连接,并可以使用点、线或面要素图层的任何组合。
关联表
与连接表不同,关联表只是在两个表间定义一个关系。关联的数据不会像连接表那样附加到图层的属性表。但是,在使用此图层的属性时可以访问到关联的数据。
例如,如果您选择一个建筑,则可以查找此建筑的所有承租人。同样地,如果您选择一个承租人,则可以查找承租人所在的建筑(或者在多个购物中心的连锁店的情况下为若干建筑 - 多对多关系)。然而,如果您对这些数据上执行连接,ArcMap 将仅查找每个建筑的第一个承租人,而忽略其他承租人。
ArcMap 中定义的关联实质上与地理数据库中定义的简单关系类相同,只是前者是与地图一起保存而不是保存在地理数据库中。
如果数据存储在地理数据库中,并且定义了关系类,您可以直接使用这些关系类而无需在 ArcMap 中建立关联。当您将参与关系类中的一个图层添加到地图中时,该关系类将自动可用。请注意,当数据存储在一个地理数据库中时,要定义不同的多对多关系。一般情况下,如果在您的地理数据库中定义了关系类,则应该使用这些关系类而不是在 ArcMap 中创建新的关系类。
连接与关联
以下为针对数据是选择连接还是关联的一般指导方针:
- 当两个表中的数据存在一对一或多对一的关系时,则可以连接这两个表。
- 当两个表中的数据存在一对多或多对多的关系时,则可以关联这两个表。
保存连接与关联
当您保存包含连接和关联的地图时,ArcMap 将保存两个属性表之间的连接方式定义,而不保存所连接的数据本身。下次打开地图时,不论是连接还是关联,ArcMap 都将通过从数据库中读取这两个表来重新建立二者之间的关系。这样,自上次查看地图上的关系后,在源表中所进行的任何更改都将自动包括并反映在地图上。
连接可存储在 ArcMap 文档或图层文件中。如果您打算在某个时候移动数据,则应该使用相对路径保存您的 ArcMap 文档。如果数据发生了移动,在打开文档后您可以修复表和图层,但除非目标表和连接表位于同一个目录或工作空间中,否则无法修复连接。如果使用相对路径保存文档,只要相对于数据移动的位置相应地移动文档,就可自动恢复表和图层的连接。
通过导出包含连接数据的图层,就可轻松制作该图层的永久磁盘副本。要导出图层,在“内容列表”中右键单击图层,将鼠标指向数据,然后单击导出数据。这样可以创建一个具有所有属性(包含连接字段)的新要素类。
结合使用连接、关联和关系类
如果既要对数据执行连接又要执行关联,则连接和关联的创建顺序将非常重要。如果您的图层或表包含关联,则当该图层或表与数据建立连接时,关联将被移除。如果在连接的图层或表上执行关联操作,则当移除连接时关联也会被移除。作为一般的经验规则,最好先创建连接然后再添加关联。
假设要将 tableA 连接到 layerC 并将 tableB 关联到 layerC,有三种可能的操作方法,其中两种可行。下面分别介绍每种情况:
- 将 tableA 连接到 layerC,然后将 tableB 关联到 layerC:该情况可行。此操作以与 tableB 建立关联的连接图层结束。
- 将 layerC 关联到 tableB,然后将 tableA 连接到 layerC:该情况也可行。由于关联是双向的,因此无论关联隶属于哪个表,所涉及的这两个表都可以使用此关联。在这种情况下,tableB 拥有关联,因此当 tableA 连接到 layerC 时,关联不会被移除。
- 将 tableB 关联到 layerC,然后将 tableA 连接到 layerC:该情况不可行。这种情况与上述情况的不同在于 layerC 拥有关联。因此,当 tableA 连接到 layerC 时,关联将被移除。
连接表所拥有的关联将不会受到连接的影响。但是,目标表或图层无法访问这些关联。
执行连接或取消连接从不会移除关系类。无论数据是包含在连接还是关联中,关系类都可以正常使用。
ArcGIS中的连接和关联表的更多相关文章
- springboot中使用JOIN实现关联表查询
* 首先要确保你的表和想要关联的表有外键连接 repository中添加接口JpaSpecificationExecutor<?>,就可以使用springboot jpa 提供的API了. ...
- mybatis学习(五)----实现关联表查询
一.一对一的表查询 查询班级表中班级号为1的对应的记录(包括教师的具体信息) 1.首先建立数据表 数据表class和techear,class表中只有一个外键techear_id,sql脚本如下: C ...
- Yii CGridView 关联表搜索排序实例
在这篇文章中,我准备讲解如何在CGridView中搜索或者排序关联表中的某一行,通过给Yii Blog demo添加一个list页面. 首先,检查你的blog demo里的protected\mode ...
- arcgis中的Join(合并连接)和Relate(关联连接)
arcgis中的Join(合并连接)和Relate(关联连接) 一.区别 1.连接关系不一样. Relate(关联连接)方式连接的两个表之间的记录可以是“一对一”.“多对一”.“一对多”的关系 Joi ...
- ylb:多表的连接与练习(第三方关联表的应用)
ylbtech-SQL Server:SQL Server-多表的连接与练习(第三方关联表的应用) SQL Server 多表的连接与练习(第三方关联表的应用). 1,多表的连接与练习(第三方关联表的 ...
- 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案
1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...
- mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化
先附上数据. CREATE TABLE `course` ( `cno` ) NOT NULL, `cname` ) CHARACTER SET utf8 NOT NULL, `ctime` ) NO ...
- EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载
之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...
- .NetCore中EFCore的使用整理(二)-关联表查询
EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading).贪婪加载 (Eager Loading)以及显示加载. 一.EF Core 1.1 1.当前的版本,还不支持延迟加载(Lazy ...
随机推荐
- git bash 常用操作文件命令行
1, cd : change directory的简写,改变目录的意思,就是切换到哪个目录下, 如 cd e:\fff 切换 E 盘下面的fff 目录. 当我们用cd 进入文件夹时,我们可以使用 通配 ...
- 如何获取Expression Design 4工具与Expression Blend 4工具
在VS2010+C#+WPF 开发项目过程中涉及到界面的布局与设计,网上有人讲采用Expression Design 4与Expression Blend 4工具相当方便, 于是决定试看看,下面将这个 ...
- linux 下 nginx 的最大文件打开设置
先设置好linux 系统的 limit, 见其他博文 nginx 也有自己的 limit 设置: 1. nginx.conf 设置 worker_rlimit_nofile 例如: worker_ ...
- win7关闭休眠功能,清除Hiberfil.sys
电脑使用的ssd,本身容量就比较小. 用管理员身份打开命令提示符, 命令窗口中输入: powercfg -h off 即可关闭休眠功能,同时 Hiberfil.sys 文件也会自动删除.
- Web前端开发工程师需要掌握哪些核心技能?
Web前端开发所涉及的内容主要包括W3C标准中的结构.行为和表现,那么这三项中我们需要掌握的核心技能是什么呢? 1.开发语言 HTML发展历史有二十多年,历经多次版本更新,HTML5和CSS3的出现又 ...
- MySQL中一条更新语句是如何执行的
1.创建表的语句和更新的语句 这个表的创建语句,这个表有一个主键ID和一个整型字段c: mysql> create table T(ID int primary key, c int); 如果要 ...
- js的DOM节点操作:创建 ,插入,删除,复制,查找节点
DOM含义:DOM是文档对象模型(Document Object Model,是基于浏览器编程的一套API接口,是W3C出台的推荐标准.其赋予了JS操作节点的能力.当网页被加载时,浏览器就会创建页面的 ...
- 只需一步,DLA开启TableStore多元索引查询加速!
一.背景介绍 Data Lake Analytics(简称DLA)在构建第一天就是支持直接关联分析Table Store(简称OTS)里的数据,实现存储计算分离架构,满足用户基于SQL接口分析Tabl ...
- HR招聘_(四)_招聘方法论(简历筛选)
.主动投递 筛选时需要看学历背景,公司平台,所在时间,岗位职责,项目经验几个部分,根据对岗位需求和企业文化选择合适的候选人. 筛选简历建议分岗位筛选,切记误操作或大意淘汰优秀候选人. .搜索下载 互联 ...
- perfcurve.m
function [X,Y,T,auc,optrocpt,subY,subYnames] = ... perfcurve(labels,scores,posClass,varargin) %PERFC ...