Although there has been many projects within the OSM community that already provide print support, notably Maposmatic and townguide, there is still a lot of ground to get creative given OSM open source nature. In this project, it is aimed to create a web application where the user can customize the way that she would like her maps to be printed for her use. Also, one of the objectives of this project is to keep an eye on mapnik new features proposed for this summer of code related to this same issue. http://trac.mapnik.org/wiki/GSOC2010/Ideas#BetterPrintSupport
List of Languages known
Ruby (8/10): Did an internship at FatStudent where they were using Rails. I've also used it for some personal projects.
Python (7/10): Have used it in plenty on my artificial intelligence classes, and also did used the PyOpenGl bindings for my computer graphics class.
Elisp (7/10): I know it is not the best of skills around but I do enjoy programming my super text editor.
PHP (7/10): Have used it before for freelance projects, but not using it seriously since learning Ruby and Python.
C# (7/10): Again for a school project, one of the requirements was to use only the Microsoft stack, I developed a basic help desk application with ASP.NET
C++(6/10): My data structures course was based on C++, I also did some computer graphics homework with it. This month I have been improving it a little by reading Mapnik's source.
Java (5/10): I have only used for school projects.
OSM Project Proposal
The project will consist of a Django web application that will integrate several features from other projects. Because this project's main objective will be towards creating a flexible enough platform for printing customizable maps, the customizable possibilities of the project can get very broad. A fully featured style editor like that of Cloudmade but for paper printing is not a feasible task to do within 3 months, and although interesting, it could finally become a monolithical pile of code, something I do not want. I will try to keep it simple so that future customizations are not a such pain to make.
The project will have two major aspects. The first one, will be creating the Django application based upon the design decisions that Maposmatic/ocitysmap have already done (rendering daemon, web service architecture) to integrate what has already been done by townguide.
Some of ideas for the base project will be:
- POI display selection: Townguide has already addressed this problem. This would mean integrating this idea to the Maposmatic based project.
POI icon selection: Implement a way to select the kind of icon that will represent the POIs.
- Work on overlapping icons: One current problem of townguide is that when there are several POIs on the same area, it becomes difficult to discern what is there. This have to be addressed in order to make the map easy to use.(e.g. if there are 3 restaurants on the same place, show a number 3, or an index that indicates which places exists there)
- Basic Theme Colour selection: Define several styles like Cloudmade does which could be selected in order to localize the map.
- Module for uploading styles: I think that it would be fun to provide an interface for uploading user contributed styles to generate the maps. This styles could be regular styles or use Cascadenik styles.
- Turning Layers on/off: Mapnik has support for turning layers off/on, and this is currently not being done by the main Export function from OpenStreetMap. An option like this would be good for post processing, which needs vector output.
- Provide different output formats: PDF of various sizes and resolution. Townguide also has some code regarding this, so I will be basing on that piece of work.
- Provide different types of layouts: This will involve work on using Pango Library to do so. The Maposmatic project has a ticket right now regarding this that could be later merged into the project. The project to study here is OSM-Atlas which create a pdf atlas from OSM png images. It uses osmarender/inkscape/pdflatex so maybe better approach could be thought out.
The second aspect is to use the new Mapnik resolution features that will increase the quality of the paper output. Some of this might involve actual work on Mapnik, so some guidance from the Mapnik project will be needed. Fortunately, Mapnik was accepted as participant for GSoC this year, and one of the ideas tackles specially the issue of resolution for the maps.http://trac.mapnik.org/wiki/GSOC2010/Ideas#BetterPrintSupport
This part of the project on exposing this new functionality from mapnik through the same web interface. This would involve:
- Tweaking ocitysmap to make it mapnik2 compliant in order to use the new features.
- Work on adding resolution options to improve the quality of the maps.
If time allows I would work on this (Extended Goals):
- Display cycling and walking routes like OpenCycleMap: This feature could benefit from the work on the idea from the Maposmatic ticket referenced above, in order to make the map span several pages.
- Show contours and hill shading
Week #1: May 23th - 29th (May 24th Start)
These weeks I'm planning on setting up the foundations for the project, doing the main set up of the appropiate stack for the Django application. Maposmatic/ocitysmap is already a great source to make a mapnik/osm based web project so I'm thinking about building on it. This week I will start work on porting the first features from townguide to Ocitysmap to display the selection of POIs on the output. Research on whether keep on using the Pango library which Ocitysmap uses (a big issue since one goals might be to merge some of the code with Maposmatic), or reportlab which townguide uses. (40 hours)
Week #2: May 30th - June 5th
Now that the infrastructure for the Django application has been set up I will work on the first features from the project that have already been addressed by the townguide project. I will start work on the user interface and work on the set up for OpenLayers. Since the user interface is very important, and hearing from Maposmatic efforts:
...I think that I should allow enough time to work on the user interface, the original idea of the project is 'Easy Printable Maps' after all. Another source of inspiration for this is Nicholas Marichal idea (40 hours)
Week #3: June 6th - 12th
I'll continue with implementing a way to choose the icons that should appear for display when printing within the user interface.
I will start work on the problems that occur when there are several POIs on the same place (overlapping icons)
Week #4: June 13th - 19th
I will continue work on the overlapping icons problem and work out a way to make it easier to understand on the printed map which kind of POIs were there.
I expect to begin work on the styles feature for the project around this time by making available different styles available from the user interface.
I'll work on the module for uploading the Mapnik XML styles as well.
Week #5: June 20th - 26th
I'll work on providing different output formats for paper now. Again there is some code from townguide where I could base upon.
Work on different more kinds of layouts than the main one offered by Maposmatic and townguide, like a map that spans on several pages (atlas), or a really big map.
Week #6: June 27th - July 3rd
Continue work on the different layouts and rendering options for mapnik. (24 hours)
Although it has already been covered by the 'upload your own mapnik style' feature, I will add the option to turn Layers on/off (16 hours)
Week #7: July 4th - 10th
It has been more than a month of coding nonstop this week I'll be revising my code and work on any features that need more polish before the mid-term evaluation. (40 hours)
Weeks #8: July 11th - 17th (Mid-term evaluation)
Week #9: July 18th - 24th
Since the base project should be very advanced by now, I'll ask for guidance from the Mapnik project to work on the issues regarding Better Print Support from Mapnik. In case the project has already been taken care of by another fellow GSoC member, this week I'll revise the code to integrate these features. These features will most likely be taken care of in the new Mapnik2 codebase, so this will involve updating ocitysmap to be Mapnik2 compliant.
Week #10: July 25th - 31th
Week #11: August 1st - 7th
I planned to use these weeks as buffer time to revise the code and work on the extended goals from the project. I will work on the documentation, possible patches that could be useful for maposmatic, deploy of the application on a server, write missing tests, etc...
Week #12: August 8th - 14th (Firm "Pencils Down" date)
Time Available to Work on Project
I will finish school on May 20th, and after that I'll have the whole summer to work on this project.
Handling Situations (in absence of mentor)
I promise to not become a high load on the mentor, as I can manage working on my own. The role of a mentor in the end I think it is to give advice to the mentee without it becoming a such a burden. Still if I have a problem, the OSM/mapnik communities are healthy enough to answer any question that I might have. Also, in order to keep my mentor inform on the advance of this project I will be reporting advances each week and might setup a tool like Redmine so that he can follow the flow of the project.
Currently involved in?
I'm currently busy with finishing school and final projects for artificial intelligence classes. Otherwise, I'm trying out new technologies all the time, right now having fun with Django and learning Boost so that I will be able to contribute to Mapnik in the future.
OpenStreetMap is currently not very known in Guadalajara,Mexico, where I live, and its OSM map seems to be very far behind from the one from Google Maps. I would like to see some change in this aspect, since Guadalajara is the 2nd largest city in Mexico, maybe by promoting it while I'm still in school or give a there regarding the project.
Regarding my hobbies, I'm currently an active member of AIESEC, so I'm interested on making an impact through innovation. I also like a lot trying out new technologies that come from Hacker News from time to time. I like languages and can speak/read Japanese on a business level.