Bandeau haut

Outils pour utilisateurs

Outils du site


opensource2009:orbisgis:fonctions_d_interrogation_des_donnees

Interrogation

Dans cette partie est explicitée certaines requêtes SQL qui permettent d'interroger et de réaliser des opérations sur des données. Pour chaque requête SQL, un exemple servira à guider l'utilisateur, les noms de table employés n'a aucune incidence sur le principe d'utilisation des requêtes.

A propos des requêtes

L'utilisation des requêtes nécessitent l'affichage de deux fenêtres : SQL console, la fenêtre d'exécution, et SQL Repository, la fenêtre de saisie de requêtes.

Dans le répertoire Orbisgis se trouve 4 sous-dossiers : IO, Alphanumeric, geometry, et other. IO permet d'enregistrer des tables, des bases de données dans le système. Alphanumeric permet de faire des calculs, geometry, de faire des traitements sur l'aspect géométrique des données, other, de faire d'autres traitements comme d'afficher une table ou d'afficher un zoom du geomark.

Si nous glissons une requête dans la console SQL, nous remarquons que les requêtes SQL sont toutes préformatées. Par exemple, la requête pour faire des sommes : SELECT sum(myField) FROM myTable demande un nom de champ (ou de colonne) à l'emplacement de “myfield” et un nom de table à l'emplacement de “myTable”. Le mieux est alors de glisser la table du TOC en question dans la console et à l'emplacement adéquat.

Quand une requête est mal écrite, elle va s'écrire en rouge ou en vert, et quand elle respecte la syntaxe demandée, elle devient noire, avec des arguments textes en bleu, et des arguments numériques en marron.

Il est possible d'enregistrer la requête et, pour l'exécuter, il suffit d'appuyer sur la touche “play”. A l'exécution de la requête, la fenêtre “job status” se met en route, et à la suite de cela, si la requête a été bien écrite, soit une fenêtre de données va afficher le résultat, soit une nouvelle couche de forme gdms et un numéro va s'afficher dans le TOC. Cette dernière procédure permet de différencier les requêtes d'interrogation et les requêtes de transformation.

Notons aussi qu'à chaque requête dans le “SQL repository” existe une info-bulle permettant de savoir à quoi sert la requête en question.

Les requêtes de calcul

Dans le sous-dossier alphanumeric, il en existe 7 :

  • Abs (fonction valeur absolue)
  • Power (fonction puissance)
  • Sqrt (fonction racine carré)
  • Count (Le compte des valeurs non nulles)
  • Sum (fonction somme)
  • Avg (fonction moyenne)
  • Standart derivation (fonction écart type)

A ces fonctions, ont peut ajouter au moins 2 autres de l'OGC operators (dans le répertoire geometry) : Length (fonction longueur) et Area (fonction aire).

Il est possible de faire des requêtes très simples comme SELECT Sum(longueur) FROM itinéraire_polyline; Il est important que, dans cette requête, la géométrie de la table soit bien une polyligne. Cette requête va donc calculer la somme des nombres qui se situent dans le champ “longueur” de la table “itinéraire_polyline”.

La requête SELECT Sum(Length(the_geom)) FROM itinéraire_polyline est différente. Elle va calculer la longueur graphique de la table. Si vous avez édité la table en créant des polylignes sans rajouter de la donnée dans le champ “longueur”, les valeurs trouvées des deux requêtes peuvent avoir beaucoup d'écart.

De la même manière, il est possible de faire des calculs d'aire de polygone SELECT sum(area(the_geom)) FROM region ou de donner la racine carré de chaque longueur d'une table SELECT Sqrt(longueur) FROM itinéraire_polyline.

Les requêtes binaires

Certaines requêtes servent uniquement à savoir si une information est vraie ou non. Il en existe 9 dans l'OGC prédicate (dans le répertoire geometry) :

  • Containt (pour savoir si A contient B)
  • Cross (pour savoir si A croise B)
  • Disjoint (pour savoir si A est disjoint de B)
  • Intersects : (Pour savoir si A intersecte B)
  • Is Within (pour savoir si A est à l'intérieur de B)
  • Is Withindistance (pour savoir si A est à une distance moindre ou égal de B par rapport à une distance spécifiée)
  • Overlaps (pour savoir si A chevauche B).

Le résultat de la requête est “true” ou “false”.

Ces requêtes sont toutes de la forme (the_geom1,the_geom2). Il faut alors spécifier la table de “the_geom1” et de “the_geom2” comme dans l'exemple : SELECT Intersects(a.the_geom,b.the_geom) FROM itinéraire1_polyline a, itinéraire2_polyline b

Par exemple pour filtrer les éléments affichés en fonction de leur caractéristiques :

SELECT a.* FROM couche_a couche_b WHERE Contains(couche_a.element_a_afficher, couche_b.element_a_afficher)

Dans cette requête, nous récupérons toutes les caractéristiques de la couche couche_a qui sont contenus dans la couche couche_b.

Les requêtes d'affichage

Les requêtes d'affichages se limitent à l'affichage d'une table ou de champ(s) d'une table de cette manière :

SELECT show('SELECT longueur FROM itinéraire_polyline')

(Cela n'affiche donc que le champ “longueur” de la table “itinéraire_polyline”)

ou à certaines opérations concernant les geomarks. Il est possible par exemple de créer des geomarks de cette manière :

SELECT Geomark('geo') FROM “itinéraire_polyline” WHERE Length(the_geom) > 300

Dans le geomark sera alors créé différentes vues avec le préfixe “geo” où la longueur spécifiée sera vérifiée.

SELECT * FROM france WHERE “COMMUNE”='Loire'

Cette requête permet d'identifier une sélection et de créer une table à partir de celle-ci.

Sauvegarder le résultat d'une requête

Quand un utilisateur lance une requête, le résultat est stocké dans la mémoire centrale. Pour sauvegarder le résultat sur le disque dur (dans un fichier CSV par exemple), il est necessaire de faire appel à la fonction register

L'exemple ci-dessous enregistre le resultat dans un fichier CSV.

SELECT Register(’/home/cedric/orbigis/test_orbigis.csv’,’layer’)

CREATE TABLE layer SELECT Sum(Area(geo1))FROM couche1

Register est une fonction qui permet aussi à l'utilisateur d'enregistrer ses résultats dans une base de donnée.

Le premier argument correspond au chemin du fichier, ainsi que son format. Le deuxième argument correspond au nom de l'alias utilisé par le moteur SQL durant a procédure CREATE TABLE.

Lorsque la procédure Register est terminée, les nouvelles données apparaissent dans le GeoCatalogue.

Utiliser le BEAN-SHELL

Le Bean-Shell correspond au mode d'utilisation de script sous OrbiGIS. Cette méthode permet de mettre en place des scripts d'automatisation de taches qui permettront de réaliser des opérations répétitives.

Exemple 1 : Comment lister toutes les fonctions SQL ?

import org.gdms.sql.function.FunctionManager;

t = FunctionManager.nameFunction.keySet().toArray(new String[0]);

Arrays.sort(t);

for(Object f: t)

{ print(f); }

Exemple 2 : Comment évaluer la coordonnée en Z d'une couche ?

import com.vividsolutions.jts.geom.Coordinate;

sds = gc.getLayerModel().getLayerByName(”gdms1215009158660″).getDataSource();

for (int rowIndex = 0 ; rowIndex < sds.getRowCount() ; rowIndex++) {

geom = sds.getGeometry(rowIndex);

print(rowIndex + ” ” + geom.getClass().getSimpleName());

s = “tz :: “;

for (Coordinate c : geom.getCoordinates())

{ s = s + ” ” + c.z; }

print(s);

opensource2009/orbisgis/fonctions_d_interrogation_des_donnees.txt · Dernière modification : //23/02/2011 19:49// de 127.0.0.1

Bandeau bas