[英]How to calculate endPoint using initial point, distance and azimuth?
我需要使用起点、距离和方位角找到终点。 以下是每一项的价值:
latitude: 37.624942,
longitude": -7.896333,
azimute: 233.0
distance : 20.0
这是我的 function:
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
纬度一定是错误的,但我不知道为什么它给了我那个值。
您忘记添加latitudeStartDouble
。 您只需计算增量。 所以latitudeEnd = latitudeStartDouble +...etc...
我需要使用弧度,然后将其转换回度数:
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.