Cómo reproyectar trama de 0 360 a -180 180 con un corte de 180 meridianos

26

Tengo una imagen ráster de geotiff que tiene un sistema de coordenadas con longitudes desde 0 hasta 360. El centro horizontal de la imagen es 180 longtitude. Ver imagen abajo:

QuierotransformarloaEPSG:4326SRSconunrangodelongituddelongitudde-180180.YquieroqueelcentrodelaimagenestéenelmeridianodeGreenwich(0).Supongoqueestasrsesmuyutilizada.Esperoqueelresultadoseveaasí:

Entonces uso un comando gdalwarp para reproyectar:

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

Pero solo obtengo un tiff con dimensiones más grandes (más píxeles) y metadatos EPSG: 4326. La imagen en sí se ve igual que la inicial. Pero espero que cambie los hemisferios.

La pregunta es: ¿cómo puedo gwarwarpear una imagen para que sea estrictamente -180 180 EPSG: 4326 con el centro en longitud 0?

Esto es gdalinfo de mi archivo inicial:

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)

Esto es gdalinfo después de gdaldalwarp

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)
    
pregunta nextstopsun 29.10.2012 - 15:37

4 respuestas

21

Puede establecer explícitamente el rango de coordenadas de salida usando la opción de extensión de destino para gdalwarp (es decir, "-te -180 -90 180 90") pero también puede usar la opción de configuración CENTER_LONG para forzar el reenvío alrededor de una nueva longitud central. Algo como esto:

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

Tenga en cuenta también la opción de deformación "SOURCE_EXTRA = 1000". Al volver a envolver, el cálculo del rectángulo de origen se confundirá con la interrupción de la longitud y perderá algunas imágenes. Esta opción dice tirar un poco más. Sin ella, verá una brecha de datos cerca del primer meridiano.

PS. establecer un primer meridiano de 180dW como lo hizo no es una buena idea en mi humilde opinión.

    
respondido por el Frank Warmerdam 30.10.2012 - 00:09
5

Básicamente, debe cortar el ráster en dos partes y volver a juntarlas con una nueva compensación / escala.

Aquí hay un ejemplo de cómo hacerlo desde [-180,180] a [0,360] con gdal_translate y el controlador VRT: enlace

Escanee hasta el "tutorial de 5 minutos" y los detalles se encuentran en "Archivos virtuales". Debería ser lo suficientemente simple como para modificar el ejemplo a la medida.

    
respondido por el mdsumner 29.10.2012 - 23:10
1

Si solo desea ver el ráster en QGIS, puede establecer una proyección personalizada con el parámetro + lon_wrap = 180.

Mi comprensión de esto es que, de manera predeterminada, proj4 envuelve latitudes desde 0 - > 360 a -180 - > 180. + lon_wrap = 180 cancelará efectivamente este ajuste y mostrará latitudes entre 180 y 360 en el hemisferio occidental.

La opción + sobre debe deshabilitar el ajuste por completo, pero, al menos en mi caso, el ráster no se mostró correctamente cuando se usó esa opción.

Consulte enlace para obtener más información.

    
respondido por el user78826 10.01.2017 - 17:22
1

Puede realizar esta tarea "rotando" su ráster (0/360 a -180/180) con una línea de código en R usando la función rotate con el paquete raster .

library(raster)
your_raster <- raster("path/to/raster.tif")
rotated_raster <- rotate(your_raster)
    
respondido por el SoilSciGuy 18.10.2018 - 16:56

Lea otras preguntas en las etiquetas