Created
February 3, 2022 15:12
-
-
Save cbattlegear/d38cad5e4e6a3bafe41989eb7845ba1e to your computer and use it in GitHub Desktop.
get_latlong_for_address.csx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#r "Newtonsoft.Json" | |
using System.Net; | |
using System.Net.Http; | |
using System.Net.Http.Headers; | |
using System.Linq; | |
using Microsoft.AspNetCore.Mvc; | |
using Microsoft.Extensions.Primitives; | |
using Newtonsoft.Json; | |
using Newtonsoft.Json.Linq; | |
private static readonly HttpClient client = new HttpClient(); | |
public static IActionResult Run(HttpRequest req, string inputAddressBlob, out string outputAddressBlob, ILogger log) | |
{ | |
log.LogInformation("C# HTTP trigger function processed a request."); | |
string output = ""; | |
int recordcount = 0; | |
var lines = inputAddressBlob.Split("\r\n"); | |
foreach(var line in lines) { | |
if(line != "") { | |
var item = line.Split("|"); | |
string id = item[0]; | |
string address = item[1]; | |
string city = address.Split(",")[1].Trim(); | |
string state = address.Split(",")[2].Trim(); | |
log.LogInformation(city); | |
var request = client.GetStringAsync("https://atlas.microsoft.com/search/address/json?&subscription-key=Bby6CTkQMokNRK27_GA7h6n800-_PgGThqOYdvVWhhs&api-version=1.0&language=en-US&topLeft=48.870407,-104.0512&btmRight=44.812565,-91.49943&query=" + address).Result; | |
dynamic map_output = JsonConvert.DeserializeObject(request); | |
JArray results = map_output.results; | |
JToken first_matching_city = results.Where(c => (c["address"]["municipality"] != null && c["address"]["municipality"].ToString() == city) || (c["address"]["localName"] != null && c["address"]["localName"].ToString() == city)).FirstOrDefault(); | |
if(first_matching_city == default(JToken)) { | |
first_matching_city = results.FirstOrDefault(c => c["address"]["countrySubdivision"].ToString() == state); | |
} | |
if(first_matching_city == default(JToken)) { | |
first_matching_city = results.First(); | |
} | |
string lat = first_matching_city["position"]["lat"].ToString(); | |
string longitude = first_matching_city["position"]["lon"].ToString(); | |
string lineout = id + "|" + address + "|" + lat + "|" + longitude + "\r\n"; | |
output = output + lineout; | |
recordcount++; | |
if(recordcount % 50 == 0) { | |
log.LogInformation("Records Processed: " + recordcount.ToString()); | |
} | |
} | |
} | |
outputAddressBlob = output; | |
return new OkObjectResult(new { recordCount = recordcount }); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment