Después de usar GDAL con Python para un año o así que ahora, me estoy poniendo de nuevo en Java y tratando de averiguar cómo utilizar GDAL con ella. Me pregunto si alguien ha tenido experiencia con la lectura de datos desde un ráster de la banda con GDAL y Java. Puedo leer el conjunto de datos y la banda de la siguiente manera:
Dataset theDataset = gdal.Open("k:/dem.asc", gdalconst.GA_ReadOnly);
Band theBand = theDataset.GetRasterBand(1);
...pero no estoy seguro de cómo leer los datos de theBand
. A partir de la documentación de la API parece que tengo que configurar una matriz en primer lugar, lo que significa que tengo que saber cuántos elementos hay en el bloque de datos que quiero extraer de la banda. Como este:
double[] arr = new double[3];
theBand.ReadRaster(0, 0, 3, 1, arr);
Supongo que funciona bien si usted sólo quiere extraer una fila de datos, como en el anterior, porque puedes terminar con un array de una dimensión. La referenciación de los elementos es bastante fácil. Pero si quiero extraer un multi-fila de bloques de datos, tiene que ser forzado en una matriz unidimensional. Algo como esto:
double[] arr = new double[9];
theBand.ReadRaster(0, 0, 3, 3, arr);
Entonces, si quiero hacer referencia a un individuo de celda ráster en la matriz me acaba de extraer (por ejemplo, si quiero proceso el bloque de celda por celda), que necesito para convertir mi cuadrícula bidimensional de coordenadas (proxy de la coordenada y coordenada y) en un uno-dimensional entero índice de la matriz.
Supongo que no es demasiado difícil escribir un pequeño método para convertir de una cuadrícula de referencia a la esencia de un vector de referencia, pero parece una especie de complicado, sobre todo después de estar acostumbrado al uso de la cuadrícula de referencias directamente en Python-numpy-GDAL.
Así es esta la única manera de extraer los datos de una banda en Java/GDAL? Por lo que puedo decir, que lo es, pero tengo la esperanza de que hay una manera más intuitiva de procesamiento de grandes bloques de datos.