How to draw circle on the MAP using GMAP.NET in C#

后端 未结 8 1844
鱼传尺愫
鱼传尺愫 2020-12-21 11:06

I am using GMAP.NET in c#. I am able to display the map on the form, now i am trying to draw a CIRCLE mouse by clicking on a certian point, keeping the left mouse button an

8条回答
  •  执念已碎
    2020-12-21 11:35

       private void CreateCircle(Double lat, Double lon, double radius, int ColorIndex)
        {
            PointLatLng point = new PointLatLng(lat, lon);
            int segments = 1080;
    
            List gpollist = new List();
    
            for (int i = 0; i < segments; i++)
            {
                gpollist.Add(FindPointAtDistanceFrom(point, i*(Math.PI/180), radius / 1000));
            }
    
            GMapPolygon polygon = new GMapPolygon(gpollist, "Circle");
            switch (ColorIndex) {
    
                case 1:
                    polygon.Fill = new SolidBrush(Color.FromArgb(80, Color.Red));
                    break;
                case 2:
                    polygon.Fill = new SolidBrush(Color.FromArgb(80, Color.Orange));
                    break;
                case 3:
                    polygon.Fill = new SolidBrush(Color.FromArgb(20, Color.Aqua));
                    break;
                default:
                    MessageBox.Show("No search zone found!");
                    break;
            }
    
    
            polygon.Stroke = new Pen(Color.Red, 1);
            markers.Polygons.Add(polygon);
            gMapCtl.Overlays.Add(markers);
        }
    
    
        public static GMap.NET.PointLatLng FindPointAtDistanceFrom(GMap.NET.PointLatLng startPoint, double initialBearingRadians, double distanceKilometres)
        {
            const double radiusEarthKilometres = 6371.01;
            var distRatio = distanceKilometres / radiusEarthKilometres;
            var distRatioSine = Math.Sin(distRatio);
            var distRatioCosine = Math.Cos(distRatio);
    
            var startLatRad = DegreesToRadians(startPoint.Lat);
            var startLonRad = DegreesToRadians(startPoint.Lng);
    
            var startLatCos = Math.Cos(startLatRad);
            var startLatSin = Math.Sin(startLatRad);
    
            var endLatRads = Math.Asin((startLatSin * distRatioCosine) + (startLatCos * distRatioSine * Math.Cos(initialBearingRadians)));
            var endLonRads = startLonRad + Math.Atan2(Math.Sin(initialBearingRadians) * distRatioSine * startLatCos,distRatioCosine - startLatSin * Math.Sin(endLatRads));
    
            return new GMap.NET.PointLatLng(RadiansToDegrees(endLatRads), RadiansToDegrees(endLonRads));
        }
    
        public static double DegreesToRadians(double degrees)
        {
            const double degToRadFactor = Math.PI/180;
            return degrees * degToRadFactor;
        }
    
        public static double RadiansToDegrees(double radians)
        {
            const double radToDegFactor = 180/Math.PI;
            return radians * radToDegFactor;
        }
    
    
    
        public static double DistanceTwoPoint(double startLat, double startLong, double endLat, double endLong) {
    
            var startPoint = new GeoCoordinate(startLat, startLong);
            var endPoint = new GeoCoordinate(endLat, endLong);
    
            return startPoint.GetDistanceTo(endPoint);
        }
    

提交回复
热议问题