Come risolvere "Il buco si trova fuori dalla shell"


9

Ho ottenuto un set di dati con forme poligonali, in cui la geometria è stata aggiornata dal plug-in QGIS " Geometry Updater ". Ora ho il problema che in PostGIS ottengo geometrie non valide con il messaggio di errore "Il foro si trova fuori dalla shell" . Ma quando si osserva la geometria in QGIS, in realtà ci sono due forme, in cui una è la geometria principale e l'altra (probabilmente) il foro.

inserisci qui la descrizione dell'immagine

Ho pensato che la ragione di ciò fosse che il tipo di geometria era impostato su ST_Polygon. Ma anche dopo averlo modificato in ST_MultiPolygon, l'errore rimane ancora. Qualcuno ha idea di come risolvere questo problema? Anche manualmente in QGIS andrebbe bene.

MODIFICARE:

Questo è il WKT originale della forma nell'immagine (prima di cambiarlo in ST_MultiPolygon):

POLIGONO ((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,992,430639 millions 5312555.23135255,681328.211640639 5.312.556,84,866055 millions), (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.88383663990959164 5312496.00535955,681389.15656464 5312487.38890554,681365.00476264 5312481.62211554,681327.726005639 5312490.52129555.681306.883836639


3
Normalmente ciò è dovuto alla direzione dei vertici. Se uno dei poligoni è in senso orario e l'altro è in senso antiorario, pensa che il secondo sia un buco. È solo un'idea, sfortunatamente non so come risolverlo
ylka il

se copi e incolli la funzione in un editor di testo, puoi probabilmente cambiarla in un multipoligono e reimportarla usando QuickWKT
Ian Turton

Puoi pubblicare il WKT della tua funzione?
thibautg,

@thibautg Ho appena aggiunto il WKT
JoeBe il

Risposte:


10

infatti, in PostGIS ST_IsValidReason restituisceHole lies outside shell[681306.938491638 5312528.24474655]

ST_MakeValid lo cambia in un 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)))

3

Ho provato con lo strumento "Rendi valide le geometrie" di OpenJUMP e restituisce la geometria corretta come multipoligono. OpenJUMP sta usando la propria funzione makeValid. Non so se QGIS abbia una funzione equivalente ma poiché hai già la funzione in PostGIS puoi semplicemente usare ST_MakeValid http://postgis.net/docs/ST_MakeValid.html .

MULTIPOLYGON (((681.328,211,640639 millions 5.312.556,84,866055 millions, 681.333,876,018639 millions 5.312.566,85,338355 millions, 681.344,126,811639 millions 5.312.584,17,146655 millions, 681.360,13,777864 millions 5.312.605,81,168455 millions, 681.368,571,629639 millions 5.312.620,16,794654 millions, 681.375,15,817664 millions 5.312.633,84,801255 millions, 681.380,74,133464 millions 5.312.647,74,367554 millions, 681.384,01,769064 millions 5.312.658,41,482554 millions, 681.392,01,169764 millions 5.312.694,63,471254 millions, 681.393,07,199764 millions 5.312.701,83,700354 millions, 681.389,16,681464 millions 5.312.705,85,459254 millions, 681.379,79,126564 millions 5.312.704,26,135554 millions, 681.393,93,193764 millions 5.312.715,39,845154 millions, 681.401,81,727164 millions 5.312.723,43,382354 millions, 681.398,09,962564 millions 5.312.710,95,653254 millions, 681.395,19,739764 millions 5312693.68448654, 681387.20535464 5312657.40285554,681383.87846764 5312644.38168654, 681378.69327164 5312632.35257854, 681367.00831364 5312610.47778954, 681.346,401,239639 millions 5.312.581,83,289054 millions, 681.336,365,640639 millions 5.312.564,27,437955 millions, 681.340,423,191639 millions 5.312.560,69,415655 millions, 681.365,23,709764 millions 5.312.567,84,133655 millions, 681.374,16,498264 millions 5.312.570,47,104354 millions, 681.390,52,225764 millions 5.312.565,30,077054 millions, 681.395,29,993964 millions 5.312.563,90,629854 millions, 681.410,98,915364 millions 5.312.545,67,508754 millions, 681.413,79,585564 millions 5.312.536,98,783954 millions, 681.415,77,221864 millions 5.312.530,93,185454 millions, 681.416,991,529641 millions 5.312.523,86,320254 millions, 681.406,38,747164 millions 5.312.515,12,414654 millions, 681.403,96,790864 millions 5.312.507,57,002154 millions, 681.395,94,924164 millions 5.312.514,30,082354 millions , 681394.08765664 5312516.71419154, 681390.91027864 5312518.71529654, 681387.07111564 5312520.63375054, 681381.90838164 5312522.38690354, 681376.13571264 5312525.04785255, 681.366,362,498639 millions 5.312.530,79,640254 millions, 681.349,071,127639 millions 5.312.540,57,236955 millions, 681.332,287,335639 millions 5.312.550,05,537054 millions, 681.321,992,430639 millions 5.312.555,23,135255 millions, 681.328,211,640639 millions 5.312.556,84,866055 millions)), ((681.306,938,491638 millions 5.312.528,24,474655 millions, 681.318,811,081639 millions 5.312.521,75,881455 millions, 681.324,059,996639 millions 5.312.518,58,690655 millions, 681.330,950,098639 millions 5.312.514,72,509155 millions, 681.336,554,227639 millions 5.312.510,82,277555 millions, 681.341,802,513639 millions 5312506.35305054, 681352.668573639 5312497.54885354, 681356.654879639 5312493.59559054, 681.360,976,303639 millions 5.312.488,23,147354 millions, 681.363,302,624639 millions 5.312.486,88,334655 millions, 681.366,15,656264 millions 5.312.485,92,264755 millions, 681.369,80,127664 millions 5.312.486,22,287554 millions, 681.375,12,800564 millions 5.312.488,49,191954 millions, 681.382,62,287464 millions 5.312.493,11,590554 millions, 681.385,88,903564 millions 5.312.494,88,743254 millions, 681.387,74,606564 millions 5.312.495,25,494754 millions, 681.393,90,959164 millions 5.312.496,00,535955 millions, 681.389,15,656464 millions 5.312.487,38,890554 millions, 681.365,00,476264 millions 5.312.481,62,211554 millions, 681.327,726,005639 millions 5.312.490,52,129555 millions, 681.306,883,836639 millions 5.312.494,37,629255 millions, 681.298,999,414638 millions 5.312.496,84,720955 millions, 681.306,938,491638 millions 5.312.528,24,474655 millions)))681.363,302,624639 millions 5.312.486,88,334655 millions, 681.366,15,656264 millions 5.312.485,92,264755 millions, 681.369,80,127664 millions 5.312.486,22,287554 millions, 681.375,12,800564 millions 5.312.488,49,191954 millions, 681.382,62,287464 millions 5.312.493,11,590554 millions, 681.385,88,903564 millions 5.312.494,88,743254 millions, 681.387,74,606564 millions 5.312.495,25,494754 millions, 681.393,90,959164 millions 5.312.496,00,535955 millions, 681.389,15,656464 millions 5.312.487,38,890554 millions, 681.365,00,476264 millions 5.312.481,62,211554 millions, 681.327,726,005639 millions 5.312.490,52,129555 millions, 681.306,883,836639 millions 5.312.494,37,629255 millions, 681.298,999,414638 millions 5.312.496,84,720955 millions, 681.306,938,491638 millions 5.312.528,24,474655 millions)))681.363,302,624639 millions 5.312.486,88,334655 millions, 681.366,15,656264 millions 5.312.485,92,264755 millions, 681.369,80,127664 millions 5.312.486,22,287554 millions, 681.375,12,800564 millions 5.312.488,49,191954 millions, 681.382,62,287464 millions 5.312.493,11,590554 millions, 681.385,88,903564 millions 5.312.494,88,743254 millions, 681.387,74,606564 millions 5.312.495,25,494754 millions, 681.393,90,959164 millions 5.312.496,00,535955 millions, 681.389,15,656464 millions 5.312.487,38,890554 millions, 681.365,00,476264 millions 5.312.481,62,211554 millions, 681.327,726,005639 millions 5.312.490,52,129555 millions, 681.306,883,836639 millions 5.312.494,37,629255 millions, 681.298,999,414638 millions 5.312.496,84,720955 millions, 681.306,938,491638 millions 5.312.528,24,474655 millions)))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, 681.327,726,005639 millions 5.312.490,52,129555 millions, 681.306,883,836639 millions 5.312.494,37,629255 millions, 681.298,999,414638 millions 5.312.496,84,720955 millions, 681.306,938,491638 millions 5.312.528,24,474655 millions)))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, 681.327,726,005639 millions 5.312.490,52,129555 millions, 681.306,883,836639 millions 5.312.494,37,629255 millions, 681.298,999,414638 millions 5.312.496,84,720955 millions, 681.306,938,491638 millions 5.312.528,24,474655 millions)))681365.00476264 5312481.62211554, 681327.726005639 5312490.52129555, 681306.883836639 5312494.37629255, 681298.999414638 5312496.84720955, 681306.938491638 5312528.244745))681365.00476264 5312481.62211554, 681327.726005639 5312490.52129555, 681306.883836639 5312494.37629255, 681298.999414638 5312496.84720955, 681306.938491638 5312528.244745))


JTS / GEOS in realtà non hanno una makeValidfunzione. Quello di OpenJUMP è personalizzato per quell'applicazione, così come PostGIS '.
dbaston,

@dbaston, grazie, avrei dovuto controllare i fatti sourceforge.net/p/jts-topo-suite/mailman/message/34695185 .
user30184

Ho modificato la risposta. MakeValid sembra essere nella lista dei desideri di JTS slideshare.net/jgarnett/state-of-jts-2017 .
user30184
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.