Vous migrez des données d'ArcSDE vers PostGIS?


19

Il a été suggéré que je pose à nouveau cette question, mais peut-être libellé différemment de la façon de charger en bloc plusieurs fichiers de formes dans PostGIS .

Je suis nouveau sur postgis et sql mais je veux utiliser postgis comme esclave (pour le moment) d'ArcSDE. Par conséquent, ce que je recherche, c'est de l'aide pour savoir comment je pourrais procéder au téléchargement par lots de données ArcSDE dans PostGIS tous les soirs.

Je peux produire un script python pour exporter les données ArcSDE dans SHP tous les soirs, mais je ne sais pas comment télécharger par lots les fichiers SHP exportés dans PostGIS, écrasant ceux qui existaient déjà dans postgis tout comme une tâche automatisée (fichier batch je suppose ).

Mon grand plan est de remplacer ArcSDE / ArcGIS à temps par PostGIS, QGIS et GeoServer ou MapServer.


1
ArcSDE ne gère-t-il pas une banque de données RDBMS? Quelles sont vos données maintenant?
Sean

1
Quelle version d'ArcSDE utilisez-vous? - ArcSDE 10 peut écrire dans Postgres. resources.arcgis.com/content/arcsde/10.0/…
Mapperz

Si vous lisez attentivement la question de Med, je pense qu'il essaie vraiment de répliquer les données sur PostGIS à des fins de test et de publication Web jusqu'à ce qu'il puisse réussir la transition d'ArcSDE. Il ne s'agit donc pas de synchroniser ArSDE avec PostGIS natif à long terme, mais uniquement à court terme.
RyanKDalton-OffTheGridMaps

La synchronisation était peut-être un mauvais choix de titre de question. En effet, je veux que ce soit une méthode à court terme pour déplacer et maintenir des ensembles de données de SDE vers PostGIS. mon SDE contient environ 600 jeux de données et je ne veux pas reproduire les données manuellement. Med (mr).
geosmiles

Réponses:


19

Plutôt que de faire une conversion DB -> fichier -> DB, où Esri Shapefiles est le composant basé sur un fichier intermédiaire, il pourrait être utile d'enquêter sur un transfert DB -> DB plus direct. Il existe quelques outils qui peuvent le faire, mais je me concentre uniquement sur les outils open source GDAL / OGR .

En supposant que vous disposez d'un serveur Windows, vous pouvez facilement installer GDAL / OGR à l'aide d' OSGeo4W . Avec le mode d'installation avancée, vous avez la possibilité de sélectionner des configurations de packages personnalisées, telles que le pilote SDE (consultez cette liste de packages pour vous assurer qu'il existe une correspondance appropriée pour votre version SDE - seules les versions SDE 9.0 à 9.2 sont prises en charge). Ces packages ne sont que les en-têtes et les wrappers, et vous obligent à installer les bibliothèques SDE, que vous devriez avoir sur un CD / DVD ROM, et à vous assurer que les variables PATH sont correctement définies pour que GDAL / OGR les trouve. Une installation réussie affichera "SDE" quelque part avec la commande suivante dans un shell OSGeo4W:ogr2ogr --formats

Après avoir configuré GDAL / OGR, vous pouvez utiliser quelques outils:

  • L'outil de ligne de commande ogr2ogr de la coquille OSGeo4W, qui aura besoin d' une commande comme: ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432" \ SDE:server,instance,database,username,password,layer,[version](vous pouvez aussi explorer les différents -append, -overwriteou -updateoptions)
  • Copiez et modifiez un script Python existant qui se connecte à SDE, et vous pouvez le modifier pour transférer des données vers une autre source de données.

La mise en garde majeure de cette méthode est qu'elle est compliquée à configurer.


+1 pour une réponse très claire et utile. Même compliqué, c'est un chemin direct.
DEWright

En théorie, j'aime l'idée de faire un transfert direct de base de données, mais je cherche quelque chose de «basique». Cependant, nous sommes SDE 9.3.1 au mo, donc la réponse ci-dessus n'est pas un go'a. Comme je le dis, je suis nouveau sur PostGIS et SQL mais j'aurais pensé qu'il y avait un script «là-bas» où vous pouviez automatiser un téléchargement en masse!
geosmiles

1
L'autre option "DB-> DB" pour toutes les versions de SDE (et des centaines d'autres formats / DB) est FME . FME n'est pas gratuit (il existe un essai gratuit que vous pouvez tester), ce qui signifie qu'il peut fournir une assistance pour aider votre solution de synchronisation. Mais cela nécessite évidemment un budget. La meilleure option est libre d'adapter un bon scénario de BAT shp2pgsql, psqletc.
Mike T

2
L'une des raisons pour lesquelles j'ai écrit le pilote ArcObjects GDAL était de faire exactement cela. Puisqu'ils ont une licence ESRI, ils voulaient maintenir leurs FeatureClasses complexes et les vider sur PostGIS tous les soirs. Le pilote arcsde passe par la couche api arcsde, mais le pilote arcobjects passe, eh bien, par les arcobjects. Nous l'utilisons depuis un an et cela a très bien fonctionné.
Ragi Yaser Burhum

Où obtenez-vous le pilote "SDE" pour pouvoir utiliser ce script Python existant? Je ne trouve pas ...
ePascoal

6

PostGIS possède un chargeur nommé shp2pgsql que vous pouvez utiliser pour charger des fichiers de formes dans une base de données PostGIS. L'une de ses options ("-d") supprime la table de base de données existante avant de charger les données. Il devrait être assez simple de créer un fichier de commandes ou un script qui peut parcourir tous les fichiers de formes et les charger pour vous.

Si vous vouliez vous familiariser avec cela, vous pouvez installer GDAL et utiliser les outils OGR (qui ont un connecteur ArcSDE) et ignorer l'exportation du fichier de formes. Des informations sur le connecteur ArcSDE peuvent être trouvées ici .


En termes de base, comment / que devrais-je écrire un script (à ajouter en tant que tâche planifiée Windows) pour supprimer une table existante, disons son appelé Listed_Buildings, puis téléchargez une version plus récente de celle-ci conservée en tant que shp dans D: \ sde_export.
geosmiles

1
L'approche du fichier de formes est pire lorsque le nom du champ est supérieur à 11 caractères car les 11 autres caractères seront supprimés !!
SIslam

1

Je sais que je suis en retard à la fête mais il y a une autre option pour cela qui évite d'avoir 2 bases de données.

Vous pouvez avoir ArcSDE au-dessus de Postgresql + Postgis. Ce serait votre maître et seulement db.

ArcSDE peut être configuré pour utiliser des géométries postgis et non st_geometries (propriétaire ESRI).

Cela signifie que vous pouvez ensuite utiliser n'importe quel outil postgis pour utiliser directement les tables spatiales chargées / éditées ArcSDE, car il s'agit en fait de tables natives postgis.

Par exemple, vous pouvez utiliser qgis pour vous connecter directement à la base de données postgis et lire les mêmes données que arcgis via arcsde.


1

Une autre approche consisterait à utiliser un ETL spatial comme Geokettle (open source).

http://www.spatialytics.org/projects/geokettle/

J'utilise Geokettle pour déplacer des données entre le serveur SQL et PostGIS tout le temps. Cependant, bien qu'il fonctionne bien avec PostGIS, il existe des défis lors de l'utilisation du type de données spatiales de SQL Server (voir les conseils ci-dessous). En outre, cela suppose que vous stockez des géométries SDE en tant que type de données spatiales natives SQL Server. Vous pouvez le faire avec le mot clé Geometry lors du chargement de données via ArcCatalog.

Astuce 1: lors de la sélection des données du serveur SQL, appliquez .STAsText () au champ de géométrie ou Geokettle s'étouffera avec le type de données du serveur SQL.

Astuce 2: Lors de l'insertion de données dans le serveur SQL, vous devrez insérer la géométrie sous forme de texte dans un champ de texte. Utilisez ensuite l'étape sql pour ajouter une nouvelle colonne de géométrie (si nécessaire) et remplissez-la à partir de la géométrie du texte. De cette façon, vous utilisez SQL Server pour créer la géométrie à partir d'une représentation textuelle standard OGC d'une géométrie.

Astuce 3: assurez-vous d'enregistrer votre nouvelle table spatiale avec SDE.


pour utiliser SDE.ST_AsText (), vous aurez besoin de SDE.ST_GEOMETRY_SHAPELIB_PKG, ai-je raison?
ePascoal

0

Envisagez de configurer la réplication de la base de données sur la base de données d'origine de 9,3.
Cela ne fonctionne pas aussi bien que le nouveau 10 mais ...
répliquez cela à un autre sde dans postgresql en utilisant le type de données postgis pg_geometry.

Voici une aide esri
REMARQUE: cela nécessitera des licences en double si les deux dbs ne sont pas sur la même machine


Obtenir une licence en double semble vaincre le point de passer à l'open source!
geosmiles

Si votre base de données d'origine était en postgresql, vous pourriez tout faire dans la même base de données (instances multi-sde). OU installez postgresql sur la même machine que votre sde. Sinon, vous pourriez envisager le développement et acheter EDN (un autre sde) pour l'intérim ~ 2,5k ans.
Brad Nesom

0

Vous pouvez écrire ArcObjects dans:

A) vider votre base de données arcsde; B) Code c # simple pour générer des sql shp2pgsql; C) Code c # simple pour vider les anciennes tables; D) C # simple pour exécuter tous les shp2pgsql dans votre postgresql;

Vous pouvez utiliser le pilote npgsql pour y parvenir, en exécutant des fonctions et des instructions sql directement dans votre base de données postgis;


0

Quelle est votre géométrie ArcSDE ( stockage de géodatabase dans des bases de données relationnelles )? Dans un tel scénario, vous pouvez envisager d'utiliser le type ST_Geometry, puis d'utiliser les outils de réplication PostGre / PostGIS ( PostGIS Replication @ FOSS4G ). Ce schéma peut avoir l'avantage d'utiliser les fonctionnalités ArcSDE / ArcGIS / géodatabase pour l'édition (base de données d'édition) et les outils open source pour la diffusion (base de données de diffusion répliquée).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.