Ich kann hier sehr gut etwas falsch machen, aber:
Wenn ich ein Shapefile mit shp2pgsql in eine PostGIS-Datenbank importiere , muss ich zuerst die SRID / EPSG dieses Shapefiles herausfinden. Ich denke, dies ist mindestens ein zweistufiger Prozess. Zuerst frage ich das Shapefile folgendermaßen ab:
>ogrinfo -al -so someshapefile.shp
Dies gibt die bekannten Text (wkt) -Projektionsinformationen zurück, ist aber etwas ausführlich und etwas undurchsichtig [für mich]. Etwas wie:
GEOGCS["NAD83",
DATUM["North_American_Datum_1983",
SPHEROID["GRS 1980",6378137,298.257222101,
AUTHORITY["EPSG","7019"]],
AUTHORITY["EPSG","6269"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4269"]]
Normalerweise führe ich die wkt-Informationen dann über ein Konvertierungstool wie Prj2EPSG aus , um die EPSG / SRID zu finden.
Zu diesem Zeitpunkt kann ich das Shapefile importieren mit:
>shp2pgsql -I -s 4269 someshapefile.shp <schema>.<table> | psql -U <user> -d <dbname> -h <hostaddress> -p 5432
Hinweis: Ich gebe die SRID mit dem -s
Flag an.
Wenn ich shp2pgsql ohne Angabe der SRID ausführe, ist keine Projektion festgelegt und ich denke, die Geom-Spalte muss manuell aktualisiert werden, um eine Projektion einzuschließen.
Alternativ kann ich die Suche überspringen und einfach ogr2ogr verwenden :
>ogr2ogr -f "PostgreSQL" "PG:host=<hostaddress> user=<user> dbname=<dbname> password=<password>" "C:/shapefile.shp" -nln <schema>.<table>
Dies setzt die Projektion anscheinend in Ordnung und extrahiert sie vermutlich automatisch aus dem Quell-Shapefile / prj.
Frage
Was ist der Nachteil bei der Verwendung von ogr2ogr? Gibt es tatsächlich ein Flag, mit dem shp2pgsql automatisch die richtige Projektion extrahiert und setzt? Wenn nicht, warum nicht?
Nachtrag
Es gibt eine interessante, vielleicht leicht veraltete, vergleichende Analyse der Verwendung von ogr2ogr vs shp2pgsql, die auf naturalgis.pt verfügbar ist . Es zeigt für ihre speziellen Beispieldaten, dass ogr2ogr bei kleinen Datensätzen eine signifikant bessere Leistung erbringt , während shp2pgsql bei größeren Datensätzen eine etwas bessere Leistung erbringt .
Ich glaube nicht, dass dies eine endgültige Antwort liefert. Die Codebasen haben sich möglicherweise weiterentwickelt und die Leistung jedes Einzelnen verbessert. Sie haben nur einen sehr kleinen Satz von Beispieldaten getestet. Der repräsentative "große" Datensatz ist eigentlich nicht so groß. Außerdem werden hauptsächlich Leistungsprobleme erörtert, die sich sicherlich auf die Benutzerfreundlichkeit auswirken. Die ursprüngliche Frage ist jedoch eher an den Anforderungen an die Benutzereingabe im Zusammenhang mit der Benutzerfreundlichkeit interessiert.
Antworten:
Ohne mit den Entwicklern von shp2pgsql zu sprechen, ist meine Antwort meinungsbasiert, aber zumindest ist shp2pgsql ohne automatische Erkennung der Projektion viel einfacher. Der Hauptteil des Quellcodes besteht aus ca. 1800 Zeilen. Http://postgis.net/docs/doxygen/2.2/d8/da3/shp2pgsql-core_8c_source.html und er tut das Wesentliche: Konvertiert Geometrien und Attribute aus Shapefiles in PostGIS.
In GDAL-Quellen besteht der Code, der sich nur um die Interpretation der ESRI .prj-Dateien kümmert, aus 2700 Zeilen https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogr_srs_esri.cpp .
Vor-und Nachteile:
Aus Anwendersicht sind die Hauptvorteile von shp2pgsql:
Der Hauptnachteil von shp2pgsql ist, dass es nur Shapefiles unterstützt.
GDAL und ogr2ogr bieten die gleichen Funktionen für Shapefiles wie shp2pgsql, aber GDAL kann Dutzende verschiedener Vektorformate verarbeiten: https://gdal.org/ogr_formats.html und bietet viel mehr Optionen zum Auswählen und Verarbeiten von Daten während der Konvertierung. Allerdings mit GDAL
quelle