Přidáváme vrstvy
Stejný obrázek získáme, použijeme-li dvě vrstvy v našem mapfilu:
###########################################################
# začátek všech vrstev
###########################################################
LAYER # začátek vrstvy
NAME staty_plochy # 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 'Plochy států'
STYLE # jak bude třída vypadat
COLOR 225 225 185
END # konec stylu
END # konec tříd
END # konec vrstvy
LAYER # začátek vrstvy
NAME staty_hranice # jak se jmenuje
DATA states_ugl # v jakém souboru (souborech) se nachází
TYPE LINE # typ dat
STATUS OFF
CLASS # začátek třídy
NAME 'Hranice států'
STYLE # jak bude třída vypadat
COLOR 128 128 128
END # konec stylu
END # konec tříd
END # konec vrstvy
###########################################################
# konec všech vrstev
###########################################################
Po uložení mapfilu, změny adresy obrázku v HTML souboru na http://localhost/cgi-bin/mapserv?map=/var/mapservdata/jezera.map&layer=staty_hranice&layer=staty_plochy&mode=map, by se nám měl po reloadu stránky objevit výsledek stejný, jako v předchozím příkladě. Podstatnou změnou ovšem je, že tato mapa je tvořena pomocí dvou vrstev – staty_plochy a staty_hranice, bez atributu OUTLINECOLOR.
Mapové projekce
Aby bylo možno geoid jménem Země nějak zobrazit v 2D rovině, byly postupem času navrženy tzv. kartografické projekce – způsoby, snažící se o tento převod s co možná nejmenším zkreslením. Každá projekce má jiný počátek, může mít i jiný směr hlavních os, velmi často je dělaná na míru konkrétnímu tzv. referenčnímu elipsoidu – matematickému modelu zemského tělesa. MapServer umí díky knihovně Proj převádět mapy v různých kartografických projekcích do jedné – vše v reálném čase. Díky této vlastnosti tak můžete mít zdrojové mapy v různých projekcích (pro Českou republiku na příklad S-JTKS, WGS84) a ještě je zobrazovat v projekci zcela jiné (na příklad Lat-Long).
Ale než se tak stane, musíme v mapfilu definovat, v jaké projekci jsou vstupní mapy a v jaké projekci má být mapa výsledná. Máme v zásadě dvě možnosti: buď projekci definujeme „ručně”, jménem, elipsoidem a dalšími parametry, nebo vezmeme již projekci předdefinovanou číslem (kódem), což je náš případ. Jednotlivé projekce se svými kódy jsou uloženy v souboru epsg (v mém Debianu: /usr/share/proj/epsg). Tyto kódy jsou standardizovány European Petroleum Survey Group (EPSG).
My víme, že naše vstupní mapy jsou v projekci WGS 84, která má kód 4326 a rádi bychom, aby se mapy zobrazovaly v projekci US National Atlas Equal Area, s kódem 2163. Náš mapfile tedy pozměníme do následující podoby:
# 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
EXTENT 208398.01 -372335.44 1285308.08 632638.93 # hraniční souřadnice v projekci US Nat. Atl.
UNITS KILOMETERS # mapové jednotky
SHAPEPATH "/var/mapservdata/data/" # Cesta k datům
IMAGECOLOR 255 255 255 # Barva pozadí
IMAGETYPE PNG # typ výsledného obrázku
PROJECTION
"init=epsg:2163"
END
###########################################################
# začátek všech vrstev
###########################################################
LAYER # začátek vrstvy
NAME staty_plochy # jak se jmenuje
DATA states_ugl # v jakém souboru (souborech) se nachází
TYPE POLYGON # typ dat
STATUS OFF
PROJECTION
"init=epsg:4326"
END
CLASS # začátek třídy
NAME 'Plochy států'
STYLE # jak bude třída vypadat
COLOR 225 225 185
END # konec stylu
END # konec tříd
END # konec vrstvy
LAYER # začátek vrstvy
NAME staty_hranice # jak se jmenuje
DATA states_ugl # v jakém souboru (souborech) se nachází
TYPE LINE # typ dat
STATUS OFF
PROJECTION
"init=epsg:4326"
END
CLASS # začátek třídy
NAME 'Hranice států'
STYLE # jak bude třída vypadat
COLOR 128 128 128
END # konec stylu
END # konec tříd
END # konec vrstvy
###########################################################
# konec všech vrstev
###########################################################
END # konec mapfilu
Co se změnilo? Tak předně byl zaveden nový objekt PROJECTION v objektu MAP a dále byl pro každou vrstvu ( LAYER) také zaveden zvláštní objekt PROJECTION, definující projekci, ve které se pracuje. Dále byly upraveny hraniční souřadnice výsledné mapy (řádek EXTENT), respektující nový souřadný systém. Obnovíte-li stránku, uvidíte, že došlo i ke změně zobrazení (zkreslení) výsledné mapy – mapa je více „plochá”, ne tak „spláclá” – použitá projekce je tedy pro dané území vhodnější (což se ale nerozhoduje na základě „hezčí” mapy, ale na základě parametrů projekce).
Další věc, která se změnila, je řádek EXTENSION, kde se změnily hodnoty souřadnic (nová mapová projekce má jinam posunut počátek a další parametry). Souřadnice vypočítáme na příklad pomocí programu cs2cs (Coordinate system to coordinate system) z balíku knihovny Proj.
Máme tedy několik vrstev definovaných v mapfilu a přetransformovaných z jedné projekce do druhé. Příště se budeme zabývat klasifikací jednotlivých vrstev na základě jejich atributů. Nakonec si povíme něco o tom, jak zobrazovat textové štítky v mapě.