using Mapsui; using Mapsui.Layers; using Mapsui.Nts; using Mapsui.Projections; using Mapsui.Styles; using NetTopologySuite.Geometries; using OperationControl.Mapas.Editing; using Brush = Mapsui.Styles.Brush; using Color = Mapsui.Styles.Color; using Font = Mapsui.Styles.Font; using Pen = Mapsui.Styles.Pen; namespace OperationControl.Mapas.Rendering { public sealed class MapaBordaGnssRenderService { public const string NomeCamada = "MapaBordaGnssEdicao"; public MemoryLayer CriarCamada( MapaEstadoRecorte estado) { if (estado == null) { throw new ArgumentNullException( nameof(estado) ); } return new MemoryLayer { Name = NomeCamada, Features = CriarFeatures( estado ) }; } public void AtualizarCamada( MemoryLayer camada, MapaEstadoRecorte estado) { if (camada == null) { throw new ArgumentNullException( nameof(camada) ); } if (estado == null) { throw new ArgumentNullException( nameof(estado) ); } camada.Features = CriarFeatures( estado ); } private static IEnumerable CriarFeatures( MapaEstadoRecorte estado) { var features = new List(); if ( estado.Tipo != MapaTipoRecorte.BordaGnss ) { return features; } /* * LINHA */ if ( estado.Pontos.Count >= 2 ) { Coordinate[] coordenadas = estado .Pontos .Select( ponto => { var mercator = SphericalMercator .FromLonLat( ponto.X, ponto.Y ); return new Coordinate( mercator.x, mercator.y ); } ) .ToArray(); var featureLinha = new GeometryFeature { Geometry = new LineString( coordenadas ) }; featureLinha["Tipo"] = "BordaGnss"; featureLinha.Styles.Add( new VectorStyle { Line = new Pen( new Color( 0, 210, 255, 255 ), 4 ) } ); features.Add( featureLinha ); } /* * PONTOS */ for ( int i = 0; i < estado.Pontos.Count; i++) { Coordinate ponto = estado.Pontos[i]; var mercator = SphericalMercator .FromLonLat( ponto.X, ponto.Y ); var feature = new PointFeature( mercator.x, mercator.y ); feature["Tipo"] = "PontoBordaGnss"; feature["Ordem"] = i + 1; feature["label"] = (i + 1).ToString(); feature.Styles.Add( new SymbolStyle { SymbolType = SymbolType.Ellipse, SymbolScale = 1.15, Fill = new Brush( new Color( 0, 210, 255, 255 ) ), Outline = new Pen( Color.White, 2 ) } ); feature.Styles.Add( new LabelStyle { LabelColumn = "label", ForeColor = Color.White, BackColor = null, HorizontalAlignment = LabelStyle .HorizontalAlignmentEnum .Center, VerticalAlignment = LabelStyle .VerticalAlignmentEnum .Center, Font = new Font { Size = 11 } } ); features.Add( feature ); } return features; } } }