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ě.