Beheben von Geometriegültigkeitsfehlern in QGIS?

31

Ich arbeite an Besitzdaten auf der Ebene eines US-Bundesstaates. Ich habe ein Shapefile pro Grafschaft, das Tausende von Steuerpaketen enthält. Ich muss die Polygone auflösen, die Pakete darstellen, die derselben Person gehören. Wenn das Shapefile nicht sauber ist, scheint das Tool "Auflösen" in QGIS nicht zu funktionieren, es friert ein. Ich muss die Probleme mit der Gültigkeit der Geometrie zuerst mit dem Werkzeug "Gültigkeit der Geometrie prüfen" beheben. Allerdings habe ich manchmal hunderte von Fehlern. Das manuelle Beheben dieser Probleme nimmt viel Zeit in Anspruch. Gibt es andere Strategien, die mir Zeit sparen könnten?

Ich benutze QGIS 2.4.0.

Bap
quelle
2
Haben Sie versucht, eine Datei in grass zu importieren und v.clean zu verwenden? Es wird wahrscheinlich viele Ihrer Fehler beheben.
Sergio

Antworten:

20

Versuchen Sie, die Polygone mit einem subtilen Puffer zu versehen. Eine Einstellung von -0.001, wenn Ihr CRS UTM ist, scheint einen Versuch wert zu sein. VEKTOR | PUFFER

BillW
quelle
4
Ich habe die "Puffer" -Lösung ausprobiert, die zuerst von BillW vorgeschlagen wurde. Es hat 97% meiner Probleme gelöst, das reicht mir jetzt. Ich kann den Job manuell beenden. Wenn ich einen kleinen Puffer für die Polygone verwende, ist das für mich auf dem Weg, glaube ich, kein Problem. Aber ich sehe einige Fälle, in denen die Verwendung von ST_MakeValid oder das Ausprobieren von v.clean besser und genauer sein könnte.
Bap
18

Wenn ich eine fehlerhafte Ebene habe, starte ich sie normalerweise über die GRASS-Funktion v.clean in der Processing Toolbox . Obwohl ich nie wirklich herausgefunden habe, welches Tool in welchem ​​Fall am besten ist, wähle ich dort normalerweise die Funktion bpol .

Vielleicht noch wichtiger ist es, die erweiterten Parameter für die Schnapptoleranz und den minimalen Bereich festzulegen . Abhängig von der Schicht wähle ich normalerweise 0,1 bis 2 Meter zum Einrasten und z. B. 10 m² für die minimale Fläche.

Das Einrasten richtet z. B. Grenzen aus, die als gemeinsame Grenzen gedacht sind, aber winzige Versätze aufweisen. Die minimale Fläche entfernt winzige Splitter von Schnittpunkten usw.

Zusammen mit dem bpol werden dadurch normalerweise alle Fehler behoben, ohne dass die Topologie zu stark geändert wird.

Bernd V.
quelle
11

Sie können ST_MakeValid direkt in QGIS verwenden, indem Sie ein lwgeom-Plugin hinzufügen, das lwgeom-Provider zur Verarbeitungs-Toolbox hinzufügt. Postgis / Spatialite verwenden das gleiche liblwgeom, um ST_MakeValid auszuführen

Sie müssen liblwgeom installieren und den Verarbeitungsanbieter so konfigurieren, dass er darauf verweist

Der lwgeom-Anbieter kann als experimentell angesehen werden: https://plugins.qgis.org/plugins/processinglwgeomprovider/

Luigi Pirelli
quelle
3
Ich habe gerade eine neue Version von processinglwgeom herausgebracht, damit sie mit der aktuellen Hauptversion von qgis processing verwendet werden kann. (Verarbeitung wird überarbeitet)
Luigi Pirelli
2
Hallo @LuigiPirelli Ich habe versucht, ein ähnliches Problem mit dem Lwgeom-Plugin zu lösen, aber es stürzt während der Ausführung immer ab und ich muss QGis neu starten. Kann ich das irgendwie beheben? Vielen Dank.
Alex Fernández Poulussen
1
Schwer zu sagen ohne den laufenden Kontext. Übrigens gibt es seit 2014 mehr Reparaturgeometrie-Instrumente in qgis. Normalerweise ist ein Absturz in lwgeom ein Fehlausrichtungsproblem (fehlerhafte Installation) im geladenen oder gemeinsam genutzten Objekt. Hast du andere Tools getestet?
Luigi Pirelli
1
Funktioniert das mit QGIS 2.18?
Scheint
1
Nur ein Update ... QGIS3.x verfügt seit einiger Zeit über einen verarbeitenden nativen Fixgeometrie-Algorithmus, der ein Wrapper für die gängigen MakeValid-Algorithmen von GEOS ist. Es ist keine Datenbank erforderlich.
Luigi Pirelli
2

Ich bin gerade auf ein ähnliches Problem in QGIS gestoßen. Ich hatte eine Poly begann falsch zu projizieren. Ich habe die Grass-Funktion v.clean in der Processing-Toolbox verwendet, wie Bernd vorgeschlagen hat. Obwohl bpol nicht funktionierte, scheint es mit der break-Funktion behoben worden zu sein.

user44727
quelle