[MUSIQUE] [MUSIQUE] [MUSIQUE] [MUSIQUE] Dans cette leçon nous allons aborder la question des requêtes spatiales topologiques, donc quelque chose qui complète les requêtes spatiales géométriques, que nous avons vues dans la leçon précédente. Ces requêtes spatiales topologiques s'intéressent donc à extraire de l'information qui caractérise, non plus les objets spatiaux eux-mêmes, mais plutôt les relations spatiales et les relations entre objets spatiaux. L'objectif de cette leçon consiste donc à explorer le champ de la syntaxe des requêtes SQL, qui permettent d'extraire de l'information caractérisant les relations spatiales entre objets hébergés dans une base de données. Au terme de cette leçon, vous devriez pouvoir écrire des requêtes qui vous permettront de tester les relations spatiales entre objets, de calculer des caractéristiques, comme la distance entre objets, ou de fabriquer de nouveaux objets, par intersection, ou différence, ou d'autres opérations portant sur des objets spatiaux existants. Tout comme dans le cas des requêtes spatiales géométriques, les requêtes spatiales topologiques sont nombreuses, il y a beaucoup de mots-clés que l'on peut utiliser, et nous n'en présenterons qu'une toute petite partie, raison pour laquelle je vous encourage à jeter un coup d'œil sur les sites de, qui documentent, en fait, les fonctions disponibles dans SpatiaLite, et dans postgis. À nouveau, la syntaxe est à un peu près la même dans les deux cas, avec dans le cas de postgis, l'ajout des lettres ST, soulignées, avant la fonction. Dans cette leçon, nous commencerons par revenir sur la notion de topologie et de requêtes topologiques, notion qui avait été présentée au début du cours. Puis nous présenterons les fonctions de test, avant d'aborder la fonction de distance, et de terminer par les opérateurs spatiaux. [MUSIQUE] Nous avions donc vu, en présentant les notions de topologie, qu'une relation, une dépendance spatiale est définie par une propriété, partagée par deux entités spatiales, comme, par exemple, la plus simple d'entre elles, la distance qui sépare deux points. Nous avions également vu que les relations topologiques sont une sous-catégorie de relations spatiales, de nature qualitative, independantes de la mesure, et caractérisées par le fait d'être invariantes sous déformation continue. Les principales formes de relations topologiques sont l'adjacence, la collectivité, l'inclusion et l'intersection. Les requêtes qui portent donc sur les relations spatiales entre objets et plus particulièrement sur les relations topologiques, peuvent etre subdivisées, en gros, en trois catégories. Tout d'abord, les requêtes de test, qui renvoient des valeurs vrai ou faux. Des requêtes de distance qui renvoient une valeur numérique. Et les requêtes d'action qui renvoient des objets spatiaux. [MUSIQUE] [MUSIQUE] Les requêtes de test, ou fonctions de test, permettent donc de tester les relations spatiales, ou plus précisément les relations topologiques, entre deux entités spatiales sur la base de leurs géométries. La syntaxe est toujours du type le mot-clé SELECT, le mot-clé, en fin, la fonction de test, avec les deux géométries concernées entre parenthèses, séparées par une virgule, la clause FROM, et la table. Les principales fonctions que l'on peut utiliser sont listées ici, notamment on peut tester l'égalité entre deux géométries, le fait qu'elles soient éloignées l'une de l'autre, qu'elles se touchent, que l'une soit contenue dans l'autre ou qu'elle contienne l'autre, qu'elles se superposent, qu'elles se croisent, etc. Dans cet exemple, nous allons sélectionner les hôtels, le nom des hôtels qui se trouvent à l'intérieur du district de Takamaka. Pour se faire, la syntaxe prend un SELECT, le nom de l'hôtel, la clause FROM, avec les deux tables hôtels et districts, et puis une clause conditionnelle dans laquelle on spécifie le fait que la géométrie des hôtels doit se trouver à l'intérieur de la géométrie des districts et que le nom de district doit ressembler à Takamaka. [AUDIO_VIDE] En exécutant cette requête, on obtient donc les 6 hôtels qui se trouvent dans ce district. On peut maintenant, dans un deuxième exemple, remplacer les hôtels par les routes, et rechercher en fait les routes qui intersectent le district de Takamaka. Donc on voit qu'on a une série de 21 routes qui forment une intersection avec ce district. Pour stocker le résultat de cette requête sous forme de nouvelles couches, il faut donc ajouter dans la requête les colonnes sélectionnées, l'attribut Geometry, et le définir avec le nom Geometry, qui est le champ qu'on va utiliser pour fabriquer la couche donc, QGIS. Donner un nom à cette couche, en l'occurrence intersects, et on exécute cette requête. On fait une seconde requête, pour sélectionner, cette fois, les routes qui touchent le district de Takamaka. On voit que cette requête donne aucun résultat, donc il n'y a pas en fait d'objet qui touche proprement le district. Et une troisième requête pour identifier les routes qui sont contenues dans le district. On exporte également le résultat de cette requête, comme couche dans QGIS. Et si l'on regarde maintenant ces deux couches, la couche intersection rouge et la couche contenue en jaune, on voit bien que la couche intersection comprend davantage d'objets que la couche de ce qui est strictement contenu dans la district. [MUSIQUE] [MUSIQUE] La fonction de distance permet simplement, donc, de calculer la distance minimale séparant deux géométries, généralement exprimée en mètres, en fait ça dépend du système de projection utilisé. La syntaxe est de même nature que dans les cas précédents. Le mot-clé SELECT, la fonction de distance, les deux géométries concernées, entre parenthèses, séparées par une virgule, la clause FROM, et le nom de la table. Dans cet exemple, nous allons construire une requête pour classer les hôtels, en fonction de leur distance au réseau routier. Donc, dans la syntaxe, nous allons donc commencer par le mot-clé SELECT, le nom des hôtels, et puis un deuxième facteur qui va être la distance entre les géométries des hôtels et la géométrie des routes, et on va prendre la valeur minimum de toutes les distances séparant un hôtel de l'ensemble des routes. iii calculer le minium de distance, on lui attribue un alias, dist, dans la clause FROM, les deux tables concernées, donc les hôtels et les routes, une clause de groupement, le nom des hôtels, et puis un classement par ordre croissant de distances. En exécutant cette requête, on trouve la série des 124 hôtels, avec la distance qui les sépare du réseau routier, entre 10 et 600 mètres. [MUSIQUE] [MUSIQUE] Une série d'opérateurs spatiaux pour terminer, donc des opérateurs qui renvoient de nouveaux objets géométriques, créés à partir d'objets géométriques existants. Le premier de ces opérateurs est la requête d'union, qui permet de fusionner deux géométries en un seul objet. La requête d'intersection qui renvoie la partie commune de deux géométries. Et la requête de difference qui soustrait une géométrie d'une autre. La syntaxe, comme de coutume, est composée par le mot-clé SELECT, suivi de la fonction, les deux géométries concernées, entre parenthèses, séparées par une virgule, l'alis as geometry pour pouvoir réutiliser ce résultat, dire que c'est que, qu'il s'agit d'une géométrie, et puis la table d'où viennent les données. Tout comme dans le cas de la longueur des polylignes, la requête d'union, le mot-clé union fait partie d'une série de mots-clés réservés dans SpatialLite, raison pour laquelle on utilise GUnion à la place, et comme toujours, dans postgis, d'équivalent sera du type ST_Union. Deux autres opérateurs spatiaux importants, le Simplfy et le Buffer. Le premier, Simplify, renvoie une géométrie simplifiée, contenue d'une tolérance qui est définie par l'argument numérique donné dans la fonction, donc c'est une simplification qui se base sur un algorithme de Douglas-Peucker, qui permet, en fait, de réduire le nombre de points dont est composé une géométrie, ce qui peut être important dans les performances d'affichage des géométries à l'écran. La fonction Buffer renvoie à une géométrie qui couvre l'ensemble d'une zone située à une distance inférieure ou égale au nombre donné en attribut d'une géométrie d'origine. Donc c'est le concept d'une zone tampon. Au niveau de la syntaxe, toujours le mot-clé SELECT, la fonction la géométrie, virgule, la variable numérique, une tolérance dans le cas du Simplify, distance dans le cas du Buffer. as geometry parceque l'on fabrique des géométries et puis, la table d'origine. Dans ce premier exemple, nous allons illustrer l'utilisation de la fonction Simplify, en simplifiant le réseau routier des Seychelles avec une tolérance d'une valeur 50. Donc, on voit que la requête produit bel et bien des objets géométriques. Il faut les définir en tant que géométries pour pouvoir les récupérer dans QGIS comme de coutume On donne un nom à la table, Simplify, la géométrie étant, bien entendu, le champ Geometry. Cette couche simplifiée, on la voit apparaître ici en blanc et si on s'approche un petit peu, on voit qu'effectivement, le détail du réseau routier a été effacé, au profit d'une structure plus simple. Second exemple, avec l'union, on va établir une requête d'union entre deux districts, le district de Port Glaud et le district de Grand Anse Mahe. Donc, on fait porter la requête d'union sur le champs Geometry de la table district, et puis dans la clause conditionnelle qui vient préciser les choses, on dit que l'on veut que le nom de district choisi pour l'union soit, soit Port Glaud, soit Grand Anse Mahe. [AUDIO_VIDE] L'exécution de cette requête provoque donc la fusion des deux entités. Troisième cas de figure, on va construire une zone tampon, un buffer, autour de la route Sans Soucis Road, qui se trouve dans la partie ouest des Seychelles. Donc, on définit un buffer d'une largeur de 100 mètres autour de cette route. et dans la clause conditionnelle, on va simplement dire que l'on veut tous les segments de route qui ressemblent à Sans Soucis Road. L'exécution de cette requête fournit des objets géométriques avec AS Geometry en définition à nom de table, et on ajoute cette requête sous forme de couche dans l'interface QGIS. Mais l'on voit qu'au moment où j'exécute la requête, la zone tampon s'affiche sur la carte, ici en rose, et si on va voir ça d'un peu plus près, on voit que les différents tronçons de la route ont donné naissance à une succession de morceaux de zones tampons, qui se Comme dernier exemple, nous allons encore créer une zone tampon autour des deux districts de Port Glaud et de Grand Anse Mahe en reprenant la requête de tout à l'heure, avec une fusion de ces éléments et cette fois-ci, en ajoutant à cette fusion la création d'un buffer. Si l'on déplace la couche des districts au-dessus de ce buffer et qu'on va voir ça d'un peu plus près, on voit qu'effectivement, on a créé une frange de 100 mètres autour de ces deux districts fusionnels. [MUSIQUE] Dans cette leçon, après être revenus un tout petit peu sur la notion de topologie, nous avons vu quelques exemples des fonctions de test qui permettent d'évaluer l'existence de relations spatiales topologiques entre entités spatiales. Nous avons vu un exemple d'utilisation de la fonction de distance pour trier les hôtels en fonction de leur distance aux réseaux routiers, et nous avons vu quelques exemples d'applications des opérateurs spatiaux, qui permettent de créer de nouveaux objets par intersections, par différence, par création de zones tampons et autres. [MUSIQUE] [MUSIQUE]