Hlavní navigace

Mapový server snadno a rychle (5)

Jáchym Čepický

V minulém díle jsme si mapfile rozšířili o několik (celkem tři) vrstev a z Pendolína (rychlíku) jsme se seznámili s mapovými projekcemi. Nakonec jsme si přidali poslední vrstvu – rastrovou. V tomto dílu se podíváme na vytváření stránek pomocí šablon.

Vytváření stránek pomocí šablon

Doposud jsme vytvářeli mapu velmi primitivně. MapServer ovšem umí velmi užitečnou věc: vytvářet internetové stránky na základě uživatelem definovaných šablon. Jedná se v podstatě o jednoduchou HTML stránku, do které jsou na potřebných místech do hranatých závorek vepsány „tagy”, za které MapServer doplní případný text. Jednoduchou šablonu si nyní vytvoříme a postupně ji budeme rozšiřovat.

Než se šablonou začneme

Protože chceme vytvořit již složitější aplikaci, měli bychom se nejdříve zmínit o tom, jak je MapServer v podstatě ovládán a něco o celkovém vzhledu mapových aplikací.

Můj problém je, že nejsem ani internetový, ani jakýkoliv jiný grafik. Něco jsem si k dané problematice sice přečetl, snažím se řídit několika zásadami, to ovšem nenahradí grafické (umělecké) cítění. Níže zmíněná doporučení berte prosím jako doporučení někoho, kdo se s grafikou na webu od začátku nemá rád, ale snaží se podle svého nejlepšího svědomí s ní nějak férově vyjít.

Jak se MapServer ovládá

Bystřejší z vás to již dávno vědí. MapServer je CGI program, jemuž nejsnáze předáme parametry pomocí formulářových polí. Ta mohou být buď „zjevná” (tedy například typu text a dalších), nebo skrytá (typ hidden). Hodnoty v těchto polích můžeme nastavit buď přímo – klikem myši nebo vstupem z klávesnice, nebo nepřímo, pomocí JavaScriptových funkcí. JavaScript celou webovou stránku na straně klienta pěkně rozhýbe: tlačítka se vyzdvihují a zamačkávají, po najetí myši se pěkně mění, ostřikovače ostřikují a stěrače stírají. Ze začátku se budeme zabývat jednoduchými formulářovými poli, v budoucnosti se ale bez trochy JavaScriptu neobejdeme.

Ať tak či tak, po stisknutí tlačítka „Zobraz mapu” musí být všechna pole formuláře nastavena na potřebné hodnoty.

Úskalí při návrhu stránky

Asi všichni máte po návštěvě některého z portálů celkem jasnou představu, co se všechno musí na stránku nějak „vmačkat”. Zmíním jen seznam vrstev, legendu, panel nástrojů s funkcemi pro zoom, unzoom, posun, tlačítko pro reload, měřítko a samozřejmě vlastní mapa, v ideálním případě s přehledkou. Nyní musíme vyřešit nerudovskou otázku: „Kam s tím?“ a webmasterovskou otázku: „Jak s tím?“.

Všeobecně se na webu již dávno opustilo od tzv. tabulkového layoutu. Vzhled stránek a umístění jednotlivých prvků již není nastavován pomocí komplikovaných a nejraději vnořených tabulek. Přednost se dává řešení uzavírat bloky do divů a nastavit jejich pozici a vzhled v souboru s kaskádovými styly. A jaké řešení zvolíme my?

Samozřejmě tabulkami, jsou totiž nejsnazší na formátování. Nechceme vytvořit hned graficky vyladěnou aplikaci, na to jsou jiné servery. Jde nám o funkcionalitu. Komu se to nelíbí, může samozřejmě následující šablonu psát pomocí divů – nejdůležitější jsou klíčová slova v hranatých závorkách, která bude MapServer nahrazovat.

První šablona

Bez velkých okolů hurá do toho. Vyvořte soubor /var/mapservdata/tmpls/jezera.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="cs">
<head>
<meta http-equiv="Content-language" content="cs">
<meta http-equiv="Content-type" CONTENT="text/html; charset=iso-8859-2">

<meta name="resource-type" content="document">
<title>Moje první Mapserveří aplikace</title>
</head>
<body>
<h1>Budiž mapa</h1>

<!-- formulář s mapou -->

<form name="mapserv" method="get" action="/cgi-bin/mapserv">
    <!-- skryté proměnné -->
    <input type="hidden" name="imgext" value="[mapext]">
    <input type="hidden" name="imgxy" value="199.5 149.5">
    <input type="hidden" name="mode" value="browse">
    <input type="hidden" name="map" value="[map]">

    <!-- /skryté proměnné -->

    <!-- tabulka s mapou a formulářovými políčky -->
    <table border=1 >
        <tr>
            <td colspan=2>
                <input type="radio" name="zoomdir" value="1" [zoomdir_1_check]> Zvětšení |
                <input type="radio" name="zoomdir" value="0" [zoomdir_0_check]> Posun |
                <input type="radio" name="zoomdir" value="-1" [zoomdir_-1_check]> Zmenšení |
                <input type="text" name="zoomsize" size="1" value="2"> Zoom faktor
            </td>

        </tr>
        <tr>
            <td>
                <!-- obrázek s mapou -->
                <input type="image" name="img" src="[img]" width="400" height="300" border="0">
                <!-- /obrázek s mapou -->

            </td>
        </tr>
    </table>
    <!-- /tabulka s mapou a formulářovými políčky -->

    <input type="submit" value="Obnovit">
</form>

<!-- /formulář s mapou -->

</body>
</html> 

Ještě musíme doplnit do našeho mapfilu nový objekt – WEB. Někam na začátek souboru (například mezi řádky FONTSET a LAYER vložte následující řádky:

WEB
      TEMPLATE "/var/mapservdata/tmpls/jezera.html" # šablona pro HTML stránku
      IMAGEPATH "/var/www/mapserver/temp/" # adresář, kam se budou ukládat obrázky
      IMAGEURL "/mapserver/temp/" # URL adresáře s obrázky
END 

Ještě bych doporučil změnit status vrstvy modis na DEFAULT, abychom od začátku něco viděli.

Nyní již můžete nasměrovat svůj browser na adresu http://localhos­t/cgi-bin/mapserv?map=/var/m­apservdata/je­zera.map. Pokud se vám místo mapy objeví například hláška msSaveImageGD(): Unable to access file. Unable to open file /var/www/mapserver/temp/Jezera11279808574665.png for writing, nemáte pravděpodobně vytvořený adresář /var/www/mapserver/temp/, nebo k němu nemáte nastavena patřičná práva.

První šablona

První šablona

Zatrhneme-li nyní políčko Zvětšení a klikneme myší někam do mapy, mapa se překreslí, a co víc, po reloadu stránky zůstane toto políčko zaškrtnuto (klíčová slova [zoomdir_1|0|-1_check]). V políčku zoomsize lze nastavit velikost zoomu.

První šablonu máme, příště se budeme věnovat jejímu vylepšování.

Našli jste v článku chybu?
9. 1. 2012 19:46
jane (neregistrovaný)

Dobrý den,

potřebovala bych provést řízenou a neřízenou klasifikaci multispektrálního snímku a vůbec se mi to nedaří, potřebovala bych někoho nejlépe Brno nebo Praha, kdo tomu rozumí, já s tím nemám žádné zkušenosti, děkuju!