A WMS szabvány egyszerű http protokollon keresztül teszi lehetővé georeferált képek elérését, egy vagy több térbeli adatokat tartalmazó adatbázisból. Praktikusan olyan ez a szabvány, mint amilyen szabványokat a böngészők is használnak. A kliens oldalon nem a szerverhez, hanem ehhez a szabványhoz kell idomulni, és a térképek megfelelően megjelennek (ugyanez fordítva is így van, a szerver oldalon sem a klienshez kell alkalmazkodni). A WMS szabvány jelenleg használt variánsait 1999 és 2006 között fejlesztették, négy fő verziója használt (1.0.0 , 1.1.0 , 1.1.1 , 1.3.0). Két -pontosabban három - lekérdezés, a GetCapabilities és a GetMap mindegyik (és a GetFeaturerequest) verzióban megtalálható és kötelező elemei a szabványnak. Az előbbi egy xml fájlt ad vissza, amiben a használt WMS verziószámára, a térkép nevére, a benne található rétegek nevére és azok elérhetőségére ad információt. A GetMap pedig magát a térképet adja vissza. A kötelező elemeken túl,
GetFeatureRequest egy adott objektumról ad vissza információt. DescribeLayer leírja egy adott réteg tulajdonsgait (stílusát) a GetLegendGraphic pedig jelmagyarázattal tér vissza (ez utóbbi kettő feltételezi a kliens oldalról az SLD támogatását).
Használat qgis-el: Ahol a raszter, vektor fájltípusokat kell hozzáadni, ott található egy wms hozzáadása lehetőség is. A felbukkanó ablakban kereshetünk szervereket (az előbbi listából), vagy hozzáadhatunk egy sajátot. Ennek a menete, egy név megadása (ami nekünk fontos, ez fog megjelenni a választható listában) és egy jól formázott getcapabilities url beírása (pl ez: http://atlas.gc.ca/cgi-bin/atlaswms_en?VERSION=1.1.1&request=Getcapabilities&service=wms vagy ez: http://192.168.1.102/cgi-bin/mapserv?map=/home/baa/mapserver/kulcs.map&version=1.1.1&service=WMS&request=GetCapabilities - különbség, hogy a canadai oldal wrapper scriptet használ, így nem jelölte meg a map fájlt)
Használat Grass-al: Eddig méltánytalanul hanyagoltam a GRASS-t, pedig a qgis mellett az egyik leggyakrabban használt nyílt forráskódú térinformatikai alkalmazás. Grass r.in.wms parancsot használja, amelynek meg kell adni egy output, egy mapserver (getcapabilities) layers (melyik réteget), region (mely területre kérjük le) és format (png,tiff stb) változókat. A rétegek listájának lekérdezését, a -l (L mint Lajos) kapcsolóval, illetve a mapserver= , output= változókkal tudjuk. Itt a man oldal mindehhez, példával.
Használat ESRI termékekkel: Arcview 3.x verziók, csak kiegészítéssel tudják használni, ez innen elérhető, ArcGis 9.0 verziótól támogatja alapból.
Használat Mapinfoval: Na ők még nagyon pöpec tutorialt is készítettek hozzá voila:
Az elmúlt héten alaposan elmélyedtem a mapserver lelkében, és az ezzel kapcsolatos tapasztalataimat fogom az alábbiakban megosztani. Ahogy a címből is látható, ez egy több részes poszt sorozat első része (kvázi a nulladik a mapserver feltelepítése volt).
1 Ábra (Forrás: http://www.mapserver.org)
Ahogyan az első ábrából is kikövetkeztethető, a A Mapserver szíve a .map fájl, amely megadja a programnak a kép előállításához és a lekérdezésekhez szükséges paramétereket. Ugyanarra a struktura logikára épül (strukturált szüveg fájl), mint az xml, tehát van egy root tagja, ami a MAP, ez alá pedig, a NAME, EXTENT stb, stb direktívák vannak szervezve, illetve minden olyan elem ami alá további elemek vannak beszervezve az END lezárással érnek véget. Szépen formázott állapotában az alábbiak szerint néz ki:
MAP NAME EXTENT ...... END
A Mapserver nem betű-érzékeny (pontosabban általában nem:), ami azt jelenti, hogy kis és nagy betűt a direktívák esetébenegyformának veszi. Szöveg típusú adatot (pl elérési úrvonalat) idézőjel közé kell tenni (ez is ilyen általában szabály), ha kommentelni akarunk a mapfile-ban akkor a # jelet kell használni a komment előtt (ez viszont tuti:).
Tesztkörnyezet kialakítása
Ahhoz, hogy el lehessen molyolni a mapserverrel, célszerű egy teszt környezetet beállítani. Egy kissé elrugaszkodva az Itasca demo munkamenetétől, és más nyílt forráskódú szoftvereket is használva saját .map fájl szerkesztésébe kezdtem. Nyilván bármilyen teszteléshez szükség van valamiféle térbeli adatbázisra. Ez az adatbázis kulcs község úthálózata, ez mégpedig a postgresql-postgis adatbázis kezelő jóvoltából (tehát vektoros adatállománnyal dolgozok). Egyébként a Mapserver alá, szinte bármilyen adatbázis betolható, itt a lista melyek is. Rögtön a közepébe csapva készítettem egy map fájlt, meg hozzá magyarázatot, ami innen letölthető (figyelem tar.gz windows alatt így kell kicsomagolni), a részletek az olvassel.txt-ben találhatóak. Qgis-t használom wms kliensnek (praktikusan mert a görgő mozgatásával frissíthetem a képet) illetve a /home/baa/mapserver/temp/hibauzi.txt -be megy a debug (ezt persze testre kell szabni!). Szóval a qgis-ben a felsőt, firefoxban az alsót kellene látni ha minden működik, ez utóbbit a
url -el bányásztam ki a firefoxból, nyilván IE és CHROME alatt is ok lesz:)
Szimbológia alapok
Szimbológia az, ami leírja, hogy a főút a térképen kék színű legyen bézs szegéllyel, ami meghatározza, hogy az országhatár pontokból és felfekvő I szakaszokból álljon. A Mapszerver szimbológia kezelése sokkal kifinomultabb, mint például a Mapnik szimbólum kezelése, cserébe valamivel bonyolultabb is. Az alábbi rész inkább kedv csináló, a következő posztban lesz részletesebben kifejtve. Egyébként angol nyelven egy nagyon pöpec összefoglaló érhető el innen.
A Mapszerver szimbológia kezelése, egy 1974-es publikáció eredményein alapszik. Lényege, hogy egy objektum külalakja a formájától, a színezésétől és a kitöltésétől (polygonok esetében), a színezés méretétől (vonal szélesség), a stílus leírás struktúrájától, valamint az objektum méretarány szerinti helyétől függ. Ezeket a változókat a .map fájlon belül, a LAYER elem alatt kell definiálni. A LAYER két részből áll ezért össze, egyik fele írja le milyen adatbázisból származik az adat, annak milyen a típusa, a másik fele pedig a stílusával foglalkozik. Fontos a különbségtétel, mert amúgy nem nehéz összekeverni a TYPE direktívát, ami a LAYER-en belül közvetlenül, és a SYMBOL elemen belül is megjelenik két teljesen más változóként. Az első esetben az adatforrás típusát írja le (vonal, kör, pont, raszter stb), míg a másik a szimbólum formájának leíró módját. A stílus leírását a LAYER-en belül több féleképpen lehet szervezni, a bonyolultsághoz mérten a stílus struktúráltságát is növelni kell (ami itt a STYLE direktívák használatával lehet elérni).
SYMBOL direktíva
Elsődlegesen a forma leírója. Ahogyan a fentebb belinkelt csomag kulcs.map fájlából látható, ez az elem akár el is hagyható. Definiálni lényegében bárhol lehet. WEB és a LAYER direktívák közé beszurva az alábbi sorokat,
SYMBOL NAME "pont" TYPE ELLIPSE POINTS 1 1 END FILLED TRUE END
majd a CLASS direktíván belül létrehozva egy STYLE elemet (a korábbi COLOR-t is belevéve):
STYLE COLOR 255 0 0 SYMBOL "pont" SIZE 7 END
7 pixel széles félgömbben végződő piros úthálózatot kapunk. Ezt a STYLE-t duplázva, majd a felsőnek COLOR 0 0 0 és SIZE 7 -et, míg az alsónak COLOR 255 255 255 ill SIZE 5 -öt adva az alábbi képet kapjuk:
Megtörtént a 2010-es HUNAGI konferencia, amin részt vettem, mint hallgató. A konferencia címe "Mindenért kell-e fizetni?" volt. Nem fogok oldalakat írni, mi minden történt, de azt mindenképpen, hogy érdekes volt jó volt. Végső konkluzióként az jött le nekem, hogy az állami adatok, meg úgy ami állami rosszul szervezett, pontatlan, és mindez úgy 16 éve ilyen és nincs mit tenni ellene. Jelen voltak még a megoldást szállító cégek, (kt példa az ESRI és a VARINEX KFT) határozott célokkal, fiatal, törekvő emberekkel. Az egetrengető bejelentések elmaradtak, összességében szolid mederben folytak az előadások. A konferencia legizgalmasabb részét a külföldi előadók jelentették, itt volt az előző posztomban a PyWPS példa-kidolgozó cseh csoportvezetője, illetve az OGC európai igazgatója, aki épp a deegree rendszerről beszélt (nahát így már világos is volt, miért éppen a deegree implementálja a legtöbb standardot:). Viszont szomorú, hogy szakmai köben sem ismerik sokan, még hallomásból sem a WMS szabványt. Sajnos az open source-t sokan súlyosan kritizálták, ráadásul úgy, hogy egyértelmű hitvitába keveredtek Dr Siki Zoltánnal (aki nem véletlenül Doktor) és többen rosszul is érveltek ellene (például, hogy pontatlan, vagy nem biztonságos, nincs megfelelő supportja az open source szoftvereknek).
A térbeli adatállományoknak nem sok hasznuk van, ha egy adatbázisban, egy shape fájl mélyén szunnyadnak és előkotrásuk, megnézésük körülményes. A világhálón viszont nem túl elegáns közvetlenül adatbázisokat megosztani, mert pl szerzői jog védelme alá esnek és nem sokszorosíthatóak. Erre a problémára lehet egy megoldás a Mapserver, ami a legelterjedtebb nyílt foráskódu webtérkép készítő és wms szolgáltató alkalmazás.
A WMS -en túl, a WFS és WCS standardokat is támogatja, olvassa az ArcSDE, PostGis, Esri shape formátumokat (persze sokkal több mindent támogat, innen meg lehet nézni az OGC szabványok támogatását, és innen, hogy mely adatbázisokból képes olvasni).
A feltelepítése elvileg nem nehéz, mind windows, mind unix környezetben elfut, működésének a módja igényel talán nagyobb odafigyelést. Mivel számos csomag szükséges futtatásához, így egyszerre több alkalmazás működésével kell alapszinten tisztába lenni.
Paolo Corti posztja volt az iránytűm a mapserver ubuntu környezetbe való feltelepítésénél, de a Mapserver dokumentumban több platformra részletes telepítési útmutató elérhető (unix rendszerekre forrásból telepítenek).
Ahogyan a Qgis feltelepítésével foglalkozó posztban írtam, az UBUNTUGIS repository (kád:) eléréséhez az /etc/apt/source.list állományhoz plusz sorokat kell szúrni, megadni a kulcsot, és frissíteni a repository indexet (sudo apt-get update).
Érdemes azonban ellenőrizni ezek mindegyike települt-e.
A következő lépés letölteni innen egy demo munkamenetet (A mapserver fejlesztéseket általában nem a nulláról kezdik, hanem egy alap munkamenetből, mint amilyen a fentebbi link ITASCA, vagy a Cameleon).
A letöltés befejezése után ki kell csomagolni, majd be kell állítani az apache2-t, ami a /etc/apache2/sites-available/default szerkesztését jelenti:
Ennek a fájlnak a tartalmát - persze csak ha otthon játszunk a mapserverrel - át kell írni a következőképpen:
<Directory/> Options FollowSymLinks AllowOverride All </Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory"/usr/lib/cgi-bin"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory>
ErrorLog /var/log/apache2/mapserverdemo_error.log. LogLevel warn CustomLog /var/log/apache2/mapserver_access.log combined ServerSignature On </VirtualHost>
Ezt egy az egyben átvettem Paolo Corti blogjából, ami sárgával van kijelölve, azt a sort át kell írni a saját munkamenet (amit az elöbb letöltöttünk, nekem pl /home/baa/mapserver) helyének megfelelően, majd ezen belül létre kell hozni egy tmp könyvtárat, amire írási-olvasási jogot kell adni az apache-t futtató felhasználó számára (pl sudo usermod -a -G baa www-data aztán chmod -R 770 tmp, vagy egyszerűen chmod -R 777 tmp).
Ezután indítsuk újra a apache2-t a sudo /etc/init.d/apache2 restart parancsal. A böngészőben a http://localhost/cgi-bin/mapserv url-t beütve NO QUERY INFORMATION IS DECODE. QUERY_STRING IS SET BUT EMPTY sort kell, hogy lássuk.
Legutolsó lépés a letöltött munkamenet beállítása. Két fájlt, az index.html -t és a .map fájlt kell beállítani. Két sort keressünk meg, <!-- EDIT FORM ACTION -->, ami alatt az action="/cgi-bin/mapserv" legyen, illetve a <!--EDIT HIDDEN VARIABLE-->, ami alatt a map nevű input értéke, a munkamenetben .map fájlra mutasson (pl /home/baa/mapserver/itasca.map). A program nevű input értéke a /cgi-bin/mapserv -re mutasson. A root nevű input Paolo Corti leírásában relatív van megadva, nekem ez nem működött és inkább abszolut utvonallal (tehát /home/baa/mapserver/ ) adtam meg.
Itasca.map fájlban az adatbázisra mutató utvonalat, illetve a tmp könyvtárra mutató útvonalat kell helyesen megadni, valamint a WMS_onlinersource-ot helyesen megadni (például http://localhost/cgi-bin/mapserv&map=/home/baa/mapserver/itasca.map - bár ennek gyakorlati jelentősége nincsen, mert az itasca.map getCapabilities xml-je nagyon sok helyen ír ki Warning-ot). A munkamenetben, egyébként van egy README.TXT érdemes elolvasni, abban részletesen is le vannak írva a teendők! Mostmár működni fog a http://localhost/ , ahol az alap alkalmazást elindítva ezt kell, hogy lássuk: