Interpolación espacial en PostGIS sin generar ráster

Sep 03 2020

Tengo algunos datos que son similares a la lluvia, es decir. una latitud, longitud y un número Z. Está en una capa de puntos que es una cuadrícula de puntos limpia y agradable. Faltan muchos números Z en esta cuadrícula.

Quiero interpolar para encontrar números Z razonables. TIN, IDW u otros métodos. No quiero entrar en un ráster primero y luego retroceder las intersecciones del ráster a la cuadrícula de puntos.

Puedo realizar una interpolación en QGIS, pero genera un ráster que quiero evitar. El objetivo es realizar todos los cálculos dentro de PostgreSQL con fines de producción.

es posible?

Respuestas

1 geozelot Sep 04 2020 at 15:20

Una implementación de IDW ingenua, desde la parte superior de mi cabeza:

UPDATE <points> AS itp
  SET  "Z" = (
    SELECT SUM(z/d)/SUM(1/d)
    FROM   (
      SELECT smpl."Z" as z,
             ST_Distance(itp.geom, smpl.geom)^<P-value> AS d
      FROM   <point> AS smpl
      ORDER BY
             itp.geom <-> smpl.geom
      WHERE  smpl."Z" IS NOT NULL
      LIMIT  <sample_size>
    ) sq
    WHERE  ipt."Z" IS NULL
  ) q
;

Dónde

  • <P-value>es el factor aplicado a la distancia inversa; probablemente quieras quedarte entre 1.0y2.0

  • <sample_size>la cantidad de puntos muestrales (conocidos) que deben considerarse en el (k) vecindario más cercano

Ha pasado un tiempo desde que eché un vistazo al algoritmo IDW, por lo que puede que sea necesario modificarlo; la subconsulta sqdevuelve la lista de distancias inversas (cuando se usa como 1/<distance>^p), por lo que puede ir desde allí si necesita alterar las sumas IDW reales.