【发布时间】:2015-02-27 03:46:26
【问题描述】:
我正在创建一个应用程序,以在给定中心纬度/经度坐标的情况下创建任意半径的圆。我需要做的是获取初始纬度/经度坐标和半径并计算圆的点并将它们添加到字典列表中。
这是我到目前为止所拥有的,但是,我收到一条错误消息,提示“已添加具有相同键的项目”,这让我相信它实际上并没有正确转换圆坐标。
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;
}
使用示例:
plot(33.9331486, -118.4320114, 0.5);
有人能指出正确的方向吗?
【问题讨论】:
-
错误出现在哪一行?
-
@krillgar
coords.Add(latRadians, lngRadians); -
为什么这是一本字典?当然它应该是一个点列表,以便您可以绘制一个圆圈?
-
你确定这个算法是正确的吗?它似乎只是在原点附近绘制。就像它缺少纬度,经度偏移量
-
plux.co.uk/converting-radians-in-degrees-latitude-and-longitude 必须在绘图前将弧度转换回度数。问题解决了
标签: c#