cambios n el horiario del taxibus
arreglado buscador de asti arreglado buscador con la ñ añadido 2 niveles de colores en cuestas añadido 2 niveles de umbrales en la configuracion de alturas
This commit is contained in:
@@ -53,6 +53,8 @@ public partial class PlanificadorRutas : ComponentBase
|
||||
private const double PendienteMaximaEsfuerzoPorcentaje = 80.0;
|
||||
private const double FactorEquilibradoAndarBusPorDefecto = 6.0;
|
||||
private const double UmbralPendienteSubidaRutaPorDefecto = 2.0;
|
||||
private const double UmbralPendienteSubidaMediaRutaPorDefecto = 5.0;
|
||||
private const double UmbralPendienteSubidaFuerteRutaPorDefecto = 10.0;
|
||||
private const double UmbralPendienteBajadaRutaPorDefecto = 5.0;
|
||||
private const double UmbralAlturaAlertaPendienteRutaMetrosPorDefecto = 6.0;
|
||||
private const double MetrosPorPiso = 3.0;
|
||||
@@ -368,6 +370,8 @@ public partial class PlanificadorRutas : ComponentBase
|
||||
private bool _mostrarConfiguracionPendientesRuta = false;
|
||||
private bool _panelRutasMovilContraido = false;
|
||||
private double _umbralPendienteSubidaRuta = UmbralPendienteSubidaRutaPorDefecto;
|
||||
private double _umbralPendienteSubidaMediaRuta = UmbralPendienteSubidaMediaRutaPorDefecto;
|
||||
private double _umbralPendienteSubidaFuerteRuta = UmbralPendienteSubidaFuerteRutaPorDefecto;
|
||||
private double _umbralPendienteBajadaRuta = UmbralPendienteBajadaRutaPorDefecto;
|
||||
private double _umbralAlturaAlertaPendienteRutaMetros = UmbralAlturaAlertaPendienteRutaMetrosPorDefecto;
|
||||
private double _alturaPendientePositivaSignificativaRutaMetros = 0.0;
|
||||
|
||||
@@ -1202,7 +1202,7 @@ public partial class PlanificadorRutas : ComponentBase
|
||||
private bool _elevPopupMinimizado = false;
|
||||
|
||||
|
||||
private const string _versionApp = "(v-20260827b)";
|
||||
private const string _versionApp = "(v-20260828a)";
|
||||
|
||||
|
||||
private double? _paradaElevIdee;
|
||||
|
||||
@@ -49,6 +49,8 @@ public partial class PlanificadorRutas
|
||||
public int? VersionFuenteElevacion { get; set; }
|
||||
public int? VersionPendientes { get; set; }
|
||||
public double? UmbralPendienteSubidaRuta { get; set; }
|
||||
public double? UmbralPendienteSubidaMediaRuta { get; set; }
|
||||
public double? UmbralPendienteSubidaFuerteRuta { get; set; }
|
||||
public double? UmbralPendienteBajadaRuta { get; set; }
|
||||
public double? UmbralAlturaAlertaPendienteRutaMetros { get; set; }
|
||||
// Compatibilidad con configuraciones guardadas cuando el umbral se expresaba en pisos.
|
||||
@@ -167,6 +169,8 @@ public partial class PlanificadorRutas
|
||||
VersionFuenteElevacion = VersionPersistenciaFuenteElevacion,
|
||||
VersionPendientes = VersionPersistenciaPendientes,
|
||||
UmbralPendienteSubidaRuta = _umbralPendienteSubidaRuta,
|
||||
UmbralPendienteSubidaMediaRuta = _umbralPendienteSubidaMediaRuta,
|
||||
UmbralPendienteSubidaFuerteRuta = _umbralPendienteSubidaFuerteRuta,
|
||||
UmbralPendienteBajadaRuta = _umbralPendienteBajadaRuta,
|
||||
UmbralAlturaAlertaPendienteRutaMetros = _umbralAlturaAlertaPendienteRutaMetros,
|
||||
VelocidadPieKmH = _velocidadPieKmH,
|
||||
@@ -262,6 +266,17 @@ public partial class PlanificadorRutas
|
||||
_umbralPendienteSubidaRuta = Math.Abs(umbralSubida - 3.0) < 0.0001
|
||||
? UmbralPendienteSubidaRutaPorDefecto
|
||||
: NormalizarUmbralPendienteRuta(umbralSubida);
|
||||
_umbralPendienteSubidaMediaRuta =
|
||||
config.UmbralPendienteSubidaMediaRuta is { } umbralSubidaMedia &&
|
||||
double.IsFinite(umbralSubidaMedia)
|
||||
? NormalizarUmbralPendienteRuta(umbralSubidaMedia)
|
||||
: UmbralPendienteSubidaMediaRutaPorDefecto;
|
||||
_umbralPendienteSubidaFuerteRuta =
|
||||
config.UmbralPendienteSubidaFuerteRuta is { } umbralSubidaFuerte &&
|
||||
double.IsFinite(umbralSubidaFuerte)
|
||||
? NormalizarUmbralPendienteRuta(umbralSubidaFuerte)
|
||||
: UmbralPendienteSubidaFuerteRutaPorDefecto;
|
||||
NormalizarOrdenUmbralesColorSubidaRuta();
|
||||
if (config.UmbralPendienteBajadaRuta is { } umbralBajada && double.IsFinite(umbralBajada))
|
||||
_umbralPendienteBajadaRuta =
|
||||
Math.Abs(umbralBajada - 3.0) < 0.0001 ||
|
||||
@@ -391,6 +406,8 @@ public partial class PlanificadorRutas
|
||||
_mostrarElevacionesRutaConfiguracion = true;
|
||||
_fuenteElevacionCalculo = FuenteElevacionLocal5;
|
||||
_umbralPendienteSubidaRuta = UmbralPendienteSubidaRutaPorDefecto;
|
||||
_umbralPendienteSubidaMediaRuta = UmbralPendienteSubidaMediaRutaPorDefecto;
|
||||
_umbralPendienteSubidaFuerteRuta = UmbralPendienteSubidaFuerteRutaPorDefecto;
|
||||
_umbralPendienteBajadaRuta = UmbralPendienteBajadaRutaPorDefecto;
|
||||
_umbralAlturaAlertaPendienteRutaMetros = UmbralAlturaAlertaPendienteRutaMetrosPorDefecto;
|
||||
_velocidadPieKmH = 3.6;
|
||||
@@ -444,6 +461,8 @@ public partial class PlanificadorRutas
|
||||
_mostrarElevacionesRutaConfiguracion = true;
|
||||
_fuenteElevacionCalculo = FuenteElevacionLocal5;
|
||||
_umbralPendienteSubidaRuta = UmbralPendienteSubidaRutaPorDefecto;
|
||||
_umbralPendienteSubidaMediaRuta = UmbralPendienteSubidaMediaRutaPorDefecto;
|
||||
_umbralPendienteSubidaFuerteRuta = UmbralPendienteSubidaFuerteRutaPorDefecto;
|
||||
_umbralPendienteBajadaRuta = UmbralPendienteBajadaRutaPorDefecto;
|
||||
_umbralAlturaAlertaPendienteRutaMetros = UmbralAlturaAlertaPendienteRutaMetrosPorDefecto;
|
||||
_velocidadPieKmH = 3.6;
|
||||
|
||||
@@ -106,7 +106,10 @@ public partial class PlanificadorRutas : ComponentBase
|
||||
var nuevo = ParseUmbralPendienteRuta(e.Value, actual);
|
||||
|
||||
if (esSubida)
|
||||
{
|
||||
_umbralPendienteSubidaRuta = nuevo;
|
||||
NormalizarOrdenUmbralesColorSubidaRuta();
|
||||
}
|
||||
else
|
||||
_umbralPendienteBajadaRuta = nuevo;
|
||||
|
||||
@@ -114,6 +117,23 @@ public partial class PlanificadorRutas : ComponentBase
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private async Task CambiarUmbralColorSubidaRutaAsync(ChangeEventArgs e, bool esFuerte)
|
||||
{
|
||||
var actual = esFuerte
|
||||
? _umbralPendienteSubidaFuerteRuta
|
||||
: _umbralPendienteSubidaMediaRuta;
|
||||
var nuevo = ParseUmbralPendienteRuta(e.Value, actual);
|
||||
|
||||
if (esFuerte)
|
||||
_umbralPendienteSubidaFuerteRuta = nuevo;
|
||||
else
|
||||
_umbralPendienteSubidaMediaRuta = nuevo;
|
||||
|
||||
NormalizarOrdenUmbralesColorSubidaRuta();
|
||||
await PersistirConfiguracionAsync();
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private async Task RecalcularRankingTrasCambioEsfuerzoPendienteAsync(bool forzarRepintado = false)
|
||||
{
|
||||
if (_opcionesRuta.Count == 0)
|
||||
@@ -207,6 +227,23 @@ public partial class PlanificadorRutas : ComponentBase
|
||||
? Math.Clamp(Math.Abs(valor), 0.0, 100.0)
|
||||
: UmbralPendienteSubidaRutaPorDefecto;
|
||||
|
||||
private void NormalizarOrdenUmbralesColorSubidaRuta()
|
||||
{
|
||||
var umbralSubida = NormalizarUmbralPendienteRuta(_umbralPendienteSubidaRuta);
|
||||
var umbralMedia = double.IsFinite(_umbralPendienteSubidaMediaRuta)
|
||||
? NormalizarUmbralPendienteRuta(_umbralPendienteSubidaMediaRuta)
|
||||
: UmbralPendienteSubidaMediaRutaPorDefecto;
|
||||
var umbralFuerte = double.IsFinite(_umbralPendienteSubidaFuerteRuta)
|
||||
? NormalizarUmbralPendienteRuta(_umbralPendienteSubidaFuerteRuta)
|
||||
: UmbralPendienteSubidaFuerteRutaPorDefecto;
|
||||
|
||||
_umbralPendienteSubidaMediaRuta = Math.Clamp(umbralMedia, umbralSubida, 100.0);
|
||||
_umbralPendienteSubidaFuerteRuta = Math.Clamp(
|
||||
umbralFuerte,
|
||||
_umbralPendienteSubidaMediaRuta,
|
||||
100.0);
|
||||
}
|
||||
|
||||
private static double ParseUmbralAlturaAlertaPendienteRutaMetros(object? valor, double actual)
|
||||
{
|
||||
var texto = Convert.ToString(valor, CultureInfo.InvariantCulture)?.Replace(',', '.');
|
||||
@@ -426,8 +463,23 @@ public partial class PlanificadorRutas : ComponentBase
|
||||
|
||||
var umbralSubida = NormalizarUmbralPendienteRuta(_umbralPendienteSubidaRuta);
|
||||
var umbralBajada = NormalizarUmbralPendienteRuta(_umbralPendienteBajadaRuta);
|
||||
var umbralSubidaMedia = Math.Clamp(
|
||||
NormalizarUmbralPendienteRuta(_umbralPendienteSubidaMediaRuta),
|
||||
umbralSubida,
|
||||
100.0);
|
||||
var umbralSubidaFuerte = Math.Clamp(
|
||||
NormalizarUmbralPendienteRuta(_umbralPendienteSubidaFuerteRuta),
|
||||
umbralSubidaMedia,
|
||||
100.0);
|
||||
|
||||
if (pendientePorcentaje.Value >= umbralSubidaFuerte)
|
||||
return ("subida-fuerte", "#000000");
|
||||
|
||||
if (pendientePorcentaje.Value >= umbralSubidaMedia)
|
||||
return ("subida-media", "#4c1d95");
|
||||
|
||||
if (pendientePorcentaje.Value >= umbralSubida)
|
||||
return ("subida", "#000000");
|
||||
return ("subida-suave", "#d946ef");
|
||||
|
||||
if (pendientePorcentaje.Value <= -umbralBajada)
|
||||
return ("bajada", "#2563eb");
|
||||
|
||||
@@ -1831,7 +1831,10 @@
|
||||
</label>
|
||||
|
||||
<label class="pendientes-config-modal__field">
|
||||
<span>Umbral Subida (%)</span>
|
||||
<span class="pendientes-config-modal__threshold-label">
|
||||
<span class="pendientes-config-modal__swatch pendientes-config-modal__swatch--suave" aria-hidden="true"></span>
|
||||
Umbral Subida (%)
|
||||
</span>
|
||||
<input type="text"
|
||||
class="config-input"
|
||||
inputmode="decimal"
|
||||
@@ -1840,6 +1843,32 @@
|
||||
@onchange="@(e => CambiarUmbralElevacionRutaAsync(e, true))" />
|
||||
</label>
|
||||
|
||||
<label class="pendientes-config-modal__field">
|
||||
<span class="pendientes-config-modal__threshold-label">
|
||||
<span class="pendientes-config-modal__swatch pendientes-config-modal__swatch--media" aria-hidden="true"></span>
|
||||
Subida Media (%)
|
||||
</span>
|
||||
<input type="text"
|
||||
class="config-input"
|
||||
inputmode="decimal"
|
||||
value="@_umbralPendienteSubidaMediaRuta.ToString("0.#", CultureInfo.InvariantCulture)"
|
||||
disabled="@_pintandoElevacionesRuta"
|
||||
@onchange="@(e => CambiarUmbralColorSubidaRutaAsync(e, false))" />
|
||||
</label>
|
||||
|
||||
<label class="pendientes-config-modal__field">
|
||||
<span class="pendientes-config-modal__threshold-label">
|
||||
<span class="pendientes-config-modal__swatch pendientes-config-modal__swatch--fuerte" aria-hidden="true"></span>
|
||||
Subida Fuerte (%)
|
||||
</span>
|
||||
<input type="text"
|
||||
class="config-input"
|
||||
inputmode="decimal"
|
||||
value="@_umbralPendienteSubidaFuerteRuta.ToString("0.#", CultureInfo.InvariantCulture)"
|
||||
disabled="@_pintandoElevacionesRuta"
|
||||
@onchange="@(e => CambiarUmbralColorSubidaRutaAsync(e, true))" />
|
||||
</label>
|
||||
|
||||
<label class="pendientes-config-modal__field">
|
||||
<span>Umbral Bajada (%)</span>
|
||||
<input type="text"
|
||||
|
||||
@@ -318,12 +318,9 @@ public sealed class GeocodificadorLocalServicio : IGeocodificadorLocalServicio
|
||||
var textoBusqueda = string.Join(' ', new[]
|
||||
{
|
||||
etiqueta,
|
||||
subtitulo,
|
||||
nombre,
|
||||
calle,
|
||||
portal,
|
||||
edificio,
|
||||
municipio
|
||||
edificio
|
||||
}.Where(valor => !string.IsNullOrWhiteSpace(valor)));
|
||||
|
||||
entrada = new EntradaGeocodificada(
|
||||
@@ -554,6 +551,12 @@ public sealed class GeocodificadorLocalServicio : IGeocodificadorLocalServicio
|
||||
var sb = new StringBuilder(formD.Length);
|
||||
foreach (var ch in formD)
|
||||
{
|
||||
if (ch == marcadorEnye)
|
||||
{
|
||||
sb.Append(ch);
|
||||
continue;
|
||||
}
|
||||
|
||||
var uc = CharUnicodeInfo.GetUnicodeCategory(ch);
|
||||
if (uc == UnicodeCategory.NonSpacingMark)
|
||||
continue;
|
||||
|
||||
@@ -9,6 +9,8 @@ internal static class SimuladorHorariosTaxibus
|
||||
{
|
||||
private const string IdCalendario = "TAXIBUS_SIM_TODOS_LOS_DIAS";
|
||||
private const int FrecuenciaMinutos = 30;
|
||||
private const int MinutoPrimeraSalida = 7 * 60;
|
||||
private const int MinutoFinServicioExclusivo = 24 * 60;
|
||||
private const double VelocidadMetrosSegundo = 16_000.0 / 3_600.0;
|
||||
private const int SegundosMinimosEntreParadas = 30;
|
||||
|
||||
@@ -135,10 +137,12 @@ internal static class SimuladorHorariosTaxibus
|
||||
ICollection<FilaExpedicionCsv> expediciones,
|
||||
ICollection<FilaTiempoParadaCsv> tiemposParada)
|
||||
{
|
||||
var cantidadSalidas = 24 * 60 / FrecuenciaMinutos;
|
||||
for (var indiceSalida = 0; indiceSalida < cantidadSalidas; indiceSalida++)
|
||||
var indiceSalida = 0;
|
||||
for (var minutoInicio = MinutoPrimeraSalida;
|
||||
minutoInicio < MinutoFinServicioExclusivo;
|
||||
minutoInicio += FrecuenciaMinutos, indiceSalida++)
|
||||
{
|
||||
var segundosInicio = indiceSalida * FrecuenciaMinutos * 60;
|
||||
var segundosInicio = minutoInicio * 60;
|
||||
var horaInicio = HoraDesdeSegundos(segundosInicio);
|
||||
var idExpedicion =
|
||||
$"{TaxibusDbus.PrefijoExpedicionSimulada}{ruta.Id}_{indicePlantilla:00}_{indiceSalida:00}";
|
||||
|
||||
@@ -8,7 +8,7 @@ public static class TaxibusDbus
|
||||
public const string PrefijoExpedicionSimulada = "TAXIBUS_SIM_";
|
||||
public const string MensajeReserva = "Esta l\u00ednea requiere solicitud de reserva.";
|
||||
public const string MensajeHorarioSimulado =
|
||||
"Horario provisional simulado cada 30 min. Esta l\u00ednea requiere solicitud de reserva.";
|
||||
"Horario provisional simulado cada 30 min, de 07:00 a 00:00. Esta l\u00ednea requiere solicitud de reserva.";
|
||||
|
||||
public static bool EsLinea(string? codigo)
|
||||
{
|
||||
|
||||
@@ -2209,6 +2209,34 @@ html, body {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.pendientes-config-modal__threshold-label {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: .38rem;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.pendientes-config-modal__swatch {
|
||||
width: .68rem;
|
||||
height: .68rem;
|
||||
flex: 0 0 .68rem;
|
||||
border: 1px solid rgba(226, 232, 240, .7);
|
||||
border-radius: 2px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.pendientes-config-modal__swatch--suave {
|
||||
background: #d946ef;
|
||||
}
|
||||
|
||||
.pendientes-config-modal__swatch--media {
|
||||
background: #4c1d95;
|
||||
}
|
||||
|
||||
.pendientes-config-modal__swatch--fuerte {
|
||||
background: #000;
|
||||
}
|
||||
|
||||
.config-row-map-opacity {
|
||||
margin-top: .7rem !important;
|
||||
margin-bottom: 0;
|
||||
|
||||
Reference in New Issue
Block a user