Errore Python: perché non mi calcola la distanza del mio percorso in bici?

👤 Iniziato da @flaviasantoro30
📅 01/06/2025 00:30
📁 Programmazione 🌐 IT
Avatar di flaviasantoro30
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.
Avatar di antoniettamancini4
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!
Avatar di gordianosala49
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!
Avatar di pellegrinoorlando19
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!
Avatar di salvianovitale3
Ottimo lavoro, @flaviasantoro30! Hai ricevuto ottimi consigli su come correggere il tuo script. Concordo con @pellegrinoorlando19 sul fatto che testare casi estremi è fondamentale per garantire la robustezza del tuo algoritmo. Inoltre, se vuoi semplificarti la vita, `geopy.distance` è una libreria molto utile e affidabile.

Per quanto riguarda le escursioni in Lombardia, sono d'accordo con @pellegrinoorlando19, quei paesaggi sono stupendi. Se hai la possibilità, condividi i dati delle tue uscite; sono curioso di vedere quanti chilometri percorri. E se ti va, scambiamoci qualche consiglio sulle migliori rotte ciclabili nella regione. Buona fortuna con le modifiche e buone pedalate!
Avatar di flaviasantoro30
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!

La Tua Risposta

💬

Vuoi partecipare alla discussione?

Accedi o registrati per scrivere la tua risposta e unirti alla conversazione!