Vissza az előzőleg látogatott oldalra (nem elérhető funkció)Vissza a tananyag kezdőlapjára (P)Ugrás a tananyag előző oldalára (E)Ugrás a tananyag következő oldalára (V)Fogalom megjelenítés (nem elérhető funkció)Fogalmak listája (nem elérhető funkció)Oldal nyomtatása (nem elérhető funkció)Oldaltérkép megtekintése (D)Keresés az oldalon (nem elérhető funkció)Súgó megtekintése (S)

Open source fejlesztő eszközök Windows környezetben / A SharpMap használata: Shape fájlok egyszerű megjelenítése

Tanulási útmutató

Összefoglalás

Ebben a leckében kódrészletekkel mutatjuk be a SharpMap használatát. Egy shape fájlt fogunk megjeleníteni egy win32-es alkalmazásban. Használni fogjuk a SharpMap térkép megjelenítésre szolgáló MapBox osztályát. Megmutatjuk, hogy hogyan lehet a rétegek színét, megjelenítési stílusát beállítani.

Követelmény

A bemutatott kódrészlet továbbfejlesztésével összetettebb alkalmazást készíteni (más rétegek, más színekkel, stb.).

A SharpMap használata: Shape fájlok egyszerű megjelenítése

Legyen az első feladatunk egy shape fájl megjelenítése, mint minden GIS szoftver alapfunkciója. A SharpMap biztosít számunkra megjelenítést támogató osztályt. Ez a MapBox control, amelyet megtalálhatunk a SharpMap tabon, amelyet az előzőekben hoztunk létre. A megjeleníteni kívánt vektor térkép ebbe a controlba generálódik le, amely egyben meg is jeleníti azt. (Később látni fogjuk, hogy ennek tartalmát átadthatjuk egy PictureBox-nak is, amely szintén képes megmutatni a térképet, a PictureBox Image property-je segítségével).

Első lépésként hozzunk létre egy ”sm1” nevű új projektet (ahogy fentebb láttuk). A design ablakban megjelenő formra tegyünk rá egy MapBox-ot: klikkeljünk duplán a Toolbox-ban lévő SharpMap tab MapBox controljára. Ekkor megjelenik a formon a MapBox1 nevű objektum. A Property ablakban láthatjuk számos tulajdonságát. Ezek közül egyelőre csak a BackColor tulajdonságot állítsuk feketére (9 .ábra).

A kép (nagyobb változata) külön ablakban is megtekinthető.Az "sm1" nevű projekt design ablaka, és a Form1-en lévő MapBox1 nevű objektum9_mapbox1_full.jpg9. ábra. Az "sm1" nevű projekt design ablaka, és a Form1-en lévő MapBox1 nevű objektum

Legyen a programunk működése nagyon egyszerű. Egyetlen képessége azt lesz, hogy a Form1 nevű form betöltésekor jelenítsen meg egy shape fájlt, vagyis a Form1 Load esemény kezelőjében végezzük el a térkép betöltését. Nyissuk meg a kódablakot is írjuk be a következő kódot:

Forráskód
Public Class Form1
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        MapBox1.Map.Size = New Size(1, 1)
        Dim fshp As String = "C:\Users\elek\Documents\mo_shp\megye_region.shp"
        Dim vlay As New SharpMap.Layers.VectorLayer("megye")
        Me.Text = vlay.LayerName
        vlay.DataSource = New SharpMap.Data.Providers.ShapeFile(fshp, False)
        MapBox1.Map.Layers.Add(vlay)
        vlay.Style.EnableOutline = True
        vlay.Style.Outline.Color = Color.Gray
        vlay.Style.Fill = Brushes.White
        MapBox1.Map.ZoomToExtents()
        MapBox1.Refresh()
    End Sub
End Class

Lássuk a kód magyarázatát. A ToolBoxról beemelt MapBox1 példány miatt a SharpMap.Data névtér automatikusan importált, így elérhetők a metódusai és a propertyk.

Állítsuk be a MapBox1.Map.Size tulajdonságát, egyelőre bármire, ami nagyobb nullánál (majd később lesz magyarázat):

Forráskód
MapBox1.Map.Size = New Size(1, 1)

Hozzunk létre egy stringet, amely a megjeleníteni kívánt fájl nevét és path-át tartalmazza (ami jelen esetben be van égetve a kódba):

Forráskód
Dim fshp As String = "C:\Users\elek\Documents\mo_shp\megye_region.shp"

Hozzuk létre a vlay nevű SharpMap.Layers objektumot, amely VectorLayer lesz, „megye” névvel:

Forráskód
Dim vlay As New SharpMap.Layers.VectorLayer("megye")

A form1 fejlécében is jelenítsük meg ezt a nevet:

Forráskód
Me.Text = vlay.LayerName

Meg kell adnunk a rétegünk adatforrását is, amely sokféle lehet, jelen esetben ez egy shape fájl lesz:

Forráskód
vlay.DataSource = New SharpMap.Data.Providers.ShapeFile(fshp, False)

Amint látható Data providers paraméterlistáján adjuk át a stringet (fshp), ami a fájl elérhetőségeit tartalmazza. Amásodik paraméter, ami boolean típusú arra utal, hogy van-e térbeli indexelés vagy sem. Ha False, akkor nincs, de ebben az esetben, nagy adatállományokra lassúvá válhat a megjelenítés. True esetében lesz térbeli indexelés, ami az első megjelenítéskor egy kis időt vesz igénybe, viszont a további megjelenítéskor gyorsabb lesz a folyamat.

Adjuk hozzá a rétegünket a MapBox1.Map.Layers kollekcióhoz (akár többet is hozzáadhatunk):

Forráskód
MapBox1.Map.Layers.Add(vlay)

Állítsuk be a megjelenítés stílusára vonatkozó paramétereket , amelyek mibenléte kitalálható a nevükből:

Forráskód
        vlay.Style.EnableOutline = True
        vlay.Style.Outline.Color = Color.Gray
        vlay.Style.Fill = Brushes.White

Végül be kell állítanunk a viewport sarkait a térképünk térbeli kiterjedésének megfelelő értékre. Erre külön eljárása van a MapBox1.Map-nek. A MapBox1 frissítésével jelenik meg a tényleges térkép (10. ábra):

Forráskód
        MapBox1.Map.ZoomToExtents()
        MapBox1.Refresh()
A kép (nagyobb változata) külön ablakban is megtekinthető.A "megye" nevű shape fájlt megjelenítő programablak10_megye_full.jpg10. ábra. A "megye" nevű shape fájlt megjelenítő programablak

Vegyünk fel még egy shape fájl a megjelenítendő rétegek közé, amely legyen a magyarországi települések belterület határ poligonja, „belter” néven.

Forráskód
        Dim fshp2 As String = "C:\Users\elek\Documents\mo_shp\belthat_region.shp"
        Dim vlay2 As New SharpMap.Layers.VectorLayer("belter")
        vlay2.DataSource = New SharpMap.Data.Providers.ShapeFile(fshp2, False)
        MapBox1.Map.Layers.Add(vlay2)
        Me.Text = vlay.LayerName & ", " & vlay2.LayerName
        vlay2.Style.EnableOutline = True
        vlay2.Style.Outline.Color = Color.DarkGray
        vlay2.Style.Fill = Brushes.LightGray

Jelen esetben tehát két vektoros réteg van a MapBox1.Map.Layers gyűjteményben. A vlay2 stílusokat is beállítottuk a listán látható módon. Végül pedig a form fejlécébe (a form1 text propertyébe, egy vesszővel összekapcsolva feltettük a két rétegnevet. Az eredmény a 11. ábrán látható.

A kép (nagyobb változata) külön ablakban is megtekinthető.A "megye" és a "belter" nevű rétegek egy MapBox ablakban11_megye_belter_full.jpg11. ábra. A "megye" és a "belter" nevű rétegek egy MapBox ablakban

Vissza a tartalomjegyzékhez

Új Széchenyi terv
A projekt az Európai Unió támogatásával, az Európai Szociális Alap társfinanszirozásával valósul meg.

A Társadalominformatika: moduláris tananyagok, interdiszciplináris tartalom- és tudásmenedzsment rendszerek fejlesztése az Európai Unió támogatásával, az Európai Szociális Alap társfinanszírozásával, az ELTE TÁMOP 4.1.2.A/1-11/1-2011-0056 projekt keretében valósult meg.
A tananyag elkészítéséhez az ELTESCORM keretrendszert használtuk.