public IList <ObjetoPuntuado <DireccionVO> > NomenclarDireccionSmart(ParsedDirection direccion) { List <ObjetoPuntuado <DireccionVO> > list = new List <ObjetoPuntuado <DireccionVO> >(); IList <ObjetoPuntuado <DireccionVO> > result; if (string.IsNullOrEmpty(direccion.Calle.Trim()) || (direccion.Altura <= 0 && string.IsNullOrEmpty(direccion.Esquina.Trim()))) { result = list; } else { double num = 0.0; double num2 = 0.0; double num3 = 0.0; double item = 0.0; IList <Provincia> list2 = null; IList <Partido> list3 = null; if (!string.IsNullOrEmpty(direccion.Provincia.Trim())) { Tokenizer tokenizer = Tokenizer.FromString(direccion.Provincia, 0); IList <Provincia> provincias = base.DAOFactory.ProvinciaDAO.GetProvincias(tokenizer.ToArray()); list2 = Cleaning.Nomenclar <Provincia>(tokenizer, provincias, out num); if (!string.IsNullOrEmpty(direccion.Localidad)) { Tokenizer tokenizer2 = Tokenizer.FromString(direccion.Localidad, 1); List <Partido> list4 = new List <Partido>(); foreach (Provincia current in provincias) { list4.AddRange(base.DAOFactory.PartidoDAO.GetEnProvincia(tokenizer2.ToArray(), current.MapId)); } List <int> list5 = new List <int>(); list3 = Cleaning.Nomenclar <Partido>(tokenizer2, list4, out num2); foreach (Partido current2 in list3) { list5.Add(current2.Id); } List <Localidad> list6 = new List <Localidad>(); list6.AddRange(base.DAOFactory.LocalidadDAO.GetByProvincia(tokenizer2.ToArray(), -1)); IList <Localidad> list7 = Cleaning.Nomenclar <Localidad>(tokenizer2, list6, out num3); foreach (Localidad current3 in list7) { if (!list5.Contains(current3.Partido.Id)) { list3.Add(current3.Partido); list5.Add(current3.Partido.Id); } } } } else { if (!string.IsNullOrEmpty(direccion.Localidad)) { Tokenizer tokenizer2 = Tokenizer.FromString(direccion.Localidad, 1); List <Partido> list4 = new List <Partido>(); list4.AddRange(base.DAOFactory.PartidoDAO.GetEnProvincia(tokenizer2.ToArray(), -1)); List <int> list5 = new List <int>(); list3 = Cleaning.Nomenclar <Partido>(tokenizer2, list4, out num2); foreach (Partido current2 in list3) { list5.Add(current2.Id); } List <Localidad> list6 = new List <Localidad>(); list6.AddRange(base.DAOFactory.LocalidadDAO.GetByProvincia(tokenizer2.ToArray(), -1)); IList <Localidad> list7 = Cleaning.Nomenclar <Localidad>(tokenizer2, list6, out num3); foreach (Localidad current3 in list7) { if (!list5.Contains(current3.Partido.Id)) { list3.Add(current3.Partido); list5.Add(current3.Partido.Id); } } } } Tokenizer tokenizer3 = Tokenizer.FromString(direccion.Calle, 3); List <Poligonal> list8 = new List <Poligonal>(); List <double> list9 = new List <double>(); if (list3 != null) { foreach (Partido current2 in list3) { IList <Poligonal> enPartidoYProvincia = base.DAOFactory.PoligonalDAO.GetEnPartidoYProvincia(tokenizer3.ToArray(), current2.PolId, current2.Provincia.MapId); IList <Poligonal> list10 = Cleaning.NomenclarAmbiguo <Poligonal>(tokenizer3, enPartidoYProvincia, out item); list8.AddRange(list10); for (int i = 0; i < list10.Count; i++) { list9.Add(item); } } } else { if (list2 != null) { foreach (Provincia current in list2) { IList <Poligonal> enPartidoYProvincia = base.DAOFactory.PoligonalDAO.GetEnPartidoYProvincia(tokenizer3.ToArray(), -1, current.MapId); IList <Poligonal> list10 = Cleaning.NomenclarAmbiguo <Poligonal>(tokenizer3, enPartidoYProvincia, out item); list8.AddRange(list10); for (int i = 0; i < list10.Count; i++) { list9.Add(item); } } } else { IList <Poligonal> enPartidoYProvincia = base.DAOFactory.PoligonalDAO.GetEnPartidoYProvincia(tokenizer3.ToArray(), -1, -1); IList <Poligonal> list10 = Cleaning.NomenclarAmbiguo <Poligonal>(tokenizer3, enPartidoYProvincia, out item); list8.AddRange(list10); for (int i = 0; i < list10.Count; i++) { list9.Add(item); } } } if (direccion.Altura > 0) { for (int i = 0; i < list8.Count; i++) { Poligonal poligonal = list8[i]; if (poligonal.AlturaMinima - 1 <= direccion.Altura && poligonal.AlturaMaxima >= direccion.Altura) { DireccionVO direccionVO = base.ValidarAltura(poligonal.PolId, direccion.Altura, poligonal.MapId); if (direccionVO != null) { list.Add(new ObjetoPuntuado <DireccionVO>(num + num2 + list9[i], direccionVO)); } } } } else { List <double> list11 = new List <double>(); List <Poligonal> list12 = new List <Poligonal>(); Tokenizer tokenizer4 = Tokenizer.FromString(direccion.Esquina, 3); if (list3 != null) { foreach (Partido current2 in list3) { IList <Poligonal> enPartidoYProvincia2 = base.DAOFactory.PoligonalDAO.GetEnPartidoYProvincia(tokenizer4.ToArray(), current2.PolId, current2.Provincia.MapId); double item2; IList <Poligonal> list10 = Cleaning.NomenclarAmbiguo <Poligonal>(tokenizer4, enPartidoYProvincia2, out item2); list12.AddRange(list10); for (int i = 0; i < list10.Count; i++) { list11.Add(item2); } } } else { if (list2 != null) { foreach (Provincia current in list2) { IList <Poligonal> enPartidoYProvincia2 = base.DAOFactory.PoligonalDAO.GetEnPartidoYProvincia(tokenizer4.ToArray(), -1, current.MapId); double item2; IList <Poligonal> list10 = Cleaning.NomenclarAmbiguo <Poligonal>(tokenizer4, enPartidoYProvincia2, out item2); list12.AddRange(list10); for (int i = 0; i < list10.Count; i++) { list11.Add(item2); } } } else { IList <Poligonal> enPartidoYProvincia2 = base.DAOFactory.PoligonalDAO.GetEnPartidoYProvincia(tokenizer4.ToArray(), -1, -1); double item2; IList <Poligonal> list10 = Cleaning.NomenclarAmbiguo <Poligonal>(tokenizer4, enPartidoYProvincia2, out item2); list12.AddRange(list10); for (int i = 0; i < list10.Count; i++) { list11.Add(item2); } } } for (int i = 0; i < list8.Count; i++) { Poligonal poligonal = list8[i]; for (int j = 0; j < list12.Count; j++) { Poligonal poligonal2 = list12[j]; if (poligonal.MapId == poligonal2.MapId) { DireccionVO direccionVO = base.ValidarCruce(poligonal.PolId, poligonal2.PolId, poligonal.MapId); if (direccionVO != null) { list.Add(new ObjetoPuntuado <DireccionVO>(num + num2 + (list9[i] + list11[j]) / 2.0, direccionVO)); } } } } } result = list; } return(result); }
public IList <DireccionVO> GetSmartSearch(string frase) { Parser parser = new Parser(); ParsedDirection[] array = parser.ParseTokens(frase); List <ObjetoPuntuado <DireccionVO> > list = new List <ObjetoPuntuado <DireccionVO> >(); ParsedDirection[] array2 = array; for (int i = 0; i < array2.Length; i++) { ParsedDirection direccion = array2[i]; IList <ObjetoPuntuado <DireccionVO> > collection = this.NomenclarDireccionSmart(direccion); list.AddRange(collection); } double num = 0.0; if (list.Count > 0) { foreach (ObjetoPuntuado <DireccionVO> current in list) { if (current.Puntaje > num) { num = current.Puntaje; } } } List <IObjetoPuntuado <DireccionVO> > list2 = new List <IObjetoPuntuado <DireccionVO> >(); List <double> list3 = new List <double>(); List <double> list4 = new List <double>(); foreach (ObjetoPuntuado <DireccionVO> current2 in list) { if (current2.Puntaje > num * 0.5) { bool flag = false; for (int j = 0; j < list3.Count; j++) { double num2 = list3[j]; double num3 = list4[j]; if (current2.Objeto.Latitud == num2 && current2.Objeto.Longitud == num3) { flag = true; break; } } if (!flag) { list2.Add(current2); list3.Add(current2.Objeto.Latitud); list4.Add(current2.Objeto.Longitud); } } } list2.Sort(new IObjetoPuntuadoComparer <DireccionVO>()); List <DireccionVO> list5 = new List <DireccionVO>(list2.Count); foreach (IObjetoPuntuado <DireccionVO> current3 in list2) { list5.Add(current3.Objeto); } return(list5); }