Oracle Spatial

Ce pilote gère la lecture et l’écriture de données dans le format objet-relationnel d’Oracle Spatial (8.1.7 et plus récent). Le pilote d’Oracle Spatial n’est pas compilé par défaut dans OGR, mais peut l’être sur les plateformes où les bibliothèques cliente d’Oracle sont disponible.

Lors de l’ouverture d’une base de données, son nom doit être définie sous la forme <<OCI:userid/password@database_instance:table,table>>. La liste des tables est optionnelle. La partie database_instance peut être omise lors de l’accès à l’instance de base de données local par défaut.

Si la liste des tables n’est pas fournie, alors toutes les tables apparaissant dans la table ALL_SDO_GEOM_METADATA seront traité par OGR comme des couches avec les noms de table comme nom de couche. Les tables non-spatiales ou les tables spatiales non listé dans la table ALL_SDO_GEOM_METADATA ne sont pas accessible à moins de les lister dans le nom de la source de données. Même dans des bases de donnés où toutes les couches désirées sont dans la table ALL_SDO_GEOM_METADATA, il peut être préférable de lister seulement les tables à utiliser puisque cela peut réduire substantiellement le temps d’initialisation dans les bases de données avec beaucoup de tables.

Si la table à une colonne de type entier appelée OGR_FID il sera utilisé comme identifiant d’objet par OGR (et il n’apparait pas comme un attribut normal). Lors du chargement des données dans Oracle Spatial, OGR créera toujours le champ OGR_FID.

Problèmes avec SQL

Par défaut le pilote d’Oracle envoie une requête SQL directement au moteur Oracle plutôt que de l’évaluer en interne lors de l’utilisation de l’appel ExecuteSQL() sur OGRDataSource, ou l’option de commande -sql à ogr2ogr. Les expressions de requête d’attributs sont également envoyé à Oracle.

De même deux commandes spéciales sont gérées via l’interface ExecuteSQL(). Ce sont “DELLAYER:<table_name>” pour supprimer une couche et “VALLAYER:<table_name>” pour appliquer une vérification SDO_GEOM.VALIDATE_GEOMETRY() sur la couche. En interne, ces pseudo-commandes sont traduit en commandes plus complexe pour Oracle.

Il est également possible de demander au pilote de prendre en charge les commandes SQL avec le SQL dans OGR, en envoyant la chaine “OGRSQL” à la méthode ExecuteSQL() comme nom du dialecte SQL.

Avertissements

  • La logique de reconnaissance de type est actuellement assez pauvre. Aucun effort n’est fait pour préserver la longueur réelles pour les champs de type entier et réel.
  • Différents types tels que les objets et les BLOBs dans Oracle seront complètement ignorés par OGR.
  • Actuellement les sémantiques de transaction d’OGR ne sont pas proprement liées aux sémantiques de transaction dans Oracle.
  • Si un attribut appelée OGR_FID existe dans le schéma pour les tables lues, il sera utilisé comme FID. Les lectures aléatoires (basé sur le FID) sur des tables sans champ FID identifié (et indexé) peut être très lente. Pour forcer l’utilisation d’un nom de champ particulier la variable de configuration OCI_FID (c’est à dire une variable d’environnement) peut être définie par le nom du champ cible.
  • Les types de géométries courbes sont convertie en linestrings ou en anneau linéaire en segments de 6 degrés lors de la lecture. Le pilote ne gère pas l’écriture de géométries courbes.
  • Il n’y a pas de gestion pour les nuages de point(SDO_PC), TIN (SDO_TIN) et les types de données de texte d’annotation dans Oracle Spatial.

Problèmes de création

Le pilote Oracle Spatial ne gère pas la création de nouveaux jeux de données (instances de bases de données), mais il doit permettre la création de nouvelles couches dans une base de données existantes.

Dès la fermeture de OGRDataSource les nouvelles couches créées auront un index spatial automatiquement créé. À ce moment la table USER_SDO_GEOM_METADATA sera également mise à jour avec les limites pour la table basé sur les objets qui ont été réellement écris. Une conséquence de cela est qu’une fois que une couche a été chargée il n’est généralement pas possible de charger des objets additionnel en dehors de l’étendue originel sans modifier manuellement l’information DIMINFO dans USER_SDO_GEOM_METADATA et reconstruire l’index spatial.

Options de création de couche

  • OVERWRITE : peut être YES pour forcer une couche existante au nom désiré d’être détruite avant la création de la couche demandée.
  • TRUNCATE : peut être à “YES” pour forcer la table existante pour être réutilisée, mais en vidant la table, préservant les indexes ou les dépendances.
  • LAUNDER : peut être YES pour forcer les nouveaux champs créés sur cette couche à avoir leurs noms de champ “nettoyer” dans une forme plus compatible avec Oracle. Cela convertit les lettres en minuscule et certains caractères spéciaux comme - et # en _. La valeur par défaut est NO.
  • PRECISION : peut être YES pour forcer de nouveaux champs à créer sur cette couche pour essayer et représenter l’information de la largeur et de la précision, en utilisant les types NUMBER(largeur,précision) ou VARCHAR2(largeur) si disponible. Si NO alors les les types NUMBER, INTEGER et VARCHAR2 seront utilisés à la place. La valeur par défaut est YES.
  • DIM : peut être définie à 2 ou 3 pour forcer la dimension de la couche créée. S’il n’est pas définie, 3 est utilisé par défaut.
  • INDEX : peut être définie à OFF pour désactiver la création d’un index spatial quand une couche est chargé complètement. Par défaut un index est créé si n’importe quel objet d’une couche possède des géométries valides.
  • INDEX_PARAMETERS : peut être utilisé pour passer des paramètres de création lorsque l’index spatial est créé. Par exemple définir INDEX_PARAMETERS à SDO_LEVEL=5 entrainera l’utilisation d’un index à tuile de 5 niveaux. Par défaut aucun paramètre n’est passé entrainant la création d’un index spatial R-Tree.
  • DIMINFO_X : peut être définie aux valeurs xmin,xmax,xres pour contrôler l’information de la dimension X écrite dans la table USER_SDO_GEOM_METADATA. Par défaut les étendues sont collectées à partir des données écrites réelles.
  • DIMINFO_Y : peut être définie aux valeurs ymin,ymax,yres pour contrôler l’information de la dimension Y écrite dans la table USER_SDO_GEOM_METADATA. Par défaut les étendues sont collectées à partir des données écrites réelles.
  • DIMINFO_Z : peut être définie aux valeurs zmin,zmax,zres pour contrôler l’information de la dimension Z écrite dans la table USER_SDO_GEOM_METADATA. Par défaut les valeurs fixées de -100000,100000,0.002 sont utilisées pour les couches avec une 3e dimension.
  • SRID : Par défaut, ce pilote tentera de trouver une ligne existante dans la table MDSYS.CS_SRS avec un système de coordonnées au format Well known Text correspondant exactement à celui du jeu de données. Si aucun n’est trouvé, une nouvelle ligne sera ajoutée à cette table. L’option de création de SRID permet aux utilisateurs de forcer l’utilisation d’un SRID Oracle existant même s’il ne correspond pas exactement au WKT auquel le pilote s’attend.
  • MULTI_LOAD : Si activé les nouveaux objets seront créés en groupe de 100 par commande INSERT SQL, au lieu que chaque objet soit une commande INSERT séparée. En ayant cela activé est le moyen le plus rapide de charger des données rapidement. Le mode multi-load est activé par défaut, et peut être forcé pour ne pas l’être pour les couches existantes ou pour les nouvelles couches en la définissant à NO.
  • LOADER_FILE : Si cette option est définie, toutes les informations des objets seront écrites dans un fichier utilisable avec le chargeur SQL au lieu d’être insérées directement dans la base de données. La couche en elle-même est toujours créée dans la base de données immédiatement. La gestion du chargeur SQL est encore expérimentale, et généralement le mode MULTI_LOAd activé doit être utilisé à la place lors des essaies pour des performances optimales des chargements.
  • GEOMETRY_NAME : Par défaut OGR créé de nouvelles tables avec une colonne géométrique nommé ORA_GEOMETRY. Si vous préférez utiliser un nom différent, il peut être fournit avec l’option de création de couche GEOMETRY_NAME.

Exemple

Simple traduction d’un shapefile vers Oracle. La table ‘ABC’ sera créée avec les objets provenant du fichier abc.shp et les attributs du fichier abc.dbf.

% ogr2ogr -f OCI OCI:warmerda/password@gdal800.dreadfest.com abc.shp

Ce second exemple charge une couche des frontières politique à partir d’un VPF (avec le [[ogr_ogdi|pilote OGDI]]), et renomme la couche à partir de la couche mystérieuse d’OGDI en quelque chose de plus compréhensible. Si une table existante au nom désiré existe elle sera écrasée.

% ogr2ogr  -f OCI OCI:warmerda/password \
    gltp:/vrf/usr4/mpp1/v0eur/vmaplv0/eurnasia \
    -lco OVERWRITE=yes -nln polbndl_bnd 'polbndl@bnd(*)_line'

Cet exemple montre l’utilisation d’ogrinfo pour évaluer une commande de requête SQL dans Oracle. Des requêtes spécifique sophistiquées d’Oracle Spatial peuvent également être utilisé via l’option en ligne de commande -sql d’ogrinfo.

ogrinfo -ro OCI:warmerda/password -sql "SELECT pop_1994 from canada where province_name = 'Alberta'"

Crédits

Le développeur voudrait remercier la société SRC, LLC pour son apport financier au développement de pilote.

Table des Matières

Sujet précédent

UK .NTF

Sujet suivant

ODBC RDBMS

Cette page