public async Task <Models.N.Location.Address> NormalizeAddressByPlaceId(GoogleMapsAddress mapAddress, MapOptions options) { var firstCoincidence = mapAddress.Results.FirstOrDefault().AddressComponents; var address = new Models.N.Location.Address(); address.LocalityDescription = firstCoincidence.FirstOrDefault(a => a.Types.Any(t => BGBA.Models.N.Location.GoogleMapsAddress.LOCALITY_SUBLOCALITY.Contains(t)))?.ShortName; address.Number = firstCoincidence.FirstOrDefault(a => a.Types.Any(t => BGBA.Models.N.Location.GoogleMapsAddress.STREET_NUMBER.Contains(t)))?.LongName; address.Street = firstCoincidence.FirstOrDefault(a => a.Types.Any(t => BGBA.Models.N.Location.GoogleMapsAddress.STREET.Contains(t)))?.LongName; var provinces = await _tableHelper.GetProvincesAsync(); var provinceName = firstCoincidence.FirstOrDefault(a => a.Types.Any(t => BGBA.Models.N.Location.GoogleMapsAddress.PROVINCE.Contains(t)))?.ShortName.RemoveDiacritics(); if (provinceName == "CABA") { provinceName = "CAPITAL FEDERAL"; address.LocalityDescription = "CIUDAD AUTONOMA BUENOS AI"; } address.Province = provinces.FirstOrDefault(p => p.Name.ToLower() == provinceName.ToLower()); var country = firstCoincidence.FirstOrDefault(a => a.Types.Any(t => BGBA.Models.N.Location.GoogleMapsAddress.COUNTRY.Contains(t)))?.LongName; address.Country = (await _tableHelper.GetCountriesAsync()).FirstOrDefault(c => c.Description.ToLower() == country.ToLower()); var cpGoogle = $"{firstCoincidence.FirstOrDefault(a => a.Types.Any(t => BGBA.Models.N.Location.GoogleMapsAddress.POSTAL_CODE.Contains(t)))?.LongName}{firstCoincidence.FirstOrDefault(a => a.Types.Any(t => BGBA.Models.N.Location.GoogleMapsAddress.POSTAL_CODE_SUFFIX.Contains(t)))?.LongName}"; if (!string.IsNullOrEmpty(cpGoogle) && cpGoogle.Length < 8) { cpGoogle = Regex.Replace(cpGoogle, "[a-z]*", "", RegexOptions.IgnoreCase).Trim(); if (cpGoogle.Length == 4) { address.PostalCode = cpGoogle; } } else if (!string.IsNullOrEmpty(cpGoogle) && cpGoogle.Length == 8) { address.PostalCode = cpGoogle; } else if (string.IsNullOrWhiteSpace(address.PostalCode)) { var cps = await _tableHelper.GetLocalitiesByProvinceWithCPAsync(address.Province); var localityCP = cps.Where(l => l.Name == address.LocalityDescription || l.Name.Contains(address.LocalityDescription) || address.LocalityDescription.Contains(l.Name)).ToList(); if (localityCP.Count > 0) { address.PostalCodeOcurrencies = localityCP.Select(c => c.PostalCode).ToList(); } else { address.PostalCodeOcurrencies = cps.Select(c => c.PostalCode).ToList(); } } address.Location = mapAddress.Results.FirstOrDefault()?.Geometry.Location; options.Address = address; address.UrlMap = GetUrlMap(options); return(address); }
private GoogleMapsAddress ConvertGoogleMapsGeoCodeResultToGoogleMapsAddress(GoogleMapsGeoCodingApiResult googleMapsGeoCodingApiResult) { var googleMapsAddress = new GoogleMapsAddress(); //GeoLocation googleMapsAddress.GeoLocation = new GeoLocation() { Latitude = googleMapsGeoCodingApiResult.GoogleMapsGeoCodingApiGeometry.GoogleMapsGeoCodingApiLocation.Latitude, Longitude = googleMapsGeoCodingApiResult.GoogleMapsGeoCodingApiGeometry.GoogleMapsGeoCodingApiLocation.Longitude }; //Formatted address googleMapsAddress.FormattedAddress = googleMapsGeoCodingApiResult.FormattedAddress; foreach (var googleMapsGeoCodeAddressComponent in googleMapsGeoCodingApiResult.GoogleMapsGeoCodingApiAddressComponents) { if (googleMapsGeoCodeAddressComponent.Types != null) { //PostalCode if (googleMapsGeoCodeAddressComponent.Types.Contains(GoogleMapsGeoCodingApiTypeEnum.PostalCode)) { googleMapsAddress.PostalCode = googleMapsGeoCodeAddressComponent.LongName; } //Number if (googleMapsGeoCodeAddressComponent.Types.Contains(GoogleMapsGeoCodingApiTypeEnum.StreetNumber)) { googleMapsAddress.Number = googleMapsGeoCodeAddressComponent.LongName; } //Street if (googleMapsGeoCodeAddressComponent.Types.Contains(GoogleMapsGeoCodingApiTypeEnum.StreetAddress) || googleMapsGeoCodeAddressComponent.Types.Contains(GoogleMapsGeoCodingApiTypeEnum.Route)) { if (googleMapsAddress.Street == null) { googleMapsAddress.Street = new Street(); } googleMapsAddress.Street.FullName = googleMapsGeoCodeAddressComponent.LongName; googleMapsAddress.Street.Abbreviation = googleMapsGeoCodeAddressComponent.ShortName; } //Neighborhood if (googleMapsGeoCodeAddressComponent.Types.Contains(GoogleMapsGeoCodingApiTypeEnum.Sublocality)) { if (googleMapsAddress.Neighborhood == null) { googleMapsAddress.Neighborhood = new Neighborhood(); } googleMapsAddress.Neighborhood.FullName = googleMapsGeoCodeAddressComponent.LongName; googleMapsAddress.Neighborhood.Abbreviation = googleMapsGeoCodeAddressComponent.ShortName; } //City if (googleMapsGeoCodeAddressComponent.Types.Contains(GoogleMapsGeoCodingApiTypeEnum.Locality) || googleMapsGeoCodeAddressComponent.Types.Contains(GoogleMapsGeoCodingApiTypeEnum.AdministrativeAreaLevel2)) { if (googleMapsAddress.City == null) { googleMapsAddress.City = new City(); } googleMapsAddress.City.FullName = googleMapsGeoCodeAddressComponent.LongName; googleMapsAddress.City.Abbreviation = googleMapsGeoCodeAddressComponent.ShortName; } //District if (googleMapsGeoCodeAddressComponent.Types.Contains(GoogleMapsGeoCodingApiTypeEnum.AdministrativeAreaLevel2)) { if (googleMapsAddress.District == null) { googleMapsAddress.District = new District(); } googleMapsAddress.District.FullName = googleMapsGeoCodeAddressComponent.LongName; googleMapsAddress.District.Abbreviation = googleMapsGeoCodeAddressComponent.ShortName; } //State if (googleMapsGeoCodeAddressComponent.Types.Contains(GoogleMapsGeoCodingApiTypeEnum.AdministrativeAreaLevel1)) { if (googleMapsAddress.State == null) { googleMapsAddress.State = new State(); } googleMapsAddress.State.FullName = googleMapsGeoCodeAddressComponent.LongName; googleMapsAddress.State.Abbreviation = googleMapsGeoCodeAddressComponent.ShortName; } //Country if (googleMapsGeoCodeAddressComponent.Types.Contains(GoogleMapsGeoCodingApiTypeEnum.Country)) { if (googleMapsAddress.Country == null) { googleMapsAddress.Country = new Country(); } googleMapsAddress.Country.FullName = googleMapsGeoCodeAddressComponent.LongName; googleMapsAddress.Country.Abbreviation = googleMapsGeoCodeAddressComponent.ShortName; } } } return(googleMapsAddress); }