pyqgisを使用してnumpy配列からラスターレイヤーを作成していますか?


9

空間カーネル密度マップを計算するQgisのプラグインに取り組んでいます。私はすべての計算を機能させていますが、密度の値を持つNumpy配列をマルチバンドラスターレイヤーに変換する方法はありません。

Gdalを使用して一時ファイルにgeotiffを作成してからロードする必要がありますか?

または、メモリ内のデータからレイヤーを直接作成する方法はありますか?

もしそうなら、それを行う方法は?

回答:


5

これは、配列をgdalラスターに変換してディスクに保存するために使用するコードです。「param」はgdalパラメーターを含むディクショナリー(gdalのドキュメントを確認)であり、「array」は乱雑な配列です。ファイルをソースとしてQgsMapLayerインスタンス化できます。ディスクにgeotiffを作成する必要があります。

    from osgeo import gdal as osgdal  # Adapt the import to fit yor environement.

    driver = osgdal.GetDriverByName(param['out_format'])

    dataset = driver.Create(
            param['dst_filename'],
            param['x_pixels'],
            param['y_pixels'],
            1,
            osgdal.GDT_Float32,
            )

    dataset.SetGeoTransform((
            param['xmin'],           #0
            param['pixel_size'],     #1
            0,                       #2
            param['ymin'],           #3
            0,                       #4
            param['pixel_size']))    #5

    out_srs = osr.SpatialReference()
    out_srs.ImportFromEPSG(param['SRID'])

    dataset.SetProjection(out_srs.ExportToWkt())
    dataset.GetRasterBand(1).WriteArray(array.T)  # Remove "T" if it's inverted.
    dataset = None

おかげで、ピクセルサイズとは何ですか?(xmax-xmin)/ x_pixels?
fccoelho 2012

SetGeoTransformの0は何ですか?
fccoelho 2012

すべての質問についてはこちらをご確認ください- SetGeoTransformを:gdal.org/...
パブロ・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.