[Gfoss] Spatialite - calcolo lunghezza 3d

a.furieri a lqt.it a.furieri a lqt.it
Ven 19 Gen 2018 14:01:21 CET


On Fri, 19 Jan 2018 13:15:57 +0100, Totò Fiandaca wrote:
> Ho fatto un rapida prova con spatialite 4.4 e 4.5, stesso risultato:
>

la ST_3DLength() richiede il supporto della libreria librttopo,
e quindi e' disponibile solo sulle versioni piu' recenti
(appunto: 4.4 o 4.5)


> SELECT
> ST_3DLength(GeomFromText('LINESTRINGZ(0 0 0,1 1 1)'))
> risultato:
> 1.732051
>
> NB: devi uisare LINESTRINGZ
>

forse qua e' opportuno puntualizzare: a differenza di
PostGIS, SpatiaLite segue pedantemente le specifiche OGC,
e queste prevedono che nelle espressioni WKT il tipo
della geometria deve anche dichiarare esplicitamente
le dimensioni supportate.
n.b.: l'anomalia di PostGIS e' largamente giustificata
dal fatto che e' nato prima che OGC formalizzasse
definitvamente le specifiche per il WKT.

giusto alcuni esempi banali:

2D (XY)
-------------------
ST_GeomFromText('LINESTRING(0 0,1 1)')

3D (XYZ)
-------------------
ST_GeomFromText('LINESTRING Z(0 0 0,1 1 1)')

2D + misura (XYM)
-------------------
ST_GeomFromText('LINESTRING M(0 0 0,1 1 1)')

3D + misura (XYZM)
-------------------
ST_GeomFromText('LINESTRING ZM(0 0 0 0,1 1 1 1)')


naturalmente la regola si applica a tutti i tipi
geometrici (POINT, POLYGON etc)

n.b. secondo le specifiche OGC lo stile corretto
e' quello che vede uno spazio tra il nome del
tipo e le dimensioni, quindi p.es. "POLYGON ZM";
spatialite e' piu' tollerante, ed ammette un
numero arbitrario di spazi (anche nessuno) tra
i due elementi: "POLYGONZM" o "POLYGON    ZM"
sono perfetti sinonimi.

ovviamente se c'e' conflitto tra la dichiarazione
tipo+dimensioni ed il numero delle coordinate
effettivamente presenti il parsing dell'espressione
WKT fallira' tornando un bel NULL. esempio:

SELECT ST_GeomFromText('LINESTRING(0 0 0,1 1 1)');
-----------
NULL

ciao Sandro



Maggiori informazioni sulla lista Gfoss