Granada

Las estaciones son algo más que un lugar desde el que subir a un tren o desembarcar del mismo. Además de prestar sus servicios a los viajeros y usuarios, muchas de ellas constituyen una referencia en las localidades donde su ubican.
Aquí se pueden conocer los horarios de llegadas y salidas de la estación, así como los servicios que se ofrecen en su recinto e instalaciones. Para ello acceda a dicha información a través del selector que ponemos a su disposición.
-
viernes 01/05/2026
-
Hora actual - 06:29 h
-
Estado de la Red
Salidas
| Hora de salida | Destino | Tren | Vía |
|---|
No se ha podido recuperar información de circulación.
Llegadas
| Hora de llegada | Origen | Tren | Vía |
|---|---|---|---|
|
08:46
|
RF - MD13951 |
1
|
|
| Por obras el recorrido entre Huércal Viator y Almería se realiza por carretera. | |||
|
10:20
|
RF - AVANT08275 |
4
|
|
| 01/05/2026 - Se están produciendo retrasos debido a una incidencia en las instalaciones entre BIF. MALAGA-A. V. y HORNACHUELOS. Se está trabajando para solucionarla lo antes posible. | |||
|
10:50
|
RF - AVANT08815 |
6
|
|
|
10:58
|
RF - ALVIA02087 |
4
|
|
| Por obras el recorrido entre Huércal Viator y Almería se realiza por carretera. - 01/05/2026 - Se están produciendo retrasos debido a una incidencia en las instalaciones entre BIF. MALAGA-A. V. y HORNACHUELOS. Se está trabajando para solucionarla lo antes posible. - Compartido: Media Distancia 37087 Almería - Granada | |||
|
11:05
|
RF - AVE02072 |
5
|
|
|
11:05
|
RF - AVE02076 |
5
|
|
|
12:09
|
RF - MD13953 |
1
|
|
| Por obras el recorrido entre Huércal Viator y Almería se realiza por carretera. | |||
|
12:35
|
RF - AVANT08295 |
6
|
|
| 01/05/2026 - Se están produciendo retrasos debido a una incidencia en las instalaciones entre BIF. MALAGA-A. V. y HORNACHUELOS. Se está trabajando para solucionarla lo antes posible. | |||
|
15:25
|
RF - AVANT08335 |
6
|
|
| 01/05/2026 - Se están produciendo retrasos debido a una incidencia en las instalaciones entre BIF. MALAGA-A. V. y HORNACHUELOS. Se está trabajando para solucionarla lo antes posible. | |||
|
15:38
|
RF - AVE00094 |
5
|
|
| 01/05/2026 - Se están produciendo retrasos debido a una incidencia en las instalaciones entre BIF. MALAGA-A. V. y HORNACHUELOS. Se está trabajando para solucionarla lo antes posible. | |||
|
16:00
|
RF - MD13955 |
1
|
|
| Por obras el recorrido entre Huércal Viator y Almería se realiza por carretera. | |||
|
16:59
|
RF - AVE02136 |
7
|
|
| 01/05/2026 - Se están produciendo retrasos debido a una incidencia en las instalaciones entre BIF. MALAGA-A. V. y HORNACHUELOS. Se está trabajando para solucionarla lo antes posible. | |||
|
17:57
|
RF - AVANT08835 |
6
|
|
|
20:26
|
RF - ALVIA02366 |
4
|
|
| 01/05/2026 - Se están produciendo retrasos debido a una incidencia en las instalaciones entre BIF. MALAGA-A. V. y HORNACHUELOS. Se está trabajando para solucionarla lo antes posible. | |||
|
21:07
|
RF - MD13957 |
||
| Por obras el recorrido entre Huércal Viator y Almería se realiza por carretera. | |||
|
21:58
|
RF - AVANT08395 |
5
|
|
| 01/05/2026 - Se están produciendo retrasos debido a una incidencia en las instalaciones entre BIF. MALAGA-A. V. y HORNACHUELOS. Se está trabajando para solucionarla lo antes posible. | |||
|
22:05
|
RF - AVANT08855 |
4
|
|
|
23:25
|
RF - AVE02226 |
6
|
|
|
08:46
|
RF - MD13951 |
||
| Por obras el recorrido entre Huércal Viator y Almería se realiza por carretera. | |||
|
10:20
|
RF - AVANT08275 |
||
|
10:50
|
RF - AVANT08815 |
||
|
10:58
|
RF - ALVIA02087 |
||
| Por obras el recorrido entre Huércal Viator y Almería se realiza por carretera. - Compartido: Media Distancia 37087 Almería - Granada | |||
|
11:05
|
RF - AVE02072 |
||
|
11:05
|
RF - AVE02076 |
||
|
12:09
|
RF - MD13953 |
||
| Por obras el recorrido entre Huércal Viator y Almería se realiza por carretera. | |||
No se ha podido recuperar información de circulación.
Informacion de la estación
-
Dirección
Avda. de Los Andaluces, s/n --- 18014 Granada --- GRANADA
-
Horario
Diario: 05:35 a 00:00
Intermodalidad
Parada
Estación de Ferrocarril
Línea Albolote - ArmillaLíneas de autobús urbanas
Línea 4: Conecta Bobadilla con Torre de la Polvora.
Línea 9: Recorre el trayecto entre Sagrada Familia y El Serrallo, pasando por el eje de la avenida de la Constitución y Gran Vía.
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> lista3[cur_elem?index+1].titulo [in template "20101#20128#ADIF-SERVICIOS-ESTACION-TEMPLATE" at line 167, column 101]
----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: #if (texto == "Adaptados" && esMayor(... [in template "20101#20128#ADIF-SERVICIOS-ESTACION-TEMPLATE" in macro "orderServicesList" at line 166, column 41]
- Reached through: @orderServicesList lista, texto [in template "20101#20128#ADIF-SERVICIOS-ESTACION-TEMPLATE" in macro "listPaint" at line 49, column 9]
- Reached through: @listPaint servicios.id.getSiblings()... [in template "20101#20128#ADIF-SERVICIOS-ESTACION-TEMPLATE" at line 37, column 9]
----
1<script type="text/javascript">
2
3
4function cierraDetalles(){
5 var detalles = $("div[id^='detalleServicio']");
6 var iconos = $("[id^='button-detalleServicio']");
7 for (let detalle of detalles) {
8 detalle.style.display = 'none'
9 }
10 for (let icono of iconos) {
11 icono.setAttribute('aria-expanded', 'false');
12 }
13}
14
15function toggle(id, id2) {
16
17
18 var n = document.getElementById(id);
19 if (n.style.display != 'none')
20 {
21 n.style.display = 'none';
22 document.getElementById(id2).setAttribute('aria-expanded', 'false');
23 }
24 else
25 {
26 cierraDetalles();
27 n.style.display = '';
28 document.getElementById(id2).setAttribute('aria-expanded', 'true');
29 }
30}
31 </script>
32
33<#if servicios?? && servicios.id?? && servicios.id.getSiblings()?has_content>
34 <div class="title-servicios">
35 <h3><@liferay.language key="es.adif.estacion.servicios"/></h3>
36 </div>
37 <@listPaint servicios.id.getSiblings() ""/>
38</#if>
39
40<#if serviciosAdaptados?? && serviciosAdaptados.idAdaptados?? && serviciosAdaptados.idAdaptados.getSiblings()?has_content>
41 <div class="title-servicios">
42 <h3><@liferay.language key="es.adif.estacion.servicios-adaptados"/></h3>
43 </div>
44 <@listPaint serviciosAdaptados.idAdaptados.getSiblings() "Adaptados"/>
45</#if>
46
47<#macro listPaint lista texto>
48
49 <@orderServicesList lista texto/>
50
51 <#list listaOrdenada as cur_id>
52
53 <#if cur_id?index %3 == 0>
54 <#assign
55 hay1 = listaOrdenada[cur_id?index+1]??
56 hay2 = listaOrdenada[cur_id?index+2]??
57 />
58 <div class="servicios-estacion" id="servicios-estacion">
59 <@boxPaint cur_id cur_id?index texto/>
60 <#if hay1>
61 <@boxPaint listaOrdenada[cur_id?index+1] cur_id?index+1 texto/>
62 <#if hay2>
63 <@boxPaint listaOrdenada[cur_id?index+2] cur_id?index+2 texto/>
64 </#if>
65 </#if>
66 </div>
67 <@detailPaint cur_id cur_id?index texto/>
68 <#if hay1>
69 <@detailPaint listaOrdenada[cur_id?index+1] cur_id?index+1 texto/>
70 <#if hay2>
71 <@detailPaint listaOrdenada[cur_id?index+2] cur_id?index+2 texto/>
72 </#if>
73 </#if>
74 </#if>
75
76 </#list>
77
78</#macro>
79
80<#macro boxPaint elem index texto>
81 <#if texto!="Adaptados">
82 <#if elem.popServicios.getData() ?? && elem.popServicios.getData() != "">
83 <button class="linkServiciosDesp" id="button-detalleServicio${texto}-${index}" aria-expanded="false" aria-controls="detalleServicio${texto}-${index}" onclick="toggle('detalleServicio${texto}-${index}', 'button-detalleServicio${texto}-${index}')">
84 </#if>
85 <div class="servicio-estacion" id="iconoServicio${texto}-${index}">
86 <div class="servicio-estacion-icono" style="background-image:url('${elem.icono.getData()}')"></div><!-- /.servicio-estacion-icono -->
87 <div class="servicio-estacion-datos">
88 <h4>${elem.titulo.getData()}</h4>
89 <p class="descripcion-servicios">${elem.descripcionServicios.getData()}</p>
90 <#if elem.popServicios.getData() ?? && elem.popServicios.getData() != "">
91 <p class="detalle-mas-informacion">
92 <span class="texto_servicios_responsive" data-desktoptext="Más información" data-phonetext="+"></span>
93 </p>
94 </#if>
95 </div>
96 </div>
97 <#if elem.popServicios.getData() ?? && elem.popServicios.getData() != "">
98 </button>
99 </#if>
100 <#else>
101 <#if elem.popAdaptados.getData() ?? && elem.popAdaptados.getData() != "">
102 <button class="linkServiciosDesp" id="button-detalleServicio${texto}-${index}" aria-expanded="false" aria-controls="detalleServicio${texto}-${index}" onclick="toggle('detalleServicio${texto}-${index}', 'button-detalleServicio${texto}-${index}')">
103 </#if>
104 <div class="servicio-estacion" id="iconoServicio${texto}-${index}">
105 <div class="servicio-estacion-icono" style="background-image:url('${elem.iconoAdaptados.getData()}'"></div><!-- /.servicio-estacion-icono -->
106 <div class="servicio-estacion-datos">
107 <h4>${elem.tituloAdaptados.getData()}</h4>
108 <p class="descripcion-servicios">${elem.descripcionAdaptados.getData()}</p>
109 <#if elem.popAdaptados.getData() ?? && elem.popAdaptados.getData() != "">
110 <p class="detalle-mas-informacion">
111 <span class="texto_servicios_responsive" data-desktoptext="Más información" data-phonetext="+"></span>
112 </p>
113 </#if>
114 </div>
115 </div>
116 <#if elem.popAdaptados.getData() ?? && elem.popAdaptados.getData() != "">
117 </button>
118 </#if>
119 </#if>
120</#macro>
121
122<#macro detailPaint elem index texto>
123 <#if texto!="Adaptados">
124 <div role="region" aria-labelledby="button-detalleServicio${texto}-${index}" class="servicios-estacion" id="detalleServicio${texto}-${index}" style="display:none">
125 <div class="servicio-estacion servicio-estacion-detalle servicio-estacion-detalle-${index%3} ">
126 <div class="servicio-estacion-icono" style="background-image:url('${elem.icono.getData()}')"></div><!-- /.servicio-estacion-icono -->
127 <div class="servicio-estacion-datos">
128 <h4>${elem.titulo.getData()}</h4>
129 ${elem.popServicios.getData()}
130 <p>
131 <button aria-label="<@liferay.language key="navigation.cerrar" /> ${elem.titulo.getData()}" class="btn-close-adif" type="button" onclick="toggle('detalleServicio${texto}-${index}', 'button-detalleServicio${texto}-${index}')">×</button>
132
133 </p>
134 </div>
135 </div>
136 </div>
137 <#else>
138 <div role="region" aria-labelledby="button-detalleServicio${texto}-${index}" class="servicios-estacion" id="detalleServicio${texto}-${index}" style="display:none">
139 <div class="servicio-estacion servicio-estacion-detalle servicio-estacion-detalle-${index%3}">
140 <div class="servicio-estacion-icono" style="background-image:url('${elem.iconoAdaptados.getData()}'"></div><!-- /.servicio-estacion-icono -->
141 <div class="servicio-estacion-datos">
142 <h4>${elem.tituloAdaptados.getData()}</h4>
143 ${elem.popAdaptados.getData()}
144 <p>
145 <button class="btn-close-adif" aria-label="<@liferay.language key="navigation.cerrar" /> ${elem.tituloAdaptados.getData()}" type="button" onclick="toggle('detalleServicio${texto}-${index}', 'button-detalleServicio${texto}-${index}')">×</button>
146 </p>
147 </div>
148 </div>
149 </div>
150 </#if>
151
152</#macro>
153
154<#macro orderServicesList lista texto>
155 <#assign lista2 = []>
156 <#assign lista3 = lista>
157 <#assign stop = true>
158 <#assign run = true>
159 <#assign iteraciones = lista3?size*lista3?size>
160 <#list 0..iteraciones as i>
161 <#assign run = false>
162 <#assign saltarSiguiente = false>
163 <#list lista3 as cur_elem>
164 <#if !saltarSiguiente>
165 <#if !cur_elem?is_last >
166 <#if (texto=="Adaptados" && esMayor(cur_elem.tituloAdaptados.getData(),lista3[cur_elem?index+1].tituloAdaptados.getData()))
167 || (texto!="Adaptados" && esMayor(cur_elem.titulo.getData(),lista3[cur_elem?index+1].titulo.getData()))>
168 <#assign run = true>
169 <#assign lista2 = lista2 + [lista3[cur_elem?index+1], cur_elem]>
170 <#assign saltarSiguiente = true>
171 <#else>
172 <#assign lista2 = lista2 + [cur_elem]/>
173 </#if>
174 <#else>
175 <#assign lista2 = lista2 + [cur_elem]>
176 </#if>
177 <#else>
178 <#assign saltarSiguiente = false/>
179 </#if>
180 </#list>
181 <#if !run>
182 <#break>
183 </#if>
184 <#assign lista3 = lista2>
185 <#assign lista2 = []>
186 </#list>
187
188 <#assign listaOrdenada = lista3>
189</#macro>
190
191<#function esMayor string1 string2>
192 <#assign strings = [string1,string2]?sort>
193 <#return strings[0]==string2>
194</#function>
Enrique Tomás
Número de local: Vestíbulo
Máquinas vending
Número de local: Vestíbulo
Cajero automático Caja Rural
Número de local: Vestíbulo

