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

bitcoin_skoleni

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

Autor článku