GRASS raster semantics/es: Difference between revisions
No edit summary |
mNo edit summary |
||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
<! A quick summary c/o Glynn Clements:> | |||
== Tipos de precisión de mapas ráster == | |||
* '''CELL DATA TYPE''': un mapa ráster de tipo INTEGER (enteros) (solamente números enteros). | |||
* '''FCELL DATA TYPE''': un mapa ráster de tipo FLOAT (flotante) (4 bytes, precisión de 7-9 dígitos). | |||
* '''DCELL DATA TYPE''': un mapa ráster de tipo DOUBLE (doble) (8 bytes, precisión de 15-17 dígitos). | |||
* '''NULL''': representa "sin dato" en mapas ráster, debe distinguirse del valor 0. | |||
* '''INTEGER MAP''': ver CELL DATA TYPE | |||
* '''FLOAT MAP''': ver FCELL DATA TYPE | |||
* '''DOUBLE MAP''': ver DCELL DATA TYPE | |||
==Region Calculations== | |||
La "región actual" o "región computacional" es la configuración actual de los bordes de la región y de la resolución ráster actual. Note que la región computacional no está limitada por los datos ráster; puede también afectar algunas operaciones vectoriales. | |||
Los bordes de la región computacional describen un rectángulo en un espacio de dos dimensiones. Para operaciones ráster, este rectángulo es subdividido en una malla de celdas rectangulares, así, los bordes de la región están alineados con los límites de las celdas exteriores. | |||
Para más detalles, vea lo relativo a la [[Computational region/es| Región computacional]]. | Para más detalles, vea lo relativo a la [[Computational region/es| Región computacional]]. | ||
==Localizaciones de la celda== | |||
* [[Grid registration|GRASS usa el registro de centros de celda no el registro de la malla de puntos]] | |||
* La región ráster definida con {{cmd|g.region}} se refiere a los límites del borde exterior que contiene a todas las celdas dentro de ésta. | |||
Las celdas son áreas, no puntos, así que no tienen una ubicación. Sus esquinas tienen ubicaciones, también sus centros. | |||
Una celda con un índice (i,j) (este, norte) corresponde al rectángulo: | |||
{ (x,y) : west + i * ewres <= x < west + (i+1) * ewres, | |||
north - (j+1) * nsres <= y < north - j * nsres } | |||
cuyos centro está a: | |||
(west + (i+1/2) * ewres, north - (j+1/2) * nsres) | |||
[Sujetos a wrapping de valores en localizaciones lat/lon] | |||
==Conversiones ráster a vectorial== | |||
IIRC, {{cmd|r.to.vect}} usa el punto medio de los contornos de la celda (i.e. una coordenada estará en una línea de la malla, la otra estará en medio de las líneas de la malla). | |||
==Remuestreo== | |||
(ver también [[Interpolation#Resampling_methods_and_interpolation_in_GRASS]]) | |||
El método de remuestreo de datos ráster del vecino más cercano calcula el centro de cada celda y toma el valor de la celda ráster en que cayó el punto. | |||
Si el punto cae exactamente sobre una línea de malla, el resultado extacto será determinado por la dirección del error de redondeo. | |||
[Una consecuencia de esto es que disminuir la resolución por u factor que es un número entero par muestreará exactamente el borde entre las celdas, lo cual significa que el resultado estará mal definido] | |||
El comando {{cmd|r.resample}}, módulo de remuestreo para datos discretos, utiliza el mismo método del vecino más cercano, así que produce resultados idénticos. | |||
El comando {{cmd|r.resamp.interp}} method=nearest usa el mismo algoritmo, pero no el mismo código, así que no produce resultados idénticos en los casos que son decididos por el redondeo de números de punto flotante. | |||
Para los métodos method=bilinear y method=bicubic, los valores ráster son tratados como muestras en cada centro de celda, definiendo una superficie continua por piezas. Los valores ráster resultantes son obtenidos al muestrear la superficie en cada centro de celda. | |||
Dado que el algoritmo solamente interpola, y no extrapola, un margen de 0.5 (para bilineal) y 1.5 (para bicúbico) celdas se pierden de la extensión original del ráster. Cualquier muestra que se tome dentro de este margen será nula. | |||
AFAIK, {{cmd|r.resamp.rst}} se comporta de manera similar, i.e. calcula una superficie asumiendo que los valores son muestras en cada centro de celda, y muestrea la superficie en cada centro de celda. | |||
Para {{cmd|r.resamp.stats}} sin -w, el valor de cada región de celda es el agregado escogido de los valores a partir de todas las celdas ráster cuyos centros caen dentro de los bordes de la región de la celda. | |||
Con -w, la muestra es ponderada de acuerdo a la proporción de la celda ráster que cae dentro de los bordes de la región de la celda, así el resultado normalmente [1] no es afectado por el error de redondeo (una minúscula diferencia en la posición del contorno resulta en una adición o substracción de una muestra ponderada por un factor minúsculo). | |||
[1] El mínimo y máximo agregados no pueden usar pesos, así -w no tiene efecto para estos. | |||
==Reglas generales== | |||
Para la mayor parte, la interpretación es la "obvia", dado: | |||
# Las celdas son áreas y no puntos. | |||
# Las operaciones que necesitan un punto (por ej. interpolación) usan el centro de la celda. | |||
== Manejando datos nulos (''NULL values'') == | |||
=== Consideraciones generales === | |||
El manejo de los datos nulos (sin dato) depende del tipo de precisión. Para más detalles ver: | |||
* http://grass.osgeo.org/programming7/rasterlib.html#Null_no_data | |||
=== {{cmd|r.mapcalc}} === | |||
Casi todos los operadores y funciones regresan nulo si uno de sus argumentos es nulo. | |||
Las principales excepciones son: | |||
* "isnull(x)" regresa 0 si x no es nulo y 1 si x es nulo. | |||
* "if(1,a,b)" regresa a aun si b es nulo. | |||
* "if(0,a,b)" regresa b aun si a es nulo. | |||
* "eval(a,b,c,...,x)" regresa x aun si alguno de a,b,c,... es nulo. | |||
* "0 &&& x" y "x &&& 0" regresa 0 aun si x es nulo. | |||
* "1 ||| x" y "x ||| 1" regresa 1 aun si x es nulo. | |||
* "graph(x,x1,y1,...,xn,yn)" regresará nulo si x es nulo o alguno de los x[i] es nulo, o si un y[i] "relevante" es nulo. Pero no en donde y[i] que no sea usado para el cálculo sea nulo. | |||
Los operadores &&& y ||| son adiciones relativamente recientes, los antiguos operadores && y || siguen el comportamiento tradicional para los nulos, i.e. regresan nulo si alguno de los operando es nulo. | |||
El comportamiento es intuitivo si se ve el nulo como representando una cantidad desconocida. Esto explica por qué tanto "x == null()" y "x !=null()" son siempre nulos, independientemente de si x es nulo o no nulo. | |||
null() es un valor desconocido, y lo continua siendo si se le iguala a un valor particular (conocido). Si x es nulo también, entonces se tienen dos valores desconocidos, y es desconocido sean o no iguales los valores. | |||
En muchos sentidos, el comportamiento es similar al de NaN (''not a number'', ''no es un número'') de la aritmética de punto flotante. | |||
Con la excepción de los casos listados más arriba, r.mapcalc no trata de detectar casos "especiales" donde el resultado pueda ser deducido aun si uno de los operando es nulo. Por ejemplo, si x es nulo "x * 0" es nulo y no es cero, "x == x" es nulo y no 1, "x != x" es nulo y no 0, etc. | |||
Si tiene un mapa "booleano" en donde los valores son nulos o 1, normalmente quiere convertir los valores nulos a ceros (0), antes de realizar cualquier procesamiento. Puede reemplazar los nulos en un mapa existente usando por ejemplo "r.null null=0" o ajustar las pruebas con r.mapcalc. | |||
== Operaciones aritméticas == | |||
r.mapcalc: las operaciones aritméticas con tipos mixtos promueven el tipo menor al tipo mayor, donde CELL < FCELL < DCELL: | |||
<source lang="bash"> | |||
| CELL FCELL DCELL | |||
------+------------------ | |||
CELL | CELL FCELL DCELL | |||
FCELL | FCELL FCELL DCELL | |||
DCELL | DCELL DCELL DCELL | |||
</source> | |||
==Notas de reglas para programadores== | |||
Desde una perspectiva de programación, las funciones: | |||
G_row_to_northing() | |||
G_col_to_easting() | |||
G_northing_to_row() | |||
G_easting_to_col() | |||
todas transforman valores de puntos flotante. | |||
Pasar índices enteros de filas o columnas a las primeras dos funciones regresará las coordenadas de la celda de la esquina superior izquierda; para las coordenadas del centro, fila+0-5 y/o columna+0.5. | |||
De manera similar, las últimas dos funciones normalmente regresarán valores no enteros; use floor() para descartar la parte fraccionaria y obtener el índice de fila o columna de la celda dentro de la cual cae el punto. | |||
[[Category: FAQ]] | |||
[[Category: Interpolation]] | |||
[[Category:Languages/es]] | |||
[[Category:Raster]] |
Latest revision as of 09:52, 27 September 2019
<! A quick summary c/o Glynn Clements:>
Tipos de precisión de mapas ráster
- CELL DATA TYPE: un mapa ráster de tipo INTEGER (enteros) (solamente números enteros).
- FCELL DATA TYPE: un mapa ráster de tipo FLOAT (flotante) (4 bytes, precisión de 7-9 dígitos).
- DCELL DATA TYPE: un mapa ráster de tipo DOUBLE (doble) (8 bytes, precisión de 15-17 dígitos).
- NULL: representa "sin dato" en mapas ráster, debe distinguirse del valor 0.
- INTEGER MAP: ver CELL DATA TYPE
- FLOAT MAP: ver FCELL DATA TYPE
- DOUBLE MAP: ver DCELL DATA TYPE
Region Calculations
La "región actual" o "región computacional" es la configuración actual de los bordes de la región y de la resolución ráster actual. Note que la región computacional no está limitada por los datos ráster; puede también afectar algunas operaciones vectoriales.
Los bordes de la región computacional describen un rectángulo en un espacio de dos dimensiones. Para operaciones ráster, este rectángulo es subdividido en una malla de celdas rectangulares, así, los bordes de la región están alineados con los límites de las celdas exteriores.
Para más detalles, vea lo relativo a la Región computacional.
Localizaciones de la celda
- GRASS usa el registro de centros de celda no el registro de la malla de puntos
- La región ráster definida con g.region se refiere a los límites del borde exterior que contiene a todas las celdas dentro de ésta.
Las celdas son áreas, no puntos, así que no tienen una ubicación. Sus esquinas tienen ubicaciones, también sus centros.
Una celda con un índice (i,j) (este, norte) corresponde al rectángulo:
{ (x,y) : west + i * ewres <= x < west + (i+1) * ewres, north - (j+1) * nsres <= y < north - j * nsres }
cuyos centro está a:
(west + (i+1/2) * ewres, north - (j+1/2) * nsres)
[Sujetos a wrapping de valores en localizaciones lat/lon]
Conversiones ráster a vectorial
IIRC, r.to.vect usa el punto medio de los contornos de la celda (i.e. una coordenada estará en una línea de la malla, la otra estará en medio de las líneas de la malla).
Remuestreo
(ver también Interpolation#Resampling_methods_and_interpolation_in_GRASS)
El método de remuestreo de datos ráster del vecino más cercano calcula el centro de cada celda y toma el valor de la celda ráster en que cayó el punto.
Si el punto cae exactamente sobre una línea de malla, el resultado extacto será determinado por la dirección del error de redondeo.
[Una consecuencia de esto es que disminuir la resolución por u factor que es un número entero par muestreará exactamente el borde entre las celdas, lo cual significa que el resultado estará mal definido]
El comando r.resample, módulo de remuestreo para datos discretos, utiliza el mismo método del vecino más cercano, así que produce resultados idénticos.
El comando r.resamp.interp method=nearest usa el mismo algoritmo, pero no el mismo código, así que no produce resultados idénticos en los casos que son decididos por el redondeo de números de punto flotante.
Para los métodos method=bilinear y method=bicubic, los valores ráster son tratados como muestras en cada centro de celda, definiendo una superficie continua por piezas. Los valores ráster resultantes son obtenidos al muestrear la superficie en cada centro de celda.
Dado que el algoritmo solamente interpola, y no extrapola, un margen de 0.5 (para bilineal) y 1.5 (para bicúbico) celdas se pierden de la extensión original del ráster. Cualquier muestra que se tome dentro de este margen será nula.
AFAIK, r.resamp.rst se comporta de manera similar, i.e. calcula una superficie asumiendo que los valores son muestras en cada centro de celda, y muestrea la superficie en cada centro de celda.
Para r.resamp.stats sin -w, el valor de cada región de celda es el agregado escogido de los valores a partir de todas las celdas ráster cuyos centros caen dentro de los bordes de la región de la celda.
Con -w, la muestra es ponderada de acuerdo a la proporción de la celda ráster que cae dentro de los bordes de la región de la celda, así el resultado normalmente [1] no es afectado por el error de redondeo (una minúscula diferencia en la posición del contorno resulta en una adición o substracción de una muestra ponderada por un factor minúsculo).
[1] El mínimo y máximo agregados no pueden usar pesos, así -w no tiene efecto para estos.
Reglas generales
Para la mayor parte, la interpretación es la "obvia", dado:
- Las celdas son áreas y no puntos.
- Las operaciones que necesitan un punto (por ej. interpolación) usan el centro de la celda.
Manejando datos nulos (NULL values)
Consideraciones generales
El manejo de los datos nulos (sin dato) depende del tipo de precisión. Para más detalles ver:
r.mapcalc
Casi todos los operadores y funciones regresan nulo si uno de sus argumentos es nulo.
Las principales excepciones son:
- "isnull(x)" regresa 0 si x no es nulo y 1 si x es nulo.
- "if(1,a,b)" regresa a aun si b es nulo.
- "if(0,a,b)" regresa b aun si a es nulo.
- "eval(a,b,c,...,x)" regresa x aun si alguno de a,b,c,... es nulo.
- "0 &&& x" y "x &&& 0" regresa 0 aun si x es nulo.
- "1 ||| x" y "x ||| 1" regresa 1 aun si x es nulo.
- "graph(x,x1,y1,...,xn,yn)" regresará nulo si x es nulo o alguno de los x[i] es nulo, o si un y[i] "relevante" es nulo. Pero no en donde y[i] que no sea usado para el cálculo sea nulo.
Los operadores &&& y ||| son adiciones relativamente recientes, los antiguos operadores && y || siguen el comportamiento tradicional para los nulos, i.e. regresan nulo si alguno de los operando es nulo.
El comportamiento es intuitivo si se ve el nulo como representando una cantidad desconocida. Esto explica por qué tanto "x == null()" y "x !=null()" son siempre nulos, independientemente de si x es nulo o no nulo.
null() es un valor desconocido, y lo continua siendo si se le iguala a un valor particular (conocido). Si x es nulo también, entonces se tienen dos valores desconocidos, y es desconocido sean o no iguales los valores.
En muchos sentidos, el comportamiento es similar al de NaN (not a number, no es un número) de la aritmética de punto flotante.
Con la excepción de los casos listados más arriba, r.mapcalc no trata de detectar casos "especiales" donde el resultado pueda ser deducido aun si uno de los operando es nulo. Por ejemplo, si x es nulo "x * 0" es nulo y no es cero, "x == x" es nulo y no 1, "x != x" es nulo y no 0, etc.
Si tiene un mapa "booleano" en donde los valores son nulos o 1, normalmente quiere convertir los valores nulos a ceros (0), antes de realizar cualquier procesamiento. Puede reemplazar los nulos en un mapa existente usando por ejemplo "r.null null=0" o ajustar las pruebas con r.mapcalc.
Operaciones aritméticas
r.mapcalc: las operaciones aritméticas con tipos mixtos promueven el tipo menor al tipo mayor, donde CELL < FCELL < DCELL:
| CELL FCELL DCELL
------+------------------
CELL | CELL FCELL DCELL
FCELL | FCELL FCELL DCELL
DCELL | DCELL DCELL DCELL
Notas de reglas para programadores
Desde una perspectiva de programación, las funciones:
G_row_to_northing() G_col_to_easting() G_northing_to_row() G_easting_to_col()
todas transforman valores de puntos flotante.
Pasar índices enteros de filas o columnas a las primeras dos funciones regresará las coordenadas de la celda de la esquina superior izquierda; para las coordenadas del centro, fila+0-5 y/o columna+0.5.
De manera similar, las últimas dos funciones normalmente regresarán valores no enteros; use floor() para descartar la parte fraccionaria y obtener el índice de fila o columna de la celda dentro de la cual cae el punto.