Kartografia internetowa

UMN Mapserver

W dużym uproszczeniu UMN Mapserver jest środowiskiem/silnikiem wyspecjalizowanym w przetwarzaniu i wyświetlaniu wszelkiego rodzaju informacji przestrzennej na potrzeby internetu. Jego podstawowym zadaniem jest generowanie statycznych bądź dynamicznych map we wszelkiego rodzaju serwisach internetowych. Może on funkcjonować na dwa sposoby, jako program/skrypt CGI lub też jako niezależny program dostępny poprzez interfejs API z poziomu takich języków jak Perl/Python/PHP. Poniżej zajmiemy się wyłącznie tym pierwszym przypadkiem, gdyż mimo że to podejście uniemożliwia wykorzystanie wielu funkcji jest znacznie prostsze w implementacji.

Aby uruchomić aplikację w Mapserverze potrzebne są następującę elementy:

Plik mapy (Map File)
Plik tekstowy z rozszerzeniem .map o odpowiedniej strukturze wewnętrznej, zawierający definicję poszczególnych warstw i sposobu ich wyświetlania w przeglądarce, użytych odwzorowań kartograficznych, potrzebne współrzędne itp. Informuje także o lokalizacji danych źródłowych i wyjściowych.
Dane geograficzne
Mapserver jako domyślne źródło danych przyjmuje pliki Shapefile, jednak równie dobrze mogą być stosowane inne formaty. Obsługiwane są wszystkie najpopularniejsze typy danych rastrowych.
Strona HTML
Tworzy interfejs użytkownika. W najprostszym rozwiązaniu Mapserver może być użyty do wygenerowania statycznego obrazka. Bardziej wymagające aplikacja wymagają dwóch elementów:

  • Strona inicjalizująca - zawiera startowe zapytanie do serwera, mogące byc przekazane w postaci zarówno URL jak i zmiennych ukrytych

  • Szablon (Template File) - tworzy szkielet wygladu strony i określa możliwości interfejsu użytkownika. Zawarte w niej zmienne Mapservera są zastępowane przez odpowiednie wartości podczas wyświetlania w przeglądarce

Mapserver CGI
program/skrypt zlokalizowany w katalogu cgi-bin lub innym przechowującym skrypty działające na serwerze. Jego zadaniem jest odpowiednie przetworzenie otrzymywanych zapytań.
Serwer HTTP

Plik mapy

Plik map oparty jest o strukturę hierarchiczną i składa się z obiektów, zawierających słowa kluczowe bądź inne obiekty. Na jej szczycie znajduje się obiekt MAP, do którego należą wszystkie pozostałe. Zaczynając konstrukcję dokumentu należy pamiętać o kilku zasadach:

  • Należy pamiętać o wspomnianej hierarchi. Każdy obiekt musi zaczynać się swoją nazwą a kończyć słowem END.
  • Komentarze poprzedzane są znakiem #.
  • Ścieżki dostępu mogą być podawane bezwzględnie lub relatywnie do lokalizacji pliku map i SHAPEPATH.
  • Wszystkie ciągi zawierające znaki inne niż alfanumeryczne (czyli na przykład ścieżki dostępu) muszą być zawarte w podwójnym cudzysłowiu. Zalecane jest jednak aby czynić tak z wszystkim ciągami znaków. Nie dotyczy to jedynie wybieranych z listy parametrów słów kluczowych.

Poniżej opisane są podstawowe obiekty wraz z przykładowymi słowami kluczowymi niezbędnymi do budowy prostego pliku map. Opis wszystkich dostępnych obiektów i parametrów można znaleźć w dokumentacji pliku mapfile.

Obiekt MAP
MAP
Początek obiektu
IMAGETYPE
Typ pliku graficznego jaki zostanie użyty przez Mapserver jako wyjściowy. Podstawowym formatem jest w tym wypadku PNG, aczkolwiek za pomocą obiektu OUTPUTFORMAT możliwe jest użycie innych (GeoTIFF, PDF itp.)
EXTENT
Ramy przestrzenne bazowego okna wyświetlanej mapy. Jest to oddzielony spacjami zestaw współrzędnych w formacie X1 Y1 X2 Y2 (lewy dolny róg, prawy górny róg). Musi być on zapisany w jednostkach pliku źródłowego lub też zdefiniowanej dodatkowo projekcji wyjściowej
SIZE
Wielkość wyświetlanego w przeglądarce okna mapy podana w pikselach w formacie X Y
SHAPEPATH
Ścieżka dostępu do danych. Może być podana bezwzględnie lub w relacji do pliku map np. "./Dane"
IMAGECOLOR
Kolor tła mapy w formacie R G B
END
Koniec obiektu
Obiekt LAYER
Domyślnie maksymalna ilość możliwych do zdefiniowania warstw to 50 lub 100, jednak można dokonać konfiguracji dla ich dowolnej liczby. Kolejność umieszczania warstw w pliku map nie jest bez znaczenia, gdyż rysowane są one w odwrotnej kolejności niż występują w dokumencie.
NAME
Identyfikator warstwy. W ten sposób można się do niej odwoływać.
DATA
Ścieżka dostępu do danych, relatywnie do SHAPEPATH. Może być to zarówno raster jak i wektor.
TYPE
Określa typ wyświetlanej warstwy np. RASTER, POLYGON, LINE. Jakkolwiek podana wartość nie musi być taka sama jak pliku źródłowego, jednak obowiązują zasady zdrowego rozsądku... Polecenie można wykorzystać np. podając wartość LINE dla warstwy poligonalnej co spowoduje wyświetlenie samych obrysów.
STATUS
Domyślnie ustawiony na ON czyli zawsze widoczna. Użycie OFF spowoduje, że warstwa wyświetlona zostanie dopiero po wywołaniu.
Obiekt CLASS
NAME
Tak jak obiekt MAP może posiadać wiele warstw tak warstwy mogą zawierać wiele klas, rozróżnianych za pomocą tego polecenia. Każda warstwa wektorowa musi zawierać obiekty CLASS i STYLE ale nie dotyczy to rastrów.
Obiekt STYLE
Zawarty wewnątrz klasy określa w jaki sposób jest ona wyświetlana.
COLOR
Kolor poligonu lub lini w formacie R G B
OUTLINECOLOR
W przypadku poligonu określa kolor linii

Przy budowie pliku map dobrze je zachować pewne zasady składni. Aczkolwiek w większości nie są one niezbędne to zdecydowanie ułatwiają zarówno samo pisanie jak i wykrywanie błędów, kolejne transformacje i dodawanie obiektów. Przyjmuje się, że wszystkie polecenia (także obiekty i parametry wybierane z listy) pisane są dużymi literami. Czytelność dokumentu poprawia stosowanie wcięć podkreślających miejsce obiektu w hierarchii a także stosowanie komentarzy. Poniżej przykładowy plik:

MAP #Początek pliku map i głównego obiektu
  IMAGETYPE      PNG
  EXTENT         -97.238976 41.619778 -82.122902 49.385620
  SIZE           400 200
  SHAPEPATH      "\aplikacja\dane"
  IMAGECOLOR     0 0 0

  LAYER #niezbędna jest co najmniej jedna warstwa
    NAME         "lasy"
    DATA         "lasy.shp"
    STATUS       OFF
    TYPE         POLYGON

    CLASS
      NAME       "lasy bukowe"

      STYLE
        COLOR        0 150 0
        OUTLINECOLOR 255 255 255
      END #Koniec obiektu STYLE
      
    END #Koniec obiektu CLASS

  END #Koniec obiektu LAYER

END #Koniec obiektu MAP

ZADANIE:
Utwórz plik mapy (mapfile) wyświetlający warstwę "leba.shp". Zadbaj o odpowiednią lokalizację plików, zasięg etc. Następnie dodaj podkład w postaci zdjęcia satelitarnego: "sat7422.tif"

Wyświetlanie strony w przeglądarce

Aby dowiedzieć się, czy powyższe zadanie zostało wykonane prawidłowo, dobrze byłoby zobaczyć mapę. Najprostszym sposobem jest bezpośrednie zapytanie o mapę za pomocą protokołu http. Jeśli zostanie prawidłowo skonstruowane da w rezultacie mapę o zadanych parametrach. Jest to najprostszy sposób i dający małe możliwości niemniej przydatny w pewnych przypadkach. Ciąg ten można podzielić na dwie części. Pierwsza z nich:

/cgi-bin/mapserv.exe?

mówi o lokalizacji skryptu Mapservera relatywnie do katalogu głównego serwera. Za znakiem ? rozpoczyna się natomiast ciąg poleceń dla skryptu CGI. Wygląda on następująco:

map=lokalna_ścieżka_do_pliku map& layer=warstwa1&warstwa2&mode=map

Poszczególne zmienne oddzielone są znakiem &. I tak:

map=lokalna_ścieżka_do_pliku map

podaje informację o położeniu wykorzystywanego pliku map,

layer=warstwa1

przekazuje nazwę warstwy do wyświetlenia. Należy pamiętać, że warstwy rysowane są w odwrotnej kolejności niż zostały podane w pliku map.

mode=map

To polecenie podaje tryb wyświetlenia. W tym wypadku "map"oznacza, że w oknie przeglądarki zwrócony zostanie statyczny obrazek.

ZADANIE:
Wyświetl mapę w przeglądarce.