Hlavní navigace

Mapový server snadno a rychle (2)

Jáchym Čepický

V minulém dílu jsme si nainstalovali mapový server, založili adresářovou strukturu a připravili data. Dnes si napíšeme konfigurační soubor Mapfile a nakonec si necháme vygenerovat první mapu. Tak hurá do toho, ať je to hotovo.

Mapfile

Mapfile je konfigurační soubor, ve kterém je definována jednak zobrazovaná oblast a jednak to, jak se mají jednotlivé vrstvy vykreslovat. Vyladěný mapfile – toť cíl každého mapserveristy.

Mapfile nemusí být „viděn“ z webu, proto jej zeditujme v adresáři s daty:

cd /var/mapservdata/
$EDITOR jezera.map 

Struktura mapfilu je poměrně jednoduchá: Mapfile se skládá z několika objetů navzájem do sebe vnořených a ukončený vždy slovem END. Každý parametr se zapisuje na samostatnou řádku, na velikosti písma nezáleží ( END a end jsou interpretovány stejně).

Máme tři základní objekty, které mají různé vlastnosti:

MAP
 |-LAYER
     |-CLASS
        |-STYLE
        |-LABEL
     |-CLASS
     |-...
 |-LAYER
 |-... 

MAP je něco jako projekt – je definován územím, kartografickou projekcí, referenční mapou a podobně. V tomto objektu se nastavují globální vlastnoti výsledných map. LAYER už jsou jednotlivé mapové vrstvy, které se dále mohou dělit na CLASS  – třídy s vlastním STYLE  – stylem zobrazení. Příkladem budiž LAYER Vodstvo s  CLASS es na příklad Potoky a řeky a Nádrže.

Začněmě pomalu: připravíme si mapfile o jedné vrstvě – hranice území, jednotlivé řádky mohou být komentovány:

# Můj první mapfile mapserveří aplikace
#

# počátek mapfilu
MAP
  NAME Jezera   # každý objekt by měl být pojmenován
  SIZE 400 300  # výchozí velikost mapy v pixelech
  EXTENT -97.238976 41.619778 -82.122902 49.385620 # hraniční souřadnice
  UNITS METERS  # mapové jednotky
  SHAPEPATH "/var/mapservdata/data/" # Cesta k datům
  IMAGECOLOR 255 255 255 # Barva pozadí
  IMAGETYPE PNG # typ výsledného obrázku

###########################################################
# začátek všech vrstev
###########################################################
  LAYER # začátek vrstvy
    NAME        staty # jak se jmenuje
    DATA        states_ugl # v jakém souboru (souborech) se nachází
    TYPE        POLYGON # typ dat
    STATUS      OFF
    CLASS # začátek třídy
        NAME 'Hranice států'
        STYLE # jak bude třída vypadat
            OUTLINECOLOR 128 128 128
            COLOR 225 225 185
        END # konec stylu
    END # konec tříd
  END # konec vrstvy
###########################################################
# konec všech vrstev
###########################################################
END # konec mapfilu 

Zkusíme se na jednotlivé položky podívat trochu blíže:

NAME
Každý objekt může být pojmenován. Většinou je to nezbytné, jindy ne tolik. Pomocí jména se na jednotlivé objekty můžeme pozdějí odkazovat.
EXTENT
To jsou hraniční souřadnice projektu. Jsou zadávány v pořadí západ jih východ sever. Vždy musíte vědět, na jakém území pracujete. Nejste-li si jisti, sáhněte po některém ze specializovaných programů – GISů (na příklad po mém oblíbeném QGISu) a nebo použijte na příklad utilitu  ogrinfo: ogrinfo -al -so states_ugl.shp.
SHAPEPATH
je cesta k adresáři s daty z pohledu systému. Adresář a data musí mít nastaven parametr pro čtení pro uživatele, pod kterým běží váš webový server. Data můžete mít i jinde, v tom případě ale musí být v parametru DATA uložena celá cesta.
IMAGECOLOR
Barva pozadí mapy. Všechny barvy jsou nastavovány pomocí RBG s rozsahem 0–255.
IMAGETYPE
Typ obrázku, který se má mapserveru vrátit. Možnosti jsou GIF, JPEG, PNG a WBPM
DATA
Soubor s daty, bez koncovky. Tento soubor (tedy konkrétně ctybdpy2.shp) je uložen v adresáři SHAPEPATH.
TYPE
Říká, o jaký typ dat se jedná. Rozenáváme POLYGON (plochy), LINE (linie), POINT (body) v případě vektorových dat a dále máme k dispozici typy RASTER a ANNOTATION.
STATUS
Nastavuje výchozí příznak zobrazování vrstvy. Možné parametry jsou ON, OFF a nebo DEFAULT. OFF znamená, že nebude-li vrstva explicitně vyvolána parametrem layer v URL (viz níže), nebude vykreslena.
CLASS
Uvozuje objekt třídy. Tříd může být jedna až mnoho v rámci každé vrstvy. Třídy jsou vytvářeny na základě nějakého atributu vrstvy – v případě vektorových dat na základě hodnot ze sloupečku z databáze, v případě rastrových dat na základě hodnot rastru. A nebo může třída pokrývat „všechny hodnoty“ jako v tomto případě.
STYLE
Aby se vůbec něco zobrazilo, musí být řečeno, jak se to má udát.
OUTLINECOLOR
Barva hraničních linií polygonu

Mapfile je doslova „ořezaný na kost“. Postupně budeme přidávat další parametry a atributy a vytvářet mapu k obrazu našemu. Zatím pracujeme pouze s jednou vrsvtou a v ní je pouze jedna třída.

První spuštění

Poté, co jsme si napsali a uložili náš mapfile, můžeme se pustit do vlastní HTML stránky. Tu uložíme do souboru  /var/www/mapserver/mapserv.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="cs">
<head>
<meta http-equiv="Content-language" content="cs">
<meta http-equiv="Content-type" CONTENT="text/html; charset=iso-8859-2">

<meta name="resource-type" content="document">
<title>Moje první Mapserveří aplikace</title>
</head>
<body>
<h1>Budiš mapa</h1>
<div>
    <img border="1" src="/cgi-bin/mapserv?map=/var/mapservdata/jezera.map&layer=staty&mode=map" alt="Mapa" >

</div>
Ahoj, světe!
</body>
</html> 

A nyní již můžeme nasměrovat náš webový prohlížeč na kýženou adresu http://localhos­t/mapserver/map­serv.html.

Když se obrázek nezdaří, zkuste nasměrovat svůj browser přímo na adresu mapserveru http://localhos­t/cgi-bin/mapserv?map=/var/m­apservdata/je­zera.map&layer=sta­ty&mode=map. Objeví-li se hláška msLoadMap(): Unable to access file. (/var/mapservda­ta/jezera.map) nebo nějaká podobná, víte, že máte problém s právy a nebo například s názvem adresáře.

Místo adresy s obrázkem je adresa programu mapserv s klasickým způsobem předání parametrů přes webové rozhraní. V tomto případě máme parametry

map
Udávající plnou cestu k našemu mapfilu
layer
Vrstvy, které se mají vykreslit
mode
Mód, v jakém má mapserver funovat. Mód map vrací obrázek mapy, query vrací výsledek dotazu na zadané souřadnice, o tomto módu ale až později, browse vrací vygenerovanou HTML stránku na základě šablony (viz dále).

Pokud šlo vše tak, jak má, zobrazí se vám první HTML stránka s on-line vytvořenou mapou. Dále se budeme zabývat jejím vylepšováním.

Pokud jste vydrželi sledovat výklad až sem, zobrazila se vám vaše první mapa, resp. stránka s mapou. Jak do ní přidávat další vrstvy, se dozvíme příště – opět budeme pronikat dále do hlubin mapfilu. Nakonec si povíme (velmi zjednodušeně) něco o mapových projekcích.

Našli jste v článku chybu?
8. 12. 2005 21:03
Mist (neregistrovaný)
Hola, takovy maly problem, nezobrazi se mi zadny obrazek, resp. nejaky obrazek se generuje, kdyz napr. zmenim pozadi IMAGECOLOR na jinou nez bilou barvu, vidim obrazek o danych rozmerech vyplneny touto barvou ... Kde by mohla byt zdrada?
11. 11. 2005 11:50
Ahoj, som rad, ze po serii clankov o GRASSe sa dostalo aj na Mapserver. Podla mna by vsak bolo v buducnosti lepsie pisat rozsiahlejsie diely. Ked sa preberaju data, tak vsetko v vstupnych datach. Ked vizualuzacia, tak vsetko. Prinieslo by to urcitu ucelenost v teme. Inak som rad, ze aspon niekto propaguje OS GIS aplikacie. Vela zdaru. Peter