Skip to content

Instantly share code, notes, and snippets.

@cbattlegear
Created February 3, 2022 15:12
Show Gist options
  • Save cbattlegear/d38cad5e4e6a3bafe41989eb7845ba1e to your computer and use it in GitHub Desktop.
Save cbattlegear/d38cad5e4e6a3bafe41989eb7845ba1e to your computer and use it in GitHub Desktop.
get_latlong_for_address.csx
#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