Ich habe ein Exemplar des super bösen Buches 'Python Geospatial Development' von Erik Westra ( Amazon-Link ) in die Hand genommen und arbeite daran. Derzeit lehre ich mich, GSHHS-Küstendaten aus einem Shapefile in eine PostGIS-Datenbank zu laden, um die Erstellung einer Geodaten-Web-App vorzubereiten.
Mein Problem ist folgendes: Wenn ich versuche, die GSHHS-Daten in PostGIS zu importieren, werden sie abgelehnt, da die Küstenpolygone nicht als "gültig" angesehen werden. Insbesondere erhalte ich eine Fehlermeldung, in der einige (aber nicht alle) der Küstenpolygone als "nicht geschlossene Ringe" beschrieben werden.
Ich verstehe, dass dieser Fehler versucht, mir zu sagen, dass der erste und der letzte Punkt des Polygons nicht gleich sind. Dies ist jedoch einfach nicht wahr. Ich habe die WKT-Darstellung vieler Polygone untersucht und sie sind korrekt. Sie beginnen und enden definitiv mit derselben Koordinate.
Die Polygone werden mithilfe der OGR-Bibliothek aus den Shapefiles extrahiert und jedes Polygon-Feature in WKT exportiert. Ich habe versucht, das Polygon über Shapely wiederherzustellen, und mit WKB experimentiert, aber ohne Erfolg. Ich habe die Lage, die gleichen Daten in PostGIS als einen Multi Tabelle zu laden, mit den shp2pgsql Lader.
Ich habe mich gefragt, ob jemand da draußen:
(a) vielleicht dasselbe Buch benutzt hat, bei demselben Problem stecken geblieben ist und die Antwort für mich hat?
(b) auf ein ähnliches Problem gestoßen ist und eine Lösung gefunden hat?
(c) Wenn dies nicht der Fall ist, gibt es einige Best-Practice-Ratschläge zur Sicherstellung einer gültigen Geometrie vor dem Laden in PostGIS?
UPDATE: Ein Kollege hat vorgeschlagen, dass das Problem der nicht geschlossenen Ringe möglicherweise nur ein Symptom für ein anderes Problem ist. Es ist möglich, dass meine PostGIS / PostgreSQL-Konfiguration Größenbeschränkungen aufweist (beim Einfügen von Transaktionen, empfangenen Paketen, Textzeichenfolgen usw.).
Da ich sehr lange WKT-Polygone als Eingabe verwende, schneidet PostGIS sie möglicherweise zu früh, um jedes Polygon zu vervollständigen. Ich werde es morgen testen, aber es klingt wahrscheinlich. Meine Einfügung von Ländergrenzen akzeptierte nur einige Aufzeichnungen und andere nicht. Aus dem Gedächtnis waren die akzeptierten Geometrien für kleine Inselstaaten wie Antigua (und hatten daher wahrscheinlich kurze WKT-Darstellungen).
Dies könnte also eher ein PostGIS-Datenbankadministrationsthread als ein ungültiger Geometriethread sein.
Antworten:
Ich habe mir Ihre Daten und das Buchbeispiel angesehen. Das Problem besteht darin, dass die Daten drei ungültige Polygone enthalten, die im Buch verarbeitet werden:
GSHHS_l_L1.shp
ID = 92-W
ID = 486-W
GSHHS_l_L2.shp
ID = 7333-W
Da dies ein Beispiel ist, ist es am einfachsten, diese Polygone aus dem Dataset zu löschen oder einfach eine if-Anweisung in Ihren Code einzufügen
quelle