aprs-mapper
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:This was developed for a class taken at the University of Alabama in Huntsville
aprs-mapper

NOTE: Developed with Patrick G., Nick B. and Jason S.

This project was developed for a class taken at the University of Alabama in Huntsville. The purpose 
of this application is to copy some of the basic functionality available in other APRS applications 
(namely, xastir) but to provide a more user-friendly interface. Basic functionality was achieved at 
the end of the semester, but there are many features that are lacking for this to be a stable 
application available to the public.

A quick overview of features:

* The application will only send a position report, otherwise it is listen only
* Connect to [multiple] APRS internet service
* Plot points on a pan/zoom capable map
* Map choice is user configurable from any 256x256 tile server (for example, open street maps)
* Cache tiles for use in offline mode
* Save points to a local database to view in offline mode
* Blacklist/whitelist filters to only show objects of interest
* Weather overlays for severe weather in the USA
* Plots previous locations of points to show movement history
* Rretrieve database info for a point the user clicks on
* Cross platform capable (Qt)

See "downloads" section on github for screenshots.

How to get this working:
1) Get Qt Creator
2) Compile


Notes from the final submission:

* More detailed mouse-over info!
(dead_reckoning png) The item is now hi-lighted (the outline turns green) when the mouse is 
over an item. On the right of the statusbar is shown the callsign of the hi-lighted item, 
the last time an update was received, the distance between the current item and your home 
station (in km or mi, depending on the profile option english/metric), the bearing in degrees 
and compass direction. Mousing over a trace will also show this, for the item, not the 
mouse position.

* Filter on screen items!
(dead_reckoning png) "Client side" filtering can be done using blacklists and whitelists (I'm 
pretty sure using both lists is unnecessary, but it's already been coded). It should be 
obvious, but whitelisting something will always allow it to be drawn, while blacklisting 
something will never allow it to be drawn on the map. Filtering does not affect logging; that 
is, even if an item is blacklisted, it will still be stored in the database; the only thing 
that changes is that it won't be drawn on the map. Blacklisting an item has priority over 
whitelisting an item. Items can be filtered by the type (position report, object), as 
determined by qaprstools, or by symbol. Changes only occur after hitting the "apply" button; 
this will not change what has already been added to the map. In order to filter the current 
screen, the map would have to be panned/zoomed off and then back to the current screen.

* Dead reckoning!
(dead_reckoning png) I spent some time researching this, but I have no idea how to forecast 
future location. I found some really neat information about hurricanes, but no algorithms or
anything, other than current bearing+speed, so I made up my own method, which I have absolutely 
no justification for. What it does: if an item has moved (has a previous update at another 
location), I take that distance and project a new location in front of the packet along the 
current bearing, with a circle of uncertainty (just look at the picture). Also, this is only 
when mousing over an item.

* Pull complete information on item from database!
(detailed_information png) Right clicking on the map will bring up a popup window with a list 
of all the items under the mouse. If an item is selected, it's entire history is pulled from 
the database. The most recent packet is shown in the textbox on top. All other information is 
shown in the grid below. By default, columns are added for all the information that is parsed 
out of a packet. If a field is blank/not used for the entire history in the database, that 
column is hidden. For example, a packet that never received a wind speed would have the wind 
speed column hidden. If at least one packet contains a valid update, that column is shown, 
even if the other packets contain a bunch of NaN's or -1's. Also, the units shown change 
based on the english/metric profile setting.

* Tracing that isn't terrible!
Reimplemented our Point class to draw traces when a repaint occurs, instead of drawing a 
bunch of random QGraphicsLines on our map. Believe me, it's better this way.

* Fixed: memory leaks, position reports, GUI beautifications!



Known issues:

* No character limit on callsign

* Some tooltips are wrong

* Some tab orders are wrong

* Profile settings need to be explained -- i.e., there is no readme or help file (Quick 
note for the map: "online mode" will check the local tile directory, then download tiles 
from the internet. "Offline mode" will never download from the internet. Use %1, %2, and 
%3 in the tile server URL to reference zoom, x-tile number and y-tile number).

* Possible GPL issues with open street maps
By default, our application does not use open street maps. Since the user must enter a 
tile server URL in the profile, which, of course, could be any valid tile service (although, 
I'm not sure what would happen if the tiles were not 256x256 pixels), I personally do not 
think we need to include Open Street Maps licensing information, although other people may 
disagree.

* Collision detection for items with traces is sometimes slightly inaccurate. Another 
related item involves the dead reckoning path not being entirely drawn. The answer lies 
in the Point::Shape and Point::BoundingRect functions.

* When requesting items from the database, if an item has a more recent location but it 
is not on the current map screen, and there is a location that is on the current map 
screen, that more recent location is not shown. What this means is that it will seem as 
if you are looking at the latest information for a packet, but when you scroll around, 
it will start doing some crazy jumps, or disappear.

* Panning around the edge of the map, especially at lower zoom levels (when you can see 
most of the world) does not provide for the best user experience.

* Zooming all the way out and plotting a bajillion packets can take a long time. However, our 
application seems pretty stable.

* It takes about 500ms before additional user input will be processed after panning or zooming.

* Panning and zooming initiates a database request for the area that is now in the view; 
if the the application is closed while the database is still returning packets, the 
application will quit but the database thread will continue to run in the background until 
it's finished emitting all the packets. This is especially noticeable at lower zooms.

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。