Làm thế nào để dịch (tái định vị) một lớp raster .tif?


10

Tôi bắt đầu sử dụng QGIS cho luận án của mình (vật lý môi trường) và phải thừa nhận rằng tôi khá thờ ơ với nó - Tôi đã luôn sử dụng Mathematica hoặc Matlab.

Vấn đề của tôi là: Tôi có một lớp raster, ở định dạng .tif, bị đặt sai vị trí (tôi cần di chuyển nó về phía nam và phía tây thêm 100m). Tôi cần dịch (định vị lại) nó, và tôi hoàn toàn không biết tôi có thể làm điều đó như thế nào.

Tôi đã thử chuyển đổi Affine nhưng nó không hoạt động (không cho phép tôi chọn lớp đầu vào); Tôi cũng đã đọc bài này Làm thế nào để dịch (định vị lại) một raster trong Python? nhưng tôi phải thừa nhận rằng tôi đã không hiểu nhiều về nó, tôi đã thử nhiều lần nhưng không tốt với con trăn.


Tôi giả sử lớp .tif được tham chiếu địa lý theo một cách nào đó? Hệ tọa độ tham chiếu nào được nêu trong siêu dữ liệu? Rất có thể, bạn chỉ cần sửa các cài đặt CRS và lớp sẽ căn chỉnh.
underdark

cảm ơn vì nhận xét vâng, nó được tham chiếu địa lý và hệ thống tọa độ là chính xác (WGS 84 / UTM vùng 32N) .. thật không may sự dịch chuyển đến từ một plugin (được viết xấu) mà tôi cần sử dụng và tôi không thể thay đổi / sửa chữa .. do đó cần phải định vị lại lớp ...

Plugin Affine Transform chỉ dành cho các lớp vectơ.
AndreJ

Câu trả lời:


9

Ah! Tôi đã xoay sở để làm điều đó, theo những gì đã nói trong cuộc thảo luận được liên kết .... ( Làm thế nào để dịch (định vị lại) một raster bằng Python? ) Rõ ràng tôi chỉ mất một lúc để tìm cách sử dụng bảng điều khiển python! ;) dù sao cũng cảm ơn! :)

Tôi đã sử dụng GDAL / Python, từ bảng điều khiển Python của QGIS! :)

những gì tôi đã viết là:

from osgeo import gdal
gdal.AllRegister()
rast_src = gdal.Open('filename.tif', 1 )
gt = rast_src.GetGeoTransform()
gtl = list(gt)
gtl[0] -= 200
gtl[3] -= 100
rast_src.SetGeoTransform(tuple(gtl))
rast_src = None

EDIT: đã chuyển "gdall.AllRegister ()" thành "gdal.AllRegister ()".


Có một lỗi đánh máy một chữ cái trong mã: gdall.AllRegister không được đánh vần bằng hai chữ "L". (Nó tạo ra: "'gdall' không được xác định") Thật không may, tôi không thể chỉnh sửa nó vì một chỉnh sửa được yêu cầu phải dài ít nhất 6 ký tự.
Smerla

Câu trả lời này thực sự đã giúp tôi ra ngoài! Điều duy nhất tôi muốn thêm là đảm bảo và kiểm tra các đơn vị của bạn trước khi thực hiện chuyển đổi bằng cách nhập một print(gtl)hàm. Chẳng hạn, raster của tôi ở dd mm ss, và vì vậy để tìm ra có bao nhiêu mét trong một độ thập phân, tôi đã sử dụng bảng có sẵn ở đây (dễ dàng cho vĩ độ hơn kinh độ!): Bảng để chuyển đổi mét sang độ thập phân
Justin Kray

1

Các Rasmoverplugin nên làm những gì bạn muốn.

Bạn phải cho phép các plugin thử nghiệm để có được nó trong danh sách plugin.

Kết quả là một tệp raster ảo, bạn có thể chỉnh sửa bằng trình soạn thảo văn bản để điều chỉnh các tham số nếu cần.


Không thể tìm thấy nó ... có thể không có sẵn cho 3.6?
foobarbiru

1
Plugin có thể được tìm thấy tại github.com/geodrinx/rasmover , nhưng không có hoạt động gần đây. Xem osgeo-org.1560.x6.nabble.com/ và và gis.stackexchange.com/questions/274074/ trên . Có lẽ plugin Rasterbender có thể thay thế nó.
AndreJ

0

Trong trường hợp đặc biệt khi raster đã có phép chiếu UTM và bạn muốn di chuyển nó theo chiều dọc sang vùng UTM khác, tôi thấy rằng gdal_translatecó thể thực hiện được. Ví dụ: raster đầu vào nằm trong bất kỳ vùng UTM Z nào và bạn muốn di chuyển nó sang UTM vùng 26 (nghĩa là Đại Tây Dương ở hầu hết các vĩ độ):

gdal_translate -a_srs '+proj=utm +zone=26 +datum=WGS84' input.tif output.tif

Các tọa độ gốc và góc trong các đơn vị không gian mô hình như được báo cáo gdalinfovẫn giữ nguyên. Nhưng tọa độ góc theo vĩ độ / kinh độ thay đổi, và raster thực sự đã di chuyển đến một phần khác của thế giới.

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.