diff --git a/.gitignore b/.gitignore index ab303c9..e121693 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ config.ini *.db *.log +/temp/* +*.pyc diff --git a/api_app.py b/api_app.py index f9adff1..de0a777 100644 --- a/api_app.py +++ b/api_app.py @@ -85,6 +85,19 @@ def select_frames(conn, n, url_params): cur.execute(sql) rows = cur.fetchall() return rows + +def select_stations(conn, n): + """ + Query rows in the stations table + :param conn: the Connection object + :return: + """ + cur = conn.cursor() + sql = 'SELECT * FROM stations ORDER BY last_heard_unix DESC LIMIT {n}'.format(n=n) + print(sql) + cur.execute(sql) + rows = cur.fetchall() + return rows @api_app.route('/') def index(): @@ -113,12 +126,82 @@ def index(): station['time_ago'] = timeago.format(station['last_heard_unix'], datetime.datetime.now()) + # Map stuff + frames_locs = list(filter(lambda x: x['latitude'] != None, frames)) + # Make a GeoJSON + geojs = json.dumps({ + "type": "FeatureCollection", + "features":[ + { + "type":"Feature", + "geometry": { + "type":"Point", + "coordinates":[frame['longitude'], frame['latitude']], + }, + "properties":frame, + + } for frame in frames_locs + ] + }) + return render_template('index.html', station_call = config['Settings']['station_call'], station_lat = config['Settings']['station_lat'], station_lon = config['Settings']['station_lon'], frames = frames, - stations = stations) + stations = stations, + geojs = geojs) + +@api_app.route('/map') +def map(): + + # Get the default list of frames from the API + frames = json.loads(requests.get(config['Settings']['base_url']+"/packets").text)['data'] + + frames_locs = list(filter(lambda x: x['latitude'] != None, frames)) + + # Make a GeoJSON + geojs = json.dumps({ + "type": "FeatureCollection", + "features":[ + { + "type":"Feature", + "geometry": { + "type":"Point", + "coordinates":[frame['longitude'], frame['latitude']], + }, + "properties":frame, + + } for frame in frames_locs + ] + }) + + # Make markers for all the frames + # id_counter = 0 + # markers = '' + # marker_ids = [] + # for frame in frames: + # if frame['latitude'] != None: + # # Create unique ID for each marker + # idd = 'frame' + str(id_counter) + # id_counter += 1 + + # # Create each marker + # markers += "var {idd} = L.marker([{latitude}, {longitude}]);\ + # {idd}.addTo(map).bindTooltip('{from_ssid}', permanent=true).openTooltip();".format(idd=idd, latitude=frame['latitude'],\ + # longitude=frame['longitude'], + # from_ssid=frame['from'], + # created=frame['created']) + # # Try to make a list of markers for Leaflet, but not working + # marker_ids.append(idd) + + + return render_template('map.html', + station_lat = config['Settings']['station_lat'], + station_lon = config['Settings']['station_lon'], + station_call = config['Settings']['station_call'], + #markers = markers, + geojs = geojs) class Packets(Resource): def get(self): @@ -145,7 +228,7 @@ class Stations(Resource): conn = get_db_connection() # Limit to number of records requested - data = select_all_stations(conn) + data = select_stations(conn, n = n) # Sort by created date, descending (https://stackoverflow.com/a/45266808) #data.sort(key=operator.itemgetter('created'), reverse=True) return {'data':data}, 200 # return data and 200 OK code diff --git a/aprs_tool.code-workspace b/aprs_tool.code-workspace new file mode 100644 index 0000000..362d7c2 --- /dev/null +++ b/aprs_tool.code-workspace @@ -0,0 +1,7 @@ +{ + "folders": [ + { + "path": "." + } + ] +} \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index 3b864fd..9b3aad8 100644 --- a/templates/index.html +++ b/templates/index.html @@ -4,18 +4,79 @@