public function determinaDireccion($estacionInicio, $estacionFin)
 {
     if ($estacionInicio->getPosicionLinea() == 1) {
         return RedMetro::buscaEstacion($this->idEstaciones[count($this->idEstaciones) - 1])->getNombre();
     }
     if ($estacionInicio->getPosicionLinea() == count($this->idEstaciones)) {
         return RedMetro::buscaEstacion($this->idEstaciones[0])->getNombre();
     }
     if ($this->idEstaciones[$estacionInicio->getPosicionLinea()] == $estacionFin->getId()) {
         return RedMetro::buscaEstacion($this->idEstaciones[count($this->idEstaciones) - 1])->getNombre();
     }
     return RedMetro::buscaEstacion($this->idEstaciones[0])->getNombre();
 }
 public static function calculaRuta($idEstacionOrigen, $idEstacionDestino)
 {
     $tramos = RedMetro::construyeGrafo();
     $dijkstra = new Dijkstra($idEstacionOrigen, $tramos);
     $puntosCamino = $dijkstra->getCompletePathToNode($idEstacionDestino);
     $camino = array();
     // construye tramos y transbordos
     for ($i = 0; $i < count($puntosCamino) - 1; $i++) {
         $estacionOrigen = RedMetro::buscaEstacion($puntosCamino[$i]);
         $estacionDestino = RedMetro::buscaEstacion($puntosCamino[$i + 1]);
         if ($estacionOrigen->getNombre() == $estacionDestino->getNombre()) {
             $puntosRuta[] = new Transbordo($estacionOrigen, $estacionDestino);
         } else {
             $direccion = $estacionOrigen->getLinea()->determinaDireccion($estacionOrigen, $estacionDestino);
             $puntosRuta[] = new Tramo($estacionOrigen, $estacionDestino, $direccion);
         }
     }
     // crea ruta y agrega tramos integrados y transbordos
     $ruta = new Ruta(RedMetro::obtenDistancia($puntosRuta), $dijkstra->getDistanceToNode($idEstacionDestino));
     return self::construyeRuta($ruta, $puntosRuta);
 }