• Aucun résultat trouvé

- Deborde Pascal, 2001, Un serveur spatial pour une gestion du patrimoine, Géoévénement 2001, Avril 2001, 6 pages

- Hebert Jeff, Logan Anna, Marray Chuck, Oracle Spatial User’s Guide and Reference Release 8.1.6, Decembre 1999, Oracle Corporation 322 pages.

- Kennedy Mark, Installation Guide Enterprise Edition Release 3 (8.1.7) for Windows NT, novembre 2000, Oracle Corporation, 244 pages

- Mastère SILAT, Avril 2001, Le GéoEvennement 2001, Actes des conférences

- Oracle Corporation, 12 objectifs à approcher pour implanter un système répartie, Avril 2000, Oracle Corporation, 38 pages.

- Oracle Corporation, Java Library User’s Guide, Avril 2000, Oracle Corporation, 36 pages.

- Oracle Corporation, Oracle GeoImage, Avril 2000, Oracle Corporation, 10 pages.

- Oracle Corporation, Oracle Spatial 9, Mai 2001, Oracle Corporation, 40 pages.Oracle Corporation, Coordinate Systems User’s Guide, Avril 2000, Oracle Corporation, 38 pages.

- Oracle Corporation, Oracle Spatial Data Sheet, Mach 2000, Oracle Corporation, 7 pages.

- Oracle Corporation, Oracle Spatial Linear Referencing System (LRS), An Oracle Technical Whitepaper, Mars 2000, Oracle Corporation, 10 pages.

- Oracle Corporation, Oracle Spatial Linear Referencing System (LRS) User’s Guide, Avril 2000, Oracle Corporation, 82 pages.

- Oracle Corporation, Oracle Spatial: Experiences with Extensible Databases, Mars 2000, Oracle Corporation, 29 pages.

- Oracle Corporation, Read-Only Replication of Tables Containing Objects, Mai 2000, Oracle Corporation, 9 pages.

Table des annexes :

Annexe 1 : Méthodes d’accès aux entités géographiques...98 Annexe 2 : Structure de la table des SRS...99 Annexe 3 : Modèle de donnée pour le well-know-binary-format...100 Annexe 4 : Exemple de géométries supportées ou non par le modèle objet-relationnel...101 Annexe 5 : Formats vectoriels pour Internet ...102 Annexe 6 : Export d’images géoréférencées ...103 Annexe 7 : Création d’un schéma d’application...104 Annexe 8 : DOM d’une page web classique ...105 Annexe 9 : DOM de SVGib ...106 Annexe 10 : Problème de l’alpha pour la migration de GIB ...107 Annexe 11 : Gestion des Ellipses au cours de la migration de GIB ...108 Annexe 12 : Gestion des Polygones au cours de la migration de GIB ...109 Annexe 13 : Formats supportés par FME...111 Annexe 14 : Matrices de références des différents opérateurs spatiaux...112 Annexe 15 : Opérateurs spatiaux ...114 Annexe 16 : Diagramme UML pour un catalogue de métadonnées ...116 Annexe 17 : Les 3 types de WMT...117

Annexe 1 : Méthodes d’accès aux entités géographiques.

Les méthodes suivantes ont été implémentées au sein des serveurs spatiaux :

• Dimension () : retourne la dimension de la géométrie

• Geometry Type () : retourne le nom du type de géométrie

• SRID () : retourne l’identifiant du SRS

• Envelope () : retourne le rectangle englobant (abrégé MBR)

• AsText () : exporte la géométrie dans un format texte de référence

• AsBinary () : exporte la géométrie dans un format binaire de référence

• IsEmpty () : renvoie VRAI si la géométrie est vide

• IsSimple () : renvoie VRAI si la géométrie est simple (pas d’auto intersection, ou de tangence par exemple

• Boundary () : renvoie la frontière de la géométrie

Annexe 2 : Structure de la table des SRS

Sous Oracle Spatial, les différents Systèmes de Référence Spatiaux sont placés dans la table MDSYS.CS_SRS. Quelque soit le modèle de donnée utilisé, la structure de la table des SRS est la suivante :

Figure 64: Structure de la table CS_SRS

Ci-dessous est présenté la description du système de projection Lambert III sud dans la table CS_SRS d’Oracle Spatial :

CS_NAME French Lambert III Sud SRID 41017

AUTH_SRID 41017 AUTH_NAME Oracle WKTEXT PROJCS

["French Lambert III Sud", GEOGCS [ "NTF (Paris meridian)", DATUM ["NTF (P aris meridian)", SPHEROID ["Clarke 1880 (IGN)", 6378249.200000, 293.466021]], PR IMEM [ "", 0.000649 ], UNIT ["Decimal Degree", 0.01745329251994330]], PROJECTION ["Lambert Conformal Conic"], PARAMETER ["Standard_Parallel_1", 43.199291], PARA METER ["Standard_Parallel_2", 44.996094], PARAMETER ["Latitude_Of_Origin", 44.10 0000], PARAMETER ["False_Easting", 600000.000000], PARAMETER ["False_Northing", 200000.000000], UNIT ["Meter", 1.000000000000]]

Figure 65: Description du Lambert III

Annexe 3 : Modèle de donnée pour le well-know-binary-format

(Source : OpenGIS® Simple Featurres Specification For SQL Revision 1.1)

Figure 66: Modèle pour le stockage des tables selon SQL92 (Type binaire)

Annexe 4 : Exemple de géométries supportées ou non par le modèle objet-relationnel

(1) (2) (3)

Figure 67: Exemple de polygones

La figure ci-contre présente quelques exemples de polygones avec 1, 2 et 3 anneaux.

Sous Oracle Spatial, l’anneau externe est distingué de l’anneau interne grâce à l’orientation des coordonnées. Ceux de l’anneau externe sont placés dans le sens inverse des aiguilles d’une montre alors que ceux de l’anneau interne sont dans le sens contraire.

(1) (2) (3) (4)

Figure 68: Exemple de polygone violant les règles de l’OGS Geometry Model.

Les polygones (1) et (4) peuvent être

représentés avec deux polygones mais (2) et (3) ne satisfont pas les règles de l’OGC Geometry Model.

(1) (2) (3)

Figure 69: Exemple de multipolygone

(1) (2) (3)

Figure 70: Exemple de géométrie non représentable comme une seule instance d’un multipolygone

Annexe 5 : Formats vectoriels pour Internet

Format Module de visualisation

Propagation Niveau d’interactivité*

Format interne

Raster navigateur très forte 0 -

SVF plugin désuet 1 binaire

DWF plugin /applet très rare 2 binaire

Flash plugin forte 3 binaire

PDF plugin forte 1 binaire +

ascii

SVG plugin rare (nouveau) 4 ascii

VRML plugin rare 4 ascii

PGML ² ² 3 ascii

WebCGM ² ² 2 binaire

HGML ² ² 1 ascii

DrawML ² ² 0 binaire

VML navigateur forte³ 1 ascii

Java2D applet rare (nouveau) 4 binaire

ActiveX browser forte³ 4 binaire

²) format en développement

³) uniquement sous MSIE4.0+

* 0: Affichage simple

1: Zoom, couches, liens sur objets 2: Scripts externes interagissent avec le graphisme

3: Animation

4: Contrôle externe sur les objets et les animations

Annexe 6 : Export d’images géoréférencées

Fichiers générés à partir de la tuile sélectionnée à partir des métadonnées images.

!table

!version 300

!charset WindowsLatin1

Definition Table File "15.jpg"

Type "RASTER"

(36.00000,18.00000) (0,0) Label

"pt1",

(36.00000,-18.00000) (0,1002) Label

"pt2",

(108.00000,18.00000) (2004,0) Label

"pt3"

CoordSys Earth Projection 1, 0 Units "degree"

Format XML Format Mapinfo TAB

Ci-dessous 3 tuiles géoréférencées visualisées dans Mapinfo.

Annexe 7 : Création d’un schéma d’application

Création d’un nouveau type d’entité :

<complexType name=”monTypeD’Entité”>

<complexContent>

<extension base=“gml:AbstractFeatureType”>

<sequence>

<!—Insertion des éléments de l’entité -->

</sequence>

</extension>

</complexContent>

</compleType>

Une entité compléte le type AbstractFeatureType du GML.

Création d’un nouveau type géométrique :

<complexType name=”monTypeGéométrique”>

<complexContent>

<extension base=”gml:AbstractGeometryType”>

<sequence>

<!—Insertion des éléments de l’entité -->

</sequence>

</extension>

</complexContent>

</compleType>

Création d’une nouvelle propriété :

<complexType name=”maPropriétéDeGéométrie”>

<complexContent>

<restriction base=”gml:AbstractPropertyType”>

<sequence minOccurs=”1”>

<element ref=”foo:monTypeGéométrique”/>

</sequence>

<attributeGroup ref=”gml:AssociationAttributeGroup”/>

</restriction>

</complexContent>

</compleType>

Foo est l’espace de nom utilisateur.

Déclaration d’un espace de nom dans un schéma d’application :

Il est nécessaire de déclarer l’espace de nom utilisateur afin que chaque élément utilisé dans le schéma soit présent dans l’espace de nom. Celui-ci est appelé dans le schéma en attribut de la balise schéma

<schema targetNamespace= »http://www.enitab.fr/foo » xmlns= »http://www.w3.org/2000/10/XMLSchema »

xmlns :gml= »http://www.opengis.org/gml » xmlns :foo= »http://www.enitab.fr/foo »>

</schema>

Annexe 8 : DOM d’une page web classique

(source : La cartographie en mode vectoriel sur le Web en XML les possibilités de SVG Andé Winter, Andréas Nueman)

Figure 71:

Exemple de Modèle d'Objet de Document (DOM) d’une page web simple

Annexe 9 : DOM de SVGib

Coords Ensemble des éléments

coordx

coordy Coord.svg Localisation du curseur en °

Background eathloc.png rectLoc Rectangle de localisation

GIBloc.svg Localisation

background2 earth.jpg background1

world.gif DESCW_nodata

DESCW

Villes

Curseur GibMap.svgz

Carte

DESCWcheck

DESCW_nodatacheck

background1

background2 TbAff

Tableau de gestion de l'affichage des calques

bloc_vue

mask pays bloc_pays

maskbuf x y r bloc_buffer

maskville nomville

bloc_ville bloc_recherche

Contient l'ensemble des panneau de recherche

bloc_info

Contient les liens vers l'organisation de SVGib Page SVGib.php

Annexe 10 : Problème de l’alpha pour la migration de GIB

-- Problème du type Alpha -> on attribue des types en fonction du nb de coord.

DECLARE

geometry_val mdsys.sdo_geometry;

gid NUMBER;

NB_COORD NUMBER := 0;

-- Récupération des identifiants

CURSOR curseur IS Select LOI_ID from LOI where AREA_TYPE = 'alpha';

BEGIN

-- Ouverture du curseur puis boucle sur les identifiants OPEN curseur;

LOOP

FETCH curseur INTO gid;

Select count(*) into NB_COORD from COORD_LOI where LOI_ID = gid;

If NB_COORD = 1 then

Update LOI set SHAPE_TYPE = 'Point' where LOI_ID = gid;

Elsif NB_COORD = 2 then

Update LOI set SHAPE_TYPE = 'Ellipse' where LOI_ID = gid;

Else

Update LOI set SHAPE_TYPE = 'Rectangle' where LOI_ID = gid;

End if;

Commit;

EXIT when curseur%NOTFOUND;

END LOOP;

CLOSE curseur;

END;

/

Annexe 11 : Gestion des Ellipses au cours de la migration de GIB

-- Cercle

-- Dans le cas des cercles et ellipses on stocke les coordonnées du MBR (comme Ilog)

Update LOI loi set (loi.SHAPE.SDO_GTYPE) = (2003) where loi.SHAPE_TYPE = 'Ellipse';

Update LOI loi set (loi.SHAPE.SDO_ELEM_INFO) = MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3) where loi.SHAPE_TYPE = 'Ellipse';

Update LOI loi set (loi.SHAPE.SDO_ORDINATES) = MDSYS.SDO_ORDINATE_ARRAY(

(Select min(lc.COORD_lon) from COORD_LOI lc, LOI lo

where lc.LOI_ID = lo.LOI_ID and lc.LOI_ID = LOI.LOI_ID), (Select min(lc.COORD_lat)

from COORD_LOI lc, LOI lo

WHERE lc.LOI_ID = lo.LOI_ID and lc.LOI_ID = LOI.LOI_ID), (Select max(lc.COORD_lon)

from COORD_LOI lc, LOI lo

where lc.LOI_ID = lo.LOI_ID and lc.LOI_ID = LOI.LOI_ID), (Select max(lc.COORD_lat)

from COORD_LOI lc, LOI lo

WHERE lc.LOI_ID = lo.LOI_ID and lc.LOI_ID = LOI.LOI_ID)) where loi.SHAPE_TYPE = 'Ellipse';

Annexe 12 : Gestion des Polygones au cours de la migration de GIB

La fonction permettant l’insertion des coordonnées dans un VARRAY est présentée ci-dessous :

-- Fonction permettant l'insertion d'un point x, y dans un varray SDO_ORDINATES

CREATE or REPLACE FUNCTION

Insert_coord(geom mdsys.sdo_geometry, x number, y number, Deb number) -- Geom objet géométrie

-- x et y les coordonnées

-- deb variable permettant de savoir si on veut insérer les premiers coordonnées du varray ou pas

RETURN mdsys.sdo_geometry IS

Geom_copy mdsys.sdo_geometry := geom;

ordinate_count integer;

i integer := 1;

j integer := 1;

BEGIN

-- calcul de la taille du varray

ordinate_count := geom_copy.SDO_ORDINATES.count;

if (Deb <> 1) then

-- Agrandissement du varray avant l'insertion geom_copy.sdo_ordinates.extend(2);

-- dbms_output.put_line( 'Extending ordinates object');

ordinate_count := geom_copy.sdo_ordinates.count;

i := ordinate_count - 1;

j := ordinate_count;

else

i := 1;

j := 2;

end if;

-- Insertion

geom_copy.sdo_ordinates(i) := x;

geom_copy.sdo_ordinates(j) := y;

RETURN geom_copy;

END;

/

La procédure permettant de récupérer les coordonnées de chaque géométrie est présentée ci-dessous. Elle fait appel à la procédure précédente qui réalise l’insertion des coordonnées dans l’élément SDO_ORDINATES.

-- Procédure réalisant une boucle pour l'ensemble des ID create or replace procedure put_ordinates(id number, geom mdsys.sdo_geometry) IS

geom_copy mdsys.sdo_geometry := geom;-- Objet geom X NUMBER;

Y NUMBER;

Deb NUMBER := 1;

-- Définition des curseurs

CURSOR curseur1 IS Select COORD_lon from COORD_LOI where LOI_ID = id;

CURSOR curseur2 IS Select COORD_lat from COORD_LOI where LOI_ID = id;

BEGIN

-- dbms_output.put_line( 'Insert data for ID : ' || id );

OPEN curseur1;

OPEN curseur2;

LOOP

FETCH curseur1 INTO X;

FETCH curseur2 INTO Y;

EXIT when curseur1%NOTFOUND;

dbms_output.put_line( 'Value X : ' || X || ', Y : ' || Y );

geom_copy := insert_coord (geom_copy, X, Y, Deb);

-- MAJ de la geométrie

update LOI set SHAPE = geom_copy where LOI_ID = id;

Deb := 0;

END LOOP;

CLOSE curseur1;

CLOSE curseur2;

END;

/

Enfin la procédure précédente est appelée pour chaque identifiant distinct. Le programme lui envoie en argument l’objet SDO_GEOMETRY et l’identifiant.

-- GIB_LOI modele objet relonionnel DECLARE

Geometry_val mdsys.sdo_geometry;

gid NUMBER;

-- Récupération des identifiants

CURSOR curseur IS Select LOI_ID from LOI where SHAPE_TYPE = 'Polygon' or loi.SHAPE_TYPE = 'Rectangle';

BEGIN

OPEN curseur;

LOOP

FETCH curseur INTO gid;

EXIT when curseur%NOTFOUND;

-- Initialisation et Récupération de l'objet SDO_GEOM

Update LOI l set l.SHAPE.SDO_ORDINATES = MDSYS.SDO_ORDINATE_ARRAY(0,0) where LOI_ID = gid;

select SHAPE into geometry_val from LOI where LOI_ID = gid;

-- Insertion des coordonnées put_ordinates(gid, geometry_val);

commit;

END LOOP;

CLOSE curseur;

END;

/

Annexe 13 : Formats supportés par FME

Format FME (option Oracle) en production en haut / en beta en bas (27/08/01).

Annexe 14 : Matrices de références des différents opérateurs spatiaux.

La matrice de référence contient 6 valeurs différentes :

• p=T ⇒ dim(x) ∈ {0,1,2}, ie. x≠∅

• p=F ⇒ dim(x) = -1, ie. X=∅

• p=* ⇒ dim(x) ∈ {-1,0,1,2}

• p=0 ⇒ dim(x) = 0

• p=1 ⇒ dim(x) = 1

• p=2 ⇒ dim(x) = 2

Ainsi ont été définies 5 matrices de référence pour les principaux type de relation topologique (source : OGC Geometry Model) :

Disjoint (DISJOINT) :

a.Disjoint(b) ⇔ b ∩ a = ∅ ⇔ a.Relate(b,

 

*

*

* * * F F F F

)

Touche (TOUCHES) :

a.Touches(b) ⇔ (I(b) ∩ I(a) = ∅) ∧ (b ∩ a) ≠ ∅

⇔ a.Relate(b,

 

*

*

* * *

* T * F

ou

 

*

*

* * * * * T F

ou

 

*

*

* *

* * * F T

)

Croise (CROSSES) :

a.Crosses(b) ⇔ (dim(I(b) ∩ I(a)) ≠ ∅ < max (dim (I(b)), dim (I(a))) ∧ (b ∩ a ≠ a) ∧ (b ∩ a ≠ b) Cas où a∈P26, b∈L27 ou a∈P, b∈A28 ou a∈L, b∈A : a.Relate(b,

 

*

*

* * *

* * T T

) et cas où a∈L et b∈L :

a.Relate(b,

 

*

*

* * *

* * * 0

)

A l’intérieur (WITHIN) :

a.Within(b) ⇔ (I(b) ∩ I(a) ≠ ∅) ∧ (b ∩ a = a) ⇔ a.Relate(b,

 

*

*

* *

* * F F T

)

Chevauchant (OVERLAP) :

a.Contains(b) ⇔ (dim (I(a)) = dim (I(b)) = (dim (I(b) ∩ I(a))) ∧ (b ∩ a ≠ a) ∧ (b ∩ a ≠ b) Cas où a∈P, b∈P ou a∈A, b∈A : a.Relate(b,

 

*

* *

*

* * T

T T

) et cas où a∈L et b∈L :

26 P représente une géométrie de dimension 0 (points ou multi-points)

27 L représente une géométrie de dimension 1 (lignes ou multi-lignes)

28 A représente une géométrie de dimension 2 (polygones et multi-polygones)

a.Relate(b,

 

*

* *

*

* * 1 T

T

)

Annexe 15 : Opérateurs spatiaux

DECLARE

-- initialisation des variables poly1 MDSYS.SDO_GEOMETRY := NULL;

poly2 MDSYS.SDO_GEOMETRY := NULL;

union_poly MDSYS.SDO_GEOMETRY := NULL;

diminf MDSYS.SDO_GEOMETRY := NULL;

BEGIN

-- récupération des deux géométries à nir

SELECT C.SHAPE INTO poly1 FROM COUNTRIES C WHERE C.NAME = 'FRANCE';

SELECT C.SHAPE INTO poly2 FROM COUNTRIES C WHERE C.NAME = 'ESPANA';

-- Réalisation de l’union

SELECT SDO_GEOM.SDO_UNION (poly1, m.diminfo, poly2, m.diminfo) INTO union_poly

FROM COUNTRIES C_A, COUNTRIES C_B, USER_SDO_GEOM_METADATA M WHERE M.TABLE_NAME = 'COUNTRIES' AND M.COLUMN_NAME = 'SHAPE' AND C_A.NAME = 'FRANCE' AND C_B.NAME = 'ESPANA';

-- Insertion dans une table

INSERT INTO UNI VALUES ('union', union_poly);

COMMIT;

END;

Figure 72: Script PL/SQL d’union de deux polygones

DECLARE

-- initialisation des variables

union_poly MDSYS.SDO_GEOMETRY := NULL;

BEGIN

-- Réalisation de l’intersection

SELECT SDO_GEOM.SDO_INTERSECTION (C.SHAPE, MDSYS.SDO_GEOMETRY(2003,

NULL, NULL,

MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3), MDSYS.SDO_ORDINATE_ARRAY(-5,44,2,51)), 0.00005)

INTO union_poly FROM COUNTRIES C

WHERE C.NAME = 'FRANCE';

-- Insertion dans une table

INSERT INTO UNI VALUES ('intersect', union_poly);

END;

Figure 73: Script PL/SQL d’intersection entre deux polygones

DECLARE

-- initialisation des variables

union_poly MDSYS.SDO_GEOMETRY := NULL;

BEGIN

-- Réalisation de XOR

SELECT SDO_GEOM.SDO_XOR (C.SHAPE, MDSYS.SDO_GEOMETRY(2003, NULL,

NULL,

MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3), MDSYS.SDO_ORDINATE_ARRAY(-5,44,2,51)), 0.00005)

INTO union_poly FROM COUNTRIES C

WHERE C.NAME = 'FRANCE';

-- Insertion dans une table

INSERT INTO UNI VALUES ('xor', union_poly);

END;

Figure 74: Script PL/SQL XOR (Ou exclusif) entre deux polygones

DECLARE

-- initialisation des variables

union_poly MDSYS.SDO_GEOMETRY := NULL;

BEGIN

-- Réalisation de la différence

SELECT SDO_GEOM.SDO_difference (CH.SHAPE, m.diminfo, C.SHAPE, mh.diminfo) INTO union_poly

FROM COUNTRIES C, COUNTRIES_HULL CH, USER_SDO_GEOM_METADATA m, USER_SDO_GEOM_METADATA mh

WHERE m.TABLE_NAME = 'COUNTRIES' AND m.COLUMN_NAME = 'SHAPE' AND mh.TABLE_NAME = 'COUNTRIES_HULL' AND mh.COLUMN_NAME = 'SHAPE' AND C.NAME = 'FRANCE' AND CH.NAME = 'FRANCE';

-- Insertion dans une table

INSERT INTO UNI VALUES ('intersection', union_poly);

END;

Figure 75: Script PL/SQL de différence entre deux polygones

SELECT SDO_GEOM.SDO_CONVEXHULL (c.SHAPE, m.SDO_DIMINFO)

INTO convex_hull_obj

FROM COUNTRIES c, MDSYS.SDO_GEOM_METADATA_TABLE m WHERE m.SDO_TABLE_NAME = 'COUNTRIES'

AND m.SDO_COLUMN_NAME = 'SHAPE' AND c.NAME = name

AND c.EURNUTS0_I = compteur;

Figure 76: Syntaxe pour la création des polygones convexes de Hull (plus petit polygone convexe englobant la géométrie)

Annexe 16 : Diagramme UML pour un catalogue de métadonnées

(Source : OGC service architecture)

Documents relatifs