正如在評論中提到迭代,我建議直接查詢的路線API:
$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
現在我們可以搶確切數值(以米爲單位)從API路由響應:
$TotalDistance = $Route.legs.steps |Select Instructions,@{name='Distance';e={$_.distance.value}},Duration |Measure-Object Distance -Sum
最後轉換爲英里的總距離:
$TotalMiles = 0.000621371 * $TotalDistance.Sum
這樣,您就不必爲輸出是否在英里/英尺創建複雜的邏輯,你會得到更準確的結果
如果你堅持要用Get-Direction
,使用calculated property推斷的數值,例如使用正則表達式:
$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
裏面distance
計算屬性的表達中,我們使用-split
算子分裂的值分成兩個部分。第一部分將是數值(「0.2」,「0.2」),第二部分是單位(「mi」從「0.2 mi」)。
然後,我們檢查單位是否爲英尺,如果是這樣,則返回該值。否則,我們假設該值是以英里爲單位,所以我們將其轉換爲英尺。
現在你可以使用Measure-Object
:
$TotalDistance = $directions |Measure-Object Distance -Sum
因爲我們全部轉換價值腳前面,最後我們轉換的總距離回數:
$TotalMiles = 0.000189394 * $TotalDistance.Sum
我建議直接查詢API 。該'GoogleMap'模塊返回從方向上的文字表述,所以會含有大量的舍入誤差的 –
我真的很討厭試圖直接查詢。你必須將URL分成Powerhell中的千變量,因爲「&」被解釋爲......非常可怕。 – schnipdip
一點也不,你可以構造查詢URI與單'-f'操作 –