spatialite difference

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

spatialite difference

Luca Delucchi
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. 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.
Ho cercato sul web ma non trovato nulla (magari ho cercato male io) al
di fuori del SQL functions reference list ma nessun esempio

--
ciao
Luca

http://gis.cri.fmach.it/delucchi/
www.lucadelu.org
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
502 iscritti all'11.2.2011
Reply | Threaded
Open this post in threaded view
|

Re: spatialite difference

a.furieri
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

_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
502 iscritti all'11.2.2011
Reply | Threaded
Open this post in threaded view
|

Re: spatialite difference

Luca Delucchi
Il 28 aprile 2011 13:07,  <[hidden email]> ha scritto:

> 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.
>

ok, ma avendo solo la geometria corretta della provincia a fianco mi
sono creato la geometria inversa.... speravo che differenze fosse la
soluzione adatta

>
> 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 ...;
>

ok
Risolto il problema precedente ho provato allora a fare un
merge/patch/union delle due tabelle ma ho ricevuto uno strano errore,
non so però se la query è corretta

spatialite> create table uso_suolo_union(
       ...> pk INTEGER PRIMARY KEY AUTOINCREMENT,
       ...> codice_baldo TEXT NOT NULL);
spatialite> select
addgeometrycolumn('uso_suolo_union','geometry',32632,'POLYGON','XY',1)
       ...> ;
addgeometrycolumn('uso_suolo_union','geometry',32632,'POLYGON','XY',1)
1

insert into uso_suolo_union(codice_baldo,geometry) select
a.codice_baldo, GUnion(a.Geometry,b.Geometry) from
uso_suolo_verona2007 as a, uso_suolo_trentino2008 as b union all
select b.codice_baldo, GUnion(a.Geometry,b.Geometry) from
uso_suolo_trentino2008 as b, uso_suolo_verona2007 as a;

> ciao Sandro
>



--
ciao e grazie
Luca

http://gis.cri.fmach.it/delucchi/
www.lucadelu.org
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
502 iscritti all'11.2.2011
Reply | Threaded
Open this post in threaded view
|

Re: spatialite difference

a.furieri
On Thu, 28 Apr 2011 17:17:59 +0200, Luca Delucchi wrote
> Risolto il problema precedente ho provato allora a fare un
> merge/patch/union delle due tabelle ma ho ricevuto uno strano errore,
> non so però se la query è corretta
>

la query sembra pulita: ho provato a farne
girare una strettamente analoga e funziona
senza problemi.

ma a te quale errore darebbe ?
non mi pare di vederlo riportato nel tuo post :-)

ciao Sandro
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
502 iscritti all'11.2.2011
Reply | Threaded
Open this post in threaded view
|

Re: spatialite difference

Luca Delucchi
Il 28 aprile 2011 17:44,  <[hidden email]> ha scritto:

>
> la query sembra pulita: ho provato a farne
> girare una strettamente analoga e funziona
> senza problemi.
>

bene questo mi fa piacere

> ma a te quale errore darebbe ?

SQL error: disk I/O error

per informazione sono tabelle abbastanza pesanti (due usi del suolo provinciali)

> non mi pare di vederlo riportato nel tuo post :-)
>

scusa l'ho perso nel copia e incolla

> ciao Sandro
>

--
ciao
Luca

http://gis.cri.fmach.it/delucchi/
www.lucadelu.org
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
502 iscritti all'11.2.2011
Reply | Threaded
Open this post in threaded view
|

Re: spatialite difference

a.furieri
On Thu, 28 Apr 2011 17:48:54 +0200, Luca Delucchi wrote
> SQL error: disk I/O error
>

LOL :D
mai visto prima ...

SQLITE_IOERR
This value is returned if the operating system informs
SQLite that it is unable to perform some disk I/O
operation. This could mean that there is no more space
left on the disk.

Molto probabilmente hai "allagato" il disco :-)
... magari è il caso di aggiungere qualche
clausola WHERE alle tue SELECT per evitare che
ti esploda *tutto* il prodotto cartesiano delle
due tavole in JOIN

ciao Sandro
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
502 iscritti all'11.2.2011
Reply | Threaded
Open this post in threaded view
|

Re: spatialite difference

Luca Delucchi
2011/4/28  <[hidden email]>:

>
> LOL :D
> mai visto prima ...
>
> SQLITE_IOERR
> This value is returned if the operating system informs
> SQLite that it is unable to perform some disk I/O
> operation. This could mean that there is no more space
> left on the disk.
>
> Molto probabilmente hai "allagato" il disco :-)

no no

df -h .
Filesystem            Size  Used Avail Use% Mounted on
/dev/md2              861G  268G  549G  33% /home

-rwxr-xr-x 1 lucadelu luca 568M 2011-04-29 08:45 montebaldo.sqlite

> ... magari è il caso di aggiungere qualche
> clausola WHERE alle tue SELECT per evitare che
> ti esploda *tutto* il prodotto cartesiano delle
> due tavole in JOIN
>

eh ma a me servono entrambe....che faccio riprovo?

> ciao Sandro
>

--
ciao
Luca

http://gis.cri.fmach.it/delucchi/
www.lucadelu.org
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
502 iscritti all'11.2.2011
Reply | Threaded
Open this post in threaded view
|

Re: spatialite difference

a.furieri
On Fri, 29 Apr 2011 11:13:33 +0200, Luca Delucchi wrote

> > Molto probabilmente hai "allagato" il disco :-)
>
> no no
>
> df -h .
> Filesystem            Size  Used Avail Use% Mounted on
> /dev/md2              861G  268G  549G  33% /home
>
> -rwxr-xr-x 1 lucadelu luca 568M 2011-04-29 08:45 montebaldo.sqlite
>

un errore di I/O potrebbe anche dipendere da un
malfunzionamento HW :-(

> > ... magari è il caso di aggiungere qualche
> > clausola WHERE alle tue SELECT per evitare che
> > ti esploda *tutto* il prodotto cartesiano delle
> > due tavole in JOIN
> >
>
> eh ma a me servono entrambe....che faccio riprovo?
>

magari puoi verificare prima la sola SELECT (senza
insert) per stimare che razza di output genera: oppure
puoi provare con un dataset limitato per verificare
se lavora veramente come ti aspetti

ciao Sandro
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
502 iscritti all'11.2.2011