Rozšířená funkčnost T-MapServeru

Obsah

Úvod

Rozšířená funkčnost projektu v T-MapServeru přidává k základní funčnosti možnost dotazovat se na popisné informace prvků aktivních vrstev, propojit prvky vybraných vrstev s dalšími informacemi v HTML dokumentech, v databázových agendách nebo v dalších informačních systémech, editovat bodové databázové vrstvy komunikovat s mapou z jiných HTML stránek, vyhledávat v mapě, zobrazit k mapě legendu nebo vytvořit si vlastní tiskový výstup.

Popisné informace prvků v mapě

V této části si popíšeme, jak se nastaví mapový projekt, aby se zobrazovaly popisné informace k námi definovaným vrstvám.

Konfigurace aplikačního serveru

  1. Nastavení nástroje Info
     
    V konfiguračním schématu pro okno typu panel (.admin\panel_schema.inc) nastavíme vlastnost info na true. To nám přidá mezi nástroje nástroj Info, který na kliknutí v mapě vrací do speciálního okna popisné informace o nalezených prvcích.

    Příklad

    $MAP_PANEL["all"]["info"] = true;
    
  2. Nastavení aktivních vrstev
     
    V seznamu vrstev (.admin\layer_schema.inc) je potřeba nastavit vlastnost active u těch vrtev, z kterých chceme získávat popisné informace.

    Příklad

    V sadě vrstev "demo" je nastavena vrstva "budovy" jako aktivní.
    $MAP_LAYER["demo"]["layers"]["budovy"]["active"] = true;
    
  3. Konfigurace nastavení pro popisné informace
     
    V souboru .admin\info_schema.inc nakonfigurujeme pole MAP_INFO pro danou vrstvu (definice zobrazovaných polí).

    Příklad

    Nástroj Info bude vypisovat informace o číslu popisném a kódu objektu z vrstvy budovy.
    <?
    $MAP_INFO["budovy"] = array(
      "type"=>"MapServer",
      "caption"=>"Budovy",
      "table"=>array(
        "connection"=>"demo",
        "name" => "budovy",
        "schema"=>array(
          "CPOP"=>"číslo popisné",
          "OBJEKT_KOD"=>"Kód objektu"
        )
      ),
      "output"=>"table"
    );
    ?>
    

Konfigurace mapového serveru MapServer

Aby vše fungovalo, je nutné ještě nastavit konkrétní mapový server (v našem případě MapServer).
  1. Konfigurace mapového projektu
    Nastavení se provádí v souboru projektu mapového serveru (v našem případě v mapserv\projects\demo\demo.map). Zde se definuje tolerance vzdálenosti od prvku a zavede Objekt pro dotazování (Query). Objekt Query obsahuje relativní cestu k souboru se šablonou pro předávání informací (viz. následující bod).

    Příklad nastavení části vrstvy "budovy"

      TOLERANCE 0
      TOLERANCEUNITS meters
      QUERY
        TEMPLATE '../../data/demo/budovy_p.html'  
        # relativní cesta k šabloně
      END # QUERY
    
  2. Vytvoření šablony pro předávání informací z mapového do aplikačního serveru
     
    Vytvoříme soubor mapserv\data\demo\budovy_p.html, který obsahuje mapování atributů datové vrsty MapServeru na atributy aplikačního serveru, jež jsou popsány v konfiguračním souboru info_schema.inc. K těmto atributům přibudou ještě atributy "layer", "ext" a "id", které jsou povinné pro aplikační server.

    Příklad šablony

    Šablona předavá uvedené atributy aplikačnímu serveru:
    $data=array(
      "layer"=>"[cl]",
      "ext"=>"[shpext]",
      "id"=>"[OBJEKT_KOD]",
      "OBJEKT_KOD"=>"[OBJEKT_KOD]",
      "CPOP"=>"[CPOP]"
    );
    

Hotlink (spojení s okolním světem)

Ukážeme si, jak navázat komunikaci mapového projektu s databázovou agendou. Jako názorný příklad vybereme agendu pro vyhledávní domů.

Konfigurace aplikačního serveru

  1. Nastavení nástroje Hotlink
     
    V konfiguračním schématu pro okno typu panel (.admin\panel_schema.inc) nastavíme vlastnost hotlink na true. To nám přidá mezi nástroje nástroj Hotlink, který na kliknutí v mapě vrací do speciálního okna dokument, jehož URL adresa je dynamicky vytvořena na základě zjištěných informací o daném prvku v místě dotazu.

    Příklad

    $MAP_PANEL["all"]["hotlink"] = true;
    
  2. Konfigurace nastavení pro hotlink
     
    Nastavením vlastností konfiguračního souboru (.admin\hotlink_schema.inc) pro konrétní vrstvu, se tata vrstva přidá automaticky (pro standardní klienty all a map) do seznamu vrstev, nad kterýma se provádí dotazovaní pro hotlink.

    Příklad

    $MAP_LINK["budovy"] = array(
      "type"=>"MapServer",
      "caption"=>"Budovy",
      "selected"=>true,
      "hotlink"=>GetAgendaPath("UIRADR_OBJEKT", false, true)."/brow.php?client_lang=cz_iso&hide_tel=1&OBJEKT_KOD=",
      "table"=>array(
        "connection"=>"demo",
        "name" => "budovy",
        "hotlink_field" => "OBJEKT_KOD",
        "schema"=>array(
          "OBJEKT_KOD"=>""
        )
      )
    );
    

Konfigurace mapového serveru MapServer

Nastavení MapSeveru je stejné jako pro popisné informace. Je jen potřeba dát pozor, aby atribut (v našem případě OBJECT_KOD) důležitý pro napojení na agendu (zde agenda domů - UIRADR_OBJECT) byl mezi předávanými atributy.

Editace bodové vrstvy

Předpokladem pro editaci bodové vrstvy je to, že tato vrstva leží v tabulce (v databázi podporované v PHP) a nad touto tabulkou je nakonfigurována databázová agenda. Dále se předpokládá propojení na tuto agendu pomocí hotlinku, takže konfigurace editace je součástí konfiguračního souboru pro hotlink.

Konfigurace aplikačního serveru

  1. Nastavení nástroje Editace
     
    V konfiguračním schématu pro okno typu panel (.admin\panel_schema.inc) nastavíme vlastnost edit na true. To nám přidá mezi nástroje nástroj Editace, který na kliknutí v mapě zobrazí formulář pro přidání dalšího bodu a jeho popisných informací.

    Příklad

    $MAP_PANEL["all"]["edit"] = true;
    
  2. Konfigurace nastavení pro editaci

  3.  
    Nastavením vlastnosti edit v konfiguračního souboru (.admin\hotlink_schema.inc) pro vrstvu typu Table, se tata vrsta rozšíří o možnost editace.

    Příklad

    $MAP_LINK["kina"] = array(
      "type"=>"Table",
      "caption"=>"Kina",
      "edit"=>array(
        "link"=>GetAgendaPath("KINA", false, true)."/edit.php",
        "request"=>"&RELOAD_FRAME=map",
        "left"=>350,
        "top"=>50,
        "width"=>600,
        "height"=>400
      ),
      "output"=>array(
         "target"=>"NewWindow",
         "name"=>"Athos",
         "features"=>"resizable,scrollbars,width=500,height=500"
      ),
      "hotlink"=>GetAgendaPath("KINA", false, true)."/brow.php?client_lang=cz_iso&ID=",
      "size_type"=>"pixel",
      "size"=>16,
      "table"=>array(
        "connection"=>"DB_HK",
        "name" => "kina",
        "hotlink_field" => "ID",
        "schema"=>array(
          "ID"=>"kód kina"
        )
      )
    );
    

Komunikace s mapou a vyhledávání

Komunikovat s mapou lze několika způsoby. Jak je to možné, popisuje rozhraní pro komunikaci s mapou. Mezi nečastější způsob patří vyhledávání pomocí databázové agendy a následné zobrazení výsledku v mapě. Tento způsob si popíšeme v následujících krocích.

Konfigurace aplikačního serveru

  1. Vytvoření databázové agendy pro vyhledávání
     
    Popis databázové agendy se nachází v jiném dokumentu. Tato agenda umožňuje vyhledávat přes popisné informace a vyhledané záznamy jsou prezentovány v tabulce. Každý záznam této tabulky obsahuje odkaz do mapy, přes který se zobrazuje prvek v mapě.
     
  2. Konfigurace seznamu agend pro vyhledávání
     
    Konfigurační soubor .admin\bookmark_schema.inc slouží k nastavení seznamu agend pro vyhledávání. Každý klient tyto agendy zobrazuje různým způsobem. Klient typu all má pro tento seznam vyhrazený rámec, kdežto klient typu map zobrazuje seznam v samostatném okně.
     
  3. Nastavení funkce Vyhledávání
     
    V konfiguračním schématu pro okno typu panel (.admin\panel_schema.inc) nastavíme vlastnost db na true. Funkce pro vyhledávání je využita v klientu typu map, kde spouští databázové okno se seznamem agend pro vyhledávání.

    Příklad

    $MAP_PANEL["map"]["db"] = true;
    
  4. Nastavení komunikačního rozhraní k mapě
     
    Aby mapová část klienta mohla správně reagovat na agendy pro vyhledávání, je potřeba nastavit konfigurační soubor komunikačního rozhraní mapy .admin\interface_schema.inc

Konfigurace mapového serveru MapServer

Nastavení MapSeveru je stejné jako pro popisné informace. Je jen potřeba dát pozor, aby atributy důležité pro komunikaci s mapu byly mezi předávanými atributy.

Legenda

Legenda mapy je v této verzi T-MapServeru předem vytvořený obrázek (gif, png, jpg), jehož relativní cesta vůči projektu je zadána v konfiguračním souboru style_schema.inc (vlastní obrázek je doporučeno uložit v adresáři legenda).
  1. Nastavení funkce Legenda
     
    V konfiguračním souboru pro okno typu panel (.admin\panel_schema.inc) nastavíme vlastnost legend na true. Funkce Legenda zobrazí do zvláštního okna nebo rámce legendu mapy.

    Příklad

    $MAP_PANEL["all"]["legend"] = true;
    
  2. Konfigurace legendy mapy
     
    V konfiguračním souboru stylu .admin\style_schema.inc nastavíme cestu k souboru s obrázkem legendy.

    Příklad

    $MAP_STYLE["demo"] = array(
      "desc"=>"Mapa čísel popisných",
      "type"=>"MapServer",
      "legend"=>array(
         "image"=>"legenda/seznam.gif"
      ),
      "parameters"=>array(
          "mode"=>"map"
      )
    );
    

Rozšířený tisk

Základní (jednoduchý) tisk mapy zobrazí samostatné okno s aktuálním výřezem mapy. Rozšířený tisk nabízí možnost úpravy stránky pro tisk. Tyto úpravy lze zatím provádět pouze pomocí PHP skriptu.
  1. Nastavení funkce Rozšířený tisk
     
    V konfiguračním schématu pro okno typu panel (.admin\panel_schema.inc) nastavíme vlastnost print_ext na true. Funkce Rozšířený tisk (reprezentovaná tlačítkem pro tisk) na kliknutí otevře nové okno, kde je zobrazena stránka pro tisk vytvořená pomocí PHP skriptu print.php.

    Příklad

    $MAP_PANEL["all"]["print_ext"] = true;
    
  2. PHP skript print.php
     
    V adresáři tms/examples/prototypeEx se nachází PHP skript print.php, který je názorným příkladem rozšířené stránky pro tisk. Pokud je nastavena vlastnost print_ext, musí se v adresáři mapového projektu nacházet PHP skript print.php, který vytváří stránku pro tisk.

    Příklad PHP skriptu print.php

    <?
    $arr = Explode('&',$QUERY_STRING);
    for($i=0;$i<Count($arr);$i++) {
      list($key,$val) = Explode('=',$arr[$i]);
      $keyarr[$key] = $val;
    }
    $keyarr["FORMAT"] = "GIF";
    
    $arr = array();
    while(list($key,$val) = each($keyarr)) {
      $arr[] = "$key=$val";
    }
    $query = Implode('&',$arr);
    
    $scale = "name=crm&mapext=".$BBOX."&mode=scalebar"; 
    $scale = StrTr($scale,",","+");
    
    echo "<h1>Print Map</h1>\n";
    echo "<img src=\"../map.php?$query\" WIDHT=650 HEIGHT=537 BORDER=1><BR>";
    echo "<img src=\"../map_image.php?$scale\" WIDHT=421 HEIGHT=47>";
    ?>