WMS – to proste!
Na kilku konferencjach miałem okazję prezentować podstawowe założenia i funkcje usługi WMS. Prezentacje te spotkały się z dużym zainteresowaniem, dlatego postanowiłem przedstawić na łamach “Geodety” nieformalny, lecz – mam nadzieję – przystępny opis tej usługi. Jeszcze raz pragnę podkreślić – nie jest to opis wyczerpujący – i jest skierowany dla tych, którzy chcą zrozumieć ideę tej usługi.
Zacznijmy jednak od początku. Czym jest usługa dostępna poprzez sieć Internet? Wiele nazw stosowanych w informatyce ma swoje źródła i analogie w świecie rzeczywistym. Mówimy np. o wirusach komputerowych, gdyż sposób ich działania w przestrzeni informatycznej jest zbliżony do świata biologicznego. Tak samo jak ich biologiczni kuzyni, wirusy komputerowe rozmnażają się, zarażają inne komputery czy wreszcie prowadzą działalność destrukcyjną. Podobnie usługi. W świecie rzeczywistym idziemy do wyspecjalizowanego zakładu usługowego, prosimy o usługę i ta usługa zostaje dla nas wykonana. Oczywiście u wulkanizatora nie obetniemy włosów, tak samo jak stolarz nie naprawi nam przebitej opony. Tak samo jest w świecie informatycznym. Gdzieś w sieci są komputery (serwery usług), które czekają na nasze zapytanie, np. o stronę internetową czy obrazek. Są inne serwery, które na podstawie listy wyrazów zwracają nam listę interesujących nas stron. Są to popularne wyszukiwarki internetowe. Komputery, będące serwerami usług, czyli prościej mówiąc, “internetowe zakłady usługowe” mogą dla nas coś zrobić zarówno w sieci, np. przesłać stronę, wyszukać określone strony, jak i w świecie rzeczywistym: załączyć system alarmowy, załączyć oświetlenie, zaprogramować nagranie na nagrywarce TV. Ta druga grupa usług jest obecnie w fazie intensywnego rozwoju, jednak znacznie większą popularnością cieszą się usługi pierwszej grupy – usługi świadczone poprzez sieć dla których zarówno zlecenie jak i realizacja odbywa się wyłącznie w przestrzeni informatycznej. Taką właśnie usługą jest WMS. Czym zatem zajmuje się ten “zakład usługowy” jakim jest serwer WMS? Odpowiadając krótko – serwowaniem map. Nie bez powodu napisałem “serwowaniem map”, a nie “serwowaniem informacji geoprzestrzennej” czy innych abstrakcyjnych tworów, które oprócz tego, że brzmią mądrze, nic nie znaczą. Należy sparafrazować jedno powiedzenie: “mapa, jaka jest, każdy widzi”. Patrząc na wydrukowaną mapę, użytkownik lokalizuje drogi, wody, tereny leśne czy zurbanizowane. Ze względów technicznych takie wydruki najłatwiej wykonać, układając kolejno i do tego bardzo gęsto kropki o różnych kolorach. Takie pojedyncze kropki mogą tworzyć ostatecznie ciągłe obszary o określonym zabarwieniu, a jeśli są ułożone w odpowiedni sposób przedstawią nam np. linię. W ten sposób działają nie tylko drukarki atramentowe czy laserowe, lecz i monitory komputerowe. W ten sposób serwowany jest także obraz poprzez usługę WMS – jest to po prostu obrazek składający się z kropek o różnych kolorach. Oczywiście taki obrazek musi mieć jakiś sens. Zastanówmy się zatem, jakie informacje musimy podać, aby uzyskać określony fragment mapy. Pierwszą rzeczą jest określenie rozmiaru obrazka poprzez podanie szerokości i wysokości np. szerokość=700 pikseli, wysokość=550 pikseli. Polecenia do serwera WMS, muszą być przekazane w zunifikowany sposób. Stosuje się tu nazewnictwo angielskie. Mamy więc: WIDTH=700&HEIGHT=550. Znakiem “&” rozdzielane są kolejne pozycje. Serwer WMS po otrzymaniu takich parametrów wie już, jaki przygotować obraz (o jakim rozmiarze), lecz nie wie jaką treścią go wypełnić. Musimy zatem poinformować go, z jakiego obszaru należy pobrać mapę. Dokonuje się tego w najprostszy możliwy sposób – poprzez podanie lewej dolnej i prawej górnej współrzędnej punktu. Załóżmy, że współrzędna lewego dolnego narożnika to 5861461.21,6546721.65, a współrzędna prawego górnego 5861647.24,6546958.42. Właśnie te cztery liczby musimy podać serwerowi, a zapisujemy to tak: BBOX=6546721.65,5861461.21,6546958.42,5861647.24. Dociekliwi czytelnicy zauważą pewną nieścisłość – liczby są wymienione w innej kolejności. Wynika to z faktu, że usługa WMS definiuje oś poziomą jako X, a oś pionową jako Y. Wydaje się, że to już wszystko, aby serwer przygotował dla nas mapę. Niestety, stajemy przed kolejnym problemem – świat nie jest płaski. Każde współrzędne muszą być zatem uzupełnione informacją w jakim układzie zostały podane. Do naszego zapytania dodajemy więc kolejny fragment: SRS=EPSG:2177, co oznacza, że współrzędne są w układzie 2000, strefa 6”. Nie wszystkie serwery akceptują żądania we wszystkich układach współrzędnych. Oczywiście mam na myśli układy, które są określone dla danego obszaru. Dla całego świata są określone współrzędne geograficzne w układzie WGS, dla obszaru Polski w układzie 1992, a dla różnych obszarów kraju w odpowiednich strefach układu 2000 i 1965.
Przygotowaliśmy niemal komplet informacji. Pozostaje jeszcze jedna – jaką treść chcemy zobaczyć? Usługa WMS posługuje się pojęciem warstwy – musimy zatem określić, które warstwy mają być widoczne. Załóżmy, że będą to działki i numery działek: LAYERS=dzialki,numery_dzialek
Listę nazw warstw można pobrać dzięki specjalnej usłudze serwera (GetCapabilities). Kolejność wymieniania warstw jest bardzo istotna. Są one kreślone w kolejności wymienienia, co powoduje, że warstwa wymieniona później jest nakładana na wykreśloną wcześniej. Złóżmy w całość nasze parametry:
WIDTH=700&HEIGHT=550&BBOX=6546721.65,5861461.21,6546958.42,5861647.24&SRS=EPSG:2177&LAYERS=dzialki,numery_dzialek
Przekazując ww. parametry do serwera usługi WMS, możemy otrzymać mapę. No właśnie, musimy zwrócić się do serwera o mapę, a nie o coś innego. Dodajemy więc jeszcze jeden parametr: REQUEST=GetMap. Wiemy już, jak poprosić naszego usługodawcę o mapę, teraz musimy go tylko znaleźć. Odnajdywanie jest możliwe poprzez podanie adresu usługi w sposób identyczny jak podczas żądania strony internetowej. Dla powiatu aleksandrowskiego, dla którego wymienione wcześniej współrzędne mają sens, jest to: http://mapa.aleksandrow.pl/wms/wms.php
a całe polecenie wykonania usługi przez serwer WMS powiatu, będzie miało postać:
http://mapa.aleksandrow.pl/wms/wms.php?REQUEST=GetMap&WIDTH=700&HEIGHT=550&BBOX=6546721.65,5861461.21,6546958.42,5861647.24&SRS=EPSG:2177&LAYERS=dzialki,numery_dzialek
Po wpisaniu tak przygotowanego adresu w przeglądarce otrzymamy obrazek: fragment mapy o określonym przez nas rozmiarze, z określonych współrzędnych i o określonej treści.
Aby ułatwić czytelnikowi przyswojenie materiału, pod adresem: www.geobid.pl/kurswms umieściłem przykładową stronę, na której można podawać różne parametry żądania usługi WMS.
Taka zabawa z usługą WMS pozwala na jej zrozumienie, podobnie jak mnożenie pisemne pozwala odkryć zasadę tej operacji. Jednak po poznaniu zasad mnożenia najczęściej zaczynamy korzystać z kalkulatorów. Podobnie jest z usługą WMS. Jeśli chcemy zobaczyć fragment mapy obok już wyświetlanego, musimy odpowiednio zmienić współrzędne. Jest to wyjątkowo uciążliwe, dlatego zwykle posługujemy się przeglądarką map opartą o usługę WMS. Taka przeglądarka może być stworzona jako aplikacja pracująca w oknie przeglądarki internetowej, jak również być niezależnym programem. To właśnie taka aplikacja umożliwia nam wygodne przesunięcie mapy lub jej przeskalowanie, co w rzeczywistości skutkuje wyznaczeniem nowych współrzędnych przesyłanych kolejnych żądań do usługi WMS. Takie działanie można zobaczyć np. na portalu powiatu aleksandowskiego: http://mapa.aleksandrow.pl
Dla dociekliwych
Usługa WMS zawsze zwraca fragment mapy o określonych współrzędnych i określonym przez nas rozmiarze. Jeśli nie chcemy, aby obraz został rozciągnięty, musimy zadbać o to, aby stosunek szerokości do wysokości obrazu (wyrażony w pikselach) był taki sam, jak ten wynikający ze współrzędnych.
Serwery usługi WMS zazwyczaj ograniczają maksymalny rozmiar zwracanego obrazu. Ma to zapobiegać żądaniom wykreślenia bardzo szczegółowej mapy w postaci ogromnego rastra. Podobnie jak ograniczenie rozmiaru zwracanego obrazu działa ograniczenie treści. Nie ma sensu, aby dla obszaru powiatu rysować wszystkie działki czy uzbrojenie podziemne, informacja, i tak będzie nieczytelna, a jej wygenerowanie pochłonie dużą ilość czasu serwera.
Pozostaje jeszcze problem przesyłania obrazu. Na stronach internetowych nie stosuje się nieskompresowanych obrazów, gdyż ich transfer trwa bardzo długo. Dlatego w usłudze WMS stosuje się kolejny parametr: FORMAT. Umożliwia on określenie sposobu kompresji. Przykładowo zapis FORMAT=image/png oznacza kompresję bezstratną png. Tego typu kompresja jest bardzo dobra w przypadku przesyłania mapy o charakterze wektorowym. Innym rodzajem kompresji jest jpeg, który idealnie nadaje się do kompresji ortofotomapy, jednak w przypadku danych o charakterze wektorowym powoduje rozmazywanie linii.
Format png ma jeszcze jedną ważną cechę – można zażądać obrazu przezroczystego. Taki obraz ma istotną funkcjonalność – można go nałożyć na inną mapę, budując opracowania tematyczne np. poprzez nałożenie działek na mapę sozologiczną czy hydrograficzną. W celu otrzymania obrazu przezroczystego, musimy dodać kolejny parametr: TRANSPARENT=TRUE.
Jak każdy format, który się sprawdził w praktyce, format usługi WMS podlega stałym udoskonaleniom. Aby jednak zapytania były poprawnie interpretowane, do żądania usługi dodaje się specjalny parametr określający wersję usługi WMS: VERSION. Najpopularniejsza jest wersja 1.1.1.
Usługa WMS potrafi także zwrócić informacje o wskazanym obiekcie. Dokonuje się to jednak w bardzo przewrotny sposób – użytkownik podaje pozycję piksela zwróconego obszaru i prosi o informację. To serwer przekłada współrzędne piksela na współrzędne rzeczywiste, wyszukuje obiekty znajdujące się w tym punkcie i zwraca informację. Jest to jednak proces złożony, a zainteresowanych problematyką odsyłam do strony OGC: http://www.opengeospatial.org/standards/wms, z której można pobrać pełną specyfikację formatu WMS.
Na zakończenie należy jeszcze powiedzieć o bardzo ważnej usłudze serwera WMS – zwracaniu opisu usługi, czyli po prostu metadanych. W tym celu musimy wysłać żądanie GetCapabilities do serwera WMS np. http://mapa.aleksandrow.pl/wms/wms.php?REQUEST=GetCapabilities. W wynikowym pliku znajduje się informacja o obsługiwanej wersji usługi WMS, dostępnych formatach kompresji obrazu, liście dostępnych warstw i innych istotnych parametrach.
Krzysztof Borys
Powyższy artykuł został opublikowany w Magazynie Geoinformacyjnym GEODETA - 12/2010