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:
- La rete è quella di OSM: http://download.geofabrik.de/europe/italy.html
- QGIS: https://qgis.org/it/site/
- SpatiaLite: https://www.gaia-gis.it/fossil/libspatialite/index
- PicPick: per gli screenshot: https://picpick.app/it/
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