Warning, /education/marble/docs/projects/gps/project_discription is written in an unsupported language. File is not indexed.

0001 Project Guide:
0002 
0003 As requested this is the guide on the way that i see the project
0004 turning out. This is also for my own benefit so please excuse me if
0005 I'm repeating things that you already know about.
0006 
0007 ----------------
0008 Diversion - Abstract Layer
0009 ----------------
0010 
0011 As a diversion to my main project goals i have been trying to
0012 identify what is necessary to develop an Abstract Layer. This is
0013 intended to be a framework from which a new Marble Layer can be
0014 created easily. 
0015 
0016 So far i have identified 2 main elements of a layer that would be
0017 common to any instance of a layer, which are:
0018     1. Layer Data. This refers to an object that a layer is
0019        comprised of, for example a PlacemarkLayer will be comprised
0020        of Placemarks.
0021     2. Layer Container. This is to contain each Layer Item and to
0022        deal with any memory management necessary for dealing with a
0023 lot
0024        of Layer Data objects. An idea for this memory management
0025        would be to have a binary file that represented all of the
0026        data and a QVector for visible data, hence significantly
0027        reducing the memory footprint.
0028 
0029 Each Data Object must contain any information necessary to draw itself
0030 on a display.
0031 
0032 Loading Available Data Objects can be done by a Thread to prevent
0033 slow down of the system. A bitvector may be a good means to represent
0034 which Data Objects are visible, leaving it so that the bit vector is
0035 the only thing that is altered leaving the memory management to run in
0036 the background.
0037 
0038 Any Instance of either of these classes must inherit from them and
0039 implement any pure abstract methods. For example a Placemark would
0040 inherited from an AbstractLayerData.
0041 
0042 --------------------
0043 Main Project - GPS
0044 --------------------
0045 
0046 The main focus of this project is to modify Marble so that it can get
0047 new data during runtime, this data being information on a GPS
0048 Placemark. This will first require creating a GPS layer from the
0049 previously mentioned Abstract layer classes.
0050 
0051 A GPS Data Object would be an object that will provide GPS coordinates
0052 from whatever means it can. There can be any number of GPS Data
0053 Objects in the system and they will have to be contained within a
0054 GPS Object Container object which will be in charge of:
0055 
0056     1.  Sorting out which data objects are visible (As available in
0057         the AbstractLayerContainer) and updating the special "I'm
0058         here GPS Data Object (specific to GPS Layer Container). This
0059         position will be added to a trackmark (and optionally a GPX
0060         file) whenever it is updated.
0061     2.  Keeping the GPS Data Object that is tagged as “me” to the
0062         center of the screen unless the user specifically
0063         requests that it does not happen. i.e. this is the default
0064         behavior.
0065 
0066 Marble should also be able to show previously recorded GPX data, so a
0067 method of adding new GPS objects from a GPX file to the GPS Layer 
0068 Container.
0069 
0070 Real Time GPS Data Objects (ones that can track moving objects) will
0071 need to be updated with coordinates at a set interval of time. The
0072 methods for obtaining these coordinates will be:
0073 
0074  1. Evaluating position from an ip address 
0075 
0076  2. Taking coordinates from a GPS device
0077 
0078  3. Finding the position of the Mobile Phone Cell that a connected
0079 GPRS
0080     or 3G device is “sitting on”   
0081 
0082  4. Allowing a user to input their current position manually.
0083 
0084 I propose that there should be a distinction between all of the above
0085 methods by identifying the GPS Placemark with a different icon for
0086 each method of tracking. This will allow users that are viewing
0087 broadcasted GPS Placemarks to know how their coordinates were
0088 calculated.
0089 
0090 Using the GPS Layer Container mentioned above it should be possible
0091 to track a number of Real Time GPS Data Objects which may be connected
0092 to the system from the internet via a live feed. This may be
0093 implemented by creating a GPS Data Object in the local system
0094 using coordinates from the live feed or alternatively it could be done
0095 by displaying a single GPX file that would update in real time over
0096 the live feed. The user should be able to keep any of these GPS
0097 Data Objects in the center of the screen in the same way that it is
0098 done for the GPS Data Object that is labeled “me”. For this reason it
0099 would be necessary to make a distinction between all “other” GPS
0100 Data Objects and the one labeled “me”, i propose this is done my using
0101 separate colours.
0102 
0103 All of the options necessary for handling GPS will be made available
0104 in a side tab similar to Navigation and Map View. It will contain all
0105 tools necessary to: 
0106 
0107  1. Select a method to track your own GPS Data Object, including
0108     none.
0109 
0110  2. Load any number of Real Time GPS Data Object from live feeds.
0111 
0112  3. Select a GPS Placemark to follow with the view. This should also
0113     be available by clicking a GPS Data Object in the view.
0114 
0115  4. Load a saved GPX file to the viewer.
0116 
0117 The Starting point of this project will be to set up the Entire GPS
0118 Layer and Load a GPX file into the viewer. Then the next step would
0119 be to set up the methods for capturing live data for the current
0120 user.