GMap.NET使用教程

欢迎访问我的博客GISer空间

原文链接:GMap.NET使用教程

GMap.NET是一个强大、免费、跨平台、开源的.NET控件,它在Windows Forms和WPF环境中能够通过Google, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac等实现路径规划、地理编码以及地图展示功能,并支持缓存和运行在Mobile环境中。

1. 下载和安装

1.1 下载

        从这里下载,解压后得到两个文件(GMap.NET.Core.dll 和 GMap.NET.WindowsForms.dll)。

1.2 安装

        添加引用。

引用管理器

        添加GMapControl到工具箱。在“选择项”时,选择“GMap.NET.WindowsForms.dll”文件即可添加。

GMapControl

1.3 使用NuGet搜索安装

使用NuGet安装

2. 创建地图

        拖拽GMapControl到Windows Form中,可看到空间中心有个小十字。查看属性,你会发现GMap.NET的一些特有属性。通过设置这些属性可以配置地图的行为,而不能设置其内容。

  • Bearing - 按照指定的度数向左旋转地图
  • CanDragMap – 是否启用鼠标右键拖动(平移)地图
  • EmptyTileColor – 设置没有数据的切片所显示的颜色
  • MarkersEnabled – 是否显示定义的标记,同PolygonsEnabled和RoutesEnabled
  • ShowTileGridLines – 显示网格线
  • Zoom,MinZoom和MaxZoom - 缩放级别

         GMap.NET支持多种地图源,定义地图源需在代码中设置。可以在GMapControl的 Load 事件中添加如下代码:

this.gMapControl1.MapProvider = OpenStreet4UMapProvider.Instance; // 设置地图源
GMaps.Instance.Mode = AccessMode.ServerAndCache; // GMap工作模式
this.gMapControl1.SetPositionByKeywords("北京"); // 地图中心位置

//使用经纬度设置地图中心
//this.gMapControl1.Position = new GMap.NET.PointLatLng(39.923518, 116.539009);

         ①MapProvider:设置地图源,输入GMapProviders可以看到GMap所支持的所有地图源。

GMapProviders

         ②GMaps.Instance.Mode: GMap可以从服务器、本地缓存、服务器或本地缓存获取数据。这适用于在应用程序中创建的所有GMap控件实例,只需要设置一次该值。

Mode

        ③设置地图中心位置可以使用关键字或者经纬度。

        ④地图显示结果。按住鼠标右键可以拖拽地图,当然也可以设置其他键来拖拽。

GMap

this.gMapControl1.DragButton = MouseButtons.Left;

3. 添加标记

//创建一个名为“markers”的图层
GMapOverlay markers = new GMapOverlay("markers");
//创建标记,并设置位置及样式
GMapMarker marker = new GMarkerGoogle(new PointLatLng(39.923518, 116.539009), GMarkerGoogleType.blue_pushpin);
//将标记添加到图层
markers.Markers.Add(marker);
//将图层添加到地图
this.gMapControl1.Overlays.Add(markers);

        ①GMapOverlay:图层。添加的标记、图形、路径等都是在图层上操作的。 

        ②GMapMarker:GMarkerGoogle,提供标记位置(PointLatLng)和标记样式。 它有两个重载,可以使用GMarkerGoogleType和位图。GMap.NET还提供了GMarkerCross,这是一个简单的十字,不允许使用图标。

public GMarkerGoogle(PointLatLng p, GMarkerGoogleType type);
public GMarkerGoogle(PointLatLng p, Bitmap Bitmap);

        GMapMarker还可以设置ToolTip。

marker.ToolTipText = "我在这里";
marker.ToolTip.Fill = new SolidBrush(Color.FromArgb(100, Color.Black));
marker.ToolTip.Foreground = Brushes.White;
marker.ToolTip.TextPadding = new Size(20, 20);

        ③地图显示结果。(发现中心的小十字没了吗,因为这是可以设置的)

添加标记 

this.gMapControl1.ShowCenter = false;

        ④标记点击事件

        标记本身没有任何事件钩子,GMapControl的OnMarkerClick事件即为标记点击事件。在下面的示例中,点击标记会弹出提示框显示ToolTip的文本内容。当然GMap.NET不只有点击事件,还有OnMarkerEnter、OnMarkerLeave。

private void gMapControl1_OnMarkerClick(GMapMarker item, MouseEventArgs e)
{
    MessageBox.Show(String.Format("Marker:{0} 被点了。", item.ToolTipText));
}

4. 添加多边形

        添加多边形和添加标记的原理是一样的。

GMapOverlay polygons = new GMapOverlay("polygons");
// 多边形的顶点
List<PointLatLng> points = new List<PointLatLng>();
points.Add(new PointLatLng(39.92244, 116.3922));
points.Add(new PointLatLng(39.92280, 116.4015));
points.Add(new PointLatLng(39.91378, 116.4019));
points.Add(new PointLatLng(39.91346, 116.3926));
GMapPolygon polygon = new GMapPolygon(points, "故宫");
polygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Red));
polygon.Stroke = new Pen(Color.Red, 1);
polygons.Polygons.Add(polygon);
this.gMapControl1.Overlays.Add(polygons);

        显示结果。

5. 路径规划

        GMap.NET中路径规划主要用RoutingProvider类的以下两种方法:

//avoidHighways:是否避免走高速公路
//walkingMode:是否步行
//zoom:查找路径时的zoom

//根据起止点经纬度查找路径
MapRoute GetRoute(PointLatLng start, PointLatLng end, bool avoidHighways, bool walkingMode, int Zoom);
//根据起止点地址查找路径
MapRoute GetRoute(string start, string end, bool avoidHighways, bool walkingMode, int Zoom);

         通过点击地图,添加起止点。添加地图标记之前,需要先清除(Clear)以下,这样可以避免重复点击地图时,显示多个标记。

int isSetPoint; //设置起止点,1为起点,2为终点
PointLatLng startPoint; //起点
PointLatLng endPoint;   //终点

private void btn_SetStart_Click(object sender, EventArgs e)
{
	isSetPoint = 1;
}

private void btn_SetEnd_Click(object sender, EventArgs e)
{
	isSetPoint = 2;
}

//点击地图添加起止点
private void gMapControl1_MouseClick(object sender, MouseEventArgs e)
{
	PointLatLng point = this.gMapControl1.FromLocalToLatLng(e.X, e.Y);
	switch (isSetPoint)
	{
		case 1:
			//起点
			startPoint = point;
			GMapMarker marker1 = new GMarkerGoogle(startPoint, GMarkerGoogleType.red_pushpin);
			//清除上一次添加的起点
			markerStart.Markers.Clear();
			markerStart.Markers.Add(marker1);
			break;
		case 2:
			//终点
			endPoint = point;
			GMapMarker marker2 = new GMarkerGoogle(endPoint, GMarkerGoogleType.blue_pushpin);
			markerEnd.Markers.Clear();
			markerEnd.Markers.Add(marker2);
			break;
		default:
			break;
	}
}

         查找路径。

private void btn_FindRoute_Click(object sender, EventArgs e)
{
	//点击查找路径后,不再添加点
	isSetPoint = 0;
    RoutingProvider rp = this.gMapControl1.MapProvider as RoutingProvider;
	//获取路径
	MapRoute route = rp.GetRoute(startPoint, endPoint, false, false, (int)this.gMapControl1.Zoom);
	if (route != null)
	{
		//添加routes图层
		GMapOverlay routes = new GMapOverlay("routes");
		GMapRoute r = new GMapRoute(route.Points, route.Name);
		r.Stroke = new Pen(Color.Red, 3);
		routes.Routes.Add(r);
		//添加到地图
		this.gMapControl1.Overlays.Add(routes);
		this.gMapControl1.ZoomAndCenterRoute(r);
	}
	else
	{
		MessageBox.Show("未能找到路线");
	}
}

        查找路径结果。

路径规划

如果路径查找结果(route)为null,要么时确实没有结果,要么是GMap封装的地址搜索服务失效。我在写这篇文章时,就无法使用GoogleChinaMap,上图是使用OpenStreetMap的搜索结果。

GMap.NET使用版本为1.7稳定版。 

 

更多精彩请关注一氧化二氢 

转载于:https://my.oschina.net/huanglii/blog/882605

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值