入门

获取与FME熟悉对象的Python API,并学习如何完成一些常见的任务。

PythonCreator变压器

该PythonCreator变压器可用于创建工作区中的新功能。它包含一个Python代码模板看起来类似于此:

进口fmeobjectsFeatureCreator宾语):高清__在里面__):通过#创建功能第一读卡器功能被处理之前高清输入特征):新功能=fmeobjectsFMEFeature()pyoutput新功能#在靠近输出功能()来创建功能#毕竟读卡器的功能都已经被处理高清):通过

第一行,进口fmeobjects,进口FME对象的Python API。在FeatureCreator.input(),一FMEFeature是被构造,然后使用回self.pyoutput()

注意

也可以看看:PythonCreator变压器资料

PythonCaller变压器

该PythonCaller变压器可用于操作使用Python现有功能。它包含一个Python代码模板看起来类似于此:

进口fmeobjectsFeatureProcessor宾语):高清__在里面__):通过高清输入特征):pyoutput特征高清):通过

这个模板是一个类似于在PythonCreator变压器。不同的是,它的输入()方法接收一个FMEFeature作为参数。进入PythonCaller的输入端口的每一个特征被传递到输入()方法在PythonCaller,它可以与合作。self.pyoutput()然后发射从PythonCaller的输出端口的功能。

虽然PythonCaller是用于在管道中操纵现有的功能,它也可以使用它来创建新的功能,就像PythonCreator。self.pyoutput()可以以发射多于一个的特征为进入输入端口的每个特征被调用多次。相同的特征也可以被发射多次:从输出端口的每一个特征的副本。

注意

也可以看看:PythonCaller变压器资料

使用FME的Python的REPL

除了使用上述PythonCreator和PythonCaller变压器,另外一个好办法来试验FME对象的Python API是FME Python解释器的交互shell。要使用它,打开一个终端或在您的FME的安装目录命令提示符,然后输入:

> FME蟒的Python 2.7.10(默认5月23日到2015年,九点44分00秒)[MSC v.1500 64位(AMD64)]在Win32类型的 “帮助”, “版权”, “信用” 或 “许可” 为更多信息。>>>进口fmeobjects >>>

这就提出了一个交互式Python外壳,设置所有neccessary路径和依赖关系。

获取和设置功能型

当使用PythonCaller与源自读者功能的工作,可能知道该功能的功能类型非常有用。getFeatureType()用于获得特征类型。

setFeatureType()用于设置一个特征的特征类型。

获取和设置属性

采用的setAttribute()将所有非空属性。大多数属性类型都支持。要设置列表属性,通过列表作为值。要设置为null的属性值,请参阅下一节。

下面是获取和设置各种属性的例子:

>>>fmeobjects进口FMEFeatureFME_ATTR_REAL32>>>特征=FMEFeature()>>>特征的setAttribute“海狸”10>>>特征的setAttribute'park_name'“老鼠乐园”>>>特征的setAttribute“流浪者”[“爱丽丝”“鲍勃”])>>>特征的getAttribute“海狸”特征的getAttribute'park_name'特征的getAttribute“流浪者”10, '老鼠乐园',[ '爱丽丝', '鲍勃']

与空或缺少的属性工作

的getAttribute()不能被用于确定属性是否丢失或具有空值。同样的,的setAttribute()不能被用来在属性设置为空值。不同的方法都致力于这项任务。

要设置为null的属性值,使用setAttributeNullWithType(),传递给它的属性的名称设置为空,且属性类型它本来如果它不为空。属性类型信息通常来自任何模式,你的数据被尊重,如果有的话。

注意

按照惯例,设置一个空值和类型是不重要的时候,FME_ATTR_STRING被声明为类型。

要删除属性,或者换句话说,使现有的属性丢失,使用的removeAttribute()

要确定一个属性是否丢失,有一个空值,它的类型,使用getAttributeNullMissingAndType()。它返回一个3元素的元组。

下面是获取和设置空和缺少的属性的例子:

>>>fmeobjects进口FMEFeatureFME_ATTR_REAL32>>>特征=FMEFeature()>>>特征setAttributeNullWithType'park_area'FME_ATTR_REAL32>>>特征getAttributeNullMissingAndType'park_area'真,假,8>>>特征的setAttribute“浣熊”64>>>特征的removeAttribute“浣熊”>>>特征getAttributeNullMissingAndType“浣熊”假,真,0>>>特征getAttributeNullMissingAndType'不存在的'假,真,0

处理几何结构

在FME对象的Python API有很多几何类。下面是一个简单的例子,构造一个2D点和偏移2D点,由偏移点偏移的点,获取新的坐标,并设置新的点以两种不同的方式的特征:

>>>fmeobjects进口FMEFeatureFMEPointFMEGeometryTools>>>特征=FMEFeature()>>>=FMEPoint1020>>>抵消=FMEPoint1010>>>抵消抵消>>>getXYZ()(20.0,30.0,0.0)>>>特征setGeometry>>>特征getGeometry()getXYZ()(20.0,30.0,0.0)>>>offsetPoint=FMEGeomtryTools()抵消抵消>>>offsetPointgetXYZ()(30.0,40.0,0.0)>>>特征setGeometryoffsetPoint>>>特征getGeometry()getXYZ()(30.0,40.0,0.0)

许多几何操作都可以通过FMEGeometryTools。征询他们对细节的API。

与栅格工作

在FME对象的Python API有很多光栅类。下面是创建新的光栅数据的PythonCreator变压器的一个例子,被请求时指定光栅并填充它的参数:

进口fmeobjectsMyBandTilePopulatorfmeobjectsFMEBandTilePopulator):“””这是FMEBandTilePopulator超类的子类。当被请求的数据创建一个新的瓷砖它将被用于和并填充到一个新的FMEBand。“””高清__在里面__rasterData):_rasterData=rasterData#所需的方法高清克隆):“””此方法用于创建数据的副本多次在创建一个新的乐队“””返回MyBandTilePopulator_rasterData#所需的方法高清getTileSTARTROWstartCol):“””创建一个新的瓦片的大小根据所输入的瓷砖。填充,使用瓷砖此填充器的栅格数据开始在STARTROW和startCol。“””numRows行数numCols=getNumRows(),getNumCols()newTile=fmeobjectsFMEUInt8TilenumRows行数numCols数据=newTile的getData()对于范围STARTROWSTARTROW+numRows行):对于关口范围startColstartCol+数numCols):如果<LEN_rasterData关口<LEN_rasterData[0]):数据[-STARTROW] [关口-startCol]=_rasterData[] [关口]newTile使用setData数据返回newTileFeatureCreator宾语):高清__在里面__):通过高清输入特征):通过高清):#创建栅格数据,并指定新的栅格的格式rasterData=[[0128012801280][128012801280128][0128012801280][128012801280128][0128012801280]]#指定新FMERaster所有属性numRows行数numCols=LENrasterDataLENrasterData[0])xCellOriginyCellOrigin=0.50.5则xSpacingySpacing=1.01.0xOriginyOrigin=00xRotationyRotation=0.00.0#创建新FMERasterrasterProperties=fmeobjectsFMERasterPropertiesnumRows行数numCols则xSpacingySpacingxCellOriginyCellOriginxOriginyOriginxRotationyRotation光栅=fmeobjectsFMERasterrasterProperties#填充带的内容,并追加到光栅bandTilePopulator=MyBandTilePopulatorrasterDatabandName=“”bandProperties=fmeobjectsFMEBandPropertiesbandNamefmeobjectsFME_INTERPRETATION_UINT8fmeobjectsFME_TILE_TYPE_FIXEDnumRows行数numCols=fmeobjectsFMEBandbandTilePopulatorrasterPropertiesbandProperties光栅appendBand#与FMERaster几何创建一个新的特点是输出特征=fmeobjectsFMEFeature()特征setGeometry光栅pyoutput特征

坐标系和重投影

坐标系统被设置在功能层面,而不是几何级别。默认情况下,功能没有一个坐标系。要指定一个,通过一个坐标系名称setCoordSys()

>>>fmeobjects进口FMEFeatureFMEPoint>>>特征=FMEFeature()>>>特征setGeometryFMEPoint-122.84276449.177847))>>>特征setCoordSys'LL84'

当一个功能有一个坐标系,它可以使用重投影重新投影()。这种操作类似于Reprojector变压器。例如:

>>>特征重新投影'SPHERICAL_MERCATOR'>>>特征getCoordSys()'SPHERICAL_MERCATOR'>>>特征getGeometry()getXYZ()(-13674793.936118279,6305092.363454558,0.0)

FMECoordSysManagerFMEReprojector类可用于与坐标系和重投影更高级的操作。

消息写入日志FME

Python的打印()功能可用于登录的消息,但对于FME最佳效果,使用FMELogFile

>>>fmeobjects进口FMELogFile>>>FMELogFile()logMessageString“你好,世界”

如果这个代码在工作台执行,这立即打印的“Hello World”的日志中的信息性消息。

该消息严重性可使用的第二参数来设置logMessageString()。典型值是:

  • FME_INFORM(默认):信息消息。
  • FME_WARN:警告显示为蓝色。
  • FME_ERROR:出现在红色的错误消息。
  • FME_DEBUG:Message只有在调试消息在FME选项启用出现。

FMEFeature实例也可以使用记录logFeature()。其结果是类似于使用记录仪变压器。此方法还支持严重性级别。