Probleme bei Funktionsdefinition
Verfasst: Dienstag 24. April 2012, 20:16
Hallo zusammen,
ich arbeite seit kurzer Zeit mit Python. Momentan führe ich eine Auswertung von Fahrdaten durch.
So will ich untersuchen, welche Strecken ein PKW über den Tag zurücklegt und alle verschiedenen Zielorte mit dem morgendlichen Abfahrtsort vergleichen (über die Harversine-Formel, welche durch die Geokoordinaten die Entfernung zwischen den Orten bestimmt). Nun bin ich dabei eine Funktion zu definieren, welche den Standort wiedergeben soll (bspw. zuhause). Die Funktion greift hierbei auf Parameter aus einer CSV-Tabelle, welche in einer späteren Funktion verwendet wird, zu.
Fahrzeug abdatum abzeit abstrasse ablongitudo ablatitude andatum anzeit anstrasse anland anort anlongitudo anlatitude
211 20100628 1115 Seestraße 10.5643 49.7132 20110628 1125 Bleichereistraße DE Seestraße 9.56012 49.7152
211 20100628 1153 Seestraße 10.5597 49.7150 20110628 1153 Bleichereistraße DE Seestraße 9.55898 49.71513
211 20100628 1309 Seestraße 10.5590 49.7150 20110628 1311 Bleichereistraße DE Seestraße 10.56004 49.71521
211 20100628 1423 Seestraße 10.5597 49.7152 20110628 1427 Bleichereistraße DE Seestraße 10.55906 49.71495
211 20100628 1450 Seestraße 10.5584 49.7154 20110628 1501 Leibnizstraße DE Kreuzstrass 10.57995 49.68392
211 20100628 1524 Kreuzstraße 10.5800 49.6842 20110628 1545 Bleichereistraße DE Seestraße 10.55965 49.71533
Stimmen die Ziel- mit den Abfahrdaten überein, soll ausgegeben werden dass sich das Fahrzeug zuhause befindet. Ebenso soll auch ausgegeben werden, dass sich das Fahrzeug zuhause befindet wenn die Distanz <= 0.5 km ist. Andernfalls soll ausgegeben werden, dass sich das Fahrzeug unterwegs befindet.
Leider gelingt es mir nicht, den ersten Abfahrtsort am Tag im Code zu erfassen, mit welchem ich die restlichen Zielorte über den Tag vergleichen kann. Wie kann ich entsprechend den ersten Abfahrsort am Tag (Längen-/Breitengrad) in der ersten Zeile "merken" und diesen dann mit den anderen Standorten in den nachfolgenden Zeilen vergleichen? Ich stehe hier völlig auf dem Schlauch, habe viel gelesen und gegoogelt und komme dennoch nicht weiter. Hat hier jemand eine zündende Idee?
Viele Grüße
Sebastian
ich arbeite seit kurzer Zeit mit Python. Momentan führe ich eine Auswertung von Fahrdaten durch.
So will ich untersuchen, welche Strecken ein PKW über den Tag zurücklegt und alle verschiedenen Zielorte mit dem morgendlichen Abfahrtsort vergleichen (über die Harversine-Formel, welche durch die Geokoordinaten die Entfernung zwischen den Orten bestimmt). Nun bin ich dabei eine Funktion zu definieren, welche den Standort wiedergeben soll (bspw. zuhause). Die Funktion greift hierbei auf Parameter aus einer CSV-Tabelle, welche in einer späteren Funktion verwendet wird, zu.
Fahrzeug abdatum abzeit abstrasse ablongitudo ablatitude andatum anzeit anstrasse anland anort anlongitudo anlatitude
211 20100628 1115 Seestraße 10.5643 49.7132 20110628 1125 Bleichereistraße DE Seestraße 9.56012 49.7152
211 20100628 1153 Seestraße 10.5597 49.7150 20110628 1153 Bleichereistraße DE Seestraße 9.55898 49.71513
211 20100628 1309 Seestraße 10.5590 49.7150 20110628 1311 Bleichereistraße DE Seestraße 10.56004 49.71521
211 20100628 1423 Seestraße 10.5597 49.7152 20110628 1427 Bleichereistraße DE Seestraße 10.55906 49.71495
211 20100628 1450 Seestraße 10.5584 49.7154 20110628 1501 Leibnizstraße DE Kreuzstrass 10.57995 49.68392
211 20100628 1524 Kreuzstraße 10.5800 49.6842 20110628 1545 Bleichereistraße DE Seestraße 10.55965 49.71533
Stimmen die Ziel- mit den Abfahrdaten überein, soll ausgegeben werden dass sich das Fahrzeug zuhause befindet. Ebenso soll auch ausgegeben werden, dass sich das Fahrzeug zuhause befindet wenn die Distanz <= 0.5 km ist. Andernfalls soll ausgegeben werden, dass sich das Fahrzeug unterwegs befindet.
Code: Alles auswählen
def standort(abdatum, andatum, ablongitudo, ablatitude, anlongitudo, anlatitude, abzeit, anzeit):
radius = 6371
# distance
dlat = math.radians(anlatitude-ablatitude)
dlon = math.radians(anlongitudo-ablongitudo)
a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.radians(ablatitude)) \
* math.cos(math.radians(anlatitude)) * math.sin(dlon/2) * math.sin(dlon/2)
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
d = (radius * c)
# Funktion Standort
if abdatum == andatum:
if (ablongitudo and ablatitude) == (anlongitudo and anlatitude):
return 'zuhause'
elif (ablongitudo and ablatitude) != (anlongitudo and anlatitude):
if d <= 0.1:
return 'zuhause'
else:
return 'unterwegs'
else:
return 'unterwegs'
Viele Grüße
Sebastian