EMBRAPA Solos/GeoInfo — Perfis de Solo e Mapa Pedologico¶
Licença: CC BY-NC 3.0 BR. Classificação:
nc
Perfis de solo do PronaSolos e mapa pedologico do Brasil via WFS OGC da EMBRAPA GeoInfo.
Visao Geral¶
| Item | Detalhe |
|---|---|
| Provedor | EMBRAPA (Empresa Brasileira de Pesquisa Agropecuária) |
| Dados | Perfis de solo (pontos) + mapa pedologico (poligonos) |
| Acesso | WFS OGC (GeoServer) |
| Formato | GeoJSON do WFS 2.0 (application/json) nos dois modos |
| Autenticação | Nenhuma |
| Licença | CC BY-NC 3.0 BR |
| Features | 34.464 registros de horizontes/camadas (~9 mil pontos) + 2.852 poligonos |
Acesso via WFS¶
| Parâmetro | Valor |
|---|---|
| Endpoint | geoinfo.dados.embrapa.br/geoserver/ows |
| WFS Version | 2.0.0 |
| Layer perfis | geonode:perfis_pronasolos_2020 |
| Layer mapa | geonode:brasil_solos_5m_20201104 |
| CRS | EPSG:4326 (declarado pelo WFS e pelo metadado ISO) |
| Paginação | Sim (count/startIndex) |
Exemplo de Uso¶
import asyncio
from agrobr import embrapa_solos
async def main():
# Perfis de solo (tabular)
df = await embrapa_solos.perfis()
# Filtrar por UF
df = await embrapa_solos.perfis(uf="MT")
# Perfis com geometria (requer geopandas)
gdf = await embrapa_solos.perfis_geo(bbox=(-56, -16, -54, -14))
# Mapa pedologico (tabular)
df = await embrapa_solos.mapa_solos()
# Mapa pedologico com geometria
gdf = await embrapa_solos.mapa_solos_geo(bbox=(-56, -16, -54, -14))
# Com metadados
df, meta = await embrapa_solos.perfis(return_meta=True)
# Polars
df = await embrapa_solos.perfis(as_polars=True)
asyncio.run(main())
Colunas — Perfis¶
| Coluna | Tipo | Descrição |
|---|---|---|
| fid | int | Identificador do registro (horizonte ou camada) |
| uf | str | UF (sigla) |
| municipio | str | Município |
| latitude | float | Latitude |
| longitude | float | Longitude |
| horizonte | str | Simbolo do horizonte |
| profundidade | str | Profundidade |
| areia_total | str | Areia total (g/kg) |
| silte | str | Silte (g/kg) |
| argila | str | Argila (g/kg) |
| ph_h2o | str | pH em agua |
| carbono_organico | str | Carbono organico (unidade não declarada pela fonte) |
| ctc | str | Capacidade de troca cationica (T) |
| saturacao_bases | str | Saturacao por bases (V, %) |
| aluminio | str | Aluminio trocavel |
| fosforo | str | Fosforo assimilavel |
| classe_textural | str | Classe textural |
| nivel_levantamento | str | Nível do levantamento |
| uso_atual | str | Uso atual do solo |
A tabela mostra as colunas principais. O resultado tem 85 colunas, na ordem do contrato
embrapa_solos.perfis 3.0: os 83 atributos publicados (com os nomes acima ou o nome original da camada),
uf_original e feature_id. Cada linha e um horizonte ou camada; codigo_pon identifica o ponto de
amostragem.
A coluna ano usa Int64 anulável, e data_colet usa datetime64[ns]. Nulos da fonte e o literal NULL viram ausentes nessas duas colunas. Pela regra de datas, data_colet de formato válido com ano fora de 1900–2099 vira NaT, com UserWarning e a mesma mensagem em meta.validation_warnings (em 07/10/2026, 73 dos 34.464 registros da camada, com datas como 0982-11-01 e 1892-07-14). Ano ou data fora do formato esperado, ou data impossível (2024-02-30), levanta ParseError; não vira ausente silenciosamente. O texto usa o dtype nativo do pandas (str no pandas 3, object no pandas 2). Tabelas vazias têm os mesmos dtypes das tabelas com registros.
Os valores laboratoriais são o texto publicado pela Embrapa (o WFS declara xsd:string), sem conversão:
números com ponto decimal, as vezes com ruido de float32 (4.400000095367432), e o texto NULL para
ausência. Em fosforo também aparecem valores censurados (<1, <0.5), virgula decimal (0,19) e marcas
como x. Converta explicitamente, por exemplo pd.to_numeric(df["argila"].replace("NULL", pd.NA)); em
fosforo, trate antes os censurados e a virgula.
O WFS não declara unidades. Na camada inteira, areia + silte + argila somam 1.000 (g/kg) em 99,2 % dos
horizontes com as tres medidas; saturacao_bases = 100 x S / T e ctc = S + H + Al (colunas valor_s,
hidrogenio e aluminio) em mais de 98 % dos horizontes.
Colunas — Mapa Pedologico¶
| Coluna | Tipo | Descrição |
|---|---|---|
| fid | int | Identificador do poligono |
| simbolos | str | Simbolos SiBCS |
| comp1 | str | Componente 1 |
| comp2 | str | Componente 2 |
| comp3 | str | Componente 3 |
| legenda | str | Legenda descritiva |
| area_km2 | float | Area em km2 |
| ordem1 | str | Ordem pedologica 1 |
| subordem1 | str | Subordem 1 |
| gdegrupo1 | str | Grande grupo 1 |
| ordem2 | str | Ordem pedologica 2 |
| subordem2 | str | Subordem 2 |
| gdegrupo2 | str | Grande grupo 2 |
| legenda_sinotica | str | Legenda sinotica |
| classe_dom | str | Classe dominante |
| ordem3 | str | Ordem pedologica 3 |
| subordem3 | str | Subordem 3 |
| gdegrupo3 | str | Grande grupo 3 |
| feature_id | str | Identificador da feicao no WFS (texto, não e chave) |
Particularidades¶
- Funções
_geo()requerem [geo]:pip install agrobr[geo](geopandas) - Filtro de ordem:
ordemcasa a classe inteira deordem1, uma das 15 publicadas na camadabrasil_solos_5m_20201104(13 ordens de solo maisAFLORAMENTOS DE ROCHASeDUNAS; leitura completa em 01/10/2026: 2.852 polígonos, 177 semordem1). Caixa, acento e singular são aceitos ("latossolo"valeLATOSSOLOS); trecho ("latos"), texto vazio, não textual ou fora das classes levantaInvalidParameterErrorantes da coleta, com a lista das classes. Uma leitura completa sem correspondência emiteUserWarninge registra o valor pedido e as classes observadas emMetaInfo.validation_warnings; uma leitura parcial continua avisando sobre o prefixo remoto. - Paginação: count/startIndex ordenado por
fid, com 1 registro de sobreposicao entre páginas.max_registros(padrão 50.000; 5.000 perfis e 3.000 poligonos nas funções_geo) corta o prefixo remoto; os filtrosufeordemsão aplicados localmente sobre esse prefixo e, quando o corte deixa a selecao parcial, sai umUserWarning(max_registros=Nonevarre a camada inteira) - CRS: EPSG:4326, o CRS padrão das duas camadas no WFS; o
bboxtambém e EPSG:4326 - Licença NC: uso comercial requer autorizacao da EMBRAPA
- Texto com dupla codificação: a Embrapa publica parte dos textos dos perfis com dupla codificação (UTF-8 lido como Latin-1: "Aptidão", "São Carlos"), no JSON e no CSV do WFS. O agrobr repara só o texto que volta inteiro por Latin-1 → UTF-8 e tem a assinatura ("Ã" ou "Â" seguido de um caractere entre U+0080 e U+00BF). Texto legítimo com "Ã" fica como está. A contagem por coluna sai em
MetaInfo.validation_warnings. Ficam sem reparo, contados à parte no mesmo aviso ("com a assinatura e sem reparo"), 3 casos que a fonte publica assim: texto cortado a cerca de 254 caracteres no meio de uma sequência UTF-8, texto com "�" publicado e texto com "€" (33 células no DF em 26/09/2026)
Limitacoes¶
- Cobertura de perfis não e uniforme (PronaSolos ainda em execução)
- Mapa pedologico na escala 1:5.000.000 (visao nacional, não cadastral)
- CC BY-NC 3.0 BR: redistribuicao comercial requer autorizacao
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.