Buona domenica a tutti,
ho un problema che non riesco a risolvere, utilizzo spatialite 4.5 tramite spatialite_gui 2.1.0 devel su macchina win10 64b allego il database db_03.sqlite [0] con due geotabelle: - nodes_all : tabella con geometria POINT 3045 XY - strade: tabella con geometria LINESTRING 3045 XY il mio obiettivo è quello di dividere le strade in corrispondenza dei punti, cosa che riesco a fare per numero di punti e linee limitato, per questo db non riesco e vorrei capire perché lo script, da me realizzato, non funziona in particolare lo step4 (script.sql [0]) che ritorna (facendo il Check geometry) due tipologie di geometria (linestring e multilinestring) e quindi lo step5 non genera nessuna geometria. --step4 CREATE TABLE "lines_split" AS SELECT a.pk AS id, ST_LinesCutAtNodes(st_segmentize(a.geom,6),ST_Union(b.geom)) AS geom FROM "strade" a, "points_snapped" b GROUP BY a.pk,a.geom; SELECT RecoverGeometryColumn('lines_split','geom',3045,'MULTILINESTRING','XY'); PS: lo step1 dura parecchio, circa 12 minuti (perdonatemi!) Grazie [0] https://mega.nz/#!VcAnzIzI!SVJUVxoB_rGHrUPtMgpxC5WZDpf0so2CawCRlEchtxU ----- https://pigrecoinfinito.wordpress.com/ -- Sent from: http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/ _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017 |
Non l'ho testato e potrebbe essermi sfuggito qualche errore:
prova un po' ------------------------- select 'Creazione indice spaziale su ', 'nodes_all','geom', coalesce(checkspatialindex('nodes_all','geom'),CreateSpatialIndex('nodes_all','geom')); select dropgeotable('_templines'); create table _templines(pk_uid integer primary key autoincrement, id integer); select addgeometrycolumn('_templines','geom',(SELECT cast(srid as integer) FROM geometry_columns WHERE lower(f_table_name) = lower('strade') AND lower(f_geometry_column) = lower('geom')), 'multilinestring', 'xy'); insert into _templines (id, geom) SELECT a.pk AS id, casttomulti(ST_Split( a.geom, (select casttomultipoint(st_collect(b.geom)) from "points_snapped" as b where b.rowid in (select rowid from spatialindex where f_table_name = 'points_snapped' and f_geometry_column = 'geom' and search_frame = a.geom)))) as geom from "strade" a; select dropgeotable('lines_split'); select ElementaryGeometries( '_templines' , 'geom' , 'lines_split' , 'out_pk' , 'out_multi_id' , 1, ) as num, ' lines splitted' as label; select createspatialindex('lines_split','geom'); select dropgeotable('_templines'); select UpdateLayerStatistics('lines_split'); ------------------------- Ciao, Maurizio Il 27/05/18, pigreco<[hidden email]> ha scritto: > Buona domenica a tutti, > ho un problema che non riesco a risolvere, utilizzo spatialite 4.5 tramite > spatialite_gui 2.1.0 devel su macchina win10 64b > > allego il database db_03.sqlite [0] con due geotabelle: > - nodes_all : tabella con geometria POINT 3045 XY > - strade: tabella con geometria LINESTRING 3045 XY > > il mio obiettivo è quello di dividere le strade in corrispondenza dei punti, > cosa che riesco a fare per numero di punti e linee limitato, per questo db > non riesco e vorrei capire perché lo script, da me realizzato, non funziona > in particolare lo step4 (script.sql [0]) che ritorna (facendo il Check > geometry) due tipologie di geometria (linestring e multilinestring) e quindi > lo step5 non genera nessuna geometria. > > --step4 > CREATE TABLE "lines_split" AS > SELECT a.pk AS id, > ST_LinesCutAtNodes(st_segmentize(a.geom,6),ST_Union(b.geom)) AS geom > FROM "strade" a, "points_snapped" b > GROUP BY a.pk,a.geom; > SELECT > RecoverGeometryColumn('lines_split','geom',3045,'MULTILINESTRING','XY'); > > PS: lo step1 dura parecchio, circa 12 minuti (perdonatemi!) > > Grazie > > [0] https://mega.nz/#!VcAnzIzI!SVJUVxoB_rGHrUPtMgpxC5WZDpf0so2CawCRlEchtxU > > ----- > https://pigrecoinfinito.wordpress.com/ > -- > Sent from: > http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/ > _______________________________________________ > [hidden email] > http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss > Questa e' una lista di discussione pubblica aperta a tutti. > I messaggi di questa lista non hanno relazione diretta con le posizioni > dell'Associazione GFOSS.it. > 796 iscritti al 28/12/2017 [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017 |
Maurizio Trevisani wrote
> Non l'ho testato e potrebbe essermi sfuggito qualche errore: > > prova un po' > > ------------------------- > > select 'Creazione indice spaziale su ', 'nodes_all','geom', > coalesce(checkspatialindex('nodes_all','geom'),CreateSpatialIndex('nodes_all','geom')); > > select dropgeotable('_templines'); > create table _templines(pk_uid integer primary key autoincrement, id > integer); > select addgeometrycolumn('_templines','geom',(SELECT cast(srid as > integer) FROM geometry_columns WHERE lower(f_table_name) = > lower('strade') AND lower(f_geometry_column) = lower('geom')), > 'multilinestring', 'xy'); > > insert into _templines (id, geom) > SELECT a.pk AS id, > casttomulti(ST_Split( a.geom, (select > casttomultipoint(st_collect(b.geom)) from "points_snapped" as b where > b.rowid in (select rowid from spatialindex where f_table_name = > 'points_snapped' and f_geometry_column = 'geom' and search_frame = > a.geom)))) as geom > from "strade" a; > > select dropgeotable('lines_split'); > select ElementaryGeometries( '_templines' , 'geom' , 'lines_split' , > 'out_pk' , 'out_multi_id' , 1, ) as num, ' lines splitted' as label; > select createspatialindex('lines_split','geom'); > select dropgeotable('_templines'); > > select UpdateLayerStatistics('lines_split'); > > ------------------------- > Ciao, > Maurizio Ciao e grazie. Ho appena provato lo script [0] e ottengo la geotabella 'lines_split' ma lanciando il check geometry: count(*)|Geometry Type("geom")|Srid("geom")|CoordDimensio("geom") 849 |Null | Null |Null quindi come posso proseguire? [0] https://gist.github.com/pigreco/a00164ded1a67e4b067b3a8c167a80fa ----- https://pigrecoinfinito.wordpress.com/ -- Sent from: http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/ _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017 |
In reply to this post by pigreco
On Sun, 27 May 2018 02:18:45 -0700 (MST), pigreco wrote:
> in particolare lo step4 (script.sql [0]) che ritorna (facendo il > Check > geometry) due tipologie di geometria (linestring e multilinestring) e > quindi > lo step5 non genera nessuna geometria. > > --step4 > CREATE TABLE "lines_split" AS > SELECT a.pk AS id, > ST_LinesCutAtNodes(st_segmentize(a.geom,6),ST_Union(b.geom)) AS geom > FROM "strade" a, "points_snapped" b > GROUP BY a.pk,a.geom; > SELECT > > RecoverGeometryColumn('lines_split','geom',3045,'MULTILINESTRING','XY'); > su PostGis una colonna MultiQualcosa puo' contenere indifferentemente sia le geometrie MultiPart che le geometrie SinglePart dello stesso tipo, ma SpatiaLite impone vincoli piu' stringenti: o sono tutte MultiPart o sono tutte SinglePart. quando, come nel tuo caso, c'e' di mezzo una funzione che puo' tornare entrambi i tipi c'e' un modo facilissimo per risolvere il problema; basta chiamare l'appropriato operatore di Cast [1] per trasformare tutti i SingleQualcosa nel corrispondente MultiQualcosa. quindi nel tuo caso specifico: SELECT a.pk AS id, CastToMultiLinestring( ST_LinesCutAtNodes(st_segmentize(a.geom,6),ST_Union(b.geom))) AS geom FROM "strade" a, "points_snapped" b GROUP BY a.pk,a.geom; vedrai che a questo punto tornera' tutti MultiLinestring, e quindi la successiva AddGeometryColumn() avra' successo. ciao Sandro [1] http://www.gaia-gis.it/gaia-sins/spatialite-sql-latest.html#cast _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017 |
a.furieri wrote
> quando, come nel tuo caso, c'e' di mezzo una funzione che puo' tornare > entrambi i tipi c'e' un modo facilissimo per risolvere il problema; > basta chiamare l'appropriato operatore di Cast [1] per trasformare > tutti i SingleQualcosa nel corrispondente MultiQualcosa. > quindi nel tuo caso specifico: > > SELECT a.pk AS id, CastToMultiLinestring( > ST_LinesCutAtNodes(st_segmentize(a.geom,6),ST_Union(b.geom))) AS geom > FROM "strade" a, "points_snapped" b > GROUP BY a.pk,a.geom; > > vedrai che a questo punto tornera' tutti MultiLinestring, e quindi la > successiva AddGeometryColumn() avra' successo. > > ciao Sandro Ho fatto tante prove e tra queste ho utilizzato anche il casting con esito negativo, in questo caso e con questo database funziona bene. grazie deduco che il dataset di partenza può far cambiare l'esito del casting. grazie ----- https://pigrecoinfinito.wordpress.com/ -- Sent from: http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/ _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017 |
On Mon, 28 May 2018 00:09:47 -0700 (MST), pigreco wrote:
> Ho fatto tante prove e tra queste ho utilizzato anche il casting con > esito > negativo, > negativo in che senso ? che ti tornava dei NULL ? puoi essere piu' preciso ? > in questo caso e con questo database funziona bene. grazie > > deduco che il dataset di partenza può far cambiare l'esito del > casting. > assolutamente no; il database di partenza non puo' avere nessuna influenza. le funzioni di Casting lavorano in memoria; prendono un geometry-blob, verificano se e' valido e di tipo coerente con il casting richiesto, dopo di che ritornano un nuovo geometry-blob al cui interno e' stato cambiato il valore del GeometryType conformemente alla richiesta. naturalmente alcune operazioni di casting sono sempre proibite; non puoi p.es. trasformare un Point in un Linestring o un Linestring in un Polygon, perche' i due tipi non sono coerenti. e le operazioni di casting proibite ritornano sempre un NULL. puoi invece trasformare qualunque SinglePart nel corrispondente MultiPart, cosi' come puoi trasformare qualsiasi roba in una GeometryCollection. puoi anche provare a trasformare un MultiPart (o una Collection) in un SinglePart, ma solo ed esclusivamente se contiene al suo interno una singola geometria elementare del tipo indicato. ciao Sandro _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017 |
a.furieri wrote
> On Mon, 28 May 2018 00:09:47 -0700 (MST), pigreco wrote: >> Ho fatto tante prove e tra queste ho utilizzato anche il casting con >> esito >> negativo, >> > > negativo in che senso ? che ti tornava dei NULL ? > puoi essere piu' preciso ? > > >> in questo caso e con questo database funziona bene. grazie >> >> deduco che il dataset di partenza può far cambiare l'esito del >> casting. >> > > assolutamente no; il database di partenza non puo' avere nessuna > influenza. > le funzioni di Casting lavorano in memoria; prendono un geometry-blob, > verificano se e' valido e di tipo coerente con il casting richiesto, > dopo > di che ritornano un nuovo geometry-blob al cui interno e' stato > cambiato > il valore del GeometryType conformemente alla richiesta. Purtroppo non riesco più a riprodurre il problema che era il seguente: - senza l'uso del casting ottenevo, dal check geometries, linestring e multilinestring - usando il casting (ora non ricordo bene quale delle due tipologie) creava la geometry multilinestring prendendo SOLO una delle due tipologie; cioè visualizzando il dato mancavano le features. se riesco a riprodurlo condividerò il database. per adesso grazie infinite per le spiegazioni e soprattutto per spatialite, uno strumento che mi stà aiutando moltissimo e mi piacerebbe poter contribuire. PS: per favore, da dove posso scaricare spatialite 4.5 e magari il 5? per adesso utilizzo il 4.3 e il 4.5 ma di quest'ultimo non trovo più il link per scaricarlo. saluti ----- https://pigrecoinfinito.wordpress.com/ -- Sent from: http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/ _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017 |
On Mon, 28 May 2018 03:22:48 -0700 (MST), pigreco wrote:
> PS: per favore, da dove posso scaricare spatialite 4.5 e magari il 5? > per > adesso utilizzo il 4.3 e il 4.5 ma di quest'ultimo non trovo più il > link per > scaricarlo. > regola sempre valida per tutte le versioni ancora in corso di sviluppo e non ancora definitivamente pronte per un rilascio "stable": 1. per ovvi motivi non esistono distro di binari eseguibili (anche se a volte possono essere rilasciati degli snapshots "usa e getta" giusto per promuovere un pizzico di testing "sperimentale" quando serve allo sviluppo). 2. chi usa Linux non dovrebbe incontrare nessun problema particolare nel farsi la propria build a partire dall'ultima versione dei sorgenti che e' sempre scaricabile dal repository Fossil [1],[2] 3. chi usa Windows puo' sempre provare a farsi la sua build dai sorgenti, con l'avvertenza pero' che su Windows tutto diventa mostruosamente piu' difficile di quanto sia su Linux. (diceva mia nonna: "l'hai voluta la bicicletta ? allora pedala !!!") ad ogni modo, esistono due guide how-to [3],[4] a supporto dei coraggiosi impavidi che se la sentono di avventurarsi in una build per Win32 o Win64 (in diversi ci sono riusciti, anche tra chi bazziaca questa ML). ciao Sandro [1] https://www.gaia-gis.it/fossil/libspatialite [2] http://www.gaia-gis.it/gaia-sins/about-fossil.html [3] http://www.gaia-gis.it/gaia-sins/mingw32_how_to.html [4] http://www.gaia-gis.it/gaia-sins/mingw64_how_to.html _______________________________________________ [hidden email] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017 |
Free forum by Nabble | Edit this page |