public async Task <IActionResult> Predictive([FromBody] BGBA.Models.N.Location.MapOptions options) { try { var fullAddress = await _mapServices.GetPrediction(options); if (fullAddress.Status == "ZERO_RESULTS") { return(NotFound()); } return(new ObjectResult(fullAddress.Results)); } catch (Exception e) { _logger.LogError(e.ToString()); return(StatusCode((int)System.Net.HttpStatusCode.InternalServerError, "Error al predecir la direccion.")); } }
public async Task <string> GetMapSucursal(string numeroSucursal) { var sucursales = await _objectFactory.InstantiateFromJsonFile <List <Sucursal> >(_configuration["Sucursales:Path"]); var sucu = sucursales.FirstOrDefault(s => s.Numero == numeroSucursal); if (sucu == null) { return(null); } var mapOptions = new BGBA.Models.N.Location.MapOptions { Location = new BGBA.Models.N.Location.Location { Latitude = sucu.Latitud, Longitude = sucu.Longitud }, DefaultMarker = true, LocationIsCoord = true, }; return($"{_configuration["GoogleMaps:UrlMap"].Replace("{key}", _configuration["GoogleMaps:Key"])}&{mapOptions.ToString()}"); }
public async Task <bool> NormalizeAddress(BGBA.Models.N.Location.MapOptions mapOptions, GoogleMapsAddress mapAddress) { var firstCoincidence = mapAddress.Results.FirstOrDefault().AddressComponents; mapOptions.Address.LocalityDescription = firstCoincidence.FirstOrDefault(a => a.Types.Any(t => BGBA.Models.N.Location.GoogleMapsAddress.LOCALITY_SUBLOCALITY.Contains(t)))?.ShortName ?? mapOptions.Address.LocalityDescription; mapOptions.Address.Number = firstCoincidence.FirstOrDefault(a => a.Types.Any(t => BGBA.Models.N.Location.GoogleMapsAddress.STREET_NUMBER.Contains(t)))?.LongName ?? mapOptions.Address.Number; mapOptions.Address.Street = firstCoincidence.FirstOrDefault(a => a.Types.Any(t => BGBA.Models.N.Location.GoogleMapsAddress.STREET.Contains(t)))?.LongName ?? mapOptions.Address.Street; 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"; mapOptions.Address.LocalityDescription = "CIUDAD AUTONOMA BUENOS AI"; } mapOptions.Address.Province = provinces.FirstOrDefault(p => p.Name.ToLower() == provinceName.ToLower()) ?? mapOptions.Address.Province; var country = firstCoincidence.FirstOrDefault(a => a.Types.Any(t => BGBA.Models.N.Location.GoogleMapsAddress.COUNTRY.Contains(t)))?.LongName; mapOptions.Address.Country = (await _tableHelper.GetCountriesAsync()).FirstOrDefault(c => c.Description.ToLower() == country.ToLower()) ?? mapOptions.Address.Country; 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) { mapOptions.Address.PostalCode = cpGoogle; } } else if (!string.IsNullOrEmpty(cpGoogle) && cpGoogle.Length == 8) { mapOptions.Address.PostalCode = cpGoogle; } else if (string.IsNullOrWhiteSpace(mapOptions.Address.PostalCode)) { var cps = await _tableHelper.GetLocalitiesByProvinceWithCPAsync(mapOptions.Address.Province); var localityCP = cps.Where(l => l.Name == mapOptions.Address.LocalityDescription || l.Name.Contains(mapOptions.Address.LocalityDescription) || mapOptions.Address.LocalityDescription.Contains(l.Name)).ToList(); if (localityCP.Count > 0) { mapOptions.Address.PostalCodeOcurrencies = localityCP.Select(c => c.PostalCode).ToList(); } else { mapOptions.Address.PostalCodeOcurrencies = cps.Select(c => c.PostalCode).ToList(); } } mapOptions.Address.Location = mapAddress.Results.FirstOrDefault()?.Geometry.Location; mapOptions.Location = mapOptions.Address.Location; mapOptions.LocationIsCoord = true; mapOptions.Address.UrlMap = GetUrlMap(mapOptions); return(true); }