needle to flock, flock data from server

This commit is contained in:
rgarcia-herrera 2020-09-21 21:03:07 -05:00
parent 0a2ddf3a10
commit 083603ca11

87
main.py
View File

@ -61,7 +61,7 @@ class FlockompassApp(App):
session_data = DictProperty()
needle_angle = NumericProperty(0)
fbearing = NumericProperty(0)
dbearing = NumericProperty(0)
dbearing = NumericProperty(0)
dest_distance = StringProperty("")
dashboard_dest = StringProperty("")
@ -190,12 +190,29 @@ class FlockompassApp(App):
self.dest_distance = "Destino: %s\nVel: %0.1f km/h" % (dest_distance,
self.gps_data['speed'] * 1.609344)
if 'flock_lat' in self.session_data:
flock_distance = geodesic(
(self.gps_data['lat'], self.gps_data['lon']),
(self.session_data['flock_lat'], self.session_data['flock_lon'])).kilometers
if flock_distance < 1:
flock_distance *= 1000
flock_distance = "%i metros" % flock_distance
else:
flock_distance = "%0.1f km" % flock_distance
self.dashboard_flock = "Flock: %s\nVel: %0.1f km/h" % (flock_distance,
self.session_data['flock_avg_speed'] * 1.609344)
else:
self.dashboard_flock = "no flocks"
self.session_data.update({'speed': self.gps_data['speed'] * 1.609344,
'bearing': self.gps_data['bearing'],
'lat': self.gps_data['lat'],
'lon': self.gps_data['lon']})
def center_map_on_gps(self):
self.ms.ids.mapview.center_on(self.gps_data['lat'],
self.gps_data['lon'])
@ -246,8 +263,25 @@ class FlockompassApp(App):
d=0.1,
t='out_quad')
self.cs._anim.start(self)
if 'flock_lat' in self.session_data:
self.cs.ids.to_flock.source = 'assets/needle_to_flock.png'
lat2 = self.session_data['flock_lat']
lon2 = self.session_data['flock_lon']
fbearing = atan2(sin(lon2 - lon1) * cos(lat2),
cos(lat1) * sin(lat2)
- sin(lat1) * cos(lat2) * cos(lon2-lon1))
fbearing = self.needle_angle - degrees(fbearing)
self.cs._anim &= Animation(fbearing=fbearing,
d=0.1,
t='out_quad')
else:
self.cs.ids.to_flock.source = 'assets/pivot.png'
self.cs._anim.start(self)
def compass_enable(self):
self.cs.facade.enable()
Clock.schedule_interval(self.get_field,
@ -267,36 +301,45 @@ class FlockompassApp(App):
self.gps_start(1000, 0)
def flock_server_register(self):
try:
register_url = "{server}/register/?dest_lon={dest_lon}&dest_lat={dest_lat}"
register_url = "{server}/register/?dest_lon={dest_lon}&dest_lat={dest_lat}"
r = requests.get(register_url.format(server=FLOCK_SERVER,
dest_lon=self.session_data['dest_lon'],
dest_lat=self.session_data['dest_lat']))
out = r.json()
self.session_data['bike_id'] = out['bike_id']
r = requests.get(register_url.format(server=FLOCK_SERVER,
dest_lon=self.session_data['dest_lon'],
dest_lat=self.session_data['dest_lat']))
out = r.json()
self.session_data['bike_id'] = out['bike_id']
except:
self.session_data.pop('bike_id', None)
def flock_server_update(self):
update_url = "{server}/update/{bike_id}/?lat={lat}&lon={lon}&speed={speed}&bearing={bearing}"
req = requests.get(update_url.format(server=FLOCK_SERVER,
bike_id=self.session_data['bike_id'],
speed=self.session_data['speed'],
bearing=self.session_data['bearing'],
lat=self.session_data['lat'],
lon=self.session_data['lon']))
resp = req.json()
self.session_data.update(resp)
def flock_server_update(self):
try:
update_url = "{server}/update/{bike_id}/?lat={lat}&lon={lon}&speed={speed}&bearing={bearing}"
req = requests.get(update_url.format(server=FLOCK_SERVER,
bike_id=self.session_data['bike_id'],
speed=self.session_data['speed'],
bearing=self.session_data['bearing'],
lat=self.session_data['lat'],
lon=self.session_data['lon']))
resp = req.json()
print('server update ¡¡¡¡¡¡¡¡', req, resp)
self.session_data.update(resp)
except:
self.session_data.pop('bike_id', None)
self.session_data.pop('speed', None)
self.session_data.pop('bearing', None)
def flock(self, dt):
if 'bike_id' in self.session_data:
self.flock_server_update()
else:
self.flock_server_register()
def build(self):
# start GPS