Suite

Comment ajouter des tables spatiales Oracle à QGIS ?

Comment ajouter des tables spatiales Oracle à QGIS ?


J'ai joué à QGIS Chugiak (2.4.0). J'ai essayé d'ajouter des tables Oracle Spatial (classes d'entités ponctuelles, linéaires et surfaciques) au bureau. Les mêmes tables que j'utilise dans ArcGIS. J'ai réussi à faire fonctionner la connexion en suivant les instructions ici, mais 2 choses se produisent :

  1. Toutes les tables de ma base de données ne sont pas remplies
  2. Lorsque je développe les groupes de propriétaires pour obtenir la liste des tables, les tables sont toutes grisées.

Je ne sais pas pourquoi l'une ou l'autre de ces choses se produisent. Dans le premier numéro, je ne vois pas qu'il s'agisse d'un problème d'autorisations car je me connecte à la connexion Oracle avec mes informations d'identification Oracle qui sont déjà liées à mon compte Oracle et devraient donc accorder l'accès à la table, donc je ne sais pas ce qui se passe Ici.

Dans le deuxième numéro, je n'arrive pas à comprendre pourquoi les tableaux sont grisés. J'ai essayé de définir une référence spatiale sous le champ SRID, mais cela ne fonctionne pas. Aucune suggestion?

ÉDITER:

J'ai résolu ce problème des tables de caractéristiques grisées. J'ai défini le champ SRID sur une référence spatiale pertinente et la "colonne de clé primaire" doit également être renseignée. J'ai utilisé OBJECTID car il s'agit du champ principal de mes classes d'entités. Je peux donc maintenant ajouter mes classes d'entités. J'ai toujours des problèmes pour remplir toutes les tables. J'en ai plusieurs centaines et seulement 7 d'entre eux sont en cours de chargement.


J'ai eu le même problème.Spécifiez le SRID comme 4326 ou quelque chose de pertinent.Je ne suis pas sûr que QGIS ne puisse pas détecter le SRID automatiquement.


2 types de données spatiales et métadonnées

Oracle Spatial se compose d'un ensemble de types de données d'objet, de méthodes de type et d'opérateurs, de fonctions et de procédures qui utilisent ces types. Une géométrie est stockée en tant qu'objet, sur une seule ligne, dans une colonne de type SDO_GEOMETRY. La création et la maintenance de l'index spatial sont effectuées à l'aide d'instructions DDL de base (CREATE, ALTER, DROP) et DML (INSERT, UPDATE, DELETE).

Ce chapitre commence par un exemple simple qui insère, indexe et interroge des données spatiales. Vous trouverez peut-être utile de lire rapidement cet exemple avant d'examiner les informations détaillées sur le type de données et les métadonnées plus loin dans le chapitre.

Ce chapitre contient les sections principales suivantes :


1 réponse 1

ironique, j'avais en fait une erreur similaire aujourd'hui lorsque j'essayais d'enregistrer des données dans un géopackage. (C'est-à-dire que je n'obtiens pas l'erreur lors de l'insertion, je l'obtiens en appuyant sur Enregistrer). J'ai eu une erreur légèrement différente : 'QGIS error creation feature -16 : échec de la préparation de SQL : INSERT INTO. etc.
Cependant, mon erreur était liée au fait que le nom de l'attribut de géométrie avait en quelque sorte été créé en tant que "geom". et le code GDAL recherche un attribut géométrique appelé « géométrie ». J'ai recréé ma table de géopackage, avec l'attribut nommé 'géométrie' et les valeurs z, et plus de problèmes, (même si les données source n'ont pas de z).

Cependant, je ne pense pas que ce soit votre problème - il se peut que les données source n'aient pas de z - Vous pouvez peut-être essayer de définir une procédure quelque part ou un champ dérivé, de sorte que la valeur z soit renseignée lors de l'insertion. Le code d'erreur donne l'impression que la source n'a pas de valeur z (c'est-à-dire : dimensions géométriques) ou que l'indexation de la couche n'est pas configurée pour gérer z (c'est-à-dire : dimensionnalité de la couche de routine ODCIINDEXINSERT). Cela peut être le point de départ pour vous-même.


Types de données géométriques

ArcGIS crée et peut utiliser deux types de données géométriques dans Oracle : Esri ST_Geometry et Oracle SDO_Geometry.

ST_Géométrie

Le type de données ST_Geometry implémente la spécification SQL 3 des types de données définis par l'utilisateur (UDT), vous permettant de créer des colonnes capables de stocker des données spatiales telles que l'emplacement d'un point de repère, d'une rue ou d'une parcelle de terrain. Il fournit un accès en langage de requête structuré (SQL) conforme à l'Organisation internationale de normalisation (ISO) et à l'Open Geospatial Consortium, Inc. (OGC) à la géodatabase et à la base de données. Ce stockage étend les capacités de la base de données en fournissant un stockage pour les objets (points, lignes et polygones) qui représentent des entités géographiques. Il a été conçu pour utiliser efficacement les ressources de la base de données, pour être compatible avec les fonctionnalités de base de données telles que la réplication et le partitionnement, et pour fournir un accès rapide aux données spatiales.

SDO_Géométrie

SDO_Geometry est implémenté à l'aide d'un système de type objet-relationnel extensible Oracle. Le type SDO_Geometry est proposé par Oracle à l'aide de deux options principales :

  • Oracle Spatial est une fonctionnalité facultative d'Oracle Database Enterprise Edition. En plus de fournir le type SDO_Geometry, Oracle Spatial fournit un certain nombre de fonctionnalités géospatiales supplémentaires.
  • Oracle Locator fournit un sous-ensemble de fonctionnalités Oracle Spatial. Il est inclus en tant que fonctionnalité standard des éditions Oracle Database Standard et Enterprise. Entre autres fonctionnalités, il fournit le type de géométrie Oracle Spatial (appelé SDO_Geometry) et une API SQL à ce contenu.

ArcGIS prend en charge SDO_Geometry comme méthode facultative pour stocker des données spatiales. Plus précisément, la géométrie Oracle Spatial ou Locator peut être utilisée pour stocker et gérer le contenu des entités et des rasters des jeux de données dans les géodatabases d'entreprise ou les bases de données Oracle.

Pour plus d'informations sur SDO_Geometry, consultez la documentation Oracle.


Chargement des données spatiales

L'étape suivante consiste à ajouter ou à “importer” des tables avec des données spatiales. Nous utiliserons deux couches, une couche de polygones d'état du recensement américain et un fichier de points d'emplacements d'éoliennes de l'USGS. Avec ces couches, nous pouvons effectuer une requête classique “point in poly”, en trouvant tous les points dans un polygone d'état. Pour commencer, téléchargez le fichier de formes d'état “cb_2017_us_state_20m.zip” à partir de :

"Décompressez le fichier, puis nous utiliserons shp2pgsql, un utilitaire de ligne de commande qui a déjà été installé avec Postgis, quelle que soit la méthode que vous avez suivie. Vous pouvez trouver la documentation sur cet outil en ligne de commande dans la documentation officielle de Postgis :

La commande dont nous aurons besoin pour le fichier de formes d'état sur le Mac est :

Pour Windows, c'est légèrement différent

Notez que quelle que soit la façon dont la sortie est affichée, cette commande vous invite à entrer votre mot de passe, alors entrez-le et appuyez sur Entrée lorsque vous y êtes invité. Notez également que le drapeau “-I” est utilisé pour créer automatiquement l'index spatial dont nous aurons besoin pour interroger correctement cette couche (voir le lien postgis ci-dessus pour tous les drapeaux disponibles).

Projections

Comment avons-nous su inclure le SRID de 4269 (le drapeau -s d'en haut) ? Si vous ne savez pas ce qu'est le SRID ou comment le trouver, vous pouvez consulter ceci :

Pour convertir rapidement le .prj (fichier de projection) du shapefile vers le SRID nécessaire, vous pouvez utiliser ce site Web :

Ou importez le fichier dans votre SIG préféré (nous utilisons QGIS) et regardez les informations de projection.

Convertir le fichier des éoliennes

Le prochain fichier dont nous avons besoin est l'emplacement des éoliennes qui sont disponibles à partir d'ici :

Même s'il existe un shapefile disponible, assurez-vous de télécharger le fichier GeoJSON, car cela nous obligera à explorer un autre outil indispensable pour travailler avec des données géographiques. “ogr2ogr” est un outil en ligne de commande qui n'est pas développé par Postgis, mais qui est installé en tant que dépendance. Il fait partie de GDAL (Geospatial Data Abstraction Library), qui est utilisé par de nombreux projets de logiciels géospatiaux, et peut également être utilisé directement sur la ligne de commande. Pour importer le fichier de points sur Mac, procédez comme suit :

pour Windows, vous devriez pouvoir utiliser exactement la même commande, mais il semble que la version actuelle du programme d'installation d'EDB Postgres soit livrée avec une version d'ogr2ogr qui ne prend pas en charge Postgres ! Ainsi, vous pouvez soit continuer en important le fichier de formes à la place :

ou installez une version différente d'ogr2ogr à partir de ce package bien connu et apprécié :

Notez que bien que les liens ci-dessus continuent de fonctionner, les noms de fichiers des fichiers geojson et shp peuvent changer, alors regardez les noms des fichiers qui sont téléchargés et mettez à jour le nom de fichier “uswtdb_****” ci-dessus pour correspondre lors de l'utilisation de ces commandes.


Section 2. Interopérabilité des données

Dans cette section, vous apprendrez comment QGIS gère différents types de données, comment ouvrir et importer des fichiers dans QGIS. Vous pouvez également voir comment utiliser la source de données en ligne à l'aide du service WMS, WMTS.

  • Si vous avez des fichiers spatiaux au format Mapinfo (TAB), vous pouvez facilement Importer la table Mapinfo dans QGIS. Il est très facile d'importer une table Mapinfo dans QGIS sans perdre aucune information.
  • Si vous n'avez pas de données pour commencer, pas de problème, ce didacticiel vous montrera comment créer un nouveau fichier de formes sur QGIS. . WMTS (Web Map Tile Service) est un service de cartographie en ligne. Découvrez comment configurer WMTS sur QGIS.
  • Vous souhaitez afficher vos données dans Google Earth ? Eh bien, lisez ceci comment exporter au format KML à partir de QGIS qui vous aidera à exporter votre fichier au format KML à partir de QGIS. Ce tutoriel vous guidera sur la façon d'ouvrir une table PostgreSQL non spatiale dans QGIS. Si vous avez des données X, Y sans aucune information spatiale, vous pouvez suivre ce tutoriel. Nous pouvons ensuite construire ou créer des points à l'aide de cette table.

Types de données texte

Lorsque vous choisissez d'inclure un champ de texte dans la table que vous créez à l'aide d'ArcGIS, le type de données varchar2 est utilisé si la base de données n'est pas configurée pour utiliser le codage Unicode. Si vous définissez une taille de champ de texte supérieure à 4 000 et que la base de données n'est pas configurée pour utiliser le codage Unicode, le type de données Oracle sera CLOB.

Un champ de texte sera créé en tant que nvarchar2 si la base de données est configurée pour utiliser le codage Unicode. (Il s'agit du paramètre par défaut pour les géodatabases dans Oracle .) Si vous définissez une taille de champ de texte supérieure à 2 000 et que la base de données est configurée pour utiliser le codage Unicode, le type de données Oracle sera NCLOB.


Le document complet contient plus d'exemples, mais voici l'extrait dont vous avez besoin.

En plus d'enregistrer le Lat&Lng dans la colonne SDO_GEOMETRY comme l'a dit Kris Rice, vous pouvez utiliser les nombreuses fonctionnalités utiles d'Oracle Spatial et d'Oracle Locator pour obtenir des résultats utiles.

Pour utiliser ces fonctionnalités, les étapes ci-dessous doivent être suivies :

  1. Modifiez la table pour ajouter une colonne de géométrie (SDO_GEOMETRY).
  2. Mettez à jour la table pour remplir les objets SDO_GEOMETRY à l'aide des valeurs de données liées à l'emplacement existantes.
  3. Mettez à jour les métadonnées spatiales (USER_SDO_GEOM_METADATA).
  4. Créez l'index spatial sur la table.

Le détail des étapes ci-dessus est expliqué ici.

Une fois les étapes ci-dessus terminées, vous pouvez utiliser les opérateurs utiles fournis par Oracle Locator. Par exemple, vous pouvez trouver les emplacements qui se trouvent à moins de X mètres d'un point donné. Pour plus de détails, lisez ce document Oracle.


Le workflow de transformation des données

Nous commençons par lire un fichier CSV et parcourons chaque ligne indépendamment. Nous interrogerons une API XML pour ajouter plus de données à chaque élément de chaque ligne. Enfin, nous collecterons et agrégerons toutes les lignes pour créer un fichier GeoJSON et le stocker dans une base de données PostgreSQL. Bien que cela ne soit pas démontré, nous utilisons l'extension PostGIS pour ajouter des capacités spatiales à la base de données PostgreSQL. La figure 1 décrit le flux de travail.

Après avoir défini le workflow, nous utiliserons un fichier Java pour l'implémenter avec Camel K. Notez que Camel K prend en charge de nombreux langages en plus de Java. Vous pouvez utiliser l'un des langages pris en charge pour implémenter ce flux de travail.


Le problème

MySQL 8.0 a besoin de savoir si l'index est cartésien ou géographique. Cela dépend du SRID des données dans la colonne. Malheureusement, la version 5.7 et les versions antérieures ne limitent pas un index à un seul SRID, de sorte que l'index peut contenir à la fois des données cartésiennes et géographiques. C'est bien tant que MySQL ignore le SRID (comme le fait la version 5.7 et les versions antérieures), mais cela ne fonctionnera pas dans la version 8.0. Par conséquent, Les index 5.7 ne sont pas utilisés par l'optimiseur 8.0.

Donc, si nous avons un index spatial et que nous passons à 8.0, nous devons

  1. Assurez-vous qu'il n'y a que des géométries dans un SRID dans la colonne indexée
  2. Dites à MySQL quel SRID utiliser pour l'index
  3. Recréer l'index

Le premier point est quelque chose que nous pouvons faire avant la mise à niveau. Les deux dernières étapes doivent être effectuées après la mise à niveau.


Conclusion

Pratiquement toutes les bases de données de clients et de transactions, les entrepôts de données et les magasins de données contiennent des données basées sur la localisation. Il est partout et peut être utilisé pour fournir des informations précieuses sur les tendances du marché, la disponibilité de nouveaux marchés et opportunités, et peut servir d'ensemble de données commun pour tisser divers ensembles de données.

Le SGBDR Oracle peut servir de référentiel sécurisé, évolutif et ouvert pour vos données géolocalisées, la plupart des besoins de l'organisation étant satisfaits par la fonction de base de données gratuite Oracle Locator et avec Oracle Spatial pour les besoins d'analyse spatiale plus exigeants. Il est facile d'améliorer vos ensembles de données avec des données basées sur la localisation, et si vous disposez d'une licence Oracle Application Server et JDeveloper, c'est un processus simple pour ajouter une fonctionnalité de mappage à vos applications de business intelligence.

Pour plus de détails sur Oracle Locator et Oracle Spatial, n'oubliez pas de consulter mon Oracle Weblog et le Oracle GIS Weblog de Justin Lokitz, consultez les pages d'accueil OTN Locator et Spatial and Map Viewer, et découvrez la gamme de partenaires SIG qui les prennent en charge. technologies Oracle.

Mark Rittman est un DBA professionnel certifié Oracle et travaille en tant que consultant manager chez SolStonePlus, spécialisé dans le développement d'applications BI et DW utilisant la base de données Oracle, le serveur d'applications, Discoverer, Warehouse Builder et Oracle OLAP. En dehors de Plus Consultancy, Mark préside le SIG UKOUG BI et Reporting Tools, et gère un blog dédié à la technologie Oracle BI et Data Warehousing. Mark a récemment reçu un OTN Community Award pour ses contributions à la communauté des développeurs Oracle, et est un conférencier régulier lors d'événements Oracle User au Royaume-Uni et en Europe.

Mark tient également à remercier Justin Lokitz pour sa collaboration avec cet article. Justin est consultant senior en ventes chez Oracle Corporation, spécialisé dans le développement SIG et J2EE.


Voir la vidéo: Ajouter,supprimer une colonne du tableau en SQL