[Gfoss] SQL ottenere attributi tramite geometria

Ciao a tutti,

avrei bisogno di passare degli attributi da alcuni elementi ad altri
nella stessa tabella e l'unico modo per fare il match è tramite le
geometrie, queste combaciano perfettamente anche se in alcuni casi
sono solo porzioni.
I dati provengono da OSM e importati in PostGIS tramite osm2pgsql, io
dovrei passare le informazioni di una linea in un'altra linea che è
solo una porzione della prima.

Ho provato con ST_Overlaps ma mi ritorna troppi pochi valori (29), io
me ne aspetto migliaia, la query che ho usato è la seguente

select
  i.highway, l.route, l.ref
from
  planet_osm_line as i,
  (select route, ref, way from planet_osm_line where route='hiking') as l
where
  highway in ('path') and ST_Overlaps(i.way, l.way);

qualcuno mi dice dove sbaglio?

grazie

--
ciao
Luca

http://gis.cri.fmach.it/delucchi/
www.lucadelu.org

Ciao, domandone:

  • le linee “destinazione” sono strettamente contenute dentro le linee “sorgente” oppure sporgono un po’?
  • una linea “destinazione” si sovrappone (anche parzialmente) con solo una linea “sorgente”?
···

Il 05/11/2015 07:20, Luca Delucchi ha scritto:

Ciao a tutti,

avrei bisogno di passare degli attributi da alcuni elementi ad altri
nella stessa tabella e l'unico modo per fare il match è tramite le
geometrie, queste combaciano perfettamente anche se in alcuni casi
sono solo porzioni.
I dati provengono da OSM e importati in PostGIS tramite osm2pgsql, io
dovrei passare le informazioni di una linea in un'altra linea che è
solo una porzione della prima.

Ho provato con ST_Overlaps ma mi ritorna troppi pochi valori (29), io
me ne aspetto migliaia, la query che ho usato è la seguente

select
  i.highway, l.route, l.ref
from
  planet_osm_line as i,
  (select route, ref, way from planet_osm_line where route='hiking') as l
where
  highway in ('path') and ST_Overlaps(i.way, l.way);

qualcuno mi dice dove sbaglio?

grazie

Che intendi per “sporgere” ?
Le linee sono monodimensionali e non hanno spessore.
Ma forse ti riferivi a un tratto che fuoriesce dalla sovrapposizione ?

A.

Il 05 nov 2015 11:53 AM, “Marco Li Volsi” <marco.livolsi@gmail.com> ha scritto:

Ciao, domandone:

  • le linee “destinazione” sono strettamente contenute dentro le linee “sorgente” oppure sporgono un po’?
  • una linea “destinazione” si sovrappone (anche parzialmente) con solo una linea “sorgente”?

Il 05/11/2015 07:20, Luca Delucchi ha scritto:

Ciao a tutti,

avrei bisogno di passare degli attributi da alcuni elementi ad altri
nella stessa tabella e l'unico modo per fare il match è tramite le
geometrie, queste combaciano perfettamente anche se in alcuni casi
sono solo porzioni.
I dati provengono da OSM e importati in PostGIS tramite osm2pgsql, io
dovrei passare le informazioni di una linea in un'altra linea che è
solo una porzione della prima.

Ho provato con ST_Overlaps ma mi ritorna troppi pochi valori (29), io
me ne aspetto migliaia, la query che ho usato è la seguente

select
  i.highway, l.route, l.ref
from
  planet_osm_line as i,
  (select route, ref, way from planet_osm_line where route='hiking') as l
where
  highway in ('path') and ST_Overlaps(i.way, l.way);

qualcuno mi dice dove sbaglio?

grazie


Gfoss@lists.gfoss.it
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.
786 iscritti al 30.9.2015

esattamente:

···

Il 05/11/2015 12:01, Andrea Peri ha scritto:

Che intendi per “sporgere” ?
Le linee sono monodimensionali e non hanno spessore.
Ma forse ti riferivi a un tratto che fuoriesce dalla sovrapposizione ?

A.

Il 05 nov 2015 11:53 AM, “Marco Li Volsi” <marco.livolsi@gmail.com> ha scritto:

Ciao, domandone:

  • le linee “destinazione” sono strettamente contenute dentro le linee “sorgente” oppure sporgono un po’?
  • una linea “destinazione” si sovrappone (anche parzialmente) con solo una linea “sorgente”?

Il 05/11/2015 07:20, Luca Delucchi ha scritto:

Ciao a tutti,

avrei bisogno di passare degli attributi da alcuni elementi ad altri
nella stessa tabella e l'unico modo per fare il match è tramite le
geometrie, queste combaciano perfettamente anche se in alcuni casi
sono solo porzioni.
I dati provengono da OSM e importati in PostGIS tramite osm2pgsql, io
dovrei passare le informazioni di una linea in un'altra linea che è
solo una porzione della prima.

Ho provato con ST_Overlaps ma mi ritorna troppi pochi valori (29), io
me ne aspetto migliaia, la query che ho usato è la seguente

select
  i.highway, l.route, l.ref
from
  planet_osm_line as i,
  (select route, ref, way from planet_osm_line where route='hiking') as l
where
  highway in ('path') and ST_Overlaps(i.way, l.way);

qualcuno mi dice dove sbaglio?

grazie


Gfoss@lists.gfoss.it
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.
786 iscritti al 30.9.2015

Secondo me sei on presenza di una situazione di linee che non collimano esattamente. Il che può succedere se i vertici delle due linee confrontate non coincidono.

Come controprova USA la funzione sharedpath che ti ritorna due collezioni.
Una dei tratti che coincidono e una dei tratti che non coincidono.
La somma ti darà la linea intera.
Se va come pensò sarà quasi tutto nella parte che non coincide.

Il 05 nov 2015 7:21 AM, “Luca Delucchi” <lucadeluge@gmail.com> ha scritto:

Ciao a tutti,

avrei bisogno di passare degli attributi da alcuni elementi ad altri
nella stessa tabella e l’unico modo per fare il match è tramite le
geometrie, queste combaciano perfettamente anche se in alcuni casi
sono solo porzioni.
I dati provengono da OSM e importati in PostGIS tramite osm2pgsql, io
dovrei passare le informazioni di una linea in un’altra linea che è
solo una porzione della prima.

Ho provato con ST_Overlaps ma mi ritorna troppi pochi valori (29), io
me ne aspetto migliaia, la query che ho usato è la seguente

select
i.highway, l.route, l.ref
from
planet_osm_line as i,
(select route, ref, way from planet_osm_line where route=‘hiking’) as l
where
highway in (‘path’) and ST_Overlaps(i.way, l.way);

qualcuno mi dice dove sbaglio?

grazie


ciao
Luca

http://gis.cri.fmach.it/delucchi/
www.lucadelu.org


Gfoss@lists.gfoss.it
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.
786 iscritti al 30.9.2015

Interseca gli prende anche roba che si incrocia e anche i tratti in contatto sui nodi start/end.

Il 05 nov 2015 12:29 PM, “Amedeo Fadini” <fame@libero.it> ha scritto:

2015-11-05 12:06 GMT+01:00 Andrea Peri <aperi2007@gmail.com>:

Secondo me sei on presenza di una situazione di linee che non collimano
esattamente. Il che può succedere se i vertici delle due linee confrontate
non coincidono.
Ma dalla query si capisce che le geometrie vengono dalla stessa tabella…
Possono essere le stesse linee digitate da mapper diversi?
Se fosse così con ST_intesects() non dovrebbe risolvere?
Magari serve filtrare i risultati per tipo di geometria (escludendo i punti)…

amefad

2015-11-05 11:53 GMT+01:00 Marco Li Volsi <marco.livolsi@gmail.com>:

Ciao, domandone:

ciao

le linee "destinazione" sono strettamente contenute dentro le linee
"sorgente" oppure sporgono un po'?

no dovrebbero essere completamente contenute

una linea "destinazione" si sovrappone (anche parzialmente) con solo una
linea "sorgente"?

non è detto (ecco questo è un punto a cui non avevo pensato)

--
ciao
Luca

http://gis.cri.fmach.it/delucchi/
www.lucadelu.org

2015-11-05 12:06 GMT+01:00 Andrea Peri <aperi2007@gmail.com>:

Secondo me sei on presenza di una situazione di linee che non collimano
esattamente. Il che può succedere se i vertici delle due linee confrontate
non coincidono.

utilizzando ST_Within invece di ST_Overlaps ottengo un ottimo
risultato (quasi perfetto), solo alcune linee non vengono prese in
considerazione,

Come controprova USA la funzione sharedpath che ti ritorna due collezioni.

bella funzione, ma poi come posso usare il risultato di questa funzione?

--
ciao
Luca

http://gis.cri.fmach.it/delucchi/
www.lucadelu.org