Parceiro Acadêmico: Visiona Espacial
O projeto visa a implementação de um Sistema de Informação Geográfica (SIG) para aprimorar a eficiência das análises e otimizar os processos internos. Embora os dados necessários estejam disponíveis no ProAgro, programa do governo federal destinado ao financiamento agrícola para pequenos e médios produtores brasileiros, a falta de organização, a presença de informações sensíveis e a sobrecarga de dados representam desafios significativos.
A proposta consiste em uma solução abrangente, que inclui a coleta e o refinamento dos dados públicos do ProAgro, a reestruturação eficiente da base de dados e o desenvolvimento de um SIG personalizado. Este sistema visa simplificar e organizar as informações, proporcionando aos usuários uma compreensão mais fácil e facilitando a análise dos dados. A proposta busca simplificar e organizar as informações, proporcionando aos usuários uma compreensão mais fácil e facilitando a análise dos dados. Destaca-se a organização do banco de dados público do ProAgro para permitir consultas e análises rápidas no Sistema de Informações Geográficas.
- MySQL: É um sistema de gerenciamento de banco de dados (SGBD) relacional, ou seja, que utiliza a linguagem SQL como interface. Lançado sobre a licença GPL, possui como desenvolvedor a Oracle Corporation.
- MongoDB: É um banco de dados NoSQL que armazena dados em documentos flexíveis usando um formato JSON. E oferece escalabilidade e flexibilidade para lidar com grandes volumes de dados e modelos de dados dinâmicos.
- Python: É uma linguagem de programação de alto nível, interpretada e de propósito geral, conhecida por sua simplicidade, legibilidade e ampla aplicabilidade em diferentes domínios, desde desenvolvimento web até análise de dados.
- React: É uma biblioteca JavaScript para construir interfaces de usuário interativas e reativas. Desenvolvida pelo Facebook, permite a criação de componentes reutilizáveis para construir aplicativos web eficientes.
- Docker: É uma plataforma de virtualização leve e portátil que permite empacotar, distribuir e executar aplicativos de forma isolada, garantindo a portabilidade e consistência do ambiente de desenvolvimento e produção.
- GIT: É uma ferramenta de design colaborativo baseada na nuvem, que permite criar interfaces de usuário, protótipos interativos e compartilhar facilmente os designs com equipes de trabalho, agilizando o processo de design e feedback em projetos de design de produtos e interfaces digitais.
Implementei a configuração inicial do mapa e controles no componente Mapa do projeto. Primeiramente, personalizei o ícone padrão dos marcadores utilizando a biblioteca Leaflet. Isso foi feito através da definição de um novo ícone com uma imagem principal (icon) e uma sombra (iconShadow), sendo aplicado a todos os marcadores no mapa.
Código em React - Configuração do Mapa
import React, { Component } from "react";
import { MapContainer, TileLayer } from "react-leaflet";
import { SelectButton } from 'primereact/selectbutton';
import { Button } from "primereact/button";
import { Link } from "react-router-dom";
import L from "leaflet";
import { OpenStreetMapProvider, GeoSearchControl } from "leaflet-geosearch";
import "leaflet/dist/leaflet.css";
import "leaflet-geosearch/dist/geosearch.css";
import "leaflet-easyprint";
import 'primeicons/primeicons.css';
import icon from 'leaflet/dist/images/marker-icon.png';
import iconShadow from 'leaflet/dist/images/marker-shadow.png';
import { Chart } from "primereact/chart";
const DefaultIcon = L.icon({
iconUrl: icon,
shadowUrl: iconShadow,
});
L.Marker.prototype.options.icon = DefaultIcon;
const search = new GeoSearchControl({
provider: new OpenStreetMapProvider({
params: {
countrycodes: 'BR',
},
}),
autoComplete: true,
style: 'bar',
notFoundMessage: 'Endereço não encontrado!',
searchLabel: 'Buscar endereço',
showMarker: false,
showPopup: false,
autoClose: true
});
class Mapa extends Component {
constructor(props) {
// ... (Código do construtor)
}
componentDidMount() {
// ... (Configuração de controles após o componente ser montado)
}
// ... (Métodos adicionais, como handleZoomChange, addCustomZoomResetControl, handleZoomReset, renderizarGlebas, toggleOption, etc.)
render() {
return (
<div id="mapa">
<MapContainer center={[-21, -49]} zoom={7} style={{ height: "100vh" }} ref={(ref) => (this.leafletMap = ref)}>
<TileLayer url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" />
{this.state.plotarGlebas && this.renderizarGlebas()}
</MapContainer>
<div style={{ position: 'absolute', top: '10px', left: "93%", zIndex: 1000 }}>
<Link to="/">
<Button label="Sair" icon="pi pi-sign-out" severity="info" aria-label="Sair" />
</Link>
</div>
</div>
);
}
}
export default Mapa;
Em seguida, configurei a barra de busca (GeoSearchControl) para permitir a busca de endereços no mapa. Utilizei a biblioteca Leaflet-Geosearch, especificando o provedor OpenStreetMap para pesquisa no Brasil (countrycodes: 'BR'). Personalizei o estilo da barra de busca como uma barra (style: 'bar') e configurei mensagens relacionadas à busca, como a mensagem exibida quando nenhum endereço é encontrado (notFoundMessage) e o rótulo da barra (searchLabel).
Código em React - Impressão do Mapa
const exportPrint = L.easyPrint({
title: 'Imprimir Mapa',
position: 'topleft',
sizeModes: ['A4Landscape'],
filename: 'mapa',
exportOnly: true,
hideControlContainer: true,
});
class Mapa extends Component {
componentDidMount() {
setTimeout(() => {
this.leafletMap.addControl(search);
this.leafletMap.addControl(exportPrint); // Adição do controle de impressão ao mapa
this.addCustomZoomResetControl();
this.leafletMap.on('zoom', this.handleZoomChange);
this.leafletMap.on('moveend', this.handleZoomChange);
}, 100);
}
render() {
return (
<div id="mapa">
<MapContainer center={[-21, -49]} zoom={7} style={{ height: "100vh" }} ref={(ref) => (this.leafletMap = ref)}>
<TileLayer url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" />
{this.state.plotarGlebas && this.renderizarGlebas()}
</MapContainer>
<div style={{ position: 'absolute', top: '10px', left: "93%", zIndex: 1000 }}>
<Link to="/">
<Button label="Sair" icon="pi pi-sign-out" severity="info" aria-label="Sair" />
</Link>
</div>
</div>
);
}
}
export default Mapa;
Além disso, integrei a funcionalidade de impressão do mapa (easyPrint) para permitir que os usuários imprimam o mapa de forma fácil e personalizada. Defini o título, posição e opções de exportação da impressão, como modos de tamanho de página e ocultação do contêiner de controle.
No componente Mapa, no método componentDidMount, adicionei os controles de busca e impressão ao mapa, bem como um controle personalizado para resetar o zoom. Também registrei manipuladores de eventos para detectar mudanças no zoom e movimentação do mapa, desencadeando a exibição das glebas quando o zoom atinge um nível específico.
Código em React - Método Render
render() {
return (
<div id="mapa">
<MapContainer center={[-21, -49]} zoom={7} style={{ height: "100vh" }} ref={(ref) => (this.leafletMap = ref)}>
<TileLayer url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" />
{this.state.plotarGlebas && this.renderizarGlebas()}
</MapContainer>
<div style={{ position: 'absolute', top: '10px', left: "93%", zIndex: 1000 }}>
<Link to="/">
<Button label="Sair" icon="pi pi-sign-out" severity="info" aria-label="Sair" />
</Link>
</div>
</div>
);
}
No método render, configurei a estrutura do mapa usando o componente MapContainer fornecido pelo React-Leaflet, adicionando uma camada de azulejos do OpenStreetMap. A renderização das glebas é condicional, ocorrendo apenas quando a variável de estado plotarGlebas é verdadeira. Adicionalmente, incluí um botão de saída no canto superior direito, permitindo ao usuário retornar à página principal.
Essas implementações visam criar uma experiência de usuário interativa e informativa ao explorar o mapa de glebas do ProAgro.
Como Product Owner, assumi a responsabilidade de liderar a definição e priorização do backlog de produto, assegurando que as metas estivessem alinhadas com os objetivos estabelecidos. Colaborei estreitamente com as partes interessadas para compreender suas necessidades, traduzindo-as em requisitos claros e priorizados.
Conduzi uma análise detalhada dos desafios relacionados à organização dos dados provenientes do ProAgro, destacando a falta de estrutura e a sobrecarga de informações. Com base nessa análise, elaborei o backlog de produto, identificando funcionalidades cruciais para superar os obstáculos identificados. Priorizei as histórias de usuário considerando o valor agregado e o impacto nos resultados do projeto.
Durante o ciclo de desenvolvimento, mantive uma comunicação contínua com a equipe, esclarecendo dúvidas, fornecendo direcionamentos e garantindo a conformidade com os objetivos do projeto. Facilitei reuniões de planejamento de sprint para revisão e refinamento do backlog, colaborando na definição de metas para cada iteração. A abordagem permitiu uma execução mais eficiente, com um fluxo de trabalho contínuo e uma compreensão aprimorada das expectativas e prazos por parte da equipe de desenvolvimento.
Durante a execução do projeto, enfrentei desafios significativos que contribuíram para meu aprendizado e crescimento profissional. Lidar com a falta de organização e a presença de informações sensíveis nos dados públicos do ProAgro exigiu habilidades avançadas de manipulação e refinamento de dados.
Ao reestruturar a base de dados de forma eficiente, pude aprimorar minhas habilidades em modelagem e organização de informações geográficas. A criação de um Sistema de Informação Geográfica (SIG) personalizado demandou compreensão aprofundada de tecnologias específicas e a capacidade de integrar dados de maneira coesa.
Além disso, destaco a importância de simplificar e organizar as informações para facilitar a compreensão e análise dos dados pelos usuários. Essa abordagem visou melhorar a usabilidade do sistema, proporcionando uma experiência mais intuitiva e eficiente.
Participar ativamente da organização do banco de dados público do ProAgro permitiu-me desenvolver estratégias para consultas e análises rápidas no contexto do SIG. Essa experiência não apenas aprimorou minhas habilidades técnicas, mas também me proporcionou uma compreensão mais profunda dos desafios enfrentados ao lidar com dados governamentais sensíveis.
No geral, o projeto me proporcionou uma oportunidade valiosa de aplicar meus conhecimentos em um contexto prático, contribuindo para o desenvolvimento de soluções eficientes e impactantes.
Tecnologia/Metodologia | Nota | Classificação |
---|---|---|
Metodologia Scrum - Product Owner | ★★★★★ | Sei fazer com autonomia |
MySQL | ★★★★☆ | Sei fazer com ajuda |
MongoDB | ★★★★☆ | Sei fazer com ajuda |
Python | ★★★★★ | Sei fazer com autonomia |
React | ★★★★★ | Sei fazer com autonomia |
Docker | ★★★★☆ | Sei fazer com ajuda |
GIT | ★★★★★ | Sei fazer com autonomia |
Habilidade | Descrição |
---|---|
Colaboração Interfuncional | Fomentei a colaboração entre diferentes áreas, promovendo uma abordagem integrada na execução do projeto. |
Empatia com o Usuário | Aprofundei minha compreensão das necessidades dos usuários, priorizando funcionalidades que agregam valor real. |
Estimativas e Métricas | Refinei as habilidades de estimar prazos e medir o desempenho do time, utilizando métricas relevantes. |
Negociação | Aprimorei minhas habilidades de negociação para alinhar expectativas do cliente com a capacidade da equipe. |
Otimização Contínua | Implementei práticas de melhoria contínua, analisando retrospectivas para aprimorar o processo de desenvolvimento. |