OSM kaardiserver Mandriva 2010 Spring baasil
Sisukord
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
- svn co http://svn.mapnik.org/tags/release-0.7.1 mapnik
[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]#