span8
span4
我一直在与蟒蛇光栅API,据我所知,瓷砖是分块的栅格,以及智能瓦片管理可能对性能的影响显著的一种方式。
我正在挣扎是阅读的现有数据。栅格数据只能每瓦进行访问。由于FMETile是一个抽象类,它不能直接创建,每个解释类型有不同的呼吁创建瓷砖。
因此,虽然我可以得到一个给定的栅格波段的阅片
光栅= feature.getGeometry()带= raster.getBand(0)= bandProperties band.getProperties()的解释= bandProperties.getInterpretation()
我不能创造一个瓷砖直接使用该解释变量。
我可以看到访问数据本身只有这样,才能有单独写一个创建瓷砖方法本质上是一个switch语句高清createTile(自我,演绎,numRows行,数numCols):如果解释== fmeobjects.FME_INTERPRETATION_GRAY8:返回fmeobjects.FMEGray8Tile(numRows行,数numCols)ELIF解释== fmeobjects.FME_INTERPRETATION_RED8:返回fmeobjects.FMERed8Tile(numRows行,数numCols)ELIF解释== fmeobjects.FME_INTERPRETATION_GREEN8: return fmeobjects.FMEGreen8Tile(numRows, numCols) {...} elif interpretation == fmeobjects.FME_INTERPRETATION_INT16: return fmeobjects.FMEInt16Tile(numRows, numCols), 'INT16') else: return None
然后,我可以这样做
numTileCols = bandProperties.getNumTileCols()numTileRows = bandProperties.getNumTileRows()瓦片= self.createTile(口译,numTileRows,numTileCols)bandData = band.getTile(numTileRows,numTileCols,瓦).getData()
这真的是我们需要做的,我们不希望硬编码的解释型每一次,还是我失去了一些东西明显?
你好@jdh,FMEBand.getMaxValue()或getMinValue()方法返回一个具体的瓷砖类的实例,你可以通过从实例的特殊数据成员__class__获取类。事情是这样的。
tileClass = band.getMaxValue().__ class__瓦片= tileClass(numTileRows,numTileCols)bandData = band.getTile(0,0,瓷砖).getData()
在范围(numTilesX)C:(numTilesY)对于r在范围:bandData = band.getTile(R * numTileRows,C * numTileCols,瓦).getData()这是快几个数量级和消费者约1/3试图读取整个栅格在一个瓷砖的RAM。
从fmeobjects#fmetiles.py导入* fmeTileClass = {FME_INTERPRETATION_REAL64:FMEReal64Tile,FME_INTERPRETATION_REAL32:FMEReal32Tile,FME_INTERPRETATION_UINT64:FMEUInt64Tile,FME_INTERPRETATION_INT64:FMEInt64Tile,...}一旦你定义这样一个字典,你可以在任何脚本轻松地重用(进口或复制和粘贴)。
从fmetiles导入fmeTileClass瓦= fmeTileClass [解释](numTileRows,numTileCols)bandData = band.getTile(0,0,瓷砖).getData()
©2019安全亚搏在线软件公司|法律