+++ /dev/null
-\r
-## Use\r
-\r
-\r
-Call `Add-Addresses` to copy records from `Addresses.csv` to `Address_Ddetails.csv`.\r
-\r
-Call `Add-AddressLocations` to fetch latitude and longitude for all addresses in `Address_Details.csv`.\r
-\r
-## Reference\r
-\r
-- [Azure Maps](https://learn.microsoft.com/en-us/powershell/module/az.maps/?view=azps-10.4.1&viewFallbackFrom=azps-10.0.0)\r
-- https://learn.microsoft.com/en-us/azure/azure-maps/how-to-search-for-address\r
-\r
-\r
-https://geekeefy.wordpress.com/2016/05/17/powershell-module-for-google-map/\r
-\r
-## Setup\r
-\r
-Make sure that PowerShell 7 or higher is installed:\r
-\r
-```powershell\r
-if($PSVersionTable.PSVersion.Major < 7) {\r
- winget install --id Microsoft.Powershell --source winget\r
-}\r
-\r
-Then inside PowerShell 7, install the Az module:\r
-\r
-```powershell\r
-Install-Module -Name Az -Repository PSGallery -Force\r
-```\r
-\r
-### Subscription Key\r
-\r
-\r
-\r
-Set your subscription key:\r
-```powershell\r
-$env:AzMapsSubKey="<your key here>"\r
-```
\ No newline at end of file
+++ /dev/null
-\r
-function Add-Addresses(){\r
- Param(\r
- [string]$addressFile = "Addresses.csv",\r
- [string]$outFile= "Address_Details.csv"\r
- )\r
- Copy-Item $outFile "$outFile.backup"\r
- $addressList = Get-Content $addressFile | ConvertFrom-Csv\r
- $details = Get-Content $outFile| ConvertFrom-Csv\r
-\r
- $results = [System.Collections.ArrayList]@()\r
- $known = [System.Collections.ArrayList]@()\r
-\r
- $details | ForEach-Object {\r
- $idx = $results.Add($_)\r
- $known.Add($_.Address)\r
- }\r
- $addressList | ForEach-Object {\r
- if($known -NotContains $_.Address)\r
- {\r
- $idx = $results.Add($_)\r
- $idx = Write-Host "Aadded " + $_.Address\r
- }\r
- }\r
- $results | Format-Table\r
- $answer = Read-Host -Prompt "Write updated file? y/N"\r
- if($answer -Eq "y") {\r
- $results | Export-Csv -NoTypeInformation -Path $outFile\r
- Write-Host "Updated $outFile"\r
- }\r
-}\r
-\r
-\r
-function Add-AddressLocations(){\r
- Param(\r
- [string]$outFile= "Address_Details.csv"\r
- )\r
- Copy-Item $outFile "$outFile.backup"\r
- $details = Get-Content $outFile| ConvertFrom-Csv\r
-\r
- $results = [System.Collections.ArrayList]@()\r
-\r
- $details | ForEach-Object {\r
- $updated = $_\r
- if($_.lat -Eq $null)\r
- {\r
- Write-Host "Looking up position of " $_.Address\r
- $coords= Get-MapCoords -Address $_.Address\r
- $coords | Format-List\r
- $updated.lat = $coords.lat\r
- $updated.lon = $coords.lon\r
- $updated | Format-List\r
- }\r
- $idx = $results.Add($updated)\r
- }\r
- $results | Select-Object Address, lat, lon | Format-List\r
- $answer = Read-Host -Prompt "Write updated file? y/N"\r
- if($answer -Eq "y") {\r
- $results | Export-Csv -NoTypeInformation -Path $outFile\r
- Write-Host "Updated $outFile"\r
- }\r
-}\r
-\r
-\r
-function Add-TravelTimes() {\r
- Param(\r
- [string]$outFile= "Address_Details.csv"\r
- )\r
- $details = Get-Content $outFile| ConvertFrom-Csv\r
-\r
-}\r
-\r
-$fuzzyUrl = "https://atlas.microsoft.com/search/fuzzy/json?&api-version=1.0&subscription-key={Your-Azure-Maps-Subscription-key}&language=en-US&query=pizza"\r
-\r
-function Invoke-SubKeyCheck {\r
- if($env:AzMapsSubKey -Eq $null) {\r
- Write-Error "Please set env:AzMapsSubKey"\r
- Exit\r
- }\r
-}\r
-\r
-function Get-MapAddress() {\r
- param(\r
- [string]$address\r
- )\r
- Invoke-SubKeyCheck\r
- $subKey = $env:AzMapsSubKey\r
- $addyUrl = "https://atlas.microsoft.com/search/address/json?&subscription-key=$subKey&api-version=1.0&language=en-US&query=$address"\r
- $result = Invoke-WebRequest $addyUrl\r
- if($result.StatusCode -Eq 200){\r
- return $result.Content | ConvertFrom-Json\r
- }\r
- return $result.StatusDescription\r
-}\r
-\r
-function Get-MapCoords() {\r
- param(\r
- [string]$address\r
- )\r
- Invoke-SubKeyCheck\r
- $subKey = $env:AzMapsSubKey\r
- $result = Get-MapAddress -Address $address\r
- return $result.results.entryPoints[0].position\r
-}\r
-\r
-function Get-MapTravelPlan() {\r
- param(\r
- [string]$from_address,\r
- [string]$to_address\r
- )\r
- Invoke-SubKeyCheck\r
- $subKey = $env:AzMapsSubKey\r
- $pos1 = Get-MapCoords -Address $from_address\r
- $lat1 = $pos1.lat\r
- $lon1 = $pos1.lon\r
-\r
- $pos2 = Get-MapCoords -Address $to_address\r
- $lat2 = $pos2.lat\r
- $lon2 = $pos2.lon\r
-\r
- $query = "$lat1,$($lon1):$lat2,$lon2"\r
- # Write-Host $query\r
- $travelUrl = "https://atlas.microsoft.com/route/directions/json?subscription-key=$subKey&api-version=1.0&query=$query&travelMode=car&traffic=true&departAt=2025-03-29T08:00:20&computeTravelTimeFor=all"\r
- $result = Invoke-WebRequest $travelUrl\r
- if($result.StatusCode -Eq 200){\r
- $content = $result.Content | ConvertFrom-Json\r
- if($content.formatVersion -Ne "0.0.12"){\r
- Write-Warning "BEWARE Format has updated! BEWARE"\r
- }\r
- return $content.routes\r
- }\r
- return $result.StatusDescription\r
-}\r
-\r
-\r
-function Get-MapTravelMinutes() {\r
- param(\r
- [string]$from_address,\r
- [string]$to_address\r
- )\r
- $routes = Get-MapTravelPlan -from_address $from_address -to_address $to_address\r
- $seconds = $routes.summary.travelTimeInSeconds\r
- return $seconds/60\r
-}
\ No newline at end of file