Workflow : création d'un catalogue d'images avec SQL
Le catalogue d'images est un composant ArcObjects qui stocke des jeux de données raster référencés spatialement. Il est possible de créer et renseigner un catalogue d'images avec SQL à l'aide du type ST_Raster en suivant le workflow fourni dans cette rubrique.
Chacun des sections suivantes contient des exemples illustrant la création d'un catalogue d'images dans chaque système de gestion de bases de données. Vous pouvez modifier les exemples pour les adapter à vos données.
Création d'une table avec une colonne ST_Raster
- Ouvrez un éditeur SQL, tel que SQL*Plus pour Oracle, pgsql ou pgAdminIII pour PostgreSQL, ou la fenêtre Editeur de requête dans Microsoft Management Studio pour SQL Server.
-
Utilisez une instruction CREATE TABLE pour créer une table avec une colonne ST_Raster et une colonne de chaîne.
Dans ces exemples, la table urban_area est créée. La table contient deux colonnes : nom et raster.
Oracle
CREATE TABLE urban_area (name varchar2(255), sde.st_raster raster);
PostgreSQL
CREATE TABLE urban_area (name varchar(255), sde.st_raster raster);
SQL Server
CREATE TABLE urban_area (name varchar(255), dbo.st_raster raster);
Initialisation de la colonne ST_Raster pour stocker des valeurs de raster
Utilisez la fonction d'initialisation ST_Raster_Util pour initialiser une colonne ST_Raster. Cette fonction ajoute, pour la colonne raster, une référence aux tables de métadonnées de raster ArcSDE et crée la table des blocs raster et la table auxiliaire du raster, ainsi que les déclencheurs d'insertion, de mise à jour et de suppression de la colonne raster. Une fois cette fonction exécutée, la colonne raster est inscrite dans ArcSDE et ses fonctionnalités peuvent y accéder. Elle ajoute un enregistrement aux tables système table_registry, column_registry et raster_columns. Toutefois, elle n'est pas accessible comme objet de catalogue d'images ArcGIS tant qu'elle n'a pas été inscrite dans la géodatabase.
-
Utilisez l'utilitaire d'initialisation ST_Raster pour initialiser la colonne ST_Raster dans la table urban_area.
Oracle
BEGIN SDE.ST_RASTER_UTIL.INITIALIZE ('urban_area','raster',4326,'defaults'); END; /
PostgreSQL
SELECT st_raster_util_initialize ('urban_area','raster',4326,'DEFAULTS');
SQL Server
EXEC ST_Raster_Util.Initialize 'sde','bobby','urban_area','raster',4326,NULL,'DEFAULTS'
Insertion d'une valeur de raster dans la colonne ST_Raster
Une instruction INSERT ajoute une ligne à la table.
Dans ces exemples, la colonne de nom est renseignée avec la chaîne de caractères "MILWAUKEE", et le constructeur ST_Raster convertit un fichier GeoTIFF en type ST_Raster.
-
Utilisez une instruction INSERT SQL pour insérer une image dans une colonne ST_Raster. Veillez à utiliser votre propre fichier TIFF au lieu de milwakee.tif.
Oracle
INSERT INTO URBAN_AREA ('MILWAUKEE',SDE.ST_RASTER('C:\milwaukee.tif')); COMMIT;
PostgreSQL
INSERT INTO urban_area ('milwaukee',sde.st_raster('C:\milwaukee.tif'));
SQL Server
INSERT INTO urban_area ('milwaukee',dbo.ST_Raster::construct('C:\milwaukee.tif'));
Attention :Vérifiez que le chemin d'accès spécifié au fichier TIFF est valide pour le serveur sur lequel la base de données et le fichier se trouvent.
-
Utilisez une instruction SQL UPDATE pour appliquer une mosaïque à la colonne raster existante.
Oracle
UPDATE URBAN_AREA T SET RASTER = T.RASTER.MOSAIC('C:\milwaukee2.tif') WHERE NAME = 'MILWAUKEE'; COMMIT;
PostgreSQL
UPDATE urban_area SET raster = mosaic(RASTER,'C:\milwaukee2.tif') WHERE name = 'milwaukee';
SQL Server
UPDATE urban_area SET raster = raster.mosaic('C:\milwaukee2.tif') WHERE name = 'milwaukee';
Création de pyramides
Après avoir chargé les données source, les pyramides sont créées avec la fonction buildPyramid ST_Raster. Vous pouvez créer les pyramides pour toutes les valeurs de raster ou utiliser une clause WHERE pour sélectionner les valeurs de raster pour lesquelles vous souhaitez créer des pyramides.
Toutes les pyramides sont créées avec l'interpolation de pyramide bilinéaire.
-
Utilisez la fonction buildPyramid.
Dans ces exemples, une clause WHERE est spécifiée afin d'indiquer pour quelles valeurs de raster créer des pyramides avec une interpolation du voisin le plus proche ou bilinéaire.
Oracle
UPDATE URBAN_AREA T SET RASTER = T.RASTER.BUILDPYRAMID('nearest,level=-1') WHERE NAME = 'MILWAUKEE'; COMMIT; UPDATE URBAN_AREA T SET RASTER = T.RASTER.BUILDPYRAMID('bilinear,level=-1') WHERE NAME = 'TOKYO'; COMMIT;
PostgreSQL
UPDATE urban_area SET raster = buildpyramid(raster,'nearest,level=-1') WHERE name = 'milwaukee'; UPDATE urban_area SET raster = buildpyramid(raster,'bilinear,level=-1') WHERE name = 'tokyo';
SQL Server
UPDATE urban_area SET raster = raster.buildPyramid('bilinear,level=-1') WHERE name = 'milwaukee'; UPDATE urban_area SET raster = raster.buildPyramid('nearest,level=-1') WHERE name = 'tokyo';
Génération de statistiques sur le raster
Certaines données raster doivent être étirées par le moteur de rendu pour être visibles. Sinon, elles apparaissent en noir, gris ou blanc. Pour ce type de données, des statistiques doivent être générées. Pour ce faire, utilisez la fonction buildStats ST_Raster dans une instruction UPDATE.
Utilisez une clause WHERE s'il est nécessaire d'indiquer pour quelles lignes de la table générer des statistiques.
-
Utilisez la fonction buildStats dans une instruction SQL UPDATE.
Oracle
UPDATE URBAN_AREA T SET RASTER = T.RASTER.BUILDSTATS() WHERE NAME = 'MILWAUKEE'; COMMIT;
PostgreSQL
UPDATE urban_area SET raster = buildstats(raster) WHERE name = 'milwaukee';
SQL Server
UPDATE urban_area SET raster = raster.buildStats(NULL) WHERE name = 'milwaukee';
Par défaut, les statistiques sont calculées sur le niveau de base de la valeur de raster, ce qui permet d'obtenir les statistiques les plus précises. Toutefois, il est possible de renoncer à la précision dans le but de gagner du temps en calculant des statistiques sur un niveau de pyramide spécifié. Plus le niveau de pyramide utilisé est élevé et plus les statistiques sont calculées rapidement, mais au prix d'une dégradation de la précision des statistiques. Evidemment, le niveau de pyramide spécifié doit avoir été créé avant de calculer des statistiques.
-
Utilisez la fonction buildStats et fournissez un niveau sur lequel générer des statistiques.
Dans ces exemples, les statistiques sont calculées sur le sixième niveau de pyramide.
Astuce :Lorsqu'un niveau n'est pas inclus, le niveau de base (qui peut être spécifié avec la valeur 0) est utilisé par défaut.
Oracle
UPDATE URBAN_AREA T SET RASTER = T.RASTER.BUILDSTATS(6) WHERE NAME = 'MILWAUKEE';
PostgreSQL
UPDATE urban_area SET raster = buildstats(raster,6) WHERE name = 'milwaukee';
SQL Server
UPDATE urban_area SET raster = buildStats.raster(6) WHERE name = 'milwaukee';
Inscription de la table dans la géodatabase
Toute table qui contient une colonne raster unique et référencée spatialement ayant été inscrite ArcSDE peut être convertie en catalogue d'images ArcObjects. La fonction d'initialisation ST_Raster_Util inscrit la colonne raster dans ArcSDE, et une fois exécutée, une table peut être convertie en catalogue d'images en l'inscrivant dans la géodatabase. Comme la colonne raster dans ce workflow d'exemple a été initialisée, elle peut être inscrite dans la géodatabase.
Utilisez ArcGIS Desktop pour inscrire la table dans la géodatabase, ce qui entraîne la création d'un catalogue d'images.
- Lancez ArcMap et ouvrez la fenêtre Catalogue ou démarrez ArcCatalog.
-
Connectez-vous à la géodatabase qui contient la table urban_area.
Les connexions aux géodatabases s'effectuent sous le nœud Connexions aux bases de données dans l'arborescence du catalogue. Veillez à vous connecter à la géodatabase en tant que propriétaire de la table urban_area.
- Cliquez avec le bouton droit sur la table urban_area, puis cliquez sur Inscrire dans la géodatabase.
-
Cliquez sur Oui dans la boîte de dialogue qui vous avertit qu'une colonne d'identifiant d'objet va être ajoutée à la table.
La géodatabase nécessite la présence de cette colonne d'identifiant d'objet unique et non nulle.
L'icône de table se transforme en icône de catalogue d'images, ce qui indique que la table a été convertie en catalogue d'images.
Mise à jour des statistiques de la base de données
Pour obtenir des performances optimales, ArcSDE compte sur l'optimiseur de coût SGBD pour sélectionner le plan d'exécution approprié dès que des mises à jour ou des requêtes sont réalisées. L'optimiseur de coût repose à son tour sur les dernières statistiques SGBD pour choisir le meilleur plan d'exécution.
La méthode la plus simple pour mettre à jour des statistiques SGBD sur les données dans une géodatabase consiste à utiliser l'interface utilisateur graphique d'ArcCatalog. Utilisez la commande Analyser d'ArcGIS Desktop pour mettre à jour des statistiques.
- Cliquez avec le bouton droit de la souris sur le catalogue d'images urban_areas dans la géodatabase sous le nœud Connexions aux bases de données dans l'arborescence du catalogue.
- Cliquez sur Analyser.
- Cochez les cases Table raster et Table métier.
- Cliquez sur OK.