Berechnen Endpunkt gegeben, Entfernung, Peilung, Ausgangsort

Ich bin auf der Suche nach dem Zielpunkt, gegeben ein Ausgangspunkt, lat/long, Lager & Abstand. Der Rechner von dieser website unten gibt mir nicht die gewünschten Ergebnisse.

http://www.movable-type.co.uk/scripts/latlong.html

Wenn ich versuche zu implementieren, durch die gleichen code, ich bekomme nicht das richtige Ergebnis.

Unten ist mein code -

    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;
    }

Vom Hauptprogramm rufe ich die sub-Prozeduren wie folgt -

double bearing = Bearing(-41.294444, 174.814444, -40.90521, 175.6604);
GLatLng endLatLng = pointRadialDistance(-41.294444, 174.814444, bearing, 80);

Bekomme ich unter Ergebnisse -

Bearing=1.02749621782165
endLatLng=-40.5751022737927,174.797458881699

Die Antwort, die ich erwarte, ist -40.939722,175.646389 (von der website, link oben).

Kann jeder jeden schlagen, was Fehler, den ich in den code hier?

  • Für eine Sache, die Ergebnis-Lager umgewandelt werden soll, um Grad.
InformationsquelleAutor Sri | 2010-07-12
Schreibe einen Kommentar