Introduction

publicité
Plan du cours
Introduction
Introduction
Concepts de
Oracle Spatial
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Création de
données spatiales
Oracle Spatial
Daniel Gnerre, Système d’Information du Territoire Neuchâtelois (SITN)
Novembre 2004
Systèmes de
coordonnées
Chargement de
données spatiales
Chargement de
données spatiales
Indexation des
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
Requêtes
spatiales
Analyse spatiale
Analyse spatiale
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
1
Introduction
Création de
données spatiales
Introduction
Introduction
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Systèmes de
coordonnées
Chargement de
données spatiales
Chargement de
données spatiales
Indexation des
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
Requêtes
spatiales
Analyse spatiale
Analyse spatiale
Neuchâtel, novembre 2004
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
Copyright © Oracle Corporation, 2002
2
Introduction - Objectifs
Introduction
Concepts de
Oracle Spatial
Neuchâtel, novembre 2004
•
•
•
•
•
•
•
•
Copyright © Oracle Corporation, 2002
3
Neuchâtel, novembre 2004
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
Copyright © Oracle Corporation, 2002
4
Introduction – autres DB spatiales
Introduction
•
•
•
PostGIS (extension de PostgreSQL) : http://www.postgresql.com/
MySQL spatial extensions : http://www.mysql.com/
Etc.
Autodesk
Mapguide
LiteView
Concepts de
Oracle Spatial
ESRI
ArcIMS
Création de
données spatiales
SmallWorld Web
Berit
Lids IT
Mapserver
Analyse spatiale
Safe
FME
Cadcorp SIS
Autodesk
Mapguide
Manifold
Entreprise
Ionic Web
Feature Server
Indexation des
données spatiales
Dataserver extension
Option
Spatiale (SDO)
Oracle Spatial
5
Neuchâtel, novembre 2004
Création de
données spatiales
Systèmes de
coordonnées
Chargement de
données spatiales
• Technologie obsolète
Introduction
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)
Indexation des
données spatiales
–
–
–
–
–
–
Analyse spatiale
Copyright © Oracle Corporation, 2002
–
–
–
–
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
LOCATOR
Requêtes
spatiales
Neuchâtel, novembre 2004
6
Copyright © Oracle Corporation, 2002
Introduction – Le modèle relationnel
SPATIAL
Concepts de
Oracle Spatial
Cartouche
spatiale
SIG intranet/internet
Copyright © Oracle Corporation, 2002
–
–
–
–
–
–
–
–
–
Locator
Analyse spatiale
SIG professionnel
Introduction – Locator vs Spatial
Introduction
Multidimension (MD)
Requêtes
spatiales
SIG de bureau
Ionic Web
Mapping Server
Neuchâtel, novembre 2004
Oracle database
Server
Chargement de
données spatiales
Geomedia Pro
Bentley
Microstation
iSpatial
Oracle 8i, 9i, 10g
Systèmes de
coordonnées
PCI
Geomatica
MapInfo GIS
MapInfo
SpatialWare extension
Apic
SmallWorld
Intergraph Apic-Space
MapInfo
MapXtreme
Oracle 8
Création de
données spatiales
Caris GIS
ESRI
ArcSDE
Oracle 7
Concepts de
Oracle Spatial
Intergraph
Geomedia Web
Map Enterprise
Laserscan
Lamps
Autodesk GIS
Design Server
Modèle
relationnel-objet
Introduction
Intergraph
Geomedia
ESRI
ArcEditor
MapInfo C-Plan Topobase
Oracle
Professional
Spatial
Indexation des
données spatiales
Requêtes
spatiales
Autocad
Map
Modèle
relationnel
TB Generic
Web
ESRI
ArcView
Geoconcept
Entreprise
Systèmes de
coordonnées
Chargement de
données spatiales
Introduction – Historique
Requêtes
spatiales
Gestion de toutes les géométries
Indexation
Requêtes géométriques
Recherches de proximité
Calculs de distances
Gestion de multiples projections
Analyse spatiale
7
Neuchâtel, novembre 2004
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
Points
Lignes
Polygone
ID_PT
X
Y
NO_LI
ID_PT
NO_PO
NO_LI
1
553729
224322
1
1
1
1
2
553819
224512
1
2
1
2
3
4
553922
553821
224412
224117
1
1
3
4
5
6
554421
554521
223917
223550
2
2
5
6
7
554621
223550
2
7
Copyright © Oracle Corporation, 2002
8
Concepts
Concepts – Primitives géométriques
Géométries supportées par Oracle Spatial
Introduction
Concepts de
Oracle Spatial
Création de
données spatiales
Introduction
Les concepts d’Oracle Spatial
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Systèmes de
coordonnées
Chargement de
données spatiales
Chargement de
données spatiales
Indexation des
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
Requêtes
spatiales
Analyse spatiale
Analyse spatiale
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
9
Concepts – Primitives géométriques
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
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
10
Concepts – Primitives géométriques
• Points (X1,Y1)
Introduction
– Un point peut être 2D, 3D ou 4D
– Exemple : clients, adresses, forages, mesures
ponctuelles quelconques, etc.
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
• Lignes (X1,Y1,Xn,Yn)
Chargement de
données spatiales
– 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.
Copyright © Oracle Corporation, 2002
Neuchâtel, novembre 2004
Indexation des
données spatiales
Requêtes
spatiales
Analyse spatiale
11
Neuchâtel, novembre 2004
• 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.
Copyright © Oracle Corporation, 2002
12
Concepts – Modèle de données spatiales
Concepts – Les éléments
Modèle hiérarchique
Introduction
Introduction
Couche spatiale
Concepts de
Oracle Spatial
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Création de
données spatiales
Géométrie
…
Géométrie
…
Systèmes de
coordonnées
Géométrie
Chargement de
données spatiales
Chargement de
données spatiales
Indexation des
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
Elément
…
Elément
…
Requêtes
spatiales
Elément
Analyse spatiale
Ligne
Polygone
Ligne
composée
Concepts de
Oracle Spatial
Création de
données spatiales
Point
Ligne
Polygone
Ligne composée
Polygone composé
• Un élément est construit sur la base de
coordonnées
Polygone
composé
13
Copyright © Oracle Corporation, 2002
Concepts – La géométrie
Introduction
–
–
–
–
–
Analyse spatiale
Point
Neuchâtel, novembre 2004
• Les éléments constituent une géométrie
• Un élément peut être de type
Neuchâtel, novembre 2004
Concepts – La couche
• Une géométrie modélise un objet spatial
• Une géométrie est constituée d’un set ordonné
d’éléments
Introduction
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Systèmes de
coordonnées
Chargement de
données spatiales
Chargement de
données spatiales
Indexation des
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
Requêtes
spatiales
Analyse spatiale
Analyse spatiale
• 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 :
Commune de Fontaines (NE)
2 éléments
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
14
Copyright © Oracle Corporation, 2002
Exemple :
Communes de Neuchâtel
15
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
16
Concepts – L’indexation spatiale
Concepts – Requêtes
Modèle optimisé de requêtes utilisé par Oracle Spatial
• L’indexation « R-tree »
Introduction
Introduction
– Basée sur le rectangle englobant des géométries
– Peut indexer 2, 3 ou 4 dimensions
Concepts de
Oracle Spatial
Création de
données spatiales
Concepts de
Oracle Spatial
Création de
données spatiales
• L’indexation « Quad-tree »
– Recouvre la zone avec un maillage régulier
Systèmes de
coordonnées
Systèmes de
coordonnées
• Permet un recouvrement exclusif et exhaustif des
objets spatiaux
• Indexe tous les éléments qui composent une
géométrie (points, lignes, polygones)
Chargement de
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
Requêtes
spatiales
But : optimiser les performances des requêtes spatiales
Colonne
contenant la
géométrie des
objets
L’index permet de
sélectionner une
fenêtre d’intérêt
17
Neuchâtel, novembre 2004
Création de
données spatiales
Systèmes de
coordonnées
Chargement de
données spatiales
Association d’événements
Introduction
Concepts de
Oracle Spatial
– Routes, conduites, lignes électriques, …
• Les mesures sont proportionnelles à la distance depuis le
début de l’objet linéaire.
Systèmes de
coordonnées
Chargement de
données spatiales
(30,10,27)
(55,20,60)
(45,10,44)
Requêtes
spatiales
Indexation des
données spatiales
bon
Requêtes
spatiales
(15,5,11.2)
Copyright © Oracle Corporation, 2002
moyen
mauvais
Analyse spatiale
(40,5,38)
0
But : gérer et analyser les données relatives à un réseau
linéaire (ex : routes, cours d’eau, etc.)
Neuchâtel, novembre 2004
• Ponctuels: Accidents, feux, équipements, …
• Lineaires: Conditions de trafic, chantiers, …
Création de
données spatiales
(50,15,53.8)
Indexation des
données spatiales
Analyse spatiale
18
Concepts – Segmentation dynamique
• On associe une mesure à chaque point d’un objet linéaire
(5,10,0)
Procédure permettant de
déterminer les relations
spatiales exactes
Copyright © Oracle Corporation, 2002
La segmentation dynamique (Système de référence linéaire LRS)
Concepts de
Oracle Spatial
Sélection
exacte
• 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
Concepts – Segmentation dynamique
Introduction
Fonctions
spatiales
Indexation des
données spatiales
Analyse spatiale
Copyright © Oracle Corporation, 2002
Filtre
secondaire
Sélection
réduite
de données
Index
spatial
Chargement de
données spatiales
Analyse spatiale
Neuchâtel, novembre 2004
Filtre
primaire
Couche de
données
spatiales
Sélection
exacte
40
Mesure
130
190
= accident
= stop
19
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
= Etat de la route
20
Concepts – Segmentation dynamique
Création de données spatiales
Structuration des données sur un exemple
Introduction
Introduction
Table géographique des axes de routes
Concepts de
Oracle Spatial
LRS Geometry
SID
Création de
données spatiales
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Systèmes de
coordonnées
Chargement de
données spatiales
Chargement de
données spatiales
Indexation des
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
N°acc
SID
M
Etat
SID
Start M
Requêtes
spatiales
End M
Analyse spatiale
Analyse spatiale
Table des accidents
Neuchâtel, novembre 2004
Table de l’état de la route
21
Copyright © Oracle Corporation, 2002
Création de données spatiales - Rappel
Neuchâtel, novembre 2004
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Chargement de
données spatiales
Requêtes
spatiales
sys
mdsys
Analyse spatiale
Oracle Spatial
Neuchâtel, novembre 2004
Introduction
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Chargement de
données spatiales
Base XY
system
22
Objet SDO_GEOMETRY
• 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.
Indexation des
données spatiales
Copyright © Oracle Corporation, 2002
Création de données spatiales - Objets
Rappel des notions d’utilisateur et de schéma dans Oracle
Introduction
Création de données spatiales
Copyright © Oracle Corporation, 2002
Indexation des
données spatiales
scott
Utilisateurs
- system
- sys
- mdsys
- scott
- john
- etc.
Requêtes
spatiales
Analyse spatiale
23
Neuchâtel, novembre 2004
• Composition de l’objet SDO_GEOMETRY
SDO_GTYPE
SDO_SRID
SDO_POINT
SDO_ELEM_INFO
SDO_ORDINATES
NUMBER
NUMBER
SDO_POINT_TYPE
SDO_ELEM_INFO_ARRAY
SDO_ORDINATE_ARRAY
• Exemple SQL
CREATE TABLE communes (
nom_commune VARCHAR2(30),
population_total NUMBER(9),
geom
MDSYS.SDO_GEOMETRY);
Copyright © Oracle Corporation, 2002
24
Création de données spatiales - Objets
Création de données spatiales - Objets
Objet SDO_GTYPE
Introduction
Définit le type de géométrie stockée dans l’objet
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
Objet SDO_GEOMETRY
O UNKNOWK_GEOMETRY
1 POINT
2 LINESTRING
3 POLYGON
4 COLLECTION
5 MULTIPOINT
6 MULTILINESTRING
7 MULTIPOLYGON
2D
3D
4D
2000
2001
2002
2003
2004
2005
2006
2007
3000
3001
3002
3003
3004
3005
3006
3007
4000
4001
4002
4003
4004
4005
4006
4007
Dimension
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
! NON OGC !
Type de géométrie
Requêtes
spatiales
Analyse spatiale
• SDO_POINT_TYPE
x
y
z
NUMBER
NUMBER
NUMBER
• SDO_ELEM_INFO_ARRAY
VARRAY (1048576) OF NUMBER
• SDO_ORDINATE_ARRAY
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
Objet SDO_SRID
Nombre 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
Copyright © Oracle Corporation, 2002
25
Création de données spatiales - Objets
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
Création de données spatiales - Objets
Objet SDO_GEOMETRY
Méthodes définies sur SDO_GEOMETRY
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
26
Introduction
GET_DIMS() renvoie la dimension de l’objet
Concepts de
Oracle Spatial
select c.geom.get_dims() commune_dim
from communes c
where c.nom_commune = ‘Fontaines’;
Résultat : 2
Création de
données spatiales
Systèmes de
coordonnées
Chargement de
données spatiales
GET_GTYPE() renvoie le type de géométrie
Indexation des
données spatiales
select c.geom.get_gtype() commune_gtype
from communes c
where c.nom_commune = ‘Fontaines’;
Résultat : 3
Requêtes
spatiales
Analyse spatiale
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
Copyright © Oracle Corporation, 2002
27
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
28
Création de données spatiales - Objets
Création de données spatiales - Exemples
Type d’élément et interprétation dans SDO_ELEM_INFO
Insertion d’un objet point
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
Introduction
Numéro Type d’élément
Interprétation
O
1
2
UNKNOWK_ELEMENT
POINT
LINESTRING
3
1003
2003
POLYGON
(extérieur)
(intérieur)
4
5
1005
2005
COMPOUND LINESTRING
COMPOUND POLYGON
(extérieur)
(intérieur)
Concepts de
Oracle Spatial
Création de
données spatiales
nbre de points de la collection
1 – Lignes droites
2 – Arcs de cercle
1 – Lignes droites
2 – Arcs de cercle
3 – Rectangle optimisé
4 - Cercle
nbre d’éléments
nbre d’éléments
• 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
Systèmes de
coordonnées
Chargement de
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
Analyse spatiale
SDO_GTYPE
Insert into mesures_pollution_air
values (34.6,57.4,etc…,
mdsys.sdo_geometry(
3001, 352257,
mdsys.sdo_point_type(521030,240120,550),
null,null)
);
SDO_POINT
Neuchâtel, novembre 2004
29
Copyright © Oracle Corporation, 2002
Création de données spatiales - Exemples
Neuchâtel, novembre 2004
Concepts de
Oracle Spatial
SDO_ELEM_INFO
Type
Interpr.
1
2
1
x1
x2
x3
x4
(x2,y2)
(x1,y1)
Indexation des
données spatiales
Requêtes
spatiales
Analyse spatiale
(x3,y3)
SDO_ELEM_INFO
Type
1
2
Interpr.
2
(x5,y5)
(x2,y2)
(x4,y4)
(x3,y3)
Neuchâtel, novembre 2004
Concepts de
Oracle Spatial
30
Copyright © Oracle Corporation, 2002
SDO_GTYPE
=
2002
(x4,y4)
(x6,y6)
(x7,y7)
Copyright © Oracle Corporation, 2002
x1
x2
x3
x4
x5
x6
x7
y1
y2
y3
y4
y5
y6
y7
Systèmes de
coordonnées
Chargement de
données spatiales
Indexation des
données spatiales
(x5,y5)
(x6,y6)
Position
Type
Interpr.
1
1003
1
(x1,y1)
(x4,y4)
(x2,y2)
Création de
données spatiales
SDO_ORDINATES
Position
(x1,y1)
Introduction
y1
y2
y3
y4
Systèmes de
coordonnées
Chargement de
données spatiales
SDO_ORDINATES
SDO_ELEM_INFO
SDO_ORDINATES
Position
Création de
données spatiales
SDO_ELEM_INFO
Création de données spatiales - Exemples
Exemples de SDO_ELEM_INFO et SDO_ORDINATES
Introduction
SDO_SRID
SDO_GTYPE
=
2003
(x3,y3)
(x2,y2)
SDO_ELEM_INFO
Position
Type
Interpr.
1
1003
3
SDO_GTYPE
=
2003
(x1,y1)
Requêtes
spatiales
Analyse spatiale
SDO_GTYPE
=
2002
SDO_ELEM_INFO
Position
Type
Interpr.
1
1003
4
(x1,y1)
(x2,y2)
31
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
(x3,y3)
SDO_GTYPE
=
2003
32
Création de données spatiales - Exemples
Création de données spatiales - Exemples
SDO_ELEM_INFO
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
(x6,y6)
Position
Type
Interpr.
1
1
5
1005
2
2
2
1
2
(x4,y4)
(x7,y7)
(x1,y1)
Introduction
SDO_GTYPE
=
2003
SDO_ELEM_INFO
Concepts de
Oracle Spatial
Création de
données spatiales
(x2,y2)
SDO_ELEM_INFO
Systèmes de
coordonnées
(x5,y5)
Position
Type
Interpr.
1
13
1003
2003
1
3
(x6,y6)
(x8,y8)
(x5,y5)
(x6,y6)
...?
(x4,y4)
(x1,y1)
(x3,y3)
(x1,y1)
(x2,y2)
Requêtes
spatiales
(x5,y5)
(x8,y8)
(x2,y2)
Indexation des
données spatiales
(x3,y3)
(x7,y7)
(x6,y6)
Analyse spatiale
(x4,y4)
(x9,y9)
(x11,y11) (x10,y10)
Type
Interpr.
1
7
2
2
1
1
Position
Type
Interpr.
1
1
7
17
1005
2
2
1003
2
1
2
1
Création de données spatiales - Sql
Systèmes de
coordonnées
Chargement de
données spatiales
SDO_POINT
(x7,y7)
(x5,y5)
(x8,y8)
(x6,y6)
(x1,y1)
(x2,y2)
Neuchâtel, novembre 2004
(x4,y4)
(x9,y9)
(x11,y11) (x10,y10)
(x3,y3)
34
Copyright © Oracle Corporation, 2002
SDO_POINT
Introduction
Insert into axe_route
values (‘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))
);
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
SDO_SRID
SDO_GTYPE
(x3,y3)
Insertion d’un polygone
Indexation des
données spatiales
Requêtes
spatiales
(x4,y4)
(x1,y1)
Création de données spatiales - Sql
Introduction
Création de
données spatiales
(x2,y2)
SDO_ELEM_INFO
Insertion d’une ligne
Concepts de
Oracle Spatial
(x6,y6)
(x3,y3)
33
Copyright © Oracle Corporation, 2002
(x5,y5)
Position
Chargement de
données spatiales
SDO_GTYPE
=
2003
(x7,y7)
(x2,y2)
Analyse spatiale
(x4,y4)
(x1,y1)
Requêtes
spatiales
Neuchâtel, novembre 2004
Solutions
(x3,y3)
(x5,y5)
Requêtes
spatiales
(20,25)
Analyse spatiale
Analyse spatiale
Insert into axe_route
values (‘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_SRID
SDO_GTYPE
(5,12)
(2,10)
(6,9)
(12,10)
(2,10)
(10,10)
(30,10)
(40,10)
(4,3)
(3,0)
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
35
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
(10,0)
36
Création de données spatiales - Métadonnées
Création de données spatiales - Métadonnées
Métadonnées spatiales dans Oracle - Définition
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
Introduction
Concepts de
Oracle Spatial
Structure de la vue USER_SDO_GEOM_METADATA
Attributs
Null?
Type
TABLE_NAME
COLUMN_NAME
DIMINFO
SRID
NOT NULL
NOT NULL
VARCHAR2(32)
VARCHAR2(32)
MDSYS.SDO_DIM_ARRAY
NUMBER
Création de
données spatiales
Chargement de
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
VARRAY(4) OF SDO_DIM_ELEMENT → axes du système
Objet MDSYS.SDO_DIM_ELEMENT
Analyse spatiale
VARCHAR2(64) → nom de la dimension
NUMBER → valeur minimale de la dimension
NUMBER → valeur maximale de la dimension
NUMBER → tolérance de la dimension
Copyright © Oracle Corporation, 2002
• 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.
Systèmes de
coordonnées
Type MDSYS.SDO_DIM_ARRAY
SDO_DIM_NAME
SDO_LB
SDO_UB
SDO_TOLERANCE
Neuchâtel, novembre 2004
Création de la métadonnée - Exemples
• 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
37
Systèmes de coordonnées
Neuchâtel, novembre 2004
delete from user_sdo_geom_metadata
where table_name = ‘mesures_pollution_air’ and
column_name = ‘geom’;
insert into user_sdo_geom_metadata
values (‘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);
38
Copyright © Oracle Corporation, 2002
Systèmes de coordonnées - Types
Non géoréférencé
Introduction
Concepts de
Oracle Spatial
Création de
données spatiales
Introduction
Systèmes de coordonnées
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Systèmes de
coordonnées
Chargement de
données spatiales
Chargement de
données spatiales
Indexation des
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
Requêtes
spatiales
Analyse spatiale
Analyse spatiale
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
39
Neuchâtel, novembre 2004
• Système local, pas lié à une
représentation de la terre
• Coordonnées cartésiennes
• Ex : « non-earth » de MapInfo
Géoréférencé projeté
• Projection de la sphère
terrestre sur un plan 2D
• Coordonnées cartésiennes
• Ex : projection Suisse
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
Copyright © Oracle Corporation, 2002
Longitude
Latitude
40
Systèmes de coordonnées – MDSYS.CS_SRS
Systèmes de coordonnées – Exemple SQL
Procédure pour ajouter un système de coordonnées
Table MDSYS.CS_SRS
Introduction
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Attributs
Type
Description
CS_NAME
SRID
AUTH_SRID
AUTH_NAME
WKTEXT
CS_BOUNDS
VARCHAR2(68)
NUMBER(38)
NUMBER(38)
VARCHAR2(256)
VARCHAR2(2046)
MDSYS.SDO_GEOMETRY
Nom court
ID du système de référence
Contient ‘Oracle’
Contient le SRID
Nom complet selon OGC
Null (pas utilisé pour l’instant)
1. Supprimer l’index spatial s’il existe
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
Neuchâtel, novembre 2004
Chargement de
données spatiales
Associer un système de coordonnées aux objets
Indexation des
données spatiales
• 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
Copyright © Oracle Corporation, 2002
Requêtes
spatiales
Analyse spatiale
41
3. Mettre à jour le SDO_SRID de chaque objet
update communes c
set c.geom.sdo_srid = 352257;
4. Ajuster la tolérance si nécessaire
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’
Neuchâtel, novembre 2004
42
Copyright © Oracle Corporation, 2002
Chargement de données – SQL*Loader
Fonctionnement de SQL*Loader
Chargement de données
Introduction
Concepts de
Oracle Spatial
Création de
données spatiales
Création de
données spatiales
Systèmes de
coordonnées
Systèmes de
coordonnées
Chargement de
données spatiales
Chargement de
données spatiales
Indexation des
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
Requêtes
spatiales
Analyse spatiale
Analyse spatiale
¾ « bulk loading » (SQL*Loader ou Import)
Fichier de
Paramètres
(optionnel)
Fichier de contrôle
Données
SQL*Loader
Scannage
Rejetés
Acceptés
Ingnorés
Données
incorrectes
Sélection
Sélectionnés
Fichier
données
Ignorées
(optionnel)
Fichier
log
Oracle Server
Rejetés
Données
Oracle Spatial
¾ transactionnel (requêtes insert)
Copyright © Oracle Corporation, 2002
update user_sdo_geom_metadata set srid = 352257
where table_name = ‘communes’ and column_name = ‘geom’;
create index communes_sidx on communes(geom)
indextype is mdsys.spatial_index;
Concepts de
Oracle Spatial
Neuchâtel, novembre 2004
2. Mettre à jour la table des métadonnées
5. Reconstruire l’index spatial
Chargement de données
Introduction
drop index communes_sidx;
43
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
44
Chargement de données - SQL*Loader
Chargement de données - SQL*Loader
Exemple SQL*Loader avec données points
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
Neuchâtel, novembre 2004
Exemple SQL*Loader avec données lignes et polygones
LOAD DATA
INFILE *
INTO TABLE villes
FIELDS 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)
)
)
BEGINDATA
Neuchâtel¦Neuchâtel¦33000¦2001¦561000¦205000¦
Cortaillod¦Boudry¦2800¦2001¦555000¦199500¦
Copyright © Oracle Corporation, 2002
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
45
Chargement de données - Import/Export
Neuchâtel, novembre 2004
LOAD DATA
INFILE *
CONTINUEIF NEXT(1:1) = ‘#’
INTO TABLE contes
FIELDS 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))
)
BEGINDATA
Autauga¦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¦
Chargement de données - Transactionnel
Insertions transactionnelles
Fonctions Import/Export d’Oracle
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
Neuchâtel, novembre 2004
• 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
Copyright © Oracle Corporation, 2002
46
Copyright © Oracle Corporation, 2002
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
• 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
Exemple SQL
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 PL/SQL
CREATE OR REPLACE PROCEDURE
INSERTION_GEOMETRIE(GEOM MDSYS.SDO_GEOMETRY) IS
BEGIN
INSERT INTO TEST_1 VALUES (GEOM);
COMMIT;
END
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
Utilisé pour contourner
la limite de 999 valeurs
dans le SDO_ORDINATES
48
Chargement de données - Shapefile convert
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
Neuchâtel, novembre 2004
•
•
•
•
Chargement de données – Autres…
Chargement à l’aide d’outils SIG
Shapefile converter (fichiers *.shp d’ArcView)
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
Introduction
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Shptosdo <shapefile> <table-name> -g <geometry-col> -i <id-col> -n –d
–x (<Xmin>,<Xmax>) –y (<Ymin>,<Ymax>) –s <srid> -t <tolerance>
¾
¾
¾
¾
¾
¾
¾
¾
¾
¾
Chargement de
données spatiales
<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)
Copyright © Oracle Corporation, 2002
Indexation des
données spatiales
Requêtes
spatiales
Analyse spatiale
49
Indexation
Introduction
Neuchâtel, novembre 2004
Indexation des données
50
Concept de l’indexation des données selon R-tree
Introduction
Concepts de
Oracle Spatial
Création de
données spatiales
Création de
données spatiales
Systèmes de
coordonnées
Systèmes de
coordonnées
Chargement de
données spatiales
Chargement de
données spatiales
Indexation des
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
Requêtes
spatiales
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
Indexation – R-Tree
Concepts de
Oracle Spatial
Analyse spatiale
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.
• Utilisé pour optimiser les performances des requêtes spatiales
• Deux types d’indexation spatiale :
¾ R-tree
¾ Quad-tree
Copyright © Oracle Corporation, 2002
51
• 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
Analyse spatiale
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
52
Indexation – R-Tree
Indexation – R-Tree
Syntaxes SQL
Concept de l’indexation des données selon R-tree
Construction de l’index
Introduction
Concepts de
Oracle Spatial
Introduction
a
Racine
Création de
données spatiales
Systèmes de
coordonnées
Chargement de
données spatiales
Création de
données spatiales
b
R
R
S
S
Systèmes de
coordonnées
Chargement de
données spatiales
d
a
Indexation des
données spatiales
Requêtes
spatiales
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>] ];
Concepts de
Oracle Spatial
c
Racine
b
c
d
MBRs, pointeurs sur géomérties
Analyse spatiale
Indexation des
données spatiales
–
–
–
Requêtes
spatiales
–
Analyse spatiale
• Fanout (nb de branches par nœud) identique pour
toute l’arborescence
• Regroupement par proximité
–
Suppression de l’index
DROP INDEX <index-name> FORCE;
–
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
53
Indexation – R-Tree
Neuchâtel, novembre 2004
Syntaxes SQL
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
Neuchâtel, novembre 2004
FORCE = force la suppression de l’index
Copyright © Oracle Corporation, 2002
54
Indexation – Quad -Tree
Concept de l’indexation des données selon Quad-tree
Reconstruction de l’index
Introduction
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.
Introduction
ALTER INDEX <index_name>
REBUILD
PARAMETERS (<parameter string>);
Concepts de
Oracle Spatial
Création de
données spatiales
Reconstruction complète de l’index, avec une redéfinition possible de
tous les paramètres
Systèmes de
coordonnées
Renommage de l’index
Chargement de
données spatiales
ALTER INDEX <index_name>
RENAME TO
<new_index_name>);
Indexation des
données spatiales
Requêtes
spatiales
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.)
Copyright © Oracle Corporation, 2002
• 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.
55
Analyse spatiale
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
56
Requêtes spatiales
Introduction
Concepts de
Oracle Spatial
Requêtes spatiales - Modèle
Rappel du modèle optimisé de requêtes
Requêtes spatiales
Introduction
Concepts de
Oracle Spatial
Création de
données spatiales
Création de
données spatiales
Systèmes de
coordonnées
Systèmes de
coordonnées
Chargement de
données spatiales
Chargement de
données spatiales
Indexation des
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
Requêtes
spatiales
Analyse spatiale
Analyse 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
Copyright © Oracle Corporation, 2002
57
Requêtes spatiales – Opérateurs/Fonctions
Neuchâtel, novembre 2004
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
Neuchâtel, novembre 2004
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
Procédure permettant de
déterminer les relations
spatiales exactes
58
Copyright © Oracle Corporation, 2002
Opérateurs spatiaux vs Fonction spatiales
Introduction
• Opérateurs spatiaux
Concepts de
Oracle Spatial
– 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
Création de
données spatiales
Systèmes de
coordonnées
Chargement de
données spatiales
Indexation des
données spatiales
• 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
Copyright © Oracle Corporation, 2002
Colonne
contenant la
géométrie des
objets
Filtre
primaire
Requêtes spatiales – Opérateurs/Fonctions
Opérateurs spatiaux vs Fonction spatiales
Introduction
Couche de
données
spatiales
Sélection
exacte
Requêtes
spatiales
Analyse spatiale
59
Neuchâtel, novembre 2004
Opérateurs
Fonctions
– 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
Copyright © Oracle Corporation, 2002
– 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…
60
Requêtes spatiales – SDO_FILTER
Requêtes spatiales – Relations spatiales
Opérateur SDO_FILTER
Relations spatiales (topologiques)
Effectue un filtre primaire uniquement et renvoie ‘FALSE’ ou ‘TRUE’
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
Introduction
SDO_FILTER(<geometry-1>,<geometry-2>,‘QUERYTYPE=WINDOW’) = ‘TRUE’;
A
Concepts de
Oracle Spatial
– geometry-1 (objets recherchés)
– Doit être une colonne dans une table
– Doit être de type SDO_GEOMETRY
– Doit être indexée
Création de
données spatiales
A
A
B
B
Contains/Inside
Covers/Coveredby
B
Touch
Systèmes de
coordonnées
– geometry-2
– Doit être une variable ou une colonne dans une table
– Doit être de type SDO_GEOMETRY
Chargement de
données spatiales
– ‘QUERYTYPE = WINDOW’
A
A
B
A
B
B
Indexation des
données spatiales
– Doit être entre simples guillements
– Paramètre nécessaire. Oracle conseille de n’utiliser que WINDOW
Requêtes
spatiales
select s.nom, s.type from sondages s
Where 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’;
OverlapBdyIntersect
OverlapBdyDisjoint
Equal
A
Analyse spatiale
B
Disjoint
ANYINTERACT = ‘TRUE’
Si la relation n’est pas « Disjoint »
Masque optimal
Ne pas mettre <> ‘FALSE’ ou = ‘true’. Toujours = et en MAJUSCULES TRUE/FALSE
Neuchâtel, novembre 2004
61
Copyright © Oracle Corporation, 2002
Requêtes spatiales – Relations spatiales
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
Requêtes spatiales – SDO_RELATE
Relations spatiales (topologiques)
Introduction
A
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Chargement de
données spatiales
Systèmes de
coordonnées
A
B
B
OverlapBdyIntesect
Création de
données spatiales
Touch
A
Indexation des
données spatiales
Requêtes
spatiales
B
Covers/Coveredby
A
Introduction
Concepts de
Oracle Spatial
B
Contains/Inside
Opérateur SDO_RELATE
A
A
B
OverlapBdyDisjoint
Chargement de
données spatiales
Indexation des
données spatiales
B
Requêtes
spatiales
Covers On
Analyse spatiale
Analyse spatiale
A
ANYINTERACT = ‘TRUE’
B
Disjoint
Neuchâtel, novembre 2004
62
Copyright © Oracle Corporation, 2002
Effectue un filtre primaire et seconcaire et renvoie ‘FALSE’ ou ‘TRUE’
SDO_RELATE(<geometry-1>,<geometry-2>,
‘MASK=<mask> QUERYTYPE=WINDOW’) = ‘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)
Si la relation n’est pas « Disjoint »
Masque optimal
63
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
64
Requêtes spatiales – SDO_RELATE
Requêtes spatiales – Optimisation
Opérateur SDO_RELATE - Exemples
Utilisation de /*+ ordered*/
Recherche toutes les communes dans le district de Boudry
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
Introduction
select c.comnom, c.numcom
from communes c, districts d
where d.distnom = ‘Boudry’ and
sdo_relate ( c.geom,d.geom,
‘mask=INSIDE+COVEREDBY querytype=WINDOW’)=‘TRUE’;
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Recherche toutes les communes limnitrophes de Fleurier
select c1.comnom, c1.numcom
from communes c1, communes c2
where c2.comnom = ‘Fleurier’ and
sdo_relate ( c1.geom,c2.geom,
‘mask=TOUCH querytype=WINDOW’)=‘TRUE’;
Chargement de
données spatiales
Indexation des
données spatiales
Requêtes
spatiales
Recherche tous les sondages dans la commune de Cortaillod
Analyse spatiale
select s.nom, s.type
from sondages s, communes c
where c.comnom = ‘Cortaillod’ and
sdo_relate ( s.geom,c.geom,
‘mask=ANYINTERACT querytype=WINDOW’)=‘TRUE’;
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
65
Requêtes spatiales – SDO_WITHIN_DISTANCE
Neuchâtel, novembre 2004
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
select /*+ ordered*/ a.nom
from communes c, axes_routes a
where 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 habitants
2°/ 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 ».
Copyright © Oracle Corporation, 2002
66
Requêtes spatiales – SDO_WITHIN_DISTANCE
Opérateur SDO_WITHIN_DISTANCE
Introduction
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.
Opérateur SDO_WITHIN_DISTANCE - Exemples
Génère un résultat exact ou approximatif. Renvoie ‘FALSE’ ou ‘TRUE’
Introduction
SDO_WITHIN_DISTANCE(
<geometry-1>,<geometry-2>,
‘DISTANCE=<n>,[paramètres optionnels]’) = ‘TRUE’;
Concepts de
Oracle Spatial
Création de
données spatiales
– geometry-1 (objets recherchés)
– Doit être une colonne dans une table
– Doit être de type SDO_GEOMETRY
– Doit être indexée
Systèmes de
coordonnées
Recherche les bâtiments à moins de 100 mètres d’un axe de routes.
select /*+ ordered*/ b.idbatiment
from axes_routes a, batiments b
where a.no_axe = 1289 and
sdo_within_distance
( b.geom,a.geom,‘distance=100’)=‘TRUE’;
Chargement de
données spatiales
– 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
Indexation des
données spatiales
Requêtes
spatiales
– DISTANCE
– Distance en unités du système de projection de goemetry-2
Analyse spatiale
– QUERYTYPE (optionnel)
– Effectue par défaut un filtre primaire + secondaire
– Si QUERYTYPE=FILTER, effectue seulement un filtre primaire
Recherche les axes à moins de 1 kilomètre d’un bâtiment.
select /*+ ordered*/ a.no_axe
from batiments b, axes_routes a
where b.idbatiment = 2198376 and
sdo_within_distance
( a.geom,b.geom,‘distance=1 UNIT=kilometer’)=‘TRUE’;
– UNIT (optionnel)
– Peut définir une autre unité de mesures que dans le SRS
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
67
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
68
Requêtes spatiales – SDO_NN
Requêtes spatiales – SDO_NN
Opérateur SDO_NN (Nearest Neighbor)
Opérateur auxiliaire SDO_NN_DISTANCE
Renvoie le (ou les) voisin le plus proche d’une géométrie
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
Renvoie la distance associée aux voisins les plus proches (SDO_NN)
SDO_NN(<geometry-1>,<geometry-2>,‘[paramètres optionnels]’) = ‘TRUE’;
Introduction
– geometry-1 (objets voisins recherchés)
Concepts de
Oracle Spatial
– Doit être une colonne dans une table
– Doit être de type SDO_GEOMETRY
– Doit être indexée
Création de
données spatiales
– geometry-2 (objet de base)
Systèmes de
coordonnées
– Doit être une variable ou une colonne dans une table
– Doit être de type SDO_GEOMETRY
SDO_NN_DISTANCE (<tag>) returns NUMBER
– 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
Chargement de
données spatiales
– SDO_NUM_RES (optionnel)
– Nombre de voisins à renvoyer (1 par défaut)
Indexation des
données spatiales
– 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
Requêtes
spatiales
Analyse spatiale
– UNIT (optionnel avec l’utilisation de SDO_NN_DISTANCE)
SDO_NN_EXEMPLES
Renvoie les 5 sondages plus proches de l’axe de route 1289
select /*+ ordered*/ s.nom, s.type, sdo_nn_distance (1) distance_en_metres
from axes_routes a, sondages s
where a.no_axe = 1289 and
sdo_nn(s.geom,a.geom,’sdo_num_res=5 unit=meter’,1) = ‘TRUE’
Order by distance_en_metres;
– 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
Neuchâtel, novembre 2004
69
Copyright © Oracle Corporation, 2002
Requêtes spatiales – SDO_NN
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
Requêtes spatiales – SDO_GEOM.RELATE
SDO_NN_EXEMPLES
Introduction
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Chargement de
données spatiales
Fonction SDO_GEOM.RELATE
Renvoie les 5 sondages plus proches de l’axe de route 1289, et qui
sont d’un certain type.
Introduction
Concepts de
Oracle Spatial
select /*+ ordered*/ s.nom, s.type, sdo_nn_distance (1) distance_en_metres
from axes_routes a, sondages s
where 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;
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
Neuchâtel, novembre 2004
70
Indexation des
données spatiales
Pour stopper la recherche lorque
le résultat a atteint 5 lignes
Pour que la clause where
renvoie en continu les sondages
Requêtes
spatiales
• 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).
Copyright © Oracle Corporation, 2002
71
Analyse spatiale
Détermine la relation spatiale entre deux géométries (filre secondaire).
SDO_GEOM.RELATE(
<geometry-1>,’<mask>’,<geometry-2>,<tolerance>) = ‘<relationship>’;
– 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.
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
Copyright © Oracle Corporation, 2002
72
Analyse spatiale
Requêtes spatiales – SDO_GEOM.RELATE
Fonction SDO_GEOM.RELATE - Exemples
Détermine les relations entre le district de Boudry et ses communes.
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
Introduction
select c.comnom, sdo_geom.relate(d.geom,’determine’,c.geom,0.5) relation
from districts d, communes c
where d.distnom = ‘Boudry’ and d.distnom = c.district;
Concepts de
Oracle Spatial
COMNOM
RELATION
--------------------------------------------------Cortaillod
Covers
Bôle
Contains
Boudry
Covers
Etc…
Création de
données spatiales
Systèmes de
coordonnées
Chargement de
données spatiales
Indexation des
données spatiales
Le changement de l’ordre des
géométries dans la fonction
permet d’obtenir les relations
inverses (Coveredby, Inside,
etc.)
Requêtes
spatiales
Analyse spatiale
Analyse 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
Copyright © Oracle Corporation, 2002
73
Analyse spatiale
Neuchâtel, novembre 2004
Concepts de
Oracle Spatial
Création de
données spatiales
Systèmes de
coordonnées
Chargement de
données spatiales
Calcul de surface
Fonction de calcul de surface
Introduction
• 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
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
Indexation des
données spatiales
Requêtes
spatiales
Requêtes
spatiales
Analyse spatiale
Analyse spatiale
Neuchâtel, novembre 2004
74
Analyse spatiale – Calcul de surface
Points abordés
Introduction
Copyright © Oracle Corporation, 2002
Copyright © Oracle Corporation, 2002
75
Neuchâtel, novembre 2004
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 surface - Exemple
Calcul de la surface totale des communes entourant Rochefort
select sum(sdo_geom.sdo_area(c1.geom,0.5,’unit=sq_meter’)) surface
from communes c1, communes c2
where c2.comnom = ‘Rochefort’ and
sdo_relate (c1.geom,c2.geom,
’mask=TOUCH querytype=WINDOW’) = ‘TRUE’;
SURFACE
-----------xxx.xxxx
Copyright © Oracle Corporation, 2002
76
Analyse spatiale – Calcul de surface
Analyse spatiale – Calcul de longueur
Calcul de surface - Exemple
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
Calcul de longueur
Calcul de la surface totale des communes entourant Rochefort.
Groupement du résultat par district (surfaces totales par district).
Introduction
Concepts de
Oracle Spatial
select c1.district,
sum(sdo_geom.sdo_area(c1.geom,0.5,’unit=sq_meter’)) surface
from communes c1, communes c2
where c2.comnom = ‘Rochefort’ and
sdo_relate (c1.geom,c2.geom,
’mask=TOUCH querytype=WINDOW’) = ‘TRUE’
group by c1.district;
Création de
données spatiales
Systèmes de
coordonnées
Chargement de
données spatiales
Indexation des
données spatiales
DISTRICT
SURFACE
-------------------------------------------------Boudry
xxxx.xxxx
Le Locle
xxxx.xxxx
La Chaux-de-Fonds
xxxx.xxxx
Val-de-Ruz
xxxx.xxxx
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
Requêtes
spatiales
Analyse spatiale
77
Analyse spatiale – Calcul de distance
Neuchâtel, novembre 2004
Calcul de distance
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
Introduction
distance := SDO_GEOM.SDO_DISTANCE
(<geometry-1>, <geometry-2>,<tolerance> [, <unit>])
Concepts de
Oracle Spatial
– geometry-n
Création de
données spatiales
– Objet de type SDO_GEOMETRY
– tolerance
Systèmes de
coordonnées
– Valeur de la tolérance
– unit
Chargement de
données spatiales
– Unité du résultat
Calcul de distance - Exemples
Indexation des
données spatiales
Distance entre deux sondages
select sdo_geom.sdo_distance(s1.geom,s2.geom,0.5) distance
from sondages s1, sondages s2
where s1.id_sondage = 1 and s2.id_sondage = 2;
Requêtes
spatiales
Analyse spatiale
select sdo_geom.sdo_distance(a.geom,c.geom,0.5,’unit=meter’) distance
from axes_route a, communes c
where c.comnom = ‘Cortaillod’ and a.no_axe = 1234;
Copyright © Oracle Corporation, 2002
– geometry
– Objet de type SDO_GEOMETRY définissant un polygone
– tolerance
– Valeur de la tolérance
– unit
– Unité du résultat
Calcul de longueur - Exemple
Calcul de la longueur d’un axe de route
select axe_nom,sdo_geom.sdo_length(geom,0.5,’unit=kilometer’) longueur
from axes_route
where no_axe = 1234;
Copyright © Oracle Corporation, 2002
78
Calcul de distance - Exemples
Distance min entre l’axe de route 1234 et la commune de Cortaillod
Neuchâtel, novembre 2004
length := SDO_GEOM.SDO_LENGTH (<geometry>,<tolerance> [, <unit>])
Analyse spatiale – Calcul de distance
Fonction de calcul de la distance minimale entre deux objets
Introduction
Fonction de calcul de longueur
79
Neuchâtel, novembre 2004
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’) distance
from sondages s1, sondages s2
where s2.id_sondage = 10
and sdo_within_distance(s1.geom,s2.geom,
’distance=100 unit=meter’) = ‘TRUE’
order by distance;
ID_SONDAGE
DISTANCE
---------------------------------------10
0
13
12.039
18
19.342
21
45.123
4
78.098
9
93.932
Copyright © Oracle Corporation, 2002
80
Analyse spatiale – Zone tampon
Analyse spatiale – Zone tampon
Exemples de zones tampon
Création de zones tampon
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
Introduction
Fonction de calcul de zones tampon
Gémoétries simples
Concepts de
Oracle Spatial
object := SDO_GEOM.SDO_BUFFER (<geometry>,<distance>,
<tolerance> [, ‘<params>’])
Création de
données spatiales
– geometry
– Objet de type SDO_GEOMETRY (point, ligne ou polygone)
Systèmes de
coordonnées
– tolerance
– Valeur de la tolérance
Collections
Chargement de
données spatiales
– distance
– Distance à laquelle créer la zone tampon
Indexation des
données spatiales
– 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
Requêtes
spatiales
Ligne fermée
Polygone avec trou
Analyse spatiale
– object
– Objet polygone de type SDO_GEOMETRY
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
81
Analyse spatiale – Zone tampon
Neuchâtel, novembre 2004
Analyse spatiale – Fonctions logiques
Calcul de zone tampon - Exemples
Fonctions logiques d’analyse spatiale
Crée une zone de un kilomètre autour de l’axe de route n° 120
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
Neuchâtel, novembre 2004
Introduction
select sdo_geom.sdo_buffer (geom,25,0.5,’unit=km’) zone_tampon
from axes_route
where no_axe = 120;
Concepts de
Oracle Spatial
Création de
données spatiales
Retourne la surface de la zone tampon ci-dessus
Systèmes de
coordonnées
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_route
where no_axe = 120;
Chargement de
données spatiales
1.
2.
3.
4.
SDO_GEOM.SDO_UNION – Union de deux géométries
SDO_GEOM.SDO_INTERSECTION – Intersection de deux géométries
SDO_GEOM.SDO_DIFFERENCE – Différence de deux géométries
SDO_GEOM.SDO_XOR – Différence symétrique de deux géométries
object := SDO_GEOM.SDO_XXX (<geometry-1>,<geometry-2>,<tolerance>)
1.
2.
3.
4.
g1
g1
g1
g1
g2
g2
g2
g2
Indexation des
données spatiales
Recherche les communes ayant une relation spatiale à moins de 1km
de l’axe 120
Requêtes
spatiales
select /*+ ordered */ c.comnom
from axes_route a, communes c
where no_axe = 120 and
sdo_relate(c.geom,sdo_geom.sdo_buffer(a.geom,1,0.5,’unit=kilometer),
‘mask=ANYINTERACT querytype=WINDOW’) = ‘TRUE’;
Copyright © Oracle Corporation, 2002
82
Copyright © Oracle Corporation, 2002
83
Analyse spatiale
Neuchâtel, novembre 2004
Copyright © Oracle Corporation, 2002
84
Téléchargement