6 votos

¿Cómo puedo extraer todos los valores distintos de un PostGIS Raster?

Estoy trabajando con un número entero de PostGIS raster en 2.1 y me gustaría extraer todos los valores distintos en los que la trama. Tenía la esperanza de ser capaz de hacer algo a lo largo de las líneas de la siguiente consulta, pero no he encontrado una solución que funciona hasta ahora.

SELECT DISTINCT ST_Value(rast) FROM myrastertable

7voto

dlanod Puntos 8661

Hay una forma más fácil y eficiente de hacerlo. Funciona tanto para PostGIS 2.1 como para 2.0. Sólo tiene que utilizar la función ST_ValueCount.

http://postgis.net/docs/manual-2.1/RT_ST_ValueCount.html

que le dará tanto el valor del píxel como el número de píxeles que tienen ese valor.

Así sería para su caso

SELECT DISTINCT (pvc).value
 FROM (SELECT ST_ValueCount(rast) As pvc
   FROM myrastertable) As f;

Si también quieres contar los píxeles que tienen cada valor, haz

SELECT (pvc).value, SUM((pvc).count) As total
 FROM (SELECT ST_ValueCount(rast) As pvc
   FROM myrastertable) As f
    GROUP BY (pvc).value;

También puedes añadir un orden por (pvc).value para ordenar por el valor del píxel.

3voto

Patrick Puntos 20392

Hay varias formas de Valor_ST y el que probablemente te ayudará es el de ST_Value(rast, band, x, y).

Modificando uno de los ejemplos de la documentación, puedes volcar todos los valores de cada píxel utilizando generate_series en la dirección x e y, y luego utilizar group by (o distinct) en ellos para obtener la lista de valores únicos de los píxeles.

SELECT count(b1val), b1val FROM
  (SELECT ST_Value(rast, 1, x, y) As b1val  
   FROM dummy_rast CROSS JOIN
     generate_series(1, raster_width) As x 
     CROSS JOIN generate_series(1, raster_height) As y
   WHERE rid =  raster_id) as rast_values
 group by b1val;

donde tendrá que proporcionar valores para raster_id, raster_width y raster_height y he asumido que está buscando en la banda 1.

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