SICAR (Cadastro Ambiental Rural)¶
Sobre¶
O Sistema Nacional de Cadastro Ambiental Rural (SICAR) e o registro eletrônico obrigatório de todos os imoveis rurais do Brasil, conforme a Lei 12.651/2012 (Código Florestal). Administrado pelo Serviço Florestal Brasileiro (SFB), o sistema contem mais de 7.4 milhoes de imoveis cadastrados em 27 UFs.
O CAR inclui informações sobre:
- Identificacao do imovel rural
- Status do cadastro (Ativo, Pendente, Suspenso, Cancelado e RE, publicado pelo SICAR sem definição oficial localizada)
- Area total em hectares
- Módulos fiscais
- Tipo de imovel (IRU Rural, AST Assentamento, PCT conforme publicado pelo SICAR)
- Município e código IBGE
Acesso via WFS¶
O agrobr acessa o GeoServer WFS do SICAR diretamente, sem necessidade de CAPTCHA ou autenticação. O protocolo OGC WFS permite consultas padronizadas com filtros server-side (CQL_FILTER) e paginação transparente.
Endpoint: https://geoserver.car.gov.br/geoserver/sicar/wfs
Campos disponíveis¶
| Campo | Tipo | Descrição |
|---|---|---|
| cod_imovel | string | Código único do imovel (UF-IBGE-hash) |
| status | string | AT (Ativo), PE (Pendente), SU (Suspenso), CA (Cancelado) e RE (publicado pelo SICAR, sem definição oficial localizada; sai como publicado) |
| data_criacao | datetime UTC | Instante de criação do cadastro |
| data_atualizacao | datetime UTC | Última atualização (nullable) |
| area_ha | float | Area total em hectares |
| condicao | string | Condição do cadastro (nullable) |
| uf | string | Sigla da UF |
| municipio | string | Nome do município |
| cod_municipio_ibge | int | Código IBGE do município |
| modulos_fiscais | float | Número de módulos fiscais |
| tipo | string | IRU (Rural), AST (Assentamento), PCT (tipo publicado pelo SICAR) |
| cod_municipio | int | Código IBGE de 7 dígitos (igual a cod_municipio_ibge); anulável |
Notas¶
- Formato tabular 2.0:
imoveis()usa GeoJSON apenas com os atributos, sem geometria e sem GeoPandas. Datas são UTC, inclusive colunas nulas e resultados vazios, e o resultado vazio tem os dtypes do cheio (texto emstrno pandas 3 eobjectno 2), na tabela e no_geo. O CSV oficial mostrou horários sem fuso diferentes dos instantes UTC do JSON e dos limites CQL; não se aplica deslocamento fixo para converter capturas CSV antigas - Atualização incremental:
imoveis(),imoveis_geo()eimoveis_geo_stream()aceitamatualizado_apos(CQLdata_atualizacao>'...', ISO date ou datetime) para buscar apenas registros atualizados depois de uma data. A coluna é solicitada nas 15 camadas que a oferecem. O campo não existe em PE, PI, PR, RJ, RN, RO, RR, RS, SC, SE, SP e TO; nesses estados o filtro gera erro antes da rede e a coluna permanece nula nas consultas sem esse filtro. Essa cobertura vem doDescribeFeatureTypedas 27 camadas em 06/09/2026 - Estado corrente: criação (
>=) e atualização (>) são filtros do cadastro disponível no momento da consulta. Não recuperam revisões anteriores nem exclusões. O datasetcadastro_ruraltambém aceita município (nome ou código) e atualização, e rejeitadeterministic - Geometria disponível:
imoveis_geo()retornaGeoDataFramecom poligonos MultiPolygon (EPSG:4326) via WFS GeoJSON. Requerpip install agrobr[geo]. Limite padrão de 5.000 features no resultado;max_registrosmaior que 10.000 ouNoneusa paginação. O corte avisa (validation_warnings,UserWarningesource_details["sicar"]["truncado"]). As 27 camadas declaram SIRGAS 2000 (DefaultCRSEPSG:4674); o agrobr pedesrsName=EPSG:4326e recusa comParseErrora página com feições que declare outro CRS - Precisão do filtro:
atualizado_aposaceita milissegundos, com zeros adicionais opcionais..212000é enviado como.212; valores submilissegundo geram erro, sem arredondamento - Paginação: consultas grandes usam páginas de 10.000 registros, ordenadas por
cod_imovelnos caminhos tabular e geoespacial. A fonte declaraPagingIsTransactionSafe=FALSE: a ordenação fixa a sequência dos registros, mas não garante um snapshot entre páginas quando há atualizações concorrentes - Contagem durante a varredura tabular: mudanças em
numberMatchedgeram log de aviso eMetaInfo.validation_warnings(comreturn_meta=True). O maior total observado determina as páginas a consultar; a quantidade final de ids únicos de feature deve coincidir com a última contagem anunciada. Repetição do mesmo id ou divergência final geramParseErrorcom orientação para repetir a consulta. Não há reexecução automática nem garantia de completude de um snapshot; os avisos também são preservados emcadastro_rurale no resumo por município - Contagem durante a varredura geoespacial:
imoveis_geo()paginado (max_registros=Noneou acima de 10.000) eimoveis_geo_stream()seguem a mesma regra: as páginas seguem a contagem inicial, e a quantidade final de ids únicos tem de coincidir com a última contagem anunciada (ou commax_registros, se menor); senão,ParseErrorcom orientação para repetir a consulta. A mudança denumberMatchedvai ao log e, emimoveis_geo(return_meta=True), aMetaInfo.validation_warnings. No stream, a conferência vem depois da última página, então o erro chega depois dos lotes já entregues - Ocorrências repetidas: após a varredura,
imoveis(), o resumo municipal,imoveis_geo()eimoveis_geo_stream()selecionam uma ocorrência porcod_imovel. A base é escolhida por grupo: atualização se presente em todas; senão criação se presente em todas; senão maior sufixo numérico do id. Empates na data usam esse mesmo desempate por id. As 12 UFs sem atualização estão listadas acima.cadastro_ruralmantém a chave e as doze colunas do contrato 2.1. Avisos esource_details["sicar"]registram contagens de features, códigos colapsados, descartes e critérios; a lista de descartes tem até 1.000 itens e sinaliza truncagem. Veja a regra e os campos de proveniência - Resumo da UF:
resumo(uf)sem município conta feições publicadas (resultType=hits), sem a seleção acima: versões do mesmocod_imovelcontam separado. A saída diz isso emsource_details["sicar"]["unidade"] = "feicoes_publicadas"e emvalidation_warnings; para contar imóveis, use o resumo por município - Sem cache: cada chamada consulta o GeoServer do CAR; repetir a consulta baixa tudo de novo
- Timeout estendido: read timeout de 180s para UFs com muitos registros (BA, MG, MT)
- SSL: o GeoServer do CAR usa cipher suite legado que rejeita handshake TLS padrão.
O client usa
SSLContextcom@SECLEVEL=1, mantendo verificação do certificado e do hostname. Falhas de confiança no certificado não ativam fallback com verificação desabilitada - Relevancia EUDR: dados essenciais para compliance com o EU Deforestation Regulation
Licença¶
A classificação do SICAR é livre pela base pública federal: LAI, Decreto 8.777/2016 e publicidade do CAR na Lei 12.651/2012. A consulta pública oferece visualização e download da base por UF sem termo específico de reutilização localizado. Campos Fees e AccessConstraints vazios no WFS não são uma concessão de licença. Não foi comprovada uma CC BY da base; o BY-ND do rodapé gov.br é do conteúdo do site. Preservar SFB/CAR, camada, UF, extração e transformações. Geosserviços do CAR.
Links¶
Contagens e proveniência¶
Em 18/09/2026, a consulta integral do DF tinha 21.006 feições em três páginas, com 513 atualizações nulas. Numa consulta de MT, o valor zero de módulos fiscais sai preservado. Em duas páginas de 10.000 feições de GO e RS, a escolha de ocorrências por atualização e por criação deixa 9.999 imóveis em cada uma.
Contagens coincidentes não garantem snapshot transacional. Com várias páginas, o MetaInfo traz cada uma em source_details["resources"] (SHA-256 e bytes) e, no topo, o hash do manifesto {query, resources} (hash_kind resource_manifest_sha256).
Coleta bruta¶
agrobr.bruto.coletar("sicar", "imoveis", uf=..., ...) guarda as páginas GeoJSON originais da camada da UF no CRS nativo (EPSG:4674) e com todos os atributos, com a sessão TLS e as pausas do client. Guarda todas as versões publicadas de um imóvel e conta pelo feature.id, não pelo cod_imovel. Como o SICAR não publica um identificador ordenável, as páginas vêm em sortBy=cod_imovel A,dat_criacao A, e a coleta só fecha ok com o par (cod_imovel, dat_criacao) estritamente crescente: duas versões com o mesmo dat_criacao encerram a coleta com erro. Um ok prova a ordem do que veio naquela coleta, não que o par seja único na base inteira. A bbox é opcional. Veja a API da coleta bruta e o contrato do manifesto.
Geometria inválida¶
A geometria das saídas _geo sai como a fonte publica, sem reparo; geometria inválida gera aviso e contagem no MetaInfo. Veja Geometrias publicadas.