什么是ArcGIS桌面数据互操作扩展模块?
ArcGIS数据互操作扩展模块是基于Safe Software的FME(Feature Manipulation Engine)技术的一组集成工具,它增强了ArcGIS对多种数据格式的直接读取能力。这个新的扩展模块使用户能够在无缝的互操作中完成三个关键的任务:数据的直接读取、格式的转换和数据模型的转换。
什么是自定义格式?
自定义数据格式是ArcGIS数据互操作扩展模块的强大功能之一。自定义格式是为数据创建了一个视图,使得能够在没有被物理转换为另一种新的数据格式的情况下使用。也就是说,在使用自定义格式时,并没有为原始的数据生成一个备份。相应地,当原始的数据被改变时,并不需要对数据进行再次转换。
自定义格式是由一组数据模型转换器组成,原来的数据格式在ArcGIS中显示和分析之前使用这组转换器。一旦定义了自定义格式,就能像其它ArcGIS支持的数据格式一样来使用,来读取相应结构的原始数据。比如,能够创建自定义格式来读取CAD数据中图形的属性信息,例如线的颜色和宽度等,将这些信息转换成有意义的属性,然后在ArcGIS中直接使用。另外,像本文中将讲述的,也可以从没有结构的数据中创建图形和属性。
开始练习
在开始本文中的练习之前,请到ArcUser Online站点(http://www.esri.com/news/arcuser)下载相关的数据。另外,本文假定你熟悉ArcGIS 9桌面产品的基本操作。
创建自定义的导入工具
创建一个自定义格式的第一步是创建一个自定义导入工具。自定义导入工具通过数据转换器将ArcGIS之外的数据格式导入到个人Geodatabase中。自定义格式总是基于自定义的导入工具。
在本练习中,通过GPS在野外采集的数据必须被转换成ArcGIS可用的数据。数据保存在一个CVS文件中,记录了每一个点位置和它所属的道路ID信息。道路的属性信息保存在一个数据库表中,以道路ID为关键字。用自定义导入工具将GPS测量数据和属性数据转换为一个道路要素类。
第一步:读CSV文件
1. 在Toolbox中右击ArcToolbox节点,选择New Toolbox,命名为My Interoperability Tools。
2. 右击My Interoperability Tools,选择New > Custom Data Import Tool 。在Custom Data Import Tool Wizard对话框中,点击Next。
3. 在弹出的Select Source Format对话框中,点击浏览按钮打开Formats Gallery对话框,通过双击Comma Separated Value关闭Formats Gallery对话框,此时在向导中显示了源格式。点击Next。
4. 在弹出的Locate Sample Source Data页中,点击浏览按钮,导航到示例数据集的位置。这个练习中CSV文件有一个后缀名.gps,设置文件类型为所有类型,双击文件major_roads.gps。
5. 点击Settings弹出CSV Input Settings对话框。因为CVS文件的第一行包含了字段名称,不是几何值,选中Field Names on First Line检查框。
6. 点击OK接受其设置,关闭当前窗口,返回到向导。
7. 点击Next,然后点击Finish。创建数据模型转换器的图形环境——Workbench被启动,下面准备编辑Custom Import Tool模板。Workbench canvas上显示了源要素类型到目标要素的关联。
1. 运行( Run )按钮 |
6. Workspace 标签 |
11. 转换器 |
16. 输出端口 |
2. Visualizer 按钮 |
7. Transformer Gallery |
12. 属性 |
17. 输入端口 |
3. 源数据集节点 |
8. 源要素类型 |
13. 目标要素类型 |
18. 导航面板 |
4. 源参数节点 |
9. 源属性 |
14. 目标属性 |
19. Canvas |
5. 坐标系节点 |
10. 属性 |
15. 连接线 |
20. 日志面板 |
第二步:从x,y坐标构建线性拓扑
从GPS点数据构建线拓扑的第一步是从文本属性创建点几何。我们可以用Search来快速定位到在这些操作中用到的Workbench转换器。
1. 在Workbench窗口的右下方导航面板底部点击Gallery标签。在Search框中输入2DpointReplacer,按回车键,或者点击查找按钮。 2DpointReplacer转换器显示在Search Result文件夹中。
2. 拖拽2DpointReplacer转换器到canvas上,放在源和目标要素类型之间。
3. 右击2DpointReplacer转换器,选择Insert Before。接受缺省的选择集,点击Next。这个转换器将被连接到源和目标要素类型之间。
4. 在2DpointReplacer的Property按钮上有一个红色惊叹号表明需要设置信息。点击属性按钮弹出了2DpointReplacer Parameters对话框。
5. 在X Value字段,从下拉列表中选择x属性,在Y Value字段,选择y属性。点击OK。这时Property按钮上显示为省略号,表明转换器已经有了它需要的信息。
6. 2DpointReplacer将没有几何的表要素转换为空间点要素。为了验证,你可以选择Tools > Route to Visualizer,然后选择Run按钮来执行这个自定义导入工具。当设置了Route to Visualizer,输出要素不将被送到目标要素类型,而是到Visualizer。查看了点之后,最小化Visualizer窗口。
7. 构建线性拓扑的第二步是从GPS的点创建道路线。在Gallery标签页的Search框中输入PointConnector,然后回车。将PointConnector转换器拖到2DpointReplacer和MAJOR_ROADS目标要素类型之间的位置。右击它,选择Insert Before,选择MAJOR_ROADS,点击Next。为Select Out Port选择POINTCONNECTOR:LINE,点击“完成”。在2DpointReplacer上点击POINT边上的绿色三角形,拖到PointConnector的INPUT边上的三角形。PointConnector按照收到的顺序将点连接起来。
8. 在这个例子中,每一个GPS点有一个道路的ID和它关联。点击PointConnector的属性按钮来设置Connector Break Attribute为road_id。这使得每次road_id变化时,PointConnector开始一个新的道路要素。点击OK。
9. 点击Run按钮,或按下F5,来验证线性拓扑已被创建。查看了被创建的线后最小化Visuallizor窗口。
第三步:将数据库属性关联到道路线
既然已经构建了线性的几何要素,下一步就是将道路的属性和它的几何关联起来。Joiner转换器用来查询数据库并获取和要素相关的属性。
1. 通过Gallery标签页中的Search框查找到Joiner转换器。拖拽这个转换器到PointConnecter和MAJOR_ROADS之间,右击它,并选择Insert Before,选择MAJOR_ROADS。
2. 点击Joiner转换器的属性按钮来初始化Joiner Parameter向导。在Welcome页之后点击Next。
3. 在Specify External Database页,从Type下拉列表中选择Microsoft Access File (*.MDB)。点击File Browse按钮,双击文件road_attrs.mdb。保留Username和Password字段为空。点击Next。
4. 在Identify Database keys页,指定ROAD_ID作为数据库的主键,点击 > 按钮,将它移动到Keys文本框中。点击Next。
5. 在Match Keys页,选中数据库中的主键(ROAD_ID)和要素属性中的 road_id,点击 > 按钮接受选择。点击Next。
6. 在Select Database Columns页,点击 >> 按钮添加所以数据库列到要素属性。点击Next。
7. 在后继的页面中点击Next接受向导的缺省值,点击Finish关闭向导。
8. 点击Run按钮来测试自定义导入工具。在Visualizer中查看结果,选择其中的一个要素来验证数据库属性已经存在。关闭Visualizer窗口。
第四步:定义目标要素类型
自定义的数据导入工具向导创建了MAJOR_ROADS目标要素来匹配源CSV文件中的要素类型。现在已经构建了线性几何并添加了数据库属性,但是MAJOR_ROADS目标要素的方案还是不存在的,所以下一步就是给包含道路线的空间数据库要素类定义方案。
1. 右击MAJOR_ROADS目标要素,点击Delete。
2. 选择Destination Data > Import Feature Type Definition,弹出Import Destination Feature Types对话框。
3. 在Format字段中,选择Microsoft Access Database (Attributes Only)。在Database字段,点击浏览按钮,找到示例数据集。双击road_attrs.mdb。
4. 点击OK,关闭Import Destination Feature Types对话框,同时弹出Select Feature Types to Load对话框。点击OK接受缺省设置,关闭Select Feature Types to Load对话框。
5. 展开major_roads目标要素类型,验证属性方案已经被导入。
6. 点击major_roads目标要素属性按钮,从Allowed geometries下拉菜单中选择geodb_polyline。点击OK。
7. 将Joiner转换器的JOINED输出连到major_roads目标要素类型。
8. 从File菜单中选择Save,保存自定义导入工具,保持Workbench窗口是打开的。
第五步:指定坐标系
源CSV文件是没有坐标系信息的。ArcGIS Data Interoperability扩展可以用来给数据添加一个坐标系。
1. 点击Workspace标签页,展开major_roads[CSV]节点,以及Parameters节点。
2. 双击Coordinate System节点来打开Edit Coordinate System对话框。
3. 点击Browse按钮打开Spatial Reference Properties对话框,点击Select。浏览到Projected Coordinate System > State Plane > NAD 1983 (Feet) > NAD 1983 StatePlane Texas Central FIPS 4203 (Feet).prj。 点击Add按钮。点击“确定”关闭Spatial Reference Properties对话框。
4. 这个选中的坐标系将显示在Edit Coordinate Systems对话框中。点击OK。
5. 从File菜单中选择Save保存自定义导入工具,但保持Workbench窗口打开。 现在,自定义导入工具就完成了,可以在ArcGIS的地理处理框架的任何一种方式中使用它来导入GPS点到个人的goedatabase中的线性要素。
创建自定义格式
当运行自定义导入工具,它将在个人空间数据库中为源道路数据创建一个有结构的副本。如果源数据被改变了,为了确保使用的数据是最新的版本,则需要重新运行导入操作。
要想在没有改变数据的属主的方式下使用数据,我们可以用自定义导入工具创建自定义格式。自定义格式能应用到任何满足基本需要的源GPS道路数据文件,确保使用的是最新的数据。一旦创建了自定义导入工具,就很容易将它转为自定义格式。
1. 选择File > Export As Custom Format,弹出Set Custom Format Name and Description对话框。
2. 在New Custom Format Name字段,输入GPS_Survey_Roads。在New Custom Format Description字段,输入GPS Survey Roads。点击OK,将启动一个新的标题为GPS_Survey_Roads的Workbench窗口。
3. 下一步是将自定义格式和有扩展名.gps的文件关联起来,这样转换器将自动地应用到所有的.gps文件。点击Workspace标签页,展开major_roads[CSV]节点,以及Parameters节点。右击Source CSV File,选择Edit Parameter Prompt打开Edit Parameter Prompt对话框。
4. 如果已经存在的Parameter Prompt没有被读入,则在框中输入Source CSV Files(s)。File Type Filter指定了将与自定义格式关联的文件扩展名。它是有一个描述和一个过滤器组成,用“ | ”字符分割开。删除存在的文件类型过滤器,输入下面的声明。 GPS_Files(*.gps) | *.gps | All_Files(*.*) | *.* 在Associate Format with Filter字段,选择Yes。
5. 点击OK关闭对话框,然后保存并退出GPS_Survey_Roads workbench。保存并关闭Custom Import Tool workbench。
使用自定义格式
1. 重新启动ArcCatalog来刷新关联文件列表。
2. 在Catalog tree中,浏览到示例数据所在的位置,展开major_roads.gps。选择major_roads互操作要素类,点击Preview标签查看道路数据。
3. 点击Metadata标签,然后点击Spatial标签,验证数据有正确的坐标系。 这个GPS道路自定义格式,像任何其它的ArcGIS数据互操作扩展模块支持的数据格式一样,能够在ArcGIS中使用,包括地理处理框架中。
结论
ArcGIS数据互操作扩展模块提供了许多在ArcGIS中访问数据的方法。数据模型转换器能够用来创建自定义导入工具,将数据导入到个人空间数据库中使用。另外,可以创建自定义格式,通过动态转换数据来直接读取数据,而不改变源数据的属主。