2016-01-29 01:34:12 +00:00
|
|
|
import os
|
|
|
|
import importlib
|
2016-01-28 19:29:08 +00:00
|
|
|
|
|
|
|
from sqlalchemy import create_engine, and_, desc
|
|
|
|
from sqlalchemy.sql import null
|
2015-11-15 08:10:46 +00:00
|
|
|
from sqlalchemy.orm import sessionmaker
|
2016-01-29 01:34:12 +00:00
|
|
|
|
2016-01-28 19:29:08 +00:00
|
|
|
from ogn.model import AircraftBeacon, ReceiverBeacon
|
2016-01-29 04:22:07 +00:00
|
|
|
from ogn.utils import haversine_distance
|
2016-01-28 19:29:08 +00:00
|
|
|
|
2016-01-29 01:34:12 +00:00
|
|
|
|
|
|
|
os.environ.setdefault('OGN_CONFIG_MODULE', 'config.default')
|
|
|
|
|
|
|
|
config = importlib.import_module(os.environ['OGN_CONFIG_MODULE'])
|
|
|
|
engine = create_engine(config.SQLALCHEMY_DATABASE_URI, echo=False)
|
2015-11-15 08:10:46 +00:00
|
|
|
|
|
|
|
Session = sessionmaker(bind=engine)
|
|
|
|
session = Session()
|
2016-01-28 19:29:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
def update_receiver_childs(name):
|
|
|
|
last_receiver_beacon = session.query(ReceiverBeacon) \
|
|
|
|
.filter(ReceiverBeacon.name == name) \
|
|
|
|
.order_by(desc(ReceiverBeacon.timestamp)) \
|
|
|
|
.first()
|
|
|
|
|
|
|
|
if (last_receiver_beacon is None):
|
|
|
|
return
|
|
|
|
|
|
|
|
aircraft_beacons_query = session.query(AircraftBeacon) \
|
|
|
|
.filter(and_(AircraftBeacon.timestamp > last_receiver_beacon.timestamp,
|
|
|
|
AircraftBeacon.receiver_name == name,
|
|
|
|
AircraftBeacon.radius == null()))
|
|
|
|
|
|
|
|
for aircraft_beacon in aircraft_beacons_query.all():
|
2016-01-29 04:22:07 +00:00
|
|
|
location0 = (last_receiver_beacon.latitude, last_receiver_beacon.longitude)
|
|
|
|
location1 = (aircraft_beacon.latitude, aircraft_beacon.longitude)
|
|
|
|
alt0 = last_receiver_beacon.altitude
|
|
|
|
alt1 = aircraft_beacon.altitude
|
|
|
|
|
|
|
|
(flat_distance, phi) = haversine_distance(location0, location1)
|
|
|
|
theta = atan2(alt1 - alt0, flat_distance) * 180 / pi
|
|
|
|
distance = sqrt(flat_distance**2 + (alt1 - alt0)**2)
|
|
|
|
|
|
|
|
aircraft_beacon.radius = distance
|
2016-01-28 19:29:08 +00:00
|
|
|
aircraft_beacon.theta = theta
|
|
|
|
aircraft_beacon.phi = phi
|
|
|
|
session.commit()
|