1.9.2 Přidání možnosti zoom in, zoom out, pan
Zatímco v případě CGI aplikace řeší operace s mapou samotná CGI aplikace mapserv.exe, v případě PHP modulu se o toto musí postarat vždy námi vytvořený skript. Jednoduše řečeno, co si nenapíšeme to nemáme. Výhodou však je možnost napsání operací, které CGI verze nenabízí. |
Úvod |
Podívejme se na následující kód, který pouze definuje základní uživatelské prostředí a parametry, které budou od uživatele předávány našemu skriptu (nové řádky jsou vyznačeny tučně): <HTML>
Uvedený kód není schopen zpracovávat kliknutí uživatele na obrázek, ale pouze demonstruje jaké parametry budeme skriptu předávat. Jedná se o podobnou skladbu jako v případě rozhraní pro CGI aplikaci. |
Uživatelské rozhraní |
V první řadě je to samozřejmě souřadnice kliknutí uživatele na obrázek: <INPUT TYPE="IMAGE" NAME="mapa2" SRC=<? echo $url; ?> WIDTH=600 HEIGHT=400 BORDER=1> Ty jsou předávány přes parametr mapa2. |
Souřadnice kliknutí |
V druhé řadě to jsou údaje o rozsahu zobrazené mapy v souřadnicích mapy: <INPUT TYPE="HIDDEN" NAME="minx" VALUE=<? echo $rect->minx; ?>> Všechny čtyři souřadnice získáváme z obdélníku, který je pojmenován rect. Tento nabízí vlastnosti minx, miny, maxx, a maxy. Daný obdélník je získán pomocí vlastnosti extent objektu mapa. $rect = $mapa->extent; |
Souřadnice rozsahu mapy |
Dále jsou to údaje width a height, které udávají velikost obrázku v pixelech. <INPUT TYPE="HIDDEN" NAME="width" VALUE=600> |
Šířka a výška mapy |
V další kapitole se budeme zabývat i pořizováním bodů nad mapou a proto musíme rozlišit zda chce uživatel měnit měřítko mapy (resp. centrovat mapu) nebo zda chce umístit bod. K tomu nám slouží parametr mode (podobně jako u CGI). <input type=radio name=mode value=browse <? if ($mode==browse) echo "checked"; ?>> Prohlížet V případě, že je parametr mode roven hodnotě browse bude probíhat změna měřítka nebo centrování. |
Akce uživatele |
Dále musíme rozlišit, zda chce uživatel zvětšit nebo zmenšit měřítko, případně posunout (centrovat) mapu. To nám bude zajišťovat parametr zoomf. <input type=radio name=zoomf value=2 <? if ($zoomf==2) echo "checked"; ?>> Zoom In |
Rozlišení mezi ZoomIn, ZoomOut a Pan |
V další fázi musíme parametry zadané uživatelem zpracovat a provést zvolenou operaci. Tj. musíme se přesvědčit, zda uživatel zvolil některou z funkcí, resp. jakou zvolil. Toto zpracování je demonstrováno rozšířením již uvedeného kódu (tučné řádky jsou nově přidané řádky): <HTML> |
Zpracování události kliknutí uživatele a zvolené funkce |
V úvodu přidaného kódu se převezmou všechny parametry, předávané od uživatele. Všechny parametry se nachází v systémovém poli HTTP_POST_VARS. //místo kliknutí uživatele – souřadnice x v pixelech
|
Převzetí parametrů |
Dále je za všech okolností (resp. v případě volby jakékoliv funkce) provedena změna měřítka na rozsah předaný uživatelem. Tato operace musí být provedena vždy protože objekt mapa, který získáme v úvodu skriptu má vždy rozsah takový jaký je nadefinován v souboru prvni.map. Uživatel však již mohl provést změnu měřítka a tudíž jeho rozsah neodpovídá rozsahu v prvni.map. if ($mode!="") { Změna měřítka se provádí pomocí metody zoomrectangle, která vyžaduje obdélník v pixelech, rozměry obrázku v pixelech a obdélník v reálných souřadnicích. |
Změna měřítka dle předchozího stavu na straně uživatele |
V poslední fázi je provedena operace dle volby uživatele (tj. buď ZoomIn nebo ZoomOut nebo Pan). if ($mode=="browse") { Ke změně měřítka dle kliknutí uživatele se využívá funkce zoompoint, která vyžaduje faktor změny měřítka (-2: ZoomOut, 2: ZoomIn, 1: Pan), místo kliknutí v pixelech, rozměry obrázku v pixelech a obdélník (rozsah mapy) v reálných souřadnicích. |
ZoomIn, ZoomOut, Pan |
V prohlížeči zadejte adresu http://127.0.0.1/ms/prvni.php. Vyberte akci Prohlížet a funkci ZoomIn a klikněte do mapy. Výstup je zobrazen na dalším obrázku. |
Testování |
Obrázek 1-35: Výstup z prvni.php po ZoomIn. Pokud jste neobdrželi uvedený výstup, podívejte se do průvodce studiem. Pokud ani tam nenajdete řešení vašeho problému postupujte podle pokynů uvedených v úvodu modulu. |
Výstup z prvni.php po ZoomIn |
PRŮVODCE STUDIEM 15 |
|
|
V případě problémů s kopírováním (přepisováním) kódu souboru jej naleznete na CD v adresáři ms/ pod názvem prvni_v3.php. |
Zdroj na CD |
|
Přestože máte kód v pořádku může dojít k několika chybovým hlášením. Dále je uvedeno jedno nejpravděpodobnější: |
Chyby |
|
Warning: MapServer Error in : in c:\program files\apache group\apache\htdocs\ms\prvni.php on line 58 Tato chyba ukazuje na nepředání parametru zoomf a to značí, že jste nevybrali přepínací políčko ZoomIn, vraťte se v prohlížeči o krok zpět, vyberte funkci ZoomIn a zkuste znovu. |
Chyba - zoomPoint failed |