属性连接在MAPINFO、ARC/INFO注记转换中的应用

陆宇荣
广西基础地理信息中心 南宁 530023)

【摘 要】 属性连接是GIS数据加工中经常使用的一种属性处理方法,本文结合如何解决ARC/INFO、MAPINFO两个软件的注记相互转换时编码丢失的问题,简单描述了在这两个软件中如何进行属性表的连接,希望起到一个抛砖引玉的作用,让广大的GIS初学者能理解并领会属性连接的应用。
【关键词】 属性连接 Mapinfo ARC/INFO

  1.引言
  由于各种软件的数据格式不一样,在各种软件的数据相互转换时有时会造成属性的丢失。比如ARC/INFO、MAPINFO两个GIS软件的注记相互转换时就会丢失编码,如果重新标赋编码,不仅工作量大,而且难以避免错漏。有没有简便的方法呢?有,通过属性连接就可以解决这个问题。下面就以如何找回ARC/INFO、MAPINFO两个GIS软件的注记相互转换丢失的编码为例详细说明如何连接属性表。
  2.注记从MAPINFO转到ARC/INFO
  流程如图1所示:

图1 从MAPINFO转到ARC/INFO的属性连接流程

  具体步骤为:
  ①将注记层从MAPINFO输出ARC/INFO的交换格式E00(注意:输出之前要压缩表,防止某些注记已删除但在表格数据中仍有空记录存在而导致属性连接错误)。
  ②将E00格式转成图层(Coverage),比如ANOTAT。此时注记的图形文件和编码(属性表)是分开存储的。图形文件通过Arctools edit打开注记要素anno浏览,能看见注记,但没有编码。而在E00转成图层时在INFO表里同时生成一个ANOTAT.TMT,编码就存放在这个属性表内。
  ③为了把编码属性与注记图形连接,还需要生成注记的子集。通过在ARC的主窗口输入Copyfeatures ANOTAT anno ANOTAT anno.t ,再输入Addtext ANOTAT.t ,此时罗列ANOTAT的属性表(List ANOTAT.tatt)还是没有编码。
  ANOTAT.TMT表记录如下:

recno
CODE
1
98209
2
98216
3
98204
4
98204
5
98202
6
98206
  连接前的ANOTAT.tatt表记录如下:
recno
T#
T-id
x
y
text
1
1
0
110.8259
24.8204
县中医医院
2
2
0
110.8248
24.8100
城北市场
3
3
0
110.8222
24.8009
县公安局
4
4
0
110.8239
24.8115
县法院
5
5
0
110.8204
24.8303
县总工会
6
6
0
110.8217
24.8221
红星小学

  ④最后是属性表的连接。ARC/INFO的属性连接用joinitem命令通过一个相关字段把两个属性表连接起来。具体的命令参数为:
  JOINITEM <in_info_file> <join_info_file> <out_info_file> <relate_item> {start_item} {LINEAR | ORDERED | LINK}

  在ARC的主窗口输入:
  Joinitem ANOTAT.tatt ANOTAT.TMT ANOTAT.tatt $recno
  ($recno是ANOTAT.tatt、ANOTAT.TMT的记录顺序号,本例把$recno作为相关字段),此时再罗列ANOTAT的属性表,你就会发现ANOTAT.tatt增加了一个名称为CODE的字段,每个注记的CODE字段的属性与MAPINFO的ANOTAT表的CODE属性是一致的。
  通过属性连接后的ANOTAT.tatt表记录如下:

recno
T#
T-id
x
y
TEXT
CODE
1
1
0
110.8259
24.8204
县中医医院
98209
2
2
0
110.8248
24.8100
城北市场
98216
3
3
0
110.8222
24.8009
县公安局
98204
4
4
0
110.8239
24.8115
县法院
98204
5
5
0
110.8204
24.8303
县总工会
98202
6
6
0
110.8217
24.8221
红星小学
98206

  3.注记从ARC/INFO转到MAPINFO
  MAPINFO的属性连接流程如下图所示:

图1 从ARC/INFO转到MAPINFO的属性连接流程

  具体步骤为:
  ①注记层输出成anotat.e00,同时在ARC主窗口输入infodbase anotat.tatt anno.dbf,把编码信息放在MAPINFO支持的dBASE格式文件中;
  ②把anotat.e00转成MAPINFO的表文件anotat.tab;
  ③同时打开anotat表和anno.dbf表;
  anotat表记录如下图所示:

id
uid
size
angle
subclass
1
0
0.000163
0
 
2
0
0.000163
0
 
3
0
0.000109
0
 
4
0
0.000163
0
 
5
0
0.000109
0
 
6
0
0.000163
0
 

  anno.dbf表记录如下图所示:

T_
T-id
x
y
TEXT
CODE
1
0
110.8259
24.8204
县中医医院
98209
2
0
110.8248
24.8100
城北市场
98216
3
0
110.8222
24.8009
县公安局
98204
4
0
110.8239
24.8115
县法院
98204
5
0
110.8204
24.8303
县总工会
98202
6
0
110.8217
24.8221
红星小学
98206

  ④在anotat表中增加code字段,用于存放注记的编码,此时code字段值均为0;
  ⑤单击主菜单的“表[A]”→“更新列”,弹出如下对话框:

  按下表设置相应的表及属性项(列):

  在确定之前还要设置连接的相关字段,单击“连接”,弹出如下对话框:

  用anotat表的“id”字段与anno.dbf表的“T”字段作为属性连接的对应字段。连接属性后anotat表的CODE字段修改成与ARC/INFO相对应的编码值。

id
uid
size
angle
subclass
code
1
0
0.000163
0
   
98209
2
0
0.000163
0
   
98216
3
0
0.000109
0
   
98204
4
0
0.000163
0
   
98204
5
0
0.000109
0
   
98202
6
0
0.000163
0
   
98206

  ⑥最后整理数据,去除从ARC/INFO带过来的不必须的字段,如id、uid、size、angle、subclass。
  4.结束语
  通过上述属性连接,可以把因转换丢失的编码信息找回来,正确率100%,在注记比较多的情况下效率明显大于人工重新标赋编码。上文所述的仅是单个注记图层的转换,如果有多个注记层需要转换,可以编程批处理,那效率提高更明显了。

地址:广西南宁市建政路5号  邮编:530023  Tel:0771-5606397  Email:webmaster@digitalgx.com
广西基础地理信息中心版权所有 2005-2010 广西基础地理信息中心制作