protected void SetGeocodeData(Apartment apartment) { var request = new GeocodingAddressRequest() { Street = apartment.Street, ZipCode = apartment.ZipCode, City = apartment.City.Name, Country = apartment.City.Country, Culture = "en" }; try { var addresses = GeocodingService.GeocodeAddress(request); if (addresses != null && addresses.Count == 1) { var address = addresses.First(); apartment.Latitude = address.Geometry.Location.Latitude; apartment.Longitude = address.Geometry.Location.Longitude; apartment.Neighborhood = address.GetComponent("sublocality_level_1"); apartment.Locality = address.GetComponent("sublocality_level_2"); if (!string.IsNullOrEmpty(apartment.Neighborhood)) { apartment.Neighborhood = apartment.Neighborhood.Replace("Bezirk", string.Empty).Trim(); } // replace the street with the returned info. Google Api return higher quality addresses (i.e. "Sybelstraße" vs "Sybelstr.") apartment.Street = address.GetComponent("route") + " " + address.GetComponent("street_number"); } } catch (Exception) { // ignore error and move on } }
public List<Address> GeocodeAddress(GeocodingAddressRequest request) { if (string.IsNullOrWhiteSpace(request.Street)) { throw new Exception("Street cannot be empty"); } var addressComponents = new List<string>(); addressComponents.Add(request.Street); if (!string.IsNullOrWhiteSpace(request.ZipCode)) { addressComponents.Add(request.ZipCode); } if (!string.IsNullOrWhiteSpace(request.City)) { addressComponents.Add(request.City); } if (!string.IsNullOrWhiteSpace(request.State)) { addressComponents.Add(request.State); } if (!string.IsNullOrWhiteSpace(request.Country)) { addressComponents.Add(request.Country); } var address = string.Join(",", addressComponents); return GeocodeAddress(address, request.Culture); }
public void BerlinAddressTest() { var request = new GeocodingAddressRequest { Street = "Sybelstraße 30", ZipCode = "10629", City = "Berlin", Country = "Germany", Culture = "en" }; var addresses = Service.GeocodeAddress(request); Assert.IsNotNull(addresses); Assert.AreEqual(1, addresses.Count); Assert.AreEqual("Sybelstraße 30, 10629 Berlin, Germany", addresses.First().FormattedAddress); }