From 210b5870a52db4c1afd77075e66c8ca487eff6d6 Mon Sep 17 00:00:00 2001 From: Mark Jessop Date: Thu, 5 Sep 2019 18:27:59 +0930 Subject: [PATCH] Cast all incoming lat/lon/alt data to float before processing. --- horusmapper.py | 20 ++++++++++---------- log_playback.py | 13 ++++++++++--- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/horusmapper.py b/horusmapper.py index 13d622a..2ac0e22 100644 --- a/horusmapper.py +++ b/horusmapper.py @@ -573,9 +573,9 @@ def ozi_listener_callback(data): # OziMux message contains: # {'lat': -34.87915, 'comment': 'Telemetry Data', 'alt': 26493.0, 'lon': 139.11883, 'time': datetime.datetime(2018, 7, 16, 10, 55, 49, tzinfo=tzutc())} output = {} - output['lat'] = data['lat'] - output['lon'] = data['lon'] - output['alt'] = data['alt'] + output['lat'] = float(data['lat']) + output['lon'] = float(data['lon']) + output['alt'] = float(data['alt']) output['callsign'] = "Payload" output['time_dt'] = data['time'] @@ -602,9 +602,9 @@ def udp_listener_summary_callback(data): # Extract the fields we need. # Convert to something generic we can pass onwards. output = {} - output['lat'] = data['latitude'] - output['lon'] = data['longitude'] - output['alt'] = data['altitude'] + output['lat'] = float(data['latitude']) + output['lon'] = float(data['longitude']) + output['alt'] = float(data['altitude']) output['callsign'] = data['callsign'] logging.info("Horus UDP Data: %.5f, %.5f, %.1f" % (output['lat'], output['lon'], output['alt'])) @@ -635,11 +635,11 @@ def udp_listener_car_callback(data): # TODO: Make a generic car position function, and have this function pass data into it # so we can add support for other chase car position inputs. global car_track, habitat_uploader, bearing_store - _lat = data['latitude'] - _lon = data['longitude'] - _alt = data['altitude'] + _lat = float(data['latitude']) + _lon = float(data['longitude']) + _alt = float(data['altitude']) _comment = "CAR" - _time_dt = pytz.utc.localize(datetime.utcnow())#datetime.utcnow() + _time_dt = pytz.utc.localize(datetime.utcnow()) logging.debug("Car Position: %.5f, %.5f" % (_lat, _lon)) diff --git a/log_playback.py b/log_playback.py index 0ac50f4..4fa8996 100644 --- a/log_playback.py +++ b/log_playback.py @@ -147,7 +147,7 @@ def send_balloon_telemetry(json_data, udp_port=55672): s.sendto(json.dumps(packet), ('127.0.0.1', udp_port)) -def playback_json(filename, udp_port=55672, speed=1.0): +def playback_json(filename, udp_port=55672, speed=1.0, start_time = 0): """ Read in a JSON log file and play it back in real-time, or with a speed factor """ with open(filename, 'r') as _log_file: @@ -173,6 +173,9 @@ def playback_json(filename, udp_port=55672, speed=1.0): # Running timer _run_time = (_new_time - _first_time).total_seconds() + if _run_time < start_time: + continue + _time_min = int(_run_time)//60 _time_sec = _run_time%60.0 @@ -181,7 +184,6 @@ def playback_json(filename, udp_port=55672, speed=1.0): if _log_data['log_type'] == 'CAR POSITION': send_car_position(_log_data, udp_port) print("%02d:%.2f - Car Position" % (_time_min, _time_sec)) - elif _log_data['log_type'] == 'BEARING': send_bearing(_log_data, udp_port) @@ -208,6 +210,7 @@ if __name__ == '__main__': filename = "" speed = 1.0 + start_time = 0 hostname = 'localhost' udp_port = 55672 @@ -216,6 +219,10 @@ if __name__ == '__main__': elif len(sys.argv) == 3: filename = sys.argv[1] speed = float(sys.argv[2]) + elif len(sys.argv) == 4: + filename = sys.argv[1] + speed = float(sys.argv[2]) + start_time = float(sys.argv[3])*60 - playback_json(filename, udp_port, speed) + playback_json(filename, udp_port, speed, start_time)