/// <summary> /// Method used to batch forward geocode a bunch of addresses. /// </summary> /// <param name="inputAddresses">A list of address strings.</param> /// <param name="fieldSettings">Our field settings object used to determine which additional data fields we want to query.</param> /// <returns>The results returned from Geocodio.</returns> public async Task <BatchForwardGeoCodeResult> ForwardGeocodeAsync(List <string> inputAddresses, GeocodioDataFieldSettings fieldSettings) { string fieldQueryString = this.PrepareDataFieldsQueryString(fieldSettings); string jsonDataString = JsonConvert.SerializeObject(inputAddresses); string responseData = await BatchForwardGeocodeWebRequest(jsonDataString, fieldQueryString); BatchForwardGeoCodeResult results = JsonConvert.DeserializeObject <BatchForwardGeoCodeResult>(responseData); return(results); }
/// <summary> /// Transforms batch forward geocode results into a dictionary keyed by the address that was queried. Puts duplicate requests /// into the same list and returns a 0 item list when no results are returned. /// </summary> /// <param name="results"></param> /// <returns>A dictionary of GeoCodeInfo (the results) keyed keyed by the address that was queried.</returns> public static Dictionary <string, List <GeoCodeInfo> > MakeForwardResultsDict(BatchForwardGeoCodeResult results) { Dictionary <string, List <GeoCodeInfo> > resultsDict = new Dictionary <string, List <GeoCodeInfo> >(); foreach (BatchForwardGeoCodeRecord record in results.Results) { //Make sure have something to use... if (record.Response.Results.Length > 0) { if (resultsDict.ContainsKey(record.Query)) { //Geocoded same plce twice in same request to Geocodio resultsDict[record.Query].AddRange(record.Response.Results); } else { resultsDict.Add(record.Query, new List <GeoCodeInfo>()); resultsDict[record.Query].AddRange(record.Response.Results); } } else { resultsDict.Add(record.Query, new List <GeoCodeInfo>(0)); } } return(resultsDict); }