[Gfoss] POSTGIS e i dislivelli
Antonio Falciano
afalciano a yahoo.it
Ven 2 Ott 2009 18:25:15 CEST
Alessandro Pasotti ha scritto:
> 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?
ok, cosi' va meglio... ma, in ogni caso, mi calcolerei la pendenza,
poiche' uno stesso dislivello lo puoi avere lungo 1 km opp. dopo soli 5
m di tracciato, ti pare?
Un'altra strategia potrebbe essere quella di "esplodere" le polilinee in
linee, calcolare agevolmente il dislivello e quindi la pendenza di ogni
singola linea ed, infine, riaggregare il tutto mediando le pendenze.
>> 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.
Altre variabili da tenere conto nella funzione di costo potrebbero
essere la tortuosita' del tracciato e le condizioni psico-fisiche del
soggetto che lo percorre, ad es. con o senza grappino! :)
ciao
--
Antonio Falciano
http://www.linkedin.com/in/antoniofalciano
Maggiori informazioni sulla lista
Gfoss