Interpolación espacial en PostGIS sin generar ráster
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
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 entre1.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.