MapServer

Innen: GIS Wiki


A MapServer egy népszerű, nyílt forráskódú projekt, aminek a célja, hogy megjelenítsünk térbeli térképeket az interneten keresztül. Néhány főbb jellemzője:

- Támogatja a raszteres, vektoros és adatbázis formátumok megjelenítését (és lekérdezését)

- Különböző operációs rendszereken futtatható (Windows, Linux, Mac OS X, stb)

- Részletes, testreszabható térkép kimenet:

- Címkék; Automatizált, sablonalapú kimenet; TrueType fontok (vektoros betűkészletek); Térképi elemek (scalebar, legend, referenciák)

- Népszerű scriptnyelvek támogatása

- PHP, Python, Perl, Java, .NET

- OGC támogatás:

- WMS: Web Map Service, GIS adatbázisból származó georeferenciával rendelkező térképek internetes továbbítását és megjelenítését teszi lehetővé (a térképi adatokat digitális képpé alakítja)

- WCS: Web Coverage Service, georeferált digitális képek (légifotó, űrfelvétel) internetes továbbítását teszi lehetővé

- WFS: Web Feature Service, georeferenciával rendelkező térbeli adatok (vektoros adatok) internetes továbbítását teszi lehetővé (nem alakítja az adatokat digitális képpé))


Története

A MapServer 1990-ben indult, az UMN (University of Minnesota) által kifejlesztett nyílt forráskódú webes kartográfiai/térinformatikai programcsomag.

Működhet CGI programként (ebben a leírásban erről lesz szó), vagy a MapScript segítségével különböző szerveroldali script nyelvek kiegészítéseként. A program segítségével térképeket állíthatunk elő a legkülönfélébb formátumú raszteres és vektoros geoadatokból, azokon lekérdezéseket hajthatunk végre, stb.

Főbb platformokra elérhető, több változatban is.

Felépítés

Ar.png

Bemeneti paramétere vektoros és raszteres adatformátumú fájl lehet, vagy valamilyen webes szolgáltatás, melyekből számos kimenet állítható elő, mint például: SWF, SVG, PDF, HTML + kép, kép, WMS, WFS, WCS.

A WMS, WFS, WCS segítségével digitális térinformatikai adatokat jeleníthetünk meg:

Input: Tehát bemenethez szükségünk van valamilyen térinformatikai adatra, amelyből térkép készül: egy map fájlra. A map file egy szöveges leírás/konfiguráció a mapserver számára. Tartalmazza a térkép területi adatait, átadja a mapservernek hol vannak az adatok és hol jelenjen meg, továbbá olyan rétegeket definiál, melyek projekciókat, szimbólumokat, leírásokat tartalmaznak. A mapfile-nak .MAP kiterjesztésűnek kell lennie ahhoz hogy a mapserver felismerje Ez határozza meg az objektumok közötti kapcsolatot, hol vannak az adatok amiket a megadott formában ki kell rajzolni.

Ebből jönnek létre a HTML oldalak (MapServer és felhasználó közötti kapcsolatot biztosítja/interfész), amelyek segítségével a megjelenítendő adat/térkép interaktívvá tehető(tallóz, nagyít, lekérdez).

A megjelenített aplikáció 2 forrásból jöhet:

- vagy MapScript ami a CGI mapservertől függetlenül használható és önálló alkalmazás készítésére képes, felruházva a mapservert különböző scriptnyelvek, programozási nyelvek felismerésével

- vagy CGI, ami egy bináris vagy futtatható fájl, amely fogadja a lekérdezéseket és visszatér a megjelenítendő adattal/képekkel. A webszerver cgi-bin/script könyvtárában található.

Használat/Telepítés

Telepítést igényel, az alábbi oldalról kell választanunk egy nekünk szimpatikus programot:

http://mapserver.org/download.html

Windows:

- MS4W – Kezdőknek ajánlott Windows programcsomag a MapTools.org-tól. MS4W egy komplett webszerver/MapServer/MapScript csomag. Tartalmaz MapScript bővítményeket (PHP,C#,Python,Java) és dll fájlokat az SDE-hez (Spatial Database Engine) és Oracle dokumentációt.

- OSGeo4W - Tartalmazza a GDAL/OGR, GRASS, MapServer, OpenEV, uDig és sok más csomagot.

- FWTools - Nyíltforráskódú GIS eszközök gyűjteménye. Térinformatikai adatok létrehozására, módosítására és megjelenítésére alkalmas.

- Gisinternals

Linux:

- DebianGIS – MapServer, PostGIS, GDAL, QGIS és GEOS csomagokat használ.

- Enterprise Linux GIS

- FGS

- OpenSUSE

- UbuntuGIS

Mac OS X:

- Kyng Chaos

Telepítés egyszerű, közben különböző bővítmények/csomagok telepítését is felajánlják a programok. Miután feltelepült, a böngészőben a localhost, vagy 127.0.0.1-es IP címmel tudjuk elérni. Konkrét felhasználói felülete nincsen, az oldalon az alábbi fogad minket (MS4W képek következnek): Alapvető információk az MS4W-ről, bevezetés, dokumentáció, rövid leírás a programról.

Ms0.png


Utána láthatjuk (ha a telepítésnél kiválasztottuk) a különböző csomagokat, melyekhez rövid leírás és/vagy demo program tartozik.

Ms1.png


A böngészőben a következő címet megadva tudunk megjeleníteni egy térképet:

(A map fájl teljes elérési útvonalát adjuk meg!)

http://127.0.0.1/cgi-bin/mapserv.exe?map=C:/Users/user1/Desktop/pelda.map&mode=map

Tehát a szerver CGI programja által létrehozott raszteres térképet/képet fogunk kapni. Ezt nevezik a MapServer map üzemmódjának, amit a link végén található &mode=map paraméter beállításával érhetünk el. Minden paraméter &-el kezdődik, akár több is szerepelhet egymás után.

A MapServer természetesen nem csak az alapértelmezett méretben és kiterjedéssel tudja elkészíteni a térképet. Az URL-t különféle paraméterekkel is kiegészíthetjük.

http://127.0.0.1/cgi-bin/mapserv.exe?map=C:/Users/user1/Desktop/pelda.map&mode=map&mapsize=400+300

A mapsize=400+300 a képméretet 400*300 pixelre állítja.

http://127.0.0.1/cgi-bin/mapserv.exe?map=C:/Users/user1/Desktop/pelda.map&mode=map&mapext=600000+200000+720000+290000

A mapext=600000+200000+720000+290000 pedig egy kisebb részletet rajzol csak meg (a megfelelő koordináták közé esőt).

MapFile

A MapServer lelke tehát a MapFile, amely leírja, hogy a különböző adatforrások tartalmát hogyan ábrázoljuk a térképen.

A Mapfile - ami egyébként egy egyszerű szövegfájl - kiterjesztése .MAP.

A Mapfile egymásba ágyazott objektumokból áll, melyek mindegyike az objektum típusát jelző kulcsszóval kezdődik (pl.: MAP, LAYER), és az END kulcsszóval végződik.

MAP
	NAME "Test"
	STATUS ON
	SIZE 800 600
	IMAGETYPE png
	EXTENT 420000 45000 950000 380000 # terkephatarok (bounds): EOV
	SHAPEPATH "data"
END

A MapFile mindig tartalmaz egy MAP objektumot. Ez leírja a készítendő térkép általános tulajdonságait. Például mint az az előbbi példán is látszik, van neve, egy STATUS tulajdonsága – ami arra szolgál, hogy megjelenjen-e -, mérete, a megjelenítendő kép típusa. Az EXTENT tulajdonsággal megadhatjuk a térbeli kiterjedését a létrehozandó térképnek (tehát hogy melyik koordinátarendszerben értelmezett a térkép, mik a térkép határai. Amennyiben nem jó paramétereketet adunk az EXTENT-nek, nem jelenik meg semmi). A SHAPEPATH-al meghatározhatjuk, hogy hol találhatóak a .SHP kiterjesztésű fájlok, amiket majd később különböző LAYER-ekben felhasználunk. (A példában egy data nevű könyvtár van megadva, de alkönyvtárakat is megadhatunk).

MAP
	NAME "Somogy megye"
	STATUS ON
	SIZE 800 600 # a megjelenitett kep merete
	IMAGETYPE png
	EXTENT 420000 45000 950000 380000 # terkephatarok (bounds): EOV
	SHAPEPATH "data"
  
	LAYER # MEGYE
		NAME "megye"
		TYPE polygon 
		DATA "../megye_v/somogy/somogy.shp"
		#STATUS DEFAULT
		
		CLASS
			NAME "Megye szine"
			STYLE
				COLOR "#FFFF99"				
			END
			STYLE
				OUTLINECOLOR "#FF8000"
				WIDTH 5.0
			END
		END
	END # MEGYE LAYER VEGE
END

Valamint tartalmaz egy vagy több LAYER objektumot, melyek a különböző térképi rétegeket definiálják. A MapServer a fájlt fentről lefelé elemzi, tehát ha több rétegünk is van, akkor a legelsőt rajzolja ki először, aztán szépen sorban a többit. Ezért figyelnünk kell a rétegek sorrendjére, mert ha például először az úthálózatot rajzoltatjuk ki, utána pedig a megyét, akkor semmi nem fog látszódni az utakból.

A példában mindössze egy LAYER látható, aminek külön tulajdonságai vannak. Néhány ezek közül:

- NAME – Egyedi, rövid név a rétegnek. Ha több réteget használunk és OpenLayers segítségével jelenítjük meg a térképet, választhatunk is a különböző rétegek közül, de azokat azonosítani kell – erre szolgál a NAME.

- TYPE – Meghatározza, hogy az adatokat milyen módon kell kirajzolni. Nem kötelező, hogy megegyezzen a shapefile típusával. (Például: egy polygon shapefile-t ki lehet rajzolni pont rétegként is, de egy pont shapefile-t nem lehet polygon rétegként.)

Típusok: diagram, kör, vonal, pont, polygon, raster, query.

A query típus azt jelenti, hogy azon a rétegeken lekérdezéseket hajthatunk végre, de nem rajzolódik ki.

A MapServer nem különbözteti meg a polygon-t és a polyline-t. A COLOR kulcsszót kell használnunk az osztály (CLASS) leírásánál, ha különbséget szeretnénk tenni (a vizuális interpretációnál elsősorban). Ha egy polygont rajzoltatunk ki, akkor az egy telített vonal lesz, míg a polyline esetében adjunk meg egy OUTLINECOLOR-t, ami ugyebár a vonalon kívülre egy más színnel rajzol.

- DATA – Itt kell megadnunk a shapefile pontos helyét, amit az adott LAYER-hez fel kívánunk használni. Amennyiben korábban definiáltuk a SHAPEPATH-ot, nem kötelező kiírni a teljes elérési útvonalat, a MapServer ott fogja keresni, abban a könyvtárban.

- STATUS – A réteg láthatóságának beállítására. Mindig kell lennie egy DEFAULT-nak, ha nincs, akkor a legelső LAYER lesz a default (beállítástól függetlenül). Több réteg esetén figyelni kell a sorrendre!

- CLASS – Egy rétegen belül csak egy osztály lehet, amiben testre szabhatjuk a réteget. Tulajdonságaik nevei magukért beszélnek.

- FILTER – szűrhetünk is a shapefile-hoz tartozó (ha tartozik hozzá) adatbázisban.

A .MAP kiterjesztésű fájlokban a kommenteket a # jellel kell kezdenünk. Sajnos többsoros kommentelésre nincsen lehetőség.

A MapFile által leírt térképet a MapServer CGI programja segítségével hozhatjuk létre.

A MapServer természetesen nem csak az alapértelmezett méretben és kiterjedéssel tudja elkészíteni a térképet. Az URL-t különféle paraméterekkel is kiegészíthetjük (lásd fentebb).

Kezelt fájltípusok:

Vektoros adatoknak 3 fő kategóriája van:

- File-based: Shapefile-ok, Microstation Design Files (DGN), GeoTIFF képek

- Directory-based - ESRI ArcInfo Coverages, US Census TIGER

- Database connections - PostGIS, ESRI ArcSDE, MySQL

Raszteres adatok megjelenítéséhez a GDAL-t használja. Pár népszerűbb fájlkiterjesztés:

- JPEG, BMP, PNG, PDF, GTiff

- R Object Data Store (R) – R Project(link) http://www.r-project.org/

- Továbbiak: http://www.gdal.org/formats_list.html

MapScript

A MapServer bővíthető és testreszabható a MapScripten keresztül. A MapScript olyan sablonok gyűjteménye, mely segítségével különböző scriptnyelvek használhatóak a MapServer működtetéséhez. Tehát egy bizonyos fokig a MapServer nyelvfüggetlen.

Támogatott nyelvek: PHP, Python, Perl, Ruby, Java, .NET, ezenkívül platformfüggetlen (Windows, Linux, Mac OS X, stb.).

Olyan interfészt hoz létre a választott nyelvhez a MapScript, ami tartalmazza a szükséges osztályokat és műveleteket a megjelenítéshez, amit a MapServer feldolgoz és megjelenít. Menet közben, ahogy mozgatjuk a térképet, kiválasztunk egy réteget, elrejtünk egy másikat, a MapScript küldi a lekérdezéseket a szervernek ami válaszol, és újrarajzolja a térképet.

Példa OpenLayers-el történő megjelenítésre

A MapServer által szolgáltatott térképeket általában valamilyen interaktív megjelenítő felület segítségével teszik hozzáférhetővé az interneten. Erre az egyik lehetőség az OpenLayers használata. Amennyiben valamilyen ehhez hasonló keretrendszert használunk a megjelenítéshez, a térképből semmit sem fogunk látni akkor, ha bármilyen hiba van a MapFile-ban, vagy a felhasznált adatokban. Ilyenkor a hibakereséshez érdemes a MapServer map üzemmódját használni, mivel bármilyen hiba esetén az a kép helyett szöveges hibaüzeneteket ad vissza.

<!doctype html>
<html>
	<head>
	<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
	<title>Somogy Megye</title>
	<script src="http://openlayers.org/api/OpenLayers.js"></script>
	<script>
	function init()
	{
		var map = new OpenLayers.Map('map', 
			{
				projection: "EPSG:23700", // terkep vetulet
				maxExtent: new OpenLayers.Bounds(400000,45000,950000,380000), // terkep kiterjedes koordinatak (minx,miny,maxx,maxy)
				maxResolution: "auto",
				minResolution: "auto",
				units: "m"
			}
		);
		
		var wms = new OpenLayers.Layer.WMS( "Somogy megye",
			'http://127.0.0.1/cgi-bin/mapserv.exe?map=C:/Users/user1/Desktop/pelda.map',
			{
				layers: [
					'megye',
					], 
					isBaseLayer: true,
					transparent: false,
				format: 'image/png'
			},
			{ 
				singleTile: true 
			}
		);
		map.addLayer(wms);
		map.zoomToExtent(new OpenLayers.Bounds(700000,46000,400000,150000));
	}
	</script>
	</head>
	<body onload="init()">
	<h1>Somogy Megye</h1>
	<div id="map" style="width:800px;height:600px"></div>
	</body>
</html>

A térképet egy <div> tartalmazza, aminek meg kell adnunk a méretét és az elem azonosítóját is.

Magát a térképet az OpenLayers.js JavaScript könyvtár fogja megjeleníteni, amihez még kell a saját magunk által megírt init() függvény is. Ezt a függvényt a weboldal betöltésekor automatikusan végrehajtja a böngésző, mert a <body> tagben megadtuk, hogy betöltéskor fusson le az init().

A függvényen belül első dolgunk létrehozni egy OpenLayers.Map objektumot, ami a térkép lesz. Ennek az objektumnak (térképnek) a konstruktora két paramétert vár: előszöris annak a <div> elemnek az id-jét, ami majd a térképet tartalmazza; és egy objektumot, amiben kulcs:érték párok írják le a térkép megjelenítését befolyásoló paramétereket. Az EPSG:23700 az EOV kódja.

Ezután létrehozunk egy WMS Layert (OpenLayers.Layer.WMS), ami szintén két paramétert vár: az adott objektum azonosítására szolgáló cimkét és a megjelenítendő fájl (.map) helyét. Több réteget is megadhatunk egy layers tömbön belül, majd beállítjuk a megjelenítendő térkép típusát (image/png). Végül a korábban deklarált OpenLayers.Map objektumhoz hozzáadjuk ezt a layert (ha több különböző rétegünk van, akkor mindet). Tehát ennek az objektumnak több rétege is lehet, és az egyes rétegeknek is több különböző rétege lehet.

Amint hozzáadtuk a réteget, készen is lennénk, mert az egyenlő a megjelenítéssel. Azonban ebben a példában annyival van kiegészítve, hogy közelítsen is rá a megjelenített térképre (map.zoomToExtent).

Fájltípusok

Bemenetként csak a .MAP kiterjesztésű fájlokat tud értelmezni. A MapFile-okon belül több formátumot is tud kezelni (lásd fentebb).

Szerver konfigurációjától függően a kimenet lehet: png, jpeg, gif, tif, pdf, stb.

Felhasználása

- MapsGeek

http://www.mapsgeek.com/

Kartográfiai térképek.

- Biketrip

http://www.biketrip.org/

Egy wiki a biciklizés szerelmeseinek. MapScript által generált térképeket és topológiai információkat használ.

- MN DNR Recreation Compass

http://www.dnr.state.mn.us/maps/compass.html

Egy alkalmazás, mely segít a felhasználóknak választani a pihenési lehetőségek közül Minnesota-ban. Valamint hozzáférést biztosít ezekhez a lehetőségekhez.

- http://www.geus.dk/

Dán nemzetközi adatbázishoz generál lefedettségi térképeket a gáz és olaj lelőhelyek felfedezéséhez.

- http://www.itacasoft.com/

A webes GIS megoldások kereskedelmi és fejlesztési megoldásai MapScript használatával.

- http://www.sailwx.info/shiptrack/shiplocations.phtml

Hajók, hurrikánok és időjárási jelentések követése.

Ingyenes MapServer tárhelyek

- GeoApt

- HostGIS

- HostStage

- HTMLX.com

- MapServerPro

Források

http://mapserver.org/index.html

http://mapserver.org/documentation.html

http://www.osgeo.org/

http://www.maptools.org/ms4w/index.phtml

http://www.gdal.org/