88 lines
2.6 KiB
C#
88 lines
2.6 KiB
C#
using AgroBase.Models;
|
|
using NetTopologySuite.Geometries;
|
|
using System.Linq;
|
|
using static AgroBase.Models.Enums;
|
|
|
|
namespace OperationControl.Mapas.Models
|
|
{
|
|
public class MapaDocumento
|
|
{
|
|
public string Nome { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Arquivo que originou este documento.
|
|
/// Pode deixar de existir futuramente após edições/salvamento,
|
|
/// portanto não deve ser usado como fonte de verdade do mapa.
|
|
/// </summary>
|
|
public string? CaminhoOrigem { get; set; }
|
|
|
|
public MapaFormatoOrigem FormatoOrigem { get; set; }
|
|
= MapaFormatoOrigem.Desconhecido;
|
|
|
|
public TipoMapaOperacao Tipo { get; set; }
|
|
= TipoMapaOperacao.Indefinido;
|
|
|
|
/// <summary>
|
|
/// O documento interno trabalha sempre em WGS84.
|
|
/// </summary>
|
|
public int Srid => 4326;
|
|
|
|
public List<MapaRua> Ruas { get; set; } = new();
|
|
|
|
/// <summary>
|
|
/// Indica alteração posterior à importação.
|
|
/// No carregamento inicial sempre começa false.
|
|
/// </summary>
|
|
public bool Modificado { get; set; }
|
|
|
|
/// <summary>
|
|
/// Avisos que não impediram a importação.
|
|
///
|
|
/// Exemplos:
|
|
/// - SHP sem PRJ, mas já aparentemente em longitude/latitude;
|
|
/// - PRJ inválido ignorado com segurança;
|
|
/// - IDs ausentes/duplicados corrigidos.
|
|
/// </summary>
|
|
public List<string> AvisosImportacao { get; set; } = new();
|
|
|
|
public bool PossuiRuas =>
|
|
Ruas != null && Ruas.Count > 0;
|
|
|
|
public int QuantidadeRuas =>
|
|
Ruas?.Count ?? 0;
|
|
|
|
public double ComprimentoTotalMetros =>
|
|
Ruas?.Sum(x => x?.ComprimentoMetros ?? 0.0) ?? 0.0;
|
|
|
|
/// <summary>
|
|
/// Limite espacial do documento em WGS84.
|
|
/// Pode ser usado posteriormente pelo renderizador
|
|
/// para enquadrar o mapa.
|
|
/// </summary>
|
|
public Envelope Limites
|
|
{
|
|
get
|
|
{
|
|
var envelope = new Envelope();
|
|
|
|
if (Ruas == null)
|
|
return envelope;
|
|
|
|
foreach (var rua in Ruas)
|
|
{
|
|
if (rua?.Geometria == null ||
|
|
rua.Geometria.IsEmpty)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
envelope.ExpandToInclude(
|
|
rua.Geometria.EnvelopeInternal
|
|
);
|
|
}
|
|
|
|
return envelope;
|
|
}
|
|
}
|
|
}
|
|
} |