Azimuth map working.

This commit is contained in:
Nick Foster 2012-10-10 08:20:07 -07:00
parent dfb48dbe8d
commit cd2cfec730
4 changed files with 67 additions and 10 deletions

View File

@ -85,6 +85,9 @@ class mainwindow(QtGui.QMainWindow):
self.ui.list_aircraft.setModel(self.datamodel) self.ui.list_aircraft.setModel(self.datamodel)
self.ui.list_aircraft.setModelColumn(0) self.ui.list_aircraft.setModelColumn(0)
self.az_model = air_modes.az_map_model(None)
self.ui.azimuth_map.setModel(self.az_model)
#set up dashboard views #set up dashboard views
self.icaodelegate = ICAOViewDelegate() self.icaodelegate = ICAOViewDelegate()
self.ui.list_aircraft.setItemDelegate(self.icaodelegate) self.ui.list_aircraft.setItemDelegate(self.icaodelegate)
@ -276,9 +279,13 @@ class mainwindow(QtGui.QMainWindow):
self.outputs.append(rawport.output) self.outputs.append(rawport.output)
self.updates.append(rawport.add_pending_conns) self.updates.append(rawport.add_pending_conns)
#add azimuth map output and hook it up
if my_position is not None:
self.az_map_output = air_modes.az_map_output(my_position, self.az_model)
self.outputs.append(self.az_map_output.output)
self.livedata = air_modes.output_print(my_position) self.livedata = air_modes.output_print(my_position)
#add output for live data box #add output for live data box
#TODO: this doesn't handle large volumes of data well; i get segfaults.
self.outputs.append(self.output_live_data) self.outputs.append(self.output_live_data)
#create SQL database for KML and dashboard displays #create SQL database for KML and dashboard displays
@ -291,7 +298,7 @@ class mainwindow(QtGui.QMainWindow):
#create output handler thread #create output handler thread
self.output_handler = output_handler(self.outputs, self.updates, self.queue) self.output_handler = output_handler(self.outputs, self.updates, self.queue)
self.ui.button_start.setText("Stop") self.ui.button_start.setText("Stop")
def on_quit(self): def on_quit(self):

View File

@ -58,6 +58,7 @@ from sbs1 import output_sbs1
from kml import output_kml from kml import output_kml
from raw_server import raw_server from raw_server import raw_server
from exceptions import * from exceptions import *
from az_map import *
#this is try/excepted in case the user doesn't have numpy installed #this is try/excepted in case the user doesn't have numpy installed
try: try:
from flightgear import output_flightgear from flightgear import output_flightgear

View File

@ -25,6 +25,7 @@
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
import threading import threading
import math import math
import air_modes
# model has max range vs. azimuth in n-degree increments # model has max range vs. azimuth in n-degree increments
@ -76,8 +77,8 @@ class az_map_model(QtCore.QObject):
# the azimuth map widget # the azimuth map widget
class az_map(QtGui.QWidget): class az_map(QtGui.QWidget):
maxrange = 450 maxrange = 45
ringsize = 100 ringsize = 10
bgcolor = QtCore.Qt.black bgcolor = QtCore.Qt.black
ringpen = QtGui.QPen(QtGui.QColor(0, 96, 127, 255), 1.3) ringpen = QtGui.QPen(QtGui.QColor(0, 96, 127, 255), 1.3)
rangepen = QtGui.QPen(QtGui.QColor(255, 255, 0, 255), 1.0) rangepen = QtGui.QPen(QtGui.QColor(255, 255, 0, 255), 1.0)
@ -139,6 +140,34 @@ class az_map(QtGui.QWidget):
painter.drawEllipse(QtCore.QRectF(-diameter / 2.0, painter.drawEllipse(QtCore.QRectF(-diameter / 2.0,
-diameter / 2.0, diameter, diameter)) -diameter / 2.0, diameter, diameter))
class az_map_output(air_modes.parse):
def __init__(self, mypos, model):
air_modes.parse.__init__(self, mypos)
self.model = model
def output(self, msg):
[data, ecc, reference, timestamp] = msg.split()
data = air_modes.modes_reply(long(data, 16))
ecc = long(ecc, 16)
rssi = 10.*math.log10(float(reference))
msgtype = data["df"]
now = time.time()
if msgtype == 17:
icao = data["aa"]
subtype = data["ftc"]
distance, altitude, bearing = [0,0,0]
if 5 <= subtype <= 8:
(ground_track, decoded_lat, decoded_lon, distance, bearing) = self.parseBDS06(data)
altitude = 0
elif 9 <= subtype <= 18:
(altitude, decoded_lat, decoded_lon, distance, bearing) = self.parseBDS05(data)
self.model.addRecord(bearing, altitude, distance)
##############################
# Test stuff
##############################
import random, time import random, time
class model_updater(threading.Thread): class model_updater(threading.Thread):
@ -151,8 +180,11 @@ class model_updater(threading.Thread):
def run(self): def run(self):
for i in range(az_map_model.npoints): for i in range(az_map_model.npoints):
self.model.addRecord(i*360./az_map_model.npoints, 30000, random.randint(0,400))
time.sleep(0.1) time.sleep(0.1)
if(self.model):
self.model.addRecord(i*360./az_map_model.npoints, 30000, random.randint(0,400))
else:
self.stop()
class Window(QtGui.QWidget): class Window(QtGui.QWidget):
def __init__(self): def __init__(self):

View File

@ -24,7 +24,7 @@
</rect> </rect>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>1</number> <number>3</number>
</property> </property>
<widget class="QWidget" name="tab"> <widget class="QWidget" name="tab">
<attribute name="title"> <attribute name="title">
@ -234,10 +234,6 @@
<string>Filename</string> <string>Filename</string>
</property> </property>
</widget> </widget>
<zorder>line_inputfile</zorder>
<zorder>label_13</zorder>
<zorder>combo_rate</zorder>
<zorder>label_27</zorder>
</widget> </widget>
</widget> </widget>
</widget> </widget>
@ -847,6 +843,21 @@
<string>Data browser</string> <string>Data browser</string>
</attribute> </attribute>
</widget> </widget>
<widget class="QWidget" name="azimuth_tab">
<attribute name="title">
<string>Azimuth map</string>
</attribute>
<widget class="az_map" name="azimuth_map" native="true">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>245</width>
<height>245</height>
</rect>
</property>
</widget>
</widget>
<widget class="QWidget" name="livedatatab"> <widget class="QWidget" name="livedatatab">
<attribute name="title"> <attribute name="title">
<string>Live data</string> <string>Live data</string>
@ -971,6 +982,12 @@
<extends>QWidget</extends> <extends>QWidget</extends>
<header>qwt_dial.h</header> <header>qwt_dial.h</header>
</customwidget> </customwidget>
<customwidget>
<class>az_map</class>
<extends>QWidget</extends>
<header location="global">air_modes/az_map</header>
<container>1</container>
</customwidget>
</customwidgets> </customwidgets>
<resources/> <resources/>
<connections/> <connections/>