真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

GMap.Net中Marker的使用方法-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“GMap.Net中Marker的使用方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“GMap.Net中Marker的使用方法”吧!

十載的龍江網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整龍江建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“龍江網(wǎng)站設(shè)計(jì)”,“龍江網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

自定義Marker,可以理解為在地圖上自定義圖標(biāo)(Custom Marker),先看看GMap的地圖和圖標(biāo)的顯示方式:

GMap.Net中Marker的使用方法

Map控件上可以添加Overlay(圖層),可以添加多個(gè)圖層,先添加的圖層在下面顯示。

圖層上可以添加GMapMarker,當(dāng)然也可以添加GMapPolygon和GMapRoute,后續(xù)介紹。

在地圖的使用中常要求的功能就是添加自定義圖標(biāo),可以點(diǎn)擊圖標(biāo)、刪除圖標(biāo)、拖動(dòng)圖標(biāo)、高亮圖標(biāo)等。

下面介紹這些功能的實(shí)現(xiàn)(主要是基于WinForm的,WPF的可以參考官方Demo實(shí)現(xiàn)):

1、自定義圖標(biāo),使用官方的Marker:

復(fù)制代碼 代碼如下:


Bitmap bitmap = Bitmap.FromFile("F:\\Projects\\GMapDemo\\GMapDemo\\Image\\A.png") as Bitmap;
GMapMarker marker = new GMarkerGoogle(point, bitmap);


直接使用GMap.NET.WindowsForms.Markers中的GMarkerGoogle,傳入一個(gè)Bitmap,就可以使用自定義的圖片來做圖標(biāo)。

2、繼承GMapMarker,自定義Marker:

復(fù)制代碼 代碼如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GMap.NET;
using GMap.NET.WindowsForms;
using System.Drawing;

namespace GMapWinFormDemo
{
    class GMapMarkerImage : GMapMarker
    {
        private Image image;
        public Image Image
        {
            get
            {
                return image;
            }
            set
            {
                image = value;
                if (image != null)
                {
                    this.Size = new Size(image.Width, image.Height);
                }
            }
        }

        public Pen Pen
        {
            get;
            set;
        }

        public Pen OutPen
        {
            get;
            set;
        }

        public GMapMarkerImage(GMap.NET.PointLatLng p, Image image)
            : base(p)
        {
            Size = new System.Drawing.Size(image.Width, image.Height);
            Offset = new System.Drawing.Point(-Size.Width / 2, -Size.Height / 2);
            this.image = image;
            Pen = null;
            OutPen = null;
        }

        public override void OnRender(Graphics g)
        {
            if (image == null)
                return;

            Rectangle rect = new Rectangle(LocalPosition.X, LocalPosition.Y, Size.Width, Size.Height);
            g.DrawImage(image, rect);

            if (Pen != null)
            {
                g.DrawRectangle(Pen, rect);
            }

            if (OutPen != null)
            {
                g.DrawEllipse(OutPen, rect);
            }
        }

        public override void Dispose()
        {
            if (Pen != null)
            {
                Pen.Dispose();
                Pen = null;
            }

            if (OutPen != null)
            {
                OutPen.Dispose();
                OutPen = null;
            }

            base.Dispose();
        }
    }
}


介紹下GMapMarkerImage三個(gè)屬性的作用:

Image:保存圖標(biāo)的圖片。

Pen:在圖片外圍畫DrawRectangle的Pen,當(dāng)其不為null的時(shí)候,會(huì)在圖片的外圍畫一個(gè)矩形,實(shí)現(xiàn)高亮(highlight)的效果。

OutPen:在圖片外圍畫DrawEllipse的Pen,當(dāng)其不為null的時(shí)候,會(huì)在圖片外圍畫一個(gè)一個(gè)橢圓,設(shè)置這個(gè)值可以實(shí)現(xiàn)閃動(dòng)。

3、移動(dòng)圖標(biāo)(Move Marker)的實(shí)現(xiàn):

在MapControl中添加如下事件的響應(yīng):

復(fù)制代碼 代碼如下:


mapControl.MouseDown += new MouseEventHandler(mapControl_MouseDown);
mapControl.MouseUp += new MouseEventHandler(mapControl_MouseUp);
mapControl.MouseMove += new MouseEventHandler(mapControl_MouseMove);

mapControl.OnMarkerClick += new MarkerClick(mapControl_OnMarkerClick);
mapControl.OnMarkerEnter += new MarkerEnter(mapControl_OnMarkerEnter);
mapControl.OnMarkerLeave += new MarkerLeave(mapControl_OnMarkerLeave);


MouseDown和MouseUp中判斷左鍵是否按下(用左鍵來移動(dòng)圖標(biāo))。

OnMarkerEnter中設(shè)置選中的Marker,同時(shí)設(shè)置Pen的值,實(shí)現(xiàn)高亮。

OnMarkerLeave中取消選中的Marker,取消Pen的值,取消高亮。

MouseMove中更新選中選中Marker的Position就可以了。

4、圖標(biāo)閃動(dòng)的實(shí)現(xiàn):

需要一個(gè)定時(shí)器:使用的是Form下的Timer,定時(shí)器響應(yīng)的事件:

復(fù)制代碼 代碼如下:


void blinkTimer_Tick(object sender, EventArgs e)
        {
            foreach (GMapMarker m in objects.Markers)
            {
                if (m is GMapMarkerImage)
                {
                    GMapMarkerImage marker = m as GMapMarkerImage;
                    if (marker.OutPen == null)
                        marker.OutPen = new Pen(Brushes.Red, 2);
                    else
                    {
                        marker.OutPen.Dispose();
                        marker.OutPen = null;
                    }
                }
            }
            mapControl.Refresh();
        }


更新所有Marker的OutPen的值(當(dāng)然你也可以只更新某個(gè)Marker),通過在圖標(biāo)上畫圈圈來實(shí)現(xiàn)閃動(dòng),當(dāng)然你也可以通過設(shè)置Marker的IsVisible屬性來實(shí)現(xiàn)自己想要的效果。。。

效果圖如下:

GMap.Net中Marker的使用方法

全部代碼如下:

復(fù)制代碼 代碼如下:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GMap.NET;
using GMap.NET.WindowsForms;
using GMap.NET.MapProviders;
using GMap.NET.WindowsForms.Markers;

namespace GMapWinFormDemo
{
    public partial class MainForm : Form
    {
        private GMapOverlay objects = new GMapOverlay("objects"); //放置marker的圖層
        private GMapMarkerImage currentMarker;
        private bool isLeftButtonDown = false;

        private Timer blinkTimer = new Timer();

        public MainForm()
        {
            InitializeComponent();

            try
            {
                System.Net.IPHostEntry e = System.Net.Dns.GetHostEntry("www.google.com.hk");
            }
            catch
            {
                mapControl.Manager.Mode = AccessMode.CacheOnly;
                MessageBox.Show("No internet connection avaible, going to CacheOnly mode.", "GMap.NET Demo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            mapControl.CacheLocation = Environment.CurrentDirectory + "\\GMapCache\\"; //緩存位置
            mapControl.MapProvider = GMapProviders.GoogleChinaMap; //google china 地圖
            mapControl.MinZoom = 2;  //最小比例
            mapControl.MaxZoom = 17; //較大比例
            mapControl.Zoom = 5;     //當(dāng)前比例
            mapControl.ShowCenter = false; //不顯示中心十字點(diǎn)
            mapControl.DragButton = System.Windows.Forms.MouseButtons.Left; //左鍵拖拽地圖
            mapControl.Position = new PointLatLng(32.064,118.704); //地圖中心位置:南京

            mapControl.OnMapZoomChanged += new MapZoomChanged(mapControl_OnMapZoomChanged);
            mapControl.MouseClick += new MouseEventHandler(mapControl_MouseClick);
            mapControl.MouseDown += new MouseEventHandler(mapControl_MouseDown);
            mapControl.MouseUp += new MouseEventHandler(mapControl_MouseUp);
            mapControl.MouseMove += new MouseEventHandler(mapControl_MouseMove);

            mapControl.OnMarkerClick += new MarkerClick(mapControl_OnMarkerClick);
            mapControl.OnMarkerEnter += new MarkerEnter(mapControl_OnMarkerEnter);
            mapControl.OnMarkerLeave += new MarkerLeave(mapControl_OnMarkerLeave);

            mapControl.Overlays.Add(objects);
        }

        void mapControl_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left && isLeftButtonDown)
            {
                if (currentMarker != null)
                {
                    PointLatLng point = mapControl.FromLocalToLatLng(e.X, e.Y);
                    currentMarker.Position = point;
                    currentMarker.ToolTipText = string.Format("{0},{1}", point.Lat, point.Lng);
                }
            }
        }

        void mapControl_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                isLeftButtonDown = false;
            }
        }

        void mapControl_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                isLeftButtonDown = true;
            }
        }

        void mapControl_OnMarkerLeave(GMapMarker item)
        {
            if (item is GMapMarkerImage)
            {
                currentMarker = null;
                GMapMarkerImage m = item as GMapMarkerImage;
                m.Pen.Dispose();
                m.Pen = null;
            }
        }

        void mapControl_OnMarkerEnter(GMapMarker item)
        {
            if (item is GMapMarkerImage)
            {
                currentMarker = item as GMapMarkerImage;
                currentMarker.Pen = new Pen(Brushes.Red, 2);
            }
        }

        void mapControl_OnMarkerClick(GMapMarker item, MouseEventArgs e)
        {
        }

        void mapControl_MouseClick(object sender, MouseEventArgs e)
        {
            if(e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                //objects.Markers.Clear();
                PointLatLng point = mapControl.FromLocalToLatLng(e.X,e.Y);
                //GMapMarker marker = new GMarkerGoogle(point, GMarkerGoogleType.green);
                Bitmap bitmap = Bitmap.FromFile("F:\\Projects\\GMapDemo\\GMapDemo\\Image\\A.png") as Bitmap;
                //GMapMarker marker = new GMarkerGoogle(point, bitmap);
                GMapMarker marker = new GMapMarkerImage(point, bitmap);
                marker.ToolTipMode = MarkerTooltipMode.OnMouseOver;
                marker.ToolTipText = string.Format("{0},{1}", point.Lat, point.Lng);
                objects.Markers.Add(marker);
            }
        }

        void mapControl_OnMapZoomChanged()
        {
        }

        private void buttonBeginBlink_Click(object sender, EventArgs e)
        {
            blinkTimer.Interval = 1000;
            blinkTimer.Tick += new EventHandler(blinkTimer_Tick);
            blinkTimer.Start();
        }

        void blinkTimer_Tick(object sender, EventArgs e)
        {
            foreach (GMapMarker m in objects.Markers)
            {
                if (m is GMapMarkerImage)
                {
                    GMapMarkerImage marker = m as GMapMarkerImage;
                    if (marker.OutPen == null)
                        marker.OutPen = new Pen(Brushes.Red, 2);
                    else
                    {
                        marker.OutPen.Dispose();
                        marker.OutPen = null;
                    }
                }
            }
            mapControl.Refresh();
        }

        private void buttonStopBlink_Click(object sender, EventArgs e)
        {
            blinkTimer.Stop();
            foreach (GMapMarker m in objects.Markers)
            {
                if (m is GMapMarkerImage)
                {
                    GMapMarkerImage marker = m as GMapMarkerImage;
                    marker.OutPen.Dispose();
                    marker.OutPen = null;
                }
            }
            mapControl.Refresh();
        }
    }
}


到此,相信大家對(duì)“GMap.Net中Marker的使用方法”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)站欄目:GMap.Net中Marker的使用方法-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://weahome.cn/article/dsjgjo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部