kopia lustrzana https://github.com/hholzgra/maposmatic/
547 wiersze
16 KiB
TeX
547 wiersze
16 KiB
TeX
% MapOSMatic - Libre Software Meeting 2012 presentation
|
|
% -*- coding: utf-8; mode: LaTeX -*-
|
|
|
|
% Copyright (C) 2010 Maxime Petazzoni <maxime.petazzoni@bulix.org>
|
|
% Thomas Petazzoni <thomas.petazzoni@enix.org>
|
|
% Distributed under the terms of the Creative Commons CC-by-sa 3.0
|
|
|
|
\documentclass{beamer}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage[american]{babel}
|
|
|
|
\mode<presentation>
|
|
\usetheme{MapOSMatic}
|
|
\setbeamercovered{dynamic}
|
|
|
|
\title{MapOSMatic: free city maps for everyone!}
|
|
\author{Thomas {\sc Petazzoni}}
|
|
\date{July 10th, 2012}
|
|
|
|
\begin{document}
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\begin{frame}
|
|
\begin{center}
|
|
\Huge
|
|
MapOSMatic, free city maps for everyone!\\
|
|
\vspace{2cm}
|
|
\begin{columns}
|
|
\column{0.6\textwidth}
|
|
\normalsize
|
|
Thomas Petazzoni\\
|
|
\path{thomas.petazzoni@enix.org}\\
|
|
Libre Software Meeting 2012\\
|
|
\url{http://www.maposmatic.org}\\
|
|
\column{0.4\textwidth}
|
|
\includegraphics[height=0.3\textheight]{geneve-small.png}
|
|
\end{columns}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Thomas Petazzoni}
|
|
\begin{itemize}
|
|
\item {\bf Embedded Linux engineer} and trainer at Free Electrons
|
|
\item Regular contributor to the {\bf Buildroot} project, an open-source
|
|
embedded Linux build system
|
|
\item Contributor to the Linux {\bf kernel}
|
|
\item Active in the free software community: founder of {\em
|
|
Toulibre}, founder of the {\em Agenda du Libre}
|
|
\item {\bf One of the developer of MapOSMatic}, together with
|
|
David Decotigny, Gaël Utard, Maxime Petazzoni, David Mentré,
|
|
Frédéric Lehobey, Étienne Loks, and many other contributors.
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Agenda}
|
|
\begin{enumerate}
|
|
\item Original idea and goal
|
|
\item History
|
|
\item Current status
|
|
\item Technical details
|
|
\item Future
|
|
\end{enumerate}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Original idea}
|
|
At some point in 2009...
|
|
\vspace{1cm}
|
|
\\
|
|
\Large
|
|
\begin{quote}
|
|
``It would be great to be able to use OpenStreetMap data to generate
|
|
city maps such as the ones we can see in town signs and in folded
|
|
maps.''
|
|
\end{quote}
|
|
\normalsize
|
|
\vspace{1cm}
|
|
\hfill Gilles Lamiral, OSM contributor of Bretagne, France
|
|
\end{frame}
|
|
|
|
\begin{frame}{Public city maps}
|
|
\begin{center}
|
|
\includegraphics[height=0.8\textheight]{public-city-map.jpg}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Folded maps}
|
|
\begin{center}
|
|
\includegraphics[height=0.8\textheight]{folded-map.jpg}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Goal}
|
|
\Large
|
|
Create an {\bf easy-to-use Web service}, in which the user inputs
|
|
the {\bf name of a city}, and in return gets:
|
|
\begin{enumerate}
|
|
\item a {\bf map} of that city, overlayed by a {\bf grid}
|
|
\item an {\bf index of streets and amenities} associated to the map
|
|
\end{enumerate}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Development model}
|
|
\begin{itemize}
|
|
\item The development mainly takes place during {\bf hackfests}
|
|
\item Hackfests are gathering of 4-6 developers for 2 to 8 days,
|
|
fully dedicated to making progress on the project
|
|
\item Hackfests provide an excellent productivity
|
|
\item Maintenance and minor progress (bug fixes, translation
|
|
updates) done outside of the hackfests, as a regular open-source
|
|
project, with mailing-list, Git repositories, etc.
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Hackfest \#0}
|
|
\begin{itemize}
|
|
\item August 2009, Toulouse, France
|
|
\item Six OSM contributors
|
|
\item No knowledge of PostgreSQL, PostGIS, Mapnik, OSM data
|
|
structure, Cairo
|
|
\item Initial version of MapOSMatic developed and published in 5 days
|
|
\begin{itemize}
|
|
\item Technologies: Python, Django, Cairo, PostgreSQL, PostGIS, Mapnik
|
|
\end{itemize}
|
|
\item Limited to France, no support for languages other than French
|
|
and English, very basic user interface, OSM data never updated
|
|
\item \url{http://www.maposmatic.org}
|
|
\item Excellent reception from the OpenStreetMap community
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Hackfest \#0 results}
|
|
\begin{center}
|
|
\includegraphics[height=0.8\textheight]{chavagne.png}
|
|
\includegraphics[height=0.8\textheight]{chavagne_index.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Hackfest \#0 details}
|
|
\begin{center}
|
|
\includegraphics[height=0.5\textheight]{chavagne_detail.png}
|
|
\includegraphics[height=0.5\textheight]{chavagne_index_detail.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Hackfest \#1}
|
|
\begin{itemize}
|
|
\item December 2009, near Paris, France
|
|
\item Five developers, four days
|
|
\item Features implemented
|
|
\begin{itemize}
|
|
\item Coverage of the whole world: required a much larger import
|
|
of OSM data
|
|
\item OSM database updated on a daily basis
|
|
\item i18 infrastructure to adapt the street index generation on a
|
|
per-language basis
|
|
\item City name search based on Nominatim
|
|
\item Amenities (schools, town hall, post offices) in the index
|
|
\end{itemize}
|
|
\item All improvements put in production early January 2010
|
|
\item After this hackfest, we started receiving a lot of
|
|
contributions to translate the language and the street index
|
|
rendering logic.
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Hackfest \#2}
|
|
\begin{columns}
|
|
\column{0.7\textwidth}
|
|
\begin{itemize}
|
|
\item August 2010, Toulouse, France
|
|
\item Six developers, seven days
|
|
\item Features
|
|
\begin{itemize}
|
|
\item Complete rewrite of the rendering engine, to support
|
|
multiple layouts (index on the same side as the map, at the
|
|
bottom or on the side) and selectable standard paper sizes
|
|
\item Support for multiple stylesheets (style of renderings)
|
|
\item Major rewrite of the web interface, to provide a wizard for
|
|
the map creation
|
|
\end{itemize}
|
|
\item Features not completed, so no delivery in production...
|
|
\end{itemize}
|
|
\column{0.3\textwidth}
|
|
\includegraphics[height=0.5\textheight]{hackfest-2-notes.jpg}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Hackfest \#2 result}
|
|
\begin{center}
|
|
\includegraphics[height=0.8\textheight]{stains.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Hackfest \#2 result}
|
|
\begin{center}
|
|
\includegraphics[height=0.8\textheight]{arabic-index.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Server migration, october 2010}
|
|
Our initial server, having 250 GB of hard disk space, was completely
|
|
filled with the OpenStreetMap database.\\
|
|
|
|
Had to migrate all our services on different machines, causing a
|
|
severe downtime for the service.
|
|
\end{frame}
|
|
|
|
\begin{frame}{Hackfest \#3}
|
|
\begin{columns}
|
|
\column{0.6\textwidth}
|
|
\begin{itemize}
|
|
\item February 2012, San Francisco, USA
|
|
\item Four developers, two days
|
|
\item Things done
|
|
\begin{itemize}
|
|
\item Investigation of a Mapnik rendering bug that was a block for
|
|
releasing in production our new version
|
|
\item Add some monitoring tools on our servers
|
|
\item Polish web interface details
|
|
\end{itemize}
|
|
\item Improvements made in August 2010 were still not in production!
|
|
\end{itemize}
|
|
\column{0.4\textwidth}
|
|
\includegraphics[width=0.9\textwidth]{hackfest-3.jpg}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Hackfest \#4}
|
|
\begin{columns}
|
|
\column{0.6\textwidth}
|
|
\begin{itemize}
|
|
\item March 2012, Rennes, France
|
|
\item Five developers, seven days
|
|
\item Objective: put in production all the new features
|
|
\begin{itemize}
|
|
\item Support for multi-page maps, which allows to render large
|
|
maps on A4 and A5 paper sizes
|
|
\item Integration of several Mapnik stylesheets
|
|
\item Many, many fixes in the rendering engine and the web
|
|
interface
|
|
\end{itemize}
|
|
\item {\bf On April, 19th, a few weeks after the hackfest, we
|
|
managed to put all the improvements in production and make it
|
|
public!}
|
|
\end{itemize}
|
|
\column{0.4\textwidth}
|
|
\includegraphics[width=0.9\textwidth]{hackfest-4.jpg}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Hackfest \#4 results}
|
|
\begin{center}
|
|
\includegraphics[height=0.8\textheight]{chavagne-multi-page-front.png}
|
|
\includegraphics[height=0.8\textheight]{chavagne-multi-page-overview.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Using maposmatic.org (1/11)}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{screenshot1.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Using maposmatic.org (2/11)}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{screenshot2.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Using maposmatic.org (3/11)}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{screenshot3.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Using maposmatic.org (4/11)}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{screenshot4.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Using maposmatic.org (5/11)}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{screenshot5.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Using maposmatic.org (6/11)}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{screenshot6.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Using maposmatic.org (7/11)}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{screenshot7.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Using maposmatic.org (8/11)}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{screenshot8.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Using maposmatic.org (9/11)}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{screenshot9.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Using maposmatic.org (10/11)}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{screenshot10.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Using maposmatic.org (11/11)}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{screenshot11.png}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{OSM Database (1/2)}
|
|
\begin{itemize}
|
|
\item In order to render maps, Mapnik needs an OSM database
|
|
converted in a PostGIS schema
|
|
\item The format of the main OSM database is different, to allow
|
|
flexible tags: the conversion process is non-trivial
|
|
\item {\bf Initial import}
|
|
\begin{itemize}
|
|
\item Planet dumps available in a protobuf-encoded format, at
|
|
\url{http://planet.openstreetmap.org/pbf/}
|
|
\item Converted to the PostGIS schema and pushed into a PostgreSQL
|
|
database by the {\em osm2pgsql} tool,
|
|
\url{http://wiki.openstreetmap.org/wiki/Osm2pgsql}
|
|
\item Takes 8-10 days on a 6x4 cores Xeon X5670 @ 2.93 Ghz, 24 GB
|
|
of RAM, a single hard drive
|
|
\item Initial file 16 GB, resulting database around 250 GB
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{OSM Database (2/2)}
|
|
\begin{itemize}
|
|
\item {\bf Regular updates}
|
|
\begin{itemize}
|
|
\item Minutely updates available. At MapOSMatic, we group them by
|
|
slots of 15 minutes.
|
|
\item Generated using the {\em osmosis} tool, from the
|
|
\url{http://planet.openstreetmap.org/redaction-period/minute-replicate/}
|
|
server
|
|
\item \url{http://wiki.openstreetmap.org/wiki/Osmosis}
|
|
\item Applied to the PostgreSQL database using {\em osm2pgsql}
|
|
\item Very hard to keep updated: time to apply a 15 minutes update
|
|
is often around 10 minutes
|
|
\end{itemize}
|
|
\item Need to buy a SSD drive.
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{OSM Database diagram}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{osm-database.pdf}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{OCitySMap}
|
|
\begin{itemize}
|
|
\item OCitySMap is a Python module that implements the map and
|
|
street index rendering
|
|
\item A command-line client is provided
|
|
\item Uses multiple Python modules:
|
|
\begin{itemize}
|
|
\item {\bf psycopg2} for direct PostgreSQL queries used to build
|
|
the index of streets and amenities
|
|
\item {\bf mapnik} to do the map rendering
|
|
\item {\bf pango} to do the text rendering
|
|
\item {\bf cairo} to layout the map and index
|
|
\item {\bf ogr} for shapes manipulation
|
|
\end{itemize}
|
|
\item Available as a separate project from MapOSMatic
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{OCitySMap architecture}
|
|
\begin{center}
|
|
\includegraphics[height=0.8\textheight]{ocitysmap.pdf}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{OCitySMap example usage}
|
|
Render an administrative boundary, knowing its OSM id:
|
|
\begin{verbatim}
|
|
./render.py -t "Chevreuse" -f pdf -s mapquest_eu \
|
|
-L fr_FR -l multi_page --paper-format A4 \
|
|
--osmid=-943886
|
|
\end{verbatim}
|
|
Render a geographic area, knowing its bounding box:
|
|
\begin{verbatim}
|
|
./render.py -t "Map Title" \
|
|
-b 48.7268,1.9946 48.6801,2.0742
|
|
\end{verbatim}
|
|
\end{frame}
|
|
|
|
\begin{frame}{OCitySMap installation in a nutshell}
|
|
\begin{enumerate}
|
|
\item Install PostgreSQL and PostGIS, create a PostgreSQL user and
|
|
database
|
|
\item Enable PostGIS in the database
|
|
\item Build and install {\em osm2pgsql}
|
|
\item Download and import the OSM data with {\em osm2pgsql}
|
|
\item Install Mapnik
|
|
\item Install Mapnik-OSM, the official OpenStreetMap stylesheet for
|
|
Mapnik. Requires downloading of coast line data and fonts.
|
|
\item Installation and configuration of OCitySMap
|
|
\end{enumerate}
|
|
Fortunately, everything is documented in details in the
|
|
\path{INSTALL} file of the project.
|
|
\end{frame}
|
|
|
|
\begin{frame}{MapOSMatic}
|
|
MapOSMatic is composed of:
|
|
\begin{enumerate}
|
|
\item {\bf A Web interface}, written using the Django
|
|
framework. This
|
|
interface allows user to create new maps, view existing maps, etc.\\
|
|
When a new map is requested, it is put into a rendering queue.
|
|
\item {\bf A daemon}, which processes the jobs in the rendering
|
|
queue one by one. This daemon uses {\em OCitySMap} to do the
|
|
rendering.
|
|
\end{enumerate}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{maposmatic.pdf}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Languages}
|
|
|
|
Both the website and the street index logic requires
|
|
translations. So far, we have translations in:
|
|
\begin{columns}
|
|
\column{0.5\textwidth}
|
|
\begin{itemize}
|
|
\item French
|
|
\item Dutch
|
|
\item German
|
|
\item Spanish
|
|
\item Brazilian Portuguese
|
|
\item Russian
|
|
\end{itemize}
|
|
\column{0.5\textwidth}
|
|
\begin{itemize}
|
|
\item Norvegian Bokmal
|
|
\item Italian
|
|
\item Catalan
|
|
\item Hungarian
|
|
\item Polish
|
|
\item Indonesian
|
|
\item Arabic
|
|
\end{itemize}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Hardware setup}
|
|
\begin{center}
|
|
\includegraphics[width=\textwidth]{hardware-setup.pdf}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Statistics}
|
|
\begin{itemize}
|
|
\item {\bf 50000 maps} render since the service has been launched
|
|
\item {\bf 5000 to 10000} visitors per month
|
|
\item {\bf 280 GB} of OSM database
|
|
\end{itemize}
|
|
\begin{center}
|
|
\includegraphics[width=0.8\textwidth]{maposmatic-stats.png}\\
|
|
Number of daily maps rendered
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Example of usage}
|
|
\begin{center}
|
|
\includegraphics[width=0.7\textwidth]{orange-city.jpg}\\
|
|
City of {\em Orange, France}, has printed folded maps using
|
|
MapOSMatic.
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Future work}
|
|
\begin{itemize}
|
|
\item Allow users to customize the set of amenities and point of
|
|
interests visible in the index
|
|
\item Allow users to customize the rendering style. Maybe by
|
|
exploring the {\em MapCSS} technology.
|
|
\item Add a legend and scale on the map.
|
|
\item Add more translations
|
|
\item Fix more bugs
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Join the project!}
|
|
\begin{itemize}
|
|
\item {\bf Website}: \url{http://www.maposmatic.org}
|
|
\item {\bf Blog}: \url{http://news.maposmatic.org}
|
|
\item {\bf Savannah project}: \url{https://savannah.nongnu.org/projects/maposmatic/}
|
|
\item {\bf Git} repositories
|
|
\begin{itemize}
|
|
\scriptsize
|
|
\item OcitySMap: \url{git://git.savannah.nongnu.org/maposmatic/ocitysmap.git}
|
|
\item MapOSMatic: \url{git://git.savannah.nongnu.org/maposmatic.git}
|
|
\end{itemize}
|
|
\item {\bf Mailing list}: \url{https://lists.nongnu.org/mailman/listinfo/maposmatic-dev}
|
|
\item {\bf IRC channel}: {\tt \#maposmatic} on {\em Freenode}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Conclusion}
|
|
\begin{itemize}
|
|
\item The OSM database and all the tools around it allow a
|
|
relatively {\bf easy access to geographic data}
|
|
\item {\bf Very impressive amount of reuse} in this project, thanks to the
|
|
numerous Python modules available.
|
|
\item MapOSMatic is, we think, a {\bf good illustration of what is
|
|
possible thanks to freely available data}
|
|
\item MapOSMatic is free software, {\bf join us and contribute}!
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}
|
|
\begin{center}
|
|
\Huge
|
|
Questions ?\\
|
|
\Large
|
|
\vspace{2cm}
|
|
\path{http://www.maposmatic.org}\\
|
|
\vspace{2cm}
|
|
\normalsize
|
|
\path{thomas.petazzoni@enix.org}\\
|
|
\path{contact@maposmatic.org}\\
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\end{document}
|