Google Summer of Code/2014/Project Ideas

From OpenStreetMap Wiki
Jump to navigation Jump to search

Introduction

This page lists a number of ideas for potential Google Summer of Code Projects. For ideas from previous years see Category:Google Summer of Code ideas. Also check out Research/Ideas (project ideas related to research or academia), Top Ten Tasks (the main issues OSM developers are concerning themselves with), Things To Do (another list which is out of date) and the bug tracker & other bugs for more problems to solve.

This page's primary purpose is to help to give potential applicants ideas that they can build on to turn into applications for the programme. Members of the community are encouraged to identify ideas for projects here, and whether they would be willing to act as a mentor for a student attempting the project.

Students can base their application on one of these ideas, or on an idea of their own if they prefer.

Processes

If you are thinking of applying for GSoC, please see our Google_Summer_of_Code/Processes page which describes the way that we manage GSoC within OSM, so you know what we expect of students and Mentors.

Types of Projects

We have historically struggled to come up with suitably challenging yet achievable project ideas based on the core OSM infrastructure in the past, so the projects that have been selected have tended to be smaller projects based on using OSM data. There has also been a tendency for applicants to propose to start new projects rather than build on previous work.

For this year's Google Summer of Code, it is proposed that we adopt the following order of preference for projects:

  1. Development of existing OSM infrastructure (main web site, database, editors or rendering tool chain).
  2. Development of existing OSM related projects (routers, renderers, mobile apps etc.).
  3. Creation of new OSM related projects (provided the proposed application is new / novel).

It is highly unlikely that we will accept a project to create a new application where a similar one already exists (e.g. android based navigation tool - we would much prefer to see a proposal to develop an existing tool and add new features / user interface style etc.).

Format of Project Ideas

Each project idea should copy and edit the following template:

You type
{{GSoC idea
|title=Example - JOSM Plugin to do xxxx
|suggestor=OSM User name or email of person making suggestion (so we can contact them if necessary)
|summary=Summary of Project Idea (a few sentences)
|skills=Skills Required to succeed with the project
|mentors=OSM User names or emails of Possible Mentors
|notes=Additional explanatory notes
|comments=brief comments
}}
You get

Example - JOSM Plugin to do xxxx

Suggested By
OSM User name or email of person making suggestion (so we can contact them if necessary)
Summary
Summary of Project Idea (a few sentences)
Skills
Skills Required to succeed with the project



Possible Mentors
OSM User names or emails of Possible Mentors
Notes
Additional explanatory notes
Comments
brief comments

Project Ideas

Development of Existing OSM Infrastructure

Main Web Site / API Database

Rating, Flagging, and Discussion of Changesets

Suggested By
Frederik Ramm
Summary
Currently, users upload their changes but any discussion about changesets happens in separate media - either in Forums, in email, via direct messaging, or via someone complaining to the Data Working Group about changesets. This is undesirable; it would be better if it was possible to discuss changesets in-place, by adding messages to it - like a discussion thread originating in a changeset. Also, it would be great if changesets could be rated like answers on help.openstreetmap.org are, and/or if changesets could be flagged ("I believe this is an edit war/an un-discussed mass change/vandalism") for inspection by others.
Skills
OSM editing experience, Rails, and Javascript skills required.



Possible Mentors
Frederik willing to mentor but would need support from someone with more OSM API experience.
Notes
Optionally, further cool things can be built on top of rating/flagging, like total user scores, badges, or live feeds of potentially harmful (flagged) changesets. Also see this lightning talk (from 5:45)
Comments
I believe Serge is already working on this?

Editors

Rework Public Transport Plugin

Suggested By
Summary
The JOSM plugin public transport is out of sync with the public transport scheme from the wiki.

The JOSM plugin public transport aims to make editing of public transport routes much easier. This GSoC project should

  • adapt the plugin to nowadays public transport tagging habits.

In particular, the plugin should no longer break well-tagged existing structures.

  • adapt the plugin to the current JOSM interface.

This should also improve stability such that no more crashes happen.

  • allow to construct routes with two clicks from a routing engine

Although bus lines follow most of the time the most direct way, the mapper has still to collect all these segments by hand. This is a really tedious job. A routing engine could suggest a route after the user has clicked starting and ending point. A sufficiently fast textbook implementation of an A* algorithm is present, it needs to be configured to the types of roads suitable for buses.

And the big challenge is a proper integration with the way split feature of JOSM.
Skills
Java knowledge. Deep understanding of the OSM data model or being curious to learn about. Knowledge of JOSM would help.



Possible Mentors
drolbr
Notes

Rendering Toolchain

UTFGrid support in mod_tile/renderd

Suggested By
Kai Krueger
Summary
Currently, the maps on OpenStreetMap.org are static pictures. It would be nice if they were more interactive. I.e. one can click on objects on the map and get additional information about them or interact with them in other ways. One possible way to achieve this is UTFGrid (https://www.mapbox.com/developers/utfgrid/) This defines an object identity for each pixel of a rendered map tile, making it easy to determin the object a user is hovering over and or clicking on. Mapnik (http://mapnik.org/), the underlying rendering library used on OpenStreetMap.org and many other OSM based map site, already supports UTFGrid. However, it is not yet easily exported with the standard tile server toolchain (mod_tile / renderd, https://github.com/openstreetmap/mod_tile). In this project, the student would therefore extend mod_tile/renderd to emit and serve UTFGrid tiles in addition to the normal bitmap tiles. Given most of the components are already available in the various libraries and framework, the base requirement is likely not overly time consuming. So the proposal should also include optional components to integrate the UTFGrid capabilities into the client UI of OpenStreetMap.org to allow for e.g. clickable POIs
Skills



Possible Mentors
Kai Krueger
Notes

Development of an Existing OSM Related Project

Routers

Improve GraphHopper Routeplanner on Android

Suggested By
Peter aka karussell
Summary
The GraphHopper routing engine already runs on several operating systems including Android. To increase adoption on this platform there are several places to improve GraphHopper.
  • It needs to be investigated which heuristics and algorithms can be used if the fast routing (contraction hierarchy) is not an option. And which data structures (memory-bound queue) needs to be created.
  • But there are also more Android specific tasks like a background offline routing server/process which could be used from other apps as well (or via Android intent).
  • To make the achieved work 'useable' or to demonstrate the achieved goals the student can improve the existing App with the new Mapsforge library which also works on the Desktop.
  • The final touch would be to create a video or blog post about the work
Skills
Java and Android knowledge. Interests in (routing) algorithms like Dijkstra.



Possible Mentors
karussell
Notes

Renderers

Recording and Playback of Camera Movement in OSM2World

Suggested By
Summary
The 3D renderer OSM2World can generate realistic 3D sceneries and export them to static images and files for modelling software. It is, however, not yet able to produce movies and real-time animations, e.g. simulating car driving or a low flight through a city. The student is tasked with the extension of OSM2World's GUI with the functionality to record camera movement, a file format to store it, and the ability to playback the movement either in the GUI itself or by exporting it via POV-Ray or OpenGL to a video file.
Skills
Java, optionally POV-Ray experience



Possible Mentors
Notes
Depending on the student's skills the task can be extended to more complex movements, smooth movements and converters to import GPX files and the like.

Mobile Applications

Enhancement of libosmscout

Suggested By
Framstag
Summary
Libosmscout is a C++ library for routing and offline map rendering (see http://libosmscout.sf.net) for mobile devices. While routing and rendering already works, there a number of things that could be improved: See below list of possible tasks. Contact me or the project mailinglist for details.
  • Improve import speed: Import performance is crucial for importing larger regions like countries or bigger. Task would be to analyse and improve import speed by improving used algorithms, integrate multi-threading for CPU bound tasks or similar.
  • Improve routing speed: Routing speed is crucial for routing on devices with low memory and processing power (like mobile devices). Task would be to either improve the existing algorithm (A*), improve the underlying routing graph by applying optimizations on it or by integration a new routing algorithm (like contraction hierachies).
  • Improve routing description quality: Routing is not only performance. The quality of the routing description is also important. libosmscout uses a plugin interface to aggregate additional description information. Task would be to analyse and improve existing plugins, (optionally) enhance the existing routing data (if necessary) and use the existing plugin interface to add new plugins that add further information.
  • Rendering speed: Current rendering speed on desktop is about 50-250ms for a 800x480 tile depending on zoom level. For mobiles this is possibly not fast enough. Task is to reduce the amount of rendered data, improve access to existing drawing backends or write new backends to have faster access to rendering hardware.
  • Rendering quality: libosmscout uses a style sheet driven rendering engine: Task is to design and implement a new style sheet syntax that allows more fine graned use of the existing rendering features and to enhance the existing styles with new styles to improve the look of the map. A new, improved style using the new features should also be the result.
  • Improve database speed: libosmscout uses internally a number of index and data files. While a number of optimization have been done, data size, data locality (data close on the map should be close in the file) and indexing can still be improved. Task would be to apply new algorithms and find ways to optimize on disk size of data.
Skills
C++



Possible Mentors
Notes

Data processing

Updates of Seamarks according to Notices to Mariner

Suggested By
cleanerx
Summary
The openseamap subproject renders seamarks that guide marine navigation worldwide. Seamarks are frequently updated when their position or colouring changes due to navigational needs. The updates are published by the many hydrogaphic organisations worldwide and have various formats. We need to have an update process in place which reads in these documents and update seamarks accordingly. This is particular tricky as not all seamarks have a unique id and some published information does not give sufficient accuracy for the published position. Furthermore some documents are published in PDF which make it hard to analyze the contained information automatically as text must be extracted heuristically. The processing must be designed in a modular fashion so different data sources may be supported.
Skills
Java Programming skills, willingness to get in contact with osm and seamark data structures



Possible Mentors
cleanerx
Notes
The NOAA Notices to Marineers would be a good first source of Seamark data
Comments
Before doing this openseamap should stop being subproject and make tagging sane (at least cases of clear absurd like using harbour:toilets tag) Bulwersator (talk) 16:16, 15 February 2014 (UTC)

Remove errors from recorded depth data.

Suggested By
cleanerx
Summary
The openseamap subproject preprocesses data recorded by ships in order to generate depth contour lines in shallow water regions. This data includes position, time, depth, wind, speed and accelerator measurements. Furthermore it contains systematical errors such as tide or sensor errors and non systematical errors such as signal noise. A widely used filter for the purpose of online error reduction and estimation is the Kalman Filter and its variations such as the Unscented Kalman Filter. The ultimate goal is to have an error corrected track with depth values that minimizes the error and gives estimates about the error bounds. Particular challenges arise as the sensors deliver data at different update rates that the standard filter cannot cope with. Furthermore the underlying physical equations are highly nonlinear. As the data is available after recording it is advisable to use a Kalman smoother instead of the Kalman Filter that does a two step filtering and improves the overall result. As ships carry various sensor setups several filters may be designed to cover the full range of setups.
Skills
Java Programming skills, basics in system theory advisable but not required, basic statics knowledge



Possible Mentors
cleanerx
Notes

Generate Digital Elevation Model out of preprocessed Depth Points

Suggested By
cleanerx
Summary
The openseamap subproject processes data recorded by ships in order to generate depth contour lines in shallow water regions. This data includes position, time, depth, wind, speed and accelerator measurements. After data correction numerous depth points exists where each data point has a time, position and a depth value with an associated error bound. The goal is to interpolate a digital elevation model from these datapoints OR to generate contour lines directly from the given data points. Various interpolation methods <a href="http://en.wikipedia.org/wiki/Multivariate_interpolation">exist</a> but due to the massive amounts of points to expect two approaches seem favorable. The first approach is to generate a delauney triangulation and the second one is to use bicubic interpolation.

The first method can not cope with multiple points at the same exact position which is why a precleaning must occur. For each single position there needs to be a calculation that accounts for the time the recording has been done, the variance in the exact position and the measured depth. As tidal regions tend to change depth frequently older measured values must have a very reduced weight in the calculation.

Once the data has been cleaned it may be triangulated and contour lines may be calculated from this. The second approach is likely to give a more appealing contour line but may not be feasible due to the massive amount of data points that are non uniformly distributed.
Skills
Java Programming skills, basics in algorithm techniques



Possible Mentors
cleanerx
Notes

Editing Coordination

Creation of a new OSM Related Project

GPS

Cleanup-related tools

Surveying application