C#|GMap.NET控件基本使用-高德地图
来源:互联网 发布:淘宝神笔提示保存成功 编辑:程序博客网 时间:2024/05/16 17:43
GMap.Net
GMap.Net是.Net下一个地图控件,可以基于Http协议加载各个公司的地图,主要原理是通过解析各个公司的地图服务的URL,传入相应的参数得到对应的切片底图,如高德地图的GMapProvider的实现如下:
using System;using GMap.NET;using GMap.NET.MapProviders;using GMap.NET.Projections;namespace GMapProvidersExt{ 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; } } } public 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) { try { string url = MakeTileImageUrl(pos, zoom, LanguageStr); return GetTileImageUsingHttp(url); } catch (Exception ex) { return null; } } string MakeTileImageUrl(GPoint pos, int zoom, string language) { var num = (pos.X + pos.Y) % 4 + 1; //string url = string.Format(UrlFormat, num, pos.X, pos.Y, zoom); string url = string.Format(UrlFormat, pos.X, pos.Y, zoom); 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"; static readonly string UrlFormat = "http://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={0}&y={1}&z={2}"; }}
加载高德地图
为了方便,我们直接在我们的项目中引用GMap.NET.Core.dll、GMap.NET.WindowsForms.dll和GMapDownload.dll三个文件(这三个文件可以运行官网开源的Demo生成)。
在工具箱-组件-GMapcontrol找到我们GMap控件,拖拽到我们的窗体上,调整合适的大小。
在程序初始化时加载地图并设置GMap的一些属性
private void Form1_Load(object sender, EventArgs e) { gmap.MapProvider = GMapProviders.AMapSatelite;//选择地图为高德卫星地图 GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerAndCache; gmap.SetPositionByKeywords("Chengdu, China");//设定初始中心位置为Chengdu,成都坐标为西纬30.67度,东经104.06 gmap.ShowCenter = false;//不显示中心的红色十字 gmap.DragButton = System.Windows.Forms.MouseButtons.Left; //左键拖动地图 //设置地图分辨率信息 gmap.MaxZoom = 18; gmap.MinZoom = 3; gmap.Zoom = 15; }
控件基本使用
使用滑动条trackBar控制地图的分辨率zoom
这时我们的地图已经能够实现用触控板控制地图的分辨率,但为符合用户习惯,我们在地图的右边加上滑动条用于控制地图的分辨率。
首先在定义中我们将滑动条的每一小格为100,滑动条最大值和最小值对应初始时地图分辨率的最大值和最小值。
this.trackBar1.Minimum = 300; this.trackBar1.Maximum = 1800; this.trackBar1.TickFrequency = 100;
滑动条值改变时改变当前的地图分辨率
//点击滑动条改变地图分辨率 private void trackBar1_ValueChanged_1(object sender, EventArgs e) { gmap.Zoom = trackBar1.Value / 100.0; } //滑动滑动条改变地图分辨率 private void trackBar1_Scroll(object sender, EventArgs e) { gmap.Zoom = trackBar1.Value / 100.0; }
地图分辨率改变时改变当前的滑动条值
//地图分辨率改变滑动条位置 void gMapMapZoomChanged() { if(gmap.Zoom>=3&&gmap.Zoom<=18) { trackBar1.Value = (int)(gmap.Zoom * 100.0); } if(gmap.Zoom < 3) { gmap.Zoom = 3; } if (gmap.Zoom > 18) { gmap.Zoom = 18; } }
建立标记点
在地图的使用中常要求的功能就是添加标记点,并可以对标记点进行点击、删除等操作。
GMap.NET控件上可以添加Overlay(图层),可以添加多个图层,先添加的图层在下面显示;图层上可以添加GMapMarker(标记点)、GMapPolygon和GMapRoute。
//将字符串组LatLngInfo的点打标记,经纬度中用','隔开 public void SetLableOnMap(string[] LatLngInfo) { //创建图层 GMapOverlay gMapOverlay = new GMapOverlay(); //给每个坐标打点 for (int i=0;i< LatLngInfo.Length; i++) { string[] LatLng= LatLngInfo[i].Split(','); //在坐标点上绘制一绿色点并向图层中添加标签 gMapOverlay.Markers.Add(new GMarkerGoogle(new PointLatLng(double.Parse(LatLng[1]), double.Parse(LatLng[0])), GMarkerGoogleType.red)); //方便之后寻找到是第几个GMapMarker gMapOverlay.Markers[i].Tag = i; gMapOverlay.Id = "markroad"; } //向控件中添加图层 gmap.Overlays.Add(gMapOverlay); }
添加多边形
如果已经知道了多边形的各个点的经纬度坐标,我们可以通过如下方式在地图上添加多边形:
//在地图上画矩阵,知道矩阵上下左右(Lat_top、Lat_bottom、Lng_left、Lng_right)的4个点GMapOverlay polyOverlay = new GMapOverlay("polygons"); List<PointLatLng> points = new List<PointLatLng>(); //注意添加点的顺序 points.Add(new PointLatLng(Lat_top, Lng_left)); points.Add(new PointLatLng(Lat_bottom, Lng_left)); points.Add(new PointLatLng(Lat_bottom, Lng_right)); points.Add(new PointLatLng(Lat_top, Lng_right)); GMapPolygon polygon = new GMapPolygon(points, "mypolygon"); //颜色 polygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Red)); polygon.Stroke = new Pen(Color.Red, 1); polyOverlay.Polygons.Add(polygon); gmap.Overlays.Add(polyOverlay);
1 0
- C#|GMap.NET控件基本使用-高德地图
- GMap.NET地图开发控件使用心得
- 基于地图开发控件GMap.Net 使用
- Winform下的地图开发控件(GMap.NET)使用心得
- Winform 下的地图开发控件(GMap.NET)使用心得
- GMap.Net添加百度和高德地图瓦片源
- GMap.net在winform中调用高德地图
- 强大的在线地图控件GMap.NET
- 深入理解最强桌面地图控件GMAP.NET ---离线地图
- 深入理解最强桌面地图控件GMAP.NET ---离线地图
- 深入理解最强桌面地图控件GMAP.NET --- 百度地图
- 深入理解最强桌面地图控件GMAP.NET --- SOSO地图
- 入理解最强桌面地图控件GMAP.NET ---离线地图
- Winform下的地图开发控件(GMap.NET)使用心得转载学习
- C# Gmap.net控件的使用
- GMap.Net使用(2)之控件添加
- 深入理解最强桌面地图控件GMAP.NET --- 原理篇
- 深入理解最强桌面地图控件GMAP.NET --- 初识
- IDEA报:Lombok Requires Annotation Processing
- 你知道汇编与反汇编的区别吗?
- JSP页面缓存JS问题
- 基于@AspectJ的AOP
- 如何在Word中输入带圈数字1-10的黑底白字和白底黑字的数字字符?
- C#|GMap.NET控件基本使用-高德地图
- Nginx+Tomcat搭建负载均衡
- 【POJ 3070 Fibonacci】+ 矩阵快速幂
- linux 之 基础API底层执行过程
- ffmpeg-3.1.5的配置
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 第十一周 项目1-(3)中序线索化二叉树的算法
- Nim代码覆盖率
- 一年来的学习总结