„SharpMap” változatai közötti eltérés
24. sor: | 24. sor: | ||
SharpMap.Extensions - további bővítménzeket tartalmazó komponens | SharpMap.Extensions - további bővítménzeket tartalmazó komponens | ||
− | A SharpMap.Extensions olyan bővítményeket ad, amelyekkel lehetőség van Oracle,SpatiaLite (SQLite) illetve PostGIS (PostgreSQL) adatbázis használatára. Az adatbázisok összeköthetőek az alkalmazással, így lehetőség lesz térbeli adatok tárolására, betöltésére ezekből. Ezenfelül támogatja az OGR és GDAL formátumokat, előbbi egy vektor, utóbbi pedig egy raszter kép formátum. | + | A SharpMap.Extensions olyan bővítményeket ad, amelyekkel lehetőség van '''Oracle''','''SpatiaLite (SQLite)''' illetve '''PostGIS (PostgreSQL)''' adatbázis használatára. Az adatbázisok összeköthetőek az alkalmazással, így lehetőség lesz térbeli adatok tárolására, betöltésére ezekből. Ezenfelül támogatja az '''OGR''' és '''GDAL''' formátumokat, előbbi egy vektor, utóbbi pedig egy raszter kép formátum. |
== '''Telepítés''' == | == '''Telepítés''' == | ||
− | A SharpMap Downloads fülére kattintva megjelennek a letölthető csomagok. Először töltsük le a SharpMap (Core+UI) nevű alapcsomagot. Érdemes lehet még letölteni a SharpMap.Extensions kiegészítő csomagot is, illetve webes alkalmazás vagy Oracle adatbázis használata esetén a SharpMap.Web és SharpMap.Data.Providers.OracleSpatial csomagokat. A letöltött .zip fájlok tartalmát tároljuk egy tetszőleges helyen. | + | A SharpMap '''Downloads''' fülére kattintva megjelennek a letölthető csomagok. Először töltsük le a '''SharpMap (Core+UI)''' nevű alapcsomagot. Érdemes lehet még letölteni a '''SharpMap.Extensions''' kiegészítő csomagot is, illetve '''webes alkalmazás''' vagy '''Oracle''' adatbázis használata esetén a '''SharpMap.Web és SharpMap.Data.Providers.OracleSpatial''' csomagokat. A letöltött .zip fájlok tartalmát tároljuk egy tetszőleges helyen. |
A fájlok kicsomagolásával véget is ért a telepítés. A csomagok használatához a VisualStudio projektben referenciaként fel kell venni a fejlesztéshez használni kívánt dll-eket. | A fájlok kicsomagolásával véget is ért a telepítés. A csomagok használatához a VisualStudio projektben referenciaként fel kell venni a fejlesztéshez használni kívánt dll-eket. | ||
45. sor: | 45. sor: | ||
- SharpMap osztályok felvétele a referenciák közé: | - SharpMap osztályok felvétele a referenciák közé: | ||
− | - VisualStudio főmenüjében Project -> Add reference, itt a Browse fül alatt keressük meg azt a helyet, ahová a SharpMap zip fájlt kicsomagoltuk. | + | - VisualStudio főmenüjében '''Project -> Add reference''', itt a '''Browse''' fül alatt keressük meg azt a helyet, ahová a SharpMap zip fájlt kicsomagoltuk. |
- Válasszuk ki a számunkra szükséges dll fájlokat | - Válasszuk ki a számunkra szükséges dll fájlokat | ||
55. sor: | 55. sor: | ||
=== Vezérlők hozzáadása a Toolbox-hoz: === | === Vezérlők hozzáadása a Toolbox-hoz: === | ||
− | - Adjunk hozzá egy új tabot a Toolbox-hoz. Toolbox -> jobb klikk -> Add Tab, az új tab neve legyen SharpMap | + | - Adjunk hozzá egy új tabot a Toolbox-hoz. '''Toolbox -> jobb klikk -> Add Tab''', az új tab neve legyen SharpMap |
− | - Ebbe a csoportba rakjuk bele a SharpMap vezérlőit a következő módon: Jobb klikk a csoportra -> Choose Items… -> dll fájlok kiválasztása (csak azokat a dll fájlokat tudjuk kiválasztani, amik tartalmaznak grafikus vezérlőket) | + | - Ebbe a csoportba rakjuk bele a SharpMap vezérlőit a következő módon: '''Jobb klikk a csoportra -> Choose Items… -> dll fájlok kiválasztása''' (csak azokat a dll fájlokat tudjuk kiválasztani, amik tartalmaznak grafikus vezérlőket) |
86. sor: | 86. sor: | ||
=== Vektor rétegek === | === Vektor rétegek === | ||
− | Vektor rétegeket a SharpMap.Layers.VectorLayer nevű objektummal tudunk létrehozni. A rétegen megjeleníteni kívánt térbeli adatokat pedig a SharpMap.Data.Providers nevű függvény segítségével tudjuk betölteni. Pl.: egy shape fájlból töltjük be az adatokat. | + | Vektor rétegeket a '''SharpMap.Layers.VectorLayer''' nevű objektummal tudunk létrehozni. A rétegen megjeleníteni kívánt térbeli adatokat pedig a '''SharpMap.Data.Providers''' nevű függvény segítségével tudjuk betölteni. Pl.: egy shape fájlból töltjük be az adatokat. |
SharpMap.Layers.VectorLayer vlay = new SharpMap.Layers.VectorLayer("States"); | SharpMap.Layers.VectorLayer vlay = new SharpMap.Layers.VectorLayer("States"); | ||
94. sor: | 94. sor: | ||
=== WMS rétegek === | === WMS rétegek === | ||
− | Lehetőségünk van WMS szerverről betölteni az adatokat a rétegünkre. Ezt a SharpMap.Layers.WmsLayer használatával tudjuk megtenni. | + | Lehetőségünk van '''WMS szerverről''' betölteni az adatokat a rétegünkre. Ezt a '''SharpMap.Layers.WmsLayer''' használatával tudjuk megtenni. |
SharpMap.Layers.WmsLayer wmsL = new SharpMap.Layers.WmsLayer("US Cities", "http://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer"); | SharpMap.Layers.WmsLayer wmsL = new SharpMap.Layers.WmsLayer("US Cities", "http://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer"); | ||
112. sor: | 112. sor: | ||
=== Térkép stílusok === | === Térkép stílusok === | ||
− | Ahogy fentebb láthattuk,lehetőségünk van vektor rétegek létrehozására. Ezekhez a rétegekhez hozzárendelhetünk stílusokat, amelyekkel a térképünket tudjuk szinezni. Tegyük fel, hogy már van egy vektor rétegünk (vlay), amit egy shape fájlból töltünk be. A SharpMap.Styles.VectorStyle-al tudunk új stílusokat létrehozni. Az objektum Fill metódusával tudjuk kitölteni a színezni kívánt objektumot a térképen mégpedig a System.Drawing.SolidBrush segítségével. | + | Ahogy fentebb láthattuk,lehetőségünk van vektor rétegek létrehozására. Ezekhez a rétegekhez hozzárendelhetünk stílusokat, amelyekkel a térképünket tudjuk szinezni. Tegyük fel, hogy már van egy vektor rétegünk '''(vlay)''', amit egy shape fájlból töltünk be. A '''SharpMap.Styles.VectorStyle'''-al tudunk új stílusokat létrehozni. Az objektum '''Fill''' metódusával tudjuk kitölteni a színezni kívánt objektumot a térképen mégpedig a '''System.Drawing.SolidBrush''' segítségével. |
− | Egy lehetséges példa a megvalósításra, ahol a területet | + | Egy lehetséges példa a megvalósításra, ahol a területet szinezzük: |
SharpMap.Styles.VectorStyle landStyle = new SharpMap.Styles.VectorStyle(); | SharpMap.Styles.VectorStyle landStyle = new SharpMap.Styles.VectorStyle(); | ||
124. sor: | 124. sor: | ||
waterStyle.Fill = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(198,198,255)); | waterStyle.Fill = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(198,198,255)); | ||
− | A stílusokat lehetőségünk van egy szótár adatszerkezetben eltárolni(Dictionary). | + | A stílusokat lehetőségünk van egy szótár adatszerkezetben eltárolni'''(Dictionary)'''. |
Dictionary<string, SharpMap.Styles.IStyle> styles = new Dictionary<string,SharpMap.Styles.IStyle>(); | Dictionary<string, SharpMap.Styles.IStyle> styles = new Dictionary<string,SharpMap.Styles.IStyle>(); | ||
130. sor: | 130. sor: | ||
styles.Add("water", waterStyle); | styles.Add("water", waterStyle); | ||
− | Végül a stílusokat úgynevezett ''Theme''-ként tudjuk hozzáadni az előzőleg elkészített vlay nevű vektor rétegünkhöz, ehhez a SharpMap.Rendering.Thematics névterében megtalálható UniqueValuesTheme metódust használjuk. | + | Végül a stílusokat úgynevezett '''Theme'''-ként tudjuk hozzáadni az előzőleg elkészített vlay nevű vektor rétegünkhöz, ehhez a '''SharpMap.Rendering.Thematics''' névterében megtalálható '''UniqueValuesTheme''' metódust használjuk. |
vlay.Theme = new SharpMap.Rendering.Thematics.UniqueValuesTheme<string>("class", styles, landStyle); | vlay.Theme = new SharpMap.Rendering.Thematics.UniqueValuesTheme<string>("class", styles, landStyle); | ||
137. sor: | 137. sor: | ||
=== Egyedi vezérlők === | === Egyedi vezérlők === | ||
− | A SharpMap-ben megtalálható MapBox biztosít számunkra néhány egyedi eseményt azokon az eseményeken kívül amiket a System.Windows.Forms.Control névtérből származtat. Ezekre az egyedi eseményekre tudunk saját eseménykezelőket írni. A SharpMap honlapján megtalálható tutorial-ban kapunk egy alap osztályt, amely segítségünkre lehet egy saját Tool megírásához. Ezenfelül kapunk egy minta példát egy ilyen Tool megvalósítsára. | + | A SharpMap-ben megtalálható '''MapBox''' biztosít számunkra néhány egyedi eseményt azokon az eseményeken kívül amiket a '''System.Windows.Forms.Control''' névtérből származtat. Ezekre az egyedi eseményekre tudunk saját eseménykezelőket írni. A SharpMap honlapján megtalálható tutorial-ban kapunk egy alap osztályt, amely segítségünkre lehet egy saját Tool megírásához. Ezenfelül kapunk egy minta példát egy ilyen Tool megvalósítsára. |
A tutorial, az alap osztály, a minta Tool és a MapBox által nyújtott események/eseménykezelők elérhetőek itt: http://sharpmap.codeplex.com/wikipage?title=Tutorial%20-%20Example%205%3a%20Create%20a%20custom%20tool%20for%20the%20MapBox%20control&referringTitle=SharpMap%20Tutorial | A tutorial, az alap osztály, a minta Tool és a MapBox által nyújtott események/eseménykezelők elérhetőek itt: http://sharpmap.codeplex.com/wikipage?title=Tutorial%20-%20Example%205%3a%20Create%20a%20custom%20tool%20for%20the%20MapBox%20control&referringTitle=SharpMap%20Tutorial | ||
147. sor: | 147. sor: | ||
== '''Egyszerű példaprogram''' == | == '''Egyszerű példaprogram''' == | ||
− | A shape fájlok megjelenítése minden GIS szoftver alapfunkciója. A SharpMap is biztosít egy osztályt ezek megjelenítésére. Ez a MapBox osztály, amelyet megtalálhatunk a SharpMap tabon, amelyet az előzőleg készítettünk. A megjelenítendő vektor térkép ebbe az osztályba fog legenerálódni és ez az osztály fogja megjeleníteni nekünk. Ennek a tartalma egyébként egy PictureBox-ban is megjeleníthető a az Image property használatával. | + | A shape fájlok megjelenítése minden GIS szoftver alapfunkciója. A SharpMap is biztosít egy osztályt ezek megjelenítésére. Ez a '''MapBox''' osztály, amelyet megtalálhatunk a SharpMap tabon, amelyet az előzőleg készítettünk. A megjelenítendő vektor térkép ebbe az osztályba fog legenerálódni és ez az osztály fogja megjeleníteni nekünk. Ennek a tartalma egyébként egy '''PictureBox'''-ban is megjeleníthető a az '''Image''' property használatával. |
Első lépésként hozzunk létre egy ”Demo1” nevű új projektet. | Első lépésként hozzunk létre egy ”Demo1” nevű új projektet. | ||
176. sor: | 176. sor: | ||
Nézzük meg mit jelentenek az egyes sorok a kódban. | Nézzük meg mit jelentenek az egyes sorok a kódban. | ||
− | Hozzuk létre a countriesLayer nevű SharpMap.Layers objektumot, amely VectorLayer lesz, „megye” névvel. Ezenkívül meg kell adnunk a rétegünk forrását, amely sokféle lehet, jelen esetben egy shape fájl. Argumentumként adjuk meg a megjeleníteni kívánt fájl nevét és elérési útját. Végül adjuk hozzá a réteget a _sharMap.Layers kollekcióhoz. | + | Hozzuk létre a countriesLayer nevű '''SharpMap.Layers''' objektumot, amely '''VectorLayer''' lesz, „megye” névvel. Ezenkívül meg kell adnunk a rétegünk forrását, amely sokféle lehet, jelen esetben egy shape fájl. Argumentumként adjuk meg a megjeleníteni kívánt fájl nevét és elérési útját. Végül adjuk hozzá a réteget a '''_sharMap.Layers''' kollekcióhoz. |
//--> countriesLayer réteg elkészítése a shape fájlból | //--> countriesLayer réteg elkészítése a shape fájlból | ||
206. sor: | 206. sor: | ||
== '''Egyszerű példaprogram: Térkép mozgatás''' == | == '''Egyszerű példaprogram: Térkép mozgatás''' == | ||
− | Ebben a programban az előző példát fejlesztjük tovább. A térképet kicsinyítjük, nagyítjuk és mozgatjuk. A mozgatásokat a Formra elhelyezett gombok segítségével fogjuk irányítani. Négy funkciót fogunk megvalósítani: Zoom in (nagyítás), Zoom out (kicsinyítés), Zoom Full (zoom out a teljes térképi tartalomra) és Pan (a kurzor klikkelés helyére teszi a viewport középpontját. | + | Ebben a programban az előző példát fejlesztjük tovább. A térképet kicsinyítjük, nagyítjuk és mozgatjuk. A mozgatásokat a Formra elhelyezett gombok segítségével fogjuk irányítani. Négy funkciót fogunk megvalósítani: '''Zoom in''' (nagyítás), '''Zoom out''' (kicsinyítés), '''Zoom Full''' (zoom out a teljes térképi tartalomra) és Pan (a kurzor klikkelés helyére teszi a viewport középpontját. |
A program C# kódja: | A program C# kódja: | ||
299. sor: | 299. sor: | ||
== '''Egyszerű példaprogram: Térkép mozgatás webes alkalmazásban''' == | == '''Egyszerű példaprogram: Térkép mozgatás webes alkalmazásban''' == | ||
− | Az előző példaprogramhoz nagyon hasonló webes térkép alkalmazás van megvalósítva ASP.NET 2.0 és SharpMap használatával. | + | Az előző példaprogramhoz nagyon hasonló webes térkép alkalmazás van megvalósítva '''ASP.NET 2.0''' és '''SharpMap''' használatával. |
A leírás, a kódrészletek és a teljes kód letölthető ezen a linken: http://www.codeproject.com/Articles/12457/Creating-an-Interactive-Map-in-ASP-NET-Using-S | A leírás, a kódrészletek és a teljes kód letölthető ezen a linken: http://www.codeproject.com/Articles/12457/Creating-an-Interactive-Map-in-ASP-NET-Using-S |
A lap 2016. május 23., 15:47-kori változata
Tartalomjegyzék
Bevezetés
A nyílt forráskódú térinformatikai fejlesztő eszközök megjelentek Windows operációs rendszer környezetben is. Windows környezetben is jelentős igény van szabad szoftverekre, szoftver komponensekre. Tekintettel a Windows elterjedtségére, térinformatikai programkönyvtárak létrehozásával nagy létszámú fejlesztő közösségek munkáját segítik az effajta eszközök. A Windows világban is többféle térinformatikai könyvtár létezik, amelyek win32-es és webes alkalmazások fejlesztésére alkalmasak. Egyelőre két fő fejlesztés vonal létezik. Az egyik a SharpMap névre hallgató könyvtár, a másik a dotSpatial. Mindkét csomag alkalmas arra, hogy VisualStudio.net-ben fejlesztett alkalmazásokban is felhasználhassuk. Referenciába állításuk esetén névtereik elérhetők, osztályaik a VisualStudio.net-ben elérhető nyelvekben felhasználhatók.
A SharpMap egy nyílt forráskódú térinformatikai programkönyvtár, amely alkalmas win32-es és webes alkalmazások fejlesztésére egyaránt. A SharpMap alkalmas arra, hogy VisualStudio-ban fejlesztett alkalmazásokban is felhasználhassuk. A könyvtár motorja C#-ban íródott és a .Net 4.0 keretrendszeren alapszik. Lehetővé teszi térképek megjelenítését, térbeli adatok és még sok más GIS adat kezelését.
A SharpMap-et a következő linken érhetjük el: http://sharpmap.codeplex.com/ . Innen letölthető a legfrissebb verzió, dokumentáció, útmutató, mintapéldák és egyéb hasznos adatok.
A Downloads fülre kattintva letölthetjük az alapcsomagot, de lehetőségünk van a csomag bővítményeit is letölteni. SharpMap(Core+UI) és SharpMap.Extensions innen: http://sharpmap.codeplex.com/releases/view/116326
A Documentation fül alatt találhatunk némi leírást illetve a How to... linken hozzáférhetünk példaprogramokhoz és néhány rövid leíráshoz: http://sharpmap.codeplex.com/wikipage?title=How%20to...&referringTitle=Documentation
A SharpMap Tutorial linken egy kis betekintést kaphatunk a SharpMap lehetőségeiról: http://sharpmap.codeplex.com/wikipage?title=SharpMap%20Tutorial&referringTitle=Documentation
Komponensek
SharpMap - A csomag motorja
SharpMap.UI - WinForms UI vezérlőket tartalmazó komponens
SharpMap.Web - Webes alkalmazások, webszerverhez szükséges funkciókat tartalmaz
SharpMap.Extensions - további bővítménzeket tartalmazó komponens
A SharpMap.Extensions olyan bővítményeket ad, amelyekkel lehetőség van Oracle,SpatiaLite (SQLite) illetve PostGIS (PostgreSQL) adatbázis használatára. Az adatbázisok összeköthetőek az alkalmazással, így lehetőség lesz térbeli adatok tárolására, betöltésére ezekből. Ezenfelül támogatja az OGR és GDAL formátumokat, előbbi egy vektor, utóbbi pedig egy raszter kép formátum.
Telepítés
A SharpMap Downloads fülére kattintva megjelennek a letölthető csomagok. Először töltsük le a SharpMap (Core+UI) nevű alapcsomagot. Érdemes lehet még letölteni a SharpMap.Extensions kiegészítő csomagot is, illetve webes alkalmazás vagy Oracle adatbázis használata esetén a SharpMap.Web és SharpMap.Data.Providers.OracleSpatial csomagokat. A letöltött .zip fájlok tartalmát tároljuk egy tetszőleges helyen.
A fájlok kicsomagolásával véget is ért a telepítés. A csomagok használatához a VisualStudio projektben referenciaként fel kell venni a fejlesztéshez használni kívánt dll-eket.
Használat
SharpMap felvétele a referenciák közé:
- Indítsuk el a VisualStudio-t
- Hozzunk létre egy új projektet (pl. Windows Forms Application)
- SharpMap osztályok felvétele a referenciák közé:
- VisualStudio főmenüjében Project -> Add reference, itt a Browse fül alatt keressük meg azt a helyet, ahová a SharpMap zip fájlt kicsomagoltuk.
- Válasszuk ki a számunkra szükséges dll fájlokat
Így már importálhatóak az osztályok, ha a kódból szeretnénk példányosítani őket. Viszont a designer még nem tartalmazza azokat a vezérlőket, amelyekre szükségünk lehet a megjelenítésnél.
Vezérlők hozzáadása a Toolbox-hoz:
- Adjunk hozzá egy új tabot a Toolbox-hoz. Toolbox -> jobb klikk -> Add Tab, az új tab neve legyen SharpMap
- Ebbe a csoportba rakjuk bele a SharpMap vezérlőit a következő módon: Jobb klikk a csoportra -> Choose Items… -> dll fájlok kiválasztása (csak azokat a dll fájlokat tudjuk kiválasztani, amik tartalmaznak grafikus vezérlőket)
Ezzel megvannak a legfontosabb kezdő lépések. A SharpMap importálható és elérhetőek a grafikus vezérlői is.
Megjegyzés: A SharpMap dll fájlok elérési útja megváltozik, akkor a VisualStudio nem fogja őket megtalálni. Ha ilyen történik, a Solution Explorer ablakban a projektünk Reference részét lenyitva kiválasztjuk a SharpMap adott állományát és a Properties-ben módosítjuk a path-ot a megváltozott elérési útra.
Funkciók
Főbb funkciók
A SharpMap főbb funkciói lehetőséget adnak:
- GIS adatok kezelésére
- Térbeli adatok betöltésére adatbázisból. Pl: Oracle, PostGIS, SpatiaLite
- Térbeli adatok betöltése shape fájlból, WMS-ről.
- Térképek renderelésére
- Rétegek használata adatok megjelenítésére
Vektor rétegek
Vektor rétegeket a SharpMap.Layers.VectorLayer nevű objektummal tudunk létrehozni. A rétegen megjeleníteni kívánt térbeli adatokat pedig a SharpMap.Data.Providers nevű függvény segítségével tudjuk betölteni. Pl.: egy shape fájlból töltjük be az adatokat.
SharpMap.Layers.VectorLayer vlay = new SharpMap.Layers.VectorLayer("States"); SharpMap.Data.Providers.ShapeFile("path_to_data\\states_ugl.shp", true);
WMS rétegek
Lehetőségünk van WMS szerverről betölteni az adatokat a rétegünkre. Ezt a SharpMap.Layers.WmsLayer használatával tudjuk megtenni.
SharpMap.Layers.WmsLayer wmsL = new SharpMap.Layers.WmsLayer("US Cities", "http://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer");
WMS rétegnél be kell még állítanunk a következő paramétereket.
//PNG formátum. wmsL.SetImageFormat("image/png"); //Verziószám 1.1.0 wmsL.Version = "1.1.0"; //Réteg hozzáadása wmsL.AddLayer("Cities"); //Vetületi rendszer azonosítója (SRID) wmsL.SRID = 4326;
Térkép stílusok
Ahogy fentebb láthattuk,lehetőségünk van vektor rétegek létrehozására. Ezekhez a rétegekhez hozzárendelhetünk stílusokat, amelyekkel a térképünket tudjuk szinezni. Tegyük fel, hogy már van egy vektor rétegünk (vlay), amit egy shape fájlból töltünk be. A SharpMap.Styles.VectorStyle-al tudunk új stílusokat létrehozni. Az objektum Fill metódusával tudjuk kitölteni a színezni kívánt objektumot a térképen mégpedig a System.Drawing.SolidBrush segítségével.
Egy lehetséges példa a megvalósításra, ahol a területet szinezzük:
SharpMap.Styles.VectorStyle landStyle = new SharpMap.Styles.VectorStyle(); landStyle.Fill = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(232, 232, 232));
Egy másik példa a vizek szinezésére:
SharpMap.Styles.VectorStyle waterStyle = new SharpMap.Styles.VectorStyle(); waterStyle.Fill = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(198,198,255));
A stílusokat lehetőségünk van egy szótár adatszerkezetben eltárolni(Dictionary).
Dictionary<string, SharpMap.Styles.IStyle> styles = new Dictionary<string,SharpMap.Styles.IStyle>(); styles.Add("land", landStyle); styles.Add("water", waterStyle);
Végül a stílusokat úgynevezett Theme-ként tudjuk hozzáadni az előzőleg elkészített vlay nevű vektor rétegünkhöz, ehhez a SharpMap.Rendering.Thematics névterében megtalálható UniqueValuesTheme metódust használjuk.
vlay.Theme = new SharpMap.Rendering.Thematics.UniqueValuesTheme<string>("class", styles, landStyle);
Egyedi vezérlők
A SharpMap-ben megtalálható MapBox biztosít számunkra néhány egyedi eseményt azokon az eseményeken kívül amiket a System.Windows.Forms.Control névtérből származtat. Ezekre az egyedi eseményekre tudunk saját eseménykezelőket írni. A SharpMap honlapján megtalálható tutorial-ban kapunk egy alap osztályt, amely segítségünkre lehet egy saját Tool megírásához. Ezenfelül kapunk egy minta példát egy ilyen Tool megvalósítsára.
A tutorial, az alap osztály, a minta Tool és a MapBox által nyújtott események/eseménykezelők elérhetőek itt: http://sharpmap.codeplex.com/wikipage?title=Tutorial%20-%20Example%205%3a%20Create%20a%20custom%20tool%20for%20the%20MapBox%20control&referringTitle=SharpMap%20Tutorial
Megjegyzés: A fent említett funkciók elérhetőek a SharpMap hivatalos honlapján levő SharpMap Tutorial link alatt, itt: http://sharpmap.codeplex.com/wikipage?title=SharpMap%20Tutorial
Egyszerű példaprogram
A shape fájlok megjelenítése minden GIS szoftver alapfunkciója. A SharpMap is biztosít egy osztályt ezek megjelenítésére. Ez a MapBox osztály, amelyet megtalálhatunk a SharpMap tabon, amelyet az előzőleg készítettünk. A megjelenítendő vektor térkép ebbe az osztályba fog legenerálódni és ez az osztály fogja megjeleníteni nekünk. Ennek a tartalma egyébként egy PictureBox-ban is megjeleníthető a az Image property használatával.
Első lépésként hozzunk létre egy ”Demo1” nevű új projektet.
A Design ablakban levő Formra tegyünk rá egy MapBox-ot:
- Dupla klikk a Toolbox-ban lévő SharpMap tab MapBox controljára -> megjelenik a formon a mapBox1 nevű objektum
A Property ablakban a BackColor tulajdonságot állítsuk fehérre.
Ez az egyszerű program egy shape fájl megjelenítését fogja végezni. Ehhez annyit kell tennünk, hogy a Form1 konstruktorában fogjuk elvégezni a megjelenítést. A következő C# kódot másoljuk be a konstruktorba:
//--> countriesLayer réteg elkészítése a shape fájlból SharpMap.Layers.VectorLayer countriesLayer = new SharpMap.Layers.VectorLayer("megye"); countriesLayer.DataSource = new SharpMap.Data.Providers.ShapeFile(@"C:\Users\Bence\Documents\mo_shp\megye_region.shp", true); mapBox1.Map.Layers.Add(countriesLayer); this.Text = countriesLayer.LayerName; //--> réteg stílus paramétereinek beállítása countriesLayer.Style.Fill = Brushes.LightBlue; countriesLayer.Style.EnableOutline = true; countriesLayer.Style.Outline = Pens.DarkBlue; mapBox1.Map.ZoomToExtents(); RefreshMap();
Nézzük meg mit jelentenek az egyes sorok a kódban.
Hozzuk létre a countriesLayer nevű SharpMap.Layers objektumot, amely VectorLayer lesz, „megye” névvel. Ezenkívül meg kell adnunk a rétegünk forrását, amely sokféle lehet, jelen esetben egy shape fájl. Argumentumként adjuk meg a megjeleníteni kívánt fájl nevét és elérési útját. Végül adjuk hozzá a réteget a _sharMap.Layers kollekcióhoz.
//--> countriesLayer réteg elkészítése a shape fájlból SharpMap.Layers.VectorLayer countriesLayer = new SharpMap.Layers.VectorLayer("megye"); countriesLayer.DataSource = new SharpMap.Data.Providers.ShapeFile(@"C:\Users\Bence\Documents\mo_shp\megye_region.shp", true); mapBox1.Map.Layers.Add(countriesLayer);
Megjegyzés: Data providers paraméterlistáján az első paraméter egy string, ami a fájl elérhetőségeit tartalmazza. A má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.
A Form1 fejlécében is jelenítsük meg ezt a nevet
this.Text = countriesLayer.LayerName;
Következő kódsorok a megjelenési stílusra vonatkozó paraméterek.
//--> réteg stílus paramétereinek beállítása countriesLayer.Style.Fill = Brushes.LightBlue; countriesLayer.Style.EnableOutline = true; countriesLayer.Style.Outline = Pens.DarkBlue;
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.
mapBox1.Map.ZoomToExtents(); RefreshMap();
Egyszerű példaprogram: Térkép mozgatás
Ebben a programban az előző példát fejlesztjük tovább. A térképet kicsinyítjük, nagyítjuk és mozgatjuk. A mozgatásokat a Formra elhelyezett gombok segítségével fogjuk irányítani. Négy funkciót fogunk megvalósítani: Zoom in (nagyítás), Zoom out (kicsinyítés), Zoom Full (zoom out a teljes térképi tartalomra) és Pan (a kurzor klikkelés helyére teszi a viewport középpontját.
A program C# kódja:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Demo1 { public partial class Form1 : Form { SharpMap.Map _sharpMap; //--> nagyítási érték beállítása const float ZOOM_FACTOR = 0.3f; //--> a vector réteg neve és a forrásfájl elérési útja const string DATA_NAME = "megye"; const string DATA_PATH = @"C:\Users\Bence\Documents\mo_shp\megye_region.shp"; public Form1() { InitializeComponent(); //--> térkép inicializálása _sharpMap = new SharpMap.Map(new Size(600, 300)); //--> countriesLayer réteg elkészítése a shape fájlból SharpMap.Layers.VectorLayer countriesLayer = new SharpMap.Layers.VectorLayer(DATA_NAME); countriesLayer.DataSource = new SharpMap.Data.Providers.ShapeFile(DATA_PATH, true); _sharpMap.Layers.Add(countriesLayer); //--> réteg stílus paramétereinek beállítása countriesLayer.Style.Fill = Brushes.LightBlue; countriesLayer.Style.EnableOutline = true; countriesLayer.Style.Outline = Pens.DarkBlue; this.Text = countriesLayer.LayerName; _sharpMap.ZoomToExtents(); RefreshMap(); } private void RefreshMap() { //--> Térkép generálása a SharpMap segítségével pictureBox1.Image = _sharpMap.GetMap(); } private void ZoomIn_Click(object sender, EventArgs e) { //--> Nagyítás a Zoom érték megváltoztatásával _sharpMap.Zoom -= _sharpMap.Zoom * ZOOM_FACTOR; RefreshMap(); } private void ZoomOut_Click(object sender, EventArgs e) { //--> Kicsinyítés a Zoom érték megváltoztatásával _sharpMap.Zoom += _sharpMap.Zoom * ZOOM_FACTOR; RefreshMap(); } private void ZoomFull_Click(object sender, EventArgs e) { //--> Eredit térképméret visszaállítása _sharpMap.ZoomToExtents(); RefreshMap(); } private void pictureBox1_Click(object sender, MouseEventArgs e) { //--> Kurzor koordinátájának konvertálása GeoAPI.Geometries.Coordinate p = _sharpMap.ImageToWorld(e.Location); //--> térkép pozicionálása _sharpMap.Center.X = p.X; _sharpMap.Center.Y = p.Y; RefreshMap(); } } }
A Zoom In, Zoom out, Zoom Full feliratú gombokra klikkelve tudjuk változtatni a kép nagyítását. Ezek eseménykezelőjébe kerültek bele a zoom műveletek. Például a Zoom In gombra klikkelve azonnal megtörténik a nagyítás, mégpedig úgy, hogy a kép közepe változatlanul a viewport közepére esik. A kurzor bármely pozíciójában történő klikkelés a viewport elmozdulását jelenti úgy, hogy a klikkelés térképi helye lesz a viewport közepe.
Egyszerű példaprogram: Térkép mozgatás webes alkalmazásban
Az előző példaprogramhoz nagyon hasonló webes térkép alkalmazás van megvalósítva ASP.NET 2.0 és SharpMap használatával.
A leírás, a kódrészletek és a teljes kód letölthető ezen a linken: http://www.codeproject.com/Articles/12457/Creating-an-Interactive-Map-in-ASP-NET-Using-S
Hivatkozások
SharpMap hivatalos honlap: http://sharpmap.codeplex.com/
SharpMap további Tutorialok: http://sharpmap.codeplex.com/wikipage?title=SharpMap%20Tutorial&referringTitle=Documentation
SharpMap leírás további példaprogramokkal (VisualBasic, C#): http://tarsadalominformatika.elte.hu/tananyagok/opensourcewin/index.html
SharpMap Tutorial (C#): http://spatialhorizons.com/2007/10/14/using-sharpmap-1/
SharpMap Tutorial (ASP.NET 2.0): http://www.codeproject.com/Articles/12457/Creating-an-Interactive-Map-in-ASP-NET-Using-S