SpatiaLite: estrarre i vertici da un vettore lineare

Per lavoro ho avuto la necessità di estrarre i vertici di un vettore lineare e per fare questa semplice operazione ho seguito due vie diverse, vediamo quale è più performante usando SpatiaLite 5.0 Beta1:

La rete è caratterizzata da oltre 14.000 archi:

La prima query a cui ho pensato è stata la seguente:

-- crea geotabella vuota "vertici_rete"
SELECT DropGeoTable( "vertici_rete");
CREATE TABLE "vertici_rete" (
"pk_uid" INTEGER PRIMARY KEY AUTOINCREMENT, 
"name" INTEGER);
SELECT AddGeometryColumn ('vertici_rete','geom',4326,'POINT','XY');

-- popola la geotabella "vertici_rete" 
-- con il primo e ultimo vertice della rete
INSERT INTO "vertici_rete" 
SELECT NULL, "name", ST_PointN(geom,1) as geom
FROM "roads" 
UNION ALL
SELECT NULL, "name", ST_PointN(geom,-1) as geom 
FROM "roads";
SELECT RecoverGeometryColumn('vertici_rete','geom',4326,'POINT','XY')

la query impiega 1,875 secondi

generando:

La seconda query è la seguente:

-- crea geotabella vertici_rete2
SELECT DropGeoTable( "vertici_rete1");
CREATE TABLE "vertici_rete1" AS
SELECT "name", ST_Boundary(geom) as geom
FROM "roads" ;
SELECT RecoverGeometryColumn('vertici_rete1','geom',4326,'MULTIPOINT','XY');

-- crea geotabella vertici2
SELECT DropGeoTable( "vertici_rete2");
SELECT ElementaryGeometries( 'vertici_rete1' ,
                             'geom' , 
				     'vertici_rete2' ,
				     'out_pk' , 
				     'out_multi_id', 1 ) as num,
				     'point splitted' as label;

-- cancella la geotabella non più utile
SELECT DropGeoTable( "vertici_rete1");

questa query impiega: 2,012 secondi

generando:

Lascio a voi ulteriori analisi e conclusioni. (Secondo voi quale delle due ho utilizzato??, oppure esiste altra via usando sempre SQL??)


Riferimenti:


Se il blog post vi è piaciuto cliccate su ‘Mi piace’, grazie!!!
if you liked the blog post click on ‘Like’, thank you !!!

Se il post vi è stato utile contribuite a mantenerlo aggiornato PayPal

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 )

Google photo

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

Foto Twitter

Stai commentando usando il tuo account Twitter. 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.