cours oracle spatial - upvm | accueil · neuchâtel, novembre 2004 5 introduction concepts de...
TRANSCRIPT
Neuchâtel, novembre 2004 1
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Oracle SpatialDaniel Gnerre, Système d’Information du Territoire Neuchâtelois (SITN)Novembre 2004
Neuchâtel, novembre 2004 2
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Plan du cours
• Introduction• Concepts de base d’Oracle Spatial• Création de données spatiales• Systèmes de coordonnées• Chargement des données spatiales• Indexation des données spatiales• Requêtes spatiales• Analyse spatiale
Neuchâtel, novembre 2004 3
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Introduction
IntroductionIntroduction
Neuchâtel, novembre 2004 4
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Introduction - Objectifs
Après ce cours, vous serez capables de :• Comprendre les concepts propres aux données
spatiales dans Oracle– Comprendre le type de données SDO_GEOMETRY– Comprendre les éléments géométriques supportés
• Utilsier le modèle relationnel-objet pour– Créer des tables spatiales– Charger et indexer des données spatiales– Interroger et analyser des données spatiales
Neuchâtel, novembre 2004 5
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Introduction – autres DB spatiales
• PostGIS (extension de PostgreSQL) : http://www.postgresql.com/• MySQL spatial extensions : http://www.mysql.com/• Etc.
SIG professionnel
SIG de bureau
SIG intranet/internet
Dataserver extension
OracleSpatial
Autodesk GIS Design Server
C-Plan Topobase
Cadcorp SIS
Bentley Microstation
iSpatial
Autodesk Mapguide
Autodesk Mapguide LiteView
Autocad Map
Caris GIS
BeritLids IT
ESRIArcSDE
ESRIArcEditor
SafeFME
IntergraphGeomedia Pro
Ionic Web Feature Server
Ionic Web Mapping Server
MapInfo Professional
MapInfo MapXtreme
PCI Geomatica
SmallWorld
SmallWorld Web
Geoconcept Entreprise
LaserscanLamps
ApicApic-Space
MapInfo GIS extension
IntergraphGeomedia Web Map Enterprise
ESRIArcView
ESRIArcIMS
IntergraphGeomedia
Mapserver Manifold Entreprise
MapInfo SpatialWare
TB Generic Web
Neuchâtel, novembre 2004 6
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Introduction – Historique
Oracle 7 Oracle 8 Oracle 8i, 9i, 10g
Multidimension (MD)
Option Spatiale (SDO)
Cartouchespatiale
Oracle Spatial
Locator
Oracle databaseServer
Modèle relationnel
Modèle relationnel-objet
Neuchâtel, novembre 2004 7
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Introduction – Locator vs Spatial
– Gestion de toutes les géométries– Indexation– Requêtes géométriques– Recherches de proximité– Calculs de distances– Gestion de multiples projections
– Transformations géométriques– Agrégations spatiales– Segmentation dynamique – Conversions de projections– Définition de projections spécifiques– Modélisation de réseaux (dès version 10g)– Gestion de la topologie (dès version 10g)– Gestion de rasters (dès version 10g)– Géocodeur (dès version 10g)
LOCATOR
SPATIAL
Neuchâtel, novembre 2004 8
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Introduction – Le modèle relationnel
• Technologie obsolète– Difficile à utiliser (requêtes SQL complexes)– Ne supporte pas tous les types d’objets– Moins performante– En train d’être abandonnée
• Exemple du principe de stockage d’un polygone double
ID_PT X Y1 553729 224322234
553819 224512553922 224412553821 224117
PointsNO_LI ID_PT
1 1111
234
Lignes
5 554421 2239176 554521 2235507 554621 223550
2 52 62 7
NO_PO NO_LI1 1
Polygone
1 2
Neuchâtel, novembre 2004 9
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Concepts
Les concepts d’Oracle SpatialLes concepts d’Oracle Spatial
Neuchâtel, novembre 2004 10
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Concepts – Primitives géométriques
Géométries supportées par Oracle Spatial
Neuchâtel, novembre 2004 11
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Concepts – Primitives géométriques
• Points (X1,Y1)– Un point peut être 2D, 3D ou 4D– Exemple : clients, adresses, forages, mesures
ponctuelles quelconques, etc.
• Lignes (X1,Y1,Xn,Yn)– Les « auto-intersections » sont supportées– Les lignes fermées n’ont pas de surface– Les limites d’une lignes sont les points de début
et de fin– Une ligne peut être composée de lignes et arcs– Exemples : cours d’eau, axes de routes,
collecteurs, drains, lignes électriques, etc.
Neuchâtel, novembre 2004 12
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Concepts – Primitives géométriques
• Polygones (X1,Y1,Xn,Yn)– Un polygone est toujours fermé, cela implique
une notion de surface– Une surface peut être soustraite à l’intérieur
d’un polygone (« donut »)– Les « auto-intersections » ne sont pas supportées– Un polygone peut-être composé de lignes et arcs
(ex : zone tampon d’un élément linéaire)– L’anneau extérieur d’un polygone est formé dans
le sens anti-horaire– L’anneau intérieur d’un polygone (« donut ») est
formé dans le sens horaire– Exemple : parcelle, bâtiment, commune, etc.
Neuchâtel, novembre 2004 13
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Concepts – Modèle de données spatiales
Point Ligne Polygone Polygonecomposé
Lignecomposée
Modèle hiérarchique
Elément
Géométrie
ElémentElément … …
Couche spatiale
GéométrieGéométrie … …
Neuchâtel, novembre 2004 14
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Concepts – Les éléments
• Les éléments constituent une géométrie• Un élément peut être de type
– Point– Ligne– Polygone– Ligne composée– Polygone composé
• Un élément est construit sur la base de coordonnées
Neuchâtel, novembre 2004 15
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Concepts – La géométrie
• Une géométrie modélise un objet spatial• Une géométrie est constituée d’un set ordonné
d’éléments
Exemple :Commune de Fontaines (NE)2 éléments
Neuchâtel, novembre 2004 16
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Concepts – La couche
• Une couche est constituée de géométries qui ont des attributs en commun
• Une couche est une colonne géométrique dans une table
Exemple :Communes de Neuchâtel
Neuchâtel, novembre 2004 17
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Concepts – L’indexation spatiale
• L’indexation « R-tree »– Basée sur le rectangle englobant des géométries– Peut indexer 2, 3 ou 4 dimensions
• L’indexation « Quad-tree »– Recouvre la zone avec un maillage régulier
• Permet un recouvrement exclusif et exhaustif des objets spatiaux
• Indexe tous les éléments qui composent une géométrie (points, lignes, polygones)
But : optimiser les performances des requêtes spatiales
Neuchâtel, novembre 2004 18
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Concepts – Requêtes
Modèle optimisé de requêtes utilisé par Oracle Spatial
Couche de données spatiales
Colonne contenant la géométrie des objets
Filtre primaire
Index spatial
Sélection réduite
de données
L’index permet de sélectionner une fenêtre d’intérêt
Filtre secondaire
Fonctions spatiales
Sélection exacte
Sélection exacte
Procédure permettant de déterminer les relations spatiales exactes
• Toutes les requêtes ne nécessitent pas forcément l’utilisation du filtre secondaire (ex : zoom in/out)
• Les requêtes spatiales sont effectuées à l’aide du language SQL
Neuchâtel, novembre 2004 19
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Concepts – Segmentation dynamique
• On associe une mesure à chaque point d’un objet linéaire– Routes, conduites, lignes électriques, …
• Les mesures sont proportionnelles à la distance depuis le début de l’objet linéaire.
(5,10,0) (30,10,27)
(15,5,11.2) (40,5,38)
(50,15,53.8)
(55,20,60)(45,10,44)
But : gérer et analyser les données relatives à un réseau linéaire (ex : routes, cours d’eau, etc.)
La segmentation dynamique (Système de référence linéaire LRS)
Neuchâtel, novembre 2004 20
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Concepts – Segmentation dynamique
Association d’événements
• Ponctuels: Accidents, feux, équipements, …• Lineaires: Conditions de trafic, chantiers, …
Mesure
= Etat de la route
0 40 130 190
mauvais moyenbon
= accident
= stop
Neuchâtel, novembre 2004 21
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Concepts – Segmentation dynamique
Structuration des données sur un exemple
SID LRS Geometry
Table des accidents Table de l’état de la route
Table géographique des axes de routes
SIDEtat Start M End MSIDN°acc M
Neuchâtel, novembre 2004 22
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales
Création de données spatialesCréation de données spatiales
Neuchâtel, novembre 2004 23
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Rappel
Rappel des notions d’utilisateur et de schéma dans Oracle• Les données (tables) d’une base Oracle sont stockées
dans différents schémas. • A chaque schéma correspond un utilisateur propriétaire
du schéma. • Un utilisateur est défini par un nom d’utilisateur, un mot
de passe et des droits particuliers.• Un utilisateur n’est pas obligatoirement propriétaire de
données.
Utilisateurs- system- sys- mdsys- scott- john- etc.
Base XY
system sys mdsys scott
Oracle Spatial
Neuchâtel, novembre 2004 24
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Objets
Objet SDO_GEOMETRY
• Composition de l’objet SDO_GEOMETRY
• Exemple SQL
SDO_GTYPE NUMBERSDO_SRID NUMBERSDO_POINT SDO_POINT_TYPESDO_ELEM_INFO SDO_ELEM_INFO_ARRAYSDO_ORDINATES SDO_ORDINATE_ARRAY
CREATE TABLE communes (nom_commune VARCHAR2(30),population_total NUMBER(9),geom MDSYS.SDO_GEOMETRY);
Neuchâtel, novembre 2004 25
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Objets
Objet SDO_GTYPE
Définit le type de géométrie stockée dans l’objet
2D 3D 4D
O UNKNOWK_GEOMETRY 2000 3000 40001 POINT 2001 3001 40012 LINESTRING 2002 3002 40023 POLYGON 2003 3003 40034 COLLECTION 2004 3004 40045 MULTIPOINT 2005 3005 40056 MULTILINESTRING 2006 3006 40067 MULTIPOLYGON 2007 3007 4007
Dimension Type de géométrie! NON OGC !
Objet SDO_SRIDNombre entier identifiant le système de coordonnées utilisé→ La table MDSYS.CS_SRS défini les systèmes utilisés
Neuchâtel, novembre 2004 26
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Objets
Objet SDO_GEOMETRY
• SDO_POINT_TYPE
• SDO_ELEM_INFO_ARRAY
• SDO_ORDINATE_ARRAY
x NUMBERy NUMBERz NUMBER
VARRAY (1048576) OF NUMBER
VARRAY (1048576) OF NUMBER
Décrit les éléments stockés dans la géométrie
Contient les coordonnées des éléments constitutifs de la géométrie
Neuchâtel, novembre 2004 27
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Objets
Méthodes définies sur SDO_GEOMETRY
GET_DIMS() renvoie la dimension de l’objet
select c.geom.get_dims() commune_dimfrom communes cwhere c.nom_commune = ‘Fontaines’;Résultat : 2
GET_GTYPE() renvoie le type de géométrie
select c.geom.get_gtype() commune_gtypefrom communes cwhere c.nom_commune = ‘Fontaines’;Résultat : 3
Neuchâtel, novembre 2004 28
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Objets
Objet SDO_GEOMETRY
SDO_POINT
• Utilisé pour stocker les objets de type point• Ignoré si SDO_ELEM_INFO et SDO_ORDINATES <> NULL
SDO_ELEM_INFO
• Les entrées dans le tableau sont considérées par groupe de 3– Position de départ de la paire de coordonnées (début = 1)– Type d’élément (point, ligne, polygone, etc.)– Interprétation (connexion entre éléments)
SDO_ORDINATES
• Simple VARRAY contenant la liste des coordonnées de l’objet
Neuchâtel, novembre 2004 29
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Objets
Type d’élément et interprétation dans SDO_ELEM_INFO
Numéro Type d’élément Interprétation
O UNKNOWK_ELEMENT1 POINT nbre de points de la collection2 LINESTRING 1 – Lignes droites
2 – Arcs de cercle3 POLYGON 1 – Lignes droites1003 (extérieur) 2 – Arcs de cercle2003 (intérieur) 3 – Rectangle optimisé
4 - Cercle4 COMPOUND LINESTRING nbre d’éléments5 COMPOUND POLYGON nbre d’éléments1005 (extérieur)2005 (intérieur)
Neuchâtel, novembre 2004 30
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Exemples
Insertion d’un objet point
• Utilisation de l’objet SDO_POINT pour charger la donnée• SDO_ELEM_INFO et SDO_ORDINATES doivent être NULL pour
les objets de type point• Exemple : insertion d’une mesure dans une table de points
Insert into mesures_pollution_airvalues (34.6,57.4,etc…,
mdsys.sdo_geometry(3001, 352257,mdsys.sdo_point_type(521030,240120,550),null,null)
);
SDO_SRID
SDO_ELEM_INFO SDO_ORDINATES
SDO_GTYPE
SDO_POINT
Neuchâtel, novembre 2004 31
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Exemples
Exemples de SDO_ELEM_INFO et SDO_ORDINATES
Position
1
Type
2
Interpr.
1
SDO_ELEM_INFO SDO_ORDINATES
x1x2x3x4
y1y2y3y4
(x1,y1)
(x2,y2)
(x3,y3) (x4,y4)
Position
1
Type
2
Interpr.
2
SDO_ELEM_INFO SDO_ORDINATES
x1x2x3x4x5x6x7
y1y2y3y4y5y6y7
(x5,y5)
(x1,y1)
(x3,y3)
(x4,y4)
(x2,y2)(x6,y6)
(x7,y7)
SDO_GTYPE =
2002
SDO_GTYPE =
2002
Neuchâtel, novembre 2004 32
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Exemples
Position
1
Type
1003
Interpr.
1
SDO_ELEM_INFO(x1,y1)
(x2,y2)
(x3,y3)
(x4,y4)
(x5,y5)(x6,y6)
Position
1
Type
1003
Interpr.
3
SDO_ELEM_INFO
(x1,y1)
(x2,y2)
Position
1
Type
1003
Interpr.
4
SDO_ELEM_INFO(x1,y1)
(x2,y2)(x3,y3)
SDO_GTYPE =
2003
SDO_GTYPE =
2003
SDO_GTYPE =
2003
Neuchâtel, novembre 2004 33
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Exemples
Position
115
Type
100522
Interpr.
212
SDO_ELEM_INFO
(x1,y1)
(x2,y2)
(x3,y3)
(x4,y4)
(x5,y5)
(x6,y6)
(x7,y7)
SDO_GTYPE =
2003
SDO_GTYPE =
2003
Position
113
Type
10032003
Interpr.
13
SDO_ELEM_INFO
(x1,y1)
(x2,y2) (x3,y3)
(x4,y4)
(x5,y5)
(x6,y6)
(x7,y7)
(x8,y8)
(x3,y3)
(x1,y1)
(x2,y2)
(x4,y4)
(x5,y5)
(x6,y6)(x8,y8)
(x7,y7)
(x9,y9)
(x10,y10)(x11,y11)(x1,y1)
(x2,y2)
(x3,y3)
(x4,y4)
(x5,y5) (x6,y6)
...?
Neuchâtel, novembre 2004 34
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Exemples
Position
11717
Type
100522
1003
Interpr.
2121
SDO_ELEM_INFO
(x3,y3)
(x1,y1)
(x2,y2)
(x4,y4)
(x5,y5)
(x6,y6)(x8,y8)
(x7,y7)
(x9,y9)
(x10,y10)(x11,y11)
(x1,y1)
(x2,y2)
(x3,y3)
(x4,y4)
(x5,y5) (x6,y6)
Solutions
Position
17
Type
22
Interpr.
11
SDO_ELEM_INFO
Neuchâtel, novembre 2004 35
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Sql
Insertion d’une ligne
Insert into axe_routevalues (‘autoroute’,’canton’,etc…,
mdsys.sdo_geometry(2002,352257,null,mdsys.sdo_elem_info_array(1,2,1),mdsys.sdo_ordinate_array(10,10, 20,25, 30,10, 40,10))
);
SDO_SRIDSDO_GTYPE
SDO_POINT
(10,10)
(20,25)
(30,10) (40,10)
Neuchâtel, novembre 2004 36
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Sql
Insertion d’un polygone
Insert into axe_routevalues (‘autoroute’,’canton’,etc…,
mdsys.sdo_geometry(2003,352257,null,mdsys.sdo_elem_info_array(1,1003,1, 13,2003,3),mdsys.sdo_ordinate_array(2,10, 3,0, 10,0, 12,10,
5,12, 2,10, 4,3, 6,9)));
SDO_SRIDSDO_GTYPE
SDO_POINT
(2,10)
(3,0) (10,0)
(12,10)
(5,12)
(2,10)
(4,3)
(6,9)
Neuchâtel, novembre 2004 37
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Métadonnées
Métadonnées spatiales dans Oracle - Définition• Pour chaque colonne géométrique (type SDO_GEOMETRY)
créée dans la base, il est nécessaire d’ajouter une ligne à la vue de métadonnées nommée USER_SDO_GEOM_METADATA
Structure de la vue USER_SDO_GEOM_METADATA
Attributs
TABLE_NAMECOLUMN_NAMEDIMINFOSRID
Null?
NOT NULLNOT NULL
Type
VARCHAR2(32)VARCHAR2(32)MDSYS.SDO_DIM_ARRAYNUMBER
Type MDSYS.SDO_DIM_ARRAY
VARRAY(4) OF SDO_DIM_ELEMENT → axes du système
Objet MDSYS.SDO_DIM_ELEMENT
SDO_DIM_NAME VARCHAR2(64) → nom de la dimensionSDO_LB NUMBER → valeur minimale de la dimensionSDO_UB NUMBER → valeur maximale de la dimensionSDO_TOLERANCE NUMBER → tolérance de la dimension
Neuchâtel, novembre 2004 38
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Création de données spatiales - Métadonnées
Création de la métadonnée - Exemples
delete from user_sdo_geom_metadata where table_name = ‘mesures_pollution_air’ and
column_name = ‘geom’;
insert into user_sdo_geom_metadatavalues (‘mesures_pollution_air’,’geom’,
mdsys.sdo_dim_array(mdsys.sdo_dim_element(‘x’,400000,600000,0.005),mdsys.sdo_dim_element(‘y’,100000,300000,0.005)),
352257);
• Jusqu’à 4 dimensions peuvent être créées (2 sont définies dans l’exemple ci-dessous)
• Les index peuvent supporter les 4 dimensions• Les filtres secondaires sont uniquement bidimensionnels.
Neuchâtel, novembre 2004 39
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Systèmes de coordonnées
Systèmes de coordonnéesSystèmes de coordonnées
Neuchâtel, novembre 2004 40
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Systèmes de coordonnées - Types
Géoréférencé projeté• Projection de la sphère
terrestre sur un plan 2D• Coordonnées cartésiennes• Ex : projection Suisse
Non géoréférencé• Système local, pas lié à une
représentation de la terre• Coordonnées cartésiennes• Ex : « non-earth » de MapInfo
Géoréférencé non projeté• Pas de projection sur un plan• Positionnement par longitude et
latitude (angles)• Dans Oracle, degré décimaux de
–180 à 180 et –90 à 90• Ex : WGS84
Longitude
Latitude
Neuchâtel, novembre 2004 41
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Description
Nom court ID du système de référenceContient ‘Oracle’Contient le SRIDNom complet selon OGCNull (pas utilisé pour l’instant)
Systèmes de coordonnées – MDSYS.CS_SRS
Table MDSYS.CS_SRS
Attributs
CS_NAMESRIDAUTH_SRIDAUTH_NAMEWKTEXTCS_BOUNDS
Type
VARCHAR2(68)NUMBER(38)NUMBER(38)VARCHAR2(256)VARCHAR2(2046)MDSYS.SDO_GEOMETRY
Associer un système de coordonnées aux objets• Défini une fois dans la métadonnée de la couche
– Attribut SRID de la table USER_SDO_GEO_METADATA• Défini pour chaque objet
– Dans le SDO_SRID de l’objet SDO_GEOMETRY– Tous les objets d’une même couche devrait avoir le même
SRID. – Devrait être le même que celui défini dans la métadonnée
Neuchâtel, novembre 2004 42
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Systèmes de coordonnées – Exemple SQL
Procédure pour ajouter un système de coordonnées
drop index communes_sidx;
update user_sdo_geom_metadata set srid = 352257 where table_name = ‘communes’ and column_name = ‘geom’;
update communes cset c.geom.sdo_srid = 352257;
update user_sdo_geom_metadata u set u.diminfo =mdsys.sdo_dim_array(
mdsys.sdo_dim_element(‘x’,400000,600000,0.005),mdsys.sdo_dim_element(‘y’,100000,300000,0.005)),
where table_name = ‘communes’ and column_name = ‘geom’
1. Supprimer l’index spatial s’il existe
2. Mettre à jour la table des métadonnées
3. Mettre à jour le SDO_SRID de chaque objet
4. Ajuster la tolérance si nécessaire
5. Reconstruire l’index spatialcreate index communes_sidx on communes(geom)
indextype is mdsys.spatial_index;
Neuchâtel, novembre 2004 43
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Chargement de données
Chargement de donnéesChargement de données
« bulk loading » (SQL*Loader ou Import)
transactionnel (requêtes insert)
Neuchâtel, novembre 2004 44
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Chargement de données – SQL*Loader
Fonctionnement de SQL*Loader
Fichier de contrôleFichier de Paramètres(optionnel)
Scannage
Données incorrectes
Sélection
Oracle Server
Données Oracle Spatial
Données
Fichier log
Fichier donnéesIgnorées
(optionnel)
SQL*Loader
Rejetés
Acceptés
Rejetés
Ingnorés
Sélectionnés
Neuchâtel, novembre 2004 45
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Chargement de données - SQL*Loader
Exemple SQL*Loader avec données pointsLOAD DATA
INFILE *INTO TABLE villesFIELDS TERMINATED BY ‘¦’TRAILING NULLCOLS (
VILLE NULLIF VILLE = BLANKS,DISTRICT NULLIF DISTRICT = BLANKS,POPULATION90,LOCATION COLUMN OBJECT(
SDO_GTYPE INTEGER EXTERNAL,SDO_POINT COLUMN_OBJECT
(X FLOAT EXTERNAL,Y FLOAT EXTERNAL)
))
BEGINDATANeuchâtel¦Neuchâtel¦33000¦2001¦561000¦205000¦Cortaillod¦Boudry¦2800¦2001¦555000¦199500¦
Neuchâtel, novembre 2004 46
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Chargement de données - SQL*Loader
Exemple SQL*Loader avec données lignes et polygonesLOAD DATA
INFILE *CONTINUEIF NEXT(1:1) = ‘#’INTO TABLE contesFIELDS TERMINATED BY ‘¦’TRAILING NULLCOLS (
CONTE NULLIF CONTE = BLANKS,ETAT NULLIF ETAT = BLANKS,SURFACE,GEOM COLUMN OBJECT
(SDO_GTYPE INTEGER EXTERNAL,SDO_ELEM_INFO VARRAY TERMINATED BY ‘¦/’ (X FLOAT EXTERNAL),SDO_ORDINATES VARRAY TERMINATED BY ‘¦/’ (X FLOAT EXTERNAL))
)BEGINDATAAutauga¦Alabama¦57.428300000¦#2003¦1¦1003¦1¦/#-86.916969000¦32.664028000¦-86.816589000¦32.659988000¦…¦#-87.765160000¦31.297176000¦-86.916969000¦32.664028000¦/Baldwin¦Alabama¦61.569000000¦
Neuchâtel, novembre 2004 47
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Chargement de données - Import/Export
• Export – Utilisé pour l’exportation de tables Oracle
(géographiques ou non)– Pas de syntaxe spéciale pour les données spatiales– Les index et les métadonnées sont exportés– Crèe un fichier *.dmp
• Import– Utilisé pour importer des tables issues de la fonction
d’exportation– Pas de syntaxe spéciale pour les données spatiales– Pour les données spatiales indexées:
– Ajoute une entrée dans USER_SDO_GEOM_METADATA– Reconstruit l’index spatial en utilisant la commande
originale
Fonctions Import/Export d’Oracle
Neuchâtel, novembre 2004 48
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Chargement de données - Transactionnel
• Insertion d’un objet géographique à l’aide de SQL• Utilisé pour ajouter un objet à une table existante• L’index spatial est mis à jour automatiquement
Insertions transactionnelles
INSERT INTO LIGNES VALUES (attribut_1,…,attribut_n,MDSYS.SDO_GEOMETRY (
2002,null,null,MDSYS.SDO_ELEM_INFO_ARRAY (1,2,1),MDSYS.SDO_ORDINATES (10,10, 20,25, 30,10, 40,10) ) );
Exemple SQL
CREATE OR REPLACE PROCEDUREINSERTION_GEOMETRIE(GEOM MDSYS.SDO_GEOMETRY) IS
BEGININSERT INTO TEST_1 VALUES (GEOM);COMMIT;
END
Exemple PL/SQL
Utilisé pour contourner la limite de 999 valeurs dans le SDO_ORDINATES
Neuchâtel, novembre 2004 49
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Chargement de données - Shapefile convert
• Outil pas supporté par Oracle• Tient compte de la géométrie et les attributs stockés dans le
shapefile• Génère un script SQL pour la création des métadonnées• Génère un fichier de contrôle SQL*Loader
Shapefile converter (fichiers *.shp d’ArcView)
Shptosdo <shapefile> <table-name> -g <geometry-col> -i <id-col> -n –d –x (<Xmin>,<Xmax>) –y (<Ymin>,<Ymax>) –s <srid> -t <tolerance>
<shapefile> = nom du fichier à importer (sans suffixe)<table-name> = nom de la table à créer (optionnel)- g <geometry-col> = nom de la colonne géométrique dans la table-i <id-col> = nom de la colonne clé (optionnel)-n [<start_id>] = premier nombre de la colonne id-col-d = insère les données dans le fichier de contrôle-x = limites pour la première dimension (optionnel)-y = limites pour la deuxième dimension (optionnel)-s = srid à définir pour chaque objet (optionnel)-t = tolérance à définir pour la couche (optionnel)
Neuchâtel, novembre 2004 50
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Chargement de données – Autres…
Il est possible de charges des données spatiales dans Oracle directement depuis des produits SIG commerciaux :
- MapInfo avec l’outil EasyLoader- FME avec la version Oracle- ArcGis avec ArcSDE- Etc.
Chargement à l’aide d’outils SIG
Neuchâtel, novembre 2004 51
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Indexation
Indexation des donnéesIndexation des données
• Utilisé pour optimiser les performances des requêtes spatiales• Deux types d’indexation spatiale :
R-treeQuad-tree
Neuchâtel, novembre 2004 52
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Indexation – R-Tree
• Le filtre primaire peut indexer jusqu’à 4 dimensions• Les filtres secondaires sont toujours 2D• Chaque entrée dans l’index approxime la géométrie de l’objet
en utilisant le rectangle englobant (MBR) pour la 2D et le volume englobant (MBV) pour la 3D
Concept de l’indexation des données selon R-tree
Neuchâtel, novembre 2004 53
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Indexation – R-Tree
Concept de l’indexation des données selon R-tree
Racine
Racine
R SR
S
a
b
d
c
a b c d
MBRs, pointeurs sur géomérties
• Fanout (nb de branches par nœud) identique pour toute l’arborescence
• Regroupement par proximité
Neuchâtel, novembre 2004 54
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Indexation – R-Tree
Syntaxes SQLConstruction de l’index
CREATE INDEX <index-name>ON <table-name> (<column-name>)INDEXTYPE IS MDSYS.SPATIAL_INDEX[PARAMETERS (‘SDO_RTR_PCTFREE = <param_value><storage_parameters> = <param_value> … ‘)][PARALLEL [<parallel_degree>] ];
– SDO_INDX_DIMS = nombre de dimensions à indexer– SDO_RTR_PCTFREE = pourcentage de branches r-tree réservées (updates)– LAYER_GTYPE = si spécifié accepte seulement un type de géométries
(POINT,LINE,POLYGON,MULTIPOINT,MULTILINE,MULTIPOLIGON,COLLECTION)– PARALLEL = si nombre entier n spécifié, décompose la création de l’index en
n petits processus menés en parallèle, pour des questions de performances– Etc.
DROP INDEX <index-name> FORCE;
Suppression de l’index
– FORCE = force la suppression de l’index
Neuchâtel, novembre 2004 55
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Indexation – R-Tree
Syntaxes SQLReconstruction de l’index
ALTER INDEX <index_name>REBUILDPARAMETERS (<parameter string>);
Reconstruction complète de l’index, avec une redéfinition possible de tous les paramètres
Renommage de l’index
ALTER INDEX <index_name>RENAME TO<new_index_name>);
Métadonnées des index spatiaux• Vue USER_SDO_INDEX_METADATA : contient le détail de toutes les
caractéristiques de l’index• Vue USER_SDO_INDEX_INFO : contient des infos générales reprises de
plusieurs tables (nom de la table indexée, nom de la colonne, etc.)
Neuchâtel, novembre 2004 56
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Indexation – Quad -Tree
Concept de l’indexation des données selon Quad-tree
• Décomposition de l’espace en tuiles régulières• Oracle déconseille l’utilisation d’index Quadtree, et recommande
de ne travailler qu’avec les R-tree.
Neuchâtel, novembre 2004 57
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales
Requêtes spatialesRequêtes spatiales
Dans ce chapitre et dans les exercices, nous ne travaillerons qu’avec des données projetées. Nous ne verrons pas les spécificités des données non projetées (lon/lat)
Neuchâtel, novembre 2004 58
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales - Modèle
Rappel du modèle optimisé de requêtes
Couche de données spatiales
Colonne contenant la géométrie des objets
Filtre primaire
Index spatial
Sélection réduite
de données
L’index permet de sélectionner une fenêtre d’intérêt
Filtre secondaire
Fonctions spatiales
Sélection exacte
Sélection exacte
Procédure permettant de déterminer les relations spatiales exactes
Neuchâtel, novembre 2004 59
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – Opérateurs/Fonctions
Opérateurs spatiaux vs Fonction spatiales
• Opérateurs spatiaux – Exploitent les index spatiaux– Nécessitent qu’un index soit défini sur la première des
géométries utilisées par l’opérateur– Utilisés seulement dans la clause « where »– Effectuent implicitement une transformation du système
de coordonnées de la fenêtre si nécessaire
• Fonctions spatiales– N’utilisent pas les index spatiaux– Peuvent être utilisés sur de petites tables sans index– Peuvent être utilisés dans la clause « select » ou dans la
clause « where »– Les géométries en input doivent être dans le même
système de coordonnées
Neuchâtel, novembre 2004 60
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – Opérateurs/Fonctions
Opérateurs spatiaux vs Fonction spatiales
Opérateurs
– SDO_FILTER– Effectue un filtre
primaire uniquement– SDO_RELATE
– Effectue un filtre primaire et secondaire
– SDO_WITHIN_DISTANCE– Crée une zone tampon
et effectue un filtre primaire et secondaire (optionnel)
– SDO_NN– Renvoie les voisins les
plus proches
Fonctions
– SDO_GEOM.RELATE– Pour déterminer la relation
entre deux géométries– Pour effectuer une requête
spatiale sans utiliser d’index (p.e. sur une petite table)
– SDO_GEOM.WITHIN_DISTANCE– Crée une zone tampon et
effectue un filtre secondaire (utiliser SDO_WITHIN_DISTANCE à la place…)
– Beaucoup d’autres fonctions…
Neuchâtel, novembre 2004 61
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – SDO_FILTER
Opérateur SDO_FILTER
SDO_FILTER(<geometry-1>,<geometry-2>,‘QUERYTYPE=WINDOW’) = ‘TRUE’;
Effectue un filtre primaire uniquement et renvoie ‘FALSE’ ou ‘TRUE’
– geometry-1 (objets recherchés)– Doit être une colonne dans une table– Doit être de type SDO_GEOMETRY– Doit être indexée
– geometry-2– Doit être une variable ou une colonne dans une table– Doit être de type SDO_GEOMETRY
– ‘QUERYTYPE = WINDOW’– Doit être entre simples guillements– Paramètre nécessaire. Oracle conseille de n’utiliser que WINDOW
select s.nom, s.type from sondages sWhere sdo_filter ( s.geom,
mdsys.sdo_geometry (2003,352257,null,mdsys.sdo_elem_info_array(1,1003,3),mdsys.sdo_ordinate_array(540300,212500,541300,213500)),
‘querytype=WINDOW’) = ‘TRUE’;
Ne pas mettre <> ‘FALSE’ ou = ‘true’. Toujours = et en MAJUSCULES TRUE/FALSENeuchâtel, novembre 2004 62
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – Relations spatiales
Relations spatiales (topologiques)
A
B
Contains/Inside
A
B
Covers/Coveredby
A B
Touch
AB
OverlapBdyIntersect
A
B
OverlapBdyDisjoint
A B
Equal
A
B
Disjoint
ANYINTERACT = ‘TRUE’Si la relation n’est pas « Disjoint »Masque optimal
Neuchâtel, novembre 2004 63
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – Relations spatiales
Relations spatiales (topologiques)
A
B
Contains/Inside
B
A
Covers/Coveredby
A
B
Touch
A
OverlapBdyIntesect
B
A
OverlapBdyDisjoint
BB
A
Covers On
A
BDisjoint
ANYINTERACT = ‘TRUE’Si la relation n’est pas « Disjoint »Masque optimal
Neuchâtel, novembre 2004 64
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – SDO_RELATE
Opérateur SDO_RELATEEffectue un filtre primaire et seconcaire et renvoie ‘FALSE’ ou ‘TRUE’
– geometry-1 (objets recherchés)– Doit être une colonne dans une table– Doit être de type SDO_GEOMETRY– Doit être indexée
– geometry-2– Doit être une variable ou une colonne dans une table– Doit être de type SDO_GEOMETRY
– ‘QUERYTYPE = WINDOW’– Doit être entre simples guillements– Paramètre nécessaire. Oracle conseille de n’utiliser que WINDOW
– mask– Relation spatiale à tester (cf. slides précédents)– Utiliser « + » pour condition logique OR (INSIDE+COVEREDBY)
SDO_RELATE(<geometry-1>,<geometry-2>,‘MASK=<mask> QUERYTYPE=WINDOW’) = ‘TRUE’;
Neuchâtel, novembre 2004 65
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – SDO_RELATE
Opérateur SDO_RELATE - Exemples
select c.comnom, c.numcom from communes c, districts dwhere d.distnom = ‘Boudry’ and
sdo_relate ( c.geom,d.geom, ‘mask=INSIDE+COVEREDBY querytype=WINDOW’)=‘TRUE’;
Recherche toutes les communes dans le district de Boudry
select c1.comnom, c1.numcom from communes c1, communes c2where c2.comnom = ‘Fleurier’ and
sdo_relate ( c1.geom,c2.geom, ‘mask=TOUCH querytype=WINDOW’)=‘TRUE’;
Recherche toutes les communes limnitrophes de Fleurier
select s.nom, s.type from sondages s, communes cwhere c.comnom = ‘Cortaillod’ and
sdo_relate ( s.geom,c.geom, ‘mask=ANYINTERACT querytype=WINDOW’)=‘TRUE’;
Recherche tous les sondages dans la commune de Cortaillod
Neuchâtel, novembre 2004 66
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – Optimisation
Utilisation de /*+ ordered*/
Pour optimiser les performances, /*+ ordered*/ peut être utilisé. Cela permet à Oracle de lire les objets spatiaux dans l’ordre spécifié dans la clause « from » de la requête (d’abord la fenêtre de recherche, ensuite les objets recherchés). Exemple ci-dessous : sélection de tous les axes de route qui interagissent avec les communes du plus de 2000 habitants.
select /*+ ordered*/ a.nomfrom communes c, axes_routes awhere c.pop90 > 2000 and
sdo_relate ( a.geom,c.geom, ‘mask=ANYINTERACT querytype=WINDOW’)=‘TRUE’;
1°/ Oracle recherche d’abord les communes de plus de 2000 habitants2°/ Oracle recherche ensuite les axes interagissant avec ces communes. La
table des communes doit donc être spécifiée en premier dans la clause « from ».
Neuchâtel, novembre 2004 67
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – SDO_WITHIN_DISTANCE
Opérateur SDO_WITHIN_DISTANCEGénère un résultat exact ou approximatif. Renvoie ‘FALSE’ ou ‘TRUE’
– geometry-1 (objets recherchés)– Doit être une colonne dans une table– Doit être de type SDO_GEOMETRY– Doit être indexée
– geometry-2– Doit être une variable ou une colonne dans une table– Doit être de type SDO_GEOMETRY– Une zone tampon sera créée autour de ces objets
– DISTANCE– Distance en unités du système de projection de goemetry-2
– QUERYTYPE (optionnel)– Effectue par défaut un filtre primaire + secondaire– Si QUERYTYPE=FILTER, effectue seulement un filtre primaire
– UNIT (optionnel)– Peut définir une autre unité de mesures que dans le SRS
SDO_WITHIN_DISTANCE(<geometry-1>,<geometry-2>,‘DISTANCE=<n>,[paramètres optionnels]’) = ‘TRUE’;
Neuchâtel, novembre 2004 68
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – SDO_WITHIN_DISTANCE
Opérateur SDO_WITHIN_DISTANCE - Exemples
select /*+ ordered*/ b.idbatimentfrom axes_routes a, batiments bwhere a.no_axe = 1289 and
sdo_within_distance ( b.geom,a.geom,‘distance=100’)=‘TRUE’;
Recherche les bâtiments à moins de 100 mètres d’un axe de routes.
select /*+ ordered*/ a.no_axefrom batiments b, axes_routes awhere b.idbatiment = 2198376 and
sdo_within_distance ( a.geom,b.geom,‘distance=1 UNIT=kilometer’)=‘TRUE’;
Recherche les axes à moins de 1 kilomètre d’un bâtiment.
Neuchâtel, novembre 2004 69
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – SDO_NN
Opérateur SDO_NN (Nearest Neighbor)Renvoie le (ou les) voisin le plus proche d’une géométrie
– geometry-1 (objets voisins recherchés)– Doit être une colonne dans une table– Doit être de type SDO_GEOMETRY– Doit être indexée
– geometry-2 (objet de base)– Doit être une variable ou une colonne dans une table– Doit être de type SDO_GEOMETRY
– SDO_NUM_RES (optionnel)– Nombre de voisins à renvoyer (1 par défaut)
– SDO_BATCH_SIZE (optionnel)– Permet de renvoyer en continu les voisins les plus proches (spécifier
combien à la fois), dans l’ordre de distance, jusqu’à ce que tous les critères du « where » soient remplis. Ne pas utiliser en même temps que SDO_NUM_RES
– UNIT (optionnel avec l’utilisation de SDO_NN_DISTANCE)– Unité de mesure à associer avec la distance
– TAG (optionnel avec l’utilisation de SDO_NN_DISTANCE)– Correspond avec le tag spécifié dans SDO_NN_DISTANCE
SDO_NN(<geometry-1>,<geometry-2>,‘[paramètres optionnels]’) = ‘TRUE’;
Neuchâtel, novembre 2004 70
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – SDO_NN
Opérateur auxiliaire SDO_NN_DISTANCERenvoie la distance associée aux voisins les plus proches (SDO_NN)
– tag– Nombre faisant la relation entre l’opérateur auxiliaire
SDO_NN_DISTANCE et SDO_NN– L’unité de distance est celle défnie par UNIT dans SDO_NN. Par défaut
c’est la même unité que celle du système de projection
SDO_NN_DISTANCE (<tag>) returns NUMBER
SDO_NN_EXEMPLES
select /*+ ordered*/ s.nom, s.type, sdo_nn_distance (1) distance_en_metresfrom axes_routes a, sondages swhere a.no_axe = 1289 and
sdo_nn(s.geom,a.geom,’sdo_num_res=5 unit=meter’,1) = ‘TRUE’Order by distance_en_metres;
Renvoie les 5 sondages plus proches de l’axe de route 1289
Neuchâtel, novembre 2004 71
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – SDO_NN
SDO_NN_EXEMPLES
select /*+ ordered*/ s.nom, s.type, sdo_nn_distance (1) distance_en_metresfrom axes_routes a, sondages swhere a.no_axe = 1289 and
sdo_nn(s.geom,a.geom,’sdo_batch_size=10 unit=meter’,1) = ‘TRUE’and s.type = ‘A’and rownum < 6
Order by distance_en_metres;
Renvoie les 5 sondages plus proches de l’axe de route 1289, et qui sont d’un certain type.
Pour que la clause where renvoie en continu les sondages
Pour stopper la recherche lorque le résultat a atteint 5 lignes
• Comme il y a une condition supplémentaire sur les sondages (type), il ne suffit pas de renvoyer les 5 les plus proches, mais il faut les renvoyer en continu jusqu’à ce que les 5 sondage de type ‘A’ les plus proches soient trouvés.
• Désactiver les index non spatiaux sur les colonnes utilisées pour les conditions supplémentaires (ici type), pour s’assurer que sdo_batch_size fonctionne correctement (ajouter no_index(s type_idx) après ordered).
Neuchâtel, novembre 2004 72
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – SDO_GEOM.RELATE
Fonction SDO_GEOM.RELATEDétermine la relation spatiale entre deux géométries (filre secondaire).
– geometry-1 (objets recherchés)– Objet de type SDO_GEOMETRY
– geometry-2– Objet de type SDO_GEOMETRY
– mask– Liste des relations à tester
– tolerance– Tolérance
– relationship– Résultat de la fonction. En cas de succès, renvoie la relation entre les
deux géométries (renvoie TRUE si mask=ANYINTERACT). Renvoie FALSE si la relation ne correspond pas.
SDO_GEOM.RELATE(<geometry-1>,’<mask>’,<geometry-2>,<tolerance>) = ‘<relationship>’;
Ne pas utiliser SDO_GEOM.RELATE dans la clause « where » d’une requête (utiliser SDO_RELATE à la place), car il n’exploite pas les index spatiaux. Utiliser dans la clause « select »
Neuchâtel, novembre 2004 73
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Requêtes spatiales – SDO_GEOM.RELATE
Fonction SDO_GEOM.RELATE - ExemplesDétermine les relations entre le district de Boudry et ses communes.
select c.comnom, sdo_geom.relate(d.geom,’determine’,c.geom,0.5) relationfrom districts d, communes cwhere d.distnom = ‘Boudry’ and d.distnom = c.district;
COMNOM RELATION---------------------------------------------------Cortaillod CoversBôle ContainsBoudry CoversEtc…
Le changement de l’ordre des géométries dans la fonction permet d’obtenir les relations inverses (Coveredby, Inside, etc.)
Neuchâtel, novembre 2004 74
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Analyse spatiale
Analyse spatialeAnalyse spatiale
Dans ce chapitre et dans les exercices, nous ne travaillerons qu’avec des données projetées. Nous ne verrons pas les spécificités des données non projetées (lon/lat)
Neuchâtel, novembre 2004 75
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Analyse spatiale
• Utilisation de fonctions spatiales avancées pour effectuer des analyses
• Calculs de surfaces et de longueurs• Calculs de distances• Création de zones tampon• Manilutation de géométries• Agrégations spatiales
Points abordés
Neuchâtel, novembre 2004 76
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Analyse spatiale – Calcul de surface
Calcul de surfaceFonction de calcul de surface
area := SDO_GEOM.SDO_AREA (<geometry>,<tolerance> [, <unit>])
– geometry– Objet de type SDO_GEOMETRY définissant un polygone
– tolerance– Valeur de la tolérance
– unit– Unité du résultat (liste des unités possibles : select sdo_unit from
mdsys.sdo_dist_units;)
Calcul de la surface totale des communes entourant Rochefortselect sum(sdo_geom.sdo_area(c1.geom,0.5,’unit=sq_meter’)) surfacefrom communes c1, communes c2where c2.comnom = ‘Rochefort’ and
sdo_relate (c1.geom,c2.geom,’mask=TOUCH querytype=WINDOW’) = ‘TRUE’;
SURFACE------------xxx.xxxx
Calcul de surface - Exemple
Neuchâtel, novembre 2004 77
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Analyse spatiale – Calcul de surface
Calcul de la surface totale des communes entourant Rochefort. Groupement du résultat par district (surfaces totales par district).
Calcul de surface - Exemple
select c1.district, sum(sdo_geom.sdo_area(c1.geom,0.5,’unit=sq_meter’)) surface
from communes c1, communes c2where c2.comnom = ‘Rochefort’ and
sdo_relate (c1.geom,c2.geom,’mask=TOUCH querytype=WINDOW’) = ‘TRUE’
group by c1.district;
DISTRICT SURFACE--------------------------------------------------Boudry xxxx.xxxxLe Locle xxxx.xxxxLa Chaux-de-Fonds xxxx.xxxxVal-de-Ruz xxxx.xxxx
Neuchâtel, novembre 2004 78
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Analyse spatiale – Calcul de longueur
Calcul de longueurFonction de calcul de longueur
length := SDO_GEOM.SDO_LENGTH (<geometry>,<tolerance> [, <unit>])
– geometry– Objet de type SDO_GEOMETRY définissant un polygone
– tolerance– Valeur de la tolérance
– unit– Unité du résultat
Calcul de la longueur d’un axe de route
select axe_nom,sdo_geom.sdo_length(geom,0.5,’unit=kilometer’) longueurfrom axes_routewhere no_axe = 1234;
Calcul de longueur - Exemple
Neuchâtel, novembre 2004 79
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Analyse spatiale – Calcul de distance
Calcul de distanceFonction de calcul de la distance minimale entre deux objets
distance := SDO_GEOM.SDO_DISTANCE (<geometry-1>, <geometry-2>,<tolerance> [, <unit>])
– geometry-n– Objet de type SDO_GEOMETRY
– tolerance– Valeur de la tolérance
– unit– Unité du résultat
Distance entre deux sondagesselect sdo_geom.sdo_distance(s1.geom,s2.geom,0.5) distancefrom sondages s1, sondages s2where s1.id_sondage = 1 and s2.id_sondage = 2;
Calcul de distance - Exemples
Distance min entre l’axe de route 1234 et la commune de Cortaillodselect sdo_geom.sdo_distance(a.geom,c.geom,0.5,’unit=meter’) distancefrom axes_route a, communes cwhere c.comnom = ‘Cortaillod’ and a.no_axe = 1234;
Neuchâtel, novembre 2004 80
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Analyse spatiale – Calcul de distance
Recherche de tous les sondages à moins de 100 m du sondage n°10.
select s1.id_sondage, sdo_geom.sdo_distance(s1.geom,s2.geom,
0.5,’unit=meter’) distancefrom sondages s1, sondages s2where s2.id_sondage = 10
and sdo_within_distance(s1.geom,s2.geom,’distance=100 unit=meter’) = ‘TRUE’
order by distance;
ID_SONDAGE DISTANCE----------------------------------------10 013 12.03918 19.34221 45.1234 78.0989 93.932
Calcul de distance - Exemples
Neuchâtel, novembre 2004 81
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Analyse spatiale – Zone tampon
Création de zones tampon
Fonction de calcul de zones tampon
object := SDO_GEOM.SDO_BUFFER (<geometry>,<distance>, <tolerance> [, ‘<params>’])
– geometry– Objet de type SDO_GEOMETRY (point, ligne ou polygone)
– tolerance– Valeur de la tolérance
– distance– Distance à laquelle créer la zone tampon
– params– arc-tolerance
– Ne spécifier que si les données ne sont pas projetées– unit
– Unité pour la distance et la arc-tolerance– object
– Objet polygone de type SDO_GEOMETRY
Neuchâtel, novembre 2004 82
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Analyse spatiale – Zone tampon
Exemples de zones tampon
Gémoétries simples
Collections
Ligne fermée Polygone avec trou
Neuchâtel, novembre 2004 83
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Analyse spatiale – Zone tampon
Crée une zone de un kilomètre autour de l’axe de route n° 120
select sdo_geom.sdo_buffer (geom,25,0.5,’unit=km’) zone_tamponfrom axes_routewhere no_axe = 120;
Calcul de zone tampon - Exemples
Retourne la surface de la zone tampon ci-dessus
select sdo_geom.sdo_area (sdo_geom.sdo_buffer (geom,25,0.5,’unit=km’),0.5,’unit=sq_m’) surface_zone_tampon
from axes_routewhere no_axe = 120;
Recherche les communes ayant une relation spatiale à moins de 1km de l’axe 120 select /*+ ordered */ c.comnomfrom axes_route a, communes cwhere no_axe = 120 and
sdo_relate(c.geom,sdo_geom.sdo_buffer(a.geom,1,0.5,’unit=kilometer),‘mask=ANYINTERACT querytype=WINDOW’) = ‘TRUE’;
Neuchâtel, novembre 2004 84
Introduction
Concepts de Oracle Spatial
Création de données spatiales
Systèmes de coordonnées
Chargement de données spatiales
Indexation des données spatiales
Requêtes spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
g1
g2
Analyse spatiale – Fonctions logiques
Fonctions logiques d’analyse spatiale
1. SDO_GEOM.SDO_UNION – Union de deux géométries2. SDO_GEOM.SDO_INTERSECTION – Intersection de deux géométries3. SDO_GEOM.SDO_DIFFERENCE – Différence de deux géométries4. SDO_GEOM.SDO_XOR – Différence symétrique de deux géométries
object := SDO_GEOM.SDO_XXX (<geometry-1>,<geometry-2>,<tolerance>)
g1
g2
g1 g1
g2g2
1. 2. 3. 4.