// 点的鼠标移动事件,如果是选中状态下,则拖动图元 private void gmapControl_MouseMovePoint(object sender, System.Windows.Forms.MouseEventArgs e) { //面移动 var lnglat = gmapControl.FromLocalToLatLng(e.X, e.Y); int index = polygon.Points.FindIndex(o => o == currentPoint.Position); if (index != -1) { polygon.Points[index] = lnglat; } //点移动 currentPoint.Position = lnglat; gmapControl.UpdatePolygonLocalPosition(polygon); }
/// <summary> /// 计算各个定点位置并更新图元位置 /// </summary> /// <param name="currPoint">当前点的位置</param> private void CaluPointUpdatePositon(PointLatLng currPoint) { double distance = gmapControl.MapProvider.Projection.GetDistance(prevPoint, currPoint); // 计算距离 double bear = gmapControl.MapProvider.Projection.GetBearing(prevPoint, currPoint); // 计算方位角 List <PointLatLng> prevList = polygon.Points; List <PointLatLng> currList = new List <PointLatLng>(); for (int i = 0; i < prevList.Count; i++) { PointLatLng newPoint = GetPointByDistanceAndAngle(distance, prevList[i], bear); if (newPoint.Lng > 180 || newPoint.Lng < -180) { return; } if (newPoint.Lat > 90 || newPoint.Lat < -90) { return; } currList.Add(newPoint); } polygon.Points.Clear(); polygon.Points.AddRange(currList); gmapControl.UpdatePolygonLocalPosition(polygon); }
// 鼠标移动事件,如果是选中状态下,则拖动图元 private void gmapControl_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { if (isMouseDown && currentPoint != null) // 调整大小 { var lnglat = gmapControl.FromLocalToLatLng(e.X, e.Y); int index = polygon.Points.FindIndex(o => o == currentPoint.Position); if (index != -1) { polygon.Points[index] = lnglat; currentPoint.Position = lnglat; gmapControl.UpdatePolygonLocalPosition(polygon); } } else if (isMouseDown && isSelectPolygon) // 整体移动 { PointLatLng currPoint = gmapControl.FromLocalToLatLng(e.X, e.Y); CaluPointUpdatePositon(currPoint); // 移动面图元 RemoveMarker(); AddMarker(); } }
/// <summary> /// 鼠标单击,开始测量 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void gmapControl_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { if (isFinish == true) { ReleaseCommond(); return; } string name = string.Format("point_{0}", pointIndex); var lngLat = gmapControl.FromLocalToLatLng(e.X, e.Y); if (pointIndex == 0) // 第一个点生成面 { //加点 marker = new EditMarker(lngLat); gmapOverlay.Markers.Add(marker); //多边形 pointList.Add(lngLat); gmapPolygon = new GMapPolygon(pointList, PolygonName); gmapOverlay.Polygons.Add(gmapPolygon); gmapControl.UpdatePolygonLocalPosition(gmapPolygon); pointIndex++; } else//面对象生成以后添加面的点 { pointIndex++; marker = new EditMarker(lngLat); gmapOverlay.Markers.Add(marker); pointList.Add(lngLat); gmapPolygon.Points.Add(lngLat); gmapControl.UpdatePolygonLocalPosition(gmapPolygon); } } }