From 061c3e253e62e6746962319d247562e5bfa2a0c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Fri, 8 Dec 2017 08:25:03 +0100 Subject: [PATCH] Calculate distance between aircraft_beacon and receiver --- ogn/commands/database.py | 5 +++-- ogn/model/aircraft_beacon.py | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ogn/commands/database.py b/ogn/commands/database.py index 971d9c6..9aa246a 100644 --- a/ogn/commands/database.py +++ b/ogn/commands/database.py @@ -172,7 +172,7 @@ def update_devices(): @manager.command def update_receivers(): - """Add/update_receivers entries in receiver table and update_receivers foreign keys in aircraft beacons and receiver beacons.""" + """Add/update_receivers entries in receiver table and update receivers foreign keys and distance in aircraft beacons and update foreign keys in receiver beacons.""" # Create missing Receiver from ReceiverBeacon available_receivers = session.query(Receiver.name) \ .subquery() @@ -240,7 +240,8 @@ def update_receivers(): # Update relations to aircraft beacons update_aircraft_beacons = session.query(AircraftBeacon) \ .filter(and_(AircraftBeacon.receiver_id == null(), AircraftBeacon.receiver_name == Receiver.name)) \ - .update({AircraftBeacon.receiver_id: Receiver.id}, + .update({AircraftBeacon.receiver_id: Receiver.id, + AircraftBeacon.distance: func.ST_Distance_Sphere(AircraftBeacon.location_wkt, Receiver.location_wkt)}, synchronize_session='fetch') # Update relations to receiver beacons diff --git a/ogn/model/aircraft_beacon.py b/ogn/model/aircraft_beacon.py index f0eea61..f75360e 100644 --- a/ogn/model/aircraft_beacon.py +++ b/ogn/model/aircraft_beacon.py @@ -38,6 +38,9 @@ class AircraftBeacon(Beacon): status = Column(SmallInteger, index=True) + # Calculated values + distance = Column(Float) + # Relations receiver_id = Column(Integer, ForeignKey('receiver.id', ondelete='SET NULL'), index=True) receiver = relationship('Receiver', foreign_keys=[receiver_id])