6 votos

¿Para qué sirven las Restricciones Raster de PostGIS?

Mi pregunta es bastante básica, pero no he encontrado una explicación sencilla de por qué son útiles las restricciones de trama.

He trabajado con rásters en PostGIS durante un tiempo, pero sólo recientemente me he dado cuenta de que no entiendo para qué sirven las restricciones de los rásters. Entiendo que las restricciones pueden proporcionar alguna información general sobre los rásters en una tabla específica, pero nunca he accedido a las restricciones directamente y me pregunto cómo se utilizan internamente en PostGIS.

Mi motivación para hacer esta pregunta es que tengo una sola columna raster con rásters de diferentes tamaños, extensiones y SRIDs y por lo tanto las restricciones raster no están muy bien delimitadas. Si las restricciones raster se utilizan para la indexación, esto podría tener implicaciones en el rendimiento de la tabla raster en términos de velocidad de lectura de la tabla.

4voto

Patrick Puntos 20392

Las restricciones de los rásteres se utilizan para garantizar que todos los rásteres tengan el mismo SRID, las mismas dimensiones de píxeles, los mismos tipos de píxeles y las mismas alineaciones, como puede verse en RT_AddRasterConstraints docs . Estos son importantes si quieres hacer intersecciones, remuestreo, uniones, reproyecciones, o superposiciones vectoriales-raster, etc, como seguro que sabes.

Me sorprendió que se pudiera añadir un índice en una columna con diferentes SRIDs -- también se puede con vector. Parece que la construcción de índices no hace referencia al SRID y sólo utiliza los cuadros delimitadores de las geometrías subyacentes durante la construcción, independientemente del SRID. Esto parece extraño ya que si luego intentas hacer cualquier consulta contra una tabla con SRIDs mixtos, obtendrás un Operation on Mixed SRID geometries error.

Una ilustración con algunas geometrías, que utilizan el mismo índice GIST de Postgres.

create table test(id serial, geom geometry);
insert into test (geom) select st_setsrid(st_makepoint(0,0),4326);
insert into test (geom) select st_setsrid(st_makepoint(0,0),27700);
create index ix_spatial_test on test using gist(geom);
select st_intersects(a.geom, b.geom) from test a, test b where a.id!=b.id;

devuelve ERROR: Operation on mixed SRID geometries

En cambio, si se indica explícitamente el SRID en la cláusula where, por ejemplo

select id from test 
where st_intersects(st_setsrid(st_expand(st_makepoint(0,0),1),4326),geom) 
and st_srid(geom)=4326;

la consulta devuelve 1, como era de esperar.

Creo que la mezcla de rastreos de diferentes SRIDs en una columna es generalmente a evitar, pero no creo que tenga mucho impacto en el rendimiento o la creación de índices, aparte de hacer las consultas más incómodas, debido a tener que reproyectar las geometrías con ST_Transform o sólo solicitar las que coinciden con un determinado SRID.

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