Le calcul des coordonnées d'un portant et d'une distance

J'ai des problèmes de mise en œuvre de la fonction décrite ici ici.

C'est mon implémentation Java:

private static double[] pointRadialDistance(double lat1, double lon1, 
        double radianBearing, double radialDistance) {
     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;
     }
    return (new double[]{lat, lon});
}

- Je convertir le degré de roulement pour les radians et de convertir de la distance (km) en radians distance avant d'appeler la fonction - ce qui n'est pas le problème.

Cependant, lorsque j'ai d'entrée de coordonnées telles que:
lat = 49.25705;
lon = -123.140259;
avec une direction de 225 (sud-ouest) et une distance de 1 km

- Je obtenir cette retourné:
lat: -1.0085434360125864
lon: -3.7595299668539504

Sa toute évidence, n'est pas correcte, n'importe qui peut voir ce que je fais de mal?

Grâce

Essayez quelques très simple d'entrées. Par exemple, entrez lat == lon == 0 (près de l'Afrique, en fait) avec un palier de zéro et la distance à zéro. Avez-vous d'obtenir votre point de départ arrière? L'étendre à essayer d'autres lats et lons-le-saunier, le cas échéant. Ensuite, essayez d'ajouter une gamme: avez-vous quelque chose d'intelligent?

OriginalL'auteur user106996 | 2009-05-18