GeOxygene : travaux pratiques – Exercices pour la version PostGIS – version 1.2
1
Institut Géographique National
Laboratoire COGIT
GeOxygene : travaux pratiques
Exercices pour la version PostGIS
version 1.2
28 février 2007
Eric Grosso
Résumé :
Ce document a pour but de comprendre GeOxygene au travers de divers exercices
et fait suite au document intitulé « GeOxygene : installation pas à pas ».
Tous les éléments nécessaires à la réalisation de ces exercices sont fournis avec le
CD lors de la formation.
GeOxygene : travaux pratiques – Exercices pour la version PostGIS – version 1.2
2
Exercice 1 : Création d’une structure de données à stocker
A FAIRE :
Créer une structure d’accueil GeOxygene afin de pouvoir manipuler la classe
« Salle » définie comme suit :
Cette structure d’accueil doit comprendre la table SALLE (manipulation du SGBD
via SQL), le fichier correspondant au pont relationnel objet « repository_salle.xml »
(manipulation de OJB via XML) et enfin la classe « objet » Java (manipulation Java).
Tous les composants seront créés manuellement afin de comprendre les différents
niveaux d’implémentation de GeOxygene, à savoir PostgreSQL-PostGIS, OJB et
Java. Par la suite, notamment lors du prochain exercice, la création se fera de
manière automatique.
Correction de l’exercice 1
Au niveau du Système de Gestion de Bases de Données :
Nous créons tout d’abord la table correspondante à la classe « salle » grâce à la
syntaxe SQL suivante :
CREATE TABLE salle (
cogitid INTEGER PRIMARY KEY,
nom VARCHAR(50),
numero INTEGER,
superficie DOUBLE PRECISION
);
Nous créons ensuite la géométrie associée à cette table via la syntaxe SQL
suivante :
SELECT AddGeometrycolumn ('','salle','geom','-1','GEOMETRY',3);
GeOxygene : travaux pratiques – Exercices pour la version PostGIS – version 1.2
3
La syntaxe SQL peut s’exécuter depuis pgAdmin (Outils puis Editeurs de
requêtes) ou depuis la vue Instant SQL dans la perspective dbEdit (pour
plus d’informations, consultez le document
« org.eclipse.platform.doc.user_3.0.1.pdf »).
Au niveau du langage objet (Java) :
Pour plus de détails, se référer au manuel utilisateur page 6.
La classe Salle hérite de la classe FT_Feature ; de fait, elle hérite d’un
identifiant (id de type « int ») et d’une géométrie (geom de type
« GM_Object »). Seuls restent à créer les trois autres attributs relatifs à la
classe « Salle », à savoir « nom », « numero » et « superficie ». A partir
de la création de ces derniers, on crée soit manuellement soit
dynamiquement (cf. « org.eclipse.platform.doc.user_3.0.1.pdf ») les
Getters et Setters correspondants. La classe « Salle » s’écrit comme suit :
package fr.ign.cogit.geoxygene.user.exercice;
import fr.ign.cogit.geoxygene.feature.FT_Feature;
public class Salle extends FT_Feature{
protected String nom;
public String getNom() {return nom;}
public void setNom(String nom) {this.nom = nom;}
protected int numero;
public int getNumero() {return numero;}
public void setNumero(int numero) {this.numero = numero;}
protected double superficie;
public double getSuperficie() {return superficie;}
public void setSuperficie(double superficie) {this.superficie = superficie;}
}
Au niveau du pont relationnel-objet :
Pour plus de détails, se référer au manuel utilisateur page 6.
Il reste enfin à créer le pont relationnel-objet, i.e. le fichier de mapping OJB. Pour ce
faire, il est nécessaire d’écrire la correspondance entre une classe objet (Java) et
une table du SGBD :
<class-descriptor class="CheminClasseJava" table="NomTable" >
et la correspondence entre chaque attribut de cette classe objet et de cette table en
précisant le type de l’attribut (INTEGER, DOUBLE, VARCHAR, etc.) :
<field-descriptor name="nomAttributClasseJava" column="nomAttributTable" jdbc-type="TYPE" />
GeOxygene : travaux pratiques – Exercices pour la version PostGIS – version 1.2
4
Ainsi, dans le présent exemple, nous créons le fichier de mapping
« repository_salle.xml » comme suit :
<class-descriptor class=" fr.ign.cogit.geoxygene.user.exercice.Salle" table="salle" >
<field-descriptor name="id" column="cogitid" jdbc-type="INTEGER" primarykey="true"
autoincrement="true"/>
<field-descriptor name="nom" column="nom" jdbc-type="VARCHAR" />
<field-descriptor name="numero" column="numero" jdbc-type="INTEGER" />
<field-descriptor name="superficie" column="superficie" jdbc-type="DOUBLE" />
<field-descriptor name="geom" column="GEOM" jdbc-type="STRUCT"
conversion="fr.ign.cogit.geoxygene.datatools.ojb.GeomGeOxygene2Dbms" />
</class-descriptor>
Remarque :
Le type « STRUCT » est utilisé dans le cadre d’un attribut dont le type est
défini par l’utilisateur, comme par exemple ici avec la géométrie. Il est de
fait nécessaire de fournir en supplément un convertisseur, ici la
classe « fr.ign.cogit.geoxygene.datatools.ojb.GeomGeOxygene2Dbms ».
Enfin, afin que le système prenne en compte le fichier de mapping
repository_salle.xml, il est cessaire d’ajouter les informations suivantes dans le
fichier « repository.xml », fichier qui centralise les informations relatives au pont
relationnel-objet.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE descriptor-repository PUBLIC
"-//Apache Software Foundation//DTD OJB Repository//EN"
"repository.dtd"
[
<!ENTITY database SYSTEM "repository_database.xml">
<!ENTITY internal SYSTEM "repository_internal.xml">
<!ENTITY geo SYSTEM "repository_geo.xml">
<!ENTITY dataset SYSTEM "repository_dataset.xml">
<!ENTITY salle SYSTEM "repository_salle.xml">
]>
<descriptor-repository version="1.0" isolation-level="read-uncommitted"
proxy-prefetching-limit="50">
<!-- parametres de la connection au SGBD-->
&database;
<!-- exemple classes geographiques -->
<!-- &geo; -->
&salle;
<!-- jeux de donnees -->
&dataset;
<!-- fichier de mapping internes a OJB INDISPENSABLE -->
&internal;
</descriptor-repository>
GeOxygene : travaux pratiques – Exercices pour la version PostGIS – version 1.2
5
Exercice 2 : Chargement de données sous GeOxygene à partir de
fichiers au format « SIG » : utilisation de la commande « shp2pgsql » de
PostgreSQL-PostGIS et de la console GeOxygene
A FAIRE :
Charger au sein du SGBD PostgreSQL-PostGIS des données géographiques
(comportant une géométrie) contenues dans un fichier au format ESRI Shape,
à l’aide de la commande « shp2pgsql » (pour plus de détails, se référer au
document « GeOxygene : installation pas à pas »).
Information : Le fichier de données géographiques a utilisé est le fichier
dep_france_dom.shp contenu dans le dossier « donnees/france » fourni avec
le CD de la formation. Le nom utilisé pour la table sera « departements ».
Utiliser ensuite la console GeOxygene afin de générer automatiquement les
fichiers de mapping et java correspondants.
Cet exercice est utile dans la compréhension du chargement de données et de la
console GeOxygene.
Correction de l’exercice 2
Chargement des données au sein de PostgreSQL-PostGIS :
Prérequis : copier le répertoire « donnees » fourni avec le CD dans C:\. On suppose
qu’une base nommée « postgres » a été créée dans le SGBD PostgreSQL-PostGIS
et que les fonctions liées à PostGIS ont été activées pour cette dernière. Si ce n’est
pas le cas, se référer à la partie « Chargement de données au format shape sous
PostgreSQL-PostGIS » du document « GeOxygene : installation pas à pas ».
Le chargement de données s’effectue comme suit :
- ouvrir une console en tant qu’utilisateur postgres (démarrer Programmes –
Accessoires Invites de commandes -). Pour ce faire, ouvrir une console puis
taper :
runas /user:postgres cmd
taper le mot de passe de l’utilisateur postgres, i.e. postgres.
- taper ensuite la commande suivante dans la console ainsi ouverte :
shp2pgsql -g geom -D -I C:\donnees\france\dep_france_dom.shp departements
| psql postgres
Rappel de la commande générique utilisée :
shp2pgsql -g geom -D -I shapefile nom_table | psql nom_base_donnees
l’option « –g » avec comme arguement « geom » spécifie le nom de la colonne
géométrique (par défaut « the_geom »).
1 / 17 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !