Remove obsolete pre postgis stuff

Removed obsolete test
pull/50/head
Konstantin Gründger 2016-04-28 20:36:56 +02:00
rodzic e1da7dcfac
commit b5f111c257
7 zmienionych plików z 42 dodań i 118 usunięć

Wyświetl plik

@ -0,0 +1,34 @@
"""remove unnecessary pre postgis columns
Revision ID: 2004ce1566c
Revises: 277aca1b810
Create Date: 2016-04-28 18:24:14.912833
"""
# revision identifiers, used by Alembic.
revision = '2004ce1566c'
down_revision = '277aca1b810'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
import geoalchemy2 as ga
def upgrade():
# POSTGIS is fast enough, so lets forget radius, theta and phi
op.drop_column('aircraft_beacon', 'radius')
op.drop_column('aircraft_beacon', 'theta')
op.drop_column('aircraft_beacon', 'phi')
# ... and flight_state is not used
op.drop_column('aircraft_beacon', 'flight_state')
def downgrade():
op.add_column('aircraft_beacon', sa.Column('radius', sa.Float))
op.add_column('aircraft_beacon', sa.Column('theta', sa.Float))
op.add_column('aircraft_beacon', sa.Column('phi', sa.Float))
op.add_column('aircraft_beacon', sa.Column('flight_state', sa.SmallInteger))

Wyświetl plik

@ -11,19 +11,14 @@ CELERYBEAT_SCHEDULE = {
'task': 'ogn.collect.database.import_ddb',
'schedule': timedelta(minutes=15),
},
'update-receiver-distance': {
'task': 'ogn.collect.heatmap.update_beacon_receiver_distance_all',
'schedule': timedelta(minutes=5),
'update-logbook': {
'task': 'ogn.collect.logbook.compute_takeoff_and_landing',
'schedule': timedelta(minutes=15),
},
'update-receiver-table': {
'task': 'ogn.collect.receiver.update_receivers',
'schedule': timedelta(minutes=15),
},
# Only supported with postgresql backend
# 'update-logbook': {
# 'task': 'ogn.collect.logbook.compute_takeoff_and_landing',
# 'schedule': timedelta(minutes=15),
# },
# 'update-receiver-table': {
# 'task': 'ogn.collect.receiver.update_receivers',
# 'schedule': timedelta(minutes=5),
# },
}
CELERY_TIMEZONE = 'UTC'

Wyświetl plik

@ -26,7 +26,6 @@ def close_db(signal, sender):
app = Celery('ogn.collect',
include=["ogn.collect.database",
"ogn.collect.heatmap",
"ogn.collect.logbook",
"ogn.collect.receiver"
])

Wyświetl plik

@ -1,57 +0,0 @@
from math import atan2, pi, sqrt
from sqlalchemy import and_, desc, distinct
from sqlalchemy.sql import null
from celery import group
from celery.utils.log import get_task_logger
from ogn.collect.celery import app
from ogn.model import AircraftBeacon, ReceiverBeacon
from ogn.utils import haversine_distance
logger = get_task_logger(__name__)
@app.task
def update_beacon_receiver_distance(name):
"""
Calculate the distance between the receiver and its received aircrafts
and write this data into each aircraft_beacon.
"""
last_receiver_beacon = app.session.query(ReceiverBeacon) \
.filter(ReceiverBeacon.name == name) \
.order_by(desc(ReceiverBeacon.timestamp)) \
.first()
if (last_receiver_beacon is None):
return
aircraft_beacons_query = app.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():
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
aircraft_beacon.theta = theta
aircraft_beacon.phi = phi
app.session.commit()
logger.warning("Updated receiver {}.".format(name))
@app.task
def update_beacon_receiver_distance_all():
group(update_beacon_receiver_distance(receiver_name)
for receiver_name in app.session.query(distinct(ReceiverBeacon.name)).all()).apply_async()

Wyświetl plik

@ -24,13 +24,6 @@ class AircraftBeacon(Beacon):
flightlevel = Column(Float)
# Calculated values
radius = Column(Float)
theta = Column(Float)
phi = Column(Float)
flight_state = Column(SmallInteger)
def __repr__(self):
return "<AircraftBeacon %s: %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s>" % (
self.name,

Wyświetl plik

@ -101,17 +101,3 @@ def get_airports(cupfile):
print('Failed to parse line: {} {}'.format(line, e))
return airports
def haversine_distance(location0, location1):
from math import asin, sqrt, sin, cos, atan2, radians, degrees
lat0 = radians(location0[0])
lon0 = radians(location0[1])
lat1 = radians(location1[0])
lon1 = radians(location1[1])
distance = 6366000 * 2 * asin(sqrt((sin((lat0 - lat1) / 2))**2 + cos(lat0) * cos(lat1) * (sin((lon0 - lon1) / 2))**2))
phi = degrees(atan2(sin(lon0 - lon1) * cos(lat1), cos(lat0) * sin(lat1) - sin(lat0) * cos(lat1) * cos(lon0 - lon1)))
return distance, phi

Wyświetl plik

@ -1,8 +1,7 @@
import unittest
import unittest.mock as mock
from ogn.utils import get_ddb, get_trackable, get_country_code, haversine_distance,\
get_airports
from ogn.utils import get_ddb, get_trackable, get_country_code, get_airports
from ogn.model import AddressOrigin
@ -58,28 +57,3 @@ class TestStringMethods(unittest.TestCase):
instance.reverse.side_effect = GeocoderTimedOut('Too busy')
country_code = get_country_code(0, 0)
self.assertIsNone(country_code)
def test_haversine_distance(self):
# delta: one latitude degree
location0 = (0, 0)
location1 = (-1, 0)
(distance, phi) = haversine_distance(location0, location1)
self.assertAlmostEqual(distance, 60 * 1852, -2)
self.assertEqual(phi, 180)
# delta: one longitude degree at the equator
location0 = (0, 0)
location1 = (0, -1)
(distance, phi) = haversine_distance(location0, location1)
self.assertAlmostEqual(distance, 60 * 1852, -2)
self.assertEqual(phi, 90)
# delta: 29000m
location0 = (48.865, 9.2225)
location1 = (48.74435, 9.578)
(distance, phi) = haversine_distance(location0, location1)
self.assertAlmostEqual(distance, 29265.6035812215, -1)
self.assertAlmostEqual(phi, -117.1275408121, 5)