added SCALING,
added driven_km, gps_location to property -> location is automatically updated on property call
This commit is contained in:
parent
ca3ac6fa9b
commit
85e4656c1c
@ -1,5 +1,6 @@
|
|||||||
import time
|
import time
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
import geopy
|
import geopy
|
||||||
import geopy.distance
|
import geopy.distance
|
||||||
@ -12,23 +13,26 @@ STARTING_POINT = geopy.Point(48.853, 2.349)
|
|||||||
STARTING_VELOCITY = 130
|
STARTING_VELOCITY = 130
|
||||||
# Driving direction in degrees: 0=N, 90=E, 180=S, 270=W
|
# Driving direction in degrees: 0=N, 90=E, 180=S, 270=W
|
||||||
BEARING = 90
|
BEARING = 90
|
||||||
|
# Scale speed of vehicles by factor x
|
||||||
|
SCALING = 1
|
||||||
|
|
||||||
|
|
||||||
class Vehicle:
|
class Vehicle:
|
||||||
vin: str
|
vin: str
|
||||||
gps_location: geopy.Point
|
|
||||||
velocity: float
|
velocity: float
|
||||||
timestamp: datetime
|
timestamp: Union[datetime, None]
|
||||||
|
_driven_kms: int
|
||||||
|
_gps_location: geopy.Point
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
vin: str,
|
vin: str,
|
||||||
starting_point: geopy.Point = STARTING_POINT,
|
starting_point: geopy.Point = STARTING_POINT,
|
||||||
starting_velocity: float = STARTING_VELOCITY):
|
starting_velocity: float = STARTING_VELOCITY):
|
||||||
self.vin = vin
|
self.vin = vin
|
||||||
self.gps_location = starting_point
|
self._gps_location = starting_point
|
||||||
self.velocity = starting_velocity
|
self.velocity = starting_velocity
|
||||||
|
|
||||||
def get_daf(self, invoke_nce=False):
|
def daf(self, invoke_nce=False):
|
||||||
return DAF(vehicle_identification_number=self.vin,
|
return DAF(vehicle_identification_number=self.vin,
|
||||||
gps_location=self.gps_location,
|
gps_location=self.gps_location,
|
||||||
velocity=self.velocity,
|
velocity=self.velocity,
|
||||||
@ -36,7 +40,8 @@ class Vehicle:
|
|||||||
near_crash_event=invoke_nce
|
near_crash_event=invoke_nce
|
||||||
)
|
)
|
||||||
|
|
||||||
def update_pos(self):
|
@property
|
||||||
|
def gps_location(self):
|
||||||
"""
|
"""
|
||||||
Update self.gps_location with given speed in km/h and the driven time in seconds
|
Update self.gps_location with given speed in km/h and the driven time in seconds
|
||||||
:param velocity: in km/h
|
:param velocity: in km/h
|
||||||
@ -44,7 +49,7 @@ class Vehicle:
|
|||||||
:param bearing: direction in degrees: 0=N, 90=E, 180=S, 270=W
|
:param bearing: direction in degrees: 0=N, 90=E, 180=S, 270=W
|
||||||
"""
|
"""
|
||||||
# Define starting point.
|
# Define starting point.
|
||||||
start = self.gps_location
|
start = self._gps_location
|
||||||
|
|
||||||
# Get old and updated timestamps
|
# Get old and updated timestamps
|
||||||
old_timestamp = self.timestamp
|
old_timestamp = self.timestamp
|
||||||
@ -52,28 +57,41 @@ class Vehicle:
|
|||||||
self.timestamp = updated_timestamp
|
self.timestamp = updated_timestamp
|
||||||
|
|
||||||
# get driving time between timestamps (in seconds)
|
# get driving time between timestamps (in seconds)
|
||||||
driving_time = (old_timestamp - updated_timestamp).total_seconds()
|
driving_time = (updated_timestamp - old_timestamp).total_seconds()
|
||||||
|
|
||||||
# reached distance in kilometers: convert km/h to km/s and multiply by driving time
|
# reached distance in kilometers: convert km/h to km/s and multiply by driving time
|
||||||
kilometers = self.velocity / 3600 * driving_time
|
kilometers = self.velocity / 3600 * driving_time * SCALING
|
||||||
|
|
||||||
# Define a general distance object, initialized with a distance of 1 km.
|
# Define a general distance object, initialized with a distance of 1 km.
|
||||||
d = geopy.distance.distance(kilometers=kilometers)
|
d = geopy.distance.distance(kilometers=kilometers)
|
||||||
|
|
||||||
# Use the `destination` method with a bearing of bearing degrees (90 is east)
|
# Use the `destination` method with a bearing of bearing degrees (90 is east)
|
||||||
# in order to go from point `start` to kilometers km bearing.
|
# in order to go from point `start` to kilometers km bearing.
|
||||||
self.gps_location = d.destination(point=start, bearing=BEARING)
|
self._gps_location = d.destination(point=start, bearing=BEARING)
|
||||||
return self.gps_location
|
|
||||||
|
# update driven kilometers
|
||||||
|
self._driven_kms += kilometers
|
||||||
|
return self._gps_location
|
||||||
|
|
||||||
|
@property
|
||||||
|
def driven_kms(self):
|
||||||
|
return '{}km'.format(round(self._driven_kms, 2))
|
||||||
|
|
||||||
|
def start_driving(self):
|
||||||
|
self.timestamp = datetime.now()
|
||||||
|
self._driven_kms = 0
|
||||||
|
|
||||||
|
def stop_driving(self):
|
||||||
|
self.timestamp = None
|
||||||
|
|
||||||
@circuit(failure_threshold=10, expected_exception=ConnectionError)
|
@circuit(failure_threshold=10, expected_exception=ConnectionError)
|
||||||
def external_call(self):
|
def external_call(self):
|
||||||
...
|
...
|
||||||
|
|
||||||
def start_driving(self):
|
|
||||||
self.timestamp = datetime.now()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
v1 = Vehicle(vin='SB164ABN1PE082986')
|
v1 = Vehicle(vin='SB164ABN1PE082986')
|
||||||
v1.start_driving()
|
v1.start_driving()
|
||||||
|
print(v1.gps_location, v1.driven_kms)
|
||||||
|
time.sleep(1)
|
||||||
|
print(v1.gps_location, v1.driven_kms)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user