From bd1526cdaf42bd41e9f268250caf694731563022 Mon Sep 17 00:00:00 2001 From: Diego Freitas Date: Sun, 20 Sep 2026 15:11:44 -0300 Subject: [PATCH] =?UTF-8?q?Pure=20pursuit=20agora=20=C3=A9=20filtrado=20em?= =?UTF-8?q?=20saindo=20rua,=20MPC=20simula=20os=20pr=C3=B3ximos=20candidat?= =?UTF-8?q?os=20de=20acordo=20com=20a=20posi=C3=A7=C3=A3o=20real=20do=20mo?= =?UTF-8?q?tor,=20libera=20a=20press=C3=A3o=20da=20linha=20ap=C3=B3s=20con?= =?UTF-8?q?cluir=20opera=C3=A7=C3=A3o,=20controle=20do=20agitador=20atrav?= =?UTF-8?q?=C3=A9s=20da=20base,=20sincroniza=C3=A7=C3=A3o=20dos=20parametr?= =?UTF-8?q?os=20da=20opera=C3=A7=C3=A3o=20na=20IHM=20atrav=C3=A9s=20da=20b?= =?UTF-8?q?ase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IHM/Operacao/ucOperacaoParametros.cs | 46 +- AgroBase/AgroBase/Forms/IHM/frmOperacao.cs | 36 +- .../Forms/Simuladores/frmSimulacaoMapaGPS.cs | 47 +- .../AgroBase/Models/Modules/AtuadorModel.cs | 182 +- .../Models/Modules/DirecionalModel.cs | 32 + .../Modules/MovimentacaoUnificadoModel.cs | 165 + .../Models/Operacoes/OperacaoModel.cs | 55 +- AgroBase/AgroBase/Models/Variaveis.cs | 1 + .../Operadores/HealthWorkerService.cs | 21 + .../manager_worker/modulos/direcional.py | 64 +- .../workers/manager_worker/modulos/mpc.py | 228 +- .../LineFeature_operacional.geojson | 30621 ++++++++++++++++ .../OAK/datasets/oak-fcc-3/_10_export_onnx.py | 6 +- .../oak-fcc-3/_1_weeds_pair_sorter.py | 825 +- .../oak-fcc-3/_2_apply_review_masks.py | 536 +- .../_4_recover_brutas_masks_domain.py | 1569 + Python/OAK/datasets/oak-fcc-3/_7_split.py | 2 + Python/OAK/datasets/oak-fcc-3/config.json | 2 +- 18 files changed, 34018 insertions(+), 420 deletions(-) create mode 100644 Mapas/Empyreo_Novo/LineFeature_operacional.geojson create mode 100644 Python/OAK/datasets/oak-fcc-3/_4_recover_brutas_masks_domain.py diff --git a/AgroBase/AgroBase/Forms/IHM/Operacao/ucOperacaoParametros.cs b/AgroBase/AgroBase/Forms/IHM/Operacao/ucOperacaoParametros.cs index 18bb0734d..12cb609ac 100644 --- a/AgroBase/AgroBase/Forms/IHM/Operacao/ucOperacaoParametros.cs +++ b/AgroBase/AgroBase/Forms/IHM/Operacao/ucOperacaoParametros.cs @@ -23,6 +23,9 @@ namespace AgroBase.Forms.IHM.Operacao private readonly ucParametrosMapa _ucMapa; private OperacaoModel operacaoParametrizando; + private OperacaoModel _operacaoFonteCarregada; + private OperacaoParametrosModel _parametrosFonteCarregados; + private OperacaoParametrosControleModel _controleFonteCarregado; public ucOperacaoParametros() { @@ -135,6 +138,11 @@ namespace AgroBase.Forms.IHM.Operacao private void DefinirOperacaoParametrizando(OperacaoModel operacao, bool recarregarMapa = true) { operacaoParametrizando = operacao; + + _operacaoFonteCarregada = operacao; + _parametrosFonteCarregados = operacao?.Parametros; + _controleFonteCarregado = operacao?.Parametros?.Controle; + CarregarDadosGerais(); _ucMovimento.DefinirOperacao(operacaoParametrizando); _ucDirecional.DefinirOperacao(operacaoParametrizando); @@ -298,12 +306,46 @@ namespace AgroBase.Forms.IHM.Operacao } - public void AtualizarParametrosTela(OperacaoModel op) + public void AtualizarParametrosTela( + OperacaoModel op, + bool recarregarMapa = true) { - DefinirOperacaoParametrizando(op, true); + DefinirOperacaoParametrizando(op, recarregarMapa); } + + /// + /// Recarrega os controles somente quando a operação ou alguma das + /// instâncias autoritativas de parâmetros foi substituída. Isso cobre + /// a parametrização parcial recebida da base sem apagar uma edição + /// local que o operador esteja fazendo sobre a mesma instância. + /// + public void SincronizarComOperacaoAtualSeNecessario() + { + OperacaoModel atual = Variaveis.OperacaoEmAndamento; + + if (atual == null) + return; + + bool fonteAlterada = + !ReferenceEquals(_operacaoFonteCarregada, atual) || + !ReferenceEquals(_parametrosFonteCarregados, atual.Parametros) || + !ReferenceEquals( + _controleFonteCarregado, + atual.Parametros?.Controle + ); + + if (!fonteAlterada) + return; + + // Em atualização parcial a operação e o mapa continuam os mesmos. + // Recarregar o WebView aqui é desnecessário e pode perder estado + // visual; os demais controles devem refletir a nova autoridade. + DefinirOperacaoParametrizando(atual, recarregarMapa: false); + } + public void AtualizarDadosTela() { + SincronizarComOperacaoAtualSeNecessario(); operacaoParametrizando?.Mapa?.AtualizarInteratividadeMapaAsync(parametrizacao: true); } diff --git a/AgroBase/AgroBase/Forms/IHM/frmOperacao.cs b/AgroBase/AgroBase/Forms/IHM/frmOperacao.cs index 4dc39d65d..638d300fe 100644 --- a/AgroBase/AgroBase/Forms/IHM/frmOperacao.cs +++ b/AgroBase/AgroBase/Forms/IHM/frmOperacao.cs @@ -73,9 +73,40 @@ namespace AgroBase.Forms.IHM } } - public void AtualizarParametrosTela(OperacaoModel op) + public void AtualizarParametrosTela( + OperacaoModel op, + bool recarregarMapa = true) { - _ucParametros.AtualizarParametrosTela(op); + if (IsDisposed || Disposing) + return; + + // Se o formulário ainda não criou o handle, não force sua criação + // na thread MQTT. Ao abrir a aba, a sincronização por referência + // abaixo carregará a operação atual. + if (!IsHandleCreated) + return; + + if (InvokeRequired) + { + try + { + BeginInvoke(new Action( + AtualizarParametrosTela + ), op, recarregarMapa); + } + catch (InvalidOperationException) + { + // O formulário pode estar encerrando entre a verificação + // e o BeginInvoke. A próxima abertura sincroniza a fonte. + } + catch (ObjectDisposedException) + { + } + + return; + } + + _ucParametros.AtualizarParametrosTela(op, recarregarMapa); } @@ -124,6 +155,7 @@ namespace AgroBase.Forms.IHM break; case AbaOperacaoIHM.Parametros: lblContextoAba.Text = "Parâmetros da operação atual e configuração local"; + _ucParametros.SincronizarComOperacaoAtualSeNecessario(); ExibirConteudo(_ucParametros); break; default: diff --git a/AgroBase/AgroBase/Forms/Simuladores/frmSimulacaoMapaGPS.cs b/AgroBase/AgroBase/Forms/Simuladores/frmSimulacaoMapaGPS.cs index 4ace1aea8..20f3127e4 100644 --- a/AgroBase/AgroBase/Forms/Simuladores/frmSimulacaoMapaGPS.cs +++ b/AgroBase/AgroBase/Forms/Simuladores/frmSimulacaoMapaGPS.cs @@ -89,6 +89,12 @@ namespace AgroBase.Forms private double velocidadeCarroMs; private double _ultimoAnguloControleAplicado; + private double _ultimoAnguloControleAlvoAtrasado; + + // Modelo simples do atuador direcional: a fila existente representa o + // atraso de transporte; este limite representa o tempo físico de giro. + // Mantido no código para não exigir mudança no Designer nesta versão. + private double VelocidadeAngularDirecionalGrausSegundo => VariaveisEquipamento.VelocidadeAngularDirecionalGrausSegundo; private GPSModel posicaoAtual = new GPSModel(); // Mantida para compatibilidade e para os dados apresentados na tela. @@ -398,11 +404,26 @@ namespace AgroBase.Forms if (atualizarAnguloControle) { - anguloControle = CalcularAnguloControleAtrasado( + _ultimoAnguloControleAlvoAtrasado = CalcularAnguloControleAtrasado( Volatile.Read(ref _delayComandoPassos) ); } + // Diferente da versão anterior, o fim da fila vira um alvo e + // não um salto instantâneo. A pose usa somente o ângulo físico. + anguloControle = AtualizarAnguloControleFisico( + _ultimoAnguloControleAlvoAtrasado, + tempoPassadoSegundos + ); + + if (operacao.DispMvd?.Dados != null) + { + operacao.DispMvd.Dados.AnguloDirecionalSimuladoCanonico = + anguloControle; + operacao.DispMvd.Dados.MomentoAnguloDirecionalSimulado = + DateTime.UtcNow; + } + GPSModel gps = GPSService.GetSnapshot(); double anguloAtual = @@ -1614,7 +1635,10 @@ namespace AgroBase.Forms ); lock (_estadoSimulacaoLock) + { + _ultimoAnguloControleAlvoAtrasado = angulo; _ultimoAnguloControleAplicado = angulo; + } txtAnguloControle.Text = angulo.ToString("0.00"); } @@ -1638,9 +1662,26 @@ namespace AgroBase.Forms historicoAngulosControle.Dequeue(); } - _ultimoAnguloControleAplicado = - historicoAngulosControle.Peek(); + return historicoAngulosControle.Peek(); + } + } + private double AtualizarAnguloControleFisico( + double anguloAlvo, + double dtSegundos) + { + if (!ValorFinito(anguloAlvo)) + anguloAlvo = 0.0; + + double passoMaximo = + VelocidadeAngularDirecionalGrausSegundo * + Math.Max(0.0, dtSegundos); + + lock (_estadoSimulacaoLock) + { + double erro = anguloAlvo - _ultimoAnguloControleAplicado; + double passo = Math.Max(-passoMaximo, Math.Min(passoMaximo, erro)); + _ultimoAnguloControleAplicado += passo; return _ultimoAnguloControleAplicado; } } diff --git a/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs b/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs index 239b4bf97..f0dd047c1 100644 --- a/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs +++ b/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs @@ -32,9 +32,11 @@ namespace AgroBase.Models.Modules private DateTime _ultimaDescobertaEnviada = DateTime.MinValue; private readonly object _estadoLock = new object(); private readonly SemaphoreSlim _calibragemGate = new SemaphoreSlim(1, 1); + private readonly SemaphoreSlim _alivioPressaoGate = new SemaphoreSlim(1, 1); private readonly object _calibragemCtsLock = new object(); private CancellationTokenSource _calibragemCts; private bool _sincronizacaoSeguraPendente; + private volatile bool _alivioPressaoLinhaEmAndamento; [JsonIgnore] internal object EstadoSyncRoot => _estadoLock; @@ -1817,6 +1819,15 @@ namespace AgroBase.Models.Modules if (op?.DispAtu?.Dados?.Conectado != true) return; + /* + * Durante o alívio de pressão, a sequência explícita abaixo é a + * única dona das saídas do atuador. Sem esta barreira, o ciclo de + * segurança da finalização fecharia os bicos antes de completar + * a janela de despressurização. + */ + if (_alivioPressaoLinhaEmAndamento) + return; + bool operacaoConcluida = op.Sensoriamento?.Operacao?.StatusOperacaoAtual == StatusOperacao.Concluido; bool pulverizadorAutomatico = op.Parametros?.Controle?.PulverizadorAutomatico ?? false; @@ -1898,6 +1909,10 @@ namespace AgroBase.Models.Modules foreach (var bomba in BombasPressurizadoras.Where(x => x != null && x.Inicializado)) { bool ehBombaPrincipal = bomba.ID == BombaPressurizadora?.ID; + bool ehAgitador = bomba.ID == AgitadorDeCalda?.ID; + bool agitadorManual = + ehAgitador && + op.Parametros?.Controle?.AtuAgitadorModo == ModoAgitadorCalda.Manual; bool comandoSolicitado = bomba.Comandar && bomba.ComandoAtuar; @@ -1914,6 +1929,21 @@ namespace AgroBase.Models.Modules { statusDesejado = comandoSolicitado && atuacaoPermitida; } + /* + * O agitador em Manual pode ser ligado pela base antes do + * início da operação para preparar a calda. Continuam valendo + * os bloqueios absolutos de emergência, finalização e operação + * concluída; somente a exigência OperacaoIniciada/Pausa deixa + * de se aplicar neste modo explícito do operador. + */ + else if (agitadorManual) + { + statusDesejado = + comandoSolicitado && + !op.Sensoriamento.Operacao.Finalizando && + !op.Sensoriamento.Operacao.Emergencia && + !operacaoConcluida; + } /* * Fora da calibração, a bomba principal automática * deve permanecer ligada enquanto a operação estiver @@ -2070,7 +2100,10 @@ namespace AgroBase.Models.Modules return false; } - private bool PodeEnviarComandoFisico(bool statusLigado, string componente) + private bool PodeEnviarComandoFisico( + bool statusLigado, + string componente, + bool permitirDuranteFinalizacao = false) { var dados = Variaveis.OperacaoEmAndamento?.DispAtu?.Dados; @@ -2084,6 +2117,24 @@ namespace AgroBase.Models.Modules if (!BloqueioAbsolutoAtuacao(out string motivo)) return true; + /* + * Exceção estreita, usada exclusivamente pela rotina de alívio: + * permite abrir bicos com a bomba já desligada enquanto a operação + * está em Finalizando. Emergência, aplicação encerrando e operação + * concluída continuam bloqueando o comando. + */ + var operacao = Variaveis.OperacaoEmAndamento?.Sensoriamento?.Operacao; + + if (permitirDuranteFinalizacao && + _alivioPressaoLinhaEmAndamento && + operacao?.Finalizando == true && + operacao.Emergencia != true && + operacao.StatusOperacaoAtual != StatusOperacao.Concluido && + !Variaveis.Fechando) + { + return true; + } + Variaveis.MostrarLog($"[ATU/SEGURANCA] Comando ON bloqueado para {componente}: {motivo}"); return false; } @@ -2108,12 +2159,13 @@ namespace AgroBase.Models.Modules CanMessagePosicaoDados dado, bool setarControle, bool status, - double? angulo = null + double? angulo = null, + bool permitirDuranteFinalizacao = false ) { var dispAtu = Variaveis.OperacaoEmAndamento?.DispAtu; - if (bico == null || !PodeEnviarComandoFisico(status, bico.ID)) + if (bico == null || !PodeEnviarComandoFisico(status, bico.ID, permitirDuranteFinalizacao)) return; bool comandoControle = bico.ComandoAtuar; @@ -2228,6 +2280,130 @@ namespace AgroBase.Models.Modules } } + /// + /// Desliga as bombas, abre todos os bicos comandáveis por uma janela + /// curta para aliviar a pressão residual da linha e volta tudo ao + /// estado seguro. Deve ser chamada depois de marcar a operação como + /// Finalizando, para impedir que qualquer automação religue a bomba. + /// + public async Task AliviarPressaoLinhaAsync(int tempoAlivioMs = 1000) + { + tempoAlivioMs = Math.Max(0, tempoAlivioMs); + + await _alivioPressaoGate.WaitAsync().ConfigureAwait(false); + + try + { + var op = Variaveis.OperacaoEmAndamento; + + if (op?.Sensoriamento?.Operacao?.Finalizando != true) + { + Variaveis.MostrarLog("[ATU/ALIVIO] Ignorado: operação não está finalizando."); + return; + } + + if (!Conectado) + { + Variaveis.MostrarLog("[ATU/ALIVIO] Ignorado: atuador desconectado."); + return; + } + + if (op.Sensoriamento.Operacao.Emergencia || Variaveis.Fechando) + { + Variaveis.MostrarLog("[ATU/ALIVIO] Ignorado por bloqueio de segurança."); + return; + } + + var bicos = (BicosPulverizadores ?? new List()) + .Where(x => x != null && x.Inicializado && x.Comandar) + .ToList(); + + _alivioPressaoLinhaEmAndamento = true; + + Variaveis.MostrarLog( + $"[ATU/ALIVIO] Iniciando: bombas OFF, {bicos.Count} bico(s) aberto(s) por {tempoAlivioMs} ms." + ); + + /* A bomba precisa estar desligada antes de qualquer bico abrir. */ + foreach (var bomba in BombasPressurizadoras ?? new List()) + { + if (bomba?.Inicializado != true) + continue; + + double pressaoOff = bomba.Sensor_ID_Num > -1 ? 0 : -1; + + EnviarComandoFisicoBomba( + bomba, + CanMessagePosicaoDados.Command1, + setarControle: true, + status: false, + potencia: 0, + pressao: pressaoOff + ); + } + + foreach (var bico in bicos) + { + EnviarComandoFisicoBico( + bico, + CanMessagePosicaoDados.Command1, + setarControle: true, + status: true, + angulo: bico.AnguloAbertura, + permitirDuranteFinalizacao: true + ); + } + + if (tempoAlivioMs > 0) + await Task.Delay(tempoAlivioMs).ConfigureAwait(false); + } + catch (Exception ex) + { + Variaveis.MostrarLog("[ATU/ALIVIO] Falha durante o alívio: " + ex.Message); + } + finally + { + /* + * O fechamento é obrigatório inclusive se ocorrer exceção ou + * cancelamento no meio da janela. + */ + foreach (var bico in BicosPulverizadores ?? new List()) + { + if (bico?.Inicializado == true) + { + EnviarComandoFisicoBico( + bico, + CanMessagePosicaoDados.Command1, + setarControle: true, + status: false, + angulo: bico.AnguloNeutro + ); + } + } + + foreach (var bomba in BombasPressurizadoras ?? new List()) + { + if (bomba?.Inicializado == true) + { + double pressaoOff = bomba.Sensor_ID_Num > -1 ? 0 : -1; + + EnviarComandoFisicoBomba( + bomba, + CanMessagePosicaoDados.Command1, + setarControle: true, + status: false, + potencia: 0, + pressao: pressaoOff + ); + } + } + + _alivioPressaoLinhaEmAndamento = false; + _alivioPressaoGate.Release(); + Variaveis.MostrarLog("[ATU/ALIVIO] Concluído: bicos e bombas em OFF."); + } + } + private void AtualizaComponentesIniciados() diff --git a/AgroBase/AgroBase/Models/Modules/DirecionalModel.cs b/AgroBase/AgroBase/Models/Modules/DirecionalModel.cs index 0c726acb7..b2994b508 100644 --- a/AgroBase/AgroBase/Models/Modules/DirecionalModel.cs +++ b/AgroBase/AgroBase/Models/Modules/DirecionalModel.cs @@ -313,6 +313,38 @@ namespace AgroBase.Models.Modules public Dictionary ConfigSentidos { get; set; } public List Funcoes { get; set; } + /// + /// Converte o sinal local do módulo (que depende do lado e da montagem + /// do motor) para a convenção única usada pelo controle: + /// positivo = curva/yaw para a direita; negativo = para a esquerda. + /// + /// A conversão usa a própria configuração que gera os comandos, evitando + /// duplicar uma tabela de sinais que poderia divergir da atuação real. + /// + public double AnguloCanonicoControle( + TipoMovimentoDirecional tipoMovimento, + double anguloLocal) + { + if (double.IsNaN(anguloLocal) || double.IsInfinity(anguloLocal)) + return 0.0; + + ConfiguracaoSentidoMotor config; + if (ConfigSentidos == null || + !ConfigSentidos.TryGetValue(tipoMovimento, out config)) + { + return anguloLocal; + } + + // O sentido configurado para Direita define qual sinal local + // corresponde ao comando canônico positivo. + double fator = + config.Direita == Sentido.Horario ? 1.0 : + config.Direita == Sentido.Antihorario ? -1.0 : + 0.0; + + return fator == 0.0 ? 0.0 : anguloLocal * fator; + } + public static DirecionalModel CarregarParametrosIniciais(string Mod_ID, byte _EnderecoTx, byte _EnderecoRx) { diff --git a/AgroBase/AgroBase/Models/Modules/MovimentacaoUnificadoModel.cs b/AgroBase/AgroBase/Models/Modules/MovimentacaoUnificadoModel.cs index 924243a70..2dc88a27f 100644 --- a/AgroBase/AgroBase/Models/Modules/MovimentacaoUnificadoModel.cs +++ b/AgroBase/AgroBase/Models/Modules/MovimentacaoUnificadoModel.cs @@ -51,8 +51,173 @@ namespace AgroBase.Models.Modules private readonly SemaphoreSlim _gateMovimentoCombinado = new SemaphoreSlim(1, 1); private CancellationTokenSource _ctsMovimentoCombinado; + // Estado físico separado do comando no simulador. No rover real o + // estado é obtido diretamente de AnguloLeitura dos módulos. + public double AnguloDirecionalSimuladoCanonico { get; set; } = 0.0; + public DateTime MomentoAnguloDirecionalSimulado { get; set; } = DateTime.MinValue; + + public class EstadoDirecionalCanonico + { + public TipoMovimentoDirecional TipoMovimento { get; set; } + public double AnguloComando { get; set; } + public double AnguloSP { get; set; } + public double AnguloFisico { get; set; } + public double Dispersao { get; set; } + public int RodasValidas { get; set; } + public bool Valido { get; set; } + public bool EmTransicao { get; set; } + public long TimestampUnixMs { get; set; } + } + public List Modulos { get; set; } = new List(); + + /// + /// Consolida as quatro direções em um estado canônico para o MPC. + /// Somente os eixos ativos no modo atual participam. A mediana torna o + /// valor resistente a uma leitura isolada e a dispersão expõe desacordo. + /// + public EstadoDirecionalCanonico ObterEstadoDirecionalCanonico( + TipoMovimentoDirecional tipoMovimento, + double anguloComando, + bool simulando) + { + var agora = DateTime.UtcNow; + var leituras = new List(); + var setpoints = new List(); + DateTime momentoLeituraMaisRecente = DateTime.MinValue; + + foreach (var modulo in Modulos ?? new List()) + { + if (modulo?.DirMotor == null || + !ModuloAtivoNoTipo(modulo.Modulo_ID, tipoMovimento)) + continue; + + var dir = modulo.DirMotor; + if (!simulando && !dir.Inicializado) + continue; + + if (!simulando) + { + DateTime momentoLeitura = + dir.Leitura?.UltimoComandoRecebido ?? DateTime.MinValue; + if (momentoLeitura == DateTime.MinValue || + DateTime.Now - momentoLeitura > TimeSpan.FromSeconds(2)) + continue; + if (momentoLeitura > momentoLeituraMaisRecente) + momentoLeituraMaisRecente = momentoLeitura; + } + + double leitura = dir.AnguloCanonicoControle( + tipoMovimento, + dir.AnguloLeitura + ); + double sp = dir.AnguloCanonicoControle( + tipoMovimento, + dir.AnguloSPAtual + ); + + if (!double.IsNaN(leitura) && !double.IsInfinity(leitura)) + leituras.Add(leitura); + if (!double.IsNaN(sp) && !double.IsInfinity(sp)) + setpoints.Add(sp); + } + + double anguloFisico; + if (simulando && MomentoAnguloDirecionalSimulado != DateTime.MinValue) + { + anguloFisico = AnguloDirecionalSimuladoCanonico; + } + else + { + anguloFisico = Mediana(leituras); + } + + double anguloSP = setpoints.Count > 0 + ? Mediana(setpoints) + : anguloComando; + + double dispersao = leituras.Count > 0 + ? leituras.Max(x => Math.Abs(x - Mediana(leituras))) + : 0.0; + + int rodasValidas = simulando ? QuantidadeRodasAtivas(tipoMovimento) : leituras.Count; + bool valido = simulando + ? MomentoAnguloDirecionalSimulado != DateTime.MinValue + : rodasValidas >= QuantidadeMinimaRodasValidas(tipoMovimento) && dispersao <= 8.0; + + return new EstadoDirecionalCanonico + { + TipoMovimento = tipoMovimento, + AnguloComando = anguloComando, + AnguloSP = anguloSP, + AnguloFisico = anguloFisico, + Dispersao = dispersao, + RodasValidas = rodasValidas, + Valido = valido, + EmTransicao = Math.Abs(anguloSP - anguloFisico) > 1.0, + TimestampUnixMs = simulando + ? new DateTimeOffset( + MomentoAnguloDirecionalSimulado == DateTime.MinValue + ? agora + : MomentoAnguloDirecionalSimulado + ).ToUnixTimeMilliseconds() + : (momentoLeituraMaisRecente == DateTime.MinValue + ? 0 + : new DateTimeOffset(momentoLeituraMaisRecente) + .ToUnixTimeMilliseconds()) + }; + } + + private static bool ModuloAtivoNoTipo( + string moduloId, + TipoMovimentoDirecional tipo) + { + bool dianteiro = (moduloId ?? "").EndsWith("F", StringComparison.OrdinalIgnoreCase); + bool traseiro = (moduloId ?? "").EndsWith("T", StringComparison.OrdinalIgnoreCase); + + switch (tipo) + { + case TipoMovimentoDirecional.RodasDianteiras: + return dianteiro; + case TipoMovimentoDirecional.RodasTraseiras: + return traseiro; + case TipoMovimentoDirecional.MovimentoArco: + case TipoMovimentoDirecional.MovimentoDiagonal: + case TipoMovimentoDirecional.MovimentoLateral: + case TipoMovimentoDirecional.RotacionarNoEixo: + return dianteiro || traseiro; + default: + return dianteiro; + } + } + + private static int QuantidadeRodasAtivas(TipoMovimentoDirecional tipo) + { + return tipo == TipoMovimentoDirecional.RodasDianteiras || + tipo == TipoMovimentoDirecional.RodasTraseiras ? 2 : 4; + } + + private static int QuantidadeMinimaRodasValidas(TipoMovimentoDirecional tipo) + { + return QuantidadeRodasAtivas(tipo) == 2 ? 1 : 2; + } + + private static double Mediana(IEnumerable valores) + { + var ordenados = (valores ?? Enumerable.Empty()) + .Where(x => !double.IsNaN(x) && !double.IsInfinity(x)) + .OrderBy(x => x) + .ToList(); + + if (ordenados.Count == 0) + return 0.0; + + int meio = ordenados.Count / 2; + return ordenados.Count % 2 == 1 + ? ordenados[meio] + : (ordenados[meio - 1] + ordenados[meio]) / 2.0; + } public (bool, List) StatusModulosMOV(Direcao Lado) { diff --git a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs index 1eb779f2d..b638ddbfb 100644 --- a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs +++ b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs @@ -1451,6 +1451,14 @@ namespace AgroBase.Models op.Sensoriamento.Operacao.Finalizando = true; + /* + * Com a operação já bloqueada para novas atuações automáticas, + * desliga as bombas e abre os bicos por 1 s para aliviar a pressão + * residual da linha. A própria rotina garante o fechamento final. + */ + await (op.DispAtu?.Dados?.AliviarPressaoLinhaAsync(1000) + ?? Task.CompletedTask).ConfigureAwait(false); + op.Trajetoria?.LoopAtualizaDados(); await Task.Delay(2000); @@ -2664,6 +2672,16 @@ namespace AgroBase.Models op?.DispAtu?.Dados?.PrepararAtuadorParaOperacao(); HealthWorkerService.AtualizarDadosOperacao(true); + + /* + * A atualização parcial substitui principalmente a instância de + * Parametros.Controle. Os controles da IHM mantinham a referência + * visual anterior e podiam regravar valores antigos ao alterar um + * único campo. Recarrega a tela na thread da própria IHM, sem + * reconstruir o mapa da operação em andamento. + */ + frmInstancial.frmIHM?._frmOperacao? + .AtualizarParametrosTela(op, recarregarMapa: false); } private void ExecutarLiberacaoHumanaAutonomia(OperacaoComandoBaseModel controleBase, OperacaoModel op) @@ -2943,6 +2961,12 @@ namespace AgroBase.Models case S_Code.sBMB: var bomba = dadosAtu.BombasPressurizadoras?.FirstOrDefault(x => x.ID == controleBase._comp_id); + if (bomba == null) + { + Variaveis.MostrarLog("[ComandoBase] Bomba ATU não encontrada: " + controleBase._comp_id); + return; + } + switch (controleBase.Controle.Comando) { case CanMessagePosicaoDados.Command2: @@ -2960,8 +2984,31 @@ namespace AgroBase.Models bool ligarBomba = controleBase.Controle.Estado == true; - if (bomba.ID == dadosAtu?.AgitadorDeCalda?.ID) - op.Parametros.Controle.AtuAgitadorModo = ligarBomba ? ModoAgitadorCalda.Manual : ModoAgitadorCalda.SemAgitacao; + bool ehAgitador = bomba.ID == dadosAtu?.AgitadorDeCalda?.ID; + + if (ehAgitador && op.Parametros?.Controle != null) + { + /* + * O comando direto da base assume a fonte de verdade do + * agitador. Manual impede o controle automático de + * sobrescrever o ON; SemAgitacao mantém o OFF até uma + * nova parametrização da operação. + */ + op.Parametros.Controle.AtuAgitadorModo = ligarBomba + ? ModoAgitadorCalda.Manual + : ModoAgitadorCalda.SemAgitacao; + + bomba.ComandoAtuar = ligarBomba; + bomba.PotenciaSP = ligarBomba + ? FuncoesMatematicas.Clamp(controleBase.Controle.Potencia ?? bomba.PotenciaSP, 0, 100) + : 0; + bomba.PressaoSP = -1; + + Variaveis.MostrarLog( + $"[ComandoBase][Agitador] Estado={(ligarBomba ? "ON" : "OFF")}, " + + $"Modo={op.Parametros.Controle.AtuAgitadorModo}, Potencia={bomba.PotenciaSP:0.##}%" + ); + } dadosAtu?.EnviarComandoFisicoBomba( bomba, @@ -2970,7 +3017,9 @@ namespace AgroBase.Models status: ligarBomba, potencia: controleBase.Controle.Potencia, pressao: controleBase.Controle.Pressao, - modo: op.Parametros.Controle.AtuModoControle + modo: ehAgitador + ? bomba.Controle.Modo + : op.Parametros?.Controle?.AtuModoControle ); return; } diff --git a/AgroBase/AgroBase/Models/Variaveis.cs b/AgroBase/AgroBase/Models/Variaveis.cs index 175e184ad..6a35219b3 100644 --- a/AgroBase/AgroBase/Models/Variaveis.cs +++ b/AgroBase/AgroBase/Models/Variaveis.cs @@ -1021,6 +1021,7 @@ namespace AgroBase.Models public static double DistanciaEntreEixosCm { get; } = 92.0; public static double BitolaRodasCm { get; } = 75.0; public static double KuDirecional { get; } = 2.65; + public static double VelocidadeAngularDirecionalGrausSegundo { get; } = 50.0; public static double LeverArmFrontalCm { get; set; } = 37.0; // cm public static double LeverArmLateralCm { get; set; } = 0.0; // cm public static double LarguraEquipamentoMm diff --git a/AgroBase/AgroBase/Services/Operadores/HealthWorkerService.cs b/AgroBase/AgroBase/Services/Operadores/HealthWorkerService.cs index 58e289225..973e5aaa1 100644 --- a/AgroBase/AgroBase/Services/Operadores/HealthWorkerService.cs +++ b/AgroBase/AgroBase/Services/Operadores/HealthWorkerService.cs @@ -193,6 +193,13 @@ namespace AgroBase.Services.Operadores bool carroEmMovimento = comandoMovimentoAtivo && velocidadeFisicaAtiva; + var estadoDirecional = op.DispMvd?.Dados? + .ObterEstadoDirecionalCanonico( + op.Controle.TipoMovimento, + op.Controle.Angulo, + op.Simulando + ); + var bombaLinha = op?.DispAtu?.Dados?.BombaPressurizadora; double pressaoAlvo = bombaLinha?._PressaoSPControle > 0 ? bombaLinha._PressaoSPControle : op.Parametros?.Controle?.AtuPressaoLinha ?? 0; double pressaoLinha = bombaLinha?._PressaoAtual ?? _Sensoriamento?.Atuador?.PressaoLinha ?? 0; @@ -252,6 +259,19 @@ namespace AgroBase.Services.Operadores percentual_bateria = _Sensoriamento.Bateria?.PercentualBateria ?? 0, } ), + ("Direcional", estadoDirecional != null ? new + { + tipo_movimento = (int)estadoDirecional.TipoMovimento, + angulo_comando = estadoDirecional.AnguloComando, + angulo_sp = estadoDirecional.AnguloSP, + angulo_fisico = estadoDirecional.AnguloFisico, + dispersao = estadoDirecional.Dispersao, + rodas_validas = estadoDirecional.RodasValidas, + valido = estadoDirecional.Valido, + em_transicao = estadoDirecional.EmTransicao, + timestamp_unix_ms = estadoDirecional.TimestampUnixMs, + } : null + ), ("Atuador", new { pressao_linha_regular = pressaoLinhaRegular, @@ -427,6 +447,7 @@ namespace AgroBase.Services.Operadores tracking_row_hybrid_diagonal_enabled = true, entry_capture_enabled = false, tracking_axis_debug = false, + atuador_dir_taxa_graus_s = VariaveisEquipamento.VelocidadeAngularDirecionalGrausSegundo } } ), diff --git a/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/manager_worker/modulos/direcional.py b/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/manager_worker/modulos/direcional.py index ef81e9b3a..657420ab1 100644 --- a/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/manager_worker/modulos/direcional.py +++ b/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/manager_worker/modulos/direcional.py @@ -143,7 +143,7 @@ def _comando_mapa_gps_mpc(contexto: dict): parada_necessaria=True, ) - comando_anterior = _ler_comando_anterior_para_mpc() + comando_anterior = _ler_comando_anterior_para_mpc(contexto) inicio = time.perf_counter() comando = mpc.compute_receding(contexto, comando_anterior) @@ -461,6 +461,7 @@ def _comando_mapeamento_visual(contexto: dict): def _montar_contexto_direcional(*, operacao, controle, contexto_global, equipamento): trajetoria = _dict(contexto_global.get("Trajetoria", {})) gerais = _dict(contexto_global.get("Gerais", {})) + direcional_fisico = _dict(contexto_global.get("Direcional", {})) gps_info = _montar_contexto_gps(operacao) imu_contexto = _montar_contexto_imu_direcional(_dict(ContextoGlobalRedis.get_modulo(T_Code.Imu))) @@ -513,6 +514,38 @@ def _montar_contexto_direcional(*, operacao, controle, contexto_global, equipame 1, ), }, + "Direcional": { + "TipoMovimento": _int( + direcional_fisico.get( + "tipo_movimento", + controle.get( + "tipo_movimento_direcional", + TipoMovimentoDirecional.RodasDianteiras.value, + ), + ), + TipoMovimentoDirecional.RodasDianteiras.value, + ), + "AnguloComando": _float( + direcional_fisico.get("angulo_comando", controle.get("angulo_sp", 0.0)), + 0.0, + ), + "AnguloSP": _float( + direcional_fisico.get("angulo_sp", controle.get("angulo_sp", 0.0)), + 0.0, + ), + "AnguloFisico": _float( + direcional_fisico.get("angulo_fisico", controle.get("angulo_sp_ant", 0.0)), + 0.0, + ), + "Dispersao": _float(direcional_fisico.get("dispersao", 0.0), 0.0), + "RodasValidas": _int(direcional_fisico.get("rodas_validas", 0), 0), + "Valido": _bool(direcional_fisico.get("valido", False)), + "EmTransicao": _bool(direcional_fisico.get("em_transicao", False)), + "TimestampUnixMs": _float( + direcional_fisico.get("timestamp_unix_ms", 0.0), + 0.0, + ), + }, "VisualWorker": visual_worker, "IMU": imu_contexto, "Equipamento": { @@ -1125,10 +1158,16 @@ def _montar_comando_retorno(comando, latencia=-1.0): return comando -def _ler_comando_anterior_para_mpc(): +def _ler_comando_anterior_para_mpc(contexto=None): controle = _dict(ContextoGlobalRedis.get_controle()) + direcional = _dict(_dict(contexto).get("Direcional", {})) - return { + telemetria_valida = _bool(direcional.get("Valido", False)) + timestamp_ms = _float(direcional.get("TimestampUnixMs", 0.0), 0.0) + idade_ms = max(0.0, time.time() * 1000.0 - timestamp_ms) if timestamp_ms > 0 else 1e9 + telemetria_valida = telemetria_valida and idade_ms <= 1500.0 + + comando = { "angulo": _float( controle.get("angulo_sp_ant", controle.get("angulo_sp", 0.0)), 0.0, @@ -1148,6 +1187,25 @@ def _ler_comando_anterior_para_mpc(): ), } + comando["angulo_aplicado"] = ( + _float(direcional.get("AnguloFisico", comando["angulo"]), comando["angulo"]) + if telemetria_valida else comando["angulo"] + ) + comando["angulo_sp_aplicado"] = ( + _float(direcional.get("AnguloSP", comando["angulo"]), comando["angulo"]) + if telemetria_valida else comando["angulo"] + ) + comando["tipo_aplicado"] = ( + _normalizar_tipo_movimento(direcional.get("TipoMovimento", comando["tipo"])) + if telemetria_valida else comando["tipo"] + ) + comando["telemetria_direcional_valida"] = telemetria_valida + comando["telemetria_direcional_idade_ms"] = idade_ms + comando["telemetria_direcional_dispersao"] = _float( + direcional.get("Dispersao", 0.0), 0.0 + ) + return comando + # ============================================================ # Helpers de matriz diff --git a/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/manager_worker/modulos/mpc.py b/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/manager_worker/modulos/mpc.py index 2234ffd3b..00bf46847 100644 --- a/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/manager_worker/modulos/mpc.py +++ b/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/manager_worker/modulos/mpc.py @@ -450,6 +450,27 @@ class ControladorMPC: 1.0, min_value=0.25, max_value=2.0, ) + # V22 - amortecimento exclusivo do handoff antecipado em SaindoRua. + # + # Nesse estado o rover ja opera a 15% e ainda percorre o trecho reto + # antes da Dubins. O Pure Pursuit bruto pode alternar pequenos comandos + # de Arco quando a projecao/target cruza de um lado para o outro da + # centerline. Aplicamos filtro, rate-limit, deadband e passagem por zero + # SOMENTE nessa fase. Ao entrar em Manobrando, o PP continua bruto e + # preserva integralmente a autoridade angular validada em campo. + self._dubins_saida_filter_tau_s = _safe_float( + parametros_mpc.get("dubins_saida_filter_tau_s", 0.30), + 0.30, min_value=0.0, max_value=2.0, + ) + self._dubins_saida_rate_graus_s = _safe_float( + parametros_mpc.get("dubins_saida_rate_graus_s", 18.0), + 18.0, min_value=2.0, max_value=120.0, + ) + self._dubins_saida_deadband_graus = _safe_float( + parametros_mpc.get("dubins_saida_deadband_graus", 1.0), + 1.0, min_value=0.0, max_value=5.0, + ) + # V18 - handoff antecipado para o Pure Pursuit. # # SaindoRua ja nasce alguns metros antes da BordaSaida para reduzir a @@ -773,6 +794,12 @@ class ControladorMPC: parametros_mpc.get("cinematica_entre_eixos_m", 0.94), 0.94, min_value=0.20, max_value=4.0, ) + # Dinâmica física da direção. O valor comandado é o alvo; o estado + # usado na cinemática avança gradualmente a partir da telemetria real. + self._atuador_dir_taxa_graus_s = _safe_float( + parametros_mpc.get("atuador_dir_taxa_graus_s", 50.0), + 50.0, min_value=3.0, max_value=180.0, + ) # ------------------------------------------------------------------ # V14 - CURVE TRACK: yaw contínuo quando a própria rua está curvando @@ -1571,14 +1598,93 @@ class ControladorMPC: return False + def _estabilizar_pp_saindo_rua( + self, angulo_desejado_rad, comando_anterior, dt_controle + ): + """V22: amortece o PP apenas no trecho reto de SaindoRua. + + Regras de seguranca: + - limita a taxa angular por segundo; + - filtra o comando por primeira ordem; + - elimina ruido dentro da deadband; + - numa inversao real, passa deliberadamente por zero; + - nunca devolve comando no hemisferio oposto ao desejado. + + Manobrando nao chama esta funcao e continua recebendo o PP bruto. + """ + limite = math.radians(float(self.angulo_max_graus)) + desejado = float(np.clip(angulo_desejado_rad, -limite, limite)) + + anterior = math.radians(_safe_float( + _as_dict(comando_anterior).get("angulo", 0.0), + 0.0, + min_value=-self.angulo_max_graus, + max_value=self.angulo_max_graus, + )) + dt = _safe_float(dt_controle, 0.5, min_value=0.05, max_value=1.5) + dead = math.radians(float(self._dubins_saida_deadband_graus)) + + # Perto de zero, pequenas mudancas de lado da projecao nao devem + # movimentar as quatro rodas em Arco enquanto o rover ainda esta reto. + if abs(desejado) <= dead: + desejado = 0.0 + + inversao_significativa = bool( + abs(desejado) > dead + and abs(anterior) > dead + and (desejado * anterior) < 0.0 + ) + + if inversao_significativa: + filtrado = 0.0 + else: + tau = float(self._dubins_saida_filter_tau_s) + alpha = 1.0 if tau <= 1e-6 else dt / (tau + dt) + filtrado = anterior + alpha * (desejado - anterior) + + max_delta = math.radians( + float(self._dubins_saida_rate_graus_s) + ) * dt + filtrado = anterior + float(np.clip( + filtrado - anterior, + -max_delta, + max_delta, + )) + + if desejado == 0.0 and abs(filtrado) <= 2.0 * dead: + filtrado = 0.0 + + # Barreira final contra a manutencao de esterco no sentido antigo. + if ( + abs(desejado) > dead + and abs(filtrado) > dead + and (desejado * filtrado) < 0.0 + ): + filtrado = 0.0 + + return float(np.clip(filtrado, -limite, limite)) + def _comando_seguidor_dubins( self, contexto, comando_anterior, x, y, theta, velocidade, status_carro, idx_alvo_correcao, pos_lat, pos_lon, pos_theta, pos_latencia, ponto_alvo_real ): - angulo_rad, dbg = self._referencia_seguidor_dubins( + angulo_bruto_rad, dbg = self._referencia_seguidor_dubins( x, y, theta, idx_alvo_correcao, velocidade, contexto ) + pp_antecipado = _status_in( + status_carro, [StatusCarroMapa.SaindoRua] + ) + angulo_rad = ( + self._estabilizar_pp_saindo_rua( + angulo_bruto_rad, + comando_anterior, + self.tempo_execucao_local, + ) + if pp_antecipado + else float(angulo_bruto_rad) + ) + preview_xy = self._simular_preview_seguidor_dubins( x, y, theta, idx_alvo_correcao, velocidade, contexto, self.tempo_execucao_local, @@ -1620,7 +1726,7 @@ class ControladorMPC: "debug_seguidor_dubins": { "modo": ( "pure_pursuit_4ws_antecipado" - if _status_in(status_carro, [StatusCarroMapa.SaindoRua]) + if pp_antecipado else "pure_pursuit_4ws" ), "lookahead_m": float(dbg["lookahead_m"]), @@ -1628,7 +1734,9 @@ class ControladorMPC: "alpha_graus": float(math.degrees(dbg["alpha"])), "kappa_pp": float(dbg["kappa_pp"]), "kappa_cmd": float(dbg["kappa_cmd"]), - "comando_graus": float(math.degrees(dbg["delta_final"])), + "comando_bruto_graus": float(math.degrees(angulo_bruto_rad)), + "comando_graus": float(math.degrees(angulo_rad)), + "amortecimento_saida_ativo": bool(pp_antecipado), }, "candidatos_testados": 0, "motivos": [], @@ -2272,6 +2380,13 @@ class ControladorMPC: )["omega"] ) + def _avancar_atuador_direcional(self, angulo_atual, angulo_alvo, dt): + """Aplica limite de velocidade ao estado físico da direção (radianos).""" + atual = float(angulo_atual) + alvo = float(angulo_alvo) + passo_max = np.radians(self._atuador_dir_taxa_graus_s) * max(0.0, float(dt)) + return float(atual + np.clip(alvo - atual, -passo_max, passo_max)) + @staticmethod def _posicoes_eixos_tracking(x, y, theta, entre_eixos): """Retorna centros dos eixos dianteiro/traseiro a partir do centro. @@ -3921,6 +4036,9 @@ class ControladorMPC: self.dt = old_dt # --- integra por tempo, quebrando cada trecho em subpassos ~dt --- + angulo_estado = float( + u_hold.get('angulo_inicial', u_hold.get('angulo', 0.0)) + ) t_rem = latency_s for dur_s, u in cmd_seq: if t_rem <= 0.0: @@ -3935,7 +4053,18 @@ class ControladorMPC: for _ in range(n): if time_left_ms() <= 0.0: return x, y, theta, visitados - x, y, theta = aplicar_passo_dt(x, y, theta, u, dt_eff) + angulo_estado = self._avancar_atuador_direcional( + angulo_estado, + u.get('angulo', angulo_estado), + dt_eff, + ) + u_aplicado = dict(u) + u_aplicado['angulo'] = angulo_estado + # omega precisa acompanhar o ângulo físico, não o alvo antigo. + u_aplicado.pop('omega', None) + x, y, theta = aplicar_passo_dt( + x, y, theta, u_aplicado, dt_eff + ) idx_alvo = self._corrigir_pontos_visitados( x, y, @@ -4190,19 +4319,31 @@ class ControladorMPC: # -------------------- Correção por latência (vida real) -------------------- # Mantém correção com 'self.dt' e 'velocidade' REAIS u_hold = { - "tipo": comando_anterior.get("tipo"), - "angulo": np.radians(comando_anterior.get("angulo", 0.0)), + "tipo": comando_anterior.get( + "tipo_aplicado", comando_anterior.get("tipo") + ), + "angulo": np.radians( + comando_anterior.get( + "angulo_sp_aplicado", + comando_anterior.get("angulo", 0.0), + ) + ), + "angulo_inicial": np.radians( + comando_anterior.get( + "angulo_aplicado", + comando_anterior.get("angulo", 0.0), + ) + ), "v": velocidade, - "omega": self._calcular_omega_4ws( - velocidade, - np.radians(comando_anterior.get("angulo", 0.0)), - comando_anterior.get("tipo") - ) } cmd_seq = None + latencia_compensada_s = min( + pos_latencia + self.tempo_execucao_local, + LAT_MAX, + ) x, y, theta, self.visitados_execucao = self.corrigir_pose_por_latencia( x, y, theta, self.visitados_execucao, - latency_s=min(pos_latencia + self.tempo_execucao_local, LAT_MAX), + latency_s=latencia_compensada_s, dt=self.dt, nova_posicao_fn=self._nova_posicao, u_hold=u_hold, @@ -4210,6 +4351,19 @@ class ControladorMPC: time_left_ms=lambda: (deadline - now()) * 1000.0, calc_omega_fn=self._calcular_omega_4ws ) + + # A pose acima já foi trazida até o presente. O estado inicial do + # beam search precisa avançar pelo mesmo intervalo para não voltar + # ao ângulo físico antigo recebido junto com a posição GNSS. + angulo_aplicado_estimado = self._avancar_atuador_direcional( + u_hold["angulo_inicial"], + u_hold["angulo"], + latencia_compensada_s, + ) + comando_anterior = dict(comando_anterior) + comando_anterior["angulo_aplicado"] = float( + np.degrees(angulo_aplicado_estimado) + ) idx_alvo_correcao = self._corrigir_pontos_visitados( x, y, @@ -4407,6 +4561,12 @@ class ControladorMPC: "x": x, "y": y, "theta": theta, "custo": 0.0, "comandos": [(tipo_anterior, angulo_anterior)], + "angulo_atuador": np.radians( + comando_anterior.get( + "angulo_aplicado", + comando_anterior.get("angulo", 0.0), + ) + ), "trajetoria": [], "visitados": self.visitados_execucao, "inicial": True @@ -4433,6 +4593,10 @@ class ControladorMPC: cmd_anterior_local = { "tipo": candidato["comandos"][-1][0], "angulo": candidato["comandos"][-1][1], + "angulo_aplicado": candidato.get( + "angulo_atuador", + candidato["comandos"][-1][1], + ), } #look_ahead = passo > 2 and status_carro not in [StatusCarroMapa.Manobrando.value, StatusCarroMapa.Direcionando.value] @@ -4525,7 +4689,7 @@ class ControladorMPC: t_c_ini = now() try: # >>> CHANGED: passa dt_pred e v_sim para a simulação de um PASSO - custo, sim, valido, visitados_sim, _debug_custo = self._simular_passo( + custo, sim, valido, visitados_sim, _debug_custo, angulo_atuador_final = self._simular_passo( x_atual, y_atual, theta_atual, tipo_k, ang_k, custos_candidatos, @@ -4543,6 +4707,7 @@ class ControladorMPC: "x": x_f, "y": y_f, "theta": theta_f, "custo": candidato["custo"] + float(custo), "comandos": candidato["comandos"] + [(tipo_k, ang_k)], + "angulo_atuador": angulo_atuador_final, "trajetoria": candidato["trajetoria"] + sim, "visitados": visitados_sim, "inicial": False @@ -5789,6 +5954,9 @@ class ControladorMPC: simulacoes = [] prev_ang = float(comando_anterior.get("angulo", 0.0)) prev_tipo = comando_anterior.get("tipo", TipoMovimentoDirecional.RodasDianteiras.value) + angulo_atuador = float( + comando_anterior.get("angulo_aplicado", prev_ang) + ) pontos_visitados = visitados.copy() # chave para custo heurístico vindo do VisualWorker (por ângulo/tipo) @@ -5822,8 +5990,6 @@ class ControladorMPC: custo_visual_worker = 0.0 # omega e sub-stepping - omega_const = self._calcular_omega_4ws(v_planejado, angulo_testado, tipo) - #passos_local = max(1, int(getattr(self, "passos_horizonte_local", 1))) #dt_total = float(dt_pred) * passos_local #SUB_MAX = float(getattr(self, "_dt_sub_max", 0.15)) # ~150 ms por subpasso (ajuste teu comentário) @@ -5846,11 +6012,21 @@ class ControladorMPC: side_mem_local = 0 for n_sub in range(n_subs): + angulo_atuador = self._avancar_atuador_direcional( + angulo_atuador, + angulo_testado, + sub_dt, + ) + omega_aplicado = self._calcular_omega_4ws( + v_planejado, + angulo_atuador, + tipo, + ) # IMPORTANTE: _nova_posicao precisa aceitar dt opcional x_sim, y_sim, theta_sim = self._nova_posicao( x_sim, y_sim, theta_sim, - omega_const, v_planejado, # (omega, v, tipo, angulo) - tipo, angulo_testado, + omega_aplicado, v_planejado, + tipo, angulo_atuador, dt=sub_dt ) @@ -6004,7 +6180,7 @@ class ControladorMPC: #print( # f"ang:{np.degrees(angulo_testado):.2f} " - # f"tipo:{tipo.name} omg:{omega_const:.3f} " + # f"tipo:{tipo.name} omg:{omega_aplicado:.3f} " # f"xsim:{finais[0]:.5f} ysim:{finais[1]:.5f} tsim:{finais[2]:.5f} " # f"xalv:{finais[3]:.5f} yalv:{finais[4]:.5f} " # f"epos:{somas[5]:.4f} eposn:{somas[6]:.4f} " @@ -6021,7 +6197,7 @@ class ControladorMPC: debug_custo = { "angulo": np.degrees(angulo_testado), "tipo": tipo.value, - "omega": omega_const, + "omega": omega_aplicado, "x_sim": finais[0], "y_sim": finais[1], "theta_sim": finais[2], @@ -6057,11 +6233,21 @@ class ControladorMPC: } #print(custo_visual_worker) - return float(custo_total), simulacoes, True, pontos_visitados, debug_custo + debug_custo["atuador_direcional"] = { + "angulo_inicial_deg": float(np.degrees( + comando_anterior.get("angulo_aplicado", prev_ang) + )), + "angulo_alvo_deg": float(np.degrees(angulo_testado)), + "angulo_final_deg": float(np.degrees(angulo_atuador)), + "taxa_graus_s": float(self._atuador_dir_taxa_graus_s), + } + return float(custo_total), simulacoes, True, pontos_visitados, debug_custo, angulo_atuador except Exception as e: mostrar_log(f"Erro ao simular passo para {tipo.name} | angulo: {np.degrees(angulo_testado):.2f}: {e}") - return float('inf'), [(0.0, 0.0, 0.0)], False, visitados + return float('inf'), [(0.0, 0.0, 0.0)], False, visitados, {}, float( + comando_anterior.get("angulo_aplicado", comando_anterior.get("angulo", 0.0)) + ) def _nova_posicao(self, x, y, theta, omega, velocidade, tipo, angulo_rad, dt=None): """V16: integra UM passo com a cinemática 4WS unificada. diff --git a/Mapas/Empyreo_Novo/LineFeature_operacional.geojson b/Mapas/Empyreo_Novo/LineFeature_operacional.geojson new file mode 100644 index 000000000..d85586781 --- /dev/null +++ b/Mapas/Empyreo_Novo/LineFeature_operacional.geojson @@ -0,0 +1,30621 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "Id": "1", + "Name": "Curvas", + "Length": 190.61237200956413, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "1", + "type": "LineString", + "coordinates": [ + [ + -47.38272396382754, + -22.22264660911407 + ], + [ + -47.382800723403584, + -22.22264783282561 + ], + [ + -47.382874407715136, + -22.222649714409375 + ], + [ + -47.38292433519585, + -22.222650078926023 + ], + [ + -47.3829759379427, + -22.22264889203026 + ], + [ + -47.38302864610719, + -22.222646417581153 + ], + [ + -47.383080571948575, + -22.22264371928542 + ], + [ + -47.3831331571162, + -22.22264108837022 + ], + [ + -47.38318677358014, + -22.2226381872763 + ], + [ + -47.383240577754634, + -22.222635307281188 + ], + [ + -47.383294678149014, + -22.22263230449033 + ], + [ + -47.38334949155487, + -22.222630114738422 + ], + [ + -47.383404361111985, + -22.222629253628217 + ], + [ + -47.383458501304666, + -22.222629235284977 + ], + [ + -47.38351336660817, + -22.22263082486303 + ], + [ + -47.38356858352806, + -22.22263481368104 + ], + [ + -47.38359653608833, + -22.222637464674097 + ], + [ + -47.383623079632535, + -22.222639639850794 + ], + [ + -47.38365182800333, + -22.22264263008437 + ], + [ + -47.383679567256564, + -22.222646274152808 + ], + [ + -47.38370732337677, + -22.222650692246976 + ], + [ + -47.38373482566008, + -22.222655368677803 + ], + [ + -47.383762468856986, + -22.22266068574572 + ], + [ + -47.38378933107237, + -22.2226659114182 + ], + [ + -47.38381561387316, + -22.22267098326624 + ], + [ + -47.383843396125535, + -22.222676368487697 + ], + [ + -47.38387131308481, + -22.222682042932618 + ], + [ + -47.38389924495207, + -22.222687890093074 + ], + [ + -47.38392665685693, + -22.222694462480252 + ], + [ + -47.38395384255045, + -22.222701002967696 + ], + [ + -47.383981447904205, + -22.222708587739987 + ], + [ + -47.3840077437564, + -22.222715261525963 + ], + [ + -47.384036037935566, + -22.222722819313002 + ], + [ + -47.384063652025226, + -22.222730784919325 + ], + [ + -47.38409136763376, + -22.22273798824856 + ], + [ + -47.38411819310122, + -22.222745970875163 + ], + [ + -47.38414557588625, + -22.22275439409586 + ], + [ + -47.38417286273566, + -22.222762759928194 + ], + [ + -47.384198483379386, + -22.22277074659626 + ], + [ + -47.38422565151848, + -22.222778755524743 + ], + [ + -47.38425186554105, + -22.222786568048885 + ], + [ + -47.38427877114772, + -22.22279558938517 + ], + [ + -47.38430588567588, + -22.222804087437996 + ], + [ + -47.384330950776196, + -22.222811351289323 + ], + [ + -47.384358661224546, + -22.222820238157087 + ], + [ + -47.384383741996395, + -22.222827332980625 + ], + [ + -47.38440968491608, + -22.222835515898286 + ], + [ + -47.38443515615458, + -22.22284311179171 + ], + [ + -47.384459940384865, + -22.22285183451349 + ], + [ + -47.384482537811834, + -22.222858611426595 + ], + [ + -47.38450289993335, + -22.222865747076522 + ], + [ + -47.38451747678467, + -22.222870795753902 + ], + [ + -47.384537713577274, + -22.22287618610149 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "2", + "Name": "Curvas", + "Length": 190.89999048068972, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "2", + "type": "LineString", + "coordinates": [ + [ + -47.382731533025286, + -22.222633186415344 + ], + [ + -47.38280104727575, + -22.22263429461992 + ], + [ + -47.38287466412836, + -22.222636174481746 + ], + [ + -47.38292421259631, + -22.222636536231686 + ], + [ + -47.382975392063386, + -22.222635359072044 + ], + [ + -47.38302787467091, + -22.222632895212406 + ], + [ + -47.38307977651767, + -22.22263019816397 + ], + [ + -47.383132345019256, + -22.222627568083052 + ], + [ + -47.383185929792496, + -22.222624668704306 + ], + [ + -47.38323972763785, + -22.222621789045803 + ], + [ + -47.383293933629474, + -22.222618780394306 + ], + [ + -47.383349057194714, + -22.222616578252225 + ], + [ + -47.38340423590093, + -22.22261571229078 + ], + [ + -47.38345872488867, + -22.222615693829812 + ], + [ + -47.3835141557277, + -22.22261729979324 + ], + [ + -47.383569883149576, + -22.22262132548992 + ], + [ + -47.38359791063892, + -22.222623983589436 + ], + [ + -47.383624524768145, + -22.2226261645506 + ], + [ + -47.38365365171937, + -22.222629194162096 + ], + [ + -47.3836818091413, + -22.222632893165045 + ], + [ + -47.383709855341586, + -22.222637357433108 + ], + [ + -47.38373760370259, + -22.222642075706702 + ], + [ + -47.383765427364075, + -22.222647427486557 + ], + [ + -47.38379229416747, + -22.222652654051796 + ], + [ + -47.38381856550213, + -22.222657723687384 + ], + [ + -47.383846429363324, + -22.222663124722363 + ], + [ + -47.383874459299285, + -22.22266882213134 + ], + [ + -47.38390265441131, + -22.22267472439876 + ], + [ + -47.38393028380824, + -22.22268134893291 + ], + [ + -47.38395772118298, + -22.222687949966623 + ], + [ + -47.383985418998094, + -22.222695560143585 + ], + [ + -47.38401166175174, + -22.22270222045352 + ], + [ + -47.38404019582808, + -22.2227098423208 + ], + [ + -47.38406776008862, + -22.222717793553553 + ], + [ + -47.384095538102834, + -22.222725013102256 + ], + [ + -47.38412268832632, + -22.222733092368806 + ], + [ + -47.38415013841243, + -22.22274153629217 + ], + [ + -47.384177445934675, + -22.22274990845575 + ], + [ + -47.38420298745656, + -22.222757870459503 + ], + [ + -47.3842300634662, + -22.2227658522292 + ], + [ + -47.38425654783707, + -22.22277374532498 + ], + [ + -47.38428355551484, + -22.222782800885454 + ], + [ + -47.38431036739517, + -22.222791204084597 + ], + [ + -47.38433548122902, + -22.222798482059 + ], + [ + -47.38436314497627, + -22.222807353949733 + ], + [ + -47.38438819037379, + -22.222814438766743 + ], + [ + -47.384414236684364, + -22.222822654296163 + ], + [ + -47.38443994874848, + -22.222830322007397 + ], + [ + -47.38446474413228, + -22.222839048654823 + ], + [ + -47.3844873317328, + -22.222845822621085 + ], + [ + -47.384507996935255, + -22.222853064482063 + ], + [ + -47.384522019132, + -22.222857921055503 + ], + [ + -47.384547778989806, + -22.222864782546914 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "3", + "Name": "Curvas", + "Length": 191.187608947692, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "3", + "type": "LineString", + "coordinates": [ + [ + -47.3827391022217, + -22.222619763716338 + ], + [ + -47.38280137114797, + -22.2226207564142 + ], + [ + -47.38287492054166, + -22.22262263455409 + ], + [ + -47.38292408999691, + -22.22262299353731 + ], + [ + -47.3829748461843, + -22.22262182611379 + ], + [ + -47.3830271032349, + -22.222619372843607 + ], + [ + -47.383078981087046, + -22.22261667704247 + ], + [ + -47.3831315329226, + -22.222614047795844 + ], + [ + -47.38318508600514, + -22.22261115013227 + ], + [ + -47.38323887752324, + -22.222608270810262 + ], + [ + -47.38329318911021, + -22.222605256298245 + ], + [ + -47.383348622834774, + -22.22260304176602 + ], + [ + -47.38340411069004, + -22.22260217095335 + ], + [ + -47.38345894847275, + -22.22260215237464 + ], + [ + -47.38351494484721, + -22.222603774723417 + ], + [ + -47.38357118277097, + -22.222607837298813 + ], + [ + -47.383599285189355, + -22.222610502504782 + ], + [ + -47.383625969903605, + -22.222612689250443 + ], + [ + -47.383655475435184, + -22.222615758239815 + ], + [ + -47.38368405102574, + -22.22261951217726 + ], + [ + -47.383712387306055, + -22.222624022619204 + ], + [ + -47.3837403817447, + -22.222628782735544 + ], + [ + -47.38376838587073, + -22.22263416922735 + ], + [ + -47.38379525726212, + -22.222639396685338 + ], + [ + -47.38382151713067, + -22.222644464108516 + ], + [ + -47.38384946260784, + -22.22264988095849 + ], + [ + -47.38387760551326, + -22.222655601330022 + ], + [ + -47.383906063870036, + -22.22266155870438 + ], + [ + -47.383933910759005, + -22.222668235385555 + ], + [ + -47.38396159982101, + -22.222674896967202 + ], + [ + -47.38398939009137, + -22.222682532547136 + ], + [ + -47.38401557974646, + -22.22268917938103 + ], + [ + -47.38404435371993, + -22.222696865328533 + ], + [ + -47.38407186815136, + -22.2227048021877 + ], + [ + -47.384099708571235, + -22.222712037955908 + ], + [ + -47.38412718355071, + -22.22272021386238 + ], + [ + -47.384154700937884, + -22.22272867848842 + ], + [ + -47.38418202914149, + -22.22273705698589 + ], + [ + -47.384207491533004, + -22.222744994322692 + ], + [ + -47.3842344754132, + -22.222752948933582 + ], + [ + -47.384261230132324, + -22.222760922600973 + ], + [ + -47.384288339881195, + -22.22277001238568 + ], + [ + -47.38431484911376, + -22.22277832073114 + ], + [ + -47.38434001168113, + -22.222785612828616 + ], + [ + -47.3843676287273, + -22.222794469742315 + ], + [ + -47.3843926387505, + -22.222801544552812 + ], + [ + -47.38441878845191, + -22.222809792693972 + ], + [ + -47.38444474134159, + -22.222817532223026 + ], + [ + -47.38446954787892, + -22.222826262796076 + ], + [ + -47.38449212565299, + -22.222833033815512 + ], + [ + -47.38451309393635, + -22.22284038188751 + ], + [ + -47.3845265614786, + -22.222845046357033 + ], + [ + -47.384557844400746, + -22.222853378991847 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "4", + "Name": "Curvas", + "Length": 191.47522741301307, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "4", + "type": "LineString", + "coordinates": [ + [ + -47.382746671416754, + -22.222606341017123 + ], + [ + -47.38280169502028, + -22.22260721820848 + ], + [ + -47.38287517695505, + -22.22260909462643 + ], + [ + -47.38292396739767, + -22.222609450842928 + ], + [ + -47.38297430030546, + -22.222608293155513 + ], + [ + -47.383026331799186, + -22.222605850474785 + ], + [ + -47.383078185656714, + -22.222603155920947 + ], + [ + -47.38313072082623, + -22.22260052750859 + ], + [ + -47.38318424221808, + -22.2225976315602 + ], + [ + -47.383238027406286, + -22.222594752574842 + ], + [ + -47.383292444591234, + -22.22259173220214 + ], + [ + -47.383348188475054, + -22.222589505279764 + ], + [ + -47.383403985479305, + -22.222588629615856 + ], + [ + -47.383459172056924, + -22.22258861091944 + ], + [ + -47.383515733966696, + -22.2225902496536 + ], + [ + -47.38357248239225, + -22.222594349107684 + ], + [ + -47.38360065973968, + -22.222597021420103 + ], + [ + -47.383627415038916, + -22.222599213950232 + ], + [ + -47.38365729915078, + -22.22260232231752 + ], + [ + -47.383686292909886, + -22.22260613118948 + ], + [ + -47.38371491927016, + -22.222610687805307 + ], + [ + -47.383743159786405, + -22.222615489764404 + ], + [ + -47.38377134437695, + -22.222620910968146 + ], + [ + -47.38379822035635, + -22.222626139318887 + ], + [ + -47.38382446875877, + -22.222631204529623 + ], + [ + -47.38385249584189, + -22.22263663719252 + ], + [ + -47.383880751726785, + -22.222642380528686 + ], + [ + -47.38390947332823, + -22.222648393009997 + ], + [ + -47.3839375377092, + -22.222655121838137 + ], + [ + -47.38396547844996, + -22.222661843965376 + ], + [ + -47.38399336118401, + -22.222669504950645 + ], + [ + -47.38401949774058, + -22.222676138308493 + ], + [ + -47.384048511611134, + -22.22268388833621 + ], + [ + -47.38407597621346, + -22.222691810821807 + ], + [ + -47.384103879039, + -22.222699062809507 + ], + [ + -47.38413167877438, + -22.22270733535589 + ], + [ + -47.384159263462614, + -22.222715820684588 + ], + [ + -47.38418661233565, + -22.222724205512236 + ], + [ + -47.38421199560874, + -22.22273211818579 + ], + [ + -47.384238887359516, + -22.222740045637895 + ], + [ + -47.384265912426855, + -22.222748099876906 + ], + [ + -47.38429312424679, + -22.2227572238858 + ], + [ + -47.384319330831616, + -22.222765437377607 + ], + [ + -47.384344542132524, + -22.22277274359817 + ], + [ + -47.38437211247761, + -22.222781585534836 + ], + [ + -47.38439708712649, + -22.2227886503388 + ], + [ + -47.384423340218746, + -22.2227969310917 + ], + [ + -47.38444953393395, + -22.22280474243855 + ], + [ + -47.38447435162481, + -22.222813476937244 + ], + [ + -47.38449691957242, + -22.22282024500984 + ], + [ + -47.38451819093661, + -22.22282769929286 + ], + [ + -47.384531103824486, + -22.222832171658503 + ], + [ + -47.38456790981008, + -22.222841975436285 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "5", + "Name": "Curvas", + "Length": 191.7628458750475, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "5", + "type": "LineString", + "coordinates": [ + [ + -47.38275424061045, + -22.22259291831764 + ], + [ + -47.38280201889263, + -22.222593680002745 + ], + [ + -47.38287543336851, + -22.222595554698763 + ], + [ + -47.38292384479858, + -22.22259590814853 + ], + [ + -47.38297375442684, + -22.222594760197207 + ], + [ + -47.38302556036371, + -22.222592328105925 + ], + [ + -47.383077390226646, + -22.222589634799384 + ], + [ + -47.38312990873013, + -22.222587007221296 + ], + [ + -47.38318339843131, + -22.22258411298807 + ], + [ + -47.383237177293026, + -22.222581234339184 + ], + [ + -47.38329170007252, + -22.222578208106015 + ], + [ + -47.38334775411553, + -22.222575968793482 + ], + [ + -47.38340386026871, + -22.22257508827838 + ], + [ + -47.38345939564118, + -22.222575069464224 + ], + [ + -47.38351652308617, + -22.22257672458376 + ], + [ + -47.383573782013414, + -22.22258086091653 + ], + [ + -47.383602034289865, + -22.222583540335435 + ], + [ + -47.383628860174056, + -22.22258573865004 + ], + [ + -47.383659122866135, + -22.222588886395258 + ], + [ + -47.38368853479374, + -22.222592750201677 + ], + [ + -47.38371745123389, + -22.222597352991368 + ], + [ + -47.38374593782772, + -22.22260219679322 + ], + [ + -47.383774302882735, + -22.2226076527089 + ], + [ + -47.383801183450124, + -22.222612881952383 + ], + [ + -47.383827420386424, + -22.22261794495073 + ], + [ + -47.383855529088336, + -22.222623393429146 + ], + [ + -47.38388389793984, + -22.222629159727312 + ], + [ + -47.383912882785914, + -22.22263522731558 + ], + [ + -47.383941164658815, + -22.2226420082907 + ], + [ + -47.38396935708913, + -22.22264879096649 + ], + [ + -47.38399733227603, + -22.22265647735409 + ], + [ + -47.384023415734084, + -22.22266309723594 + ], + [ + -47.38405266950166, + -22.22267091134382 + ], + [ + -47.38408008427489, + -22.22267881945587 + ], + [ + -47.3841080495061, + -22.222686087663053 + ], + [ + -47.38413617399734, + -22.22269445684932 + ], + [ + -47.38416382598661, + -22.222702962880682 + ], + [ + -47.384191195544375, + -22.222711354043277 + ], + [ + -47.38421649968376, + -22.22271924204883 + ], + [ + -47.38424329930513, + -22.222727142342173 + ], + [ + -47.38427059472065, + -22.22273527715276 + ], + [ + -47.38429790861161, + -22.22274443538584 + ], + [ + -47.38432381254876, + -22.22275255402403 + ], + [ + -47.38434907258318, + -22.222759874367668 + ], + [ + -47.38437659622719, + -22.222768701327272 + ], + [ + -47.38440153550174, + -22.222775756124726 + ], + [ + -47.38442789198486, + -22.222784069489364 + ], + [ + -47.38445432652555, + -22.222791952654013 + ], + [ + -47.38447915536991, + -22.22280069107833 + ], + [ + -47.38450171349108, + -22.222807456204084 + ], + [ + -47.38452328793605, + -22.222815016698114 + ], + [ + -47.384535646169645, + -22.222819296959884 + ], + [ + -47.384577975217816, + -22.222830571880223 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "6", + "Name": "Curvas", + "Length": 192.0504643350901, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "6", + "type": "LineString", + "coordinates": [ + [ + -47.38276180980281, + -22.22257949561792 + ], + [ + -47.38280234276508, + -22.22258014179699 + ], + [ + -47.38287568978207, + -22.222582014771067 + ], + [ + -47.382923722199656, + -22.222582365454098 + ], + [ + -47.38297320854848, + -22.22258122723887 + ], + [ + -47.38302478892855, + -22.22257880573703 + ], + [ + -47.38307659479687, + -22.222576113677782 + ], + [ + -47.38312909663434, + -22.222573486933968 + ], + [ + -47.38318255464483, + -22.222570594415917 + ], + [ + -47.38323632717591, + -22.222567716103725 + ], + [ + -47.38329095555409, + -22.22256468400983 + ], + [ + -47.38334731975625, + -22.222562432307168 + ], + [ + -47.38340373505828, + -22.22256154694084 + ], + [ + -47.38345961922553, + -22.22256152800899 + ], + [ + -47.38351731220562, + -22.22256319951392 + ], + [ + -47.38357508163446, + -22.222567372725372 + ], + [ + -47.38360340883992, + -22.22257005925074 + ], + [ + -47.38363030530907, + -22.22257226334981 + ], + [ + -47.38366094658128, + -22.222575450472945 + ], + [ + -47.383690776677284, + -22.22257936921386 + ], + [ + -47.38371998319729, + -22.222584018177436 + ], + [ + -47.38374871586863, + -22.22258890382203 + ], + [ + -47.38377726138809, + -22.22259439444964 + ], + [ + -47.38380414654348, + -22.22259962458587 + ], + [ + -47.38383037201366, + -22.22260468537178 + ], + [ + -47.38385856231866, + -22.22261014966256 + ], + [ + -47.383887044152424, + -22.22261593892592 + ], + [ + -47.383916292243086, + -22.22262206162112 + ], + [ + -47.383944791607895, + -22.222628894743202 + ], + [ + -47.38397323571457, + -22.22263573796394 + ], + [ + -47.384001303367434, + -22.222643449757488 + ], + [ + -47.384027333726976, + -22.2226500561633 + ], + [ + -47.38405682739155, + -22.22265793435139 + ], + [ + -47.3840841923357, + -22.222665828089863 + ], + [ + -47.38411221997254, + -22.22267311251653 + ], + [ + -47.38414066921958, + -22.222681578342684 + ], + [ + -47.384168388509885, + -22.2226901050767 + ], + [ + -47.384195778733684, + -22.222698502568417 + ], + [ + -47.38422100375808, + -22.222706365911794 + ], + [ + -47.38424771125004, + -22.222714239046354 + ], + [ + -47.38427527701368, + -22.22272245442854 + ], + [ + -47.38430269297567, + -22.222731646885798 + ], + [ + -47.384328294265195, + -22.22273967067035 + ], + [ + -47.38435360303312, + -22.222747005137062 + ], + [ + -47.38438107997607, + -22.22275581711965 + ], + [ + -47.38440598387631, + -22.222762861910592 + ], + [ + -47.38443244375025, + -22.22277120788695 + ], + [ + -47.38445911911638, + -22.22277916286937 + ], + [ + -47.384483959114256, + -22.222787905219327 + ], + [ + -47.38450650740898, + -22.22279466739824 + ], + [ + -47.384528384934676, + -22.222802334103253 + ], + [ + -47.38454018851407, + -22.22280642226118 + ], + [ + -47.38458804062395, + -22.222819168323678 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "7", + "Name": "Curvas", + "Length": 192.32059643171945, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "7", + "type": "LineString", + "coordinates": [ + [ + -47.382769556529894, + -22.222565758087253 + ], + [ + -47.38287594619572, + -22.222568474843328 + ], + [ + -47.38292359960088, + -22.22256882275964 + ], + [ + -47.38297266267033, + -22.222567694280514 + ], + [ + -47.38302401749366, + -22.222565283368098 + ], + [ + -47.383075799367376, + -22.22256259255614 + ], + [ + -47.38312828453883, + -22.22255996664662 + ], + [ + -47.38318171085864, + -22.222557075843724 + ], + [ + -47.383235477064005, + -22.222554197867968 + ], + [ + -47.38329021103592, + -22.222551159913618 + ], + [ + -47.383346885397174, + -22.222548895820818 + ], + [ + -47.383403609847996, + -22.22254800560332 + ], + [ + -47.38345984280998, + -22.222547986553742 + ], + [ + -47.383518101325045, + -22.22254967444406 + ], + [ + -47.383576381255374, + -22.22255388453421 + ], + [ + -47.383604783389835, + -22.222556578166063 + ], + [ + -47.38363175044392, + -22.222558788049593 + ], + [ + -47.38366277029622, + -22.22256201455064 + ], + [ + -47.38369301856053, + -22.22256598822602 + ], + [ + -47.38372251516031, + -22.222570683363465 + ], + [ + -47.38375149390912, + -22.2225756108508 + ], + [ + -47.383780219893, + -22.222581136190364 + ], + [ + -47.3838071096364, + -22.222586367219343 + ], + [ + -47.38383332364047, + -22.222591425792814 + ], + [ + -47.38386159556701, + -22.22259690589975 + ], + [ + -47.38389019036452, + -22.222602718124488 + ], + [ + -47.38391970169972, + -22.222608895926616 + ], + [ + -47.38394841855642, + -22.22261578119569 + ], + [ + -47.38397711435478, + -22.2226226849656 + ], + [ + -47.3840052744582, + -22.222630422160833 + ], + [ + -47.384031251719236, + -22.222637015090612 + ], + [ + -47.384060985280776, + -22.222644957358888 + ], + [ + -47.384088300395845, + -22.22265283672381 + ], + [ + -47.384116390438294, + -22.222660137369946 + ], + [ + -47.384145164441094, + -22.22266869983596 + ], + [ + -47.38417295103243, + -22.222677247272664 + ], + [ + -47.384200361944366, + -22.222685651100377 + ], + [ + -47.384225507831665, + -22.222693489774656 + ], + [ + -47.38425212319425, + -22.222701335750486 + ], + [ + -47.38427995930597, + -22.222709631704234 + ], + [ + -47.38430747733896, + -22.22271885838569 + ], + [ + -47.38433277598093, + -22.22272678731663 + ], + [ + -47.384358133482344, + -22.222734135906425 + ], + [ + -47.38438556372423, + -22.22274293291195 + ], + [ + -47.38441043225017, + -22.222749967696373 + ], + [ + -47.384436995514896, + -22.222758346284493 + ], + [ + -47.384463911706426, + -22.222766373084664 + ], + [ + -47.38448876285783, + -22.222775119360254 + ], + [ + -47.38451130132611, + -22.22278187859232 + ], + [ + -47.38453348193249, + -22.2227896515083 + ], + [ + -47.38454473085779, + -22.22279354756244 + ], + [ + -47.38459810602849, + -22.222807764766625 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "8", + "Name": "Curvas", + "Length": 192.61202092672949, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "8", + "type": "LineString", + "coordinates": [ + [ + -47.38277708707742, + -22.22255240391239 + ], + [ + -47.38287620260944, + -22.222554934915603 + ], + [ + -47.382923477002265, + -22.22255528006517 + ], + [ + -47.382972116792445, + -22.222554161322112 + ], + [ + -47.383023246059054, + -22.222551760999128 + ], + [ + -47.383075003938174, + -22.222549071434457 + ], + [ + -47.38312747244361, + -22.222546446359217 + ], + [ + -47.38318086707276, + -22.2225435572715 + ], + [ + -47.38323462694672, + -22.22254067963246 + ], + [ + -47.383289466518036, + -22.22253763581737 + ], + [ + -47.38334645103832, + -22.222535359334444 + ], + [ + -47.38340348463788, + -22.222534464265735 + ], + [ + -47.383460066394505, + -22.22253444509848 + ], + [ + -47.38351889044445, + -22.222536149374196 + ], + [ + -47.38357768087619, + -22.222540396343046 + ], + [ + -47.38360615793963, + -22.222543097081353 + ], + [ + -47.38363319557864, + -22.222545312749343 + ], + [ + -47.38366459401093, + -22.22254857862831 + ], + [ + -47.383695260443474, + -22.222552607238182 + ], + [ + -47.383725047122994, + -22.2225573485495 + ], + [ + -47.38375427194922, + -22.22256231787957 + ], + [ + -47.38378317839748, + -22.222567877931052 + ], + [ + -47.38381007272888, + -22.222573109852792 + ], + [ + -47.38383627526683, + -22.22257816621381 + ], + [ + -47.38386462879364, + -22.22258366213255 + ], + [ + -47.38389333657615, + -22.222589497323042 + ], + [ + -47.38392311115584, + -22.222595730232086 + ], + [ + -47.38395204550438, + -22.22260266764811 + ], + [ + -47.3839809929768, + -22.222609631962353 + ], + [ + -47.384009245548356, + -22.222617394564136 + ], + [ + -47.384035169710906, + -22.222623974017875 + ], + [ + -47.38406514316936, + -22.22263198036634 + ], + [ + -47.38409240845536, + -22.2226398453577 + ], + [ + -47.38412056090341, + -22.222647162223307 + ], + [ + -47.38414965966191, + -22.22265582132918 + ], + [ + -47.38417751355426, + -22.22266438946854 + ], + [ + -47.38420494512882, + -22.222672799624306 + ], + [ + -47.38423001190454, + -22.22268061363748 + ], + [ + -47.384256535137766, + -22.222688432454525 + ], + [ + -47.3842846415975, + -22.222696808979855 + ], + [ + -47.38431226170149, + -22.222706069885476 + ], + [ + -47.38433725769595, + -22.222713903962806 + ], + [ + -47.384362663930844, + -22.222721266675677 + ], + [ + -47.38439004747168, + -22.222730048704186 + ], + [ + -47.384414880623346, + -22.222737073482097 + ], + [ + -47.384441547278826, + -22.222745484681933 + ], + [ + -47.38446870429572, + -22.222753583299852 + ], + [ + -47.38449356660064, + -22.222762333501095 + ], + [ + -47.38451609524247, + -22.222769089786315 + ], + [ + -47.384538578929494, + -22.222776968913266 + ], + [ + -47.38454927320079, + -22.22278067286361 + ], + [ + -47.38460817143142, + -22.222796361209088 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "9", + "Name": "Curvas", + "Length": 192.9034454196548, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "9", + "type": "LineString", + "coordinates": [ + [ + -47.382784617623614, + -22.222539049737286 + ], + [ + -47.38287645902322, + -22.222541394987857 + ], + [ + -47.38292335440379, + -22.22254173737067 + ], + [ + -47.382971570914776, + -22.22254062836364 + ], + [ + -47.383022474624724, + -22.222538238630104 + ], + [ + -47.383074208509264, + -22.22253555031274 + ], + [ + -47.383126660348665, + -22.222532926071757 + ], + [ + -47.38318002328716, + -22.222530038699226 + ], + [ + -47.383233776836136, + -22.222527161396574 + ], + [ + -47.38328872200041, + -22.222524111721107 + ], + [ + -47.383346016679646, + -22.222521822848066 + ], + [ + -47.383403359427916, + -22.222520922928158 + ], + [ + -47.383460289979126, + -22.222520903643193 + ], + [ + -47.383519679563825, + -22.222522624304315 + ], + [ + -47.38357898049686, + -22.222526908151874 + ], + [ + -47.38360753248926, + -22.222529615996635 + ], + [ + -47.38363464071321, + -22.222531837449107 + ], + [ + -47.383666417725415, + -22.222535142705965 + ], + [ + -47.38369750232611, + -22.22253922625033 + ], + [ + -47.38372757908532, + -22.222544013735494 + ], + [ + -47.383757049988915, + -22.222549024908282 + ], + [ + -47.383786136901506, + -22.22255461967167 + ], + [ + -47.38381303582091, + -22.222559852486185 + ], + [ + -47.383839226892746, + -22.222564906634798 + ], + [ + -47.38386766204388, + -22.222570418370186 + ], + [ + -47.38389648278733, + -22.222576276521576 + ], + [ + -47.38392652061144, + -22.222582564537515 + ], + [ + -47.38395567245176, + -22.222589554100498 + ], + [ + -47.38398487161797, + -22.22259657896449 + ], + [ + -47.3840132166379, + -22.222604366967378 + ], + [ + -47.384039087701964, + -22.222610932945116 + ], + [ + -47.384069301057295, + -22.222619003373723 + ], + [ + -47.38409651651423, + -22.22262685399153 + ], + [ + -47.38412473136788, + -22.222634187076615 + ], + [ + -47.38415415488198, + -22.222642942822336 + ], + [ + -47.38418207607535, + -22.222651531664347 + ], + [ + -47.38420952834142, + -22.222659948157172 + ], + [ + -47.3842345159767, + -22.22266773750024 + ], + [ + -47.384260947080584, + -22.222675529158494 + ], + [ + -47.38428932388828, + -22.222683986255415 + ], + [ + -47.38431704606323, + -22.22269328138518 + ], + [ + -47.38434173941024, + -22.222701020608937 + ], + [ + -47.384367194378605, + -22.222708397444862 + ], + [ + -47.38439453121842, + -22.222717164496377 + ], + [ + -47.384419328995826, + -22.22272417926774 + ], + [ + -47.384446099042016, + -22.222732623079274 + ], + [ + -47.38447349688425, + -22.222740793514973 + ], + [ + -47.38449837034267, + -22.222749547641843 + ], + [ + -47.38452088915805, + -22.222756300980244 + ], + [ + -47.38454367592567, + -22.22276428631816 + ], + [ + -47.38455381554305, + -22.222767798164725 + ], + [ + -47.38461823683277, + -22.22278495765104 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "10", + "Name": "Curvas", + "Length": 193.19486991005897, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "10", + "type": "LineString", + "coordinates": [ + [ + -47.38279214816847, + -22.222525695561938 + ], + [ + -47.382876715437106, + -22.222527855060097 + ], + [ + -47.38292323180549, + -22.222528194676148 + ], + [ + -47.38297102503736, + -22.222527095405177 + ], + [ + -47.383021703190686, + -22.22252471626106 + ], + [ + -47.38307341308063, + -22.222522029190987 + ], + [ + -47.383125848254025, + -22.222519405784276 + ], + [ + -47.383179179501866, + -22.222516520126923 + ], + [ + -47.38323292671868, + -22.222513643161054 + ], + [ + -47.38328797748307, + -22.22251058762477 + ], + [ + -47.383345582321226, + -22.222508286361634 + ], + [ + -47.38340323421813, + -22.222507381590532 + ], + [ + -47.38346051356383, + -22.22250736218789 + ], + [ + -47.383520468683194, + -22.222509099234433 + ], + [ + -47.383580280117435, + -22.222513419960684 + ], + [ + -47.38360890703878, + -22.22251613491191 + ], + [ + -47.383636085847634, + -22.222518362148843 + ], + [ + -47.38366824143969, + -22.22252170678361 + ], + [ + -47.38369974420846, + -22.22252584526246 + ], + [ + -47.38373011104729, + -22.222530678921494 + ], + [ + -47.383759828028225, + -22.22253573193701 + ], + [ + -47.38378909540512, + -22.22254136141231 + ], + [ + -47.383815998912524, + -22.222546595119578 + ], + [ + -47.38384217851825, + -22.222551647055752 + ], + [ + -47.38387069526687, + -22.222557174602382 + ], + [ + -47.38389962899803, + -22.22256305572007 + ], + [ + -47.38392993006652, + -22.222569398842918 + ], + [ + -47.383959299398605, + -22.222576440552842 + ], + [ + -47.38398875023665, + -22.222583525960555 + ], + [ + -47.38401718772681, + -22.22259133937057 + ], + [ + -47.384043005692405, + -22.222597891872276 + ], + [ + -47.38407345894456, + -22.22260602638104 + ], + [ + -47.384100624572454, + -22.222613862625316 + ], + [ + -47.384128901831694, + -22.222621211929848 + ], + [ + -47.38415865010136, + -22.222630064315414 + ], + [ + -47.384186638595715, + -22.222638673860068 + ], + [ + -47.38421411152105, + -22.222647096679893 + ], + [ + -47.38423902004814, + -22.222654861362916 + ], + [ + -47.3842653590227, + -22.22266262586241 + ], + [ + -47.38429400617834, + -22.22267116353088 + ], + [ + -47.384321830424234, + -22.222680492884802 + ], + [ + -47.38434622112383, + -22.222688137254973 + ], + [ + -47.38437172482567, + -22.22269552821398 + ], + [ + -47.384399014964444, + -22.22270428028848 + ], + [ + -47.384423777367566, + -22.22271128505331 + ], + [ + -47.3844506508045, + -22.22271976147657 + ], + [ + -47.384478289472014, + -22.22272800372999 + ], + [ + -47.384503174083946, + -22.222736761782507 + ], + [ + -47.38452568307289, + -22.222743512174073 + ], + [ + -47.384548772921015, + -22.22275160372291 + ], + [ + -47.38455835788458, + -22.222754923465743 + ], + [ + -47.38462830223251, + -22.222773554092512 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "11", + "Name": "Curvas", + "Length": 193.48629439465958, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "11", + "type": "LineString", + "coordinates": [ + [ + -47.382799678712004, + -22.222512341386327 + ], + [ + -47.38287697185108, + -22.222514315132305 + ], + [ + -47.38292310920735, + -22.222514651981605 + ], + [ + -47.382970479160164, + -22.222513562446682 + ], + [ + -47.383020931756924, + -22.222511193891982 + ], + [ + -47.38307261765227, + -22.222508508069197 + ], + [ + -47.38312503615966, + -22.22250588549676 + ], + [ + -47.383178335716856, + -22.222503001554546 + ], + [ + -47.38323207660948, + -22.222500124925016 + ], + [ + -47.383287232966, + -22.222497063528422 + ], + [ + -47.383345147963006, + -22.222494749875175 + ], + [ + -47.383403109008476, + -22.22249384025291 + ], + [ + -47.383460737148624, + -22.222493820732595 + ], + [ + -47.38352125780255, + -22.222495574164512 + ], + [ + -47.38358157973787, + -22.222499931769484 + ], + [ + -47.38361028158816, + -22.222502653827178 + ], + [ + -47.3836375309819, + -22.222504886848608 + ], + [ + -47.38367006515374, + -22.222508270861237 + ], + [ + -47.383701986090514, + -22.222512464274566 + ], + [ + -47.383732643008905, + -22.222517344107434 + ], + [ + -47.38376260606713, + -22.22252243896569 + ], + [ + -47.38379205390828, + -22.222528103152893 + ], + [ + -47.383818962003694, + -22.222533337752935 + ], + [ + -47.38384513014329, + -22.222538387476696 + ], + [ + -47.383873728518935, + -22.22254393084055 + ], + [ + -47.383902775208256, + -22.22254983491851 + ], + [ + -47.383933339521086, + -22.222556233148282 + ], + [ + -47.383962926344886, + -22.22256332700515 + ], + [ + -47.38399262887871, + -22.222570472963156 + ], + [ + -47.384021158815095, + -22.2225783117737 + ], + [ + -47.38404692368222, + -22.222584850799397 + ], + [ + -47.384077616831135, + -22.222593049388326 + ], + [ + -47.38410473263002, + -22.222600871259036 + ], + [ + -47.384133072294844, + -22.222608236783035 + ], + [ + -47.384163145320024, + -22.222617185808435 + ], + [ + -47.384191201115364, + -22.222625816055746 + ], + [ + -47.38421869473553, + -22.22263424521366 + ], + [ + -47.38424352411886, + -22.222641985225533 + ], + [ + -47.3842697709641, + -22.22264972256627 + ], + [ + -47.38429868846762, + -22.22265834080625 + ], + [ + -47.38432661478446, + -22.222667704384346 + ], + [ + -47.3843507028367, + -22.222675253900963 + ], + [ + -47.38437625527199, + -22.222682658983032 + ], + [ + -47.38440349870974, + -22.22269139608047 + ], + [ + -47.3844282257386, + -22.222698390838833 + ], + [ + -47.384455202566265, + -22.222706899873806 + ], + [ + -47.38448308205899, + -22.222715213944973 + ], + [ + -47.384507977824434, + -22.222723975923106 + ], + [ + -47.38453047698695, + -22.222730723367807 + ], + [ + -47.38455386991555, + -22.22273892112757 + ], + [ + -47.38456290022541, + -22.2227420487667 + ], + [ + -47.38463836763065, + -22.22276215053348 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "12", + "Name": "Curvas", + "Length": 193.77771887947935, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "12", + "type": "LineString", + "coordinates": [ + [ + -47.38280720925419, + -22.222498987210493 + ], + [ + -47.38287722826513, + -22.222500775204512 + ], + [ + -47.38292298660935, + -22.22250110928704 + ], + [ + -47.38296993328323, + -22.222500029488153 + ], + [ + -47.38302016032344, + -22.222497671522866 + ], + [ + -47.38307182222422, + -22.22249498694737 + ], + [ + -47.38312422406559, + -22.222492365209202 + ], + [ + -47.38317749193214, + -22.22248948298215 + ], + [ + -47.383231226491844, + -22.222486606689447 + ], + [ + -47.38328648844921, + -22.22248353943202 + ], + [ + -47.38334471360501, + -22.222481213388686 + ], + [ + -47.38340298379899, + -22.222480298915233 + ], + [ + -47.383460960733515, + -22.222480279277256 + ], + [ + -47.38352204692188, + -22.222482049094605 + ], + [ + -47.383582879358215, + -22.22248644357828 + ], + [ + -47.38361165613742, + -22.222489172742428 + ], + [ + -47.38363897611604, + -22.222491411548322 + ], + [ + -47.383671888867575, + -22.222494834938885 + ], + [ + -47.38370422797226, + -22.22249908328667 + ], + [ + -47.38373517497017, + -22.222504009293395 + ], + [ + -47.38376538410563, + -22.222509145994383 + ], + [ + -47.38379501241103, + -22.22251484489348 + ], + [ + -47.38382192509444, + -22.222520080386282 + ], + [ + -47.38384808176793, + -22.222525127897597 + ], + [ + -47.38387676173831, + -22.22253068707213 + ], + [ + -47.38390592141801, + -22.222536614116954 + ], + [ + -47.38393674897513, + -22.222543067453614 + ], + [ + -47.383966553290605, + -22.222550213457406 + ], + [ + -47.38399650749411, + -22.222557419958562 + ], + [ + -47.384025129902774, + -22.22256528417679 + ], + [ + -47.384050841671446, + -22.22257180972647 + ], + [ + -47.384081774717096, + -22.222580072395544 + ], + [ + -47.38410884068694, + -22.2225878798927 + ], + [ + -47.38413724275733, + -22.22259526163615 + ], + [ + -47.38416764053798, + -22.222604307301374 + ], + [ + -47.38419576363429, + -22.22261295825133 + ], + [ + -47.38422327791033, + -22.222621393735206 + ], + [ + -47.38424802818888, + -22.222629109088064 + ], + [ + -47.38427418290482, + -22.222636819270047 + ], + [ + -47.384303370756164, + -22.222645518081556 + ], + [ + -47.38433139914393, + -22.2226549158838 + ], + [ + -47.38435518454887, + -22.222662370546857 + ], + [ + -47.3843807857176, + -22.22266978975201 + ], + [ + -47.38440798245434, + -22.222678511872427 + ], + [ + -47.38443267410894, + -22.222685496624283 + ], + [ + -47.384459754327295, + -22.222694038270948 + ], + [ + -47.384487874645224, + -22.222702424159838 + ], + [ + -47.38451278156416, + -22.222711190063603 + ], + [ + -47.38453527090025, + -22.222717934561473 + ], + [ + -47.384558966909275, + -22.222726238532147 + ], + [ + -47.384567442565505, + -22.222729174067588 + ], + [ + -47.38464843302719, + -22.22275074697397 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "13", + "Name": "Curvas", + "Length": 194.06914335882485, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "13", + "type": "LineString", + "coordinates": [ + [ + -47.38281473979503, + -22.222485633034427 + ], + [ + -47.38287748467928, + -22.2224872352767 + ], + [ + -47.38292286401152, + -22.22248756659245 + ], + [ + -47.38296938740649, + -22.2224864965296 + ], + [ + -47.38301938889021, + -22.222484149153704 + ], + [ + -47.38307102679643, + -22.22248146582551 + ], + [ + -47.3831234119718, + -22.22247884492161 + ], + [ + -47.38317664814771, + -22.222475964409725 + ], + [ + -47.383230376383985, + -22.222473088453324 + ], + [ + -47.38328574393268, + -22.2224700153356 + ], + [ + -47.38334427924722, + -22.222467676902188 + ], + [ + -47.383402858589655, + -22.222466757577582 + ], + [ + -47.383461184318506, + -22.222466737821897 + ], + [ + -47.383522836041166, + -22.2224685240247 + ], + [ + -47.38358417897843, + -22.222472955387087 + ], + [ + -47.38361303068654, + -22.22247569165768 + ], + [ + -47.38364042125002, + -22.222477936248065 + ], + [ + -47.383673712581185, + -22.222481399016527 + ], + [ + -47.38370646985369, + -22.222485702298762 + ], + [ + -47.38373770693107, + -22.22249067447931 + ], + [ + -47.3837681621437, + -22.222495853023027 + ], + [ + -47.38379797091331, + -22.22250158663407 + ], + [ + -47.383824888184726, + -22.222506823019582 + ], + [ + -47.38385103339212, + -22.222511868318477 + ], + [ + -47.38387979499218, + -22.22251744331079 + ], + [ + -47.38390906762728, + -22.222523393315345 + ], + [ + -47.38394015842866, + -22.2225299017589 + ], + [ + -47.383970180235764, + -22.22253709990965 + ], + [ + -47.38400038613699, + -22.222544366961664 + ], + [ + -47.384029100989814, + -22.222552256579846 + ], + [ + -47.38405475966004, + -22.2225587686535 + ], + [ + -47.3840859326024, + -22.2225670954027 + ], + [ + -47.3841129487432, + -22.222574888526292 + ], + [ + -47.38414141321917, + -22.222582286489253 + ], + [ + -47.38417213575521, + -22.22259142879426 + ], + [ + -47.38420032615248, + -22.22260010044685 + ], + [ + -47.38422786112675, + -22.22260854226988 + ], + [ + -47.38425253225818, + -22.222616232950536 + ], + [ + -47.38427859484482, + -22.22262391597379 + ], + [ + -47.38430805304396, + -22.222632695356786 + ], + [ + -47.38433618350263, + -22.222642127383196 + ], + [ + -47.38435966626032, + -22.222649487192726 + ], + [ + -47.38438531616251, + -22.22265692052092 + ], + [ + -47.384412466198235, + -22.22266562766433 + ], + [ + -47.384437122478545, + -22.22267260240964 + ], + [ + -47.384464306087594, + -22.22268117666804 + ], + [ + -47.384492667230674, + -22.222689634374632 + ], + [ + -47.384517585303115, + -22.222698404204003 + ], + [ + -47.38454006481276, + -22.222705145755054 + ], + [ + -47.384564063902175, + -22.222713555936604 + ], + [ + -47.38457198490486, + -22.2227162993684 + ], + [ + -47.38465849842212, + -22.222739343413952 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "14", + "Name": "Curvas", + "Length": 194.36056783830813, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "14", + "type": "LineString", + "coordinates": [ + [ + -47.38282227033455, + -22.22247227885811 + ], + [ + -47.382877741093495, + -22.222473695348874 + ], + [ + -47.38292274141385, + -22.222474023897846 + ], + [ + -47.38296884153002, + -22.222472963571015 + ], + [ + -47.383018617457296, + -22.22247062678452 + ], + [ + -47.38307023136893, + -22.222467944703606 + ], + [ + -47.383122599878305, + -22.222465324633976 + ], + [ + -47.38317580436359, + -22.222462445837266 + ], + [ + -47.38322952626618, + -22.222459570217712 + ], + [ + -47.38328499941644, + -22.222456491239118 + ], + [ + -47.38334384488966, + -22.222454140415635 + ], + [ + -47.383402733380485, + -22.22245321623988 + ], + [ + -47.383461407903575, + -22.222453196366523 + ], + [ + -47.383523625160464, + -22.22245499895477 + ], + [ + -47.38358547859852, + -22.22245946719586 + ], + [ + -47.383614405235534, + -22.222462210572917 + ], + [ + -47.38364186638387, + -22.22246446094777 + ], + [ + -47.383675536294575, + -22.222467963094136 + ], + [ + -47.38370871173483, + -22.22247232131085 + ], + [ + -47.383740238891626, + -22.222477339665243 + ], + [ + -47.38377094018141, + -22.222482560051663 + ], + [ + -47.38380092941518, + -22.22248832837461 + ], + [ + -47.38382785127459, + -22.222493565652883 + ], + [ + -47.383853985015875, + -22.222498608739333 + ], + [ + -47.38388282820795, + -22.222504199541767 + ], + [ + -47.3839122138361, + -22.222510172513733 + ], + [ + -47.383943567881666, + -22.22251673606417 + ], + [ + -47.38397380718038, + -22.22252398636184 + ], + [ + -47.38400426474919, + -22.222531313956427 + ], + [ + -47.38403307207624, + -22.222539228982832 + ], + [ + -47.384058677648035, + -22.222545727580467 + ], + [ + -47.38409009048704, + -22.222554118409803 + ], + [ + -47.384117056798836, + -22.222561897159846 + ], + [ + -47.38414558368034, + -22.222569311342255 + ], + [ + -47.38417663097173, + -22.222578550287057 + ], + [ + -47.38420488866994, + -22.22258724264228 + ], + [ + -47.384232444296735, + -22.222595690790225 + ], + [ + -47.38425703632676, + -22.222603356812925 + ], + [ + -47.38428300678414, + -22.222611012677437 + ], + [ + -47.38431273533101, + -22.22261987263194 + ], + [ + -47.384340967860574, + -22.222629338882488 + ], + [ + -47.38436414797106, + -22.22263660383848 + ], + [ + -47.38438984660669, + -22.222644051289752 + ], + [ + -47.38441694994141, + -22.22265274345615 + ], + [ + -47.384441570847464, + -22.22265970819494 + ], + [ + -47.38446885784719, + -22.222668315065043 + ], + [ + -47.384497459815364, + -22.222676844589326 + ], + [ + -47.38452238904131, + -22.22268561834434 + ], + [ + -47.38454485872453, + -22.222692356948553 + ], + [ + -47.38456916089428, + -22.222700873340983 + ], + [ + -47.38457652724352, + -22.222703424669138 + ], + [ + -47.38466856381547, + -22.222727939853453 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "15", + "Name": "Curvas", + "Length": 194.65199231181938, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "15", + "type": "LineString", + "coordinates": [ + [ + -47.382829800872734, + -22.222458924681536 + ], + [ + -47.38287799750778, + -22.222460155421032 + ], + [ + -47.3829226188163, + -22.22246048120321 + ], + [ + -47.382968295653775, + -22.222459430612396 + ], + [ + -47.38301784602463, + -22.222457104415277 + ], + [ + -47.38306943594171, + -22.222454423581635 + ], + [ + -47.38312178778509, + -22.22245180434629 + ], + [ + -47.38317496057976, + -22.222448927264765 + ], + [ + -47.38322867615967, + -22.22244605198146 + ], + [ + -47.38328425490047, + -22.222442967142644 + ], + [ + -47.3833434105323, + -22.22244060392906 + ], + [ + -47.38340260817145, + -22.222439674902137 + ], + [ + -47.38346163148873, + -22.222439654911156 + ], + [ + -47.38352441427973, + -22.222441473884803 + ], + [ + -47.383586778218515, + -22.22244597900463 + ], + [ + -47.38361577978437, + -22.22244872948818 + ], + [ + -47.38364331151755, + -22.22245098564747 + ], + [ + -47.38367736000776, + -22.22245452717173 + ], + [ + -47.383710953615676, + -22.222458940322905 + ], + [ + -47.38374277085181, + -22.222464004851144 + ], + [ + -47.38377371821867, + -22.222469267080278 + ], + [ + -47.383803887916606, + -22.2224750701151 + ], + [ + -47.383830814364, + -22.22248030828614 + ], + [ + -47.383856936639205, + -22.22248534916018 + ], + [ + -47.38388586146361, + -22.222490955780927 + ], + [ + -47.383915360044426, + -22.22249695171209 + ], + [ + -47.383946977334126, + -22.22250357036939 + ], + [ + -47.38397743412442, + -22.22251087281397 + ], + [ + -47.3840081433928, + -22.22251826095993 + ], + [ + -47.38403704316203, + -22.222526201385755 + ], + [ + -47.38406259563543, + -22.222532686507382 + ], + [ + -47.38409424837103, + -22.222541141416833 + ], + [ + -47.38412116485382, + -22.22254890579333 + ], + [ + -47.384149754140836, + -22.222556336195208 + ], + [ + -47.384181126187535, + -22.222565671779787 + ], + [ + -47.38420945118666, + -22.222574384837653 + ], + [ + -47.38423702751503, + -22.22258283932579 + ], + [ + -47.38426154039462, + -22.22259048067527 + ], + [ + -47.384287418722735, + -22.222598109381025 + ], + [ + -47.384317417617304, + -22.222607049907023 + ], + [ + -47.38434575221774, + -22.222616550381716 + ], + [ + -47.38436862968108, + -22.222623720484208 + ], + [ + -47.38439437705013, + -22.22263118205852 + ], + [ + -47.38442143368388, + -22.2226398592479 + ], + [ + -47.38444601921567, + -22.22264681398018 + ], + [ + -47.38447340960606, + -22.222655453461986 + ], + [ + -47.3845022523993, + -22.222664054803918 + ], + [ + -47.38452719277875, + -22.2226728324846 + ], + [ + -47.38454965263552, + -22.22267956814198 + ], + [ + -47.384574257885525, + -22.222688190745263 + ], + [ + -47.38458106958142, + -22.22269054996979 + ], + [ + -47.38467862920721, + -22.222716536292445 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "16", + "Name": "Curvas", + "Length": 194.94341678419917, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "16", + "type": "LineString", + "coordinates": [ + [ + -47.38283733140958, + -22.222445570504725 + ], + [ + -47.382878253922165, + -22.22244661549317 + ], + [ + -47.38292249621894, + -22.222446938508558 + ], + [ + -47.38296774977778, + -22.222445897653742 + ], + [ + -47.38301707459227, + -22.22244358204601 + ], + [ + -47.38306864051478, + -22.222440902459653 + ], + [ + -47.38312097569218, + -22.222438284058583 + ], + [ + -47.383174116796226, + -22.222435408692213 + ], + [ + -47.38322782604169, + -22.222432533745817 + ], + [ + -47.383283510384786, + -22.222429443046092 + ], + [ + -47.383342976175165, + -22.222427067442453 + ], + [ + -47.383402482962595, + -22.222426133564372 + ], + [ + -47.383461855073975, + -22.222426113455747 + ], + [ + -47.38352520339898, + -22.222427948814854 + ], + [ + -47.383588077838375, + -22.222432490813382 + ], + [ + -47.383617154333095, + -22.22243524840339 + ], + [ + -47.383644756651094, + -22.222437510347152 + ], + [ + -47.38367918372072, + -22.222441091249333 + ], + [ + -47.383713195496235, + -22.222445559334954 + ], + [ + -47.38374530281166, + -22.222450670037038 + ], + [ + -47.383776496255564, + -22.222455974108875 + ], + [ + -47.3838068464176, + -22.222461811855595 + ], + [ + -47.38383377745299, + -22.22246705091939 + ], + [ + -47.383859888262094, + -22.222472089580997 + ], + [ + -47.38388889467583, + -22.22247771201132 + ], + [ + -47.38391850625231, + -22.222483730910408 + ], + [ + -47.38395038678609, + -22.222490404674588 + ], + [ + -47.3839810610679, + -22.22249775926607 + ], + [ + -47.384012022001855, + -22.22250520795406 + ], + [ + -47.38404101424722, + -22.222513173788634 + ], + [ + -47.3840665136222, + -22.22251964543425 + ], + [ + -47.38409840625437, + -22.222528164423817 + ], + [ + -47.38412527290816, + -22.222535914426775 + ], + [ + -47.3841539246007, + -22.222543361048096 + ], + [ + -47.38418562140264, + -22.22255279327245 + ], + [ + -47.38421401370267, + -22.22256152703294 + ], + [ + -47.38424161068021, + -22.222569987844935 + ], + [ + -47.384266044461775, + -22.22257760453752 + ], + [ + -47.38429183066065, + -22.222585206084535 + ], + [ + -47.38432209990287, + -22.222594227182018 + ], + [ + -47.384350536574146, + -22.222603761880844 + ], + [ + -47.38437311139039, + -22.22261083712983 + ], + [ + -47.38439890749286, + -22.222618312827198 + ], + [ + -47.38442591742563, + -22.222626975039557 + ], + [ + -47.38445046758318, + -22.222633919765336 + ], + [ + -47.38447796136419, + -22.222642591858843 + ], + [ + -47.38450704498246, + -22.222651265018463 + ], + [ + -47.38453199651541, + -22.22266004662477 + ], + [ + -47.38455444654575, + -22.22266677933531 + ], + [ + -47.384579354875974, + -22.222675508149447 + ], + [ + -47.38458561191863, + -22.222677675270386 + ], + [ + -47.384688694597344, + -22.222705132730947 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "17", + "Name": "Curvas", + "Length": 195.26910144987724, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "17", + "type": "LineString", + "coordinates": [ + [ + -47.38284451737175, + -22.22243282737238 + ], + [ + -47.38292237362173, + -22.222433395813873 + ], + [ + -47.382967203902005, + -22.222432364695045 + ], + [ + -47.38301630316017, + -22.22243005967672 + ], + [ + -47.383067845088135, + -22.22242738133765 + ], + [ + -47.38312016359953, + -22.222424763770817 + ], + [ + -47.38317327301296, + -22.222421890119612 + ], + [ + -47.38322697593655, + -22.22241901550944 + ], + [ + -47.38328276586937, + -22.2224159189495 + ], + [ + -47.38334254181824, + -22.22241353095585 + ], + [ + -47.383402357753894, + -22.22241259222662 + ], + [ + -47.38346207865929, + -22.22241257200035 + ], + [ + -47.383525992518216, + -22.222414423744894 + ], + [ + -47.38358937745809, + -22.22241900262214 + ], + [ + -47.38361852888168, + -22.222421767318608 + ], + [ + -47.38364620178448, + -22.22242403504685 + ], + [ + -47.38368100743346, + -22.22242765532691 + ], + [ + -47.38371543737647, + -22.222432178346995 + ], + [ + -47.38374783477113, + -22.2224373352229 + ], + [ + -47.38377927429205, + -22.222442681137434 + ], + [ + -47.383809804918165, + -22.22244855359605 + ], + [ + -47.38383674054154, + -22.222453793552578 + ], + [ + -47.383862839884536, + -22.22245883000179 + ], + [ + -47.38389192793323, + -22.222464468250955 + ], + [ + -47.38392165245971, + -22.22247051010868 + ], + [ + -47.38395379623754, + -22.222477238979735 + ], + [ + -47.383984688010806, + -22.222484645718144 + ], + [ + -47.38401590064619, + -22.222492154958026 + ], + [ + -47.38404498533176, + -22.222500146191468 + ], + [ + -47.38407043160832, + -22.22250660436106 + ], + [ + -47.384102564137045, + -22.222515187430744 + ], + [ + -47.38412938096184, + -22.222522923060154 + ], + [ + -47.38415809505991, + -22.222530385900956 + ], + [ + -47.38419011661701, + -22.222539914765036 + ], + [ + -47.38421857621796, + -22.222548669228168 + ], + [ + -47.384246193900374, + -22.222557136381397 + ], + [ + -47.38427054852818, + -22.222564728399686 + ], + [ + -47.38429624259785, + -22.22257230278797 + ], + [ + -47.38432678218766, + -22.222581404456946 + ], + [ + -47.38435532092978, + -22.222590973379898 + ], + [ + -47.38437759309898, + -22.2225979537754 + ], + [ + -47.38440343793487, + -22.222605443595832 + ], + [ + -47.38443040116665, + -22.22261409083118 + ], + [ + -47.38445491594998, + -22.22262102555046 + ], + [ + -47.38448251312158, + -22.222629730255637 + ], + [ + -47.38451183756485, + -22.22263847523293 + ], + [ + -47.38453680025128, + -22.22264726076485 + ], + [ + -47.38455924045519, + -22.222653990528556 + ], + [ + -47.38458445186561, + -22.222662825553545 + ], + [ + -47.3845901542551, + -22.22266480057091 + ], + [ + -47.384698759985895, + -22.222693729168963 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "18", + "Name": "Curvas", + "Length": 195.5531195386649, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "18", + "type": "LineString", + "coordinates": [ + [ + -47.382852122395924, + -22.2224193410993 + ], + [ + -47.382922251024674, + -22.222419853119174 + ], + [ + -47.38296665802648, + -22.22241883173633 + ], + [ + -47.38301553172837, + -22.222416537307378 + ], + [ + -47.383067049661776, + -22.22241386021559 + ], + [ + -47.38311935150718, + -22.22241124348303 + ], + [ + -47.38317242923001, + -22.22240837154699 + ], + [ + -47.38322612581839, + -22.222405497273765 + ], + [ + -47.38328202135423, + -22.222402394852896 + ], + [ + -47.383342107461544, + -22.222399994469193 + ], + [ + -47.38340223254535, + -22.222399050888807 + ], + [ + -47.38346230224472, + -22.22239903054491 + ], + [ + -47.383526781637435, + -22.222400898674927 + ], + [ + -47.38359067707771, + -22.22240551443088 + ], + [ + -47.38361990343014, + -22.222408286233808 + ], + [ + -47.38364764691774, + -22.222410559746518 + ], + [ + -47.383682831145975, + -22.22241421940449 + ], + [ + -47.38371767925643, + -22.222418797359023 + ], + [ + -47.38375036673026, + -22.22242400040876 + ], + [ + -47.38378205232814, + -22.222429388165995 + ], + [ + -47.383812763418284, + -22.222435295336496 + ], + [ + -47.38383970362966, + -22.222440536185783 + ], + [ + -47.38386579150656, + -22.222445570422547 + ], + [ + -47.38389496114191, + -22.222451224480764 + ], + [ + -47.38392479866665, + -22.222457289306945 + ], + [ + -47.383957205688475, + -22.22246407328486 + ], + [ + -47.38398831495318, + -22.222471532170182 + ], + [ + -47.384019779252164, + -22.222479101951553 + ], + [ + -47.3840489564157, + -22.22248711859425 + ], + [ + -47.38407434959387, + -22.22249356328783 + ], + [ + -47.38410672201908, + -22.222502210437618 + ], + [ + -47.384133489014886, + -22.222509931693484 + ], + [ + -47.38416226551847, + -22.222517410753742 + ], + [ + -47.38419461183067, + -22.222527036257553 + ], + [ + -47.384223138732516, + -22.222535811423306 + ], + [ + -47.384250777060764, + -22.22254428489937 + ], + [ + -47.384275052593885, + -22.2225518522618 + ], + [ + -47.384300654534364, + -22.22255939949134 + ], + [ + -47.38433146447173, + -22.222568581731778 + ], + [ + -47.38436010528466, + -22.222578184878863 + ], + [ + -47.38438207480687, + -22.22258507042088 + ], + [ + -47.38440796837616, + -22.222592574364363 + ], + [ + -47.38443488490697, + -22.222601206622695 + ], + [ + -47.38445936431607, + -22.222608131335495 + ], + [ + -47.384487064878265, + -22.22261686865235 + ], + [ + -47.38451663014648, + -22.222625685447298 + ], + [ + -47.384541603986406, + -22.222634474904854 + ], + [ + -47.38456403436389, + -22.22264120172172 + ], + [ + -47.384589548854414, + -22.222650142957537 + ], + [ + -47.38459469659085, + -22.222651925871364 + ], + [ + -47.38470882537283, + -22.22268232560647 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "19", + "Name": "Curvas", + "Length": 195.83713762225602, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "19", + "type": "LineString", + "coordinates": [ + [ + -47.38285972741873, + -22.222405854825983 + ], + [ + -47.382922128427765, + -22.222406310424446 + ], + [ + -47.3829661121512, + -22.222405298777563 + ], + [ + -47.383014760296824, + -22.222403014937992 + ], + [ + -47.383066254235686, + -22.222400339093475 + ], + [ + -47.38311853941512, + -22.222397723195215 + ], + [ + -47.38317158544735, + -22.222394852974325 + ], + [ + -47.38322527571458, + -22.22239197903726 + ], + [ + -47.38328127683935, + -22.22238887075627 + ], + [ + -47.383341673105036, + -22.222386457982488 + ], + [ + -47.38340210733693, + -22.222385509551017 + ], + [ + -47.38346252583023, + -22.222385489089444 + ], + [ + -47.383527570756605, + -22.222387373604935 + ], + [ + -47.383591976697225, + -22.222392026239625 + ], + [ + -47.38362127797845, + -22.222394805149015 + ], + [ + -47.38364909205085, + -22.22239708444619 + ], + [ + -47.38368465485825, + -22.222400783482062 + ], + [ + -47.383719921136056, + -22.222405416371014 + ], + [ + -47.38375289868903, + -22.22241066559458 + ], + [ + -47.383784830363815, + -22.222416095194518 + ], + [ + -47.383815721917955, + -22.2224220370769 + ], + [ + -47.38384266671732, + -22.222427278818945 + ], + [ + -47.38386874312814, + -22.222432310843296 + ], + [ + -47.38389799440102, + -22.22243798072089 + ], + [ + -47.38392794487309, + -22.222444068505187 + ], + [ + -47.38396061513888, + -22.222450907589955 + ], + [ + -47.38399194189497, + -22.22245841862215 + ], + [ + -47.384023657897096, + -22.22246604895591 + ], + [ + -47.38405292749901, + -22.222474090996982 + ], + [ + -47.38407826757881, + -22.222480522214582 + ], + [ + -47.384110879900426, + -22.222489233444414 + ], + [ + -47.384137597067266, + -22.22249694032675 + ], + [ + -47.38416643597634, + -22.222504435606456 + ], + [ + -47.38419910704359, + -22.22251415774997 + ], + [ + -47.38422770124634, + -22.222522953618366 + ], + [ + -47.384255360282786, + -22.222531433436703 + ], + [ + -47.38427955665888, + -22.222538976123857 + ], + [ + -47.38430506647016, + -22.222546496194678 + ], + [ + -47.38433614675504, + -22.22255575900652 + ], + [ + -47.384364889638746, + -22.22256539637774 + ], + [ + -47.38438655651405, + -22.222572187066323 + ], + [ + -47.38441249881672, + -22.222579705132855 + ], + [ + -47.38443936864658, + -22.222588322414158 + ], + [ + -47.38446381268147, + -22.222595237120444 + ], + [ + -47.38449161663422, + -22.222604007049 + ], + [ + -47.38452142272734, + -22.22261289566161 + ], + [ + -47.384546407720755, + -22.22262168904477 + ], + [ + -47.38456882827182, + -22.22262841291482 + ], + [ + -47.384594645842405, + -22.222637460361415 + ], + [ + -47.38459923892587, + -22.222639051171758 + ], + [ + -47.38471889075817, + -22.222670922043488 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "20", + "Name": "Curvas", + "Length": 196.1211557065339, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "20", + "type": "LineString", + "coordinates": [ + [ + -47.382867332440185, + -22.22239236855241 + ], + [ + -47.38292200583102, + -22.222392767729705 + ], + [ + -47.38296556627614, + -22.222391765818777 + ], + [ + -47.38301398886558, + -22.222389492568574 + ], + [ + -47.383065458809895, + -22.222386817971344 + ], + [ + -47.38311772732335, + -22.222384202907357 + ], + [ + -47.38317074166499, + -22.222381334401625 + ], + [ + -47.383224425596254, + -22.222378460801547 + ], + [ + -47.38328053232476, + -22.222375346659575 + ], + [ + -47.38334123874877, + -22.222372921495765 + ], + [ + -47.3834019821287, + -22.222371968213178 + ], + [ + -47.383462749415834, + -22.22237194763397 + ], + [ + -47.38352835987578, + -22.22237384853494 + ], + [ + -47.38359327631661, + -22.22237853804835 + ], + [ + -47.38362265252664, + -22.222381324064198 + ], + [ + -47.383650537183804, + -22.222383609145837 + ], + [ + -47.38368647857033, + -22.222387347559607 + ], + [ + -47.383722163015406, + -22.222392035383013 + ], + [ + -47.38375543064746, + -22.222397330780403 + ], + [ + -47.383787608399096, + -22.222402802223026 + ], + [ + -47.38381868041721, + -22.222408778817297 + ], + [ + -47.38384562980456, + -22.222414021452092 + ], + [ + -47.3838716947493, + -22.22241905126401 + ], + [ + -47.3839010276062, + -22.222424736950117 + ], + [ + -47.38393109107909, + -22.222430847703393 + ], + [ + -47.38396402458877, + -22.22243774189501 + ], + [ + -47.38399556883621, + -22.22244530507408 + ], + [ + -47.38402753650005, + -22.222452995948842 + ], + [ + -47.384056898581704, + -22.222461063399667 + ], + [ + -47.38408218556313, + -22.22246748114125 + ], + [ + -47.38411503778114, + -22.222476256451166 + ], + [ + -47.38414170511902, + -22.222483948959965 + ], + [ + -47.38417060643357, + -22.222491460459104 + ], + [ + -47.38420360225583, + -22.22250127924234 + ], + [ + -47.38423226375945, + -22.222510095813366 + ], + [ + -47.3842599434384, + -22.222518581953498 + ], + [ + -47.38428406072316, + -22.222526099985824 + ], + [ + -47.38430947840527, + -22.222533592897914 + ], + [ + -47.38434082903761, + -22.222542936281204 + ], + [ + -47.384369673992104, + -22.22255260787654 + ], + [ + -47.384391038220514, + -22.222559303711662 + ], + [ + -47.38441702925656, + -22.222566835901237 + ], + [ + -47.38444385238547, + -22.222575438205556 + ], + [ + -47.38446826104615, + -22.22258234290535 + ], + [ + -47.384496168389454, + -22.222591145445563 + ], + [ + -47.38452621530743, + -22.222600105875802 + ], + [ + -47.384551211454344, + -22.222608903184607 + ], + [ + -47.38457362217898, + -22.22261562410782 + ], + [ + -47.384599742829614, + -22.22262477776523 + ], + [ + -47.38460378126022, + -22.22262617647206 + ], + [ + -47.38472895614192, + -22.222659518480018 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "21", + "Name": "Curvas", + "Length": 196.40517378595288, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "21", + "type": "LineString", + "coordinates": [ + [ + -47.382874937460265, + -22.222378882278598 + ], + [ + -47.382921883234424, + -22.222379225034917 + ], + [ + -47.38296502040133, + -22.222378232859977 + ], + [ + -47.38301321743461, + -22.222375970199106 + ], + [ + -47.38306466338439, + -22.222373296849195 + ], + [ + -47.38311691523185, + -22.222370682619456 + ], + [ + -47.383169897882915, + -22.222367815828868 + ], + [ + -47.38322357549381, + -22.222364942564944 + ], + [ + -47.383279787810444, + -22.222361822562856 + ], + [ + -47.38334080439271, + -22.222359385009028 + ], + [ + -47.38340185692062, + -22.222358426875296 + ], + [ + -47.383462973001535, + -22.222358406178493 + ], + [ + -47.38352914899493, + -22.222360323464926 + ], + [ + -47.38359457593587, + -22.22236504985706 + ], + [ + -47.38362402707468, + -22.222367842979384 + ], + [ + -47.383651982316614, + -22.2223701338455 + ], + [ + -47.383688302282174, + -22.222373911637153 + ], + [ + -47.38372440489445, + -22.222378654394998 + ], + [ + -47.383757962605515, + -22.222383995966187 + ], + [ + -47.38379038643398, + -22.222389509251492 + ], + [ + -47.38382163891601, + -22.222395520557654 + ], + [ + -47.38384859289137, + -22.222400764085215 + ], + [ + -47.38387464637003, + -22.222405791684707 + ], + [ + -47.383904060867, + -22.222411493190723 + ], + [ + -47.38393423728461, + -22.22241762690158 + ], + [ + -47.383967434038134, + -22.222424576200016 + ], + [ + -47.38399919577691, + -22.22243219152599 + ], + [ + -47.38403141514557, + -22.22243994295359 + ], + [ + -47.384060869663784, + -22.222448035802277 + ], + [ + -47.38408610354683, + -22.222454440067878 + ], + [ + -47.3841191956612, + -22.222463279457873 + ], + [ + -47.38414581317013, + -22.22247095759312 + ], + [ + -47.38417477689014, + -22.22247848531172 + ], + [ + -47.38420809746735, + -22.222488400734655 + ], + [ + -47.38423682627183, + -22.222497238008305 + ], + [ + -47.384264526662285, + -22.222505730491736 + ], + [ + -47.384288564786715, + -22.222513223847727 + ], + [ + -47.38431389033969, + -22.2225206896011 + ], + [ + -47.384345511319424, + -22.222530113555806 + ], + [ + -47.38437445834469, + -22.22253981937528 + ], + [ + -47.38439551992627, + -22.222546420356945 + ], + [ + -47.38442155969568, + -22.222553966669565 + ], + [ + -47.38444833612365, + -22.22256255399689 + ], + [ + -47.38447270941011, + -22.22256944869017 + ], + [ + -47.384500720143954, + -22.222578283842058 + ], + [ + -47.384531007886764, + -22.222587316089932 + ], + [ + -47.38455601518714, + -22.222596117324358 + ], + [ + -47.384578416085354, + -22.22260283530072 + ], + [ + -47.384604839815935, + -22.222612095168927 + ], + [ + -47.38460832359376, + -22.22261330177228 + ], + [ + -47.38473902152408, + -22.222648114916034 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "22", + "Name": "Curvas", + "Length": 196.68919186224042, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "22", + "type": "LineString", + "coordinates": [ + [ + -47.382882542479, + -22.222365396004527 + ], + [ + -47.38292176063799, + -22.222365682340126 + ], + [ + -47.38296447452676, + -22.22236469990113 + ], + [ + -47.38301244600393, + -22.222362447829617 + ], + [ + -47.38306386795917, + -22.222359775726986 + ], + [ + -47.38311610314065, + -22.222357162331516 + ], + [ + -47.38316905410114, + -22.222354297256093 + ], + [ + -47.38322272537531, + -22.222351424329204 + ], + [ + -47.3832790432964, + -22.222348298466105 + ], + [ + -47.38334037003687, + -22.222345848522245 + ], + [ + -47.383401731712695, + -22.222344885537396 + ], + [ + -47.38346319658732, + -22.22234486472298 + ], + [ + -47.383529938114066, + -22.22234679839491 + ], + [ + -47.38359587555502, + -22.22235156166577 + ], + [ + -47.38362540162261, + -22.22235436189455 + ], + [ + -47.38365342744928, + -22.22235665854513 + ], + [ + -47.383690125993816, + -22.22236047571468 + ], + [ + -47.383726646773205, + -22.222365273406965 + ], + [ + -47.383760494563234, + -22.22237066115198 + ], + [ + -47.383793164468464, + -22.22237621627996 + ], + [ + -47.383824597414396, + -22.222382262297998 + ], + [ + -47.38385155597774, + -22.222387506718313 + ], + [ + -47.38387759799031, + -22.222392532105367 + ], + [ + -47.38390709406871, + -22.222398249419363 + ], + [ + -47.38393738348966, + -22.222404406099734 + ], + [ + -47.38397084348698, + -22.222411410505007 + ], + [ + -47.38400282271704, + -22.22241907797784 + ], + [ + -47.38403529374556, + -22.222426889945943 + ], + [ + -47.38406484074523, + -22.222435008204858 + ], + [ + -47.38409002152993, + -22.222441398994466 + ], + [ + -47.384123353540595, + -22.22245030246452 + ], + [ + -47.38414992122059, + -22.22245796622623 + ], + [ + -47.38417894734605, + -22.22246551016427 + ], + [ + -47.384212592678146, + -22.222475522226887 + ], + [ + -47.384241388783494, + -22.222484380203152 + ], + [ + -47.384269109813125, + -22.222492879007337 + ], + [ + -47.384293068849566, + -22.222500347709552 + ], + [ + -47.3843183022734, + -22.22250778630421 + ], + [ + -47.384350193600504, + -22.222517290830325 + ], + [ + -47.384379242696504, + -22.222527030873916 + ], + [ + -47.384400001631306, + -22.222533537002146 + ], + [ + -47.384426090134085, + -22.22254109743782 + ], + [ + -47.38445281986113, + -22.22254966978813 + ], + [ + -47.384477157773375, + -22.22255655447493 + ], + [ + -47.38450527189774, + -22.222565422238482 + ], + [ + -47.38453580046533, + -22.22257452630396 + ], + [ + -47.38456081891919, + -22.222583331464026 + ], + [ + -47.38458320999098, + -22.22259004649355 + ], + [ + -47.384609936801496, + -22.22259941257252 + ], + [ + -47.38461286592664, + -22.222600427072443 + ], + [ + -47.38474908690461, + -22.222636711351573 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "23", + "Name": "Curvas", + "Length": 197.0302426075307, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "23", + "type": "LineString", + "coordinates": [ + [ + -47.3828896023422, + -22.222352876473476 + ], + [ + -47.38296392865239, + -22.222351166942268 + ], + [ + -47.38301167457351, + -22.22234892546009 + ], + [ + -47.383063072534235, + -22.222346254604723 + ], + [ + -47.38311529104976, + -22.22234364204353 + ], + [ + -47.38316821031965, + -22.222340778683257 + ], + [ + -47.3832218752742, + -22.222337906092452 + ], + [ + -47.383278298782606, + -22.222334774369315 + ], + [ + -47.38333993568123, + -22.222332312035466 + ], + [ + -47.38340160650494, + -22.222331344199503 + ], + [ + -47.383463420173165, + -22.222331323267458 + ], + [ + -47.38353072723315, + -22.222333273324868 + ], + [ + -47.38359717517404, + -22.222338073474486 + ], + [ + -47.38362677617039, + -22.22234088080971 + ], + [ + -47.3836548725818, + -22.222343183244757 + ], + [ + -47.38369194970524, + -22.222347039792222 + ], + [ + -47.38372888865165, + -22.222351892418924 + ], + [ + -47.3837630265206, + -22.222357326337722 + ], + [ + -47.38379594250254, + -22.222362923308395 + ], + [ + -47.383827555912355, + -22.22236900403831 + ], + [ + -47.383854519063675, + -22.222374249351354 + ], + [ + -47.38388054961012, + -22.222379272526005 + ], + [ + -47.38391012733119, + -22.2223850056604 + ], + [ + -47.38394052969424, + -22.222391185297827 + ], + [ + -47.38397425293531, + -22.222398244809952 + ], + [ + -47.384006449656596, + -22.22240596442968 + ], + [ + -47.38403917239158, + -22.222413836951063 + ], + [ + -47.38406881182606, + -22.222421980607383 + ], + [ + -47.38409393951241, + -22.222428357920975 + ], + [ + -47.38412751141933, + -22.222437325471084 + ], + [ + -47.3841540292704, + -22.22244497485928 + ], + [ + -47.38418311780131, + -22.22245253501675 + ], + [ + -47.38421708788822, + -22.222462643719055 + ], + [ + -47.3842459512944, + -22.222471522397935 + ], + [ + -47.38427369303888, + -22.22248002754645 + ], + [ + -47.38429757291169, + -22.2224874715713 + ], + [ + -47.38432271420639, + -22.222494883007275 + ], + [ + -47.384354875880824, + -22.222504468104784 + ], + [ + -47.38438402704755, + -22.222514242372455 + ], + [ + -47.38440448333562, + -22.22252065364731 + ], + [ + -47.38443062057176, + -22.222528228206027 + ], + [ + -47.38445730359788, + -22.22253678557931 + ], + [ + -47.38448160613592, + -22.2225436602596 + ], + [ + -47.384509823650795, + -22.222552560634846 + ], + [ + -47.384540593043106, + -22.2225617365179 + ], + [ + -47.38456562265046, + -22.222570545603638 + ], + [ + -47.38458800389586, + -22.22257725768632 + ], + [ + -47.38461503378616, + -22.222586729976015 + ], + [ + -47.38461740825871, + -22.222587552372527 + ], + [ + -47.38475915228356, + -22.222625307786622 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "24", + "Name": "Curvas", + "Length": 197.30026516921757, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "24", + "type": "LineString", + "coordinates": [ + [ + -47.38289734113617, + -22.22233915296534 + ], + [ + -47.382963382778286, + -22.222337633983354 + ], + [ + -47.38301090314338, + -22.222335403090522 + ], + [ + -47.38306227710959, + -22.22233273348244 + ], + [ + -47.383114478959136, + -22.222330121755512 + ], + [ + -47.383167366538466, + -22.222327260110404 + ], + [ + -47.383221025155535, + -22.222324387856673 + ], + [ + -47.38327755426912, + -22.222321250272476 + ], + [ + -47.383339501325814, + -22.22231877554863 + ], + [ + -47.38340148129733, + -22.222317802861564 + ], + [ + -47.38346364375913, + -22.222317781811917 + ], + [ + -47.38353151635226, + -22.222319748254836 + ], + [ + -47.38359847479295, + -22.22232458528317 + ], + [ + -47.383628150718046, + -22.222327399724858 + ], + [ + -47.38365631771417, + -22.22232970794437 + ], + [ + -47.38369377341645, + -22.222333603869732 + ], + [ + -47.3837311305298, + -22.22233851143087 + ], + [ + -47.3837655584776, + -22.22234399152348 + ], + [ + -47.38379872053622, + -22.22234963033683 + ], + [ + -47.383830514409865, + -22.222355745778604 + ], + [ + -47.383857482149175, + -22.222360991984406 + ], + [ + -47.38388350122954, + -22.22236601294662 + ], + [ + -47.38391316052945, + -22.222371761888493 + ], + [ + -47.383943675898365, + -22.222377964495927 + ], + [ + -47.383977662383124, + -22.22238507911487 + ], + [ + -47.38401007659561, + -22.22239285088145 + ], + [ + -47.38404305098866, + -22.22240078394286 + ], + [ + -47.38407278290626, + -22.222408953009857 + ], + [ + -47.38409785749428, + -22.222415316847442 + ], + [ + -47.38413166929743, + -22.22242434847761 + ], + [ + -47.38415813731957, + -22.22243198349227 + ], + [ + -47.38418728825591, + -22.222439559869166 + ], + [ + -47.384221583097585, + -22.222449765211152 + ], + [ + -47.3842505138046, + -22.22245866459264 + ], + [ + -47.38427827618494, + -22.222467176060878 + ], + [ + -47.38430207697311, + -22.222474595432985 + ], + [ + -47.38432712613871, + -22.22248197971025 + ], + [ + -47.384359558160405, + -22.222491645379154 + ], + [ + -47.38438881139785, + -22.222501453870926 + ], + [ + -47.384408965039235, + -22.22250777029237 + ], + [ + -47.38443515100871, + -22.222515358974128 + ], + [ + -47.38446178733392, + -22.22252390137043 + ], + [ + -47.38448605449778, + -22.222530766044205 + ], + [ + -47.38451437540312, + -22.222539699031113 + ], + [ + -47.38454538562014, + -22.222548946731777 + ], + [ + -47.384570426380975, + -22.222557759743133 + ], + [ + -47.38459279779994, + -22.222564468878982 + ], + [ + -47.38462013077015, + -22.222574047379442 + ], + [ + -47.38462195059021, + -22.222574677672565 + ], + [ + -47.384769217660896, + -22.222613904221177 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "25", + "Name": "Curvas", + "Length": 197.57028772399505, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "25", + "type": "LineString", + "coordinates": [ + [ + -47.38290507992874, + -22.222325429456934 + ], + [ + -47.382962836904404, + -22.222324101024412 + ], + [ + -47.383010131713526, + -22.222321880720923 + ], + [ + -47.38306148168521, + -22.222319212360112 + ], + [ + -47.38311366686879, + -22.22231660146747 + ], + [ + -47.38316652275755, + -22.222313741537516 + ], + [ + -47.383220175055776, + -22.222310869619825 + ], + [ + -47.383276809755905, + -22.22230772617561 + ], + [ + -47.38333906697063, + -22.22230523906176 + ], + [ + -47.383401356089855, + -22.22230426152363 + ], + [ + -47.383463867345185, + -22.22230424035638 + ], + [ + -47.38353230547132, + -22.222306223184773 + ], + [ + -47.38359977441173, + -22.22231109709185 + ], + [ + -47.38362952526556, + -22.222313918640015 + ], + [ + -47.38365776284638, + -22.22231623264401 + ], + [ + -47.38369559712741, + -22.222320167947238 + ], + [ + -47.383733372407654, + -22.222325130442787 + ], + [ + -47.38376809043424, + -22.22233065670923 + ], + [ + -47.38380149856949, + -22.222336337365206 + ], + [ + -47.38383347290692, + -22.22234248751885 + ], + [ + -47.383860445234234, + -22.22234773461742 + ], + [ + -47.38388645284853, + -22.22235275336723 + ], + [ + -47.38391619379356, + -22.222358518130026 + ], + [ + -47.383946822101976, + -22.222364743694005 + ], + [ + -47.38398107183041, + -22.222371913419742 + ], + [ + -47.384013703534045, + -22.22237973733319 + ], + [ + -47.38404692963516, + -22.222387730948334 + ], + [ + -47.38407675398584, + -22.22239592541228 + ], + [ + -47.38410177547551, + -22.22240227577389 + ], + [ + -47.384135827174866, + -22.222411371484075 + ], + [ + -47.384162245368074, + -22.222418992125206 + ], + [ + -47.38419145870985, + -22.222426584721557 + ], + [ + -47.384226078306256, + -22.222436886703193 + ], + [ + -47.38425507631406, + -22.222445806787285 + ], + [ + -47.38428285941251, + -22.222454324600857 + ], + [ + -47.3843065810338, + -22.222461719294596 + ], + [ + -47.38433153807031, + -22.222469076413162 + ], + [ + -47.38436424043922, + -22.222478822653443 + ], + [ + -47.38439359574736, + -22.2224886653693 + ], + [ + -47.38441344674214, + -22.22249488693738 + ], + [ + -47.38443968144497, + -22.222502489742173 + ], + [ + -47.38446627106925, + -22.222511017161494 + ], + [ + -47.384490502858924, + -22.222517871828785 + ], + [ + -47.384518927154744, + -22.222526837427317 + ], + [ + -47.384550178196385, + -22.2225361569456 + ], + [ + -47.38457523011072, + -22.222544973882535 + ], + [ + -47.38459759170327, + -22.222551680071568 + ], + [ + -47.38462522775318, + -22.222561364782724 + ], + [ + -47.38462649292084, + -22.222561802972468 + ], + [ + -47.38477928303665, + -22.222602500655228 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "26", + "Name": "Curvas", + "Length": 197.84031027986396, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "26", + "type": "LineString", + "coordinates": [ + [ + -47.382912818719895, + -22.22231170594829 + ], + [ + -47.38296229103078, + -22.222310568065442 + ], + [ + -47.38300936028396, + -22.222308358351285 + ], + [ + -47.38306068626114, + -22.222305691237754 + ], + [ + -47.383112854778744, + -22.22230308117938 + ], + [ + -47.38316567897695, + -22.22230022296458 + ], + [ + -47.38321932493693, + -22.222297351383993 + ], + [ + -47.38327606524296, + -22.222294202078718 + ], + [ + -47.38333863261565, + -22.222291702574864 + ], + [ + -47.38340123088256, + -22.222290720185637 + ], + [ + -47.38346409093133, + -22.2222906989008 + ], + [ + -47.38353309459037, + -22.222292698114718 + ], + [ + -47.3836010740304, + -22.222297608900522 + ], + [ + -47.38363089981295, + -22.22230043755514 + ], + [ + -47.38365920797846, + -22.222302757343602 + ], + [ + -47.38369742083817, + -22.222306732024723 + ], + [ + -47.38373561428521, + -22.222311749454708 + ], + [ + -47.38377062239053, + -22.222317321894938 + ], + [ + -47.38380427660236, + -22.2223230443936 + ], + [ + -47.38383643140356, + -22.22232922925911 + ], + [ + -47.38386340831887, + -22.222334477250428 + ], + [ + -47.38388940446709, + -22.222339493787793 + ], + [ + -47.38391922698841, + -22.222345274357536 + ], + [ + -47.383949968305146, + -22.222351522892044 + ], + [ + -47.38398448127718, + -22.222358747724595 + ], + [ + -47.384017330471934, + -22.222366623784875 + ], + [ + -47.38405080822939, + -22.22237467793959 + ], + [ + -47.384080725064806, + -22.222382897814654 + ], + [ + -47.384105693456156, + -22.22238923470028 + ], + [ + -47.38413998505164, + -22.222398394490465 + ], + [ + -47.38416635341596, + -22.222406000758095 + ], + [ + -47.38419562916314, + -22.222413609573856 + ], + [ + -47.3842305735142, + -22.222424008195144 + ], + [ + -47.38425963882281, + -22.222432948981847 + ], + [ + -47.38428744255382, + -22.222441473114106 + ], + [ + -47.38431108509379, + -22.222448843156148 + ], + [ + -47.38433595000123, + -22.22245617311602 + ], + [ + -47.38436892271729, + -22.222465999927664 + ], + [ + -47.38439838009613, + -22.22247587686762 + ], + [ + -47.38441792844433, + -22.2224820035823 + ], + [ + -47.38444421188049, + -22.22248962051014 + ], + [ + -47.38447075480388, + -22.22249813295247 + ], + [ + -47.38449495121937, + -22.22250497761326 + ], + [ + -47.384523478905635, + -22.222513975823453 + ], + [ + -47.38455497077188, + -22.222523367159294 + ], + [ + -47.38458003383969, + -22.22253218802187 + ], + [ + -47.384602385605824, + -22.222538891264065 + ], + [ + -47.384630324735504, + -22.222548682185963 + ], + [ + -47.38463103525086, + -22.222548928272357 + ], + [ + -47.38478934841079, + -22.22259109708879 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "27", + "Name": "Curvas", + "Length": 198.1733557083618, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "27", + "type": "LineString", + "coordinates": [ + [ + -47.3829199862315, + -22.222298995510116 + ], + [ + -47.38300858885466, + -22.222294835981604 + ], + [ + -47.38305989083731, + -22.222292170115356 + ], + [ + -47.38311204268896, + -22.22228956089123 + ], + [ + -47.38316483519665, + -22.222286704391582 + ], + [ + -47.383218474838536, + -22.222283833147003 + ], + [ + -47.38327532073028, + -22.22228067798178 + ], + [ + -47.38333819826089, + -22.22227816608795 + ], + [ + -47.38340110567541, + -22.22227717884765 + ], + [ + -47.38346431451754, + -22.222277157445212 + ], + [ + -47.383533883709404, + -22.222279173044623 + ], + [ + -47.383602373648955, + -22.222284120709183 + ], + [ + -47.383632274360224, + -22.22228695647029 + ], + [ + -47.38366065311038, + -22.22228928204322 + ], + [ + -47.38369924454869, + -22.22229329610223 + ], + [ + -47.38373785616245, + -22.222298368466607 + ], + [ + -47.38377315434645, + -22.222303987080622 + ], + [ + -47.38380705463483, + -22.222309751421967 + ], + [ + -47.383839389899755, + -22.22231597099931 + ], + [ + -47.38386637140304, + -22.22232121988339 + ], + [ + -47.3838923560852, + -22.222326234208342 + ], + [ + -47.38392226025411, + -22.222332030599517 + ], + [ + -47.38395311450785, + -22.222338302090044 + ], + [ + -47.38398789072342, + -22.222345582029384 + ], + [ + -47.384020957409255, + -22.222353510236534 + ], + [ + -47.384054686876304, + -22.222361624945414 + ], + [ + -47.38408469614314, + -22.222369870216976 + ], + [ + -47.38410961143619, + -22.222376193626587 + ], + [ + -47.38414414292776, + -22.222385417496813 + ], + [ + -47.384170461463164, + -22.222393009390903 + ], + [ + -47.384199799615764, + -22.22240063442613 + ], + [ + -47.38423506872141, + -22.222411129687014 + ], + [ + -47.384264201330815, + -22.222420091176325 + ], + [ + -47.38429202578322, + -22.222428621654977 + ], + [ + -47.38431558915304, + -22.222435967017635 + ], + [ + -47.38434036193141, + -22.222443269818783 + ], + [ + -47.38437360499462, + -22.222453177201796 + ], + [ + -47.38440316444411, + -22.22246308836586 + ], + [ + -47.38442241014579, + -22.222469120227192 + ], + [ + -47.38444874231528, + -22.22247675127804 + ], + [ + -47.384475238537775, + -22.22248524874338 + ], + [ + -47.384499399579106, + -22.22249208339767 + ], + [ + -47.38452803065578, + -22.222501114219515 + ], + [ + -47.3845597633466, + -22.22251057737291 + ], + [ + -47.38458483756788, + -22.222519402161115 + ], + [ + -47.38460717950761, + -22.222526102456488 + ], + [ + -47.38463557000072, + -22.222536051553284 + ], + [ + -47.38479941378334, + -22.22257969352185 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "28", + "Name": "Curvas", + "Length": 198.43069290515652, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "28", + "type": "LineString", + "coordinates": [ + [ + -47.38292783992922, + -22.222285068227627 + ], + [ + -47.38300781742566, + -22.222281313611887 + ], + [ + -47.3830590954138, + -22.222278648992916 + ], + [ + -47.38311123059949, + -22.222276040603063 + ], + [ + -47.38316399141664, + -22.222273185818572 + ], + [ + -47.38321762471953, + -22.222270314911157 + ], + [ + -47.38327457621789, + -22.222267153884786 + ], + [ + -47.38333776390634, + -22.222264629600996 + ], + [ + -47.38340098046843, + -22.22226363750961 + ], + [ + -47.38346453810386, + -22.222263615989597 + ], + [ + -47.38353467282841, + -22.222265647974538 + ], + [ + -47.3836036732674, + -22.222270632517834 + ], + [ + -47.38363364890735, + -22.222273475385396 + ], + [ + -47.38366209824217, + -22.2222758067428 + ], + [ + -47.383701068259015, + -22.222279860179693 + ], + [ + -47.383740098039404, + -22.222284987478503 + ], + [ + -47.383775686302045, + -22.222290652266313 + ], + [ + -47.3838098326669, + -22.222296458450316 + ], + [ + -47.38384234839553, + -22.22230271273951 + ], + [ + -47.383869334486796, + -22.222307962516346 + ], + [ + -47.38389530770288, + -22.222312974628856 + ], + [ + -47.38392529344557, + -22.22231878682647 + ], + [ + -47.38395626071008, + -22.222325081288027 + ], + [ + -47.38399130016915, + -22.222332416334165 + ], + [ + -47.38402458434603, + -22.22234039668815 + ], + [ + -47.38405856546772, + -22.222348571936124 + ], + [ + -47.38408866722086, + -22.222356842619238 + ], + [ + -47.38411352941561, + -22.22236315255286 + ], + [ + -47.384148300803226, + -22.22237244050311 + ], + [ + -47.384174569509746, + -22.22238001802367 + ], + [ + -47.38420397006773, + -22.22238765927832 + ], + [ + -47.38423956392792, + -22.222398251178827 + ], + [ + -47.384268763838115, + -22.22240723337074 + ], + [ + -47.38429660891979, + -22.22241577016705 + ], + [ + -47.38432009321159, + -22.22242309087904 + ], + [ + -47.38434477386092, + -22.222430366521483 + ], + [ + -47.38437828727121, + -22.222440354475854 + ], + [ + -47.384407948791335, + -22.222450299863997 + ], + [ + -47.38442689184656, + -22.22245623687197 + ], + [ + -47.384453272749354, + -22.222463882045872 + ], + [ + -47.38447972227097, + -22.22247236453422 + ], + [ + -47.38450384793812, + -22.222479189182003 + ], + [ + -47.384532582405214, + -22.2224882526155 + ], + [ + -47.38456455592056, + -22.22249778758644 + ], + [ + -47.38458964129532, + -22.22250661630028 + ], + [ + -47.38461197340864, + -22.22251331364882 + ], + [ + -47.38464013930097, + -22.2225231840373 + ], + [ + -47.38480947915429, + -22.22256828995442 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "29", + "Name": "Curvas", + "Length": 198.68803009563578, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "29", + "type": "LineString", + "coordinates": [ + [ + -47.38293569362549, + -22.222271140944883 + ], + [ + -47.38300704599692, + -22.222267791242135 + ], + [ + -47.38305829999056, + -22.222265127870447 + ], + [ + -47.38311041851031, + -22.222262520314867 + ], + [ + -47.3831631476369, + -22.222259667245538 + ], + [ + -47.38321677462249, + -22.222256796674056 + ], + [ + -47.383273831705765, + -22.222253629787783 + ], + [ + -47.383337329552, + -22.222251093114004 + ], + [ + -47.38340085526159, + -22.222250096171585 + ], + [ + -47.38346476169027, + -22.22225007453398 + ], + [ + -47.383535461947396, + -22.22225212290445 + ], + [ + -47.383604972885706, + -22.222257144326495 + ], + [ + -47.38363502345432, + -22.222259994300508 + ], + [ + -47.383663543373814, + -22.222262331442376 + ], + [ + -47.383702891969115, + -22.22226642425717 + ], + [ + -47.38374233991603, + -22.22227160649038 + ], + [ + -47.38377821825726, + -22.22227731745196 + ], + [ + -47.38381261069857, + -22.22228316547861 + ], + [ + -47.383845306890855, + -22.222289454479675 + ], + [ + -47.38387229757011, + -22.222294705149253 + ], + [ + -47.38389825932011, + -22.22229971504936 + ], + [ + -47.383928326712834, + -22.222305543068927 + ], + [ + -47.38395940691182, + -22.222311860485977 + ], + [ + -47.38399470961437, + -22.222319250638915 + ], + [ + -47.38402821128224, + -22.22232728313973 + ], + [ + -47.38406244411498, + -22.222335518942298 + ], + [ + -47.38409263829794, + -22.222343815021453 + ], + [ + -47.38411744739442, + -22.222350111479074 + ], + [ + -47.384152458678045, + -22.22235946350933 + ], + [ + -47.38417867755569, + -22.222367026656368 + ], + [ + -47.38420814051903, + -22.22237468413046 + ], + [ + -47.384244059133714, + -22.222385372670594 + ], + [ + -47.384273326344676, + -22.222394375565095 + ], + [ + -47.38430119215102, + -22.222402918708806 + ], + [ + -47.384324597269405, + -22.22241021474037 + ], + [ + -47.38434918578973, + -22.222417463224126 + ], + [ + -47.38438296954703, + -22.22242753174984 + ], + [ + -47.38441273313778, + -22.22243751136206 + ], + [ + -47.3844313735466, + -22.2224433535167 + ], + [ + -47.3844578031827, + -22.222451012813625 + ], + [ + -47.384484206003435, + -22.22245948032498 + ], + [ + -47.38450829629643, + -22.222466294966296 + ], + [ + -47.38453713415392, + -22.222475391011415 + ], + [ + -47.38456934849375, + -22.2224849977999 + ], + [ + -47.384594445021975, + -22.22249383043938 + ], + [ + -47.3846167673089, + -22.222500524841088 + ], + [ + -47.38464470860049, + -22.222510316521266 + ], + [ + -47.384819544523644, + -22.222556886386496 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "30", + "Name": "Curvas", + "Length": 198.94536728593886, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "30", + "type": "LineString", + "coordinates": [ + [ + -47.382943547320316, + -22.222257213661862 + ], + [ + -47.38300627456847, + -22.222254268872348 + ], + [ + -47.38305750456762, + -22.222251606747935 + ], + [ + -47.38310960642143, + -22.222249000026622 + ], + [ + -47.383162303857475, + -22.222246148672443 + ], + [ + -47.3832159245033, + -22.22224327843816 + ], + [ + -47.38327308719392, + -22.222240105690737 + ], + [ + -47.383336895197885, + -22.222237556626986 + ], + [ + -47.38340073005493, + -22.222236554833522 + ], + [ + -47.38346498527677, + -22.22223653307833 + ], + [ + -47.38353625106637, + -22.222238597834348 + ], + [ + -47.383606272503904, + -22.22224365613513 + ], + [ + -47.38363639800118, + -22.2222465132156 + ], + [ + -47.38366498850531, + -22.222248856141935 + ], + [ + -47.383704715679, + -22.222252988334613 + ], + [ + -47.38374458179239, + -22.22225822550224 + ], + [ + -47.38378075021213, + -22.22226398263762 + ], + [ + -47.38381538872983, + -22.222269872506917 + ], + [ + -47.38384826538575, + -22.22227619621983 + ], + [ + -47.383875260653, + -22.22228144778215 + ], + [ + -47.383901210936926, + -22.222286455469824 + ], + [ + -47.383931359900934, + -22.222292299295315 + ], + [ + -47.38396255311311, + -22.222298639683903 + ], + [ + -47.383998119059065, + -22.22230608494362 + ], + [ + -47.38403183821789, + -22.222314169591257 + ], + [ + -47.38406632270364, + -22.222322465932482 + ], + [ + -47.38409660937442, + -22.22233078742362 + ], + [ + -47.384121365372614, + -22.22233707040525 + ], + [ + -47.384156616552204, + -22.222346486515516 + ], + [ + -47.38418278560098, + -22.222354035289026 + ], + [ + -47.38421231096968, + -22.222361708982525 + ], + [ + -47.3842485543388, + -22.22237249416227 + ], + [ + -47.38427788885052, + -22.22238151775936 + ], + [ + -47.38430577528286, + -22.22239006721972 + ], + [ + -47.38432910132652, + -22.222397338601635 + ], + [ + -47.38435359771784, + -22.22240455992669 + ], + [ + -47.38438765182213, + -22.222414709023738 + ], + [ + -47.38441751748348, + -22.22242472286003 + ], + [ + -47.38443585524593, + -22.22243047016134 + ], + [ + -47.38446233361534, + -22.222438143581304 + ], + [ + -47.38448868973521, + -22.222446596115677 + ], + [ + -47.38451274465404, + -22.222453400750492 + ], + [ + -47.38454168590191, + -22.222462529407256 + ], + [ + -47.38457414106619, + -22.222472208013286 + ], + [ + -47.384599248747875, + -22.22248104457838 + ], + [ + -47.38462156120839, + -22.22248773603325 + ], + [ + -47.384649277899285, + -22.222497449005136 + ], + [ + -47.38482960989139, + -22.22254548281807 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "31", + "Name": "Curvas", + "Length": 199.2027044752691, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "31", + "type": "LineString", + "coordinates": [ + [ + -47.38295140101364, + -22.22224328637866 + ], + [ + -47.38300550314031, + -22.222240746502518 + ], + [ + -47.38305670914493, + -22.222238085625378 + ], + [ + -47.38310879433281, + -22.222235479738323 + ], + [ + -47.38316146007833, + -22.22223263009928 + ], + [ + -47.383215074407595, + -22.222229760200925 + ], + [ + -47.38327234268235, + -22.22222658159366 + ], + [ + -47.383336460843964, + -22.222224020139976 + ], + [ + -47.3834006048484, + -22.222223013495423 + ], + [ + -47.38346520886335, + -22.22222299162269 + ], + [ + -47.383537040185324, + -22.22222507276421 + ], + [ + -47.38360757212198, + -22.222230167943756 + ], + [ + -47.383637772547885, + -22.222233032130692 + ], + [ + -47.38366643363663, + -22.22223538084152 + ], + [ + -47.38370653938866, + -22.222239552412063 + ], + [ + -47.38374682366843, + -22.222244844514076 + ], + [ + -47.38378328216664, + -22.222250647823223 + ], + [ + -47.38381816676069, + -22.22225657953518 + ], + [ + -47.38385122388021, + -22.222262937959933 + ], + [ + -47.38387822373544, + -22.22226819041502 + ], + [ + -47.38390416255331, + -22.222273195890274 + ], + [ + -47.383934393169774, + -22.222279055538188 + ], + [ + -47.38396569931391, + -22.22228541888179 + ], + [ + -47.38400152850323, + -22.22229291924828 + ], + [ + -47.38403546515298, + -22.222301056042767 + ], + [ + -47.38407020135123, + -22.222309412938984 + ], + [ + -47.384100580450266, + -22.22231775982574 + ], + [ + -47.38412528335019, + -22.222324029331396 + ], + [ + -47.38416077442569, + -22.222333509521622 + ], + [ + -47.3841868936456, + -22.222341043921638 + ], + [ + -47.38421648141967, + -22.22234873383458 + ], + [ + -47.38425304954316, + -22.222359615653843 + ], + [ + -47.38428245135561, + -22.222368659953545 + ], + [ + -47.38431035851588, + -22.22237721576232 + ], + [ + -47.38433360538292, + -22.22238446246284 + ], + [ + -47.38435800964525, + -22.2223916566292 + ], + [ + -47.38439233409648, + -22.222401886297554 + ], + [ + -47.3844223018284, + -22.222411934357922 + ], + [ + -47.38444033694457, + -22.222417586805935 + ], + [ + -47.384466864047255, + -22.222425274348907 + ], + [ + -47.38449317346626, + -22.222433711906298 + ], + [ + -47.38451719301094, + -22.222440506534642 + ], + [ + -47.384546237649175, + -22.222449667803044 + ], + [ + -47.384578933637854, + -22.22245941822659 + ], + [ + -47.384604052472994, + -22.222468258717278 + ], + [ + -47.38462635510711, + -22.222474947225354 + ], + [ + -47.38465384719734, + -22.22248458148892 + ], + [ + -47.384839675257545, + -22.22253407924916 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "32", + "Name": "Curvas", + "Length": 199.46004165920763, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "32", + "type": "LineString", + "coordinates": [ + [ + -47.38295925470557, + -22.222229359095092 + ], + [ + -47.38300473171242, + -22.22222722413266 + ], + [ + -47.383055913722565, + -22.22222456450279 + ], + [ + -47.383107982244496, + -22.222221959450003 + ], + [ + -47.383160616299485, + -22.222219111526112 + ], + [ + -47.38321422428823, + -22.222216241965 + ], + [ + -47.383271598171056, + -22.22221305749652 + ], + [ + -47.38333602649029, + -22.222210483652905 + ], + [ + -47.38340047964204, + -22.2222094721573 + ], + [ + -47.38346543245003, + -22.222209450167007 + ], + [ + -47.38353782930426, + -22.222211547694087 + ], + [ + -47.38360887173994, + -22.22221667975237 + ], + [ + -47.383639147094485, + -22.222219551045775 + ], + [ + -47.383667878767824, + -22.22222190554106 + ], + [ + -47.3837083630981, + -22.22222611648949 + ], + [ + -47.38374906554419, + -22.22223146352592 + ], + [ + -47.3837858141208, + -22.22223731300885 + ], + [ + -47.383820944791154, + -22.222243286563437 + ], + [ + -47.383854182374236, + -22.222249679700035 + ], + [ + -47.38388118681744, + -22.22225493304787 + ], + [ + -47.38390711416925, + -22.22225993631069 + ], + [ + -47.38393742635454, + -22.222265811764046 + ], + [ + -47.38396884551426, + -22.222272198079658 + ], + [ + -47.384004937946884, + -22.222279753552918 + ], + [ + -47.38403909208752, + -22.222287942494233 + ], + [ + -47.384074079937164, + -22.222296359928652 + ], + [ + -47.384104551525496, + -22.2223047322278 + ], + [ + -47.384129201327156, + -22.222310988257473 + ], + [ + -47.384164932298546, + -22.222320532527686 + ], + [ + -47.3841910016896, + -22.222328052554186 + ], + [ + -47.384220651869, + -22.222335758686526 + ], + [ + -47.38425754474681, + -22.222346737145372 + ], + [ + -47.38428701386, + -22.222355802147664 + ], + [ + -47.384314941643005, + -22.222364364272075 + ], + [ + -47.38433810943861, + -22.22237158632396 + ], + [ + -47.38436242157195, + -22.22237875333164 + ], + [ + -47.38439701637008, + -22.2223890635713 + ], + [ + -47.38442708617257, + -22.222399145855732 + ], + [ + -47.38444481864248, + -22.222404703450437 + ], + [ + -47.384471394478446, + -22.222412405116447 + ], + [ + -47.38449765719661, + -22.222420827696833 + ], + [ + -47.38452164136715, + -22.22242761231872 + ], + [ + -47.38455078939572, + -22.222436806198736 + ], + [ + -47.38458372620875, + -22.22244662843979 + ], + [ + -47.38460885619736, + -22.22245547285611 + ], + [ + -47.38463114900507, + -22.222462158417354 + ], + [ + -47.38465841649468, + -22.222471713972645 + ], + [ + -47.38484974062209, + -22.222522675679752 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "33", + "Name": "Curvas", + "Length": 199.72955099262862, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "33", + "type": "LineString", + "coordinates": [ + [ + -47.382967000971476, + -22.22221562231184 + ], + [ + -47.38305511830046, + -22.222211043380174 + ], + [ + -47.38310717015644, + -22.22220843916164 + ], + [ + -47.38315977252095, + -22.222205592952893 + ], + [ + -47.383213374193886, + -22.22220272372767 + ], + [ + -47.38327085366004, + -22.222199533399383 + ], + [ + -47.38333559213682, + -22.222196947165813 + ], + [ + -47.38340035443583, + -22.22219593081917 + ], + [ + -47.38346565603677, + -22.222195908711324 + ], + [ + -47.38353861842316, + -22.222198022623953 + ], + [ + -47.38361017135777, + -22.22220319156099 + ], + [ + -47.38364052164094, + -22.22220606996087 + ], + [ + -47.38366932389887, + -22.22220843024061 + ], + [ + -47.38371018680731, + -22.222212680566912 + ], + [ + -47.38375130741963, + -22.222218082537733 + ], + [ + -47.38378834607462, + -22.22222397819441 + ], + [ + -47.38382372282121, + -22.222229993591665 + ], + [ + -47.38385714086782, + -22.222236421440115 + ], + [ + -47.38388414989899, + -22.22224167568069 + ], + [ + -47.38391006578474, + -22.222246676731096 + ], + [ + -47.38394045962488, + -22.22225256800738 + ], + [ + -47.38397199171414, + -22.22225897727748 + ], + [ + -47.38400834739004, + -22.222266587857508 + ], + [ + -47.384042719021465, + -22.222274828945636 + ], + [ + -47.384077958585024, + -22.22228330693546 + ], + [ + -47.3841085226001, + -22.222291704629797 + ], + [ + -47.384133119303506, + -22.22229794718351 + ], + [ + -47.38416909017073, + -22.222307555533693 + ], + [ + -47.384195109732936, + -22.22231506118666 + ], + [ + -47.384224822317684, + -22.22232278353844 + ], + [ + -47.384262039949746, + -22.222333858636844 + ], + [ + -47.38429157636365, + -22.22234294434171 + ], + [ + -47.38431952487782, + -22.222351512815557 + ], + [ + -47.38434261349357, + -22.222358710185013 + ], + [ + -47.38436683349794, + -22.22236585003403 + ], + [ + -47.38440169864292, + -22.222376240844966 + ], + [ + -47.38443187051597, + -22.222386357353475 + ], + [ + -47.384449300339654, + -22.222391820094884 + ], + [ + -47.3844759249089, + -22.222399535883934 + ], + [ + -47.38450214092622, + -22.222407943487344 + ], + [ + -47.38452608972264, + -22.222414718102716 + ], + [ + -47.3845553411415, + -22.22242394459437 + ], + [ + -47.38458851877886, + -22.222433838652933 + ], + [ + -47.38461365992095, + -22.22244268699486 + ], + [ + -47.384635942902264, + -22.222449369609276 + ], + [ + -47.384662985791294, + -22.222458846456316 + ], + [ + -47.38485980598505, + -22.22251127210985 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "34", + "Name": "Curvas", + "Length": 199.98403930246627, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "34", + "type": "LineString", + "coordinates": [ + [ + -47.38297487980302, + -22.22220165044147 + ], + [ + -47.38305432287866, + -22.22219752225751 + ], + [ + -47.38310635806871, + -22.22219491887324 + ], + [ + -47.38315892874269, + -22.222192074379645 + ], + [ + -47.383212524074345, + -22.222189205491688 + ], + [ + -47.3832701091493, + -22.22218600930218 + ], + [ + -47.38333515778356, + -22.22218341067868 + ], + [ + -47.38340022922979, + -22.222182389481 + ], + [ + -47.383465879623635, + -22.222182367255606 + ], + [ + -47.38353940754206, + -22.222184497553805 + ], + [ + -47.3836114709755, + -22.222189703369587 + ], + [ + -47.383641896187264, + -22.222192588875927 + ], + [ + -47.38367076902978, + -22.222194954940136 + ], + [ + -47.38371201051632, + -22.222199244644322 + ], + [ + -47.38375354929478, + -22.222204701549543 + ], + [ + -47.38379087802807, + -22.22221064338 + ], + [ + -47.38382650085088, + -22.222216700619885 + ], + [ + -47.38386009936097, + -22.222223163180168 + ], + [ + -47.38388711298012, + -22.222228418313495 + ], + [ + -47.38391301739982, + -22.222233417151465 + ], + [ + -47.38394349280634, + -22.222239324232696 + ], + [ + -47.38397513791354, + -22.222245756475292 + ], + [ + -47.38401175683267, + -22.222253422162076 + ], + [ + -47.3840463459549, + -22.222261715397018 + ], + [ + -47.38408183716828, + -22.222270253924634 + ], + [ + -47.384112493674095, + -22.22227867703176 + ], + [ + -47.38413703727926, + -22.222284906109486 + ], + [ + -47.384173248042266, + -22.222294578539625 + ], + [ + -47.384199217775645, + -22.222302069819094 + ], + [ + -47.384228992765706, + -22.222309808390285 + ], + [ + -47.384266535151966, + -22.222320980128238 + ], + [ + -47.38429613886659, + -22.222330086535685 + ], + [ + -47.38432410800022, + -22.222338661324134 + ], + [ + -47.384347117547826, + -22.22234583404599 + ], + [ + -47.38437124542325, + -22.22235294673633 + ], + [ + -47.38440638091502, + -22.222363418118558 + ], + [ + -47.38443665485861, + -22.22237356885111 + ], + [ + -47.38445378203615, + -22.222378936739258 + ], + [ + -47.38448045533865, + -22.22238666665133 + ], + [ + -47.38450662465514, + -22.22239505927775 + ], + [ + -47.38453053807742, + -22.222401823886642 + ], + [ + -47.38455989288659, + -22.222411082989918 + ], + [ + -47.384593311348226, + -22.222421048865964 + ], + [ + -47.384618463643775, + -22.222429901133523 + ], + [ + -47.38464073679869, + -22.222436580801112 + ], + [ + -47.38466755508718, + -22.222445978939888 + ], + [ + -47.384869871346396, + -22.222499868539447 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "35", + "Name": "Curvas", + "Length": 200.23852760380078, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "35", + "type": "LineString", + "coordinates": [ + [ + -47.38298275863312, + -22.222187678570812 + ], + [ + -47.383053527457136, + -22.222184001134806 + ], + [ + -47.38310554598124, + -22.222181398584784 + ], + [ + -47.383158084964705, + -22.222178555806344 + ], + [ + -47.38321167398136, + -22.222175687254218 + ], + [ + -47.38326936463879, + -22.22217248520497 + ], + [ + -47.38333472343051, + -22.222169874191543 + ], + [ + -47.3834001040239, + -22.222168848142847 + ], + [ + -47.38346610321057, + -22.22216882579991 + ], + [ + -47.38354019666092, + -22.222170972483635 + ], + [ + -47.38361277059311, + -22.222176215178187 + ], + [ + -47.383643270733465, + -22.222179107790968 + ], + [ + -47.383672214160526, + -22.222181479639683 + ], + [ + -47.3837138342251, + -22.222185808721715 + ], + [ + -47.38375579116963, + -22.22219132056133 + ], + [ + -47.38379340998116, + -22.22219730856557 + ], + [ + -47.38382927888013, + -22.222203407648045 + ], + [ + -47.38386305785369, + -22.22220990492017 + ], + [ + -47.383890076060815, + -22.222215160946252 + ], + [ + -47.38391596901446, + -22.222220157571815 + ], + [ + -47.38394652607819, + -22.22222608047646 + ], + [ + -47.38397828411248, + -22.222232535673072 + ], + [ + -47.38401516627474, + -22.222240256466616 + ], + [ + -47.38404997288775, + -22.222248601848328 + ], + [ + -47.384085715816404, + -22.222257200931743 + ], + [ + -47.38411646474745, + -22.222265649433663 + ], + [ + -47.38414095525438, + -22.222271865035406 + ], + [ + -47.38417740591314, + -22.222281601545504 + ], + [ + -47.384203325817694, + -22.222289078451468 + ], + [ + -47.38423316321306, + -22.222296833242076 + ], + [ + -47.38427103035349, + -22.222308101619564 + ], + [ + -47.38430070136881, + -22.22231722872959 + ], + [ + -47.384328691236824, + -22.222325809868487 + ], + [ + -47.38435162160134, + -22.222332957906893 + ], + [ + -47.384375657347846, + -22.22234004343857 + ], + [ + -47.38441106318636, + -22.222350595392065 + ], + [ + -47.38444143920047, + -22.22236078034867 + ], + [ + -47.384458263731915, + -22.222366053383553 + ], + [ + -47.38448498576767, + -22.22237379741866 + ], + [ + -47.38451110838333, + -22.2223821750681 + ], + [ + -47.3845349864315, + -22.22238892967052 + ], + [ + -47.38456444463095, + -22.22239822138539 + ], + [ + -47.384598103916815, + -22.222408259078943 + ], + [ + -47.38462326736582, + -22.222417115272133 + ], + [ + -47.38464553069434, + -22.222423791992867 + ], + [ + -47.38467212438232, + -22.222433111423403 + ], + [ + -47.38487993670614, + -22.222488464968563 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "36", + "Name": "Curvas", + "Length": 200.4930159087601, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "36", + "type": "LineString", + "coordinates": [ + [ + -47.382990637461745, + -22.222173706699902 + ], + [ + -47.3830527320359, + -22.22217048001207 + ], + [ + -47.38310473389407, + -22.222167878296315 + ], + [ + -47.38315724118704, + -22.222165037233022 + ], + [ + -47.383210823861646, + -22.222162169018222 + ], + [ + -47.3832686201286, + -22.222158961107688 + ], + [ + -47.38333428907768, + -22.222156337704355 + ], + [ + -47.38339997881817, + -22.222155306804627 + ], + [ + -47.38346632679761, + -22.222155284344154 + ], + [ + -47.383540985779774, + -22.22215744741346 + ], + [ + -47.38361407021059, + -22.22216272698677 + ], + [ + -47.38364464527953, + -22.222165626706012 + ], + [ + -47.38367365929114, + -22.222168004339192 + ], + [ + -47.38371565793366, + -22.222172372799132 + ], + [ + -47.38375803304419, + -22.222177939573115 + ], + [ + -47.3837959419339, + -22.222183973751125 + ], + [ + -47.383832056908986, + -22.22219011467623 + ], + [ + -47.38386601634597, + -22.222196646660176 + ], + [ + -47.38389303914107, + -22.222201903579013 + ], + [ + -47.383918920628666, + -22.222206897992134 + ], + [ + -47.38394955925637, + -22.22221283670124 + ], + [ + -47.383981430310946, + -22.22221931487083 + ], + [ + -47.384018575716325, + -22.222227090771117 + ], + [ + -47.38405359982004, + -22.22223548829961 + ], + [ + -47.38408959439703, + -22.22224414792042 + ], + [ + -47.38412043582019, + -22.222252621835523 + ], + [ + -47.384144873228905, + -22.222258823961276 + ], + [ + -47.38418156378338, + -22.22226862455134 + ], + [ + -47.3842074338591, + -22.22227608708379 + ], + [ + -47.384237333659776, + -22.22228385809379 + ], + [ + -47.38427552555428, + -22.222295223110816 + ], + [ + -47.38430526387028, + -22.222304370923418 + ], + [ + -47.384333274354525, + -22.222312958375912 + ], + [ + -47.38435612565415, + -22.222320081767737 + ], + [ + -47.38438006927175, + -22.222327140140738 + ], + [ + -47.38441574545698, + -22.22233777266549 + ], + [ + -47.38444622354158, + -22.22234799184615 + ], + [ + -47.38446274542699, + -22.222353170027787 + ], + [ + -47.384489516195984, + -22.222360928185907 + ], + [ + -47.384515592110816, + -22.222369290858357 + ], + [ + -47.38453943478487, + -22.222376035454303 + ], + [ + -47.38456899637459, + -22.222385359780787 + ], + [ + -47.38460289648465, + -22.22239546929181 + ], + [ + -47.38462807108711, + -22.222404329410633 + ], + [ + -47.384650324589224, + -22.222411003184536 + ], + [ + -47.384676693676745, + -22.22242024390683 + ], + [ + -47.38489000206429, + -22.222477061397186 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "37", + "Name": "Curvas", + "Length": 200.7406948584605, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "37", + "type": "LineString", + "coordinates": [ + [ + -47.382998576216394, + -22.222159628556668 + ], + [ + -47.38310392180717, + -22.222154358007803 + ], + [ + -47.38315639740967, + -22.22215151865966 + ], + [ + -47.38320997377003, + -22.222148650780642 + ], + [ + -47.38326787561869, + -22.222145437010376 + ], + [ + -47.383333854725095, + -22.222142801217153 + ], + [ + -47.38339985361259, + -22.222141765466404 + ], + [ + -47.38346655038473, + -22.222141742888393 + ], + [ + -47.38354177489861, + -22.22214392234329 + ], + [ + -47.383615369827965, + -22.222149238795343 + ], + [ + -47.38364601982544, + -22.222152145621067 + ], + [ + -47.383675104421606, + -22.22215452903871 + ], + [ + -47.383717481641995, + -22.222158936876525 + ], + [ + -47.383760274918444, + -22.22216455858489 + ], + [ + -47.38379847388626, + -22.222170638936632 + ], + [ + -47.38383483493743, + -22.22217682170438 + ], + [ + -47.38386897483781, + -22.222183388400136 + ], + [ + -47.3838960022209, + -22.22218864621173 + ], + [ + -47.38392187224243, + -22.222193638412442 + ], + [ + -47.38395259252969, + -22.22219959294541 + ], + [ + -47.383984576508915, + -22.222206094068536 + ], + [ + -47.384021985157354, + -22.222213925075557 + ], + [ + -47.384057226751764, + -22.22222237475087 + ], + [ + -47.384093473045304, + -22.222231094927817 + ], + [ + -47.38412440689231, + -22.222239594237326 + ], + [ + -47.38414879120281, + -22.222245782887132 + ], + [ + -47.38418572165295, + -22.222255647557116 + ], + [ + -47.38421154189986, + -22.222263095716038 + ], + [ + -47.384241504105816, + -22.222270882945484 + ], + [ + -47.38428002075434, + -22.222282344601975 + ], + [ + -47.38430982637101, + -22.222291513117177 + ], + [ + -47.38433785759294, + -22.22230010692113 + ], + [ + -47.38436062970626, + -22.22230720562851 + ], + [ + -47.38438448119494, + -22.22231423684285 + ], + [ + -47.38442042772683, + -22.22232494993884 + ], + [ + -47.38445100788192, + -22.22233520334352 + ], + [ + -47.384467227121334, + -22.22234028667196 + ], + [ + -47.38449404662359, + -22.222348058953088 + ], + [ + -47.38452007583759, + -22.222356406648583 + ], + [ + -47.38454388313754, + -22.22236314123804 + ], + [ + -47.38457354811751, + -22.222372498176135 + ], + [ + -47.384607689051705, + -22.222382679504594 + ], + [ + -47.384632874807615, + -22.222391543549033 + ], + [ + -47.384655118483344, + -22.222398214376135 + ], + [ + -47.38468126297046, + -22.222407376390212 + ], + [ + -47.38490006742085, + -22.222465657825296 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "38", + "Name": "Curvas", + "Length": 200.99628884021888, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "38", + "type": "LineString", + "coordinates": [ + [ + -47.38300644531124, + -22.222145673941377 + ], + [ + -47.38310310972058, + -22.222140837719248 + ], + [ + -47.38315555363259, + -22.22213800008626 + ], + [ + -47.38320912365014, + -22.222135132544594 + ], + [ + -47.38326713110905, + -22.22213191291303 + ], + [ + -47.38333342037271, + -22.2221292647299 + ], + [ + -47.38339972840717, + -22.22212822412814 + ], + [ + -47.38346677397195, + -22.22212820143261 + ], + [ + -47.383542564017425, + -22.2221303972731 + ], + [ + -47.38361666944521, + -22.222135750603908 + ], + [ + -47.38364739437124, + -22.22213866453609 + ], + [ + -47.38367654955193, + -22.222141053738195 + ], + [ + -47.38371930535012, + -22.22214550095389 + ], + [ + -47.383762516792395, + -22.222151177596647 + ], + [ + -47.38380100583829, + -22.222157304122153 + ], + [ + -47.38383761296549, + -22.222163528732516 + ], + [ + -47.383871933329225, + -22.22217013014009 + ], + [ + -47.38389896530029, + -22.222175388844438 + ], + [ + -47.38392482385577, + -22.222180378832714 + ], + [ + -47.3839556257046, + -22.22218634916965 + ], + [ + -47.383987722706436, + -22.222192873266234 + ], + [ + -47.38402539459789, + -22.222200759379987 + ], + [ + -47.384060853682946, + -22.22220926120207 + ], + [ + -47.38409735162334, + -22.222218041916033 + ], + [ + -47.38412837796381, + -22.222226566639083 + ], + [ + -47.384152709176114, + -22.222232741812906 + ], + [ + -47.38418987952186, + -22.222242670562842 + ], + [ + -47.38421564993998, + -22.22225010434825 + ], + [ + -47.38424567455121, + -22.222257907797104 + ], + [ + -47.3842845159537, + -22.22226946609309 + ], + [ + -47.38431438887104, + -22.22227865531086 + ], + [ + -47.38434244070595, + -22.222287255427403 + ], + [ + -47.38436513375763, + -22.222294329489202 + ], + [ + -47.38438889311745, + -22.222301333544877 + ], + [ + -47.38442510999594, + -22.222312127212117 + ], + [ + -47.3844557922215, + -22.222322414840853 + ], + [ + -47.38447170881498, + -22.222327403316054 + ], + [ + -47.38449857705045, + -22.2223351897202 + ], + [ + -47.38452455956365, + -22.222343522438702 + ], + [ + -47.3845483314895, + -22.222350247021687 + ], + [ + -47.3845780998597, + -22.222359636571387 + ], + [ + -47.384612481618, + -22.222369889717314 + ], + [ + -47.384637678527376, + -22.222378757687366 + ], + [ + -47.384659912376705, + -22.222385425567644 + ], + [ + -47.38468583226343, + -22.222394508873492 + ], + [ + -47.3849101327758, + -22.22245425425293 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "39", + "Name": "Curvas", + "Length": 201.2518828172826, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "39", + "type": "LineString", + "coordinates": [ + [ + -47.383014314404605, + -22.22213171932584 + ], + [ + -47.383102297634274, + -22.22212731743066 + ], + [ + -47.38315470985579, + -22.22212448151279 + ], + [ + -47.383208273559866, + -22.222121614306868 + ], + [ + -47.38326638659967, + -22.22211838881565 + ], + [ + -47.38333298602051, + -22.222115728242642 + ], + [ + -47.38339960320189, + -22.222114682789883 + ], + [ + -47.38346699755924, + -22.22211465997682 + ], + [ + -47.383543353136204, + -22.22211687220287 + ], + [ + -47.383617969062335, + -22.222122262412473 + ], + [ + -47.383648768916885, + -22.222125183451123 + ], + [ + -47.38367799468209, + -22.222127578437696 + ], + [ + -47.38372112905802, + -22.22213206503125 + ], + [ + -47.383764758666025, + -22.222137796608383 + ], + [ + -47.383803537789966, + -22.222143969307613 + ], + [ + -47.383840390993136, + -22.22215023576059 + ], + [ + -47.383874891820184, + -22.222156871880003 + ], + [ + -47.38390192837924, + -22.22216213147713 + ], + [ + -47.38392777546866, + -22.222167119252983 + ], + [ + -47.38395865897939, + -22.222173105414285 + ], + [ + -47.38399086890349, + -22.222179652463907 + ], + [ + -47.38402880403792, + -22.222187593684392 + ], + [ + -47.38406448061357, + -22.22219614765325 + ], + [ + -47.38410123027177, + -22.222204988923693 + ], + [ + -47.38413234903468, + -22.22221353904079 + ], + [ + -47.384156627148776, + -22.222219700738655 + ], + [ + -47.3841940373901, + -22.2222296935685 + ], + [ + -47.38421975797942, + -22.222237112980398 + ], + [ + -47.38424984499594, + -22.222244932648664 + ], + [ + -47.38428901115235, + -22.22225658758414 + ], + [ + -47.38431895137033, + -22.222265797504477 + ], + [ + -47.38434702394609, + -22.222274403973465 + ], + [ + -47.38436963780828, + -22.222281453349837 + ], + [ + -47.384393305039275, + -22.22228843024687 + ], + [ + -47.38442979226428, + -22.22229930448534 + ], + [ + -47.3844605765603, + -22.222309626338106 + ], + [ + -47.38447619050789, + -22.222314519960097 + ], + [ + -47.38450310747658, + -22.22232232048722 + ], + [ + -47.384529043289, + -22.22233063822878 + ], + [ + -47.38455277984074, + -22.22233735280527 + ], + [ + -47.38458265160114, + -22.22234677496657 + ], + [ + -47.38461727418352, + -22.222357099929948 + ], + [ + -47.38464248224635, + -22.222365971825614 + ], + [ + -47.38466470626929, + -22.22237263675905 + ], + [ + -47.38469040155566, + -22.222381641356716 + ], + [ + -47.38492019812916, + -22.22244285068006 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "40", + "Name": "Curvas", + "Length": 201.50747679416517, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "40", + "type": "LineString", + "coordinates": [ + [ + -47.383022183496536, + -22.222117764710017 + ], + [ + -47.38310148554825, + -22.222113797142036 + ], + [ + -47.38315386607929, + -22.222110962939308 + ], + [ + -47.3832074234398, + -22.222108096070787 + ], + [ + -47.38326564209058, + -22.22210486471823 + ], + [ + -47.38333255166856, + -22.222102191755337 + ], + [ + -47.38339947799678, + -22.222101141451574 + ], + [ + -47.38346722114664, + -22.222101118521003 + ], + [ + -47.38354414225499, + -22.22210334713266 + ], + [ + -47.38361926867935, + -22.22210877422102 + ], + [ + -47.38365014346241, + -22.222111702366128 + ], + [ + -47.38367943981211, + -22.222114103137166 + ], + [ + -47.383722952765694, + -22.2221186291086 + ], + [ + -47.38376700053938, + -22.222124415620108 + ], + [ + -47.383806069741276, + -22.222130634493094 + ], + [ + -47.38384316902039, + -22.222136942788687 + ], + [ + -47.38387785031073, + -22.222143613619917 + ], + [ + -47.38390489145776, + -22.222148874109784 + ], + [ + -47.38393072708112, + -22.222153859673206 + ], + [ + -47.38396169215107, + -22.222159861638005 + ], + [ + -47.383994015100065, + -22.222166431661556 + ], + [ + -47.38403221347742, + -22.222174427988758 + ], + [ + -47.38406810754362, + -22.222183034104365 + ], + [ + -47.384105108847244, + -22.22219193591144 + ], + [ + -47.38413632010494, + -22.222200511442445 + ], + [ + -47.38416054512086, + -22.222206659664348 + ], + [ + -47.38419819525771, + -22.222216716574103 + ], + [ + -47.384223866018246, + -22.22222412161249 + ], + [ + -47.38425401544002, + -22.222231957500153 + ], + [ + -47.38429350635028, + -22.22224370907511 + ], + [ + -47.38432351386891, + -22.222252939698013 + ], + [ + -47.38435160705441, + -22.222261552478574 + ], + [ + -47.384374141858224, + -22.22226857721039 + ], + [ + -47.38439771696038, + -22.222275526948767 + ], + [ + -47.3844344745319, + -22.22228648175846 + ], + [ + -47.38446536089834, + -22.222296837835252 + ], + [ + -47.3844806722001, + -22.22230163660404 + ], + [ + -47.38450763790201, + -22.22230945125419 + ], + [ + -47.38453352701364, + -22.222317754018768 + ], + [ + -47.384557228191284, + -22.222324458588787 + ], + [ + -47.38458720334189, + -22.22233391336168 + ], + [ + -47.384622066748285, + -22.222344310142482 + ], + [ + -47.38464728596456, + -22.222353185963776 + ], + [ + -47.384669500161124, + -22.222359847950393 + ], + [ + -47.38469497084718, + -22.222368773839847 + ], + [ + -47.38493026348092, + -22.222431447106697 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "41", + "Name": "Curvas", + "Length": 201.76307076281847, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "41", + "type": "LineString", + "coordinates": [ + [ + -47.38303005258701, + -22.222103810093916 + ], + [ + -47.3831006734625, + -22.22210027685336 + ], + [ + -47.3831530223031, + -22.222097444365787 + ], + [ + -47.38320657335087, + -22.22209457783298 + ], + [ + -47.38326489758174, + -22.222091340620807 + ], + [ + -47.38333211731681, + -22.22208865526802 + ], + [ + -47.38339935279184, + -22.222087600113273 + ], + [ + -47.38346744473411, + -22.222087577065196 + ], + [ + -47.38354493137372, + -22.222089822062433 + ], + [ + -47.38362056829624, + -22.22209528602955 + ], + [ + -47.3836515180078, + -22.222098221281122 + ], + [ + -47.383680884941995, + -22.222100627836642 + ], + [ + -47.38372477647316, + -22.22210519318596 + ], + [ + -47.38376924241242, + -22.222111034631812 + ], + [ + -47.38380860169226, + -22.222117299678544 + ], + [ + -47.383845947047234, + -22.222123649816755 + ], + [ + -47.38388080880083, + -22.22213035535978 + ], + [ + -47.38390785453582, + -22.222135616742392 + ], + [ + -47.383933678693154, + -22.222140600093404 + ], + [ + -47.383964725427255, + -22.222146617883038 + ], + [ + -47.38399716129617, + -22.222153210859176 + ], + [ + -47.38403562291639, + -22.222161262293053 + ], + [ + -47.38407173447311, + -22.222169920555448 + ], + [ + -47.384108987495814, + -22.22217888291939 + ], + [ + -47.38414029117456, + -22.222187483844042 + ], + [ + -47.38416446309232, + -22.22219361858995 + ], + [ + -47.38420235312467, + -22.222203739579616 + ], + [ + -47.38422797405642, + -22.222211130244524 + ], + [ + -47.38425818588343, + -22.222218982351595 + ], + [ + -47.38429800154748, + -22.222230830565987 + ], + [ + -47.38432807636676, + -22.222240081891474 + ], + [ + -47.38435619029632, + -22.22224870102547 + ], + [ + -47.38437864590746, + -22.222255701070868 + ], + [ + -47.384402128880765, + -22.222262623650614 + ], + [ + -47.38443915679877, + -22.22227365903149 + ], + [ + -47.38447014523563, + -22.22228404933232 + ], + [ + -47.384485153891596, + -22.22228875324793 + ], + [ + -47.38451216832671, + -22.222296582021094 + ], + [ + -47.384538010737536, + -22.222304869808703 + ], + [ + -47.38456167654111, + -22.222311564372262 + ], + [ + -47.384591755081914, + -22.22232105175676 + ], + [ + -47.38462685931228, + -22.22233152035497 + ], + [ + -47.384652089682, + -22.222340400101857 + ], + [ + -47.38467429405217, + -22.22234705914165 + ], + [ + -47.384699540137944, + -22.222355906322907 + ], + [ + -47.384940328831085, + -22.222420043532818 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "42", + "Name": "Curvas", + "Length": 202.01866473531098, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "42", + "type": "LineString", + "coordinates": [ + [ + -47.38303792167602, + -22.222089855477563 + ], + [ + -47.38309986137707, + -22.222086756564657 + ], + [ + -47.38315217852719, + -22.22208392579223 + ], + [ + -47.383205723230624, + -22.222081059596864 + ], + [ + -47.38326415307319, + -22.222077816523303 + ], + [ + -47.383331682965284, + -22.22207511878066 + ], + [ + -47.38339922758705, + -22.22207405877492 + ], + [ + -47.383467668321686, + -22.222074035609342 + ], + [ + -47.38354572049245, + -22.222076296992192 + ], + [ + -47.38362186791301, + -22.222081797838072 + ], + [ + -47.383652892553066, + -22.222084740196113 + ], + [ + -47.383682330071736, + -22.222087152536098 + ], + [ + -47.3837266001804, + -22.22209175726329 + ], + [ + -47.38377148428518, + -22.222097653643516 + ], + [ + -47.38381113364287, + -22.222103964863994 + ], + [ + -47.38384872507369, + -22.22211035684481 + ], + [ + -47.38388376729051, + -22.222117097099638 + ], + [ + -47.38391081761347, + -22.222122359375003 + ], + [ + -47.38393663030474, + -22.222127340513577 + ], + [ + -47.38396775859574, + -22.222133374106246 + ], + [ + -47.3840003074918, + -22.222139990056764 + ], + [ + -47.38403903235484, + -22.222148096597348 + ], + [ + -47.38407536140205, + -22.22215680700649 + ], + [ + -47.38411286606877, + -22.22216582990668 + ], + [ + -47.38414426224356, + -22.22217445624559 + ], + [ + -47.38416838106316, + -22.222180577515527 + ], + [ + -47.384206510990964, + -22.222190762585107 + ], + [ + -47.38423208209395, + -22.22219813887651 + ], + [ + -47.3842623563262, + -22.222206007202978 + ], + [ + -47.384302496743985, + -22.222217952056816 + ], + [ + -47.38433263886388, + -22.222227224084858 + ], + [ + -47.38436077339997, + -22.222235849529444 + ], + [ + -47.38438314995599, + -22.222242824931275 + ], + [ + -47.38440654080047, + -22.222249720352377 + ], + [ + -47.384443839064886, + -22.222260836304446 + ], + [ + -47.38447492957215, + -22.2222712608293 + ], + [ + -47.384489635582376, + -22.222275869891735 + ], + [ + -47.38451669875069, + -22.222283712787892 + ], + [ + -47.384542494460746, + -22.22229198559854 + ], + [ + -47.38456612489024, + -22.222298670155656 + ], + [ + -47.38459630682121, + -22.222308190151722 + ], + [ + -47.3846316518755, + -22.222318730567345 + ], + [ + -47.384656893398684, + -22.222327614239855 + ], + [ + -47.38467908794246, + -22.22233427033283 + ], + [ + -47.384704109428, + -22.22234303880589 + ], + [ + -47.38495039417965, + -22.222408639958473 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "43", + "Name": "Curvas", + "Length": 202.28863535279453, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "43", + "type": "LineString", + "coordinates": [ + [ + -47.38304566448349, + -22.22207612479928 + ], + [ + -47.38315133475157, + -22.2220704072186 + ], + [ + -47.38320487314306, + -22.222067541358918 + ], + [ + -47.38326340856493, + -22.222064292425788 + ], + [ + -47.38333124861397, + -22.222061582293264 + ], + [ + -47.3833991023824, + -22.222060517436567 + ], + [ + -47.38346789190935, + -22.22206049415348 + ], + [ + -47.383546509611186, + -22.222062771921934 + ], + [ + -47.38362316752967, + -22.222068309646627 + ], + [ + -47.38365426709818, + -22.222071259111114 + ], + [ + -47.3836837752013, + -22.22207367723557 + ], + [ + -47.38372842388742, + -22.22207832134062 + ], + [ + -47.38377372615763, + -22.22208427265519 + ], + [ + -47.38381366559311, + -22.22209063004941 + ], + [ + -47.38385150309972, + -22.222097063872816 + ], + [ + -47.38388672577973, + -22.22210383883946 + ], + [ + -47.38391378069067, + -22.222109102007554 + ], + [ + -47.38393958191591, + -22.22211408093376 + ], + [ + -47.383970791873324, + -22.222120130351666 + ], + [ + -47.384003453686965, + -22.222126769254295 + ], + [ + -47.38404244179279, + -22.2221349309016 + ], + [ + -47.384078988330415, + -22.222143693457525 + ], + [ + -47.38411674471741, + -22.222152776914864 + ], + [ + -47.38414823331195, + -22.222161428647098 + ], + [ + -47.3841722990334, + -22.22216753644109 + ], + [ + -47.38421066885659, + -22.222177785590524 + ], + [ + -47.38423619013082, + -22.222185147508437 + ], + [ + -47.384266526768286, + -22.222193032054307 + ], + [ + -47.38430699193977, + -22.222205073547585 + ], + [ + -47.38433720136027, + -22.222214366278166 + ], + [ + -47.38436535664363, + -22.222222998077225 + ], + [ + -47.38438765400379, + -22.222229948791618 + ], + [ + -47.38441095271946, + -22.222236817054068 + ], + [ + -47.38444852133026, + -22.222248013577325 + ], + [ + -47.3844797139079, + -22.222258472326185 + ], + [ + -47.38449411727245, + -22.222262986535483 + ], + [ + -47.384521229173934, + -22.222270843554636 + ], + [ + -47.384546978183266, + -22.222279101388335 + ], + [ + -47.384570573238655, + -22.222285775938953 + ], + [ + -47.38460085855975, + -22.222295328546608 + ], + [ + -47.38463644443795, + -22.22230594077966 + ], + [ + -47.38466169711458, + -22.22231482837778 + ], + [ + -47.38468388183199, + -22.22232148152391 + ], + [ + -47.38470867871732, + -22.22233017128884 + ], + [ + -47.38496045952659, + -22.222397236383635 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "44", + "Name": "Curvas", + "Length": 202.5418859176984, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "44", + "type": "LineString", + "coordinates": [ + [ + -47.38305355415332, + -22.222062133680346 + ], + [ + -47.38315049097625, + -22.22205688864496 + ], + [ + -47.38320402302263, + -22.22205402312277 + ], + [ + -47.38326266405693, + -22.222050768328213 + ], + [ + -47.38333081426287, + -22.222048045805842 + ], + [ + -47.383398977177926, + -22.222046976098166 + ], + [ + -47.3834681154971, + -22.222046952697593 + ], + [ + -47.38354729872988, + -22.222049246851675 + ], + [ + -47.383624467146205, + -22.222054821455142 + ], + [ + -47.38365564164317, + -22.222057778026084 + ], + [ + -47.38368522033075, + -22.222060201935 + ], + [ + -47.38373024759423, + -22.22206488541793 + ], + [ + -47.38377596802979, + -22.222070891666867 + ], + [ + -47.38381619754301, + -22.222077295234826 + ], + [ + -47.38385428112537, + -22.222083770900824 + ], + [ + -47.38388968426853, + -22.222090580579266 + ], + [ + -47.38391674376744, + -22.22209584464012 + ], + [ + -47.38394253352665, + -22.222100821353884 + ], + [ + -47.383973825038616, + -22.222106886574355 + ], + [ + -47.384006599881666, + -22.222113548451826 + ], + [ + -47.38404585123021, + -22.222121765205824 + ], + [ + -47.384082615258244, + -22.222130579908498 + ], + [ + -47.38412062328788, + -22.22213972390171 + ], + [ + -47.38415220437972, + -22.22214840104855 + ], + [ + -47.38417621700303, + -22.22215449536657 + ], + [ + -47.384214826721575, + -22.22216480859589 + ], + [ + -47.384240298167065, + -22.222172156140317 + ], + [ + -47.38427069720974, + -22.222180056905575 + ], + [ + -47.384311487134845, + -22.22219219503828 + ], + [ + -47.38434176385592, + -22.22220150847141 + ], + [ + -47.38436993974261, + -22.22221014658004 + ], + [ + -47.38439215805088, + -22.222217072651887 + ], + [ + -47.38441536463777, + -22.2222239137557 + ], + [ + -47.384453203594894, + -22.222235190850128 + ], + [ + -47.38448449824289, + -22.22224568382302 + ], + [ + -47.38449859896182, + -22.222250103179167 + ], + [ + -47.38452575959647, + -22.222257974321316 + ], + [ + -47.384551461905055, + -22.222266217178056 + ], + [ + -47.38457502158638, + -22.222272881722212 + ], + [ + -47.38460541029759, + -22.222282466941422 + ], + [ + -47.384641236999656, + -22.222293150991863 + ], + [ + -47.38466650082972, + -22.22230204251561 + ], + [ + -47.384688675720746, + -22.222308692714936 + ], + [ + -47.38471324800592, + -22.222317303771682 + ], + [ + -47.384970524871946, + -22.2223858328083 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "45", + "Name": "Curvas", + "Length": 202.79513647279506, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "45", + "type": "LineString", + "coordinates": [ + [ + -47.38306144382169, + -22.222048142561125 + ], + [ + -47.38314964720123, + -22.222043370071283 + ], + [ + -47.38320317293642, + -22.22204050488471 + ], + [ + -47.38326191954919, + -22.22203724423061 + ], + [ + -47.383330379912, + -22.222034509318412 + ], + [ + -47.38339885197359, + -22.22203343475976 + ], + [ + -47.38346833908491, + -22.222033411241707 + ], + [ + -47.383548087848546, + -22.222035721781385 + ], + [ + -47.38362576676261, + -22.222041333263636 + ], + [ + -47.38365701618803, + -22.22204429694107 + ], + [ + -47.38368666546002, + -22.222046726634456 + ], + [ + -47.38373207130081, + -22.222051449495222 + ], + [ + -47.383778209901614, + -22.222057510678518 + ], + [ + -47.38381872949255, + -22.222063960420208 + ], + [ + -47.38385705915061, + -22.222070477928806 + ], + [ + -47.383892642756884, + -22.222077322319013 + ], + [ + -47.38391970684378, + -22.22208258727267 + ], + [ + -47.383945485136934, + -22.222087561773982 + ], + [ + -47.38397685831758, + -22.222093642820198 + ], + [ + -47.384009746075876, + -22.22210032764931 + ], + [ + -47.384049260667105, + -22.22210859951001 + ], + [ + -47.38408624218548, + -22.22211746635941 + ], + [ + -47.38412450193658, + -22.22212667091015 + ], + [ + -47.38415617544686, + -22.22213537344993 + ], + [ + -47.38418013497201, + -22.222141454291997 + ], + [ + -47.3842189845859, + -22.22215183160121 + ], + [ + -47.38424440620265, + -22.22215916477214 + ], + [ + -47.38427486765053, + -22.22216708175679 + ], + [ + -47.384315982329205, + -22.222179316528873 + ], + [ + -47.384346329803506, + -22.22218865172666 + ], + [ + -47.38437452298802, + -22.222197295128687 + ], + [ + -47.384396662097224, + -22.222204196512084 + ], + [ + -47.38441977655535, + -22.222211010457276 + ], + [ + -47.38445788585875, + -22.22222236812285 + ], + [ + -47.38448928257711, + -22.222232895319735 + ], + [ + -47.384503080650454, + -22.222237219822755 + ], + [ + -47.3845302900183, + -22.222245105087936 + ], + [ + -47.38455594562612, + -22.222253332967686 + ], + [ + -47.384579469933385, + -22.22225998750539 + ], + [ + -47.384609962034716, + -22.222269605336198 + ], + [ + -47.38464602956059, + -22.22228036120399 + ], + [ + -47.384671304544106, + -22.222289256653365 + ], + [ + -47.38469346960871, + -22.222295903905877 + ], + [ + -47.38471781729379, + -22.222304436254436 + ], + [ + -47.3849805902157, + -22.22237442923246 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "46", + "Name": "Curvas", + "Length": 203.04838703197836, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "46", + "type": "LineString", + "coordinates": [ + [ + -47.38306933348859, + -22.22203415144167 + ], + [ + -47.3831488034265, + -22.222029851497563 + ], + [ + -47.38320232281582, + -22.222026986648515 + ], + [ + -47.38326117504174, + -22.22202372013298 + ], + [ + -47.38332994556134, + -22.222020972830933 + ], + [ + -47.38339872676943, + -22.222019893421315 + ], + [ + -47.38346856267284, + -22.22201986978579 + ], + [ + -47.3835488769672, + -22.222022196711105 + ], + [ + -47.38362706637892, + -22.222027845072127 + ], + [ + -47.38365839073276, + -22.222030815856023 + ], + [ + -47.38368811058916, + -22.222033251333873 + ], + [ + -47.383733895007175, + -22.22203801357251 + ], + [ + -47.38378045177318, + -22.222044129690165 + ], + [ + -47.38382126144175, + -22.22205062560559 + ], + [ + -47.38385983717545, + -22.22205718495677 + ], + [ + -47.383895601244824, + -22.222064064058777 + ], + [ + -47.38392266991968, + -22.222069329905164 + ], + [ + -47.383948436746785, + -22.222074302194063 + ], + [ + -47.383979891479704, + -22.222080399042383 + ], + [ + -47.38401289226964, + -22.222087106846782 + ], + [ + -47.38405267010349, + -22.22209543381416 + ], + [ + -47.38408986911219, + -22.222104352810284 + ], + [ + -47.384128380504606, + -22.22211361789656 + ], + [ + -47.3841601465134, + -22.222122345851275 + ], + [ + -47.38418405294042, + -22.22212841321739 + ], + [ + -47.38422314244957, + -22.22213885460647 + ], + [ + -47.38424851423758, + -22.222146173403907 + ], + [ + -47.38427903809066, + -22.222154106607924 + ], + [ + -47.38432047752285, + -22.22216643801942 + ], + [ + -47.384350885392394, + -22.222175791795607 + ], + [ + -47.384379106082335, + -22.222184443630354 + ], + [ + -47.38440116614287, + -22.222191320372218 + ], + [ + -47.38442418847225, + -22.222198107158768 + ], + [ + -47.38446256812188, + -22.222209545395504 + ], + [ + -47.38449406691056, + -22.2222201068164 + ], + [ + -47.384507562338406, + -22.222224336466297 + ], + [ + -47.38453482043939, + -22.222232235854474 + ], + [ + -47.38456042934648, + -22.222240448757262 + ], + [ + -47.384583918279695, + -22.222247093288512 + ], + [ + -47.384614513771105, + -22.222256743730874 + ], + [ + -47.384650822120754, + -22.222267571416026 + ], + [ + -47.384676108257715, + -22.222276470791027 + ], + [ + -47.38469826349594, + -22.222283115096715 + ], + [ + -47.384722386580926, + -22.22229156873713 + ], + [ + -47.38499065555786, + -22.222363025656136 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "47", + "Name": "Curvas", + "Length": 203.30163758457326, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "47", + "type": "LineString", + "coordinates": [ + [ + -47.38307722315401, + -22.222020160321954 + ], + [ + -47.38314795965203, + -22.222016332923815 + ], + [ + -47.383201472730974, + -22.222013468410317 + ], + [ + -47.38326043053455, + -22.222010196035324 + ], + [ + -47.383329511210874, + -22.22200743634345 + ], + [ + -47.3833986015654, + -22.222006352082886 + ], + [ + -47.38346878626087, + -22.222006328329858 + ], + [ + -47.38354966608583, + -22.222008671640825 + ], + [ + -47.383628365995094, + -22.22201435688062 + ], + [ + -47.383659765277365, + -22.22201733477098 + ], + [ + -47.38368955571815, + -22.222019776033303 + ], + [ + -47.38373571871332, + -22.222024577649815 + ], + [ + -47.383782693644434, + -22.222030748701815 + ], + [ + -47.38382379339059, + -22.222037290790926 + ], + [ + -47.383862615199895, + -22.22204389198468 + ], + [ + -47.3838985597323, + -22.222050805798514 + ], + [ + -47.38392563299514, + -22.222056072537615 + ], + [ + -47.38395138835622, + -22.222061042614133 + ], + [ + -47.383982924760026, + -22.22206715528864 + ], + [ + -47.38401603846292, + -22.222073886044218 + ], + [ + -47.384056079539356, + -22.222082268118253 + ], + [ + -47.384093496038325, + -22.222091239261122 + ], + [ + -47.384132259153304, + -22.222100564905254 + ], + [ + -47.38416411757928, + -22.222109318252564 + ], + [ + -47.38418797090819, + -22.222115372142724 + ], + [ + -47.38422730031258, + -22.22212587761166 + ], + [ + -47.38425262227188, + -22.222133182035606 + ], + [ + -47.38428320853013, + -22.222141131459036 + ], + [ + -47.384324972715774, + -22.222153559509895 + ], + [ + -47.384355454792804, + -22.22216293611327 + ], + [ + -47.384383689329475, + -22.222171592179812 + ], + [ + -47.384405670187796, + -22.22217844423228 + ], + [ + -47.38442860038844, + -22.22218520386021 + ], + [ + -47.384467250384276, + -22.22219672266807 + ], + [ + -47.384498851243244, + -22.222207318312982 + ], + [ + -47.38451204402561, + -22.222211453109747 + ], + [ + -47.384539350859754, + -22.222219366620923 + ], + [ + -47.38456491306611, + -22.222227564546767 + ], + [ + -47.38458836662527, + -22.222234199071526 + ], + [ + -47.384619065506755, + -22.22224388212548 + ], + [ + -47.38465561468013, + -22.222254781628017 + ], + [ + -47.38468091197052, + -22.22226368492861 + ], + [ + -47.38470305738239, + -22.222270326287465 + ], + [ + -47.38472695586734, + -22.22227870121979 + ], + [ + -47.38500072089841, + -22.222351622079312 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "48", + "Name": "Curvas", + "Length": 203.5548881384066, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "48", + "type": "LineString", + "coordinates": [ + [ + -47.38308511281798, + -22.22200616920195 + ], + [ + -47.38314711587788, + -22.222002814350017 + ], + [ + -47.38320062261019, + -22.221999950174105 + ], + [ + -47.38325968602766, + -22.22199667193761 + ], + [ + -47.38332907686064, + -22.221993899855914 + ], + [ + -47.383398476361556, + -22.221992810744393 + ], + [ + -47.38346900984897, + -22.2219927868739 + ], + [ + -47.38355045520444, + -22.22199514657052 + ], + [ + -47.38362966561116, + -22.222000868689094 + ], + [ + -47.38366113982183, + -22.222003853685916 + ], + [ + -47.38369100084701, + -22.222006300732705 + ], + [ + -47.38373754241924, + -22.22201114172708 + ], + [ + -47.38378493551538, + -22.222017367713445 + ], + [ + -47.383826325339065, + -22.222023955976272 + ], + [ + -47.383865393223935, + -22.22203059901261 + ], + [ + -47.38390151821937, + -22.222037547538225 + ], + [ + -47.383928596070156, + -22.22204281517008 + ], + [ + -47.38395433996522, + -22.222047783034164 + ], + [ + -47.38398595791902, + -22.222053911510294 + ], + [ + -47.384019184655735, + -22.222060665241635 + ], + [ + -47.3840594889747, + -22.222069102422342 + ], + [ + -47.384097122963915, + -22.222078125711935 + ], + [ + -47.384136137718905, + -22.22208751189121 + ], + [ + -47.38416808864457, + -22.22209629065381 + ], + [ + -47.384191888875364, + -22.222102331068022 + ], + [ + -47.384231458174945, + -22.2221129006168 + ], + [ + -47.38425673030553, + -22.222120190667255 + ], + [ + -47.38428737896894, + -22.222128156310056 + ], + [ + -47.38432946790798, + -22.222140681000297 + ], + [ + -47.384360010377044, + -22.222150076181094 + ], + [ + -47.384388272419145, + -22.222158740680356 + ], + [ + -47.384410174232016, + -22.222165568092272 + ], + [ + -47.38443301230394, + -22.222172300561574 + ], + [ + -47.38447193264591, + -22.222183899940568 + ], + [ + -47.38450363557517, + -22.22219452980947 + ], + [ + -47.38451652571213, + -22.22219856975315 + ], + [ + -47.38454388127941, + -22.222206497387315 + ], + [ + -47.38456939678505, + -22.222214680336208 + ], + [ + -47.38459281497017, + -22.222221304854514 + ], + [ + -47.3846236172417, + -22.222231020520006 + ], + [ + -47.38466040723875, + -22.22224199183989 + ], + [ + -47.38468571568258, + -22.222250899066108 + ], + [ + -47.384707851268075, + -22.222257537478132 + ], + [ + -47.38473152515303, + -22.222265833702327 + ], + [ + -47.385010786237366, + -22.222340218502005 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "49", + "Name": "Curvas", + "Length": 203.80609107238686, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "49", + "type": "LineString", + "coordinates": [ + [ + -47.383093020409454, + -22.221992146287363 + ], + [ + -47.38319977252669, + -22.221986431935793 + ], + [ + -47.38325894152102, + -22.221983147839875 + ], + [ + -47.38332864251061, + -22.22198036336835 + ], + [ + -47.38339835115786, + -22.221979269405907 + ], + [ + -47.383469233437154, + -22.221979245417934 + ], + [ + -47.38355124432302, + -22.221981621500195 + ], + [ + -47.383630965227105, + -22.221987380497556 + ], + [ + -47.383662514366144, + -22.221990372600857 + ], + [ + -47.383692445975704, + -22.22199282543211 + ], + [ + -47.38373936612494, + -22.221997705804355 + ], + [ + -47.38378717738605, + -22.22200398672505 + ], + [ + -47.38382885728718, + -22.222010621161576 + ], + [ + -47.38386817124755, + -22.222017306040502 + ], + [ + -47.383904476705986, + -22.222024289277897 + ], + [ + -47.38393155914473, + -22.2220295578025 + ], + [ + -47.383957291573786, + -22.222034523454173 + ], + [ + -47.38398899120066, + -22.222040667756975 + ], + [ + -47.38402233084809, + -22.22204744443901 + ], + [ + -47.3840628984095, + -22.222055936726385 + ], + [ + -47.38410074988893, + -22.222065012162698 + ], + [ + -47.38414001636758, + -22.222074458900153 + ], + [ + -47.384172059709215, + -22.22208326305501 + ], + [ + -47.38419580684192, + -22.222089289993246 + ], + [ + -47.38423561603665, + -22.22209992362186 + ], + [ + -47.384260838338534, + -22.222107199298858 + ], + [ + -47.384291549407095, + -22.222115181161044 + ], + [ + -47.38433396309947, + -22.222127802490633 + ], + [ + -47.384364579779174, + -22.222137220499608 + ], + [ + -47.38439285566802, + -22.222145889230664 + ], + [ + -47.38441467827552, + -22.2221526919522 + ], + [ + -47.38443742421875, + -22.22215939726288 + ], + [ + -47.38447661490679, + -22.222171077212995 + ], + [ + -47.38450841990632, + -22.22218174130589 + ], + [ + -47.38452100739792, + -22.222185686396465 + ], + [ + -47.38454841169834, + -22.222193628153644 + ], + [ + -47.384573880503254, + -22.222201796125585 + ], + [ + -47.38459726331435, + -22.222208410637418 + ], + [ + -47.38462816897591, + -22.222218158914476 + ], + [ + -47.384665199796615, + -22.222229202051697 + ], + [ + -47.38469051939387, + -22.22223811320352 + ], + [ + -47.38471264515299, + -22.222244748668746 + ], + [ + -47.384736094437976, + -22.22225296618482 + ], + [ + -47.38502085157473, + -22.222328814924186 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "50", + "Name": "Curvas", + "Length": 204.05967716358145, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "50", + "type": "LineString", + "coordinates": [ + [ + -47.383100907132466, + -22.221978160376963 + ], + [ + -47.38319892240574, + -22.221972913699542 + ], + [ + -47.383258197014676, + -22.221969623742083 + ], + [ + -47.38332820816082, + -22.22196682688075 + ], + [ + -47.383398225954316, + -22.22196572806737 + ], + [ + -47.38346945702544, + -22.221965703961946 + ], + [ + -47.3835520334416, + -22.221968096429872 + ], + [ + -47.38363226484294, + -22.22197389230601 + ], + [ + -47.38366388891034, + -22.221976891515773 + ], + [ + -47.383693891104265, + -22.221979350131495 + ], + [ + -47.38374118983043, + -22.221984269881606 + ], + [ + -47.383789419256395, + -22.221990605736647 + ], + [ + -47.38383138923495, + -22.221997286346888 + ], + [ + -47.383870949270786, + -22.222004013068386 + ], + [ + -47.38390743519217, + -22.222011031017566 + ], + [ + -47.38393452221888, + -22.222016300434912 + ], + [ + -47.3839602431819, + -22.222021263874154 + ], + [ + -47.383992024356544, + -22.222027423978137 + ], + [ + -47.38402547703997, + -22.22203422363637 + ], + [ + -47.38406630784381, + -22.2220427710304 + ], + [ + -47.3841043768134, + -22.22205189861341 + ], + [ + -47.384143894930794, + -22.222061405885697 + ], + [ + -47.384176030773254, + -22.22207023545615 + ], + [ + -47.38419972480787, + -22.222076248918423 + ], + [ + -47.384239773897704, + -22.22208694662689 + ], + [ + -47.38426494637089, + -22.222094207930375 + ], + [ + -47.384295719844594, + -22.222102206011947 + ], + [ + -47.38433845829025, + -22.222114923980897 + ], + [ + -47.384369135358774, + -22.222124360566294 + ], + [ + -47.384397438753055, + -22.22213303773005 + ], + [ + -47.38441918231831, + -22.222139815812042 + ], + [ + -47.38444183613285, + -22.222146493964107 + ], + [ + -47.38448129716693, + -22.222158254485326 + ], + [ + -47.38451320423671, + -22.22216895280221 + ], + [ + -47.384525489083, + -22.22217280303973 + ], + [ + -47.38455294211655, + -22.22218075891989 + ], + [ + -47.38457836422076, + -22.222188911914866 + ], + [ + -47.38460171165783, + -22.222195516420243 + ], + [ + -47.384632720709405, + -22.222205297308864 + ], + [ + -47.38466999235371, + -22.222216412263403 + ], + [ + -47.3846953231044, + -22.222225327340848 + ], + [ + -47.38471743903715, + -22.22223195985925 + ], + [ + -47.384740663722205, + -22.222240098667214 + ], + [ + -47.38503091691049, + -22.22231741134588 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "51", + "Name": "Curvas", + "Length": 204.31326382767443, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "51", + "type": "LineString", + "coordinates": [ + [ + -47.383108793848926, + -22.221964174475325 + ], + [ + -47.38319807232361, + -22.2219593954611 + ], + [ + -47.38325745250859, + -22.221956099644284 + ], + [ + -47.383327773811224, + -22.221953290393134 + ], + [ + -47.38339810075091, + -22.221952186728828 + ], + [ + -47.383469680613814, + -22.221952162505982 + ], + [ + -47.383552822560155, + -22.221954571359515 + ], + [ + -47.38363356445863, + -22.22196040411447 + ], + [ + -47.3836652634544, + -22.221963410430703 + ], + [ + -47.38369533623266, + -22.221965874830897 + ], + [ + -47.3837430135357, + -22.22197083395885 + ], + [ + -47.38379166112643, + -22.221977224748212 + ], + [ + -47.38383392118237, + -22.221983951532152 + ], + [ + -47.38387372729363, + -22.22199072009623 + ], + [ + -47.3839103936779, + -22.22199777275718 + ], + [ + -47.383937485292584, + -22.222003043067296 + ], + [ + -47.383963194789594, + -22.222008004294146 + ], + [ + -47.383995057639495, + -22.22201418022519 + ], + [ + -47.38402862323135, + -22.22202100283367 + ], + [ + -47.38406971727758, + -22.22202960533437 + ], + [ + -47.38410800373729, + -22.222038785064086 + ], + [ + -47.384147773579436, + -22.222048352894884 + ], + [ + -47.384180001836675, + -22.222057207857215 + ], + [ + -47.3842036427732, + -22.222063207843565 + ], + [ + -47.384243931758085, + -22.222073969631857 + ], + [ + -47.384269054402594, + -22.22208121656184 + ], + [ + -47.384299890281426, + -22.222089230862807 + ], + [ + -47.38434295348031, + -22.222102045471086 + ], + [ + -47.38437370476265, + -22.22211150488562 + ], + [ + -47.38440202200363, + -22.222120186281206 + ], + [ + -47.384423686360364, + -22.222126939671792 + ], + [ + -47.384446248046245, + -22.222133590665273 + ], + [ + -47.38448597942632, + -22.222145431757575 + ], + [ + -47.384517988566344, + -22.222156164298447 + ], + [ + -47.384529970767375, + -22.22215991968293 + ], + [ + -47.38455747253404, + -22.222167889686045 + ], + [ + -47.38458284793754, + -22.222176027704105 + ], + [ + -47.384606160000594, + -22.22218262220302 + ], + [ + -47.384637272442156, + -22.222192435703178 + ], + [ + -47.38467478491004, + -22.22220362247501 + ], + [ + -47.384700126814145, + -22.222212541478097 + ], + [ + -47.384722232920545, + -22.222219171049677 + ], + [ + -47.38474523300571, + -22.22222723114955 + ], + [ + -47.385040982244654, + -22.22230600776707 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "52", + "Name": "Curvas", + "Length": 204.56684985593603, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "52", + "type": "LineString", + "coordinates": [ + [ + -47.38311668056952, + -22.221950188563486 + ], + [ + -47.383197222202476, + -22.2219458772248 + ], + [ + -47.38325670800279, + -22.221942575546418 + ], + [ + -47.38332733946186, + -22.22193975390548 + ], + [ + -47.38339797554769, + -22.221938645390246 + ], + [ + -47.38346990420228, + -22.22193862104996 + ], + [ + -47.3835536116787, + -22.221941046289174 + ], + [ + -47.383634864074224, + -22.22194691592291 + ], + [ + -47.383666637998324, + -22.2219499293456 + ], + [ + -47.38369678136093, + -22.22195239953026 + ], + [ + -47.38374483724075, + -22.221957398036075 + ], + [ + -47.38379390299619, + -22.22196384375978 + ], + [ + -47.38383645312944, + -22.221970616717435 + ], + [ + -47.38387650531607, + -22.22197742712407 + ], + [ + -47.38391335216322, + -22.221984514496796 + ], + [ + -47.38394044836587, + -22.221989785699662 + ], + [ + -47.38396614639686, + -22.221994744714074 + ], + [ + -47.383998090792275, + -22.22200093644587 + ], + [ + -47.384031769422286, + -22.222007782030975 + ], + [ + -47.38407312671086, + -22.22201643963832 + ], + [ + -47.38411163066063, + -22.222025671514718 + ], + [ + -47.38415165214028, + -22.222035299880005 + ], + [ + -47.38418397289947, + -22.222044180258262 + ], + [ + -47.384207560737934, + -22.222050166768664 + ], + [ + -47.38424808961783, + -22.22206099263677 + ], + [ + -47.38427316243366, + -22.22206822519327 + ], + [ + -47.38430406071762, + -22.22207625571362 + ], + [ + -47.384347448669665, + -22.222089166961208 + ], + [ + -47.38437826033763, + -22.22209864495119 + ], + [ + -47.384406605084024, + -22.222107334779455 + ], + [ + -47.38442819040173, + -22.222114063531492 + ], + [ + -47.38445065995895, + -22.222120687366377 + ], + [ + -47.38449066168496, + -22.222132609029753 + ], + [ + -47.384522772895224, + -22.2221433757946 + ], + [ + -47.384534452451035, + -22.22214703632605 + ], + [ + -47.38456200295082, + -22.222155020452146 + ], + [ + -47.38458733165363, + -22.222163143493262 + ], + [ + -47.38461060834266, + -22.222169727985715 + ], + [ + -47.384641824174196, + -22.22217957409741 + ], + [ + -47.384679577465604, + -22.222190832686568 + ], + [ + -47.38470493052314, + -22.22219975561526 + ], + [ + -47.38472702680316, + -22.222206382240017 + ], + [ + -47.38474980228848, + -22.2222143636318 + ], + [ + -47.38505104757722, + -22.22229460418778 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "53", + "Name": "Curvas", + "Length": 203.74002647142214, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "53", + "type": "LineString", + "coordinates": [ + [ + -47.38312456728459, + -22.221936202658593 + ], + [ + -47.3831963721217, + -22.22193235898625 + ], + [ + -47.38325596349726, + -22.221929051448537 + ], + [ + -47.38332690511268, + -22.221926217417828 + ], + [ + -47.383397850344615, + -22.221925104051675 + ], + [ + -47.38347012779084, + -22.221925079593927 + ], + [ + -47.3835544007972, + -22.221927521218802 + ], + [ + -47.38363616368969, + -22.22193342773136 + ], + [ + -47.383668012542124, + -22.221936448260532 + ], + [ + -47.38369822648904, + -22.221938924229637 + ], + [ + -47.383746660945555, + -22.2219439621133 + ], + [ + -47.383796144865634, + -22.221950462771318 + ], + [ + -47.38383898507612, + -22.22195728190268 + ], + [ + -47.383879283338096, + -22.22196413415187 + ], + [ + -47.383916310648104, + -22.22197125623637 + ], + [ + -47.383943411438715, + -22.221976528331975 + ], + [ + -47.383969098003675, + -22.221981485133966 + ], + [ + -47.384001124076505, + -22.221987692693297 + ], + [ + -47.38403491561274, + -22.221994561228264 + ], + [ + -47.38407653614361, + -22.222003273942214 + ], + [ + -47.38411525758341, + -22.22201255796534 + ], + [ + -47.38415553078885, + -22.222022246889342 + ], + [ + -47.38418794396162, + -22.22203115265924 + ], + [ + -47.384211478702056, + -22.222037125693706 + ], + [ + -47.384252247476915, + -22.222048015641608 + ], + [ + -47.38427727046407, + -22.22205523382465 + ], + [ + -47.384308231153135, + -22.22206328056437 + ], + [ + -47.38435194385831, + -22.222076288451262 + ], + [ + -47.38438282974319, + -22.22208578927135 + ], + [ + -47.38441118833631, + -22.222094483331453 + ], + [ + -47.38443269444236, + -22.22210118739114 + ], + [ + -47.38445507187094, + -22.222107784067397 + ], + [ + -47.38449534394286, + -22.222119786301867 + ], + [ + -47.3845275572233, + -22.22213058729071 + ], + [ + -47.384538934133985, + -22.222134152969083 + ], + [ + -47.38456653336686, + -22.222142151218193 + ], + [ + -47.384591815369, + -22.22215025928234 + ], + [ + -47.384615056684, + -22.22215683376834 + ], + [ + -47.384646375905504, + -22.222166712491592 + ], + [ + -47.38468437002039, + -22.222178042898058 + ], + [ + -47.38470973423137, + -22.222186969752336 + ], + [ + -47.38473182068501, + -22.22219359343028 + ], + [ + -47.38475437157053, + -22.222201496113993 + ], + [ + -47.38505102356309, + -22.222280513181392 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "54", + "Name": "Curvas", + "Length": 199.91385790432741, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "54", + "type": "LineString", + "coordinates": [ + [ + -47.38313245400275, + -22.221922216745355 + ], + [ + -47.38319552200039, + -22.221918840749936 + ], + [ + -47.38325521899201, + -22.221915527350603 + ], + [ + -47.38332647076375, + -22.221912680930117 + ], + [ + -47.383397725141705, + -22.221911562713043 + ], + [ + -47.38347035137948, + -22.221911538137867 + ], + [ + -47.383555189915704, + -22.221913996148437 + ], + [ + -47.38363746330505, + -22.22191993953978 + ], + [ + -47.38366938708578, + -22.221922967175413 + ], + [ + -47.38369967161701, + -22.221925448928985 + ], + [ + -47.38374848465016, + -22.221930526190505 + ], + [ + -47.38379838673479, + -22.221937081782855 + ], + [ + -47.383841517022475, + -22.221943947087926 + ], + [ + -47.38388206135973, + -22.221950841179673 + ], + [ + -47.38391926913254, + -22.221957997975935 + ], + [ + -47.38394637451112, + -22.22196327096429 + ], + [ + -47.383972049610065, + -22.221968225553855 + ], + [ + -47.38400415722624, + -22.221974448913464 + ], + [ + -47.384038061802734, + -22.22198134042551 + ], + [ + -47.38407994557584, + -22.22199010824609 + ], + [ + -47.38411888450565, + -22.22199944441589 + ], + [ + -47.384159409347376, + -22.222009193874094 + ], + [ + -47.38419191502317, + -22.22201812506018 + ], + [ + -47.38421539666556, + -22.222024084618706 + ], + [ + -47.38425640533535, + -22.222035038646403 + ], + [ + -47.384281378493846, + -22.222042242455966 + ], + [ + -47.384312401588, + -22.222050305415046 + ], + [ + -47.38435643904623, + -22.22206340994124 + ], + [ + -47.38438738531355, + -22.222072929335802 + ], + [ + -47.38441577141208, + -22.22208163182858 + ], + [ + -47.38443719848228, + -22.222088311250705 + ], + [ + -47.38445948378224, + -22.22209488076835 + ], + [ + -47.38450002620002, + -22.222106963573896 + ], + [ + -47.384532341550624, + -22.2221177987867 + ], + [ + -47.3845434158162, + -22.22212126961206 + ], + [ + -47.38457106378218, + -22.222129281984152 + ], + [ + -47.38459629908365, + -22.22213737507135 + ], + [ + -47.38461950502465, + -22.222143939550893 + ], + [ + -47.3846509276361, + -22.22215385088569 + ], + [ + -47.38468916257442, + -22.222165253109438 + ], + [ + -47.38471453793883, + -22.222174183889337 + ], + [ + -47.384736614566094, + -22.22218080462045 + ], + [ + -47.384758940851846, + -22.222188628596097 + ], + [ + -47.385023000316, + -22.222258964220522 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "55", + "Name": "Curvas", + "Length": 196.09482792146397, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "55", + "type": "LineString", + "coordinates": [ + [ + -47.38314027829343, + -22.22190834153506 + ], + [ + -47.38325447448702, + -22.22190200325265 + ], + [ + -47.38332603641502, + -22.221899144442396 + ], + [ + -47.38339759993894, + -22.22189802137441 + ], + [ + -47.3834705749682, + -22.221897996681804 + ], + [ + -47.38355597903418, + -22.221900471078055 + ], + [ + -47.383638762920285, + -22.22190645134819 + ], + [ + -47.383670761629304, + -22.22190948609027 + ], + [ + -47.38370111674484, + -22.221911973628355 + ], + [ + -47.38375030835455, + -22.221917090267702 + ], + [ + -47.38380062860365, + -22.22192370079439 + ], + [ + -47.38384404896847, + -22.22193061227312 + ], + [ + -47.38388483938093, + -22.22193754820744 + ], + [ + -47.38392222761656, + -22.221944739715457 + ], + [ + -47.383949337583104, + -22.221950013596565 + ], + [ + -47.383975001216, + -22.221954965973726 + ], + [ + -47.38400719051171, + -22.221961205161318 + ], + [ + -47.38404120799224, + -22.22196811962269 + ], + [ + -47.38408335500752, + -22.221976942549922 + ], + [ + -47.38412251142729, + -22.221986330866418 + ], + [ + -47.38416328799585, + -22.221996140883668 + ], + [ + -47.3841958860841, + -22.222005097461068 + ], + [ + -47.38421931462842, + -22.222011043543628 + ], + [ + -47.38426056319311, + -22.22202206165114 + ], + [ + -47.38428548652296, + -22.22202925108723 + ], + [ + -47.384316572022215, + -22.222037330265696 + ], + [ + -47.38436093423344, + -22.22205053143115 + ], + [ + -47.38439195472085, + -22.222060073656785 + ], + [ + -47.384420354666055, + -22.222068780381413 + ], + [ + -47.38444170252147, + -22.222075435110195 + ], + [ + -47.38446389569283, + -22.22208197746924 + ], + [ + -47.3845047084564, + -22.222094140845844 + ], + [ + -47.38453712587721, + -22.222105010282597 + ], + [ + -47.384547897497725, + -22.222108386254977 + ], + [ + -47.384575594196804, + -22.22211641275004 + ], + [ + -47.38460078279758, + -22.222124490860317 + ], + [ + -47.3846239533646, + -22.22213104533341 + ], + [ + -47.384655479365975, + -22.222140989279712 + ], + [ + -47.38469395512767, + -22.222152463320757 + ], + [ + -47.38471934164551, + -22.222161398026287 + ], + [ + -47.38474140844643, + -22.22216801581056 + ], + [ + -47.38476351013243, + -22.22217576107815 + ], + [ + -47.384994977075884, + -22.22223741526502 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "56", + "Name": "Curvas", + "Length": 192.26751726829218, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "56", + "type": "LineString", + "coordinates": [ + [ + -47.38314817504722, + -22.22189433781942 + ], + [ + -47.38325372998232, + -22.221888479154643 + ], + [ + -47.38332560206652, + -22.221885607954622 + ], + [ + -47.383397474736334, + -22.22188448003574 + ], + [ + -47.38347079855703, + -22.221884455225712 + ], + [ + -47.38355676815264, + -22.22188694600767 + ], + [ + -47.38364006253539, + -22.221892963156595 + ], + [ + -47.3836721361727, + -22.22189600500513 + ], + [ + -47.38370256187251, + -22.221898498327683 + ], + [ + -47.383752132058724, + -22.2219036543449 + ], + [ + -47.38380287047221, + -22.2219103198059 + ], + [ + -47.38384658091412, + -22.22191727745833 + ], + [ + -47.38388761740177, + -22.221924255235198 + ], + [ + -47.38392518610013, + -22.221931481454977 + ], + [ + -47.38395230065464, + -22.221936756228832 + ], + [ + -47.383977952821525, + -22.221941706393565 + ], + [ + -47.38401022365838, + -22.221947961381012 + ], + [ + -47.384044354181285, + -22.221954898819877 + ], + [ + -47.384086764438706, + -22.221963776853723 + ], + [ + -47.3841261383484, + -22.221973217316883 + ], + [ + -47.38416716655206, + -22.221983087867997 + ], + [ + -47.3841998571444, + -22.2219920698619 + ], + [ + -47.38422323259069, + -22.221998002468514 + ], + [ + -47.38426472105023, + -22.222009084655824 + ], + [ + -47.38428959455144, + -22.222016259718433 + ], + [ + -47.38432074245577, + -22.22202435511625 + ], + [ + -47.38436542941994, + -22.222037652920992 + ], + [ + -47.3843965102866, + -22.22204721372012 + ], + [ + -47.38442493773723, + -22.222055928877403 + ], + [ + -47.38444620655996, + -22.222062558969622 + ], + [ + -47.38446830760273, + -22.22206907417006 + ], + [ + -47.384509390712054, + -22.22208131811771 + ], + [ + -47.38454191020302, + -22.222092221778414 + ], + [ + -47.384552379178544, + -22.222095502897798 + ], + [ + -47.384580124610686, + -22.222103543515857 + ], + [ + -47.38460526651081, + -22.222111606649197 + ], + [ + -47.384628401703836, + -22.22211815111583 + ], + [ + -47.38466003109512, + -22.22212812767366 + ], + [ + -47.384698747680176, + -22.222139673531974 + ], + [ + -47.38472414535143, + -22.222148612163117 + ], + [ + -47.38474620232597, + -22.222155227000563 + ], + [ + -47.38476807941229, + -22.222162893560114 + ], + [ + -47.38496695388799, + -22.22221586634968 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "57", + "Name": "Curvas", + "Length": 188.44020399268015, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "57", + "type": "LineString", + "coordinates": [ + [ + -47.38315607179953, + -22.22188033410352 + ], + [ + -47.383252985477895, + -22.221874955056613 + ], + [ + -47.38332516771821, + -22.221872071466827 + ], + [ + -47.38339734953387, + -22.221870938697084 + ], + [ + -47.383471022145926, + -22.22187091376962 + ], + [ + -47.38355755727107, + -22.221873420937268 + ], + [ + -47.383641362150364, + -22.221879474965 + ], + [ + -47.383673510715965, + -22.22188252392002 + ], + [ + -47.38370400700005, + -22.22188502302702 + ], + [ + -47.38375395576267, + -22.221890218422082 + ], + [ + -47.38380511234045, + -22.221896938817405 + ], + [ + -47.38384911285938, + -22.22190394264351 + ], + [ + -47.383890395422185, + -22.221910962262893 + ], + [ + -47.383928144583265, + -22.221918223194432 + ], + [ + -47.38395526372572, + -22.221923498861027 + ], + [ + -47.38398090442661, + -22.221928446813376 + ], + [ + -47.38401325694512, + -22.221934717629225 + ], + [ + -47.38404750036986, + -22.22194167801703 + ], + [ + -47.38409017386937, + -22.221950611157478 + ], + [ + -47.38412976526895, + -22.22196010376733 + ], + [ + -47.38417104520038, + -22.22197003487775 + ], + [ + -47.38420382820408, + -22.221979042262685 + ], + [ + -47.384227150552356, + -22.22198496139335 + ], + [ + -47.38426887890668, + -22.22199610766043 + ], + [ + -47.38429370257926, + -22.222003268349546 + ], + [ + -47.384324912888644, + -22.22201137996676 + ], + [ + -47.38436992460569, + -22.222024774410748 + ], + [ + -47.384401079695564, + -22.222034358041917 + ], + [ + -47.3844295209929, + -22.22204307743108 + ], + [ + -47.384450710597726, + -22.222049682828967 + ], + [ + -47.38447271951191, + -22.222056170870843 + ], + [ + -47.38451407296696, + -22.2220684953895 + ], + [ + -47.384546694528055, + -22.222079433274182 + ], + [ + -47.38455686085864, + -22.22208261954056 + ], + [ + -47.38458465502383, + -22.2220906742816 + ], + [ + -47.38460975022332, + -22.222098722437995 + ], + [ + -47.384632850042344, + -22.222105256898175 + ], + [ + -47.384664582823525, + -22.222115266067533 + ], + [ + -47.384703540231904, + -22.222126883743115 + ], + [ + -47.38472894905655, + -22.222135826299844 + ], + [ + -47.38475099620475, + -22.222142438190495 + ], + [ + -47.38477264869141, + -22.222150026042016 + ], + [ + -47.38493893068458, + -22.222194317422403 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "58", + "Name": "Curvas", + "Length": 184.61288810189717, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "58", + "type": "LineString", + "coordinates": [ + [ + -47.38316396855039, + -22.221866330387336 + ], + [ + -47.383252240973746, + -22.221861430958526 + ], + [ + -47.38332473337014, + -22.221858534979 + ], + [ + -47.38339722433158, + -22.221857397358363 + ], + [ + -47.383471245734924, + -22.221857372313504 + ], + [ + -47.383558346389485, + -22.221859895866857 + ], + [ + -47.38364266176525, + -22.22186598677339 + ], + [ + -47.38367488525909, + -22.22186904283487 + ], + [ + -47.38370545212743, + -22.221871547726334 + ], + [ + -47.38375577946641, + -22.221876782499262 + ], + [ + -47.38380735420841, + -22.221883557828896 + ], + [ + -47.38385164480431, + -22.221890607828687 + ], + [ + -47.3838931734422, + -22.221897669290612 + ], + [ + -47.38393110306596, + -22.2219049649339 + ], + [ + -47.38395822679639, + -22.221910241493248 + ], + [ + -47.38398385603128, + -22.221915187233183 + ], + [ + -47.38401629008876, + -22.221921473848425 + ], + [ + -47.38405064655797, + -22.22192845721416 + ], + [ + -47.384093583299524, + -22.22193744546122 + ], + [ + -47.38413339218894, + -22.221946990217713 + ], + [ + -47.38417492375433, + -22.22195698186171 + ], + [ + -47.38420779926315, + -22.221966014663412 + ], + [ + -47.38423106851341, + -22.221971920318133 + ], + [ + -47.384273036762494, + -22.221983130665 + ], + [ + -47.38429781060644, + -22.221990276980637 + ], + [ + -47.384329083320885, + -22.221998404817214 + ], + [ + -47.38437441979075, + -22.222011895900447 + ], + [ + -47.384405635256726, + -22.222021498104127 + ], + [ + -47.38443410405947, + -22.222030225925945 + ], + [ + -47.38445521463478, + -22.222036806688244 + ], + [ + -47.38447713142042, + -22.222043267571532 + ], + [ + -47.384518755221116, + -22.22205567266121 + ], + [ + -47.384551478852316, + -22.222066644769843 + ], + [ + -47.38456134253801, + -22.22206973618326 + ], + [ + -47.384589185436276, + -22.222077805047252 + ], + [ + -47.38461423393512, + -22.222085838226718 + ], + [ + -47.38463729838017, + -22.22209236268046 + ], + [ + -47.384669134551224, + -22.22210240446133 + ], + [ + -47.38470833278287, + -22.222114093954158 + ], + [ + -47.38473375276093, + -22.22212304043651 + ], + [ + -47.38475579008277, + -22.22212964938034 + ], + [ + -47.38477721796981, + -22.222137158523825 + ], + [ + -47.38491090746562, + -22.222172768483173 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "59", + "Name": "Curvas", + "Length": 180.78556958656097, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "59", + "type": "LineString", + "coordinates": [ + [ + -47.38317186529975, + -22.221852326670934 + ], + [ + -47.38325149646985, + -22.221847906860443 + ], + [ + -47.38332429902227, + -22.221844998491154 + ], + [ + -47.383397099129446, + -22.221843856019653 + ], + [ + -47.38347146932401, + -22.221843830857374 + ], + [ + -47.38355913550786, + -22.221846370796417 + ], + [ + -47.383643961379995, + -22.22185249858178 + ], + [ + -47.383676259802094, + -22.221855561749724 + ], + [ + -47.38370689725465, + -22.221858072425654 + ], + [ + -47.3837576031699, + -22.22186334657643 + ], + [ + -47.383809596076055, + -22.221870176840355 + ], + [ + -47.38385417674888, + -22.221877273013817 + ], + [ + -47.38389595146183, + -22.2218843763183 + ], + [ + -47.38393406154822, + -22.221891706673325 + ], + [ + -47.383961189866596, + -22.221896984125458 + ], + [ + -47.383986807635495, + -22.221901927652937 + ], + [ + -47.3840193233767, + -22.221908230097014 + ], + [ + -47.38405379274561, + -22.221915236411263 + ], + [ + -47.384096992729155, + -22.22192427976491 + ], + [ + -47.38413701910838, + -22.221933876668075 + ], + [ + -47.38417880240251, + -22.22194392887166 + ], + [ + -47.38421177032158, + -22.221952987064103 + ], + [ + -47.384234986473835, + -22.22195887924291 + ], + [ + -47.38427719461764, + -22.221970153669485 + ], + [ + -47.38430191863297, + -22.221977285611672 + ], + [ + -47.38433325375247, + -22.221985429667612 + ], + [ + -47.38437891497511, + -22.22199901739008 + ], + [ + -47.38441020466739, + -22.222008642426783 + ], + [ + -47.38443868731681, + -22.22201737448043 + ], + [ + -47.38445971867109, + -22.222023930547472 + ], + [ + -47.38448154332821, + -22.222030364272175 + ], + [ + -47.38452343747454, + -22.22204284993283 + ], + [ + -47.38455626317583, + -22.222053856265415 + ], + [ + -47.38456582421668, + -22.222056852825897 + ], + [ + -47.384593715848006, + -22.22206493581287 + ], + [ + -47.3846187176462, + -22.222072954015374 + ], + [ + -47.384641746717286, + -22.222079468462685 + ], + [ + -47.38467368627818, + -22.222089542855073 + ], + [ + -47.38471312533306, + -22.222101304165136 + ], + [ + -47.38473855646454, + -22.22211025457308 + ], + [ + -47.38476058396003, + -22.222116860570125 + ], + [ + -47.38478178724746, + -22.222124291005574 + ], + [ + -47.3848828842311, + -22.222151219531973 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "60", + "Name": "Curvas", + "Length": 176.95824846359872, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "60", + "type": "LineString", + "coordinates": [ + [ + -47.383179762047675, + -22.221838322954223 + ], + [ + -47.383250751966244, + -22.221834382762285 + ], + [ + -47.38332386467463, + -22.221831462003273 + ], + [ + -47.38339697392748, + -22.221830314680886 + ], + [ + -47.38347169291318, + -22.22183028940121 + ], + [ + -47.38355992462624, + -22.221832845725988 + ], + [ + -47.38364526099464, + -22.22183901039015 + ], + [ + -47.383677634344956, + -22.22184208066456 + ], + [ + -47.38370834238174, + -22.22184459712495 + ], + [ + -47.38375942687319, + -22.22184991065358 + ], + [ + -47.38381183794341, + -22.221856795851817 + ], + [ + -47.38385670869311, + -22.221863938198958 + ], + [ + -47.383898729481054, + -22.22187108334597 + ], + [ + -47.383937020030054, + -22.221878448412742 + ], + [ + -47.38396415293639, + -22.22188372675762 + ], + [ + -47.38398975923928, + -22.221888668072676 + ], + [ + -47.38402235651735, + -22.22189498631572 + ], + [ + -47.38405693893278, + -22.221902015608343 + ], + [ + -47.384100402158275, + -22.22191111406858 + ], + [ + -47.38414064602725, + -22.221920763118383 + ], + [ + -47.384182680954204, + -22.221930875855232 + ], + [ + -47.38421574137941, + -22.221939959464727 + ], + [ + -47.38423890443366, + -22.221945838167596 + ], + [ + -47.384281352472144, + -22.221957176673918 + ], + [ + -47.38430602665886, + -22.221964294242653 + ], + [ + -47.38433742418339, + -22.221972454517935 + ], + [ + -47.38438341015874, + -22.221986138879632 + ], + [ + -47.38441476022396, + -22.221995782487884 + ], + [ + -47.38444327037878, + -22.222004522974185 + ], + [ + -47.38446422270672, + -22.222011054406615 + ], + [ + -47.38448595523531, + -22.222017460972733 + ], + [ + -47.38452811972721, + -22.222030027204383 + ], + [ + -47.38456104749857, + -22.22204106776091 + ], + [ + -47.38457030589464, + -22.222043969468434 + ], + [ + -47.384598246259, + -22.222052066578378 + ], + [ + -47.38462320135658, + -22.222060069803973 + ], + [ + -47.3846461950537, + -22.22206657424484 + ], + [ + -47.38467823800442, + -22.22207668124873 + ], + [ + -47.38471791788249, + -22.22208851437601 + ], + [ + -47.38474336016739, + -22.22209746870958 + ], + [ + -47.38476537783652, + -22.22210407175981 + ], + [ + -47.38478635652441, + -22.22211142348724 + ], + [ + -47.38485486098111, + -22.22212967056888 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "61", + "Name": "Curvas", + "Length": 173.06772543471328, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "61", + "type": "LineString", + "coordinates": [ + [ + -47.38318821830004, + -22.221823327035775 + ], + [ + -47.383323430327195, + -22.22181792551538 + ], + [ + -47.38339684872567, + -22.22181677334211 + ], + [ + -47.383471916502444, + -22.22181674794505 + ], + [ + -47.38356071374459, + -22.221819320655538 + ], + [ + -47.38364656060917, + -22.221825522198518 + ], + [ + -47.3836790088877, + -22.221828599579393 + ], + [ + -47.383709787508685, + -22.221831121824252 + ], + [ + -47.38376125057627, + -22.221836474730743 + ], + [ + -47.38381407981047, + -22.221843414863244 + ], + [ + -47.38385924063696, + -22.22185060338407 + ], + [ + -47.383901507499864, + -22.221857790373612 + ], + [ + -47.38393997851144, + -22.22186519015214 + ], + [ + -47.38396711600573, + -22.22187046938973 + ], + [ + -47.383992710842605, + -22.2218754084924 + ], + [ + -47.38402538980648, + -22.221881742564694 + ], + [ + -47.38406008511948, + -22.221888794805366 + ], + [ + -47.38410381158684, + -22.221897948372195 + ], + [ + -47.38414427294553, + -22.221907649568664 + ], + [ + -47.38418655960219, + -22.221917822865393 + ], + [ + -47.384219712436575, + -22.221926931865287 + ], + [ + -47.38424282239287, + -22.221932797092222 + ], + [ + -47.384285510325974, + -22.22194419967832 + ], + [ + -47.38431013468411, + -22.22195130287356 + ], + [ + -47.38434159461363, + -22.22195947936823 + ], + [ + -47.38438790534164, + -22.221973260369126 + ], + [ + -47.384419329636295, + -22.221982926811314 + ], + [ + -47.38444785363778, + -22.221991671529494 + ], + [ + -47.38446872674161, + -22.22199817826568 + ], + [ + -47.3844903671417, + -22.222004557673237 + ], + [ + -47.384532801979105, + -22.22201720447588 + ], + [ + -47.38456583182055, + -22.222028279256318 + ], + [ + -47.38457478757189, + -22.22203108611093 + ], + [ + -47.38460277666926, + -22.22203919734383 + ], + [ + -47.384627685066214, + -22.22204718559251 + ], + [ + -47.384650643389385, + -22.222053680026917 + ], + [ + -47.384682789729936, + -22.222063819642326 + ], + [ + -47.38472271043114, + -22.222075724586837 + ], + [ + -47.38474816386944, + -22.222084682845992 + ], + [ + -47.384770171712226, + -22.222091282949407 + ], + [ + -47.38479092580063, + -22.222098555968856 + ], + [ + -47.384826837715586, + -22.22210812159384 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "62", + "Name": "Curvas", + "Length": 169.24915820750667, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "62", + "type": "LineString", + "coordinates": [ + [ + -47.38319603749995, + -22.221809460833143 + ], + [ + -47.38332299597998, + -22.221804389027433 + ], + [ + -47.383396723524, + -22.2218032320033 + ], + [ + -47.38347214009181, + -22.221803206488858 + ], + [ + -47.38356150286293, + -22.221805795585084 + ], + [ + -47.38364786022358, + -22.22181203400687 + ], + [ + -47.38368038343029, + -22.221815118494202 + ], + [ + -47.383711232635484, + -22.221817646523533 + ], + [ + -47.38376307427913, + -22.221823038807866 + ], + [ + -47.38381632167723, + -22.221830033874678 + ], + [ + -47.383861772580474, + -22.221837268569175 + ], + [ + -47.38390428551828, + -22.22184449740124 + ], + [ + -47.383942936992405, + -22.221851931891507 + ], + [ + -47.38397007907465, + -22.221857212021856 + ], + [ + -47.38399566244552, + -22.221862148912088 + ], + [ + -47.38402842294415, + -22.22186849878295 + ], + [ + -47.38406323130571, + -22.22187557400239 + ], + [ + -47.38410722101491, + -22.22188478267579 + ], + [ + -47.38414789986329, + -22.22189453601889 + ], + [ + -47.38419043815165, + -22.22190476984858 + ], + [ + -47.384223683493154, + -22.22191390426581 + ], + [ + -47.38424674035148, + -22.22191975601681 + ], + [ + -47.384289668179164, + -22.22193122268266 + ], + [ + -47.384314242708705, + -22.221938311504427 + ], + [ + -47.38434576504324, + -22.22194650421845 + ], + [ + -47.38439240052384, + -22.221960381858544 + ], + [ + -47.38442388518829, + -22.22197006687131 + ], + [ + -47.38445243669518, + -22.22197882002211 + ], + [ + -47.384473230775804, + -22.22198530212467 + ], + [ + -47.38449477904741, + -22.221991654373657 + ], + [ + -47.38453748423028, + -22.222004381747283 + ], + [ + -47.384570616141765, + -22.22201549075165 + ], + [ + -47.38457926924843, + -22.22201820275334 + ], + [ + -47.384607307078824, + -22.222026328109216 + ], + [ + -47.38463216877517, + -22.222034301380965 + ], + [ + -47.38465509172438, + -22.222040785808925 + ], + [ + -47.384687341454736, + -22.222050958035837 + ], + [ + -47.38472750297904, + -22.222062934797552 + ], + [ + -47.384752967570755, + -22.22207189698232 + ], + [ + -47.38477496558719, + -22.22207849413892 + ], + [ + -47.38479549507612, + -22.222085688450374 + ], + [ + -47.38479881443451, + -22.222086572606848 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "63", + "Name": "Curvas", + "Length": 164.89769721013755, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "63", + "type": "LineString", + "coordinates": [ + [ + -47.383203856698415, + -22.221795594630258 + ], + [ + -47.38332256163297, + -22.221790852539467 + ], + [ + -47.38339659832248, + -22.221789690664515 + ], + [ + -47.38347236368126, + -22.221789665032667 + ], + [ + -47.383562291981264, + -22.221792270514584 + ], + [ + -47.38364915983785, + -22.221798545815204 + ], + [ + -47.38368175797275, + -22.221801637409005 + ], + [ + -47.38371267776212, + -22.221804171222825 + ], + [ + -47.383764897981735, + -22.221809602884978 + ], + [ + -47.38381856354368, + -22.221816652886087 + ], + [ + -47.38386430452363, + -22.22182393375427 + ], + [ + -47.383907063536284, + -22.2218312044288 + ], + [ + -47.383945895472934, + -22.221838673630838 + ], + [ + -47.38397304214311, + -22.22184395465393 + ], + [ + -47.383998614048004, + -22.221848889331785 + ], + [ + -47.384031456234474, + -22.221855255032274 + ], + [ + -47.38406637749144, + -22.22186235319936 + ], + [ + -47.384110630442464, + -22.221871616979335 + ], + [ + -47.38415152678048, + -22.22188142246907 + ], + [ + -47.38419431679943, + -22.221891716858924 + ], + [ + -47.38422765454911, + -22.22190087666628 + ], + [ + -47.384250658309455, + -22.221906714941348 + ], + [ + -47.38429382603168, + -22.221918245686904 + ], + [ + -47.38431835073265, + -22.221925320135263 + ], + [ + -47.384349935472194, + -22.221933529068618 + ], + [ + -47.384396895705336, + -22.221947503347902 + ], + [ + -47.38442845460231, + -22.22195721119557 + ], + [ + -47.384457019955846, + -22.22196596857825 + ], + [ + -47.38447773480926, + -22.221972425983587 + ], + [ + -47.3844991909524, + -22.221978751074 + ], + [ + -47.3845421664807, + -22.221991559018583 + ], + [ + -47.384575400462204, + -22.222002702246893 + ], + [ + -47.38458375092423, + -22.222005319395713 + ], + [ + -47.384611837487654, + -22.222013458874557 + ], + [ + -47.38463665248342, + -22.22202141716936 + ], + [ + -47.384659540058664, + -22.222027891590876 + ], + [ + -47.38469189317879, + -22.222038096429284 + ], + [ + -47.384732295526156, + -22.222050145008183 + ], + [ + -47.38475777127128, + -22.22205911111857 + ], + [ + -47.384766510615265, + -22.222061732025935 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "64", + "Name": "Curvas", + "Length": 160.44118477297874, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "64", + "type": "LineString", + "coordinates": [ + [ + -47.383211675895446, + -22.221781728427093 + ], + [ + -47.38332212728619, + -22.22177731605147 + ], + [ + -47.38339647312113, + -22.221776149325656 + ], + [ + -47.38347258727079, + -22.22177612357644 + ], + [ + -47.38356308109956, + -22.22177874544411 + ], + [ + -47.38365045945202, + -22.22178505762354 + ], + [ + -47.38368313251509, + -22.221788156323797 + ], + [ + -47.38371412288863, + -22.22179069592208 + ], + [ + -47.383766721684154, + -22.221796166962093 + ], + [ + -47.38382080540984, + -22.221803271897496 + ], + [ + -47.38386683646643, + -22.221810598939328 + ], + [ + -47.383909841553894, + -22.221817911456395 + ], + [ + -47.38394885395302, + -22.221825415370155 + ], + [ + -47.38397600521116, + -22.221830697286 + ], + [ + -47.38400156565007, + -22.22183562975142 + ], + [ + -47.384034489369164, + -22.22184201125005 + ], + [ + -47.38406952367673, + -22.221849132396322 + ], + [ + -47.384114039869495, + -22.221858451282866 + ], + [ + -47.38415515369711, + -22.22186830891922 + ], + [ + -47.384198195346684, + -22.22187866384175 + ], + [ + -47.384231625604436, + -22.2218878490667 + ], + [ + -47.38425457626683, + -22.221893673865832 + ], + [ + -47.38429798388356, + -22.221905268691124 + ], + [ + -47.38432245875596, + -22.221912328766013 + ], + [ + -47.38435410590048, + -22.221920553918707 + ], + [ + -47.384401390886104, + -22.22193462483718 + ], + [ + -47.38443301014972, + -22.22194435125447 + ], + [ + -47.38446160300866, + -22.221953117069745 + ], + [ + -47.38448223884202, + -22.221959549842445 + ], + [ + -47.38450360285669, + -22.221965847774282 + ], + [ + -47.38454684873037, + -22.221978736289827 + ], + [ + -47.38458018478191, + -22.22198991374207 + ], + [ + -47.38458823259936, + -22.22199243603799 + ], + [ + -47.38461636789577, + -22.222000589639777 + ], + [ + -47.38464113619095, + -22.222008532957663 + ], + [ + -47.384663988392255, + -22.22201499737275 + ], + [ + -47.38469644490213, + -22.22202523482264 + ], + [ + -47.38473336672464, + -22.222036245457602 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "65", + "Name": "Curvas", + "Length": 156.35343504447525, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "65", + "type": "LineString", + "coordinates": [ + [ + -47.38321949509104, + -22.221767862223672 + ], + [ + -47.38332169293963, + -22.221763779563464 + ], + [ + -47.38339634791993, + -22.221762607986786 + ], + [ + -47.383472810860425, + -22.221762582120196 + ], + [ + -47.38356387021782, + -22.22176522037363 + ], + [ + -47.38365175906607, + -22.22177156943186 + ], + [ + -47.38368450705729, + -22.221774675238603 + ], + [ + -47.38371556801498, + -22.221777220621366 + ], + [ + -47.38376854538635, + -22.221782731039216 + ], + [ + -47.38382304727569, + -22.2217898909089 + ], + [ + -47.38386936840887, + -22.221797264124334 + ], + [ + -47.3839126195711, + -22.22180461848396 + ], + [ + -47.38395181243265, + -22.221812157109436 + ], + [ + -47.38397896827876, + -22.221817439918045 + ], + [ + -47.38400451725166, + -22.221822370171026 + ], + [ + -47.38403752266061, + -22.22182876749976 + ], + [ + -47.38407266986153, + -22.221835911593242 + ], + [ + -47.38411744929601, + -22.221845285586344 + ], + [ + -47.38415878061317, + -22.221855195369344 + ], + [ + -47.384202073994246, + -22.221865610852216 + ], + [ + -47.38423559665913, + -22.22187482146708 + ], + [ + -47.38425849422359, + -22.221880632790302 + ], + [ + -47.38430214173477, + -22.22189229169527 + ], + [ + -47.38432656677861, + -22.221899337396696 + ], + [ + -47.384358276328115, + -22.221907578768768 + ], + [ + -47.384405886066176, + -22.22192174632637 + ], + [ + -47.38443757956538, + -22.221931495579547 + ], + [ + -47.38446618627098, + -22.22194026562672 + ], + [ + -47.38448674287406, + -22.221946673701233 + ], + [ + -47.38450801476027, + -22.221952944474527 + ], + [ + -47.3845515309793, + -22.22196591356099 + ], + [ + -47.3845849691008, + -22.221977125237167 + ], + [ + -47.384592714273744, + -22.2219795526802 + ], + [ + -47.38462089830316, + -22.221987720404936 + ], + [ + -47.38464561989774, + -22.221995648745924 + ], + [ + -47.384668436725136, + -22.222002103154573 + ], + [ + -47.384700996624765, + -22.222012373215957 + ], + [ + -47.38470316189528, + -22.222013018931296 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "66", + "Name": "Curvas", + "Length": 152.1213010308591, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "66", + "type": "LineString", + "coordinates": [ + [ + -47.3832273142852, + -22.221753996019984 + ], + [ + -47.383321258593284, + -22.221750243075398 + ], + [ + -47.38339622271889, + -22.22174906664788 + ], + [ + -47.38347303445015, + -22.221749040663937 + ], + [ + -47.38356465933609, + -22.22175169530313 + ], + [ + -47.38365305868, + -22.221758081240175 + ], + [ + -47.38368588159936, + -22.221761194153377 + ], + [ + -47.383717013141194, + -22.221763745320608 + ], + [ + -47.383770369088325, + -22.221769295116303 + ], + [ + -47.38382528914124, + -22.221776509920282 + ], + [ + -47.38387190035096, + -22.221783929309375 + ], + [ + -47.38391539758791, + -22.22179132551151 + ], + [ + -47.38395477091186, + -22.221798898848707 + ], + [ + -47.383981931345936, + -22.221804182550066 + ], + [ + -47.384007468852836, + -22.221809110590623 + ], + [ + -47.384040555792375, + -22.221815523717076 + ], + [ + -47.38407581604587, + -22.22182269079015 + ], + [ + -47.38412085872201, + -22.221832119889804 + ], + [ + -47.384162407528684, + -22.221842081819425 + ], + [ + -47.38420595253933, + -22.22185255783469 + ], + [ + -47.38423956771322, + -22.221861793867404 + ], + [ + -47.38426241217974, + -22.221867591714695 + ], + [ + -47.38430629958534, + -22.22187931469937 + ], + [ + -47.38433067480062, + -22.221886346027336 + ], + [ + -47.38436244675509, + -22.221894603618754 + ], + [ + -47.38441038124552, + -22.221908867815507 + ], + [ + -47.38444213510824, + -22.22191863563734 + ], + [ + -47.38447076931923, + -22.22192741411711 + ], + [ + -47.384491246905384, + -22.221933797559945 + ], + [ + -47.38451242666317, + -22.22194004117468 + ], + [ + -47.384556213227484, + -22.22195309083207 + ], + [ + -47.384589753418965, + -22.221964336732167 + ], + [ + -47.38459719594743, + -22.221966669322327 + ], + [ + -47.38462542870984, + -22.221974851170035 + ], + [ + -47.384650103603846, + -22.2219827645341 + ], + [ + -47.38467179863586, + -22.22198890161014 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "67", + "Name": "Curvas", + "Length": 148.0435176664476, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "67", + "type": "LineString", + "coordinates": [ + [ + -47.3832351334779, + -22.221740129816048 + ], + [ + -47.38332082424713, + -22.22173670658733 + ], + [ + -47.383396097518, + -22.221735525308986 + ], + [ + -47.383473258039935, + -22.221735499207657 + ], + [ + -47.383565448454306, + -22.2217381702326 + ], + [ + -47.383654358293796, + -22.221744593048495 + ], + [ + -47.38368725614128, + -22.221747713068165 + ], + [ + -47.38371845826724, + -22.221750270019857 + ], + [ + -47.38377219279006, + -22.22175585919339 + ], + [ + -47.3838275310065, + -22.221763128931613 + ], + [ + -47.38387443229269, + -22.22177059449438 + ], + [ + -47.383918175604315, + -22.221778032538992 + ], + [ + -47.383957729390666, + -22.221785640587935 + ], + [ + -47.383984894412684, + -22.221790925182017 + ], + [ + -47.38401042045357, + -22.221795851010203 + ], + [ + -47.38404358908498, + -22.22180227996712 + ], + [ + -47.38407896222974, + -22.221809469987026 + ], + [ + -47.38412426814746, + -22.221818954193214 + ], + [ + -47.38416603444363, + -22.22182896826944 + ], + [ + -47.384209831186624, + -22.221839504845352 + ], + [ + -47.38424353876667, + -22.221848766267673 + ], + [ + -47.38426633013528, + -22.22185455063904 + ], + [ + -47.38431045743525, + -22.22186633770342 + ], + [ + -47.38433478282198, + -22.221873354657923 + ], + [ + -47.38436661718142, + -22.221881628468655 + ], + [ + -47.38441487642414, + -22.221895989304585 + ], + [ + -47.38444670452555, + -22.221905779963198 + ], + [ + -47.38447535258317, + -22.221914562674886 + ], + [ + -47.384495750935976, + -22.221920921418587 + ], + [ + -47.38451683856537, + -22.22192713787477 + ], + [ + -47.3845608954749, + -22.22194026810308 + ], + [ + -47.384594537736355, + -22.221951548227086 + ], + [ + -47.38460167762041, + -22.221953785964402 + ], + [ + -47.38462995911578, + -22.22196198193506 + ], + [ + -47.384641678917184, + -22.221965740531168 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "68", + "Name": "Curvas", + "Length": 143.93692845341553, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "68", + "type": "LineString", + "coordinates": [ + [ + -47.38324295266918, + -22.22172626361184 + ], + [ + -47.38332038990121, + -22.221723170099207 + ], + [ + -47.383395972317274, + -22.221721983970035 + ], + [ + -47.38347348162984, + -22.221721957751363 + ], + [ + -47.38356623757252, + -22.22172464516208 + ], + [ + -47.38365565790749, + -22.22173110485679 + ], + [ + -47.38368863068308, + -22.22173423198292 + ], + [ + -47.383719903393164, + -22.22173679471908 + ], + [ + -47.3837740164916, + -22.221742423270456 + ], + [ + -47.38382977287146, + -22.22174974794297 + ], + [ + -47.38387696423408, + -22.221757259679386 + ], + [ + -47.383920953620326, + -22.221764739566492 + ], + [ + -47.38396068786901, + -22.22177238232716 + ], + [ + -47.38398785747898, + -22.22177766781399 + ], + [ + -47.38401337205389, + -22.221782591429758 + ], + [ + -47.384046622213816, + -22.22178903618396 + ], + [ + -47.384082108413146, + -22.22179624918388 + ], + [ + -47.38412767757241, + -22.2218057884966 + ], + [ + -47.38416966135803, + -22.221815854719413 + ], + [ + -47.38421370972956, + -22.22182645182745 + ], + [ + -47.38424750981952, + -22.22183573866789 + ], + [ + -47.38427024809021, + -22.221841509563333 + ], + [ + -47.38431461528451, + -22.22185336070741 + ], + [ + -47.3843388908427, + -22.221860363288457 + ], + [ + -47.38437078760708, + -22.22186865331853 + ], + [ + -47.384419371602064, + -22.22188311079358 + ], + [ + -47.384451260063855, + -22.2218929200199 + ], + [ + -47.384479935626864, + -22.22190171116416 + ], + [ + -47.384500254965864, + -22.221908045277154 + ], + [ + -47.384521250466854, + -22.221914234574783 + ], + [ + -47.38456557772159, + -22.221927445374014 + ], + [ + -47.38459932205299, + -22.221938759721937 + ], + [ + -47.38460615929267, + -22.221940902606406 + ], + [ + -47.38461132555511, + -22.221942399788063 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "69", + "Name": "Curvas", + "Length": 139.48308161212697, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "69", + "type": "LineString", + "coordinates": [ + [ + -47.383251726600975, + -22.221710704310127 + ], + [ + -47.38339584711671, + -22.22170844263112 + ], + [ + -47.3834737052198, + -22.221708416295087 + ], + [ + -47.38356702669072, + -22.22171112009155 + ], + [ + -47.383656957521055, + -22.22171761666511 + ], + [ + -47.38369000522475, + -22.221720750897685 + ], + [ + -47.38372134851893, + -22.221723319418313 + ], + [ + -47.38377584019292, + -22.221728987347497 + ], + [ + -47.3838320147361, + -22.221736366954325 + ], + [ + -47.38387949617508, + -22.22174392486434 + ], + [ + -47.38392373163592, + -22.221751446593977 + ], + [ + -47.383963646346906, + -22.221759124066338 + ], + [ + -47.38399082054481, + -22.22176441044595 + ], + [ + -47.38401632365377, + -22.221769331849284 + ], + [ + -47.38404965550752, + -22.221775792434396 + ], + [ + -47.38408525459607, + -22.221783028380674 + ], + [ + -47.384131086996845, + -22.221792622799935 + ], + [ + -47.38417328827185, + -22.22180274116938 + ], + [ + -47.38421758837657, + -22.221813398838293 + ], + [ + -47.38425148087173, + -22.221822711068047 + ], + [ + -47.38427416604453, + -22.22182846848759 + ], + [ + -47.38431877313309, + -22.221840383711324 + ], + [ + -47.38434299886278, + -22.221847371918916 + ], + [ + -47.384374958032076, + -22.221855678168367 + ], + [ + -47.38442386677925, + -22.221870232282512 + ], + [ + -47.384455829482825, + -22.221880064346596 + ], + [ + -47.38448451889244, + -22.221888859722757 + ], + [ + -47.384504758995035, + -22.221895169135657 + ], + [ + -47.384525662367636, + -22.221901331274744 + ], + [ + -47.384570259967525, + -22.22191462264486 + ], + [ + -47.384579024556366, + -22.221917561376024 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "70", + "Name": "Curvas", + "Length": 135.32266213155788, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "70", + "type": "LineString", + "coordinates": [ + [ + -47.383259431889705, + -22.221697040089737 + ], + [ + -47.383395721916294, + -22.221694901292125 + ], + [ + -47.38347392880988, + -22.22169487483876 + ], + [ + -47.3835678158089, + -22.221697595021002 + ], + [ + -47.38365825713451, + -22.221704128473387 + ], + [ + -47.38369137976629, + -22.22170726981243 + ], + [ + -47.38372279364456, + -22.221709844117523 + ], + [ + -47.38377766389402, + -22.221715551424566 + ], + [ + -47.38383425660046, + -22.22172298596565 + ], + [ + -47.38388202811576, + -22.221730590049315 + ], + [ + -47.383926509651126, + -22.22173815362144 + ], + [ + -47.38396660482439, + -22.221745865805513 + ], + [ + -47.38399378361023, + -22.22175115307787 + ], + [ + -47.38401927525321, + -22.22175607226878 + ], + [ + -47.38405268863345, + -22.22176254865078 + ], + [ + -47.38408840077854, + -22.221769807577466 + ], + [ + -47.384134496420764, + -22.221779457103256 + ], + [ + -47.384176915185144, + -22.221789627619298 + ], + [ + -47.38422146691736, + -22.221800345820064 + ], + [ + -47.38425545192333, + -22.221809683468162 + ], + [ + -47.384278083998225, + -22.22181542741178 + ], + [ + -47.38432293098104, + -22.221827406715196 + ], + [ + -47.38434710688221, + -22.22183438054934 + ], + [ + -47.38437912845643, + -22.22184270301813 + ], + [ + -47.384428361955734, + -22.22185735377136 + ], + [ + -47.38446038501658, + -22.221867204402187 + ], + [ + -47.38448910193159, + -22.22187600821092 + ], + [ + -47.38450926302349, + -22.221882292994085 + ], + [ + -47.38453007426773, + -22.22188842797462 + ], + [ + -47.384548139833825, + -22.221893812034093 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "71", + "Name": "Curvas", + "Length": 131.2630092213141, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "71", + "type": "LineString", + "coordinates": [ + [ + -47.38326713717702, + -22.221683375869116 + ], + [ + -47.38339559671603, + -22.221681359953124 + ], + [ + -47.38347415240004, + -22.221681333382413 + ], + [ + -47.38356860492704, + -22.22168406995044 + ], + [ + -47.383659556747844, + -22.22169064028166 + ], + [ + -47.38369275430768, + -22.221693788727197 + ], + [ + -47.38372423877002, + -22.221696368816737 + ], + [ + -47.38377948759487, + -22.22170211550163 + ], + [ + -47.383836498464504, + -22.221709604976933 + ], + [ + -47.38388456005607, + -22.221717255234257 + ], + [ + -47.383929287665914, + -22.221724860648845 + ], + [ + -47.38396956330141, + -22.221732607544634 + ], + [ + -47.38399674667524, + -22.221737895709733 + ], + [ + -47.38402222685221, + -22.22174281268823 + ], + [ + -47.384055721928284, + -22.221749304901564 + ], + [ + -47.384091546960526, + -22.221756586774212 + ], + [ + -47.38413790584415, + -22.221766291406553 + ], + [ + -47.38418054209785, + -22.221776514069155 + ], + [ + -47.384225345564076, + -22.221787292831014 + ], + [ + -47.3842594229743, + -22.221796655868214 + ], + [ + -47.3842820019513, + -22.221802386335927 + ], + [ + -47.38432708882833, + -22.221814429718993 + ], + [ + -47.38435121490098, + -22.221821389179684 + ], + [ + -47.38438329888009, + -22.22182972786781 + ], + [ + -47.3844328571315, + -22.221844475260124 + ], + [ + -47.38446495443718, + -22.221854348729675 + ], + [ + -47.38449368519881, + -22.22186315677034 + ], + [ + -47.384513767051224, + -22.221869416852446 + ], + [ + -47.3845180615844, + -22.22187068284362 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "72", + "Name": "Curvas", + "Length": 127.09530654341798, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "72", + "type": "LineString", + "coordinates": [ + [ + -47.38327484246295, + -22.221669711648214 + ], + [ + -47.383395471515925, + -22.221667818614083 + ], + [ + -47.3834743759903, + -22.221667791926055 + ], + [ + -47.38356939404519, + -22.22167054487987 + ], + [ + -47.38366085636106, + -22.221677152089924 + ], + [ + -47.38369412884895, + -22.22168030764192 + ], + [ + -47.38372568389535, + -22.221682893515922 + ], + [ + -47.38378131129553, + -22.221688679578655 + ], + [ + -47.383838740328265, + -22.221696223988236 + ], + [ + -47.38388709199604, + -22.221703920419195 + ], + [ + -47.38393206568032, + -22.221711567676273 + ], + [ + -47.38397252177801, + -22.22171934928376 + ], + [ + -47.38399970973979, + -22.221724638341605 + ], + [ + -47.38402517845078, + -22.221729553107668 + ], + [ + -47.384058755051335, + -22.221736061117483 + ], + [ + -47.38409469314205, + -22.221743365970944 + ], + [ + -47.38414131526703, + -22.221753125709803 + ], + [ + -47.38418416901001, + -22.22176340051897 + ], + [ + -47.384229224102754, + -22.22177423981243 + ], + [ + -47.38426339402466, + -22.221783628268224 + ], + [ + -47.38428591990378, + -22.221789345260017 + ], + [ + -47.384331246674954, + -22.221801452722747 + ], + [ + -47.38435532291911, + -22.221808397809987 + ], + [ + -47.38438746930312, + -22.221816752717448 + ], + [ + -47.38443735230656, + -22.221831596748835 + ], + [ + -47.38446950996641, + -22.22184148878417 + ], + [ + -47.38448711512716, + -22.22184688602971 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "73", + "Name": "Curvas", + "Length": 122.93694138559697, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "73", + "type": "LineString", + "coordinates": [ + [ + -47.383282547747484, + -22.221656047427068 + ], + [ + -47.383395346315986, + -22.22165427727506 + ], + [ + -47.38347459958064, + -22.221654250469687 + ], + [ + -47.383570183163314, + -22.221657019809278 + ], + [ + -47.38366215597416, + -22.221663663898173 + ], + [ + -47.38369550339007, + -22.221666826556632 + ], + [ + -47.383727129020535, + -22.22166941821514 + ], + [ + -47.38378313499596, + -22.221675243655685 + ], + [ + -47.38384098219172, + -22.221682842999524 + ], + [ + -47.38388962393563, + -22.221690585604122 + ], + [ + -47.38393484369431, + -22.221698274703652 + ], + [ + -47.38397548025417, + -22.22170609102284 + ], + [ + -47.38400267280388, + -22.22171138097344 + ], + [ + -47.38402813004891, + -22.22171629352713 + ], + [ + -47.38406178834721, + -22.221722817368605 + ], + [ + -47.38409783932308, + -22.22173014516763 + ], + [ + -47.38414472468938, + -22.221739960013004 + ], + [ + -47.3841877959216, + -22.221750286968774 + ], + [ + -47.38423310274917, + -22.221761186823546 + ], + [ + -47.384267365074386, + -22.221770600668183 + ], + [ + -47.38428983785565, + -22.22177630418407 + ], + [ + -47.38433540452093, + -22.22178847572643 + ], + [ + -47.3843594309366, + -22.22179540644024 + ], + [ + -47.38439163972551, + -22.221803777567033 + ], + [ + -47.38444184748089, + -22.22181871823748 + ], + [ + -47.384456243159136, + -22.22182314649558 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "74", + "Name": "Curvas", + "Length": 113.36595607757059, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "74", + "type": "LineString", + "coordinates": [ + [ + -47.3833433201366, + -22.221641550420774 + ], + [ + -47.3833952211162, + -22.221640735935974 + ], + [ + -47.38347482317108, + -22.221640709013293 + ], + [ + -47.38357097228141, + -22.22164349473869 + ], + [ + -47.38366345558715, + -22.221650175706415 + ], + [ + -47.38369687793107, + -22.221653345471342 + ], + [ + -47.38372857414557, + -22.22165594291431 + ], + [ + -47.38378495869618, + -22.22166180773269 + ], + [ + -47.383843224054885, + -22.221669462010798 + ], + [ + -47.38389215587488, + -22.22167725078901 + ], + [ + -47.38393762170791, + -22.22168498173103 + ], + [ + -47.383978438729905, + -22.221692832761914 + ], + [ + -47.38400563586756, + -22.221698123605254 + ], + [ + -47.384031081646626, + -22.221703033946525 + ], + [ + -47.3840648214674, + -22.221709573584082 + ], + [ + -47.384100985503665, + -22.22171692436431 + ], + [ + -47.384148134111214, + -22.221726794316176 + ], + [ + -47.384191422832636, + -22.221737173418504 + ], + [ + -47.38423698128576, + -22.221748133804628 + ], + [ + -47.3842713361235, + -22.221757573068093 + ], + [ + -47.3842937558069, + -22.221763263108055 + ], + [ + -47.38433956236626, + -22.221775498730075 + ], + [ + -47.384363538953444, + -22.221782415070436 + ], + [ + -47.384395810147225, + -22.221790802416542 + ], + [ + -47.38442577879478, + -22.22179972039535 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "75", + "Name": "Curvas", + "Length": 109.31453554044786, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "75", + "type": "LineString", + "coordinates": [ + [ + -47.38335123557492, + -22.22162788290027 + ], + [ + -47.38339509591657, + -22.2216271945969 + ], + [ + -47.383475046761575, + -22.221627167556885 + ], + [ + -47.38357176139948, + -22.221629969668083 + ], + [ + -47.383664755199995, + -22.22163668751466 + ], + [ + -47.38369825247193, + -22.221639864386045 + ], + [ + -47.38373001927045, + -22.221642467613506 + ], + [ + -47.38378678239617, + -22.22164837180969 + ], + [ + -47.38384546591773, + -22.22165608102205 + ], + [ + -47.383894687813765, + -22.22166391597384 + ], + [ + -47.38394039972109, + -22.22167168875836 + ], + [ + -47.38398139720521, + -22.221679574500964 + ], + [ + -47.384008598930805, + -22.221684866237062 + ], + [ + -47.38403403324389, + -22.221689774365913 + ], + [ + -47.38406785476434, + -22.22169632983556 + ], + [ + -47.38410413168378, + -22.221703703560955 + ], + [ + -47.38415154353251, + -22.221713628619312 + ], + [ + -47.3841950497431, + -22.22172405986821 + ], + [ + -47.38424085993185, + -22.221735080815908 + ], + [ + -47.384275307171976, + -22.221744545467935 + ], + [ + -47.384297673757516, + -22.221750222032014 + ], + [ + -47.384343720210914, + -22.221762521733652 + ], + [ + -47.384367646969615, + -22.22176942370057 + ], + [ + -47.384395943490254, + -22.22177677802156 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "76", + "Name": "Curvas", + "Length": 105.20255975809475, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "76", + "type": "LineString", + "coordinates": [ + [ + -47.38336215060415, + -22.221614168306605 + ], + [ + -47.38339497071709, + -22.22161365325777 + ], + [ + -47.38347527035219, + -22.221613626100456 + ], + [ + -47.38357255051754, + -22.221616444597476 + ], + [ + -47.38366605481274, + -22.221623199322888 + ], + [ + -47.383699627012675, + -22.221626383300734 + ], + [ + -47.383731464395204, + -22.221628992312656 + ], + [ + -47.38378860609595, + -22.22163493588667 + ], + [ + -47.38384770778029, + -22.221642700033296 + ], + [ + -47.383897219752306, + -22.221650581158706 + ], + [ + -47.3839431777339, + -22.2216583957857 + ], + [ + -47.383984355680084, + -22.221666316239993 + ], + [ + -47.38401156199362, + -22.22167160886884 + ], + [ + -47.384036984840726, + -22.22167651478526 + ], + [ + -47.38407088788168, + -22.221683086050586 + ], + [ + -47.38410727786342, + -22.22169048275758 + ], + [ + -47.38415495295332, + -22.22170046292242 + ], + [ + -47.38419867665302, + -22.221710946317888 + ], + [ + -47.38424473846635, + -22.221722027796634 + ], + [ + -47.38427927821984, + -22.221731517867738 + ], + [ + -47.38430159170755, + -22.221737180955923 + ], + [ + -47.384347878054925, + -22.221749544737165 + ], + [ + -47.38436812230468, + -22.221755384439394 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "77", + "Name": "Curvas", + "Length": 101.43402807896966, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "77", + "type": "LineString", + "coordinates": [ + [ + -47.383368403156986, + -22.221600526881307 + ], + [ + -47.38339484551777, + -22.22160011191864 + ], + [ + -47.38347549394288, + -22.221600084644024 + ], + [ + -47.38357333963559, + -22.221602919526855 + ], + [ + -47.38366735442537, + -22.221609711131116 + ], + [ + -47.38370100155327, + -22.221612902215437 + ], + [ + -47.3837329095198, + -22.22161551701181 + ], + [ + -47.383790429795496, + -22.22162149996366 + ], + [ + -47.38384994964255, + -22.22162931904451 + ], + [ + -47.38389975169048, + -22.22163724634355 + ], + [ + -47.383945955746285, + -22.221645102813 + ], + [ + -47.38398731415448, + -22.22165305797897 + ], + [ + -47.384014525055974, + -22.221658351500555 + ], + [ + -47.38403993643711, + -22.2216632552046 + ], + [ + -47.38407392117966, + -22.221669842302415 + ], + [ + -47.38411042404257, + -22.221677261954156 + ], + [ + -47.38415836237359, + -22.2216872972255 + ], + [ + -47.38420230356237, + -22.22169783276751 + ], + [ + -47.38424861711207, + -22.221708974808045 + ], + [ + -47.38428324926708, + -22.221718490267516 + ], + [ + -47.384305509656976, + -22.22172413987978 + ], + [ + -47.38433918990981, + -22.221733136373608 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "78", + "Name": "Curvas", + "Length": 97.63201531937344, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "78", + "type": "LineString", + "coordinates": [ + [ + -47.38337601123428, + -22.22158686418334 + ], + [ + -47.383394720318606, + -22.22158657057946 + ], + [ + -47.38347571753368, + -22.22158654318756 + ], + [ + -47.38357412875361, + -22.221589394456227 + ], + [ + -47.383668654037876, + -22.221596222939326 + ], + [ + -47.38370237609374, + -22.221599421130104 + ], + [ + -47.38373435464425, + -22.221602041710945 + ], + [ + -47.38379225349483, + -22.221608064040627 + ], + [ + -47.38385219150451, + -22.221615938055727 + ], + [ + -47.38390228362831, + -22.221623911528386 + ], + [ + -47.383948733758274, + -22.221631809840297 + ], + [ + -47.38399027262847, + -22.22163979971795 + ], + [ + -47.384017488117905, + -22.22164509413228 + ], + [ + -47.38404288803308, + -22.221649995623896 + ], + [ + -47.38407695429417, + -22.221656598517 + ], + [ + -47.38411357022127, + -22.22166404115072 + ], + [ + -47.38416177179336, + -22.221674131528538 + ], + [ + -47.38420593047117, + -22.22168471921708 + ], + [ + -47.384252495644525, + -22.22169592178845 + ], + [ + -47.3842872203137, + -22.22170546266722 + ], + [ + -47.384309427605785, + -22.221711098803574 + ], + [ + -47.384311118678255, + -22.22171155051426 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "79", + "Name": "Curvas", + "Length": 93.77328632538143, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "79", + "type": "LineString", + "coordinates": [ + [ + -47.38338472750295, + -22.22157303255897 + ], + [ + -47.38347594112455, + -22.221573001731084 + ], + [ + -47.3835749178716, + -22.221575869385564 + ], + [ + -47.383669953650255, + -22.221582734747514 + ], + [ + -47.38370375063408, + -22.221585940044783 + ], + [ + -47.38373579976855, + -22.2215885664101 + ], + [ + -47.38379407719393, + -22.2215946281176 + ], + [ + -47.38385443336616, + -22.22160255706693 + ], + [ + -47.38390481556579, + -22.22161057671317 + ], + [ + -47.383951511769865, + -22.221618516867547 + ], + [ + -47.38399323110205, + -22.221626541456878 + ], + [ + -47.38402045117941, + -22.221631836763958 + ], + [ + -47.384045839628605, + -22.221636736043177 + ], + [ + -47.38407998759317, + -22.221643354769125 + ], + [ + -47.38411671639948, + -22.22165082034723 + ], + [ + -47.38416518121258, + -22.22166096583153 + ], + [ + -47.3842095573794, + -22.22167160566663 + ], + [ + -47.38425637428986, + -22.221682868800006 + ], + [ + -47.38428351849897, + -22.221690326878708 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "80", + "Name": "Curvas", + "Length": 89.8662516659199, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "80", + "type": "LineString", + "coordinates": [ + [ + -47.3833931709164, + -22.221559488325692 + ], + [ + -47.383476164715525, + -22.22155946027459 + ], + [ + -47.383575706989575, + -22.22156234431492 + ], + [ + -47.38367125326253, + -22.221569246555713 + ], + [ + -47.383705125174295, + -22.221572458959436 + ], + [ + -47.38373724489271, + -22.22157509110922 + ], + [ + -47.383795900892835, + -22.22158119219455 + ], + [ + -47.38385667522753, + -22.22158917607812 + ], + [ + -47.38390734750292, + -22.22159724189797 + ], + [ + -47.38395428978105, + -22.221605223894798 + ], + [ + -47.38399618957517, + -22.221613283195804 + ], + [ + -47.384023414240474, + -22.221618579395635 + ], + [ + -47.38404879122371, + -22.221623476462426 + ], + [ + -47.38408302070488, + -22.221630110983277 + ], + [ + -47.38411986257724, + -22.22163759954374 + ], + [ + -47.384168590631305, + -22.221647800134498 + ], + [ + -47.38421318428709, + -22.22165849211614 + ], + [ + -47.38425529330772, + -22.221668622629387 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "81", + "Name": "Curvas", + "Length": 86.20121578727829, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "81", + "type": "LineString", + "coordinates": [ + [ + -47.38340134624875, + -22.221545944182747 + ], + [ + -47.383476388306576, + -22.22154591881808 + ], + [ + -47.38357649610752, + -22.22154881924425 + ], + [ + -47.383672552874685, + -22.221555758363916 + ], + [ + -47.383706499714336, + -22.221558977874103 + ], + [ + -47.3837386900167, + -22.221561615808344 + ], + [ + -47.38379772459151, + -22.22156775627149 + ], + [ + -47.38385891708857, + -22.221575795089304 + ], + [ + -47.383909879439656, + -22.22158390708273 + ], + [ + -47.383957067791826, + -22.221591930922 + ], + [ + -47.383999148047835, + -22.221600024934705 + ], + [ + -47.38402637730107, + -22.221605322027262 + ], + [ + -47.384051742818386, + -22.221610216881672 + ], + [ + -47.384086054004875, + -22.221616867235763 + ], + [ + -47.38412300875452, + -22.221624378740213 + ], + [ + -47.384172000049496, + -22.221634634437418 + ], + [ + -47.3842168111942, + -22.221645378565587 + ], + [ + -47.384228823972926, + -22.221648268576278 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "82", + "Name": "Curvas", + "Length": 82.69697028916926, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "82", + "type": "LineString", + "coordinates": [ + [ + -47.38340799225711, + -22.221532400556477 + ], + [ + -47.38347661189773, + -22.221532377361548 + ], + [ + -47.38357728522546, + -22.221535294173577 + ], + [ + -47.383673852486716, + -22.221542270172087 + ], + [ + -47.38370787425428, + -22.22154549678874 + ], + [ + -47.38374013514057, + -22.22154814050745 + ], + [ + -47.38379954828997, + -22.221554320348414 + ], + [ + -47.38386115894933, + -22.22156241410048 + ], + [ + -47.383912411376066, + -22.221570572267495 + ], + [ + -47.38395984580221, + -22.221578637949204 + ], + [ + -47.38400210652008, + -22.221586766673585 + ], + [ + -47.38402934036126, + -22.22159206465889 + ], + [ + -47.384054694412626, + -22.22159695730087 + ], + [ + -47.38408908711379, + -22.22160362344948 + ], + [ + -47.38412615493134, + -22.221611157936668 + ], + [ + -47.384175409467176, + -22.221621468740317 + ], + [ + -47.38420238244733, + -22.221627935907534 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "83", + "Name": "Curvas", + "Length": 77.47974879268027, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "83", + "type": "LineString", + "coordinates": [ + [ + -47.38341494264741, + -22.221518856827128 + ], + [ + -47.38347683548894, + -22.221518835905023 + ], + [ + -47.383578074343376, + -22.221521769102882 + ], + [ + -47.38367515209862, + -22.221528781980265 + ], + [ + -47.383709248794084, + -22.22153201570338 + ], + [ + -47.38374158026428, + -22.22153466520657 + ], + [ + -47.383801371988206, + -22.221540884425355 + ], + [ + -47.383863400809794, + -22.22154903311161 + ], + [ + -47.383914943312114, + -22.221557237452217 + ], + [ + -47.38396262381219, + -22.221565344976373 + ], + [ + -47.384005064991904, + -22.221573508412412 + ], + [ + -47.384032303421016, + -22.221578807290477 + ], + [ + -47.384057646006404, + -22.22158369772004 + ], + [ + -47.38409212041478, + -22.221590379702295 + ], + [ + -47.38412930110768, + -22.22159793713306 + ], + [ + -47.384159982199414, + -22.221604359825292 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "84", + "Name": "Curvas", + "Length": 74.22254177831378, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "84", + "type": "LineString", + "coordinates": [ + [ + -47.383421776300075, + -22.221505313136984 + ], + [ + -47.38347705908027, + -22.221505294448455 + ], + [ + -47.38357886346128, + -22.221508244032186 + ], + [ + -47.383676451710414, + -22.221515293788418 + ], + [ + -47.38371062333376, + -22.221518534617996 + ], + [ + -47.38374302538785, + -22.22152118990566 + ], + [ + -47.38380319568623, + -22.221527448502258 + ], + [ + -47.38386564266995, + -22.221535652122746 + ], + [ + -47.38391747524782, + -22.22154390263695 + ], + [ + -47.38396540182177, + -22.221552052003542 + ], + [ + -47.384008023463274, + -22.22156025015125 + ], + [ + -47.38403526648033, + -22.22156554992205 + ], + [ + -47.38406059759976, + -22.22157043813919 + ], + [ + -47.38409515352093, + -22.221577135915567 + ], + [ + -47.38413244728355, + -22.22158471632945 + ], + [ + -47.38413583637138, + -22.221585425791453 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "85", + "Name": "Curvas", + "Length": 70.99027692795134, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "85", + "type": "LineString", + "coordinates": [ + [ + -47.3834287195387, + -22.221491769409553 + ], + [ + -47.38347728267169, + -22.221491752991867 + ], + [ + -47.38357965257916, + -22.22149471896147 + ], + [ + -47.38367775132207, + -22.22150180559656 + ], + [ + -47.38371199787329, + -22.221505053532628 + ], + [ + -47.38374447051127, + -22.221507714604744 + ], + [ + -47.38380501938402, + -22.22151401257915 + ], + [ + -47.38386788452983, + -22.221522271133875 + ], + [ + -47.38392000718317, + -22.22153056782165 + ], + [ + -47.383968179830944, + -22.221538759030672 + ], + [ + -47.38401098193421, + -22.22154699189005 + ], + [ + -47.3840382295392, + -22.221552292553607 + ], + [ + -47.384063549192675, + -22.22155717855835 + ], + [ + -47.38409818682288, + -22.221563892168707 + ], + [ + -47.38411200093067, + -22.221566700051834 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "86", + "Name": "Curvas", + "Length": 67.49328111588149, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "86", + "type": "LineString", + "coordinates": [ + [ + -47.38343566379275, + -22.22147822568156 + ], + [ + -47.3834775062632, + -22.221478211535267 + ], + [ + -47.38358044169703, + -22.22148119389075 + ], + [ + -47.38367905093363, + -22.2214883174047 + ], + [ + -47.38371337241271, + -22.221491572447224 + ], + [ + -47.38374591563454, + -22.221494239303812 + ], + [ + -47.3838068430816, + -22.221500576656048 + ], + [ + -47.38387012638939, + -22.22150889014498 + ], + [ + -47.38392253911816, + -22.22151723300634 + ], + [ + -47.38397095783972, + -22.22152546605779 + ], + [ + -47.38401394040472, + -22.221533733628835 + ], + [ + -47.38404119259764, + -22.22153903518514 + ], + [ + -47.384066500785174, + -22.221543918977456 + ], + [ + -47.384085617228195, + -22.221547624203613 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "87", + "Name": "Curvas", + "Length": 64.3036628482814, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "87", + "type": "LineString", + "coordinates": [ + [ + -47.38344182741254, + -22.221464682217295 + ], + [ + -47.38347772985477, + -22.221464670078657 + ], + [ + -47.38358123081485, + -22.221467668819997 + ], + [ + -47.383680350545056, + -22.221474829212866 + ], + [ + -47.38371474695197, + -22.22147809136183 + ], + [ + -47.38374736075767, + -22.221480764002898 + ], + [ + -47.38380866677895, + -22.221487140732933 + ], + [ + -47.383872368248625, + -22.22149550915608 + ], + [ + -47.38392507105281, + -22.221503898191 + ], + [ + -47.38397373584811, + -22.22151217308489 + ], + [ + -47.38401689887478, + -22.22152047536757 + ], + [ + -47.38404415565564, + -22.22152577781661 + ], + [ + -47.38406136178372, + -22.22152909813182 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "88", + "Name": "Curvas", + "Length": 61.22329272413879, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "88", + "type": "LineString", + "coordinates": [ + [ + -47.38344772391415, + -22.221451138843122 + ], + [ + -47.38347795344645, + -22.22145112862202 + ], + [ + -47.383582019932675, + -22.221454143749256 + ], + [ + -47.383681650156376, + -22.221461341020984 + ], + [ + -47.38371612149112, + -22.221464610276417 + ], + [ + -47.38374880588065, + -22.221467288701945 + ], + [ + -47.383810490476094, + -22.221473704809817 + ], + [ + -47.38387461010759, + -22.221482128167164 + ], + [ + -47.383927602987086, + -22.221490563375664 + ], + [ + -47.38397651385609, + -22.22149888011197 + ], + [ + -47.38401985734441, + -22.221507217106296 + ], + [ + -47.384037883441344, + -22.221510723847057 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "89", + "Name": "Curvas", + "Length": 57.4707792376572, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "89", + "type": "LineString", + "coordinates": [ + [ + -47.383455596073546, + -22.22143693289692 + ], + [ + -47.38358280905047, + -22.22144061867851 + ], + [ + -47.38368294976758, + -22.221447852829083 + ], + [ + -47.383717496030116, + -22.221451129190992 + ], + [ + -47.38375025100347, + -22.22145381340098 + ], + [ + -47.38381231417301, + -22.221460268886688 + ], + [ + -47.383876851966235, + -22.22146874717822 + ], + [ + -47.38393013492099, + -22.221477228560268 + ], + [ + -47.383979291863646, + -22.221485587139 + ], + [ + -47.384009937326354, + -22.22149148170518 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "90", + "Name": "Curvas", + "Length": 54.04916906670863, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "90", + "type": "LineString", + "coordinates": [ + [ + -47.38346299319667, + -22.221423599283703 + ], + [ + -47.38358359816826, + -22.22142709360775 + ], + [ + -47.38368424937867, + -22.221434364637187 + ], + [ + -47.383718870569, + -22.221437648105557 + ], + [ + -47.38375169612617, + -22.22144033810002 + ], + [ + -47.383814137869706, + -22.221446832963533 + ], + [ + -47.3838790938246, + -22.22145536618928 + ], + [ + -47.383932666854555, + -22.221463893744897 + ], + [ + -47.383982069870825, + -22.22147229416604 + ], + [ + -47.3839846792538, + -22.22147279607334 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "91", + "Name": "Curvas", + "Length": 50.692867072688856, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "91", + "type": "LineString", + "coordinates": [ + [ + -47.383470158440545, + -22.22141025895198 + ], + [ + -47.383584387286, + -22.22141356853695 + ], + [ + -47.383685548989625, + -22.22142087644528 + ], + [ + -47.383720245107725, + -22.221424167020135 + ], + [ + -47.3837531412487, + -22.221426862799053 + ], + [ + -47.383815961566185, + -22.22143339704038 + ], + [ + -47.383881335682666, + -22.221441985200304 + ], + [ + -47.38393519878776, + -22.22145055892952 + ], + [ + -47.38395970127056, + -22.22145472529827 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "92", + "Name": "Curvas", + "Length": 47.326857963576096, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "92", + "type": "LineString", + "coordinates": [ + [ + -47.38347840097634, + -22.221396949832737 + ], + [ + -47.38358517640374, + -22.22140004346616 + ], + [ + -47.383686848600476, + -22.221407388253365 + ], + [ + -47.38372161964634, + -22.221410685934686 + ], + [ + -47.3837545863711, + -22.221413387498067 + ], + [ + -47.383817785262444, + -22.221419961117203 + ], + [ + -47.38388357754044, + -22.22142860421134 + ], + [ + -47.38393567459584, + -22.221436896827765 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "93", + "Name": "Curvas", + "Length": 44.286170793215526, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "93", + "type": "LineString", + "coordinates": [ + [ + -47.38348510778163, + -22.221383596218136 + ], + [ + -47.38358596552146, + -22.221386518395366 + ], + [ + -47.383688148211206, + -22.221393900061482 + ], + [ + -47.38372299418481, + -22.221397204849232 + ], + [ + -47.38375603149335, + -22.2213999121971 + ], + [ + -47.38381960895849, + -22.221406525194034 + ], + [ + -47.383885819397875, + -22.22141522322236 + ], + [ + -47.3839131987663, + -22.2214195813691 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "94", + "Name": "Curvas", + "Length": 41.3036311806297, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "94", + "type": "LineString", + "coordinates": [ + [ + -47.383492868593756, + -22.221370273141375 + ], + [ + -47.38358675463917, + -22.22137299332456 + ], + [ + -47.38368944782181, + -22.22138041186955 + ], + [ + -47.38372436872315, + -22.22138372376376 + ], + [ + -47.38375747661546, + -22.221386436896097 + ], + [ + -47.383821432654315, + -22.22139308927084 + ], + [ + -47.38388806125504, + -22.22140184223336 + ], + [ + -47.38389231893201, + -22.221402519954694 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "105", + "Name": "Curvas", + "Length": 189.46774339776024, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "105", + "type": "LineString", + "coordinates": [ + [ + -47.38269368702304, + -22.222700299906567 + ], + [ + -47.382799427915636, + -22.222701985648225 + ], + [ + -47.38287338206308, + -22.222703874119738 + ], + [ + -47.38292482559564, + -22.222704249703142 + ], + [ + -47.38297812146236, + -22.222703023862774 + ], + [ + -47.38303173185513, + -22.222700507055755 + ], + [ + -47.38308375367506, + -22.22269780377084 + ], + [ + -47.38313640550686, + -22.222695169518545 + ], + [ + -47.38319014873368, + -22.222692261563918 + ], + [ + -47.38324397822093, + -22.222689380222523 + ], + [ + -47.38329765622992, + -22.222686400874075 + ], + [ + -47.38335122899766, + -22.2226842606829 + ], + [ + -47.38340486195777, + -22.22268341897772 + ], + [ + -47.38345760696961, + -22.222683401105456 + ], + [ + -47.383510210129884, + -22.222684925142122 + ], + [ + -47.38356338504081, + -22.222688766445415 + ], + [ + -47.38359103788468, + -22.222691389012613 + ], + [ + -47.383617299088684, + -22.222693541051463 + ], + [ + -47.38364453313703, + -22.222696373773292 + ], + [ + -47.38367059971458, + -22.222699798103715 + ], + [ + -47.38369719551399, + -22.22270403150233 + ], + [ + -47.38372371348602, + -22.222708540562035 + ], + [ + -47.38375063482429, + -22.222713718782177 + ], + [ + -47.38377747868762, + -22.222718940883617 + ], + [ + -47.38380380735294, + -22.22272402158138 + ], + [ + -47.383831263155464, + -22.22272934354583 + ], + [ + -47.383858728222265, + -22.22273492613744 + ], + [ + -47.38388560710993, + -22.222740552870004 + ], + [ + -47.38391214904607, + -22.222746916669145 + ], + [ + -47.3839383280019, + -22.22275321496807 + ], + [ + -47.38396556352244, + -22.22276069812506 + ], + [ + -47.38399207176891, + -22.2227674258152 + ], + [ + -47.38401940635897, + -22.22277472728127 + ], + [ + -47.38404721976521, + -22.222782750381874 + ], + [ + -47.38407468575093, + -22.222789888833127 + ], + [ + -47.38410021219367, + -22.222797484899854 + ], + [ + -47.38412732577423, + -22.22280582530985 + ], + [ + -47.38415452991521, + -22.22281416581189 + ], + [ + -47.38418046706352, + -22.222822251142578 + ], + [ + -47.38420800372061, + -22.22283036870624 + ], + [ + -47.384233136349486, + -22.222837858943723 + ], + [ + -47.38425963367161, + -22.222846743383194 + ], + [ + -47.38428795879161, + -22.222855620850854 + ], + [ + -47.38431282895768, + -22.222862828209816 + ], + [ + -47.3843407262105, + -22.22287177498576 + ], + [ + -47.384365948479704, + -22.22287890983543 + ], + [ + -47.38439147783572, + -22.22288696230605 + ], + [ + -47.38441598577135, + -22.222894270928098 + ], + [ + -47.38444072538751, + -22.222902977947317 + ], + [ + -47.384463362120314, + -22.22290976664777 + ], + [ + -47.384482511917575, + -22.222916477453406 + ], + [ + -47.384497552236446, + -22.222921686651944 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "106", + "Name": "Curvas", + "Length": 189.74951657925303, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "106", + "type": "LineString", + "coordinates": [ + [ + -47.38270125622619, + -22.222686877208815 + ], + [ + -47.38279975178752, + -22.222688447442604 + ], + [ + -47.38287363847597, + -22.222690334192176 + ], + [ + -47.38292470299547, + -22.222690707008894 + ], + [ + -47.3829775755821, + -22.222689490904685 + ], + [ + -47.38303096041773, + -22.22268698468715 + ], + [ + -47.38308295824302, + -22.222684282649535 + ], + [ + -47.383135593408774, + -22.222681649231525 + ], + [ + -47.383189304944864, + -22.222678742992073 + ], + [ + -47.38324312810449, + -22.22267586198722 + ], + [ + -47.383296911709294, + -22.222672876778184 + ], + [ + -47.38335079463665, + -22.222670724196814 + ], + [ + -47.383404736746094, + -22.222669877640367 + ], + [ + -47.38345783055325, + -22.22266985965036 + ], + [ + -47.383510999249495, + -22.22267140007237 + ], + [ + -47.3835646846628, + -22.222675278254332 + ], + [ + -47.383592412435796, + -22.222677907927984 + ], + [ + -47.38361874422487, + -22.2226800657513 + ], + [ + -47.38364635685394, + -22.222682937851083 + ], + [ + -47.38367284160053, + -22.222686417116012 + ], + [ + -47.38369972748022, + -22.222690696688513 + ], + [ + -47.38372649153015, + -22.22269524759102 + ], + [ + -47.38375359333312, + -22.22270046052311 + ], + [ + -47.38378044178446, + -22.22270568351731 + ], + [ + -47.383806758983646, + -22.222710762002627 + ], + [ + -47.38383429640085, + -22.222716099781778 + ], + [ + -47.38386187443861, + -22.222721705336273 + ], + [ + -47.38388901657126, + -22.222727387175823 + ], + [ + -47.383915775999625, + -22.222733803121976 + ], + [ + -47.38394220664188, + -22.22274016196858 + ], + [ + -47.38396953461882, + -22.222747670528864 + ], + [ + -47.3839959897667, + -22.222754384742977 + ], + [ + -47.38402356425411, + -22.222761750289298 + ], + [ + -47.38405132783117, + -22.222769759016323 + ], + [ + -47.38407885622263, + -22.222776913687056 + ], + [ + -47.384104707421635, + -22.222784606393784 + ], + [ + -47.38413188830333, + -22.22279296750646 + ], + [ + -47.38415911312399, + -22.222801314341883 + ], + [ + -47.38418497114357, + -22.22280937500611 + ], + [ + -47.38421241567112, + -22.22281746541096 + ], + [ + -47.38423781864851, + -22.222825036220126 + ], + [ + -47.384264418041795, + -22.222833954883807 + ], + [ + -47.38429244051375, + -22.222842737497732 + ], + [ + -47.3843173594134, + -22.22284995897978 + ], + [ + -47.38434520996509, + -22.222858890778678 + ], + [ + -47.38437039685994, + -22.222866015621843 + ], + [ + -47.384396029606904, + -22.222874100704214 + ], + [ + -47.38442077836831, + -22.222881481144114 + ], + [ + -47.384445529138006, + -22.222890192088986 + ], + [ + -47.38446815604435, + -22.222896977842616 + ], + [ + -47.38448760892276, + -22.222903794859317 + ], + [ + -47.38450384973833, + -22.22290941984864 + ], + [ + -47.38450751733007, + -22.222910396762252 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "107", + "Name": "Curvas", + "Length": 188.92730502068767, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "107", + "type": "LineString", + "coordinates": [ + [ + -47.3826785486127, + -22.222727145301352 + ], + [ + -47.38279878017207, + -22.222729062059443 + ], + [ + -47.38287286923756, + -22.22273095397481 + ], + [ + -47.382925070796446, + -22.22273133509159 + ], + [ + -47.38297921322361, + -22.22273008977886 + ], + [ + -47.383033274730785, + -22.222727551792858 + ], + [ + -47.38308534454003, + -22.222724846013346 + ], + [ + -47.383138029703936, + -22.22272221009247 + ], + [ + -47.38319183631219, + -22.222719298707485 + ], + [ + -47.383245678455864, + -22.22271641669297 + ], + [ + -47.38329914527202, + -22.222713449065722 + ], + [ + -47.38335209772035, + -22.22271133365498 + ], + [ + -47.3834051123816, + -22.22271050165234 + ], + [ + -47.383457159802624, + -22.222710484015586 + ], + [ + -47.3835086318906, + -22.222711975281605 + ], + [ + -47.383560785796455, + -22.22271574282756 + ], + [ + -47.38358828878204, + -22.222718351181832 + ], + [ + -47.38361440881587, + -22.222720491651717 + ], + [ + -47.38364088570255, + -22.22272324561773 + ], + [ + -47.38366611594179, + -22.222726560079124 + ], + [ + -47.38369213158046, + -22.22273070112988 + ], + [ + -47.38371815739658, + -22.22273512650404 + ], + [ + -47.38374471780531, + -22.222740235300254 + ], + [ + -47.38377155249261, + -22.22274545561618 + ], + [ + -47.38379790409023, + -22.222750540738826 + ], + [ + -47.383825196667686, + -22.22275583107472 + ], + [ + -47.38385243578816, + -22.222761367739697 + ], + [ + -47.38387878818573, + -22.222766884258288 + ], + [ + -47.3839048951373, + -22.22277314376336 + ], + [ + -47.383930570723926, + -22.222779320967952 + ], + [ + -47.38395762132784, + -22.222786753317287 + ], + [ + -47.38398423577151, + -22.222793507959516 + ], + [ + -47.38401109056675, + -22.222800681265056 + ], + [ + -47.38403900363133, + -22.222808733112803 + ], + [ + -47.38406634480555, + -22.222815839125072 + ], + [ + -47.38409122173563, + -22.222823241911797 + ], + [ + -47.3841182007139, + -22.222831540916406 + ], + [ + -47.38414536350059, + -22.222839868753315 + ], + [ + -47.384171458901285, + -22.222848003415294 + ], + [ + -47.384199179817486, + -22.22285617529659 + ], + [ + -47.38422377174924, + -22.222863504390702 + ], + [ + -47.38425006492896, + -22.222872320381708 + ], + [ + -47.38427899534518, + -22.222881387556857 + ], + [ + -47.38430376804411, + -22.22288856666964 + ], + [ + -47.38433175869922, + -22.222897543399693 + ], + [ + -47.38435705171715, + -22.222904698262422 + ], + [ + -47.384382374291185, + -22.222912685509467 + ], + [ + -47.384406400575116, + -22.222919850495774 + ], + [ + -47.384431117884226, + -22.222928549663727 + ], + [ + -47.38445377426996, + -22.222935344257873 + ], + [ + -47.38447231790477, + -22.222941842641227 + ], + [ + -47.3844780186567, + -22.222943817090794 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "108", + "Name": "Curvas", + "Length": 189.19752421029523, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "108", + "type": "LineString", + "coordinates": [ + [ + -47.382686117818544, + -22.222713722604098 + ], + [ + -47.38279910404382, + -22.222715523853847 + ], + [ + -47.382873125650285, + -22.222717414047285 + ], + [ + -47.38292494819596, + -22.222717792397383 + ], + [ + -47.382978667342876, + -22.22271655682084 + ], + [ + -47.383032503292824, + -22.22271402942433 + ], + [ + -47.383084549107416, + -22.222711324892128 + ], + [ + -47.38313721760527, + -22.222708689805525 + ], + [ + -47.38319099252279, + -22.222705780135726 + ], + [ + -47.38324482833959, + -22.22270289845768 + ], + [ + -47.38329840075084, + -22.222699924969902 + ], + [ + -47.38335166335891, + -22.22269779716896 + ], + [ + -47.383404987169605, + -22.222696960315034 + ], + [ + -47.38345738338608, + -22.222696942560518 + ], + [ + -47.38350942101025, + -22.222698450211876 + ], + [ + -47.383562085418696, + -22.222702254636495 + ], + [ + -47.383589663333424, + -22.22270487009723 + ], + [ + -47.38361585395236, + -22.222707016351578 + ], + [ + -47.38364270941992, + -22.222709809695537 + ], + [ + -47.38366835782834, + -22.22271317909142 + ], + [ + -47.3836946635474, + -22.22271736631612 + ], + [ + -47.3837209354415, + -22.22272183353307 + ], + [ + -47.38374767631502, + -22.22272697704123 + ], + [ + -47.38377451559033, + -22.222732198249922 + ], + [ + -47.38380085572181, + -22.22273728116011 + ], + [ + -47.38382822991692, + -22.222742587311323 + ], + [ + -47.38385558200545, + -22.22274814693859 + ], + [ + -47.38388219764809, + -22.222753718564178 + ], + [ + -47.383908522091964, + -22.222760030216268 + ], + [ + -47.38393444936777, + -22.2227662679693 + ], + [ + -47.38396159242545, + -22.222773725721208 + ], + [ + -47.38398815377053, + -22.22278046688739 + ], + [ + -47.3840152484632, + -22.2227877042732 + ], + [ + -47.384043111698595, + -22.222795741747365 + ], + [ + -47.38407051527857, + -22.222802863979133 + ], + [ + -47.384095716965014, + -22.222810363405863 + ], + [ + -47.38412276324444, + -22.22281868311316 + ], + [ + -47.384149946714274, + -22.222827017284516 + ], + [ + -47.38417596298276, + -22.222835127278962 + ], + [ + -47.384203591769406, + -22.222843272001445 + ], + [ + -47.38422845404975, + -22.22285068166726 + ], + [ + -47.38425484930068, + -22.222859531882488 + ], + [ + -47.384283477068756, + -22.222868504203873 + ], + [ + -47.38430829850127, + -22.22287569743977 + ], + [ + -47.38433624245523, + -22.222884659192758 + ], + [ + -47.38436150009879, + -22.222891804048956 + ], + [ + -47.38438692606382, + -22.222899823907778 + ], + [ + -47.38441119317362, + -22.222907060711957 + ], + [ + -47.38443592163625, + -22.222915763805563 + ], + [ + -47.38445856819551, + -22.222922555452865 + ], + [ + -47.38447741491159, + -22.22292916004735 + ], + [ + -47.38448778544733, + -22.2229327518716 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "109", + "Name": "Curvas", + "Length": 188.3873877937044, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "109", + "type": "LineString", + "coordinates": [ + [ + -47.382663410196976, + -22.222753990695136 + ], + [ + -47.38279813242881, + -22.222756138470594 + ], + [ + -47.38287235641236, + -22.222758033829837 + ], + [ + -47.3829253159979, + -22.222758420479913 + ], + [ + -47.38298030498579, + -22.222757155694808 + ], + [ + -47.38303481760755, + -22.222754596529782 + ], + [ + -47.3830869354061, + -22.222751888255697 + ], + [ + -47.383139653902134, + -22.222749250666244 + ], + [ + -47.38319352389188, + -22.22274633585091 + ], + [ + -47.383247378691976, + -22.22274345316324 + ], + [ + -47.383300634315205, + -22.22274049725723 + ], + [ + -47.383352966443894, + -22.22273840662693 + ], + [ + -47.38340536280606, + -22.22273758432684 + ], + [ + -47.38345671263596, + -22.222737566925655 + ], + [ + -47.383507053651265, + -22.222739025421035 + ], + [ + -47.383558186551646, + -22.222742719209645 + ], + [ + -47.38358553967888, + -22.222745313350984 + ], + [ + -47.38361151854249, + -22.22274744225196 + ], + [ + -47.3836372382672, + -22.22275011746209 + ], + [ + -47.3836616321678, + -22.222753322054423 + ], + [ + -47.3836870676455, + -22.222757370757382 + ], + [ + -47.38371260130554, + -22.222761712445962 + ], + [ + -47.3837388007846, + -22.22276675181822 + ], + [ + -47.383765626295876, + -22.222771970348653 + ], + [ + -47.38379200082578, + -22.222777059896156 + ], + [ + -47.383819130178125, + -22.222782318603496 + ], + [ + -47.38384614335217, + -22.22278780934183 + ], + [ + -47.38387196925947, + -22.22279321564639 + ], + [ + -47.38389764122628, + -22.222799370857395 + ], + [ + -47.38392281344347, + -22.222805426967614 + ], + [ + -47.38394967913074, + -22.22281280850933 + ], + [ + -47.38397639977163, + -22.22281959010364 + ], + [ + -47.38400277477191, + -22.22282663524859 + ], + [ + -47.384030787494844, + -22.222834715843543 + ], + [ + -47.38405800385756, + -22.22284178941676 + ], + [ + -47.38408223127469, + -22.222848998923446 + ], + [ + -47.384109075650606, + -22.222857256522676 + ], + [ + -47.38413619708306, + -22.222865571694435 + ], + [ + -47.38416245073619, + -22.22287375568775 + ], + [ + -47.38419035591155, + -22.22288198188668 + ], + [ + -47.38421440714597, + -22.222889149837336 + ], + [ + -47.38424049618327, + -22.222897897379895 + ], + [ + -47.38427003189591, + -22.222907154262586 + ], + [ + -47.38429470712762, + -22.222914305129162 + ], + [ + -47.38432279118504, + -22.222923311813332 + ], + [ + -47.38434815495174, + -22.222930486689133 + ], + [ + -47.38437327074375, + -22.222938408712626 + ], + [ + -47.38439681537584, + -22.22294543006311 + ], + [ + -47.384421510377855, + -22.222954121379786 + ], + [ + -47.384444186416516, + -22.222960921867653 + ], + [ + -47.38445849509985, + -22.222965936165593 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "110", + "Name": "Curvas", + "Length": 188.6570858273025, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "110", + "type": "LineString", + "coordinates": [ + [ + -47.38267097940551, + -22.222740567998372 + ], + [ + -47.38279845630042, + -22.22274260026503 + ], + [ + -47.382872612824926, + -22.22274449390234 + ], + [ + -47.38292519339711, + -22.222744877785757 + ], + [ + -47.38297975910459, + -22.222743622736854 + ], + [ + -47.38303404616903, + -22.222741074161334 + ], + [ + -47.38308613997292, + -22.222738367134546 + ], + [ + -47.38313884180289, + -22.222735730379373 + ], + [ + -47.3831926801019, + -22.222732817279226 + ], + [ + -47.38324652857586, + -22.222729934928008 + ], + [ + -47.383299889793484, + -22.222726973161482 + ], + [ + -47.38335253208201, + -22.222724870140965 + ], + [ + -47.383405237593756, + -22.222724042989576 + ], + [ + -47.38345693621924, + -22.222724025470626 + ], + [ + -47.38350784277095, + -22.222725500351327 + ], + [ + -47.383559486174114, + -22.222729231018597 + ], + [ + -47.383586914230534, + -22.222731832266398 + ], + [ + -47.383612963679255, + -22.222733966951836 + ], + [ + -47.38363906198498, + -22.222736681539917 + ], + [ + -47.38366387405496, + -22.22273994106677 + ], + [ + -47.383689599613156, + -22.22274403594366 + ], + [ + -47.38371537935127, + -22.222748419475025 + ], + [ + -47.383741759295184, + -22.222753493559257 + ], + [ + -47.38376858939448, + -22.222758712982444 + ], + [ + -47.38379495245824, + -22.222763800317505 + ], + [ + -47.383822163431255, + -22.222769074840777 + ], + [ + -47.383849289570406, + -22.222774588540787 + ], + [ + -47.38387537872286, + -22.222780049952355 + ], + [ + -47.383901268182065, + -22.222786257310386 + ], + [ + -47.3839266920913, + -22.222792373969796 + ], + [ + -47.3839536502296, + -22.222799780913345 + ], + [ + -47.38398031777187, + -22.2228065490316 + ], + [ + -47.384006932669664, + -22.22281365825685 + ], + [ + -47.3840348955634, + -22.222821724478198 + ], + [ + -47.384062174331895, + -22.222828814270937 + ], + [ + -47.384086726505515, + -22.222836120417654 + ], + [ + -47.384113638182605, + -22.22284439871958 + ], + [ + -47.38414078030164, + -22.22285272022685 + ], + [ + -47.38416695481911, + -22.222860879551558 + ], + [ + -47.38419476786486, + -22.222869078591664 + ], + [ + -47.38421908944797, + -22.22287632711405 + ], + [ + -47.384245280556506, + -22.22288510888084 + ], + [ + -47.384274513620916, + -22.222894270909755 + ], + [ + -47.38429923758623, + -22.222901435899438 + ], + [ + -47.38432727494248, + -22.222910427606532 + ], + [ + -47.38435260333478, + -22.222917592475806 + ], + [ + -47.38437782251782, + -22.222925547111085 + ], + [ + -47.38440160797587, + -22.222932640279478 + ], + [ + -47.38442631413143, + -22.222941335521792 + ], + [ + -47.38444898034362, + -22.22294813306281 + ], + [ + -47.38446722089715, + -22.222954525235018 + ], + [ + -47.384468251864554, + -22.222954882309537 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "111", + "Name": "Curvas", + "Length": 187.84828703476575, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "111", + "type": "LineString", + "coordinates": [ + [ + -47.38264827177584, + -22.222780836087953 + ], + [ + -47.38279748468582, + -22.22278321488168 + ], + [ + -47.38287184358749, + -22.22278511368477 + ], + [ + -47.38292556119996, + -22.22278550586817 + ], + [ + -47.382981396748946, + -22.22278422161062 + ], + [ + -47.38303636048545, + -22.22278164126657 + ], + [ + -47.383088526273326, + -22.22277893049786 + ], + [ + -47.3831412781015, + -22.22277629123986 + ], + [ + -47.38319521147277, + -22.22277337299416 + ], + [ + -47.38324907892926, + -22.222770489633398 + ], + [ + -47.38330212335951, + -22.22276754544857 + ], + [ + -47.38335383516831, + -22.222765479598756 + ], + [ + -47.38340561323116, + -22.222764667001275 + ], + [ + -47.38345626546967, + -22.222764649835653 + ], + [ + -47.383505475411845, + -22.222766075560433 + ], + [ + -47.38355558730636, + -22.222769695591712 + ], + [ + -47.38358279057519, + -22.222772275520125 + ], + [ + -47.3836086282685, + -22.222774392852156 + ], + [ + -47.38363359083096, + -22.222776989306443 + ], + [ + -47.38365714839263, + -22.22278008402971 + ], + [ + -47.38368200370914, + -22.22278404038481 + ], + [ + -47.38370704521288, + -22.222788298387783 + ], + [ + -47.38373288376214, + -22.222793268336083 + ], + [ + -47.38375970009739, + -22.222798485081007 + ], + [ + -47.3837860975596, + -22.222803579053355 + ], + [ + -47.38381306368673, + -22.22280880613217 + ], + [ + -47.38383985091431, + -22.222814250943866 + ], + [ + -47.38386515033111, + -22.222819547034376 + ], + [ + -47.38389038731301, + -22.22282559795127 + ], + [ + -47.383915056160546, + -22.222831532967053 + ], + [ + -47.38394173693114, + -22.222838863701156 + ], + [ + -47.38396856376933, + -22.222845672247576 + ], + [ + -47.38399445897443, + -22.222852589231927 + ], + [ + -47.3840225713558, + -22.222860698574028 + ], + [ + -47.38404966290692, + -22.222867739708253 + ], + [ + -47.38407324081092, + -22.222874755934832 + ], + [ + -47.38409995058442, + -22.222882972128662 + ], + [ + -47.384127030662604, + -22.222891274635263 + ], + [ + -47.38415344256821, + -22.22289950795991 + ], + [ + -47.38418153200281, + -22.222907788476487 + ], + [ + -47.384205042539726, + -22.222914795283714 + ], + [ + -47.384230927434494, + -22.222923474377744 + ], + [ + -47.384261068443806, + -22.222932920968038 + ], + [ + -47.38428564620828, + -22.22294004358839 + ], + [ + -47.384313823668045, + -22.222949080226677 + ], + [ + -47.38433925818351, + -22.222956275115568 + ], + [ + -47.38436416719342, + -22.222964131915454 + ], + [ + -47.38438723017347, + -22.222971009630157 + ], + [ + -47.384411902868436, + -22.222979693095535 + ], + [ + -47.38443459856004, + -22.222986499477088 + ], + [ + -47.38443898724882, + -22.222988037437936 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "112", + "Name": "Curvas", + "Length": 188.11783741463861, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "112", + "type": "LineString", + "coordinates": [ + [ + -47.382655840987084, + -22.222767413391665 + ], + [ + -47.382797808557285, + -22.222769676676133 + ], + [ + -47.38287209999988, + -22.22277157375731 + ], + [ + -47.38292543859885, + -22.222771963174065 + ], + [ + -47.38298085086726, + -22.22277068865273 + ], + [ + -47.383035589046365, + -22.222768118898205 + ], + [ + -47.38308773083957, + -22.22276540937679 + ], + [ + -47.383140466001684, + -22.22276277095307 + ], + [ + -47.3831943676822, + -22.222759854422552 + ], + [ + -47.383248228813315, + -22.222756971398198 + ], + [ + -47.38330137883723, + -22.222754021352916 + ], + [ + -47.383353400806, + -22.222751943112844 + ], + [ + -47.38340548801854, + -22.22275112566406 + ], + [ + -47.38345648905277, + -22.222751108380663 + ], + [ + -47.38350626453157, + -22.222752550490746 + ], + [ + -47.383556886929064, + -22.222756207400685 + ], + [ + -47.38358416512711, + -22.222758794435553 + ], + [ + -47.38361007340557, + -22.222760917552048 + ], + [ + -47.38363541454919, + -22.222763553384286 + ], + [ + -47.38365939028038, + -22.222766703042076 + ], + [ + -47.3836845356775, + -22.222770705571104 + ], + [ + -47.38370982325941, + -22.222775005416896 + ], + [ + -47.383735842273595, + -22.222780010077166 + ], + [ + -47.38376266319686, + -22.222785227714844 + ], + [ + -47.38378904919291, + -22.222790319474747 + ], + [ + -47.3838160969438, + -22.222795562370102 + ], + [ + -47.38384299713349, + -22.22280103014287 + ], + [ + -47.38386855979555, + -22.222806381340405 + ], + [ + -47.38389401426993, + -22.222812484404347 + ], + [ + -47.383918934812456, + -22.222818479970133 + ], + [ + -47.38394570803127, + -22.222825836105276 + ], + [ + -47.3839724817708, + -22.222832631175635 + ], + [ + -47.3839986168735, + -22.222839612240303 + ], + [ + -47.38402667942565, + -22.222847707208814 + ], + [ + -47.384053833382566, + -22.222854764562534 + ], + [ + -47.384077736043174, + -22.22286187742919 + ], + [ + -47.38410451311788, + -22.22287011432571 + ], + [ + -47.3841316138861, + -22.222878423168904 + ], + [ + -47.38415794665255, + -22.222886631823858 + ], + [ + -47.38418594395754, + -22.22289488518161 + ], + [ + -47.384209724843224, + -22.22290197256057 + ], + [ + -47.38423571180926, + -22.222910685878855 + ], + [ + -47.38426555017022, + -22.22292003761534 + ], + [ + -47.38429017666832, + -22.222927174358805 + ], + [ + -47.38431830742691, + -22.222936196020015 + ], + [ + -47.384343706567975, + -22.222943380902393 + ], + [ + -47.38436871896895, + -22.22295127031407 + ], + [ + -47.384392022775046, + -22.22295821984667 + ], + [ + -47.38441670662355, + -22.222966907237705 + ], + [ + -47.38443939248868, + -22.222973710672413 + ], + [ + -47.384448741175085, + -22.222976986802 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "113", + "Name": "Curvas", + "Length": 187.29837436568238, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "113", + "type": "LineString", + "coordinates": [ + [ + -47.38263313334932, + -22.22280768147978 + ], + [ + -47.38279683694312, + -22.22281029129271 + ], + [ + -47.38287133076296, + -22.222812193539674 + ], + [ + -47.382925806402675, + -22.22281259125632 + ], + [ + -47.38298248851303, + -22.22281128752632 + ], + [ + -47.38303790336444, + -22.2228086860032 + ], + [ + -47.38309011714168, + -22.222805972739888 + ], + [ + -47.383142902302, + -22.222803331813335 + ], + [ + -47.38319689905482, + -22.22280041013724 + ], + [ + -47.383250779167724, + -22.22279752610335 + ], + [ + -47.38330361240491, + -22.222794593639787 + ], + [ + -47.38335470389358, + -22.222792552570457 + ], + [ + -47.38340586365684, + -22.222791749675604 + ], + [ + -47.38345581830374, + -22.22279173274558 + ], + [ + -47.383503897172325, + -22.222793125699763 + ], + [ + -47.38355298806059, + -22.222796671973725 + ], + [ + -47.38358004147097, + -22.222799237689237 + ], + [ + -47.383605737993946, + -22.22280134345229 + ], + [ + -47.38362994339385, + -22.22280386115074 + ], + [ + -47.383652664616235, + -22.222806846004897 + ], + [ + -47.38367693977135, + -22.222810710012165 + ], + [ + -47.38370148911862, + -22.222814884329537 + ], + [ + -47.38372696673795, + -22.22281978485387 + ], + [ + -47.383753773897176, + -22.222824999813273 + ], + [ + -47.38378019429168, + -22.222830098210494 + ], + [ + -47.38380699719353, + -22.222835293660754 + ], + [ + -47.38383355847456, + -22.222840692545752 + ], + [ + -47.383858331400695, + -22.222845878422213 + ], + [ + -47.383883133397525, + -22.22285182504498 + ], + [ + -47.38390729887514, + -22.222857638966328 + ], + [ + -47.38393379472905, + -22.22286491889277 + ], + [ + -47.38396072776455, + -22.2228717543913 + ], + [ + -47.38398614317435, + -22.22287854321502 + ], + [ + -47.384014355214134, + -22.222886681304303 + ], + [ + -47.38404132195366, + -22.22289368999949 + ], + [ + -47.38406425034429, + -22.222900512945905 + ], + [ + -47.38409082551535, + -22.22290868773434 + ], + [ + -47.3841178642392, + -22.22291697757577 + ], + [ + -47.384144434397385, + -22.222925260231797 + ], + [ + -47.38417270809129, + -22.222933595066035 + ], + [ + -47.384195677930485, + -22.222940440729708 + ], + [ + -47.38422135868265, + -22.222949051375263 + ], + [ + -47.38425210498884, + -22.22295868767319 + ], + [ + -47.38427658528605, + -22.22296578204735 + ], + [ + -47.38430485614819, + -22.222974848639748 + ], + [ + -47.38433036141245, + -22.222982063541732 + ], + [ + -47.3843550636402, + -22.22298985511804 + ], + [ + -47.384377644968055, + -22.222996589196864 + ], + [ + -47.384402295355926, + -22.223005264810947 + ], + [ + -47.38441928428795, + -22.223010359749694 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "114", + "Name": "Curvas", + "Length": 187.57761992761388, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "114", + "type": "LineString", + "coordinates": [ + [ + -47.38264070256326, + -22.222794258783985 + ], + [ + -47.38279716081445, + -22.222796753087206 + ], + [ + -47.38287158717519, + -22.22279865361224 + ], + [ + -47.38292568380125, + -22.222799048562262 + ], + [ + -47.38298194263088, + -22.222797754568486 + ], + [ + -47.3830371319248, + -22.222795163634906 + ], + [ + -47.38308932170736, + -22.22279245161889 + ], + [ + -47.38314209020161, + -22.222789811526614 + ], + [ + -47.38319605526365, + -22.222786891565715 + ], + [ + -47.38324992905194, + -22.22278400786818 + ], + [ + -47.38330286788207, + -22.222781069544187 + ], + [ + -47.38335426953084, + -22.222779016084605 + ], + [ + -47.38340573844392, + -22.222778208338436 + ], + [ + -47.38345604188667, + -22.222778191290615 + ], + [ + -47.38350468629209, + -22.222779600630098 + ], + [ + -47.38355428768355, + -22.222783183782717 + ], + [ + -47.38358141602315, + -22.222785756604686 + ], + [ + -47.3836071831313, + -22.2227878681522 + ], + [ + -47.383631767112526, + -22.222790425228588 + ], + [ + -47.38365490650459, + -22.2227934650173 + ], + [ + -47.38367947174043, + -22.222797375198507 + ], + [ + -47.38370426716595, + -22.222801591358685 + ], + [ + -47.38372992525027, + -22.222806526595 + ], + [ + -47.38375673699751, + -22.222811742447163 + ], + [ + -47.38378314592587, + -22.222816838631935 + ], + [ + -47.38381003045455, + -22.222822049899357 + ], + [ + -47.383836704694666, + -22.222827471744814 + ], + [ + -47.38386174086617, + -22.222832712728316 + ], + [ + -47.38388676035555, + -22.222838711498135 + ], + [ + -47.38391117753126, + -22.222844585970318 + ], + [ + -47.38393776583041, + -22.222851891296994 + ], + [ + -47.38396464576725, + -22.222858713319457 + ], + [ + -47.383990301074725, + -22.222865566223508 + ], + [ + -47.38401846328529, + -22.2228736899392 + ], + [ + -47.384045492430616, + -22.222880714853883 + ], + [ + -47.38406874557797, + -22.222887634440397 + ], + [ + -47.38409538805027, + -22.222895829931534 + ], + [ + -47.38412244746763, + -22.22290412611066 + ], + [ + -47.38414893848316, + -22.222912384095896 + ], + [ + -47.38417712004741, + -22.222920691771296 + ], + [ + -47.384200360235475, + -22.222927618006736 + ], + [ + -47.384226143058946, + -22.222936262876537 + ], + [ + -47.38425658671668, + -22.222945804320624 + ], + [ + -47.384281115747534, + -22.22295291281791 + ], + [ + -47.384309339908484, + -22.222961964433228 + ], + [ + -47.38433480979834, + -22.222969169328678 + ], + [ + -47.38435961541719, + -22.222976993516788 + ], + [ + -47.38438243757115, + -22.22298379941355 + ], + [ + -47.38440709911256, + -22.22299247895328 + ], + [ + -47.38442921316947, + -22.222999110903984 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "115", + "Name": "Curvas", + "Length": 186.73988323059004, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "115", + "type": "LineString", + "coordinates": [ + [ + -47.38261799491741, + -22.222834526870617 + ], + [ + -47.38279618920068, + -22.22283736770366 + ], + [ + -47.382870817938766, + -22.222839273394477 + ], + [ + -47.382926051605985, + -22.222839676644387 + ], + [ + -47.38298358027806, + -22.222838353441908 + ], + [ + -47.383039446244574, + -22.222835730739682 + ], + [ + -47.38309170801119, + -22.22283301498178 + ], + [ + -47.383144526503656, + -22.222830372386653 + ], + [ + -47.38319858663804, + -22.22282744728019 + ], + [ + -47.38325247940735, + -22.222824562573184 + ], + [ + -47.3833051014514, + -22.222821641830848 + ], + [ + -47.38335557261973, + -22.222819625542076 + ], + [ + -47.38340611408318, + -22.222818832349866 + ], + [ + -47.38345537113819, + -22.222818815655437 + ], + [ + -47.38350231893273, + -22.222820175839086 + ], + [ + -47.38355038881435, + -22.22282364835573 + ], + [ + -47.38357729236621, + -22.222826199858286 + ], + [ + -47.38360284771878, + -22.22282829405244 + ], + [ + -47.383626295955864, + -22.222830732995014 + ], + [ + -47.38364818083866, + -22.22283360798007 + ], + [ + -47.38367187583216, + -22.222837379639458 + ], + [ + -47.38369593302276, + -22.222841470271206 + ], + [ + -47.38372104971203, + -22.22284630137156 + ], + [ + -47.38374784769519, + -22.222851514545443 + ], + [ + -47.38377429102203, + -22.222856617367547 + ], + [ + -47.3838009306985, + -22.222861781189213 + ], + [ + -47.38382726603295, + -22.222867134147563 + ], + [ + -47.38385151246818, + -22.222872209809907 + ], + [ + -47.383875879479774, + -22.222878052138526 + ], + [ + -47.38389954158722, + -22.22288374496534 + ], + [ + -47.383925852524484, + -22.222890974084194 + ], + [ + -47.38395289175736, + -22.222897836534845 + ], + [ + -47.38397782737164, + -22.222904497197867 + ], + [ + -47.3840061390699, + -22.22291266403432 + ], + [ + -47.384032980997745, + -22.222919640290502 + ], + [ + -47.38405525987477, + -22.222926269956734 + ], + [ + -47.38408170044336, + -22.222934403339725 + ], + [ + -47.3841086978129, + -22.222942680515995 + ], + [ + -47.38413542622369, + -22.22295101250337 + ], + [ + -47.38416388417694, + -22.2229594016553 + ], + [ + -47.38418631331826, + -22.222966086175425 + ], + [ + -47.38421178992776, + -22.222974628372462 + ], + [ + -47.38424314153102, + -22.222984454378103 + ], + [ + -47.384267524360915, + -22.22299152050602 + ], + [ + -47.384295888625466, + -22.22300061705257 + ], + [ + -47.38432146463856, + -22.22300785196762 + ], + [ + -47.38434596008407, + -22.22301557832033 + ], + [ + -47.384368059759574, + -22.22302216876319 + ], + [ + -47.384392687840325, + -22.223030836526025 + ], + [ + -47.384399426520226, + -22.223032857439698 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "116", + "Name": "Curvas", + "Length": 187.0191287977898, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "116", + "type": "LineString", + "coordinates": [ + [ + -47.382625564134045, + -22.222821104175313 + ], + [ + -47.38279651307187, + -22.22282382949818 + ], + [ + -47.38287107435083, + -22.22282573346708 + ], + [ + -47.38292592900425, + -22.222826133950367 + ], + [ + -47.38298303439544, + -22.22282482048413 + ], + [ + -47.383038674804375, + -22.222822208371458 + ], + [ + -47.38309091257631, + -22.222819493860857 + ], + [ + -47.38314371440269, + -22.222816852100017 + ], + [ + -47.38319774284628, + -22.222813928708746 + ], + [ + -47.38325162929175, + -22.222811044338048 + ], + [ + -47.38330435692802, + -22.222808117735337 + ], + [ + -47.383355138256555, + -22.222806089056277 + ], + [ + -47.38340598886994, + -22.22280529101274 + ], + [ + -47.383455594720935, + -22.22280527420051 + ], + [ + -47.38350310805254, + -22.22280665076944 + ], + [ + -47.38355168843753, + -22.222810160164734 + ], + [ + -47.383578666918666, + -22.222812718773746 + ], + [ + -47.38360429285644, + -22.222814818752372 + ], + [ + -47.383628119674974, + -22.222817297072886 + ], + [ + -47.383650422727605, + -22.222820226992496 + ], + [ + -47.38367440780195, + -22.22282404482583 + ], + [ + -47.38369871107089, + -22.222828177300393 + ], + [ + -47.383724008225215, + -22.222833043112736 + ], + [ + -47.38375081079641, + -22.222838257179383 + ], + [ + -47.38377724265708, + -22.222843357789035 + ], + [ + -47.38380396396351, + -22.222848537428508 + ], + [ + -47.38383041225401, + -22.222853913346682 + ], + [ + -47.3838549219347, + -22.222859044116078 + ], + [ + -47.38387950643893, + -22.222864938591776 + ], + [ + -47.383903420247684, + -22.22287069197031 + ], + [ + -47.38392982362709, + -22.222877946488513 + ], + [ + -47.383956809761266, + -22.2228847954631 + ], + [ + -47.383981985273316, + -22.222891520206456 + ], + [ + -47.38401024714235, + -22.22289967266933 + ], + [ + -47.384037151476036, + -22.22290666514503 + ], + [ + -47.38405975510989, + -22.222913391451367 + ], + [ + -47.384086262979714, + -22.22292154553707 + ], + [ + -47.38411328104625, + -22.222929829052102 + ], + [ + -47.38413993031091, + -22.22293813636761 + ], + [ + -47.38416829613446, + -22.222946498360688 + ], + [ + -47.38419099562475, + -22.22295326345261 + ], + [ + -47.38421657430559, + -22.2229618398739 + ], + [ + -47.38424762326029, + -22.22297157102568 + ], + [ + -47.384272054823846, + -22.222978651276723 + ], + [ + -47.38430037238718, + -22.22298773284619 + ], + [ + -47.38432591302586, + -22.222994957754704 + ], + [ + -47.38435051186249, + -22.223002716719222 + ], + [ + -47.3843728523642, + -22.22300937898006 + ], + [ + -47.38439749159851, + -22.223018050668525 + ], + [ + -47.38440935540486, + -22.223021608594944 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "117", + "Name": "Curvas", + "Length": 186.18819987966052, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "117", + "type": "LineString", + "coordinates": [ + [ + -47.382602856480105, + -22.222861372260468 + ], + [ + -47.382795541458535, + -22.222864444114556 + ], + [ + -47.38287030511489, + -22.222866353249227 + ], + [ + -47.38292629680994, + -22.222866762032357 + ], + [ + -47.382984672044074, + -22.222865419357344 + ], + [ + -47.38304098912582, + -22.222862775476028 + ], + [ + -47.38309329888181, + -22.222860057223514 + ], + [ + -47.383146150706466, + -22.222857412959794 + ], + [ + -47.383200274222446, + -22.222854484422975 + ], + [ + -47.38325417964818, + -22.22285159904282 + ], + [ + -47.383306590499, + -22.22284869002179 + ], + [ + -47.38335644134672, + -22.222846698513575 + ], + [ + -47.383406364510144, + -22.222845915023992 + ], + [ + -47.383454923972955, + -22.222845898565232 + ], + [ + -47.383500740693066, + -22.222847225978356 + ], + [ + -47.383547789567636, + -22.22285062473767 + ], + [ + -47.383574543260934, + -22.222853162027338 + ], + [ + -47.38359995744304, + -22.22285524465254 + ], + [ + -47.383622648517, + -22.222857604839216 + ], + [ + -47.38364369705988, + -22.222860369955182 + ], + [ + -47.38366681189152, + -22.22286404926669 + ], + [ + -47.3836903769253, + -22.222868056212775 + ], + [ + -47.383715132684344, + -22.22287281788914 + ], + [ + -47.38374192149147, + -22.222878029277517 + ], + [ + -47.38376838775063, + -22.222883136524484 + ], + [ + -47.38379486420166, + -22.222888268717575 + ], + [ + -47.38382097358942, + -22.222893575749232 + ], + [ + -47.3838446935336, + -22.222898541197498 + ], + [ + -47.38386862555981, + -22.222904279231937 + ], + [ + -47.38389178429684, + -22.22290985096417 + ], + [ + -47.383917910317436, + -22.222917029275393 + ], + [ + -47.3839450557477, + -22.222923918678152 + ], + [ + -47.3839695115663, + -22.22293045118049 + ], + [ + -47.38399792292309, + -22.22293864676415 + ], + [ + -47.384024640039236, + -22.22294559058126 + ], + [ + -47.384046269402425, + -22.22295202696724 + ], + [ + -47.38407257536848, + -22.222960118944826 + ], + [ + -47.38409953138364, + -22.222968383455918 + ], + [ + -47.38412641804713, + -22.2229767647747 + ], + [ + -47.3841550602598, + -22.222985208244303 + ], + [ + -47.38417694870304, + -22.222991731620812 + ], + [ + -47.38420222116981, + -22.22300020536932 + ], + [ + -47.38423417807034, + -22.2230102210827 + ], + [ + -47.384258463432914, + -22.223017258964408 + ], + [ + -47.38428692109991, + -22.223026385465076 + ], + [ + -47.38431256786185, + -22.223033640393236 + ], + [ + -47.38433685652503, + -22.223041301522304 + ], + [ + -47.38435847454802, + -22.22304774832925 + ], + [ + -47.38437969183494, + -22.223055215675604 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "118", + "Name": "Curvas", + "Length": 186.46063765841015, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "118", + "type": "LineString", + "coordinates": [ + [ + -47.38261042569943, + -22.222847949565665 + ], + [ + -47.382795865329584, + -22.222850905909116 + ], + [ + -47.382870561526786, + -22.222852813321865 + ], + [ + -47.38292617420789, + -22.222853219338386 + ], + [ + -47.38298412616097, + -22.222851886399635 + ], + [ + -47.38304021768506, + -22.222849253107878 + ], + [ + -47.383092503446356, + -22.222846536102665 + ], + [ + -47.383145338604926, + -22.222843892673236 + ], + [ + -47.38319943043011, + -22.222840965851606 + ], + [ + -47.38325332953275, + -22.22283808080774 + ], + [ + -47.383305845975066, + -22.222835165926337 + ], + [ + -47.383356006983114, + -22.222833162027836 + ], + [ + -47.38340623929659, + -22.222832373686916 + ], + [ + -47.38345514755552, + -22.222832357110338 + ], + [ + -47.38350152981291, + -22.22283370090873 + ], + [ + -47.38354908919105, + -22.2228371365467 + ], + [ + -47.38357591781366, + -22.222839680942815 + ], + [ + -47.38360140258099, + -22.222841769352485 + ], + [ + -47.38362447223655, + -22.222844168917117 + ], + [ + -47.38364593894943, + -22.22284698896764 + ], + [ + -47.38366934386201, + -22.2228507144531 + ], + [ + -47.38369315497423, + -22.222854763242008 + ], + [ + -47.3837180911984, + -22.22285955963036 + ], + [ + -47.38374488459356, + -22.222864771911503 + ], + [ + -47.38377133938655, + -22.22286987694602 + ], + [ + -47.38379789747071, + -22.222875024957546 + ], + [ + -47.38382411981142, + -22.222880354948412 + ], + [ + -47.383848103001164, + -22.22288537550374 + ], + [ + -47.38387225252008, + -22.22289116568525 + ], + [ + -47.38389566296177, + -22.222896797970133 + ], + [ + -47.38392188142129, + -22.22290400167981 + ], + [ + -47.38394897375284, + -22.222910877606505 + ], + [ + -47.3839736694693, + -22.22291747418921 + ], + [ + -47.384002030996825, + -22.222925655399276 + ], + [ + -47.38402881051883, + -22.22293261543589 + ], + [ + -47.38405076463897, + -22.222939148462018 + ], + [ + -47.3840771379063, + -22.222947261142313 + ], + [ + -47.384104114621955, + -22.222955531993254 + ], + [ + -47.38413092213577, + -22.222963888639075 + ], + [ + -47.38415947221873, + -22.22297230494983 + ], + [ + -47.38418163101103, + -22.222978908898153 + ], + [ + -47.38420700554917, + -22.22298741687093 + ], + [ + -47.384238659801035, + -22.222997337730412 + ], + [ + -47.38426299389728, + -22.22300438973524 + ], + [ + -47.38429140486305, + -22.223013501258837 + ], + [ + -47.38431701625056, + -22.223020746180456 + ], + [ + -47.38434140830491, + -22.223028439921343 + ], + [ + -47.38436326715419, + -22.223034958546272 + ], + [ + -47.3843878840814, + -22.22304362238344 + ], + [ + -47.38438949763405, + -22.22304410628396 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "119", + "Name": "Curvas", + "Length": 185.6495806141584, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "119", + "type": "LineString", + "coordinates": [ + [ + -47.382587718037385, + -22.22288821764937 + ], + [ + -47.38279489371666, + -22.22289152052541 + ], + [ + -47.38286979229135, + -22.222893433103916 + ], + [ + -47.382926542014495, + -22.22289384742024 + ], + [ + -47.38298576381099, + -22.222892485272684 + ], + [ + -47.38304253200819, + -22.22288982021223 + ], + [ + -47.38309488975359, + -22.222887099465094 + ], + [ + -47.383147774910434, + -22.22288445353282 + ], + [ + -47.38320196180802, + -22.222881521565604 + ], + [ + -47.383255879890164, + -22.222878635512345 + ], + [ + -47.3833080795477, + -22.22287573821257 + ], + [ + -47.38335731007458, + -22.222873771484924 + ], + [ + -47.38340661493773, + -22.22287299769807 + ], + [ + -47.3834544768081, + -22.222872981474943 + ], + [ + -47.38349916245331, + -22.222874276117565 + ], + [ + -47.38354519032044, + -22.222877601119613 + ], + [ + -47.38357179415512, + -22.22288012419633 + ], + [ + -47.38359706716671, + -22.22288219525259 + ], + [ + -47.38361900107725, + -22.222884476683404 + ], + [ + -47.3836392132799, + -22.22288713193023 + ], + [ + -47.38366174794945, + -22.22289071889383 + ], + [ + -47.3836848208262, + -22.222894642154277 + ], + [ + -47.38370921565491, + -22.222899334406623 + ], + [ + -47.38373599528599, + -22.222904544009488 + ], + [ + -47.38376248447749, + -22.22290965568132 + ], + [ + -47.383788797703, + -22.22291475624583 + ], + [ + -47.38381468114403, + -22.222920017350823 + ], + [ + -47.38383787459695, + -22.222924872584915 + ], + [ + -47.383861371637614, + -22.222930506325156 + ], + [ + -47.38388402700395, + -22.22293595696279 + ], + [ + -47.3839099681079, + -22.222943084466383 + ], + [ + -47.383937219735586, + -22.222950000821285 + ], + [ + -47.38396119575834, + -22.222956405162897 + ], + [ + -47.38398970677368, + -22.22296462949376 + ], + [ + -47.38401629907807, + -22.222971540871832 + ], + [ + -47.38403727892719, + -22.222977783977495 + ], + [ + -47.384063450290675, + -22.222985834549608 + ], + [ + -47.38409036495148, + -22.22299408639556 + ], + [ + -47.38411740986771, + -22.223002517045725 + ], + [ + -47.38414623633985, + -22.223011014833045 + ], + [ + -47.38416758408483, + -22.22301737706589 + ], + [ + -47.384192652408814, + -22.22302578236586 + ], + [ + -47.38422521460682, + -22.22303598778703 + ], + [ + -47.38424940250203, + -22.223042997422485 + ], + [ + -47.38427795357149, + -22.22305215387732 + ], + [ + -47.3843036710823, + -22.22305942881859 + ], + [ + -47.38432775296309, + -22.223067024724 + ], + [ + -47.3843488893334, + -22.22307332789494 + ], + [ + -47.38436019334952, + -22.223077306302265 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "120", + "Name": "Curvas", + "Length": 185.91889024742207, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "120", + "type": "LineString", + "coordinates": [ + [ + -47.38259528725942, + -22.222874794955047 + ], + [ + -47.382795217587564, + -22.222877982319986 + ], + [ + -47.38287004870309, + -22.222879893176586 + ], + [ + -47.382926419412144, + -22.222880304726313 + ], + [ + -47.38298521792741, + -22.222878952315043 + ], + [ + -47.383041760566876, + -22.22287629784416 + ], + [ + -47.38309409431757, + -22.222873578344323 + ], + [ + -47.38314696280832, + -22.222870933246337 + ], + [ + -47.383201118015094, + -22.22286800299431 + ], + [ + -47.383255029774894, + -22.222865117277273 + ], + [ + -47.38330733502322, + -22.22286221411719 + ], + [ + -47.38335687571055, + -22.22286023499925 + ], + [ + -47.38340648972387, + -22.222859456361032 + ], + [ + -47.38345470039049, + -22.222859440020088 + ], + [ + -47.38349995157321, + -22.222860751047968 + ], + [ + -47.3835464899441, + -22.22286411292865 + ], + [ + -47.3835731687081, + -22.222866643111825 + ], + [ + -47.38359851230495, + -22.222868719952558 + ], + [ + -47.383620824797234, + -22.222871040761316 + ], + [ + -47.38364145517004, + -22.222873750942707 + ], + [ + -47.38366427992067, + -22.222877384080267 + ], + [ + -47.383687598875945, + -22.22288134918355 + ], + [ + -47.38371217416984, + -22.22288607614791 + ], + [ + -47.383738958388946, + -22.222891286643527 + ], + [ + -47.38376543611428, + -22.2228963961029 + ], + [ + -47.38379183097613, + -22.222901512486498 + ], + [ + -47.38381782736697, + -22.222906796550056 + ], + [ + -47.38384128406554, + -22.222911706891225 + ], + [ + -47.383864998599, + -22.22291739277856 + ], + [ + -47.38388790567349, + -22.222922903969778 + ], + [ + -47.383913939212995, + -22.222930056870904 + ], + [ + -47.38394113774195, + -22.222936959749756 + ], + [ + -47.383965353662646, + -22.22294342817172 + ], + [ + -47.383993814848715, + -22.222951638128993 + ], + [ + -47.38402046955898, + -22.222958565726575 + ], + [ + -47.384041774165155, + -22.222964905472406 + ], + [ + -47.38406801282993, + -22.22297297674724 + ], + [ + -47.38409494819476, + -22.222981234934135 + ], + [ + -47.38412191395779, + -22.222989640910242 + ], + [ + -47.38415064830018, + -22.2229981115387 + ], + [ + -47.38417226639431, + -22.223004554343387 + ], + [ + -47.3841974367897, + -22.22301299386763 + ], + [ + -47.384229696338934, + -22.22302310443488 + ], + [ + -47.384253932967844, + -22.223030128193482 + ], + [ + -47.38428243733606, + -22.223039269671236 + ], + [ + -47.38430811947242, + -22.22304653460595 + ], + [ + -47.38433230474441, + -22.223054163123187 + ], + [ + -47.38435368194109, + -22.223060538112122 + ], + [ + -47.38436994259299, + -22.22306626098916 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "121", + "Name": "Curvas", + "Length": 185.1109613343226, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "121", + "type": "LineString", + "coordinates": [ + [ + -47.3825725795893, + -22.22291506303724 + ], + [ + -47.38279424597506, + -22.222918596936168 + ], + [ + -47.38286927946815, + -22.222920512958513 + ], + [ + -47.38292678721968, + -22.22292093280804 + ], + [ + -47.38298685557888, + -22.22291955118786 + ], + [ + -47.383044074891664, + -22.222916864948274 + ], + [ + -47.383096480626484, + -22.22291414170652 + ], + [ + -47.383149399115545, + -22.222911494105702 + ], + [ + -47.38320364939476, + -22.22290855870808 + ], + [ + -47.38325758013336, + -22.22290567198167 + ], + [ + -47.383309568597475, + -22.2229027864032 + ], + [ + -47.38335817880331, + -22.222900844456177 + ], + [ + -47.38340686536595, + -22.22290008037205 + ], + [ + -47.38345402964362, + -22.222900064384604 + ], + [ + -47.3834975842135, + -22.22290132625674 + ], + [ + -47.3835425910728, + -22.222904577501485 + ], + [ + -47.38356904504875, + -22.222907086365296 + ], + [ + -47.383594176889794, + -22.222909145852594 + ], + [ + -47.383615353636614, + -22.222911348527536 + ], + [ + -47.38363472949871, + -22.22291389390526 + ], + [ + -47.38365668400599, + -22.222917388520926 + ], + [ + -47.38367926472553, + -22.22292122809568 + ], + [ + -47.38370329862374, + -22.222925850924018 + ], + [ + -47.3837300690788, + -22.22293105874138 + ], + [ + -47.38375658120261, + -22.222936174838072 + ], + [ + -47.38378273120252, + -22.222941243773956 + ], + [ + -47.38380838869675, + -22.222946458952272 + ], + [ + -47.38383105565821, + -22.222951203972194 + ], + [ + -47.383854117713156, + -22.222956733418215 + ], + [ + -47.38387626970858, + -22.222962062961223 + ], + [ + -47.38390202589587, + -22.222969139657177 + ], + [ + -47.38392938372103, + -22.222976082964223 + ], + [ + -47.38395287994777, + -22.222982359145057 + ], + [ + -47.38398149062169, + -22.222990612223132 + ], + [ + -47.38400795811429, + -22.222997491162136 + ], + [ + -47.38402828844911, + -22.223003540987452 + ], + [ + -47.38405432520997, + -22.223011550154137 + ], + [ + -47.38408119851636, + -22.223019789334877 + ], + [ + -47.38410840168541, + -22.223028269316455 + ], + [ + -47.38413741241712, + -22.223036821421527 + ], + [ + -47.38415821946366, + -22.223043022510666 + ], + [ + -47.38418308364473, + -22.223051359362053 + ], + [ + -47.38421625114045, + -22.223061754491084 + ], + [ + -47.38424034156825, + -22.223068735880293 + ], + [ + -47.384268986040226, + -22.223077922289278 + ], + [ + -47.38429477429994, + -22.22308521724365 + ], + [ + -47.38431864939829, + -22.223092747925413 + ], + [ + -47.384339304115734, + -22.223098907460315 + ], + [ + -47.3843406948581, + -22.223099396927058 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "122", + "Name": "Curvas", + "Length": 185.38027097428113, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "122", + "type": "LineString", + "coordinates": [ + [ + -47.38258014881402, + -22.222901640343423 + ], + [ + -47.38279456984583, + -22.22290505873079 + ], + [ + -47.38286953587972, + -22.22290697303122 + ], + [ + -47.38292666461701, + -22.222907390114155 + ], + [ + -47.38298630969483, + -22.22290601823028 + ], + [ + -47.38304330344979, + -22.222903342580274 + ], + [ + -47.38309568518989, + -22.222900620585825 + ], + [ + -47.38314858701285, + -22.22289797381929 + ], + [ + -47.38320280560123, + -22.222895040136873 + ], + [ + -47.38325673001825, + -22.222892153746653 + ], + [ + -47.38330882407245, + -22.222889262307888 + ], + [ + -47.38335774443885, + -22.222887307970556 + ], + [ + -47.38340674015176, + -22.222886539035073 + ], + [ + -47.38345425322583, + -22.22288652292978 + ], + [ + -47.38349837333343, + -22.22288780118716 + ], + [ + -47.3835438906967, + -22.22289108931054 + ], + [ + -47.383570419602, + -22.222893605280817 + ], + [ + -47.383595622028324, + -22.222895670552578 + ], + [ + -47.38361717735705, + -22.222897912605482 + ], + [ + -47.38363697138946, + -22.22290051291775 + ], + [ + -47.38365921597791, + -22.222904053707392 + ], + [ + -47.38368204277608, + -22.222907935124994 + ], + [ + -47.38370625713954, + -22.22291259266534 + ], + [ + -47.383733032182626, + -22.22291780137547 + ], + [ + -47.38375953284027, + -22.22292291525971 + ], + [ + -47.38378576447976, + -22.222928000015333 + ], + [ + -47.383811534920625, + -22.222933238151562 + ], + [ + -47.38383446512785, + -22.222938038278574 + ], + [ + -47.383857744675666, + -22.222943619871696 + ], + [ + -47.38388014838289, + -22.22294900996927 + ], + [ + -47.3839059970022, + -22.22295611206181 + ], + [ + -47.383933301728625, + -22.222963041892772 + ], + [ + -47.383957037853385, + -22.222969382154012 + ], + [ + -47.38398559869802, + -22.22297762085848 + ], + [ + -47.384012128596524, + -22.222984516016997 + ], + [ + -47.38403278368851, + -22.222990662482502 + ], + [ + -47.38405888775069, + -22.22299869235191 + ], + [ + -47.384085781764604, + -22.22300693787469 + ], + [ + -47.38411290577692, + -22.22301539318111 + ], + [ + -47.384141824378844, + -22.22302391812732 + ], + [ + -47.38416290177463, + -22.223030199788322 + ], + [ + -47.38418786802715, + -22.223038570863988 + ], + [ + -47.384220732874, + -22.223048871139078 + ], + [ + -47.3842448720355, + -22.223055866651425 + ], + [ + -47.384273469806224, + -22.223065038083316 + ], + [ + -47.384299222691475, + -22.22307232303117 + ], + [ + -47.38432320118106, + -22.223079886324747 + ], + [ + -47.38434409672495, + -22.223086117677656 + ], + [ + -47.38435044410458, + -22.223088351614884 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "123", + "Name": "Curvas", + "Length": 184.55460419874342, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "123", + "type": "LineString", + "coordinates": [ + [ + -47.382557441135795, + -22.22294190842417 + ], + [ + -47.382793598233754, + -22.22294567334689 + ], + [ + -47.38286876664529, + -22.22294759281306 + ], + [ + -47.382927032425485, + -22.222948018195726 + ], + [ + -47.3829879473477, + -22.222946617102924 + ], + [ + -47.383045617776276, + -22.222943909684155 + ], + [ + -47.38309807150054, + -22.2229411839478 + ], + [ + -47.383151023321815, + -22.22293853467838 + ], + [ + -47.38320533698267, + -22.2229355958504 + ], + [ + -47.3832592803777, + -22.222932708450852 + ], + [ + -47.38331105764838, + -22.222929834593657 + ], + [ + -47.38335904753291, + -22.22292791742732 + ], + [ + -47.38340711579478, + -22.222927163045917 + ], + [ + -47.38345358247946, + -22.222927147294193 + ], + [ + -47.383496005973605, + -22.222928376395867 + ], + [ + -47.383539991824655, + -22.222931553883345 + ], + [ + -47.38356629594186, + -22.22293404853423 + ], + [ + -47.3835912866123, + -22.22293609645258 + ], + [ + -47.38361170619512, + -22.222938220371635 + ], + [ + -47.38363024571634, + -22.222940655880173 + ], + [ + -47.38365162006111, + -22.222944058147938 + ], + [ + -47.38367370862323, + -22.22294781403699 + ], + [ + -47.38369738159085, + -22.2229523674413 + ], + [ + -47.38372414286983, + -22.222957573473153 + ], + [ + -47.383750677926, + -22.22296269399472 + ], + [ + -47.38377666470023, + -22.222967731301996 + ], + [ + -47.383802096247585, + -22.222972900553593 + ], + [ + -47.38382423671738, + -22.22297753535936 + ], + [ + -47.38384686378648, + -22.22298296051114 + ], + [ + -47.3838685124107, + -22.222988168959404 + ], + [ + -47.383894083681355, + -22.22299519484777 + ], + [ + -47.383921547704006, + -22.223002165106955 + ], + [ + -47.38394456413456, + -22.223008313126996 + ], + [ + -47.38397327446712, + -22.22301659495229 + ], + [ + -47.38399961714788, + -22.223023441452217 + ], + [ + -47.38401929796819, + -22.223029297997137 + ], + [ + -47.38404520012635, + -22.22303726575834 + ], + [ + -47.38407203207834, + -22.223045492273904 + ], + [ + -47.38409939350025, + -22.223054021586925 + ], + [ + -47.384128588491585, + -22.2230626280097 + ], + [ + -47.38414885483946, + -22.22306866795513 + ], + [ + -47.3841735148776, + -22.223076936357945 + ], + [ + -47.38420728767123, + -22.223087521194838 + ], + [ + -47.38423128063161, + -22.223094474337795 + ], + [ + -47.38426001850609, + -22.223103690700935 + ], + [ + -47.384285877514735, + -22.22311100566844 + ], + [ + -47.38430954583055, + -22.223118471126522 + ], + [ + -47.38432087638599, + -22.223121850062 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "124", + "Name": "Curvas", + "Length": 184.83423003316614, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "124", + "type": "LineString", + "coordinates": [ + [ + -47.38256501036323, + -22.222928485730826 + ], + [ + -47.38279392210438, + -22.222932135141527 + ], + [ + -47.382869023056685, + -22.222934052885797 + ], + [ + -47.38292690982251, + -22.22293447550189 + ], + [ + -47.382987401463176, + -22.222933084145406 + ], + [ + -47.38304484633384, + -22.22293038731623 + ], + [ + -47.38309727606338, + -22.22292766282718 + ], + [ + -47.38315021121855, + -22.22292501439205 + ], + [ + -47.38320449318857, + -22.222922077279268 + ], + [ + -47.38325843026275, + -22.222919190215862 + ], + [ + -47.383310313122806, + -22.222916310498423 + ], + [ + -47.38335861316802, + -22.22291438094176 + ], + [ + -47.38340699058029, + -22.222913621708976 + ], + [ + -47.383453806061496, + -22.222913605839405 + ], + [ + -47.38349679509358, + -22.22291485132632 + ], + [ + -47.38354129144879, + -22.22291806569243 + ], + [ + -47.383567670495374, + -22.222920567449762 + ], + [ + -47.38359273175112, + -22.222922621152588 + ], + [ + -47.38361352991598, + -22.22292478444959 + ], + [ + -47.383632487607684, + -22.222927274892722 + ], + [ + -47.383654152033735, + -22.22293072333445 + ], + [ + -47.38367648667458, + -22.22293452106635 + ], + [ + -47.38370034010753, + -22.22293910918268 + ], + [ + -47.383727105974536, + -22.222944316107284 + ], + [ + -47.38375362956453, + -22.2229494344164 + ], + [ + -47.38377969798162, + -22.222954487544083 + ], + [ + -47.38380524247241, + -22.22295967975294 + ], + [ + -47.38382764618806, + -22.22296436966581 + ], + [ + -47.383850490750106, + -22.222969846964695 + ], + [ + -47.38387239108994, + -22.22297511596857 + ], + [ + -47.38389805478893, + -22.222982167252503 + ], + [ + -47.38392546571282, + -22.222989124035603 + ], + [ + -47.38394872204149, + -22.22299533613607 + ], + [ + -47.38397738254473, + -22.223003603587742 + ], + [ + -47.38400378763142, + -22.223010466307194 + ], + [ + -47.38402379320902, + -22.223016419492335 + ], + [ + -47.38404976266852, + -22.223024407956263 + ], + [ + -47.38407661533156, + -22.223032640814974 + ], + [ + -47.38410389759319, + -22.22304114545173 + ], + [ + -47.38413300045472, + -22.223049724715626 + ], + [ + -47.38415353715194, + -22.223055845232935 + ], + [ + -47.384178299261556, + -22.223064147860047 + ], + [ + -47.3842117694062, + -22.22307463784298 + ], + [ + -47.384235811100304, + -22.223081605109073 + ], + [ + -47.384264502273524, + -22.223090806495133 + ], + [ + -47.38429032590769, + -22.223098111456085 + ], + [ + -47.38431409761478, + -22.223105609525994 + ], + [ + -47.38433081173022, + -22.223110593916655 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "125", + "Name": "Curvas", + "Length": 183.9953525129362, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "125", + "type": "LineString", + "coordinates": [ + [ + -47.38254230267691, + -22.222968753810104 + ], + [ + -47.38279295049273, + -22.222972749757535 + ], + [ + -47.382868253822735, + -22.222974672667537 + ], + [ + -47.38292727763193, + -22.22297510358336 + ], + [ + -47.38298903911748, + -22.22297368301786 + ], + [ + -47.38304716066201, + -22.22297095441991 + ], + [ + -47.383099662375734, + -22.222968226188932 + ], + [ + -47.383152647529215, + -22.222965575250935 + ], + [ + -47.38320702457177, + -22.222962632992548 + ], + [ + -47.38326098062324, + -22.22295974491988 + ], + [ + -47.38331254670035, + -22.222956882784004 + ], + [ + -47.383359916263366, + -22.222954990398343 + ], + [ + -47.383407366224255, + -22.222954245719713 + ], + [ + -47.383453135315676, + -22.22295423020373 + ], + [ + -47.383494427733595, + -22.222955426534956 + ], + [ + -47.38353739257606, + -22.222958530265156 + ], + [ + -47.383563546834445, + -22.222961010703084 + ], + [ + -47.38358839633421, + -22.222963047052534 + ], + [ + -47.38360805875273, + -22.22296509221567 + ], + [ + -47.38362576193275, + -22.222967417855095 + ], + [ + -47.38364655611481, + -22.222970727774896 + ], + [ + -47.38366815251933, + -22.222974399978227 + ], + [ + -47.38369146455618, + -22.222978883958515 + ], + [ + -47.383718216659126, + -22.222984088204836 + ], + [ + -47.38374477464768, + -22.222989213151244 + ], + [ + -47.383770598196115, + -22.222994218829918 + ], + [ + -47.38379580379656, + -22.222999342154832 + ], + [ + -47.38381741777448, + -22.223003866746357 + ], + [ + -47.38383960985756, + -22.223009187603864 + ], + [ + -47.38386075511032, + -22.223014274957368 + ], + [ + -47.38388614146434, + -22.223021250038165 + ], + [ + -47.38391371168455, + -22.2230282472495 + ], + [ + -47.38393624831875, + -22.223034267108705 + ], + [ + -47.38396505830995, + -22.223042577681206 + ], + [ + -47.38399127617883, + -22.22304939174204 + ], + [ + -47.38401030748437, + -22.223055055006526 + ], + [ + -47.38403607503983, + -22.223062981362276 + ], + [ + -47.38406286563741, + -22.22307119521265 + ], + [ + -47.38409038531221, + -22.2230797738571 + ], + [ + -47.38411976456323, + -22.223088434597642 + ], + [ + -47.384139490212284, + -22.223094313399283 + ], + [ + -47.384163946107414, + -22.223102513353474 + ], + [ + -47.38419832419916, + -22.22311328789832 + ], + [ + -47.384222219692035, + -22.22312021279502 + ], + [ + -47.38425105096913, + -22.22312945911234 + ], + [ + -47.38427698072672, + -22.223136794092945 + ], + [ + -47.384300442259914, + -22.22314419432733 + ], + [ + -47.38430100569286, + -22.223144362351196 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "126", + "Name": "Curvas", + "Length": 184.27497835415573, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "126", + "type": "LineString", + "coordinates": [ + [ + -47.38254987190704, + -22.222955331117245 + ], + [ + -47.382793274363216, + -22.222959211552205 + ], + [ + -47.382868510233976, + -22.222961132740306 + ], + [ + -47.38292715502864, + -22.222961560889562 + ], + [ + -47.382988493232475, + -22.22296015006041 + ], + [ + -47.38304638921901, + -22.222957432052063 + ], + [ + -47.383098866938006, + -22.222954705068382 + ], + [ + -47.38315183542537, + -22.22295205496468 + ], + [ + -47.38320618077707, + -22.222949114421496 + ], + [ + -47.38326013050846, + -22.222946226684936 + ], + [ + -47.38331180217423, + -22.222943358688838 + ], + [ + -47.38335948189803, + -22.222941453912842 + ], + [ + -47.38340724100945, + -22.22294070438281 + ], + [ + -47.38345335889753, + -22.222940688748977 + ], + [ + -47.383495216853596, + -22.222941901465422 + ], + [ + -47.38353869220042, + -22.222945042074247 + ], + [ + -47.38356492138822, + -22.222947529618637 + ], + [ + -47.38358984147333, + -22.222949571752558 + ], + [ + -47.38360988247403, + -22.222951656293652 + ], + [ + -47.383628003824704, + -22.222954036867637 + ], + [ + -47.383649088088134, + -22.222957392961444 + ], + [ + -47.383670930571476, + -22.222961107007627 + ], + [ + -47.383694423073734, + -22.22296562569994 + ], + [ + -47.3837211797647, + -22.222970830839017 + ], + [ + -47.383747726287055, + -22.222975953572977 + ], + [ + -47.383773631481716, + -22.22298097507273 + ], + [ + -47.38379895002232, + -22.22298612135424 + ], + [ + -47.38382082724619, + -22.222990701052872 + ], + [ + -47.3838432368223, + -22.22299607405751 + ], + [ + -47.38386463379467, + -22.223001221967703 + ], + [ + -47.38389011257316, + -22.223008222443003 + ], + [ + -47.38391762969459, + -22.223015206178246 + ], + [ + -47.38394040622699, + -22.223021290117888 + ], + [ + -47.38396916638885, + -22.223029586316777 + ], + [ + -47.38399544666369, + -22.22303641659715 + ], + [ + -47.38401480272663, + -22.223042176501863 + ], + [ + -47.38404063758345, + -22.223050123560345 + ], + [ + -47.38406744889562, + -22.22305834375496 + ], + [ + -47.38409488940659, + -22.223066897722052 + ], + [ + -47.384124176527756, + -22.223075531303706 + ], + [ + -47.384144172526256, + -22.22308149067725 + ], + [ + -47.384168730492895, + -22.22308972485574 + ], + [ + -47.38420280593555, + -22.2231004045466 + ], + [ + -47.38422675016218, + -22.223107343566443 + ], + [ + -47.384255534737974, + -22.223116574906673 + ], + [ + -47.38428142912108, + -22.223123899880715 + ], + [ + -47.3843049940456, + -22.22313133272695 + ], + [ + -47.38431094104021, + -22.22313310620683 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "127", + "Name": "Curvas", + "Length": 183.44314084513084, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "127", + "type": "LineString", + "coordinates": [ + [ + -47.38252716421263, + -22.22299559919504 + ], + [ + -47.38279230275197, + -22.22299982616812 + ], + [ + -47.382867741000545, + -22.223001752521952 + ], + [ + -47.38292752283898, + -22.223002188970863 + ], + [ + -47.38299013088821, + -22.22300074893268 + ], + [ + -47.383048703548845, + -22.222997999155506 + ], + [ + -47.383101253252065, + -22.22299526842989 + ], + [ + -47.38315427173777, + -22.222992615823316 + ], + [ + -47.38320871216204, + -22.22298967013454 + ], + [ + -47.38326268086996, + -22.222986781388745 + ], + [ + -47.38331403575344, + -22.222983930974195 + ], + [ + -47.38336078499468, + -22.222982063369244 + ], + [ + -47.38340761665434, + -22.222981328393406 + ], + [ + -47.38345268815227, + -22.22298131311317 + ], + [ + -47.383492849493535, + -22.222982476673987 + ], + [ + -47.38353479332696, + -22.22298550664692 + ], + [ + -47.383560797726496, + -22.222987972871973 + ], + [ + -47.38358550605554, + -22.222989997652448 + ], + [ + -47.38360441130946, + -22.222991964059727 + ], + [ + -47.38362127814798, + -22.222994179829897 + ], + [ + -47.38364149216708, + -22.22299739740177 + ], + [ + -47.38366259641383, + -22.223000985919395 + ], + [ + -47.383685547519796, + -22.223005400475593 + ], + [ + -47.38371229044669, + -22.223010602936412 + ], + [ + -47.383738871367584, + -22.22301573230771 + ], + [ + -47.38376453169018, + -22.223020706357733 + ], + [ + -47.383789511343636, + -22.22302578375595 + ], + [ + -47.38381059882953, + -22.223030198133223 + ], + [ + -47.3838323559264, + -22.223035414696444 + ], + [ + -47.38385299780741, + -22.223040380955112 + ], + [ + -47.38387819924484, + -22.22304730522834 + ], + [ + -47.383905875662634, + -22.22305432939184 + ], + [ + -47.3839279325003, + -22.223060221090186 + ], + [ + -47.383956842150205, + -22.223068560409914 + ], + [ + -47.38398293520716, + -22.223075342031667 + ], + [ + -47.38400131699773, + -22.22308081201565 + ], + [ + -47.384026949950396, + -22.22308869696591 + ], + [ + -47.38405369919354, + -22.223096898151066 + ], + [ + -47.38408137712133, + -22.223105526127004 + ], + [ + -47.38411094063208, + -22.223114241185296 + ], + [ + -47.38413012558211, + -22.22311995884312 + ], + [ + -47.38415437733418, + -22.223128090348666 + ], + [ + -47.384189360724235, + -22.223139054601543 + ], + [ + -47.38421315874961, + -22.223145951251986 + ], + [ + -47.3842420834293, + -22.223155227523467 + ], + [ + -47.38426808393586, + -22.2231625825172 + ], + [ + -47.384281256205, + -22.223166737313296 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "128", + "Name": "Curvas", + "Length": 183.71905230730283, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "128", + "type": "LineString", + "coordinates": [ + [ + -47.38253473344545, + -22.222982176502697 + ], + [ + -47.38279262662232, + -22.222986287962843 + ], + [ + -47.382867997411616, + -22.222988212594753 + ], + [ + -47.38292740023538, + -22.22298864627712 + ], + [ + -47.38298958500273, + -22.22298721597529 + ], + [ + -47.383047932105285, + -22.222984476787726 + ], + [ + -47.38310045781377, + -22.222981747309415 + ], + [ + -47.383153459633355, + -22.22297909553714 + ], + [ + -47.38320786836676, + -22.222976151563568 + ], + [ + -47.38326183075535, + -22.222973263153836 + ], + [ + -47.38331329122676, + -22.222970406879103 + ], + [ + -47.38336035062892, + -22.2229685268838 + ], + [ + -47.383407491439215, + -22.22296778705655 + ], + [ + -47.38345291173394, + -22.22296777165845 + ], + [ + -47.38349363861359, + -22.22296895160448 + ], + [ + -47.38353609295157, + -22.22297201845603 + ], + [ + -47.38356217228054, + -22.22297449178754 + ], + [ + -47.38358695119496, + -22.222976522352482 + ], + [ + -47.3836062350312, + -22.222978528137713 + ], + [ + -47.383623520040516, + -22.22298079884249 + ], + [ + -47.38364402414113, + -22.222984062588353 + ], + [ + -47.38366537446679, + -22.222987692948834 + ], + [ + -47.38368850603822, + -22.222992142217066 + ], + [ + -47.383715253553135, + -22.22299734557064 + ], + [ + -47.383741823007846, + -22.223002472729487 + ], + [ + -47.38376756498001, + -22.22300746260129 + ], + [ + -47.38379265757033, + -22.22301256295541 + ], + [ + -47.383814008302274, + -22.223017032439813 + ], + [ + -47.38383598289227, + -22.223022301150184 + ], + [ + -47.383856876497056, + -22.223027327966662 + ], + [ + -47.38388217035491, + -22.223034277633282 + ], + [ + -47.3839097936739, + -22.223041288320687 + ], + [ + -47.38393209040985, + -22.223047244099465 + ], + [ + -47.3839609502304, + -22.223055569045588 + ], + [ + -47.38398710569333, + -22.223062366886875 + ], + [ + -47.38400581224143, + -22.223067933511125 + ], + [ + -47.38403151249548, + -22.223075839164128 + ], + [ + -47.38405828245675, + -22.223084046694634 + ], + [ + -47.384085881217146, + -22.223092649992086 + ], + [ + -47.384115352598016, + -22.223101337891496 + ], + [ + -47.38413480789757, + -22.22310713612124 + ], + [ + -47.38415916172118, + -22.223115301851102 + ], + [ + -47.38419384246206, + -22.22312617124996 + ], + [ + -47.384217689221195, + -22.223133082023534 + ], + [ + -47.384246567199575, + -22.22314234331793 + ], + [ + -47.384272532331636, + -22.223149688305107 + ], + [ + -47.38429112760314, + -22.223155553623933 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "129", + "Name": "Curvas", + "Length": 182.89131790558568, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "129", + "type": "LineString", + "coordinates": [ + [ + -47.38251202574296, + -22.223022444578998 + ], + [ + -47.3827916550115, + -22.223026902578646 + ], + [ + -47.38286722817867, + -22.2230288323763 + ], + [ + -47.38292776804667, + -22.223029274358304 + ], + [ + -47.382991222659875, + -22.223027814847367 + ], + [ + -47.3830502464368, + -22.223025043890953 + ], + [ + -47.38310284412951, + -22.22302231067072 + ], + [ + -47.383155895947496, + -22.22301965639555 + ], + [ + -47.383210399753466, + -22.223016707276408 + ], + [ + -47.38326438111785, + -22.22301381785747 + ], + [ + -47.38331552480762, + -22.223010979164215 + ], + [ + -47.38336165372686, + -22.223009136340035 + ], + [ + -47.38340786708505, + -22.223008411067003 + ], + [ + -47.383452240989186, + -22.223008396022546 + ], + [ + -47.38349127125339, + -22.223009526812994 + ], + [ + -47.3835321940774, + -22.22301248302866 + ], + [ + -47.383558048618006, + -22.223014935040776 + ], + [ + -47.38358261577628, + -22.223016948252326 + ], + [ + -47.38360076386533, + -22.2230188359037 + ], + [ + -47.38361679436199, + -22.223020941804695 + ], + [ + -47.383636428217926, + -22.2230240670286 + ], + [ + -47.383657040306716, + -22.223027571860452 + ], + [ + -47.38367963048167, + -22.22303191699259 + ], + [ + -47.383706364232495, + -22.223037117667886 + ], + [ + -47.38373296808575, + -22.22304225146406 + ], + [ + -47.38375846518243, + -22.22304719388542 + ], + [ + -47.38378321888881, + -22.223052225356952 + ], + [ + -47.383803779882456, + -22.22305652951996 + ], + [ + -47.383825101993004, + -22.223061641788856 + ], + [ + -47.38384524050199, + -22.223066486952657 + ], + [ + -47.38387025702288, + -22.22307336041831 + ], + [ + -47.38389803963828, + -22.223080411533953 + ], + [ + -47.383919616679236, + -22.22308617507141 + ], + [ + -47.38394862598787, + -22.223094543138384 + ], + [ + -47.38397459423284, + -22.22310129232104 + ], + [ + -47.3839923265082, + -22.22310656902448 + ], + [ + -47.38401782485807, + -22.223114412569238 + ], + [ + -47.38404453274672, + -22.223122601089194 + ], + [ + -47.38407236892758, + -22.22313127839662 + ], + [ + -47.38410211669814, + -22.223140047772677 + ], + [ + -47.38412076094895, + -22.223145604286604 + ], + [ + -47.38414480855785, + -22.22315366734355 + ], + [ + -47.38418039724647, + -22.223164821304458 + ], + [ + -47.3842040978043, + -22.22317168970864 + ], + [ + -47.38423311588664, + -22.22318099593431 + ], + [ + -47.38425918714218, + -22.223188370941177 + ], + [ + -47.3842615134041, + -22.22318910469059 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "130", + "Name": "Curvas", + "Length": 183.16722937464726, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "130", + "type": "LineString", + "coordinates": [ + [ + -47.38251959497847, + -22.223009021887147 + ], + [ + -47.38279197888171, + -22.223013364373394 + ], + [ + -47.38286748458957, + -22.223015292449137 + ], + [ + -47.382927645442756, + -22.223015731664606 + ], + [ + -47.38299067677393, + -22.223014281890045 + ], + [ + -47.38304947499269, + -22.223011521523247 + ], + [ + -47.38310204869064, + -22.22300878955033 + ], + [ + -47.383155083842496, + -22.223006136109454 + ], + [ + -47.38320955595761, + -22.223003188705505 + ], + [ + -47.3832635310034, + -22.22300029962259 + ], + [ + -47.383314780280394, + -22.22299745506921 + ], + [ + -47.383361219360665, + -22.222995599854652 + ], + [ + -47.38340774186962, + -22.2229948697302 + ], + [ + -47.38345246457069, + -22.22299485456786 + ], + [ + -47.38349206037348, + -22.222996001743503 + ], + [ + -47.38353349370224, + -22.22299899483779 + ], + [ + -47.383559423172315, + -22.22300145395636 + ], + [ + -47.38358406091599, + -22.22300347295238 + ], + [ + -47.38360258758752, + -22.22300539998171 + ], + [ + -47.38361903625515, + -22.223007560817308 + ], + [ + -47.383638960192684, + -22.223010732215194 + ], + [ + -47.38365981836047, + -22.223014278889938 + ], + [ + -47.383682589000955, + -22.223018658734112 + ], + [ + -47.38370932733981, + -22.223023860302167 + ], + [ + -47.38373591972689, + -22.223028991885894 + ], + [ + -47.38376149847655, + -22.22303395012972 + ], + [ + -47.38378636511646, + -22.223039004556476 + ], + [ + -47.38380718935625, + -22.223043363826623 + ], + [ + -47.38382872895999, + -22.22304852824268 + ], + [ + -47.38384911919714, + -22.223053433965486 + ], + [ + -47.38387422813418, + -22.223060332823355 + ], + [ + -47.38390195765078, + -22.223067370462907 + ], + [ + -47.3839237745901, + -22.22307319808083 + ], + [ + -47.38395273406936, + -22.22308155177417 + ], + [ + -47.38397876472033, + -22.223088317176366 + ], + [ + -47.38399682175333, + -22.223093690520102 + ], + [ + -47.3840223874046, + -22.223101554767606 + ], + [ + -47.38404911601495, + -22.223109749634016 + ], + [ + -47.38407687302482, + -22.223118402261846 + ], + [ + -47.384106528665455, + -22.223127144479008 + ], + [ + -47.38412544326591, + -22.22313278156488 + ], + [ + -47.38414959294639, + -22.223140878846152 + ], + [ + -47.384184878985714, + -22.22315193795303 + ], + [ + -47.38420862827732, + -22.22315882048035 + ], + [ + -47.384237599658334, + -22.22316811172891 + ], + [ + -47.38426363553938, + -22.223175476729214 + ], + [ + -47.384271384805324, + -22.223177921002176 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "131", + "Name": "Curvas", + "Length": 182.32789660849394, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "131", + "type": "LineString", + "coordinates": [ + [ + -47.382496887267884, + -22.223049289961995 + ], + [ + -47.38279100727131, + -22.223053978989114 + ], + [ + -47.38286671535711, + -22.223055912230585 + ], + [ + -47.382928013254975, + -22.22305635974564 + ], + [ + -47.3829923144325, + -22.223054880761936 + ], + [ + -47.383051789325876, + -22.22305208862626 + ], + [ + -47.38310443500813, + -22.223049352911396 + ], + [ + -47.38315752015834, + -22.22304669696767 + ], + [ + -47.383212087346095, + -22.223043744418096 + ], + [ + -47.383266081366926, + -22.223040854326033 + ], + [ + -47.3833170138629, + -22.223038027354125 + ], + [ + -47.38336252245989, + -22.223036209310717 + ], + [ + -47.3834081175164, + -22.223035493740525 + ], + [ + -47.383451793826474, + -22.223035478931877 + ], + [ + -47.383489693013175, + -22.22303657695195 + ], + [ + -47.38352959482738, + -22.223039459410362 + ], + [ + -47.383555299509, + -22.22304189720956 + ], + [ + -47.383579725496425, + -22.223043898852154 + ], + [ + -47.383597116420304, + -22.223045707747612 + ], + [ + -47.38361231057482, + -22.223047703779457 + ], + [ + -47.38363136426735, + -22.223050736655328 + ], + [ + -47.383651484198, + -22.22305415780143 + ], + [ + -47.383673713441794, + -22.223058433509504 + ], + [ + -47.38370043801653, + -22.22306363239928 + ], + [ + -47.3837270648022, + -22.22306877062033 + ], + [ + -47.38375239867286, + -22.22307368141303 + ], + [ + -47.38377692643211, + -22.22307866695782 + ], + [ + -47.383796960933324, + -22.223082860906544 + ], + [ + -47.383817848057355, + -22.223087868881095 + ], + [ + -47.383837483194014, + -22.22309259294995 + ], + [ + -47.38386231479841, + -22.223099415608072 + ], + [ + -47.38389020361148, + -22.223106493675907 + ], + [ + -47.38391130085555, + -22.22311212905242 + ], + [ + -47.38394040982294, + -22.223120525866626 + ], + [ + -47.38396625325589, + -22.223127242610193 + ], + [ + -47.38398333601581, + -22.223132326033035 + ], + [ + -47.38400869976283, + -22.22314012817228 + ], + [ + -47.384035366296985, + -22.22314830402704 + ], + [ + -47.38406336073095, + -22.223157030665952 + ], + [ + -47.38409329276139, + -22.223165854359806 + ], + [ + -47.384111396312804, + -22.223171249729827 + ], + [ + -47.38413523977847, + -22.223179244338098 + ], + [ + -47.384171433765836, + -22.22319058800712 + ], + [ + -47.3841950368561, + -22.223197428165 + ], + [ + -47.384224148341104, + -22.22320676434486 + ], + [ + -47.384241574778734, + -22.223211693915943 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "132", + "Name": "Curvas", + "Length": 182.61119068359037, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "132", + "type": "LineString", + "coordinates": [ + [ + -47.38250445650609, + -22.22303586727063 + ], + [ + -47.38279133114138, + -22.223040440783898 + ], + [ + -47.38286697176785, + -22.223042372303453 + ], + [ + -47.38292789065075, + -22.223042817051986 + ], + [ + -47.38299176854608, + -22.22304134780467 + ], + [ + -47.3830510178812, + -22.223038566258627 + ], + [ + -47.383103639568695, + -22.223035831791076 + ], + [ + -47.38315670805277, + -22.22303317668165 + ], + [ + -47.383211243549646, + -22.22303022584728 + ], + [ + -47.38326523125264, + -22.223027336091192 + ], + [ + -47.383316269335126, + -22.223024503259197 + ], + [ + -47.38336208809327, + -22.223022672825383 + ], + [ + -47.383407992300654, + -22.223021952403762 + ], + [ + -47.3834520174078, + -22.223021937477224 + ], + [ + -47.3834904821333, + -22.22302305188249 + ], + [ + -47.383530894452456, + -22.223025971219514 + ], + [ + -47.38355667406358, + -22.223028416125164 + ], + [ + -47.38358117063643, + -22.22303042355223 + ], + [ + -47.383598940142946, + -22.223032271825655 + ], + [ + -47.38361455246857, + -22.22303432279209 + ], + [ + -47.383633896242806, + -22.223037401841964 + ], + [ + -47.38365426225256, + -22.223040864830956 + ], + [ + -47.38367667196197, + -22.223045175251073 + ], + [ + -47.38370340112473, + -22.223050375033605 + ], + [ + -47.383730016444204, + -22.223055511042208 + ], + [ + -47.383755431971295, + -22.22306043765807 + ], + [ + -47.3837800726607, + -22.223065446157396 + ], + [ + -47.38380037040815, + -22.223069695213276 + ], + [ + -47.38382147502545, + -22.223074755334988 + ], + [ + -47.38384136189488, + -22.223079539964118 + ], + [ + -47.38386628591095, + -22.22308638801322 + ], + [ + -47.38389412162519, + -22.223093452604953 + ], + [ + -47.38391545876772, + -22.223099152061938 + ], + [ + -47.38394451790574, + -22.22310753450253 + ], + [ + -47.3839704237447, + -22.22311426746565 + ], + [ + -47.38398783126235, + -22.223119447528795 + ], + [ + -47.38401326231081, + -22.223127270370785 + ], + [ + -47.38403994957024, + -22.22313545257312 + ], + [ + -47.384067864829625, + -22.22314415453132 + ], + [ + -47.384097704730124, + -22.223152951066268 + ], + [ + -47.38411607863126, + -22.223158427008265 + ], + [ + -47.384140024168545, + -22.22316645584086 + ], + [ + -47.3841759155065, + -22.22317770465582 + ], + [ + -47.384199567330555, + -22.22318455893684 + ], + [ + -47.38422863211423, + -22.2231938801396 + ], + [ + -47.38425157082567, + -22.223200369016155 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "133", + "Name": "Curvas", + "Length": 181.76130844365687, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "133", + "type": "LineString", + "coordinates": [ + [ + -47.38248174878742, + -22.22307613534399 + ], + [ + -47.38279035953139, + -22.223081055399522 + ], + [ + -47.3828662025359, + -22.223082992084798 + ], + [ + -47.382928258463906, + -22.223083445132882 + ], + [ + -47.38299340620607, + -22.223081946676363 + ], + [ + -47.383053332216086, + -22.223079133361384 + ], + [ + -47.38310602588785, + -22.223076395151903 + ], + [ + -47.38315914437036, + -22.22307373753959 + ], + [ + -47.38321377493987, + -22.223070781559624 + ], + [ + -47.38326778161718, + -22.223067890794407 + ], + [ + -47.383318502919316, + -22.223065075543882 + ], + [ + -47.3833633911938, + -22.22306328228126 + ], + [ + -47.38340836794836, + -22.223062576413955 + ], + [ + -47.38345134666411, + -22.223062561841118 + ], + [ + -47.38348811477286, + -22.22306362709086 + ], + [ + -47.38352699557685, + -22.22306643579204 + ], + [ + -47.38355255039944, + -22.22306885937832 + ], + [ + -47.383576835216, + -22.22307084945198 + ], + [ + -47.38359346897442, + -22.223072579591527 + ], + [ + -47.38360782678644, + -22.2230744657541 + ], + [ + -47.38362630031537, + -22.223077406282 + ], + [ + -47.38364592808768, + -22.223080743742358 + ], + [ + -47.383667796400175, + -22.223084950026283 + ], + [ + -47.38369451179885, + -22.22309014713056 + ], + [ + -47.38372116151692, + -22.223095289776484 + ], + [ + -47.38374633216147, + -22.223100168940544 + ], + [ + -47.383770633973555, + -22.22310510855861 + ], + [ + -47.383790141982125, + -22.223109192292995 + ], + [ + -47.38381059411948, + -22.223114095973184 + ], + [ + -47.383829725883515, + -22.223118698947037 + ], + [ + -47.383854372571435, + -22.223125470797655 + ], + [ + -47.38388236758222, + -22.223132575817647 + ], + [ + -47.38390298502924, + -22.223138083033213 + ], + [ + -47.383932193655426, + -22.22314650859467 + ], + [ + -47.383957912276315, + -22.223153192899087 + ], + [ + -47.38397434552058, + -22.22315808304131 + ], + [ + -47.383999574664685, + -22.223165843775025 + ], + [ + -47.38402619984433, + -22.22317400696458 + ], + [ + -47.38405435253145, + -22.223182782934988 + ], + [ + -47.384084468821854, + -22.22319166094667 + ], + [ + -47.38410203167366, + -22.223196895172727 + ], + [ + -47.38412567099604, + -22.223204821332324 + ], + [ + -47.38416247028238, + -22.223216354709475 + ], + [ + -47.38418597590501, + -22.223223166621082 + ], + [ + -47.38421518079272, + -22.223232532755144 + ], + [ + -47.384221582680134, + -22.223234343714054 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "134", + "Name": "Curvas", + "Length": 182.04460252470452, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "134", + "type": "LineString", + "coordinates": [ + [ + -47.38248931802833, + -22.223062712653114 + ], + [ + -47.38279068340132, + -22.22306751719434 + ], + [ + -47.382866458946474, + -22.223069452157706 + ], + [ + -47.38292813585937, + -22.223069902439274 + ], + [ + -47.38299286031917, + -22.223068413719165 + ], + [ + -47.38305256077085, + -22.223065610993824 + ], + [ + -47.383105230447846, + -22.223062874031665 + ], + [ + -47.383158332264216, + -22.22306021725364 + ], + [ + -47.383212931142836, + -22.22305726298888 + ], + [ + -47.38326693150306, + -22.223054372559606 + ], + [ + -47.38331775839099, + -22.223051551449018 + ], + [ + -47.383362956826744, + -22.223049745795993 + ], + [ + -47.38340824273231, + -22.223049035077242 + ], + [ + -47.38345157024525, + -22.223049020386497 + ], + [ + -47.38348890389303, + -22.22305010202141 + ], + [ + -47.383528295202176, + -22.22305294760121 + ], + [ + -47.38355392495429, + -22.22305537829394 + ], + [ + -47.383578280356296, + -22.223057374152063 + ], + [ + -47.38359529269748, + -22.223059143669577 + ], + [ + -47.38361006868079, + -22.223061084766776 + ], + [ + -47.38362883229155, + -22.223064071468674 + ], + [ + -47.38364870614305, + -22.22306745077193 + ], + [ + -47.383670754921205, + -22.22307169176791 + ], + [ + -47.383697474907926, + -22.22307688976494 + ], + [ + -47.38372411315978, + -22.22308203019841 + ], + [ + -47.38374936546428, + -22.223086925186326 + ], + [ + -47.38377378020307, + -22.223091887758244 + ], + [ + -47.383793551458, + -22.223096026599777 + ], + [ + -47.38381422108871, + -22.223100982427166 + ], + [ + -47.383833604590336, + -22.223105645962598 + ], + [ + -47.383858343685226, + -22.223112443202897 + ], + [ + -47.38388628559715, + -22.223119534746797 + ], + [ + -47.383907142942725, + -22.223125106042854 + ], + [ + -47.383936301739496, + -22.223133517230686 + ], + [ + -47.38396208276644, + -22.223140217754658 + ], + [ + -47.38397884076856, + -22.223145204537207 + ], + [ + -47.38400413721411, + -22.223152985973687 + ], + [ + -47.38403078312262, + -22.22316115551193 + ], + [ + -47.38405885663156, + -22.223169906800504 + ], + [ + -47.38408888079198, + -22.22317875765327 + ], + [ + -47.38410671399361, + -22.223184072451314 + ], + [ + -47.38413045538764, + -22.22319203283525 + ], + [ + -47.38416695202447, + -22.223203471358335 + ], + [ + -47.38419050638092, + -22.22321029739308 + ], + [ + -47.38421966456727, + -22.22321964855003 + ], + [ + -47.38423157873023, + -22.22322301881524 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "135", + "Name": "Curvas", + "Length": 181.20179861970723, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "135", + "type": "LineString", + "coordinates": [ + [ + -47.382466610301556, + -22.223102980725006 + ], + [ + -47.38278971179177, + -22.223108131809852 + ], + [ + -47.38286568971501, + -22.22311007193895 + ], + [ + -47.38292850367346, + -22.223110530520035 + ], + [ + -47.38299449798058, + -22.22310901259065 + ], + [ + -47.38305487510742, + -22.223106178096405 + ], + [ + -47.383107616768726, + -22.22310343739228 + ], + [ + -47.383160768583515, + -22.223100778111373 + ], + [ + -47.38321546253483, + -22.223097818700992 + ], + [ + -47.38326948186861, + -22.223094927262665 + ], + [ + -47.38331999197678, + -22.223092123733494 + ], + [ + -47.38336425992856, + -22.2230903552517 + ], + [ + -47.383408618380955, + -22.223089659087297 + ], + [ + -47.38345089950212, + -22.223089644750306 + ], + [ + -47.38348653653248, + -22.223090677229717 + ], + [ + -47.38352439632589, + -22.22309341217366 + ], + [ + -47.38354980128936, + -22.223095821547027 + ], + [ + -47.38357394493495, + -22.223097800051736 + ], + [ + -47.38358982152765, + -22.223099451435363 + ], + [ + -47.38360334299686, + -22.223101227728723 + ], + [ + -47.383621236361954, + -22.223104075908605 + ], + [ + -47.38364037197573, + -22.223107329683174 + ], + [ + -47.38366187935681, + -22.223111466543006 + ], + [ + -47.383688585579414, + -22.223116661861763 + ], + [ + -47.383715258229884, + -22.223121808932543 + ], + [ + -47.38374026564824, + -22.223126656467898 + ], + [ + -47.38376434151311, + -22.223131550159255 + ], + [ + -47.38378332302883, + -22.223135523679314 + ], + [ + -47.383803340179384, + -22.22314032306511 + ], + [ + -47.38382196857047, + -22.223144804943875 + ], + [ + -47.383846430342, + -22.223151525986992 + ], + [ + -47.38387453155052, + -22.2231586579592 + ], + [ + -47.383894669200316, + -22.223164037013778 + ], + [ + -47.38392397748534, + -22.22317249132247 + ], + [ + -47.38394957129412, + -22.223179143187785 + ], + [ + -47.383965355022475, + -22.223183840049288 + ], + [ + -47.383990449563605, + -22.223191559377508 + ], + [ + -47.38401703338875, + -22.22319970990185 + ], + [ + -47.3840453443291, + -22.22320853520375 + ], + [ + -47.38407564487949, + -22.223217467533253 + ], + [ + -47.38409266703154, + -22.223222540615307 + ], + [ + -47.384116102210555, + -22.22323039832622 + ], + [ + -47.38415350679604, + -22.223242121411584 + ], + [ + -47.38417691495105, + -22.223248905076883 + ], + [ + -47.38420171086192, + -22.223256857232997 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "136", + "Name": "Curvas", + "Length": 181.478014355036, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "136", + "type": "LineString", + "coordinates": [ + [ + -47.382474179545156, + -22.223089558034633 + ], + [ + -47.38279003566156, + -22.223094593604696 + ], + [ + -47.38286594612541, + -22.223096532011887 + ], + [ + -47.382928381068616, + -22.22309698782647 + ], + [ + -47.38299395209321, + -22.223095479633518 + ], + [ + -47.38305410366162, + -22.223092655728923 + ], + [ + -47.38310682132815, + -22.22308991627211 + ], + [ + -47.3831599564768, + -22.223087257825505 + ], + [ + -47.38321461873721, + -22.22308430013033 + ], + [ + -47.38326863175466, + -22.223081409027884 + ], + [ + -47.3833192474479, + -22.223078599638704 + ], + [ + -47.38336382556108, + -22.223076818766486 + ], + [ + -47.38340849316458, + -22.223076117750633 + ], + [ + -47.38345112308308, + -22.223076103295725 + ], + [ + -47.38348732565268, + -22.223077152160293 + ], + [ + -47.38352569595144, + -22.223079923982848 + ], + [ + -47.38355117584448, + -22.22308234046267 + ], + [ + -47.38357539007554, + -22.223084324751845 + ], + [ + -47.383591645251165, + -22.22308601551345 + ], + [ + -47.38360558489182, + -22.22308784674142 + ], + [ + -47.38362376833884, + -22.223090741095326 + ], + [ + -47.38364315003191, + -22.223094036712784 + ], + [ + -47.38366483787872, + -22.223098208284675 + ], + [ + -47.38369154868934, + -22.22310340449619 + ], + [ + -47.383718209873614, + -22.223108549354517 + ], + [ + -47.38374329895547, + -22.22311341271448 + ], + [ + -47.38376748774357, + -22.223118329358947 + ], + [ + -47.38378673250574, + -22.223122357986174 + ], + [ + -47.383806967149724, + -22.223127209519173 + ], + [ + -47.383825847283504, + -22.22313175196092 + ], + [ + -47.383850401457025, + -22.223138498392338 + ], + [ + -47.38387844956669, + -22.223145616888445 + ], + [ + -47.38389882711511, + -22.223151060023536 + ], + [ + -47.38392808557071, + -22.223159499958594 + ], + [ + -47.38395374178556, + -22.223166168043463 + ], + [ + -47.38396985027189, + -22.223170961545325 + ], + [ + -47.3839950121145, + -22.223178701576305 + ], + [ + -47.38402161667208, + -22.223186858450457 + ], + [ + -47.38404984843064, + -22.223195659069397 + ], + [ + -47.38408005685101, + -22.22320456423999 + ], + [ + -47.384097349352984, + -22.223209717894058 + ], + [ + -47.38412088660369, + -22.223217609829312 + ], + [ + -47.38415798853956, + -22.22322923806056 + ], + [ + -47.38418144542839, + -22.22323603584901 + ], + [ + -47.38421069701747, + -22.22324541696016 + ], + [ + -47.38421158662848, + -22.223245668612368 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "137", + "Name": "Curvas", + "Length": 180.6520915257908, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "137", + "type": "LineString", + "coordinates": [ + [ + -47.382451471810306, + -22.223129826105037 + ], + [ + -47.38278906405241, + -22.223135208220107 + ], + [ + -47.38286517689447, + -22.22313715179304 + ], + [ + -47.38292874888367, + -22.223137615907095 + ], + [ + -47.38299558975605, + -22.22313607850485 + ], + [ + -47.38305641799985, + -22.223133222831258 + ], + [ + -47.383109207650726, + -22.223130479632477 + ], + [ + -47.38316239279781, + -22.223127818683015 + ], + [ + -47.38321715013097, + -22.223124855842222 + ], + [ + -47.38327118212121, + -22.223121963730737 + ], + [ + -47.38332148103535, + -22.223119171922946 + ], + [ + -47.383365128664174, + -22.223117428222025 + ], + [ + -47.38340886881418, + -22.223116741760528 + ], + [ + -47.383450452340476, + -22.22311672765939 + ], + [ + -47.38348495829201, + -22.223117727368557 + ], + [ + -47.38352179707444, + -22.22312038855527 + ], + [ + -47.38354705217875, + -22.223122783715688 + ], + [ + -47.38357105465334, + -22.22312475065147 + ], + [ + -47.38358617407997, + -22.223126323279196 + ], + [ + -47.38359885920609, + -22.223127989703283 + ], + [ + -47.38361617240713, + -22.22313074553514 + ], + [ + -47.38363481586221, + -22.223133915623908 + ], + [ + -47.38365596231172, + -22.223137983059594 + ], + [ + -47.383682659358236, + -22.223143176592824 + ], + [ + -47.383709354941104, + -22.223148328088516 + ], + [ + -47.38373419913322, + -22.223153143995198 + ], + [ + -47.38375804905077, + -22.2231579917598 + ], + [ + -47.383776504073474, + -22.223161855065474 + ], + [ + -47.38379608623703, + -22.22316655015687 + ], + [ + -47.383814211254865, + -22.223170910940507 + ], + [ + -47.383838488110065, + -22.223177581176156 + ], + [ + -47.383866695516346, + -22.22318474010055 + ], + [ + -47.38388635336875, + -22.223189990994083 + ], + [ + -47.38391576131267, + -22.22319847405007 + ], + [ + -47.38394123030928, + -22.223205093476228 + ], + [ + -47.38395636452152, + -22.223209597056997 + ], + [ + -47.38398132445965, + -22.223217274979678 + ], + [ + -47.38400786693025, + -22.22322541283876 + ], + [ + -47.38403633612388, + -22.223234287472216 + ], + [ + -47.38406682093433, + -22.22324327411956 + ], + [ + -47.3840833023864, + -22.223248186057575 + ], + [ + -47.384106533422006, + -22.223255975319752 + ], + [ + -47.38414454330687, + -22.223267888113394 + ], + [ + -47.38416785399419, + -22.22327464353237 + ], + [ + -47.38418200562145, + -22.22327918202097 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "138", + "Name": "Curvas", + "Length": 180.92694506995352, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "138", + "type": "LineString", + "coordinates": [ + [ + -47.382459041056606, + -22.22311640341515 + ], + [ + -47.38278938792206, + -22.223121670014983 + ], + [ + -47.382865433304715, + -22.22312361186601 + ], + [ + -47.382928626278506, + -22.223124073213576 + ], + [ + -47.38299504386821, + -22.223122545547774 + ], + [ + -47.383055646553494, + -22.223119700463847 + ], + [ + -47.38310841220959, + -22.22311695851239 + ], + [ + -47.38316158069052, + -22.22311429839722 + ], + [ + -47.38321630633276, + -22.223111337271632 + ], + [ + -47.38327033200742, + -22.223108445496013 + ], + [ + -47.38332073650594, + -22.22310564782822 + ], + [ + -47.38336469429626, + -22.223103891736866 + ], + [ + -47.38340874359749, + -22.223103200423903 + ], + [ + -47.38345067592125, + -22.22310318620484 + ], + [ + -47.38348574741225, + -22.223104202299155 + ], + [ + -47.38352309670023, + -22.223106900364474 + ], + [ + -47.38354842673412, + -22.223109302631347 + ], + [ + -47.383572499794234, + -22.223111275351595 + ], + [ + -47.38358799780392, + -22.223112887357285 + ], + [ + -47.383601101101625, + -22.223114608716013 + ], + [ + -47.38361870438473, + -22.223117410721898 + ], + [ + -47.38363759391918, + -22.22312062265356 + ], + [ + -47.383658920834485, + -22.22312472480131 + ], + [ + -47.38368562246905, + -22.2231299192273 + ], + [ + -47.38371230658573, + -22.223135068510544 + ], + [ + -47.3837372324449, + -22.223139900242533 + ], + [ + -47.38376119528216, + -22.223144770959546 + ], + [ + -47.38377991355142, + -22.223148689372405 + ], + [ + -47.3837997132085, + -22.223153436611017 + ], + [ + -47.38381808997438, + -22.22315785795908 + ], + [ + -47.383842459226344, + -22.223164553581608 + ], + [ + -47.38387061353374, + -22.223171699029894 + ], + [ + -47.38389051128486, + -22.22317701400396 + ], + [ + -47.383919869399335, + -22.223185482686308 + ], + [ + -47.383945400802034, + -22.22319211833203 + ], + [ + -47.38396085977237, + -22.22319671855318 + ], + [ + -47.383985887012, + -22.223204417178625 + ], + [ + -47.38401245021863, + -22.22321256138865 + ], + [ + -47.38404084022685, + -22.223221411338013 + ], + [ + -47.38407123290726, + -22.22323037082643 + ], + [ + -47.38408798470934, + -22.22323536333648 + ], + [ + -47.384111317816675, + -22.223243186823012 + ], + [ + -47.38414902505181, + -22.223255004762507 + ], + [ + -47.38417238447299, + -22.22326177430465 + ], + [ + -47.38419185824245, + -22.223268019627216 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "139", + "Name": "Curvas", + "Length": 180.10238442214924, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "139", + "type": "LineString", + "coordinates": [ + [ + -47.38243633331365, + -22.223156671484105 + ], + [ + -47.38278841631334, + -22.223162284630327 + ], + [ + -47.382864664074255, + -22.223164231647058 + ], + [ + -47.382928994094456, + -22.223164701294067 + ], + [ + -47.382996681532454, + -22.223163144418884 + ], + [ + -47.383057960893396, + -22.22316026756595 + ], + [ + -47.38311079853388, + -22.22315752187256 + ], + [ + -47.3831640170133, + -22.22315485925448 + ], + [ + -47.383218837728286, + -22.22315189298327 + ], + [ + -47.383272882375, + -22.223149000198656 + ], + [ + -47.383322970095044, + -22.22314622011226 + ], + [ + -47.38336599740069, + -22.22314450119221 + ], + [ + -47.38340911924803, + -22.223143824433663 + ], + [ + -47.38345000517919, + -22.223143810568466 + ], + [ + -47.38348338005149, + -22.223144777507326 + ], + [ + -47.38351919782249, + -22.223147364936843 + ], + [ + -47.38354430306761, + -22.22314974588436 + ], + [ + -47.38356816437115, + -22.22315170125119 + ], + [ + -47.38358252663146, + -22.223153195122954 + ], + [ + -47.383594375414106, + -22.22315475167783 + ], + [ + -47.38361110845087, + -22.223157415161612 + ], + [ + -47.38362925974706, + -22.22316050156456 + ], + [ + -47.38365004526487, + -22.223164499576097 + ], + [ + -47.38367673313532, + -22.223169691323815 + ], + [ + -47.3837034516506, + -22.223174847244383 + ], + [ + -47.38372813261637, + -22.223179631522342 + ], + [ + -47.38375175658652, + -22.223184433360224 + ], + [ + -47.38376968511603, + -22.22318818645153 + ], + [ + -47.38378883229243, + -22.223192777248478 + ], + [ + -47.383806453936685, + -22.223197016936865 + ], + [ + -47.38383054587565, + -22.223203636365103 + ], + [ + -47.38385885947975, + -22.223210822241704 + ], + [ + -47.383878037534586, + -22.223215944974175 + ], + [ + -47.3839075451374, + -22.223224456777423 + ], + [ + -47.38393288932183, + -22.223231043764457 + ], + [ + -47.38394737401771, + -22.223235354064414 + ], + [ + -47.383972199352804, + -22.22324299058154 + ], + [ + -47.383998700468794, + -22.223251115775415 + ], + [ + -47.38402732791581, + -22.223260039740417 + ], + [ + -47.38405799698637, + -22.223269080705613 + ], + [ + -47.384073937738314, + -22.223273831499544 + ], + [ + -47.38409696463038, + -22.223281552312976 + ], + [ + -47.384135579814846, + -22.22329365481493 + ], + [ + -47.38415879303445, + -22.223300381987578 + ], + [ + -47.38416230037485, + -22.22330150680704 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "140", + "Name": "Curvas", + "Length": 180.37723797042506, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "140", + "type": "LineString", + "coordinates": [ + [ + -47.38244390256265, + -22.22314324879469 + ], + [ + -47.38278874018285, + -22.223148746425213 + ], + [ + -47.38286492048432, + -22.223150691720065 + ], + [ + -47.382928871488986, + -22.223151158600594 + ], + [ + -47.38299613564414, + -22.223149611461874 + ], + [ + -47.38305718944649, + -22.22314674519862 + ], + [ + -47.38311000309216, + -22.223144000752548 + ], + [ + -47.38316320490543, + -22.22314133896876 + ], + [ + -47.3832179939295, + -22.223138374412766 + ], + [ + -47.383272032261374, + -22.223135481963983 + ], + [ + -47.38332222556507, + -22.223132696017604 + ], + [ + -47.383365563032335, + -22.223130964707114 + ], + [ + -47.383408994031036, + -22.22313028309709 + ], + [ + -47.38345022875979, + -22.22313026911394 + ], + [ + -47.38348416917177, + -22.223131252437945 + ], + [ + -47.38352049744852, + -22.22313387674606 + ], + [ + -47.38354567762326, + -22.22313626480003 + ], + [ + -47.38356960951231, + -22.223138225951338 + ], + [ + -47.38358435035584, + -22.223139759201082 + ], + [ + -47.38359661731026, + -22.223141370690566 + ], + [ + -47.38361364042918, + -22.223144080348384 + ], + [ + -47.38363203780484, + -22.223147208594252 + ], + [ + -47.38365300378851, + -22.22315124131787 + ], + [ + -47.38367969624701, + -22.223156433958344 + ], + [ + -47.38370640329609, + -22.223161587666457 + ], + [ + -47.383731165932566, + -22.223166387770465 + ], + [ + -47.38375490281888, + -22.223171212560032 + ], + [ + -47.383773094595014, + -22.223175020758532 + ], + [ + -47.38379245926501, + -22.223179663702695 + ], + [ + -47.38381033266298, + -22.223183963957087 + ], + [ + -47.383834516993176, + -22.223190608770654 + ], + [ + -47.383862777498365, + -22.223197781171162 + ], + [ + -47.383882195451996, + -22.22320296798415 + ], + [ + -47.38391165322537, + -22.223211465413776 + ], + [ + -47.38393705981589, + -22.223218068620387 + ], + [ + -47.38395186926997, + -22.223222475560735 + ], + [ + -47.38397676190661, + -22.22323013278064 + ], + [ + -47.38400328376225, + -22.223238264326568 + ], + [ + -47.38403183202021, + -22.22324716360635 + ], + [ + -47.38406240896071, + -22.223256177412615 + ], + [ + -47.384078620062745, + -22.223261008778604 + ], + [ + -47.38410174902658, + -22.223268763816403 + ], + [ + -47.38414006156121, + -22.223280771464182 + ], + [ + -47.384163323514684, + -22.223287512760006 + ], + [ + -47.38417215299891, + -22.22329034441424 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "141", + "Name": "Curvas", + "Length": 179.5436351456788, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "141", + "type": "LineString", + "coordinates": [ + [ + -47.38242119481161, + -22.223183516862157 + ], + [ + -47.38278776857455, + -22.22318936104046 + ], + [ + -47.38286415125436, + -22.22319131150102 + ], + [ + -47.38292923930589, + -22.223191786680946 + ], + [ + -47.382997773309825, + -22.223190210332827 + ], + [ + -47.383059503788076, + -22.223187312300514 + ], + [ + -47.383112389418166, + -22.223184564112476 + ], + [ + -47.38316564122989, + -22.223181899825818 + ], + [ + -47.38322052532677, + -22.223178930124195 + ], + [ + -47.383274582629966, + -22.223176036666445 + ], + [ + -47.38332445915583, + -22.22317326830143 + ], + [ + -47.38336686613803, + -22.223171574162315 + ], + [ + -47.38340936968249, + -22.223170907106738 + ], + [ + -47.38344955801828, + -22.223170893477423 + ], + [ + -47.38348180181085, + -22.223171827646066 + ], + [ + -47.3835165985701, + -22.22317434131837 + ], + [ + -47.383541553955936, + -22.223176708052968 + ], + [ + -47.383565274088355, + -22.22317865185086 + ], + [ + -47.38357887918203, + -22.223180066966723 + ], + [ + -47.38358989162095, + -22.22318151365228 + ], + [ + -47.383606044493206, + -22.223184084788006 + ], + [ + -47.383623703630306, + -22.223187087505128 + ], + [ + -47.383644128216275, + -22.223191016092525 + ], + [ + -47.383670806910644, + -22.22319620605472 + ], + [ + -47.38369754835837, + -22.223201366400136 + ], + [ + -47.383722066097675, + -22.223206119049397 + ], + [ + -47.38374546412043, + -22.223210874960547 + ], + [ + -47.3837628661565, + -22.223214517837437 + ], + [ + -47.38378157834562, + -22.22321900433992 + ], + [ + -47.38379869661593, + -22.223223122933017 + ], + [ + -47.383822603638734, + -22.22322969155385 + ], + [ + -47.383851023440684, + -22.223236904382635 + ], + [ + -47.383869721697785, + -22.223241898954036 + ], + [ + -47.38389932895954, + -22.223250439504536 + ], + [ + -47.38392454833172, + -22.223256994052434 + ], + [ + -47.38393838351102, + -22.22326111107154 + ], + [ + -47.38396307424302, + -22.223268706183138 + ], + [ + -47.38398953400445, + -22.22327681871177 + ], + [ + -47.38401831970485, + -22.22328579200832 + ], + [ + -47.38404917303563, + -22.223294887291402 + ], + [ + -47.38406457308721, + -22.22329947694118 + ], + [ + -47.384087395835714, + -22.22330712930588 + ], + [ + -47.38412661631997, + -22.22331942151619 + ], + [ + -47.38414244009008, + -22.2233240072325 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "142", + "Name": "Curvas", + "Length": 179.82523159411446, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "142", + "type": "LineString", + "coordinates": [ + [ + -47.3824287640633, + -22.223170094173252 + ], + [ + -47.38278809244392, + -22.223175822835405 + ], + [ + -47.38286440766427, + -22.223177771574054 + ], + [ + -47.3829291167001, + -22.22317824398752 + ], + [ + -47.38299722742103, + -22.223176677375882 + ], + [ + -47.3830587323406, + -22.223173789933252 + ], + [ + -47.38311159397588, + -22.223171042992536 + ], + [ + -47.38316482912144, + -22.223168379540176 + ], + [ + -47.383219681527386, + -22.223165411553758 + ], + [ + -47.3832737325165, + -22.22316251843179 + ], + [ + -47.38332371462531, + -22.22315974420686 + ], + [ + -47.383366431769254, + -22.22315803767728 + ], + [ + -47.38340924446518, + -22.223157365770202 + ], + [ + -47.3834497815987, + -22.223157352022938 + ], + [ + -47.38348259093117, + -22.223158302576707 + ], + [ + -47.38351789819637, + -22.223160853127606 + ], + [ + -47.38354292851185, + -22.22316322696866 + ], + [ + -47.38356671922983, + -22.223165176551014 + ], + [ + -47.383580702906855, + -22.22316663104485 + ], + [ + -47.38359213351769, + -22.22316813266505 + ], + [ + -47.383608576472234, + -22.223170749974834 + ], + [ + -47.38362648168889, + -22.223173794534862 + ], + [ + -47.383647086740794, + -22.223177757834346 + ], + [ + -47.3836737700232, + -22.22318294868929 + ], + [ + -47.38370050000471, + -22.223188106822253 + ], + [ + -47.383725099418434, + -22.223192875298327 + ], + [ + -47.38374861035373, + -22.223197654160412 + ], + [ + -47.383766275636525, + -22.223201352144503 + ], + [ + -47.383785205319306, + -22.223205890794212 + ], + [ + -47.38380257534934, + -22.223210069954952 + ], + [ + -47.38382657475751, + -22.223216663959505 + ], + [ + -47.38385494146053, + -22.22322386331218 + ], + [ + -47.383873879616516, + -22.22322892196414 + ], + [ + -47.38390343704879, + -22.223237448141006 + ], + [ + -47.3839287188271, + -22.223244018908467 + ], + [ + -47.38394287876472, + -22.223248232568007 + ], + [ + -47.38396763679829, + -22.223255848382383 + ], + [ + -47.383994117302976, + -22.223263967264195 + ], + [ + -47.38402282381069, + -22.2232729158744 + ], + [ + -47.384053585011365, + -22.22328198399854 + ], + [ + -47.38406925541313, + -22.2232866542204 + ], + [ + -47.38409218023344, + -22.22329434080947 + ], + [ + -47.38413109806776, + -22.223306538165584 + ], + [ + -47.38415240832725, + -22.223312713861944 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "143", + "Name": "Curvas", + "Length": 178.980442236301, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "143", + "type": "LineString", + "coordinates": [ + [ + -47.38240605630416, + -22.223210362239264 + ], + [ + -47.382787120836056, + -22.223216437450557 + ], + [ + -47.38286363843482, + -22.2232183913549 + ], + [ + -47.38292948451796, + -22.223218872067747 + ], + [ + -47.382998865088126, + -22.223217276246636 + ], + [ + -47.38306104668386, + -22.223214357034927 + ], + [ + -47.383113980303584, + -22.223211606352237 + ], + [ + -47.38316726544765, + -22.22320894039698 + ], + [ + -47.38322221292642, + -22.22320596726495 + ], + [ + -47.383276282886115, + -22.22320307313404 + ], + [ + -47.383325948217696, + -22.223200316490455 + ], + [ + -47.38336773487624, + -22.223198647132268 + ], + [ + -47.38340962011759, + -22.223197989779703 + ], + [ + -47.38344911085771, + -22.223197976386345 + ], + [ + -47.38348022357015, + -22.223198877784764 + ], + [ + -47.3835139993172, + -22.22320131769987 + ], + [ + -47.383538804843724, + -22.223203670221526 + ], + [ + -47.38356238380499, + -22.22320560245048 + ], + [ + -47.38357523173175, + -22.223206938810414 + ], + [ + -47.38358540782658, + -22.22320827562668 + ], + [ + -47.38360098053411, + -22.223210754414346 + ], + [ + -47.383618147511946, + -22.22321367344561 + ], + [ + -47.38363821116595, + -22.22321753260884 + ], + [ + -47.38366488068424, + -22.223222720785525 + ], + [ + -47.38369164506439, + -22.223227885555836 + ], + [ + -47.38371599957717, + -22.22323260657633 + ], + [ + -47.38373917165245, + -22.223237316560752 + ], + [ + -47.38375604719493, + -22.223240849223174 + ], + [ + -47.38377432439654, + -22.22324523143118 + ], + [ + -47.38379093929256, + -22.223249228928943 + ], + [ + -47.383814661399335, + -22.223255746742378 + ], + [ + -47.383843187399194, + -22.2232629865234 + ], + [ + -47.38386140585837, + -22.223267852933652 + ], + [ + -47.3838911127791, + -22.22327642223147 + ], + [ + -47.38391620733899, + -22.223282944340188 + ], + [ + -47.383929393001495, + -22.223286868078407 + ], + [ + -47.38395394913033, + -22.223294421784413 + ], + [ + -47.38398036753715, + -22.223302521647817 + ], + [ + -47.38400931149101, + -22.223311544275948 + ], + [ + -47.38404034908206, + -22.2233206938769 + ], + [ + -47.384055208433104, + -22.2233251223825 + ], + [ + -47.38407782703798, + -22.223332706298446 + ], + [ + -47.38411765282224, + -22.22334518821714 + ], + [ + -47.38412250361106, + -22.223346593972135 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "144", + "Name": "Curvas", + "Length": 179.2620386878689, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "144", + "type": "LineString", + "coordinates": [ + [ + -47.38241362555856, + -22.223196939550828 + ], + [ + -47.382787444705286, + -22.223202899245507 + ], + [ + -47.382863894844554, + -22.223204851427976 + ], + [ + -47.382929361911856, + -22.223205329374363 + ], + [ + -47.38299831919886, + -22.223203743289755 + ], + [ + -47.38306027523583, + -22.22320083466774 + ], + [ + -47.38311318486074, + -22.223198085232376 + ], + [ + -47.38316645333864, + -22.22319542011141 + ], + [ + -47.38322136912646, + -22.223192448694604 + ], + [ + -47.38327543277281, + -22.223189554899438 + ], + [ + -47.383325203686624, + -22.223186792395946 + ], + [ + -47.383367300507025, + -22.223185110647293 + ], + [ + -47.38340949489997, + -22.22318444844323 + ], + [ + -47.383449334437955, + -22.2231844349319 + ], + [ + -47.38348101269051, + -22.22318535271543 + ], + [ + -47.383515298943706, + -22.223187829509126 + ], + [ + -47.3835401793999, + -22.223190189137238 + ], + [ + -47.38356382894677, + -22.22319212715066 + ], + [ + -47.383577055456996, + -22.223193502888567 + ], + [ + -47.383587649723914, + -22.223194894639484 + ], + [ + -47.383603512513844, + -22.223197419601203 + ], + [ + -47.38362092557134, + -22.223200380475387 + ], + [ + -47.38364116969134, + -22.2232042743507 + ], + [ + -47.383667843797674, + -22.223209463420154 + ], + [ + -47.38369459671161, + -22.22321462597801 + ], + [ + -47.38371903290252, + -22.22321936282607 + ], + [ + -47.38374231788668, + -22.22322409576067 + ], + [ + -47.38375945667599, + -22.22322768353032 + ], + [ + -47.383777951371364, + -22.223232117885573 + ], + [ + -47.38379481803344, + -22.22323617595268 + ], + [ + -47.38381863251934, + -22.223242719148136 + ], + [ + -47.38384710542025, + -22.223249945453045 + ], + [ + -47.38386556377841, + -22.22325487594386 + ], + [ + -47.38389522086965, + -22.223263430868045 + ], + [ + -47.38392037783568, + -22.223269969196327 + ], + [ + -47.38393388825663, + -22.22327398957502 + ], + [ + -47.38395851168704, + -22.2232815639838 + ], + [ + -47.38398495084077, + -22.223289670201513 + ], + [ + -47.38401381559828, + -22.22329866814217 + ], + [ + -47.384044761059194, + -22.223307790584172 + ], + [ + -47.384059890760525, + -22.223312299661877 + ], + [ + -47.384082611437236, + -22.223319917802197 + ], + [ + -47.38412213457146, + -22.22333230486668 + ], + [ + -47.384132471851366, + -22.22333530060255 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "145", + "Name": "Curvas", + "Length": 177.72585265280304, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "145", + "type": "LineString", + "coordinates": [ + [ + -47.38239769076203, + -22.22323731560334 + ], + [ + -47.38278647309781, + -22.22324351386057 + ], + [ + -47.38286312561559, + -22.223245471208703 + ], + [ + -47.38292972973062, + -22.223245957454445 + ], + [ + -47.382999956867394, + -22.223244342160303 + ], + [ + -47.38306258958079, + -22.22324140176917 + ], + [ + -47.383115571190125, + -22.22323864859185 + ], + [ + -47.383168889666564, + -22.223235980967992 + ], + [ + -47.38322390052726, + -22.22323300440553 + ], + [ + -47.383277983143444, + -22.223230109601506 + ], + [ + -47.383327437280684, + -22.223227364679325 + ], + [ + -47.38336860361533, + -22.223225720102146 + ], + [ + -47.38340987055332, + -22.223225072452596 + ], + [ + -47.38344866369749, + -22.223225059295164 + ], + [ + -47.38347864532939, + -22.223225927923398 + ], + [ + -47.38351140006384, + -22.223228294081338 + ], + [ + -47.38353605573098, + -22.223230632390074 + ], + [ + -47.38355949352103, + -22.223232553050078 + ], + [ + -47.38357158428057, + -22.223233810654065 + ], + [ + -47.38358092403099, + -22.223235037601043 + ], + [ + -47.38359591657359, + -22.22323742404061 + ], + [ + -47.383612591391994, + -22.223240259386 + ], + [ + -47.38363229411388, + -22.223244049125043 + ], + [ + -47.383658954456074, + -22.223249235516203 + ], + [ + -47.38368574176865, + -22.223254404711405 + ], + [ + -47.38370993305485, + -22.223259094103174 + ], + [ + -47.38373287918257, + -22.22326375816082 + ], + [ + -47.38374922823123, + -22.223267180608808 + ], + [ + -47.383767070445245, + -22.22327145852231 + ], + [ + -47.383783181966606, + -22.2232753349246 + ], + [ + -47.38380671915744, + -22.223281801930707 + ], + [ + -47.38383535135525, + -22.22328906866393 + ], + [ + -47.38385309001633, + -22.22329380691304 + ], + [ + -47.383882896596084, + -22.223302404958144 + ], + [ + -47.383907866343634, + -22.223308894627714 + ], + [ + -47.38392040248908, + -22.22331262508499 + ], + [ + -47.38394482401474, + -22.223320137385397 + ], + [ + -47.38397120106693, + -22.22332822458358 + ], + [ + -47.384000303274334, + -22.223337296543317 + ], + [ + -47.38403152512571, + -22.22334650046215 + ], + [ + -47.384045843776036, + -22.22335076782352 + ], + [ + -47.38406825823718, + -22.223358283290697 + ], + [ + -47.384102667078864, + -22.223369067469505 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "146", + "Name": "Curvas", + "Length": 178.69945662728995, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "146", + "type": "LineString", + "coordinates": [ + [ + -47.38239848704843, + -22.22322378492742 + ], + [ + -47.3827867969669, + -22.223229975655574 + ], + [ + -47.382863382025164, + -22.223231931281802 + ], + [ + -47.382929607124204, + -22.22323241476111 + ], + [ + -47.382999410977654, + -22.22323080920348 + ], + [ + -47.38306181813219, + -22.223227879402064 + ], + [ + -47.38311477574671, + -22.223225127472062 + ], + [ + -47.38316807755697, + -22.22322246068251 + ], + [ + -47.3832230567267, + -22.223219485835262 + ], + [ + -47.3832771330303, + -22.22321659136693 + ], + [ + -47.38332669274906, + -22.223213840584894 + ], + [ + -47.383368169245685, + -22.223212183617225 + ], + [ + -47.383409745335385, + -22.22321153111615 + ], + [ + -47.38344888727756, + -22.22321151784075 + ], + [ + -47.3834794344498, + -22.223212402854088 + ], + [ + -47.383512699690584, + -22.223214805890606 + ], + [ + -47.383537430287426, + -22.223217151305803 + ], + [ + -47.38356093866308, + -22.22321907775028 + ], + [ + -47.383573408006264, + -22.22322037473224 + ], + [ + -47.38358316592893, + -22.223221656613873 + ], + [ + -47.383598448554025, + -22.223224089227504 + ], + [ + -47.38361536945217, + -22.22322696641582 + ], + [ + -47.38363525264014, + -22.223230790866957 + ], + [ + -47.38366191757038, + -22.223235978150882 + ], + [ + -47.383688693416744, + -22.22324114513362 + ], + [ + -47.38371296638485, + -22.223245850353713 + ], + [ + -47.383736025417754, + -22.223250537360794 + ], + [ + -47.38375263771334, + -22.22325401491602 + ], + [ + -47.38377069742118, + -22.223258344976767 + ], + [ + -47.38378706071532, + -22.223262281950255 + ], + [ + -47.38381069027869, + -22.223268774336567 + ], + [ + -47.383839269377546, + -22.223276027593677 + ], + [ + -47.383857247937684, + -22.223280829923375 + ], + [ + -47.383887004687935, + -22.223289413594838 + ], + [ + -47.38391203684164, + -22.223295919483967 + ], + [ + -47.38392489774564, + -22.223299746581734 + ], + [ + -47.3839493865729, + -22.22330727958493 + ], + [ + -47.38397578437566, + -22.223315373138586 + ], + [ + -47.38400480738304, + -22.223324420409675 + ], + [ + -47.38403593710424, + -22.223333597169557 + ], + [ + -47.38405052610495, + -22.22333794510305 + ], + [ + -47.384073042637965, + -22.223345494794618 + ], + [ + -47.38411254574791, + -22.223357875582817 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "147", + "Name": "Curvas", + "Length": 172.25490566535325, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "147", + "type": "LineString", + "coordinates": [ + [ + -47.38243032575988, + -22.223264922673646 + ], + [ + -47.382785825359846, + -22.223270590270523 + ], + [ + -47.3828626127967, + -22.223272551062472 + ], + [ + -47.38292997494391, + -22.223273042841065 + ], + [ + -47.383001048647586, + -22.223271408073845 + ], + [ + -47.38306413247882, + -22.223268446503283 + ], + [ + -47.383117162077845, + -22.223265690831308 + ], + [ + -47.383170513886604, + -22.223263021538866 + ], + [ + -47.38322558812927, + -22.223260041545977 + ], + [ + -47.383279683401945, + -22.22325714606881 + ], + [ + -47.38332892634477, + -22.22325441286803 + ], + [ + -47.38336947235527, + -22.22325279307187 + ], + [ + -47.38341012098967, + -22.223252155125362 + ], + [ + -47.38344821653764, + -22.223252142203933 + ], + [ + -47.38347706708852, + -22.22325297806199 + ], + [ + -47.38350880081001, + -22.223255270462747 + ], + [ + -47.3835333066177, + -22.223257594558575 + ], + [ + -47.383556603236485, + -22.22325950364964 + ], + [ + -47.38356793682852, + -22.22326068249767 + ], + [ + -47.38357644023421, + -22.22326179957531 + ], + [ + -47.383590852611654, + -22.223264093666796 + ], + [ + -47.38360703527044, + -22.223266845326307 + ], + [ + -47.383626377060054, + -22.223270565641144 + ], + [ + -47.383653028226156, + -22.2232757502468 + ], + [ + -47.3836798384712, + -22.22328092386688 + ], + [ + -47.3837038665307, + -22.223285581629906 + ], + [ + -47.38372658671082, + -22.223290199760818 + ], + [ + -47.38374240926548, + -22.22329351199428 + ], + [ + -47.38375981649171, + -22.22329768561324 + ], + [ + -47.383775424637975, + -22.223301440919997 + ], + [ + -47.38379877691308, + -22.223307857118854 + ], + [ + -47.38382751530885, + -22.22331515080431 + ], + [ + -47.38384477417166, + -22.223319760892213 + ], + [ + -47.38387468041046, + -22.223328387684607 + ], + [ + -47.38389952534565, + -22.22333484491499 + ], + [ + -47.38391141197383, + -22.22333838209128 + ], + [ + -47.38393569889623, + -22.223345852986103 + ], + [ + -47.383962034593786, + -22.22335392751902 + ], + [ + -47.383991295054784, + -22.223363048810363 + ], + [ + -47.38402270116655, + -22.223372307047125 + ], + [ + -47.38403647911594, + -22.223376413264223 + ], + [ + -47.384058689433346, + -22.223383860282585 + ], + [ + -47.384082909736144, + -22.22339145124144 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "148", + "Name": "Curvas", + "Length": 175.76872940811222, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "148", + "type": "LineString", + "coordinates": [ + [ + -47.38240644781408, + -22.22325099859683 + ], + [ + -47.3827861492288, + -22.223257052065556 + ], + [ + -47.38286286920611, + -22.223259011135607 + ], + [ + -47.3829298523372, + -22.223259500147773 + ], + [ + -47.38300050275737, + -22.223257875117092 + ], + [ + -47.38306336102968, + -22.22325492413625 + ], + [ + -47.38311636663386, + -22.223252169711596 + ], + [ + -47.38316970177644, + -22.223249501253452 + ], + [ + -47.383224744328125, + -22.22324652297578 + ], + [ + -47.38327883328896, + -22.223243627834268 + ], + [ + -47.38332818181259, + -22.22324088877369 + ], + [ + -47.3833690379852, + -22.223239256587004 + ], + [ + -47.38340999577143, + -22.223238613788983 + ], + [ + -47.383448440117526, + -22.22323860074955 + ], + [ + -47.38347785620896, + -22.223239452992697 + ], + [ + -47.38351010043699, + -22.223241782272037 + ], + [ + -47.38353468117442, + -22.223244113474323 + ], + [ + -47.38355804837883, + -22.22324602834985 + ], + [ + -47.38356976055464, + -22.223247246575866 + ], + [ + -47.38357868213275, + -22.223248418588177 + ], + [ + -47.38359338459282, + -22.22325075885372 + ], + [ + -47.38360981333142, + -22.223253552356173 + ], + [ + -47.38362933558719, + -22.223257307383104 + ], + [ + -47.383655991341335, + -22.223262492881524 + ], + [ + -47.38368279012016, + -22.223267664289146 + ], + [ + -47.383706899865416, + -22.22327233788128 + ], + [ + -47.38372973294693, + -22.223276978960854 + ], + [ + -47.383745818748615, + -22.223280346301568 + ], + [ + -47.38376344346876, + -22.22328457206778 + ], + [ + -47.38377930339498, + -22.223288387947694 + ], + [ + -47.383802748035585, + -22.22329482952482 + ], + [ + -47.383831433332354, + -22.223302109734153 + ], + [ + -47.383848932094324, + -22.223306783902668 + ], + [ + -47.38387878850359, + -22.223315396321407 + ], + [ + -47.38390369584498, + -22.22332186977138 + ], + [ + -47.38391590723181, + -22.223325503588168 + ], + [ + -47.38394026145585, + -22.223332995185785 + ], + [ + -47.38396661790763, + -22.223341076075315 + ], + [ + -47.38399579916492, + -22.223350172676867 + ], + [ + -47.38402711314647, + -22.223359403754667 + ], + [ + -47.384041161446355, + -22.22336359054391 + ], + [ + -47.38406347383565, + -22.223371071786676 + ], + [ + -47.384092788408275, + -22.223380259355707 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "149", + "Name": "Curvas", + "Length": 153.21411098599486, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "149", + "type": "LineString", + "coordinates": [ + [ + -47.38259477048271, + -22.22329463119077 + ], + [ + -47.382785177622175, + -22.223297666680416 + ], + [ + -47.38286209997814, + -22.22329963091614 + ], + [ + -47.38293022015784, + -22.22330012822758 + ], + [ + -47.383002140428744, + -22.22329847398729 + ], + [ + -47.38306567537798, + -22.223295491237234 + ], + [ + -47.38311875296666, + -22.223292733070608 + ], + [ + -47.38317213810783, + -22.223290062109577 + ], + [ + -47.383227275732445, + -22.223287078686234 + ], + [ + -47.38328138366163, + -22.22328418253595 + ], + [ + -47.38333041540993, + -22.223281461056636 + ], + [ + -47.383370341096075, + -22.2232798660415 + ], + [ + -47.383410371426635, + -22.22327923779807 + ], + [ + -47.38344776937815, + -22.223279225112634 + ], + [ + -47.38347548884761, + -22.223280028200545 + ], + [ + -47.38350620155572, + -22.223282246844143 + ], + [ + -47.3835305575039, + -22.223284556727037 + ], + [ + -47.38355371295137, + -22.22328645424916 + ], + [ + -47.3835642893756, + -22.22328755434123 + ], + [ + -47.38357195643623, + -22.223288561549598 + ], + [ + -47.38358578864832, + -22.223290763292926 + ], + [ + -47.383601479147245, + -22.22329343126654 + ], + [ + -47.38362046000451, + -22.223297082157167 + ], + [ + -47.38364710199451, + -22.2233022649773 + ], + [ + -47.38367393517201, + -22.223307443022257 + ], + [ + -47.38369780000475, + -22.223312069156524 + ], + [ + -47.38372029423718, + -22.223316641360675 + ], + [ + -47.38373559029763, + -22.22331984337961 + ], + [ + -47.383752562535925, + -22.223323912704036 + ], + [ + -47.38376766730672, + -22.22332754691515 + ], + [ + -47.38379083466623, + -22.223333912306757 + ], + [ + -47.383819679259986, + -22.223341232944453 + ], + [ + -47.3838364583244, + -22.223345714871144 + ], + [ + -47.383866464222265, + -22.223354370410853 + ], + [ + -47.38389118434503, + -22.223360795202048 + ], + [ + -47.38390242145571, + -22.223364139097303 + ], + [ + -47.38392657377483, + -22.22337156858654 + ], + [ + -47.383952868117696, + -22.223379630454176 + ], + [ + -47.38398228683236, + -22.223388801077142 + ], + [ + -47.38401387720457, + -22.22339811363183 + ], + [ + -47.3840271144529, + -22.22340205870463 + ], + [ + -47.384049120626415, + -22.22340943727417 + ], + [ + -47.38406315238726, + -22.22341383501148 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "150", + "Name": "Curvas", + "Length": 158.4857591121678, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "150", + "type": "LineString", + "coordinates": [ + [ + -47.38255381801973, + -22.22328043492308 + ], + [ + -47.382785501490986, + -22.223284128475484 + ], + [ + -47.382862356387385, + -22.22328609098931 + ], + [ + -47.3829300975508, + -22.223286585534332 + ], + [ + -47.38300159453806, + -22.22328494103059 + ], + [ + -47.38306490392826, + -22.223281968870275 + ], + [ + -47.38311795752211, + -22.223279211950974 + ], + [ + -47.38317132599708, + -22.22327654182424 + ], + [ + -47.38322643193071, + -22.223273560116116 + ], + [ + -47.38328053354881, + -22.223270664301438 + ], + [ + -47.3833296708772, + -22.223267936962355 + ], + [ + -47.38336990672558, + -22.223266329556694 + ], + [ + -47.38341024620808, + -22.223265696461738 + ], + [ + -47.383447992957855, + -22.223265683658287 + ], + [ + -47.38347627796809, + -22.223266503131278 + ], + [ + -47.38350750118294, + -22.223268758653447 + ], + [ + -47.38353193206087, + -22.223271075642806 + ], + [ + -47.383555158094005, + -22.22327297894939 + ], + [ + -47.3835661131022, + -22.223274118419457 + ], + [ + -47.383574198335396, + -22.223275180562485 + ], + [ + -47.38358832063017, + -22.223277428479875 + ], + [ + -47.383604257209036, + -22.22328013829645 + ], + [ + -47.3836234185325, + -22.22328382389918 + ], + [ + -47.38365006511057, + -22.223289007612074 + ], + [ + -47.38367688682184, + -22.223294183444573 + ], + [ + -47.383700833344214, + -22.22329882540872 + ], + [ + -47.38372344047424, + -22.223303420560768 + ], + [ + -47.38373899978181, + -22.22330667768697 + ], + [ + -47.3837561895141, + -22.223310799158675 + ], + [ + -47.38377154607245, + -22.223314493945008 + ], + [ + -47.383794805789975, + -22.22332088471282 + ], + [ + -47.38382359728473, + -22.223328191874394 + ], + [ + -47.38384061624838, + -22.22333273788171 + ], + [ + -47.383870572316695, + -22.223341379047767 + ], + [ + -47.38389535484568, + -22.22334782005853 + ], + [ + -47.383906916715134, + -22.223351260594335 + ], + [ + -47.38393113633592, + -22.223358710786368 + ], + [ + -47.38395745143666, + -22.22336677901176 + ], + [ + -47.38398679094393, + -22.223375924943788 + ], + [ + -47.38401828918591, + -22.223385210339504 + ], + [ + -47.384031796784804, + -22.223389235984474 + ], + [ + -47.38405390503026, + -22.223396648778415 + ], + [ + -47.38407303106248, + -22.2234026431267 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "151", + "Name": "Curvas", + "Length": 140.4818755704061, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "151", + "type": "LineString", + "coordinates": [ + [ + -47.38269793753724, + -22.223323362655513 + ], + [ + -47.38278452988479, + -22.22332474309025 + ], + [ + -47.38286158715995, + -22.223326710769765 + ], + [ + -47.3829304653724, + -22.223327213613995 + ], + [ + -47.38300323221084, + -22.22332553990058 + ], + [ + -47.38306721827823, + -22.223322535971043 + ], + [ + -47.38312034385663, + -22.223319775309776 + ], + [ + -47.38317376233017, + -22.22331710268013 + ], + [ + -47.3832289633368, + -22.223314115826373 + ], + [ + -47.3832830839225, + -22.22331121900293 + ], + [ + -47.383331904476194, + -22.22330850924506 + ], + [ + -47.38337120983774, + -22.223306939011024 + ], + [ + -47.38341062186424, + -22.223306320470666 + ], + [ + -47.38344732221902, + -22.22330630802128 + ], + [ + -47.38347391060656, + -22.223307078339076 + ], + [ + -47.38350360230095, + -22.223309223225492 + ], + [ + -47.38352780838956, + -22.223311518895454 + ], + [ + -47.383550822665626, + -22.223313404848632 + ], + [ + -47.383560641921775, + -22.223314426184796 + ], + [ + -47.38356747263707, + -22.223315323523774 + ], + [ + -47.38358072468353, + -22.223317432918986 + ], + [ + -47.38359592302246, + -22.22332001720669 + ], + [ + -47.38361454294721, + -22.223323598673097 + ], + [ + -47.38364117576111, + -22.2233287797077 + ], + [ + -47.383668031871096, + -22.223333962177538 + ], + [ + -47.38369173347693, + -22.223338556683053 + ], + [ + -47.383714001761675, + -22.223343082960422 + ], + [ + -47.38372877132774, + -22.223346174764817 + ], + [ + -47.383745308577915, + -22.223350139794643 + ], + [ + -47.38375990997278, + -22.223353652910045 + ], + [ + -47.38378289241686, + -22.223359967494485 + ], + [ + -47.383811843208676, + -22.223367315084413 + ], + [ + -47.383828142474485, + -22.22337166884985 + ], + [ + -47.38385824803148, + -22.223380353136864 + ], + [ + -47.38388284334177, + -22.223386745488867 + ], + [ + -47.383893430934734, + -22.223389896103033 + ], + [ + -47.383917448650536, + -22.223397284186632 + ], + [ + -47.3839437016387, + -22.223405333389042 + ], + [ + -47.38397327860707, + -22.22341455334365 + ], + [ + -47.38400505323982, + -22.223423920216266 + ], + [ + -47.38401774978685, + -22.2234277041447 + ], + [ + -47.38403955181644, + -22.223435014265416 + ], + [ + -47.384043395032236, + -22.223436218779597 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "152", + "Name": "Curvas", + "Length": 145.80903596515455, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "152", + "type": "LineString", + "coordinates": [ + [ + -47.382656445840844, + -22.22330915781916 + ], + [ + -47.382784853753456, + -22.223311204885345 + ], + [ + -47.382861843569025, + -22.223313170842967 + ], + [ + -47.38293034276505, + -22.223313670920795 + ], + [ + -47.38300268631967, + -22.223312006943946 + ], + [ + -47.38306644682796, + -22.22330901360416 + ], + [ + -47.38311954841151, + -22.223306254190213 + ], + [ + -47.38317295021886, + -22.22330358239487 + ], + [ + -47.38322811953448, + -22.223300597256337 + ], + [ + -47.383282233809844, + -22.223297700768477 + ], + [ + -47.38333115994292, + -22.22329498515086 + ], + [ + -47.383370775466794, + -22.22329340252628 + ], + [ + -47.38341049664537, + -22.22329277913436 + ], + [ + -47.383447545798546, + -22.223292766566967 + ], + [ + -47.38347469972708, + -22.22329355326983 + ], + [ + -47.3835049019284, + -22.223295735034817 + ], + [ + -47.3835291829468, + -22.223298037811237 + ], + [ + -47.38355226780858, + -22.223299929548876 + ], + [ + -47.38356246564881, + -22.223300990263024 + ], + [ + -47.383569714536804, + -22.223301942536686 + ], + [ + -47.38358325666611, + -22.22330409810598 + ], + [ + -47.383598701085056, + -22.223306724236636 + ], + [ + -47.383617501476074, + -22.223310340415157 + ], + [ + -47.38364413887803, + -22.22331552234252 + ], + [ + -47.38367098352178, + -22.2233207025999 + ], + [ + -47.383694766821215, + -22.223325312936097 + ], + [ + -47.38371714799966, + -22.223329862160572 + ], + [ + -47.383732180812956, + -22.223333009072242 + ], + [ + -47.3837489355572, + -22.22333702624934 + ], + [ + -47.38376378874779, + -22.223340599942233 + ], + [ + -47.38378686354185, + -22.223346939900654 + ], + [ + -47.38381576123464, + -22.223354274014447 + ], + [ + -47.383832300399774, + -22.223358691860533 + ], + [ + -47.383862356127196, + -22.223367361773885 + ], + [ + -47.38388701384373, + -22.223373770345493 + ], + [ + -47.38389792619557, + -22.223377017600203 + ], + [ + -47.38392201121306, + -22.22338442638661 + ], + [ + -47.383948284962806, + -22.22339248194789 + ], + [ + -47.38397778272008, + -22.223401677210436 + ], + [ + -47.384009465222555, + -22.22341101692407 + ], + [ + -47.384022432120254, + -22.2234148814247 + ], + [ + -47.384044336221805, + -22.22342222576983 + ], + [ + -47.38405327371053, + -22.223425026895768 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "153", + "Name": "Curvas", + "Length": 129.25314909114994, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "153", + "type": "LineString", + "coordinates": [ + [ + -47.38278655076466, + -22.22335188764448 + ], + [ + -47.38286107434203, + -22.223353790623317 + ], + [ + -47.38293071058756, + -22.22335429900034 + ], + [ + -47.383004323993866, + -22.223352605813748 + ], + [ + -47.38306876117963, + -22.2233495807047 + ], + [ + -47.383121934747734, + -22.223346817548787 + ], + [ + -47.38317538655368, + -22.22334414325053 + ], + [ + -47.38323065094233, + -22.223341152966338 + ], + [ + -47.38328478418452, + -22.22333825546976 + ], + [ + -47.38333339354358, + -22.22333555743336 + ], + [ + -47.38337207858029, + -22.223334011980413 + ], + [ + -47.38341087230247, + -22.223333403143187 + ], + [ + -47.38344687506024, + -22.223333390929838 + ], + [ + -47.383472332365486, + -22.223334128477557 + ], + [ + -47.38350100304569, + -22.223336199606816 + ], + [ + -47.38352505927469, + -22.223338481063873 + ], + [ + -47.38354793237933, + -22.223340355448094 + ], + [ + -47.383556994467085, + -22.223341298028274 + ], + [ + -47.38356298883671, + -22.223342085497936 + ], + [ + -47.38357566071734, + -22.223344102544978 + ], + [ + -47.38359036689605, + -22.22334660314674 + ], + [ + -47.383608625888165, + -22.22335011518892 + ], + [ + -47.38363524952598, + -22.223355294438015 + ], + [ + -47.38366212856842, + -22.22336048133272 + ], + [ + -47.38368566694731, + -22.223365044209448 + ], + [ + -47.38370770928429, + -22.22336952456005 + ], + [ + -47.383721952355735, + -22.22337250614988 + ], + [ + -47.38373805461766, + -22.223376366885123 + ], + [ + -47.38375215263612, + -22.223379758904674 + ], + [ + -47.38377495016505, + -22.22338602268199 + ], + [ + -47.38380400715493, + -22.223393397224175 + ], + [ + -47.38381982662195, + -22.22339762282831 + ], + [ + -47.38385003183811, + -22.22340633586265 + ], + [ + -47.383874502335885, + -22.223412695775455 + ], + [ + -47.38388444041089, + -22.22341565310849 + ], + [ + -47.38390832352331, + -22.223422999786468 + ], + [ + -47.383934535156776, + -22.223431036323586 + ], + [ + -47.38396427037891, + -22.223440305609856 + ], + [ + -47.38399622927225, + -22.223449726800414 + ], + [ + -47.38400838511781, + -22.223453349584457 + ], + [ + -47.38402373224076, + -22.22345849540469 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "154", + "Name": "Curvas", + "Length": 134.26869981503359, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "154", + "type": "LineString", + "coordinates": [ + [ + -47.38274805393105, + -22.223337358129005 + ], + [ + -47.38286133075094, + -22.223340250696555 + ], + [ + -47.3829305879799, + -22.223340756307184 + ], + [ + -47.383003778102236, + -22.22333907285718 + ], + [ + -47.3830679897288, + -22.223336058337885 + ], + [ + -47.38312113930205, + -22.223333296429303 + ], + [ + -47.38317457444179, + -22.22333062296535 + ], + [ + -47.38322980713943, + -22.22332763439638 + ], + [ + -47.38328393407202, + -22.223324737235323 + ], + [ + -47.383332649009766, + -22.223322033339215 + ], + [ + -47.383371644208914, + -22.22332047549572 + ], + [ + -47.38341074708329, + -22.223319861806928 + ], + [ + -47.383447098639586, + -22.223319849475555 + ], + [ + -47.38347312148605, + -22.223320603408332 + ], + [ + -47.38350230267337, + -22.22332271141616 + ], + [ + -47.383526433832195, + -22.223324999979667 + ], + [ + -47.38354937752256, + -22.223326880148367 + ], + [ + -47.383558818194565, + -22.22332786210654 + ], + [ + -47.383565230737055, + -22.223328704510855 + ], + [ + -47.38357819270062, + -22.223330767731987 + ], + [ + -47.38359314495946, + -22.223333310176734 + ], + [ + -47.383611584417906, + -22.22333685693103 + ], + [ + -47.38363821264377, + -22.223342037072882 + ], + [ + -47.38366508021998, + -22.223347221755134 + ], + [ + -47.38368870029645, + -22.223351800463348 + ], + [ + -47.383710855523226, + -22.223356303760255 + ], + [ + -47.383725361842, + -22.223359340457364 + ], + [ + -47.383741681598075, + -22.2233632533399 + ], + [ + -47.38375603142095, + -22.223366705939302 + ], + [ + -47.383778921291274, + -22.223372995088265 + ], + [ + -47.38380792518211, + -22.223380356154312 + ], + [ + -47.38382398454854, + -22.2233846458391 + ], + [ + -47.38385413993512, + -22.223393344499783 + ], + [ + -47.383878672839174, + -22.223399720632194 + ], + [ + -47.38388893567317, + -22.2234027746058 + ], + [ + -47.38391288608727, + -22.22341014198659 + ], + [ + -47.38393911848603, + -22.22341818488374 + ], + [ + -47.383968774493354, + -22.223427429476786 + ], + [ + -47.38400064125638, + -22.22343682350836 + ], + [ + -47.3840130674527, + -22.223440526864614 + ], + [ + -47.38403353499796, + -22.223447389538784 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "155", + "Name": "Curvas", + "Length": 120.62851311903769, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "155", + "type": "LineString", + "coordinates": [ + [ + -47.38284988228985, + -22.22338079251094 + ], + [ + -47.38293095580336, + -22.223381384386574 + ], + [ + -47.38300541577787, + -22.22337967172678 + ], + [ + -47.38307030408214, + -22.223376625438224 + ], + [ + -47.383123525639974, + -22.223373859787618 + ], + [ + -47.383177010778354, + -22.22337118382079 + ], + [ + -47.38323233854904, + -22.223368190106157 + ], + [ + -47.38328648444774, + -22.22336529193642 + ], + [ + -47.38333488261203, + -22.223362605621507 + ], + [ + -47.38337294732367, + -22.223361084949698 + ], + [ + -47.38341112274132, + -22.223360485815608 + ], + [ + -47.38344642790181, + -22.22336047383833 + ], + [ + -47.38347075412428, + -22.223361178615974 + ], + [ + -47.38349840378997, + -22.223363175988087 + ], + [ + -47.383522310159286, + -22.223365443232236 + ], + [ + -47.38354504209245, + -22.22336730604752 + ], + [ + -47.38355334701153, + -22.223368169871744 + ], + [ + -47.38355850503512, + -22.223368847472 + ], + [ + -47.38357059674974, + -22.223370772170913 + ], + [ + -47.38358481076807, + -22.223373189086708 + ], + [ + -47.38360270882738, + -22.223376631704642 + ], + [ + -47.38362932328907, + -22.223381809168217 + ], + [ + -47.383656225264026, + -22.22338700048782 + ], + [ + -47.38367960041586, + -22.22339153173572 + ], + [ + -47.38370141680498, + -22.223395966159575 + ], + [ + -47.38371513338167, + -22.22339883753479 + ], + [ + -47.38373080065518, + -22.22340259397541 + ], + [ + -47.38374439529674, + -22.223405864898986 + ], + [ + -47.38376700791072, + -22.22341207786929 + ], + [ + -47.38379617109872, + -22.223419479363738 + ], + [ + -47.38381151076681, + -22.223423576806553 + ], + [ + -47.38384181564214, + -22.223432318588216 + ], + [ + -47.38386616132739, + -22.22343864606181 + ], + [ + -47.38387544988418, + -22.223441410113637 + ], + [ + -47.38389919839317, + -22.223448715385985 + ], + [ + -47.38392536867193, + -22.22345673925786 + ], + [ + -47.3839552621479, + -22.22346605787579 + ], + [ + -47.38398740530187, + -22.22347553338432 + ], + [ + -47.383999020445756, + -22.22347899502391 + ], + [ + -47.3840041267218, + -22.223480707135078 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "156", + "Name": "Curvas", + "Length": 124.78375764366183, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "156", + "type": "LineString", + "coordinates": [ + [ + -47.38281972941069, + -22.22336703057102 + ], + [ + -47.38293083319539, + -22.223367841693467 + ], + [ + -47.38300486988577, + -22.223366138770274 + ], + [ + -47.38306953263075, + -22.223363103071488 + ], + [ + -47.38312273019372, + -22.223360338668208 + ], + [ + -47.38317619866589, + -22.22335766353569 + ], + [ + -47.383231494745544, + -22.223354671536274 + ], + [ + -47.3832856343354, + -22.22335177370203 + ], + [ + -47.38333413807767, + -22.223349081527445 + ], + [ + -47.383372512951865, + -22.223347548465064 + ], + [ + -47.38341099752182, + -22.22334694447939 + ], + [ + -47.38344665148098, + -22.223346932384082 + ], + [ + -47.38347154324489, + -22.22334765354677 + ], + [ + -47.383499703417904, + -22.223349687797445 + ], + [ + -47.383523684717055, + -22.223351962148048 + ], + [ + -47.383546487235975, + -22.223353830747804 + ], + [ + -47.38355517073943, + -22.223354733950014 + ], + [ + -47.38356074693607, + -22.223355466484968 + ], + [ + -47.38357312873372, + -22.223357437357958 + ], + [ + -47.38358758883227, + -22.223359896116726 + ], + [ + -47.383605667358, + -22.2233633734468 + ], + [ + -47.383632286407746, + -22.223368551803134 + ], + [ + -47.38365917691645, + -22.223373740910283 + ], + [ + -47.38368263376993, + -22.223378287990506 + ], + [ + -47.38370456304486, + -22.223382745359835 + ], + [ + -47.38371854286897, + -22.223385671842358 + ], + [ + -47.38373442763671, + -22.223389480430292 + ], + [ + -47.38374827409203, + -22.223392811936247 + ], + [ + -47.3837709790382, + -22.223399050275667 + ], + [ + -47.38380008912713, + -22.223406438293974 + ], + [ + -47.383815668694716, + -22.22341059981747 + ], + [ + -47.38384592374045, + -22.22341932722546 + ], + [ + -47.38387033183198, + -22.22342567091866 + ], + [ + -47.38387994514789, + -22.223428531611095 + ], + [ + -47.38390376095861, + -22.223435857586253 + ], + [ + -47.38392995200635, + -22.223443887819325 + ], + [ + -47.38395976626377, + -22.223453181742858 + ], + [ + -47.38399181728741, + -22.2234626300924 + ], + [ + -47.38400370278215, + -22.223466172304224 + ], + [ + -47.38401392948204, + -22.22346960127013 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "157", + "Name": "Curvas", + "Length": 111.65974965874356, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "157", + "type": "LineString", + "coordinates": [ + [ + -47.38291651340876, + -22.223408807599828 + ], + [ + -47.38300650756282, + -22.2234067376397 + ], + [ + -47.38307184698577, + -22.22340367017158 + ], + [ + -47.38312511653338, + -22.223400902026317 + ], + [ + -47.38317863500416, + -22.223398224390888 + ], + [ + -47.38323402615691, + -22.223395227245792 + ], + [ + -47.38328818471216, + -22.223392328402927 + ], + [ + -47.38333637168161, + -22.223389653809487 + ], + [ + -47.38337381606792, + -22.223388157918844 + ], + [ + -47.383411373180806, + -22.223387568487937 + ], + [ + -47.383445980743765, + -22.223387556746747 + ], + [ + -47.383469175883036, + -22.22338822875436 + ], + [ + -47.383495804533766, + -22.223390152369326 + ], + [ + -47.38351956104335, + -22.223392405400553 + ], + [ + -47.38354215180495, + -22.22339425664692 + ], + [ + -47.3835496995551, + -22.22339504171516 + ], + [ + -47.383554021232364, + -22.22339560944603 + ], + [ + -47.38356553278071, + -22.223397441796745 + ], + [ + -47.383579254638455, + -22.223399775026582 + ], + [ + -47.38359679176486, + -22.223403148220264 + ], + [ + -47.383623397050464, + -22.22340832389832 + ], + [ + -47.38365032195789, + -22.223413519642804 + ], + [ + -47.38367353388259, + -22.22341801926192 + ], + [ + -47.383695124323815, + -22.223422407758967 + ], + [ + -47.38370831440552, + -22.22342516891958 + ], + [ + -47.38372354669044, + -22.22342882106555 + ], + [ + -47.3837366379546, + -22.223431970893035 + ], + [ + -47.3837590656539, + -22.22343813305639 + ], + [ + -47.38378833504007, + -22.223445561503095 + ], + [ + -47.383803194909035, + -22.223449530784563 + ], + [ + -47.383833599443605, + -22.22345830131356 + ], + [ + -47.383857820316244, + -22.223464596347927 + ], + [ + -47.38386645935463, + -22.223467167118528 + ], + [ + -47.38389007326015, + -22.223474430985227 + ], + [ + -47.383916202184125, + -22.223482442191823 + ], + [ + -47.383946253914004, + -22.223491810141446 + ], + [ + -47.383978581328705, + -22.223501339967964 + ], + [ + -47.38398438747384, + -22.22350307036258 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "158", + "Name": "Curvas", + "Length": 115.87713345487423, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "158", + "type": "LineString", + "coordinates": [ + [ + -47.38288583872414, + -22.22339596762499 + ], + [ + -47.383005961670236, + -22.223393204683266 + ], + [ + -47.38307107553382, + -22.22339014780492 + ], + [ + -47.383124321086555, + -22.223387380906985 + ], + [ + -47.383177822891106, + -22.22338470410586 + ], + [ + -47.38323318235283, + -22.22338170867599 + ], + [ + -47.38328733459998, + -22.223378810168576 + ], + [ + -47.38333562714669, + -22.223376129715515 + ], + [ + -47.3833733816957, + -22.223374621434274 + ], + [ + -47.383411247960986, + -22.22337402715179 + ], + [ + -47.38344620432276, + -22.223374015292542 + ], + [ + -47.38346996500368, + -22.223374703685185 + ], + [ + -47.38349710416192, + -22.223376664178712 + ], + [ + -47.383520935601396, + -22.22337892431639 + ], + [ + -47.383543596948776, + -22.223380781347224 + ], + [ + -47.38355152328342, + -22.223381605793453 + ], + [ + -47.38355626313388, + -22.223382228459027 + ], + [ + -47.38356806476539, + -22.223384106983826 + ], + [ + -47.38358203270347, + -22.223386482056657 + ], + [ + -47.38359975029635, + -22.223389889962473 + ], + [ + -47.383626360170005, + -22.223395066533286 + ], + [ + -47.38365327361118, + -22.223400260065315 + ], + [ + -47.38367656724163, + -22.223404775517565 + ], + [ + -47.383698270564636, + -22.223409186959287 + ], + [ + -47.38371172389386, + -22.223412003227214 + ], + [ + -47.383727173673094, + -22.223415707520513 + ], + [ + -47.38374051676105, + -22.223418917933156 + ], + [ + -47.38376303678262, + -22.22342510546287 + ], + [ + -47.383792253069714, + -22.223432520433434 + ], + [ + -47.383807352838254, + -22.22343655379559 + ], + [ + -47.3838377075432, + -22.22344530995092 + ], + [ + -47.38386199082214, + -22.223451621204894 + ], + [ + -47.383870954619766, + -22.223454288616118 + ], + [ + -47.383894635827026, + -22.22346157318564 + ], + [ + -47.38392078552372, + -22.22346959075459 + ], + [ + -47.38395075803132, + -22.223478934008654 + ], + [ + -47.383982993315634, + -22.223488436676178 + ], + [ + -47.38399432359156, + -22.22349181341705 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "159", + "Name": "Curvas", + "Length": 103.73241666807884, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "159", + "type": "LineString", + "coordinates": [ + [ + -47.38297292776922, + -22.22343460104182 + ], + [ + -47.38300759934871, + -22.22343380355251 + ], + [ + -47.38307338989053, + -22.223430714904797 + ], + [ + -47.3831267074279, + -22.223427944264877 + ], + [ + -47.38318025923111, + -22.22342526496082 + ], + [ + -47.38323571376595, + -22.223422264385295 + ], + [ + -47.383289884977735, + -22.223419364869276 + ], + [ + -47.38333786075228, + -22.22341670199733 + ], + [ + -47.38337468481305, + -22.22341523088788 + ], + [ + -47.3834116236209, + -22.22341465116018 + ], + [ + -47.38344553358604, + -22.22341463965511 + ], + [ + -47.3834675976417, + -22.22341527889271 + ], + [ + -47.383493205277084, + -22.22341712875055 + ], + [ + -47.38351681192687, + -22.223419367568845 + ], + [ + -47.38353926151689, + -22.223421207246258 + ], + [ + -47.38354605209779, + -22.223421913558543 + ], + [ + -47.383549537428394, + -22.22342237142001 + ], + [ + -47.38356046881023, + -22.223424111422528 + ], + [ + -47.383573698507256, + -22.223426360966425 + ], + [ + -47.383590874700594, + -22.223429664735793 + ], + [ + -47.38361747081006, + -22.223434838628336 + ], + [ + -47.38364441865003, + -22.223440038797694 + ], + [ + -47.38366746734747, + -22.223444506787974 + ], + [ + -47.38368883184076, + -22.223448849358263 + ], + [ + -47.38370149542728, + -22.22345150030423 + ], + [ + -47.38371629272348, + -22.22345504815553 + ], + [ + -47.3837288806096, + -22.223458076886786 + ], + [ + -47.383751123394596, + -22.223464188243295 + ], + [ + -47.383780498978965, + -22.223471643642277 + ], + [ + -47.38379487904866, + -22.22347548476236 + ], + [ + -47.383825383242474, + -22.22348428403869 + ], + [ + -47.38384947930247, + -22.223490546633823 + ], + [ + -47.383857468822235, + -22.223492924123136 + ], + [ + -47.38388094812421, + -22.223500146584175 + ], + [ + -47.38390703569344, + -22.22350814512547 + ], + [ + -47.38393724567726, + -22.223517562406784 + ], + [ + -47.383964503347016, + -22.223525597719007 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "160", + "Name": "Curvas", + "Length": 107.59242633762001, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "160", + "type": "LineString", + "coordinates": [ + [ + -47.38294573072986, + -22.22342168108923 + ], + [ + -47.38300705345566, + -22.22342027059613 + ], + [ + -47.38307261843802, + -22.223417192538207 + ], + [ + -47.38312591198049, + -22.22341442314562 + ], + [ + -47.38317944711749, + -22.22341174467587 + ], + [ + -47.38323486996129, + -22.22340874581557 + ], + [ + -47.38328903486571, + -22.223405846634954 + ], + [ + -47.383337116216815, + -22.22340317790343 + ], + [ + -47.38337425044039, + -22.22340169440337 + ], + [ + -47.38341149840078, + -22.223401109824056 + ], + [ + -47.38344575716486, + -22.223401098200934 + ], + [ + -47.38346838676239, + -22.22340175382355 + ], + [ + -47.383494504905485, + -22.223403640559948 + ], + [ + -47.383518186485176, + -22.223405886484695 + ], + [ + -47.383540706661, + -22.22340773194658 + ], + [ + -47.38354787582655, + -22.223408477636852 + ], + [ + -47.38355177933051, + -22.223408990433033 + ], + [ + -47.38356300079565, + -22.223410776609658 + ], + [ + -47.38357647657306, + -22.223413067996525 + ], + [ + -47.38359383323295, + -22.223416406478037 + ], + [ + -47.38362043393048, + -22.223421581263356 + ], + [ + -47.38364737030418, + -22.22342677922025 + ], + [ + -47.38367050071155, + -22.223431263044528 + ], + [ + -47.38369197808253, + -22.223435628558644 + ], + [ + -47.38370490491666, + -22.22343833461193 + ], + [ + -47.38371991970724, + -22.223441934610552 + ], + [ + -47.383732759428014, + -22.22344502392994 + ], + [ + -47.38375509452457, + -22.223451160649873 + ], + [ + -47.38378441700983, + -22.223458602572713 + ], + [ + -47.383799036979184, + -22.223462507773508 + ], + [ + -47.38382949134337, + -22.223471292676166 + ], + [ + -47.38385364980968, + -22.223477571490907 + ], + [ + -47.383861964088794, + -22.223480045620867 + ], + [ + -47.38388551069255, + -22.22348728878474 + ], + [ + -47.38391161903821, + -22.22349529368956 + ], + [ + -47.383941749795994, + -22.22350468627413 + ], + [ + -47.38397416934109, + -22.223514243259636 + ], + [ + -47.38397445135458, + -22.223514327307598 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "161", + "Name": "Curvas", + "Length": 96.12225342449268, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "161", + "type": "LineString", + "coordinates": [ + [ + -47.383026237085275, + -22.223460045743373 + ], + [ + -47.3830749327964, + -22.22345775963786 + ], + [ + -47.38312829832355, + -22.223454986503288 + ], + [ + -47.38318188345922, + -22.223452305530618 + ], + [ + -47.3832374013762, + -22.22344930152463 + ], + [ + -47.38329158524448, + -22.223446401335483 + ], + [ + -47.383339349824055, + -22.223443750185048 + ], + [ + -47.38337555355904, + -22.22344230385681 + ], + [ + -47.38341187406165, + -22.223441733832335 + ], + [ + -47.38344508642871, + -22.22344172256341 + ], + [ + -47.38346601940028, + -22.22344232903098 + ], + [ + -47.383490606019926, + -22.223444105131723 + ], + [ + -47.38351406280987, + -22.2234463297371 + ], + [ + -47.383536371228246, + -22.22344815784558 + ], + [ + -47.38354240463958, + -22.22344878540185 + ], + [ + -47.38354505362321, + -22.223449133393927 + ], + [ + -47.38355540483837, + -22.223450781048257 + ], + [ + -47.383568142374436, + -22.22345294690614 + ], + [ + -47.383584957634575, + -22.22345618125124 + ], + [ + -47.38361154456794, + -22.223461353358253 + ], + [ + -47.3836385153404, + -22.223466557952484 + ], + [ + -47.38366140081055, + -22.22347099431394 + ], + [ + -47.383682539355824, + -22.223475290957452 + ], + [ + -47.383694676447, + -22.223477831688744 + ], + [ + -47.38370903875428, + -22.22348127524533 + ], + [ + -47.383721123261786, + -22.223484182880206 + ], + [ + -47.383743181132814, + -22.22349024342998 + ], + [ + -47.38377266291542, + -22.22349772578124 + ], + [ + -47.383786563185645, + -22.2235014387399 + ], + [ + -47.38381716703878, + -22.22351026676359 + ], + [ + -47.383841138286044, + -22.223516496919455 + ], + [ + -47.383848478286914, + -22.223518681127477 + ], + [ + -47.38387182298537, + -22.223525862182832 + ], + [ + -47.383897869199785, + -22.223533848058857 + ], + [ + -47.38392823743763, + -22.223543314671858 + ], + [ + -47.38394460604824, + -22.22354813998935 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "162", + "Name": "Curvas", + "Length": 99.83525508142611, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "162", + "type": "LineString", + "coordinates": [ + [ + -47.3830004927283, + -22.223447695767295 + ], + [ + -47.38307416134333, + -22.223444237271345 + ], + [ + -47.38312750287558, + -22.223441465384102 + ], + [ + -47.383181071345035, + -22.223438785245744 + ], + [ + -47.383236557570946, + -22.223435782954994 + ], + [ + -47.38329073513262, + -22.2234328831012 + ], + [ + -47.38333860528804, + -22.223430226091214 + ], + [ + -47.383375119185956, + -22.223428767372354 + ], + [ + -47.38341174884122, + -22.22342819249628 + ], + [ + -47.38344531000733, + -22.223428181109266 + ], + [ + -47.38346680852099, + -22.223428803961838 + ], + [ + -47.38349190564857, + -22.223430616941137 + ], + [ + -47.383515437368445, + -22.22343284865297 + ], + [ + -47.38353781637264, + -22.223434682545914 + ], + [ + -47.38354422836877, + -22.2234353494802 + ], + [ + -47.38354729552596, + -22.22343575240698 + ], + [ + -47.383557936824495, + -22.223437446235415 + ], + [ + -47.38357092044105, + -22.2234396539363 + ], + [ + -47.383587916167805, + -22.223442922993545 + ], + [ + -47.38361450768922, + -22.223448095993316 + ], + [ + -47.383641466995414, + -22.22345329837509 + ], + [ + -47.38366443417972, + -22.22345775057138 + ], + [ + -47.383685685598536, + -22.223462070157886 + ], + [ + -47.383698085937404, + -22.223464665996516 + ], + [ + -47.383712665739154, + -22.22346816170044 + ], + [ + -47.38372500209303, + -22.223471129926654 + ], + [ + -47.38374715226403, + -22.223477215836656 + ], + [ + -47.38377658094751, + -22.223484684711778 + ], + [ + -47.383790721117485, + -22.22348846175116 + ], + [ + -47.38382127514095, + -22.223497275401172 + ], + [ + -47.38384530879461, + -22.223503521776653 + ], + [ + -47.38385297355494, + -22.22350580262535 + ], + [ + -47.383876385555155, + -22.223513004383538 + ], + [ + -47.383902452549755, + -22.22352099662425 + ], + [ + -47.3839327415578, + -22.22353043853936 + ], + [ + -47.3839545546984, + -22.223536868854428 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "163", + "Name": "Curvas", + "Length": 88.73665800703975, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "163", + "type": "LineString", + "coordinates": [ + [ + -47.38307733351103, + -22.223484759795006 + ], + [ + -47.383129889220356, + -22.223482028741536 + ], + [ + -47.383183507688486, + -22.22347934610026 + ], + [ + -47.38323908898758, + -22.22347633866381 + ], + [ + -47.383293285512416, + -22.22347343780153 + ], + [ + -47.38334083889692, + -22.223470798372595 + ], + [ + -47.38337642230589, + -22.223469376825634 + ], + [ + -47.38341212450299, + -22.223468816504397 + ], + [ + -47.38344463927171, + -22.223468805471622 + ], + [ + -47.38346444115878, + -22.223469379169238 + ], + [ + -47.383488006762306, + -22.223471081512884 + ], + [ + -47.38351131369235, + -22.223473291905318 + ], + [ + -47.38353348093901, + -22.223475108444855 + ], + [ + -47.3835387571805, + -22.223475657245153 + ], + [ + -47.38354056981684, + -22.22347589536781 + ], + [ + -47.38355034086508, + -22.2234774506739 + ], + [ + -47.38356258624, + -22.223479532845772 + ], + [ + -47.38357904056683, + -22.223482697766574 + ], + [ + -47.383605618324054, + -22.223487868088053 + ], + [ + -47.38363261202905, + -22.2234930771072 + ], + [ + -47.383655334271786, + -22.223497481839797 + ], + [ + -47.38367624686902, + -22.223501732556517 + ], + [ + -47.38368785746461, + -22.2235041630731 + ], + [ + -47.38370178478282, + -22.223507502334975 + ], + [ + -47.38371336591101, + -22.223510288873307 + ], + [ + -47.38373523886854, + -22.223516298616463 + ], + [ + -47.38376482684941, + -22.223523807919992 + ], + [ + -47.383778247319995, + -22.223527392717205 + ], + [ + -47.38380895083245, + -22.223536249488284 + ], + [ + -47.38383279726701, + -22.223542447204903 + ], + [ + -47.383839487748794, + -22.223544438131505 + ], + [ + -47.38386269784361, + -22.22355157778117 + ], + [ + -47.38388870270323, + -22.22355955099192 + ], + [ + -47.383919229195165, + -22.223569066936662 + ], + [ + -47.38392470874324, + -22.223570682257737 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "164", + "Name": "Curvas", + "Length": 92.40666511650046, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "164", + "type": "LineString", + "coordinates": [ + [ + -47.38305201338533, + -22.223472513092425 + ], + [ + -47.38312909377182, + -22.22346850762243 + ], + [ + -47.383182695573716, + -22.223465825815456 + ], + [ + -47.383238245181744, + -22.223462820094248 + ], + [ + -47.38329243540072, + -22.223459919567283 + ], + [ + -47.38334009436035, + -22.223457274278843 + ], + [ + -47.383375987932375, + -22.223455840341234 + ], + [ + -47.38341199928224, + -22.223455275168362 + ], + [ + -47.38344486285017, + -22.22345526401751 + ], + [ + -47.383465230279555, + -22.22345585410012 + ], + [ + -47.38348930639118, + -22.223457593322312 + ], + [ + -47.38351268825119, + -22.22345981082121 + ], + [ + -47.38353492608369, + -22.22346163314521 + ], + [ + -47.38354058091017, + -22.22346222132352 + ], + [ + -47.3835428117202, + -22.223462514380884 + ], + [ + -47.383552872851915, + -22.223464115861077 + ], + [ + -47.38356536430743, + -22.223466239875975 + ], + [ + -47.383581999100926, + -22.22346943950893 + ], + [ + -47.38360858144622, + -22.22347461072317 + ], + [ + -47.38363556368494, + -22.223479817529856 + ], + [ + -47.383658367646106, + -22.223484238098177 + ], + [ + -47.38367939311267, + -22.223488511757004 + ], + [ + -47.383691266956056, + -22.223490997380935 + ], + [ + -47.38370541176882, + -22.22349438879016 + ], + [ + -47.3837172447561, + -22.223497235923336 + ], + [ + -47.38373921000099, + -22.223503271023247 + ], + [ + -47.383768744882715, + -22.223510766850623 + ], + [ + -47.38378240525316, + -22.22351441572858 + ], + [ + -47.38381305893593, + -22.22352325812597 + ], + [ + -47.38383696777686, + -22.223529472062207 + ], + [ + -47.38384398301822, + -22.223531559629524 + ], + [ + -47.383867260414846, + -22.223538719982024 + ], + [ + -47.38389328605841, + -22.223546699558636 + ], + [ + -47.38392373331677, + -22.2235561908043 + ], + [ + -47.38393465739652, + -22.223559411123784 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "165", + "Name": "Curvas", + "Length": 83.05795452999759, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "165", + "type": "LineString", + "coordinates": [ + [ + -47.38311189575842, + -22.223510088681735 + ], + [ + -47.38313148011829, + -22.223509070979624 + ], + [ + -47.38318513191889, + -22.22350638666974 + ], + [ + -47.38324077660017, + -22.223503375802853 + ], + [ + -47.38329498578153, + -22.223500474267396 + ], + [ + -47.38334232797089, + -22.223497846560008 + ], + [ + -47.38337729105359, + -22.22349644979433 + ], + [ + -47.38341237494498, + -22.22349589917636 + ], + [ + -47.38344419211508, + -22.223495888379794 + ], + [ + -47.38346286291722, + -22.223496429307456 + ], + [ + -47.3834854075042, + -22.223498057893977 + ], + [ + -47.38350856457427, + -22.223500254073507 + ], + [ + -47.38353059064917, + -22.223502059044094 + ], + [ + -47.38353510972054, + -22.223502529088414 + ], + [ + -47.38353608600928, + -22.22350265734162 + ], + [ + -47.38354527689036, + -22.223504120299477 + ], + [ + -47.38355703010398, + -22.223506118785327 + ], + [ + -47.38357312349733, + -22.223509214281805 + ], + [ + -47.38359969207844, + -22.223514382817775 + ], + [ + -47.38362670871596, + -22.223519596261806 + ], + [ + -47.38364926773121, + -22.223523969365537 + ], + [ + -47.38366995438032, + -22.22352817415546 + ], + [ + -47.38368103848015, + -22.223530494457325 + ], + [ + -47.38369453080914, + -22.223533729424453 + ], + [ + -47.383705608557264, + -22.223536394866052 + ], + [ + -47.383727296601776, + -22.223542353802742 + ], + [ + -47.38375699078097, + -22.223549890058575 + ], + [ + -47.38376993145173, + -22.2235533466943 + ], + [ + -47.383800734623556, + -22.22356223221271 + ], + [ + -47.38382445624535, + -22.22356839749008 + ], + [ + -47.38383049720777, + -22.22357019513526 + ], + [ + -47.383853572698946, + -22.223577293379265 + ], + [ + -47.38387953620374, + -22.223585253924696 + ], + [ + -47.383904874850124, + -22.223593152675882 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "166", + "Name": "Curvas", + "Length": 85.84147558694913, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "166", + "type": "LineString", + "coordinates": [ + [ + -47.383095138143446, + -22.223497397035295 + ], + [ + -47.38313068466918, + -22.223495549860594 + ], + [ + -47.383184319803554, + -22.223492866385016 + ], + [ + -47.38323993279374, + -22.223489857233364 + ], + [ + -47.383294135669985, + -22.22348695603318 + ], + [ + -47.38334158343377, + -22.223484322466327 + ], + [ + -47.38337685667964, + -22.223482913309986 + ], + [ + -47.38341224972392, + -22.22348235784037 + ], + [ + -47.383444415693354, + -22.223482346925717 + ], + [ + -47.383463652038024, + -22.22348290423836 + ], + [ + -47.383486707133315, + -22.22348456970342 + ], + [ + -47.383509939133376, + -22.22348677298941 + ], + [ + -47.383532035794154, + -22.22348858374447 + ], + [ + -47.383536933450614, + -22.22348909316678 + ], + [ + -47.38353832791322, + -22.223489276354716 + ], + [ + -47.38354780887791, + -22.223490785486707 + ], + [ + -47.3835598081722, + -22.223492825815562 + ], + [ + -47.383576082032306, + -22.223495956024202 + ], + [ + -47.38360265520148, + -22.22350112545294 + ], + [ + -47.383629660372726, + -22.223506336684512 + ], + [ + -47.38365230111074, + -22.223510725624834 + ], + [ + -47.38367310062492, + -22.22351495335601 + ], + [ + -47.383684447972655, + -22.22351732876524 + ], + [ + -47.38369815779627, + -22.223520615879746 + ], + [ + -47.38370948741732, + -22.22352334191996 + ], + [ + -47.38373126773547, + -22.22352932620963 + ], + [ + -47.3837609088155, + -22.223536848989326 + ], + [ + -47.38377408938619, + -22.223540369705773 + ], + [ + -47.383804842728324, + -22.223549240850513 + ], + [ + -47.383828626756525, + -22.223555422347516 + ], + [ + -47.38383499247865, + -22.223557316633418 + ], + [ + -47.38385813527165, + -22.223564435580265 + ], + [ + -47.38388411956414, + -22.22357240249273 + ], + [ + -47.38391472507284, + -22.22358194306896 + ], + [ + -47.38391476008838, + -22.22358195339122 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "167", + "Name": "Curvas", + "Length": 77.35910671630607, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "167", + "type": "LineString", + "coordinates": [ + [ + -47.383146691490545, + -22.223535431758748 + ], + [ + -47.38318675615045, + -22.223533427239076 + ], + [ + -47.3832424642139, + -22.223530412941717 + ], + [ + -47.38329668605182, + -22.223527510733124 + ], + [ + -47.383343817045954, + -22.22352489474728 + ], + [ + -47.38337815980215, + -22.223523522762925 + ], + [ + -47.3834126253876, + -22.22352298184824 + ], + [ + -47.38344374495879, + -22.22352297128787 + ], + [ + -47.38346128467555, + -22.22352347944561 + ], + [ + -47.38348280824564, + -22.223525034275053 + ], + [ + -47.38350581545567, + -22.22352721624167 + ], + [ + -47.38352770035878, + -22.2235290096433 + ], + [ + -47.383531462259846, + -22.223529400931646 + ], + [ + -47.38353160220065, + -22.223529419315394 + ], + [ + -47.38354021291421, + -22.22353078992498 + ], + [ + -47.38355147396634, + -22.223532704724786 + ], + [ + -47.38356720642609, + -22.22353573079692 + ], + [ + -47.38359376583107, + -22.223540897547377 + ], + [ + -47.383620805401144, + -22.22354611541629 + ], + [ + -47.383643201188775, + -22.223550456891164 + ], + [ + -47.38366366188976, + -22.2235546157543 + ], + [ + -47.38367421949362, + -22.22355682584142 + ], + [ + -47.38368727683325, + -22.223559956513775 + ], + [ + -47.38369785120044, + -22.2235625008584 + ], + [ + -47.3837193543325, + -22.223568408988804 + ], + [ + -47.38374915471008, + -22.22357597219695 + ], + [ + -47.38376161558087, + -22.22357930067114 + ], + [ + -47.38379251841208, + -22.223588214936942 + ], + [ + -47.38381611522106, + -22.223594347775048 + ], + [ + -47.383821506663935, + -22.223595952138727 + ], + [ + -47.38384444755139, + -22.223603008977044 + ], + [ + -47.38387036970131, + -22.223610956857183 + ], + [ + -47.383885105189975, + -22.223615550313646 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "168", + "Name": "Curvas", + "Length": 80.27530873327673, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "168", + "type": "LineString", + "coordinates": [ + [ + -47.38312864470347, + -22.22352277375761 + ], + [ + -47.38318594403454, + -22.22351990695443 + ], + [ + -47.383241620406885, + -22.223516894372306 + ], + [ + -47.38329583594044, + -22.223513992498958 + ], + [ + -47.38334307250829, + -22.223511370653664 + ], + [ + -47.38337772542777, + -22.22350998627864 + ], + [ + -47.383412500166216, + -22.2235094405123 + ], + [ + -47.38344396853688, + -22.22350942983383 + ], + [ + -47.383462073796395, + -22.223509954376535 + ], + [ + -47.38348410787499, + -22.22351154608452 + ], + [ + -47.383507190015045, + -22.223513735157592 + ], + [ + -47.383529145504056, + -22.223515534343694 + ], + [ + -47.38353328599008, + -22.22351596501001 + ], + [ + -47.3835338441049, + -22.22351603832848 + ], + [ + -47.38354274490247, + -22.223517455112248 + ], + [ + -47.38355425203537, + -22.223519411755074 + ], + [ + -47.38357016496194, + -22.22352247253938 + ], + [ + -47.38359672895498, + -22.2235276401826 + ], + [ + -47.383623757058764, + -22.223532855839043 + ], + [ + -47.38364623457359, + -22.2235372131514 + ], + [ + -47.383666808135295, + -22.223541394954903 + ], + [ + -47.38367762898715, + -22.2235436601494 + ], + [ + -47.383690903821474, + -22.22354684296913 + ], + [ + -47.38370173007676, + -22.223549447916533 + ], + [ + -47.38372332546744, + -22.223555381395794 + ], + [ + -47.383753072745826, + -22.223562931127784 + ], + [ + -47.383765773516636, + -22.223566323682732 + ], + [ + -47.38379662651815, + -22.223575223574848 + ], + [ + -47.38382028573353, + -22.22358137263258 + ], + [ + -47.383826001936235, + -22.223583073637027 + ], + [ + -47.38384901012555, + -22.22359015117819 + ], + [ + -47.383874953066936, + -22.223598105426532 + ], + [ + -47.38389499002082, + -22.223604351495002 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "169", + "Name": "Curvas", + "Length": 70.61313580853698, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "169", + "type": "LineString", + "coordinates": [ + [ + -47.38319164623125, + -22.22356029109753 + ], + [ + -47.383244151828826, + -22.223557450080428 + ], + [ + -47.3832983863233, + -22.223554547198688 + ], + [ + -47.38334530612212, + -22.223551942934428 + ], + [ + -47.38337902855158, + -22.223550595731346 + ], + [ + -47.383412875830814, + -22.223550064520005 + ], + [ + -47.38344329780288, + -22.223550054195886 + ], + [ + -47.383459706433825, + -22.223550529583733 + ], + [ + -47.3834802089866, + -22.223552010656075 + ], + [ + -47.38350306633654, + -22.223554178409767 + ], + [ + -47.38352481006776, + -22.22355596024248 + ], + [ + -47.38352746373981, + -22.223556236260034 + ], + [ + -47.383535148936666, + -22.22355745955043 + ], + [ + -47.38354591782711, + -22.223559290664156 + ], + [ + -47.3835612893531, + -22.223562247311953 + ], + [ + -47.38358783958196, + -22.223567412276896 + ], + [ + -47.383614902084574, + -22.223572634570708 + ], + [ + -47.38363713464453, + -22.22357694441668 + ], + [ + -47.383657369397284, + -22.22358105735303 + ], + [ + -47.383667400505, + -22.223583157225356 + ], + [ + -47.38368002285507, + -22.223586183602944 + ], + [ + -47.383690093840464, + -22.22358860685041 + ], + [ + -47.383711412060784, + -22.22359446417467 + ], + [ + -47.383741318636716, + -22.2236020543351 + ], + [ + -47.38375329970735, + -22.223605254647783 + ], + [ + -47.38378430219803, + -22.22361419766093 + ], + [ + -47.38380777419412, + -22.22362029805977 + ], + [ + -47.38381251611718, + -22.22362170914192 + ], + [ + -47.38383532240091, + -22.223628724574507 + ], + [ + -47.38386120319598, + -22.22363665978935 + ], + [ + -47.38386533552366, + -22.22363794794948 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "170", + "Name": "Curvas", + "Length": 73.97276494359244, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "170", + "type": "LineString", + "coordinates": [ + [ + -47.3831693033684, + -22.22354793581167 + ], + [ + -47.38324330802123, + -22.223543931511095 + ], + [ + -47.383297536212076, + -22.223541028964558 + ], + [ + -47.383344561583904, + -22.223538418840874 + ], + [ + -47.383378594176754, + -22.22353705924712 + ], + [ + -47.383412750609125, + -22.223536523184126 + ], + [ + -47.383443521380805, + -22.223536512741877 + ], + [ + -47.38346049555471, + -22.22353700451468 + ], + [ + -47.38348150861618, + -22.223538522465557 + ], + [ + -47.38350444089618, + -22.223540697325706 + ], + [ + -47.38352625521331, + -22.223542484942886 + ], + [ + -47.38352949827186, + -22.223542822264584 + ], + [ + -47.38353768092562, + -22.223544124737714 + ], + [ + -47.38354869589693, + -22.223545997694487 + ], + [ + -47.38356424788982, + -22.223548989054454 + ], + [ + -47.38359080270674, + -22.22355415491216 + ], + [ + -47.383617853743075, + -22.22355937499351 + ], + [ + -47.38364016803469, + -22.223563700677868 + ], + [ + -47.38366051564375, + -22.22356783655369 + ], + [ + -47.38367080999957, + -22.22356999153341 + ], + [ + -47.38368364984444, + -22.22357307005839 + ], + [ + -47.383693972734534, + -22.223575553913175 + ], + [ + -47.383715383196964, + -22.223581436581767 + ], + [ + -47.38374523667371, + -22.22358901326604 + ], + [ + -47.38375745764444, + -22.223592277659503 + ], + [ + -47.383788410305385, + -22.22360120629896 + ], + [ + -47.38381194470794, + -22.223607322917434 + ], + [ + -47.383817011390924, + -22.223608830640377 + ], + [ + -47.38383988497651, + -22.223615866775805 + ], + [ + -47.383865786566844, + -22.223623808360024 + ], + [ + -47.38387522035759, + -22.22362674913179 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "171", + "Name": "Curvas", + "Length": 63.87662511218065, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "171", + "type": "LineString", + "coordinates": [ + [ + -47.38323648640181, + -22.223584993302733 + ], + [ + -47.383245839444925, + -22.223584487218982 + ], + [ + -47.38330008659596, + -22.223581583664092 + ], + [ + -47.383346795199394, + -22.223578991121403 + ], + [ + -47.3833798973019, + -22.223577668699686 + ], + [ + -47.38341312627468, + -22.2235771471917 + ], + [ + -47.38344285064732, + -22.223577137103828 + ], + [ + -47.38345812819201, + -22.223577579721812 + ], + [ + -47.38347760972707, + -22.22357898703707 + ], + [ + -47.38350031721688, + -22.223581140577863 + ], + [ + -47.383521919776186, + -22.22358291084161 + ], + [ + -47.383523394674846, + -22.22358306425087 + ], + [ + -47.38353008495768, + -22.2235841291758 + ], + [ + -47.38354036168625, + -22.223585876603483 + ], + [ + -47.383555372278394, + -22.223588763826918 + ], + [ + -47.383581913331106, + -22.223593927006316 + ], + [ + -47.38360899876629, + -22.223599153725008 + ], + [ + -47.383631068098445, + -22.223603431942088 + ], + [ + -47.383651076902936, + -22.223607498951647 + ], + [ + -47.3836605815143, + -22.223609488609167 + ], + [ + -47.3836727688747, + -22.223612410691942 + ], + [ + -47.383682336477186, + -22.223614712841954 + ], + [ + -47.383703469786546, + -22.22362051936034 + ], + [ + -47.38373348256091, + -22.223628136473096 + ], + [ + -47.383744983831214, + -22.223631208624173 + ], + [ + -47.383776085981374, + -22.223640180384702 + ], + [ + -47.383799433164555, + -22.223646248344277 + ], + [ + -47.383803525567636, + -22.223647466144858 + ], + [ + -47.38382619724753, + -22.223654440171703 + ], + [ + -47.38384554283373, + -22.223660371660536 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "172", + "Name": "Curvas", + "Length": 67.24800038991036, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "172", + "type": "LineString", + "coordinates": [ + [ + -47.383214040170074, + -22.22357264361655 + ], + [ + -47.38324499563672, + -22.22357096864973 + ], + [ + -47.38329923648489, + -22.223568065429994 + ], + [ + -47.38334605066062, + -22.223565467027917 + ], + [ + -47.38337946292665, + -22.22356413221552 + ], + [ + -47.38341300105268, + -22.22356360585587 + ], + [ + -47.38344307422507, + -22.223563595649853 + ], + [ + -47.383458917312936, + -22.223564054652787 + ], + [ + -47.383478909356896, + -22.223565498846575 + ], + [ + -47.383501691776786, + -22.223567659493817 + ], + [ + -47.38352336492202, + -22.223569435542032 + ], + [ + -47.38352542920743, + -22.223569650255445 + ], + [ + -47.38353261694736, + -22.22357079436314 + ], + [ + -47.38354313975688, + -22.223572583633846 + ], + [ + -47.38355833081598, + -22.223575505569467 + ], + [ + -47.38358487645675, + -22.223580669641624 + ], + [ + -47.38361195042565, + -22.223585894147856 + ], + [ + -47.38363410149402, + -22.223590188204266 + ], + [ + -47.38365422315035, + -22.223594278152362 + ], + [ + -47.383663991009904, + -22.22359632291729 + ], + [ + -47.38367639586518, + -22.22359929714746 + ], + [ + -47.38368621539074, + -22.22360165990983 + ], + [ + -47.38370744092398, + -22.223607491767538 + ], + [ + -47.38373740059913, + -22.223615095404128 + ], + [ + -47.38374914176961, + -22.22361823163601 + ], + [ + -47.38378019409003, + -22.223627189022846 + ], + [ + -47.38380360367967, + -22.22363327320206 + ], + [ + -47.383808020842785, + -22.223634587643435 + ], + [ + -47.383830759824576, + -22.22364158237314 + ], + [ + -47.38385544652734, + -22.22364915148063 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "173", + "Name": "Curvas", + "Length": 56.771571522056014, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "173", + "type": "LineString", + "coordinates": [ + [ + -47.38328489398174, + -22.223609524314757 + ], + [ + -47.38330178686979, + -22.223608620129333 + ], + [ + -47.38334828427774, + -22.223606039308226 + ], + [ + -47.383380766053044, + -22.223604741667938 + ], + [ + -47.383413376719176, + -22.223604229863312 + ], + [ + -47.38344240349212, + -22.22360422001171 + ], + [ + -47.38345654995012, + -22.223604629859818 + ], + [ + -47.38347501046706, + -22.223605963418052 + ], + [ + -47.383497568096686, + -22.223608102745906 + ], + [ + -47.38351902948397, + -22.223609861440703 + ], + [ + -47.38351932560882, + -22.223609892241655 + ], + [ + -47.38352502097729, + -22.22361079880111 + ], + [ + -47.383534805543796, + -22.223612462542693 + ], + [ + -47.38354945520193, + -22.223615280341754 + ], + [ + -47.38357598707851, + -22.22362044173563 + ], + [ + -47.38360309544625, + -22.223625672879216 + ], + [ + -47.38362500155054, + -22.223629919467403 + ], + [ + -47.38364478440672, + -22.22363394055013 + ], + [ + -47.38365376252153, + -22.223635819992847 + ], + [ + -47.38366551489204, + -22.223638637780766 + ], + [ + -47.383674579110505, + -22.223640818833037 + ], + [ + -47.38369552750983, + -22.223646574545803 + ], + [ + -47.38372564648265, + -22.223654218610868 + ], + [ + -47.38373666795249, + -22.22365716260033 + ], + [ + -47.38376786976214, + -22.22366616310826 + ], + [ + -47.38379109213235, + -22.223672198628527 + ], + [ + -47.383794535015184, + -22.223673223147486 + ], + [ + -47.38381707209125, + -22.2236801557686 + ], + [ + -47.38382573544359, + -22.22368281201697 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "174", + "Name": "Curvas", + "Length": 60.38064560574417, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "174", + "type": "LineString", + "coordinates": [ + [ + -47.3832601415825, + -22.223597285438284 + ], + [ + -47.38330093675887, + -22.22359510189528 + ], + [ + -47.383347539738416, + -22.223592515214815 + ], + [ + -47.383380331677365, + -22.223591205183826 + ], + [ + -47.38341325149686, + -22.223590688527505 + ], + [ + -47.38344262706968, + -22.223590678557773 + ], + [ + -47.38345733907108, + -22.223591104790813 + ], + [ + -47.38347631009713, + -22.22359247522757 + ], + [ + -47.38349894265686, + -22.223594621661878 + ], + [ + -47.383520474630195, + -22.22359638614116 + ], + [ + -47.383521360142, + -22.223596478246286 + ], + [ + -47.383527552967664, + -22.223597463988458 + ], + [ + -47.38353758361524, + -22.223599169573106 + ], + [ + -47.38355241374038, + -22.223602022084354 + ], + [ + -47.38357895020503, + -22.223607184370994 + ], + [ + -47.383606047106476, + -22.223612413302117 + ], + [ + -47.38362803495158, + -22.223616675730543 + ], + [ + -47.38364793065508, + -22.2236207197509 + ], + [ + -47.38365717201819, + -22.22362265430104 + ], + [ + -47.38366914188364, + -22.223625524236365 + ], + [ + -47.38367845804553, + -22.22362776590658 + ], + [ + -47.383699498648504, + -22.223633546953103 + ], + [ + -47.38372956452209, + -22.223641177542 + ], + [ + -47.383740825892204, + -22.22364418561228 + ], + [ + -47.38377197787209, + -22.22365317174652 + ], + [ + -47.383795262648796, + -22.22365922348643 + ], + [ + -47.38379903029178, + -22.223660344646206 + ], + [ + -47.38382163466975, + -22.223667297970184 + ], + [ + -47.38383563913742, + -22.22367159184127 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "175", + "Name": "Curvas", + "Length": 49.41064851769762, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "175", + "type": "LineString", + "coordinates": [ + [ + -47.38333577965009, + -22.223633864211962 + ], + [ + -47.3833497733572, + -22.22363308749491 + ], + [ + -47.38338163480506, + -22.223631814636047 + ], + [ + -47.383413627164295, + -22.223631312534813 + ], + [ + -47.383441956337286, + -22.223631302919543 + ], + [ + -47.38345497170816, + -22.22363167999783 + ], + [ + -47.38347241120662, + -22.223632939798964 + ], + [ + -47.383494818975954, + -22.223635064913918 + ], + [ + -47.383515508743415, + -22.22363676037657 + ], + [ + -47.38351995699547, + -22.223637468426354 + ], + [ + -47.383529249399736, + -22.22363904848181 + ], + [ + -47.38354353812372, + -22.223641796856487 + ], + [ + -47.38357006082418, + -22.223646956464865 + ], + [ + -47.38359719212445, + -22.22365219203336 + ], + [ + -47.38361893500079, + -22.223656406992582 + ], + [ + -47.3836384919086, + -22.22366038214854 + ], + [ + -47.38364694352669, + -22.223662151376377 + ], + [ + -47.38365826090717, + -22.22366486486943 + ], + [ + -47.38366682174021, + -22.223666924823593 + ], + [ + -47.383687585230646, + -22.223672629731052 + ], + [ + -47.38371781040197, + -22.223680300748452 + ], + [ + -47.38372835207113, + -22.223683116576268 + ], + [ + -47.38375965354031, + -22.22369214583159 + ], + [ + -47.383782751097534, + -22.223698148912565 + ], + [ + -47.3837855444599, + -22.223698980149823 + ], + [ + -47.38380592945955, + -22.22370525077144 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "176", + "Name": "Curvas", + "Length": 53.15738402771898, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "176", + "type": "LineString", + "coordinates": [ + [ + -47.38330969489009, + -22.223621746617564 + ], + [ + -47.38334902881734, + -22.223619563401574 + ], + [ + -47.38338120042894, + -22.223618278151992 + ], + [ + -47.38341350194167, + -22.22361777119906 + ], + [ + -47.38344217991466, + -22.223617761465636 + ], + [ + -47.38345576082915, + -22.223618154928843 + ], + [ + -47.38347371083692, + -22.223619451608503 + ], + [ + -47.383496193536395, + -22.223621583829907 + ], + [ + -47.38351737486999, + -22.22362331957503 + ], + [ + -47.38352248898654, + -22.223624133613736 + ], + [ + -47.383532027471965, + -22.223625755512266 + ], + [ + -47.38354649666304, + -22.22362853859914 + ], + [ + -47.38357302395158, + -22.22363369910027 + ], + [ + -47.383600143785564, + -22.223638932456307 + ], + [ + -47.38362196840738, + -22.223643163256714 + ], + [ + -47.38364163815788, + -22.223647161349355 + ], + [ + -47.383650353024365, + -22.223648985684616 + ], + [ + -47.3836618878999, + -22.22365175132512 + ], + [ + -47.383670700699064, + -22.223653871903466 + ], + [ + -47.383691556370565, + -22.22365960213845 + ], + [ + -47.38372172844263, + -22.223667259679697 + ], + [ + -47.383732510012145, + -22.22367013958832 + ], + [ + -47.38376376165155, + -22.22367915446996 + ], + [ + -47.38378692161527, + -22.223685173770566 + ], + [ + -47.38379003973789, + -22.223686101648685 + ], + [ + -47.38381250951199, + -22.22369301356691 + ], + [ + -47.38381583174944, + -22.223694032190778 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "177", + "Name": "Curvas", + "Length": 41.655454958800085, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "177", + "type": "LineString", + "coordinates": [ + [ + -47.38339053004941, + -22.22365876163344 + ], + [ + -47.38341387761002, + -22.223658395206247 + ], + [ + -47.383441509182795, + -22.22365838582727 + ], + [ + -47.383453393466105, + -22.223658730135753 + ], + [ + -47.383469811945645, + -22.223659916179866 + ], + [ + -47.383492069854704, + -22.22366202708188 + ], + [ + -47.383511776489584, + -22.223663641979602 + ], + [ + -47.38351489301223, + -22.223664138051507 + ], + [ + -47.38352369325405, + -22.223665634420865 + ], + [ + -47.383537621043764, + -22.223668313371153 + ], + [ + -47.383564134568076, + -22.223673471193987 + ], + [ + -47.38359128880094, + -22.223678711187375 + ], + [ + -47.38361286844922, + -22.223682894517655 + ], + [ + -47.383632199408616, + -22.223686823746785 + ], + [ + -47.38364012452977, + -22.223688482759766 + ], + [ + -47.383651006920076, + -22.223691091957935 + ], + [ + -47.383659064366135, + -22.223693030813585 + ], + [ + -47.383679642948934, + -22.2236986849161 + ], + [ + -47.38370997431882, + -22.22370638288582 + ], + [ + -47.38372003618713, + -22.223709070551955 + ], + [ + -47.3837514373159, + -22.223718128554697 + ], + [ + -47.38377441006009, + -22.22372409919635 + ], + [ + -47.383776553901725, + -22.22372473715188 + ], + [ + -47.383786129495526, + -22.223727682696754 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "178", + "Name": "Curvas", + "Length": 45.62901273997455, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "178", + "type": "LineString", + "coordinates": [ + [ + -47.38336221425986, + -22.22364614432133 + ], + [ + -47.3833820691814, + -22.223645351120066 + ], + [ + -47.38341375238707, + -22.223644853870532 + ], + [ + -47.38344173276, + -22.223644844373403 + ], + [ + -47.38345418258715, + -22.223645205066795 + ], + [ + -47.383471111576185, + -22.223646427989422 + ], + [ + -47.38349344441541, + -22.22364854599789 + ], + [ + -47.38351364261663, + -22.223650201178078 + ], + [ + -47.38351742500403, + -22.22365080323895 + ], + [ + -47.383526471327094, + -22.223652341451363 + ], + [ + -47.38354057958397, + -22.22365505511385 + ], + [ + -47.38356709769634, + -22.223660213829444 + ], + [ + -47.38359424046292, + -22.223665451610373 + ], + [ + -47.38361590186141, + -22.223669650782796 + ], + [ + -47.383635345658845, + -22.223673602947677 + ], + [ + -47.38364353402849, + -22.223675317068082 + ], + [ + -47.3836546339139, + -22.223677978413694 + ], + [ + -47.383662943351595, + -22.22367997790053 + ], + [ + -47.383683614090096, + -22.223685657323603 + ], + [ + -47.3837138923607, + -22.223693341817153 + ], + [ + -47.38372419412946, + -22.223696093564122 + ], + [ + -47.383755545428436, + -22.223705137193175 + ], + [ + -47.383778580579126, + -22.223711124054464 + ], + [ + -47.38378104918115, + -22.223711858650866 + ], + [ + -47.38379602947831, + -22.223716466734334 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "179", + "Name": "Curvas", + "Length": 31.55362112900919, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "179", + "type": "LineString", + "coordinates": [ + [ + -47.38345210967049, + -22.223685801544008 + ], + [ + -47.38346721268422, + -22.223686892560732 + ], + [ + -47.383489320732906, + -22.223688989249833 + ], + [ + -47.383508044234794, + -22.223690523582583 + ], + [ + -47.38350982902755, + -22.223690807676615 + ], + [ + -47.38351813710678, + -22.223692220359847 + ], + [ + -47.38353170396209, + -22.22369482988569 + ], + [ + -47.38355820831023, + -22.223699985923 + ], + [ + -47.38358538547571, + -22.22370523034127 + ], + [ + -47.3836068018958, + -22.22370938204261 + ], + [ + -47.38362590690674, + -22.22371326534491 + ], + [ + -47.38363330553073, + -22.223714814143005 + ], + [ + -47.38364375293071, + -22.223717319046283 + ], + [ + -47.38365130698794, + -22.223719136802938 + ], + [ + -47.38367170066476, + -22.223724740100952 + ], + [ + -47.38370213823323, + -22.22373246502301 + ], + [ + -47.383711720300504, + -22.22373502452743 + ], + [ + -47.38374322108892, + -22.223744111277586 + ], + [ + -47.38375090994349, + -22.22374610961974 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "180", + "Name": "Curvas", + "Length": 37.53500611927422, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "180", + "type": "LineString", + "coordinates": [ + [ + -47.383420289197545, + -22.223671934408483 + ], + [ + -47.383441285605684, + -22.223671927281107 + ], + [ + -47.38345260434505, + -22.22367225520473 + ], + [ + -47.383468512315, + -22.223673404370306 + ], + [ + -47.38349069529387, + -22.223675508165865 + ], + [ + -47.38350991036232, + -22.22367708278108 + ], + [ + -47.3835123610201, + -22.22367747286407 + ], + [ + -47.383520915180625, + -22.22367892739037 + ], + [ + -47.38353466250315, + -22.22368157162843 + ], + [ + -47.383561171439375, + -22.22368672855851 + ], + [ + -47.38358833713855, + -22.22369197076432 + ], + [ + -47.38360983531368, + -22.22369613830879 + ], + [ + -47.383629053157925, + -22.223700044545854 + ], + [ + -47.38363671503051, + -22.2237016484514 + ], + [ + -47.38364737992568, + -22.22370420550213 + ], + [ + -47.38365518600333, + -22.223706083897866 + ], + [ + -47.38367567180717, + -22.223711712508557 + ], + [ + -47.38370605627635, + -22.22371942395443 + ], + [ + -47.38371587824415, + -22.223722047539734 + ], + [ + -47.38374732920275, + -22.223731119916174 + ], + [ + -47.38377023954037, + -22.223737074338164 + ], + [ + -47.38377205862157, + -22.223737615652816 + ], + [ + -47.38377622951119, + -22.223738898658684 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "181", + "Name": "Curvas", + "Length": 22.707124932062598, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "181", + "type": "LineString", + "coordinates": [ + [ + -47.38349229276085, + -22.22370282652338 + ], + [ + -47.383506178107176, + -22.223703964384054 + ], + [ + -47.383507297034804, + -22.223704142489147 + ], + [ + -47.383515359032536, + -22.22370551332929 + ], + [ + -47.38352874542058, + -22.223708088142946 + ], + [ + -47.383555245180666, + -22.22371324328748 + ], + [ + -47.38358243381243, + -22.223718489918195 + ], + [ + -47.38360376876419, + -22.22372262583467 + ], + [ + -47.38362276065509, + -22.22372648614397 + ], + [ + -47.38362989603048, + -22.223727979834592 + ], + [ + -47.38364012593524, + -22.22373043259041 + ], + [ + -47.383647428654676, + -22.22373218989554 + ], + [ + -47.38366772952175, + -22.22373776769329 + ], + [ + -47.3836982201895, + -22.223745506091525 + ], + [ + -47.38370719316844, + -22.22374790289985 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "182", + "Name": "Curvas", + "Length": 190.03713505833753, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "182", + "type": "LineString", + "coordinates": [ + [ + -47.38270882542799, + -22.22267345451081 + ], + [ + -47.38280007565945, + -22.22267490923695 + ], + [ + -47.38287389488893, + -22.222676794264583 + ], + [ + -47.38292458039544, + -22.222677164314636 + ], + [ + -47.38297702970207, + -22.222675957946578 + ], + [ + -47.3830301889806, + -22.2226734623185 + ], + [ + -47.38308216281126, + -22.222670761528214 + ], + [ + -47.38313478131096, + -22.22266812894445 + ], + [ + -47.38318846115631, + -22.222665224420183 + ], + [ + -47.3832422779872, + -22.222662343751935 + ], + [ + -47.38329616718892, + -22.22265935268226 + ], + [ + -47.38335036027583, + -22.222657187710723 + ], + [ + -47.38340461153455, + -22.222656336303007 + ], + [ + -47.38345805413695, + -22.22265631819523 + ], + [ + -47.38351178836907, + -22.222657875002593 + ], + [ + -47.38356598428465, + -22.222661790063242 + ], + [ + -47.38359378698677, + -22.22266442684338 + ], + [ + -47.38362018936091, + -22.222666590451134 + ], + [ + -47.383648180570624, + -22.22266950192886 + ], + [ + -47.38367508348616, + -22.22267303612828 + ], + [ + -47.38370225944609, + -22.22267736187469 + ], + [ + -47.38372926957387, + -22.22268195461998 + ], + [ + -47.38375655184153, + -22.222687202264005 + ], + [ + -47.383783404880866, + -22.222692426150964 + ], + [ + -47.383809710613946, + -22.222697502423866 + ], + [ + -47.383837329641395, + -22.222702856016806 + ], + [ + -47.383865020654476, + -22.222708484535097 + ], + [ + -47.38389242603204, + -22.222714221481603 + ], + [ + -47.38391940295261, + -22.222720689574786 + ], + [ + -47.383946085277415, + -22.222727108967973 + ], + [ + -47.383973505714586, + -22.222734642932647 + ], + [ + -47.383999907763894, + -22.222741343670684 + ], + [ + -47.38402772214859, + -22.222748773297244 + ], + [ + -47.3840554358965, + -22.222756767650726 + ], + [ + -47.38408302669365, + -22.222763938540982 + ], + [ + -47.38410920264887, + -22.222771727887658 + ], + [ + -47.38413645083169, + -22.22278010970301 + ], + [ + -47.384163696326894, + -22.222788462870195 + ], + [ + -47.384189475222875, + -22.222796498869553 + ], + [ + -47.38421682762095, + -22.222804562115627 + ], + [ + -47.38424250094676, + -22.222812213496464 + ], + [ + -47.3842692024112, + -22.222821166384353 + ], + [ + -47.38429692223516, + -22.222829854144546 + ], + [ + -47.38432188986839, + -22.22283708974972 + ], + [ + -47.38434969371895, + -22.222846006571572 + ], + [ + -47.38437484523948, + -22.22285312140816 + ], + [ + -47.38440058137734, + -22.22286123910232 + ], + [ + -47.38442557096449, + -22.22286869136006 + ], + [ + -47.38445033288774, + -22.22287740623056 + ], + [ + -47.384472949967595, + -22.222884189037362 + ], + [ + -47.3844927059271, + -22.222891112265145 + ], + [ + -47.38450839208783, + -22.222896545150466 + ], + [ + -47.3845175827474, + -22.222898993209157 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "Id": "183", + "Name": "Curvas", + "Length": 190.32475353631446, + "Dist1": 0.0, + "Dist2": 0.0 + }, + "geometry": { + "id": "183", + "type": "LineString", + "coordinates": [ + [ + -47.38271639462843, + -22.22266003181257 + ], + [ + -47.38280039953148, + -22.22266137103129 + ], + [ + -47.382874151302, + -22.22266325433699 + ], + [ + -47.38292445779558, + -22.22266362162034 + ], + [ + -47.38297648382228, + -22.22266242498843 + ], + [ + -47.38302941754375, + -22.222659939949832 + ], + [ + -47.38308136737978, + -22.222657240406836 + ], + [ + -47.38313396921344, + -22.222654608657347 + ], + [ + -47.38318761736808, + -22.222651705848268 + ], + [ + -47.38324142787058, + -22.222648825516583 + ], + [ + -47.38329542266884, + -22.222645828586312 + ], + [ + -47.38334992591524, + -22.222643651224576 + ], + [ + -47.383404486323194, + -22.22264279496561 + ], + [ + -47.38345827772078, + -22.2226427767401 + ], + [ + -47.383512577488645, + -22.222644349932818 + ], + [ + -47.383567283906416, + -22.22264830187214 + ], + [ + -47.38359516153763, + -22.222650945758737 + ], + [ + -47.383621634496805, + -22.222653115150962 + ], + [ + -47.3836500042871, + -22.22265606600661 + ], + [ + -47.383677325371515, + -22.222659655140554 + ], + [ + -47.38370479141162, + -22.22266402706086 + ], + [ + -47.38373204761718, + -22.22266866164891 + ], + [ + -47.38375951034949, + -22.222673944004892 + ], + [ + -47.38378636797683, + -22.22267916878461 + ], + [ + -47.383812662243784, + -22.222684242845062 + ], + [ + -47.38384036288297, + -22.22268961225212 + ], + [ + -47.38386816686989, + -22.222695263733875 + ], + [ + -47.383895835492325, + -22.222701055787358 + ], + [ + -47.383923029905056, + -22.22270757602755 + ], + [ + -47.38394996391362, + -22.22271405596769 + ], + [ + -47.38397747680972, + -22.22272161533635 + ], + [ + -47.38400382576046, + -22.22272830259834 + ], + [ + -47.38403188004241, + -22.22273579630515 + ], + [ + -47.384059543961186, + -22.222743776285064 + ], + [ + -47.384087197164035, + -22.22275096339479 + ], + [ + -47.38411369787541, + -22.222758849381442 + ], + [ + -47.38414101335933, + -22.222767251899477 + ], + [ + -47.38416827953078, + -22.222775611398962 + ], + [ + -47.384193979301486, + -22.222783622732944 + ], + [ + -47.384221239570074, + -22.22279165882021 + ], + [ + -47.384247183244284, + -22.222799390772707 + ], + [ + -47.384273986779846, + -22.222808377884803 + ], + [ + -47.38430140395588, + -22.222816970791307 + ], + [ + -47.38432642032267, + -22.22282422051956 + ], + [ + -47.38435417747211, + -22.22283312236435 + ], + [ + -47.38437929361829, + -22.222840227194418 + ], + [ + -47.38440513314708, + -22.22284837750033 + ], + [ + -47.384430363559915, + -22.22285590157591 + ], + [ + -47.38445513663669, + -22.222864620372064 + ], + [ + -47.384477743890095, + -22.22287140023202 + ], + [ + -47.38449780293064, + -22.22287842967088 + ], + [ + -47.384512934436614, + -22.22288367045222 + ], + [ + -47.384527648163136, + -22.22288758965557 + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/Python/OAK/datasets/oak-fcc-3/_10_export_onnx.py b/Python/OAK/datasets/oak-fcc-3/_10_export_onnx.py index f0de57b22..c6c419b6a 100644 --- a/Python/OAK/datasets/oak-fcc-3/_10_export_onnx.py +++ b/Python/OAK/datasets/oak-fcc-3/_10_export_onnx.py @@ -8,8 +8,10 @@ Exporta o checkpoint PyTorch do SegFormer Multi-Head OAK-FCC-3 para ONNX. Exemplo: -python .\_10_export_onnx.py --config config.json --checkpoint backup/segformer_b1/2026_08_17/stacked_raw5_ndvi_ndre/best_score.pt --out backup/segformer_b1/2026_08_17/stacked_raw5_ndvi_ndre/best_score.onnx --include-norm --postprocess argmax_fullres -python .\_10_export_onnx.py --config .\config.json --train-script .\_8_train_multihead_v2.py --opset 17 --device cuda --include-norm --postprocess argmax_fullres +python .\_10_export_onnx.py --config .\config.json --train-script .\_8_train_multihead_v2.py --checkpoint .\backup\segformer_b1\2026_09_18\stacked_raw5\best_score.pt --out .\backup\segformer_b1\2026_09_18\stacked_raw5\best_score_audit.onnx --opset 17 --device cuda --include-norm --norm-stats .\backup\segformer_b1\2026_09_18\stacked_raw5\norm_stats.json --postprocess none + +python .\_10_export_onnx.py --config .\config.json --train-script .\_8_train_multihead_v2.py --checkpoint .\backup\segformer_b1\2026_09_18\stacked_raw5\best_operational.pt --out .\backup\segformer_b1\2026_09_18\stacked_raw5\best_operation.onnx --opset 17 --device cuda --include-norm --norm-stats .\backup\segformer_b1\2026_09_18\stacked_raw5\norm_stats.json --postprocess argmax_fullres + """ from __future__ import annotations diff --git a/Python/OAK/datasets/oak-fcc-3/_1_weeds_pair_sorter.py b/Python/OAK/datasets/oak-fcc-3/_1_weeds_pair_sorter.py index c94cd3f0f..4b376d14a 100644 --- a/Python/OAK/datasets/oak-fcc-3/_1_weeds_pair_sorter.py +++ b/Python/OAK/datasets/oak-fcc-3/_1_weeds_pair_sorter.py @@ -5,8 +5,9 @@ weed_pair_sorter.py ------------------------------------------------- Classificador manual para amostras multiespectrais do Agrobotics/OAK-FFC-3. -Agora, além do preview RGB salvo em .png, ele pode mostrar também os previews -reconstruídos diretamente dos .bin das 3 câmeras: +O PNG de entrada agora é opcional. A ferramenta reconstrói o preview RGB canônico +sob demanda a partir dos .bin + meta + module_params usando RawProcessorPreview, +e também pode mostrar os 3 sensores nativos: CAM_A = RGB CAM_B = RE @@ -14,8 +15,10 @@ reconstruídos diretamente dos .bin das 3 câmeras: Fluxo: - Entrada: uma ou mais pastas-raiz contendo amostras em subpastas. -- O script mostra o preview salvo (.png). -- Se a opção estiver marcada, reconstrói CAM_A/CAM_B/CAM_C direto dos .bin. +- O script aceita meta + tripleta CAM_A/B/C mesmo sem PNG. +- Reconstrói CAM_A com RawProcessorPreview e aplica camera_orientation canônica. +- Ao classificar, salva o PNG derivado em previews/ e registra o contrato no meta. +- Opcionalmente mostra CAM_A/CAM_B/CAM_C nativos direto dos .bin. - Você usa teclas 1..9/0 para enviar o conjunto da amostra para uma label. Estrutura de saída: @@ -42,6 +45,7 @@ import argparse import csv import json import math +import hashlib import re import shutil import sys @@ -89,12 +93,40 @@ OLD_CAM_TO_CAMERA = { 2: "CAM_C", } CAM_ORDER = {"CAM_A": 0, "CAM_B": 1, "CAM_C": 2} +REQUIRED_CAMERAS = ("CAM_A", "CAM_B", "CAM_C") +GENERATED_PREVIEW_VERSION = "weed_pair_sorter_canonical_preview_v4_2026_09_14_bayer_explicit" +ANNOTATION_PREVIEW_CONFIG = { + "schema": "rgb_raw_annotation_preview_v2", + "version": GENERATED_PREVIEW_VERSION, + "purpose": "human_annotation_only", + "implementation": "core.raw_processor_preview.RawProcessorPreview", + "levels": { + "mode": "robust_percentile", + "black_percentile": 0.20, + "white_percentile": 99.80, + }, + "gamma": 2.2, + "demosaic": { + "algorithm": "opencv_edge_aware", + "output_color_order": "BGR", + }, + "white_balance": { + "method": "neutral_bright_with_gray_world_fallback", + "strength": 0.65, + "gain_range": [0.60, 1.70], + }, + "clahe": {"clip_limit": 1.55, "tile_grid_size": 8}, + "saturation_factor": 1.04, + "contrast": {"alpha": 1.04, "beta": 0.0}, + "sharpen": {"sigma": 0.85, "amount": 0.55, "threshold": 2.0}, + "output_format": "PNG_BGR_U8", +} @dataclass class SampleBundle: sample_dir: Path - preview_path: Path + preview_path: Optional[Path] meta_path: Path bin_paths: List[Path] sample_id: str @@ -203,23 +235,44 @@ def build_bin_map_from_meta(meta_path: Path, available_bins: List[Path]) -> Dict # Busca de amostras # ============================================================ +def _bundle_is_complete(bin_by_camera: Dict[str, Path]) -> bool: + return all(cam in bin_by_camera and Path(bin_by_camera[cam]).is_file() for cam in REQUIRED_CAMERAS) + + +def _find_saved_preview_near(meta_path: Path, base: str, search_dirs: List[Path]) -> Optional[Path]: + meta = safe_load_json(meta_path) + saved = meta.get("saved_preview_path") + if saved: + saved_name = Path(str(saved)).name + for d in search_dirs: + p = d / saved_name + if p.is_file(): + return p + for d in search_dirs: + for ext in PREVIEW_EXTS: + p = d / f"{base}{ext}" + if p.is_file(): + return p + return None + + def find_sample_bundles_in_folder(folder: Path) -> List[SampleBundle]: """ - Procura amostras em formatos antigos e atuais. + Procura amostras RAW multiespectrais em formatos antigos e atuais. - Suporta: - - .png + .json + _cam0.bin / _cam1.bin / _cam2.bin - - preview.png + meta.json + CAM_A.bin / CAM_B.bin / CAM_C.bin - - .png + .json + _CAM_A.bin / _CAM_B.bin / _CAM_C.bin - - .png + .json + _rgb.bin / _re.bin / _nir.bin - - layout dataset: root/previews, root/metas, root/bins + O preview salvo deixou de ser obrigatório. O contrato mínimo atual é: + - .json + - _CAM_A.bin + - _CAM_B.bin + - _CAM_C.bin + + Se existir PNG/JPG legado ele é preservado como fallback. O preview principal + canônico é reconstruído sob demanda pelo sorter a partir da CAM_A RAW. """ if not folder.is_dir(): return [] bundles: List[SampleBundle] = [] - - # Caso dataset já organizado em previews/metas/bins dataset_bundles = find_dataset_layout_bundles(folder) if dataset_bundles: bundles.extend(dataset_bundles) @@ -230,218 +283,183 @@ def find_sample_bundles_in_folder(folder: Path) -> List[SampleBundle]: old_cam_re = re.compile(r"^(?P.+)_cam(?P\d+)\.bin$", re.IGNORECASE) oak_cam_re = re.compile(r"^(?:(?P.+)_)?(?PCAM_[ABC])\.bin$", re.IGNORECASE) role_re = re.compile(r"^(?P.+)_(?Prgb|re|nir)\.bin$", re.IGNORECASE) - - role_order = { - "CAM_A": 0, - "CAM_B": 1, - "CAM_C": 2, - "RGB": 0, - "RE": 1, - "NIR": 2, - } - - generic_preview_names = {"preview.png", "preview.jpg", "preview.jpeg"} + role_order = {"CAM_A": 0, "CAM_B": 1, "CAM_C": 2, "RGB": 0, "RE": 1, "NIR": 2} generic_meta_names = {"meta.json", "metadata.json"} + generic_preview_names = {"preview.png", "preview.jpg", "preview.jpeg"} for d in candidate_dirs: - if not d.is_dir(): + try: + files = [p for p in d.iterdir() if p.is_file()] + except Exception: continue - - files = [p for p in d.iterdir() if p.is_file()] if not files: continue - pngs: Dict[str, Path] = {} + previews: Dict[str, Path] = {} jsons: Dict[str, Path] = {} bins_by_base: Dict[str, List[Tuple[int, Path]]] = {} - - generic_preview = None generic_meta = None + generic_preview = None generic_bins: List[Tuple[int, Path]] = [] for p in files: name_lower = p.name.lower() suffix = p.suffix.lower() - if suffix in PREVIEW_EXTS: if name_lower in generic_preview_names: generic_preview = p else: - pngs[p.stem] = p + previews[p.stem] = p continue - if suffix == META_EXT: if name_lower in generic_meta_names: generic_meta = p else: jsons[p.stem] = p continue - if suffix != ".bin": continue m = old_cam_re.match(p.name) if m: base = m.group("base") - cam_idx = int(m.group("cam")) - bins_by_base.setdefault(base, []).append((cam_idx, p)) + bins_by_base.setdefault(base, []).append((int(m.group("cam")), p)) continue - m = oak_cam_re.match(p.name) if m: base = m.group("base") or d.name cam = m.group("cam").upper() - order = role_order.get(cam, 99) - bins_by_base.setdefault(base, []).append((order, p)) - generic_bins.append((order, p)) + item = (role_order.get(cam, 99), p) + bins_by_base.setdefault(base, []).append(item) + generic_bins.append(item) continue - m = role_re.match(p.name) if m: base = m.group("base") role = m.group("role").upper() - order = role_order.get(role, 99) - bins_by_base.setdefault(base, []).append((order, p)) - continue + bins_by_base.setdefault(base, []).append((role_order.get(role, 99), p)) - if generic_preview and generic_meta and generic_bins: - sorted_bins = [p for _, p in sorted(generic_bins, key=lambda x: x[0])] + # Layout unitário: meta.json + CAM_A/B/C.bin, preview opcional. + if generic_meta and generic_bins: + sorted_bins = [p for _, p in sorted(set(generic_bins), key=lambda x: x[0])] bin_by_camera = build_bin_map_from_meta(generic_meta, sorted_bins) - bundles.append( - SampleBundle( + if _bundle_is_complete(bin_by_camera): + bundles.append(SampleBundle( sample_dir=d, preview_path=generic_preview, meta_path=generic_meta, - bin_paths=sorted_bins, + bin_paths=[bin_by_camera[c] for c in REQUIRED_CAMERAS], sample_id=d.name, bin_by_camera=bin_by_camera, - ) - ) - continue + )) - valid_bases = sorted(set(pngs.keys()) & set(jsons.keys()) & set(bins_by_base.keys())) + # Layout por stem: JSON + tripleta BIN; PNG é opcional. + valid_bases = sorted(set(jsons.keys()) & set(bins_by_base.keys())) for base in valid_bases: sorted_bins = [p for _, p in sorted(bins_by_base[base], key=lambda x: x[0])] - if not sorted_bins: - continue bin_by_camera = build_bin_map_from_meta(jsons[base], sorted_bins) - bundles.append( - SampleBundle( - sample_dir=d, - preview_path=pngs[base], - meta_path=jsons[base], - bin_paths=sorted_bins, - sample_id=base, - bin_by_camera=bin_by_camera, - ) - ) + if not _bundle_is_complete(bin_by_camera): + continue + preview = previews.get(base) + if preview is None: + preview = _find_saved_preview_near(jsons[base], base, [d]) + bundles.append(SampleBundle( + sample_dir=d, + preview_path=preview, + meta_path=jsons[base], + bin_paths=[bin_by_camera[c] for c in REQUIRED_CAMERAS], + sample_id=base, + bin_by_camera=bin_by_camera, + )) - if generic_preview and generic_meta and bins_by_base and not generic_bins: - for base, bin_items in sorted(bins_by_base.items()): - sorted_bins = [p for _, p in sorted(bin_items, key=lambda x: x[0])] - if not sorted_bins: - continue - bin_by_camera = build_bin_map_from_meta(generic_meta, sorted_bins) - bundles.append( - SampleBundle( - sample_dir=d, - preview_path=generic_preview, - meta_path=generic_meta, - bin_paths=sorted_bins, - sample_id=base, - bin_by_camera=bin_by_camera, - ) - ) - - # Remove duplicados sem esmagar amostras com mesmo nome em pastas diferentes dedup: Dict[str, SampleBundle] = {} for b in bundles: key = str((b.meta_path.resolve(), tuple(p.resolve() for p in b.bin_paths))) dedup.setdefault(key, b) - out = list(dedup.values()) out.sort(key=lambda x: (str(x.sample_dir), x.sample_id)) return out - def find_dataset_layout_bundles(root: Path) -> List[SampleBundle]: """ - Detecta layout: + Detecta layout organizado: root/metas/*.json - root/previews/*.png root/bins/*.bin - Também aceita quando o usuário aponta para root/metas, root/previews ou root/bins. + root/previews/* (opcional) + + O preview não é mais requisito de descoberta. """ candidates = [] p = root.resolve() - candidates.append(p) - candidates.append(p.parent) - + candidates.extend([p, p.parent]) if p.name.lower() in ("metas", "metadata", "jsons", "previews", "bins", "masks"): candidates.insert(0, p.parent) + seen_candidates = set() for cand in candidates: + try: + key = str(cand.resolve()) + except Exception: + key = str(cand) + if key in seen_candidates: + continue + seen_candidates.add(key) + metas = cand / "metas" - previews = cand / "previews" bins = cand / "bins" - if not (metas.is_dir() and previews.is_dir() and bins.is_dir()): + previews = cand / "previews" + if not (metas.is_dir() and bins.is_dir()): continue bundles: List[SampleBundle] = [] for meta_path in sorted(metas.glob("*.json")): base = meta_path.stem - preview_path = None - for ext in PREVIEW_EXTS: - test = previews / f"{base}{ext}" - if test.exists(): - preview_path = test - break - if preview_path is None: - continue - meta = safe_load_json(meta_path) - bin_paths: List[Path] = [] saved_paths = meta.get("saved_payload_paths") or {} + bin_paths: List[Path] = [] + if isinstance(saved_paths, dict): - for cam in ("CAM_A", "CAM_B", "CAM_C"): + for cam in REQUIRED_CAMERAS: fname = saved_paths.get(cam) - if not fname: - continue - candidates_bin = [ - bins / Path(str(fname)).name, - meta_path.parent / str(fname), - cand / str(fname), + candidates_bin = [] + if fname: + candidates_bin.extend([ + bins / Path(str(fname)).name, + meta_path.parent / str(fname), + cand / str(fname), + ]) + candidates_bin.extend([ bins / f"{base}_{cam}.bin", - ] + bins / f"{base}_{cam.lower()}.bin", + ]) for c in candidates_bin: - if c.exists(): + if c.is_file(): bin_paths.append(c) break - else: - bin_paths.extend(sorted(bins.glob(f"{base}_*.bin"))) - if not bin_paths: bin_paths.extend(sorted(bins.glob(f"{base}*.bin"))) - if not bin_paths: continue bin_by_camera = build_bin_map_from_meta(meta_path, bin_paths) - bundles.append( - SampleBundle( - sample_dir=cand, - preview_path=preview_path, - meta_path=meta_path, - bin_paths=sorted(set(bin_paths), key=lambda x: x.name.lower()), - sample_id=base, - bin_by_camera=bin_by_camera, - ) - ) + if not _bundle_is_complete(bin_by_camera): + continue + + preview_path = None + search_dirs = [previews, meta_path.parent, cand] + preview_path = _find_saved_preview_near(meta_path, base, [d for d in search_dirs if d.is_dir()]) + + bundles.append(SampleBundle( + sample_dir=cand, + preview_path=preview_path, + meta_path=meta_path, + bin_paths=[bin_by_camera[c] for c in REQUIRED_CAMERAS], + sample_id=base, + bin_by_camera=bin_by_camera, + )) return bundles - return [] - def collect_all_bundles(folders: List[Path]) -> List[SampleBundle]: all_bundles: List[SampleBundle] = [] seen = set() @@ -456,6 +474,357 @@ def collect_all_bundles(folders: List[Path]) -> List[SampleBundle]: return all_bundles +# ============================================================ +# Preview canônico de anotação, reconstruído sob demanda +# ============================================================ + +def _sha1_text(value: str) -> str: + return hashlib.sha1(value.encode("utf-8", errors="ignore")).hexdigest() + + +def _import_raw_processor_preview(): + """Importa a implementação oficial, procurando também em pais do script.""" + try: + from core.raw_processor_preview import RawProcessorPreview + return RawProcessorPreview + except Exception as first_exc: + here = Path(__file__).resolve() + for parent in [here.parent, *here.parents]: + if (parent / "core" / "raw_processor_preview.py").is_file(): + if str(parent) not in sys.path: + sys.path.insert(0, str(parent)) + try: + from core.raw_processor_preview import RawProcessorPreview + return RawProcessorPreview + except Exception: + pass + raise RuntimeError( + "Não consegui importar core.raw_processor_preview.RawProcessorPreview. " + "Execute o sorter dentro do projeto oak-fcc-3 ou ajuste o PYTHONPATH. " + f"Erro original: {first_exc}" + ) from first_exc + + +def _candidate_path(value, meta_path: Path) -> List[Path]: + if not value: + return [] + raw = Path(str(value)).expanduser() + candidates = [raw] + if not raw.is_absolute(): + candidates.extend([ + meta_path.parent / raw, + Path.cwd() / raw, + ]) + for parent in meta_path.resolve().parents: + candidates.append(parent / raw) + candidates.append(parent / raw.name) + return candidates + + +def resolve_module_params_path(meta_path: Path, meta: dict, override: Optional[Path] = None) -> Path: + candidates: List[Path] = [] + if override: + candidates.append(Path(override).expanduser()) + + mp_contract = meta.get("module_params_contract") or {} + candidates.extend(_candidate_path(mp_contract.get("path"), meta_path)) + for key in ("module_calibration_json", "camera_params_json", "module_params_json"): + candidates.extend(_candidate_path(meta.get(key), meta_path)) + + stream_meta = meta.get("stream_meta") or {} + for key in ("module_calibration_json", "camera_params_json", "module_params_json"): + candidates.extend(_candidate_path(stream_meta.get(key), meta_path)) + + # Convenções locais úteis, sem adivinhar um modelmp arbitrário. + for parent in [meta_path.parent, *meta_path.resolve().parents[:5]]: + candidates.extend([ + parent / "module_params.json", + parent / "calibration" / "module_params.json", + ]) + + seen = set() + for p in candidates: + try: + rp = p.resolve() + except Exception: + rp = p + key = str(rp).lower() + if key in seen: + continue + seen.add(key) + if p.is_file(): + return p.resolve() + + declared = meta.get("module_calibration_json") or mp_contract.get("path") or meta.get("camera_params_json") + raise FileNotFoundError( + "module_params não encontrado para reconstruir o preview canônico. " + f"Declarado no meta={declared!r}. Use o campo 'Module params fallback/override' na tela inicial." + ) + + +def resolve_rgb_annotation_orientation(module_params: dict, expected_native_size: Tuple[int, int]) -> dict: + root = module_params.get("camera_orientation") + if not isinstance(root, dict): + raise RuntimeError("module_params sem camera_orientation.") + by_role = root.get("by_role") + if not isinstance(by_role, dict) or not isinstance(by_role.get("rgb"), dict): + raise RuntimeError("camera_orientation.by_role.rgb ausente no module_params.") + + cfg = by_role["rgb"] + rotate_deg = int(cfg.get("rotate_deg", 0)) % 360 + if rotate_deg not in (0, 90, 180, 270): + raise RuntimeError(f"camera_orientation RGB rotate_deg inválido: {rotate_deg}") + flip_h = cfg.get("flip_horizontal", False) + flip_v = cfg.get("flip_vertical", False) + if not isinstance(flip_h, bool) or not isinstance(flip_v, bool): + raise RuntimeError("camera_orientation RGB flips devem ser bool.") + enabled = root.get("enabled", False) + if not isinstance(enabled, bool): + raise RuntimeError("camera_orientation.enabled deve ser bool.") + if (rotate_deg != 0 or flip_h or flip_v) and not enabled: + raise RuntimeError("camera_orientation RGB declara transformação, mas enabled=false.") + + native_w, native_h = map(int, expected_native_size) + oriented_size = [native_h, native_w] if enabled and rotate_deg in (90, 270) else [native_w, native_h] + return { + "enabled": enabled, + "rotate_deg": rotate_deg if enabled else 0, + "flip_horizontal": flip_h if enabled else False, + "flip_vertical": flip_v if enabled else False, + "native_size": [native_w, native_h], + "oriented_size": oriented_size, + "input_space": str(root.get("input_space") or "native_stream_no_external_undistort"), + "output_space": str(root.get("output_space") or "canonical_oriented_stream_no_external_undistort"), + "apply_stage": str(root.get("apply_stage") or "after_native_flat_before_fusion"), + } + + +def apply_rgb_annotation_orientation_bgr(image_bgr: np.ndarray, orientation: dict) -> np.ndarray: + if cv2 is None: + raise RuntimeError("OpenCV é obrigatório para aplicar a orientação canônica.") + out = np.asarray(image_bgr) + rotate_deg = int(orientation.get("rotate_deg", 0)) % 360 + if rotate_deg == 90: + out = cv2.rotate(out, cv2.ROTATE_90_CLOCKWISE) + elif rotate_deg == 180: + out = cv2.rotate(out, cv2.ROTATE_180) + elif rotate_deg == 270: + out = cv2.rotate(out, cv2.ROTATE_90_COUNTERCLOCKWISE) + if bool(orientation.get("flip_horizontal", False)): + out = cv2.flip(out, 1) + if bool(orientation.get("flip_vertical", False)): + out = cv2.flip(out, 0) + return np.ascontiguousarray(out) + + +def _rgb_native_size(meta: dict) -> Tuple[int, int]: + by_role = meta.get("sensor_size_by_role") or {} + if isinstance(by_role.get("rgb"), (list, tuple)) and len(by_role["rgb"]) == 2: + return int(by_role["rgb"][0]), int(by_role["rgb"][1]) + cam_info = (((meta.get("stream_meta") or {}).get("camera_info") or {}).get("CAM_A") or {}) + w = int(cam_info.get("width") or meta.get("sensor_width") or 1280) + h = int(cam_info.get("height") or meta.get("sensor_height") or 800) + return w, h + + +def _preview_cache_path(bundle: SampleBundle, cache_root: Path, module_params_path: Path) -> Path: + cam_a = bundle.bin_by_camera["CAM_A"] + def stat_sig(p: Path) -> str: + try: + st = p.stat() + return f"{p.resolve()}|{st.st_size}|{st.st_mtime_ns}" + except Exception: + return str(p) + sig = "||".join([ + GENERATED_PREVIEW_VERSION, + stat_sig(bundle.meta_path), + stat_sig(cam_a), + stat_sig(module_params_path), + ]) + token = _sha1_text(sig)[:16] + return cache_root / f"{bundle.sample_id}__{token}.png" + + +def _explicit_bayer_bgr_code(pattern: str, edge_aware: bool = True) -> int: + """Retorna código OpenCV pelo nome COMPLETO do mosaico. + + Não usar os aliases curtos COLOR_BayerGB2BGR/GR2BGR/RG2BGR/BG2BGR: + no OpenCV eles são aliases históricos cujo nome não corresponde literalmente + ao mosaico completo e podem trocar R/B quando usados como mapeamento direto. + """ + if cv2 is None: + raise RuntimeError("OpenCV é obrigatório para demosaico Bayer.") + p = str(pattern or "").upper() + if p not in ("RGGB", "BGGR", "GRBG", "GBRG"): + raise RuntimeError(f"Bayer pattern inválido: {pattern!r}") + + suffix = "2BGR_EA" if edge_aware else "2BGR" + attr = f"COLOR_Bayer{p}{suffix}" + code = getattr(cv2, attr, None) + if code is not None: + return int(code) + + # Fallback para OpenCV antigo sem aliases de quatro letras. Os aliases + # históricos são cruzados; estes pares reproduzem os códigos explícitos. + fallback = { + "RGGB": "COLOR_BayerBG2BGR_EA" if edge_aware else "COLOR_BayerBG2BGR", + "BGGR": "COLOR_BayerRG2BGR_EA" if edge_aware else "COLOR_BayerRG2BGR", + "GRBG": "COLOR_BayerGB2BGR_EA" if edge_aware else "COLOR_BayerGB2BGR", + "GBRG": "COLOR_BayerGR2BGR_EA" if edge_aware else "COLOR_BayerGR2BGR", + }[p] + return int(getattr(cv2, fallback)) + + +def _authoritative_rgb_bayer(meta: dict, module_params: dict) -> Tuple[str, List[str]]: + """Module params é a autoridade científica; meta antigo serve só para auditoria.""" + mp_bayer = str(module_params.get("bayer_pattern") or "").upper().strip() + if mp_bayer not in ("RGGB", "BGGR", "GRBG", "GBRG"): + raise RuntimeError(f"module_params.bayer_pattern inválido/ausente: {mp_bayer!r}") + + stream_meta = meta.get("stream_meta") or {} + cam_info = ((stream_meta.get("camera_info") or {}).get("CAM_A") or {}) + declared = [] + for source, value in ( + ("meta.bayer_pattern", meta.get("bayer_pattern")), + ("stream_meta.bayer_pattern", stream_meta.get("bayer_pattern")), + ("stream_meta.camera_info.CAM_A.bayer_pattern", cam_info.get("bayer_pattern") or cam_info.get("bayer")), + ): + if value: + v = str(value).upper().strip() + if v != mp_bayer: + declared.append(f"{source}={v} != module_params={mp_bayer}") + return mp_bayer, declared + + +def build_canonical_preview_bgr(bundle: SampleBundle, module_params_override: Optional[Path] = None) -> Tuple[np.ndarray, dict]: + if "CAM_A" not in bundle.bin_by_camera: + raise RuntimeError("CAM_A ausente no bundle.") + if cv2 is None: + raise RuntimeError("opencv-python é obrigatório para o preview canônico.") + + meta = load_json(bundle.meta_path) + module_params_path = resolve_module_params_path(bundle.meta_path, meta, module_params_override) + module_params = load_json(module_params_path) + + arr = load_camera_payload(meta, bundle.bin_by_camera["CAM_A"], "CAM_A") + rgb_w, rgb_h = _rgb_native_size(meta) + bayer, bayer_conflicts = _authoritative_rgb_bayer(meta, module_params) + + RawProcessorPreview = _import_raw_processor_preview() + preview_processor = RawProcessorPreview(sensor_width=rgb_w, sensor_height=rgb_h, bayer_pattern=bayer) + + # Mantemos TODO o mini-ISP do RawProcessorPreview, trocando apenas a escolha + # do código de demosaico por constantes explícitas de quatro letras. Isso + # corrige a armadilha dos aliases curtos do OpenCV sem duplicar o pipeline. + preview_processor._debayer_code = lambda: _explicit_bayer_bgr_code(bayer, edge_aware=True) + preview_bgr = preview_processor.packed_raw10_to_preview_bgr(arr) + preview_bgr = np.asarray(preview_bgr) + if preview_bgr.shape[:2] != (rgb_h, rgb_w) or preview_bgr.ndim != 3 or preview_bgr.shape[2] != 3: + raise RuntimeError(f"RawProcessorPreview retornou raster inesperado: {preview_bgr.shape}, esperado {(rgb_h, rgb_w, 3)}") + + orientation = resolve_rgb_annotation_orientation(module_params, (rgb_w, rgb_h)) + preview_bgr = apply_rgb_annotation_orientation_bgr(preview_bgr, orientation) + oriented_w, oriented_h = orientation["oriented_size"] + if preview_bgr.shape[:2] != (oriented_h, oriented_w): + raise RuntimeError(f"Orientação produziu {preview_bgr.shape[:2]}, esperado {(oriented_h, oriented_w)}") + + transformed = bool(orientation["rotate_deg"] or orientation["flip_horizontal"] or orientation["flip_vertical"]) + report = { + **ANNOTATION_PREVIEW_CONFIG, + "camera_id": "CAM_A", + "bayer_pattern": bayer, + "bayer_pattern_source": "module_params_authoritative", + "bayer_metadata_conflicts": bayer_conflicts, + "geometry": "rgb_canonical_oriented_no_external_undistort", + "source_space": orientation["input_space"], + "coordinate_space": orientation["output_space"], + "source_image_size": [rgb_w, rgb_h], + "image_size": [oriented_w, oriented_h], + "orientation_applied": { + "rotate_deg": int(orientation["rotate_deg"]), + "flip_horizontal": bool(orientation["flip_horizontal"]), + "flip_vertical": bool(orientation["flip_vertical"]), + }, + "orientation_apply_stage": orientation["apply_stage"], + "pixel_correspondence": "deterministic_orientation_of_rgb_sensor_raster", + "calibrations_applied": ["camera_orientation"] if transformed else [], + "module_params_path_used": str(module_params_path), + "mask_contract": { + "coordinate_space": orientation["output_space"], + "already_oriented": True, + "normalize_must_not_reapply_camera_orientation": True, + "downstream_geometry": ["common_crop", "final_resize_nearest"], + }, + } + return np.ascontiguousarray(preview_bgr), report + + +def ensure_canonical_preview(bundle: SampleBundle, cache_root: Path, module_params_override: Optional[Path] = None) -> Tuple[Path, dict, str]: + meta = load_json(bundle.meta_path) + try: + mp_path = resolve_module_params_path(bundle.meta_path, meta, module_params_override) + cache_path = _preview_cache_path(bundle, cache_root, mp_path) + report_path = cache_path.with_suffix(".preview.json") + if cache_path.is_file() and report_path.is_file(): + return cache_path, load_json(report_path), "cache" + + preview_bgr, report = build_canonical_preview_bgr(bundle, module_params_override) + cache_root.mkdir(parents=True, exist_ok=True) + tmp = cache_path.with_name(cache_path.stem + ".tmp.png") + if not cv2.imwrite(str(tmp), preview_bgr): + raise RuntimeError(f"Falha ao salvar cache de preview: {tmp}") + tmp.replace(cache_path) + report_path.write_text(json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + return cache_path, report, "raw_reconstructed" + except Exception: + # Compatibilidade: um PNG antigo ainda pode permitir triagem, mas sem + # fingir que ele tem o contrato canônico novo. + if bundle.preview_path is not None and bundle.preview_path.is_file(): + report = { + "schema": "legacy_saved_preview_fallback", + "version": GENERATED_PREVIEW_VERSION, + "purpose": "human_annotation_only", + "coordinate_space": "unknown_legacy_saved_preview", + "mask_contract": {"normalize_must_not_reapply_camera_orientation": None}, + } + return bundle.preview_path, report, "legacy_saved_fallback" + raise + + +def choose_unique_output_base(label_root: Path, desired_base: str) -> str: + """Escolhe um stem único e coerente para preview/meta/bins da amostra.""" + k = 0 + while True: + base = desired_base if k == 0 else f"{desired_base}__{k}" + candidates = [ + label_root / "previews" / f"{base}.png", + label_root / "metas" / f"{base}.json", + *[label_root / "bins" / f"{base}_{cam}.bin" for cam in REQUIRED_CAMERAS], + ] + if not any(c.exists() for c in candidates): + return base + k += 1 + + +def write_destination_meta(src_meta_path: Path, dst_meta_path: Path, dst_preview_name: str, preview_report: dict, preview_origin: str, payload_files: Optional[Dict[str, str]] = None): + meta = load_json(src_meta_path) + meta["saved_preview_path"] = dst_preview_name + meta["saved_preview_method"] = "raw_processor_preview_rgb_beauty_canonical_sorter" + meta["raw_preview_reference_camera"] = "CAM_A" + if payload_files: + meta["saved_payload_type"] = "raw_native_multi" + meta["saved_payload_paths"] = dict(payload_files) + meta["annotation_preview"] = preview_report + meta["sorting_preview_origin"] = preview_origin + meta["sorting_preview_version"] = GENERATED_PREVIEW_VERSION + tmp = dst_meta_path.with_suffix(dst_meta_path.suffix + ".tmp") + tmp.parent.mkdir(parents=True, exist_ok=True) + with tmp.open("w", encoding="utf-8") as f: + json.dump(meta, f, ensure_ascii=False, indent=2) + f.write("\n") + tmp.replace(dst_meta_path) + + # ============================================================ # Reconstrução de preview diretamente do .bin # ============================================================ @@ -556,13 +925,19 @@ def bayer_to_rgb(raw16: np.ndarray, bayer_pattern: str, bit_depth: int) -> Image if cv2 is not None: pattern = (bayer_pattern or "BGGR").upper() - code_map = { - "BGGR": cv2.COLOR_BAYER_BG2RGB, - "RGGB": cv2.COLOR_BAYER_RG2RGB, - "GBRG": cv2.COLOR_BAYER_GB2RGB, - "GRBG": cv2.COLOR_BAYER_GR2RGB, - } - code = code_map.get(pattern, cv2.COLOR_BAYER_BG2RGB) + # Use nomes completos. Os aliases curtos do OpenCV são históricos e + # podem representar o mosaico oposto, trocando R/B. + attr = f"COLOR_Bayer{pattern}2RGB" + code = getattr(cv2, attr, None) + if code is None: + # fallback equivalente para OpenCV antigo + alias = { + "RGGB": cv2.COLOR_BAYER_BG2RGB, + "BGGR": cv2.COLOR_BAYER_RG2RGB, + "GRBG": cv2.COLOR_BAYER_GB2RGB, + "GBRG": cv2.COLOR_BAYER_GR2RGB, + } + code = alias.get(pattern, alias["RGGB"]) rgb = cv2.cvtColor(raw8, code) return Image.fromarray(rgb) @@ -578,7 +953,7 @@ def mono_to_rgb(raw16_or_u8: np.ndarray, bit_depth: int = 10) -> Image.Image: return Image.fromarray(gray, mode="L").convert("RGB") -def build_bin_preview_image(bundle: SampleBundle, cam_id: str) -> Tuple[Image.Image, str]: +def build_bin_preview_image(bundle: SampleBundle, cam_id: str, module_params_override: Optional[Path] = None) -> Tuple[Image.Image, str]: if cam_id not in bundle.bin_by_camera: raise RuntimeError(f"{cam_id} não encontrado nos .bin desta amostra") @@ -594,7 +969,15 @@ def build_bin_preview_image(bundle: SampleBundle, cam_id: str) -> Tuple[Image.Im raw_format = str(camera_info.get("raw_format") or "").upper() bit_depth = int(camera_info.get("bit_depth", 10) or 10) sensor_width = int(camera_info.get("width") or meta.get("sensor_width", 1280) or 1280) - bayer = str(camera_info.get("bayer_pattern") or meta.get("bayer_pattern", "BGGR")) + if cam_id == "CAM_A": + try: + mp_path = resolve_module_params_path(bundle.meta_path, meta, module_params_override) + mp = load_json(mp_path) + bayer, _ = _authoritative_rgb_bayer(meta, mp) + except Exception: + bayer = str(camera_info.get("bayer_pattern") or meta.get("bayer_pattern", "BGGR")) + else: + bayer = str(camera_info.get("bayer_pattern") or meta.get("bayer_pattern", "BGGR")) # USB/RGB pronto em HWC if arr.ndim == 3 and arr.shape[-1] == 3 and arr.dtype == np.uint8: @@ -636,8 +1019,8 @@ def build_bin_preview_image(bundle: SampleBundle, cam_id: str) -> Tuple[Image.Im def add_label_to_image(img: Image.Image, title: str, subtitle: str = "") -> Image.Image: - out = img.convert("RGB").copy() - draw = ImageDraw.Draw(out) + """Adiciona cabeçalho FORA do raster, sem esconder nenhum pixel da imagem.""" + src = img.convert("RGB") try: font_title = ImageFont.truetype("arial.ttf", 22) font_sub = ImageFont.truetype("arial.ttf", 15) @@ -645,10 +1028,10 @@ def add_label_to_image(img: Image.Image, title: str, subtitle: str = "") -> Imag font_title = ImageFont.load_default() font_sub = ImageFont.load_default() - # caixa translúcida fake: retângulo sólido escuro para legibilidade - max_w = out.size[0] box_h = 58 if subtitle else 34 - draw.rectangle((0, 0, max_w, box_h), fill=(0, 0, 0)) + out = Image.new("RGB", (src.size[0], src.size[1] + box_h), (0, 0, 0)) + out.paste(src, (0, box_h)) + draw = ImageDraw.Draw(out) draw.text((10, 7), title, fill=(255, 230, 80), font=font_title) if subtitle: short = subtitle if len(subtitle) <= 115 else subtitle[:112] + "..." @@ -717,30 +1100,49 @@ def compose_preview_grid(panels: List[Tuple[str, Image.Image, str]], display_hei return canvas -def build_display_image(bundle: SampleBundle, show_bin_previews: bool, display_height: int) -> Tuple[ImageTk.PhotoImage, str]: +def build_display_image( + bundle: SampleBundle, + show_bin_previews: bool, + display_height: int, + cache_root: Path, + module_params_override: Optional[Path] = None, +) -> Tuple[ImageTk.PhotoImage, str, Path, dict, str]: panels: List[Tuple[str, Image.Image, str]] = [] - saved = Image.open(bundle.preview_path).convert("RGB") - panels.append(("Preview salvo RGB", saved, bundle.preview_path.name)) + primary_path, preview_report, preview_origin = ensure_canonical_preview( + bundle, + cache_root=cache_root, + module_params_override=module_params_override, + ) + saved = Image.open(primary_path).convert("RGB") + bayer_info = str(preview_report.get("bayer_pattern") or "?") + origin_text = f"RAW CAM_A → RawProcessorPreview → orientação canônica | Bayer={bayer_info}" + conflicts = preview_report.get("bayer_metadata_conflicts") or [] + if conflicts: + origin_text += " | MP prevaleceu sobre meta" + if preview_origin == "cache": + origin_text += " (cache)" + elif preview_origin == "legacy_saved_fallback": + origin_text = "PNG legado salvo (fallback; espaço não garantido)" + panels.append(("Preview RGB para anotação", saved, origin_text)) - status_extra = "" + status_extra = f"preview={preview_origin}" if show_bin_previews: errors = [] - for cam_id in ("CAM_A", "CAM_B", "CAM_C"): + for cam_id in REQUIRED_CAMERAS: try: - img, desc = build_bin_preview_image(bundle, cam_id) + img, desc = build_bin_preview_image(bundle, cam_id, module_params_override=module_params_override) role = CAMERA_ROLE.get(cam_id, cam_id) - panels.append((f"{cam_id} - {role} (.bin)", img, desc)) + panels.append((f"{cam_id} - {role} (.bin nativo)", img, desc)) except Exception as e: errors.append(f"{cam_id}: {e}") - if errors: - status_extra = " | avisos: " + " ; ".join(errors[:2]) + status_extra += " | avisos: " + " ; ".join(errors[:2]) if len(errors) > 2: status_extra += f" ; +{len(errors)-2}" composed = compose_preview_grid(panels, display_height=display_height) - return ImageTk.PhotoImage(composed), status_extra + return ImageTk.PhotoImage(composed), status_extra, primary_path, preview_report, preview_origin # ============================================================ @@ -772,7 +1174,7 @@ class ActionLogger: self, action: str, sample_dir: Path, - preview_path: Path, + preview_path: Optional[Path], meta_path: Path, bin_paths: List[Path], label: Optional[str] = None, @@ -801,7 +1203,7 @@ class ActionLogger: action, label or "", sample_dir_str, - str(preview_path.resolve()), + str(preview_path.resolve()) if preview_path else "", meta_key_str, json.dumps(bin_paths_str, ensure_ascii=False), str(dest_sample_dir.resolve()) if dest_sample_dir else "", @@ -813,7 +1215,7 @@ class ActionLogger: "action": action, "label": label, "sample_dir": sample_dir_str, - "preview_path": str(preview_path.resolve()), + "preview_path": str(preview_path.resolve()) if preview_path else None, "meta_path": meta_key_str, "bin_paths": bin_paths_str, "dest_sample_dir": str(dest_sample_dir.resolve()) if dest_sample_dir else None, @@ -833,6 +1235,7 @@ class SampleBundleSorterApp: resume: bool, display_height: int = 720, show_bin_previews: bool = False, + module_params_override: Optional[Path] = None, ): self.all_bundles = bundles self.labels = labels @@ -840,6 +1243,11 @@ class SampleBundleSorterApp: self.move = move self.display_height = display_height self.show_bin_previews_var_value = show_bin_previews + self.module_params_override = Path(module_params_override) if module_params_override else None + self.preview_cache_root = out_root / ".weeds_pair_sorter_cache" / "previews" + self.current_primary_preview_path: Optional[Path] = None + self.current_preview_report: Optional[dict] = None + self.current_preview_origin: Optional[str] = None self.logger = ActionLogger(out_root) if resume: @@ -917,11 +1325,16 @@ class SampleBundleSorterApp: bundle = self.all_bundles[self.idx] try: - tk_img, status_extra = build_display_image( + tk_img, status_extra, primary_path, preview_report, preview_origin = build_display_image( bundle, show_bin_previews=self.show_bin_previews_var.get() if hasattr(self, "show_bin_previews_var") else self.show_bin_previews_var_value, display_height=self.display_height, + cache_root=self.preview_cache_root, + module_params_override=self.module_params_override, ) + self.current_primary_preview_path = primary_path + self.current_preview_report = preview_report + self.current_preview_origin = preview_origin self.preview_tk = tk_img self.preview_label.configure(image=self.preview_tk) except Exception as e: @@ -935,6 +1348,7 @@ class SampleBundleSorterApp: text=( f"{self.idx + 1}/{len(self.all_bundles)} | " f"sample='{bundle.sample_id}' | " + f"png_src={'sim' if bundle.preview_path and bundle.preview_path.is_file() else 'não'} | " f"bins={len(bundle.bin_paths)} [{bins_text}] | " f"mapa: {mapped_text or 'n/a'}" ) @@ -948,30 +1362,44 @@ class SampleBundleSorterApp: label = self.labels[label_index] bundle = self.all_bundles[self.idx] - label_root = self.out_root / label - dst_preview = unique_file(label_root / "previews" / bundle.preview_path.name) - dst_meta = unique_file(label_root / "metas" / bundle.meta_path.name) - dst_bins = [unique_file(label_root / "bins" / p.name) for p in bundle.bin_paths] try: + primary_path, preview_report, preview_origin = ensure_canonical_preview( + bundle, + cache_root=self.preview_cache_root, + module_params_override=self.module_params_override, + ) + + out_base = choose_unique_output_base(label_root, bundle.sample_id) + dst_preview = label_root / "previews" / f"{out_base}.png" + dst_meta = label_root / "metas" / f"{out_base}.json" + dst_by_camera = {cam: label_root / "bins" / f"{out_base}_{cam}.bin" for cam in REQUIRED_CAMERAS} + dst_bins = [dst_by_camera[cam] for cam in REQUIRED_CAMERAS] + src_bins = [bundle.bin_by_camera[cam] for cam in REQUIRED_CAMERAS] + payload_files = {cam: dst_by_camera[cam].name for cam in REQUIRED_CAMERAS} + + # Preview é artefato derivado. Sempre copiamos a versão canônica gerada, + # mesmo quando os RAW/meta são movidos. + shutil.copy2(primary_path, dst_preview) + if self.move: - shutil.move(str(bundle.preview_path), str(dst_preview)) shutil.move(str(bundle.meta_path), str(dst_meta)) - for src_bin, dst_bin in zip(bundle.bin_paths, dst_bins): + for src_bin, dst_bin in zip(src_bins, dst_bins): shutil.move(str(src_bin), str(dst_bin)) + # Reescreve o meta já no destino com o contrato do preview. + write_destination_meta(dst_meta, dst_meta, dst_preview.name, preview_report, preview_origin, payload_files) else: - shutil.copy2(bundle.preview_path, dst_preview) - shutil.copy2(bundle.meta_path, dst_meta) - for src_bin, dst_bin in zip(bundle.bin_paths, dst_bins): + write_destination_meta(bundle.meta_path, dst_meta, dst_preview.name, preview_report, preview_origin, payload_files) + for src_bin, dst_bin in zip(src_bins, dst_bins): shutil.copy2(src_bin, dst_bin) self.logger.log( action="assign", sample_dir=bundle.sample_dir, - preview_path=bundle.preview_path, - meta_path=bundle.meta_path, - bin_paths=bundle.bin_paths, + preview_path=primary_path, + meta_path=bundle.meta_path if not self.move else dst_meta, + bin_paths=src_bins if not self.move else dst_bins, label=label, dest_sample_dir=label_root, ) @@ -980,9 +1408,9 @@ class SampleBundleSorterApp: "action": "assign", "label": label, "sample_src": bundle.sample_dir, - "preview_src": bundle.preview_path, + "source_preview_src": bundle.preview_path, "meta_src": bundle.meta_path, - "bin_srcs": list(bundle.bin_paths), + "bin_srcs": list(src_bins), "preview_dst": dst_preview, "meta_dst": dst_meta, "bin_dsts": dst_bins, @@ -990,7 +1418,7 @@ class SampleBundleSorterApp: "index": self.idx, }) - self.status_var.set(f"{'Movido' if self.move else 'Copiado'} → '{label}': {bundle.sample_id}") + self.status_var.set(f"{'Movido' if self.move else 'Copiado'} → '{label}': {bundle.sample_id} | preview canônico") self.idx += 1 if self.idx >= len(self.all_bundles): messagebox.showinfo("Concluído", "Você chegou ao final da fila!") @@ -1005,13 +1433,11 @@ class SampleBundleSorterApp: def undo(self): if not self.history: return - last = self.history.pop() if last["action"] != "assign": return try: - preview_src = Path(last["preview_src"]) meta_src = Path(last["meta_src"]) bin_srcs = [Path(p) for p in last["bin_srcs"]] preview_dst = Path(last["preview_dst"]) @@ -1019,23 +1445,29 @@ class SampleBundleSorterApp: bin_dsts = [Path(p) for p in last["bin_dsts"]] if last["moved"]: - shutil.move(str(preview_dst), str(preview_src)) - shutil.move(str(meta_dst), str(meta_src)) + # O meta de destino foi enriquecido pelo sorter. Ao desfazer, ele volta + # enriquecido, o que é seguro e preserva provenance do preview. + if meta_dst.exists(): + meta_src.parent.mkdir(parents=True, exist_ok=True) + shutil.move(str(meta_dst), str(meta_src)) for dst_bin, src_bin in zip(bin_dsts, bin_srcs): - shutil.move(str(dst_bin), str(src_bin)) + if dst_bin.exists(): + src_bin.parent.mkdir(parents=True, exist_ok=True) + shutil.move(str(dst_bin), str(src_bin)) else: - if preview_dst.exists(): - preview_dst.unlink() if meta_dst.exists(): meta_dst.unlink() for dst_bin in bin_dsts: if dst_bin.exists(): dst_bin.unlink() + if preview_dst.exists(): + preview_dst.unlink() + self.logger.log( action="undo", sample_dir=Path(last["sample_src"]), - preview_path=preview_src, + preview_path=Path(last["source_preview_src"]) if last.get("source_preview_src") else None, meta_path=meta_src, bin_paths=bin_srcs, label=last["label"], @@ -1043,9 +1475,8 @@ class SampleBundleSorterApp: ) self.idx = max(0, min(last.get("index", self.idx), len(self.all_bundles) - 1)) - self.status_var.set(f"Desfeito ← '{last['label']}': {preview_src.stem}") + self.status_var.set(f"Desfeito ← '{last['label']}': {meta_src.stem}") self.render() - except Exception as e: messagebox.showerror("Erro", f"Falha no undo: {e}") self.status_var.set(f"ERRO: {e}") @@ -1109,7 +1540,7 @@ class SetupWindow: def __init__(self): self.root = tk.Tk() self.root.title("Configurar - Weed Pair Sorter") - self.root.geometry("780x590") + self.root.geometry("820x670") frm_in = tk.LabelFrame(self.root, text="Pastas de entrada (raízes com subpastas de amostras)") frm_in.pack(fill=tk.BOTH, expand=False, padx=10, pady=8) @@ -1129,6 +1560,12 @@ class SetupWindow: tk.Entry(frm_out, textvariable=self.out_root_var).pack(side=tk.LEFT, fill=tk.X, expand=True, padx=6, pady=6) tk.Button(frm_out, text="Escolher...", command=self.choose_out_root).pack(side=tk.RIGHT, padx=6, pady=6) + frm_mp = tk.LabelFrame(self.root, text="Module params fallback/override (opcional)") + frm_mp.pack(fill=tk.X, expand=False, padx=10, pady=8) + self.module_params_var = tk.StringVar(value="") + tk.Entry(frm_mp, textvariable=self.module_params_var).pack(side=tk.LEFT, fill=tk.X, expand=True, padx=6, pady=6) + tk.Button(frm_mp, text="Escolher JSON...", command=self.choose_module_params).pack(side=tk.RIGHT, padx=6, pady=6) + frm_labels = tk.LabelFrame(self.root, text="Labels (classes) separadas por vírgula") frm_labels.pack(fill=tk.X, expand=False, padx=10, pady=8) self.labels_var = tk.StringVar(value="chao,chao_cana,chao_erva,chao_cana_erva,cana,cana_erva,erva") @@ -1182,6 +1619,14 @@ class SetupWindow: if p: self.out_root_var.set(p) + def choose_module_params(self): + p = filedialog.askopenfilename( + title="Selecione o module_params/modelmp usado pela câmera", + filetypes=[("JSON", "*.json"), ("Todos", "*.*")], + ) + if p: + self.module_params_var.set(p) + def start(self): inputs = [self.inputs_listbox.get(i) for i in range(self.inputs_listbox.size())] out_root = self.out_root_var.get().strip() @@ -1206,6 +1651,7 @@ class SetupWindow: self.resume_var.get(), self.height_var.get(), self.show_bin_previews_var.get(), + Path(self.module_params_var.get().strip()) if self.module_params_var.get().strip() else None, ) self.root.destroy() @@ -1220,7 +1666,7 @@ def run_with_gui_setup(): if not res: return - input_folders, labels, out_root, move, resume, height, show_bin_previews = res + input_folders, labels, out_root, move, resume, height, show_bin_previews, module_params_override = res bundles = collect_all_bundles(input_folders) if not bundles: @@ -1240,6 +1686,7 @@ def run_with_gui_setup(): resume=resume, display_height=height, show_bin_previews=show_bin_previews, + module_params_override=module_params_override, ) app.run() @@ -1255,6 +1702,7 @@ def main(): parser.add_argument("--resume", action="store_true", help="Pular itens já presentes no sorting_log.csv") parser.add_argument("--display-height", type=int, default=760, help="Altura total de exibição do preview/grid (px)") parser.add_argument("--show-bin-previews", action="store_true", help="Inicia mostrando CAM_A/CAM_B/CAM_C reconstruídas dos .bin") + parser.add_argument("--module-params", default=None, help="Fallback/override do module_params/modelmp para reconstruir preview canônico") parser.add_argument("--no-gui-setup", action="store_true", help="Não abrir a GUI de setup") args = parser.parse_args() @@ -1274,11 +1722,9 @@ def main(): bundles = collect_all_bundles(input_folders) if not bundles: print( - "Nenhuma amostra válida encontrada. " - "Formatos aceitos: preview.png + meta.json + CAM_A/B/C.bin, " - ".png/json + _CAM_A/B/C.bin, " - "layout root/previews + root/metas + root/bins, " - "ou formato antigo _cam0/cam1/cam2.bin." + "Nenhuma amostra RAW completa encontrada. " + "O PNG não é obrigatório: informe meta.json + CAM_A/B/C.bin. " + "Também aceito layout root/metas + root/bins e formatos antigos com tripleta completa." ) sys.exit(1) @@ -1290,6 +1736,7 @@ def main(): resume=args.resume, display_height=args.display_height, show_bin_previews=args.show_bin_previews, + module_params_override=Path(args.module_params) if args.module_params else None, ) app.run() diff --git a/Python/OAK/datasets/oak-fcc-3/_2_apply_review_masks.py b/Python/OAK/datasets/oak-fcc-3/_2_apply_review_masks.py index 2fcb2d3f7..e814cfb04 100644 --- a/Python/OAK/datasets/oak-fcc-3/_2_apply_review_masks.py +++ b/Python/OAK/datasets/oak-fcc-3/_2_apply_review_masks.py @@ -2,56 +2,63 @@ # -*- coding: utf-8 -*- """ -_2_apply_review_masks_final.py +_2_apply_review_masks.py -Aplica as máscaras revisadas de volta em dataset/brutas/group. +Aplica máscaras revisadas de volta em dataset/brutas/group com política +CONSERVADORA: qualquer ambiguidade é isolada em quarentena e NUNCA entra no +--apply. -VERSÃO FINAL / RÁPIDA +Regras de segurança: +- 1 máscara de review + 1 destino nas BRUTAS -> elegível para apply. +- Mesmo base em mais de um grupo/destino das BRUTAS -> QUARENTENA. +- Mesmo base mais de uma vez no REVIEW -> QUARENTENA, mesmo se as máscaras + forem pixel-a-pixel idênticas. +- Duplicidade simultânea em REVIEW e BRUTAS -> QUARENTENA. +- Bases sem destino -> SKIP, sem alteração. +- O --apply contém uma checagem final de invariantes e só aceita exatamente + 1 review mask + 1 target por base. -Princípio: -- O nome-base da máscara revisada é a chave. -- Os previews das BRUTAS são indexados UMA ÚNICA VEZ em memória. -- Se o mesmo base existir em MAIS DE UM grupo das BRUTAS, a máscara revisada - é aplicada em TODOS eles. Isso é intencional: são duplicatas que serão - consolidadas posteriormente pelo reorganizador do dataset. -- Se o mesmo base existir MAIS DE UMA VEZ dentro do próprio REVIEW: - * se as máscaras forem pixel-a-pixel equivalentes após normalização para - raw_size, tratamos como uma única revisão; - * se forem diferentes, é CONFLITO REAL e esse base é pulado para não - escolher arbitrariamente uma revisão. +Quarentena: +- É gerada também no dry-run (somente cópias; nada nas BRUTAS é alterado). +- Para cada caso ambíguo é criada uma pasta por combinação review x preview. +- Cada pasta contém: + preview. -> preview original das BRUTAS + mask.png -> máscara original vinda do REVIEW + info.txt -> origem exata, grupos e target correspondente -Transformação: -- config["resolucao"] = resolução do review/treino, ex. 960x600 -- config["raw_size"] = resolução RAW, ex. 1280x800 -- Máscaras categóricas são redimensionadas EXCLUSIVAMENTE com INTER_NEAREST. +Exemplo: + dataset/brutas/review_quarantine/run_YYYYMMDD_HHMMSS/ + QUARENTENA_MULTI_TARGET/ + / + pair_001__review-X__preview-A/ + preview.jpg + mask.png + info.txt + pair_002__review-X__preview-B/ + ... -Performance: -- O dry-run não lê milhares de imagens. -- Só lê imagens no dry-run quando um mesmo base aparece várias vezes no REVIEW, - para confirmar se essas revisões duplicadas são equivalentes. -- No --apply, cada base lógico é lido/redimensionado apenas UMA vez e depois - gravado em todos os destinos encontrados. -- A máscara antiga NÃO é lida. -- Não há comparação com máscara antiga, hash global, paleta ou backup. +Uso dry-run: -Uso: - - python .\\_2_apply_review_masks_final.py ` + python .\\_2_apply_review_masks.py ` --review-root "C:\\Users\\USER\\Desktop\\fotos_multiespectrais\\review" ` --brutas-root dataset\\brutas\\group ` --labelmap dataset\\labelmap.txt ` --config config.json - python .\\_2_apply_review_masks_final.py ` +Uso apply: + + python .\\_2_apply_review_masks.py ` --review-root "C:\\Users\\USER\\Desktop\\fotos_multiespectrais\\review" ` --brutas-root dataset\\brutas\\group ` --labelmap dataset\\labelmap.txt ` --config config.json ` --apply +Opcional: + --quarantine-root caminho\\para\\quarentena + Observação: ---labelmap é aceito apenas para manter compatibilidade com o comando antigo. -Esta versão não precisa dele. +--labelmap é aceito apenas para compatibilidade com o comando antigo. """ from __future__ import annotations @@ -60,12 +67,14 @@ import argparse import csv import json import os +import re +import shutil import sys from collections import defaultdict from dataclasses import dataclass from datetime import datetime from pathlib import Path -from typing import Dict, Iterable, List, Tuple +from typing import Dict, Iterable, List, Optional, Tuple import cv2 import numpy as np @@ -89,7 +98,13 @@ class LogicalReview: representative: Path targets: List[Path] preview_paths: List[Path] - duplicate_review_equivalent: bool = False + + +@dataclass +class QuarantineResult: + case_dir: Path + pair_count: int + errors: List[str] def load_sizes(config_path: Path) -> Sizes: @@ -111,9 +126,8 @@ def load_sizes(config_path: Path) -> Sizes: try: w, h = int(value[0]), int(value[1]) except Exception: - raise RuntimeError( - f'config["{key}"] inválido: {value!r}' - ) + raise RuntimeError(f'config["{key}"] inválido: {value!r}') + if w <= 0 or h <= 0: raise RuntimeError( f'config["{key}"] deve conter valores positivos: {value!r}' @@ -123,7 +137,6 @@ def load_sizes(config_path: Path) -> Sizes: review_w, review_h = parse("resolucao") raw_w, raw_h = parse("raw_size") - # Resize puro é seguro geometricamente apenas com a mesma proporção. if review_w * raw_h != raw_w * review_h: raise RuntimeError( "resolucao e raw_size possuem aspect ratios diferentes: " @@ -146,8 +159,7 @@ def discover_review_masks(review_root: Path) -> List[Path]: e: review//final_masks/.png - Se existir final_masks, usa somente esses arquivos para não engolir - predictions/previews auxiliares. + Se existir qualquer final_masks, usa somente arquivos dentro de final_masks. """ final_masks = sorted( p for p in review_root.rglob("*.png") @@ -158,9 +170,7 @@ def discover_review_masks(review_root: Path) -> List[Path]: masks: List[Path] = [] for group_dir in sorted(p for p in review_root.iterdir() if p.is_dir()): - masks.extend( - sorted(p for p in group_dir.glob("*.png") if p.is_file()) - ) + masks.extend(sorted(p for p in group_dir.glob("*.png") if p.is_file())) return masks @@ -170,13 +180,12 @@ def review_group(path: Path) -> str: return path.parent.name -def build_preview_index(brutas_root: Path) -> Dict[str, List[Path]]: - """ - Varre o filesystem UMA ÚNICA VEZ. +def preview_group(path: Path) -> str: + # ...//previews/. + return path.parent.parent.name - Resultado: - base -> [preview_path_1, preview_path_2, ...] - """ + +def build_preview_index(brutas_root: Path) -> Dict[str, List[Path]]: index: Dict[str, List[Path]] = defaultdict(list) for group_dir in sorted(p for p in brutas_root.iterdir() if p.is_dir()): @@ -199,15 +208,6 @@ def group_reviews_by_base(masks: Iterable[Path]) -> Dict[str, List[Path]]: def load_and_resize_mask(path: Path, sizes: Sizes) -> np.ndarray: - """ - Abre uma máscara e a normaliza para raw_size. - - Aceita: - - config.resolucao - - config.raw_size - - Qualquer outro tamanho é erro. - """ img = cv2.imread(str(path), cv2.IMREAD_COLOR) if img is None: raise RuntimeError(f"não consegui abrir máscara: {path}") @@ -236,9 +236,8 @@ def duplicate_reviews_are_equivalent( sizes: Sizes, ) -> Tuple[bool, str]: """ - Usado SOMENTE quando o mesmo base aparece várias vezes no review. - Como são pouquíssimos casos, podemos comparar pixel a pixel sem afetar - a performance geral. + A equivalência serve APENAS para diagnóstico/relatório. + Mesmo equivalentes, reviews duplicados continuam indo para quarentena. """ if len(paths) <= 1: return True, "" @@ -261,17 +260,10 @@ def duplicate_reviews_are_equivalent( + " | ".join(str(p) for p in paths), ) - return True, "" + return True, "máscaras duplicadas equivalentes pixel-a-pixel após normalização" -def unique_targets_from_previews( - previews: List[Path], - base: str, -) -> List[Path]: - """ - Um mesmo stem pode, em teoria, aparecer em PNG e JPG dentro da mesma pasta. - Deduplicamos pelo caminho final da mask. - """ +def unique_targets_from_previews(previews: List[Path], base: str) -> List[Path]: by_target: Dict[str, Path] = {} for preview in previews: @@ -282,12 +274,7 @@ def unique_targets_from_previews( def atomic_write_png(img: np.ndarray, dst: Path) -> None: - """ - PNG continua lossless. Compressão 1 prioriza velocidade. - Escreve em temporário e troca atomicamente. - """ dst.parent.mkdir(parents=True, exist_ok=True) - tmp = dst.with_name(dst.stem + ".tmp_review_apply.png") ok = cv2.imwrite( @@ -301,11 +288,115 @@ def atomic_write_png(img: np.ndarray, dst: Path) -> None: os.replace(tmp, dst) +def safe_component(value: str, max_len: int = 120) -> str: + value = re.sub(r'[<>:"/\\|?*\x00-\x1f]', "_", value) + value = value.strip().rstrip(".") + if not value: + value = "sem_nome" + return value[:max_len] + + +def quarantine_case( + *, + quarantine_root: Path, + status: str, + base: str, + review_paths: List[Path], + previews: List[Path], + targets: List[Path], + message: str, +) -> QuarantineResult: + """ + Gera uma pasta por combinação REVIEW x PREVIEW. + + Isso é deliberadamente redundante: para poucos casos ambíguos, é melhor + mostrar todas as combinações ao operador do que tentar adivinhar qual + pareamento é o correto. + """ + case_dir = quarantine_root / safe_component(status) / safe_component(base) + case_dir.mkdir(parents=True, exist_ok=True) + + errors: List[str] = [] + pair_count = 0 + + # Manifesto geral do caso. + manifest = { + "status": status, + "base": base, + "message": message, + "review_masks": [str(p) for p in review_paths], + "previews": [str(p) for p in previews], + "targets": [str(p) for p in targets], + } + try: + (case_dir / "case.json").write_text( + json.dumps(manifest, ensure_ascii=False, indent=2), + encoding="utf-8", + ) + except Exception as e: + errors.append(f"falha ao gravar case.json: {e}") + + # Casos de quarentena aqui sempre devem ter pelo menos um preview e uma mask. + # Ainda assim, tratamos defensivamente para não abortar o preflight inteiro. + if not review_paths or not previews: + errors.append("caso sem review mask ou sem preview; nenhuma dupla criada") + return QuarantineResult(case_dir=case_dir, pair_count=0, errors=errors) + + pair_no = 0 + for r_idx, review_path in enumerate(review_paths, 1): + r_group = review_group(review_path) + + for p_idx, preview_path in enumerate(previews, 1): + p_group = preview_group(preview_path) + pair_no += 1 + + pair_name = ( + f"pair_{pair_no:03d}__" + f"review-{safe_component(r_group, 45)}__" + f"preview-{safe_component(p_group, 45)}" + ) + pair_dir = case_dir / pair_name + pair_dir.mkdir(parents=True, exist_ok=True) + + preview_dst = pair_dir / f"preview{preview_path.suffix.lower()}" + mask_dst = pair_dir / "mask.png" + + target = preview_path.parent.parent / "masks" / f"{base}.png" + + try: + shutil.copy2(preview_path, preview_dst) + shutil.copy2(review_path, mask_dst) + + info = ( + f"status={status}\n" + f"base={base}\n" + f"message={message}\n" + f"review_index={r_idx}/{len(review_paths)}\n" + f"review_group={r_group}\n" + f"review_original={review_path}\n" + f"preview_index={p_idx}/{len(previews)}\n" + f"preview_group={p_group}\n" + f"preview_original={preview_path}\n" + f"target_correspondente={target}\n" + ) + (pair_dir / "info.txt").write_text(info, encoding="utf-8") + pair_count += 1 + except Exception as e: + errors.append(f"{pair_name}: {e}") + + return QuarantineResult( + case_dir=case_dir, + pair_count=pair_count, + errors=errors, + ) + + def write_report(path: Path, rows: List[dict]) -> None: path.parent.mkdir(parents=True, exist_ok=True) fields = [ "status", + "apply_eligible", "base", "review_count", "review_groups", @@ -315,6 +406,8 @@ def write_report(path: Path, rows: List[dict]) -> None: "previews", "target_count", "targets", + "quarantine_dir", + "quarantine_pairs", "message", ] @@ -332,8 +425,8 @@ def write_report(path: Path, rows: List[dict]) -> None: def main() -> int: ap = argparse.ArgumentParser( description=( - "Aplica rapidamente masks revisadas em todas as cópias " - "correspondentes encontradas nas BRUTAS." + "Aplica masks revisadas somente quando o mapeamento é 1:1; " + "toda duplicidade é enviada para quarentena visual." ) ) ap.add_argument("--review-root", required=True) @@ -344,10 +437,18 @@ def main() -> int: ap.add_argument("--labelmap", default="", help=argparse.SUPPRESS) ap.add_argument("--report", default="") + ap.add_argument( + "--quarantine-root", + default="", + help=( + "Pasta-base da quarentena. Se omitido, usa " + "/../review_quarantine/run_TIMESTAMP." + ), + ) ap.add_argument( "--apply", action="store_true", - help="Sem esta flag, faz somente dry-run.", + help="Sem esta flag, faz dry-run e gera somente relatório/quarentena.", ) args = ap.parse_args() @@ -356,28 +457,37 @@ def main() -> int: config_path = Path(args.config).resolve() if not review_root.is_dir(): - raise SystemExit( - f"[ERRO] review-root não encontrado: {review_root}" - ) + raise SystemExit(f"[ERRO] review-root não encontrado: {review_root}") if not brutas_root.is_dir(): - raise SystemExit( - f"[ERRO] brutas-root não encontrado: {brutas_root}" - ) + raise SystemExit(f"[ERRO] brutas-root não encontrado: {brutas_root}") sizes = load_sizes(config_path) + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + + report_path = ( + Path(args.report).resolve() + if args.report + else brutas_root.parent / f"apply_review_masks_safe_{timestamp}.csv" + ) + + quarantine_root = ( + Path(args.quarantine_root).resolve() / f"run_{timestamp}" + if args.quarantine_root + else brutas_root.parent / "review_quarantine" / f"run_{timestamp}" + ) print("[CONFIG]") print( - f" resolucao : {sizes.review_w}x{sizes.review_h} " + f" resolucao : {sizes.review_w}x{sizes.review_h} " "(review/treino)" ) print( - f" raw_size : {sizes.raw_w}x{sizes.raw_h} " + f" raw_size : {sizes.raw_w}x{sizes.raw_h} " "(brutas)" ) - print( - " resize : cv2.INTER_NEAREST" - ) + print(" resize : cv2.INTER_NEAREST") + print(" política : SOMENTE mapeamento 1 review : 1 target") + print(f" quarantine root : {quarantine_root}") masks = discover_review_masks(review_root) if not masks: @@ -394,34 +504,33 @@ def main() -> int: "encontrados nas BRUTAS." ) - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - report_path = ( - Path(args.report).resolve() - if args.report - else brutas_root.parent - / f"apply_review_masks_final_{timestamp}.csv" - ) - - print("=" * 96) - print("APPLY REVIEW MASKS - FINAL") + print("=" * 100) + print("APPLY REVIEW MASKS - SAFE / QUARANTINE") print(f"Modo : {'APPLY' if args.apply else 'DRY-RUN'}") print(f"Review root : {review_root}") print(f"Brutas root : {brutas_root}") print(f"Arquivos review : {len(masks)}") print(f"Bases review : {len(reviews_by_base)}") - print("=" * 96) + print("=" * 100) rows: List[dict] = [] logical_reviews: List[LogicalReview] = [] not_found = 0 - duplicate_review_ok = 0 - duplicate_review_conflict = 0 - multi_target_bases = 0 + quarantine_bases = 0 + quarantine_pairs = 0 + quarantine_copy_errors = 0 + + q_multi_target = 0 + q_review_dup_equivalent = 0 + q_review_dup_conflict = 0 + q_mixed_equivalent = 0 + q_mixed_conflict = 0 + total_target_files = 0 # ------------------------------------------------------------------ - # PREFLIGHT LEVE + # PREFLIGHT CONSERVADOR # ------------------------------------------------------------------ for base in sorted(reviews_by_base): review_paths = reviews_by_base[base] @@ -429,12 +538,11 @@ def main() -> int: targets = unique_targets_from_previews(previews, base) groups_review = sorted({review_group(p) for p in review_paths}) - groups_preview = sorted( - {p.parent.parent.name for p in previews} - ) + groups_preview = sorted({preview_group(p) for p in previews}) row = { "status": "", + "apply_eligible": "NAO", "base": base, "review_count": len(review_paths), "review_groups": " | ".join(groups_review), @@ -444,53 +552,101 @@ def main() -> int: "previews": " | ".join(str(p) for p in previews), "target_count": len(targets), "targets": " | ".join(str(p) for p in targets), + "quarantine_dir": "", + "quarantine_pairs": 0, "message": "", } if not targets: not_found += 1 row["status"] = "NAO_ENCONTRADO" - row["message"] = ( - "nenhum preview correspondente encontrado nas BRUTAS" - ) + row["message"] = "nenhum preview correspondente encontrado nas BRUTAS" rows.append(row) continue - duplicate_equivalent = False + review_duplicate = len(review_paths) > 1 + multi_target = len(targets) > 1 - if len(review_paths) > 1: + quarantine_status: Optional[str] = None + quarantine_message = "" + + if review_duplicate: equivalent, reason = duplicate_reviews_are_equivalent( review_paths, sizes, ) - if not equivalent: - duplicate_review_conflict += 1 - row["status"] = "CONFLITO_REVIEW_DUPLICADO" - row["message"] = reason - rows.append(row) - continue - duplicate_equivalent = True - duplicate_review_ok += 1 + if multi_target: + if equivalent: + q_mixed_equivalent += 1 + quarantine_status = "QUARENTENA_DUPLICIDADE_MISTA_EQUIVALENTE" + kind = "equivalentes" + else: + q_mixed_conflict += 1 + quarantine_status = "QUARENTENA_DUPLICIDADE_MISTA_CONFLITANTE" + kind = "diferentes/conflitantes" + quarantine_message = ( + f"base duplicado no REVIEW ({len(review_paths)} masks, {kind}) " + f"e também nas BRUTAS ({len(targets)} targets). {reason}" + ) + elif equivalent: + q_review_dup_equivalent += 1 + quarantine_status = "QUARENTENA_REVIEW_DUPLICADO_EQUIVALENTE" + quarantine_message = ( + f"mesmo base aparece {len(review_paths)} vezes no REVIEW; " + "apesar de equivalente, política segura exige revisão manual. " + f"{reason}" + ) + else: + q_review_dup_conflict += 1 + quarantine_status = "QUARENTENA_CONFLITO_REVIEW_DUPLICADO" + quarantine_message = reason - if len(targets) > 1: - multi_target_bases += 1 - row["status"] = "MULTI_TARGET" - row["message"] = ( - f"mesma revisão será aplicada em {len(targets)} " - "cópias das BRUTAS" + elif multi_target: + q_multi_target += 1 + quarantine_status = "QUARENTENA_MULTI_TARGET" + quarantine_message = ( + f"mesmo base aponta para {len(targets)} destinos nas BRUTAS; " + "nenhuma cópia será alterada automaticamente" ) - elif duplicate_equivalent: - row["status"] = "REVIEW_DUPLICADO_OK" - row["message"] = ( - "mesmo base apareceu várias vezes no review, " - "mas as masks são equivalentes" + + if quarantine_status is not None: + quarantine_bases += 1 + qres = quarantine_case( + quarantine_root=quarantine_root, + status=quarantine_status, + base=base, + review_paths=review_paths, + previews=previews, + targets=targets, + message=quarantine_message, ) - else: - row["status"] = "RESOLVIDO" - total_target_files += len(targets) + quarantine_pairs += qres.pair_count + quarantine_copy_errors += len(qres.errors) + row["status"] = quarantine_status + row["quarantine_dir"] = str(qres.case_dir) + row["quarantine_pairs"] = qres.pair_count + row["message"] = quarantine_message + if qres.errors: + row["message"] += " | ERROS_QUARENTENA: " + " || ".join(qres.errors) + + rows.append(row) + continue + + # Só chega aqui quando é estritamente 1 review : 1 target. + if len(review_paths) != 1 or len(targets) != 1: + raise RuntimeError( + f"invariante de segurança quebrada no preflight: {base} " + f"review_count={len(review_paths)} target_count={len(targets)}" + ) + + row["status"] = "RESOLVIDO_1x1" + row["apply_eligible"] = "SIM" + row["message"] = "mapeamento estritamente 1 review : 1 target" + + total_target_files += 1 logical_reviews.append( LogicalReview( base=base, @@ -498,114 +654,112 @@ def main() -> int: representative=review_paths[0], targets=targets, preview_paths=previews, - duplicate_review_equivalent=duplicate_equivalent, ) ) rows.append(row) print("[PREFLIGHT]") - print(f" Bases prontas : {len(logical_reviews)}") - print(f" Bases com múltiplos alvos : {multi_target_bases}") - print(f" Review duplicado idêntico : {duplicate_review_ok}") - print(f" Conflito review duplicado : {duplicate_review_conflict}") - print(f" Não encontrados : {not_found}") - print(f" Arquivos de mask a gravar : {total_target_files}") + print(f" Bases elegíveis 1:1 : {len(logical_reviews)}") + print(f" Bases em quarentena : {quarantine_bases}") + print(f" Multi-target : {q_multi_target}") + print(f" Review duplicado equivalente : {q_review_dup_equivalent}") + print(f" Review duplicado conflitante : {q_review_dup_conflict}") + print(f" Duplicidade mista equivalente : {q_mixed_equivalent}") + print(f" Duplicidade mista conflitante : {q_mixed_conflict}") + print(f" Duplas visuais geradas : {quarantine_pairs}") + print(f" Erros ao copiar quarentena : {quarantine_copy_errors}") + print(f" Não encontrados : {not_found}") + print(f" Arquivos que o apply pode gravar : {total_target_files}") write_report(report_path, rows) + if quarantine_bases: + print(f"[QUARENTENA] {quarantine_root}") + if not args.apply: print(f"[DRY-RUN] Relatório: {report_path}") + print("[DRY-RUN] Nenhuma mask dentro das BRUTAS foi alterada.") print( - "[DRY-RUN] Nenhuma mask das BRUTAS foi lida ou alterada." + "[DRY-RUN] A quarentena contém somente CÓPIAS dos casos ambíguos " + "para inspeção manual." ) - print( - "[INFO] Bases com múltiplos previews NÃO são mais ambíguas: " - "a mesma mask revisada será aplicada em todas as cópias." - ) - if duplicate_review_conflict: + if quarantine_copy_errors: print( - "[ATENÇÃO] Existem conflitos reais entre masks duplicadas " - "no próprio review. Esses bases serão pulados também no apply." + "[ATENÇÃO] Houve erro ao montar parte da quarentena. " + "Não rode --apply até revisar o relatório." ) + return 2 return 0 + # Se a própria quarentena falhou, aborta o apply inteiro. Melhor não correr. + if quarantine_copy_errors: + print( + "[ABORTADO] Houve falha ao copiar arquivos da quarentena. " + "Nenhuma mask será aplicada." + ) + return 2 + # ------------------------------------------------------------------ - # APPLY + # APPLY ESTRITAMENTE 1:1 # ------------------------------------------------------------------ applied_bases = 0 applied_files = 0 image_errors = 0 - for i, item in enumerate(logical_reviews, 1): + for item in logical_reviews: try: - # Lê/redimensiona UMA vez por base lógico. + # Segunda barreira de segurança antes de qualquer escrita. + if len(item.review_masks) != 1 or len(item.targets) != 1: + raise RuntimeError( + "item ambíguo chegou ao APPLY; operação bloqueada " + f"(reviews={len(item.review_masks)}, targets={len(item.targets)})" + ) + img = load_and_resize_mask(item.representative, sizes) + target = item.targets[0] + atomic_write_png(img, target) - # Aplica em TODAS as cópias existentes das BRUTAS. - for target in item.targets: - atomic_write_png(img, target) - applied_files += 1 - + applied_files += 1 applied_bases += 1 - if ( - applied_bases <= 10 - or applied_bases % 100 == 0 - or len(item.targets) > 1 - ): - suffix = ( - f" -> {len(item.targets)} cópias" - if len(item.targets) > 1 - else "" - ) + if applied_bases <= 10 or applied_bases % 100 == 0: print( f"[{applied_bases}/{len(logical_reviews)}] " - f"{item.base}{suffix}" + f"{item.base} -> 1 target" ) except Exception as e: image_errors += 1 print(f"[ERRO] {item.base}: {e}") - # Atualiza a linha correspondente no relatório. for row in rows: if row["base"] == item.base: row["status"] = "ERRO_APPLY" + row["apply_eligible"] = "NAO" row["message"] = str(e) break - # Atualiza status dos itens que chegaram ao fim sem erro. error_bases = { row["base"] for row in rows if row["status"] == "ERRO_APPLY" } + for row in rows: - if ( - row["base"] not in error_bases - and row["status"] - in {"RESOLVIDO", "MULTI_TARGET", "REVIEW_DUPLICADO_OK"} - ): + if row["base"] not in error_bases and row["status"] == "RESOLVIDO_1x1": row["status"] = "APLICADO" write_report(report_path, rows) - print("=" * 96) - print(f"[OK] Bases aplicadas : {applied_bases}") - print(f"[OK] Arquivos gravados : {applied_files}") - print(f"[SKIP] Não encontrados : {not_found}") - print( - f"[SKIP] Conflito review duplic.: " - f"{duplicate_review_conflict}" - ) - print(f"[ERRO] Falhas de imagem/escrita: {image_errors}") - print(f"[OK] Relatório : {report_path}") - - if duplicate_review_conflict: - print( - "[INFO] Conflitos de revisão duplicada foram deixados intactos " - "para resolução manual." - ) + print("=" * 100) + print(f"[OK] Bases aplicadas 1:1 : {applied_bases}") + print(f"[OK] Arquivos gravados : {applied_files}") + print(f"[SKIP] Bases em quarentena : {quarantine_bases}") + print(f"[SKIP] Não encontrados : {not_found}") + print(f"[ERRO] Falhas imagem/escrita : {image_errors}") + print(f"[OK] Relatório : {report_path}") + if quarantine_bases: + print(f"[OK] Quarentena : {quarantine_root}") return 0 if image_errors == 0 else 2 diff --git a/Python/OAK/datasets/oak-fcc-3/_4_recover_brutas_masks_domain.py b/Python/OAK/datasets/oak-fcc-3/_4_recover_brutas_masks_domain.py new file mode 100644 index 000000000..f7fd73570 --- /dev/null +++ b/Python/OAK/datasets/oak-fcc-3/_4_recover_brutas_masks_domain.py @@ -0,0 +1,1569 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +_4_recover_brutas_masks_domain.py +================================= + +RECUPERAÇÃO FORENSE das máscaras RAW contaminadas pelo apply de 04/09/2026. + +Incidente +--------- +O fluxo correto era: + + mask RAW / annotation space + -> ref_shape RGB + -> crop_box comum da fusão + -> resize INTER_NEAREST + -> mask final do tensor (ex.: 960x600) + +Durante o review, a máscara revisada ficou corretamente no domínio final/tensor. +O apply antigo, porém, fez apenas: + + review mask 960x600 + -> cv2.resize(..., 1280x800, INTER_NEAREST) + -> sobrescreveu dataset/brutas/.../masks/.png + +Portanto a máscara atual contaminada tem TAMANHO RAW, mas CONTEÚDO/GEOMETRIA +do domínio final do tensor. + +Este script desfaz o incidente em duas etapas: + +1) Recupera EXATAMENTE a máscara revisada no domínio final (ex.: 960x600) + a partir do resize errado 1280x800. + A recuperação é validada reexecutando o mesmo resize antigo e exigindo + igualdade pixel-a-pixel com a máscara contaminada. + +2) Reobtém ref_shape/crop_box pelo RawProcessorCore + module_params congelado, + reconstrói uma máscara no espaço RAW: + - fora do crop: IGNORE (branco / id 255) + - dentro do crop: back-projection categórica da máscara final + Em seguida reaplica o MESMO contrato do normalize (crop + INTER_NEAREST) + e exige round-trip 100% idêntico à máscara final recuperada. + +SEGURANÇA +--------- +- DRY-RUN é o padrão. +- Só processa por padrão: + classification == VERY_LIKELY_BAD_DOMAIN_APPLIED + do mask_domain_inventory.csv. +- Itens com mtime alterado depois do incidente NÃO são tocados. +- Antes de --apply, TODAS as máscaras-alvo são copiadas para backup. +- --apply é recusado se existir qualquer falha, salvo --allow-partial. +- Escrita final é atômica. +- O script nunca "adivinha chão" fora do crop: usa IGNORE. + +Uso recomendado +--------------- +Primeiro DRY-RUN: + +python .\\_4_recover_brutas_masks_domain.py ^ + --brutas-root .\\dataset\\brutas\\group ^ + --inventory .\\audit\\mask_domain_incident_20260904\\mask_domain_inventory.csv ^ + --module-params .\\calibration\\mp_ov9782\\module_params.json ^ + --target-size 960x600 ^ + --out-dir .\\audit\\mask_domain_recovery_20260908 + +Depois de conferir recovery_summary.json / recovery_report.csv / staging: + +python .\\_4_recover_brutas_masks_domain.py ^ + --brutas-root .\\dataset\\brutas\\group ^ + --inventory .\\audit\\mask_domain_incident_20260904\\mask_domain_inventory.csv ^ + --module-params .\\calibration\\mp_ov9782\\module_params.json ^ + --target-size 960x600 ^ + --out-dir .\\audit\\mask_domain_recovery_20260908 ^ + --apply + +Opcional: + --review-final-root + Se ainda existirem final_masks antigas em 960x600, elas têm prioridade + como fonte do domínio final. Se não existirem, o script recupera a + 960x600 diretamente da máscara contaminada. + + --geometry-mode per_signature + Default e recomendado. O crop é geométrico/fixo; o RawProcessorCore é + executado uma vez por assinatura de hardware/meta e reutilizado. + + --geometry-mode per_sample + Reexecuta o RawProcessorCore para cada máscara. É mais lento, porém útil + como verificação extrema. + +Requisitos +---------- +Executar a partir da raiz do projeto, onde: + core/raw_processor_core.py +está importável. + +O module_params deve ser o MESMO perfil usado no normalize histórico. +Para este incidente, use o OV9782 congelado, NÃO o AR0234. +""" + +from __future__ import annotations + +import argparse +import csv +import hashlib +import json +import math +import os +import shutil +import sys +import time +import traceback +from collections import Counter, defaultdict +from dataclasses import dataclass +from datetime import datetime +from pathlib import Path +from typing import Any, Dict, Iterable, List, Optional, Sequence, Tuple + +import cv2 +import numpy as np + +try: + from core.raw_processor_core import RawProcessorCore +except Exception: + RawProcessorCore = None + + +DEFAULT_TARGET_SIZE = (960, 600) # (W, H) +DEFAULT_IGNORE_ID = 255 + +# Labelmap oficial conhecido do projeto, em RGB. +DEFAULT_CLASSES_RGB: Dict[int, Tuple[str, Tuple[int, int, int]]] = { + 0: ("chao", (128, 0, 0)), + 1: ("cana", (0, 0, 128)), + 2: ("erva", (0, 128, 0)), +} + +DEFAULT_RECOVER_CLASSIFICATION = "VERY_LIKELY_BAD_DOMAIN_APPLIED" + + +# ============================================================ +# Estruturas +# ============================================================ + +@dataclass +class InventoryItem: + group: str + base: str + mask_path: Path + inventory_mtime_epoch: Optional[float] + classification: str + width: Optional[int] + height: Optional[int] + + +@dataclass +class Bundle: + group: str + base: str + group_dir: Path + meta_path: Path + mask_path: Path + bin_paths: Dict[str, Path] + + +@dataclass +class GeometryInfo: + ref_h: int + ref_w: int + target_w: int + target_h: int + crop_box: Tuple[int, int, int, int] + crop_applied: bool + module_params: str + signature: str + fusion_result: dict + + +# ============================================================ +# I/O geral +# ============================================================ + +def ensure_dir(path: Path) -> Path: + path.mkdir(parents=True, exist_ok=True) + return path + + +def load_json(path: Path) -> dict: + with path.open("r", encoding="utf-8") as f: + return json.load(f) + + +def write_json(path: Path, data: Any) -> None: + ensure_dir(path.parent) + with path.open("w", encoding="utf-8") as f: + json.dump(data, f, ensure_ascii=False, indent=2, default=str) + + +def write_csv(path: Path, rows: Sequence[dict]) -> None: + ensure_dir(path.parent) + if not rows: + path.write_text("", encoding="utf-8") + return + + keys: List[str] = [] + seen = set() + for row in rows: + for key in row.keys(): + if key not in seen: + seen.add(key) + keys.append(key) + + with path.open("w", newline="", encoding="utf-8-sig") as f: + w = csv.DictWriter(f, fieldnames=keys, extrasaction="ignore") + w.writeheader() + w.writerows(rows) + + +def parse_wh(text: str) -> Tuple[int, int]: + s = str(text).lower().strip().replace(" ", "") + if "x" not in s: + raise argparse.ArgumentTypeError("Use WxH, por exemplo 960x600") + a, b = s.split("x", 1) + w, h = int(a), int(b) + if w <= 0 or h <= 0: + raise argparse.ArgumentTypeError("W e H devem ser > 0") + return w, h + + +def sha256_file(path: Path, chunk_size: int = 1024 * 1024) -> str: + h = hashlib.sha256() + with path.open("rb") as f: + while True: + chunk = f.read(chunk_size) + if not chunk: + break + h.update(chunk) + return h.hexdigest() + + +def atomic_write_png(path: Path, bgr: np.ndarray) -> None: + ensure_dir(path.parent) + tmp = path.with_name(path.stem + ".tmp_recovery.png") + ok = cv2.imwrite( + str(tmp), + bgr, + [cv2.IMWRITE_PNG_COMPRESSION, 1], + ) + if not ok: + raise RuntimeError(f"Falha ao escrever PNG temporário: {tmp}") + os.replace(tmp, path) + + +def safe_float(value: Any) -> Optional[float]: + try: + x = float(value) + return x if math.isfinite(x) else None + except Exception: + return None + + +# ============================================================ +# Labelmap / máscara categórica +# ============================================================ + +def load_labelmap_classes(path: Optional[Path]) -> Dict[int, Tuple[str, Tuple[int, int, int]]]: + if path is None: + return dict(DEFAULT_CLASSES_RGB) + + if not path.is_file(): + raise FileNotFoundError(f"labelmap não encontrado: {path}") + + classes: Dict[int, Tuple[str, Tuple[int, int, int]]] = {} + next_id = 0 + + with path.open("r", encoding="utf-8") as f: + for raw_line in f: + s = raw_line.strip() + if not s or s.startswith("#"): + continue + + cid = None + name = None + color = None + + # Formato comum: chao: 128,0,0 + if ":" in s and not s.split(":", 1)[0].strip().isdigit(): + name_part, rest = s.split(":", 1) + name = name_part.strip() + color_txt = rest.split("::", 1)[0].strip().strip(":") + parts = [p.strip() for p in color_txt.split(",") if p.strip()] + if len(parts) >= 3: + try: + color = tuple(int(float(x)) for x in parts[:3]) + except Exception: + color = None + else: + # Formato possível: 0 chao 128 0 0 + parts = s.replace(",", " ").replace(":", " ").split() + if len(parts) >= 2 and parts[0].isdigit(): + cid = int(parts[0]) + name = parts[1] + if len(parts) >= 5: + try: + color = tuple(int(float(x)) for x in parts[2:5]) + except Exception: + color = None + elif parts: + name = parts[0] + + if not name: + continue + + lname = name.lower() + if lname in ("ignore", "void", "background_ignore"): + continue + + if cid is None: + cid = next_id + next_id = max(next_id, int(cid) + 1) + + if color is None: + if int(cid) not in DEFAULT_CLASSES_RGB: + raise RuntimeError( + f"Classe sem cor no labelmap e sem fallback conhecido: id={cid} name={name}" + ) + color = DEFAULT_CLASSES_RGB[int(cid)][1] + + classes[int(cid)] = (str(name), tuple(int(v) for v in color)) + + if not classes: + raise RuntimeError(f"Nenhuma classe válida no labelmap: {path}") + + return classes + + +def class_bgr(classes: Dict[int, Tuple[str, Tuple[int, int, int]]], cid: int) -> Tuple[int, int, int]: + _name, rgb = classes[int(cid)] + r, g, b = rgb + return int(b), int(g), int(r) + + +def decode_color_mask_bgr( + bgr: np.ndarray, + classes: Dict[int, Tuple[str, Tuple[int, int, int]]], + ignore_id: int, +) -> np.ndarray: + if bgr is None or bgr.ndim != 3 or bgr.shape[2] < 3: + raise RuntimeError(f"Máscara colorida inválida: shape={None if bgr is None else bgr.shape}") + + bgr3 = bgr[:, :, :3] + out = np.full(bgr3.shape[:2], int(ignore_id), dtype=np.uint8) + + known = np.zeros(out.shape, dtype=bool) + for cid in sorted(classes): + color = np.asarray(class_bgr(classes, cid), dtype=np.uint8) + hit = np.all(bgr3 == color[None, None, :], axis=2) + out[hit] = int(cid) + known |= hit + + # Branco é IGNORE explícito. + white = np.all(bgr3 == np.array([255, 255, 255], dtype=np.uint8)[None, None, :], axis=2) + known |= white + out[white] = int(ignore_id) + + unknown = ~known + if np.any(unknown): + vals, counts = np.unique(bgr3[unknown].reshape(-1, 3), axis=0, return_counts=True) + order = np.argsort(counts)[::-1][:12] + examples = [ + {"bgr": vals[i].tolist(), "pixels": int(counts[i])} + for i in order + ] + raise RuntimeError( + f"Máscara contém {int(unknown.sum())} pixels com cores fora do labelmap/IGNORE. " + f"Exemplos={examples}" + ) + + return out + + +def ids_to_bgr( + ids: np.ndarray, + classes: Dict[int, Tuple[str, Tuple[int, int, int]]], + ignore_id: int, +) -> np.ndarray: + out = np.full((*ids.shape[:2], 3), 255, dtype=np.uint8) + for cid in sorted(classes): + out[ids == int(cid)] = class_bgr(classes, cid) + out[ids == int(ignore_id)] = (255, 255, 255) + + valid_ids = set(int(x) for x in np.unique(ids).tolist()) + allowed = set(classes.keys()) | {int(ignore_id)} + bad = sorted(valid_ids - allowed) + if bad: + raise RuntimeError(f"IDs não suportados ao serializar máscara: {bad}") + return out + + +# ============================================================ +# Inventário do incidente +# ============================================================ + +def load_inventory( + inventory_path: Path, + brutas_root: Path, + wanted_classification: str, +) -> Tuple[List[InventoryItem], List[dict]]: + items: List[InventoryItem] = [] + skipped: List[dict] = [] + + with inventory_path.open("r", newline="", encoding="utf-8-sig") as f: + for row in csv.DictReader(f): + classification = str(row.get("classification", "")).strip() + group = str(row.get("group_current", "")).strip() + base = str(row.get("base", "")).strip() + + if not group or not base: + skipped.append({ + "group": group, + "base": base, + "status": "SKIP_INVALID_INVENTORY_ROW", + "classification": classification, + }) + continue + + if classification != wanted_classification: + skipped.append({ + "group": group, + "base": base, + "status": "PRESERVE_NOT_SELECTED_CLASSIFICATION", + "classification": classification, + }) + continue + + computed = brutas_root / group / "masks" / f"{base}.png" + + path_txt = str(row.get("path_current", "") or "").strip() + reported = Path(path_txt) if path_txt else None + + if computed.is_file(): + mask_path = computed.resolve() + elif reported is not None and reported.is_file(): + mask_path = reported.resolve() + else: + # Mantém o caminho esperado para registrar erro depois. + mask_path = computed.resolve() + + items.append( + InventoryItem( + group=group, + base=base, + mask_path=mask_path, + inventory_mtime_epoch=safe_float(row.get("mtime_epoch")), + classification=classification, + width=int(float(row["width"])) if str(row.get("width", "")).strip() else None, + height=int(float(row["height"])) if str(row.get("height", "")).strip() else None, + ) + ) + + return items, skipped + + +# ============================================================ +# Bundle RAW / meta / bins +# ============================================================ + +def find_bin_paths(group_dir: Path, base: str, meta: dict) -> Dict[str, Path]: + bins_dir = group_dir / "bins" + result: Dict[str, Path] = {} + + saved_paths = meta.get("saved_payload_paths", {}) or {} + + for cam_id in ("CAM_A", "CAM_B", "CAM_C"): + candidates: List[Path] = [] + + fname = saved_paths.get(cam_id) + if fname: + fp = Path(str(fname)) + candidates += [ + bins_dir / fp.name, + group_dir / fp, + group_dir / "metas" / fp, + ] + + candidates += [ + bins_dir / f"{base}_{cam_id}.bin", + bins_dir / f"{base}_{cam_id}.raw", + bins_dir / f"{base}_{cam_id.lower()}.bin", + bins_dir / f"{base}_{cam_id.lower()}.raw", + ] + + found = next((p for p in candidates if p.is_file()), None) + if found is not None: + result[cam_id] = found.resolve() + + return result + + +def bundle_candidate(group_dir: Path, base: str) -> Optional[Bundle]: + meta_path = group_dir / "metas" / f"{base}.json" + mask_path = group_dir / "masks" / f"{base}.png" + + if not meta_path.is_file() or not mask_path.is_file(): + return None + + try: + meta = load_json(meta_path) + except Exception: + return None + + bins = find_bin_paths(group_dir, base, meta) + if not all(cam in bins for cam in ("CAM_A", "CAM_B", "CAM_C")): + return None + + return Bundle( + group=group_dir.name, + base=base, + group_dir=group_dir.resolve(), + meta_path=meta_path.resolve(), + mask_path=mask_path.resolve(), + bin_paths=bins, + ) + + +def resolve_bundle(brutas_root: Path, preferred_group: str, base: str) -> Bundle: + exact_dir = brutas_root / preferred_group + exact = bundle_candidate(exact_dir, base) if exact_dir.is_dir() else None + if exact is not None: + return exact + + candidates: List[Bundle] = [] + for group_dir in sorted(p for p in brutas_root.iterdir() if p.is_dir()): + b = bundle_candidate(group_dir, base) + if b is not None: + candidates.append(b) + + if not candidates: + raise RuntimeError( + f"Bundle RAW não encontrado para base={base}. " + f"Procurei grupo preferido={preferred_group} e todos os grupos." + ) + + if len(candidates) > 1: + raise RuntimeError( + f"Bundle RAW ambíguo para base={base}: " + f"{[(x.group, str(x.meta_path)) for x in candidates]}" + ) + + return candidates[0] + + +def build_frame(bundle: Bundle, meta: dict) -> Dict[str, np.ndarray]: + saved_dtypes = meta.get("saved_payload_dtypes", {}) or {} + saved_shapes = meta.get("saved_payload_shapes", {}) or {} + + frame: Dict[str, np.ndarray] = {} + for cam_id in ("CAM_A", "CAM_B", "CAM_C"): + path = bundle.bin_paths[cam_id] + dtype_txt = saved_dtypes.get(cam_id) + shape = saved_shapes.get(cam_id) + + if dtype_txt is None or shape is None: + raise RuntimeError( + f"Meta sem saved_payload_dtypes/shapes para {cam_id}: {bundle.meta_path}" + ) + + arr = np.fromfile(str(path), dtype=np.dtype(dtype_txt)) + expected = int(np.prod(shape)) + if arr.size != expected: + raise RuntimeError( + f"Payload com tamanho incompatível {cam_id} {bundle.base}: " + f"arquivo={arr.size} esperado={expected} shape={shape}" + ) + + frame[cam_id] = arr.reshape(tuple(int(x) for x in shape)) + + return frame + + +def build_processing_meta(meta: dict) -> dict: + stream_meta = dict(meta.get("stream_meta", {}) or {}) + stream_meta["frame_type"] = "RAW_BRUTO" + + if "camera_info" not in stream_meta and isinstance(meta.get("camera_info"), dict): + stream_meta["camera_info"] = meta.get("camera_info") + + for key in ( + "actual_camera_controls", + "startup_camera_controls", + "camera_controls", + "radiometric_last_result", + ): + if meta.get(key) is not None: + stream_meta[key] = meta.get(key) + + return stream_meta + + +def canonical_json_hash(obj: Any) -> str: + txt = json.dumps(obj, sort_keys=True, ensure_ascii=False, default=str, separators=(",", ":")) + return hashlib.sha256(txt.encode("utf-8")).hexdigest()[:16] + + +def geometry_signature(meta: dict, module_params_path: Path, target_size: Tuple[int, int]) -> str: + camera_info = (meta.get("stream_meta", {}) or {}).get("camera_info") + if camera_info is None: + camera_info = meta.get("camera_info") + + payload_shapes = meta.get("saved_payload_shapes", {}) or {} + payload_dtypes = meta.get("saved_payload_dtypes", {}) or {} + + signature_obj = { + "sensor_width": int(meta.get("sensor_width", 1280)), + "sensor_height": int(meta.get("sensor_height", 800)), + "bayer_pattern": str(meta.get("bayer_pattern") or meta.get("bayer") or "BGGR").upper(), + "camera_info": camera_info, + "saved_payload_shapes": payload_shapes, + "saved_payload_dtypes": payload_dtypes, + "target_size": list(target_size), + "module_params": str(module_params_path.resolve()), + "module_params_sha256": sha256_file(module_params_path), + } + return canonical_json_hash(signature_obj) + + +# ============================================================ +# RawProcessorCore / geometria +# ============================================================ + +class GeometryResolver: + def __init__( + self, + module_params_path: Path, + target_size: Tuple[int, int], + mode: str = "per_signature", + ): + if RawProcessorCore is None: + raise RuntimeError( + "Não consegui importar core.raw_processor_core.RawProcessorCore. " + "Execute este script a partir da raiz do projeto." + ) + + self.module_params_path = module_params_path.resolve() + self.target_size = tuple(int(v) for v in target_size) + self.mode = str(mode) + self.cache: Dict[str, GeometryInfo] = {} + self.core_cache: Dict[Tuple[int, int, str, str], RawProcessorCore] = {} + self.core_runs = 0 + + def _get_core(self, meta: dict) -> RawProcessorCore: + sensor_w = int(meta.get("sensor_width", 1280)) + sensor_h = int(meta.get("sensor_height", 800)) + bayer = str(meta.get("bayer_pattern") or meta.get("bayer") or "BGGR").upper() + + key = ( + sensor_w, + sensor_h, + bayer, + str(self.module_params_path), + ) + + core = self.core_cache.get(key) + if core is None: + core = RawProcessorCore( + sensor_width=sensor_w, + sensor_height=sensor_h, + bayer_pattern=bayer, + calibration_json_path=str(self.module_params_path), + ) + self.core_cache[key] = core + return core + + def resolve(self, bundle: Bundle, meta: dict) -> GeometryInfo: + sig_base = geometry_signature(meta, self.module_params_path, self.target_size) + cache_key = sig_base if self.mode == "per_signature" else f"{sig_base}:{bundle.group}:{bundle.base}" + + if cache_key in self.cache: + return self.cache[cache_key] + + core = self._get_core(meta) + frame = build_frame(bundle, meta) + processing_meta = build_processing_meta(meta) + + tensor = core.build_infer_tensor_from_stream( + frame=frame, + meta=processing_meta, + channels_expected=5, + target_size=self.target_size, + ) + self.core_runs += 1 + + if tensor is None: + raise RuntimeError(f"RawProcessorCore retornou None para {bundle.group}/{bundle.base}") + + fusion = getattr(core, "last_fusion_result", None) + if not isinstance(fusion, dict): + raise RuntimeError( + f"RawProcessorCore não forneceu last_fusion_result para {bundle.group}/{bundle.base}" + ) + + ref_shape = fusion.get("ref_shape") + crop_box = fusion.get("crop_box") + target = fusion.get("target_size") + + if not (isinstance(ref_shape, (list, tuple)) and len(ref_shape) == 2): + raise RuntimeError(f"fusion_result.ref_shape inválido: {ref_shape}") + if not (isinstance(crop_box, (list, tuple)) and len(crop_box) == 4): + raise RuntimeError(f"fusion_result.crop_box inválido: {crop_box}") + if not (isinstance(target, (list, tuple)) and len(target) == 2): + raise RuntimeError(f"fusion_result.target_size inválido: {target}") + + ref_h, ref_w = int(ref_shape[0]), int(ref_shape[1]) + target_w, target_h = int(target[0]), int(target[1]) + + if (target_w, target_h) != self.target_size: + raise RuntimeError( + f"Target do core não bate com --target-size: " + f"core={target_w}x{target_h} cli={self.target_size[0]}x{self.target_size[1]}" + ) + + x0, y0, x1, y1 = [int(v) for v in crop_box] + if not (0 <= x0 < x1 <= ref_w and 0 <= y0 < y1 <= ref_h): + raise RuntimeError( + f"crop_box fora do ref_shape: crop={crop_box} ref={ref_w}x{ref_h}" + ) + + info = GeometryInfo( + ref_h=ref_h, + ref_w=ref_w, + target_w=target_w, + target_h=target_h, + crop_box=(x0, y0, x1, y1), + crop_applied=bool(fusion.get("crop_applied", True)), + module_params=str(self.module_params_path), + signature=sig_base, + fusion_result=json.loads(json.dumps(fusion, default=str)), + ) + self.cache[cache_key] = info + return info + + +# ============================================================ +# Inversões discretas do resize/crop +# ============================================================ + +def nearest_inverse_sample_indices(src_len: int, dst_len: int) -> np.ndarray: + """ + O apply errado fez: + cv2.resize(src, dst_len, INTER_NEAREST) + + Para cada índice da fonte src, escolhe um índice de dst que o OpenCV mapeou + diretamente para aquele src. + + INTER_NEAREST clássico: + src_idx = floor(dst_idx * src_len / dst_len) + + Logo: + dst_idx = ceil(src_idx * dst_len / src_len) + + Implementação inteira para evitar erro de ponto flutuante. + """ + src_len = int(src_len) + dst_len = int(dst_len) + if src_len <= 0 or dst_len <= 0: + raise ValueError((src_len, dst_len)) + + i = np.arange(src_len, dtype=np.int64) + idx = (i * dst_len + src_len - 1) // src_len + idx = np.clip(idx, 0, dst_len - 1) + return idx.astype(np.int64) + + +def recover_source_from_bad_nearest_resize( + bad_dst_ids: np.ndarray, + source_size: Tuple[int, int], +) -> np.ndarray: + """ + Recupera a fonte categórica exata de um cv2.resize INTER_NEAREST de ampliação, + quando cada pixel da fonte possui ao menos um representante no destino. + + source_size = (W, H), ex.: 960x600. + bad_dst_ids = ex.: 1280x800. + """ + src_w, src_h = [int(v) for v in source_size] + dst_h, dst_w = bad_dst_ids.shape[:2] + + if dst_w < src_w or dst_h < src_h: + raise RuntimeError( + "A máscara contaminada é menor que a fonte que tentamos recuperar; " + f"dst={dst_w}x{dst_h} src={src_w}x{src_h}. " + "A inversa exata deste incidente exige que o resize errado tenha sido ampliação." + ) + + xs = nearest_inverse_sample_indices(src_w, dst_w) + ys = nearest_inverse_sample_indices(src_h, dst_h) + + recovered = bad_dst_ids[np.ix_(ys, xs)].astype(np.uint8, copy=True) + + # Prova forense do resize errado. + replay = cv2.resize( + recovered, + (dst_w, dst_h), + interpolation=cv2.INTER_NEAREST, + ) + if not np.array_equal(replay, bad_dst_ids): + mismatch = int(np.count_nonzero(replay != bad_dst_ids)) + raise RuntimeError( + "A máscara atual NÃO é explicada exatamente por " + f"{src_w}x{src_h} -> {dst_w}x{dst_h} INTER_NEAREST. " + f"Pixels divergentes no replay={mismatch}. Não vou recuperar automaticamente." + ) + + return recovered + + +def forward_normalize_mask( + raw_ids: np.ndarray, + geom: GeometryInfo, +) -> np.ndarray: + """ + Reproduz o contrato do _6_normalize.py: + raw/ref -> crop_box -> resize target INTER_NEAREST + """ + if raw_ids.shape[:2] != (geom.ref_h, geom.ref_w): + raise RuntimeError( + f"raw_ids não está em ref_shape: mask={raw_ids.shape[::-1]} " + f"ref={geom.ref_w}x{geom.ref_h}" + ) + + x0, y0, x1, y1 = geom.crop_box + roi = raw_ids[y0:y1, x0:x1] + + if roi.shape[:2] != (geom.target_h, geom.target_w): + roi = cv2.resize( + roi, + (geom.target_w, geom.target_h), + interpolation=cv2.INTER_NEAREST, + ) + + return roi.astype(np.uint8, copy=False) + + +def backproject_target_to_raw( + target_ids: np.ndarray, + geom: GeometryInfo, + ignore_id: int, +) -> np.ndarray: + """ + Constrói uma máscara RAW/ref consistente com target_ids. + + - Exterior do crop: IGNORE. + - Interior: expansão nearest da target para o tamanho da ROI. + - Depois "crava" exatamente nos pixels que o forward INTER_NEAREST irá amostrar, + garantindo round-trip exato sempre que o alvo for representável. + + Observação: + Pixels internos da ROI que não são amostrados no target são uma reconstrução + categórica consistente, não a anotação RAW histórica perdida. + """ + if target_ids.shape[:2] != (geom.target_h, geom.target_w): + raise RuntimeError( + f"target_ids={target_ids.shape[::-1]} esperado={geom.target_w}x{geom.target_h}" + ) + + x0, y0, x1, y1 = geom.crop_box + crop_w = x1 - x0 + crop_h = y1 - y0 + + # Preenchimento denso para permitir revisão humana futura. + roi = cv2.resize( + target_ids, + (crop_w, crop_h), + interpolation=cv2.INTER_NEAREST, + ).astype(np.uint8, copy=True) + + # Índices que o forward crop->target realmente amostra: + # src_idx = floor(dst_idx * crop_len / target_len) + sample_x = np.floor( + np.arange(geom.target_w, dtype=np.float64) * crop_w / geom.target_w + ).astype(np.int64) + sample_y = np.floor( + np.arange(geom.target_h, dtype=np.float64) * crop_h / geom.target_h + ).astype(np.int64) + sample_x = np.clip(sample_x, 0, crop_w - 1) + sample_y = np.clip(sample_y, 0, crop_h - 1) + + # Caso dois pixels target dependam do mesmo pixel da ROI com IDs diferentes, + # o target não é representável pelo resize inverso. Detectamos fail-closed. + seen: Dict[Tuple[int, int], int] = {} + for ty, sy in enumerate(sample_y.tolist()): + for tx, sx in enumerate(sample_x.tolist()): + key = (int(sy), int(sx)) + val = int(target_ids[ty, tx]) + old = seen.get(key) + if old is not None and old != val: + raise RuntimeError( + "Target final não é representável exatamente no crop RAW com " + "INTER_NEAREST: múltiplos pixels target exigem classes diferentes " + f"do mesmo pixel ROI={key}. Isso costuma ocorrer apenas em upsample." + ) + seen[key] = val + + # Crava os pixels amostrados. + roi[np.ix_(sample_y, sample_x)] = target_ids + + raw = np.full( + (geom.ref_h, geom.ref_w), + int(ignore_id), + dtype=np.uint8, + ) + raw[y0:y1, x0:x1] = roi + + # Prova do caminho normalize. + replay = forward_normalize_mask(raw, geom) + if not np.array_equal(replay, target_ids): + mismatch = int(np.count_nonzero(replay != target_ids)) + raise RuntimeError( + f"Round-trip RAW -> crop -> target falhou: {mismatch} pixels divergentes." + ) + + return raw + + +# ============================================================ +# Fonte opcional: final_masks antigas +# ============================================================ + +class ReviewFinalIndex: + def __init__(self, root: Optional[Path]): + self.root = root.resolve() if root else None + self.by_base: Dict[str, List[Path]] = defaultdict(list) + + if self.root is None: + return + if not self.root.is_dir(): + raise FileNotFoundError(f"--review-final-root não encontrado: {self.root}") + + for p in self.root.rglob("*.png"): + if p.parent.name.lower() == "final_masks": + self.by_base[p.stem].append(p.resolve()) + + def resolve( + self, + group: str, + base: str, + target_size: Tuple[int, int], + ) -> Optional[Path]: + if self.root is None: + return None + + # Prioridade exata: root/group/final_masks/base.png + exact = self.root / group / "final_masks" / f"{base}.png" + if exact.is_file(): + img = cv2.imread(str(exact), cv2.IMREAD_COLOR) + if img is not None and (img.shape[1], img.shape[0]) == target_size: + return exact.resolve() + + candidates = [] + for p in self.by_base.get(base, []): + img = cv2.imread(str(p), cv2.IMREAD_COLOR) + if img is not None and (img.shape[1], img.shape[0]) == target_size: + candidates.append(p) + + if len(candidates) == 1: + return candidates[0] + return None + + +# ============================================================ +# Recuperação de uma máscara +# ============================================================ + +def recover_one( + item: InventoryItem, + brutas_root: Path, + classes: Dict[int, Tuple[str, Tuple[int, int, int]]], + ignore_id: int, + target_size: Tuple[int, int], + geom_resolver: GeometryResolver, + staging_root: Path, + review_index: ReviewFinalIndex, + mtime_tolerance_seconds: float, +) -> dict: + row: Dict[str, Any] = { + "group_inventory": item.group, + "base": item.base, + "classification": item.classification, + "mask_current": str(item.mask_path), + "status": "ERROR", + "error": "", + } + + try: + if not item.mask_path.is_file(): + raise FileNotFoundError(f"Máscara atual não encontrada: {item.mask_path}") + + stat = item.mask_path.stat() + current_mtime = float(stat.st_mtime) + row["mtime_current_epoch"] = current_mtime + row["mtime_inventory_epoch"] = item.inventory_mtime_epoch + + if item.inventory_mtime_epoch is not None: + delta = abs(current_mtime - item.inventory_mtime_epoch) + row["mtime_delta_seconds"] = delta + if delta > float(mtime_tolerance_seconds): + raise RuntimeError( + f"mtime mudou desde o inventário: delta={delta:.3f}s. " + "Pode ter havido edição posterior; não vou tocar." + ) + + bad_bgr = cv2.imread(str(item.mask_path), cv2.IMREAD_COLOR) + if bad_bgr is None: + raise RuntimeError(f"Falha ao abrir máscara contaminada: {item.mask_path}") + + bad_h, bad_w = bad_bgr.shape[:2] + row["bad_width"] = bad_w + row["bad_height"] = bad_h + + if item.width is not None and int(item.width) != bad_w: + raise RuntimeError(f"width mudou desde inventário: {item.width} -> {bad_w}") + if item.height is not None and int(item.height) != bad_h: + raise RuntimeError(f"height mudou desde inventário: {item.height} -> {bad_h}") + + bad_ids = decode_color_mask_bgr(bad_bgr, classes, ignore_id) + + # -------------------------------------------------------- + # Fonte da máscara final/tensor: + # 1) antiga final_mask 960x600, se existir; + # 2) inversa exata do resize errado. + # -------------------------------------------------------- + review_final = review_index.resolve(item.group, item.base, target_size) + if review_final is not None: + src_bgr = cv2.imread(str(review_final), cv2.IMREAD_COLOR) + if src_bgr is None: + raise RuntimeError(f"Falha ao abrir review final antiga: {review_final}") + target_ids = decode_color_mask_bgr(src_bgr, classes, ignore_id) + row["target_source"] = "review_final_existing" + row["target_source_path"] = str(review_final) + + # Mesmo tendo final antiga, valida se ela explica a contaminada. + replay_bad = cv2.resize( + target_ids, + (bad_w, bad_h), + interpolation=cv2.INTER_NEAREST, + ) + if not np.array_equal(replay_bad, bad_ids): + mismatch = int(np.count_nonzero(replay_bad != bad_ids)) + raise RuntimeError( + f"final_mask antiga não explica exatamente a máscara contaminada: " + f"{mismatch} pixels divergentes." + ) + else: + target_ids = recover_source_from_bad_nearest_resize( + bad_ids, + source_size=target_size, + ) + row["target_source"] = "exact_inverse_bad_resize" + row["target_source_path"] = "" + + target_w, target_h = target_size + if target_ids.shape[:2] != (target_h, target_w): + raise RuntimeError( + f"Máscara final recuperada tem shape errado: " + f"{target_ids.shape[::-1]} esperado={target_w}x{target_h}" + ) + + # -------------------------------------------------------- + # Resolve bundle e geometria real do RawProcessorCore. + # -------------------------------------------------------- + bundle = resolve_bundle(brutas_root, item.group, item.base) + row["group_bundle"] = bundle.group + row["meta_path"] = str(bundle.meta_path) + + if bundle.mask_path.resolve() != item.mask_path.resolve(): + raise RuntimeError( + "Bundle resolveu para outra máscara física. " + f"inventory={item.mask_path} bundle={bundle.mask_path}" + ) + + meta = load_json(bundle.meta_path) + geom = geom_resolver.resolve(bundle, meta) + + row["geometry_signature"] = geom.signature + row["ref_width"] = geom.ref_w + row["ref_height"] = geom.ref_h + row["target_width"] = geom.target_w + row["target_height"] = geom.target_h + row["crop_box"] = ",".join(str(v) for v in geom.crop_box) + row["crop_applied"] = int(geom.crop_applied) + row["module_params"] = geom.module_params + + # O arquivo contaminado tinha sido escrito no tamanho raw_size. + # Para este incidente esperamos que seja exatamente o ref_shape da RGB. + if (bad_w, bad_h) != (geom.ref_w, geom.ref_h): + raise RuntimeError( + "Tamanho atual da máscara não bate com ref_shape do RawProcessorCore: " + f"mask={bad_w}x{bad_h} ref={geom.ref_w}x{geom.ref_h}. " + "Não vou inferir escalas adicionais." + ) + + # -------------------------------------------------------- + # Back-projection para espaço RAW + IGNORE fora do crop. + # -------------------------------------------------------- + raw_recovered = backproject_target_to_raw( + target_ids=target_ids, + geom=geom, + ignore_id=ignore_id, + ) + + normalized_replay = forward_normalize_mask(raw_recovered, geom) + if not np.array_equal(normalized_replay, target_ids): + # redundante de propósito + mismatch = int(np.count_nonzero(normalized_replay != target_ids)) + raise RuntimeError(f"Round-trip final falhou: {mismatch} pixels") + + # Verifica exterior do crop 100% ignore. + x0, y0, x1, y1 = geom.crop_box + outside = np.ones((geom.ref_h, geom.ref_w), dtype=bool) + outside[y0:y1, x0:x1] = False + outside_n = int(outside.sum()) + outside_ignore = int((raw_recovered[outside] == ignore_id).sum()) + if outside_n and outside_ignore != outside_n: + raise RuntimeError( + f"Exterior do crop não ficou 100% IGNORE: {outside_ignore}/{outside_n}" + ) + + stage_path = staging_root / bundle.group / "masks" / f"{bundle.base}.png" + ensure_dir(stage_path.parent) + stage_bgr = ids_to_bgr(raw_recovered, classes, ignore_id) + + ok = cv2.imwrite( + str(stage_path), + stage_bgr, + [cv2.IMWRITE_PNG_COMPRESSION, 1], + ) + if not ok: + raise RuntimeError(f"Falha ao escrever staging: {stage_path}") + + # Reabre o staging, valida paleta e round-trip após serialização. + reopened = cv2.imread(str(stage_path), cv2.IMREAD_COLOR) + reopened_ids = decode_color_mask_bgr(reopened, classes, ignore_id) + if not np.array_equal(reopened_ids, raw_recovered): + raise RuntimeError("Staging PNG não preservou os IDs exatamente.") + + replay_after_png = forward_normalize_mask(reopened_ids, geom) + if not np.array_equal(replay_after_png, target_ids): + raise RuntimeError("Round-trip falhou após serialização PNG.") + + vals, counts = np.unique(raw_recovered, return_counts=True) + id_counts = {str(int(v)): int(c) for v, c in zip(vals, counts)} + + row.update({ + "status": "RECOVERED_EXACT", + "error": "", + "staging_path": str(stage_path), + "sha256_bad_before": sha256_file(item.mask_path), + "sha256_recovered": sha256_file(stage_path), + "roundtrip_bad_resize_exact": 1, + "roundtrip_normalize_exact": 1, + "outside_crop_pixels": outside_n, + "outside_crop_ignore_pixels": outside_ignore, + "outside_crop_ignore_pct": 100.0 if outside_n else 0.0, + "raw_ignore_pixels": int((raw_recovered == ignore_id).sum()), + "raw_ignore_pct": float(100.0 * (raw_recovered == ignore_id).mean()), + "raw_id_counts_json": json.dumps(id_counts, sort_keys=True), + }) + + except Exception as exc: + row["status"] = "ERROR" + row["error"] = f"{type(exc).__name__}: {exc}" + + return row + + +# ============================================================ +# Backup + apply +# ============================================================ + +def backup_and_apply( + successful_rows: List[dict], + backup_root: Path, +) -> List[dict]: + """ + Backup obrigatório + replace atômico. + Revalida mtime/hash da máscara atual antes de sobrescrever. + """ + apply_rows: List[dict] = [] + + # Fase 1: backup de todos primeiro. + for row in successful_rows: + current = Path(row["mask_current"]) + staging = Path(row["staging_path"]) + group = str(row.get("group_bundle") or row["group_inventory"]) + base = str(row["base"]) + + if not current.is_file() or not staging.is_file(): + raise RuntimeError(f"Arquivo sumiu antes do apply: current={current} staging={staging}") + + sha_now = sha256_file(current) + if sha_now != row["sha256_bad_before"]: + raise RuntimeError( + f"Máscara mudou depois do recovery dry-run/processamento: {current}. " + "Hash atual não bate com o hash analisado." + ) + + backup_path = backup_root / group / "masks" / f"{base}.png" + ensure_dir(backup_path.parent) + shutil.copy2(current, backup_path) + + if sha256_file(backup_path) != sha_now: + raise RuntimeError(f"Backup não validou SHA256: {backup_path}") + + row["backup_path"] = str(backup_path) + + # Fase 2: aplica somente depois que TODOS os backups existem. + for row in successful_rows: + current = Path(row["mask_current"]) + staging = Path(row["staging_path"]) + + recovered_bgr = cv2.imread(str(staging), cv2.IMREAD_COLOR) + if recovered_bgr is None: + raise RuntimeError(f"Falha ao reabrir staging antes do apply: {staging}") + + atomic_write_png(current, recovered_bgr) + + sha_after = sha256_file(current) + if sha_after != row["sha256_recovered"]: + raise RuntimeError( + f"SHA após apply não bate com staging: current={current} staging={staging}" + ) + + apply_rows.append({ + "group": row.get("group_bundle") or row["group_inventory"], + "base": row["base"], + "mask": str(current), + "backup": row.get("backup_path", ""), + "staging": str(staging), + "sha256_after": sha_after, + "status": "APPLIED", + }) + + return apply_rows + + +# ============================================================ +# Auto-testes puros +# ============================================================ + +def run_self_tests() -> dict: + rng = np.random.default_rng(42) + + # Testa inversa do resize errado 960x600 -> 1280x800. + src = rng.integers(0, 4, size=(600, 960), dtype=np.uint8) + bad = cv2.resize(src, (1280, 800), interpolation=cv2.INTER_NEAREST) + rec = recover_source_from_bad_nearest_resize(bad, (960, 600)) + if not np.array_equal(src, rec): + raise RuntimeError("SELFTEST falhou: inverse bad resize") + + # Testa backprojection com crop arbitrário maior que target. + geom = GeometryInfo( + ref_h=800, + ref_w=1280, + target_w=960, + target_h=600, + crop_box=(61, 37, 1214, 765), + crop_applied=True, + module_params="selftest", + signature="selftest", + fusion_result={}, + ) + target = rng.integers(0, 4, size=(600, 960), dtype=np.uint8) + raw = backproject_target_to_raw(target, geom, ignore_id=255) + replay = forward_normalize_mask(raw, geom) + if not np.array_equal(target, replay): + raise RuntimeError("SELFTEST falhou: raw backprojection roundtrip") + + return { + "inverse_bad_resize": "OK", + "raw_backprojection_roundtrip": "OK", + } + + +# ============================================================ +# Main +# ============================================================ + +def main() -> None: + parser = argparse.ArgumentParser( + description="Recupera máscaras RAW contaminadas por review/tensor-space aplicado como resize simples." + ) + parser.add_argument("--brutas-root", required=True, help="dataset/brutas/group") + parser.add_argument("--inventory", required=True, help="mask_domain_inventory.csv gerado pelo auditor do incidente") + parser.add_argument( + "--module-params", + required=True, + help="module_params histórico AUTORITATIVO. Para este incidente, use o perfil OV9782 congelado.", + ) + parser.add_argument("--labelmap", default=None, help="Opcional. Default usa a paleta oficial chao/cana/erva do projeto.") + parser.add_argument("--target-size", type=parse_wh, default=DEFAULT_TARGET_SIZE, help="Default 960x600") + parser.add_argument( + "--classification", + default=DEFAULT_RECOVER_CLASSIFICATION, + help=f"Default: {DEFAULT_RECOVER_CLASSIFICATION}", + ) + parser.add_argument( + "--geometry-mode", + choices=["per_signature", "per_sample"], + default="per_signature", + help="Default per_signature: executa RawProcessorCore uma vez por assinatura geométrica.", + ) + parser.add_argument( + "--review-final-root", + default=None, + help="Opcional: raiz group/ antiga contendo /final_masks/*.png em target-size.", + ) + parser.add_argument( + "--out-dir", + default="audit/mask_domain_recovery", + help="Staging + relatórios. Default audit/mask_domain_recovery", + ) + parser.add_argument( + "--mtime-tolerance-seconds", + type=float, + default=1.0, + help="Falha se mtime atual divergir do inventário mais que isso. Default 1s.", + ) + parser.add_argument("--max-items", type=int, default=0, help="Debug. 0=todos.") + parser.add_argument( + "--apply", + action="store_true", + help="Aplica staging nas brutas após backup obrigatório. Sem esta flag é DRY-RUN.", + ) + parser.add_argument( + "--allow-partial", + action="store_true", + help="Com --apply, permite aplicar os sucessos mesmo se alguns itens falharem. Default: recusado.", + ) + parser.add_argument( + "--backup-root", + default=None, + help="Opcional. Default cria backup/mask_domain_recovery_.", + ) + parser.add_argument("--print-every", type=int, default=50) + args = parser.parse_args() + + if args.max_items < 0: + parser.error("--max-items deve ser >= 0") + if args.print_every <= 0: + parser.error("--print-every deve ser > 0") + if args.mtime_tolerance_seconds < 0: + parser.error("--mtime-tolerance-seconds deve ser >= 0") + + brutas_root = Path(args.brutas_root).resolve() + inventory_path = Path(args.inventory).resolve() + module_params_path = Path(args.module_params).resolve() + labelmap_path = Path(args.labelmap).resolve() if args.labelmap else None + review_final_root = Path(args.review_final_root).resolve() if args.review_final_root else None + out_dir = Path(args.out_dir).resolve() + + if not brutas_root.is_dir(): + raise FileNotFoundError(f"--brutas-root não encontrado: {brutas_root}") + if not inventory_path.is_file(): + raise FileNotFoundError(f"--inventory não encontrado: {inventory_path}") + if not module_params_path.is_file(): + raise FileNotFoundError( + f"--module-params não encontrado: {module_params_path}. " + "Fail-closed: não há fallback para outro profile." + ) + if labelmap_path is not None and not labelmap_path.is_file(): + raise FileNotFoundError(f"--labelmap não encontrado: {labelmap_path}") + + ensure_dir(out_dir) + staging_root = ensure_dir(out_dir / "staging") + report_path = out_dir / "recovery_report.csv" + summary_path = out_dir / "recovery_summary.json" + apply_report_path = out_dir / "recovery_apply_report.csv" + + print("=" * 78) + print("MASK DOMAIN RECOVERY - SALVADOR DA PATRIA") + print(f"Brutas root : {brutas_root}") + print(f"Inventory : {inventory_path}") + print(f"Classification : {args.classification}") + print(f"Module params : {module_params_path}") + print(f"Module SHA256 : {sha256_file(module_params_path)}") + print(f"Target size : {args.target_size[0]}x{args.target_size[1]}") + print(f"Geometry mode : {args.geometry_mode}") + print(f"Review finals : {review_final_root}") + print(f"Out / staging : {out_dir}") + print(f"Mode : {'APPLY' if args.apply else 'DRY-RUN'}") + print("=" * 78) + + self_tests = run_self_tests() + print(f"[SELFTEST] {self_tests}") + + classes = load_labelmap_classes(labelmap_path) + ignore_id = DEFAULT_IGNORE_ID + + items, untouched_rows = load_inventory( + inventory_path=inventory_path, + brutas_root=brutas_root, + wanted_classification=args.classification, + ) + + if args.max_items > 0: + items = items[: args.max_items] + + print(f"[INFO] candidatos selecionados do inventário: {len(items)}") + print(f"[INFO] linhas preservadas/não selecionadas : {len(untouched_rows)}") + + review_index = ReviewFinalIndex(review_final_root) + geom_resolver = GeometryResolver( + module_params_path=module_params_path, + target_size=args.target_size, + mode=args.geometry_mode, + ) + + rows: List[dict] = [] + t0 = time.perf_counter() + + for i, item in enumerate(items, 1): + row = recover_one( + item=item, + brutas_root=brutas_root, + classes=classes, + ignore_id=ignore_id, + target_size=args.target_size, + geom_resolver=geom_resolver, + staging_root=staging_root, + review_index=review_index, + mtime_tolerance_seconds=args.mtime_tolerance_seconds, + ) + rows.append(row) + + if i % args.print_every == 0 or i == len(items): + ok_n = sum(r.get("status") == "RECOVERED_EXACT" for r in rows) + err_n = len(rows) - ok_n + print( + f"[{i:5d}/{len(items)}] recovered={ok_n:5d} errors={err_n:4d} " + f"core_runs={geom_resolver.core_runs:3d} " + f"last={row.get('status')} {item.group}/{item.base}" + ) + if row.get("status") != "RECOVERED_EXACT": + print(f" ERROR: {row.get('error')}") + + elapsed = time.perf_counter() - t0 + + # Acrescenta preservados ao relatório geral só como referência, sem staging. + full_report_rows = list(rows) + untouched_rows + write_csv(report_path, full_report_rows) + + status_counts = Counter(str(r.get("status", "")) for r in rows) + recovered_rows = [r for r in rows if r.get("status") == "RECOVERED_EXACT"] + error_rows = [r for r in rows if r.get("status") != "RECOVERED_EXACT"] + + by_group = defaultdict(lambda: Counter()) + for r in rows: + g = str(r.get("group_inventory", "")) + by_group[g][str(r.get("status", ""))] += 1 + + source_counts = Counter(str(r.get("target_source", "")) for r in recovered_rows) + geometry_signatures = Counter(str(r.get("geometry_signature", "")) for r in recovered_rows) + + summary = { + "schema": "mask_domain_recovery_v1", + "created_at": datetime.now().astimezone().isoformat(timespec="seconds"), + "mode": "apply_requested" if args.apply else "dry_run", + "brutas_root": str(brutas_root), + "inventory": str(inventory_path), + "selected_classification": args.classification, + "module_params": str(module_params_path), + "module_params_sha256": sha256_file(module_params_path), + "labelmap": str(labelmap_path) if labelmap_path else "built_in_project_palette", + "target_size": list(args.target_size), + "ignore_id": ignore_id, + "geometry_mode": args.geometry_mode, + "core_runs": int(geom_resolver.core_runs), + "review_final_root": str(review_final_root) if review_final_root else None, + "self_tests": self_tests, + "selected_items": len(items), + "recovered_exact": len(recovered_rows), + "errors": len(error_rows), + "status_counts": dict(status_counts), + "target_source_counts": dict(source_counts), + "geometry_signatures": dict(geometry_signatures), + "by_group": {g: dict(c) for g, c in sorted(by_group.items())}, + "preserved_inventory_rows": len(untouched_rows), + "elapsed_seconds": elapsed, + "staging_root": str(staging_root), + "report_csv": str(report_path), + "safety_contract": { + "outside_crop": "IGNORE", + "bad_resize_must_roundtrip_exact": True, + "normalize_roundtrip_must_be_exact": True, + "mtime_must_match_inventory": True, + "backup_required_before_apply": True, + "atomic_replace": True, + "apply_requires_zero_errors_by_default": True, + }, + } + + # -------------------------------------------------------- + # APPLY + # -------------------------------------------------------- + apply_rows: List[dict] = [] + if args.apply: + if error_rows and not args.allow_partial: + summary["apply_status"] = "REFUSED_DUE_TO_ERRORS" + summary["apply_refusal_reason"] = ( + f"{len(error_rows)} itens falharam. " + "Corrija/investigue antes ou use --allow-partial conscientemente." + ) + write_json(summary_path, summary) + print("\n[APPLY][REFUSED] Existem erros. NADA foi sobrescrito.") + print(f"Erros: {len(error_rows)}") + print(f"Veja: {report_path}") + print("=" * 78) + return + + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + if args.backup_root: + backup_root = Path(args.backup_root).resolve() + else: + backup_root = (Path.cwd() / "backup" / f"mask_domain_recovery_{timestamp}").resolve() + + ensure_dir(backup_root) + print(f"\n[APPLY] Backup obrigatório: {backup_root}") + print(f"[APPLY] Máscaras a aplicar : {len(recovered_rows)}") + + apply_rows = backup_and_apply( + successful_rows=recovered_rows, + backup_root=backup_root, + ) + write_csv(apply_report_path, apply_rows) + + summary["apply_status"] = "APPLIED" + summary["backup_root"] = str(backup_root) + summary["applied_masks"] = len(apply_rows) + summary["apply_report_csv"] = str(apply_report_path) + else: + summary["apply_status"] = "DRY_RUN_ONLY" + summary["applied_masks"] = 0 + + write_json(summary_path, summary) + + print("\n" + "=" * 78) + print("RECOVERY FINALIZADO") + print(f"Selecionadas : {len(items)}") + print(f"Recuperadas exatas : {len(recovered_rows)}") + print(f"Erros : {len(error_rows)}") + print(f"Core runs : {geom_resolver.core_runs}") + print(f"Tempo : {elapsed:.1f}s") + print(f"Staging : {staging_root}") + print(f"Report : {report_path}") + print(f"Summary : {summary_path}") + if args.apply: + print(f"Aplicadas : {len(apply_rows)}") + print(f"Apply report : {apply_report_path}") + print(f"Backup : {summary.get('backup_root')}") + else: + print("Nenhuma máscara das brutas foi alterada. DRY-RUN.") + print("=" * 78) + + +if __name__ == "__main__": + try: + main() + except Exception: + traceback.print_exc() + sys.exit(1) diff --git a/Python/OAK/datasets/oak-fcc-3/_7_split.py b/Python/OAK/datasets/oak-fcc-3/_7_split.py index efb328082..ef70f18c7 100644 --- a/Python/OAK/datasets/oak-fcc-3/_7_split.py +++ b/Python/OAK/datasets/oak-fcc-3/_7_split.py @@ -54,6 +54,8 @@ python _7_split.py ^ --synthetic-train-only ^ --synthetic-respect-family-split ^ --clear-dst + +python .\_7_split.py --src-root dataset/960x600/group --train 0.85 --val 0.15 --test 0 --strategy agri_diverse --use-tensor-features --merge-near-duplicate-families --seed 42 --clear-dst """ from __future__ import annotations diff --git a/Python/OAK/datasets/oak-fcc-3/config.json b/Python/OAK/datasets/oak-fcc-3/config.json index 83c070913..33dba540b 100644 --- a/Python/OAK/datasets/oak-fcc-3/config.json +++ b/Python/OAK/datasets/oak-fcc-3/config.json @@ -1,7 +1,7 @@ { "camera": "oak-fcc-3", "modelo": "segformer_b1", - "model_name": "2026_09_08", + "model_name": "2026_09_18", "main_class_name": "erva", "es_classes": "", "model_to_use": "geral",