入门¶
获取与FME熟悉对象的Python API,并学习如何完成一些常见的任务。
PythonCreator变压器¶
该PythonCreator变压器可用于创建工作区中的新功能。它包含一个Python代码模板看起来类似于此:
进口fmeobjects类FeatureCreator(宾语):高清__在里面__(自):通过#创建功能第一读卡器功能被处理之前高清输入(自,特征):新功能=fmeobjects。FMEFeature()自。pyoutput(新功能)#在靠近输出功能()来创建功能#毕竟读卡器的功能都已经被处理高清关(自):通过
第一行,进口fmeobjects
,进口FME对象的Python API。在FeatureCreator.input()
,一FMEFeature
是被构造,然后使用回self.pyoutput()
。
注意
也可以看看:PythonCreator变压器资料。
PythonCaller变压器¶
该PythonCaller变压器可用于操作使用Python现有功能。它包含一个Python代码模板看起来类似于此:
进口fmeobjects类FeatureProcessor(宾语):高清__在里面__(自):通过高清输入(自,特征):自。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进口FMEFeature,FME_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进口FMEFeature,FME_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进口FMEFeature,FMEPoint,FMEGeometryTools>>>特征=FMEFeature()>>>点=FMEPoint(10,20)>>>抵消=FMEPoint(10,10)>>>点。抵消(抵消)>>>点。getXYZ()(20.0,30.0,0.0)>>>特征。setGeometry(点)>>>特征。getGeometry()。getXYZ()(20.0,30.0,0.0)>>>offsetPoint=FMEGeomtryTools()。抵消(点,抵消)>>>offsetPoint。getXYZ()(30.0,40.0,0.0)>>>特征。setGeometry(offsetPoint)>>>特征。getGeometry()。getXYZ()(30.0,40.0,0.0)
许多几何操作都可以通过FMEGeometryTools
。征询他们对细节的API。
与栅格工作¶
在FME对象的Python API有很多光栅类。下面是创建新的光栅数据的PythonCreator变压器的一个例子,被请求时指定光栅并填充它的参数:
进口fmeobjects类MyBandTilePopulator(fmeobjects。FMEBandTilePopulator):“””这是FMEBandTilePopulator超类的子类。当被请求的数据创建一个新的瓷砖它将被用于和并填充到一个新的FMEBand。“””高清__在里面__(自,rasterData):自。_rasterData=rasterData#所需的方法高清克隆(自):“””此方法用于创建数据的副本多次在创建一个新的乐队“””返回MyBandTilePopulator(自。_rasterData)#所需的方法高清getTile(自,STARTROW,startCol,瓦):“””创建一个新的瓦片的大小根据所输入的瓷砖。填充,使用瓷砖此填充器的栅格数据开始在STARTROW和startCol。“””numRows行,数numCols=瓦。getNumRows(),瓦。getNumCols()newTile=fmeobjects。FMEUInt8Tile(numRows行,数numCols)数据=newTile。的getData()对于行在范围(STARTROW,STARTROW+numRows行):对于关口在范围(startCol,startCol+数numCols):如果行<LEN(自。_rasterData)和关口<LEN(自。_rasterData[0]):数据[行-STARTROW] [关口-startCol]=自。_rasterData[行] [关口]newTile。使用setData(数据)返回newTile类FeatureCreator(宾语):高清__在里面__(自):通过高清输入(自,特征):通过高清关(自):#创建栅格数据,并指定新的栅格的格式rasterData=[[0,128,0,128,0,128,0][128,0,128,0,128,0,128][0,128,0,128,0,128,0][128,0,128,0,128,0,128][0,128,0,128,0,128,0]]#指定新FMERaster所有属性numRows行,数numCols=LEN(rasterData)LEN(rasterData[0])xCellOrigin,yCellOrigin=0.5,0.5则xSpacing,ySpacing=1.0,1.0xOrigin,yOrigin=0,0xRotation,yRotation=0.0,0.0#创建新FMERasterrasterProperties=fmeobjects。FMERasterProperties(numRows行,数numCols,则xSpacing,ySpacing,xCellOrigin,yCellOrigin,xOrigin,yOrigin,xRotation,yRotation)光栅=fmeobjects。FMERaster(rasterProperties)#填充带的内容,并追加到光栅bandTilePopulator=MyBandTilePopulator(rasterData)bandName=“”bandProperties=fmeobjects。FMEBandProperties(bandName,fmeobjects。FME_INTERPRETATION_UINT8,fmeobjects。FME_TILE_TYPE_FIXED,numRows行,数numCols)带=fmeobjects。FMEBand(bandTilePopulator,rasterProperties,bandProperties)光栅。appendBand(带)#与FMERaster几何创建一个新的特点是输出特征=fmeobjects。FMEFeature()特征。setGeometry(光栅)自。pyoutput(特征)
坐标系和重投影¶
坐标系统被设置在功能层面,而不是几何级别。默认情况下,功能没有一个坐标系。要指定一个,通过一个坐标系名称setCoordSys()
:
>>>从fmeobjects进口FMEFeature,FMEPoint>>>特征=FMEFeature()>>>特征。setGeometry(FMEPoint(-122.842764,49.177847))>>>特征。setCoordSys('LL84')
当一个功能有一个坐标系,它可以使用重投影重新投影()
。这种操作类似于Reprojector变压器。例如:
>>>特征。重新投影('SPHERICAL_MERCATOR')>>>特征。getCoordSys()'SPHERICAL_MERCATOR'>>>特征。getGeometry()。getXYZ()(-13674793.936118279,6305092.363454558,0.0)
该FMECoordSysManager
和FMEReprojector
类可用于与坐标系和重投影更高级的操作。
消息写入日志FME¶
Python的打印()
功能可用于登录的消息,但对于FME最佳效果,使用FMELogFile
:
>>>从fmeobjects进口FMELogFile>>>FMELogFile()。logMessageString(“你好,世界”)
如果这个代码在工作台执行,这立即打印的“Hello World”的日志中的信息性消息。
该消息严重性可使用的第二参数来设置logMessageString()
。典型值是:
FME_INFORM
(默认):信息消息。FME_WARN
:警告显示为蓝色。FME_ERROR
:出现在红色的错误消息。FME_DEBUG
:Message只有在调试消息在FME选项启用出现。
FMEFeature
实例也可以使用记录logFeature()
。其结果是类似于使用记录仪变压器。此方法还支持严重性级别。