【问题标题】:How to calculate endPoint using initial point, distance and azimuth?如何使用初始点、距离和方位角计算端点?
【发布时间】:2020-12-08 02:45:52
【问题描述】:

我需要使用起点、距离和方位角找到终点。以下是每一个的值:

latitude: 37.624942,
longitude": -7.896333,
azimute: 233.0
distance : 20.0

这是我的功能:

private List<double> findEndPoint(string latitudeStart, string longitudeStart, string azimute,double distancia) 
{
    List<double> endPoint = new List<double>();

    double latitudeStartDouble = Convert.ToDouble(latitudeStart, System.Globalization.CultureInfo.InvariantCulture);
    double longitudeStartDouble = Convert.ToDouble(longitudeStart, System.Globalization.CultureInfo.InvariantCulture);
    double azimuteDouble = Convert.ToDouble(azimute, System.Globalization.CultureInfo.InvariantCulture);
    double azimuteRadians = ConvertToRadians(azimuteDouble);

    
    double R = 6371.0; // Raio da Terra em km

    

    double latitudeEnd = Math.Asin(Math.Sin(latitudeStartDouble) * Math.Cos(distancia / R) +
        Math.Cos(latitudeStartDouble) * Math.Sin(distancia / R) * Math.Cos(azimuteRadians));

    endPoint.Add(latitudeEnd);

    double longitudeEnd = longitudeStartDouble + Math.Atan2(
        Math.Sin(azimuteRadians) * Math.Sin(distancia / R) * Math.Cos(latitudeStartDouble),
        Math.Cos(distancia / R) - Math.Sin(latitudeStartDouble) * Math.Sin(latitudeEnd));

    endPoint.Add(longitudeEnd);

    return endPoint;
}

返回:

latitude: -0.0760588400705975
longitude:-7.8988473639987093

纬度一定是错的,但我不知道为什么它给了我那个值。

【问题讨论】:

    标签: c# math distance latitude-longitude azimuth


    【解决方案1】:

    您忘记添加latitudeStartDouble。您只需计算增量。所以latitudeEnd = latitudeStartDouble + ...etc...

    【讨论】:

      【解决方案2】:

      我需要使用弧度,然后将其转换回度数:

      private List<double> findEndPoint(string latitudeStart, string longitudeStart, string azimute,double distancia) 
          {
              List<double> endPoint = new List<double>();
      
              double latitudeStartDouble = Convert.ToDouble(latitudeStart, System.Globalization.CultureInfo.InvariantCulture);
              latitudeStartDouble = ConvertToRadians(latitudeStartDouble);
      
              double longitudeStartDouble = Convert.ToDouble(longitudeStart, System.Globalization.CultureInfo.InvariantCulture);
              longitudeStartDouble = ConvertToRadians(longitudeStartDouble);
      
              double azimuteDouble = Convert.ToDouble(azimute, System.Globalization.CultureInfo.InvariantCulture);
              double azimuteRadians = ConvertToRadians(azimuteDouble);
      
      
              double R = 6371; // Raio da Terra em km
      
              
      
              double latitudeEnd = Math.Asin(Math.Sin(latitudeStartDouble) * Math.Cos(distancia / R) +
                  Math.Cos(latitudeStartDouble) * Math.Sin(distancia / R) * Math.Cos(azimuteRadians));
      
              latitudeEnd = ConvertToDegrees(latitudeEnd);
              endPoint.Add(latitudeEnd);
      
              double longitudeEnd = longitudeStartDouble + Math.Atan2(Math.Sin(azimuteRadians) * Math.Sin(distancia / R) * Math.Cos(latitudeStartDouble),
                  Math.Cos(distancia / R) - Math.Sin(latitudeStartDouble) * Math.Sin(latitudeEnd));
      
              longitudeEnd = ConvertToDegrees(longitudeEnd);
              endPoint.Add(longitudeEnd);
      
              return endPoint;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-30
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多