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: Mozgás a térképen

Tanulási útmutató

Összefoglalás

Ebben a részben továbbfejlesztjük az előbbi példát azzal, hogy mozgatjuk, nagyítjuk, kicsinyítjük a térképet.

Követelmény

A példakód önálló továbbfejlesztése

A SharpMap használata: Mozgás a térképen

Ebben a részben továbbfejlesztjük az előbbi példát azzal, hogy mozgatjuk, nagyítjuk-kicsinyítjük a térképet. Ennek érdekében néhány parancs gombot is teszünk a formra, amelyek segítségével fogjuk végezni a mozgásokat. Négy funkciót fogunk megvalósítani: Zoom in (nagyítás), Zoom out (kicsinyítés), Zoom to full extent (zoom out a teljes térképi tartalomra) és Pan (a kurzor klikkelés helyére teszi a viewport középpontját. A 12. ábrán látható a user interface, amely parancs gombokból és egy PictureBoxból áll.

A következőkben lássuk a program C# kódját:

Forráskód
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace SharpMapDemo
{
    public partial class frmMap : Form
    {
        //--> define the SharpMap object
        SharpMap.Map _sharpMap;  
        //--> set the zoom factor percentage
        const float ZOOM_FACTOR = 0.3f;
        //--> define the data name and source
        const string DATA_NAME = "belterület határ";
        const string DATA_PATH = @"C:\Users\elek\Documents\mo_shp\belthat_region.shp";
        public frmMap()
        {
            InitializeComponent();
            
            //--> initialize the map
            _sharpMap = new SharpMap.Map(new Size(600, 300));
          
            //--> create the countries layer from the shapefile
            SharpMap.Layers.VectorLayer countriesLayer = new SharpMap.Layers.VectorLayer(DATA_NAME);
            countriesLayer.DataSource = new SharpMap.Data.Providers.ShapeFile(DATA_PATH);
            _sharpMap.Layers.Add(countriesLayer);
            //--> define the layer's style
            countriesLayer.Style.Fill = Brushes.LightBlue;
            countriesLayer.Style.EnableOutline = true;
            countriesLayer.Style.Outline = Pens.DarkBlue;
            this.Text = countriesLayer.LayerName;
            _sharpMap.ZoomToExtents();
            RefreshMap();            
        }
        private void RefreshMap()
        {
            //--> use SharpMap to generate the map image
            picMap.Image = _sharpMap.GetMap();
            // MessageBox.Show(_sharpMap.Zoom.ToString());   //--> show the width of the map in decimal degrees
        }
        private void btnZoomIn_Click(object sender, EventArgs e)
        {
            //--> zoom in by changing the map width
            _sharpMap.Zoom -= _sharpMap.Zoom * ZOOM_FACTOR;
            RefreshMap();
        }
        private void btnZoomOut_Click(object sender, EventArgs e)
        {
            //--> zoom out by changing the map width
            _sharpMap.Zoom += _sharpMap.Zoom * ZOOM_FACTOR;
            RefreshMap();
        }
        private void btnZoomFull_Click(object sender, EventArgs e)
        {
            //--> zoom to the full extent of the map
            _sharpMap.ZoomToExtents();
            RefreshMap();
        }    
        private void picMap_MouseClick(object sender, MouseEventArgs e)
        {
            //--> convert mouse click point from image coordiantes to world coordinates
            SharpMap.Geometries.Point p = _sharpMap.ImageToWorld(e.Location);
            //--> recenter map
            _sharpMap.Center.X = p.X;
            _sharpMap.Center.Y = p.Y;
            RefreshMap();
        }
    }
}

A 13. ábrán a működő program látható.

A Zoom in, Zoom out, Zoom to full extent feliratú gombokra klikkelve tudjuk változtatni a kép nagyítását. Ezek eseménykezelőjébe (click esemény) 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, emiatt szükség van a kép mozgatására is. Ez a program működésének alaphelyzete. A kurzor (stílusa egy szálkereszt) bármely pozíciójában történő klikkelés a viewport elmozdulását jelenti, mégpedig oly módon, a klikkelés térképi helye lesz a viewport közepe. A 14.-15. ábrákon a zoomolt térkép mozgatás előtti és mozgatás utáni állapota látható.

A kép (nagyobb változata) külön ablakban is megtekinthető.A zoomolt képen azt szeretnénk, hogy a Balaton keleti része legyen a viewport közepén, ezért a fekete szálkereszttel jelölt pozícióra klikkelünk14_zoom_full.jpg14. ábra. A zoomolt képen azt szeretnénk, hogy a Balaton keleti része legyen a viewport közepén, ezért a fekete szálkereszttel jelölt pozícióra klikkelünk
A kép (nagyobb változata) külön ablakban is megtekinthető.A térkép mozgatásának eredménye: a Balaton keleti része a kép közepére került15_zoom_full.jpg15. ábra. A térkép mozgatásának eredménye: a Balaton keleti része a kép közepére került
  • Fájl letöltése: Sharpmap demo letöltése című háttéranyag letöltése
  • Információ az állományról:A letöltött fájl kicsomagolás után VisualStudio.net-tel beolvasható, szerkeszthető és futtatható. Egy összetettebb win 32-es vektoros alkalmazás, amellyel vektor térképeket jeleníthetünk meg, színezhetünk át, nagyíthatunk, kicsinyíthetünk
  • Fájlméret: 1.3 MB

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.