Finde Zielkoordinaten, beginnend mit Coodinaten, Lager und Distanz

Bildbeschreibung hier eingeben Ich schaue auf die hier aufgeführte Formel: http://www.movable-type.co.uk/scripts/latlong.html

Ich scheine, Schwierigkeiten zu haben, da die daraus resultierenden Koordinaten nicht das sind, was ich erwarten würde.

Angesichts der folgenden Informationen:

Start lat: 28.455556

Start lon: -80.527778

Lager: 317.662819 (Grad)

Entfernung: 130.224835 (Seemeilen)

def getEndpoint(lat1,lon1,bearing,d): R = 6378.1 #Radius of the Earth brng = math.radians(bearing) #convert degrees to radians d = d*1.852 #convert nautical miles to km lat2 = math.asin( math.sin(lat1)*math.cos(d/R) + math.cos(lat1)*math.sin(d/R)*math.cos(brng)) lon2 = lon1 + math.atan2(math.sin(brng)*math.sin(d/R)*math.cos(lat1),math.cos(d/R)-math.sin(lat1)*math.sin(lat2)) return lat2,lon2 

Die Funktion kehrt zurück:

End lat: -0.209110644042

End lon: -80.5017472335

Aber das ist eine Koordinate östlich von meinem Anfangsort, es macht keinen Sinn, weil 317 Lager nordwestlich von meinem Ausgangspunkt zeigt.

Oben Bild ist, was es aussehen sollte mit der endgültigen Ende-Koordinate auf der oberen linken Seite.

Irgendwelche Ideen, wo es geht falsch?

4 Solutions collect form web for “Finde Zielkoordinaten, beginnend mit Coodinaten, Lager und Distanz”

Nach dieser Seite

math.sin(x) … Rückkehr der Sinus von x Bogenmaß

Also musst du lat1 und lon1 zu radian vor deiner gleichung umwandeln und dann kannst du lat2 und lon2 wieder in grad umwandeln.

Doh hatte ich vergessen, in den Radiant umzuwandeln und dann wieder in Grad umzuwandeln, wenn die Berechnung durchgeführt wurde. Hier ist der letzte Code:

 def getEndpoint(lat1,lon1,bearing,d): R = 6371 #Radius of the Earth brng = math.radians(bearing) #convert degrees to radians d = d*1.852 #convert nautical miles to km lat1 = math.radians(lat1) #Current lat point converted to radians lon1 = math.radians(lon1) #Current long point converted to radians lat2 = math.asin( math.sin(lat1)*math.cos(d/R) + math.cos(lat1)*math.sin(d/R)*math.cos(brng)) lon2 = lon1 + math.atan2(math.sin(brng)*math.sin(d/R)*math.cos(lat1),math.cos(d/R)-math.sin(lat1)*math.sin(lat2)) lat2 = math.degrees(lat2) lon2 = math.degrees(lon2) return lat2,lon2 

Beachten Sie auch, dass Ihr Breitengrad südlich des Äquators liegt. Ich vermute, dass Ihr Problem ist Koordinatensystem: Trig Funktionen funktionieren in der Regel in Cartesian: der Referenzwinkel (Lager 0) ist die + x Achse, auch bekannt als "due east", und Fortschritt in Richtung + y (gegen den Uhrzeigersinn). Kompassüberschriften beginnen im Norden und gehen im Uhrzeigersinn.

Ersatz 1:

 brng = math.radians(90-bearing) #convert degrees to radians 

Sie haben auch mit Ihrem Start-Latitutde verpasst. Versuchen:

 lat2 = lat1 + math.asin(... 

Das gibt uns die endgültige Lage von

 (28.246445355975514, -80.50284677329569) 

Wenn Sie ein hochpräzises Ergebnis wünschen, sollten Sie die Geodäten verwenden . Hier ist ein Beispiel mit GeographicLib, das Winkeleinheiten in Grad und Distanzeinheiten in Metern verwendet.

 from geographiclib.constants import Constants from geographiclib.geodesic import Geodesic def getEndpoint(lat1, lon1, bearing, d): geod = Geodesic(Constants.WGS84_a, Constants.WGS84_f) d = geod.Direct(lat1, lon1, bearing, d * 1852.0) return d['lat2'], d['lon2'] print(getEndpoint(28.455556, -80.527778, 317.662819, 130.224835)) # (30.05352669918092, -82.21197985232848) 

Das sollte nicht mehr als ein paar Nanometer von der genauen Position sein.

  • Doppelte Integral in kartesischen Koordinaten statt (R, Theta)
  • Generierung mehrerer zufälliger (x, y) Koordinaten, ohne Duplikate?
  • Verschieben Sie Werte von 2D-Array, das neue Koordinaten mit Maske kennt
  • Effiziente Manipulation einer Liste von kartesischen Koordinaten in Python
  • Wie kann ich eine Koordinatenliste für ein Rechteck gegen den Uhrzeigersinn sortieren?
  • Filterkoordinaten in einem gegebenen Bereich filtern
  • So erstellen Sie 10 zufällige x, y-Koordinaten in einem Raster mit Python
  • Python ist die beste Programmiersprache der Welt.