diff --git a/main.py b/main.py index 4032313..ea8b26d 100644 --- a/main.py +++ b/main.py @@ -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