ogn-python/app/gateway/beacon_conversion.py

53 wiersze
1.9 KiB
Python

from flask import current_app
from mgrs import MGRS
from ogn.parser import parse
from app.model import AircraftType
#import rasterio as rs
#elevation_dataset = rs.open('/Volumes/LaCieBlack/Wtf4.tiff')
mgrs = MGRS()
def aprs_string_to_message(aprs_string):
try:
message = parse(aprs_string, calculate_relations=True)
except Exception as e:
current_app.logger.debug(e)
return None
if message['aprs_type'] not in ('position', 'status'):
return None
elif message['aprs_type'] == 'position':
latitude = message["latitude"]
longitude = message["longitude"]
message["location"] = "SRID=4326;POINT({} {})".format(longitude, latitude)
location_mgrs = mgrs.toMGRS(latitude, longitude).decode("utf-8")
message["location_mgrs"] = location_mgrs
message["location_mgrs_short"] = location_mgrs[0:5] + location_mgrs[5:7] + location_mgrs[10:12]
#if 'altitude' in message and longitude >= 0.0 and longitude <= 20.0 and latitude >= 40.0 and latitude <= 60.0:
# elevation = [val[0] for val in elevation_dataset.sample(((longitude, latitude),))][0]
# message['agl'] = message['altitude'] - elevation
if 'bearing' in message:
bearing = int(message['bearing'])
message['bearing'] = bearing if bearing < 360 else 0
if "aircraft_type" in message:
message["aircraft_type"] = AircraftType(message["aircraft_type"]) if message["aircraft_type"] in AircraftType.list() else AircraftType.UNKNOWN
if "gps_quality" in message:
if message["gps_quality"] is not None and "horizontal" in message["gps_quality"]:
message["gps_quality_horizontal"] = message["gps_quality"]["horizontal"]
message["gps_quality_vertical"] = message["gps_quality"]["vertical"]
del message["gps_quality"]
return message