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ářiSHAPEPATH
. 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://localhost/mapserver/mapserv.html.
Když se obrázek nezdaří, zkuste nasměrovat svůj browser přímo na adresu mapserveru http://localhost/cgi-bin/mapserv?map=/var/mapservdata/jezera.map&layer=staty&mode=map. Objeví-li se hláška msLoadMap(): Unable to access file. (/var/mapservdata/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.