span8
span4
我一直在使用python raster api,我知道tile是划分光栅的一种方式,而智能tile管理可以对性能产生重大影响。
我正在努力阅读现有的数据。栅格数据只能在每个块中访问。由于FMETile是一个抽象类,所以不能直接创建它,而且每种解释类型对创建tile都有不同的调用。
因此,当我可以得到一个给定的光栅带的解释
getgeometry()带=光栅。getband(0)带属性=带。getproperties()解释=带属性。getinterpretation ()
我不能在创建平铺时直接使用解释变量。
访问数据本身的惟一方法是编写一个单独的create tile方法,它本质上是一个switch语句def createTile(self, interpretation, numRows, numCols): if interpretation == fmeobjects。FME_INTERPRETATION_GRAY8: fmeobjects返回。FMEGray8Tile(numRows, numCols) elif interpretation == fmeobjects.FME_INTERPRETATION_RED8: return fmeobjects.FMERed8Tile(numRows, numCols) elif interpretation == 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=带属性。getnumtilecols () numTileRows=带属性。getnumtilerows () tile = self。带数据=频带。getTile (numTileRows numTileCols瓷砖).getData ()
这真的是我们每次不想硬编码解释类型时都需要做的吗,还是我遗漏了什么明显的东西?
嗨@jdhgetmaxvalue()或getMinValue()方法返回一个具体平铺类的实例,您可以通过该实例的特殊数据成员_class__获取该类。是这样的。
tileClass = band.getMaxValue ()。__class__ tile = tileClass(numTileRows, numTileCols) bandData= band.getTile(0, 0, tile).getData()
对于范围内的c (numTilesX):对于范围内的r (numTilesY): bandData= band。getTile (r * numTileRows c * numTileCols,瓷砖).getData ()这是一个数量级的速度,而消费者试图在一个块中读取整个光栅的RAM大约是1/3。
fme_commenttation_real64: fmeeal64tile, fme_interpretation tation_real32: FMEReal32Tile, fme_interpretation tation_uint64: FMEUInt64Tile, fme_interpretation tation_int64: FMEInt64Tile,…}一旦定义了这样一个字典,您就可以在任何脚本中轻松地重用(导入或复制&粘贴)它。
从fmetiles中导入fmeTileClass tile = fmeTileClass[解释](numTileRows, numTileCols)getTile(0, 0,瓷砖).getData ()
©2019安全亚搏在线软件公司法律