OSM kaardiserver Mandriva 2010 Spring baasil

Allikas: Pingviini viki


Eesmärk

Selle lehe eesmärk on juhendada, kuidas paigaldada oma arvutisse OSM -i kaardiserver. Lõpptulemusena on sul olemas postgre andmebaas osm -i andmetega, seadistatud mapniku kaardipiltide generaator, apache weebi server kos mod_tile mooduliga, mis reaalajas genereerib kaardi pilte ja näidis leht kaardi vaatamiseks.

Mis asi on OSM

OpenStreetMap (ehk OSM) on justkui maakaartide Vikipeedia. Inimesed nagu Sina koguvad asukohainfot GPS-seadmetega või vabalt kasutatavatelt aerofotodelt ja kaartidelt, laevad selle üles ja lisavad sinna nimed ning muud tunnused (sildid). Tulemusena saadav vabalt kasutatav maailma kaart asub aadressil www.openstreetmap.org.

OpenStreetMapi eesmärk on luua ja jagada tasuta ja vaba kasutusega geograafilist infot, eelkõige teedekaarte. Projekt algatati, sest enamus kaartidest ja kaardiandmetest, mida peetakse "tasuta" andmeteks, on tegelikult õiguslike või tehniliste piirangutega, mis takistab nende kasutamist loomingulisteks, ärilisteks ja muudeks ettearvamatuteks vajadusteks.

Eestis on kohalikuks OSM -i arendamiseks loodud ka MTÜ Avatud Maakaardi Selts. MTÜ Avatud Maakaardi Selts on organisatsioon, mille tegevuse eesmärgiks on vaba geoinfo kogumine, korrastamine, talletamine ning levitamine. Avatud Maakaardi Selts teeb seda nii oma liikmete kui teiste asjast huvitatud isikute ja organisatsioonide ühise välitöö kui avalikest andmeallikaist pärit andmete koondamise kaudu. Kõik projekti raames kogutud andmed talletatakse globaalse projekti Openstreetmap raames ning on kõikidele soovijatele kättesaadavad vaba kasutust võimaldava litsentsi (Creative Commons Attribution Share-Alike v 2.0) alusel.

Avatud Maakaardi seltsi kohta lähemalt infot aadressil Avatud Maakaardi Selts.

Riistvaralised nõuded

Riistvara serveri jaoks sõltub sellest, kui suurt osa kaardist tahetakse serveerima hakata. Ainult Eesti kaardi näitamiseks piisab 4G rammi ja 200G ketta pinda ja üks kõik milline tänapäevane protsessor.

Euroopa kaardi näitamiseks on 4G mälu kindel miinimum ja väga tugev soovitus on kasutada 8G ketta pinda peaks olema 300-400G ja protsessoril vähemalt 4 tuuma.

Maailma kaardi puhul 16G miinimum 24G soovituslik

Kui on kavas kogu planeedi või ka euroopa kaarti hakata näitama siis on soovitav varakult hakata neid andmeid alla laadima, kuna maailma fail (seisuga 08-Jul-2010 00:45) on 10G, Euroopa (seisuga 13 juuli 2010) 3.5G. Hetkel veel Eesti faili pärast pole vaja muretseda, see on kõigest 32M suur (seisuga 13 juuli 2010). Kõik on tihendatud bz2 -ga.


Mandriva paigaldus

Soovitav paigaldada mandriva Free versioon mandriva-linux-one-2010-spring-KDE4-europe2-cdrom-i586.iso

Täpsemat kirjeldust Mandriva paigaldamise kohta saab siit Installing_Mandriva_Linux

Postgre piagaldus ja seadistamine

Kui puhas install on tehtud tuleb paigaldada postgresql andmebaas ja postgis -i laiendus.

urpmi postgresql8.4 postgresql8.4-contrib postgis subversion task-c++-devel lib64xml2-devel lib64geos-devel postgresql8.4-devel lib64bzip2-devel lib64proj-devel lib64boost-devel 
lib64png-devel lib64jpeg-devel lib64tiff-devel lib64curl-devel cairo-devel lib64cairomm1.0-devel pycairo-devel lib64ltdl-devel perl-IPC-ShareLite perl-JSON perl-GD perl-LWP-Online java-1.6.0-sun

Peale postgre paigaldamist tuleks see ka käivitada, mille jooksul luuakse default andmebaasid ja configuratsiooni fail. Mandriva 2010.1 postgre install miskipärast teeb default template andmebaasid ASCII vormingus, mille tulemusena ei saa nende pealt luua UTF8 vormingus baase.

[postgres@xxx ~]$ psql 
psql (8.4.4)
Type "help" for help.
postgres=# \l
                             List of databases
  Name    |  Owner   | Encoding  | Collation | Ctype |   Access privileges   
-----------+----------+-----------+-----------+-------+-----------------------
postgres  | postgres | SQL_ASCII | C         | C     | 
template0 | postgres | SQL_ASCII | C         | C     | =c/postgres
                                                     : postgres=CTc/postgres
template1 | postgres | SQL_ASCII | C         | C     | =c/postgres
                                                     : postgres=CTc/postgres
(3 rows)
postgres=#

Et seda probleemi parandada, tuleb olemasolevad template0 ja template1 baasi ära kustutada

[postgres@andres ~]$ rm -rf /var/lib/pgsql/data

... ja uued genereerida UTF8 vormingus

[postgres@andres ~]$ initdb -E=UTF8
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
...
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.
Success. You can now start the database server using:
   postgres -D /var/lib/pgsql/data
or
   pg_ctl -D /var/lib/pgsql/data -l logfile start
[postgres@andres ~]$psql 
psql (8.4.4)
Type "help" for help.
postgres=# \l
                             List of databases
  Name    |  Owner   | Encoding | Collation | Ctype |   Access privileges   
-----------+----------+----------+-----------+-------+-----------------------
postgres  | postgres | UTF8     | C         | C     | 
template0 | postgres | UTF8     | C         | C     | =c/postgres
                                                    : postgres=CTc/postgres
template1 | postgres | UTF8     | C         | C     | =c/postgres
                                                    : postgres=CTc/postgres
(3 rows)
postgres=#

Kui postgres on paigaldatud siis tuleks natukene postgre ja kerneli näitajaid muuta, et andmebaas paremini töötaks.

Muuda /var/lib/pgsql/data/postgresql.conf faili

shared_buffers = 256MB
checkpoint_segments = 20
maintenance_work_mem = 256MB
autovacuum = off

Muuda /etc/sysctl.conf ja lisa faili lõppu rida

kernel.shmmax = 536870912

Nüüd tuleks postgre -le restart teha

/etc/init.d/postgresql restart

ja kerneli parameetrid uuesti sisse lugeda

sysctl -p

Järgmiseks loome baasi, kasutaja ja plpgsql keele

  • createuser mapnik
  • createdb -E UTF8 -O mapnik gis
  • createlang plpgsql gis
[root@xxx]# su - postgres        
[postgres@xxx ~]$ createuser mapnik
Shall the new role be a superuser? (y/n) y
[postgres@xxx ~]$ createdb -E UTF8 -O mapnik gis
[postgres@xxx ~]$ createlang plpgsql gis
[postgres@xxx ~]$

Seadistame ära postgis -i. Lisame postgre -le postgisi laiendused:

  • psql -d gis -f /usr/share/postgresql/contrib/postgis-1.5/postgis.sql
[postgres@andres ~]$ psql -d gis -f /usr/share/postgresql/contrib/postgis-1.5/postgis.sql
SET
BEGIN
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE TYPE
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
...
DROP FUNCTION
DROP FUNCTION
DROP FUNCTION
[postgres@andres ~]$

Anname teatud tabelitele kasutaja mapnik õigused:

  • ALTER TABLE geometry_columns OWNER TO mapnik;
  • ALTER TABLE spatial_ref_sys OWNER TO mapnik;
[postgres@andres ~]$ psql -d gis
psql (8.4.4)
Type "help" for help.
gis=# ALTER TABLE geometry_columns OWNER TO mapnik;
ALTER TABLE
gis=# ALTER TABLE spatial_ref_sys OWNER TO mapnik;
ALTER TABLE
gis=# \q
[postgres@andres ~]$


osm2pgsql

Kui andmebaas on paigaldatud ja seadistatud tuleb andmed baasi importida. Selleks tuleb kasutada programmi nimega osm2pgsql.

[andres@xxx ~]$ svn co http://svn.openstreetmap.org/applications/utils/export/osm2pgsql/
A    osm2pgsql/Makefile.in
A    osm2pgsql/debian
A    osm2pgsql/debian/control
...
A    osm2pgsql/README.txt
A    osm2pgsql/pgsql.h
A    osm2pgsql/output-gazetteer.h
Checked out revision 22342.
[andres@xxx ~]$

Kompileerime osm2pgsql -i

  • cd osm2pgsql
  • ./autogen.sh
  • ./configure
  • make
  • make install
[andres@xxx ] cd osm2pgsql/
[andres@xxx osm2pgsql]$ ./autogen.sh 
[andres@xxx osm2pgsql]$ ./configure 
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
[andres@xxx osm2pgsql]$ make
gcc  -g -O2 -Wall -Wextra -I/usr/include/libxml2 -I/usr/include -I/usr/include -DVERSION=\"0.69-22342\" -DHAVE_PTHREAD - DOSM2PGSQL_DATADIR=\"/usr/local/share/osm2pgsql\"   -c -o expire-tiles.o expire-tiles.c
...
gcc  -g -O2 -Wall -Wextra -I/usr/include/libxml2 -I/usr/include -I/usr/include -DVERSION=\"0.69-22342\" -DHAVE_PTHREAD - DOSM2PGSQL_DATADIR=\"/usr/local/share/osm2pgsql\"   -c -o UTF8sanitizer.o UTF8sanitizer.c
g++    -c -o build_geometry.o build_geometry.cpp
gcc  -o osm2pgsql expire-tiles.o input.o keyvals.o middle-pgsql.o middle-ram.o osm2pgsql.o output-gazetteer.o output-null.o output-pgsql.o pgsql.o rb.o reprojection.o sprompt.o text-tree.o UTF8sanitizer.o build_geometry.o -g -O2 -Wall -Wextra - I/usr/include/libxml2 -I/usr/include -I/usr/include -DVERSION=\"0.69-22342\" -DHAVE_PTHREAD - DOSM2PGSQL_DATADIR=\"/usr/local/share/osm2pgsql\" -lxml2 -lz -lm  -L/usr/lib64 -lgeos -L/usr/lib64 -lpq -lbz2 -lz -g -lproj -lstdc++ -lpthread
[andres@xxx osm2pgsql]$ su
[root@xxx osm2pgsql]# make install
mkdir -p /usr/local/bin
install -m 0755 osm2pgsql /usr/local/bin
mkdir -p /usr/local/share/osm2pgsql
install -m 0644 default.style /usr/local/share/osm2pgsql
[root@andres osm2pgsql]#

Selleks, et saaks osm -i andmeid postgre baasi importida tuleb baasi lisada porjektsioonide tugi. Selle toe saab lisada .sql failiga mis tuli kaasa osm2pgsql programmiga: 900913.sql

Kõigepealt kopeerime faili postgre kodukataloogi ja anname talle õigusi juurde, et postgres kasutajal saaks seda baasi importida

  • [root@xxx osm2pgsql]# cp 900913.sql ~postgres/
  • [root@xxx osm2pgsql]# chmod 777 /var/lib/pgsql/900913.sql

Impordime projektsiooni faili

  • psql -f 900913.sql -d gis
[root@xxx osm2pgsql]# su - postgres
[postgres@xxx ~]$ psql -f 900913.sql -d gis
INSERT 0 1
[postgres@xxx ~]$

Selleks ajaks peaks olema kohal andme fail. See tuleb kopeerida postgres kodukataloogi ja anda talle kasutaja postgres õigused või garanteerida, et postgres kasutajal on õigus seda faili

Praeguse näite puhul imporditakse euroopa fail, mis paikneb eraldi kettal, mis peaks andma kiirust impordile juurde.

  • [root@xxx osm2pgsql]# chmod 777 /media/disk/europe.osm.

Nüüd hakkame andmeid baasi importima. Selleks võiks igaks juhuks rohkem aega varuda, kui ei ole tegu eesti andmete impordiga. Halvemal juhul on euroopa andmete import võtnud 4G mälu juures 5 ööpäeva tavalise desktop masina puhul.

  • osm2pgsql --slim -d gis -S /usr/local/share/osm2pgsql/default.style -C4000 /media/disk/europe.osm.bz2
[postgres@xxx ~]$ osm2pgsql --slim -d gis -S /usr/local/share/osm2pgsql/default.style -C4000 /media/disk/europe.osm.bz2 
osm2pgsql SVN version 0.69-22342
Using projection SRS 900913 (Spherical Mercator)
Setting up table: planet_osm_point
NOTICE:  table "planet_osm_point" does not exist, skipping
...
Reading in file: /media/disk/europe.osm.bz2
Processing: Node(870k) Way(0k) Relation(0k)
...
Läheb kaua aega
...
[postgres@xxx ~]


Mapniku paigaldus

Mapnik on vabavaraline vahend kaardi(stamis) rakenduste loomiseks. Mapnik on kirjutatud C++ -is ning tal on ka Pythoni bindings. Mapnikut võib vabalt kasutada nii töölaua kui ka weebi rakenduste arendamiseks. Mapniku peamine eesmärk on luua ilusaid kaarte.

Kuigi Mandriva 2010.1 -l on olemas mapniku paketid tasub seda hoopis lähtekoodist ise ehitada.

Laeme mapniku svn -ist

Artikli kirjutamise ajal oli viimane mapniku versioon 0.7.1

[anz@localhost ~]$ svn co http://svn.mapnik.org/tags/release-0.7.1 mapnik
A    mapnik/plugins
A    mapnik/plugins/input
A    mapnik/plugins/input/raster
A    mapnik/plugins/input/raster/raster_datasource.hpp
A    mapnik/plugins/input/raster/raster_info.hpp
...
A    mapnik/INSTALL
A    mapnik/SConstruct
A    mapnik/COPYING
U   mapnik
Checked out revision 2190.
[anz@localhost ~]$

Konfigureerime ...

  • python scons/scons.py configure
[root@localhost mapnik]# python scons/scons.py configure
scons: Reading SConscript files ...
Welcome to Mapnik...                                                                                               
Configuring build environment...
SCons CONFIG found: 'config.py', variables will be inherited...
INPUT_PLUGINS=postgis,raster,shape BOOST_INCLUDES=/usr/include BOOST_LIBS=/usr/lib64 BINDINGS=all 
Configuring on Linux in *release mode*...
...
*Configure complete*                                                                                               
Now run "python scons/scons.py" to build or "python scons/scons.py install" to install                             
[root@localhost mapnik]#

Ehitame ja installime mapniku

  • python scons/scons.py
[root@localhost mapnik]# python scons/scons.py
scons: Reading SConscript 
Welcome to                                                                                                                
Using previous successful configuration...
Re-configure by running "python scons/scons.py configure".
scons: done reading SConscript files.
scons: Building targets ...
...
scons: done building targets.
[root@localhost mapnik]#

Installime mapniku

  • python scons/scons.py install
[root@localhost mapnik]# python scons/scons.py install
scons: Reading SConscript files ...
Welcome to Mapnik...
...
scons: done building targets.
[root@localhost mapnik]#