以三调数据为例讲解 ArcGIS属性连接和使用Excel的问题
The following article is from gisoracle Author 闫磊ArcGIS
来自:ArcGIS基础到实战
矢量连接
矢量连接有两种方式:属性连接和空间连接;
属性连接支持两个表之间存在“多对一”,或“一对多”关系,该功能如数据库的从表和主表的对应逻辑一样。该功能操作可支持矢量、栅格数据表和纯属性表格,如excel等不带图形的表,通过连接excel,属性数据可以通过excel录入。
空间连接:一般是指两个图形数据之间的关联。要求多个图层坐标系最好一致,且要素图层不存在拓扑错误。
ArcGIS下使用属性连接功能的前提条件是进行匹配的字段类型相同,且字段值相同。其中的字段类型相同是指两个表使用关联的字段都是数字字段(不区分长整数,短整数和双精度)或字符串字段,不能将一个字符串字段和一个数字型字段连接一起。连接时找不到字段就是这个原因;而值相同是指进行关联的两个字段值必须完全相同,如“1.0”和“1”不同,“北京”和“北京市”不同,“北京”和“北京 ”也不相等(后面加空格)。
属性连接过程并不生成新的表格,它是通过连接字段,把另一个表字段加在当前表字段的后面(两个表之间只能建立一个连接,如果已有字段连接,需要先删除连接后再建属性连接。删除连接后,连接字段就自动消失,连接也只能通过一个字段)。数据连接就是相当于数据库中视图(View),物理上是两个表,看起来可以做一个表使用。
属性连接功能可以用于:代码填名称,名称填代码,属性输入excel录入等等。因此,以后属性数据录入也可以通过在excel表格录入后,通过属性连接功能进行挂接,但必须有一个字段用于匹配和一一对应。
属性连接操作方法有两种:
1.在图层的右键:“连接和关联”→“连接”,如图11-12所示。
图11-12 右键连接的操作
2.也可以使用工具箱的“连接字段(JoinField)”工具。注意不是“添加连接(AddJoin)”工具,因为后者连接字段需要预先建索引。
1.编写旧地类和新地类对照表,可以是Excel格式,也可以MDB中数据表,也可以是文本文件。以整理好的对照表见:“\chp11\连接\新旧地类.xls”,打开该对照表如图11-13所示。
图11-13 新旧地类对照表
2.建立连接。样例数据:“chp11\连接\dltb.SHP”和上面的“新旧地类.xls”,将新旧地类表中的“dd$表单”和dltb.SHP添加ArcMap中,打开“新旧地类.xls”中“dd$”,数据表和excel中看不一样,如图11-14所示。
图11-14 ArcMap打开“新旧地类对照表”
上图11-14中字段“旧地类”中很多记录行数据为“空”,而在excel中不为空,这是ArcGIS使用Excel一个常见问题。此时查看“旧地类”字段类型是双精度,不是文本型。如图11-15所示。
图11-15 ArcMap查看旧地类字段类型
解决方法:在“旧地类”列中的记录值前面加'(半角的单引号,在excel中作用是标明该单元格是文本,即将值“111”修改成“'111”),具体原因请查看第11.2.2节关于Excel使用问题。修改完后将原“新旧地类.xls”文件另存成“新旧地类1.xls”,选中“地类图斑”层.鼠标右键,然后再使用“连接”操作如图11-16所示。
图11-16 连接新旧地类1.xls表
这里使用的“dd$”表是新旧地类1.xls文件的数据表单,该文件是将“旧地类”字段修改后,连接结果如图11-17所示。
图11-17 连接结果展示
3.字段更新。使用字段计算器更新地类图斑层中的字段“DLBM”,如图11-18所示。确定后,即可将新的地类代码按照对照关系更新到原字段中。
图11-18字段计算器更新
使用数据:“chp11\连接\dltb.SHP和chp11\连接\行政代码表.xls”。操作步骤如下:
1.把数据“dltb.SHP”和“行政代码表.xls”中的“行政代码表$”加入到ArcMap中;
2.在ArcMap下打开“行政代码表.xls”中的“行政代码表$`”属性表,打开后的显示界面如图11-19所示。
图11-19 代码内容为空界面
3.看到该属性表的“代码”一列全部为空。这是由于Excel文件中的数据首行记录对应的“代码”列的值中含有空格,重新启动Excel打开“行政代码表.xls”,修改“行政代码表$”表的“代码”列,删除其中的空格。具体原因见第11.2.2节关于Excel使用问题。
4.修改“行政代码表$”表的“代码”列中的空格后,在ArcMap中选中地类图斑层,按右键菜单,重新建立连接。操作如图11-20所示,使用DLTB的“ZLDWDM”字段和“行政代码表$”表的“代码”字段关联后,数据匹配一切正常。
图11-20 连接行政代码表
1.在 ArcGIS 中打开Excel工作簿时,Excel 中所有内容均为只读。
2.读取到的字段名称是从工作表中各列的首行中获取,字段名中不得含有空格或者特殊字符,否则那一列数据内容将全部为空。反之,如果在ArcGIS下看到Excel的工作表中某一列数据全部为空,原因是字段名有空格,如果有其他特殊字符,在ArcMap字段顺序和excel不一样。
3.Excel与标准数据库管理机制不一样,它不会在输入数据时,强制字段的类型。因此,在 Excel中指定的字段类型对 于在ArcGIS 中显示的字段类型不起任何决定作用。ArcGIS读取Excel文件表单中的字段类型是由该字段的头八行(除第一行为字段名外)值扫描决定的。如果在单个字段中扫描到混合数据类型,则该字段将以字符型字段的形式返回,并且其中的值将被转换为字符串。反之,如果看到一列数据中有很多为空,原因可能是字段的类型不对。解决方法:在第二行到第九行任意一行前面加半角的单引号,可以强制将该列变成字符串类型,这样就可以了。
4.在 ArcGIS 中,数值字段将被转换为双精度数据类型,即使如1,2,3等短整数,也不会定义成整数型。
5.Excel中文本类型字段的长度最长是255,超过255自动截断,只取前255个字符。解决方法:在Access中导入Excel表,再连接对应的MDB下的表。
- END -