../../_images/logo_mapserver.png ../../_images/OSGeo_project.png

MapServer gyorstalpaló

A MapServer egy nyílt forráskódú szerver alapú alkalmazás, mely lehetővé teszi raszteres és vektoros térképi adatok publikálását az interneten keresztül, OGC Standards használatával mint például Web Map Service (WMS), Web Feature Service (WFS) és Web Coverage Service (WCS).

MapServer beállítása a MapFile konfigurációs állomány felhasználásával

Megjegyzés

Mit fogunk tanulni ? Ebben a fejezetben megtanuljuk mi a Map fájl és hogyan konfiguráljuk,hogy a MapServer képként szolgáltassa a shape fájljainkat WMS kérések használatával.

Mi az a mapfájl?

A Map fájl <https://mapserver.org/mapfile/index.html>`_ egy konfigurációs fájl, melyet a MapServer a raszter és vektor adatok megjelenítéshez használ. Elsődleges célja, hogy megadja megjelenítendő rétegeket, hogyan érhetők el a szükséges adatok és hogy kell megjeleníteni őket (pl. szín, szimbólum, címke, stb.).

Első Map fájlom létrehozása

  1. Nyisson meg egy szövegszerkesztőt (pl. Applications ‣ Accessories ‣ FeatherPad).

  2. Hozza létre a „mapserver_quickstart.map” fájlt a home könyvtárában: file:/home/user/mapserver_quickstart.map

    Írja bele a következő tartalmat:

    MAP
      NAME "MAPSERVER_QUICKSTART"
      EXTENT -137 29 -53 88
      UNITS DD
      SHAPEPATH "/home/user/data/natural_earth2/"
      SIZE 800 600
    
      IMAGETYPE PNG24
    
      PROJECTION
        "init=epsg:4326"
      END
    
      WEB
        METADATA
          ows_title "MapServer Quickstart"
          ows_enable_request "*"
          ows_srs "EPSG:4326 EPSG:25832 EPSG:25833"
        END
      END
    
      LAYER
        NAME "Countries"
        STATUS ON
        TYPE POLYGON
        DATA "ne_10m_admin_0_countries"
        CLASS
          STYLE
            COLOR 246 241 223
            OUTLINECOLOR 0 0 0
          END
        END
      END
    
    END
    

    Megjegyzés

    A példa a natural earth adatokat használja, melyet telepítettek az OSGeoLive-ra a ~/data/natural_earth2 mappába (ez egy rövidítése ehhez /usr/local/share/data/natural_earth2).

A Map fájlban minden objektum a nevével kezdődik (például MAP) és END zárja le. A Map fájl mindig a MAP objektummal kezdődik és a LAYER objektumok listáját tartalmazza, melyeket a Map fájl képes beolvasni és megjeleníteni. A Map fájlunkban most csak egy réteget adtunk meg.

Vessünk egy pillantást néhány a Map fájlunkban megadott objektumra (és tulajdonságra):

  • EXTENT: megadja az alapértelmezett határoló téglalapot ehhez a konfigurációhoz.

  • LAYER: egy térinformatikai adathalmazhoz megadja a hozzáférést és a megjelenítési tulajdonságokat. Később egy másik réteget is hozzáadunk.

  • SHAPEPATH: a fájl alapú adatok elérési útját állítja be (pl. shape fájl vagy tiff képek).

Ha közelebbről megvizsgáljuk a LAYER-t a Map fájlunkban, láthatjuk, hogy egy csomó tulajdonságot és objektumot is tartalmaz. Többek között:

  • STATUS: megadja, hogy a réteg megjelenítendő (ON), nem rajzolandó (OFF) vagy mindig megjelenítendő (DEFAULT).

  • TYPE: A geometria típus, amit a MapServernek használnia kell az adatok kirajzolásánál. A mi Map fájlunkban az adatokat polygon-ként rajzolja ki.

  • DATA: a téradat fájl amit a réteg használ, ebben az esetben egy shape fájl.

  • CLASS: meghatározza hogyan rajzolja ki a réteget (stílus). Ezzel az elemmel később foglalkozunk részletesebben.

Megjegyzés

A Map fájlban használható objektumok és tulajdonságok teljes listája megtalálható a MapServer dokumentáció oldalon.

Rajzoltassunk egy térképet a MapServer-rel a WMS GetMap kéréssel

Megjegyzés

Mit fogok tanulni? Megtanulja hogy a MapServer-rel a MapFile rétegeiből hogyan készítsen egy képet egy OGC WMS kérésre.

Nyisson meg egy böngésző programot és írja be a következő címet:

http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Countries&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600

Mit jelentenek a fentiek? Ha egyszerűen akarjuk elmondani, ez a Web Map Service (WMS) GetMap kérés, mely azt mondja a MapServernek „használd a következő map fájlt a megadott rétegek png képként megjelenítéséhez, a felhasználó által megadott paraméterek alapján, például képméret, földrajzi kiterjedés, vetület, stb.”. Minden a „&LAYERS=…” paraméterben megadott, a MapFájlban STATUS ON beállítással rendelkező réteg megjelenítése, hozzáadva a STATUS DEFAULT rétegeket. Az eredmény így néz ki:

../../_images/mapserver_map.png

Megjegyzés

A kérés minden paramétere WMS specifikus, kivéve a „?map=/home/user/mapserver_quickstart.map”, mely MapServer specifikus.

Készítsünk térkép képet a MapServerrel a parancssorból

Bár a MapServert webes alkalmazásokhoz készítették, képeket is készíthetők vele a parancssorból. Ez akkor lehet hasznos, ha megismételhető térképet szeretne vagy hibakereséskor.

Nyisson egy terminált (Applications ‣ System Tools ‣ Terminal Emulator) és írja be:

shp2img -m mapserver_quickstart.map -o mymap.png

Ha a parancs sikeresen lefut, láthatja az elkészült térképet file:///home/user/mymap.png.

Egy új réteg hozzáadása a Map fájlhoz egy helyi shape fájl szolgáltatásához

Megjegyzés

Mit fogok tanulni? Meg fogja tanulni egy új réteg objektum definíció hozzáadását a Map fájljához.

Most egy új réteget fogunk hozzáadni a Map fájlunkhoz. A Map fájlban az utolsó END sor elé illessze be a következő réteg konfigurációt:

LAYER
  NAME "Lakes"
  STATUS ON
  TYPE POLYGON
  DATA "ne_10m_lakes"
  CLASS
    STYLE
      COLOR 153 179 204
    END
  END
END

Most 2 réteg definíciónk van a Map fájlunkban. Vegye figyelembe, hogy az éppen hozzáadott réteg „STATUS” tulajdonságát „ON»-ra állítottuk. Ez azt jelenti, hacsak nem adjuk meg a kérésünkben, nem jelenik meg.

Vegyük a korábbi WMS GetMAP kérésünket és adjuk hozzá az új „Lakes” rétegünket az elkészített képhez. Egyszerűen hozzá kell adnunk az új réteg nevét a „LAYERS” tulajdonság listához:

http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Countries,Lakes&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600

A MapServer által készített kép hasonlóan néz ki mint az előző térképünk, eltekintve az új rétegünkből hozzáadott tavaktól:

../../_images/mapserver_lakes.png

Rétegstílus beállítása a Map fájl konfigurációban

Megjegyzés

Mit fogok tanulni? Egy példát lát majd a rétegen belüli elemek stílusának beállítására az adataik alapján.

A Map fájlban a LAYER objektum tetszőleges számú CLASS objektumot tartalmazhat. Ezeket használjuk a téradatokat tartalmazó adatfájl (DATA) elemek stílusának a beállítására. Például, ha közelebbről megnézzük a „ne_10m_lakes” adatfájlt az ogrinfo eszközzel, látni fogjuk a benne lévő geometriát és attribútum definíciókat. Ezeket az attribútum értékeket használhatjuk, hogy az térképi elemeket különböző módon jelenítsük meg több CLASS objektum használatával.

A „ne_10m_lakes” adatállományunkban van egy ScaleRank attribútum, mely a tavak méretéhez kapcsolódik. Ezt használhatjuk, hogy a tavakat különbözőképpen jelenítsük meg. A LAYER objektumhoz egy másik CLASS objektumot adunk az aktuális elé:

LAYER
  NAME "Lakes"
  STATUS ON
  TYPE POLYGON
  DATA "ne_10m_lakes"
  CLASSITEM "ScaleRank"
  CLASS
    EXPRESSION /0|1/
    STYLE
      COLOR 153 179 204
      OUTLINECOLOR 0 0 0
    END
  END
  CLASS
    STYLE
      COLOR 153 179 204
    END
  END
END

Mit csinál az új CLASS objektumunk? Alapvetően azt jelzi a MapServer-nek, hogy ha a „ScaleRank” tulajdonság „0” vagy „1” fekete körvonalat rajzoljon. A CLASS objektumokat mindig fentről lefelé olvassa minden rajzolandó térképi elemre. Ha egy rajzi elem megfelel a megadott „EXPRESSION”-nek az osztályban, akkor ez az osztály határozza meg az elem megjelenését.. Ha az elem nem felel meg egy osztálynak, akkor a következő osztályt ellenőrzi. Ha egy elem nem felel meg egyik osztálynak sem, akkor ez egyáltalán nem jelenik meg kivéve, ha a réteg utolsó osztálya nem tartalmaz „EXPRESSION”-t,mert ilyenkor ez lesz az alapértelmezett megjelenés. A réteg „CLASSITEM” tulajdonsága jelzi a MapServer-nek melyik attribútumot használja, amikor a CLASS objektumban megadott „EXPRESSION”-t kiértékeli.

Ennek az újabb változtatásnak az eredményeképpen a nagy tavakat fekete körvonallal rajzolja ki:

../../_images/mapserver_lakes_scalerank.png

Megjegyzés

Tanuljon többet a MapServer kifejezésekről.

Adatainak publikálása OGC WMS-ként (Web Map Service)

A MapServer különböző OGC szabványokat támogat mint OGC WMS, WFS vagy WCS. Az OGC WMS-el mint egy térkép szolgáltatás tudja az adatait publikálni és a szolgáltatást integrálhatja az asztali térinformatikai szoftverbe pl. QGIS vagy egy web kliensbe pl. OpenLayers vagy Mapbender.

Asztali QGIS használata OGC WMS adatainak betöltésére

  1. Indítsa el a QGIS-t a Geospatial ‣ Desktop GIS ‣ QGIS Desktop-el

  2. Menjen a :menuselection:`Layer –> Add Layer –> Add WMS/WMTS Layer`menüpontra.

  3. Kattintson az Új gombra és adjon meg egy nevet és a szolgáltatás URL-jét

  4. Mentse a beállításokat:

    http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.3.0

Ezután kapcsolódni tud a szolgáltatásához és a szolgáltatás egy vagy több rétegét adja hozzá a QGIS projektjéhez. Ha a 0 ID-vel rendelkező réteget választja, akkor egyszerre betöltheti a szolgáltatás összes rétegét.

../../_images/mapserver_load_wms_to_qgis.png

Mi a következő?

Ez egy egyszerű példa, de sokkal többet tehet. A MapServer projekt honlapja sok forrást tartalmaz az elindulást segítendő. Itt van néhány forrás, amit legközelebb megtekinthet: