„SharpMap” változatai közötti eltérés
4. sor: | 4. sor: | ||
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 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. | |
+ | |||
+ | - 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. | ||
13. sor: | 15. sor: | ||
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. | ||
+ | |||
'''SharpMap felvétele a referenciák közé:''' | '''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. | Í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:''' | '''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. | 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.'' | '''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.'' | ||
41. sor: | 53. sor: | ||
A Design ablakban levő Formra tegyünk rá egy MapBox-ot: | 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. | A Property ablakban a BackColor tulajdonságot állítsuk fehérre. | ||
47. sor: | 60. sor: | ||
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: | 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"); | 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); | countriesLayer.DataSource = new SharpMap.Data.Providers.ShapeFile(@"C:\Users\Bence\Documents\mo_shp\megye_region.shp", true); | ||
54. sor: | 67. sor: | ||
this.Text = countriesLayer.LayerName; | this.Text = countriesLayer.LayerName; | ||
− | //--> | + | //--> réteg stílus paramétereinek beállítása |
countriesLayer.Style.Fill = Brushes.LightBlue; | countriesLayer.Style.Fill = Brushes.LightBlue; | ||
countriesLayer.Style.EnableOutline = true; | countriesLayer.Style.EnableOutline = true; | ||
66. sor: | 79. sor: | ||
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 |
SharpMap.Layers.VectorLayer countriesLayer = new SharpMap.Layers.VectorLayer("megye"); | 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); | countriesLayer.DataSource = new SharpMap.Data.Providers.ShapeFile(@"C:\Users\Bence\Documents\mo_shp\megye_region.shp", true); | ||
79. sor: | 92. sor: | ||
Következő kódsorok a megjelenési stílusra vonatkozó paraméterek. | 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.Fill = Brushes.LightBlue; | ||
countriesLayer.Style.EnableOutline = true; | countriesLayer.Style.EnableOutline = true; | ||
111. sor: | 124. sor: | ||
{ | { | ||
SharpMap.Map _sharpMap; | SharpMap.Map _sharpMap; | ||
− | //--> | + | //--> nagyítási érték beállítása |
const float ZOOM_FACTOR = 0.3f; | 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_NAME = "megye"; | ||
const string DATA_PATH = @"C:\Users\Bence\Documents\mo_shp\megye_region.shp"; | const string DATA_PATH = @"C:\Users\Bence\Documents\mo_shp\megye_region.shp"; | ||
121. sor: | 134. sor: | ||
InitializeComponent(); | InitializeComponent(); | ||
− | //--> | + | //--> térkép inicializálása |
_sharpMap = new SharpMap.Map(new Size(600, 300)); | _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); | SharpMap.Layers.VectorLayer countriesLayer = new SharpMap.Layers.VectorLayer(DATA_NAME); | ||
countriesLayer.DataSource = new SharpMap.Data.Providers.ShapeFile(DATA_PATH, true); | countriesLayer.DataSource = new SharpMap.Data.Providers.ShapeFile(DATA_PATH, true); | ||
_sharpMap.Layers.Add(countriesLayer); | _sharpMap.Layers.Add(countriesLayer); | ||
− | //--> | + | |
+ | //--> réteg stílus paramétereinek beállítása | ||
countriesLayer.Style.Fill = Brushes.LightBlue; | countriesLayer.Style.Fill = Brushes.LightBlue; | ||
countriesLayer.Style.EnableOutline = true; | countriesLayer.Style.EnableOutline = true; | ||
142. sor: | 156. sor: | ||
private void RefreshMap() | private void RefreshMap() | ||
{ | { | ||
− | //--> | + | //--> Térkép generálása a SharpMap segítségével |
pictureBox1.Image = _sharpMap.GetMap(); | pictureBox1.Image = _sharpMap.GetMap(); | ||
− | |||
} | } | ||
private void ZoomIn_Click(object sender, EventArgs e) | 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; | _sharpMap.Zoom -= _sharpMap.Zoom * ZOOM_FACTOR; | ||
RefreshMap(); | RefreshMap(); | ||
156. sor: | 169. sor: | ||
private void ZoomOut_Click(object sender, EventArgs e) | 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; | _sharpMap.Zoom += _sharpMap.Zoom * ZOOM_FACTOR; | ||
RefreshMap(); | RefreshMap(); | ||
163. sor: | 176. sor: | ||
private void ZoomFull_Click(object sender, EventArgs e) | private void ZoomFull_Click(object sender, EventArgs e) | ||
{ | { | ||
− | //--> | + | //--> Eredit térképméret visszaállítása |
_sharpMap.ZoomToExtents(); | _sharpMap.ZoomToExtents(); | ||
RefreshMap(); | RefreshMap(); | ||
170. sor: | 183. sor: | ||
private void pictureBox1_Click(object sender, MouseEventArgs e) | private void pictureBox1_Click(object sender, MouseEventArgs e) | ||
{ | { | ||
− | //--> | + | //--> Kurzor koordinátájának konvertálása |
GeoAPI.Geometries.Coordinate p = _sharpMap.ImageToWorld(e.Location); | GeoAPI.Geometries.Coordinate p = _sharpMap.ImageToWorld(e.Location); | ||
− | //--> | + | //--> térkép pozicionálása |
_sharpMap.Center.X = p.X; | _sharpMap.Center.X = p.X; | ||
_sharpMap.Center.Y = p.Y; | _sharpMap.Center.Y = p.Y; |
A lap 2016. május 23., 09:35-kori változata
Tartalomjegyzék
Bevezetés
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.
- 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.
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.
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.
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.
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