Cách chỉnh lại raster từ 0 360 đến -180 180 bằng cách cắt 180 kinh tuyến


31

Tôi có một hình ảnh raster geotiff có hệ tọa độ với các độ dài từ 0 đến 360. Trung tâm ngang của hình ảnh là 180 độ dài. Xem hình ảnh dưới đây:

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

Tôi muốn chuyển đổi nó thành EPSG: 4326 SRS với phạm vi kinh độ -180 180. Và tôi muốn trung tâm của hình ảnh là ở kinh tuyến Greenwich (0). Tôi đoán srs này được sử dụng rất rộng rãi. Tôi mong đợi kết quả như thế này:

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

Vì vậy, tôi sử dụng lệnh gdalwarp để reproject:

gdalwarp -s_srs '+proj=latlong +datum=WGS84 +pm=180dW' -t_srs EPSG:4326 test_col.tif test_4326.tif

Nhưng tôi chỉ nhận được một tiff với kích thước lớn hơn (nhiều pixel hơn) và siêu dữ liệu EPSG: 4326. Hình ảnh trông giống như hình ảnh ban đầu. Nhưng tôi hy vọng nó sẽ trao đổi các bán cầu.

Câu hỏi là - làm thế nào để tôi gdalwarp một hình ảnh được nghiêm chỉnh -180 180 EPSG: 4326 với tâm ở 0 kinh độ?

Đây là gdalinfo của tập tin ban đầu của tôi:

Origin = (-0.102272598067084,89.946211604095552)
Pixel Size = (0.204545196134167,-0.204423208191126)
Metadata:
  AREA_OR_POINT=Area
Image Structure Metadata:
  INTERLEAVE=BAND
Corner Coordinates:
Upper Left  (  -0.1022726,  89.9462116) (  0d 6' 8.18"W, 89d56'46.36"N)
Lower Left  (  -0.1022726, -89.9462116) (  0d 6' 8.18"W, 89d56'46.36"S)
Upper Right (     359.897,      89.946) (359d53'50.18"E, 89d56'46.36"N)
Lower Right (     359.897,     -89.946) (359d53'50.18"E, 89d56'46.36"S)
Center      ( 179.8975000,  -0.0000000) (179d53'51.00"E,  0d 0' 0.00"S)

Đây là gdalinfo sau gdalwarp

Origin = (-180.102727401932952,89.946211604095552)
Pixel Size = (0.091397622896436,-0.091420837939082)
Metadata:
  AREA_OR_POINT=Area
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (-180.1027274,  89.9462116) (180d 6' 9.82"W, 89d56'46.36"N)
Lower Left  (-180.1027274, -89.9699975) (180d 6' 9.82"W, 89d58'11.99"S)
Upper Right ( 179.8211116,  89.9462116) (179d49'16.00"E, 89d56'46.36"N)
Lower Right ( 179.8211116, -89.9699975) (179d49'16.00"E, 89d58'11.99"S)
Center      (  -0.1408079,  -0.0118929) (  0d 8'26.91"W,  0d 0'42.81"S)

Về độ phân giải khác nhau, bạn đã thử thêm -tr xres yrescờ chưa?
biệt danh

Câu trả lời:


21

Bạn có thể đặt rõ ràng phạm vi tọa độ đầu ra bằng cách sử dụng tùy chọn phạm vi mục tiêu thành gdalwarp (nghĩa là "-te -180 -90 180 90") nhưng bạn cũng có thể sử dụng tùy chọn cấu hình CENTER_LONG để buộc quay lại theo kinh độ trung tâm mới. Một cái gì đó như thế này:

  gdalwarp -t_srs WGS84 ~/0_360.tif 180.tif  -wo SOURCE_EXTRA=1000 \
           --config CENTER_LONG 0

Cũng lưu ý tùy chọn sợi dọc "SOURCE_EXTRA = 1000". Khi thực hiện quay lại tính toán hình chữ nhật nguồn sẽ bị lẫn lộn xung quanh sự gián đoạn kinh độ và mất một số hình ảnh. Tùy chọn này cho biết kéo trong một số thêm. Không có nó bạn sẽ thấy một khoảng cách dữ liệu gần kinh tuyến gốc.

Tái bút thiết lập một kinh tuyến gốc 180dW như bạn đã làm không phải là một ý tưởng hay IMHO.


1
hmm, --config CENTER_LONG 0không làm gì cả, kết quả là raster giống nhau. Bất cứ điều gì tôi bỏ lỡ ở đây? Chạy trên phiên bản GDAL 2.2.3.
Jurajb

6

Về cơ bản, bạn cần cắt raster thành hai phần và ghép chúng lại với nhau bằng một phần bù / tỷ lệ mới.

Có một ví dụ ở đây về cách thực hiện điều đó từ [-180,180] đến [0,360] với gdal_translate và trình điều khiển VRT: http://trac.osgeo.org/gdal/wiki/UserDocs/RasterProcTutorial

Quét xuống "5 phút hướng dẫn" và các chi tiết trong "Tệp ảo". Nó phải đủ đơn giản để sửa đổi ví dụ cho phù hợp.


2

Điều này có thể được thực hiện trong R với một dòng mã bằng cách sử dụng rotatehàm với rastergói.

library(raster)
your_raster <- raster("path/to/raster.tif")
rotated_raster <- rotate(your_raster)

1

Nếu bạn chỉ muốn xem raster trong QGIS, bạn có thể đặt phép chiếu tùy chỉnh với tham số + lon_wrap = 180.

Theo hiểu biết của tôi về điều này, theo mặc định, proj4 bao bọc các vĩ độ từ 0 -> 360 đến -180 -> 180. + lon_wrap = 180 sẽ loại bỏ hiệu quả gói này và hiển thị các vĩ độ từ 180 đến 360 ở bán cầu Tây.

Tùy chọn + over sẽ vô hiệu hóa gói hoàn toàn, nhưng - ít nhất là trong trường hợp của tôi - raster không hiển thị đúng khi tùy chọn đó được sử dụng.

Xem http://proj4.org/parameter.html#lon-wrap-over-longitude-wrapping để biết thêm thông tin.


0

Đây là một hàm tôi được xây dựng để định hướng lại một mảng mờ các giá trị lưới bằng cách sử dụng javascript từ 0-360 đến -180-180. Tôi hy vọng nó có thể giúp đỡ cho ai đó.

  let xstart = 180 / xres //xres is the number of values per 1 degree
  for (let y = 0; y < data.height; y++) {
    let index = (y * data.width) + 1,
    start = index + xstart,
    end = index + data.width
    array.splice(index, 0, ...array.splice(start, (end - start)))
  }
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.