„SharpMap” változatai közötti eltérés

Innen: GIS Wiki
5. sor: 5. 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 '''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.
+
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
 +
 
 +
 
 +
== '''Funkciók''' ==
 +
 
 +
A SharpMap lehetőséget ad:
 +
 
 +
- GIS adatok kezelésére
 +
 
 +
- Térbeli adatok betöltésére fájlból illetve adatbázisból
 +
 
 +
- Térképek renderelésére
 +
 
 +
 
 +
== '''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 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
  
  

A lap 2016. május 23., 11:27-kori változata

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. 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


Funkciók

A SharpMap lehetőséget ad:

- GIS adatok kezelésére

- Térbeli adatok betöltésére fájlból illetve adatbázisból

- Térképek renderelésére


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 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


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