1. 程式人生 > >Learn to become a developer

Learn to become a developer

Recently my company is developing smart parking application and is very important path is map. Google map is great system with a lots of function but when use for particular application, there are quite a few limitations as

  • Ability to customize low
  • Slow update if you want to add new data
  • Access restriction and charge requests
  • Not self-control

So many companies choose to build their own system with high customization and fully independent. I began to learn how to build map system and search for answer for a few questions

  •  What is OpenStressMap ?
  • How to load a small area map data ?
  • What database management for saving map data ?
  • How to import map ?
  • How to render map ?
  • How to preview map on web platform ?

Find out related issues, i obtained the following result

Openstressmap (OSM) : the map database open worldwide and you can download and use it. PostgresSQL : database management be used to store map data for OpenStressMap . PostGIS : extend of PostgresSQL to support query and search with geographic data. Osm2pgsql : tool support import data to PostGIS-PostgresSQL from file .osm Mapnik : open source C/C++ support geographic data modeling and render tiles Apache HTTP : webserver open source to serve request map tiles GEOS : C/C++ library support process geographic data Carto : CSS map-styling

Ok Let’s get started on creating on your own map system

Step 1 : Check python current version and upgrade to 2.7.6 version

-) Download python source, compile and build

$ wget –no-check-certificate https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz $ tar xf Python-2.7.6.tar.xz $ cd Python-2.7.6 $ ./configure –prefix=/usr/local $ make && make altinstall

-) Backup current pythond version

$ mv /usr/bin/python /usr/bin/python2.6.6

-) Apply the python new version to default system

$ ln -sf /usr/local/bin/python2.7 /usr/bin/python $ head -1 /usr/bin/yum $ sed -i -e ‘s|python|python2.6.6|’ /usr/bin/yum $ head -1 /usr/bin/yum

Step 2 : Install development tools

$ yum update $ yum groupinstall ‘Development Tools’ $ yum install libpng libtiff libjpeg freetype gdal cairo pycairo sqlite geos boost curl libcurl libicu bzip2-devel libpng-devel libtiff-devel zlib-devel libjpeg-devel libxml2-devel python-setuptools proj-devel proj proj-epsg proj-nad freetype-devel libicu-devel gdal-devel sqlite-devel libcurl-devel cairo-devel pycairo-devel geos-devel protobuf-devel protobuf-c-devel lua-devel cmake proj boost-thread proj-devel autoconf automake libtool pkgconfig ragel gtk-doc glib2 glib2-devel libpng libpng-devel libwebp libtool-ltdl-devel python-devel harfbuzz harfbuzz-devel harfbuzz-icu boost-devel cabextract xorg-x11-font-utils fontconfig perl-DBD-Pg mesa-libGLU-devel postgresql-devel

Step 3 : Upgrade GCC version

$ wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo $ yum install devtoolset-2-gcc devtoolset-2-binutils $ yum install devtoolset-2-gcc-c++ devtoolset-2-gcc-gfortran $ /opt/rh/devtoolset-2/root/usr/bin/gcc –version $ scl enable devtoolset-2 bash $ source /opt/rh/devtoolset-2/enable

Step 4 : Install PostgresSQL

Step 5 : Build Boot library

Step 6 : Build and install Mapnik

$ ./configure –prefix=/opt/mapnik $ make $ make install $ sudo ldconfig

Step 7 : Build GEOS

Step 8 : Build Osm2pgsql

$ sudo yum install cmake make gcc-c++ boost-devel expat-devel zlib-devel \ bzip2-devel postgresql-devel proj-devel proj-epsg lua-devel $ git clone git://github.com/openstreetmap/osm2pgsql.git $ cd osm2pgsql $ mkdir build && cd build && cmake .. -DCMAKE_PREFIX_PATH=/usr/pgsql-9.4/ $ make && make install

Step 9 : Install Apache HTTP

$ yum install httpd $ yum install httpd-devel

Step 10 : Install tile mod

$ git clone git://github.com/openstreetmap/mod_tile.git $ cd mod_tile $ ./autogen.sh $ ./configure -with-apxs=/usr/sbin/apxs

$ cp -rf mapnik/include/mapnik/* /usr/include/mapnik $ cp mapnik/include/mapnik/geometry/box2d.hpp /usr/include/mapnik $ make $ sudo make install $ sudo make install-mod_tile $ sudo ldconfig

Step 11 : Install Casto use node package manage

$ npm install -g carto

Step 12 : Config render tile mod

$ vi /usr/local/etc/renderd.conf

append the below content

[renderd] ;socketname=/var/run/renderd/renderd.sock num_threads=4 tile_dir=/var/lib/mod_tile stats_file=/var/run/renderd/renderd.stats

[mapnik] plugins_dir=/usr/local/lib/mapnik/input font_dir=/usr/local/lib/mapnik/fonts font_dir_recurse=1

[default] URI=/osm_tiles/ TILEDIR=/var/lib/mod_tile XML=/root/openstreetmap-carto/mapnik.xml HOST=map.azstack.com TILESIZE=256

Step 13 : Config mod tile

$ vi /etc/httpd/conf.d/mod_tile.conf

LoadModule tile_module /etc/httpd/modules/mod_tile.so

ServerName map.azstack.com ServerAlias map.azstack.com DocumentRoot /var/www/html

ModTileTileDir /var/lib/mod_tile LoadTileConfigFile /usr/local/etc/renderd.conf ModTileEnableStats On ModTileBulkMode Off ModTileRequestTimeout 3 ModTileMissingRequestTimeout 10 ModTileMaxLoadOld 16 ModTileMaxLoadMissing 50 ModTileVeryOldThreshold 31536000000000 ModTileRenderdSocketName /var/run/renderd/renderd.sock ModTileCacheDurationMax 604800 ModTileCacheDurationDirty 900 ModTileCacheDurationMinimum 10800 ModTileCacheDurationMediumZoom 13 86400 ModTileCacheDurationLowZoom 9 518400 ModTileCacheLastModifiedFactor 0.20 ModTileEnableTileThrottling Off ModTileEnableTileThrottlingXForward 0 ModTileThrottlingTiles 10000 1 ModTileThrottlingRenders 128 0.2 LogLevel debug

Step 14 : Setup PostGiS

$ su -i postgres $ createuser root $ psql -d template1 -c “ALTER USER root WITH PASSWORD ‘password’;” $ psql postgres $ CREATE DATABASE gis; $ psql gis $ CREATE EXTENSION postgis; $ CREATE EXTENSION postgis_topology;

Step 15 : Import data .osm (download from OpenStressMap)

$ osm2pgsql –slim -d gis_az -C 1600 –number-process 1 -S /usr/local/share/osm2pgsql/default.style map-hieu.osm

Step 16 : Install Casto

$ git clone git://github.com/gravitystorm/openstreetmap-carto.git $ cd openstreetmap-carto $ git checkout `git rev-list -n 1 –before=”2016-12-04 00:00″ master`

# Compile and download shape files $ carto project.mml > mapnik.xml $ scripts/get-shapefiles.py

Step 17 : Start Apache HTTP with render mode

$ systemctl start httpd $ mkdir /var/run/renderd $ mkdir /var/lib/mod_tile $ renderd -f -c /usr/local/etc/renderd.conf & $ render_list -m default -a -z 0 -Z 17 -s /var/run/renderd/renderd.sock