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