180子午線を切断して、ラスターを0 360から-180 180に再投影する方法


31

0〜360の経度の座標系を持つジオティフラスターイメージがあります。画像の水平方向の中心は180経度です。下の画像をご覧ください:

ここに画像の説明を入力してください

-180 180経度範囲のEPSG:4326 SRSに変換したい。そして、画像の中心がグリニッジ子午線(0)になるようにします。このsrsは非常に広く使用されていると思います。結果は次のようになります。

ここに画像の説明を入力してください

そこで、gdalwarpコマンドを使用して再投影します。

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

しかし、より大きなサイズ(より多くのピクセル)とEPSG:4326メタデータを持つTIFFのみを取得します。画像自体は、最初のものと同じに見えます。しかし、私はそれが半球を交換することを期待しています。

質問は-経度0の中心で厳密に-180 180 EPSG:4326になるように画像をgdalwarpする方法です。

これは私の初期ファイルのgdalinfoです:

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)

これはgdalwarp後の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)

異なる解像度について、-tr xres yresフラグを追加してみましたか?
ニックス

回答:


21

ターゲット範囲オプションを使用して出力座標範囲を明示的にgdalwarpに設定できます(つまり、「-te -180 -90 180 90」)が、CENTER_LONG構成オプションを使用して、新しい中心経度を強制的に再ラップすることもできます。このようなもの:

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

「SOURCE_EXTRA = 1000」ワープオプションにも注意してください。ソース長方形の計算を再ラップすると、経度の中断が混乱し、一部の画像が失われます。このオプションは、いくつかの追加のプルを言います。これがないと、本初子午線の近くにデータギャップが表示されます。

PS。あなたがしたように180dWの主子午線を設定することは良い考えではありません。


1
うーん、--config CENTER_LONG 0何もしません、結果は同じラスターです。ここで見逃しているものはありますか?GDALバージョン2.2.3で実行。
jurajb

6

基本的に、ラスターを2つの部分に分割し、それらを新しいオフセット/スケールでつなぎ合わせる必要があります。

gdal_translateとVRTドライバーを使用して[-180,180]から[0,360]にそれを行う方法の例があります:http ://trac.osgeo.org/gdal/wiki/UserDocs/RasterProcTutorial

「5分間のチュートリアル」までスキャンすると、詳細は「仮想ファイル」の下にあります。例に合わせて変更するのに十分なほど単純でなければなりません。


2

これはrotaterasterパッケージの関数を使用して1行のコードでRで実行できます。

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

1

QGISでラスターを表示するだけの場合は、パラメーター+ lon_wrap = 180を使用してカスタム投影を設定できます。

これについての私の理解は、デフォルトでは、proj4は緯度を0-> 360から-180-> 180にラップするということです。

オプション+ overはラッピングを完全に無効にする必要がありますが、少なくとも私の場合は、そのオプションを使用するとラスターが正しく表示されませんでした。

詳細については、http://proj4.org/parameters.html#lon-wrap-over-longitude-wrappingを参照してください。


0

0-360から-180-180までのJavaScriptを使用して、グリッド値の単一の薄暗い配列を再投影するために作成した関数を次に示します。誰かの助けになるといいのですが。

  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)))
  }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.