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.
quelle
Antworten:
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:
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
,-overwrite
oder-update
Optionen)Die größte Einschränkung bei dieser Methode besteht darin, dass die Einrichtung kompliziert ist.
quelle
shp2pgsql
,psql
etc.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 .
quelle
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.
quelle
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.
quelle
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
quelle
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.
quelle
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.
quelle