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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist etwas code, der erreicht, was Sie wollen zu tun.
sehr einfache Lösung in der geometrie-Bibliothek (V3), wenn Sie nicht haben ein problema mit Hilfe der google maps api V3 (abhängig von der Anwendung, die Echtzeit - asset-tracking, zum Beispiel - die Kostenlose Lizenz ist nicht anwendbar ODER wollen Sie vielleicht gar nicht umgestalten von V2 auf V3).
1.: deklarieren Sie eine zusätzliche Bibliothek, die ZUSAMMEN mit Ihrem aktuellen Erklärung:
2.: Festlegung von Startpunkt, Richtung und Distanz
3.: es gehen
getan, Sie sind nun in London. für mehr info über computeDistance, computeHeading und computeArea:
http://www.svennerberg.com/2011/04/calculating-distances-and-areas-in-google-maps-api-3/
http://code.google.com/intl/en/apis/maps/documentation/javascript/geometry.html
Unten ist die Implementierung der JavaScript-code an http://www.movable-type.co.uk/scripts/latlong.html, die ich schrieb für mich selbst und für meine eigenen Projekte. Sie implementieren können, um Ihr Projekt, wenn man so will.
Hinweis: Koordinieren ist eine Klasse mit X (Länge), Y (Breite), Z (Höhe) Eigenschaften. ToDegree() und ToRadian() sind Erweiterungen für den Double-Typ. Schließlich GetTarget() ist eine Erweiterung für eine Koordinate Instanz.