Hlavní navigace

Mapový server snadno a rychle (3)

Jáchym Čepický 24. 11. 2005

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

Našli jste v článku chybu?

1. 12. 2005 9:16

Dan1 (neregistrovaný)
Diky za serial a zaroven bych si dovolil dotaz: nevite nekdo o volne pouzitelnych mapovych datech?
Presneji receno hledam mapu Prahy (i klasickou, bez ortofoto) pro nekomercni pouziti...
Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

120na80.cz: Stoná vaše dítě často? Upravte mu jídelníček

Stoná vaše dítě často? Upravte mu jídelníček

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Vitalia.cz: Co pomáhá dítěti při zácpě?

Co pomáhá dítěti při zácpě?

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC