• GMap.Net 在 winform 中调用高德地图


    参考资料:

    [GMap 在winform 中调用高德地图]((https://blog.csdn.net/qq_35699528/article/details/71599521)

    1、创建 UserControl 为MapControl

    public partial class MapControl : GMapControl
        {
            /**
             * mapControl : 显示主地图
             * overlay :显示轨迹
             * makers :显示关键点
             */
            public MapControl()
            {
                InitializeComponent();
            }
        }
    

      

    2、创建类 GMapProvider

     public abstract  class AMapProviderBase : GMapProvider
        {
    
            public AMapProviderBase()
            {
                MaxZoom = null;
                RefererUrl = "http://www.amap.com/";
                Copyright = string.Format("©{0} 高德 Corporation, ©{0} NAVTEQ, ©{0} Image courtesy of NASA", DateTime.Today.Year);
            }
    
            public override PureProjection Projection
            {
                get { return MercatorProjection.Instance; }
            }
    
            GMapProvider[] overlays;
            public override GMapProvider[] Overlays
            {
                get
                {
                    if (overlays == null)
                    {
                        overlays = new GMapProvider[] { this };
                    }
                    return overlays;
                }
            }
        }
    

      

    3、创建类 AMapProvider 继承 AMapProviderBase

    class AMapProvider : AMapProviderBase
        {
            public static readonly AMapProvider Instance;
    
            readonly Guid id = new Guid("EF3DD303-3F74-4938-BF40-232D0595EE88");
            public override Guid Id
            {
                get { return id; }
            }
    
            readonly string name = "AMap";
            public override string Name
            {
                get
                {
                    return name;
                }
            }
    
            static AMapProvider()
            {
                Instance = new AMapProvider();
            }
    
            public override PureImage GetTileImage(GPoint pos, int zoom)
            {
                string url = MakeTileImageUrl(pos, zoom, LanguageStr);
    
                return GetTileImageUsingHttp(url);
            }
    
            string MakeTileImageUrl(GPoint pos, int zoom, string language)
            {
    
                //http://webrd04.is.autonavi.com/appmaptile?x=5&y=2&z=3&lang=zh_cn&size=1&scale=1&style=7
                string url = string.Format(UrlFormat, pos.X, pos.Y, zoom);
                Console.WriteLine("url:" + url);
                return url;
            }
    
            static readonly string UrlFormat = "http://webrd04.is.autonavi.com/appmaptile?x={0}&y={1}&z={2}&lang=zh_cn&size=1&scale=1&style=7";
        }
    

      

    4、在主Form中

    public partial class Form1 : Form
        {
            private GMapOverlay markersOverlay = new GMapOverlay("markers"); //放置marker的图层
                                                                             // GMapOverlay polyOverlay = new GMapOverlay(“polygons”);
            GMapOverlay polyOverlay = new GMapOverlay("Routes");
    
            public Form1()
            {
                InitializeComponent();
                try
                {
    
                    // System.Net.IPHostEntry e = System.Net.Dns.GetHostEntry(“ditu.amap.com”);
                }
                catch
                {
                    gMapControl.Manager.Mode = AccessMode.CacheOnly;
                    MessageBox.Show("No internet connection avaible, going to CacheOnly mode.", "GMap.NET Demo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    
                }
                gMapControl.CacheLocation = Environment.CurrentDirectory + "\\GMapCache\\"; //缓存位置
                                                                                            //  gMapControl.MapProvider = GMapProviders.GoogleChinaMap; //google china 地图
                                                                                            //详情看类AMapProvider与GMapProviders即可明白
                gMapControl.MapProvider = AMapProvider.Instance;
                gMapControl.MinZoom = 2;  //最小比例
                gMapControl.MaxZoom = 24; //最大比例
                gMapControl.Zoom = 10;     //当前比例
                gMapControl.ShowCenter = false; //不显示中心十字点
                gMapControl.DragButton = System.Windows.Forms.MouseButtons.Left; //左键拖拽地图
                gMapControl.Position = new PointLatLng(36.0561596067835,103.738231658936); //地图中心位置:兰州理工大学
    
    
                GMapMarker marker = new GMarkerGoogle(gMapControl.Position, GMarkerGoogleType.green);
                markersOverlay.Markers.Add(marker);
                gMapControl.Overlays.Add(markersOverlay);
    
                // 添加多边形节点
                List<PointLatLng> points = new List<PointLatLng>();
                points.Add(new PointLatLng(37.1412768409666, 79.6562057733536));
                points.Add(new PointLatLng(37.1403574434934, 79.6564793586731));
                points.Add(new PointLatLng(37.1405669815751, 79.6581155061722));
                points.Add(new PointLatLng(37.1416146632773, 79.6577936410904));
                points.Add(new PointLatLng(37.1412768409666, 79.6562057733536));
                
                //绘制折线用GMapRoute 
                GMapRoute route = new GMapRoute(points, "");
                route.Stroke = new Pen(Color.Red, 1);
                polyOverlay.Routes.Add(route);
    
                //绘制多边形用GMapPolygon 
                GMapPolygon polygon = new GMapPolygon(points, "polygons");
                polygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Green));
                polygon.Stroke = new Pen(Color.Red, 1);
                polyOverlay.Polygons.Add(polygon);
                gMapControl.Overlays.Add(polyOverlay);
                
                // 创建鼠标按键事件
                gMapControl.MouseClick += new MouseEventHandler(gMapControl_MouseClick);
    
            }
            
            void gMapControl_MouseClick(object sender, MouseEventArgs e)
            {
                if (e.Button == System.Windows.Forms.MouseButtons.Right)
                {
                    PointLatLng point = gMapControl.FromLocalToLatLng(e.X, e.Y);
                    GMapMarker marker = new GMarkerGoogle(point, GMarkerGoogleType.green);
                    markersOverlay.Markers.Add(marker);
                    Console.WriteLine(point.ToString());
    
                    
                }
            }
    
            /// <summary>
            /// 改变 Polygons 填充颜色
            /// </summary>
            /// <param name="name">Polygons 名称</param>
            void changePolygonsColor(String name)
            {
                for (int i = 0; i < gMapControl.Overlays.Count; i++)
                {
                    for (int j = 0; j < gMapControl.Overlays[i].Polygons.Count; j++)
                    {
                        if (gMapControl.Overlays[i].Polygons[j].Name == name)
                        {
                            gMapControl.Overlays[i].Polygons[j].Fill = new SolidBrush(Color.FromArgb(50, Color.Red));
                        }
                    }
                }
    
            }
    
        }
    

      

  • 相关阅读:
    电脑不能连接到热点
    常用网络协议
    HVV面试
    【转载】hacker术语
    渗透测试学习路线
    系统安全——可信计算
    rsync文件同步详解
    rabbitmq集群部署高可用配置
    ansible自动化部署之路笔记
    ELK-elasticsearch-6.3.2部署
  • 原文地址:https://www.cnblogs.com/sethnie/p/15856122.html
Copyright © 2020-2023  润新知