180 자오선을 잘라 0360에서 -180180까지 래스터를 재 투영하는 방법


31

경도가 0에서 360 사이 인 좌표계를 가진 지오메트리 래스터 이미지가 있습니다. 이미지의 가로 가운데는 180 도입니다. 아래 이미지를보십시오 :

여기에 이미지 설명을 입력하십시오

-180180 경도 범위의 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 메타 데이터로 딱딱합니다. 이미지 자체는 초기 이미지와 동일하게 보입니다. 그러나 나는 그것이 반구를 바꿀 것으로 기대합니다.

문제는 이미지를 0 도의 중심으로 엄격하게 -180180 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플래그를 추가 해 보셨습니까?
nickves

답변:


21

target extent 옵션을 사용하여 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"워프 옵션도 참고하십시오. 리 래핑을 수행 할 때 소스 사각형 계산은 경도 중단으로 인해 혼란스러워지고 일부 이미지가 손실됩니다. 이 옵션은 여분의 것을 가져옵니다. 그것 없이는 당신은 주요 자오선 근처에 데이터 격차를 볼 수 있습니다.

추신. 당신이했던 것처럼 180dW의 주요 자오선을 설정하는 것은 좋은 생각이 아닙니다.


1
흠, --config CENTER_LONG 0아무것도하지 않습니다, 결과는 같은 래스터입니다. 내가 여기서 놓친 게 있습니까? GDAL 버전 2.2.3에서 실행 중입니다.
jurajb

6

기본적으로 래스터를 두 부분으로 자르고 새로운 오프셋 / 스케일로 다시 조각해야합니다.

gdal_translate 및 VRT 드라이버를 사용하여 [-180,180]에서 [0,360]까지 수행하는 방법에 대한 예는 다음과 같습니다. http://trac.osgeo.org/gdal/wiki/UserDocs/RasterProcTutorial

"5 분 학습서"까지 스캔하고 세부 사항은 "가상 파일"에 있습니다. 예를 수정하기에 충분할 정도로 간단해야합니다.


2

패키지 rotate와 함께 함수를 사용하여 한 줄의 코드로 R에서 수행 할 수 있습니다 raster.

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

1

QGIS에서 래스터를 보려면 + lon_wrap = 180 매개 변수를 사용하여 사용자 정의 투영을 설정할 수 있습니다.

이것에 대한 나의 이해는 기본적으로 proj4가 위도를 0-> 360에서 -180-> 180으로 줄 바꿈한다는 것입니다. + lon_wrap = 180 은이 줄 바꿈을 효과적으로 취소하고 서반구에서 180에서 360 사이의 위도를 표시합니다.

+ over 옵션은 래핑을 완전히 비활성화해야하지만 적어도 내 경우에는 해당 옵션을 사용할 때 래스터가 제대로 표시되지 않았습니다.

자세한 내용은 http://proj4.org/parameters.html#lon-wrap-over-longitude-wrapping 을 참조하십시오.


0

다음은 0-360에서 -180-180까지의 자바 스크립트를 사용하여 단일 희미한 그리드 값 배열을 다시 투영하기 위해 만든 함수입니다. 누군가에게 도움이되기를 바랍니다.

  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.