span8
span4
注意:对于许多情况,使用FME读取器读取表列表,然后执行FeatureReadertransformer读取数据可能是比下面描述的更好的方法。
用户经常会问如何将特性类型列表传递给FME阅读器。例如,有人可能会给您一个文本文件,其中列出了他们想要翻译的所有SDE表。FME的每个读者都有一个要读取的特性类型参数,它接受要读取的表或层的列表。但是您希望工作区从文件或数据库表中读取列表。下面是我们如何做到这一点的两个例子。
还附加了一个简单的文本文件,它列出了我们想要读取的表FeatureTypesToRead.txt。表列如下:
Support.CountySubdivisions
Support.city_parks
脚本化参数是使用Python或TCL代码动态设置FME参数的强大方法。在这里,我们将使用脚本从文本文件中读取这个表列表,并返回一个值要读取的特性类型参数。在样例工作区GeoDatabase2Shape中。fmw, look in the Navigator pane on the left and expand the private parameters.您将看到一个名为的私有参数FeatureTypes脚本打开文件并将每一行添加到featureTypes变量。剧本是这样的:
从发布的参数中获取文件
ListFile = (FME_MacroValues [' FeatureClassList '])
f =开放(ListFile ' r ')
featureTypes = "
#读取文件并将每一行添加到featureTypes变量中
f.read().split('\n')中的行:
功能类型+=(行+ " ")
f.close ()
将这个列表返回给参数
返回featureTypes
注意,文件名来自一个已发布的参数。工作区已经设置了一个已发布的参数来提示用户输入他们想要提供的文本文件。
该脚本返回我们想要读取的特性类型列表,但是我们需要将其链接到阅读器。我们将private脚本化参数链接到要读取的特性类型导航窗格中reader上的参数,如下所示。
在本例中,我们不是从文本文件中读取表列表,而是从另一个Oracle表中为Oracle Spatial reader读取表列表。否则,此示例与Example1非常相似。这里我们再次使用动态模式我们使用Python脚本化的参数为阅读器读取特性类型列表。
工作区包含发布的参数,用于提示用户输入Oracle连接设置和表名,表名包含Oracle reader的表列表。在脚本中使用Oracle连接参数连接到Oracle,在Oracle reader中使用相同的参数。
再次调用脚本化参数FeatureTypes与。相连要读取的特性类型Oracle空间阅读器的参数。这一次,Python脚本需要Python模块cx_Oracle,它包含在FME安装的Python版本中。下面是用于读取Oracle表的脚本。方法获取Oracle连接的FME发布参数值FME_MacroValues []字典。还要注意,我们使用试一试:语法,在Oracle连接失败或没有找到表时为用户提供一些帮助。
进口cx_Oracle
进口fmeobjects
从FME获取参数
用户= FME_MacroValues(“用户”)
通过= FME_MacroValues['通过']
服务= FME_MacroValues(“服务”)
表名= FME_MacroValues(“表”)
featureTypes = " "
设置Oracle连接字符串
ConnectionString = User + '/' + Pass + '@' + Service
设置Oracle查询
查询= 'select * from ' + TableName
连接到Oracle并查询表
试一试:
连接= cx_Oracle.connect (ConnectionString)
光标= connection.cursor ()
游标。arraysize = 250 cursor.execute(query)
#循环记录并将第一个字段添加到featureTypes字符串
游标中的行:
featureTypes = featureTypes + ' ' +行[0]
cursor.close ()
connection.close ()
除非:打印“无法连接到数据库或表”。
#设置参数
返回featureTypes
传递特性类列表的一个选项是使用模式(任何格式)阅读器提取特性类,然后将它们传递给FeatureReader。更多的解释和一段视频显示这一套Esri文件地理数据库可在如何从多个Esri地理数据库读取所有的特征类。
©2019安全亚搏在线软件公司法律