首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何利用初始点、距离和方位角计算endPoint?

如何利用初始点、距离和方位角计算endPoint?
EN

Stack Overflow用户
提问于 2020-08-19 05:11:58
回答 2查看 76关注 0票数 1

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

代码语言:javascript
运行
复制
latitude: 37.624942,
longitude": -7.896333,
azimute: 233.0
distance : 20.0

下面是我的函数:

代码语言:javascript
运行
复制
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;
}

它返回:

代码语言:javascript
运行
复制
latitude: -0.0760588400705975
longitude:-7.8988473639987093

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

EN

回答 2

Stack Overflow用户

发布于 2020-08-19 05:42:40

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

票数 0
EN

Stack Overflow用户

发布于 2020-08-19 18:18:41

我需要处理弧度,然后将其转换回度数:

代码语言:javascript
运行
复制
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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63476695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档