Ejemplo n.º 1
0
        public Ruta[] DameLineaComoRuta(string lineaCode)
        {
            var linea            = LineaBC.DameLineas(lineaCode);
            var masCercanoOrigen = linea.Paraderos.First();
            var masCercaDestino  = linea.Paraderos.Last();
            var detalle          = DameDetalle(masCercanoOrigen, masCercaDestino, linea);

            return(new[] { new Ruta()
                           {
                               Detalle = detalle.ToArray()
                           } });
        }
Ejemplo n.º 2
0
        private List <RutaDetalle> DameDetalle(Paradero origen, Paradero destino, Linea linea = null)
        {
            if (origen.Codigo == destino.Codigo)
            {
                return(new List <RutaDetalle>());
            }

            Linea[] lineas;

            if (linea != null)
            {
                lineas = new[] { linea }
            }
            ;
            else
            {
                lineas = LineaBC.DameLineas(origen);
            }
            var distance             = Distance.GetDistance(origen.Coordenada, destino.Coordenada);
            var paraderosMasCercanos =
                lineas
                .SelectMany(l => l.Paraderos.Select(p => new { Paradero = p, Linea = l, Distancia = Distance.GetDistance(p.Coordenada, destino.Coordenada) + Distance.GetDistance(p.Coordenada, origen.Coordenada) }))
                .Where(p => p.Paradero.Codigo != origen.Codigo &&
                       Distance.GetDistance(p.Paradero.Coordenada, destino.Coordenada) < distance)
                .OrderBy(p => p.Distancia)
                .ToArray();

            if (getMinimal)
            {
                var list = new List <List <RutaDetalle> >();


                foreach (var paraderoMasCercano in paraderosMasCercanos)
                {
                    var rutaDetalle = DameDetalle(paraderoMasCercano.Paradero, destino);
                    if (rutaDetalle == null)
                    {
                        continue;
                    }
                    var detalle = LineaARutaDetalle.DameDetalle(origen, paraderoMasCercano.Paradero, paraderoMasCercano.Linea);
                    detalle.AddRange(rutaDetalle);
                    list.Add(detalle);
                }
                return(list.OrderBy(p => p.Sum(d => d.Distancia)).First());
            }
            else
            {
                foreach (var paraderoMasCercano in paraderosMasCercanos)
                {
                    var rutaDetalle = DameDetalle(paraderoMasCercano.Paradero, destino);
                    if (rutaDetalle == null)
                    {
                        continue;
                    }
                    var detalle = LineaARutaDetalle.DameDetalle(origen, paraderoMasCercano.Paradero, paraderoMasCercano.Linea);
                    detalle.AddRange(rutaDetalle);
                    return(detalle);
                }
            }

            return(new List <RutaDetalle>());
        }