winforms - 从点 Gmap 列表创建路线
问题描述
我目前正在开发一个 Windows 窗体应用程序,该应用程序从服务器获取 PointLatLng 列表并将它们显示在地图上。
这是我到目前为止所做的(在所有点之间画线):
private void DrawRoute()
{
List<PointLatLng> inter = new List<PointLatLng>();
//---
GMap.NET.WindowsForms.GMapOverlay markers = new GMap.NET.WindowsForms.GMapOverlay("markers");
//--- Creating the "Start" marker below
GMap.NET.WindowsForms.GMapMarker marker_start = new GMap.NET.WindowsForms.Markers.GMarkerGoogle(
new GMap.NET.PointLatLng(points[0].Lat, points[0].Lng),
GMap.NET.WindowsForms.Markers.GMarkerGoogleType.arrow);
marker_start.ToolTipText = "Start";
//--- Center the map on the Start marker
_Map.Position = new PointLatLng(points[0].Lat,points[0].Lng);
_Map.MinZoom = 5;
_Map.MaxZoom = 100;
_Map.Zoom = 14;
//---
GMap.NET.WindowsForms.GMapOverlay polyOverlay = new GMap.NET.WindowsForms.GMapOverlay("polygons");
for (int i=0; i<points.Count -2; i++)
{
anterior = false;
//--- Adding a GmapPolygon with only 2 points (Drawing a line on the map)
inter.Add(points[i]);
inter.Add(points[i + 1]);
GMap.NET.WindowsForms.GMapPolygon polygon = new GMap.NET.WindowsForms.GMapPolygon(inter, "mypolygon");
polygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Red));
polygon.Stroke = new Pen(Color.Red, 5);
polyOverlay.Polygons.Add(polygon);
_Map.Overlays.Add(polyOverlay);
inter.Remove(inter[1]);
inter.Remove(inter[0]);
}
//-- Creating the "Finish" marker
GMap.NET.WindowsForms.GMapMarker marker_finish = new GMap.NET.WindowsForms.Markers.GMarkerGoogle(
new GMap.NET.PointLatLng(p_anterior.Lat , p_anterior.Lng),
GMap.NET.WindowsForms.Markers.GMarkerGoogleType.arrow);
marker_finish.ToolTipText = "Finish";
//--- Adding the "Start" and the "Finish" marker on map
markers.Markers.Add(marker_start);
markers.Markers.Add(marker_finish);
}
我是否有可能使用 gmap 库从该点列表创建路线?
解决方案
创建路由就像传递一个List<PointLatLng>
toGMapRoute
并将其添加到覆盖一样简单:
val route = new GMapRoute(points, "sample route");
route.Stroke = new Pen(GetRandomColor());
route.Stroke.Width = 4;
route.Stroke.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDot;
route.Stroke.StartCap = LineCap.NoAnchor;
route.Stroke.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
route.Stroke.LineJoin = LineJoin.Round;
routes.Routes.Add(route);
如有疑问,请查看 github 上的示例。
推荐阅读
- azure - UnicodeDecodeError:“ascii”编解码器无法解码字节(微软 API)
- css - Chrome 中的划痕图像
- r - R x 轴毫秒到日期标签
- angular - mat-slider 应该如何在使用 formGroup 配置的表单中使用?角材料
- excel - 在excel中查找两列差异最大的行
- c# - 将数据上传到sql表
- jmeter - 如何在 jmeter 上读取分块的 HTTP 响应?
- vb.net - 没有可用的错误消息,结果代码:DB_SEC_E_AUTH_FAILED(0x80040E4D)
- java - 如何在Java中获取给定日期的上周六/上周六?
- javascript - 根据特定值对 Array 对象进行分组