QGIS API: マルチバンドデータの取り扱い

3つ以上のチャンネルを持つラスタデータを表示する場合は、
3つのチャンネルを選んでRGBに割り振って表示したいところです。

QGIS本体では、読み込んだ後でProperty画面で選択することができます


ラスタデータのプロパティ画面

ラスタデータのプロパティ画面

APIではどうなっているでしょうか。
ここではENVI Rasterデータの例を使いました。

  def addRasterLayer(self):
    file = QFileDialog.getOpenFileName(self, "Open ENVI Raster file", ".", "ENVI Raster(*.dat)")
    fileInfo = QFileInfo(file)

    layer = QgsRasterLayer(fileInfo.filePath(), fileInfo.completeBaseName())

    if not layer.isValid():
      return

    # マルチバンド描画モードにセット
    layer.setDrawingStyle(QgsRasterLayer.MultiBandColor)
    
    # コントラストを自動的に最大値、最小値に設定
    layer.setContrastEnhancementAlgorithm(QgsContrastEnhancement.StretchToMinimumMaximum, False)
    
    # RGBに選択したチャンネルを割り当てる
    # 割り当てはバンド名を使うので、このようにする
    # バンド番号は1スタート
    layer.setRedBandName(layer.bandName(21))
    layer.setGreenBandName(layer.bandName(13))
    layer.setBlueBandName(layer.bandName(7))

    # あとは一緒
    QgsMapLayerRegistry.instance().addMapLayer(layer);

    self.canvas.setExtent(layer.extent())

    cl = QgsMapCanvasLayer(layer)
    self.layers.append(cl)
    self.canvas.setLayerSet(self.layers)

ピクセル深度が8bit以上でもQgsContrastEnhancement.StretchToMinimumMaximum
を指定することで、ちゃんと表示してくれます。

アーカイブ