Buongiorno e buona domenica a tutti. Sto cercando di effettuare un clip tra
due vettori poligonali in PostGIS. Ho usato questa sintassi: /SELECT ST_Intersection(a1.geometry, a2.geometry) as geometry, a2.class_new as cuas_code, a2.label as cuas_descr FROM ambito as a1, cuas09_select as a2 WHERE ST_Intersects(a1.geometry, a2.geometry);/ E mi è stato restituito questo messaggio: /ERROR: ERRORE: Error performing intersection: TopologyException: Input geom 1 is invalid: Ring Self-intersection at or near point 459149.46875 4514388.5 at 459149.46875 4514388.5 SQL state: XX000/ Mi è chiaro che devo fare una verifica topologica del vettore a2, a1 è un rettangolo, ma non ricordo quale è la sintassi da usare per verificare se nel vettore ci sono gap e overlay. Qualcuno lo sa? Ricordo che per validare le geometrie si usa ST_IsValid e ST_MakeValid ma ho il vuoto per gap e overlay... Cercando in giro ho applicato questo: /select ogc_fid, ST_IsValidReason(geometry) from cuas09_select where not ST_IsValid(geometry);/ Mi ha restituito un elenco di coordinate "problematiche" (es. Ring Self-intersection[459149.46875 4514388.5]) che ho convertito in tabella, esportato in csv e reimportato in QGIS come punti. Ho notato però che nemmeno se vado oltre al 200:1 si notano buchi... ----- Ingegnere, consulente GIS e ciclista urbano -- Sent from: http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/ _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017
Consulente GIS, Formatore, Blogger e Ciclista Urbano
email: info@massimilianomoraca.it
cell: 333 5949583 (lun-ven, 9.00-18.00)
website: massimilianomoraca.it
|
ciao Massimiliano,
perché parli di "buchi"'? postgis ti sta dicendo che sul layer "cuas09_select" trova delle self-intersection, affettuosamente chiamate farfalline, nodini sugli spigoli . se sono tante e tutte veramente molto "piccole" potresti provare ad effettuare una semplificazione con ST_Snaptogrid. altrimenti in questi casi anche ST_MakeValid funziona bene. saluti, francesco Il giorno 4 febbraio 2018 08:51, Massimiliano Moraca < [hidden email]> ha scritto: > > > /ERROR: ERRORE: Error performing intersection: TopologyException: Input > geom > 1 is invalid: Ring Self-intersection at or near point 459149.46875 > 4514388.5 > at 459149.46875 4514388.5 > > ... > > Mi ha restituito un elenco di coordinate "problematiche" (es. Ring > Self-intersection[459149.46875 4514388.5]) che ho convertito in tabella, > esportato in csv e reimportato in QGIS come punti. Ho notato però che > nemmeno se vado oltre al 200:1 si notano buchi... > > > [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017 |
Grazie mille Francesco, mi ha confuso la dicitura Ring Self-intersection.
Ho fatto come hai detto ed effettivamente ho risolto. Resta però la curiosità di quale è la giusta sintassi per individuare gap e overlay. Tu lo sai? Il giorno 4 febbraio 2018 12:08, francesco marucci < [hidden email]> ha scritto: > ciao Massimiliano, > perché parli di "buchi"'? > > postgis ti sta dicendo che sul layer "cuas09_select" trova delle > self-intersection, affettuosamente chiamate farfalline, nodini sugli > spigoli > . > se sono tante e tutte veramente molto "piccole" potresti provare ad > effettuare una semplificazione con ST_Snaptogrid. > altrimenti in questi casi anche ST_MakeValid funziona bene. > > saluti, > francesco > > > Il giorno 4 febbraio 2018 08:51, Massimiliano Moraca < > [hidden email]> ha scritto: > > > > > > > /ERROR: ERRORE: Error performing intersection: TopologyException: Input > > geom > > 1 is invalid: Ring Self-intersection at or near point 459149.46875 > > 4514388.5 > > at 459149.46875 4514388.5 > > > > ... > > > > Mi ha restituito un elenco di coordinate "problematiche" (es. Ring > > Self-intersection[459149.46875 4514388.5]) che ho convertito in tabella, > > esportato in csv e reimportato in QGIS come punti. Ho notato però che > > nemmeno se vado oltre al 200:1 si notano buchi... > > > > > > > _______________________________________________ > [hidden email] > http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss > Questa e' una lista di discussione pubblica aperta a tutti. > I messaggi di questa lista non hanno relazione diretta con le posizioni > dell'Associazione GFOSS.it. > 796 iscritti al 28/12/2017 [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017
Consulente GIS, Formatore, Blogger e Ciclista Urbano
email: info@massimilianomoraca.it
cell: 333 5949583 (lun-ven, 9.00-18.00)
website: massimilianomoraca.it
|
ciao,
immagino che la tua esigenza si quella di trovare eventuali overlay tra poligoni appartenenti allo stesso layer, giusto? in questo caso questo potrebbe aiutarti (un intersect con se stesso): select g1.gid, g2.gid, from cuas09_select g1 left join cuas09_select g2 on st_intersects(g1.geom,g2.geom) where g1.gid <> g2.gid and st_area(st_intersection(g1.geom,g2.geom))>0.0001 (riduci o amplia quel 0.0001 a seconda della precisione del tuo layer) per quanto riguarda quelli che tu chiami "gap", immagino che intendi quei "buchi" tra un poligono e l'altro che non ti rendono il tuo layer a copertura continua, giusto? facendo questa query e salvandola in una vista geometrica: select row_number() over() as gid, (gaps.geom).geom from ( select ST_Dump(ST_Difference( (select ST_Setsrid(ST_Extent(geom),4326)::geometry geom from cuas09_select), (select ST_Union(geom) from cuas09_select) )) as geom) as gaps; (devi cambiare l'srs del layer) riesci ad avere dei poligoni interni che ti aiutano a trovare i gap "interni" (oltre a quelli esterni che invece hanno senso di esistere). facci sapere. saluti, francesco Il giorno 4 febbraio 2018 12:14, Massimiliano Moraca < [hidden email]> ha scritto: > Grazie mille Francesco, mi ha confuso la dicitura Ring > Self-intersection. Ho fatto come hai detto ed effettivamente ho risolto. > > Resta però la curiosità di quale è la giusta sintassi per individuare gap > e overlay. Tu lo sai? > > Il giorno 4 febbraio 2018 12:08, francesco marucci < > [hidden email]> ha scritto: > >> ciao Massimiliano, >> perché parli di "buchi"'? >> >> postgis ti sta dicendo che sul layer "cuas09_select" trova delle >> self-intersection, affettuosamente chiamate farfalline, nodini sugli >> spigoli >> . >> se sono tante e tutte veramente molto "piccole" potresti provare ad >> effettuare una semplificazione con ST_Snaptogrid. >> altrimenti in questi casi anche ST_MakeValid funziona bene. >> >> saluti, >> francesco >> >> >> Il giorno 4 febbraio 2018 08:51, Massimiliano Moraca < >> [hidden email]> ha scritto: >> >> > >> > >> > /ERROR: ERRORE: Error performing intersection: TopologyException: Input >> > geom >> > 1 is invalid: Ring Self-intersection at or near point 459149.46875 >> > 4514388.5 >> > at 459149.46875 4514388.5 >> > >> > ... >> > >> > Mi ha restituito un elenco di coordinate "problematiche" (es. Ring >> > Self-intersection[459149.46875 4514388.5]) che ho convertito in tabella, >> > esportato in csv e reimportato in QGIS come punti. Ho notato però che >> > nemmeno se vado oltre al 200:1 si notano buchi... >> > >> > >> > >> _______________________________________________ >> [hidden email] >> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss >> Questa e' una lista di discussione pubblica aperta a tutti. >> I messaggi di questa lista non hanno relazione diretta con le posizioni >> dell'Associazione GFOSS.it. >> 796 iscritti al 28/12/2017 > > > [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017 |
Era proprio questo che cercavo, grazie e buona domenica :)
Il giorno 4 febbraio 2018 13:26, francesco marucci < [hidden email]> ha scritto: > ciao, > immagino che la tua esigenza si quella di trovare eventuali overlay tra > poligoni appartenenti allo stesso layer, giusto? > in questo caso questo potrebbe aiutarti (un intersect con se stesso): > > select g1.gid, g2.gid, > from cuas09_select g1 > left join cuas09_select g2 on st_intersects(g1.geom,g2.geom) > where g1.gid <> g2.gid and st_area(st_intersection(g1. > geom,g2.geom))>0.0001 > > (riduci o amplia quel 0.0001 a seconda della precisione del tuo layer) > > per quanto riguarda quelli che tu chiami "gap", immagino che intendi quei > "buchi" tra un poligono e l'altro che non ti rendono il tuo layer a > copertura continua, giusto? > > facendo questa query e salvandola in una vista geometrica: > > select row_number() over() as gid, (gaps.geom).geom > from ( > select ST_Dump(ST_Difference( > (select ST_Setsrid(ST_Extent(geom),4326)::geometry geom from > cuas09_select), > (select ST_Union(geom) from cuas09_select) > )) as geom) as gaps; > > (devi cambiare l'srs del layer) > > riesci ad avere dei poligoni interni che ti aiutano a trovare i gap > "interni" (oltre a quelli esterni che invece hanno senso di esistere). > > facci sapere. > > saluti, > francesco > > > Il giorno 4 febbraio 2018 12:14, Massimiliano Moraca < > [hidden email]> ha scritto: > >> Grazie mille Francesco, mi ha confuso la dicitura Ring >> Self-intersection. Ho fatto come hai detto ed effettivamente ho risolto. >> >> Resta però la curiosità di quale è la giusta sintassi per individuare gap >> e overlay. Tu lo sai? >> >> Il giorno 4 febbraio 2018 12:08, francesco marucci < >> [hidden email]> ha scritto: >> >>> ciao Massimiliano, >>> perché parli di "buchi"'? >>> >>> postgis ti sta dicendo che sul layer "cuas09_select" trova delle >>> self-intersection, affettuosamente chiamate farfalline, nodini sugli >>> spigoli >>> . >>> se sono tante e tutte veramente molto "piccole" potresti provare ad >>> effettuare una semplificazione con ST_Snaptogrid. >>> altrimenti in questi casi anche ST_MakeValid funziona bene. >>> >>> saluti, >>> francesco >>> >>> >>> Il giorno 4 febbraio 2018 08:51, Massimiliano Moraca < >>> [hidden email]> ha scritto: >>> >>> > >>> > >>> > /ERROR: ERRORE: Error performing intersection: TopologyException: Input >>> > geom >>> > 1 is invalid: Ring Self-intersection at or near point 459149.46875 >>> > 4514388.5 >>> > at 459149.46875 4514388.5 >>> > >>> > ... >>> > >>> > Mi ha restituito un elenco di coordinate "problematiche" (es. Ring >>> > Self-intersection[459149.46875 4514388.5]) che ho convertito in >>> tabella, >>> > esportato in csv e reimportato in QGIS come punti. Ho notato però che >>> > nemmeno se vado oltre al 200:1 si notano buchi... >>> > >>> > >>> > >>> _______________________________________________ >>> [hidden email] >>> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss >>> Questa e' una lista di discussione pubblica aperta a tutti. >>> I messaggi di questa lista non hanno relazione diretta con le posizioni >>> dell'Associazione GFOSS.it. >>> 796 iscritti al 28/12/2017 >> >> >> > [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017
Consulente GIS, Formatore, Blogger e Ciclista Urbano
email: info@massimilianomoraca.it
cell: 333 5949583 (lun-ven, 9.00-18.00)
website: massimilianomoraca.it
|
Free forum by Nabble | Edit this page |