Exemple #1
0
        // 点的鼠标移动事件,如果是选中状态下,则拖动图元
        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();
            }
        }
Exemple #4
0
        /// <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);
                }
            }
        }