[Gfoss] spatialite difference

a.furieri a lqt.it a.furieri a lqt.it
Gio 28 Apr 2011 13:07:15 CEST


On Thu, 28 Apr 2011 11:31:55 +0200, Luca Delucchi wrote
> Volevo chiedere come utilizzire la funzione Difference in spatialite,
> per capire se è utile al mio problema. Ho una tabella che contiene
> l'uso del suolo di una provincia che ha il brutto difetto di finire
> anche all'interno di un'altra provincia. Vorrei rimuovere le parti in
> eccesso utilizzando la funzione sopra citata e la geometria della
> provincia in cui ricadono le geometrie di troppo.
>

la ST_Difference() non sembra la funzione più indicata
per fare quello che intendi tu.
ST_Difference(g1, g2) valuta le due geometrie e genera
una terza geometria che rappresenta la "differenza"
tra le due precedenti (g1-g2).
Quindi, se un uso_suolo è completamente compreso
entro la tua provincia ... ritornerà un bel NULL :-(
e non credo proprio che sia quello che tu cerchi. 

direi che a te serve la ST_Intersection(), che invece
valuta due geometrie e ritorna la porzione comune ad
entrambe; quindi nel tuo caso 'taglia via' le porzioni 
di uso_suolo fuori provincia.


> Ho provato così
> 
> create table test_diff as select a.CODICE_NUM,
> Difference(a.Geometry,b.Geometry) from uso_suolo as a, provincia as b
> 
> ma mi ha restituito una tabella con solo il codice e senza geometria.
>

non credo proprio: ti avrà restituito piuttosto una tabella
con il codice correttamente valorizzato, e con le geometrie
tutte impostate a NULL (vedi sopra).

N.B. se usi brutalmente CREATE TABLE .. AS SELECT ..
troverai inizialmente dei generici BLOB: per ottenere
delle 'vere' geometrie dovrai poi eseguire: 
SELECT RecoverGeometryColumn()
e la colonna geom avrà un nome orribile :-(

molto meglio se prima ti crei a modo la tavola
target con la sua geometria, e poi esegui:
INSERT INTO ... (...)
SELECT .... FROM ...;

> Ho cercato sul web ma non trovato nulla (magari ho cercato male io)
> al di fuori del SQL functions reference list ma nessun esempio
> 

http://www.gaia-gis.it/spatialite/spatialite-tutorial-2.3.1.html#t4.3

BTW tutte queste funzioni (Difference, Union, Intersection etc)
sono esattamente identiche a quelle di PostGIS :-)

ciao Sandro



Maggiori informazioni sulla lista Gfoss