Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }