Files
RutasDBUS/RutasDBUS/Components/Pages/PlanificadorRutas.InspectorZ.cs
Pedro bb9a407c04 - Click del punto Z prevalece
- Añadida info del punto z anterior
      + Titulo cambiado
      + Direccion
      + Distancia andando
- Lugares reubicados en el modal del punto Z
- Añadida Configuracion completa al json del historial
- Modo por defecto añadido al switch de configuracion de historial
- Foco añadido a las versiones andando
2026-09-04 13:36:46 +02:00

123 lines
4.3 KiB
C#

using System.Globalization;
namespace RutasDBUS.Components.Pages;
public partial class PlanificadorRutas
{
private PuntoInspectorAnterior? _inspectorPuntoAnterior;
private sealed record PuntoInspectorAnterior(
double Latitud,
double Longitud,
double? ElevacionIdee,
double? ElevacionLocal5,
double? ElevacionLocal2,
double? ElevacionLocal1,
string Direccion,
double? DistanciaAndandoMetros,
bool CalculandoDatosAdicionales);
private double? ObtenerElevacionPuntoInspectorAnterior(PuntoInspectorAnterior punto)
=> UsarElevacionLocal1ParaCalculo
? punto.ElevacionLocal1
: UsarElevacionLocal2ParaCalculo
? punto.ElevacionLocal2
: UsarElevacionLocal5ParaCalculo
? punto.ElevacionLocal5
: punto.ElevacionIdee;
private double? ObtenerElevacionPuntoInspectorActual()
=> UsarElevacionLocal1ParaCalculo
? _inspectorElevLocal1
: UsarElevacionLocal2ParaCalculo
? _inspectorElevLocal2
: UsarElevacionLocal5ParaCalculo
? _inspectorElevLocal5
: _inspectorElevIdee;
private static string FormatearDistanciaPuntoInspector(double distanciaMetros)
=> distanciaMetros < 1000
? distanciaMetros.ToString("0.0", CultureInfo.InvariantCulture) + " m"
: (distanciaMetros / 1000.0).ToString("0.000", CultureInfo.InvariantCulture) + " km";
private static string FormatearAlturaPuntoInspector(double? altura)
=> altura is { } valor
? valor.ToString("0.00", CultureInfo.InvariantCulture) + " m"
: "-";
private static string FormatearDiferenciaAlturaPuntoInspector(
double? alturaActual,
double? alturaAnterior)
=> alturaActual is { } actual && alturaAnterior is { } anterior
? (actual - anterior).ToString("+0.00;-0.00;0.00", CultureInfo.InvariantCulture) + " m"
: "-";
private string ObtenerDireccionPuntoInspectorActual()
=> FormatearLugarCallejeroResumen(_inspectorLugaresCercanos.FirstOrDefault());
private async Task<string> ResolverDireccionPuntoInspectorAnteriorAsync(PuntoInspectorAnterior punto)
{
if (!string.IsNullOrWhiteSpace(punto.Direccion))
return punto.Direccion;
try
{
var cercano = await GeocodificadorLocal.BuscarMasCercanoAsync(
punto.Latitud,
punto.Longitud,
CancellationToken.None);
return FormatearLugarCallejeroResumen(cercano);
}
catch
{
return string.Empty;
}
}
private async Task CompletarDatosPuntoInspectorAnteriorAsync(
PuntoInspectorAnterior punto,
int versionInspector)
{
try
{
var tareaDireccion = ResolverDireccionPuntoInspectorAnteriorAsync(punto);
var tareaCaminata = WalkCached(
punto.Latitud,
punto.Longitud,
_inspectorLat,
_inspectorLon);
await Task.WhenAll(tareaDireccion, tareaCaminata);
if (versionInspector != _versionInspector || _inspectorPuntoAnterior is not { } puntoVigente ||
puntoVigente.Latitud != punto.Latitud || puntoVigente.Longitud != punto.Longitud)
{
return;
}
var caminata = await tareaCaminata;
_inspectorPuntoAnterior = puntoVigente with
{
Direccion = await tareaDireccion,
DistanciaAndandoMetros = caminata.line is not null && caminata.dist > 0
? caminata.dist
: null,
CalculandoDatosAdicionales = false
};
await InvokeAsync(StateHasChanged);
}
catch
{
if (versionInspector != _versionInspector || _inspectorPuntoAnterior is not { } puntoVigente ||
puntoVigente.Latitud != punto.Latitud || puntoVigente.Longitud != punto.Longitud)
{
return;
}
_inspectorPuntoAnterior = puntoVigente with { CalculandoDatosAdicionales = false };
await InvokeAsync(StateHasChanged);
}
}
}