FME支持大量的Esri SDE和Geodatabase格式的读取和写出。如何对这些数据进行处理,取决于正在使用的平台和用途。
由于使用环境、版本等各种外部因素的存在,可能导致FME无法直接读取到ArcSDE数据库进行ArcSDE数据库的管理操作。
在处理ArcSDE数据时,需要FME的软件位数与ArcGIS的软件位数保持一致,例如:FME版本为32位,后台ArcGIS版本依然需要安装32位,才能满足ArcSDE格式数据库的使用需求。但32位软件处理数据效率上与64位差异明显,计算机硬件设备无法最大限度地被使用。
为了解决版本的兼容性问题,我们做了以下研究:
在FME与ArcGIS版本不兼容的情况下,可通过“ArcPy+FME”的方式解决此类问题。

以数据库提取为例,主要流程如下:

软件:FME Desktop+ArcGIS

首先以ArcSDE格式数据库为例,将整个数据库提取流程进行搭建。

一、获取ArcSDE数据库数据的方法选择
FME能够直接支持ArcSDE格式数据的读写,此处为避免软件兼容性问题,选用ArcPy作为主要数据提取方式,来自动化实现相关操作。将FME与ArcGIS相互结合使用,发挥其最大功效。
分析ArcGIS上数据提取功能,确定能够实现数据获取的调用函数名称以及其属性设置。
数据库数据的提取下发,通常采用两种方式:
a.通过属性条件选择满足条件的要素;
b.通过空间范围选择满足条件的要素。
同理,属性条件与空间范围条件也可同时存在。
分析ArcGIS工具列表,可发现以下两个相关工具。
(1)Select Layer By Attribute(根据属性选择要素)

通过Select Layer By Attribute(根据属性选择要素)工具,实现对数据的新增、删除、更新操作。
NEW_SELECTION—选择的要素可替换现有的任何要素;
ADD_TO_SELECTION—将选择的要素添加在现有结果中,若不存在满足条件的要素,则与“NEW_SELECTION”参数功能一致;
REMOVE_FROM_SELECTION—将选择的要素从数据库中移除,若不存在则操作无效;
SUBSET_SELECTION—选择的要素将与现有要素组合,将两者共同存在的记录保持选中状态;
SWITCH_SELECTION—所选的所有记录都将从所选内容中删除;所有未选择的记录都将添加到选择中。指定此选项时,将忽略表达式。
CLEAR_SELECTION—清除或删除任何选择。指定此选项时,将忽略表达式。
(2)Select Layer By Location(根据空间位置选择要素)

通过Select Layer By Location(根据空间位置选择要素)工具,实现对满足空间关系数据的选择。包括:
INTERSECT—选择输入图层与选择要素相交的要素;
INTERSECT_3D—三维空间上的要素相交,选中相交要素;
WITHIN_A_DISTANCE—如果输入图层中的要素位于选定要素的指定距离内,则将选择这些要素。在“搜索距离”参数中指定距离;
WITHIN_A_DISTANCE_3D—如果输入层中的要素与三维空间中的选择要素相距指定距离,则将选择这些要素。在“搜索距离”参数中指定距离;
WITHIN_A_DISTANCE_GEODESIC—如果输入图层中的要素位于选定要素的指定距离内,则将选择这些要素;
CONTAINS—选择输入图层与选择要素满足包含关系的要素;
COMPLETELY_CONTAINS—如果输入层中的要素完全包含选择要素,则将选择这些要素;
CONTAINS_CLEMENTINI—该空间关系产生与“COMPLETELY_CONTAINS”相同的结果,但有以下例外:如果选择的要素完全在输入要素的边界上(没有部分正确位于内部或外部),则不会选择该要素;
WITHIN—如果输入图层中的要素位于选择要素内,则将选择这些要素;
COMPLETELY_WITHIN—如果输入层中的要素完全在选择要素内或包含在选择要素中,则将选择这些要素;
WITHIN_CLEMENTINI—结果将与WITHIN相同,但如果输入层中的全部要素位于选择层中的要素边界上,则不会选择该要素;
ARE_IDENTICAL_TO—如果输入层中的要素与选择要素相同(在几何结构上),则将选择这些要素;
BOUNDARY_TOUCHES—如果输入层中的要素接触选择要素的边界,则将选择这些要素;
SHARE_A_LINE_SEGMENT_WITH—如果输入图层中的要素与选择要素共享线段,则将选择这些要素。输入和选择要素必须是直线或多边形;
CROSSED_BY_THE_OUTLINE_OF—如果输入图层中的要素与所选要素的轮廓相交,则将选择这些要素。输入和选择要素必须是直线或多边形。如果多边形用于输入或选择图层,则将使用多边形的边界(线)。将选择在某一点相交的线,而不是共享线段的线;
HAVE_THEIR_CENTER_IN—如果输入层中的要素中心位于选择要素内,则将选择该要素。
二、调试ArcPy工具
参考工具的帮助文档,在ArcGIS中对数据提取的工具进行调试,包括ArcPy的函数编写以及参数设置。

三、FME搭建自动处理程序
(1)提取方式确认
通过TestFilter转换器,确定数据库中数据自动提取方式。


通过“S_TQFW”(提取数据范围)以及“S_TQTJ”(提取条件)字段的取值情况,区分数据提取方式:
属性提取:调用Select Layer By Attribute(根据属性选择要素)。
范围提取:包括单独通过范围提取,以及范围与属性同时提取。按照if条件调用Select Layer By Attribute(根据属性选择要素)与Select Layer By Location(根据空间位置选择要素)。
无提取条件:提取条件缺失,添加“Terminator”转换器,暂停并进行报错描述说明。
(2)建立临时GDB存储数据库
PythonCaller转换器创建临时GIS数据存储路径。
从ArcSDE数据库上提取的数据,在处理过程中需要进行后续的数据归整及数据转换操作。ArcSDE直接提取的数据若直接输出无法满足数据提取要求,需输出到临时路径中以备后续进行数据转换。
通过对ArcPy进行分析测试,发现若提取到本地,本地需具备已有的GIS数据存储路径,因此,在进行数据处理前,首先在临时路径下创建GDB数据库,存储临时数据。


(3)按条件提取数据
PythonCaller转换器提取ArcSDE数据至临时路径。
按照范围提取与属性提取两种不同的数据提取方式,在PythonCaller转换器中调用ArcPy,实现不同条件下的数据提取。


属性查找

空间查找
(4)读取临时GDB数据
等待数据提取完成后,通过FeatureReader转换器读取GDB临时数据。

(5)进行提取数据转换操作
提取数据需要进行输出前的转换操作,以符合数据提取规则。
例如,此处数据提取要求如下:
a.提取输出CAD数据;
b.结构符合CAD数据要求;
c.样式需要按照ArcSDE数据中存储的样式进行转换。(包括颜色、线型、填充等)。

数据结构

GIS数据中“ys”(颜色)字段还原为填充颜色

最终通过一个完整的FME模型实现ArcSDE数据库的数据提取操作。


本篇文章为大家带来基于ArcPy的ArcSDE格式数据的提取以解决软件的兼容问题,提高软件的利用率。本分类文档计划输出两篇,本篇文章的姊妹篇“基于ArcPy的SDE数据库下的数据更新操作”正在整理阶段,敬请期待。
ArcSDE数据更新:

本文探讨了如何在FME与ArcGIS版本不兼容时,通过ArcPy实现SDE数据的提取。文章介绍了使用ArcPy进行数据库数据选择的两种方式:属性条件和空间范围,并详细讲解了相关ArcGIS工具的使用。最后,阐述了通过FME搭建自动处理程序的步骤,包括创建临时GDB存储、按条件提取数据、数据转换等操作。

1461

被折叠的 条评论
为什么被折叠?



