Sắp xếp nhiều trình quét bằng PyQGIS hoặc Python?


8

Tôi muốn căn chỉnh nhiều trình quét theo một số kích thước, phạm vi và hệ thống trình chiếu bằng Python hoặc PyQGIS.

Suy nghĩ đầu tiên là sử dụng GDAL:

  1. gdalinfo (để tìm thông tin từ raster tham khảo)

  2. gdalwarp (để chuyển đổi hệ thống chiếu và kích thước pixel)

  3. gdal_translate (để chuyển đổi phạm vi)

Chúng hoạt động, nhưng không dễ để sử dụng các công cụ đó với nhau trong Python và chúng cần nhiều thời gian để hoàn thành công việc này. Ngoài ra, nó có thể được thực hiện dễ dàng bằng cách sử dụng Công cụ QGIS và Align Rasters .

nhập mô tả hình ảnh ở đây

Có một công cụ làm công việc này bằng PyQGIS hoặc Python tồn tại không? (Tôi muốn làm việc lập trình nhiều hơn tự động)

CẬP NHẬT

Tôi tìm thấy mã này từ câu hỏi này :

from osgeo import gdal, gdalconst

inputfile = #Path to input file
input = gdal.Open(inputfile, gdalconst.GA_ReadOnly)
inputProj = input.GetProjection()
inputTrans = input.GetGeoTransform()

referencefile = #Path to reference file
reference = gdal.Open(referencefile, gdalconst.GAReadOnly)
referenceProj = reference.GetProjection()
referenceTrans = reference.GetGeoTransform()
bandreference = reference.GetRasterBand(1)    
x = reference.RasterXSize 
y = reference.RasterYSize

outputfile = #Path to output file
driver= gdal.GetDriverByName('GTiff')
output = driver.Create(outputfile, x, y, 1, bandreference.DataType)
output.SetGeoTransform(referenceTrans)
output.SetProjection(referenceProj)

gdal.ReprojectImage(input, output, inputProj, referenceProj, gdalconst.GRA_Bilinear)

del output

Mã đó hoạt động tốt, ngoại trừ clip raster. Bất kỳ ý tưởng làm thế nào để cập nhật mã này để clip raster đầu vào trong phạm vi của raster tham chiếu trong mã?


2
Tôi không đồng ý rằng "không dễ để sử dụng các công cụ [gdal] với nhau trong Python." Nó khá đơn giản. Dù sao, bạn có thể xem bài đăng này để biết ý tưởng về cách cắt các raster của bạn với một raster. (Bản thân tôi sẽ đi theo con đường gdal.) Gis.stackexchange.com/questions/125202/ mẹo
Jon

@ Jon mà không làm việc cho tôi
Mar

Chà, nếu bạn muốn giúp đỡ, có lẽ bạn nên đăng những gì bạn đã thử và những gì không hiệu quả.
Jon

Câu trả lời:


1

Cách tiếp cận và thời gian GDAL

Tôi đồng ý với @user: 78446 - gdal là cách tốt nhất để chuyển tiếp và bạn sẽ có thể sử dụng các công cụ bạn đã đề cập, ví dụ như gdalwarp, gdaltranslate, v.v. Đây sẽ là một quá trình khá dài vì đối với mỗi raster, mỗi ô cần được sắp xếp lại và về cơ bản được nội suy lại để giải thích cho việc sắp xếp lại tế bào - thậm chí lâu hơn dựa trên kích thước raster.

Ngẫu nhiên trong bất kỳ phân tích nào sau đây, hãy đảm bảo cũng tính đến các thay đổi giá trị pixel raster này - đặc biệt là nếu các vùng raster vượt quá khoảng cách rất lớn.


GDAL và Python

Nhìn quanh diễn đàn, bạn sẽ tìm thấy rất nhiều ví dụ minh họa cách kết hợp gdal và python với nhau, ví dụ như ở đây .

Ngoài ra, hãy xem trợ giúp ở đây để làm việc với gdal và Python cùng nhau.


0

Có vẻ như bạn có thể sử dụng gdal.Warp thay vì ReprojectImage, như trong

OutTile = gdal.Warp(OutTileName, Raster,
  format=RasterFormat, outputBounds=[minX, minY, maxX, maxY], 
  xRes=PixelRes, yRes=PixelRes, dstSRS=Projection, 
  resampleAlg=gdal.GRA_NearestNeighbour, options=['COMPRESS=DEFLATE']
)

(Mã được lấy từ https://gis.stackexchange.com/a/237372/15183 ).


0

Hoạt động tốt cho tôi. Chỉ cố định GA_ReadOnlytrong một dòng

reference = gdal.Open(referencefile, gdalconst.GAReadOnly)

đến

reference = gdal.Open(referencefile, gdalconst.GA_ReadOnly)

Script tái cấu trúc và cắt đoạn raster đầu vào (toàn châu Âu) thành độ phân giải và mức độ của raster tham chiếu (phần trung tâm), kết quả:

nhập mô tả hình ảnh ở đây

gdalwarpcũng có thể được sử dụng để căn chỉnh các trình quét ( Thay đổi kích thước pixel trong tệp 'asc' bằng Qgis? )

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.