Wie man "Loch liegt außerhalb der Schale" repariert

9

Ich habe einen Datensatz mit Polygonformen erhalten, in dem die Geometrie vom QGIS-Plugin " Geometry Updater " aktualisiert wurde . Jetzt habe ich das Problem, dass ich in PostGIS ungültige Geometrien mit der Fehlermeldung "Loch liegt außerhalb der Shell" erhalte . Bei der Beobachtung der Geometrie in QGIS gibt es jedoch tatsächlich zwei Formen, wobei eine die Hauptgeometrie und die andere (wahrscheinlich) das Loch ist.

Geben Sie hier die Bildbeschreibung ein

Ich dachte, der Grund dafür war, dass der Geometrietyp auf eingestellt war ST_Polygon. Aber auch nach dem Ändern ST_MultiPolygonbleibt der Fehler bestehen. Hat jemand eine Idee, wie man das behebt? Auch manuell in QGIS wäre in Ordnung.

BEARBEITEN:

Dies ist die ursprüngliche WKT der Form im Bild (bevor Sie sie ändern ST_MultiPolygon):

POLYGON ((681328,211640639 5312556.84866055,681333.876018639 5312566.85338355,681344.126811639 5312584.17146655,681360.13777864 5312605.81168455,681368.571629639 5312620.16794654,681375.15817664 5312633.84801255,681380.74133464 5312647.74367554,681384.01769064 5312658.41482554,681392.01169764 5312694.63471254,681393.07199764 5312701.83700354,681389.16681464 5312705.85459254,681379.79126564 5312704.26135554,681393.93193764 5312715.39845154,681401.81727164 5312723.43382354,681398.09962564 5312710.95653254,681395.19739764 5312693,68448654 , 681387.20535464 5312657.40285554,681383.87846764 5312644.38168654,681378.69327164 5312632.35257854,681367.00831364 5312610.47778954,681346.401239639 5312581.83289054,681336.365640639 5312564.27437955,681340.423191639 5312560.69415655,681365.23709764 5312567.84133655,681374.16498264 5312570.47104354,681390.52225764 5312565.30077054,681395.29993964 5312563.90629854,681410.98915364 5312545.67508754,681413.79585564 5312536.98783954,681415.77221864 5312530.93185454,681416.991529641 5312523.86320254,681406.38747164 5312515.12414654,681403.96790864 5312507.57002154,681395.94924164 5312514.30082354,681394.08765664 5312516.71419154,681390.91027864 5312518.71529654,681387.07111564 5312520.63375054,681381.90838164 5312522.38690354,681376.13571264 5312525.04785255,681366.362498639 5312530.79640254,681349.071127639 5312540.57236955,681332.287335639 5312550,05537054 , 681.321,992430639 5312555.23135255,681328.211640639 5.312.556,84866055), (681306,938491638 5312528.24474655,681318.811081639 5312521.75881455,681324.059996639 5312518.58690655,681330.950098639 5312514.72509155,681336.554227639 5312510.82277555,681341.802513639 5312506.35305054,681352.668573639 5312497.54885354,681356.654879639 5312493.59559054,681360.976303639 5312488.23147354,681363.302624639 5312486.88334655,681366.15656264 5312485.92264755,681369.80127664 5312486.22287554,681375.12800564 5312488.49191954,681382.62287464 5312493.11590554,681385.88903564 5312494.88743254,681387.74606564 5312495.25494754,681393.90959164 5312496.00535955,681389.15656464 5312487.38890554,681365.00476264 5312481.62211554,681327.726005639 5312490.52129555,681306.883836639 5312494.37629255,681298.999414638 5312496.84720955,681306.938491638 5312528,24474655) )90959164 5312496.00535955,681389.15656464 5312487.38890554,681365.00476264 5312481.62211554,681327.726005639 5312490.52129555,681306.883836639 5312494.37629255,6812938948990959164 5312496.00535955,681389.15656464 5312487.38890554,681365.00476264 5312481.62211554,681327.726005639 5312490.52129555,681306.883836639 5312494.37629255,68129389489

JoeBe
quelle
3
Normalerweise liegt dies an der Richtung der Eckpunkte. Wenn eines der Polygone im Uhrzeigersinn und das andere gegen den Uhrzeigersinn ist, denkt es, dass das zweite ein Loch ist. Es ist nur eine Idee, leider weiß ich nicht, wie ich es beheben soll
ylka
Wenn Sie das Feature kopieren und in einen Texteditor einfügen, können Sie es wahrscheinlich in ein Multipolygon ändern und mit QuickWKT
Ian Turton erneut
Können Sie die WKT Ihrer Funktion veröffentlichen?
Thibautg
@ Thibautg Ich füge gerade die WKT
JoeBe

Antworten:

10

In PostGIS kehrt ST_IsValidReason zurückHole lies outside shell[681306.938491638 5312528.24474655]

ST_MakeValid ändert es in ein MULTIPOLYGON:

MULTIPOLYGON(((681306.938491638 5312528.24474655,681318.811081639 5312521.75881455,681324.059996639 5312518.58690655,681330.950098639 5312514.72509155,681336.554227639 5312510.82277555,681341.802513639 5312506.35305054,681352.668573639 5312497.54885354,681356.654879639 5312493.59559054,681360.976303639 5312488.23147354,681363.302624639 5312486.88334655,681366.15656264 5312485.92264755,681369.80127664 5312486.22287554,681375.12800564 5312488.49191954,681382.62287464 5312493.11590554,681385.88903564 5312494.88743254,681387.74606564 5312495.25494754,681393.90959164 5312496.00535955,681389.15656464 5312487.38890554,681365.00476264 5312481.62211554,681327.726005639 5312490.52129555,681306.883836639 5312494.37629255,681298.999414638 5312496.84720955,681306.938491638 5312528.24474655)),((681328.211640639 5312556.84866055,681333.876018639 5312566.85338355,681344.126811639 5312584.17146655,681360.13777864 5312605.81168455,681368.571629639 5312620.16794654,681375.15817664 5312633.84801255,681380.74133464 5312647.74367554,681384.01769064 5312658.41482554,681392.01169764 5312694.63471254,681393.07199764 5312701.83700354,681389.16681464 5312705.85459254,681379.79126564 5312704.26135554,681393.93193764 5312715.39845154,681401.81727164 5312723.43382354,681398.09962564 5312710.95653254,681395.19739764 5312693.68448654,681387.20535464 5312657.40285554,681383.87846764 5312644.38168654,681378.69327164 5312632.35257854,681367.00831364 5312610.47778954,681346.401239639 5312581.83289054,681336.365640639 5312564.27437955,681340.423191639 5312560.69415655,681365.23709764 5312567.84133655,681374.16498264 5312570.47104354,681390.52225764 5312565.30077054,681395.29993964 5312563.90629854,681410.98915364 5312545.67508754,681413.79585564 5312536.98783954,681415.77221864 5312530.93185454,681416.991529641 5312523.86320254,681406.38747164 5312515.12414654,681403.96790864 5312507.57002154,681395.94924164 5312514.30082354,681394.08765664 5312516.71419154,681390.91027864 5312518.71529654,681387.07111564 5312520.63375054,681381.90838164 5312522.38690354,681376.13571264 5312525.04785255,681366.362498639 5312530.79640254,681349.071127639 5312540.57236955,681332.287335639 5312550.05537054,681321.992430639 5312555.23135255,681328.211640639 5312556.84866055)))
thibautg
quelle
3

Ich habe es mit dem Tool "Geometrien gültig machen" von OpenJUMP versucht und es gibt die korrigierte Geometrie als Multipolygon zurück. OpenJUMP verwendet eine eigene makeValid-Funktion. Ich weiß nicht, ob QGIS eine äquivalente Funktion hat, aber da Sie die Funktion bereits in PostGIS haben, können Sie einfach ST_MakeValid http://postgis.net/docs/ST_MakeValid.html verwenden .

MULTI (((681.328,211640639 5312556,84866055, 681.333,876018639 5312566,85338355, 681.344,126811639 5.312.584,17146655, 681.360,13777864 5312605,81168455, 681368,571629639 5312620,16794654, 681375,15817664 5.312.633,84801255, 681.380,74133464 5.312.647,74367554, 681384,01769064 5312658,41482554, 681.392,01169764 5.312.694,63471254, 681.393,07199764 5312701,83700354, 681.389,16681464 5312705,85459254, 681379,79126564 5312704,26135554, 681.393,93193764 5312715,39845154, 681.401,81727164 5.312.723,43382354, 681.398,09962564 5.312.710,95653254, 681.395,19739764 5312693.68448654, 681387.20535464 5312657.40285554,681383.87846764 5312644.38168654, 681378.69327164 5312632.35257854, 681367.00831364 5312610.47778954, 681346,401239639 5.312.581,83289054, 681.336,365640639 5.312.564,27437955, 681340,423191639 5312560,69415655, 681.365,23709764 5312567,84133655, 681374,16498264 5.312.570,47104354, 681390,52225764 5312565,30077054, 681395,29993964 5312563,90629854, 681410,98915364 5312545,67508754, 681.413,79585564 5.312.536,98783954, 681.415,77221864 5312530,93185454, 681416,991529641 5312523,86320254, 681.406,38747164 5.312.515,12414654, 681.403,96790864 5312507,57002154, 681.395,94924164 5.312.514,30082354 681394.08765664 5312516.71419154, 681390.91027864 5312518.71529654, 681387.07111564 5312520.63375054, 681381.90838164 5312522.38690354, 681376.13571264 5312525.04785255, 681366,362498639 5312530,79640254, 681349,071127639 5.312.540,57236955, 681332,287335639 5312550,05537054, 681321,992430639 5312555,23135255, 681328,211640639 5.312.556,84866055)), ((681.306,938491638 5.312.528,24474655, 681.318,811081639 5.312.521,75881455, 681.324,059996639 5.312.518,58690655, 681330,950098639 5312514,72509155, 681.336,554227639 5312510,82277555, 681.341,802513639 5312506.35305054, 681352.668573639 5312497.54885354, 681356.654879639 5312493.59559054, 681.360,976303639 5.312.488,23147354, 681363,302624639 5312486,88334655, 681366,15656264 5.312.485,92264755, 681369,80127664 5312486,22287554, 681.375,12800564 5.312.488,49191954, 681.382,62287464 5312493,11590554, 681385,88903564 5312494,88743254, 681387,74606564 5312495,25494754, 681.393,90959164 5.312.496,00535955, 681.389,15656464 5312487,38890554, 681.365,00476264 5.312.481,62211554, 681327,726005639 5312490,52129555, 681306,883836639 5.312.494,37629255, 681.298,999414638 5312496,84720955, 681.306,938491638 5312528,24474655)))681363,302624639 5.312.486,88334655, 681.366,15656264 5.312.485,92264755, 681369,80127664 5312486,22287554, 681375,12800564 5312488,49191954, 681382,62287464 5.312.493,11590554, 681385,88903564 5.312.494,88743254, 681.387,74606564 5312495,25494754, 681.393,90959164 5312496,00535955, 681.389,15656464 5.312.487,38890554, 681365,00476264 5312481,62211554, 681.327,726005639 5312490,52129555, 681.306,883836639 5312494,37629255, 681.298,999414638 5312496,84720955, 681.306,938491638 5.312.528,24474655)))681363,302624639 5.312.486,88334655, 681.366,15656264 5.312.485,92264755, 681369,80127664 5312486,22287554, 681375,12800564 5312488,49191954, 681382,62287464 5.312.493,11590554, 681385,88903564 5.312.494,88743254, 681.387,74606564 5312495,25494754, 681.393,90959164 5312496,00535955, 681.389,15656464 5.312.487,38890554, 681365,00476264 5312481,62211554, 681.327,726005639 5312490,52129555, 681.306,883836639 5312494,37629255, 681.298,999414638 5312496,84720955, 681.306,938491638 5.312.528,24474655)))681375.12800564 5312488.49191954, 681382.62287464 5312493.11590554, 681385.88903564 5312494.88743254, 681387.74606564 5312495.25494754, 681393.90959164 5312496.00535955, 681389.15656464 5312487.38890554, 681365.00476264 5312481.62211554, 681327,726005639 5312490,52129555, 681.306,883836639 5.312.494,37629255, 681.298,999414638 5312496,84720955, 681.306,938491638 5312528,24474655)))681375.12800564 5312488.49191954, 681382.62287464 5312493.11590554, 681385.88903564 5312494.88743254, 681387.74606564 5312495.25494754, 681393.90959164 5312496.00535955, 681389.15656464 5312487.38890554, 681365.00476264 5312481.62211554, 681327,726005639 5312490,52129555, 681.306,883836639 5.312.494,37629255, 681.298,999414638 5312496,84720955, 681.306,938491638 5312528,24474655)))681365.00476264 5312481.62211554, 681327.726005639 5312490.52129555, 681306.883836639 5312494.37629255, 681298.999414638 5312496.84720955, 681306.938491638 5312528.24474655681365.00476264 5312481.62211554, 681327.726005639 5312490.52129555, 681306.883836639 5312494.37629255, 681298.999414638 5312496.84720955, 681306.938491638 5312528.24474655

user30184
quelle
JTS / GEOS haben eigentlich keine makeValidFunktion. Die in OpenJUMP ist speziell für diese Anwendung entwickelt, ebenso wie die von PostGIS.
Dbaston
@dbaston, danke, ich hätte die Fakten überprüfen sollen sourceforge.net/p/jts-topo-suite/mailman/message/34695185 .
user30184
Ich habe die Antwort bearbeitet. MakeValid scheint auf der JTS-Wunschliste slidehare.net/jgarnett/state-of-jts-2017 zu stehen .
user30184