Frage

Ich habe ein Problem, das mir seit einiger Zeit in einem Projekt Rücken zieht.

Ich bin im Grunde genommen, ein Polygon mit x, y -Punkten zu fangen, die von einem Skript gezeichnet wurden, das ich geschrieben habe. LAT1, LON1 sind die zentralen GPS -Kabel des Polygons und ich bin nach seinem umgebenden Polygon.

Hier ist ein Teil meines Codes in Python:

def getcords(lat1,lon1,dr,bearing):
    lat2=asin(sin(lat1)*cos(dr)+cos(lat1)*sin(dr)*cos(bearing))
    lon2=lon1+atan2(sin(bearing)*sin(dr)*cos(lat1),cos(dr)-sin(lat1)*sin(lat2))
    return [lat2,lon2]

Mein Eingang lautet wie folgt: LAT1, LON1 - sind in Dezimalgraden angegeben. -DR ist das Angular, das berechnet wird, indem die Entfernung in Meilen durch die Erde (= 3958,82) geteilt wird -trag zwischen 0 und 360 Grad.

however for the input getcorsds1(42.189275,-76.85823,0.5/3958.82,30) i get [-1.3485899508698462, -76.8576637627568], however [42.2516666666667,-76.8097222222222] is the right answer.

Was den Winkelabstand betrifft, berechne ich es einfach, indem ich die Entfernung in Meilen durch die Raiuds der Erde (= 3958,82) tgde.

irgendjemand?

War es hilfreich?

Lösung

Warum benutzt du nicht? schöne Bibliotheken?

from geopy import Point
from geopy.distance import distance, VincentyDistance

# given: lat1, lon1, bearing, distMiles
lat2, lon2 = VincentyDistance(miles=distMiles).destination(Point(lat1, lon1), bearing)

Für Lat1, LON1, Distmiles, Lager = 42,189275, -76,85823, 0,5, 30 Es gibt 42,1955489, -76,853359 zurück.

Andere Tipps

Die Sünde und die COS -Funktionen erwarten ihre Argumente in Radians, nicht in Grad. Die ASIN- und ATAN2 -Funktionen erzeugen ein Ergebnis Radians, nicht in Grad. Im Allgemeinen muss man Eingangswinkel (LAT1, LON1 und Lager) von Grad in Radians verwendeten math.radians() und konvertieren die Ausgangswinkel (LAT2 und LON2) von Radians zu Grad unter Verwendung math.degrees().

Beachten Sie, dass Ihr Code zwei weitere Probleme hat:

(1) Es erlaubt keine Fahrt über den 180-Grad-Meridian der Längengrad; Sie müssen Ihre Antwort so einschränken, dass -180 <= longituCitu_Degrees <= +180.

(2) Wenn Sie diese Funktion ausgiebig verwenden möchten, möchten Sie möglicherweise die redundanten Berechnungen entfernen: SIN (LAT1), COS (DR), COS (LAT1) und SIN (DR) werden jeweils zweimal berechnet.

Neuere Version von Geopy (+ Kilometer stattdessen Meilen)

from geopy import Point
from geopy.distance import vincenty

distKm = 1
lat1 = 35.68096477080332 
lon1 = 139.76720809936523

print 'center', lat1, lon1
print 'north', vincenty(kilometers=distKm).destination(Point(lat1, lon1), 0).format_decimal()
print 'east', vincenty(kilometers=distKm).destination(Point(lat1, lon1), 90).format_decimal()
print 'south', vincenty(kilometers=distKm).destination(Point(lat1, lon1), 180).format_decimal()
print 'west', vincenty(kilometers=distKm).destination(Point(lat1, lon1), 270).format_decimal()

Ergebnis ist

center 35.6809647708 139.767208099
north 35.6899775841, 139.767208099
east 35.680964264, 139.778254714
south 35.6719519439, 139.767208099
west 35.680964264, 139.756161485

Eumiro dein Code
Ergebnis ist Too many values to unpack
Wie repariere das?

from geopy import Point
from geopy.distance import distance, VincentyDistance

# given: lat1, lon1, bearing, distMiles
lat2, lon2 = VincentyDistance(miles=9.32057).destination(Point(52.20444, 0.3605$
print lat2, lon2
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top