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

Pubblicità

5 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

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

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