Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建给定中心纬度/长度和半径的圆坐标_C# - Fatal编程技术网

C# 创建给定中心纬度/长度和半径的圆坐标

C# 创建给定中心纬度/长度和半径的圆坐标,c#,C#,我正在创建一个应用程序来创建一个给定中心纬度/经度坐标的任意半径的圆。我需要做的是获取初始的lat/lon坐标和半径,计算圆的点,并将它们添加到字典列表中 这是我到目前为止所得到的,但是我得到了一个错误,说“已经添加了一个具有相同键的项”,这让我相信它实际上没有正确地转换圆坐标 private const double EARTH_RADIUS_NM = 3437.670013352; private void plot(double lat, double lon, double radiu

我正在创建一个应用程序来创建一个给定中心纬度/经度坐标的任意半径的圆。我需要做的是获取初始的lat/lon坐标和半径,计算圆的点,并将它们添加到字典列表中

这是我到目前为止所得到的,但是我得到了一个错误,说“已经添加了一个具有相同键的项”,这让我相信它实际上没有正确地转换圆坐标

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;
}

有人能给我指出正确的方向吗?

您输入的坐标正确。问题是
字典
不是用于数据存储的正确数据类型。一个圆将始终在y轴上的正高度和负高度击中相同的X坐标

您需要创建一个简单的类来存储这两个坐标,并列出它们:

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;
    }
}
然后在您的方法中,使用
var coords=newlist()。然后,在当前分配它们的位置,只需执行以下操作:

coords.Add(new Coordinate(lat, lon));

您不应该使用
字典
,因为它不允许两个点具有相同的第一坐标


改为使用类似于
List
List

抛出错误的行是什么?@krillgar
coords.Add(latRadians,lngRadians)为什么这是一本字典?当然它应该是一个点列表,这样你就可以画一个圆了?你确定这个算法是正确的吗?它似乎只是在原点附近绘制的。这就像它缺少一个纬度,经度偏移必须在绘图之前从弧度转换回度。问题解决
coords.Add(new Coordinate(lat, lon));