Warning, /education/marble/docs/projects/gps/project_design 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 GPRS 0079 or 3G device is “sitting on” 0080 0081 4. Allowing a user to input their current position manually. 0082 0083 I propose that there should be a distinction between all of the above 0084 methods by identifying the GPS Placemark with a different icon for 0085 each method of tracking. This will allow users that are viewing 0086 broadcasted GPS Placemarks to know how their coordinates were 0087 calculated. 0088 0089 Using the GPS Layer Container mentioned above it should be possible 0090 to track a number of Real Time GPS Data Objects which may be connected 0091 to the system from the internet via a live feed. This may be 0092 implemented by creating a GPS Data Object in the local system 0093 using coordinates from the live feed or alternatively it could be done 0094 by displaying a single GPX file that would update in real time over 0095 the live feed. The user should be able to keep any of these GPS 0096 Data Objects in the center of the screen in the same way that it is 0097 done for the GPS Data Object that is labeled “me”. For this reason it 0098 would be necessary to make a distinction between all “other” GPS 0099 Data Objects and the one labeled “me”, i propose this is done my using 0100 separate colours. 0101 0102 All of the options necessary for handling GPS will be made available 0103 in a side tab similar to Navigation and Map View. It will contain all 0104 tools necessary to: 0105 0106 1. Select a method to track your own GPS Data Object, including 0107 none. 0108 0109 2. Load any number of Real Time GPS Data Object from live feeds. 0110 0111 3. Select a GPS Placemark to follow with the view. This should also 0112 be available by clicking a GPS Data Object in the view. 0113 0114 4. Load a saved GPX file to the viewer. 0115 0116 The Starting point of this project will be to set up the Entire GPS 0117 Layer and Load a GPX file into the viewer. Then the next step would 0118 be to set up the methods for capturing live data for the current 0119 user.