Ordinare i risultati in PostGIS

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

Ordinare i risultati in PostGIS

Francesco-4
Salve a tutti,
ho un problema con l'ordinamento dei risultati di una select con postgis
che magari qualcuno di voi ha già affrontato..

Questa è la situazione: ho due tabelle, che contengono linee, diciamo A e B.
Partendo da una linea di A, devo selezionare gli attributi di tutte le
linee che intersecano la linea di A della tabella B.
In buona sostanza
select B.campo from B inner join A on ST_Intersects(B.geom, A.geom)
where A.gid=X

La query sembra funzionare, il problema è che ho bisogno di quei
risultati ordinati per la linea di A.
Qualcosa tipo "order by A.geom"...

Faccio un esempio per spiegare meglio: diciamo che in A ho dei percorsi
e in B le ferrovie.
Voglio trovare i punti in cui il percorso passa sulla ferrovia,
nell'ordine in cui ci passerà.

Si può fare? Ci sto pensando da parecchio ma non ho trovato nessuna
soluzione...

Grazie mille


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

Re: Ordinare i risultati in PostGIS

giuliano su Tiscali
On Fri, 05 Feb 2010 17:04:30 +0100
Francesco <[hidden email]> wrote:

> Salve a tutti,
> ........
> Faccio un esempio per spiegare meglio: diciamo che in A ho dei
> percorsi e in B le ferrovie.
> Voglio trovare i punti in cui il percorso passa sulla ferrovia,
> nell'ordine in cui ci passerà.

non aiuto la soluzione, ma forse a chiarire meglio la domanda :-)))

cosa intendi 'nell'ordine in cui passera': vuoi forse dire secondo la
maggiore (o minore) distanza dell'intersezione da un punto di
riferimento?


> Grazie mille

> Francesco

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

Re: Ordinare i risultati in PostGIS

Diego Guidotti - Aedit s.r.l.
In reply to this post by Francesco-4
Se ho capito bene dovresti usare la funzione di segmentazione dinamica [1]

Date le due geometrie (strade e ferrovie) la seguente query ordina le strade per il risultato della funzione st_line_locate_point che, data una linea ed un punto che la interseca, da come risultato un numero tra zero ed 1 che indica la distanza dall'inizio ella linea del punto intersecante.

select f.nome, s.nome , ST_line_locate_point(f.the_geom,ST_intersection(f.the_geom, s.the_geom)) as lungo
from ferro f, strade s
WHERE intersects(f.the_geom, s.the_geom) order by f.nome, lungo

Ciao,
Diego



[1] http://postgis.refractions.net/documentation/manual-1.3SVN/ch06.html#id2881111


2010/2/5 Francesco <[hidden email]>
Salve a tutti,
ho un problema con l'ordinamento dei risultati di una select con postgis che magari qualcuno di voi ha già affrontato..

Questa è la situazione: ho due tabelle, che contengono linee, diciamo A e B.
Partendo da una linea di A, devo selezionare gli attributi di tutte le linee che intersecano la linea di A della tabella B.
In buona sostanza
select B.campo from B inner join A on ST_Intersects(B.geom, A.geom) where A.gid=X

La query sembra funzionare, il problema è che ho bisogno di quei risultati ordinati per la linea di A.
Qualcosa tipo "order by A.geom"...

Faccio un esempio per spiegare meglio: diciamo che in A ho dei percorsi e in B le ferrovie.
Voglio trovare i punti in cui il percorso passa sulla ferrovia, nell'ordine in cui ci passerà.

Si può fare? Ci sto pensando da parecchio ma non ho trovato nessuna soluzione...

Grazie mille


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


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

Re: Ordinare i risultati in PostGIS

Francesco-4
Grazie mille per le risposte. Mi hanno portato dritto alla soluzione.

Saluti


Francesco



Diego Guidotti - Aedit s.r.l. ha scritto:
Se ho capito bene dovresti usare la funzione di segmentazione dinamica [1]

Date le due geometrie (strade e ferrovie) la seguente query ordina le strade per il risultato della funzione st_line_locate_point che, data una linea ed un punto che la interseca, da come risultato un numero tra zero ed 1 che indica la distanza dall'inizio ella linea del punto intersecante.

select f.nome, s.nome , ST_line_locate_point(f.the_geom,ST_intersection(f.the_geom, s.the_geom)) as lungo
from ferro f, strade s
WHERE intersects(f.the_geom, s.the_geom) order by f.nome, lungo

Ciao,
Diego



[1] http://postgis.refractions.net/documentation/manual-1.3SVN/ch06.html#id2881111


2010/2/5 Francesco <[hidden email]>
Salve a tutti,
ho un problema con l'ordinamento dei risultati di una select con postgis che magari qualcuno di voi ha già affrontato..

Questa è la situazione: ho due tabelle, che contengono linee, diciamo A e B.
Partendo da una linea di A, devo selezionare gli attributi di tutte le linee che intersecano la linea di A della tabella B.
In buona sostanza
select B.campo from B inner join A on ST_Intersects(B.geom, A.geom) where A.gid=X

La query sembra funzionare, il problema è che ho bisogno di quei risultati ordinati per la linea di A.
Qualcosa tipo "order by A.geom"...

Faccio un esempio per spiegare meglio: diciamo che in A ho dei percorsi e in B le ferrovie.
Voglio trovare i punti in cui il percorso passa sulla ferrovia, nell'ordine in cui ci passerà.

Si può fare? Ci sto pensando da parecchio ma non ho trovato nessuna soluzione...

Grazie mille


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


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


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