GMap.net在winform中调用高德地图

GMap没有自带国内服务商的地图产品接口,需要在项目中创建相关的类才能调用,下面阐述下如何调用高德地图
1.在创建了UserControl(改天专门写写关于UserControl控件的使用)的前提下,创建一个抽象类基本抽象类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;
            }
        }
    }

2.再创建一个类继承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";
    }

3.在主Form中调用
public partial class MapTestForm1 : Form
{
private GMapOverlay markersOverlay = new GMapOverlay(“markers”); //放置marker的图层
// GMapOverlay polyOverlay = new GMapOverlay(“polygons”);
GMapOverlay polyOverlay = new GMapOverlay(“Routes”);
public MapTestForm1()
{
InitializeComponent();
try
{
// System.Net.IPHostEntry e = System.Net.Dns.GetHostEntry(“ditu.amap.com”);

        }
        catch
        {
            mapControl1.Manager.Mode = AccessMode.CacheOnly;
            MessageBox.Show("No internet connection avaible, going to CacheOnly mode.", "GMap.NET Demo", MessageBoxButtons.OK, MessageBoxIcon.Warning);

        }
        mapControl1.CacheLocation = Environment.CurrentDirectory + "\\GMapCache\\"; //缓存位置
      //  mapControl1.MapProvider = GMapProviders.GoogleChinaMap; //google china 地图
      //详情看类AMapProvider与GMapProviders即可明白
        mapControl1.MapProvider = AMapProvider.Instance;
        mapControl1.MinZoom = 2;  //最小比例
        mapControl1.MaxZoom = 24; //最大比例
        mapControl1.Zoom = 10;     //当前比例
        mapControl1.ShowCenter = false; //不显示中心十字点
        mapControl1.DragButton = System.Windows.Forms.MouseButtons.Left; //左键拖拽地图
        mapControl1.Position = new PointLatLng(32.064, 118.704); //地图中心位置:南京


        List<PointLatLng> points = new List<PointLatLng>();
        points.Add(new PointLatLng(32.064, 118.704));
        points.Add(new PointLatLng(32.253, 118.513));
        points.Add(new PointLatLng(32.542, 118.322));
       // points.Add(new PointLatLng(32.764, 118.104));
        //绘制多边形用GMapPolygon 
        GMapPolygon polygon = new GMapPolygon(points, "mypolygon");
        //绘制折线用GMapRoute 
        GMapRoute route = new GMapRoute(points ,"");
        route.Stroke = new Pen(Color.Red, 1);

        polygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Red));
        polygon.Stroke = new Pen(Color.Red, 1);

       // polyOverlay.Polygons.Add(polygon);


        polyOverlay.Routes.Add(route);

        mapControl1.Overlays.Add(polyOverlay);






        //PointLatLng point = mapControl1.FromLocalToLatLng(32, 118);

        GMapMarker marker = new GMarkerGoogle(mapControl1.Position, GMarkerGoogleType.green);
        markersOverlay.Markers.Add(marker);

        mapControl1.Overlays.Add(markersOverlay);

        mapControl1.MouseClick += new MouseEventHandler(mapControl_MouseClick);

    }
    void mapControl_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            PointLatLng point = mapControl1.FromLocalToLatLng(e.X, e.Y);
            GMapMarker marker = new GMarkerGoogle(point, GMarkerGoogleType.green);
            markersOverlay.Markers.Add(marker);
        }
    }
    private void MapTestForm1_Load(object sender, EventArgs e)
    {

    }

    private void mapControl1_Load(object sender, EventArgs e)
    {

    }
}
![这里写图片描述](https://img-blog.csdn.net/20170511003902349?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzU2OTk1Mjg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值