Hlavní navigace

Mapový server snadno a rychle (3)

24. 11. 2005
Doba čtení: 4 minuty

Sdílet

Z minulého dílu máme připravený mapfile a podařilo se nám zobrazit první mapu. Nyní budeme přidávat další vrstvy a podíváme se, jak ovlivnit jejich vzhled. Řekneme si, co jsou to kartografické projekce a jak je převádět.

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://localhos­t/cgi-bin/mapserv?map=/var/m­apservdata/je­zera.map&layer=sta­ty_hranice&la­yer=staty_plochy&mo­de=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ě.