SQL et recherches spatiales

Il est possible d’effectuer des recherches spatiales dans le cadre de la fonctionnalité SQL. Les recherches spatiales peuvent être implicites par le biais des options sélectionnées dans la boîte de dialogue SQL ou explicites à l’aide du mot-clé SPATIAL dans une requête écrite.

Recherches spatiales implicites

Les recherches spatiales implicites sont définies entièrement dans la boîte de dialogue SQL et peuvent être effectuées entre deux couches de réseau quelconques, ou entre une couche de réseau et une couche SIG, comme indiqué ci-dessous :

  1. Choisissez le type de recherche :
    • Cross : recherche les objets réseau qui coupent une ligne de couche ou une zone de polygone.
    • Inside : recherche les objets réseau à l’intérieur d’un polygone de couche.
    • Contains : recherche les polygones de réseau dont les objets de couche se trouvent à l’intérieur du polygone.
    • Distance : recherche les objets réseau dans une distance de recherche d’un point, d’une ligne ou d’un polygone de couche.
    • Nearest : recherche l’objet réseau le plus proche dans une distance spécifiée. Si la distance spécifiée contient plusieurs objets, le premier objet trouvé est renvoyé.
  2. Sélectionnez le type de couche :
    • Couche du réseau : couche d’objet dans le réseau actuel.
    • Couche SIG : couche d’arrière-plan SIG affichée derrière le réseau dans le GeoPlan.
  3. Sélectionnez la couche dans la zone Couche.
    Remarque : lors d’une recherche à l’aide d’une couche SIG, la couche doit être chargée dans la vue GeoPlan.
    Remarque : la couche est appelée gislayer dans la requête (même lors de l’utilisation d’un réseau comme type de couche).
  4. Le cas échéant, définissez une valeur Distance.
    Important : une valeur de distance n’est requise/utilisée que lorsque vous utilisez les types de recherche Distance ou Nearest.

Pour inclure un champ dans la recherche de couche spatiale, sélectionnez le champ dans la zone Champ, ou renseignez directement la zone d’édition à l’aide de la syntaxe illustrée ci-dessous, où le nom du champ est inclus dans la requête utilisant la syntaxe gislayer.<field_name>.

Remarque : les champs spatiaux peuvent être utilisés dans les requêtes exactement de la même manière que les champs d’objets réseau.

Des exemples de ce type de requête sont répertoriés ci-dessous. Vous pouvez les trouver dans la rubrique d’aide Exemple SQL – Canalisations critiques.

Séquence des opérations

Lorsque les options de sélection de recherche spatiale et de type d’objet sont définies dans la requête, la recherche spatiale est effectuée en premier. La requête principale utilisant les critères de type d’objet est ensuite effectuée sur les résultats de la recherche spatiale. Vous trouverez ci-dessous quelques exemples :

SQL query context :
  • Type d’objet : Canalisation
  • Type de recherche [Spatial] : Cross
  • Type de couche [Spatial] : Couche SIG
  • Couche [Spatial] : Routes [SHP]


diameter > 200

Cette requête :

  1. recherche les canalisations qui traversent des routes dans la couche « Routes [SHP] » ;
  2. utilise les canalisations indiquées à l’étape 1 pour sélectionner celles dont le diamètre est supérieur à 200.

Exemple 1

SQL query context :
  • Type d’objet : Canalisation
  • Type de recherche [Spatial] : Distance
  • Type de couche [Spatial] : Couche SIG
  • Couche [Spatial] : Routes [SHP]
  • Distance [Spatial] : 2.0


diameter > 200

utilise les données SIG pour trouver toutes les canalisations d’un diamètre supérieur à 200 qui se trouvent à moins de 2 mètres d’une route.

Exemple 2

SQL query context :
  • Type d’objet : Tous les nœuds
  • Type de recherche [Spatial] : Inside
  • Type de couche [Spatial] : Couche du réseau
  • Couche [Spatial] : Polygones


z < 100 AND gislayer.area > 150

sélectionne tous les nœuds dont l’élévation est inférieure à 100 et qui sont situés à l’intérieur d’un polygone dont la zone est supérieure à 150.

Recherches spatiales explicites à l’aide du mot-clé SPATIAL

En matière de recherches spatiales, le mot-clé SPATIAL présente l’avantage de permettre une combinaison de lignes dans le bloc SQL, dont certaines utilisent la recherche spatiale et d’autres pas.

L’exécution de recherches spatiales explicites à l’aide du mot-clé SPATIAL nécessite également la définition de la table d’objets dans laquelle la requête doit effectuer la recherche, ce qui se fait par le biais d’une simple clause SELECT. L’ordre dans lequel ils sont écrits est le suivant :

  1. Bloc de requête SPATIAL
  2. Bloc de requête SELECT
Important : les clauses SPATIAL et SELECT sont définies comme des blocs de requête distincts et doivent être séparées par un point-virgule « ; » (comme c’est le cas pour séparer les blocs de requête en général), même si elles se comportent comme un seul bloc.

La syntaxe d’utilisation de la recherche spatiale dans les requêtes est la suivante :

SPATIAL 
  <geometry type> 
  <layer type> 
  <layer name>;
SELECT
 FROM <object type>;
SPATIAL 
  <geometry type> 
  <layer type> 
  <layer name> 
  <distance>;
SELECT
 FROM <object type>;
Fonction de syntaxe SPATIAL Options de syntaxe Description
Type de géométrie Cross Recherche les objets réseau qui coupent une ligne de couche ou une zone de polygone.
Inside Recherche les objets réseau à l’intérieur d’un polygone de couche.
Contains Recherche les polygones de réseau dont les objets de couche se trouvent à l’intérieur du polygone.
Distance Recherche les objets réseau dans une distance de recherche d’un point, d’une ligne ou d’un polygone de couche.
Le plus proche Recherche l’objet réseau le plus proche dans une distance spécifiée. Si la distance spécifiée contient plusieurs objets, le premier objet trouvé est renvoyé.
Type de calque Réseau Couche d’objet dans le réseau actuel
SIG Couche d’arrière-plan SIG affichée derrière le réseau dans le GeoPlan
Nom du calque Doit être une chaîne entre guillemets pour les couches SIG et un nom de table (sans guillemets, éventuellement entre [ ] s’il s’agit d’un mot unique sans espaces ou entre [ ] si ce n’est pas le cas) pour les objets réseau.
Distance
Important : une valeur Distance n’est requise/utilisée que lors de l’utilisation des types de géométrie Distance ou Nearest.
Conseil : la valeur d’entrée du champ Distance peut être une constante numérique ou une variable scalaire.

Règles d’utilisation du mot-clé SPATIAL

  1. Comme les requêtes standard, les requêtes spatiales respectent également les règles de priorité de la boîte de dialogue SQL, c’est-à-dire que les options spécifiées dans les zones de liste déroulante et la zone de texte servent de configuration spatiale initiale jusqu’à ce qu’elle soit modifiée par une instruction SPATIAL. Vous trouverez ci-dessous quelques exemples :
    SQL query context :
    • Type d’objet : Tous les nœuds
    • Type de recherche [Spatial] : Inside
    • Type de couche [Spatial] : Couche du réseau
    • Couche [Spatial] : Polygones


    SPATIAL
      Distance
      Network
      Reservoir
      30.5;
    SELECT
     FROM [All Nodes]

    Cette requête sélectionne d’abord tous les nœuds situés à l’intérieur d’un polygone de réseau, puis sélectionne tous les nœuds qui se trouvent à moins de 30,5 unités de distance d’un objet réservoir.

  2. Toute clause SPATIAL est applicable uniquement jusqu’à la fin du bloc qui la contient, par exemple :
    • si elle se trouve à l’intérieur d’un bloc IF/ELSE/ELSEIF, ses effets cessent à la fin de ce bloc ;
    • si elle se trouve dans un bloc WHILE, ses effets cessent à la fin de ce bloc ;
    • elle est applicable dans tous les blocs imbriqués IF/WHILE contenus dans un bloc existant.

Exclusion de la recherche spatiale des requêtes

Il est également possible d’exclure la recherche spatiale des segments de requêtes à l’aide de la syntaxe suivante :

SPATIAL NONE;

Lorsque SPATIAL NONE est ajouté en tant que bloc à une requête, il annule/annule la clause SPATIAL (implicite ou explicite) qui est en vigueur pour le reste de la requête, c’est-à-dire que la clause SQL a son sens normal et agit sur les données du réseau sans référence à aucune recherche spatiale. Des clauses SPATIAL supplémentaires peuvent être ajoutées à une requête après un bloc SPATIAL NONE pour introduire de nouvelles clauses de recherche spatiale si vous le souhaitez.

Cela permet une combinaison de lignes dans un bloc SQL, dont certaines utilisent la recherche spatiale et d’autres non, ce qui offre une plus grande flexibilité.

Géométrie et type de recherche spatiale

Le tableau ci-dessous détaille les combinaisons de géométries compatibles pour chaque type de recherche.

Remarque :
  • Pour les couches SIG ArcGIS Engine et ArcGIS Desktop, le type de recherche Inside porte sur les objets situés à l’intérieur d’un polygone.
  • Pour les couches SIG MapXtreme, les couches de réseau et les couches de réseau en arrière-plan, le type de recherche Inside porte sur les objets dont le centre se trouve à l’intérieur d’une limite de polygone.
  • Le type de recherche Cross englobe tous les objets situés à l’intérieur (Inside) d’un polygone de couche, ainsi que les objets qui coupent la limite.
  • Le type de recherche Contains recherche les polygones de réseau dont les objets de couche se trouvent à l’intérieur de polygone de réseau.
  • Le type de recherche Nearest recherche l’objet réseau le plus proche à une distance spécifiée. Si la distance spécifiée contient plusieurs objets, le premier objet trouvé est renvoyé.

Type de recherche spatiale

Description du type de recherche

Combinaisons de géométries compatibles

Cross

Recherche les objets réseau qui coupent une ligne de couche ou une zone de polygone.

Géométrie InfoWorks WS Pro

Géométrie de couche
Ligne

Ligne

Polygone

Polygone

Ligne

Polygone

Inside

Recherche les objets réseau à l’intérieur d’un polygone de couche.

Géométrie InfoWorks WS Pro

Géométrie de couche
Point Polygone
Ligne Polygone
Polygone Polygone

Contains

Recherche les polygones de réseau dont les objets de couche se trouvent à l’intérieur du polygone.

Géométrie InfoWorks WS Pro

Géométrie de couche
Polygone

Point

Ligne

Polygone

Distance

Recherche les objets réseau dans une distance de recherche d’un point, d’une ligne ou d’un polygone de couche.

Géométrie InfoWorks WS Pro

Géométrie de couche
Point

Point

Ligne

Polygone

Ligne

Point

Ligne

Polygone

Polygone

Point

Ligne

Polygone

Nearest

Recherche l’objet réseau le plus proche dans une distance spécifiée. Si la distance spécifiée contient plusieurs objets, le premier objet trouvé est renvoyé.

Géométrie InfoWorks WS Pro

Géométrie de couche
Point

Point

Ligne

Polygone

Ligne

Point

Ligne

Polygone

Polygone

Point

Ligne

Polygone