Mapserver

Linux.fista
Versio hetkellä 18. syyskuuta 2013 kello 14.06 – tehnyt Tuju (keskustelu | muokkaukset)
Siirry navigaatioon Siirry hakuun

Mapserver on Minnesotan yliopiston yhteistyössä NASAn kanssa kehittämä ohjelma, jolla voi tuottaa mm. tietokannassa olevasta paikkatietoaineistosta karttakuvia. Mapserver on vaihtoehto Geoserverille.

OpenStreetMap-aineistoa Suomesta Mapserverillä piirrettynä
Koko maailmasta on vain rannikoiden rajat tässä esimerkissä

Tällä sivulla on ohje, miten omalle koneelleen voi asentaa Mapserverin sekä OpenStreetMap.org:n Suomen paikkatietoaineistot ja selata karttaa OpenLayers-käyttöliittymäkomponentilla. Ohjeen pääasiallisena lähteenä on toiminut http://trac.osgeo.org/mapserver/wiki/RenderingOsmData

Tietokannan valmistelu

postgres-nimisenä käyttäjänä luodaan tietokanta ja asennetaan sinne PostGIS-laajennus

sudo -u postgres createdb osm
sudo -u postgres createlang plpgsql osm
sudo -u postgres psql -d osm -f /usr/share/postgresql/8.4/contrib/postgis.sql 
sudo -u postgres psql -d osm -f /usr/share/postgresql/8.4/contrib/spatial_ref_sys.sql 
sudo -u postgres psql -d osm -f /usr/share/postgresql/8.4/contrib/postgis_comments.sql 

Siirry www-kansioon

cd /var/www/

Lataa finland.osm.bz2 Geofabrikin palvelimelta (180MB)

wget http://download.geofabrik.de/osm/europe/finland.osm.bz2

Muunna aineisto tietokantaan siten, että RAM-muistia käytetään enintään 3 GB. Ota käyttöön myös taulukoiden etuliite "osm" (-p osm), koska se on oletuksena jälkikäsittelyskriptissä. Optio -l säilyttää OSM datan EPSG:4326-projektiossa.

sudo -u postgres osm2pgsql -d osm -p osm -s -C 3000 -l finland.osm.bz2 

Luo käyttäjätunnus, jonka jälkikäsittelyskripti olettaa löytävänsä.

sudo -u postgres psql -d osm -c "create user \"www-data\" with password 'www-data'"

Lataa mapserveriin OSM-karttatiedoston tekoon tarvittavat skriptit

svn checkout http://mapserver-utils.googlecode.com/svn/trunk/ mapserver-utils-read-only

Siirry kansioon

cd mapserver-utils-read-only/

Aja jäkikäsittely

sudo -u postgres psql -d osm -f postprocess.sql 

Tarkista kartan laajuus

sudo -u postgres psql -d osm -c "SELECT extent(way) FROM osm_line"

Muokaa Makefilen kohta "cpp-4.2" vastaamaan cpp-versiotasi (Ubuntu 10.04:ssä 4.4).

nano Makefile 

Lisää riville 38:

extent="19.0832097,59.3714049,31.5868545,70.0947393"

Luo karttatiedosto (skripti myös lataa Shapefilen, jota tarvitaan karttatiedoston luomiseen.)

make

Jos karttatiedoston luominen ei onnistu, tarkista että järjestelmässä on cpp ja muut käännöstyökalut asennettuna.

Valmiiseen tiedostoon osm-mapserver.map muuta riville 19:

wms_srs "epsg:4326 epsg:900913"

Nyt voit komentoriviltä tuottaa karttakuvia, esim:

shp2img -m osm-mapserver.map -o osm.png -e 19.0832097 59.3714049 31.5868545 70.0947393

Komennon suorittaminen kesti 2.4 GHz -koneellani ensimmäisessä ajossa noin 6 minuuttia, mutta toisella ajolla vain 1,5 minuuttia, koska noin 1,7 GB aineisto oli valmiiksi RAM-muistissa, kiitos Linuxin muistinhallinnan. Jos tekee kuvan pienemmästä alueesta, esim. shp2img -m osm-mapserver.map -o osm.png -e 25 65 26 66, menee siihen vain pari sekuntia.

Voit myös millä tahansa WMS-yhteensopivalla karttaohjelmalla avata kartan osoitteesta http://localhost/cgi-bin/mapserv?/var/www/mapserver-utils-read-only/osm-mapserver.map

Selainpohjainen kartta OpenLayersillä

Edellä tehtyä karttaa voi selata myös selainpohjaisesti OpenLayersillä.

Lataa OpenLayers ja sitä käyttävä esimerkkisivu

cd /var/www/
wget http://openlayers.org/download/OpenLayers-2.10.tar.gz
gunzip openlayers-mapserver.zip
wget http://otto.kekalainen.net/karttaohjelmat/openlayers-mapserver.html

Sitten vain selaimella osoitteeseen http://localhost/openlayers-mapserver.html niin kartan pitäisi latautua näköiseksi.

Kuvan latautuminen riippuu tietokoneen tehosta. Isoimmilla suurennustasoilla piirtoon tarvitaan paljon laskentaa ja kuvan tekoon voi mennä kymmeniä sekunteja. Isommilla suurennuksilla kuvan piirtoon menee enää muutama sekunti.

Laattapohjainen kartta

Kartan latautumisnopeuden saa sekunneista millisekuntiehin käyttämällä ns. karttakuvalaattoja. Ubuntun pakettivarastosta löytyy suoraan tilecache-ohjelma.

sudo apt-get install tilecache

Lataa räätälöidyt asetustiedostot

cd /var/www/mapserver-utils-read-only/
wget http://otto.kekalainen.net/karttaohjelmat/Makefile
wget http://otto.kekalainen.net/karttaohjelmat/tilecache.cfg

Luo karttakuvalaatat

make tiles

Luonti kestää kauan. Jos et jaksa odottaa tai kiintolevytila on loppumassa, keskeytä painamalla Ctrl+C

Itse ajoin make tiles -komentoa noin 15 tuntia, ja siinä ajassa 2,4 GHz prosessori oli ehtinyt piirtämisessä 10-tason lähennyksen puoliväliin.

Tampereen yliopiston alue 10-tason lähennyksellä
Lähennystaso Kuvalaattojen määrä Kuvalaattojen yhteenlaskettu tiedostokoko
00 900 kpl 4,8 MB
01 900 kpl 5,3 MB
02 1350 kpl 5,5 MB
03 2700 kpl 8,8 MB
04 5400 kpl 22 MB
05 kpl 51 MB
06 13500 kpl 117 MB
07 62100 kpl 415 MB
08 217800 kpl 1,3 GB
09 832050 kpl 3,9 GB
10 ~4 miljoonaa kpl ~16 GB
11 ei mitattu ei mitattu

Jos haluat selata karttaa TMS-standardilla, lataa

wget http://otto.kekalainen.net/karttaohjelmat/openlayers-tilecache.html

ja avaa selaimessa http://localhost/openlayers-tilecache.html

Vastaavasti suoraan kiintolevyltä ja WMS-C-standardilla voi selata valmiita karttatiiliä huippunopeasti sivulla

wget http://otto.kekalainen.net/karttaohjelmat/openlayers-wms-c.html

..ja avaa selaimessa http://localhost/openlayers-wms-c.html


Paikkatietojärjestelmät ovat melko monimutkaisia, joten kannatta opiskella kunnolla kaikki käsitteet (datumit, projektiot, extend, bounding box jne) sekä selailla manuaaleja ja muita oppaita netissä. Tämä sivu on vain pikainen johdatus aiheeseen ja omat muistiinpanoni miten sain kaikki toimimaan.

Jakelukohtaista

Ubuntu

Ohje on testattu Ubuntu 10.04:llä ja todennäköisesti toimii kaikissa Debian-pohjaisissa jakeluissa.

Paketit:

  • osm2pgsql (sen riippuvuudet asentaa samalla mm. PostgreSQL:n),
  • mapserverin cgi-versio,
  • Apache
  • Subversion
sudo apt-get install osm2pgsql cgi-mapserver mapserver-bin apache2 subversion