Daten von ArcSDE nach PostGIS migrieren?


19

Es wurde vorgeschlagen, dass ich diese Frage erneut stelle, aber vielleicht anders formuliert, als wie man mehrere Shapefiles in PostGIS massenweise lädt .

Ich bin neu in Postgis und SQL, aber ich möchte Postgis (vorerst) als Slave für ArcSDE verwenden. Ich möchte daher herausfinden, wie ich ArcSDE-Daten jede Nacht stapelweise in PostGIS hochladen kann.

Ich kann ein Python-Skript zum nächtlichen Exportieren von ArcSDE-Daten in SHP erstellen, aber ich bin mir dann nicht sicher, wie ich die exportierten SHP-Dateien im Batch-Upload in PostGIS hochladen soll. Dabei werden die bereits in postgis vorhandenen Dateien als automatische Aufgabe überschrieben (Batch-Datei, denke ich) ).

Mein großer Plan ist es, ArcSDE / ArcGIS rechtzeitig durch PostGIS, QGIS und GeoServer oder MapServer zu ersetzen.


1
Verwaltet ArcSDE keinen RDBMS-Datenspeicher? In was sind deine Daten jetzt?
Sean

1
Welche Version von ArcSDE verwenden Sie? - ArcSDE 10 kann in Postgres schreiben. resources.arcgis.com/content/arcsde/10.0/…
Mapperz

Wenn Sie Meds Frage sorgfältig lesen, ist er / sie meines Erachtens wirklich bemüht, die Daten zu Test- und Webveröffentlichungszwecken auf PostGIS zu replizieren, bis er erfolgreich von ArcSDE wechseln kann. Es geht also nicht darum, ArSDE langfristig, sondern nur kurzfristig mit nativem PostGIS zu synchronisieren.
RyanDalton

Vielleicht war Synchronisieren eine schlechte Wahl des Fragetitels. In der Tat möchte ich dies als eine kurzfristige Methode zum Verschieben und Verwalten von Datensätzen von SDE nach PostGIS. Mein SDE hat ungefähr 600 Datensätze und ich möchte die Daten nicht manuell spiegeln. Med (mr).
Geosmiles

Antworten:


19

Anstatt eine DB -> Datei -> DB-Konvertierung durchzuführen, bei der Esri Shapefiles die zwischengeschaltete dateibasierte Komponente ist, könnte es sich lohnen, eine direktere DB -> DB-Übertragung zu untersuchen. Es gibt einige Tools, die dies tun können, aber ich konzentriere mich nur auf die Open-Source- GDAL / OGR- Tools.

Vorausgesetzt, Sie haben einen Windows-Server, können Sie GDAL / OGR einfach mit OSGeo4W installieren . Im erweiterten Installationsmodus können Sie benutzerdefinierte Paketkonfigurationen auswählen, z. B. den SDE- Treiber. (In dieser Liste der Pakete wird sichergestellt, dass eine geeignete Übereinstimmung für Ihre SDE-Version vorliegt. Es werden nur die SDE-Versionen 9.0 bis 9.2 unterstützt.) Diese Pakete sind nur die Header und Wrapper. Sie müssen die SDE-Bibliotheken installieren, die Sie auf einer CD / DVD-ROM haben sollten, und sicherstellen, dass die PATH-Variablen für GDAL / OGR entsprechend festgelegt sind, um sie zu finden. Bei einer erfolgreichen Installation wird "SDE" mit dem folgenden Befehl in einer OSGeo4W-Shell angezeigt:ogr2ogr --formats

Nachdem Sie GDAL / OGR konfiguriert haben, können Sie einige Tools verwenden:

  • Die Befehlszeilentool ogr2ogr von der OSGeo4W Schale, die einen Befehl so etwas wie benötigen: ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432" \ SDE:server,instance,database,username,password,layer,[version](Sie können auch die verschiedenen erkunden -append, -overwriteoder -updateOptionen)
  • Kopieren und ändern Sie ein vorhandenes Python-Skript , das eine Verbindung zu SDE herstellt, und ändern Sie es, um Daten an eine andere Datenquelle zu übertragen.

Die größte Einschränkung bei dieser Methode besteht darin, dass die Einrichtung kompliziert ist.


+1 für eine sehr klare und hilfreiche Antwort. Auch wenn es kompliziert ist, ist es ein direkter Weg.
DEWright

Theoretisch mag ich die Idee, einen direkten DB-Transfer zu machen, aber ich suche etwas 'Billy Basic'. Wir sind jedoch SDE 9.3.1 im Moment, daher ist die obige Antwort kein go'a. Wie gesagt, ich bin neu in PostGIS und SQL, aber ich hätte gedacht, dass es ein Skript gibt, mit dem Sie einen Bulk-Upload automatisieren können!
Geosmiles

1
Die andere Option "DB-> DB" für alle Versionen von SDE (und Hunderte anderer Formate / DBs) ist FME . FME ist nicht kostenlos (es gibt eine kostenlose Testversion, die Sie testen können). Dies bedeutet, dass sie Unterstützung für Ihre Synchronisierungslösung bieten können. Dafür ist natürlich ein Budget erforderlich. Die beste Option für zu schneidern einen guten BAT - Skript mit shp2pgsql, psqletc.
Mike T

2
Einer der Gründe, warum ich den ArcObjects GDAL-Treiber geschrieben habe, war genau dies. Da sie eine ESRI-Lizenz haben, wollten sie ihre komplexen FeatureClasses pflegen und sie jede Nacht an PostGIS senden. Der ArcSde-Treiber durchläuft die ArcSde-API-Ebene, der ArcObjects-Treiber jedoch ArcObjects. Wir benutzen es seit einem Jahr und es hat ganz gut funktioniert.
Ragi Yaser Burhum

Woher erhalten Sie den "SDE" -Treiber, damit Sie das vorhandene Python-Skript verwenden können? Ich kann nicht finden ...
ePascoal

6

PostGIS verfügt über einen Loader namens shp2pgsql , mit dem Sie Shapefiles in eine PostGIS-Datenbank laden können. Eine der Optionen ("-d") löscht die vorhandene Datenbanktabelle, bevor die Daten geladen werden. Es sollte ziemlich einfach sein, eine Batch-Datei oder ein Skript zu erstellen, das alle Shapefiles durchläuft und sie für Sie lädt.

Wenn Sie mehr darüber erfahren möchten, können Sie GDAL installieren, die OGR-Tools (die über einen ArcSDE-Connector verfügen) verwenden und den Shapefile-Export überspringen. Informationen zum ArcSDE-Connector finden Sie hier .


Kurz gesagt, wie / was würde ich ein Skript schreiben (das als geplante Windows-Aufgabe hinzugefügt werden soll), um eine vorhandene Tabelle zu löschen, sagen wir, es heißt Listed_Buildings und laden dann eine neuere Version davon hoch, die als shp in D: \ gespeichert ist? sde_export.
Geosmiles

1
Der Shapefile-Ansatz ist schlechter, wenn der Feldname größer als 11 Zeichen ist, da andere 11 Zeichen gelöscht werden !!
Islam

1

Ich weiß, dass ich zu spät zur Party komme, aber es gibt eine andere Option, die es vermeidet, zwei Datenbanken zu haben.

Sie können ArcSDE zusätzlich zu Postgresql + Postgis verwenden. Dies wäre dein Meister und nur db.

ArcSDE kann so konfiguriert werden, dass Postgis-Geometrien und keine st_geometries (ESRI-geschützt) verwendet werden.

Dies bedeutet, dass Sie mit einem beliebigen Postgis-Tool direkt in ArcSDE geladene / bearbeitete räumliche Tabellen verwenden können, da es sich tatsächlich um native Postgis-Tabellen handelt.

Beispielsweise können Sie mit qgis direkt eine Verbindung zur Postgis-Datenbank herstellen und dieselben Daten wie mit arcgis über arcsde lesen.


1

Ein anderer Ansatz wäre die Verwendung einer räumlichen ETL wie Geokettle (Open Source).

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

Ich benutze Geokettle, um Daten die ganze Zeit zwischen SQL Server und PostGIS zu verschieben. Während es jedoch gut mit PostGIS funktioniert, gibt es Probleme beim Arbeiten mit dem räumlichen Datentyp von SQL Server (siehe Hinweise unten). Dies setzt auch voraus, dass Sie SDE-Geometrien als systemeigenen räumlichen SQL Server-Datentyp speichern. Sie können dies mit dem Schlüsselwort "Geometry" tun, wenn Sie Daten über ArcCatalog laden.

Tipp 1: Wenn Sie Daten von SQL Server auswählen, wenden Sie .STAsText () auf das Geometriefeld an. Andernfalls wird Geokettle den SQL Server-Datentyp unterdrücken.

Tipp 2: Wenn Sie Daten in SQL Server einfügen, müssen Sie die Geometrie als Text in ein Textfeld einfügen. Verwenden Sie dann den SQL-Schritt, um eine neue Geometriespalte hinzuzufügen (falls erforderlich) und diese aus der Textgeometrie auszufüllen. Auf diese Weise verwenden Sie SQL Server, um die Geometrie aus einer OGC-Standardtextdarstellung einer Geometrie zu erstellen.

Tipp 3: Stellen Sie sicher, dass Sie Ihre neue räumliche Tabelle bei SDE registrieren.


Um SDE.ST_AsText () verwenden zu können, benötigen Sie SDE.ST_GEOMETRY_SHAPELIB_PKG. Stimmt das?
ePascoal

0

Erwägen Sie, die Datenbankreplikation auf der ursprünglichen 9,3-Datenbank einzurichten.
Es funktioniert nicht so gut wie die neuen 10, aber ...
replizieren Sie dies auf eine andere SDE in postgresql mit dem postgis-Datentyp pg_geometry.

Hier ist einige Esri-Hilfe ANMERKUNG
: Dies erfordert doppelte Lizenzen, wenn sich beide Datenbanken nicht auf demselben Computer befinden


Das Erhalten einer doppelten Lizenz scheint den Punkt zu besiegen, an dem man sich für Open Source entscheidet!
Geosmiles

Wenn Ihre ursprüngliche Datenbank in postgresql wäre, könnten Sie dies alles in derselben Datenbank tun (Multi-SDE-Instanzen). ODER installieren Sie postgresql auf demselben Computer wie Ihre SDE. Wenn nicht, können Sie die Entwicklung in Betracht ziehen und EDN (eine andere SDE) für den Zeitraum von ca. 2,5.000 Jahren kaufen.
Brad Nesom

0

Sie können ArcObjects schreiben an:

A) Sichern Sie Ihre arcsde-Datenbank. B) Einfacher c # -Code zum Generieren von shp2pgsql sqls; C) Einfacher c # -Code zum Sichern alter Tabellen; D) Plain c #, um alle shp2pgsql in Ihrem Postgresql auszuführen;

Sie können den npgsql-Treiber verwenden, um dies zu erreichen und Funktionen und SQL-Anweisungen direkt in Ihrer postgis-Datenbank auszuführen.


0

Was ist Ihre ArcSDE-Geometrie ( Geodatabase-Speicher in relationalen Datenbanken )? In einem solchen Szenario können Sie den ST_Geometry-Typ verwenden und anschließend PostGre / PostGIS-Replikationstools ( PostGIS Replication @ FOSS4G ) verwenden. Dieses Schema bietet möglicherweise den Vorteil, dass ArcSDE- / ArcGIS- / Geodatabase-Features für Edition (Editionsdatenbank) und Open Source-Tools für die Diffusion (replizierte Diffusionsdatenbank) verwendet werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.