Create circle coordinates given central lat/long and radius
c#
Solution
You are entering the coordinates correctly. The problem is that a `Dictionary` is not the correct data type to be using for your data storage. A circle will always hit the same X coordinate in the positive and negative heights over your y-axis.
You'll want to create a simple class to store the two coordinates, and make a List of them:
public class Coordinate
{
public double Lat { get; set; }
public double Lon { get; set; }
public Coordinate(double lat, double lon)
{
this.Lat = lat;
this.Lon = lon;
}
}
Then inside your method, have `var coords = new List<Coord>();`. Then where you're currently assigning them now, just do the following:
coords.Add(new Coordinate(lat, lon));
Problem
I'm creating an application to create a circle of any radius given a central lat/lon coordinate. What I need to do is take the initial lat/lon coordinates and radius and calculate the points for the circle and add them to a dictionary list. Here's what I have so far, but wit this, I get an error saying that 'An item with the same key has already been added' which leads me believe that it isn't actually converting the circle coordinates correctly. ``` private const double EARTH_RADIUS_NM = 3437.670013352; private void plot(double lat, double lon, double radius) { var coords = new Dictionary<double, double>(); lat = ConvertToRadians(lat); lon = ConvertToRadians(lon); double d = radius / EARTH_RADIUS_NM; for(int x = 0; x <= 360; x++) { double brng = ConvertToRadians(x); var latRadians = Math.Asin(Math.Sin(lat) * Math.Cos(d) + Math.Cos(lat) * Math.Sin(d) * Math.Cos(brng)); var lngRadians = lon + Math.Atan2(Math.Sin(brng) * Math.Sin(d) * Math.Cos(lat), Math.Cos(d) - Math.Sin(lat) * Math.Sin(latRadians)); coords.Add(latRadians, lngRadians); } } public double ConvertToRadians(double angle) { return (angle * Math.PI) / 180; } ``` Example of use: ``` plot(33.9331486, -118.4320114, 0.5); ``` Can someone point me in the right direction?