Ciao a tutti! Sono una ciclista appassionata e ho creato uno script Python per tracciare i km delle mie uscite in bici usando le coordinate GPS. Il problema è che la funzione di calcolo della distanza restituisce sempre zero, anche con dati di test corretti. Ecco il codice che uso:
```python
import math
def calcola_distanza(lat1, lon1, lat2, lon2):
R = 6371 # Raggio terrestre in km
dlat = math.radians(lat2 - lat1)
dlon = math.radians(lon2 - lon1)
a = math.sin(dlat/2) ** 2 + math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) * math.sin(dlon/2) ** 2
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
return R * c
# Esempio:
print(calcola_distanza(45.4642, 9.1900, 45.4669, 9.1812)) # Dovrebbe dare ~1km ma output è 0!
```
Ho controllato la formula dell'emisenoverso, ma non trovo l'errore. Qualcuno sa perché non restituisce i km effettivi? Forse sbaglio la conversione in radianti? Ogni suggerimento è benvenuto, voglio sistemarlo prima della prossima escursione! Grazie mille.
Ciao @flaviasantoro30, ho dato un'occhiata al tuo codice e penso di aver individuato il problema! Mentre converti le coordinate in radianti, stai effettivamente convertendo le differenze di latitudine e longitudine invece delle coordinate stesse. Prova a modificare la parte della conversione in radianti così:
```python
lat1 = math.radians(lat1)
lon1 = math.radians(lon1)
lat2 = math.radians(lat2)
lon2 = math.radians(lon2)
dlat = lat2 - lat1
dlon = lon2 - lon1
```
In questo modo, le coordinate vengono convertite prima di calcolare le differenze, e dovresti ottenere il risultato corretto! Fammi sapere se funziona, buona fortuna per la tua prossima escursione in bici!
Ciao @flaviasantoro30, ho letto la tua richiesta e ho seguito attentamente il codice che hai condiviso. Il problema è effettivamente nella conversione delle coordinate in radianti. Come ha già suggerito @antoniettamancini4, devi convertire le coordinate stesse in radianti, non le loro differenze, altrimenti il calcolo della distanza non sarà corretto.
Ecco il codice corretto:
```python
import math
def calcola_distanza(lat1, lon1, lat2, lon2):
R = 6371 # Raggio terrestre in km
lat1 = math.radians(lat1)
lon1 = math.radians(lon1)
lat2 = math.radians(lat2)
lon2 = math.radians(lon2)
dlat = lat2 - lat1
dlon = lon2 - lon1
a = math.sin(dlat/2) ** 2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2) ** 2
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
return R * c
# Esempio:
print(calcola_distanza(45.4642, 9.1900, 45.4669, 9.1812)) # Ora dovrebbe dare ~1km
```
Spero che questo risolva il tuo problema. Buona pedalata!
Ciao @flaviasantoro30! @antoniettamancini4 e @gordianosala49 hanno perfettamente centrato l'errore: convertire direttamente le differenze anziché le coordinate singole è l'inghippo. La formula haversine richiede radianti per lat/lon *prima* di calcolare delta-lat e delta-lon, altrimenti i valori diventano microscopici e il risultato tende a zero.
Un consiglio extra: testa anche casi estremi tipo coordinate agli antipodi o attraversando il meridiano zero (es. (0,0) e (0, 179.9)) per verificare robustezza. Se vuoi semplificare, valuta `geopy.distance` - ma capire l'algoritmo è encomiabile!
Che bella passione il ciclismo però! Quando sistemi lo script, posta qualche dato delle tue escursioni in Lombardia, sono curioso di sapere quanti km macini tra quei paesaggi 😉 Buone pedalate!
Grazie mille, @salvianovitale3! Hai ragione, `geopy.distance` è stato un game-changer: ora lo script calcola le distanze alla perfezione e senza mal di testa. Adoro l'idea di condividere i dati delle mie uscite in Lombardia! Sto preparando un file con i percorsi del Lago di Como e della Valtellina, te lo mando volentieri. E sì, scambiamoci consigli sulle rotte: ho scoperto un sentiero epico verso la Val Seriana poco conosciuto, perfetto per i gravel!