【问题标题】:Create circle coordinates given central lat/long and radius创建给定中心纬度/经度和半径的圆坐标
【发布时间】: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#


【解决方案1】:

您输入的坐标正确。问题是Dictionary 不是用于数据存储的正确数据类型。一个圆圈总是会在您的 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 = new List&lt;Coord&gt;();。然后,您现在正在分配它们的位置,只需执行以下操作:

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

【讨论】:

    【解决方案2】:

    您不应使用Dictionary&lt;,&gt;,因为它不允许两个点具有相同的第一个坐标。

    改用List&lt;Tuple&lt;double, double&gt;&gt; 或List&lt;Point&gt; 之类的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-12
      • 2018-09-09
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      相关资源
      最近更新 更多