Relations spatiales
Les relations spatiales sont décrites par des prédicats, c'est-à-dire des mots-clés qui indiquent le type de relation que chaque élément géométrique entretient avec un autre. Ces relations sont définies par l'OGC (Open Geospatial Consortium) et sont interprétées dans FME.
Les relations spatiales sont basées sur la façon dont trois composantes d'une entité se croisent - ou ne se croisent pas - avec une autre entité. Chaque entité possède un INTERIOR (intérieur), un BOUNDARY (limite) et un EXTERIOR (extérieur). Ces termes sont définis ci-dessous pour différents types de géométrie. L'interaction de ces composants détermine le type de relation spatiale des entités et les prédicats auxquels elles correspondent.
BORDURE | Point | Pas de limite. |
Line |
CURVE_BOUNDARY_RULE ENDPOINTS_MOD2 (règle de limites de courbes) La limite est l'ensemble de tous les points d'extrémité qui apparaissent un nombre impair de fois. Pour une entité linéaire simple (c'est-à-dire pas une multicourbe), cela signifie que la limite est constituée des points de départ et d'arrivée, à moins que la ligne ne soit fermée (le départ et l'arrivée sont le même point), auquel cas la limite est l'ensemble vide. (C'est la valeur par défaut si CURVE_BOUNDARY_RULE n'est pas spécifié). CURVE_BOUNDARY_RULE ENDPOINTS_ALL (règle de limites de courbes) La limite est l'ensemble de points finaux quel que soit le nombre de fois où ils se produisent dans la géométrie. |
|
Area | Les bordures d'un polygone incluent les bordures des trous. | |
INTERIOR | Point | Emplacement du point. |
Line | La ligne entière excepté ses limites telles qu'elles sont définies ci-dessus. | |
Area | La surface intérieure du polygone. | |
EXTERIOR | Point | Tout ce qui n'est pas dans la limite (BOUNDARY) ou l'intérieur (INTERIOR) |
Line | ||
Area |
Les relations spatiales ne sont pas définies pour les entrées qui ne sont pas des géométries valides de l'OGC ou des agrégats de géométries valides de l'OGC. Pour une documentation définitive sur les relations spatiales, veuillez consulter la documentation de l'OGC. Pour plus d'informations sur la façon dont FME traite les géométries agrégées et multiples, qui diffère de la documentation de l'OGC, voir ci-dessous.
Prédicats Spatiaux
Les prédicats - tels que OGC-Intersects, OGC-Contains, OGC-Overlaps, etc. - sont couramment utilisés dans les jointures spatiales. SpatialFilter et SpatialRelator permettent la construction de requêtes spatiales explicites à l'aide de prédicats.
Chacun des prédicats pris en charge est décrit ici, avec quelques exemples et matrices de motifs associés. Notez que les exemples ne sont pas exhaustifs : il peut y avoir des situations totalement différentes où un prédicat donné est vrai.
Prédicats spatiaux avec exemples
Dans ces exemples, la base est nommée "A" et la candidate est nommée "B".
Des exemples de géométrie sont présentés pour comparer des points, des lignes et des surfaces. Les bases sont en bleu, les candidats en jaune. Les exemples montrant plusieurs bases ou candidats ne représentent pas une géométrie multiple ou agrégée, ils indiquent plutôt des scénarios alternatifs qui correspondent au prédicat.
Prédicat |
Description |
Exemples de géométrie |
Matrice modèle* |
---|---|---|---|
OGC-Intersects | Les deux entités ne sont pas OGC-Disjoint, comme défini ci-après. | ||
OGC-Disjoint
|
La limite et l'intérieur de chaque entité ne coupent pas la limite ou l'intérieur de l'autre. | ||
OGC-Equals
|
Les entités ont les mêmes limites et intérieur. | ||
OGC-Touches
|
Les intérieurs ne se croisent pas, mais soit les frontières se croisent, soit une frontière croise l'autre intérieur. |
||
OGC-Crosses
|
La base a une dimensionnalité inférieure à celle du candidat et son intérieur croise l'intérieur et l'extérieur du candidat. Ou bien, les deux entrées sont des lignes et leurs intérieurs ne se coupent qu'en des points.
|
||
Pour deux lignes : |
|||
OGC-Overlaps
|
Les intérieurs s'intersectent, mais aucune entité n'est contenue dans une autre, et les entités ne sont pas égales. Indéfini pour point/ligne, point/polygone, ou ligne/polygone. dans le cas des géométries de type agrégats/multi. |
||
Pour deux lignes : | |||
OGC-Contains
|
Les intérieurs se croisent et aucune partie de l'intérieur ou de la limite du candidat ne croise l'extérieur de la base. L'intérieur ou la limite du candidat peut couper la limite de la base. Inverse de Dans (WITHIN). |
||
OGC-Within
|
Les intérieurs se croisent et aucune partie de l'intérieur ou de la limite de la base ne croise l'extérieur du candidat. L'intérieur ou la limite de la base peut couper la limite du candidat. Inverse de Contient (CONTAINS) |
* Voir Dimensionally Extended 9 Intersection Matrix (DE-9IM) ci-dessous.
Agrégats et multi-géométries
Les relations spatiales pour les agrégats et multi-géométries ne sont pas clairement définies et doivent être utilisées avec précaution.
L'OGC a des définitions pour les MultiPoints, MultiCourbes, MultiSurfaces valides, et comment ils interagissent avec les relations spatiales, mais FME n'adopte pas actuellement ces définitions. Au lieu de cela, des extensions simples sont fournies pour les agrégats de géométries valides de l'OGC, comme décrit ci-dessous.
Toutes les relations sont définies pour toutes les combinaisons de types multigéométriques, à l'exception de IFMEMultiText, IFMEMultiSurface et IFMEMultiSolid, qui ne sont définies pour aucune relation. Tous les endroits où une relation diffère de cette règle sont indiqués.
OGC-Intersects |
Une géométrie intersecte une multi-géométrie si, et seulement si, au moins une partie de la multi-géométrie intersecte la géométrie. Il en va de même pour un multi intersectant une géométrie. Une multi-géométrie intersecte une autre multi-géométrie si, et seulement si, au moins une partie d'une multi-géométrie intersectant au moins une partie d'une autre multi-géométrie. |
OGC-Disjoint |
Une géométrie est disjointe d'une multi-géométrie si, et seulement si, une géométrie est disjointe de toutes les parties d'une multi-géométrie. Il en va de même pour un multi étant disjoint d'une géométrie. Une multi-géométrie est disjointe d'une autre multi-géométrie si, et seulement si, toutes les parties de chaque multi-géométrie sont disjointes de tous les points de l'autre multi-géométrie. |
OGC-Equals |
Un multi ne peut être égal qu'à un autre multi du même type (par exemple, IFMEAggregate avec IFMEAggregate, ou IFMEMultiCurve avec IFMEMultiCurve). Deux multis sont égaux si, et seulement si, le nombre de parties dans chaque multi est le même, et chaque partie d'un multi a une correspondance égale dans l'autre multi, sans "double correspondance" (c'est-à-dire qu'aucune partie de l'un ou l'autre multi ne peut rester sans correspondance). |
OGC-Touches |
Une géométrie touche une multi-géométrie si, et seulement si, au moins une partie de la multi-géométrie touche la géométrie sans autre partie sans contact intersectant avec la géométrie. Il en va de même pour un multi touchant une géométrie. Une multi-géométrie touche une autre multi-géométrie si, et seulement si, au moins une partie de chaque multi-géométrie touche une partie de l'autre et que les parties ne se touchant pas n'intersectent pas les parties de l'autre. |
OGC-Crosses |
Non-supporté par les agrégats et multi-géométries. |
OGC-Overlaps |
Non-supporté par les agrégats et multi-géométries. |
OGC-Contains |
Une géométrie contient une multi-géométrie si, et seulement si, la géométrie contient toutes les parties de la multi-géométrie. Une multi-géométrie contient une géométrie si, et seulement si, au moins une partie de la multi-géométrie contient la géométrie. Une multi-géométrie contient une autre multi-géométrie si, et seulement si, au moins une partie de la multi-géométrie contient toutes les parties de la multi-géométrie contenue. |
OGC-Within |
Une géométrie est dans une multi-géométrie si, et seulement si, une géométrie est dans au moins une des parties de la multi-géométrie. Une multi-géométrie est dans une géométrie si, et seulement si, chaque part de la multi-géométrie est dans la géométrie. Une multi-géométrie est dans une autre multi-géométrie si, et seulement si, chaque part de la multi-géométrie contenue est dans au moins une part de la multi-géométrie contenant. |
Terminologie de Transformer
Les descriptions des prédicats spatiaux varient en fonction du contexte. Les termes suivants sont équivalents à Base et Candidate tels qu'utilisés ici.
Transformer |
Base |
Candidate |
---|---|---|
SpatialFilter | Filtre | Candidate |
SpatialRelator | Requestor | Supplier |
Matrice 9 des Intersections Dimensionnelles Etendues (Dimensionally Extended 9 Intersection Matrix) (DE-9IM)
La comparaison de deux entités produit une matrice 3 x 3 connue sous le nom de matrice d'intersection à 9 dimensions étendues (DE-9IM). Ces matrices peuvent également être représentées par une chaîne de 9 caractères.
Des exemples de matrices sont inclus dans le Tableau de prédicats ci-dessus.
Candidate | ||||
Intérieur | Bordure | Extérieur | ||
Base | Intérieur | x0 | x1 | x2 |
Bordure | x3 | x4 | x5 | |
Extérieur | x6 | x7 | x8 |
La valeur de chaque élément de la matrice indique la dimension de la géométrie produite par l'intersection des parties données des deux entités. La dimension est l'une des suivantes :
Dimension |
Description |
---|---|
-1 | Il n'y a pas d'interaction |
0 | L'intersection produit un point |
1 | L'intersection produit une ligne |
2 | L'intersection produit une surface |
Par exemple, si x1 vaut 1, l'intersection de l'intérieur de la base avec la limite du candidat produit une ligne. Cela peut se produire lorsque les deux entités sont des polygones et qu'elles se chevauchent.
Chacun des prédicats peut être défini en fonction de ce à quoi doit ressembler la matrice d'intersection des deux entités. Pour cela, il faut utiliser une matrice de motifs. Chaque élément de la matrice de motifs peut être l'un des éléments suivants :
Valeur |
Description |
---|---|
* | La valeur de cet élément peut être (-1, 0, 1, ou 2) |
T | La valeur de cet élément doit être 0, 1 ou 2 (point, ligne ou surface) |
F | La valeur de cet élément doit être -1 (aucune interaction) |
0 | La valeur de cet élément doit être 0 (point) |
1 | La valeur de cet élément doit être 0 (point) |
2 | La valeur de cet élément doit être 2 (surface) |
La matrice modèle pour un prédicat disjoint est :
Ceci signifie que ni l'intérieur de l'entité ni ses limites interagissent avec d'autres intérieurs et limites d'entités.
Plus d'exemples dans la table Exmeples précédente.
Représentations des intersections
Toute matrice d'intersection peut être représentée par une chaîne de 9 caractères. Pour générer la représentation sous forme de chaîne d'une matrice d'intersection particulière, prenez chaque élément en partant du haut à gauche, en allant de gauche à droite pour chaque ligne.
Par exemple, la chaîne de représentation de la matrice d"intersection pour le prédicat disjoint (vu ci-dessus) est “FF*FF****”.