校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > GMap.Net開發之自定義Marker使用方法

GMap.Net開發之自定義Marker使用方法

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

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

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

圖層上可以添加GMapMarker,當然也可以添加GMapPolygon和GMapRoute,后續介紹。

在地圖的使用中常要求的功能就是添加自定義圖標,可以點擊圖標、刪除圖標、拖動圖標、高亮圖標等。

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

1、自定義圖標,使用官方的Marker:

復制代碼 代碼如下:

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

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

2、繼承GMapMarker,自定義Marker:

復制代碼 代碼如下:

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三個屬性的作用:

Image:保存圖標的圖片。

Pen:在圖片外圍畫DrawRectangle的Pen,當其不為null的時候,會在圖片的外圍畫一個矩形,實現高亮(highlight)的效果。

OutPen:在圖片外圍畫DrawEllipse的Pen,當其不為null的時候,會在圖片外圍畫一個一個橢圓,設置這個值可以實現閃動。

3、移動圖標(Move Marker)的實現:

在MapControl中添加如下事件的響應:

復制代碼 代碼如下:

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中判斷左鍵是否按下(用左鍵來移動圖標)。

OnMarkerEnter中設置選中的Marker,同時設置Pen的值,實現高亮。

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

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

4、圖標閃動的實現:

需要一個定時器:使用的是Form下的Timer,定時器響應的事件:

復制代碼 代碼如下:

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的值(當然你也可以只更新某個Marker),通過在圖標上畫圈圈來實現閃動,當然你也可以通過設置Marker的IsVisible屬性來實現自己想要的效果。。。

效果圖如下:

全部代碼如下:

復制代碼 代碼如下:

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;     //當前比例
            mapControl.ShowCenter = false; //不顯示中心十字點
            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失真問題的解決方案
  • 關于Android高德地圖的簡單開發實例代碼(DEMO)
  • Android中GPS坐標轉換為高德地圖坐標詳解
  • Android開發之高德地圖實現定位
  • Android之高德地圖定位SDK集成及地圖功能實現
  • Android仿微信調用第三方地圖應用導航(高德、百度、騰訊)
  • Android 高德地圖之poi搜索功能的實現代碼
  • Android基于高德地圖完全自定義Marker的實現方法

標簽:焦作 大興安嶺 曲靖 新疆 綿陽 黃南 宜春 延安

巨人網絡通訊聲明:本文標題《GMap.Net開發之自定義Marker使用方法》,本文關鍵詞  GMap.Net,開,發之,自定義,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《GMap.Net開發之自定義Marker使用方法》相關的同類信息!
  • 本頁收集關于GMap.Net開發之自定義Marker使用方法的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    精品欧美黑人一区二区三区| 91黄色激情网站| 亚洲成人精品影院| 亚洲免费在线观看视频| 中文字幕一区二区三区不卡在线| 久久一区二区三区国产精品| 精品免费国产一区二区三区四区| 在线综合+亚洲+欧美中文字幕| 欧美熟乱第一页| 欧亚洲嫩模精品一区三区| 色悠久久久久综合欧美99| 91亚洲大成网污www| 91丝袜高跟美女视频| 91网站在线观看视频| 欧美日韩亚洲丝袜制服| 91麻豆精品国产91久久久更新时间| 欧美一级理论性理论a| 久久影音资源网| 亚洲桃色在线一区| 日韩精品电影在线观看| 韩国三级中文字幕hd久久精品| 国产一区二区剧情av在线| 不卡大黄网站免费看| 欧美日韩国产大片| 亚洲精品一区二区精华| 国产精品福利在线播放| 性欧美疯狂xxxxbbbb| 久久国产精品露脸对白| 久久99精品国产| 91麻豆国产在线观看| 91精品国产91久久久久久最新毛片| 精品国产1区2区3区| 亚洲日本中文字幕区| 免费观看在线综合| 91在线国内视频| 91精品欧美久久久久久动漫| 国产精品免费免费| 三级影片在线观看欧美日韩一区二区| 国产毛片精品国产一区二区三区| 97se狠狠狠综合亚洲狠狠| 日韩写真欧美这视频| 亚洲人吸女人奶水| 久久99这里只有精品| 色诱视频网站一区| 国产日韩欧美高清在线| 免费看欧美女人艹b| 欧美亚洲综合网| 中文字幕成人av| 精品一区二区在线视频| 欧美视频中文字幕| 专区另类欧美日韩| 国产寡妇亲子伦一区二区| 91精品国产综合久久久久久漫画 | 久久久91精品国产一区二区精品| 亚洲色图制服诱惑| 成人国产精品视频| 久久亚区不卡日本| 久草在线在线精品观看| 欧美日本韩国一区二区三区视频| 亚洲欧美激情一区二区| 国产99久久精品| 久久亚洲私人国产精品va媚药| 一区二区国产盗摄色噜噜| av一二三不卡影片| 国产欧美一区二区三区在线看蜜臀| 麻豆国产精品一区二区三区| 欧美日韩一本到| 一区二区三区 在线观看视频| 成人激情小说乱人伦| 国产午夜亚洲精品不卡| 激情综合色播五月| 2019国产精品| 国产一区二区在线观看视频| 91精品国产综合久久久久久久久久| 亚洲精品一二三四区| 91啪亚洲精品| 亚洲美女少妇撒尿| 欧美亚洲综合久久| 天堂av在线一区| 欧美一区二区啪啪| 蜜桃久久精品一区二区| 精品日韩一区二区三区免费视频| 美女www一区二区| 精品国产免费久久| 国产a视频精品免费观看| 国产日韩高清在线| 91在线观看地址| 亚洲成va人在线观看| 日韩三级免费观看| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲欧美福利一区二区| 一本一本大道香蕉久在线精品| 亚洲黄网站在线观看| 91精品在线麻豆| 国产精品白丝jk黑袜喷水| 国产精品久久久久久一区二区三区| 99久久99久久精品国产片果冻| 亚洲激情自拍偷拍| 日韩一区二区免费电影| 国产精品77777| 亚洲网友自拍偷拍| 久久综合九色综合久久久精品综合 | 国产99久久精品| 亚洲欧美激情小说另类| 91精品福利在线一区二区三区 | 日韩欧美电影一区| 国产风韵犹存在线视精品| 亚洲欧美影音先锋| 欧美日韩高清一区二区不卡| 久久99精品久久久| 亚洲一区电影777| 久久夜色精品一区| 欧美午夜精品一区二区蜜桃| 久久福利视频一区二区| 国产精品国产三级国产aⅴ入口 | 色视频一区二区| 看电影不卡的网站| 亚洲午夜一区二区三区| 久久综合九色综合久久久精品综合| av一区二区三区四区| 久久国产精品99久久久久久老狼| 亚洲欧洲另类国产综合| 欧美tickling挠脚心丨vk| 在线欧美小视频| 成人黄色免费短视频| 免费亚洲电影在线| 亚洲激情欧美激情| 国产精品高潮呻吟久久| 精品久久国产97色综合| 91精品办公室少妇高潮对白| 国产精品99久久久| 免费成人性网站| 2欧美一区二区三区在线观看视频| 美女视频黄久久| 一区二区三区高清| 中文字幕一区三区| 精品国产91亚洲一区二区三区婷婷| 色综合久久综合中文综合网| 韩国女主播一区二区三区| 午夜不卡av在线| 亚洲一区在线看| 一区二区三区精密机械公司| 国产欧美一区二区精品仙草咪| 日韩欧美一级片| 欧美一区二区三区性视频| 在线观看视频一区| 91亚洲精品乱码久久久久久蜜桃| 国产一区二区在线看| 国产在线精品视频| 国产一区二区在线观看视频| 狂野欧美性猛交blacked| 久久国产人妖系列| 韩国av一区二区| 国产乱码字幕精品高清av| 久久疯狂做爰流白浆xx| 久草中文综合在线| 国产永久精品大片wwwapp| 国产一区二三区| 国产91高潮流白浆在线麻豆| 国产999精品久久久久久绿帽| 国产精品白丝av| 不卡的电影网站| 欧洲一区在线电影| 91精品国产综合久久精品| 91麻豆精品国产| 久久女同精品一区二区| 国产区在线观看成人精品| 国产色婷婷亚洲99精品小说| 国产精品久久久久一区| 亚洲精品日日夜夜| 天天综合网 天天综合色| 久久精品国产精品青草| 国产成人av一区| 97成人超碰视| 欧美蜜桃一区二区三区| 精品国产一区二区三区不卡| 久久久久久免费网| 综合av第一页| 蜜臀av国产精品久久久久 | 一区二区三区在线视频观看| 亚洲成人精品在线观看| 国产自产v一区二区三区c| 99综合电影在线视频| 欧美亚洲综合另类| 精品久久久久久久久久久院品网| 久久精品视频在线免费观看 | 一区二区三区四区在线免费观看| 亚洲国产三级在线| 国产乱淫av一区二区三区| 在线视频一区二区三| 日韩欧美色综合| 亚洲人成网站色在线观看| 免费观看成人av| 91影院在线观看| 久久日韩粉嫩一区二区三区| 亚洲精品国产高清久久伦理二区| 免费av网站大全久久| 在线精品视频免费播放| 国产欧美日韩久久| 蜜芽一区二区三区|