示例#1
0
        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);
        }
示例#2
0
        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);
        }