Estoy tratando de encontrar el punto de destino, dado un punto de partida lat/long, teniendo & distancia. La calculadora de este sitio web a continuación me da los resultados deseados.Calcular punto final dado distancia, rodamiento, punto de partida
http://www.movable-type.co.uk/scripts/latlong.html
Cuando trato de poner en práctica la misma a través del código, no consigo los resultados correctos.
A continuación es mi código -
private GLatLng pointRadialDistance(double lat1, double lon1,
double radianBearing, double radialDistance)
{
double rEarth = 6371.01;
lat1 = DegreeToRadian(lat1);
lon1 = DegreeToRadian(lon1);
radianBearing = DegreeToRadian(radianBearing);
radialDistance = radialDistance/rEarth;
double lat = Math.Asin(Math.Sin(lat1) * Math.Cos(radialDistance) + Math.Cos(lat1)
* Math.Sin(radialDistance) * Math.Cos(radianBearing));
double lon;
if (Math.Cos(lat) == 0)
{ // Endpoint a pole
lon = lon1;
}
else
{
lon = ((lon1 - Math.Asin(Math.Sin(radianBearing) * Math.Sin(radialDistance)/Math.Cos(lat))
+ Math.PI) % (2 * Math.PI)) - Math.PI;
}
lat = RadianToDegree(lat);
lon = RadianToDegree(lon);
GLatLng newLatLng = new GLatLng(lat, lon);
return newLatLng;
}
public double Bearing(double lat1, double long1, double lat2, double long2)
{
//Convert input values to radians
lat1 = DegreeToRadian(lat1);
long1 = DegreeToRadian(long1);
lat2 = DegreeToRadian(lat2);
long2 = DegreeToRadian(long2);
double deltaLong = long2 - long1;
double y = Math.Sin(deltaLong) * Math.Cos(lat2);
double x = Math.Cos(lat1) * Math.Sin(lat2) -
Math.Sin(lat1) * Math.Cos(lat2) * Math.Cos(deltaLong);
double bearing = Math.Atan2(y, x);
return bearing;
}
public double DegreeToRadian(double angle)
{
return Math.PI * angle/180.0;
}
public double RadianToDegree(double angle)
{
return 180.0 * angle/Math.PI;
}
Desde el programa principal, que llamo los procedimientos Sub de la siguiente manera -
double bearing = Bearing(-41.294444, 174.814444, -40.90521, 175.6604);
GLatLng endLatLng = pointRadialDistance(-41.294444, 174.814444, bearing, 80);
consigo debajo de los resultados -
Bearing=1.02749621782165
endLatLng=-40.5751022737927,174.797458881699
La respuesta Espero que sea -40.939722,175.646389
(desde el enlace del sitio web anterior).
¿Alguien puede sugerir qué error estoy cometiendo en el código aquí?
Por un lado, el resultado devuelto por Bearing se debe convertir en grado. –