[MUSIQUE] [MUSIQUE] [MUSIQUE] [MUSIQUE] Bonjour et bienvenue dans cette leçon qui va porter sur les requêtes spatiales et géométriques, un ensemble de requêtes donc qui s'intéressent plus spécifiquement à extraire de l'information sur la nature et les propriétés géométriques des objets spatiaux stockés dans une base de données. L'objectif de cette leçon consiste donc à explorer ce monde des requêtes SQL qui cherchent à extraire des propriétés caractéristiques géométriques des objets spatiaux stockés dans une base de données de sorte que vous soyez en mesure de récupérer des informations comme les coordonnées d'un point, la, le périmètre ou la longueur d'une ligne, la surface d'un polygone à partir des géométries spatiales hébergées dans une base de données. Il existe un grand nombre de requêtes spatiales géométriques différentes avec une grande variété de mots clés que nous ne pouvons pas passer évidemment tous en revue donc nous allons vous présenter quelques situations, quelques requêtes type qui nous paraissent particulièrement importantes. C'est toujours une bonne idée de consulter les sites des logiciels spécialisés, en l'occurrence, le site de spatiaLite et celui de postGIS pour se faire une idée un peu plus exhaustive de l'ensemble des fonctionnalités disponibles en termes de requêtes spatiales géométriques. En général, la syntaxe est à peu près la même dans tous les cas avec une particularité toutefois dans le monde de PostGIS qui dès lors que la requête porte sur les objets spatiaux fait précéder en fait le mot clé des lettres ST souligné, ST pour spatial type qui permet dans une requête SQL de distinguer clairement tout ce qui s'adresse à des propriétés spatiales et qui sont spécifiques au monde PostGIS par rapport au monde PostgreSQL sur lequel PostGIS est bâti. Mais pour le reste, la syntaxe est la même que dans SpatiaLite à quelques rares exceptions près. Dans cette leçon, nous allons aborder d'abord les requêtes qui permettent de sélectionner et d'afficher des géométries, afficher dans une carte, ou de consulter la référence spatiale utilisée, donc le code ESPG. Nous verrons ensuite quelques syntaxes de requêtes SQL de conversion de données pour transformer des géométries en format texte ou en format binaire, des requêtes qui permettent d'extraire, de consulter le type de géométrie auquel on a affaire. Mais finalement, nous verrons une série de requêtes qui permettent de récupérer les propriétés spécifiques des géométries. [MUSIQUE] Le mot clé geometry désigne en général l'attribut geometry d'une table de données spatiales, donc la géométrie de l'objet spatial et il est utilisé dans les requêtes de sélection pour afficher des objets sur une carte. On peut également l'utiliser pour extraire la référence du système de projection utilisé ou tout un tas d'autres informations que nous verrons par la suite. La syntaxe se base tout simplement sur le mot clé SELECT geometry, on sélectionne les géométries, FROM le nom de la table pour indiquer la table de laquelle on extrait les géométries. Et puis après, on peut imaginer des clauses conditionnelles qui permettent de trier dans les géométries celles qui répondent à certains critères. On en verra un exemple tout à l'heure. Le mot clé SRID avec le mot clé geometry entre parenthèses pour extraire la référence du système de projection utilisé, en l'occurrence le code ESPG. Alors, un exemple de l'application de ces éléments. Tout d'abord, lorsqu'il s'agit de sélectionner en fait des objets, le plus simple est d'utiliser l'outil intégré donc QGIS avec un module de sélection qui fait intervenir du langage SQL, simplement le SELECT geometry FROM est masqué et on ajoute simplement le critère dans la syntaxe SQL, ici le nom qui commence par d et on sélectionne l'ensemble des districts dont le nom commence par d. Second exemple, cette fois dans le module SpatiaLite avec à nouveau une requête dans la table des disticts pour sélectionner l'ensemble des districts de Mahé. Pour afficher les résultats de la requête, il faut en fait les charger comme une nouvelle couche dans QGIS, couche dont il faut définir le nom et le champ qui contient les géométries. [AUDIO_VIDE] Finalement, tout comme on l'a fait avec le requêteur QGIS, on peut modifier la requête SpatiaLite en introduisant une clause conditionnelle pour limiter la sélection aux districts dont le nom commence par d. Et à nouveau, il faut définir le résultat de la requête comme une nouvelle couche pour afficher cette sélection de districts dans la carte. Pour récupérer le système de projection de ces objets, donc on élimine la partie conditionnelle de la requête et on ajoute la fonction SRID qui s'applique donc aux géométries. En exécutant cette requête, on voit que tous nos objets, enfin, grande partie de nos objets sont en 32 740 qui est donc le système UTM 40 Sud et on voit avec le mot clé DISTINCT que l'ensemble en fait des objets ont cette même, ce même système de référence. [MUSIQUE] [MUSIQUE] Les fonctions de conversion qui s'appliquent donc également à l'attribut geometry qui permettent de transformer une géométrie en format texte pour le rendre, pour la rendre lisible ou au contraire en format binaire pour la stocker de manière à ce qu'elle prenne peu de place, ces deux fonctions sont très utiles pour exporter, importer des jeux de données d'une base de données à une autre et les convertir dans un autre format de stockage. La syntaxe est toujours assez simple, le mot clé SELECT, la fonction AsText avec la géométrie entre parenthèses, FROM et le nom de la table. Pour illustrer cette opération, nous reprenons l'interface SpatiaLite de QGIS et l'on, on écrit simplement cette requête, transformation des géométries des hôtels en texte et on donne un alias en fait à cette colonne, on l'appelle gg donc, ça vient de la table des hôtels et on voit que note colonne gg contient une série de multipoints avec des coordonnées xy. On peut créer une table à partir de ce résultat qu'on va appeler table 1 et ajouter cette table en fait dans la base de données SpatiaLite. On peut consulter les objets de cette table. On voit qu'on retrouve nos multipoints avec une clé primaire qui a été ajoutée automatiquement. La fonction équivalente pour transformer la géométrie en un nombre binaire permet de constater en fait que ce que l'on fabrique, c'est un objet géométrique que l'on va pouvoir utiliser pour des cartes. Supposons maintenant qu'on ait obtenu, importé cette table qui contient des géométries sous forme texte, nous pouvons utiliser une fonction GeomFromText qui permet de transformer ces géométries en, ces géométries texte en des géométries binaires, donc des objets géométriques que l'on va pouvoir ensuite utiliser pour les afficher dans une carte. [MUSIQUE] [MUSIQUE] Une série de fonctions qui permettent à présent de récupérer les caractéristiques propres de la géométrie spatiale, à commencer par le type de géométrie, le nombre de points ou le nombre d'anneaux qu'elle peut contenir et son enveloppe, donc le bounding box, donc le rectangle qui englobe la géométrie. La syntaxe est toujours du type SELECT, la fonction, GeometryType, ou Envelope et le mot geometry, le mot clé geometry entre parenthèses, FROM et le nom de la table. Alors, on illustre ce type de requête avec la fonction qui permet d'extraire le type de géométrie d'une couche, en l'occurrence, on va s'intéresser à la couche des districts et on voit que la syntaxe SQL est ici assez permissive puisqu'on peut simplement mentionner l'attribut geometry, le nom de la table levant toute ambiguïté. Avec le mot clé DISTINCT, on peut vérifier que l'ensemble de la couche des districts est constituée de multipolygones. Si maintenant, on remplace Ce extraction de type de géométrie par la fonction d'enveloppe. On voit qu'on crée une série de d'objets géométriques. Et pour ajouter ces objets géométriques à la carte, il faut en faire une colonne géométrie, définir le nom de la table dans laquelle on souhaite stocker la chose, définir le champ de géométrie comme contenant la géométrie et exécuter la requête. Donc cette requête crée une couche qui s'appelle on envelopes, et on retrouve les enveloppes qui englobent les différents distris de l'île de Mahé ici. [MUSIQUE] [MUSIQUE] Parmi les nombreuses fonctions qui renvoient des propriétés spécifiques des géométries spatiales, nous allons commencer par simplement celles qui renvoient les coordonnées X, Y d'un point, avec une syntaxe toute simple de type SELECT X, entre parenthèses la géométrie virgule Y la géométrie si on veut extraire les deux coordonnées, FROM, le nom de la table. On illustre cette syntaxe en sélectionnant les coordonnées X et Y des hôtels des Seychelles. Donc ici à nouveau simplement le mot clé geometry, le nom de la table levant toute ambiguïté. On voit que le résultat de la colonie grecque est en notation scientifique, et donc on peut utiliser une fonction CastTo vers un entier pour transformer cette notation scientifique en un nombre entier pour rendre simplement la chose plus lisible. Deuxième série de fonctions qui concerne davantage ici les polylignes, avec l'extraction du point initial et du point final de la polyligne, StartPoint, EndPoint, la longueur, length, et un test pour vérifier si la polyligne est ouverte ou fermée, et éventuellement un test pour vérifier s'il s'agit d'un anneau ou pas, donc si elle fait partie d'un polygone. La syntaxe est du type Select. La fonction, entre parenthèses la géométrie, from, le nom de la table comme d'habitude, avec une particularité, le fait que la fonction de longueur qui renvoie la longueur de la polyligne est précédée d'un G majuscule dans spatialite pour la simple raison que le mot clé length est un mot réservé de spacialite. Et dans QGIS, comme je l'ai dit tout au début, en fait, cette fonction s'écrit ST pour special type, soulignée, et ensuite le mot clé length. Comme exemple de ce type de requête, nous allons extraire la longueur des tronçons de route de la table des routes des Seychelles. Et l'on voit qu'en exécutant cette requête, on obtient bel et bien la longueur en mètre de ces tronçons de route. Deux fonctions qui concernent à présent plus spécifiquement les polygones, la fonction centroid qui renvoie en effet le barycentre du polygone, le centre de gravité du polygone, et la fonction area qui retourne à sa surface. La syntaxe est toujours la même avec le mot clé Select, la fonction, la géométrie entre parenthèses, le mot clé From et le nom de la table. Alors, dans notre exemple ici, nous commençons par sélectionner, par extraire les surfaces des distris des Seychelles, voilà . Donc on a de nouveau une notation de type scientifique. Si l'on s'intéresse maintenant plutôt aux centroids, on obtient en fait des objets géométriques que l'on peut vouloir représenter sur la carte. Donc pour cela, il faut charger le résultat comme une couche dans QGIS, définir le champ de la géométrie avec le mot clé geometry, donner un nom à la table et s'assurer que le champ géométrie s'appelle bien geometry. En exécutant cette requête, on voit que l'on crée donc une couche qu'on appelé centroid, et si on affiche ces couches centroids, on voit qu'on a des points jaunes qui apparaissent au centre des distris des Seychelles. [MUSIQUE] [MUSIQUE] Voilà . Dans cette leçon, nous avons donc vu qu'on pouvait utiliser le requêteur intégré à QGIS pour sélectionner des objets spatiaux sur la base de requête conditionnelle qui utilise un syntaxe de type SQL. Et nous avons vu également que l'on pouvait utiliser les fonctions SQL soit dans Spatialite. On n'a pas vu dans PostGIS, mais c'est la même chose pour extraire des propriétés aux caractéristiques des géométries qui sont stockées dans une base de données. Alors donc, vu les fonctions de sélection des objets géométriques, les fonctions qui permettent d'extraire le système de référence utilisé, donc le code SPG. Des fonctions de conversion de format vers du texte ou vers du binaire pour pouvoir transformer, récupérer graphiquement des objets spatiaux. Des fonctions qui permettent d'extraire les caractéristiques propres des géométries comme leur type, leur enveloppe, des choses comme ça. Et finalement, une série de fonctions qui permettent d'extraire des caractéristiques plus numériques, des objets spatiaux, les coordonnées X, Y, la longueur d'une ligne, la surface d'un point, et cetera. [MUSIQUE]