[Gfoss] SpatiaLite e SnapAndSplit

Totò Fiandaca pigrecoinfinito a gmail.com
Dom 13 Giu 2021 10:19:27 CEST


Buongiorno,
fino a ieri per dividere delle MultiLineString 32632 con dei punti
utilizzavo, nel mio script SQL, due aggiornamenti della geometria:
1. per fare lo snap
2. per fare lo split

ho scoperto la funziona SnapAndSplit [0] che dovrebbe fare tutto in un
unico passaggio, sembra funzionare ma da vari test l'uso di SnapAndSplit mi
genera un output con una riga in più rispetto al caso diviso (prima snap e
poi split).

Esiste un motivo teorico oppure devo indagare sulla geometria di input?

primo caso con Snap e Split separati:

-- aggiorna la geometria aggiungendo i vertici X
UPDATE route_X SET geom=
        CastToMulti(
                RemoveRepeatedPoints(
                                    ST_Snap(
                                            route_X.geom,
                                            (SELECT
CastToMultipoint(st_collect(b.geom))
                                            FROM X as b
                                            WHERE b.id = route_X.id
                                            GROUP BY b.id) , 0.001
                                            ), 0.001
                                    )
        )
WHERE EXISTS(
            SELECT 1 FROM X as b
            WHERE b.id = route_X.id limit 1
            );

-- aggiorna la geometria splittando nei punti X
UPDATE route_X SET geom=
    CastToMulti(
                ST_Split(
                        route_X.geom,
                        (SELECT CastToMultiPoint(st_collect(b.geom))
                        FROM X as b
                        WHERE b.id = route_X.id
                        GROUP BY b.id)
                        )
                )
WHERE EXISTS(
            SELECT 1 FROM X as b
            WHERE b.id = route_X.id limit 1
            );

caso con SnapAndSplit

-- aggiorna la geometria aggiungendo i vertici T e splittando, precisione 1
millimetro 4 sec
UPDATE route_T SET geom=
        CastToMulti(
                RemoveRepeatedPoints(
                                    SnapAndSplit(
                                            route_T.geom,
                                            (SELECT
CastToMultipoint(st_collect(b.geom))
                                            FROM T2 as b
                                            WHERE b.id2 = route_T.id
                                            GROUP BY b.id2) , 0.001
                                            ), 0.001
                                    )
        )
WHERE EXISTS(
            SELECT 1 FROM T2 as b
            WHERE b.id2 = route_T.id limit 1
            );

[0] https://www.gaia-gis.it/gaia-sins/spatialite-sql-latest.html

grazie
saluti Totò

-- 
*Ing. Salvatore Fiandaca*
*mobile*.:+39 327.493.8955
*m*: *pigrecoinfinito a gmail.com <pigrecoinfinito a gmail.com>*
*C.F*.: FNDSVT71E29Z103G
*P.IVA*: 06597870820
*membro QGIS Italia - http://qgis.it/ <http://qgis.it/>*
*socio GFOSS.it - *http://gfoss.it/
*blog:*
* https://pigrecoinfinito.com/ <https://pigrecoinfinito.com/> FB: Co-admin
- https://www.facebook.com/qgis.it/ <https://www.facebook.com/qgis.it/>**
<https://www.facebook.com/qgis.it/> *
*TW:  <http://goog_95411464>**https://twitter.com/totofiandaca
<https://twitter.com/totofiandaca>*

43°51'0.54"N  10°34'27.62"E - EPSG:4326

“Se la conoscenza deve essere aperta a tutti,
perchè mai limitarne l’accesso?”
R. Stallman

Questo documento, allegati inclusi, contiene informazioni di proprietà di
FIANDACA SALVATORE e deve essere utilizzato esclusivamente dal destinatario
in relazione alle finalità per le quali è stato ricevuto. E' vietata
qualsiasi forma di riproduzione o divulgazione senza l'esplicito consenso
di FIANDACA SALVATORE. Qualora fosse stato ricevuto per errore si prega di
informare tempestivamente il mittente e distruggere la copia in proprio
possesso.


Maggiori informazioni sulla lista Gfoss