ArcSDE et types spatiaux Microsoft
Les géodatabases ArcSDE prennent en charge le stockage de données vectorielles à l'aide des types de géométrie et de géographie de Microsoft. Ces types sont disponibles dans SQL Server 2008 et leur utilisation ne nécessite aucune installation distincte. Vous devrez utiliser ces types de données si vous souhaitez accéder à vos données spatiales à l'aide de SQL.
Le type de géométrie de Microsoft est semblable aux types de données spatiales SIG existants. Il utilise les coordonnées d'un plan arbitraire, tel que des projections définies.
Le type de géographie de Microsoft est utilisé pour des données sur un ellipsoïde, stockées avec des coordonnées de latitude et de longitude.
Les deux types diffèrent dans leur façon d'effectuer des calculs spatiaux. Pour plus d'informations sur les types spatiaux de Microsoft, reportez-vous à la documentation de SQL Server 2008.
Utiliser les mots-clés de configuration pour spécifier des types spatiaux Microsoft
Par défaut, les géodatabases ArcSDE dans SQL Server utilisent le type binaire compressé ArcSDE, donc si vous voulez utiliser les types de géométrie ou de géographie de Microsoft pour le stockage, vous devez (1) définir le paramètre GEOMETRY_STORAGE du mot-clé de configuration DEFAULTS dans la table SDE_dbtune sur GEOMETRY ou GEOGRAPHY ou (2) spécifier, lors de la création d'une classe d'entités, un mot-clé de configuration définissant le paramètre GEOMETRY_STORAGE sur GEOMETRY ou GEOGRAPHY. Vous ne devez modifier le paramètre GEOMETRY_STORAGE du mot-clé DEFAULTS que si la plupart de vos utilisateurs utiliseront essentiellement la géométrie ou la géographie pour leurs données. Si une partie seulement de vos données est stockée avec le type géométrie ou géographie, désignez un mot-clé distinct lors de création de la classe d'entités. Deux mots-clés sont disponibles : GEOMETRY et GEOGRAPHY mais vous pouvez créer vos propres mots-clés.
Conditions préalables pour l'utilisation du type géométrie ou géographie de Microsoft dans une géodatabase
Si vous avez créé des tables contenant des colonnes de géométrie ou de géographie de Microsoft à l'aide d'une application tierce ou SQL, vous pouvez inscrire ces tables dans ArcSDE et la géodatabase pour profiter des fonctionnalités de géodatabase. A cet effet, chaque table doit remplir certaines conditions préalables :
- La table doit appartenir à l'utilisateur qui l'inscrit.
- Cette table doit contenir une seule colonne spatiale de type géométrie ou géographie.
- Toutes les formes de la colonne doivent être du même type spatial (points, lignes ou polygones, multi-points, multi-chaînes ou multi-polygones).
L'ajout à la colonne de formes d'un type différent à l'aide de SQL après l'inscription de la table dans ArcSDE n'est pas non plus pris en charge et sera à l'origine d'un comportement imprévisible de la classe d'entités.
- Toutes les formes de la colonne doivent utiliser le même identifiant de référence spatiale (SRID).
- Le SRID d'ArcSDE spécifié lors de l'inscription doit figurer dans la table système SDE_spatial_references. Si ce n'est pas le cas, la projection devra être définie au moment de l'inscription. Remarque :
Il ne faut pas confondre le SRID d'ArcSDE et le SRID de géométrie ou de géographie de Microsoft. Le SRID d'ArcSDE est affecté par ArcSDE lorsque le système de coordonnées est ajouté à la table système SDE_spatial_references.
- Si la table contient une clé primaire, elle doit être groupée.
Inscrire une table de géométrie ou de géographie existante dans ArcSDE et la géodatabase
Pour inscrire la table dans ArcSDE, utilisez la commande sdelayer avec l'opération register.
Voici un exemple d'inscription d'une table appelée spdata, contenant des géométries surfaciques (–e a) dans une colonne de géométrie nommée features. La table contient une colonne de nombres entiers appelée fid, utilisée comme colonne d'identifiant unique de l'entité, dont les valeurs sont gérées par ArcSDE (–C fid,SDE). L'ID de référence spatiale (SRID) utilisé pour inscrire la couche est 5 (–R 5). Il s'agit du SRID dans la table SDE_spatial_references.
sdelayer –o register –l spdata,features –e a –C fid,SDE –t GEOMETRY –R 5 –i sde:sqlserver:tornado –D agency1 –u vijay –p open.septagenarian
Si la référence spatiale nécessaire n'existe pas dans la table SDE_spatial_references, vous pouvez créer une classe d'entités modèle dans ArcCatalog utilisant la référence spatiale souhaitée, puis lancer une requête sur la table SDE_spatiale_references pour connaître le SRID qui lui a été attribué.
Pour une géodatabase de structure sde
SELECT * FROM sde.SDE_spatial_references
Pour une géodatabase de structure dbo
SELECT * FROM dbo.SDE_spatial_references
Recherchez la référence spatiale que vous avez ajoutée avec la classe d'entités modèle et identifiez le numéro SRID. Vous avez ensuite la possibilité d'utiliser ce numéro avec l'option –R lors de l'inscription d'autres tables ayant des colonnes de géométrie et figurant dans le même système référentiel de coordonnées.
Vous pouvez également spécifier un identifiant de projection avec l'option –G à la place de l'option –R. Lors de l'inscription de tables comportant une colonne de géographie, l'ID de projet utilisé doit correspondre à l'un des SRID stockés dans la table SQL Server sys.spatial_references_systems.
sdelayer –o register –l spgeogdata,features –e a –C fid,SDE –t GEOGRAPHY –G 4326 –i sde:sqlserver:tornado –D agency1 –u vijay –p open.septagenarian
L'inscription de la colonne d'ID d'enregistrement comme gérée par l'utilisateur peut permettre d'accélérer l'inscription des tables avec des types de stockage de données spatiales contenant un grand nombre d'enregistrements. Toutefois, ESRI vous déconseille d'utiliser des ID de ligne gérés par l'utilisateur.
sdelayer –o register –l polsamples,shape –e p –C fid,USER –t GEOMETRY –R 300 –i 6543 –D agency1 –u guadalupe –p overnout
Si vous inscrivez la colonne d'identifiant d'entité comme mise à jour par l'utilisateur, puis inscrivez par la suite la classe d'entités dans la géodatabase, ArcGIS ajoutera une colonne d'identifiant d'entité supplémentaire, appelée object_ID. ArcGIS assure la mise à jour des valeurs de cette colonne. Si la table contient un grand nombre d'enregistrements, l'ajout de cette colonne object_ID supplémentaire peut nécessiter un certain temps.
L'exécution de la commande sdelayer –o register inscrit votre table dans ArcSDE. Cette inscription ajoute un enregistrement dans les tables système SDE_layers, SDE_geometry_columns, SDE_column_registry et SDE_table_registry dans la géodatabase. Aucun index spatial n'est créé. Vous pouvez utiliser SQL pour la création d'index spatiaux sur les tables créées en dehors d'ArcGIS, puis pour leur inscription dans ArcSDE. Vous pouvez également créer l'index spatial après avoir inscrit la table dans ArcSDE à l'aide de la commande sdelayer avec l'opération alter pour définir l'étendue de la couche. Puis, utilisez l'opération load_only_io pour que la table soit en mode E/S de chargement seul et l'opération normal_io pour rétablir le mode E/S normal pour la table, un index spatial est alors automatiquement créé. Si vous inscrivez par la suite la couche dans la géodatabase, vous pouvez créer un index spatial à l'aide d'ArcCatalog. Lorsque vous utilisez sdelayer ou ArcCatalog pour créer l'index spatial, ce dernier est créé à l'aide des paramètres d'index spatial spécifiés dans la table SDE_dbtune et l'étendue courante des données dans la couche.
Pour plus d'informations sur l'utilisation de la commande sdelayer, consultez le manuel ArcSDE Administration Command Reference.
Supposons que la classe d'entités doive être utilisée dans des fonctionnalités de géodatabase, telles que des classes de relations, une topologie, des réseaux géométriques, des ateliers cadastraux, des MNT ou des structures, ou qu'elle doive comporter des sous-types, des valeurs par défaut, des domaines ou des règles de validation. Dans ce cas, elle devra également être inscrite dans la géodatabase.
Vous pouvez inscrire les jeux de données dans ArcCatalog de la manière suivante :
- Lancez ArcCatalog.
- Connectez-vous à la géodatabase contenant la couche à inscrire. Veillez à vous connecter en tant que propriétaire de la couche.
- Cliquez avec le bouton droit de la souris sur la couche à inscrire dans la géodatabase.
- Cliquez sur Inscrire dans la géodatabase.
Créer un index spatial
Pour que SQL Server crée un index spatial, il est essentiel que la table comporte une clé primaire.
Pour les tables spatiales créées en dehors d'ArcGIS (par exemple celles créées à l'aide de SQL), vous devez créer une clé primaire sur la table et créer un index spatial à l'aide de SQL. Voici la syntaxe SQL pour la création d'un index spatial sur une table contenant une colonne de type géométrie ou géographie :
CREATE SPATIAL INDEX <index_name> ON <table> (<spatial column>) USING GEOMETRY_GRID WITH ( BOUNDING_BOX = minx,miny,maxx,maxy), GRIDS = (low|medium|high, low|medium|high, low|medium|high, low|medium|high), CELLS_PER_OBJECT = n, <other regular btree index options like filegroups, fill factors, etc> )
Lors de la création d'une couche avec une colonne spatiale de type géométrie ou géographie à l'aide d'ArcGIS, l'emprise de la classe d'entités est calculée comme l'étendue des données à indexer. Toutes les entités situées à l'extérieur de cette plage ne sont pas indexées mais sont renvoyées dans les requêtes spatiales. Si l'étendue de la couche n'est pas définie, la plage maximale des coordonnées du système de référence spatiale de la couche est utilisée pour l'emprise. Dès le basculement de la couche du mode E/S de chargement seul au mode E/S normal, l'emprise s'ajuste sur l'étendue de couche la plus récente.
En outre, lors de la création d'une classe d'entités avec une colonne de géométrie ou de géographie à l'aide d'ArcGIS, ArcSDE crée par défaut une clé primaire groupée sur la colonne ID d'enregistrement de la table d'affaire, puis crée un index spatial à partir des valeurs définies pour le paramètre B_MS_SPINDEX du mot-clé de configuration de la table SDE_dbtune utilisée lors de la création de la classe d'entités. Lorsque la classe d'entités est inscrite comme versionnée, une clé primaire groupée est créée sur les colonnes ID d'enregistrement et ID d'état de la table des ajouts et l'index spatial est créé à partir des valeurs définies pour A_MS_SPINDEX dans le mot-clé de configuration utilisé lors de la création de la classe d'entités. La valeur par défaut pour ces deux paramètres est la suivante :
GRIDS = (MEDIUM, MEDIUM, MEDIUM, MEDIUM), CELLS_PER_OBJECT = 16
Reportez-vous à la rubrique Modification du contenu de la table DBTUNE après sa création pour plus d'informations sur la définition de valeurs dans la table SDE_dbtune.
Limites connues de l'utilisation de géographie SQL Server avec une géodatabase ArcSDE
La liste suivante indique les points à prendre en compte lors du stockage de données de géographie SQL Server dans votre géodatabase ArcSDE :
- Dans cette version, ArcSDE ne peut pas stocker de valeurs z ou m dans le type de données géographiques. Par conséquent, lors de l'importation de données existantes dans la géodatabase, un fichier de formes ou une classe d'entités d'une autre géodatabase par exemple, et que le stockage doit avoir lieu avec le type de données géographiques, le jeu de données entrant ne peut contenir ni des attributs 3D (z), ni des attributs de mesure (m).
Les attributs z et m doivent être désactivés avant l'importation des données. Les données comportant des attributs de mesures ou 3D peuvent également être importées dans les classes d'entités qui utilisent le type de stockage binaire compressé par défaut ou de géométrie.
- Les mesures des données géographiques sont généralement indiquées en mètres. L'unité de mesure est indiquée dans sys.spatial_ref_system ; vérifiez les unités utilisées avec la valeur EPSG associée à vos données.
- Les entités individuelles et tous les éléments d'une entité multi-parties doivent s'inscrire dans une seule hémisphère.