[Gfoss] POSTGIS e i dislivelli

Alessandro Pasotti ale.pas a tiscali.it
Ven 2 Ott 2009 17:18:36 CEST


Il venerdì 02 ottobre 2009, Antonio Falciano ha scritto:
> Alessandro Pasotti ha scritto:
> > Il venerdì 02 ottobre 2009, Antonio Falciano ha scritto:
> >> Alessandro Pasotti ha scritto:
> >>> Ciao (scusate il cross-post errato in lista soci),
> >>>
> >>> devo calcolare i dislivelli in discesa e in salita di una polilinea 3D,
> >>> sapete se (e come) si può fare con postgis?
> >>
> >> SELECT ST_ZMAX(the_geom) as z_max, ST_ZMIN(the_geom) as z_min,
> >> (ST_ZMAX(the_geom) - ST_ZMIN(the_geom)) as delta_z FROM streets;
> >>
> >> se ti interessa il dislivello esistente in assoluto, mentre per quello
> >> relativo occorre usare anche ST_PointN.
> >>
> >> ciao
> >> Antonio
> >
> > Grazie!
> >
> > se ho capito bene le prime due funzioni restituiscono quote minime e
> > massime,
>
> ok
>
> > se voglio sapere i dislivelli relativi devo quindi scrivere una funzione
> > che iterando su tutti i punti della polilinea, sommi tutti i dislivelli
> > in un verso (convenzionalmente salita) e in quello opposto (discesa) ?
>
> No, perche' per via dei segni perderesti per strada buona parte
> dell'informazione. Cosi' facendo calcolaresti il dislivello tra il punto
> iniziale e finale e, a tal fine, basterebbe semplicemente recuperare la
> z di questi due agendo con ST_PointN (v. 2° es. in
> http://postgis.refractions.net/docs/ST_PointN.html
> Purtroppo cosi' si perdono tutti i dislivelli intermedi.


Ho dato per scontato che userei due variabili, una per accumulare i dislivelli 
in discesa e l'altra per quelli in salita (pseudo codice):

for punto in linea
	if punto_tmp
		if punto.z > punto_tmp.z
			salita += punto.z - punto_tmp.z
		else 
			discesa += punto_tmp.z - punto.z
	punto_tmp = punto


sbaglio qualcosa?


> Inoltre, potresti considerare anche la tipologia di tracciato (sterrato,
> pavimentato, ecc.) in modo considerare il grado di difficolta' nella sua
> percorrenza.

Ho anche le variabili del mezzo: a piedi, in bici ecc. ma non so se mi 
spingerò così avanti.


Ciao

-- 
Alessandro Pasotti
itOpen - "Open Solutions for the Net Age"
w3:  www.itopen.it
Linux User# 167502


Maggiori informazioni sulla lista Gfoss