// Uses the Google API to resolve a post code (within the specified country) public static Coords?PostCodeToLongLat(string postcode, bool isUseApi) { if (isUseApi) { // Download the XML response from Google var client = new WebClient(); var encodedPostCode = HttpUtility.UrlEncode(postcode); var url = string.Format("https://maps.googleapis.com/maps/api/geocode/json?country=US&&address=" + encodedPostCode); var JsonString = client.DownloadString(url); RootObject _ResObject = JsonConvert.DeserializeObject <RootObject>(JsonString); double coordslong; double coordslatt; if (_ResObject.status.ToUpper() == "OK") { //add zip code details in cache database coordslong = _ResObject.results[0].geometry.location.lng; coordslatt = _ResObject.results[0].geometry.location.lat; zipcodes _codeDetails = new zipcodes().GetZipcodeDetails(postcode); decimal[] locs = new decimal[] { Convert.ToDecimal(coordslong), Convert.ToDecimal(coordslatt) }; new zipcodes().AddZipCodes(_ResObject.results[0].formatted_address, postcode, locs, 0, _ResObject.results[0].address_components[1].long_name); return(new Coords { Longitude = coordslong, Latitude = coordslatt }); } else { return(null); } } else { zipcodes _codeDetails = new zipcodes().GetZipcodeDetails(postcode); if (_codeDetails != null) { double _lag = Convert.ToDouble(_codeDetails.loc[0]); double _latt = Convert.ToDouble(_codeDetails.loc[1]); return(new Coords { Longitude = _lag, Latitude = _latt }); } else { return(null); } } }
public static string GetAddressFromZipCode(string postcode) { try { zipcodes _zipCodeDetails = new zipcodes().GetZipcodeDetails(postcode); if (_zipCodeDetails != null) { return(_zipCodeDetails.city); } else { var client = new WebClient(); var encodedPostCode = HttpUtility.UrlEncode(postcode); var url = string.Format("https://maps.googleapis.com/maps/api/geocode/json?country=US&&address=" + encodedPostCode); var JsonString = client.DownloadString(url); RootObject _ResObject = JsonConvert.DeserializeObject <RootObject>(JsonString); double coordslong; double coordslatt; if (_ResObject.status.ToUpper() == "OK") { //add zip code details in cache database coordslong = _ResObject.results[0].geometry.location.lng; coordslatt = _ResObject.results[0].geometry.location.lat; zipcodes _codeDetails = new zipcodes().GetZipcodeDetails(postcode); decimal[] locs = new decimal[] { Convert.ToDecimal(coordslong), Convert.ToDecimal(coordslatt) }; new zipcodes().AddZipCodes(_ResObject.results[0].formatted_address, postcode, locs, 0, _ResObject.results[0].address_components[3].long_name); return(_ResObject.results[0].formatted_address); } else { return(""); } } } catch (Exception) { return(""); } }
// Will return a null if the Google API is unable to find either post code, or the country constraint fails public static double?BetweenTwoPostCodes(string postcodeA, string postcodeB, Units units) { bool IsCodeAApi = true; bool IsCodeBApi = true; zipcodes _codeADetails = new zipcodes().GetZipcodeDetails(postcodeA); zipcodes _codeBDetails = new zipcodes().GetZipcodeDetails(postcodeB); if (_codeADetails != null) { if (_codeADetails.loc != null) { IsCodeAApi = false; } } if (_codeBDetails != null) { if (_codeBDetails.loc != null) { IsCodeBApi = false; } } var ll1 = PostCodeToLongLat(postcodeA, IsCodeAApi); if (!ll1.HasValue) { return(null); } var ll2 = PostCodeToLongLat(postcodeB, IsCodeBApi); if (!ll2.HasValue) { return(null); } return(ll1.Value.DistanceTo(ll2.Value, units)); }