ajustado mapeamento gps na operacao

This commit is contained in:
Diego Freitas 2024-02-23 14:52:42 -03:00
parent dc0f811d84
commit db9177b881
77 changed files with 6906 additions and 3080 deletions

28
API/app.py Normal file
View File

@ -0,0 +1,28 @@
from flask import Flask, request, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app) # Isso habilita o CORS para todas as rotas e origens
coordenadas = {}
@app.route('/receber-coordenadas', methods=['POST'])
def receber_coordenadas():
dados = request.json
id = dados.get('id')
lat = dados.get('latitude')
lon = dados.get('longitude')
coordenadas[id] = {'latitude': lat, 'longitude': lon}
return jsonify({'status': 'Coordenadas recebidas com sucesso!'})
@app.route('/servir-coordenadas/<id>', methods=['GET'])
def servir_coordenadas(id):
if id in coordenadas:
return jsonify(coordenadas[id])
else:
return jsonify({'error': 'Coordenadas não encontradas!'}), 404
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5001, debug=True)

Binary file not shown.

View File

@ -296,6 +296,7 @@
<Compile Include="Models\MotorComum.cs" />
<Compile Include="Models\Operacoes\OperacaoModel.cs" />
<Compile Include="Models\Variaveis.cs" />
<Compile Include="Services\APIService.cs" />
<Compile Include="Services\CameraService.cs" />
<Compile Include="Services\DispositivosService.cs" />
<Compile Include="Forms\frmPrincipal.cs">
@ -313,6 +314,7 @@
<Compile Include="Services\PythonService.cs" />
<Compile Include="Services\SerialService.cs" />
<Compile Include="Services\SocketService.cs" />
<Content Include="Imagens\loading.gif" />
<Content Include="Python\Models\deeplabv3plus\backbone\hrnetv2.py">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
@ -340,6 +342,9 @@
<Content Include="Python\Models\deeplabv3plus\__init__.py">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Python\Scripts\api.py">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Python\Scripts\street-detector.py">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
@ -590,6 +595,7 @@
</ItemGroup>
<ItemGroup>
<Folder Include="Python\Output\" />
<Folder Include="Resources\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">

View File

@ -29,14 +29,15 @@ namespace AgroBase.Forms.Operacoes
/// </summary>
private void InitializeComponent()
{
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend();
System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
this.pnlCameraSolo = new System.Windows.Forms.Panel();
this.pnlCameraSoloD = new System.Windows.Forms.Panel();
this.pnlCameraSoloE = new System.Windows.Forms.Panel();
this.pnlCameraCaminho = new System.Windows.Forms.Panel();
this.pnlAtuadores = new System.Windows.Forms.Panel();
this.lblPressao = new System.Windows.Forms.Label();
this.pnlCaminho = new System.Windows.Forms.Panel();
this.pnlGraficos = new System.Windows.Forms.Panel();
this.chartGraficos = new System.Windows.Forms.DataVisualization.Charting.Chart();
@ -48,6 +49,7 @@ namespace AgroBase.Forms.Operacoes
this.lblPorcentagemReservatorio = new System.Windows.Forms.Label();
this.pgbReservatorio = new System.Windows.Forms.ProgressBar();
this.gpbOpcoes = new System.Windows.Forms.GroupBox();
this.btnCarregarMapa = new System.Windows.Forms.Button();
this.cmbCameraSoloD = new System.Windows.Forms.ComboBox();
this.lblCameraSoloD = new System.Windows.Forms.Label();
this.btnIniciarOperacao = new System.Windows.Forms.Button();
@ -55,8 +57,6 @@ namespace AgroBase.Forms.Operacoes
this.lblCameraCaminho = new System.Windows.Forms.Label();
this.cmbCameraSoloE = new System.Windows.Forms.ComboBox();
this.lblCameraSoloE = new System.Windows.Forms.Label();
this.btnCarregarMapa = new System.Windows.Forms.Button();
this.lblMapaCarregado = new System.Windows.Forms.Label();
this.gpbInformacoesGerais = new System.Windows.Forms.GroupBox();
this.lblBateriaConsumida = new System.Windows.Forms.Label();
this.lblHerbicidaPorErva = new System.Windows.Forms.Label();
@ -69,6 +69,7 @@ namespace AgroBase.Forms.Operacoes
this.lblDistanciaEsquerda = new System.Windows.Forms.Label();
this.lblDistanciaDireita = new System.Windows.Forms.Label();
this.pnlInferior = new System.Windows.Forms.Panel();
this.lblMapaCarregado = new System.Windows.Forms.Label();
this.chbGPSativo = new System.Windows.Forms.CheckBox();
this.chbATUativo = new System.Windows.Forms.CheckBox();
this.chbDIRativo = new System.Windows.Forms.CheckBox();
@ -76,7 +77,7 @@ namespace AgroBase.Forms.Operacoes
this.lblUltimaLeituraRua = new System.Windows.Forms.Label();
this.lblUltimaLeituraSolo = new System.Windows.Forms.Label();
this.pnlMapa = new System.Windows.Forms.Panel();
this.lblPressao = new System.Windows.Forms.Label();
this.pnlOrientacao = new System.Windows.Forms.Panel();
this.pnlCameraSolo.SuspendLayout();
this.pnlAtuadores.SuspendLayout();
this.pnlGraficos.SuspendLayout();
@ -135,6 +136,15 @@ namespace AgroBase.Forms.Operacoes
this.pnlAtuadores.TabIndex = 2;
this.pnlAtuadores.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlAtuadores_Paint);
//
// lblPressao
//
this.lblPressao.AutoSize = true;
this.lblPressao.Location = new System.Drawing.Point(-2, 0);
this.lblPressao.Name = "lblPressao";
this.lblPressao.Size = new System.Drawing.Size(57, 13);
this.lblPressao.TabIndex = 0;
this.lblPressao.Text = "P: 0.00 psi";
//
// pnlCaminho
//
this.pnlCaminho.BackColor = System.Drawing.Color.White;
@ -156,18 +166,18 @@ namespace AgroBase.Forms.Operacoes
//
// chartGraficos
//
chartArea1.Name = "ChartArea1";
this.chartGraficos.ChartAreas.Add(chartArea1);
chartArea2.Name = "ChartArea1";
this.chartGraficos.ChartAreas.Add(chartArea2);
this.chartGraficos.Dock = System.Windows.Forms.DockStyle.Fill;
legend1.Name = "Legend1";
this.chartGraficos.Legends.Add(legend1);
legend2.Name = "Legend1";
this.chartGraficos.Legends.Add(legend2);
this.chartGraficos.Location = new System.Drawing.Point(0, 0);
this.chartGraficos.Margin = new System.Windows.Forms.Padding(2);
this.chartGraficos.Name = "chartGraficos";
series1.ChartArea = "ChartArea1";
series1.Legend = "Legend1";
series1.Name = "Series1";
this.chartGraficos.Series.Add(series1);
series2.ChartArea = "ChartArea1";
series2.Legend = "Legend1";
series2.Name = "Series1";
this.chartGraficos.Series.Add(series2);
this.chartGraficos.Size = new System.Drawing.Size(405, 254);
this.chartGraficos.TabIndex = 0;
this.chartGraficos.Text = "chart1";
@ -244,6 +254,7 @@ namespace AgroBase.Forms.Operacoes
//
// gpbOpcoes
//
this.gpbOpcoes.Controls.Add(this.btnCarregarMapa);
this.gpbOpcoes.Controls.Add(this.cmbCameraSoloD);
this.gpbOpcoes.Controls.Add(this.lblCameraSoloD);
this.gpbOpcoes.Controls.Add(this.btnIniciarOperacao);
@ -261,6 +272,17 @@ namespace AgroBase.Forms.Operacoes
this.gpbOpcoes.TabStop = false;
this.gpbOpcoes.Text = "Opções";
//
// btnCarregarMapa
//
this.btnCarregarMapa.Location = new System.Drawing.Point(4, 93);
this.btnCarregarMapa.Margin = new System.Windows.Forms.Padding(2);
this.btnCarregarMapa.Name = "btnCarregarMapa";
this.btnCarregarMapa.Size = new System.Drawing.Size(74, 21);
this.btnCarregarMapa.TabIndex = 5;
this.btnCarregarMapa.Text = "Mapa";
this.btnCarregarMapa.UseVisualStyleBackColor = true;
this.btnCarregarMapa.Click += new System.EventHandler(this.btnCarregarMapa_Click);
//
// cmbCameraSoloD
//
this.cmbCameraSoloD.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@ -284,10 +306,10 @@ namespace AgroBase.Forms.Operacoes
//
// btnIniciarOperacao
//
this.btnIniciarOperacao.Location = new System.Drawing.Point(7, 93);
this.btnIniciarOperacao.Location = new System.Drawing.Point(83, 93);
this.btnIniciarOperacao.Margin = new System.Windows.Forms.Padding(2);
this.btnIniciarOperacao.Name = "btnIniciarOperacao";
this.btnIniciarOperacao.Size = new System.Drawing.Size(187, 21);
this.btnIniciarOperacao.Size = new System.Drawing.Size(111, 21);
this.btnIniciarOperacao.TabIndex = 6;
this.btnIniciarOperacao.Text = "Iniciar Operação";
this.btnIniciarOperacao.UseVisualStyleBackColor = true;
@ -335,28 +357,6 @@ namespace AgroBase.Forms.Operacoes
this.lblCameraSoloE.TabIndex = 0;
this.lblCameraSoloE.Text = "Cam Solo E";
//
// btnCarregarMapa
//
this.btnCarregarMapa.Location = new System.Drawing.Point(280, 5);
this.btnCarregarMapa.Margin = new System.Windows.Forms.Padding(2);
this.btnCarregarMapa.Name = "btnCarregarMapa";
this.btnCarregarMapa.Size = new System.Drawing.Size(76, 22);
this.btnCarregarMapa.TabIndex = 5;
this.btnCarregarMapa.Text = "Carregar...";
this.btnCarregarMapa.UseVisualStyleBackColor = true;
this.btnCarregarMapa.Click += new System.EventHandler(this.btnCarregarMapa_Click);
//
// lblMapaCarregado
//
this.lblMapaCarregado.AutoSize = true;
this.lblMapaCarregado.Font = new System.Drawing.Font("Mongolian Baiti", 9F, System.Drawing.FontStyle.Bold);
this.lblMapaCarregado.Location = new System.Drawing.Point(11, 11);
this.lblMapaCarregado.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblMapaCarregado.Name = "lblMapaCarregado";
this.lblMapaCarregado.Size = new System.Drawing.Size(129, 13);
this.lblMapaCarregado.TabIndex = 8;
this.lblMapaCarregado.Text = "Mapa carregado: N/A";
//
// gpbInformacoesGerais
//
this.gpbInformacoesGerais.Controls.Add(this.lblBateriaConsumida);
@ -480,6 +480,7 @@ namespace AgroBase.Forms.Operacoes
//
// pnlInferior
//
this.pnlInferior.Controls.Add(this.lblMapaCarregado);
this.pnlInferior.Controls.Add(this.chbGPSativo);
this.pnlInferior.Controls.Add(this.chbATUativo);
this.pnlInferior.Controls.Add(this.chbDIRativo);
@ -493,6 +494,17 @@ namespace AgroBase.Forms.Operacoes
this.pnlInferior.Size = new System.Drawing.Size(592, 41);
this.pnlInferior.TabIndex = 13;
//
// lblMapaCarregado
//
this.lblMapaCarregado.AutoSize = true;
this.lblMapaCarregado.Font = new System.Drawing.Font("Mongolian Baiti", 9F, System.Drawing.FontStyle.Bold);
this.lblMapaCarregado.Location = new System.Drawing.Point(227, 24);
this.lblMapaCarregado.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblMapaCarregado.Name = "lblMapaCarregado";
this.lblMapaCarregado.Size = new System.Drawing.Size(129, 13);
this.lblMapaCarregado.TabIndex = 8;
this.lblMapaCarregado.Text = "Mapa carregado: N/A";
//
// chbGPSativo
//
this.chbGPSativo.AutoSize = true;
@ -555,19 +567,20 @@ namespace AgroBase.Forms.Operacoes
//
// pnlMapa
//
this.pnlMapa.Location = new System.Drawing.Point(9, 32);
this.pnlMapa.Location = new System.Drawing.Point(9, 6);
this.pnlMapa.Name = "pnlMapa";
this.pnlMapa.Size = new System.Drawing.Size(347, 181);
this.pnlMapa.Size = new System.Drawing.Size(347, 207);
this.pnlMapa.TabIndex = 14;
//
// lblPressao
// pnlOrientacao
//
this.lblPressao.AutoSize = true;
this.lblPressao.Location = new System.Drawing.Point(-2, 0);
this.lblPressao.Name = "lblPressao";
this.lblPressao.Size = new System.Drawing.Size(57, 13);
this.lblPressao.TabIndex = 0;
this.lblPressao.Text = "P: 0.00 psi";
this.pnlOrientacao.BackColor = System.Drawing.Color.White;
this.pnlOrientacao.Location = new System.Drawing.Point(936, 6);
this.pnlOrientacao.Margin = new System.Windows.Forms.Padding(2);
this.pnlOrientacao.Name = "pnlOrientacao";
this.pnlOrientacao.Size = new System.Drawing.Size(78, 84);
this.pnlOrientacao.TabIndex = 11;
this.pnlOrientacao.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlOrientacao_Paint);
//
// frmOperacaoSeguidorLinha
//
@ -575,14 +588,13 @@ namespace AgroBase.Forms.Operacoes
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(1020, 697);
this.Controls.Add(this.pnlOrientacao);
this.Controls.Add(this.lblDistanciaEsquerda);
this.Controls.Add(this.pnlMapa);
this.Controls.Add(this.pnlInferior);
this.Controls.Add(this.btnCarregarMapa);
this.Controls.Add(this.lblDistanciaDireita);
this.Controls.Add(this.pnlInclinacao);
this.Controls.Add(this.gpbInformacoesGerais);
this.Controls.Add(this.lblMapaCarregado);
this.Controls.Add(this.gpbOpcoes);
this.Controls.Add(this.pnlNiveis);
this.Controls.Add(this.pnlGraficos);
@ -636,7 +648,6 @@ namespace AgroBase.Forms.Operacoes
private System.Windows.Forms.Label lblCameraCaminho;
private System.Windows.Forms.ComboBox cmbCameraSoloE;
private System.Windows.Forms.Label lblCameraSoloE;
private System.Windows.Forms.Label lblMapaCarregado;
private System.Windows.Forms.GroupBox gpbInformacoesGerais;
private System.Windows.Forms.Label lblBateriaConsumida;
private System.Windows.Forms.Label lblHerbicidaPorErva;
@ -661,5 +672,7 @@ namespace AgroBase.Forms.Operacoes
private System.Windows.Forms.CheckBox chbDIRativo;
private System.Windows.Forms.CheckBox chbMOVativo;
private System.Windows.Forms.Label lblPressao;
private System.Windows.Forms.Label lblMapaCarregado;
private System.Windows.Forms.Panel pnlOrientacao;
}
}

View File

@ -26,8 +26,6 @@ namespace AgroBase.Forms.Operacoes
private CameraCaminhoModel cameraCaminho;
private ChromiumWebBrowser webMapa = null;
private Timer tmrLeituras = new Timer() { Interval = 200 };
DispositivosService<MovimentacaoModel> Movimentacao;
@ -48,6 +46,7 @@ namespace AgroBase.Forms.Operacoes
pnlAtuadores.GetType().GetMethod("SetStyle", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(pnlAtuadores, new object[] { ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true });
pnlCaminho.GetType().GetMethod("SetStyle", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(pnlCaminho, new object[] { ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true });
pnlInclinacao.GetType().GetMethod("SetStyle", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(pnlInclinacao, new object[] { ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true });
pnlOrientacao.GetType().GetMethod("SetStyle", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(pnlOrientacao, new object[] { ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true });
}
@ -89,7 +88,7 @@ namespace AgroBase.Forms.Operacoes
{
var listaCameras = new CameraService<object>().AtualizaListaCameras().ToArray();
var cameras = gpbOpcoes.Controls.OfType<ComboBox>().Where(x => x.Name.Contains("cmbCameraSolo")).ToList();
var cameras = gpbOpcoes.Controls.OfType<ComboBox>().Where(x => x.Name.Contains("cmbCameraSolo")).OrderBy(x => x.TabIndex).ToList();
foreach (ComboBox cmb in cameras)
{
string CamNome = cmb.Name.Replace("cmbCameraSolo", "");
@ -322,27 +321,12 @@ namespace AgroBase.Forms.Operacoes
private void btnCarregarMapa_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Arquivos de Imagem|*.jpg;*.jpeg;*.png;*.gif;*.bmp";
if (ofd.ShowDialog() == DialogResult.OK)
Variaveis.OperacaoEmAndamento.Mapa = new MapasModel()
{
string imagemPath = ofd.FileName;
// Cria um arquivo HTML temporário
string tempHtmlPath = Path.Combine(Path.GetTempPath(), "tempImage.html");
string htmlContent = $"<html><body style='margin:0;'><img src='file:///{imagemPath}' style='width:100%; height:100%;'></body></html>";
File.WriteAllText(tempHtmlPath, htmlContent);
if (webMapa == null)
{
webMapa = new ChromiumWebBrowser();
webMapa.Dock = DockStyle.Fill;
pnlMapa.Controls.Add(webMapa);
}
// Carrega o arquivo HTML no ChromiumWebBrowser
webMapa.Load(tempHtmlPath);
lblMapaCarregado.Text = "Mapa carregado: " + ofd.FileName.Split('\\')[ofd.FileName.Split('\\').Length - 1];
}
pnlMapa = pnlMapa,
lblMapa = lblMapaCarregado,
};
Variaveis.OperacaoEmAndamento.Mapa.btnCarregar_Click(sender, e);
}
private void btnIniciarOperacao_Click(object sender, EventArgs e)
@ -376,66 +360,6 @@ namespace AgroBase.Forms.Operacoes
private void TmrLeituras_Tick(object sender, EventArgs e)
{
/*
if (camSoloE.socket != null && camSoloE.socket.DadosRecebidos.Any())
{
var leitura = camSoloE.socket.DadosRecebidos.Last();
var Verdes = leitura.objetos.ToList();
int intervaloPorBico = Convert.ToInt32(camSoloE.socket.DadosRecebidos.First().x_max) / Atuador.Dados.QuantidadeBicos;
int inicioBarraPulverizadora = Convert.ToInt32(camSoloE.socket.DadosRecebidos.First().y_max * (1 - Atuador.Dados.PercentualInicioPulverizacao));
List<bool> BicosAnteriores = new List<bool>();
// Inicialize todos os bicos como inativos antes de verificar os objetos verdes
for (int i = 0; i < Atuador.Dados.QuantidadeBicos; i++)
{
BicosAnteriores.Add(Atuador.Dados.BicosPulverizadores[i].Atuado);
Atuador.Dados.BicosPulverizadores[i].Atuado = false;
}
foreach (var verde in Verdes)
{
// Calcule a posição final (y + altura) do objeto verde
int posicaoFinalVerdeY = verde.y + verde.altura;
if (posicaoFinalVerdeY > inicioBarraPulverizadora)
{
// Calcule a posição final (x + largura) do objeto verde
int posicaoFinalVerdeX = verde.x + verde.largura;
// Para cada objeto verde, verifique se ele está dentro do intervalo de algum bico e atue-o
for (int i = 0; i < Atuador.Dados.QuantidadeBicos; i++)
{
// Determina o intervalo no eixo x para o bico atual
int limiteInferior = intervaloPorBico * i;
int limiteSuperior = limiteInferior + intervaloPorBico;
// Verifica se o objeto 'verde' está dentro do intervalo deste bico
// A condição foi ajustada para verificar se qualquer parte do objeto verde cruza com o intervalo do bico
if (verde.x < limiteSuperior && posicaoFinalVerdeX > limiteInferior)
{
Atuador.Dados.BicosPulverizadores[i].Atuado = true;
}
}
}
}
for (int i = 0; i < Atuador.Dados.QuantidadeBicos; i++)
{
if (Atuador.Dados.BicosPulverizadores[i].Atuado && BicosAnteriores[i] != Atuador.Dados.BicosPulverizadores[i].Atuado)
{
Variaveis.OperacaoEmAndamento.AtuacoesPorBico[i]++;
}
}
lblUltimaLeituraSolo.Text = "Ultima Leitura Solo: " + FuncoesGlobais.TimestampToDate(leitura.timestamp);
pnlAtuadores.Invalidate();
Variaveis.OperacaoEmAndamento.Controle.BicosAtuados = Atuador.Dados.BicosPulverizadores;
Variaveis.OperacaoEmAndamento.Controle.RPM = !Verdes.Any() ?
Variaveis.OperacaoEmAndamento.Controle.RPM_Max :
Variaveis.OperacaoEmAndamento.Controle.RPM_Min;
}
*/
CamerasSolo.ForEach(CameraSolo =>
{
AtualizaLeituraCameraSolo(CameraSolo);
@ -463,7 +387,7 @@ namespace AgroBase.Forms.Operacoes
for (int i = 0; i < BicosPorCamera; i++)
{
int iBico = i + (CameraSolo.Posicao * BicosPorCamera);
BicosAnteriores.Add(Atuador.Dados.BicosPulverizadores[iBico].Atuado);
BicosAnteriores.Add(Atuador.Dados.BicosPulverizadores[iBico].Atuado ? true : false);
Atuador.Dados.BicosPulverizadores[iBico].Atuado = false;
}
@ -558,9 +482,11 @@ namespace AgroBase.Forms.Operacoes
bool operacaoEmAndamento = tempo.Seconds > Variaveis.OperacaoEmAndamento.TempoIniciarOperacao;
var BicosNaoAtuados = Atuador.Dados.BicosPulverizadores.ToList();
BicosNaoAtuados.ForEach(x => x.Atuado = false);
var BicosNaoAtuados = new List<AtuadorBicoModel>();
Atuador.Dados.BicosPulverizadores.ForEach(x =>
{
BicosNaoAtuados.Add(x);
});
Variaveis.OperacaoEmAndamento.Sensoriamento.ErvasNoRadar = CamerasSolo.Sum(x => x.ErvasNoRadar);
Variaveis.OperacaoEmAndamento.Sensoriamento.ErvasIdentificadas = Variaveis.OperacaoEmAndamento.Sensoriamento.AtuacoesPorBico.Sum();
@ -588,6 +514,8 @@ namespace AgroBase.Forms.Operacoes
cameraCaminho.Angulo;
}
pnlOrientacao.Invalidate();
Variaveis.OperacaoEmAndamento.AtualizarDadosControle();
}
@ -747,19 +675,13 @@ namespace AgroBase.Forms.Operacoes
{
try
{
DesenharInclinacao((Panel)sender, e);
DesenharInclinacao((Panel)sender, e, (float)cameraCaminho.Angulo);
}
catch { }
}
private void DesenharInclinacao(Panel pnlBussola, PaintEventArgs e)
private void DesenharInclinacao(Panel pnlBussola, PaintEventArgs e, float anguloInclinacao)
{
// Ângulo de inclinação em graus.
// Suponha que você tenha uma variável que armazene essa informação.
// Por exemplo, o ângulo de 0 graus pode ser diretamente para cima,
// e os ângulos aumentam no sentido horário.
float anguloInclinacao = (float)cameraCaminho.Angulo;
Graphics g = e.Graphics;
// Desenha o círculo da bússola
int diameter = Math.Min(pnlBussola.Width - 1, pnlBussola.Height - 1);
@ -889,8 +811,14 @@ namespace AgroBase.Forms.Operacoes
}
}
private void pnlOrientacao_Paint(object sender, PaintEventArgs e)
{
try
{
DesenharInclinacao((Panel)sender, e, (float)GPSService.UltimaLeitura.Orientacao);
}
catch { }
}
}
}

View File

@ -39,6 +39,7 @@
this.nudQtdBicos = new System.Windows.Forms.NumericUpDown();
this.lblQtdBicos = new System.Windows.Forms.Label();
this.gpbP_Dir = new System.Windows.Forms.GroupBox();
this.nudAnguloMinimo = new System.Windows.Forms.NumericUpDown();
this.nudVelocidadeMP = new System.Windows.Forms.NumericUpDown();
this.lblVelocidadePercentual = new System.Windows.Forms.Label();
this.lblVelocidadeMP = new System.Windows.Forms.Label();
@ -63,19 +64,23 @@
this.chbD_Dir = new System.Windows.Forms.CheckBox();
this.btnCarregar = new System.Windows.Forms.Button();
this.btnSalvar = new System.Windows.Forms.Button();
this.nudAnguloMinimo = new System.Windows.Forms.NumericUpDown();
this.chbSalvar = new System.Windows.Forms.CheckBox();
this.nudTemposalvarlog = new System.Windows.Forms.NumericUpDown();
this.lblTemposalvarlog = new System.Windows.Forms.Label();
this.lblTemposalvarlogU = new System.Windows.Forms.Label();
this.gpbModulos.SuspendLayout();
this.gpbP_Sen.SuspendLayout();
this.gpbP_Atu.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudQtdCameras)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudQtdBicos)).BeginInit();
this.gpbP_Dir.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudAnguloMinimo)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeMP)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudAnguloMaximo)).BeginInit();
this.gpbP_Mov.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeComErvas)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeSemErvas)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudAnguloMinimo)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudTemposalvarlog)).BeginInit();
this.SuspendLayout();
//
// cmbOperacao
@ -139,6 +144,9 @@
//
// gpbP_Sen
//
this.gpbP_Sen.Controls.Add(this.lblTemposalvarlogU);
this.gpbP_Sen.Controls.Add(this.nudTemposalvarlog);
this.gpbP_Sen.Controls.Add(this.lblTemposalvarlog);
this.gpbP_Sen.Location = new System.Drawing.Point(596, 105);
this.gpbP_Sen.Name = "gpbP_Sen";
this.gpbP_Sen.Size = new System.Drawing.Size(190, 168);
@ -210,6 +218,24 @@
this.gpbP_Dir.TabStop = false;
this.gpbP_Dir.Text = "Ajustes";
//
// nudAnguloMinimo
//
this.nudAnguloMinimo.Location = new System.Drawing.Point(102, 67);
this.nudAnguloMinimo.Maximum = new decimal(new int[] {
90,
0,
0,
0});
this.nudAnguloMinimo.Minimum = new decimal(new int[] {
90,
0,
0,
-2147483648});
this.nudAnguloMinimo.Name = "nudAnguloMinimo";
this.nudAnguloMinimo.Size = new System.Drawing.Size(72, 29);
this.nudAnguloMinimo.TabIndex = 12;
this.nudAnguloMinimo.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// nudVelocidadeMP
//
this.nudVelocidadeMP.Location = new System.Drawing.Point(10, 126);
@ -483,24 +509,6 @@
this.btnSalvar.UseVisualStyleBackColor = true;
this.btnSalvar.Click += new System.EventHandler(this.btnSalvar_Click);
//
// nudAnguloMinimo
//
this.nudAnguloMinimo.Location = new System.Drawing.Point(102, 67);
this.nudAnguloMinimo.Maximum = new decimal(new int[] {
90,
0,
0,
0});
this.nudAnguloMinimo.Minimum = new decimal(new int[] {
90,
0,
0,
-2147483648});
this.nudAnguloMinimo.Name = "nudAnguloMinimo";
this.nudAnguloMinimo.Size = new System.Drawing.Size(72, 29);
this.nudAnguloMinimo.TabIndex = 12;
this.nudAnguloMinimo.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// chbSalvar
//
this.chbSalvar.AutoSize = true;
@ -512,6 +520,43 @@
this.chbSalvar.Text = "Personalizado";
this.chbSalvar.UseVisualStyleBackColor = true;
//
// nudTemposalvarlog
//
this.nudTemposalvarlog.Location = new System.Drawing.Point(10, 67);
this.nudTemposalvarlog.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.nudTemposalvarlog.Name = "nudTemposalvarlog";
this.nudTemposalvarlog.Size = new System.Drawing.Size(120, 29);
this.nudTemposalvarlog.TabIndex = 10;
this.nudTemposalvarlog.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.nudTemposalvarlog.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// lblTemposalvarlog
//
this.lblTemposalvarlog.AutoSize = true;
this.lblTemposalvarlog.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblTemposalvarlog.Location = new System.Drawing.Point(6, 40);
this.lblTemposalvarlog.Name = "lblTemposalvarlog";
this.lblTemposalvarlog.Size = new System.Drawing.Size(145, 20);
this.lblTemposalvarlog.TabIndex = 9;
this.lblTemposalvarlog.Text = "Tempo Salvar Log";
//
// lblTemposalvarlogU
//
this.lblTemposalvarlogU.AutoSize = true;
this.lblTemposalvarlogU.Location = new System.Drawing.Point(136, 69);
this.lblTemposalvarlogU.Name = "lblTemposalvarlogU";
this.lblTemposalvarlogU.Size = new System.Drawing.Size(41, 24);
this.lblTemposalvarlogU.TabIndex = 13;
this.lblTemposalvarlogU.Text = "seg";
//
// frmParametrizacaoOperacao
//
this.AutoScaleDimensions = new System.Drawing.SizeF(11F, 24F);
@ -531,19 +576,22 @@
this.Load += new System.EventHandler(this.frmParametrizacaoOperacao_Load);
this.gpbModulos.ResumeLayout(false);
this.gpbModulos.PerformLayout();
this.gpbP_Sen.ResumeLayout(false);
this.gpbP_Sen.PerformLayout();
this.gpbP_Atu.ResumeLayout(false);
this.gpbP_Atu.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudQtdCameras)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudQtdBicos)).EndInit();
this.gpbP_Dir.ResumeLayout(false);
this.gpbP_Dir.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudAnguloMinimo)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeMP)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudAnguloMaximo)).EndInit();
this.gpbP_Mov.ResumeLayout(false);
this.gpbP_Mov.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeComErvas)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudVelocidadeSemErvas)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudAnguloMinimo)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudTemposalvarlog)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@ -588,5 +636,8 @@
private System.Windows.Forms.Label lblAngulo;
private System.Windows.Forms.NumericUpDown nudAnguloMinimo;
private System.Windows.Forms.CheckBox chbSalvar;
private System.Windows.Forms.Label lblTemposalvarlogU;
private System.Windows.Forms.NumericUpDown nudTemposalvarlog;
private System.Windows.Forms.Label lblTemposalvarlog;
}
}

View File

@ -57,6 +57,7 @@ namespace AgroBase.Forms.Operacoes
nudAnguloMaximo.Value = Convert.ToInt32(Variaveis.OperacaoEmAndamento.Controle.Angulo_Max);
nudAnguloMinimo.Value = Convert.ToInt32(Variaveis.OperacaoEmAndamento.Controle.Angulo_Min);
nudVelocidadeMP.Value = Convert.ToInt32(Variaveis.OperacaoEmAndamento.Controle.VelocidadeMP);
nudTemposalvarlog.Value = Variaveis.OperacaoEmAndamento.tmrLogs.Interval / 1000;
}
private void chbD_CheckedChanged(object sender, EventArgs e)
@ -117,6 +118,7 @@ namespace AgroBase.Forms.Operacoes
Variaveis.OperacaoEmAndamento.Controle.Angulo_Max = Convert.ToInt32(nudAnguloMaximo.Value);
Variaveis.OperacaoEmAndamento.Controle.Angulo_Min = Convert.ToInt32(nudAnguloMinimo.Value);
Variaveis.OperacaoEmAndamento.Controle.VelocidadeMP = Convert.ToInt32(nudVelocidadeMP.Value);
Variaveis.OperacaoEmAndamento.tmrLogs.Interval = Convert.ToInt32(nudTemposalvarlog.Value * 1000);
if (chbSalvar.Checked)
{

View File

@ -65,8 +65,8 @@ namespace AgroBase.Forms
}
else if (!picLoading.Visible && GPSService.UltimaLeitura != null)
{
//mapaService.AtualizarPosicaoMapaGPS(GPSService.UltimaLeitura.Latitude, GPSService.UltimaLeitura.Longitude);
//chromiumWebBrowser.Reload();
mapaService.AtualizarPosicaoMapaGPS(GPSService.UltimaLeitura.Latitude, GPSService.UltimaLeitura.Longitude);
chromiumWebBrowser.Reload();
lblDatahora.Text = "Ultima Leitura: " + GPSService.UltimaLeitura.DataHora.ToString("dd/MM/yyyy HH:mm:ss");
lblLatitude.Text = "Latitude: " + GPSService.UltimaLeitura.Latitude;

View File

@ -29,14 +29,10 @@ namespace AgroBase.Forms
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMapa));
this.pnlMapa = new System.Windows.Forms.Panel();
this.picLoading = new System.Windows.Forms.PictureBox();
this.pnlBotoes = new System.Windows.Forms.Panel();
this.lblMapa = new System.Windows.Forms.Label();
this.btnCarregar = new System.Windows.Forms.Button();
this.pnlMapa.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picLoading)).BeginInit();
this.pnlBotoes.SuspendLayout();
this.SuspendLayout();
//
@ -45,36 +41,19 @@ namespace AgroBase.Forms
this.pnlMapa.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.pnlMapa.Controls.Add(this.picLoading);
this.pnlMapa.Location = new System.Drawing.Point(9, 10);
this.pnlMapa.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlMapa.Margin = new System.Windows.Forms.Padding(2);
this.pnlMapa.Name = "pnlMapa";
this.pnlMapa.Size = new System.Drawing.Size(772, 464);
this.pnlMapa.TabIndex = 1;
//
// picLoading
//
this.picLoading.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.picLoading.BackColor = System.Drawing.Color.Transparent;
this.picLoading.Image = ((System.Drawing.Image)(resources.GetObject("picLoading.Image")));
this.picLoading.Location = new System.Drawing.Point(194, 24);
this.picLoading.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.picLoading.Name = "picLoading";
this.picLoading.Size = new System.Drawing.Size(384, 416);
this.picLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.picLoading.TabIndex = 2;
this.picLoading.TabStop = false;
this.picLoading.Visible = false;
//
// pnlBotoes
//
this.pnlBotoes.Controls.Add(this.lblMapa);
this.pnlBotoes.Controls.Add(this.btnCarregar);
this.pnlBotoes.Dock = System.Windows.Forms.DockStyle.Bottom;
this.pnlBotoes.Location = new System.Drawing.Point(0, 479);
this.pnlBotoes.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlBotoes.Margin = new System.Windows.Forms.Padding(2);
this.pnlBotoes.Name = "pnlBotoes";
this.pnlBotoes.Size = new System.Drawing.Size(790, 46);
this.pnlBotoes.TabIndex = 2;
@ -93,7 +72,7 @@ namespace AgroBase.Forms
//
this.btnCarregar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnCarregar.Location = new System.Drawing.Point(684, 11);
this.btnCarregar.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnCarregar.Margin = new System.Windows.Forms.Padding(2);
this.btnCarregar.Name = "btnCarregar";
this.btnCarregar.Size = new System.Drawing.Size(98, 26);
this.btnCarregar.TabIndex = 0;
@ -108,12 +87,11 @@ namespace AgroBase.Forms
this.ClientSize = new System.Drawing.Size(790, 525);
this.Controls.Add(this.pnlBotoes);
this.Controls.Add(this.pnlMapa);
this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.Margin = new System.Windows.Forms.Padding(2);
this.Name = "frmMapa";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Mapas";
this.pnlMapa.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.picLoading)).EndInit();
this.Load += new System.EventHandler(this.frmMapa_Load);
this.pnlBotoes.ResumeLayout(false);
this.pnlBotoes.PerformLayout();
this.ResumeLayout(false);
@ -126,6 +104,5 @@ namespace AgroBase.Forms
private System.Windows.Forms.Panel pnlBotoes;
private System.Windows.Forms.Label lblMapa;
private System.Windows.Forms.Button btnCarregar;
private System.Windows.Forms.PictureBox picLoading;
}
}

View File

@ -18,38 +18,27 @@ namespace AgroBase.Forms
{
public partial class frmMapa : Form
{
private ChromiumWebBrowser chromiumWebBrowser;
private MapasService mapaService = new MapasService();
private MapasModel Mapa;
public frmMapa()
{
InitializeComponent();
}
private void frmMapa_Load(object sender, EventArgs e)
{
Mapa = new MapasModel()
{
pnlMapa = pnlMapa,
lblMapa = lblMapa,
};
}
private void btnCarregar_Click(object sender, EventArgs e)
{
mapaService.CarregarMapa(MapasVariaveisModel.NomeArquivoMapaInterativo, MapasVariaveisModel.NomeArquivoMapaInterativoSaida);
picLoading.Visible = true;
Timer tmr = new Timer() { Interval = 500 };
tmr.Tick += Tmr_Tick;
tmr.Start();
Mapa.btnCarregar_Click(sender, e);
}
private void Tmr_Tick(object sender, EventArgs e)
{
if (mapaService.pythonProcess.HasExited)
{
((Timer)sender).Stop();
picLoading.Visible = false;
mapaService.CarregarDadosMapa();
lblMapa.Text = "Mapa carregado: " + mapaService.NomeArquivos;
chromiumWebBrowser = new ChromiumWebBrowser(mapaService.MapaUrl);
this.pnlMapa.Controls.Add(chromiumWebBrowser);
chromiumWebBrowser.Dock = DockStyle.Fill;
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -15,5 +15,6 @@ namespace AgroBase.Models
public double Velocidade { get; set; }
public int NumeroSatelites { get; set; }
public double PrecisaoHorizontal { get; set; }
public double Orientacao { get;set; }
}
}

View File

@ -1,14 +1,55 @@
using System;
using AgroBase.Properties;
using AgroBase.Services;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AgroBase.Models
{
public class MapasModel
{
public ChromiumWebBrowser chromiumWebBrowser { get; set; }
public Panel pnlMapa { get; set; }
private PictureBox picLoading { get; set; } = new PictureBox();
public Label lblMapa { get; set; } = new Label();
public MapasService mapaService { get; set; } = new MapasService();
public void btnCarregar_Click(object sender, EventArgs e)
{
mapaService.CarregarMapa(MapasVariaveisModel.NomeArquivoMapaInterativo, MapasVariaveisModel.NomeArquivoMapaInterativoSaida);
picLoading.Dock = DockStyle.Fill;
picLoading.BackColor = System.Drawing.Color.Transparent;
picLoading.Image = Resources.loading;
picLoading.Name = "picLoading";
picLoading.SizeMode = PictureBoxSizeMode.Zoom;
picLoading.Visible = true;
pnlMapa.Controls.Add(picLoading);
Timer tmr = new Timer() { Interval = 500 };
tmr.Tick += Tmr_Tick;
tmr.Start();
}
private void Tmr_Tick(object sender, EventArgs e)
{
if (mapaService.pythonProcess.HasExited)
{
((Timer)sender).Stop();
picLoading.Visible = false;
mapaService.CarregarDadosMapa();
lblMapa.Text = "Mapa carregado: " + mapaService.NomeArquivos;
chromiumWebBrowser = new ChromiumWebBrowser(mapaService.MapaUrl);
pnlMapa.Controls.Add(chromiumWebBrowser);
chromiumWebBrowser.Dock = DockStyle.Fill;
}
}
}
public class MapaFeatureCollectionModel

View File

@ -66,6 +66,7 @@ namespace AgroBase.Models
public DispositivosService<MovimentacaoModel> DispMov { get; set; }
public DispositivosService<DirecionalModel> DispDir { get; set; }
public DispositivosService<AtuadorModel> DispAtu { get; set; }
public MapasModel Mapa { get;set; }
public Form frmOperacao { get; set; }
public string frmOperacaoNome { get; set; }
public bool Iniciado { get; set; }
@ -75,7 +76,12 @@ namespace AgroBase.Models
public OperacaoControleModel ControleAnterior { get; set; }
public List<OperacaoModulosMandatoriosModel> ModulosMandatorios { get; set; }
public OperacaoSensoriamentoModel Sensoriamento { get; set; } = new OperacaoSensoriamentoModel();
public List<OperacaoSensoriamentoModel> Logs { get; set; } = new List<OperacaoSensoriamentoModel>();
public List<GPSModel> GPSTrajetoria { get; set; } = new List<GPSModel>();
public int TempoIniciarOperacao { get; set; } = 10;
public string PastaSaida { get; set; } = "Operacoes/";
public string ID { get; set; }
public Timer tmrLogs = new Timer() { Interval = 5000 };
public static OperacaoModel CarregarParametrosOperacaoPadrao(ModoOperacao Modo)
@ -107,8 +113,16 @@ namespace AgroBase.Models
VelocidadeMedia = 0,
DistanciaDireita = 0,
DistanciaEsquerda = 0,
}
},
Logs = new List<OperacaoSensoriamentoModel>(),
};
if (OperacaoCarregar.DispAtu != null)
{
for (int i = 0; i < OperacaoCarregar.DispAtu.Dados.QuantidadeBicos; i++)
{
OperacaoCarregar.Sensoriamento.AtuacoesPorBico.Add(0);
}
}
switch (Modo)
{
@ -254,7 +268,26 @@ namespace AgroBase.Models
Iniciado = true;
TimestampInicio = DateTime.Now.Ticks;
TimestampFim = 0;
if (DispMov != null)
{
DispMov.Dados.DistanciaPercorridaOperacao = 0;
}
Sensoriamento = new OperacaoSensoriamentoModel();
if (DispAtu != null)
{
for (int i = 0; i < DispAtu.Dados.QuantidadeBicos; i++)
{
Sensoriamento.AtuacoesPorBico.Add(0);
}
}
Logs = new List<OperacaoSensoriamentoModel>();
GPSTrajetoria = new List<GPSModel>();
ID = (new DateTime(TimestampInicio)).ToString("dd_MM_yyyy_HH_mm_ss");
Directory.CreateDirectory(PastaSaida + ID + "/");
APIService.Inicializar();
GPSService.IniciarRecepcaoDados();
if (controle != null)
{
@ -264,6 +297,15 @@ namespace AgroBase.Models
{
frmOperacao.Show();
}
tmrLogs.Tick -= TmrLogs_Tick;
tmrLogs.Tick += TmrLogs_Tick;
tmrLogs.Start();
}
private void TmrLogs_Tick(object sender, EventArgs e)
{
SalvarLog();
}
public void FinalizarOperacao()
@ -274,6 +316,11 @@ namespace AgroBase.Models
Iniciado = false;
TimestampFim = DateTime.Now.Ticks;
tmrLogs.Stop();
GPSService.PararRecepcaoDados();
APIService.Parar();
}
public void AtualizarDadosControle()
@ -379,6 +426,38 @@ namespace AgroBase.Models
return Protocolos.ToList();
}
public void SalvarLog()
{
Logs.Add(new OperacaoSensoriamentoModel()
{
Momento = DateTime.Now,
AtuacoesPorBico = Sensoriamento.AtuacoesPorBico,
BateriaConsumida = Sensoriamento.BateriaConsumida,
DistanciaDireita = Sensoriamento.DistanciaDireita,
DistanciaEsquerda = Sensoriamento.DistanciaEsquerda,
DistanciaPercorrida = Sensoriamento.DistanciaPercorrida,
ErvasIdentificadas = Sensoriamento.ErvasIdentificadas,
ErvasNoRadar = Sensoriamento.ErvasNoRadar,
HerbicidaConsumido = Sensoriamento.HerbicidaConsumido,
HerbicidaPorErva = Sensoriamento.HerbicidaPorErva,
ProgressoPercurso = Sensoriamento.ProgressoPercurso,
VelocidadeMedia = Sensoriamento.VelocidadeMedia
});
File.WriteAllText(PastaSaida + ID + "/logs.json", JsonConvert.SerializeObject(Logs, Formatting.None));
GPSTrajetoria.Add(new GPSModel()
{
NumeroSatelites = GPSService.UltimaLeitura.NumeroSatelites,
Altitude = GPSService.UltimaLeitura.Altitude,
DataHora = GPSService.UltimaLeitura.DataHora,
Latitude = GPSService.UltimaLeitura.Latitude,
Longitude = GPSService.UltimaLeitura.Longitude,
PrecisaoHorizontal = GPSService.UltimaLeitura.PrecisaoHorizontal
});
File.WriteAllText(PastaSaida + ID + "/trajetoria.json", JsonConvert.SerializeObject(GPSTrajetoria, Formatting.None));
}
}
public class OperacaoControleModel
@ -421,6 +500,7 @@ namespace AgroBase.Models
public class OperacaoSensoriamentoModel
{
public DateTime Momento { get; set; }
public int ErvasNoRadar { get; set; } = 0;
public double VelocidadeMedia { get; set; } = 0;
public double HerbicidaConsumido { get; set; } = 0;
@ -434,4 +514,5 @@ namespace AgroBase.Models
public double DistanciaDireita { get; set; } = 0;
}
}

View File

@ -79,5 +79,15 @@ namespace AgroBase.Properties {
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap loading {
get {
object obj = ResourceManager.GetObject("loading", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -124,4 +124,7 @@
<data name="esp32-wrover" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Imagens\esp32-wrover.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="loading" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Imagens\loading.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@ -0,0 +1,33 @@
from flask import Flask, request, jsonify
from flask_cors import CORS
import sys
apiPort = sys.argv[1]
getCordenadasEndpoint = sys.argv[2]
setCordenadasEndpoint = sys.argv[3]
app = Flask(__name__)
CORS(app) # Isso habilita o CORS para todas as rotas e origens
coordenadas = {}
@app.route(setCordenadasEndpoint, methods=['POST'])
def receber_coordenadas():
dados = request.json
id = dados.get('id')
lat = dados.get('latitude')
lon = dados.get('longitude')
coordenadas[id] = {'latitude': lat, 'longitude': lon}
return jsonify({'status': 'Coordenadas recebidas com sucesso!'})
@app.route(getCordenadasEndpoint, methods=['GET'])
def servir_coordenadas(id):
if id in coordenadas:
return jsonify(coordenadas[id])
else:
return jsonify({'error': 'Coordenadas não encontradas!'}), 404
if __name__ == '__main__':
app.run(host='0.0.0.0', port=apiPort, debug=True)

View File

@ -2,67 +2,40 @@ import geopandas as gpd
import json
import sys
import folium
import requests
import re
def internet_disponivel():
"""Verifica se há conexão com a internet."""
url = 'http://www.google.com/'
timeout = 5
try:
_ = requests.get(url, timeout=timeout)
return True
except requests.ConnectionError:
return False
# Argumentos e configurações iniciais
pathFiles = sys.argv[1]
fileName = sys.argv[2]
outputName = sys.argv[3]
outputMapName = sys.argv[4]
apiEndpoit = sys.argv[5]
pastaSaida = 'Python/Output/'
# Carregar o arquivo shapefile contendo a geometria
input_shapefile = pathFiles + fileName + '.shp'
data_geometry = gpd.read_file(input_shapefile)
# Carregar o arquivo DBF com informações adicionais
input_dbf = pathFiles + fileName + '.dbf'
data_dbf = gpd.read_file(input_dbf)
# Mesclar as informações do arquivo DBF com o dataframe de geometria
data_merged = data_geometry.merge(data_dbf, left_index=True, right_index=True)
# Escolher uma coluna de geometria
geometry_column = 'geometry_y'
# Criar um novo GeoDataFrame com uma única coluna de geometria
data_geodataframe = gpd.GeoDataFrame(data_merged[[geometry_column]], geometry=geometry_column)
# Criar o campo 'properties' e preencher com as colunas do DataFrame original
data_geodataframe['properties'] = data_merged.apply(lambda row: {
'Id': row['Id_x'],
'Name': row['Name_x'],
'Length': row['Length_x'],
'Dist1': row['Dist1_x'],
'Dist2': row['Dist2_x']
}, axis=1)
# Caminho para salvar o arquivo GEOJson com as informações adicionais
output_geojson = pastaSaida + outputName
# Salvar os dados no formato GEOJson
data_geodataframe.to_file(output_geojson, driver='GeoJSON')
# Abrir o arquivo GeoJSON
with open(output_geojson, 'r') as file:
data = json.load(file)
# Iterar sobre as features no arquivo GeoJSON
for feature in data['features']:
# Obter o dicionário 'properties' dentro de 'properties'
properties = feature['properties']['properties']
# Remover a camada extra de 'properties'
feature['properties'] = properties
# Salvar o arquivo GeoJSON atualizado
with open(output_geojson, 'w') as file:
json.dump(data, file)
# Calcular os limites (bounds) da geometria
minx, miny, maxx, maxy = data_geometry.total_bounds
center = [(miny + maxy) / 2, (minx + maxx) / 2]
# Criar um mapa centrado no centro das coordenadas das geometrias
# Verificar se há conexão com a internet
if internet_disponivel():
m = folium.Map(location=center, zoom_start=12)
else:
m = folium.Map(location=center, zoom_start=12, tiles=None)
# Converter o GeoDataFrame para GeoJSON e adicionar ao mapa
geojson_data = data_geometry.to_json()
@ -70,3 +43,120 @@ folium.GeoJson(geojson_data).add_to(m)
# Salvar o mapa interativo em um arquivo HTML
m.save(pastaSaida + outputMapName)
# Caminho completo para o arquivo HTML gerado
caminho_completo_html = pastaSaida + outputMapName
# Abrir o arquivo HTML para leitura e escrita
with open(caminho_completo_html, 'r+') as arquivo_html:
# Ler o conteúdo do arquivo
conteudo_html = arquivo_html.read()
# Usar expressão regular para encontrar o ID do mapa
padrao_id_mapa = re.compile(r'id="map_(.*?)"')
resultado_busca = padrao_id_mapa.search(conteudo_html)
# Verificar se encontrou um ID de mapa
if resultado_busca:
id_mapa = 'map_' + resultado_busca.group(1)
else:
raise ValueError("Não foi possível encontrar o ID do mapa no arquivo HTML.")
# Script JavaScript para adicionar ao HTML, com o ID do mapa substituído
script_atualizacao_marcador = f"""
<script>
function trajeto_json_onEachFeature(feature, layer) {{
layer.on({{
}});
}};
var trajeto_json = L.geoJson(null, {{
onEachFeature: trajeto_json_onEachFeature,
style: function(feature) {{
return {{color: 'red'}};
}}
}}
);
function trajeto_json_add (data) {{
trajeto_json.addData(data);
}}
trajeto_json_add({{"features": []}});
trajeto_json.addTo({id_mapa});
function adicionarGeometria(novaGeometria) {{
trajeto_json.addData(novaGeometria);
}}
function saoCoordenadasIguais(coord1, coord2, tolerancia) {{
return Math.abs(coord1[0] - coord2[0]) < tolerancia && Math.abs(coord1[1] - coord2[1]) < tolerancia;
}}
function adicionarCoordenada(idGeometria, novaCoordenada) {{
var feature = trajeto_json.toGeoJSON().features.find(f => f.id === idGeometria);
if (feature) {{
var ultima = [0.0,0.0];
if (feature.geometry.coordinates.length > 0) {{
ultima = feature.geometry.coordinates[feature.geometry.coordinates.length - 1];
}}
if (!saoCoordenadasIguais(ultima, novaCoordenada, 0.000001)) {{
feature.geometry.coordinates.push(novaCoordenada);
var ft = feature;
trajeto_json.clearLayers();
trajeto_json.addData(ft);
}}
}} else {{
console.log("Feature com ID " + idGeometria + " não encontrada.");
}}
}}
adicionarGeometria({{
"type": "Feature",
"geometry": {{
"type": "LineString",
"coordinates": []
}},
"properties": {{"Dist1": 0.0, "Dist2": 0.0, "Id": 1517, "Length": 21.724783283, "Name": "Projeto"}},
"id": "Tj"
}});
</script>
<script>
var marcadorDinamico = L.marker([0, 0], {{
icon: L.AwesomeMarkers.icon({{
icon: 'info-sign',
markerColor: 'red',
prefix: 'glyphicon'
}})
}}).addTo({id_mapa});
function atualizarMarcador() {{
fetch('{apiEndpoit}')
.then(function(response) {{
return response.json();
}})
.then(function(dados) {{
var novaLatitude = dados.latitude;
var novaLongitude = dados.longitude;
var novaPosicao = [novaLatitude, novaLongitude];
marcadorDinamico.setLatLng(novaPosicao);
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
}})
.catch(function(error) {{
console.error('Erro ao atualizar o marcador:', error);
}});
}}
// Atualiza o marcador a cada 2 segundos
setInterval(atualizarMarcador, 2000);
</script>
"""
# Inserir o script no conteúdo HTML
conteudo_atualizado = conteudo_html.replace('</html>', script_atualizacao_marcador + '</html>')
# Agora, reabrir o arquivo para escrita e sobrescrever o conteúdo com a versão atualizada
with open(caminho_completo_html, 'w') as arquivo_html:
arquivo_html.write(conteudo_atualizado)

View File

@ -0,0 +1,62 @@
using AgroBase.Models;
using Newtonsoft.Json;
using System;
using System.Diagnostics;
using System.Net.Http;
using System.Text;
namespace AgroBase.Services
{
public static class APIService
{
public static Process pythonProcess = null;
public static string API_Base { get; set; } = "http://localhost";
public static string API_Porta { get; set; } = "5001";
public static string GPS_setCoordenadasEndpoint { get; set; } = "/receber-coordenadas";
public static string GPS_getCoordenadasEndpoint { get; set; } = "/servir-coordenadas/<id>";
public static int GPS_IDcoordenadasRobo { get; set; } = 1;
public static string ApiBase()
{
return API_Base + ":" + API_Porta.ToString();
}
public static void Inicializar()
{
if (pythonProcess == null)
{
pythonProcess = PythonService.RunScript(PythonService.ScriptAPI, new string[] { API_Porta.ToString(), GPS_getCoordenadasEndpoint, GPS_setCoordenadasEndpoint });
}
}
public static void Parar()
{
if (pythonProcess != null)
{
pythonProcess.Kill();
pythonProcess = null;
}
}
public static async void AtualizarCoordenadasGPS(GPSModel Leitura, int ID)
{
var url = ApiBase() + GPS_setCoordenadasEndpoint;
var localizacao = new
{
id = ID.ToString(),
latitude = Leitura.Latitude,
longitude = Leitura.Longitude
};
var json = JsonConvert.SerializeObject(localizacao);
var data = new StringContent(json, Encoding.UTF8, "application/json");
using (var client = new HttpClient())
{
var response = await client.PostAsync(url, data);
string result = await response.Content.ReadAsStringAsync();
}
}
}
}

View File

@ -3,6 +3,7 @@ using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Net.Http;
@ -19,6 +20,7 @@ namespace AgroBase.Services
public static bool Iniciado = false;
public static SerialPort PortaGPS = null;
public static GPSModel UltimaLeitura = new GPSModel();
public static GPSModel PenultimaLeitura = new GPSModel();
public static void AtualizarPortaGPS(SerialPort _porta)
{
@ -35,7 +37,7 @@ namespace AgroBase.Services
{
try
{
if (PortaGPS != null)
if (PortaGPS != null && !PortaGPS.IsOpen)
{
PortaGPS.Open();
@ -89,6 +91,15 @@ namespace AgroBase.Services
{
// Global Positioning System Fix Data
case "$GPGGA":
PenultimaLeitura.Latitude = UltimaLeitura.Latitude;
PenultimaLeitura.Longitude = UltimaLeitura.Longitude;
PenultimaLeitura.Altitude = UltimaLeitura.Altitude;
PenultimaLeitura.PrecisaoHorizontal = UltimaLeitura.PrecisaoHorizontal;
PenultimaLeitura.DataHora = UltimaLeitura.DataHora;
PenultimaLeitura.NumeroSatelites = UltimaLeitura.NumeroSatelites;
PenultimaLeitura.Velocidade = UltimaLeitura.Velocidade;
PenultimaLeitura.Orientacao = UltimaLeitura.Orientacao;
if (parts[2] != "" && parts[3] != "")
{
UltimaLeitura.Latitude = ConvertToDecimalDegrees(parts[2], parts[3], 2); // ConvertToDouble(parts[2]);
@ -100,8 +111,9 @@ namespace AgroBase.Services
UltimaLeitura.NumeroSatelites = int.TryParse(parts[7], out int numSat) ? numSat : 0;
UltimaLeitura.PrecisaoHorizontal = double.TryParse(parts[8], NumberStyles.Float, CultureInfo.InvariantCulture, out double hdop) ? hdop : 0;
UltimaLeitura.Altitude = ConvertToDouble(parts[9]);
UltimaLeitura.Orientacao = AtualizaOrientacao();
Console.WriteLine(UltimaLeitura.Latitude + "," + UltimaLeitura.Longitude);
APIService.AtualizarCoordenadasGPS(UltimaLeitura, APIService.GPS_IDcoordenadasRobo);
break;
// Recommended minimum specific GPS/Transit data
@ -112,6 +124,7 @@ namespace AgroBase.Services
// Você pode adicionar mais cases aqui para outros tipos de sentenças NMEA que você deseja processar
}
}
private static double ConvertToDecimalDegrees(string nmeaCoordinate, string direction, int digits)
@ -164,6 +177,30 @@ namespace AgroBase.Services
return knots * 1.852;
}
private static double AtualizaOrientacao()
{
// Converter latitudes e longitudes de graus para radianos
double latA = UltimaLeitura.Latitude * (Math.PI / 180.0);
double lonA = UltimaLeitura.Longitude * (Math.PI / 180.0);
double latB = PenultimaLeitura.Latitude * (Math.PI / 180.0);
double lonB = PenultimaLeitura.Longitude * (Math.PI / 180.0);
// Calcular a diferença de longitude
double deltaLon = lonB - lonA;
// Calcular a direção
double y = Math.Sin(deltaLon) * Math.Cos(latB);
double x = Math.Cos(latA) * Math.Sin(latB) - Math.Sin(latA) * Math.Cos(latB) * Math.Cos(deltaLon);
double direcaoRadianos = Math.Atan2(y, x);
// Converter a direção de radianos para graus
double direcaoGraus = direcaoRadianos * (180.0 / Math.PI);
// Normalizar a direção para que esteja no intervalo de 0 a 360 graus
direcaoGraus = (direcaoGraus + 360) % 360;
return direcaoGraus;
}

View File

@ -48,7 +48,7 @@ namespace AgroBase.Services
NomeArquivos = opfMapa.FileName.Split('\\')[opfMapa.FileName.Split('\\').Length - 1].Split('.')[0];
CaminhoMapa = opfMapa.FileName.Substring(0, opfMapa.FileName.Length - NomeArquivos.Length - 4).Replace("\\", "/");
pythonProcess = PythonService.RunScript(PythonService.ScriptMapConverter, new string[] { CaminhoMapa, NomeArquivos, ArquivoSaida, NomeArquivoMapa });
pythonProcess = PythonService.RunScript(PythonService.ScriptMapConverter, new string[] { CaminhoMapa, NomeArquivos, ArquivoSaida, NomeArquivoMapa, APIService.ApiBase() + APIService.GPS_getCoordenadasEndpoint.Replace("<id>", APIService.GPS_IDcoordenadasRobo.ToString()) });
MapaUrl = new Uri(CaminhoSaida + NomeArquivoMapa).AbsoluteUri;
CaminhoDadosMapa = CaminhoSaida + ArquivoSaida;
@ -65,11 +65,11 @@ namespace AgroBase.Services
{
NomeArquivoMapa = nomeArquivoMapa;
//pythonProcess = PythonService.RunScript(PythonService.ScriptMapGPS, new string[] { VariaveisPortas.GPS.ToString(), PathUpdateMarker });
pythonProcess = PythonService.RunScript(PythonService.ScriptMapGPS, new string[] { VariaveisPortas.GPS.ToString(), PathUpdateMarker });
//MapaUrl = new Uri("http://localhost:" + VariaveisPortas.GPS + "/").AbsoluteUri;
MapaUrl = new Uri("http://localhost:" + VariaveisPortas.GPS + "/").AbsoluteUri;
MapaUrl = new Uri(Variaveis.CaminhoSistema + "Utils\\offline_maps\\index.html").AbsoluteUri;
//MapaUrl = new Uri(Variaveis.CaminhoSistema + "Utils\\offline_maps\\index.html").AbsoluteUri;
}
public async void AtualizarPosicaoMapaGPS(double lat, double lon)

View File

@ -13,6 +13,7 @@ namespace AgroBase.Services
public static string CaminhoScripts = "Scripts\\";
public static string CaminhoLeitura = "Output\\";
public static string ScriptAPI = "api.py";
public static string ScriptWeedDetector = "weed-detector.py";
public static string ScriptStreetDetector = "street-detector.py";
public static string ScriptMapConverter = "map-load.py";
@ -28,7 +29,7 @@ namespace AgroBase.Services
Args += ' '.ToString() + '"'.ToString() + arg + '"'.ToString();
}
Process pythonProcess = new Process();
pythonProcess.StartInfo.FileName = "python";
pythonProcess.StartInfo.FileName = "C:\\Users\\USER\\AppData\\Local\\Programs\\Python\\Python311\\python";
pythonProcess.StartInfo.Arguments = ScriptPath + Args;
pythonProcess.StartInfo.UseShellExecute = false;
pythonProcess.StartInfo.RedirectStandardOutput = true;

View File

@ -75,7 +75,7 @@ namespace AgroBase.Services
}
catch (Exception ex)
{
Console.WriteLine(dado + " - " + ex.Message);
//Console.WriteLine(dado + " - " + ex.Message);
try
{
stream.BeginRead(buffer, 0, buffer.Length, OnRead, null);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:49:20","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:49:25","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:49:30","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:49:35","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:49:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:49:44","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:49:49","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:49:54","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:49:59","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:50:04","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:50:09","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:50:13","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:50:18","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:50:21","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:50:25","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:50:30","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:50:35","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:50:40","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:50:44","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:50:49","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:50:54","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:50:58","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:51:04","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T08:51:09","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99}]

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:26:44","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:26:46","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:26:49","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:26:51","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:26:54","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:26:55","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:26:59","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:01","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:05","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:06","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:09","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:11","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:13","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:16","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:20","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:23","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:25","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:27","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:29","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:32","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:35","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:37","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:42","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:44","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:46","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:48","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:27:50","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99}]

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:35:23","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:35:28","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:35:30","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:35:32","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:35:37","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:35:42","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:35:45","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:35:46","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:35:51","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:35:56","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:35:57","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:35:58","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:36:03","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:36:13","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:36:15","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:36:20","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:36:25","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:14","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:18","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:23","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:28","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:33","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:37","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99}]

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99}]

View File

@ -0,0 +1 @@
[{"Momento":"2024-02-23T09:51:15.5202079-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":26,"AtuacoesPorBico":[16,16,11,1],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T09:51:20.5124691-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":44,"AtuacoesPorBico":[16,16,11,1],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0}]

View File

@ -0,0 +1 @@
[{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99}]

View File

@ -0,0 +1 @@
[{"Momento":"2024-02-23T09:52:38.6983052-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":15,"AtuacoesPorBico":[0,0,10,28],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T09:52:44.1262795-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":15,"AtuacoesPorBico":[0,0,10,28],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T09:52:48.9190819-03:00","ErvasNoRadar":3,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":26,"AtuacoesPorBico":[0,0,10,28],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T09:52:54.0118225-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":38,"AtuacoesPorBico":[0,0,10,28],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0}]

View File

@ -0,0 +1 @@
[{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:41:39","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99}]

View File

@ -0,0 +1 @@
[{"Momento":"2024-02-23T09:55:52.6545239-03:00","ErvasNoRadar":2,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":2,"AtuacoesPorBico":[6,6,14,16],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T09:55:57.6521686-03:00","ErvasNoRadar":2,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":30,"AtuacoesPorBico":[6,6,14,16],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T09:56:02.6550606-03:00","ErvasNoRadar":2,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":42,"AtuacoesPorBico":[6,6,14,16],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T09:56:07.6524607-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":42,"AtuacoesPorBico":[6,6,14,16],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0}]

View File

@ -0,0 +1 @@
[{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:56:35","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:56:40","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:56:45","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T09:56:50","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99}]

View File

@ -0,0 +1 @@
[{"Momento":"2024-02-23T10:01:56.3270449-03:00","ErvasNoRadar":3,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":14,"AtuacoesPorBico":[9,11,3,3],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:02:01.3266499-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":26,"AtuacoesPorBico":[9,11,3,3],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0}]

View File

@ -0,0 +1 @@
[{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:02:38","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:02:43","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99}]

View File

@ -0,0 +1 @@
[{"Momento":"2024-02-23T10:04:02.7200581-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":4,"AtuacoesPorBico":[11,12,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:04:07.7175609-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":23,"AtuacoesPorBico":[11,12,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0}]

View File

@ -0,0 +1 @@
[{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:04:45","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:04:50","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99}]

View File

@ -0,0 +1 @@
[{"Momento":"2024-02-23T10:08:47.9366872-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":4,"AtuacoesPorBico":[56,74,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:08:52.9344416-03:00","ErvasNoRadar":2,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":48,"AtuacoesPorBico":[56,74,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:09:56.6115142-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":60,"AtuacoesPorBico":[56,74,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:09:57.9322241-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":60,"AtuacoesPorBico":[56,74,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:10:02.9344679-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":64,"AtuacoesPorBico":[56,74,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:10:07.9322464-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":98,"AtuacoesPorBico":[56,74,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:10:12.953966-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":104,"AtuacoesPorBico":[56,74,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:10:17.9351455-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":110,"AtuacoesPorBico":[56,74,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:10:22.9338668-03:00","ErvasNoRadar":2,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":130,"AtuacoesPorBico":[56,74,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0}]

View File

@ -0,0 +1 @@
[{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:09:30","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:09:35","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:09:38","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:09:40","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:09:45","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:09:50","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:09:55","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:09:57","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:10:01","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99}]

View File

@ -0,0 +1 @@
[{"Momento":"2024-02-23T10:13:18.7476503-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":2,"AtuacoesPorBico":[7,11,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:13:23.7529131-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":4,"AtuacoesPorBico":[7,11,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:13:28.7477574-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":4,"AtuacoesPorBico":[7,11,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:13:33.7463022-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":10,"AtuacoesPorBico":[7,11,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:13:38.7758701-03:00","ErvasNoRadar":2,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":14,"AtuacoesPorBico":[7,11,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:13:43.7484282-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":18,"AtuacoesPorBico":[7,11,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T10:13:48.7525133-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":18,"AtuacoesPorBico":[7,11,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0}]

View File

@ -0,0 +1 @@
[{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:14:01","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":3,"PrecisaoHorizontal":2.79},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:14:06","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":3,"PrecisaoHorizontal":2.79},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:14:11","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":3,"PrecisaoHorizontal":2.79},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:14:16","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":3,"PrecisaoHorizontal":2.79},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:14:21","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:14:26","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T10:14:31","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99}]

View File

@ -0,0 +1 @@
[{"Momento":"2024-02-23T14:47:12.0297377-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":0,"AtuacoesPorBico":[0,0,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T14:47:17.0270216-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":0,"AtuacoesPorBico":[0,0,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T14:47:22.0304465-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":0,"AtuacoesPorBico":[0,0,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0},{"Momento":"2024-02-23T14:47:27.027427-03:00","ErvasNoRadar":0,"VelocidadeMedia":0.0,"HerbicidaConsumido":0.0,"HerbicidaPorErva":0.0,"BateriaConsumida":0.0,"ErvasIdentificadas":0,"AtuacoesPorBico":[0,0,0,0],"DistanciaPercorrida":0.0,"ProgressoPercurso":0.0,"DistanciaEsquerda":0.0,"DistanciaDireita":0.0}]

View File

@ -0,0 +1 @@
[{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T14:47:53","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"Orientacao":0.0},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T14:47:58","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"Orientacao":0.0},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T14:48:03","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"Orientacao":0.0},{"Latitude":0.0,"Longitude":0.0,"DataHora":"2024-02-23T14:48:07","Altitude":0.0,"Velocidade":0.0,"NumeroSatelites":0,"PrecisaoHorizontal":99.99,"Orientacao":0.0}]

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Latitude":-22.1841845,"Longitude":-47.382335833333336,"DataHora":"2024-02-23T14:49:45","Altitude":647.1,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0},{"Latitude":-22.184177833333333,"Longitude":-47.382340666666664,"DataHora":"2024-02-23T14:49:50","Altitude":644.1,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0},{"Latitude":-22.184174166666665,"Longitude":-47.382347,"DataHora":"2024-02-23T14:49:55","Altitude":642.5,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0},{"Latitude":-22.184170166666668,"Longitude":-47.382350333333335,"DataHora":"2024-02-23T14:50:00","Altitude":641.3,"Velocidade":0.0,"NumeroSatelites":7,"PrecisaoHorizontal":1.03,"Orientacao":0.0},{"Latitude":-22.184167833333333,"Longitude":-47.382349833333336,"DataHora":"2024-02-23T14:50:05","Altitude":641.7,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0},{"Latitude":-22.184165166666666,"Longitude":-47.38235,"DataHora":"2024-02-23T14:50:10","Altitude":642.1,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0},{"Latitude":-22.184162333333333,"Longitude":-47.382348666666665,"DataHora":"2024-02-23T14:50:15","Altitude":642.6,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0},{"Latitude":-22.1841605,"Longitude":-47.382344833333335,"DataHora":"2024-02-23T14:50:20","Altitude":643.9,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0},{"Latitude":-22.184175166666666,"Longitude":-47.382336333333335,"DataHora":"2024-02-23T14:50:25","Altitude":644.0,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0},{"Latitude":-22.184169333333333,"Longitude":-47.3823345,"DataHora":"2024-02-23T14:50:30","Altitude":645.2,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0},{"Latitude":-22.1841645,"Longitude":-47.3823315,"DataHora":"2024-02-23T14:50:35","Altitude":647.1,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0},{"Latitude":-22.184157666666668,"Longitude":-47.382335,"DataHora":"2024-02-23T14:50:40","Altitude":648.0,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0},{"Latitude":-22.184144666666668,"Longitude":-47.382339166666668,"DataHora":"2024-02-23T14:50:45","Altitude":647.4,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.94,"Orientacao":0.0},{"Latitude":-22.184144666666668,"Longitude":-47.382331333333333,"DataHora":"2024-02-23T14:50:50","Altitude":647.6,"Velocidade":0.0,"NumeroSatelites":7,"PrecisaoHorizontal":0.99,"Orientacao":0.0},{"Latitude":-22.184146833333333,"Longitude":-47.382330333333336,"DataHora":"2024-02-23T14:50:55","Altitude":646.4,"Velocidade":0.0,"NumeroSatelites":7,"PrecisaoHorizontal":0.99,"Orientacao":0.0},{"Latitude":-22.184150333333335,"Longitude":-47.38234116666667,"DataHora":"2024-02-23T14:51:00","Altitude":643.1,"Velocidade":0.0,"NumeroSatelites":7,"PrecisaoHorizontal":0.99,"Orientacao":0.0},{"Latitude":-22.184156333333334,"Longitude":-47.382357999999996,"DataHora":"2024-02-23T14:51:05","Altitude":638.8,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.89,"Orientacao":0.0},{"Latitude":-22.184162666666666,"Longitude":-47.382376333333333,"DataHora":"2024-02-23T14:51:11","Altitude":634.5,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.89,"Orientacao":0.0},{"Latitude":-22.184165833333335,"Longitude":-47.382385166666666,"DataHora":"2024-02-23T14:51:15","Altitude":632.8,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.89,"Orientacao":0.0},{"Latitude":-22.184166666666666,"Longitude":-47.382384666666667,"DataHora":"2024-02-23T14:51:20","Altitude":633.1,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.89,"Orientacao":0.0},{"Latitude":-22.184165666666665,"Longitude":-47.382381166666669,"DataHora":"2024-02-23T14:51:25","Altitude":633.7,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.89,"Orientacao":0.0},{"Latitude":-22.1841645,"Longitude":-47.382377333333331,"DataHora":"2024-02-23T14:51:30","Altitude":634.4,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.89,"Orientacao":0.0},{"Latitude":-22.184163166666668,"Longitude":-47.3823745,"DataHora":"2024-02-23T14:51:36","Altitude":634.4,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.89,"Orientacao":0.0},{"Latitude":-22.184161833333334,"Longitude":-47.3823725,"DataHora":"2024-02-23T14:51:40","Altitude":634.7,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.89,"Orientacao":0.0},{"Latitude":-22.184161833333334,"Longitude":-47.38237,"DataHora":"2024-02-23T14:51:45","Altitude":633.5,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.89,"Orientacao":0.0},{"Latitude":-22.184164833333334,"Longitude":-47.382366,"DataHora":"2024-02-23T14:51:50","Altitude":633.7,"Velocidade":0.0,"NumeroSatelites":8,"PrecisaoHorizontal":0.89,"Orientacao":0.0}]

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
[
{
"timestamp": 1708432010.9172282,
"timestamp": 1708691160.7234466,
"Classes": [
{
"Classe": "background",

View File

@ -0,0 +1,153 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
L_NO_TOUCH = false;
L_DISABLE_3D = false;
</script>
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.js"></script>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/all.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_6cd088daec204ef6f5b11de0f7d88ab2 {
position: relative;
width: 100.0%;
height: 100.0%;
left: 0.0%;
top: 0.0%;
}
.leaflet-container { font-size: 1rem; }
</style>
</head>
<body>
<div class="folium-map" id="map_6cd088daec204ef6f5b11de0f7d88ab2" ></div>
</body>
<script>
var map_6cd088daec204ef6f5b11de0f7d88ab2 = L.map(
"map_6cd088daec204ef6f5b11de0f7d88ab2",
{
center: [-22.339514335994334, -47.26402713810977],
crs: L.CRS.EPSG3857,
zoom: 18,
zoomControl: true,
preferCanvas: false,
}
);
var tile_layer_e7b9bb6cf32dda15f2ce88cd450a21ca = L.tileLayer(
"https://tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
);
tile_layer_e7b9bb6cf32dda15f2ce88cd450a21ca.addTo(map_6cd088daec204ef6f5b11de0f7d88ab2);
function geo_json_940573d5dcca3e5fe22061f09acef5e3_onEachFeature(feature, layer) {
layer.on({
});
};
var geo_json_940573d5dcca3e5fe22061f09acef5e3 = L.geoJson(null, {
onEachFeature: geo_json_940573d5dcca3e5fe22061f09acef5e3_onEachFeature,
});
function geo_json_940573d5dcca3e5fe22061f09acef5e3_add (data) {
geo_json_940573d5dcca3e5fe22061f09acef5e3
.addData(data);
}
geo_json_940573d5dcca3e5fe22061f09acef5e3_add({"features": [{"geometry": {"coordinates": [[-47.264037338109766, -22.339524535994332], [-47.26401766184665, -22.339560540751183], [-47.26400872414079, -22.339576970425245], [-47.26399979993972, -22.339593449992105], [-47.263990889109174, -22.339609979349202], [-47.26398199151551, -22.33962655838882], [-47.26397310702327, -22.33964318700223], [-47.26396423549601, -22.33965986507852], [-47.26394301077209, -22.339699942622605]], "type": "LineString"}, "id": "0", "properties": {"Dist1": 0.0, "Dist2": 0.0, "Id": 1517, "Length": 21.724783283, "Name": "Projeto"}, "type": "Feature"}, {"geometry": {"coordinates": [[-47.26401505555521, -22.339505666408137], [-47.26400067261975, -22.339531864331477], [-47.26399169682811, -22.339548288742588], [-47.26398273497559, -22.339564762798126], [-47.26397378692751, -22.339581286395244], [-47.263964852547424, -22.339597859430143], [-47.263955931699435, -22.339614481793877], [-47.2639470242459, -22.339631153376615], [-47.263938130048174, -22.339647874066152], [-47.26392924896685, -22.339664643747486], [-47.26392038086145, -22.33968146230347], [-47.263911525590025, -22.339698329615363], [-47.263902683009505, -22.339715245562264], [-47.26389385297623, -22.339732210019946], [-47.26388503534517, -22.33974922286274], [-47.26387622996941, -22.339766283963925], [-47.263867436701474, -22.33978339319349], [-47.26385865539275, -22.339800550419387], [-47.26384988589236, -22.339817755509237], [-47.26384112804865, -22.339835008327928], [-47.26383238170916, -22.339852308737367], [-47.26382364672, -22.339869656597674], [-47.263814922781556, -22.33988705205511], [-47.263806203316406, -22.33990450781026], [-47.26379747315636, -22.339922053442546], [-47.2637887225622, -22.339939707172757], [-47.26377244144222, -22.339972674804095]], "type": "LineString"}, "id": "1", "properties": {"Dist1": 0.0, "Dist2": 0.0, "Id": 1517, "Length": 57.457315127, "Name": "Projeto"}, "type": "Feature"}]});
geo_json_940573d5dcca3e5fe22061f09acef5e3.addTo(map_6cd088daec204ef6f5b11de0f7d88ab2);
</script>
<script>
var trajeto_json_940573d5dcca3e5fe22061f09acef5e3 = L.geoJson(null, {
onEachFeature: geo_json_940573d5dcca3e5fe22061f09acef5e3_onEachFeature,
style: function(feature) {
return {color: 'red'};
}
}
);
function trajeto_json_940573d5dcca3e5fe22061f09acef5e3_add (data) {
trajeto_json_940573d5dcca3e5fe22061f09acef5e3.addData(data);
}
trajeto_json_940573d5dcca3e5fe22061f09acef5e3_add({"features": []});
trajeto_json_940573d5dcca3e5fe22061f09acef5e3.addTo(map_6cd088daec204ef6f5b11de0f7d88ab2);
function adicionarGeometria(novaGeometria) {
trajeto_json_940573d5dcca3e5fe22061f09acef5e3.addData(novaGeometria);
}
function adicionarCoordenada(idGeometria, novaCoordenada) {
// Encontra a feature com o ID correspondente
var feature = trajeto_json_940573d5dcca3e5fe22061f09acef5e3.toGeoJSON().features.find(f => f.id === idGeometria);
if (feature) {
// Adiciona a nova coordenada
feature.geometry.coordinates.push(novaCoordenada);
var ft = feature;
trajeto_json_940573d5dcca3e5fe22061f09acef5e3.clearLayers();
trajeto_json_940573d5dcca3e5fe22061f09acef5e3.addData(ft);
} else {
console.log("Feature com ID " + idGeometria + " não encontrada.");
}
}
var lat = -47.264100;
var lon = -22.339500;
function loop() {
lat -= 0.0001;
lon -= 0.0001;
setTimeout(() => {
console.log(lat, lon);
adicionarCoordenada("2", [lat, lon]);
loop();
}, 1000);
}
adicionarGeometria({
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": []
},
"properties": {"Dist1": 0.0, "Dist2": 0.0, "Id": 1517, "Length": 21.724783283, "Name": "Projeto"},
"id": "2"
});
//loop();
</script>
</html>

File diff suppressed because one or more lines are too long

View File

@ -1,60 +1,60 @@
[
{
"timestamp": 1706880237.6169794,
"timestamp": 1708693386.7077937,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1706880237.6494894,
"timestamp": 1708693386.9383512,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1706880237.680491,
"timestamp": 1708693387.175393,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1706880237.712496,
"timestamp": 1708693387.3979495,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1706880237.744011,
"timestamp": 1708693387.6335027,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1706880237.7760315,
"timestamp": 1708693387.8615437,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1706880237.8090327,
"timestamp": 1708693388.051577,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1706880237.8405545,
"timestamp": 1708693388.2460964,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1706880237.8715544,
"timestamp": 1708693388.44614,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1706880237.9045656,
"timestamp": 1708693388.6351478,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []

View File

@ -1,60 +1,60 @@
[
{
"timestamp": 1708432207.1039248,
"timestamp": 1708694028.6505086,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1708432207.3070076,
"timestamp": 1708694028.850025,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1708432207.497069,
"timestamp": 1708694029.0445433,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1708432207.6906283,
"timestamp": 1708694029.2320585,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1708432207.8836892,
"timestamp": 1708694029.422578,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1708432208.0787556,
"timestamp": 1708694029.6116276,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1708432208.2768304,
"timestamp": 1708694029.8051448,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1708432208.4708998,
"timestamp": 1708694029.9976623,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1708432208.6789746,
"timestamp": 1708694030.199181,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []
},
{
"timestamp": 1708432208.8730547,
"timestamp": 1708694030.3906984,
"x_max": 640.0,
"y_max": 480.0,
"objetos": []

View File

@ -0,0 +1,33 @@
from flask import Flask, request, jsonify
from flask_cors import CORS
import sys
apiPort = sys.argv[1]
getCordenadasEndpoint = sys.argv[2]
setCordenadasEndpoint = sys.argv[3]
app = Flask(__name__)
CORS(app) # Isso habilita o CORS para todas as rotas e origens
coordenadas = {}
@app.route(setCordenadasEndpoint, methods=['POST'])
def receber_coordenadas():
dados = request.json
id = dados.get('id')
lat = dados.get('latitude')
lon = dados.get('longitude')
coordenadas[id] = {'latitude': lat, 'longitude': lon}
return jsonify({'status': 'Coordenadas recebidas com sucesso!'})
@app.route(getCordenadasEndpoint, methods=['GET'])
def servir_coordenadas(id):
if id in coordenadas:
return jsonify(coordenadas[id])
else:
return jsonify({'error': 'Coordenadas não encontradas!'}), 404
if __name__ == '__main__':
app.run(host='0.0.0.0', port=apiPort, debug=True)

View File

@ -2,67 +2,40 @@ import geopandas as gpd
import json
import sys
import folium
import requests
import re
def internet_disponivel():
"""Verifica se há conexão com a internet."""
url = 'http://www.google.com/'
timeout = 5
try:
_ = requests.get(url, timeout=timeout)
return True
except requests.ConnectionError:
return False
# Argumentos e configurações iniciais
pathFiles = sys.argv[1]
fileName = sys.argv[2]
outputName = sys.argv[3]
outputMapName = sys.argv[4]
apiEndpoit = sys.argv[5]
pastaSaida = 'Python/Output/'
# Carregar o arquivo shapefile contendo a geometria
input_shapefile = pathFiles + fileName + '.shp'
data_geometry = gpd.read_file(input_shapefile)
# Carregar o arquivo DBF com informações adicionais
input_dbf = pathFiles + fileName + '.dbf'
data_dbf = gpd.read_file(input_dbf)
# Mesclar as informações do arquivo DBF com o dataframe de geometria
data_merged = data_geometry.merge(data_dbf, left_index=True, right_index=True)
# Escolher uma coluna de geometria
geometry_column = 'geometry_y'
# Criar um novo GeoDataFrame com uma única coluna de geometria
data_geodataframe = gpd.GeoDataFrame(data_merged[[geometry_column]], geometry=geometry_column)
# Criar o campo 'properties' e preencher com as colunas do DataFrame original
data_geodataframe['properties'] = data_merged.apply(lambda row: {
'Id': row['Id_x'],
'Name': row['Name_x'],
'Length': row['Length_x'],
'Dist1': row['Dist1_x'],
'Dist2': row['Dist2_x']
}, axis=1)
# Caminho para salvar o arquivo GEOJson com as informações adicionais
output_geojson = pastaSaida + outputName
# Salvar os dados no formato GEOJson
data_geodataframe.to_file(output_geojson, driver='GeoJSON')
# Abrir o arquivo GeoJSON
with open(output_geojson, 'r') as file:
data = json.load(file)
# Iterar sobre as features no arquivo GeoJSON
for feature in data['features']:
# Obter o dicionário 'properties' dentro de 'properties'
properties = feature['properties']['properties']
# Remover a camada extra de 'properties'
feature['properties'] = properties
# Salvar o arquivo GeoJSON atualizado
with open(output_geojson, 'w') as file:
json.dump(data, file)
# Calcular os limites (bounds) da geometria
minx, miny, maxx, maxy = data_geometry.total_bounds
center = [(miny + maxy) / 2, (minx + maxx) / 2]
# Criar um mapa centrado no centro das coordenadas das geometrias
# Verificar se há conexão com a internet
if internet_disponivel():
m = folium.Map(location=center, zoom_start=12)
else:
m = folium.Map(location=center, zoom_start=12, tiles=None)
# Converter o GeoDataFrame para GeoJSON e adicionar ao mapa
geojson_data = data_geometry.to_json()
@ -70,3 +43,120 @@ folium.GeoJson(geojson_data).add_to(m)
# Salvar o mapa interativo em um arquivo HTML
m.save(pastaSaida + outputMapName)
# Caminho completo para o arquivo HTML gerado
caminho_completo_html = pastaSaida + outputMapName
# Abrir o arquivo HTML para leitura e escrita
with open(caminho_completo_html, 'r+') as arquivo_html:
# Ler o conteúdo do arquivo
conteudo_html = arquivo_html.read()
# Usar expressão regular para encontrar o ID do mapa
padrao_id_mapa = re.compile(r'id="map_(.*?)"')
resultado_busca = padrao_id_mapa.search(conteudo_html)
# Verificar se encontrou um ID de mapa
if resultado_busca:
id_mapa = 'map_' + resultado_busca.group(1)
else:
raise ValueError("Não foi possível encontrar o ID do mapa no arquivo HTML.")
# Script JavaScript para adicionar ao HTML, com o ID do mapa substituído
script_atualizacao_marcador = f"""
<script>
function trajeto_json_onEachFeature(feature, layer) {{
layer.on({{
}});
}};
var trajeto_json = L.geoJson(null, {{
onEachFeature: trajeto_json_onEachFeature,
style: function(feature) {{
return {{color: 'red'}};
}}
}}
);
function trajeto_json_add (data) {{
trajeto_json.addData(data);
}}
trajeto_json_add({{"features": []}});
trajeto_json.addTo({id_mapa});
function adicionarGeometria(novaGeometria) {{
trajeto_json.addData(novaGeometria);
}}
function saoCoordenadasIguais(coord1, coord2, tolerancia) {{
return Math.abs(coord1[0] - coord2[0]) < tolerancia && Math.abs(coord1[1] - coord2[1]) < tolerancia;
}}
function adicionarCoordenada(idGeometria, novaCoordenada) {{
var feature = trajeto_json.toGeoJSON().features.find(f => f.id === idGeometria);
if (feature) {{
var ultima = [0.0,0.0];
if (feature.geometry.coordinates.length > 0) {{
ultima = feature.geometry.coordinates[feature.geometry.coordinates.length - 1];
}}
if (!saoCoordenadasIguais(ultima, novaCoordenada, 0.000001)) {{
feature.geometry.coordinates.push(novaCoordenada);
var ft = feature;
trajeto_json.clearLayers();
trajeto_json.addData(ft);
}}
}} else {{
console.log("Feature com ID " + idGeometria + " não encontrada.");
}}
}}
adicionarGeometria({{
"type": "Feature",
"geometry": {{
"type": "LineString",
"coordinates": []
}},
"properties": {{"Dist1": 0.0, "Dist2": 0.0, "Id": 1517, "Length": 21.724783283, "Name": "Projeto"}},
"id": "Tj"
}});
</script>
<script>
var marcadorDinamico = L.marker([0, 0], {{
icon: L.AwesomeMarkers.icon({{
icon: 'info-sign',
markerColor: 'red',
prefix: 'glyphicon'
}})
}}).addTo({id_mapa});
function atualizarMarcador() {{
fetch('{apiEndpoit}')
.then(function(response) {{
return response.json();
}})
.then(function(dados) {{
var novaLatitude = dados.latitude;
var novaLongitude = dados.longitude;
var novaPosicao = [novaLatitude, novaLongitude];
marcadorDinamico.setLatLng(novaPosicao);
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
}})
.catch(function(error) {{
console.error('Erro ao atualizar o marcador:', error);
}});
}}
// Atualiza o marcador a cada 2 segundos
setInterval(atualizarMarcador, 2000);
</script>
"""
# Inserir o script no conteúdo HTML
conteudo_atualizado = conteudo_html.replace('</html>', script_atualizacao_marcador + '</html>')
# Agora, reabrir o arquivo para escrita e sobrescrever o conteúdo com a versão atualizada
with open(caminho_completo_html, 'w') as arquivo_html:
arquivo_html.write(conteudo_atualizado)

View File

@ -1 +1 @@
{"Conectado":false,"QuantidadeBicos":4,"AtuacaoNivelAlto":false,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B02","Posicao":2,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B03","Posicao":3,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B04","Posicao":4,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B05","Posicao":5,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B06","Posicao":6,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B07","Posicao":7,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B08","Posicao":8,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B09","Posicao":9,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B10","Posicao":10,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0}],"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":10,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":false,"DelayAmostragem":200,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[["Calibragem","00450"]],"UnidadeMedida":"L/m","Leituras":[0.0,0.0],"ValorMinimo":0.0,"ValorMaximo":26.67,"LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":false,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","Leituras":null,"ValorMinimo":0.0,"ValorMaximo":0.0,"LimiteMaximo":25.0,"LimiteMinimo":3.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[],"UnidadeMedida":"psi","Leituras":[0.4,337.0],"ValorMinimo":0.0,"ValorMaximo":0.77,"LimiteMaximo":0.0,"LimiteMinimo":0.0}],"PercentualInicioPulverizacao":0.3,"MassaReservatorio":0.0,"PercentualReservatorio":0.0,"MediaNivelFluxo":0.0,"PressaoLinha":0.4}
{"Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":0.0,"CapacidadeReservatorio":30.0,"AtuacaoNivelAlto":false,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B02","Posicao":2,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B03","Posicao":3,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B04","Posicao":4,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B05","Posicao":5,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B06","Posicao":6,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B07","Posicao":7,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B08","Posicao":8,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B09","Posicao":9,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0},{"ID":"B10","Posicao":10,"Atuado":false,"Comandar":false,"Inicializado":false,"Testando":false,"Funcoes":[21],"StatusBico":false,"MediaNivelFluxo":0.0}],"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":10,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":false,"DelayAmostragem":200,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[["Calibragem","00450"]],"UnidadeMedida":"L/m","Leituras":[0.0,0.0],"ValorMinimo":0.0,"ValorMaximo":26.67,"LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":false,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","Leituras":null,"ValorMinimo":0.0,"ValorMaximo":0.0,"LimiteMaximo":25.0,"LimiteMinimo":3.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[],"UnidadeMedida":"psi","Leituras":[0.4,337.0],"ValorMinimo":0.0,"ValorMaximo":0.77,"LimiteMaximo":0.0,"LimiteMinimo":0.0}],"PercentualInicioPulverizacao":0.3,"MassaReservatorio":0.0,"VolumeReservatorio":0.0,"PercentualReservatorio":0.0,"MediaNivelFluxo":0.0,"PressaoLinha":0.4}

View File

@ -1 +1 @@
9afcf39e89a0c933d00d28453c0540cd2a653d67fc4cba20e1c1f33dc48d9754
34d3ac2f5f9f7d9ebbd9347a15a7e200bdba0f7644c8b3c44ce75579b5cf120b

View File

@ -417,3 +417,4 @@ C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Utils\offline_maps\script
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Utils\offline_maps\style.css
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Utils\offline_maps\webStorage.js
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Utils\offline_maps\appcache.manifest
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Scripts\api.py

View File

@ -0,0 +1,19 @@
import json
# Substitua isso pelo seu JSON original
trajeto_json = {"features": [{"geometry": {"coordinates": [[-47.264037338109766, -22.339524535994332], [-47.26401766184665, -22.339560540751183], [-47.26400872414079, -22.339576970425245], [-47.26399979993972, -22.339593449992105], [-47.263990889109174, -22.339609979349202], [-47.26398199151551, -22.33962655838882], [-47.26397310702327, -22.33964318700223], [-47.26396423549601, -22.33965986507852], [-47.26394301077209, -22.339699942622605]], "type": "LineString"}, "id": "0", "properties": {"Dist1": 0.0, "Dist2": 0.0, "Id": 1517, "Length": 21.724783283, "Name": "Projeto"}, "type": "Feature"}, {"geometry": {"coordinates": [[-47.26401505555521, -22.339505666408137], [-47.26400067261975, -22.339531864331477], [-47.26399169682811, -22.339548288742588], [-47.26398273497559, -22.339564762798126], [-47.26397378692751, -22.339581286395244], [-47.263964852547424, -22.339597859430143], [-47.263955931699435, -22.339614481793877], [-47.2639470242459, -22.339631153376615], [-47.263938130048174, -22.339647874066152], [-47.26392924896685, -22.339664643747486], [-47.26392038086145, -22.33968146230347], [-47.263911525590025, -22.339698329615363], [-47.263902683009505, -22.339715245562264], [-47.26389385297623, -22.339732210019946], [-47.26388503534517, -22.33974922286274], [-47.26387622996941, -22.339766283963925], [-47.263867436701474, -22.33978339319349], [-47.26385865539275, -22.339800550419387], [-47.26384988589236, -22.339817755509237], [-47.26384112804865, -22.339835008327928], [-47.26383238170916, -22.339852308737367], [-47.26382364672, -22.339869656597674], [-47.263814922781556, -22.33988705205511], [-47.263806203316406, -22.33990450781026], [-47.26379747315636, -22.339922053442546], [-47.2637887225622, -22.339939707172757], [-47.26377244144222, -22.339972674804095]], "type": "LineString"}, "id": "1", "properties": {"Dist1": 0.0, "Dist2": 0.0, "Id": 1517, "Length": 57.457315127, "Name": "Projeto"}, "type": "Feature"}]}
offset_latitude = 0.0000102 # Aproximadamente 75cm em latitude
offset_longitude = 0.0000102 # Aproximadamente 75cm em longitude, simplificação
# Aplicar offset a cada coordenada
for feature in trajeto_json['features']:
for i, coord in enumerate(feature['geometry']['coordinates']):
# Aplicando o offset
coord[0] += offset_longitude # Longitude
coord[1] += offset_latitude # Latitude
# Convertendo o objeto modificado de volta para JSON
trajeto_json_modificado = json.dumps(trajeto_json)
print(trajeto_json_modificado)