The post will be , for the most part, word for word the same as the the application. The only bits that will be missing are the contact details or boring information.
OSM Annotation for Marble Desktop Globe with an Optimised interface for smaller screens
This project will allow for the annotation of raw GPS data for use in the the mapping process of Open Street Map (OSM). GPS will be annotated with Geo-Location aware text notes, voice recordings, images and videos while tracing new GPS routes. You will also be able to annotate existing OSM data to verify its accuracy. The project will be aimed at a small, light device with GPS capabilities that can run the Marble Desktop Globe such as the EEEPC and the interface will be optimised for this.
During the course of my studies I have been very interested in Geographical Information Systems and have chosen to do as many projects as possible in this area. This is why I was drawn towards the Marble project and I was very fortunate to be given the opportunity to work with the Marble team in the 2007 Google Summer of Code where I implemented the current GPS functionality that can be seen in Marble today. Since then I have been pretty quiet on the development front, because of my college commitments, but have always remained interested in returning to the Marble project to improve the work that I have done in the past and to implement new features.
This project idea was part of the proposed project list last year and since then it has evolved somewhat and I have even tried out some of the techniques that are necessary to implement it as a part of my Final Year Project in University, which I hope to be able to integrate with Marble sometime in the future.
The overall goal of this project is to give Open Street Map contributors an integrated, useful and intuitive platform to collect new raw GPS data while interactively annotating the collected data with Geo-location aware notes ( text, audio and video ) that will be helpful to identify the data while uploading it to the Open Street Map server. During this process we should be able to display the latest Open Street Map data to the user so that they may verify its accuracy. This data can either be streamed live over the internet, if a connection is available, or if not then sections of the data could be downloaded to the local machine.
Although my main goal is to provide this annotation tool there will be a few essential features that must be added to Marble before the tool can be integrated. These will be further discussed in the Implementation section below.
The most notable new feature that I would need to add to Marble would be the ability to interact with data that is currently being displayed to the Marble Widget. To clarify exactly what I mean by "interact":
- The ability to add an information object to the map at a certain Geo-location.
- The ability to click and drag the item to a different Geo-location within the view.
Currently this behaviour is not available to Marble and once it is implemented it will allow for a more in-depth user experience, offering the potential to edit all data items directly within Marble.
I have been discussing the implementation of the of this functionality with some of the Marble developers and was considering creating a custom QGraphicsView overlay system for the Marble Display Widget. This approach however will not be included in my work for Google Summer of Code because it would be completely experimental and would mean that my work would not be directly applicable to the current SVN trunk. Instead I will integrate the system into the current rendering pipeline and try and keep the API for this section as close to the QGraphicsView API so that future integration with this part of the framework will be an easy process.
Another notable feature that will be required for this project is the ability to load and render raw Open Street Map data to the Marble widget so that it can be updated and used as a reference while the user is mapping. Although there is already an OSM view in Marble the implementation I require would be quite different from the current solution. Currently the view is created by downloading flat OSM tiles that have been prepared for Marble, Although they can be used as a visual aid to the user while mapping, they do not contain all of the information that is available on the OSM servers. Once the data is loaded some additional features may be added to the project such as making the system aware when you have ventured into an area that has not yet been mapped or adding simple routing algorithms to Marble using the loaded OSM data. These extra features will be listed in the "If time permits" section at the bottom of the Timeline below.
The other necessary features shouldn't be too difficult to implement considering the implementation of Qt, for instance: rendering text boxes to the map or having small images visible on the map. The difficulty here will be the seamless integration that I am aiming for in the capturing of images, videos, audio and the taking of text notes. Text notes will be easy enough to accomplish as I will be developing specifically for an EEEPC but the integration between Marble and cameras or microphones will be more difficult. Here is a simple image that I hope describes what I want to accomplish from this project:
Although the example annotations in the above picture are unremarkable I'm sure you can understand from my descriptions that getting to this stage will be a great success.
The following is just an itemised list of what I intend to do and is meant as a reference.
Annotation Rendering Framework
- Be able to add a text, audio or video item to the display
- Have the annotations linked to a GeoData location aware data structure
- Allow for annotations to be moved, i.e. interactively alter their Geolocation.
Live Annotation Interface
- Make use of the live GPS tracking that is available in marble
- Be able to "drop" an annotation (picture, text ) at a current location
- Have Geolocation aware Audio and Video
- Make the annotation item aware of the GPS track that represents where it was recorded.
- Move the annotation item along its GPS track during playback
Open Street Map Integration
- Download OSM data live from their servers
- Download OSM information to a local cache for use when offline
- Allow users to choose what sections of the map to download
- Be able to update local cache with newest information from the OSM servers
- Small Screen Optimisations
- Integrate the Recording devices and commands into the Marble Widget
-If time permits-
- automatic annotation i.e. adding "Current position not currently on OSM" when in unmapped area
- moving "camera" along the GPS track to replay where you traveled.
- sync moving camera to moving Video/Audio annotation item.
For the most part of the project I will be adopting a spiral development model where I will work on each of the separate parts of this project at the same time, adding a few features at a time. This will make it easier for me to show my supervisor what progress I have made and also allow me to get some feedback from the Open Street Map community ( and of course the Marble community ) at regular intervals throughout the project.
The only full features that will need to be completed first are the ones listed under the heading "Annotation Rendering Framework" as listed above. This is the only essential prerequisite for my project. This section should take me less than a week to implement and after that the main development model can get underway.
By the mid-term evaluation I would like to have:
- Live annotation, giving the user the ability to add an annotation to their current location with a single click.
- Preliminary implementation of the Open Street Map display so that users can see without any trouble where still needs to be mapped.
- Preliminary integration of the Recording devices into the Interface, i.e. having the ability to seamlessly record even if we cannot display currently connected devices.
- Small Screen Interface patches. This work will be ongoing.
About Me (let us know who you are!):
I'm a final year student of Computer Science in Trinity College Dubin. Since this is my last year of a 4 year degree I've had the opportunity to gain a lot of experience in developing applications and systems to a high standard. When it comes to developing systems as part of a group I consider myself to be a Plant, that is, a person who brings discussion and innovative ideas to a project and tries to think outside the box. This, along with my general aptitude for coding, has allowed me to become the project leader for most of the group projects that i have participated in. Although i feel comfortable and at ease while working as part of a team, I have also excelled in my individual projects, even as early as first year where I won the award for Best Programmer in my class.
In the past year i have developed an interest in Embedded Systems and electronics, giving me another outlet for my inventions and for me to develop some more of my interesting ideas.
If I were to be accepted to the programme, the first thing that I would do would be to register for the Akademy conference, I really enjoyed it two years ago and found it to be very informative, so much so that I am extremely eager to go back. Google Summer of Code is sufficiently flexible to allow me to go for the entirety of the conference, and naturally GSoC and Akademy would be mutually beneficial.