Frage

Ich bin mit einem Problem mit der australischen Zensussammlung konfrontiert bereitgestellt im Mapinfo -Format vom Australian Bureau of Statistics. Ich lade diese in eine Postgis -Datenbank mit der OGR2Ogr -Werkzeug, was für einen Großteil der Formen funktioniert, aber nicht alle von ihnen.

Ein einfaches Beispiel für das Problem, mit dem ich konfrontiert bin, ist eine solche Abfrage (erfordert das Laden des NSW -Datensatzes):

SELECT st_union(wkb_geometry) FROM cd06answ WHERE cd_code_2006 LIKE '1291%'

Das Ergebnis dieser Abfrage ist nicht die erwartete Form, sondern die Null.

Es gibt keine Nullwerte in der Tabelle, aber es gibt ungültige Geometrien. Zum Beispiel

SELECT cd_code_2006 FROM cd06answ 
WHERE cd_code_2006 LIKE '1291%' AND NOT st_isvalid(wkb_geometry)

Ruft die Werte '1291301' und '1291321' ab. Wenn ich ungültige Geometrien ausschließe, gelingt es dem St_union.

Verbinden Quantengis In der Datenbank ermöglicht das Rendern der beiden fraglichen Formen. Sie sollten Teil der geometrischen Vereinigung sein, daher muss ich das Problem irgendwie beheben.

Gibt es bessere Möglichkeiten, die MapInfo -Daten in Postgis zu laden? Oder einige Mittel, um die Daten innerhalb von Postgis zu beheben? Da die Datenbankdaten in Ordnung sind, sollte es möglich sein, sie zu speichern, nicht wahr?

Bearbeiten: Basierend auf Christophe Feedback habe ich ein bisschen mehr mit ST_BUFFER und ST_SNAPTOGRID experimentiert. Das Ergebnis dieser Abfrage:

SELECT 
    cd_code_2006, 
    st_isvalid(st_buffer(wkb_geometry,0)), 
    st_isvalid(st_snaptogrid(wkb_geometry, 0.00000001)),
    st_isvalid(st_snaptogrid(wkb_geometry, 0.0000001)) 
FROM
    cd06answ 
WHERE 
    cd_code_2006 LIKE '1291%' 
AND
    NOT st_isvalid(wkb_geometry)

Ist, dass für beide betroffenen Geometrien der erste und der letzte der drei st_isvalids wahr ist, ist der mittlere nicht.

Leider behebt keiner Ansatz die Gewerkschaft, nur a

SELECT st_union(st_buffer(wkb_geometry,0.4)) FROM cd06answ 
WHERE cd_code_2006 LIKE '1291%'

führt zu einer Geometrie, aber

SELECT st_union(st_buffer(wkb_geometry,0.3)) FROM cd06answ 
WHERE cd_code_2006 LIKE '1291%'

nicht (ich hatte den kleinen Puffertrick früher ausprobiert, aber nicht auf dieses Level gedrückt).

Dies scheint ein bisschen zu viel für ein Fix zu sein.

War es hilfreich?

Lösung

Versuchen Sie zu rennen st_buffer (mit Radius 0 zuerst und dann 0,000000001 usw.) oder st_snaptogrid Bei diesen ungültigen Geometrien, um sie zu "reparieren" (Link zu den Dokumenten hier und hier).

Ich habe gesehen, dass diese Fehler beim Importieren von Mapinfo oder anderen Quellen mit dem Importieren von Mapinfo angezeigt werden ogr2ogr2 (Grundsätzlich verursacht durch höhere Präzisions- und/oder Rundungsprobleme). Ich denke, die PostgIS -Entwickler planten, eine spezifische Präzisions -Reduzierfunktion aufzunehmen, aber wenn ich mich richtig erinnere, gibt es in 1.4 keinen Fall.

Wenn dies nicht hilft, veröffentlichen Sie bitte Ihre aktuelle Post -GIS -Version und eine WKT -Version Ihres Polygons und Projektions. Es gibt andere mögliche Ursachen für die Vergütung von Polygonen.

Andere Tipps

Hallo

Hast du es versucht St_isvalidreason (Geometrie) Um eine Ahnung zu bekommen, was falsch ist?

/Nicklas

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top