Estoy usando PostGIS2.0 para hacer algo de trama/polígono de las intersecciones. Estoy teniendo dificultades para entender qué operación debo usar, y lo que la forma más rápida de realizar esto es. Mi problema es el siguiente:
- Tengo un polígono y una trama
- Quiero encontrar a todos los píxeles que están dentro del polígono, y obtener la suma del valor de píxel
- Y (actualizado problema): estoy recibiendo masiva de los valores de los píxeles que no existen en el original de la trama, cuando realizo la consulta
Estoy teniendo dificultades para entender si debo utilizar ST_Intersects()
o ST_Intersection()
. Yo tampoco sé cuál es el mejor enfoque para sumar mi píxeles. Aquí es el primer acercamiento que he probado (#1):
SELECT
r.rast
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
Esto devuelve una lista de rast
valores, que no estoy seguro de qué hacer con ellos. Traté de calcular el resumen de las estadísticas de uso de ST_SummaryStats()
pero no estoy seguro de si este es el promedio ponderado de la suma de todos los píxeles que se encuentran dentro del polígono.
SELECT
(result).count,
(result).sum
FROM (
SELECT
ST_SummaryStats(r.rast) As result
FROM
raster As r,
polygon As p
WHERE
ST_Intersects(r.rast, p.geom)
) As tmp
El otro enfoque que he probado (#2) utiliza ST_Intersection()
:
SELECT
(gv).geom,
(gv).val
FROM
(
SELECT
ST_Intersection(r.rast, p.geom) AS gv
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
) as foo;
Esto devuelve una lista de geometrías que analizo más, pero supongo que esto es menos eficiente.
Estoy claro en que es el más rápido, el orden de operación también. Siempre debo elegir raster, polygon
o polygon, raster
, o convertir el polígono en una trama por lo que es raster, raster
?
EDIT: he actualizado enfoque #2 con algunos detalles de R.K.
's de enlace.
El uso de enfoque #2, me he dado cuenta el siguiente error en los resultados, que es parte de la razón por la que no entiendo la salida. Aquí está la imagen original de mi trama, y un contorno del polígono que está siendo utilizado a lo cruzan, se superponen en la parte superior:
Y aquí está el resultado de la intersección con PostGIS:
El problema con la consecuencia es que no hay valores de 21474836 de ser devuelto, que no están en el original de la trama. Yo no tengo ni idea de por qué está sucediendo esto. Yo sospecho que es relativa a un pequeño número en algún lugar (dividiendo por casi 0), pero devuelve el resultado es incorrecto.