Wie in den Kommentaren erwähnt, würde ich vorschlagen, die Directions API abfragt direkt:
$From = 'google'
$To = 'apple'
$APIKey = 'ASDASdDGerYYeb7_zfd' # replace with actual key
$requestURI = 'https://maps.googleapis.com/maps/api/directions/json?origin={0}&destination={1}&mode=driving&units=metric&key={2}' -f $From,$To,$APIKey
$APIResponse = Invoke-WebRequest $requestURI -UseBasicParsing
$Route = $APIResponse.Content |ConvertFrom-Json |Select -First 1 -Expand routes
Jetzt können wir das packen genauer Zahlenwert (in Metern) von der API-Route Antwort:
$TotalDistance = $Route.legs.steps |Select Instructions,@{name='Distance';e={$_.distance.value}},Duration |Measure-Object Distance -Sum
Und schließlich die Gesamtdistanz in Meilen umwandeln:
$TotalMiles = 0.000621371 * $TotalDistance.Sum
Auf diese Weise müssen Sie für komplexe Logik nicht erstellen, ob die Ausgabe ist in Meilen/Fuß, und Sie werden ein genaueres Ergebnis
Wenn Sie sich mit Get-Direction
bestehen erhalten, verwenden ein calculated property den numerischen Wert, zum Beispiel unter Verwendung von Regex extrapolieren:
$directions = Get-Direction "google" "apple" -inMiles | select-object instructions, @{name='Distance';expression={$value,$unit = $_.distance -split ' ',2;if($unit -eq 'ft'){$value}else{5280 * $value}}}, duration
im Innern des Ausdrucks Teil der distance
berechneten Eigenschaft, teilten wir den Wert in zwei Teile mit dem -split
Operator. Der erste Teil ist der numerische Wert ("0,2" von "0,2 mi"), und der zweite Teil ist die Einheit ("mi" von "0,2 mi").
Dann überprüfen wir, ob die Einheiten Füße sind, wenn ja, geben Sie einfach den Wert zurück. Andernfalls nehmen wir an, dass der Wert in Meilen ist, und wir wandeln ihn in Fuß um.
Jetzt können Sie verwenden Measure-Object
:
$TotalDistance = $directions |Measure-Object Distance -Sum
Da wir alle Wert auf die Füße vorher umgewandelt, schließlich wandeln wir die Gesamtstrecke zurück zum Meilen:
$TotalMiles = 0.000189394 * $TotalDistance.Sum
Ich würde vorschlagen, dass die API direkt abfragt . Das 'GoogleMap'-Modul gibt die Textdarstellungen aus den Richtungen zurück und enthält daher viele Rundungsfehler. –
Ich hasse es wirklich, direkt Abfragen durchzuführen. Sie müssen die URL in tausend Powershell-Variablen zerlegen, weil "&" interpretiert wird ... Ganz schrecklich. – schnipdip
Überhaupt nicht, können Sie die Abfrage uri mit einer einzigen '-f'-Operation erstellen –