Kartografia internetowa

Cwiczenie 6 - Rozbudowa interfejsu i tworzenie zapytań

Przełączanie między warstwami  Przełącznik trybów działania - nowy tryb: "query"

Zapytania - "query template"  Podświetlanie zaznaczonego obiektu 

Przełączanie między warstwami

Po przesłaniu zapytania inicjalizującego (link w pliku index.html) zostają wyświetlone wymienione w zmiennej layers warstwy. Oczywiście można za pomocą kontrolek formularza udostępnić użytkownikowi funkcję zarządzania ich wyświetlaniem (ale już nie kolejnością, o tym decyduje plik .map). Najlepszym sposobem na to są tzw. checkboxy - listy rozwijane i radio przyciski umożliwiają bowiem wybranie tylko jednej opcji. Każda warstwa powinna posiadać osobną kontrolkę input, z odpowiednio ustawionymi atrybutami. Przykładowo, jeśli w pliku map mamy zdefiniowane trzy warstwy o nazwach: lasy, raster oraz wms, do formularza dodajemy następujący kod:


<input type="checkbox" name="layer" value="lasy" [lasy_check]>opis przycisku 
<input type="checkbox" name="layer" value="raster" [raster_check]>opis przycisku
<input type="checkbox" name="layer" value="wms" [wms_check]>opis przycisku

Rezultatem powyższej operacji będzie wyświetlenie trzech pól formularza (korzystanie z nich ułatwi odpowiedni opis, zawierający na przykład nazwę warstwy). Po zaznaczeniu co najmniej jednego z nich i odświeżeniu mapy (poprzez kliknięcię na obrazek, można też dodać przycisk o funkcji "refresh") zostaną wyświetlone tylko zaznaczone warstwy. Analogicznie jak w przypadku listy rozwijanej tagi MS w postaci [zmienna_check] powodują zapamiętanie na stronie stanu danej kontrolki.

Uwaga: Do poprawnego działania checkboxów konieczne jest jednoczesne usunięcie z formularza kontrolki input przekazującej zmienną ukrytą layers. W przeciwnym wypadku funkcjonalność zostanie zdublowana i warstwy będą dodawane, ale już nie usuwane z mapy.

Przełącznik trybów działania - nowy tryb: "query"

Zapytania do bazy danych odbywają się za pomocą specjalnych trybów działania Mapservera. Dotychczas wykorzystywane były dwa: "map" i "browse", przy czym jedynie ten drugi zapewniał korzyści dynamicznej aplikacji. Tryby zapytań, równiez korzystają z pliku szablonu. I to w dwojaki sposób. Najpierw jednak najwyższy czas na dodanie do istniejącego formularza przełącznika trybów. Jako, że Mapserver może znajdować się naraz tylko w jednym trybie, to idealnym rozwiązaniem jest podobnie jak w przypadku Zooma rozwijana lista:

<select name="mode">
              
         <option value="browse" [browse_select]>Browse</option>
         <option value="map" [map_select]>Map</option>
         <option value="query" [query_select]>Query 2x</option>
                 
</select&g

Tym sposobem użytkownik strony otrzymał możliwośc wyboru jednego z trybów zapytań - query, powodującego zwrócenie wyników z jednej warstwy. Poza nim jest jeszcze 18 innych możliwości. Jednak aby zapytanie zwróciło jakiś wynik niezbędne są jeszcze zmiany w pliku ".map" oraz utworzenie kolejnego szablonu, o czym poniżej.

Zapytania - "query template"

Do prezentacji wyników zapytań Mapserver wykorzystuje koncepcję plików szablonu. Wyniki operacji mogą zostać wyświetlone na tej samej stronie lub w osobnym pliku. Ta druga możliwośc jest prostsza w implementacji i lepiej pokazuje zasadę działania trybu "query". Aby ją zastosować należy w warstwie wektorowej dodać dwa polecenia (dotyczą one całej warstwy, są ponad CLASS w hierarchii obiektów):

TOLERANCE X
Po kliknięciu na mapę, zapytanie będzie dotyczyć wszystkich obiektów w promieniu X pikseli.
TEMPLATE "nazwa_pliku.html"
Wskazuje położenie pliku szablonu, który zostanie użyty do wyświetlenia rezultatów zapytania. Może być to ten sam plik co w obiekcie WEB.

Następnie należy utworzyć pliki o dowolnej nazwie (to znaczy takiej samej jak podana w poleceniu TEMPLATE dla warstwy) z rozszerzeniem ".html", dbając by posiadał odpowiednie uprawnienia. Jeśli będzię on zawierał w treści nazwy atrybutów w kwadratowych nawiasach np. [nazwa] to po wybraniu w oknie mapy trybu "query" i kliknięciu na dowolny obiekt wektorowy zostanie wyświetlony a nazwy atrybutów zostaną zamienione na ich wartości dla odpwoiedniego pola w bazie danych. To oznacza, że jeśli plik szablonu zapytania zawiera tekst:


Ten obiekt to [typ] a nazywa się [nazwa].
                

to jesli wybierzemy z mapy (jeśli wyświetlona jest warstwa przykładowych danych "leba.shp") największe jezioro w trybie "query" rezultatem będzie tekst:


Ten obiekt to jezioro a nazywa się Lebsko.
                

Uwaga:W wersjach MS poniżej 5.0 nazwy atrybutów podaje się tak jak są w pliku źródłowym, natomiast w poźniejszych nazwy atrybutów pisane są z dużych liter, np. [NAZWA].

Podświetlanie zaznaczonego obiektu

Istnieje mozliwość wyświetlenia, oprócz wyników zapytania, mapki pokazującej zaznaczony wektor w innym kolorze. Służy do tego obiekt QUERYMAP. Jest on równorzędny w stosunku do warstw i najlepiej dodać go przed ich definicjami. W najprostszym przypadku ma on postać następującą:


QUERYMAP
   STATUS ON
   STYLE HILITE 
   COLOR 255 255 255
END

Gdzie:

STYLE   HILITE / NORMAL / SELECTED
Określa sposób podświetlania. HILITE - zostanie wyświetlony w kolorze okreslonym przez COLOR, NORMAL - warstwa zostanie wyświetlona wedłu atrybutów klasy, SELECTED - wyświetlony zostanie tylko wybrany obiekt.

Pozostałe atrybuty standardowe. Sama mapa wyświetlona jest w szablonie za pomoca taga - [img]. Tą właściwość można wykorzystać zamieniając dynamicznie mapę w podstawowym interfejsie.

Uwaga:W niektórych wersjach MS, jeśli warstwy sa w różnych odwzorowaniach i konieczna jest ich reprojekcja "w locie", moduł rysujący QUERYMAP nie potrafi tego prawidłowo zrobić.