Je suis nouveau à postgres/postgis et j'essaie de comprendre comment faire un raster carrelé vide avec postgis. Je voudrais générer un raster vide contenant 5000 x 2000 cellules, que je voudrais interroger plus tard pour trouver une cellule spécifique à l'emplacement x/y ou ajouter une valeur de cellule à l'emplacement x/y. J'ajouterai fondamentalement des valeurs de cellules individuelles au raster vide à l'avenir (par exemple, signaler des observations d'animaux dans des cellules au fil du temps).Créer une table raster carrelée vide dans PostGIS
Je trouve que la plupart de ce que cela est possible en créant d'abord une table raster:
CREATE TABLE myRasterTable(rid serial primary key, rast raster);
, puis en ajoutant une trame vide:
INSERT INTO myRasterTable(rid,rast)
VALUES(1, ST_MakeEmptyRaster(5000, 2000, 2485869.5728, 1299941.7864, 100, 100, 0, 0, 2056));
(Référence: http://suite.opengeo.org/docs/latest/dataadmin/pgGettingStarted/raster2pgsql.html)
J'ai également ajouté un groupe et ajouté une valeur à l'une des cellules raster:
UPDATE myRasterTable SET rast = ST_AddBand(rast, 1, '32BF'::text, 0);
UPDATE myRasterTable SET rast = ST_SetValue(rast, 1,ST_Transform(ST_SetSRID(ST_MakePoint(7.5,48.5),4326),2056),987.654321)
(Référence: https://gis.stackexchange.com/questions/14960/postgis-raster-value-of-a-lat-lon-point)
Je peux maintenant interroger la valeur de la cellule raster j'ai mis:
// Location with value
SELECT rid, ST_Value(rast, ST_Transform(ST_SetSRID(ST_MakePoint(7.5,48.5),4326),2056),false) val FROM myRasterTable
// Return = 987.654296875 in 0.5224609375 Seconds
// Location without value:
SELECT rid, ST_Value(rast, ST_Transform(ST_SetSRID(ST_MakePoint(7.0,48.5),4326),2056),false) val FROM myRasterTable
// Return = 0 in 0.51311993598938 Seconds
J'ai trouvé de nombreux messages disant que pour les rasters plus importants, il est essentiel ce qui a trait à la performance de requête, que rasters sont carrelées avec des degrés d'environ 100X100 cellules par tuile (références: http://postgis.17.x6.nabble.com/raster-loading-and-ST-Value-performance-td4999924.html ET https://duncanjg.wordpress.com/2013/09/21/effect-of-tile-size-and-data-storage-on-postgis-raster-query-times/)
maintenant, je ne sais pas:
- Comment créer des carreaux à partir de mon grand raster dans PostGIS ou comment créer un carreau matriciel dès le départ avec PostGIS? En d'autres termes: Quelle requête dois-je utiliser pour créer une collection de carreaux raster couvrant un raster 5000X2000 avec des carreaux d'une étendue de 100X100 cellules contenant plusieurs bandes?
- Une fois les tuiles créées, ai-je besoin de créer un index spatial séparé ou est-ce fait automatiquement?
- Enfin, comment puis-je effectuer une requête de quelle valeur de cellule a un emplacement spécifique après que le raster a été mis en mosaïque?
Toute aide serait appréciée!