婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > GMap.Net開發(fā)之自定義Marker使用方法

GMap.Net開發(fā)之自定義Marker使用方法

熱門標(biāo)簽:宿遷智能外呼系統(tǒng)排名 電銷機(jī)器人 數(shù)據(jù) 廣州銷售外呼系統(tǒng)定制 福州人工智能電銷機(jī)器人加盟 怎樣給陜西地圖標(biāo)注顏色 400電話辦理信任翰諾科技 云狐人工智能電話機(jī)器人 地圖標(biāo)注多少錢一張 ai電銷機(jī)器人對(duì)貸款有幫助嗎

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

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,就可以使用自定義的圖片來(lái)做圖標(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中判斷左鍵是否按下(用左鍵來(lái)移動(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),通過(guò)在圖標(biāo)上畫圈圈來(lái)實(shí)現(xiàn)閃動(dòng),當(dāng)然你也可以通過(guò)設(shè)置Marker的IsVisible屬性來(lái)實(shí)現(xiàn)自己想要的效果。。。

效果圖如下:

全部代碼如下:

復(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();
        }
    }
}

您可能感興趣的文章:
  • Android 百度地圖marker中圖片不顯示的解決方法(推薦)
  • Android百度地圖添加Marker失真問(wèn)題的解決方案
  • 關(guān)于Android高德地圖的簡(jiǎn)單開發(fā)實(shí)例代碼(DEMO)
  • Android中GPS坐標(biāo)轉(zhuǎn)換為高德地圖坐標(biāo)詳解
  • Android開發(fā)之高德地圖實(shí)現(xiàn)定位
  • Android之高德地圖定位SDK集成及地圖功能實(shí)現(xiàn)
  • Android仿微信調(diào)用第三方地圖應(yīng)用導(dǎo)航(高德、百度、騰訊)
  • Android 高德地圖之poi搜索功能的實(shí)現(xiàn)代碼
  • Android基于高德地圖完全自定義Marker的實(shí)現(xiàn)方法

標(biāo)簽:焦作 大興安嶺 曲靖 新疆 綿陽(yáng) 黃南 宜春 延安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《GMap.Net開發(fā)之自定義Marker使用方法》,本文關(guān)鍵詞  GMap.Net,開,發(fā)之,自定義,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《GMap.Net開發(fā)之自定義Marker使用方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于GMap.Net開發(fā)之自定義Marker使用方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美性猛交xxxx乱大交退制版| 欧美亚洲一区三区| 亚洲成人免费在线观看| 久久久综合激的五月天| 欧美日韩夫妻久久| 色婷婷一区二区三区四区| 亚洲美女偷拍久久| 色噜噜偷拍精品综合在线| 成人高清免费在线播放| 成人av网站免费| 色婷婷久久综合| 97久久超碰国产精品电影| 不卡av免费在线观看| 91理论电影在线观看| 日韩精品一区二区三区视频播放 | 国产a级毛片一区| 国产91精品在线观看| 欧美一区二区视频在线观看2022| 欧美三片在线视频观看| 91精品国产欧美一区二区| 制服丝袜在线91| 337p粉嫩大胆色噜噜噜噜亚洲| 中文字幕不卡的av| 亚洲一卡二卡三卡四卡无卡久久| 一区二区三区毛片| 日韩影院免费视频| 国产成人在线观看| 欧洲亚洲国产日韩| 久久午夜羞羞影院免费观看| 国产精品九色蝌蚪自拍| 亚洲午夜精品17c| 国产经典欧美精品| 欧美无乱码久久久免费午夜一区| 欧美成人一区二区三区片免费 | 日韩av在线发布| 久久蜜臀精品av| 亚洲图片自拍偷拍| 国产不卡在线一区| 欧美高清一级片在线| 国产精品麻豆视频| 国产精品久久99| 日本不卡视频一二三区| 日本乱人伦aⅴ精品| 欧美精品在线一区二区三区| 欧美电视剧在线看免费| 综合久久综合久久| 日韩精品电影在线| 国产精品久久久久久户外露出| 亚洲国产一区二区三区| 国模冰冰炮一区二区| 色婷婷精品大在线视频| 26uuuu精品一区二区| 久久综合色综合88| 日本女优在线视频一区二区| 成人一道本在线| 亚洲精品在线免费观看视频| 视频一区二区三区中文字幕| 99精品一区二区三区| 精品国产乱码久久久久久久久| 亚洲一区二区精品视频| 国产福利不卡视频| 日韩区在线观看| 色综合久久久久久久久久久| 午夜精品久久久久影视| 成人福利视频网站| 国产女人18毛片水真多成人如厕| 久久精品国产精品亚洲综合| 51精品视频一区二区三区| 亚洲大片精品永久免费| 美女视频黄免费的久久| 欧美一区二区在线看| 一个色在线综合| 在线影院国内精品| 怡红院av一区二区三区| 国产成人免费视频一区| 国产亚洲一本大道中文在线| 国产精品996| 久久久久久久久久久电影| av在线不卡网| 99久久伊人久久99| 精品久久久久久最新网址| 成人欧美一区二区三区1314 | 免费人成精品欧美精品| 91欧美激情一区二区三区成人| 亚洲视频一区二区在线| 欧洲精品一区二区| 丝袜亚洲精品中文字幕一区| 久久精品视频网| 91精品综合久久久久久| 国产盗摄视频一区二区三区| 国产精品久久福利| 日韩视频一区二区三区 | 日韩一区和二区| 国产一区二区三区不卡在线观看 | 一区二区在线观看免费视频播放| 欧美日韩在线直播| 日本aⅴ免费视频一区二区三区| 欧美剧情片在线观看| 日韩经典中文字幕一区| 尤物在线观看一区| 在线亚洲一区二区| 亚洲色图清纯唯美| 国产精品久久久久久福利一牛影视| 国产99久久久久| 玉米视频成人免费看| 日韩视频一区在线观看| 成人天堂资源www在线| 亚洲一区二区欧美激情| 欧美一区二区在线免费播放| 久久99日本精品| 国产精品三级av| 一本大道久久a久久精品综合| 天天亚洲美女在线视频| 久久综合一区二区| 亚洲一区二区三区免费视频| 26uuu精品一区二区三区四区在线| 国产不卡免费视频| 亚洲少妇30p| 久久久久国产精品麻豆ai换脸| 在线电影院国产精品| 欧美影片第一页| 成人一区二区三区中文字幕| 日韩主播视频在线| 中文字幕亚洲精品在线观看| 欧美精品一区二区三区在线| 欧美日韩欧美一区二区| 日本精品视频一区二区| 99久久伊人精品| 粉嫩一区二区三区性色av| 亚洲五码中文字幕| 一区二区视频在线| 国产欧美精品日韩区二区麻豆天美| 在线精品视频一区二区三四| 日韩精品在线看片z| 欧美一二三在线| 欧美日韩卡一卡二| 欧美日韩成人综合天天影院| 国产亚洲综合色| 欧美美女bb生活片| 欧美美女网站色| 91 com成人网| 日韩免费视频一区| 国产亚洲污的网站| 亚洲国产岛国毛片在线| 中文字幕欧美国产| 欧美日韩成人在线| 欧美欧美午夜aⅴ在线观看| 在线日韩av片| 成人免费视频app| 色域天天综合网| 在线观看网站黄不卡| 色婷婷综合久久久久中文 | 亚洲一区二区在线观看视频 | 色综合中文字幕国产 | 精品久久国产字幕高潮| 欧美电视剧免费观看| 精品国产乱码久久| 亚洲欧美日韩国产中文在线| 亚洲成人综合在线| 亚洲国产精品久久久久秋霞影院 | 久久9热精品视频| 91久久精品一区二区| 2020国产精品| 婷婷丁香激情综合| 99久久777色| 在线观看日韩电影| 精品久久久三级丝袜| 亚洲精品免费在线| 日韩欧美国产一区二区在线播放 | 久久免费视频色| 日本美女一区二区三区| 成熟亚洲日本毛茸茸凸凹| 欧美高清精品3d| 最新日韩在线视频| 麻豆精品国产91久久久久久| 99视频一区二区| 久久久久97国产精华液好用吗| 国产欧美日韩亚州综合| 亚洲综合色区另类av| 国产在线不卡一区| 成人一区二区三区视频在线观看| 欧美日韩一区二区三区视频| 久久久噜噜噜久久中文字幕色伊伊| 亚洲欧洲日韩av| 美女视频免费一区| 国产做a爰片久久毛片| 国产一区二区不卡在线| 捆绑调教一区二区三区| 国产91色综合久久免费分享| a在线欧美一区| 久久精品人人爽人人爽| 亚洲小说春色综合另类电影| 精品国产伦一区二区三区观看方式| 自拍视频在线观看一区二区| 国产精品色呦呦| 日本va欧美va欧美va精品| 欧美日韩情趣电影| 国产精品99久久久久久宅男| 欧美三级视频在线播放| 91精品国产乱|