Samyrro Samyrrovich

Samyrro Samyrrovich

  • 2.1k
  • 26
  • 3.5k

C# GMap: How to draw arc on a map

Dec 9 2019 2:00 PM
Hello, how can I add a polygon to the map as in the picture below? From a certain point of coordinates should open a polygon long, for example, 1 kilometer and a 120-degree opening angle.
 
My code can only draw a circle. Can it be changed so that it can draw a polygon from a certain point of coordinates with an indication of the direction, distance of drawing and the angle of aperture?
 
  1. private void CreateCircle(Double lat, Double lon, double radius, int ColorIndex) {  
  2.  GMapOverlay markers = new GMapOverlay(mygmap, "markers");  
  3.  PointLatLng point = new PointLatLng(lat, lon);  
  4.  int segments = 1080;  
  5.   
  6.  List < PointLatLng > gpollist = new List < PointLatLng > ();  
  7.   
  8.  for (int i = 0; i < segments; i++) {  
  9.   gpollist.Add(FindPointAtDistanceFrom(point, i * (Math.PI / 180), radius / 1000));  
  10.  }  
  11.   
  12.  GMapPolygon polygon = new GMapPolygon(gpollist, "Circle");  
  13.  switch (ColorIndex) {  
  14.   
  15.   case 1:  
  16.    polygon.Fill = new SolidBrush(Color.FromArgb(80, Color.Red));  
  17.    break;  
  18.   case 2:  
  19.    polygon.Fill = new SolidBrush(Color.FromArgb(80, Color.Orange));  
  20.    break;  
  21.   case 3:  
  22.    polygon.Fill = new SolidBrush(Color.FromArgb(20, Color.Aqua));  
  23.    break;  
  24.   default:  
  25.    MessageBox.Show("No search zone found!");  
  26.    break;  
  27.  }  
  28.   
  29.  polygon.Stroke = new Pen(Color.Red, 1);  
  30.  markers.Polygons.Add(polygon);  
  31.  mygmap.Overlays.Add(markers);  
  32. }  
  33.   
  34. public static GMap.NET.PointLatLng FindPointAtDistanceFrom(GMap.NET.PointLatLng startPoint, double initialBearingRadians, double distanceKilometres) {  
  35.  const double radiusEarthKilometres = 6371.01;  
  36.  var distRatio = distanceKilometres / radiusEarthKilometres;  
  37.  var distRatioSine = Math.Sin(distRatio);  
  38.  var distRatioCosine = Math.Cos(distRatio);  
  39.   
  40.  var startLatRad = DegreesToRadians(startPoint.Lat);  
  41.  var startLonRad = DegreesToRadians(startPoint.Lng);  
  42.   
  43.  var startLatCos = Math.Cos(startLatRad);  
  44.  var startLatSin = Math.Sin(startLatRad);  
  45.   
  46.  var endLatRads = Math.Asin((startLatSin * distRatioCosine) + (startLatCos * distRatioSine * Math.Cos(initialBearingRadians)));  
  47.  var endLonRads = startLonRad + Math.Atan2(Math.Sin(initialBearingRadians) * distRatioSine * startLatCos, distRatioCosine - startLatSin * Math.Sin(endLatRads));  
  48.   
  49.  return new GMap.NET.PointLatLng(RadiansToDegrees(endLatRads), RadiansToDegrees(endLonRads));  
  50. }  
  51.   
  52. public static double DegreesToRadians(double degrees) {  
  53.  const double degToRadFactor = Math.PI / 180;  
  54.  return degrees * degToRadFactor;  
  55. }  
  56.   
  57. public static double RadiansToDegrees(double radians) {  
  58.  const double radToDegFactor = 180 / Math.PI;  
  59.  return radians * radToDegFactor;  
  60. } 

Answers (1)