Spatialite: unire linee per attributo

Nel mondo GIS l’operazione di unire (fondere) delle geometrie è una operazione che si realizza spesso soprattutto con geometrie di tipo poligonali; in questo blog post vedremo come affrontare il caso di geometrie ti tipo lineari e usando SpatiaLite.

La difficoltà sta nel fatto che l’unione delle linee – usando un attributo – deve avvenire solo per feature che si ‘toccano‘.

esempio:

la tabella attributi:

— Creo tabella
CREATE TABLE "tmp_lineMerge" AS
SELECT ROW_NUMBER() OVER(ORDER BY pk) AS RowNum,
ST_LineMerge(ST_Union(geom)) AS geom,
tipo,
count(*) as nro,
group_concat (pk) as pk_old — occhio!!!
FROM "linee"
GROUP BY tipo
order by 3;
— Ricovero la geometria
SELECT RecoverGeometryColumn('tmp_lineMerge','geom',3004,'Linestring','XY');
— Dump geometria
SELECT ElementaryGeometries( 'tmp_lineMerge' ,
'geom' , 'lines_merge_tipo' ,'out_pk' , 'out_multi_id', 1 ) as num, 'lines' as label;

Riferimenti:

Ringraziamenti:

Database demo

8 pensieri su “Spatialite: unire linee per attributo

  1. Vorrei sapere come hai fatto a compilare spatialite GUI con sqlite 3.25 visto che l’eseguibile (spatialite_gui-NG-win-amd64.7z) disponibile sul sito ufficiale di spatialite è invece compilato con la versione 3.24

    Piace a 1 persona

  2. Interessante articolo, era un po’ che non se ne vedevano di spatialite 😉
    La formula ST_LineMerge(ST_Union(geom)) prima unisce e poi ricrea la linea fondendo eventuali vertici sovrapposti se non erro.
    Invece la “select elementarygeometries() …” a quale scopo? è obbligatoria?
    Grazie e cordiali saluti!

    Piace a 1 persona

  3. Buongiorno, ho un problema simile: dovrei fondere centinaia di segmenti di linee in una dozzina, utilizzando la divisione di un campo in comune nella tabella attributi.

    Non sapendo usare spatialite c’è un’alternativa?

    "Mi piace"

      1. Grazie! Ho provato fondi vettori, ma rimangono segmentati… non capisco perchè.

        Comunque ho risolto provando il comando Dissolvi; in questo caso è possibile impostare il valore di un campo che “unisce” tutti i frammenti

        "Mi piace"

Scrivi una risposta a Antonio Valanzano Cancella risposta

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.