/// <summary> /// 创建线图元 /// </summary> /// <param name="kml">kml对象</param> /// <param name="gmapOverlay">图层</param> /// <returns></returns> public IMFElement CreateElement(Kml kml, GMapOverlay gmapOverlay) { KmlLineString line = kml.Placemark.Graph as KmlLineString; if (line == null) { return(null); } if (line.PositionList == null || line.PositionList.Count == 0) { return(null); } // 画线 Line_GMap lineRoute = new Line_GMap(kml.Placemark.Name, line); // 将图元添加到图层 if (gmapOverlay.Control.InvokeRequired) { gmapOverlay.Control.Invoke(new Action(delegate { gmapOverlay.Routes.Add(lineRoute); })); } else { gmapOverlay.Routes.Add(lineRoute); } return(lineRoute); }
/// <summary> /// 释放资源 /// </summary> public void Dispose() { ReleaseCommond(); gmapControl = null; mapOverlay = null; marker = null; lineRoute = null; }
/// <summary> /// 释放资源 /// </summary> public void Dispose() { ReleaseCommond(); CommondExecutedEvent = null; gmapControl = null; mapOverlay = null; lineRoute = null; marker = null; markerList = null; }
/// <summary> /// 鼠标按下,绘制第一个点,并注册鼠标移动事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void gmapControl_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { var lngLat = gmapControl.FromLocalToLatLng(e.X, e.Y); if (index == 0) { //添加点 MapLngLat point = new MapLngLat(lngLat.Lng, lngLat.Lat); marker = new EditMarker(lngLat); marker.Tag = "点"; marker.ToolTipText = string.Format("起点\n经度:{0}\n纬度:{1}\n角度:{2}°", lngLat.Lng, lngLat.Lat, 0); marker.ToolTipMode = MarkerTooltipMode.Always; mapOverlay.Markers.Add(marker); //添加线 KmlLineString linekml = new KmlLineString(); linekml.Color = Color.Green; linekml.Width = 3; List <MapLngLat> pList = new List <MapLngLat>(); pList.Add(new MapLngLat(lngLat.Lng, lngLat.Lat)); pList.Add(new MapLngLat(lngLat.Lng, lngLat.Lat)); linekml.PositionList = pList; lineRoute = new Line_GMap("measure_Angle", linekml); mapOverlay.Routes.Add(lineRoute); pointList[0] = point; //注册移动事件 gmapControl.MouseMove += new System.Windows.Forms.MouseEventHandler(gmapControl_MouseMove); index++; } else if (index == 1) { index++; gmapControl.MouseMove -= gmapControl_MouseMove; RegistCommandExcuteEvent(); ReleaseCommond();//修改 陈静 } else if (index == 2) { index = 0; mapOverlay.Markers.Remove(marker); mapOverlay.Routes.Remove(lineRoute); } } }
/// <summary> /// 鼠标单击,开始测量 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void gmapControl_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left && gmapControl.CanDragMap == false) { if (isFinish == true) { foreach (var item in markerList) { mapOverlay.Markers.Remove(item); } mapOverlay.Routes.Remove(lineRoute); isFinish = false; //ReleaseCommond(); //return; } string name = string.Format("point_{0}", pointIndex); var lngLat = gmapControl.FromLocalToLatLng(e.X, e.Y); if (pointIndex == 0) // 第一个点 { // 加点 marker = new EditMarker(lngLat); marker.ToolTipMode = MarkerTooltipMode.Always; marker.ToolTipText = string.Format("起点\n经度:{0}\n纬度:{1}\n", Math.Round(lngLat.Lng, 6), Math.Round(lngLat.Lat, 6)); mapOverlay.Markers.Add(marker); marker.ToolTip.Format.Alignment = StringAlignment.Near; // 加线 KmlLineString linekml = new KmlLineString(); linekml.Color = Color.Green; linekml.Width = 3; List <MapLngLat> pList = new List <MapLngLat>(); pList.Add(new MapLngLat(lngLat.Lng, lngLat.Lat)); linekml.PositionList = pList; lineRoute = new Line_GMap("measure_line", linekml); mapOverlay.Routes.Add(lineRoute); pointIndex++; } else { pointIndex++; // 添加点 lineRoute.Points.Add(lngLat); lineRoute.AddPoint(new MapLngLat(lngLat.Lng, lngLat.Lat)); gmapControl.Refresh(); // 添加Marker marker = new EditMarker(lngLat); mapOverlay.Markers.Add(marker); distance = lineRoute.Distance; distance = Math.Round(distance, 3); marker.ToolTipMode = MarkerTooltipMode.Always; marker.ToolTipText = string.Format("点{0}\n经度:{1}\n纬度:{2}\n距离:{3}(公里)", pointIndex, Math.Round(lngLat.Lng, 6), Math.Round(lngLat.Lat, 6), distance); marker.ToolTip.Format.Alignment = StringAlignment.Near; } markerList.Add(marker); } }