Dies ist eine Fortsetzung der vorherigen Frage . Sie werden sehen, dass ich ein neuer PostGIS-Benutzer bin.
Ich habe die Gültigkeit der Topologie in meinen Daten überprüft und im Landbedeckungsdatensatz (Polygon) etwa 1700 Topologieprobleme gefunden. Dies sind alles "Ring Self_intersection".
Mit einigen nützlichen Informationen in dieser Präsentation von Paul Ramsay (Seite 20) habe ich versucht, meine Daten entsprechend zu puffern:
UPDATE schema.data SET the_geom = buffer (the_geom, 0.0) WHERE isvalid (the_geom) = false und isvalid (buffer (the_geom, 0.0)) = true;
Aber ich bekomme die Antwort:
HINWEIS: Ring-Selbstschnittpunkt am oder in der Nähe des Punkts (bearbeitet) FEHLER: Neue Zeile für die Beziehung "sgm_buffer" verletzt die Prüfbedingung "erzwingen_geotype_the_geom"
********** Error **********
FEHLER: Neue Zeile für die Beziehung "sgm_buffer" verletzt die Prüfbedingung "erzwingen_geotype_the_geom" SQL-Status: 23514
Ich habe auch nur versucht:
UPDATE csgn.sgm_buffer SET the_geom = buffer (the_geom, 0.0)
und bekomme:
FEHLER: Neue Zeile für die Beziehung "sgm_buffer" verletzt die Prüfbedingung "erzwingen_geotype_the_geom"
********** Error **********
FEHLER: Neue Zeile für die Beziehung "sgm_buffer" verletzt die Prüfbedingung "erzwingen_geotype_the_geom" SQL-Status: 23514
Nehme ich also an, dass diese Puffertechnik bei meinen Problemen nicht funktioniert? Oder mache ich etwas falsch?
Herr Ramsay fährt dann im selben Dokument fort und schlägt eine zusätzliche Technik vor, um mit "Zahl von 8" -Polygonen umzugehen. Ich verstehe nicht ganz, wie ich das vollständig in Code schreiben soll (oder was es tut und ob es mir helfen wird):
SELECT ST_BuildArea (ST_Union ('LINESTRING EMPTY', ST_ExteriorRing ('POLYGON ((...))')
Also ... kann jemand helfen? Dies ist ein wahrer Albtraum mit meinen engen Zeitplänen und begrenzten Fähigkeiten in PostGIS.
ST_Multi()
, um alle Polygone zu zwingen,MULTIPOLYGON
s zu sein (dies ist eine Annahme)Antworten:
Ich denke, was passiert ist, dass Ihre sich selbst überschneidenden Polygone beim Puffern zu MULTIPOLYGONEN werden.
Sie haben zwei Möglichkeiten:
1 Entfernen Sie die Einschränkung "erzwingen_geotype_the_geom". Sie können dies in pgAdmin tun.
2 Fügen Sie das Ergebnis in eine neue Tabelle ein, anstatt die alte zu aktualisieren. Das ist oft eine gute Möglichkeit, Dinge zu tun, da Sie dann nichts an Ihrer ursprünglichen Tabelle ändern. Die Abfrage kann ungefähr so aussehen:
Natürlich möchten Sie möglicherweise mehr Felder in Ihre neue Tabelle einfügen.
Versuchen Sie zuerst den Puffertrick. Im zweiten Ansatz kann sich Paulus sagen, welchen Einfluss der leere Linestring hat. Ich erinnere mich nicht, wie diese Magie passiert.
quelle
Ich hatte vor ein paar Monaten die gleichen Probleme. Ich hatte Polygone in meiner Datenbank mit vielen Selbstüberschneidungen. Ich habe die Methode von Niklas Aven verwendet, aber sie hat nicht funktioniert. Ich habe auch andere Methoden angewendet.
Meine Methode besteht darin, den Selbstschnittpunkt aus meinen Polygonen zu entfernen. Hier ist die SQL-Abfrage, die ich verwendet habe:
Ich habe die Fläche des Polygons und die Selbstüberschneidung berechnet und behalte nur Polygone mit einer Fläche> 1.
1
ist die Toleranz, da die Fläche der Selbstüberschneidung sehr klein ist. Beachten Sie auch, dass die Umwandlung der SRID in Meter wichtig ist, wenn Sie Daten in Grad haben.quelle