cours oracle spatial - upvm | accueil · neuchâtel, novembre 2004 5 introduction concepts de...

21
Neuchâtel, novembre 2004 1 données spatiales données spatiales données spatiales Copyright © Oracle Corporation, 2002 Oracle Spatial Daniel 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 Introduction Introduction 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

Upload: lamxuyen

Post on 10-Nov-2018

223 views

Category:

Documents


0 download

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.