%% -- DEMO_ VIABILIDAD SEGMENTO : Madrid --> Barcelona

% La idea de la demostración es probar la utilidad de las funciones desarrolladas para evaluar la viabilidad de
% un determinado segmento rectilíneo de ruta. 

% La rapidez de visualización puede cambiarse modificando los parámetros tr, ta y PLOT.


%% ------------------------------------------------------------------------------------------------------------
clear all; close all; clc
% Segmento de ruta:     Madrid                      --->                    Barcelona
lat0 =  40.4722;     lon0 = -3.5608;    alt0 = 5000;        latf = 41.2969;      lonf =  2.0783;     altf = 5000;

% Tiempo visualización ruta / area                      % Registros combinaciones
tr = 0.1;   ta = 2;    PLOT = 'P';                      si = 'i:'; sj = 'j:';  sk = 'k:'; 

% Puntos intermedios:
np = 10;        LAT   = linspace(lat0, latf, np);          LON = linspace(lon0, lonf, np);          ALT(1:length(LAT)) = 5000;

% Asumiendo la simplificacion de 'Tierra Plana' : 1 grado latitud  ~ 110 Km | 1 grado longitud ~ 111 Km     
latDeg2Km = 110;   lonDeg2Km = 111;          Km2LatDeg = 1/latDeg2Km;    Km2LonDeg = 1/lonDeg2Km;  

% Trabaremos ahora en unidades de distancia (Km)          
X = LAT*latDeg2Km;        Y = LON*lonDeg2Km;   

% CARGAMOS las radioayudas del segmento previamente calculadas con  Database_Segment_filter
[Database] = Reading_Database('FROM LEMD [40.4722 ; -3.5608] TO LEBL [41.2969 ; 2.0783] A 300___21-Sep-2015_21_24.txt', 1, 9);
% Al1acenamos los datos en distintos arrays:
[NAtype, NAlat, NAlon, NAalt,  NAfreq, NArange, NAid] = Get_NavAid_Data(Database);

% Transformamos NAlat y NAlon a Km
NA_x = NAlat * latDeg2Km;        NA_y = NAlon * lonDeg2Km;

% Plot de los puntos de ruta:
ruta = figure('Name', 'Ruta');      if strcmp(PLOT, 'P');   combinacion = figure('Name', 'Check cobertura');   figure(ruta); end
for i = 1:length(X)
    if      i == 1  || i == length(X)           
        plot( X(i), Y(i),     'oblack','LineWidth',4);            hold on;
        xlabel('Eje Y: Latitud en Km (1º~ 110 Km)', 'FontSize',20);    ylabel('Eje X: Longitud en Km (1º~ 111 Km)', 'FontSize',20)
    else                       % Posiciones DME 1 y DME 2
        plot( X(i), Y(i),     'oblack', 'LineWidth',1);           hold on;
    end
end
% Plot de las radioayudas alrededor de la ruta:
%xlt = (max(NA_x) - min(NA_x))*0.05;    ylt =(max(NA_y) - min(NA_y))*0.05;
xlt = 0; ylt = 0;
for i = 1: length(NA_x)         
        plot(NA_x(i), NA_y(i),     '^blue','LineWidth',2);        hold on;  
        text (NA_x(i) - xlt, NA_y(i) + ylt, NAid(i), 'FontSize',13)
end
view(-90,90) 
set(gca,'ydir','reverse');

% Centrado:
Xt = [X, NA_x'];      Yt = [Y, NA_y'];      x_min = min(Xt); x_max = max(Xt);   y_min = min(Yt);  y_max = max(Yt);
%Abs = abs([x_min, x_max, y_min, y_max]);     M = max(Abs) * 0.002;
%axis([(x_min - M) (x_max + M) (y_min - M) (y_max + M)]);
%grid off;    axis equal;                                          hold on;

% Bucle para comprobar área actualización:                  %figure      %L1 = plot,    delete(L1)
NAtotal = size(Database, 1);       figure(ruta);   Lf = plot(X(1), Y(1));          record =[];   
for i = 1 : length(X)
    % Fijamos el punto de ruta a comprobar
    lat_r = LAT(i);   lon_r = LON(i);   x_r = X(i);      y_r = Y(i);    validez = 0;
    % Existencia de  Lm
    if strcmp (PLOT, 'P') figure(ruta);    Lm = plot(x_r, y_r);  end
    for j = 1: NAtotal
        if validez;                  break;            end;
        % Fijamos la nueva radioayuda j-èsima a comprobar
        lat_j = NAlat(j);   lon_j = NAlon(j);   NA_x_j = NA_x(j);       NA_y_j = NA_y(j);       R_j = NArange(j);
        % Cambio de radioayudas fija:
        if strcmp (PLOT, 'P'); figure(ruta);        set(Lm, 'Visible' ,'off');  delete(Lf);     end
        if strcmp (PLOT, 'P'); figure(ruta);        Lf = plot([x_r, NA_x_j],[y_r, NA_y_j], 'blue'); end
        for k = 1 : NAtotal
               % Fijamos los valores de la nueva radioayuda k-esima:combin
               lat_k = NAlat(k);   lon_k = NAlon(k);   NA_x_k = NA_x(k);       NA_y_k = NA_y(k);         R_k = NArange(k); 
               % Cambio de radioayuda movil:
               if strcmp (PLOT, 'P') figure(ruta);     delete(Lm); end
               if strcmp (PLOT, 'P') figure(ruta);     Lm = plot([x_r, NA_x_k],[y_r, NA_y_k], 'black');   if j == k  set(Lm, 'Visible' ,'off');  end; end
               % Comprobamos con el resto de radioayudas:
               if k ~= j   
               % Realizamos la comprobación:
               if strcmp(PLOT, 'P');  figure(combinacion); end 
                [alpha,sigma,in_out, validez] = DME_DME_Upgrade_Area (lat_r, lon_r,  lat_j, lon_j, R_j,  lat_k, lon_k, R_k, PLOT, combinacion); clc;   pause(ta);
                if validez;     pause(6);    end;
               end
               % Registro de combinaciones
               si1 = [si, num2str(i)];  sj1 = [sj, num2str(j)];     sk1 = [sk, num2str(k)];    
               if length(num2str(i)) == 1   s2 = [si1 ,' ', sj1, ' ', sk1,' '];  else   s2 = [si1,' ', sj1,' ', sk1];   end
               if k ~= 8 record = [record; s2]; else  r = '------------'; record = [record; s2; r]; end
               % Check de cobertura:
               if validez
                     % Salimos de ambos bluces y pasamos a comprobar otro punto
                     figure(ruta); plot(x_r, y_r, 'ogreen','LineWidth',2); set(Lm, 'Visible' ,'off'); pause(tr);
                     break;
               end
        end
    end
    if validez == 0
       % Se han probado todas las combinaciones de radioayudas y ninguna ofrece cobertura adecuada
       figure(ruta); plot(x_r, y_r, 'ored','LineWidth',2); pause(tr);
    end
end