Mehr

So migrieren Sie räumliche Tabellen von MSSQL zu PostGIS

So migrieren Sie räumliche Tabellen von MSSQL zu PostGIS


Ich möchte meine Geodaten von MS SQL Server nach PostGIS migrieren.

Ursprünglich wurden die Daten mit SDE unter MS SQL gespeichert. Dann habe ich mit einem ArcGIS-Tool migriert. Dadurch wurde eine räumliche Datenspalte mit WKB-Daten erstellt.

Ich habe versucht, mit ogr2ogr zu migrieren. Alle Daten kommen korrekt durch, außer der Geometrie. Ich weiß nicht warum.

Aktualisieren:

  • SDE 10.0
  • MS SQL Server 2008 R2
  • ArcGIS 10.2
  • PostgreSQL 9.3 (mit PostGIS)

Ich habe versucht, die Felder mit ogr2ogr zu konvertieren:

ogr2ogr --config PGCLIENTCODING ISO-8859-2 -f "PostgreSQL PG: "host=localhost user=postgres dbname=test password=user" -sql "SELECT *, Geometry::STGeomFromWKB([Shape].STAsBinary(),23700 ).STAsText() AS [geom] FROM [test].[dbo].[BARLANG_PONT]" -nln barlang_pont ODBC:intra -a_srs "EPSG:23700"

Mit diesem Code wird das räumliche Feld in WKT (varchar)-Text in das PostGIS übersetzt. Der Standard-Raum ist derwkt_geom (Geometrie)Säule. ich könnte das gebrauchen-lco GEOMETRY_NAME=geomCode zum Umbenennen des standardmäßigen räumlichen Codes, aber die beiden Spalten haben unterschiedliche Typen.


Die folgenden Schritte funktionieren in fast jedem Fall für dieses Verfahren. Es kann eine gute Idee sein, die Geometrie zu reparieren, wenn Sie feststellen, dass dieser Prozess nicht die gewünschten Ergebnisse liefert. Es gibt die Bedingung, dass Feldnamen abgeschnitten werden, wenn sie eine bestimmte Länge überschreiten. Im Allgemeinen ist dies jedoch kein so schwerwiegendes Problem wie die eigentliche Übertragung.

  • Öffnen Sie ArcGIS.
  • Öffnen Sie Ihre MS SQL-Tabelle über ArcGIS.
  • Speichern Sie diese Tabelle in einem Shapefile.
  • Schließen Sie ArcGIS.
  • QGIS öffnen
  • Öffnen Sie das gespeicherte Shapefile
  • Exportieren Sie das Shapefile nach PostGIS

Wenn Sie eine einmalige Migration durchführen, können Sie dies in QGIS tun.

  1. Fügen Sie die MSSQL-Tabelle als Layer hinzu.

  2. Öffnen Sie Ihren DB-Manager (Ich musste meine PostGIS-Verbindung über Layer->Add Layer->Add PostGIS Layer… hinzufügen, damit die Verbindung im DB-Manager angezeigt wird)

  3. Navigieren Sie zu der Postgres-Datenbank, in die Sie die Daten importieren möchten.

  4. Drücken Sie die Schaltfläche Ebene importieren:

  5. Geben Sie Ihre Importoptionen an und drücken SieOK.

  6. Wenn alles gut geht, erhalten Sie eine Erfolgsmeldung:

  7. Zu diesem Zeitpunkt befindet es sich in der Datenbank, aber nicht in QGIS. Sie können es über den DB-Manager hinzufügen.

Damit (oder das direkte OGR2OGR/GDAL) erhalten Sie nicht die abgeschnittenen Spaltennamen, die Sie bei der Konvertierung in Shapefile hätten: