Escolar Documentos
Profissional Documentos
Cultura Documentos
08 DE DEZEMBRO DE 2022
Introdução 2
Primeiros Passos 2
Operação do SIMFaz 4
Entrada de Dados no SIMFaz 4
Cadastro de Pessoas 7
Criação do Cadastro 12
Conjunto de Análises 13
Relatórios 16
Consultas 26
Requisição 27
Resposta 28
Auditabilidade 32
Área de Análise 38
Dossiê de Área 39
Metódo 1 vs Método 2 43
Campos Customizados 44
1
Introdução
O objetivo deste documento é descrever como a operação típica do SIMFaz (com foco
em verificações socioambientais) pode ser recriada através do consumo dos serviços e
funcionalidades do SIMFaz em outro sistema de informação, através da integração por
meio de APIs.
Primeiros Passos
Antes de qualquer coisa, faz-se necessário a aquisição de um token de acesso ao
sistema. Esse token pode ser obtido por meio de um contrato com a Agrosatélite. Ao
obter um contrato junto à Agrosatélite, pode-se então solicitar o Client ID e o Client
Secret, a partir dos quais será possível obter um token de acesso por meio do endpoint
api/v1/auth/token conforme segue:
Caso haja um usuário já disponível no contrato, o token pode ser adquirido por meio do
seguinte endpoint:
2
Ambos os endpoints possuem o mesmo retorno, um JSON como se segue:
{
"access_token": "W0hbZkS6PlGKhD5bKqPlTlrQyFMcSo",
"expires_in": 1800,
"token_type": "Bearer",
"scope": "read write",
"refresh_token": "R9VTvEf07lCsAb5u08AVpl8CN66l8f"
}
3
Operação do SIMFaz
A interface gráfica do SIMFaz será utilizada para ilustrar os conceitos, porém não faz
parte da solução entregue para integração de sistemas.
No SIMFaz essas informações são inseridas no sistema por meio dos cadastros e seus
dados componentes. Um cadastro pode representar a criação e informação do mesmo
como entidade (Figura 1).
4
Figura 3: Tela de cadastros: a. Criação de ‘Cadastros’ e b. Entidades (pessoas físicas ou jurídicas)
{
"name": "João Pessoa",
"document_type": "CPF",
"document": "11111111111"
}
O vínculo da pessoa será entre ela e o cadastro, portanto, somente ao final do cadastro,
com o id disponível, cria-se o vínculo (ARRENDATÁRIO ou PROPRIETÁRIO).
5
(endpoint /api/v1/matriculations). O conjunto de nomes, geometrias e código compõem
uma área de interesse. E, por sua vez, o cadastro possui uma única área de interesse.
6
Entrada de dados via API
A interface Web do SIMFaz já agrupa algumas sequências de chamadas para a API em
cada etapa realizada pelo navegador. Ao realizar a entrada de dados pela API é
necessário sequenciar algumas chamadas. Esse processo pode parecer complicado à
primeira vista, porém fica simples após se entender os conceitos e como eles se
relacionam.
Cadastro de Pessoas
{
"unit": 1,
"entity": 1,
"relation_type": "OWNER"
}
7
É preciso repetir essa ação para todas as pessoas que houverem no cadastro, criando-se
o relacionamento para cada uma delas, lembrando que há uma limitação de até 10
pessoas por cadastro.
Vale ressaltar que os dados das pessoas só serão analisados no relatório socioambiental
no caso em que houver vínculo entre a pessoa e o cadastro. Não é possível passar
pessoas para criar relatórios, apenas cadastros geram relatórios socioambientais.
{
"label": "Minha fazenda",
"geometry": {
"type": "Polygon",
"coordinates": [ [ [ -55.016301808054038, -11.386921655736476 ],
[ -55.020683480420082, -11.403525887860452 ],
[ -55.00246494795072, -11.418977048309152 ],
[ -54.99231791720829, -11.411366775252329 ],
[ -54.987936244842246, -11.397760529484071 ],
[ -54.993470988883566, -11.387152270071532 ],
[ -55.012842593028203, -11.382770597705482 ],
8
[ -55.016301808054038, -11.386921655736476 ] ] ]
}
}
{
"code": "MT-5107065-B771EB9156A1426D9A692B9DDF981D99",
"code_type": "CAR"
}
9
Recuperando Geometria a partir de Código
O SIMFaz disponibiliza endpoints para a recuperação da geometria do CAR ou do INCRA
através de suas respectivas consultas, que serão tratadas posteriormente neste
documento (ir para endpoints de consultas).
{
"query_parameters":{
"geometry":{
"type":"Point",
"coordinates":[
-50.86216222920524,
-10.223389933294143
]
}
}
}
{
"query_parameters":{
"car":"MT-5108600-D57E.3A04.9CBE.40AD.A032.986D.21D5.73F7"
}
}
E para o INCRA:
{
"query_parameters":{
"incra":"2078b1c5-c0f0-4ce4-bfbe-006b7d3760ef"
}
}
A partir do retorno das consultas, seja pelo CAR, INCRA ou pelo ponto, é preciso ainda
fazer uma busca pela resposta detalhada, que então trará a geometria no campo details
10
(será visto em maiores detalhes na seção de consultas do presente documento como
fazer a recuperação dos dados de uma consulta específica).
{
"name": "Minha Fazenda",
"matriculations": [1],
"boundaries": [1]
}
11
Criação do Cadastro
Após a criação da(s) pessoa(s) e da área de interesse, pode-se então concluir o cadastro
dando um nome e associando-o à área de interesse, para isso, passa-se como
parâmetro o id da área de interesse criada e um nome, por exemplo:
{
"name": "Minha Fazenda",
"interest_area": 1
}
Para o caso do vínculo das pessoas ao cadastro, como mencionado anteriormente, seria
necessário endpoints diferentes associando o id do cadastro criado com o id das
pessoas criadas ou recuperadas.
12
Geração de Relatórios Socioambientais
Conjunto de Análises
Uma vez com o cadastro criado, independente da quantidade de atributos que possa
conter, a criação de um conjunto de análises para aquele cadastro pode ser feita com
uma única chamada à API passando simplesmente o identificador do cadastro (valor
associado com campo ‘unit’) através do endpoint api/v1/analyses_set:
Parâmetros:
{
"unit":1
}
Nesse caso, todas as análises contidas no contrato serão realizadas para todos os
atributos contidos dentro do cadastro. Cabe mencionar que as análises espaciais
utilizarão os atributos espaciais do cadastro, as análises com CPF/CNPJ utilizarão os
atributos com tais campos e as análises com código do CAR utilizarão os códigos do
CAR dentro do cadastro.
{
"unit": 1,
"queries": ["embargos-ibama-espacial", "assentamentos-rurais"]
}
13
Independente da forma como os parâmetros são passados (se com uma lista de queries
ou não), o resultado é retornado no mesmo formato, uma lista de respostas para cada
query com os campos id, query, user, sources e response.
14
A seguir se apresenta um exemplo do JSON da resposta do analyses_set:
[
{
"id": 1,
"query": "terras_indigenas",
"user": 1,
"sources": [
{
"id": 1,
"class": "boundary"
}
],
"response": {
"success": true,
"value": "0",
"source_date": "2021-02-09T11:50:50-03:00",
"media": [],
"creation_date": "2021-06-30T15:44:55.442426-03:00"
}
},
{
"id": 2,
"query": "embargos_ibama_espacial",
"user": 1,
"sources": [
{
"id": 1,
"class": "boundary"
}
],
"response": {
"success": true,
"value": "0",
"source_date": "2021-04-19T09:10:00.516505-03:00",
"media": [],
"creation_date": "2021-06-30T15:44:56.954958-03:00"
}
}
]
15
Relatórios
Uma vez que tenha em mãos os ids das requisições, para salvar essas informações
como um relatório (no SIMFaz) é preciso passá-la para um endpoint específico
(/api/v1/reports/) para criação do relatório.
Caso apenas a análise seja feita sem salvar o relatório, as consultas realizadas não ficam
salvas na base de dados do cliente acessível pelos usuários. Na aplicação Web, isso é
identificado a partir do ícone salvar. Porém, todas as consultas que foram executadas,
salvas ou não como relatório, ficam registradas no backend (servidor) do SIMFaz e
podem ser consultadas pela API.
16
Figura 12: Tela análise feita e opção de salvar
No caso da utilização da API, para criar um relatório, basta passar como parâmetro o id
da unidade que gerará o relatório e uma lista com os ids das requisições retornadas pela
análise. Exemplo para a análise anterior:
{
"unit": 1,
"requests": [1, 2]
}
Dessa forma, será retornado a estrutura de um relatório, um JSON com o id, unit,
contract, created_by, queries, requests, type e creation_date.
● O id, unit, contract e created_by indicam respectivamente o id do relatório
recém-criado, o id do cadastro usado para gerar o relatório, o id do contrato que
o usuário está autenticado, e o id do usuário autenticado;
● queries é uma lista com todas as consultas disponíveis dentro do contrato do
17
usuário que está autenticado;
● requests é basicamente a lista com os ids das requisições salvas naquele
relatório;
● type indica o tipo de relatório, para análises socioambientais o valor é
“socioambiental”.
Estrutura do JSON retornado de um relatório:
{
"id": 1,
"unit": 1,
"contract": 1,
"created_by": 1,
"queries": [
"embargos_ibama_certidao",
"embargos_ibama_historico",
"embargos_ibama_espacial",
"trabalho_escravo",
"ldi_para_car",
"terras_indigenas",
"desmatamento_prodes",
"unidades_de_conservacao",
],
"requests": [
1,
2
],
"type": "socioambiental",
"creation_date": "2021-06-30T15:58:38.361332-03:00"
}
{
"id": 1,
"unit": 1,
"contract": 1,
"created_by": 1,
"queries": [
"embargos_ibama_certidao",
"embargos_ibama_historico",
"embargos_ibama_espacial",
"trabalho_escravo",
18
"ldi_para_car",
"terras_indigenas",
"desmatamento_prodes",
"unidades_de_conservacao",
],
"requests": [
{
"id": 1,
"query": "terras_indigenas",
"user": 1,
"sources": [
{
"id": 1,
"class": "boundary"
}
],
"response": {
"success": true,
"value": "0",
"source_date": "2021-02-09T11:50:50-03:00",
"media": [],
"creation_date": "2021-06-30T15:44:55.442426-03:00"
}
},
{
"id": 2,
"query": "embargos_ibama_espacial",
"user": 1,
"sources": [
{
"id": 1,
"class": "boundary"
}
],
"response": {
"success": true,
"value": "0",
"source_date": "2021-04-19T09:10:00.516505-03:00",
"media": [],
"creation_date": "2021-06-30T15:44:56.954958-03:00"
}
],
"type": "socioambiental",
"creation_date": "2021-06-30T15:58:38.361332-03:00"
}
19
Caso se deseje obter mais informações a respeito da resposta de uma consulta
específica, por exemplo, para verificar em quais anos do PRODES houve problema em
determinada consulta, pode-se utilizar o id de um request num endpoint para recuperar
a resposta detalhada. Caso se deseje saber os detalhes de cada resposta, é necessário
fazer uma requisição para cada response (recurso que armazena as respostas). O retorno
será o seguinte:
{
"id":3,
"query":"desmatamento_prodes",
"user":1,
"sources":[
{
"id":1,
"class":"boundary"
}
],
"query_parameters":{
"year":2008,
"geometry":{
"coordinates":[
[
[
[
-47.85361917,
-11.23792639
],
[
-47.84523583,
-11.24344889
],
...
[
-47.85361917,
-11.23792639
]
]
]
],
"type":"MultiPolygon"
}
},
"response":{
"success":true,
20
"value":"0.0363894796964155",
"details":{
"features":[
{
"properties":{
"id":882164.0,
"class_name":"d2015",
"satellite":null,
"julday":0.0,
"pathrow":"222/68",
"dsfnv":0.0,
"source":"inpe cerrado",
"scene_id":0.0,
"ano":"2015",
"ano_fim":2015.0,
"classname":"D_2015",
"intersection":{
"properties":{
"area_m2":1270,
"area_percentage":0.03640056639467809
},
"coordinates":[
[
[
[
-47.848531609256426,
-11.263975291786256
],
[
-47.84841600929133,
-11.263595463160073
],
[
-47.84837038669102,
-11.263595463160073
],
[
-47.84851639,
-11.26398417
],
[
-47.848531609256426,
-11.263975291786256
]
]
21
],
[
[
[
-47.84833229445356,
-11.26349404961437
],
[
-47.84844589016564,
-11.262926072580115
],
[
-47.84811895494444,
-11.262926072580115
],
[
-47.84833229445356,
-11.26349404961437
]
]
]
],
"type":"MultiPolygon"
},
"fonte":"PRODES bioma Cerrado - INPE",
"sensor":null,
"ano_inicio":2015.0,
"view_date":"27/08/2015",
"mainclass":"desmatamento"
},
"geometry":{
"coordinates":[
[
[
-47.84293165926863,
-11.26208899171354
],
[
-47.84293165926863,
-11.262220943841442
],
...
[
-47.84293165926863,
-11.26193687858404
22
],
[
-47.84293165926863,
-11.26208899171354
]
]
],
"type":"Polygon"
},
"type":"Feature"
}
],
"type":"FeatureCollection"
},
"media":[
],
"source_date":"2021-01-29T00:00:05-03:00",
"creation_date":"2021-06-22T15:48:40.534419-03:00"
}
}
23
Na aplicação Web, ao recuperar os detalhes da análise é possível visualizá-la no mapa:
24
Por outra parte, existe uma última categoria de análises, as análises não realizadas. Essas
são as análises que fazem parte do contrato do usuário autenticado mas que não podem
ser realizadas devido a ausência dos dados necessários no cadastro (no exemplo
anterior, o cadastro não possui um CAR nem um CAR do Pará, então as análises do LDI e
do Car Nacional não foram realizadas).
Essas situações são identificadas pela descrição da resposta que diz que não foi possível
realizar a consulta, tal como se apresenta na Figura 7.
25
Consultas
O objetivo desta seção é descrever como os parâmetros passados no cadastro são
utilizados pelas diferentes queries disponíveis e como são apresentadas as respostas
(detalhadas) para a requisições (requests) destas queries.
{
"code": "embargos_ibama_espacial",
"name": "Embargos Ibama Espacial",
"description": "Embargos Ibama Espacial",
"required_parameters": "('cpf') OR ('cpnj') OR ('geometry') OR
('geometry' AND 'cpf') OR ('geometry' AND 'cnpj')",
"optional_parameters": "('date')",
"last_modification_date": "2012-06-07T22:50:19-03:00",
"creation_date": "2012-06-07T22:50:19-03:00"
}
26
● optional_parameters é uma lista com possíveis opções para parâmetros
opcionais da consulta Embargos Ibama Espacial, o valor "('date')" significa que a
consulta pode receber uma data.
Requisição
Exemplo de requisição de consulta por geometria, sem parâmetro de data (busca pelo
dado mais recente). O parâmetro de geometria é ilustrado com dados reais, já que é
mais complexo que os parâmetros utilizados usualmente:
{
"query_parameters":{
"geometry":{
"type": "Polygon",
"coordinates": [ [ [ -55.016301808054038, -11.386921655736476 ],
[ -55.020683480420082, -11.403525887860452 ],
[ -55.00246494795072, -11.418977048309152 ],
[ -54.99231791720829, -11.411366775252329 ],
[ -54.987936244842246, -11.397760529484071 ],
[ -54.993470988883566, -11.387152270071532 ],
[ -55.012842593028203, -11.382770597705482 ],
[ -55.016301808054038, -11.386921655736476 ] ] ]
},
"date":"<YYYY-MM-DD>"
}
}
Tanto o CPF como o CNPJ podem ser passados sem pontuação ou com pontuação.
Enquanto a geometria é passada como GeoJson ou WKT (pode ser do tipo Polygon,
Point ou Multipolygon).
27
Resposta
Exemplo da resposta:
{
"id": 6644,
"request": 6757,
"success": true,
"value": "34.31",
"details": {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"coordinates": [
[
[
[
-55.013911,
-11.404295
],
[
-55.01807,
-11.400175
],
[
-55.015,
-11.386854
]
]
],
[
[
[
-55.014462,
-11.384518
],
[
-55.009786,
-11.36422
],
[
-54.984601,
-11.380244
28
]
]
]
],
"type": "MultiPolygon"
},
"properties": {
"intersection": {
"coordinates": [
[
[
[
-55.013911,
-11.404295
],
[
-55.01807,
-11.400175
],
[
-55.015,
-11.386854
]
]
],
[
[
[
-54.995913,
-11.386599910414242
],
[
-54.995913,
-11.387213
],
[
-54.997814,
-11.387158
]
]
],
[
[
[
-55.00622775215621,
29
-11.384266811712244
],
[
-55.007596,
-11.386775
],
[
-55.00659,
-11.387487
]
]
]
],
"type": "MultiPolygon",
"properties": {
"area_m2": 3406721,
"area_percentage": 34.31
}
}
}
},
{
"type": "Feature",
"geometry": {
"coordinates": [
[
[
-54.9965,
-11.396581
],
[
-55.002558,
-11.409301
],
[
-55.005118,
-11.408317
]
]
],
"type": "Polygon"
},
"properties": {
"intersection": {
"coordinates": [
30
[
[
-54.9965,
-11.396581
],
[
-55.002558,
-11.409301
],
[
-55.005118,
-11.408317
]
]
],
"type": "Polygon",
"properties": {
"area_m2": 1208767,
"area_percentage": 12.18
}
}
}
}
]
},
"media": [],
"source_date": "2019-06-05T00:02:08-03:00",
"creation_date": "2019-06-05T15:11:33.840461-03:00"
}
31
○ Se nenhuma geometria é passada na consulta (se usuário passar somente
CPF ou CNPJ): Esse valor é retornado como "0" se não houver embargo e
como "100" se houver embargo.
● creation_date: indica o momento que o resultado da consulta é produzido e
enviado ao consumidor;
● details: retorna detalhes sobre os embargos encontrados. Caso o usuário tenha
passado uma geometria na consulta, o campo details.properties.intersection vai
trazer as coordenadas das intersecções com os embargos, assim como a área
embargada (area_m2) e porcentagem da área da geometria consultada que está
embargada por um embargo específico (area_percentage).
Auditabilidade
A requisição realizada e a respectiva resposta podem ser acessada diversas vezes,
permanecendo armazenada por um período de 5 anos, utilizando o seguinte endpoint:
api/v1/queries/{query_code}/requests/{id}
Por padrão, um usuário só pode acessar requisições e respostas que estão associadas a
requisições geradas pelo próprio usuário. Caso um usuário tente acessar conteúdo sem
esse vínculo, a resposta será um HTTP Status Code 404 Not Found (que não confirma
nem nega a existência do conteúdo buscado, tampouco dá acesso indevido).
{
"count": 3,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"query_parameters": {
"geometry": {
32
"coordinates": [
[
[
[
-57.8964,
-10.1152
],
[
-57.8966,
-10.1098
],
[
-57.9224,
-10.117
],
[
-57.921,
-10.1229
],
[
-57.8964,
-10.1152
]
]
]
],
"type": "MultiPolygon"
}
},
"response": 1,
"created_by": "<USERNAME>",
"contract": "<ID_CONTRATO>",
"creation_date": "2019-03-06T13:00:07.881289Z"
},
{
"id": 2,
"query_parameters": {
"cpf": "<CPF>"
},
"response": 2,
"created_by": "<USERNAME>",
"contract": "<ID_CONTRATO>",
"creation_date": "2019-03-06T13:01:12.902505Z"
}
]
33
}
34
● source_date indica a data que o dado retornado foi
produzido/coletado/armazenado;
● created_by indica qual o username do usuário que fez a requisição;
● contract indica o identificador do contrato de serviço associado à consulta;
● creation_date indica o momento que a requisição foi registrada.
{
"id": 6722,
"request": 6839,
"success": true,
"value": "0",
"details": {
"type": "FeatureCollection",
"features": []
},
"media": [],
"source_date": "2019-06-05T00:02:08-03:00",
"creation_date": "2019-06-05T16:15:45.346021-03:00"
}
35
Consulta Retorno com Problema Retorno sem Problema
Socioambiental Socioambiental
36
Relatório de Uso da Terra
Exemplo de requisição para uma consulta no mapa de soja para retornar os dados
referente ao ano de 2020:
{
"query_parameters":{
"geometry":{
"type": "Polygon",
"coordinates": [ [ [ -55.016301808054038, -11.386921655736476 ],
[ -55.020683480420082, -11.403525887860452 ],
[ -55.00246494795072, -11.418977048309152 ],
[ -54.99231791720829, -11.411366775252329 ],
[ -54.987936244842246, -11.397760529484071 ],
[ -54.993470988883566, -11.387152270071532 ],
[ -55.012842593028203, -11.382770597705482 ],
[ -55.016301808054038, -11.386921655736476 ] ] ]
},
"year":2020
}
}
Essa forma de requisição pode ser feita, portanto, em separado, e indicando quais os
anos e as consultas que deseja-se realizar, podendo assim o usuário montar seu próprio
relatório de uso da terra apenas com os anos e mapas desejados para determinada área.
Caso o ano não seja passado como parâmetro, sempre é utilizado o ano mais recente.
37
Método 2 - Relatório de Uso da Terra
A outra alternativa é a criação de um relatório de uso da terra para um cadastro, o qual
conterá o resultado para todos os mapas de uso da terra em todos os anos possíveis que
estejam dentro do contrato com a Agrosatélite.
Área de Análise
A área de análise é um objeto que possui um conjunto de geometrias (que devem estar
contidas dentro da unidade) que passarão por um processo de análise, seja o
monitoramento via imagens de satélite ou a análise de uso da terra.
Ela pode ser composta, portanto, de glebas incluídas dentro da área de interesse, ou, a
própria área de interesse.
38
Exemplo:
{
boundaries: [1]
name: "Área de Análise da Fazenda Agrosatélite"
unit: 1
}
Uma vez criada a área de análise, passamos à criação do dossiê dessa área.
Dossiê de Área
O dossiê de uma área de análise é, portanto, um agrupamento de diferentes tipos de
relatórios para aquela área. Atualmente, possuímos na Agrosatélite apenas o dossiê
relacionado ao uso e cobertura da terra. A criação de um dossiê é bem simples, basta
passar o id da área de análise retornado pelo nosso POST e criar o nosso dossiê:
39
Exemplo:
{
analytical_report_boundary: 1
}
40
No qual, o único parâmetro necessário é enviado através da URL, que é o ID do dossiê
de área, obtido no passo anterior. O retorno é algo como:
{
"id": 1,
"requests": [],
"created_by": "xxx",
"status": "PROCESSING",
"creation_date": "2022-12-06T20:25:03.244631-03:00",
"last_modification_date": "2022-12-06T20:25:03.244665-03:00",
"is_active": true,
"area_dossier": 1
}
Retornado de maneira imediata, portanto, ainda sem resultados na lista de requests.
Para obter o resultado, pode-se fazer o GET no mesmo endpoint, mas, passando o id do
relatório (no caso do exemplo, o id 1):
41
Quando tiver concluído, teremos um retorno semelhante a:
{
"id": 1,
"requests": [
{
"id": 2,
"query": "mapa_de_soja",
"user": 1,
"sources": [{ "id": 1, "class": "boundary" }],
"query_parameters": {
"year": "2018",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[-45.9976902013985, -10.193951429330966],
[-46.05881475466594, -10.295347236597365],
[-45.936565648131065, -10.393274955147831],
[-45.76890973059752, -10.379532558962907],
[-45.9976902013985, -10.193951429330966]
]
]
},
"discard_geometry": true
},
"response": {
"success": true,
"value": "63.92979970936842",
"details": {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
...
"intersection": {
"type": "Polygon",
"properties": {
"area_m2": 16790827,
"area_percentage": 5.266992919657305
},
"coordinates": [
[
[-45.93575972499997, -10.32990252899998],
42
...
]
]
}
}
},...
]
},
],
"created_by": "xxx",
"status": "DONE",
"creation_date": "2022-12-06T20:25:03.244631-03:00",
"last_modification_date": "2022-12-06T20:25:03.244665-03:00",
"is_active": true,
"area_dossier": 1
}
Assim, quando o status estiver como DONE, a resposta para o endpoint GET do uso da
terra retornará o resultado para todas as geometrias contidas na área de análise, para
todos os anos, para todos os mapas de uso da terra utilizados. Assim, com três
requisições, o usuário consegue já realizar toda a operação de captura dos dados de uso
da terra que, utilizando a opção de consulta a consulta, poderia ser feito com uma maior
morosidade.
Metódo 1 vs Método 2
A vantagem de utilizar o método 1 (de consultas separadas) é que pode-se construir um
relatório mais personalizado para cada área cadastrada, não precisando gerar dados
desnecessariamente para, por exemplo, uma área na qual deseja-se monitorar apenas
um tipo de cultura. Além disso, há ainda a vantagem de não ser um endpoint assíncrono,
obtendo o resultado de imediato, visto que é feito em um único mapa por vez.
43
Campos Customizados
{
"value": "valor_do_campo_customizado",
"object_id": "id_do_cadastro"
}
Esses campos customizados armazenam os valores como string e não são utilizados
para filtrar os cadastros, servem apenas para armazenar a informação.
44