原文发布时间:2010-11-22
作者:糖糖
新手上路之转换器应用——joiner转换器
joiner转换器是一个关联转换器,可以完成从一个外部数据库到空间要素或非空间要素的关联,能运用到对空间数据添加属性信息的操作上。通过下面的例子可以帮助我们理解它的用法
一、What we have 数据库:信息表.mdb;要素集:test.shp
二、What we want 生成的shape文件中的地类添加相应的地类名称
三、步骤
1新建一个工作空间:读模块和写模块都是shape格式,在读模块中读取test.shp
然后插入joiner转换器,如下
2 连接数据库:点击joiner转换器属性,在弹出来的对话框中点击 ,就会弹出以下对话框
这对话框中选择指定的外部数据库,下拉菜单中可以看到支持的数据库格式
选择”Microsoft Access”,然后在 MDB File栏里在对应路径下选中信息表.mdb
因为这个数据库放在本机且没有设置密码,所以Username和Password可以不填(如果数据库设有用户名,就需要在填写用户名和密码才能访问),直接点击Next进入下一步选择我们要关联的表——信息表。
3 关联:下面对话框中看到信息表中的列:大类编码,地类编码,地类名称。我们要利用“地类编码”来给shape要素添加“地类名称“,所以“地类编码”作为关联列Keys把它添加到右边的清单中
将关联列与要素集中对应的属性匹配:BD Key中地类编码与test要素的DLBM关联
4 添加属性:在数据库中将需要添加到要素中的列,即“地类名称”移到右边的Added Attribute框中,点击Next;
下面的对话框是选择关联类型,有四种类型可供选择
这四种类型表示了数据集中的行与要素集的要素之间的关联方式,由上至下为以下四种方式
a 、1:0..1 一对零或一对一,要素集中每一个要素可以与一个或零个记录关联,但是如果一个要素匹配出多个关联记录,将运行出错;
b、1:0..1+ 一对零或一对多,要素集中的要素若有任何数目的记录可以匹配,只关联第一个记录;
c、1:1 一对一 要素集中的要素与数据库的记录必须是一一关联,若出现多个匹配记录将出错
d、1:more 一对多 要素集中的要素与多个记录相关联,而且每一个记录都会列表添加到属性中去
在不确定要素集与数据库记录行关联个数的情况下,选择默认的第二种关联方式,点击Next,出现以下对话框为添加的属性值名称前加上前缀,比如我们加上前缀dlmc_
点击Next,提示是否需要关联属性值修剪
根据提示:如果有空间填充,就选择YES,点击Next,在优化joiner对话框中我们在Use Pretch Query项中打钩,不受默认行数或某个固定行数分配限制,利用预取语句Prefetch Query灵活分配添加的属性记录行数,在本例中我们要添加信息表中所有地类名称,如下:
点击Finish,再给写模块属性中添加地类名称字段来存储我们关联的列:
手动连接后,运行可以看到,有1837条记录添加到要素集中去,运行成功
在FME Universal View里我们就能看到shape文件里中添加了地类名称,如下图DLMC为“城市”。
初次运用该转换器遇到的问题:
在工作空间中,将数据库作为读模块,要素集作为写模块,结果JOINER转换器能运行,但是不能成功添加属性
总结:Joiner转换器直接访问和连结数据库,不在读模块中读取数据库,读模块读取要添加列的要素集,写模块输出关联后的要素集。