public async Task <string> GetAddressFromLatLong(double lat, double lon) { async Task <string> getAddressFromCords() { IGeocoder googleGeoCoder = new GoogleGeocoder() { ApiKey = Config.MappingConfig.GoogleMapsApiKey }; IGeocoder bingGeoCoder = new BingMapsGeocoder(Config.MappingConfig.BingMapsApiKey); string address = null; try { var addresses = await googleGeoCoder.ReverseGeocodeAsync(lat, lon); if (addresses != null && addresses.Any()) { address = addresses.First().FormattedAddress; } } catch { /* Don't report on GeoLocation failures */ } if (string.IsNullOrWhiteSpace(address)) { try { var addressGeo = GetAddressFromLatLonLocationIQ(lat.ToString(), lon.ToString()); if (!String.IsNullOrWhiteSpace(addressGeo)) { address = addressGeo; } } catch { /* Don't report on GeoLocation failures */ } } if (string.IsNullOrWhiteSpace(address)) { try { var addresses = await bingGeoCoder.ReverseGeocodeAsync(lat, lon); if (addresses != null && addresses.Count() > 0) { address = addresses.First().FormattedAddress; } } catch { /* Don't report on GeoLocation failures */ } } return(address); } return(await _cacheProvider.RetrieveAsync <string>(string.Format(ReverseCacheKey, string.Format("{0} {1}", lat, lon).GetHashCode()), getAddressFromCords, CacheLength)); }
public async Task <IEnumerable <Essentials.Placemark> > GetPlacemarksAsync(Essentials.Location location) { var bingAddresses = await Geocoder.ReverseGeocodeAsync(new Geocoding.Location(location.Latitude, location.Longitude)); var placeMarks = bingAddresses.Select(x => new Essentials.Placemark { AdminArea = x.AdminDistrict, CountryName = x.CountryRegion, Locality = x.Locality, PostalCode = x.PostalCode, FeatureName = "", Location = new Essentials.Location(x.Coordinates.Latitude, x.Coordinates.Longitude), CountryCode = "", SubAdminArea = x.AdminDistrict2, SubLocality = x.Neighborhood, Thoroughfare = x.AddressLine }); return(placeMarks); }
//https://github.com/chadly/Geocoding.net/issues/8 public async Task CanReverseGeocodeIssue8() { BingAddress[] addresses = (await geoCoder.ReverseGeocodeAsync(38.8976777, -77.036517)).ToArray(); Assert.NotEmpty(addresses); }
public async Task <IEnumerable <BingAddress> > Reverse([FromQuery] double latitude, [FromQuery] double longitude) { return(await _geocoder.ReverseGeocodeAsync(latitude, longitude)); }