C# 创建给定中心纬度/长度和半径的圆坐标
我正在创建一个应用程序来创建一个给定中心纬度/经度坐标的任意半径的圆。我需要做的是获取初始的lat/lon坐标和半径,计算圆的点,并将它们添加到字典列表中 这是我到目前为止所得到的,但是我得到了一个错误,说“已经添加了一个具有相同键的项”,这让我相信它实际上没有正确地转换圆坐标C# 创建给定中心纬度/长度和半径的圆坐标,c#,C#,我正在创建一个应用程序来创建一个给定中心纬度/经度坐标的任意半径的圆。我需要做的是获取初始的lat/lon坐标和半径,计算圆的点,并将它们添加到字典列表中 这是我到目前为止所得到的,但是我得到了一个错误,说“已经添加了一个具有相同键的项”,这让我相信它实际上没有正确地转换圆坐标 private const double EARTH_RADIUS_NM = 3437.670013352; private void plot(double lat, double lon, double radiu
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
抛出错误的行是什么?@krillgarcoords.Add(latRadians,lngRadians)代码>为什么这是一本字典?当然它应该是一个点列表,这样你就可以画一个圆了?你确定这个算法是正确的吗?它似乎只是在原点附近绘制的。这就像它缺少一个纬度,经度偏移必须在绘图之前从弧度转换回度。问题解决
coords.Add(new Coordinate(lat, lon));