Tạo lớp raster từ mảng numpy bằng pyqgis?


9

Tôi đang làm việc trên một plugin cho Qgis để tính toán bản đồ mật độ hạt nhân không gian. Tôi có tất cả các tính toán hoạt động, tất cả những gì tôi thiếu là một cách để biến một mảng Numpy, với các giá trị mật độ thành một lớp raster nhiều lớp.

Tôi có phải tạo một geotiff trên một tệp tạm thời bằng cách sử dụng Gdal và sau đó tải nó không?

Hoặc có một cách trực tiếp để tạo lớp từ dữ liệu trong bộ nhớ?

Nếu vậy, làm thế nào để làm điều đó?

Câu trả lời:


5

Đây là đoạn mã mà tôi sử dụng để chuyển đổi một mảng thành gdal raster lưu nó vào đĩa, "param" là một từ điển có chứa các tham số gdal (kiểm tra tài liệu gdal) và "mảng" là một mảng numpy. Hơn bạn có thể khởi tạo QssMapLayer với tệp của bạn dưới dạng nguồn. Bạn phải tạo geotiff trong đĩa.

    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

Cảm ơn, kích thước pixel là gì? (xmax-xmin) / x_pixels?
fccoelho

các số 0 trong SetGeoTransform là gì?
fccoelho

Đối với tất cả các câu hỏi, hãy kiểm tra tại đây - SetGeoTransform: gdal.org/,
Pablo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.