QGIS 中可以通过图层的属性窗口来给栅格数据创建金字塔,如下图:
右侧的 Pyramid resolutions 表示可以建立的金字塔的级别,数字前面的符号有个小叉就表示该级别的金字塔还没有被建立。可以通过点击右下方的 Build pyramid 按钮来为影像建立金字塔。
QGIS 内部也是调用了 GDAL 的 GDALBuildOverviews 方法来为影像建立金字塔。 但在使用 Build pyramid 建立金字塔的过程中发现速度非常慢,与使用 gdaladdo.exe 命令来建立金字塔相比,要耗费它几倍的时间,对此感到非常疑惑,于是看了一下内部的实现机制。
建立金字塔的实现函数位于 QgsRasterLayer 中,函数名为buildPyramids ,定义如下:
/** /brief Create GDAL pyramid overviews */
QString buildPyramids ( const RasterPyramidList &,
const QString & theResamplingMethod = "NEAREST" ,
bool theTryInternalFlag = false );
RasterPyramidList 参数表示要建立金字塔的级别。
theResamplingMethod 参数表示重采样方法。
theTryInternalFlag 参数表示是否将金字塔嵌入影像内部,该操作好像只支持TIFF 格式。
找到了函数,查看其内部实现,很快就找到了原因所在。
以下代码是 QGIS 建立金字塔的核心代码
RasterPyramidList ::const_iterator myRasterPyramidIterator ;
for ( myRasterPyramidIterator = theRasterPyramidList .begin ();
myRasterPyramidIterator != theRasterPyramidList .end ();