180 meridyen kesilerek raster 0 360 - -180 180 arasında nasıl yeniden oluşturulur


31

0'dan 360'a kadar longtitudes olan bir koordinat sistemine sahip bir geotiff raster resme sahibim. Görüntünün yatay merkezi 180 boyunda. Aşağıdaki resme bakınız:

görüntü tanımını buraya girin

-180 180 longtitude aralığında EPSG: 4326 SRS'ye dönüştürmek istiyorum. Ve görüntünün merkezinin Greenwich meridyeninde (0) olmasını istiyorum. Sanırım bu srs çokça kullanılıyor. Sonuç şöyle görünmesini bekliyorum:

görüntü tanımını buraya girin

Bu nedenle, yeniden göstermek için gdalwarp komutunu kullanıyorum:

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

Ancak sadece daha büyük boyutlarda (daha fazla piksel) ve EPSG: 4326 meta verilerinde bir fark alıyorum. Görüntünün kendisi başlangıçtakiyle aynı görünüyor. Ama yarım küreleri değiştirmesini bekliyorum.

Asıl soru - bir görüntüyü kesinlikle 080 180 EPSG: 4326 olacak şekilde 0 longtitude'da merkezle gdalwarp nasıl yapabilirim?

Bu ilk dosyamın gdalinfo'su:

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)

Bu gdalwarp sonrası gdalinfo

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)

Farklı çözünürlük hakkında, -tr xres yresbayrak eklemeyi denediniz mi?
nicks

Yanıtlar:


21

Hedef koordinat seçeneğini kullanarak gdalwarp (yani, "-te -180 -90 180 90") kullanarak çıkış koordinat aralığını açıkça ayarlayabilirsiniz, ancak yeni bir merkezi boylamda yeniden sarmalamaya zorlamak için CENTER_LONG yapılandırma seçeneğini de kullanabilirsiniz. Bunun gibi bir şey:

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

Ayrıca "SOURCE_EXTRA = 1000" çözgü seçeneğine de dikkat edin. Kaydırmayı yeniden yaparken kaynak dikdörtgen hesaplaması, boylamsal kesinti etrafında karışacak ve bazı görüntüleri kaybedecektir. Bu seçenek, bazı ekstralar içeriyor diyor. Onsuz, ana meridyen yakınında bir veri boşluğu göreceksiniz.

PS. Yaptığınız gibi 180dW'lık bir ana meridyen belirlemek IMHO için iyi bir fikir değil.


1
hmm, --config CENTER_LONG 0hiçbir şey yapmaz, sonuç aynı rasterdir. Burada özlediğim bir şey var mı? GDAL sürümünde çalıştırma 2.2.3.
jurajb

6

Temel olarak, rasterin iki parçaya kesilmesi ve yeni bir ofset / ölçek ile birlikte parçalanması gerekir.

[-180,180] 'den [0,360]' a gdal_translate ve VRT sürücüsü ile nasıl yapılacağına dair bir örnek var: http://trac.osgeo.org/gdal/wiki/UserDocs/RasterProcTutorial

"5 dak öğretici" ye tarayın ve ayrıntılar "Sanal Dosyalar" altında. Örneği uyacak şekilde değiştirebilecek kadar basit olmalıdır.


2

Bu rotate, rasterpaket içindeki işlevi kullanarak bir satır kod ile R'de yapılabilir .

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

1

Sadece görüntüleyiciyi QGIS'te görüntülemek istiyorsanız, + lon_wrap = 180 parametresiyle özel bir projeksiyon ayarlayabilirsiniz.

Bunu anladım ki, varsayılan olarak, proj4, 0 -> 360 - -180 -> 180 arası enlemleri sarar. + Lon_wrap = 180, bu sarmalamayı etkin bir şekilde iptal eder ve Batı yarımkürede 180 ve 360 ​​arasındaki enlemleri görüntüler.

+ Over seçeneği tamamen sarmayı devre dışı bırakmalıdır, ancak - en azından benim durumumda - raster bu seçenek kullanıldığında düzgün görünmedi.

Daha fazla bilgi için http://proj4.org/parameters.html#lon-wrap-over-longitude-wrapping adresini ziyaret edin.


0

İşte javascript kullanarak 0-360 ile -180-180 arasındaki tek bir dim dim grid değerlerini yeniden programlamak için oluşturduğum bir fonksiyon. Umarım birisinin yardımı olabilir.

  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)))
  }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.