OCitySMap installation instructions =================================== These instructions refer to software dependencies by using Ubuntu Lucid (14.04) package names. Minor adaptations might be needed for other distributions or for the precise Debian or Ubuntu release you are using. They have been tested on several x86_64 hosts. 1. Installation of PostgreSQL and PostGIS sudo aptitude install postgresql postgresql-contrib 2. Creation of a new PostgreSQL user sudo -u postgres createuser -P -S -D -R maposmatic Enter the password twice (we use later 'ereiamjh' as example password). 3. Creation of the database sudo -u postgres createdb -E UTF8 -O maposmatic maposmatic (see http://wiki.openstreetmap.org/wiki/Mapnik/PostGIS) You can now try to connect to the database, using: psql -h localhost -U maposmatic maposmatic If it doesn't work, fix your configuration. 4. Enable PostGIS on the database PostGIS is in fact a set of functions and data types for PostgreSQL, and every PostgreSQL database needing these features must be initialized as follows. We do this initialization of the database with superuser privileges, and then later fix the table owners so that our normal user can use the database. a. Enable the plpgsql language on the maposmatic database sudo -u postgres createlang plpgsql maposmatic b. Download postgis 2.1 sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable sudo aptitude update sudo aptitude dist-upgrade # Or safe-upgrade if you prefer sudo aptitude install postgresql-9.3-postgis-2.1 If nothing happens, you may have to check the output of "apt-get policy postgresql-9.3-postgis-2.1" and adjust your apt preferences. A sensible default preferences configuration file for this repository could be: Package: * Pin: release o=LP-PPA-ubuntugis-ubuntugis-unstable Pin-Priority: 700 c. Install PostGIS support in Postgres sudo -u postgres \ psql \ -f /usr/share/postgresql/9.3/contrib/postgis-2.1/postgis.sql \ -d maposmatic Provide comments (Optional): sudo -u postgres \ psql \ -f /usr/share/postgresql/9.3/contrib/postgis-2.1/postgis_comments.sql \ -d maposmatic d. Add the list of spatial referential systems sudo -u postgres \ psql \ -f /usr/share/postgresql/9.3/contrib/postgis-2.1/spatial_ref_sys.sql \ -d maposmatic e. Change the owner of the new tables to maposmatic echo "ALTER TABLE geometry_columns OWNER TO maposmatic; ALTER TABLE spatial_ref_sys OWNER TO maposmatic;" | \ sudo -u postgres psql -d maposmatic e. Add hstore extension support echo "CREATE EXTENSION hstore;" | sudo -u postgres psql -d maposmatic 5. Installation of osm2pgsql osm2pgsql is the tool that takes OSM data as input, and creates a PostGIS database from it. At the time of the writing of this document, the osm2pgsql packaged in Debian/Ubuntu is not recent enough, so we grab a fresh version from SVN. a. If needed, install SVN sudo aptitude install subversion b. Grab osm2pgsql code svn co http://svn.openstreetmap.org/applications/utils/export/osm2pgsql/ # Tested revisions: r27862 c. Install the build dependencies sudo apt-get build-dep osm2pgsql d. Compile cd osm2pgsql ./autogen.sh ./configure # with --prefix=.... as needed make e. Install Provided you supplied the correct --prefix=... option, just enter: make install 6. Download the OSM data We give the example for Luxembourg. wget http://download.geofabrik.de/osm/europe/luxembourg.osm.bz2 7. Import the OSM data osm2pgsql -s -c -d maposmatic -m -U maposmatic -W \ -H localhost -k luxembourg.osm.bz2 If you have a lot of RAM, remove '-s', it will make the import faster. If you miss RAM (and have a lot of time available) you can also use the '-C' option together with '-s'. (See osm2pgsql -h). If you want to add other OSM DB files, replace the '-c' option with a '-a' option in the subsequent files you are adding: if you keep the '-c' option, it will erase any previous GIS data you may have. For example: osm2pgsql -s -a -d maposmatic -m -U maposmatic -W \ -H localhost -k ile-de-france.osm.bz2 8. Install Mapnik We need Mapnik 2.1.0, which is not yet available in stable Debian/Ubuntu, so we need to compile it from source. a. Install the dependencies # Base dependencies (0.7.0 by default on lucid, a good start) sudo apt-get build-dep python-mapnik # Upgrade to libboost >= 1.41 sudo add-apt-repository ppa:thomasjj/backports sudo aptitude update sudo aptitude dist-upgrade # Or safe-upgrade if you prefer sudo aptitude purge libboost1.40-dev sudo aptitude install libboost1.46-dev libboost-date-time1.46-dev \ libboost-filesystem1.46-dev libboost-iostreams1.46-dev \ libboost-program-options1.46-dev libboost-python1.46-dev \ libboost-regex1.46-dev libboost-serialization1.46-dev \ libboost-system1.46-dev libboost-thread1.46-dev b. Download the latest Mapnik from its Git repository git clone git://github.com/mapnik/mapnik.git cd mapnik c. Compile and install Mapnik python scons/scons.py configure INPUT_PLUGINS=all \ OPTIMIZATION=3 SYSTEM_FONTS=/usr/share/fonts/ (You can also path PREFIX=... and PYTHON_PREFIX=.... if you don't want a system-wide installation) python scons/scons.py python scons/scons.py install d. If building Mapnik failed Cloning the repository (step 8b) implicitly runs 'git checkout HEAD', giving you the latest version. Should you run into trouble either installing or running this latest version, you can use the version we know to work: git checkout c88fcc8f # Note: replace this with commit hash of version on dev.m.o python scons/scons.py -c # Clean up failed build Repeat step 8c. e. Check the installation Run a Python interpreter, and run "import mapnik". If it doesn't work and you didn't do a system-wide installation of Mapnik, don't forget to set the PYTHONPATH and LD_LIBRARY_PATH environment variables. 10. Install Mapnik-OSM Mapnik-OSM is the set of files that tell Mapnik how to render OpenStreetMap maps. a. Download svn co \ http://svn.openstreetmap.org/applications/rendering/mapnik \ mapnik2-osm # Tested revision: r28170 b. Installation of static data In addition to the OpenStreetMap data, some other static data are used to render the maps (world boundaries, etc.) cd mapnik2-osm sh ./get-coastlines.sh c. Enabling unifont In order to get correct rendering for Korean, Chinese or Japanese character, the unifont font must be used. In order do enable it: sudo aptitude install ttf-unifont (on debian, mapnik2 uses only ttf-dejavu, correct fontscollectionpath in /usr/lib/python2.7/dist-packages/mapnik2/paths.py, replace '/usr/share/fonts/truetype/ttf-dejavu' by '/usr/share/fonts'. Bug report #665798). d. Configuration python ./generate_xml.py --dbname maposmatic --host 'localhost' \ --user maposmatic --port 5432 \ --password 'ereiamjh' 11. Installation of OCitySMap a. Install Git if needed sudo aptitude install git-core git-email b. Grab the sources git clone git://git.savannah.nongnu.org/maposmatic/ocitysmap.git c. Install dependencies sudo aptitude install python-psycopg2 python-gdal \ python-gtk2 python-cairo \ python-shapely Note that python-gtk2 is not needed for any graphical interface, but because it contains Pango and PangoCairo that we use to render text on the map. d. Configuration file Create a ~/.ocitysmap.conf configuration file, modeled after the provided ocitysmap.conf.dist file. 12. Run OCitySMap ./render.py -t "Ceci n'est pas Paris" --osmid=-411354 # Contern, LU ./render.py -t "Ceci n'est pas Paris" --osmid=-943886 # Chevreuse, FR Appendix A: Installation of maposmatic-printable stylesheet ------------------------------------------------------------ This step builds on step 10 "Install Mapnik-OSM" and step 11 "Installation of OCitySMap". a. Copy stylesheet/maposmatic-printable/symbols/* (i.e. all files in symbols/ directory) into mapnik2-osm/symbols/ directory. b. Add absolute path to file stylesheet/maposmatic-printable/osm.xml into ~/.ocitysmap.conf. c. Configure the stylesheet with database parameters and relevant directories: cd stylesheet/maposmatic-printable/ python ./generate_xml.py --dbname maposmatic --host 'localhost' \ --user maposmatic --port 5432 \ --password 'ereiamjh' \ --world_boundaries mapnik2-osm/world_boundaries \ --symbols mapnik2-osm/symbols Appendix B: installation of the MapQuest stylesheet ------------------------------------------------- The above instructions, at step 10, describe how to set up ocitysmap with the default Mapnik stylesheet for OpenStreetMap. It is possible to install other stylesheets, such as the stylesheets made available by MapQuest. The instructions below detail how to install those additional stylesheets, making the assumption that ocitysmap is properly configured and running with the default OSM stylesheet. First, grab the MapQuest stylesheets: git clone git://github.com/MapQuest/MapQuest-Mapnik-Style.git (tested versions: 9d6c5503194c58fc1f9f760b4e5af8a1602dfb30 6f7ea2723c07a1db2d17c2336dd3a0b3dd2d6fe9) Go into the MapQuest-Mapnik-Style directory, in which we will do all the configuration. With above tested version, there is a bug in the stylesheet. That should be fixed using a patch provided in the support/ directory. patch -p1 < /path/to/ocitysmap/support/mapquest-stylesheet-eu-fix.patch patch -p1 < /path/to/ocitysmap/support/mapquest-stylesheet-uk-fix.patch First, those stylesheets require the same "world boundaries" information as the original OSM stylesheet, so we are going to share these informations by creating a symbolic link: ln -s /path/to/original/osm/stylesheet/world_boundaries world_boundaries In addition to those world boundaries, the MapQuest stylesheets need a few other files. Download the corresponding tarball: wget http://developer.mapquest.com/content/static/geotiffs/mercator_tiffs.tar Unpack this archive, and put the four mq_world_mercator_*.tiff files directory into the world_boundaries/ directory (this directory is shared with the original OSM stylesheet, but this is not a problem as the mq_world_mercator_*.tiff files are not used by the original OSM stylesheet). Now, to the configuration of the stylesheet itself (use the .inc.template files): vi mapquest_inc/fontset-settings.xml.inc.template Not much to change here, the default value is fine. If you want to use the same font for the original OSM stylesheet and the MapQuest one, replace "Arial" by "DejaVu". Create the .inc files from the templates: python /path/to/mapnik2-osm/generate_xml.py --inc mapquest_inc \ --symbols mapquest_symbols \ --dbname maposmatic \ --host 'localhost' \ --user maposmatic --port 5432 \ --password 'ereiamjh' The final step is to integrate this new stylesheet in ocitysmap. To do so, edit your ~/.ocitysmap.conf file, and add a new stylesheet section, like: [mapquest_eu] name: MapQuestEu description: MapQuest Europe stylesheet path: /path/to/MapQuest-Mapnik-Style/mapquest-eu.xml Don't forget to add "mapquest_eu" to the available_stylesheets variable, which lists all available stylesheets. You can then use it in render.py with the -s option: ./render.py -s MapQuestEu ... Note that in addition to the MapQuest Europe stylesheet (mapquest-eu.xml), the Git repository also contains the MapQuest US and MapQuest UK stylesheets (mapquest-us.xml and mapquest-uk.xml), that you can similarly add to your ocitysmap.conf file. Appendix C: installation of the Stamen Toner stylesheet ------------------------------------------------------- Toner is a black and white stylesheet initialy provided by Stamen (http://maps.stamen.com/#toner). The instructions below detail how to install this stylesheets, making the assumption that ocitysmap is properly configured and running with the default OSM stylesheet. 1. Cascadenik installation Cascadenik implements cascading stylesheets for Mapnik. Cascadenik is a requisite for Toner stylesheet. # install dependancies sudo aptitude install python-cssutils python-imaging # clone the repository git clone https://github.com/mapnik/Cascadenik.git cd Cascadenik/ git checkout mapnik2 # switch to mapnik2 branch When tested (rev. 7dc2587) Cascadenik mapnik2 branch was not fully functionnal (at least with mapnik 2.1). If no correction has been made since a patch is provided to fix that: git checkout 7dc2587 git am --signoff < /path/to/ocitysmap/stylesheet/toner/0001-Fixes-output.py-to-make-it-compatible-with-mapnik-2..patch Then you can install it: python setup.py install 2. Coastline table Toner stylesheet reads the coastline datas in the postgis database. We need to import it in our database. cd path/to/mapnik-osm/world_boundaries shp2pgsql -s 900913 -I processed_p.shp coastline \ | psql -U maposmatic -d maposmatic -h localhost 3. Natural Earth Data database Toner stylesheet uses many data from the natural earth database (http://www.naturalearthdata.com/). We are going to import all theses datas inside another postgis database. mkdir naturalearth cd naturalearth wget http://kelso.it/x/nevector # download all Natural Earth Data shape # files cf. http://www.naturalearthdata.com/downloads/ unzip nevector sudo su postgres # create db createdb -E UTF-8 -O maposmatic naturalearth # add geographic extensions psql -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql \ -d naturalearth psql -f /usr/share/postgresql/9.1/contrib/postgis_comments.sql \ -d naturalearth psql -f /usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql \ -d naturalearth # fix permissions echo "ALTER TABLE geometry_columns OWNER TO maposmatic; ALTER TABLE spatial_ref_sys OWNER TO maposmatic;" | psql -d naturalearth # import data from shapefiles for FILE in `find . -name *.shp`; do \ BASE=`basename $FILE .shp`; \ shp2pgsql -W LATIN1 -s 900913 -I $FILE $BASE \ | psql naturalearth; done # fix permissions for FILE in `find . -name *.shp`; do BASE=`basename $FILE .shp`; \ echo "ALTER TABLE "$BASE" OWNER TO maposmatic;" \ | psql -d naturalearth ; done 4. Install Toner git clone https://github.com/Citytracking/toner.git The installation has been tested with the commit 58369be git checkout 58369be 4.1 Install toner specific datas Toner stylesheet is provided with some labels and some roads. We are importing them in the naturalearth database. cd /path/to/toner/ # fixes manualy set database parameters with ours sed -i 's/psql -d toner -U osm/psql -h localhost -d naturalearth -U maposmatic/' \ import_toner_v2_shps.sh # if you don't want to type too many times the database pass vim ~/.pgpass localhost::naturalearth:maposmatic:maposmatic_password chmod 0600 ~/.pgpass # import sh import_toner_v2_shps.sh 4.2 Specific planet views A specific view is used for motorway in the OSM database. cd /path/to/toner/osm psql -h localhost -U maposmatic maposmatic < motorways.pgsql Other views are necessary. cd /path/to/toner/mapnik/ psql -h localhost -U maposmatic maposmatic < views.pgsql 4.3 Stylesheet generation cd /path/to/toner/mapnik/ cp /path/to/ocitysmap/stylesheet/toner/style-toner-ocitysmap.mml . cp /path/to/ocitysmap/stylesheet/toner/labels-ocitysmap.mss . # configure database access: change host, name, user and password # for each database listed at top of the file vim style-toner-ocitysmap.mml # generate the stylesheet /path/to/cascadenik/cascadenik-compile.py style-toner-ocitysmap.mml \ /tmp/style-toner-ocitysmap.xml mv /tmp/style-toner-ocitysmap.xml /path/to/ocitysmap/stylesheet/toner/ 5. ocitysmap configuration Edit properly the configuration file. vim /home/$USER/.ocitysmap.conf [Toner] name: Toner description: Stamen Toner stylesheet path: /path/to/ocitysmap/stylesheet/toner/style-toner-ocitysmap.xml Don't forget to add "Toner" to the available_stylesheets variable, which lists all available stylesheets.