Saluti a tutti
Ho una tabella con dentro delle posizioni gps sequenziali e devo per ognuna calcolare l'azimut rispetto alla posizione precedente, questo mi serve per disegnare una freccia di ogni posizione orientata rispetto al senso di marcia(in OpenLayers), una implementazione che pensavo fosse molto diffusa ed invece ho trovato solo questa query in rete: SELECT round( degrees(ST_Azimuth(pos, LEAD(pos) OVER (PARTITION BY trackid ORDER BY id)))::numeric) AS azimut FROM gps ORDER BY id ASC dove pos è un campo geometry di tipo point con le coordinate di una posizione gps, id è un identificativo incrementato ad ogni nuova posizione inserita e trackid è un identificativo di una sequenza di posizioni contigue(sequenze di posizioni molto vicine hanno lo stesso trackid) La sudetta query funziona abbastanza bene in postgresql 8.4 con postgis 1.5, ma il problema è che fa uso di PARTITION BY che da quanto ho visto è una funzionalità(le partizioni) di postgresql che è stata inserita proprio dalla versione 8.4. Qualcuno ha una idea di come posso modificare la query ed ottenere lo stesso risultato senza utilizzare PARTITION BY? in modo che posso utilizzarla anche in postgresql 8.3 con postgis 1.3, volevo evitare di dover compilare una nuova versione di postgresql sul mio server debian lenny! Grazie Mille Stefano _______________________________________________ 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. 518 iscritti al 3.6.2011 |
Ciao Stefano, dovresti joinare ogni riga con la precedente: select gps_cur.trackid, gps_cur.id, azimut(gps_prev.pos, gps_cur.pos) from gps as gps_cur inner join gps as gps_prev on gps_cur.trackid = gps_prev.trackid and gps_cur.id = gps_prev.id + 1 Prova e facci sapere Sig Il giorno gio, 30/06/2011 alle 16.48 +0200, Stefano ha scritto: > Saluti a tutti > > Ho una tabella con dentro delle posizioni gps sequenziali e devo per > ognuna calcolare l'azimut rispetto alla posizione precedente, questo > mi serve per disegnare una freccia di ogni posizione orientata > rispetto al senso di marcia(in OpenLayers), una implementazione che > pensavo fosse molto diffusa ed invece ho trovato solo questa query in > rete: > > SELECT round( degrees(ST_Azimuth(pos, LEAD(pos) OVER (PARTITION BY > trackid ORDER BY id)))::numeric) AS azimut > FROM gps > ORDER BY id ASC > > dove pos è un campo geometry di tipo point con le coordinate di una > posizione gps, id è un identificativo incrementato ad ogni nuova > posizione inserita e trackid è un identificativo di una sequenza di > posizioni contigue(sequenze di posizioni molto vicine hanno lo stesso > trackid) > La sudetta query funziona abbastanza bene in postgresql 8.4 con > postgis 1.5, ma il problema è che fa uso di PARTITION BY che da quanto > ho visto è una funzionalità(le partizioni) di postgresql che è stata > inserita proprio dalla versione 8.4. > Qualcuno ha una idea di come posso modificare la query ed ottenere lo > stesso risultato senza utilizzare PARTITION BY? in modo che posso > utilizzarla anche in postgresql 8.3 con postgis 1.3, volevo evitare di > dover compilare una nuova versione di postgresql sul mio server debian > lenny! > > > Grazie Mille > Stefano > > > _______________________________________________ > 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. > 518 iscritti al 3.6.2011 _______________________________________________ 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. 518 iscritti al 3.6.2011 |
Free forum by Nabble | Edit this page |