2 votos

¿Cómo reasignar un raster a sus valores mínimos y máximos en PostGIS?

Tengo una tabla de mapas de altura de 16 bits con signo (!) (mosaicos SRTM) cargados en PostGIS. Este sitio web me mostró cómo exportar una trama como PNG a un archivo:

COPY (SELECT encode(ST_AsPNG(raster), ‘hex’) AS png FROM table_with_raster) TO ‘/tmp/myimage.hex’;

xxd -p -r /tmp/sf_colors.hex > /tmp/sf_colors.png

Sin embargo, como mis datos de imagen están en enteros con signo, ST_AsPng(rast) falla porque se trata de enteros con signo, pero ST_AsPng() necesita valores de 0 a 256 (8 bits, sin signo). Así que quiero reclasificar la imagen, de modo que 0 = valor mínimo y 256 = valor máximo.

Por ello, he creado una nueva tabla y he calculado las estadísticas de la imagen con ST_SummaryStatsAgg:

CREATE TABLE heightmap_data_stats as  (
    SELECT rast_id, (stats).min, (stats).max, rast 
    FROM (
        SELECT ST_SummaryStatsAgg(rast, 1, true) AS stats, rast_id, rast 
        FROM heightmap_data GROUP BY rast_id
    ) AS foo
);

Ahora tengo algo así:

id      min     max   rast
-----------------------------
0       85      1232  [data]
1       37      677   [data]
3       95      625   [data]
2       173     977   [data]

Ahora lo he intentado:

SELECT encode(ST_AsPng(
    ST_Reclass(rast, 1, 'min-max:0-256', '8BUI', 0)
), 'hex') FROM extra_data.heightmap_data_stats;

... para mapear los datos de la imagen de 85..1232 -> 0..256 por ejemplo. Sin embargo, no funciona - no sé la sintaxis para decirle a PostGIS que introduzca los valores reales "min" y "max" en el argumento ST_Reclass, por lo que sólo obtengo un error "invalid reclassarg" y se devuelve el raster original.

¿Cómo puedo escribir una consulta que, para cada trama de la tabla, la reclasifique en un rango de 0 a 256?

1voto

Gary Peck Puntos 151

Sustituir

min-max:0-256

con

((ST_SummaryStats(rast, 1, true)).min)::text || '-' || ((ST_SummaryStats(rast, 1, true)).max)::text || ':0-256'

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