...or BFST for short, is a course offered to BSc Software Development students at the IT-University of Copenhagen. The goal of the project is to design and develop an efficient map of Denmark based on data from OpenStreetMap(.org), with integrated navigation. The project was done the first medium sized program we wrote in Java, and was developed in groups of 5. The project counts as 15 ECTs. Full course description.
The following requirements are taken from the examination project description and describes the minimum functionality expected of the final system. Extensions were encouraged. The system must:
- allow the user to specify a data file to be used for the application. As a minimum, the system should support loading a zipped .OSM file.
- allow the user to save and load the current model to and from a binary format which must be documented in the report.
- allow the user to add something to the map, e.g., points of interest.
- include a default binary file embedded in the jar file, to be loaded if no .OSM file is given at start-up.
- draw all roads in the loaded map dataset, using different colors to indicate types of road.
- where appropriate, draw additional cartographic elements.
- allow the user to focus on a specific area on the map, either by drawing a rectangle and zooming in it, or by zooming in the center of the map and pan the map afterwards.
- adjust the layout when the size of the window changes.
- unobtrusively show (either continuously or on hover) the name of the road closest to the mouse pointer, e.g., in a status bar.
- allow the user to search for addresses typed as a single string, with the results being shown on the map. Ambiguous user input must be handled appropriatedly, e.g., by displaying a list of possible matches.
- be able to compute a shortest path on the map between two points somehow specified by the user (e.g. by typing addresses or clicking on the map).
- allow the user to choose between routes for biking/walking and for cars. Car routes should take into account speed limits/expected average speeds. A route for biking/walking should be the shortest and cannot use highways.
- feature a coherent user interface for for your map and accompanying functionality. Specifically, you must decide how the mouse and keyboard is used to interact in a user-friendly and consistent manner with the user interface.
- output a textual description of the route found in Item 1 giving appropriate turn instructions. E.g., “Follow Rued Langgaardsvej for 50m, then turn right onto Røde Mellemvej.”
- indicate the current zoom level, e.g., in the form of a graphical scalebar.
- allow the user to change the visual apperance of the map, e.g. , toggle color blind mode.
- be fast enough that it is convenient to use, even when working with a complete data set for all of Denmark. The load time for .OSM can be hard to improve, but after the start-up the user interface should respond reasonably quickly.
The code for the full solution can be found in this repository. You might also be interested in the final report (DK) or the full documentation. Below is a selection of the implemented features, for the full overview please check the report.
As an feature our group decided to allow users to customize their view of the map. The user is able to choose from three pre-defined themes and create their own themes within the program.
The final program loads most of the common points of interest from the .OSM format. However, users are free to add and save their own POI to the map. Points can later be moved and altered by the user. The panel in the right side allows for quick-navigation to saved POIs.
Besides the regular navigation system (required), we also implemented a drag n' drop system that allows the user to drag the start and end point to any place on the map. In the right-hand side, the panel shows a list of navigation instructions. These instructions could at any time be saved as an .PDF file. An example of such a file can be found here.