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.
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 :
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>.
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.
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 :
diameter > 200
Cette requête :
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.
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.
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 :
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.
|
||
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.
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é.
Le tableau ci-dessous détaille les combinaisons de géométries compatibles pour chaque type de recherche.
|
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. |
|
||||||||
|
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é. |
|