Types spatiaux de SQL Server et ArcGIS

Les géodatabases 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 ; leur utilisation ne nécessite aucune installation distincte. Vous pouvez également utiliser ArcGIS pour accéder aux tables de base de données contenant des colonnes de géométrie et de géographie.

Utilisez le type de stockage de géométrie avec ArcGIS si l'une des conditions suivantes s'applique :

  • Le système de coordonnées que vous voulez utiliser n'est pas un système de coordonnées géographiques ou n'est pas défini dans le dictionnaire de données SQL Server.
  • Vous souhaitez stocker des valeurs z ou m avec la forme.

Utilisez le type de stockage de géographie avec ArcGIS si l'une des conditions suivantes s'applique :

  • Le système de coordonnées que vous voulez utiliser est défini dans le dictionnaire de données SQL Server.
  • Vos données couvrent de larges étendues spatiales et vous devez utiliser des calculs de surface et de longueur SQL.

    Les calculs de surface et de longueur SQL qui utilisent l'interpolation linéaire Grande elliptique peuvent être très différents de ceux qui utilisent l'interpolation linéaire planaire sur de vastes étendues spatiales.

  • Vous devez utiliser l'interpolation linéaire Grande ellipse pour les requêtes spatiales SQL.

Utiliser des mots-clés de configuration pour spécifier des types spatiaux

Par défaut, les géodatabases dans SQL Server utilisent le type de géométrie. Pour utiliser le type de géographie pour le stockage dans des géodatabases dans SQL Server, effectuez l'une des opérations suivantes :

  • Définissez le paramètre de configuration GEOMETRY_STORAGE sous le mot-clé de configuration DEFAULTS sur GEOGRAPHY. Vous ne devez modifier le paramètre GEOMETRY_STORAGE du mot-clé DEFAULTS que si la plupart des utilisateurs utilisent essentiellement la géographie pour leurs données.
  • Spécifiez un mot-clé de configuration désignant un paramètre de configuration GEOMETRY_STORAGE correspondant à GEOGRAPHY lorsque vous créez des classes d'entités. Si une partie seulement de vos données est stockée avec le type géographie, désignez un mot-clé distinct lors de la création de la classe d'entités. Un mot-clé vous est proposé (GEOGRAPHY), ce qui ne vous empêche pas de créer votre propre mot-clé.

Lorsque vous créez des classes d'entités dans une base de données SQL Server (et pas une géodatabase), choisissez le mot-clé geometry ou geography.

Inscription d'une table spatiale auprès de la géodatabase

Si vous avez utilisé une application tierce ou SQL pour créer des tables contenant des colonnes de type spatial SQL Server dans votre géodatabase, vous pouvez inscrire ces tables auprès de la géodatabase pour bénéficier des fonctionnalités de géodatabase, telles que des classes de relations, la topologie, des réseaux géométriques et des ateliers parcellaires ou avoir des sous-types, tels que des règles de validation, des domaines ou des valeurs par défaut. A cet effet, chaque table doit remplir les conditions préalables suivantes :

  • La table doit appartenir à l'utilisateur qui l'inscrit.
  • La table doit contenir une seule colonne spatiale de type géométrie ou géographie.
  • Toutes les formes dans la colonne doivent être de même type spatial, qu'il s'agisse des points, des lignes, des polygones, des multipoints, des multichaînes ou des multipolygones.

    L'ajout, à la colonne de formes, d'un type différent à l'aide de SQL et ce, après l'inscription de la table dans la géodatabase, n'est pas non plus pris en charge. La classe d'entités pourrait alors se comporter de manière imprévisible.

  • Toutes les formes de la colonne doivent utiliser le même identifiant de référence spatiale (SRID).
  • Le SRID spécifié lors de l'inscription doit figurer dans la table système SDE_spatial_references. Si tel n'est pas le cas, la projection doit être définie au moment de l'inscription.
  • Si la table contient une clé primaire, elle doit être groupée.
Remarque :

L'activation d'une géodatabase dans une base de données existante ne permet pas d'inscrire automatiquement des tables existantes auprès de la géodatabase. Les tables ou classes d'entités qui doivent faire partie de la géodatabase doivent être inscrites séparément auprès de la géodatabase.

Créer un index spatial

Pour que SQL Server crée un index spatial sur une table, elle doit comporter une clé primaire.

Dans ArcGIS

Lorsque vous utilisez ArcGIS pour créer une classe d'entités avec une colonne de géométrie ou de géographie, ArcGIS crée une clé primaire agrégée dans la colonne IdObjet de la table métier par défaut. Ensuite, ArcGIS génère un index spatial à l'aide des paramètres SQL Server par défaut. Lorsque la classe d'entités est inscrite comme versionnée, une clé primaire agrégée est créée dans les colonnes IdObjet et ID d'état de la table des ajouts et l'index spatial est généré.

ArcGIS calcule la zone de contour de la classe d'entités avec une colonne spatiale de géométrie ou de géographie selon 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 la classe d'entités n'est pas définie, la plage maximale des coordonnées du système de référence spatiale de la classe d'entités est utilisée pour la zone de contour. Vous pouvez définir ou recalculer l'étendue des classes d'entités dans la boîte de dialogue Propriétés de la classe d'entités. Si la classe d'entités se trouve dans une géodatabase, l'emprise est ajustée sur l'étendue la plus récente dès que l'index spatial est supprimé, puis recréé.

En-dehors d'ArcGIS

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 :

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>
 )

La syntaxe suivante permet de créer un index spatial dans une colonne de géographie :

CREATE SPATIAL INDEX <index_name>
 ON <table> (<spatial column>)
 USING GEOGRAPHY_GRID
 WITH (
  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>
 )

ArcGIS ajoute une colonne pour stocker des éléments géométriques supplémentaires.

Les types de géométrie et de géographie ne peuvent pas stocker tous les types d'éléments géométriques que les géodatabases doivent gérer. Ainsi, lorsque vous créez ou enregistrez une classe d'entités qui utilise le type de stockage de géométrie ou de géographie dans une géodatabase dans SQL Server, ArcGIS ajoute une colonne à la table métier pour stocker ces éléments géométriques supplémentaires. Cette colonne est appelée gdb_geomattr_data. Parmi les éléments géométriques supplémentaires, on compte les suivants :

  • Objets paramétriques tels que des arcs circulaires et des courbes de Bézier créés avec des outils de mise à jour avancés
  • Identifiants PointID
  • Entités multipatch
  • Faces surfaciques de l'Extension ArcGIS Spatial Analyst

Lorsqu'ArcGIS détecte que la source de données contient ces éléments géométriques supplémentaires, une simple représentation géométrique est stockée dans la colonne shape et les données non modifiées (y compris les éléments supplémentaires) sont stockées dans la colonne gdb_geomattr_data.

Limites connues de l'utilisation de géographie SQL Server avec ArcGIS

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.