[Gfoss] spatialite

a.furieri a lqt.it a.furieri a lqt.it
Dom 27 Maggio 2018 19:32:42 CEST


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


Maggiori informazioni sulla lista Gfoss