* Bearing - 按照指定的度数向左旋转地图
* CanDragMap – 是否启用鼠标右键拖动(平移)地图
* EmptyTileColor – 设置没有数据的切片所显示的颜色
* MarkersEnabled – 是否显示定义的标记,同PolygonsEnabled和RoutesEnabled
* ShowTileGridLines – 显示网格线
* Zoom,MinZoom和MaxZoom - 缩放级别
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所支持的所有地图源。
this.gMapControl1.DragButton = MouseButtons.Left;
//创建一个名为“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:图层。添加的标记、图形、路径等都是在图层上操作的。
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; //隐藏中心十字
private void gMapControl1_OnMarkerClick(GMapMarker item, MouseEventArgs e) { MessageBox.Show(String.Format("Marker:{0} 被点了。", item.ToolTipText)); }
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);
//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);
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的搜索结果。
原文:https://www.cnblogs.com/jiangshuai52511/p/12107065.html