3 votos

Leyendo GeoTIFF con geotools

Tengo un archivo geotiff y uso la biblioteca geotools para analizarlo.

Este es mi código:

File f = new File("myFile.tif");

ParameterValue policy = AbstractGridFormat.OVERVIEW_POLICY.createValue();
policy.setValue(OverviewPolicy.IGNORE);

ParameterValue gridsize = AbstractGridFormat.SUGGESTED_TILE_SIZE.createValue();
ParameterValue useJaiRead = AbstractGridFormat.USE_JAI_IMAGEREAD.createValue();
useJaiRead.setValue(true);

GridCoverage2D image = new GeoTiffReader(f).read(new GeneralParameterValue[]{policy, gridsize, useJaiRead});

Rectangle2D bounds2D = image.getEnvelope2D().getBounds2D();     
GridGeometry2D geometry = image.getGridGeometry();

System.out.println(geometry);

System.out.println(bounds2D);

El resultado de geometry es:

GridGeometry2D[
    GeneralGridEnvelope[0..1199, 0..1399], 
    PARAM_MT[
        "Affine", 
        PARAMETER["num_row", 3], 
        PARAMETER["num_col", 3], 
        PARAMETER["elt_0_0", 996.4799194335938], 
        PARAMETER["elt_0_2", -598386.1975402832], 
        PARAMETER["elt_1_1", -999.6777954101562], 
        PARAMETER["elt_1_2", 650290.4111022949]
    ]
]

El resultado de bounds2D es:

java.awt.geom.Rectangle2D$Double[x=-598884.4375, y=-748758.6635742188, w=1195775.9033203125, h=1399548.9135742188]

¿Qué significa esta información?

3voto

Braiam Puntos 120

Eso significa que tu imagen tiene un ancho de 1200 píxeles y una altura de 1400 píxeles.

(precisión truncada para mayor legibilidad) El tamaño del píxel no es cuadrado, es de 996.47 (metros?) por -999.67. El valor negativo indica la dirección del eje.

La esquina superior izquierda de la imagen es -598386.19 ; 650290.41 (metros?)

La misma información está escrita en la información de límites, de una manera ligeramente transformada:

El centro de la esquina inferior izquierda de la imagen está en x= -598884.43, y= -748758.66

//Añadiendo 1/2 del tamaño del píxel, obtenemos las mismas coordenadas que antes
-598884.43 + 996.47 / 2 = -598386.19

Para la coordenada Y, ya que es la coordenada inferior, podemos validar haciendo

// Añadir 1/2 del tamaño del píxel + número de píxeles * tamaño del píxel, obtenemos las mismas coordenadas que antes
// Necesitamos manejar el tamaño del píxel negativo adecuadamente
-748758.663574219 + (1400 * 999.677795410156) - (999.677795410156 / 2) = 650290.41

Finalmente, obtienes el ancho y la altura de la imagen, en metros

1200 píxeles * 996.4799194335938 = 1195775.9
1400 píxeles * 999.677795410156 = 1399548.9

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X