The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
Esta vinheta acompanha um unico perfil de solo do Brasil tropical desde os dados brutos de campo + laboratorio ate as tres classificacoes paralelas (SiBCS 5a edicao, WRB 2022, USDA Soil Taxonomy 13a edicao), passando por:
PedonRecord no formato canonico do
soilKey;O objetivo e dar ao agronomo / pedologo brasileiro um caminho reproduzivel e em portugues, no estilo dos boletins da Embrapa Solos. Todo o codigo abaixo roda sem dependencia externa pesada (nem rede, nem ESDB, nem OSSL); a etapa final do MapBiomas e opcional e exige um raster baixado.
Adaptado do Levantamento Reconhecimento dos Solos do Estado do Rio de Janeiro (Embrapa, 2003), perfil RJ-1 da regiao de Itaguai. Coordenadas aproximadas: 22.86 S, 43.78 W. Material de origem: sedimentos argilosos do Terciario.
horizontes <- data.table::data.table(
top_cm = c(0, 20, 55, 115, 170),
bottom_cm = c(20, 55, 115, 170, 220),
designation = c("A", "AB", "Bt1","Bt2","BC"),
munsell_hue_moist = c("10YR","7.5YR","5YR","2.5YR","2.5YR"),
munsell_value_moist = c(4, 4, 4, 3, 3),
munsell_chroma_moist = c(3, 5, 6, 6, 6),
structure_grade = c("moderate", "moderate",
"strong", "strong", "moderate"),
structure_type = c("granular", "subangular blocky",
"subangular blocky",
"subangular blocky",
"subangular blocky"),
clay_films_amount = c(NA, "few", "common", "common", "few"),
clay_pct = c(18, 28, 45, 42, 38),
silt_pct = c(30, 25, 20, 22, 24),
sand_pct = c(52, 47, 35, 36, 38),
ph_h2o = c(5.5, 5.3, 5.0, 5.0, 5.1),
ph_kcl = c(4.4, 4.3, 4.1, 4.1, 4.2),
oc_pct = c(1.5, 0.6, 0.3, 0.2, 0.2),
cec_cmol = c(8.0, 6.0, 5.5, 4.5, 4.0),
bs_pct = c(35, 25, 20, 18, 20), # V baixa -> distrofico
al_cmol = c(0.5, 0.8, 1.2, 1.5, 1.4),
ca_cmol = c(2.0, 1.4, 1.0, 0.7, 0.7),
mg_cmol = c(0.6, 0.4, 0.3, 0.2, 0.2),
k_cmol = c(0.10, 0.06, 0.04, 0.03, 0.03),
na_cmol = c(0.02, 0.02, 0.02, 0.02, 0.02),
bulk_density_g_cm3 = c(1.30, 1.40, 1.45, 1.45, 1.42)
)
horizontes <- soilKey:::ensure_horizon_schema(horizontes)
str(horizontes[, .(designation, top_cm, bottom_cm, ph_h2o, clay_pct, bs_pct)])
#> Classes 'data.table' and 'data.frame': 5 obs. of 6 variables:
#> $ designation: chr "A" "AB" "Bt1" "Bt2" ...
#> $ top_cm : num 0 20 55 115 170
#> $ bottom_cm : num 20 55 115 170 220
#> $ ph_h2o : num 5.5 5.3 5 5 5.1
#> $ clay_pct : num 18 28 45 42 38
#> $ bs_pct : num 35 25 20 18 20
#> - attr(*, ".internal.selfref")=<pointer: 0x105e256b0>Construindo o PedonRecord (R6 com site +
horizons):
perfil <- PedonRecord$new(
site = list(
id = "RJ-1-Itaguai",
lat = -22.86,
lon = -43.78,
country = "BR",
state = "RJ",
municipality = "Itaguai",
parent_material = "sedimentos argilosos do Terciario",
survey_year = 2003,
reference_source = "Embrapa Solos (2003) - Levantamento RJ"
),
horizons = horizontes
)
perfil
#>
#> ── PedonRecord ──
#>
#> Site: id=RJ-1-Itaguai | (-22.8600, -43.7800) | BR | on sedimentos argilosos do
#> Terciario
#> Horizons (5):
#> 1) A 0-20 cm clay=18.0 silt=30.0 sand=52.0 CEC=8.0 pH=5.5 OC=1.5
#> 2) AB 20-55 cm clay=28.0 silt=25.0 sand=47.0 CEC=6.0 pH=5.3 OC=0.6
#> 3) Bt1 55-115 cm clay=45.0 silt=20.0 sand=35.0 CEC=5.5 pH=5.0 OC=0.3
#> 4) Bt2 115-170 cm clay=42.0 silt=22.0 sand=36.0 CEC=4.5 pH=5.0 OC=0.2
#> 5) BC 170-220 cm clay=38.0 silt=24.0 sand=38.0 CEC=4.0 pH=5.1 OC=0.2Antes de chamar a chave completa, vale rodar os predicados-chave para sentir o perfil. Isso e equivalente ao trabalho do classificador humano antes de aplicar a chave:
# B textural (SiBCS Cap 5 / WRB argic): gradiente de argila
bt <- soilKey::B_textural(perfil)
arg <- soilKey::argic(perfil)
cat("B_textural (SiBCS):", bt$passed,
" argic (WRB):", arg$passed, "\n")
#> B_textural (SiBCS): TRUE argic (WRB): TRUE
# Atividade da argila (SiBCS Cap 5)
ta <- soilKey::atividade_argila_alta(perfil)
cat("atividade_argila_alta:", ta$passed, "\n")
#> atividade_argila_alta: FALSE
# Saturacao por bases (V%) -- distrofico se V < 50
distr <- soilKey::distrofico(perfil)
cat("distrofico:", distr$passed, "\n")
#> distrofico: TRUEOs tres devem disparar TRUE para um Argissolo distrofico
tipico.
A funcao classify_all() corre os tres sistemas e devolve
um ClassificationResult por sistema:
res <- soilKey::classify_all(perfil, on_missing = "silent")
names(res)
#> [1] "wrb" "sibcs" "usda" "summary"print(res$sibcs)
#>
#> ── ClassificationResult (SiBCS 5a edicao) ──
#>
#> Name: Argissolos Vermelhos Distroficos tipicos, argilosa, moderado, Tmob
#> RSG/Order: Argissolos
#> Evidence grade: A
#>
#> ── Ambiguities
#> - V: Indeterminate -- missing 1 attribute(s): slickensides
#> - E: Indeterminate -- missing 2 attribute(s): al_ox_pct, fe_ox_pct
#> - G: Indeterminate -- missing 1 attribute(s): redoximorphic_features_pct
#> - F: Indeterminate -- missing 1 attribute(s): plinthite_pct
#>
#> ── Missing data that would refine result
#> slickensides, al_ox_pct, fe_ox_pct, redoximorphic_features_pct, plinthite_pct
#>
#> ── Key trace
#> (10 RSGs tested before assignment)
#> 1. ?? -- NA
#> 2. ?? -- NA
#> 3. PV Argissolos Vermelhos -- NA
#> 4. ?? -- NA
#> 5. PVd Argissolos Vermelhos Distroficos -- NA
#> 6. ?? -- NA
#> 7. PVdTp Argissolos Vermelhos Distroficos tipicos -- NA
#> 8. ?? -- NAA descida vai do nivel da Ordem (Argissolos) ate o
Subgrupo, passando pelos discriminantes:
5YR / 2.5YR) ->
Subordem Vermelho-Amareloprint(res$wrb)
#>
#> ── ClassificationResult (WRB 2022) ──
#>
#> Name: Ferralic Cutanic Acrisol (Loamic, Dystric, Ochric, Profondic, Rhodic,
#> Rubic, Chromic)
#> RSG/Order: Acrisols
#> Qualifiers: Ferralic, Cutanic, Loamic, Dystric, Ochric, Profondic, Rhodic,
#> Rubic, Chromic, FALSE, FALSE, FALSE, FALSE, top_cm, bottom_cm, FALSE, top_cm,
#> bottom_cm, FALSE, FALSE, FALSE, FALSE, plinthite_pct, FALSE, plinthite_pct,
#> FALSE, plinthite_pct, TRUE, FALSE, redoximorphic_features_pct, FALSE,
#> redoximorphic_features_pct, FALSE, al_ox_pct, fe_ox_pct,
#> phosphate_retention_pct, volcanic_glass_pct, FALSE, volcanic_glass_pct, FALSE,
#> slickensides, TRUE, FALSE, FALSE, coarse_fragments_pct, FALSE, FALSE,
#> p_mehlich3_mg_kg, FALSE, p_mehlich3_mg_kg, FALSE, FALSE, FALSE, FALSE, TRUE,
#> FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE,
#> coarse_fragments_pct, TRUE
#> Evidence grade: A
#>
#> ── Ambiguities
#> - AT: Indeterminate -- missing 1 attribute(s): p_mehlich3_mg_kg
#> - TC: Indeterminate -- missing 3 attribute(s): artefacts_pct,
#> geomembrane_present, technic_hardmaterial_pct
#> - CR: Indeterminate -- missing 1 attribute(s): permafrost_temp_C
#> - LP: Indeterminate -- missing 1 attribute(s): coarse_fragments_pct
#> - VR: Indeterminate -- missing 1 attribute(s): slickensides
#> - SC: Indeterminate -- missing 1 attribute(s): ec_dS_m
#> - PZ: Indeterminate -- missing 2 attribute(s): al_ox_pct, fe_ox_pct
#> - PT: Indeterminate -- missing 1 attribute(s): plinthite_pct
#> - ST: Indeterminate -- missing 1 attribute(s): redoximorphic_features_pct
#> - DU: Indeterminate -- missing 1 attribute(s): duripan_pct
#> - GY: Indeterminate -- missing 1 attribute(s): caso4_pct
#> - CL: Indeterminate -- missing 1 attribute(s): caco3_pct
#>
#> ── Missing data that would refine result
#> p_mehlich3_mg_kg, artefacts_pct, geomembrane_present, technic_hardmaterial_pct,
#> permafrost_temp_C, coarse_fragments_pct, slickensides, ec_dS_m,
#> redoximorphic_features_pct, al_ox_pct, fe_ox_pct, phosphate_retention_pct,
#> volcanic_glass_pct, plinthite_pct, top_cm, bottom_cm, duripan_pct, caso4_pct,
#> caco3_pct
#>
#> ── Key trace
#> (25 RSGs tested before assignment)
#> 1. HS Histosols -- failed
#> 2. AT Anthrosols -- NA (1 attrs missing)
#> 3. TC Technosols -- NA (3 attrs missing)
#> 4. CR Cryosols -- NA (1 attrs missing)
#> 5. LP Leptosols -- NA (1 attrs missing)
#> 6. SN Solonetz -- failed
#> 7. VR Vertisols -- NA (1 attrs missing)
#> 8. SC Solonchaks -- NA (1 attrs missing)
#> 9. GL Gleysols -- failed (1 attrs missing)
#> 10. AN Andosols -- failed (4 attrs missing)
#> 11. PZ Podzols -- NA (2 attrs missing)
#> 12. PT Plinthosols -- NA (1 attrs missing)
#> 13. PL Planosols -- failed
#> 14. ST Stagnosols -- NA (1 attrs missing)
#> 15. NT Nitisols -- failed
#> 16. FR Ferralsols -- failed
#> 17. CH Chernozems -- failed (2 attrs missing)
#> 18. KS Kastanozems -- failed (2 attrs missing)
#> 19. PH Phaeozems -- failed (2 attrs missing)
#> 20. UM Umbrisols -- failed
#> 21. DU Durisols -- NA (1 attrs missing)
#> 22. GY Gypsisols -- NA (1 attrs missing)
#> 23. CL Calcisols -- NA (1 attrs missing)
#> 24. RT Retisols -- failed
#> 25. AC Acrisols -- PASSEDWRB devolve o RSG mais qualificadores (em ordem canonica): Acrisol Dystric Cutanic (caracter argico + V baixa + presenca de revestimentos argilosos).
print(res$usda)
#>
#> ── ClassificationResult (USDA Soil Taxonomy) ──
#>
#> Name: Typic Kandiudults
#> RSG/Order: Ultisols
#> Evidence grade: A
#>
#> ── Missing data that would refine result
#> permafrost_temp_C, al_ox_pct, fe_ox_pct, phosphate_retention_pct, slickensides,
#> site$soil_moisture_regime
#>
#> ── Key trace
#> (7 RSGs tested before assignment)
#> 1. ?? -- NA
#> 2. ?? -- NA
#> 3. HC Udults -- NA
#> 4. ?? -- NA
#> 5. HCC Kandiudults -- NA
#> 6. ?? -- NA
#> 7. HCCD Typic Kandiudults -- NAUSDA-ST devolve a ordem (ate o nivel atualmente disponivel): Ultisol (B argilico + saturacao por bases baixa em todo o solum).
data.frame(
Sistema = c("SiBCS 5a", "WRB 2022", "USDA-ST 13a"),
Classe = c(res$sibcs$name, res$wrb$name, res$usda$name),
EvidGrade = c(res$sibcs$evidence_grade %||% NA,
res$wrb$evidence_grade %||% NA,
res$usda$evidence_grade %||% NA)
)
#> Sistema
#> 1 SiBCS 5a
#> 2 WRB 2022
#> 3 USDA-ST 13a
#> Classe
#> 1 Argissolos Vermelhos Distroficos tipicos, argilosa, moderado, Tmob
#> 2 Ferralic Cutanic Acrisol (Loamic, Dystric, Ochric, Profondic, Rhodic, Rubic, Chromic)
#> 3 Typic Kandiudults
#> EvidGrade
#> 1 A
#> 2 A
#> 3 AEsses tres rotulos sao complementares, nao competidores. O SiBCS captura nuance brasileira (Distrofico, Tb, presenca/ausencia de cerosidade); o WRB captura o consenso internacional (Acrisol); o USDA-ST encaixa no esquema norte-americano (Ultisol). Todos os tres apontam para a mesma realidade: um solo argico, acido, baixa em bases, vermelho-amarelo.
res$sibcs$report(
file = "perfil_RJ1.html",
format = "html",
pedon = perfil
)
# Ou, para os tres sistemas em um arquivo:
soilKey::report(
list(res$sibcs, res$wrb, res$usda),
file = "perfil_RJ1_triplo.html",
format = "html",
pedon = perfil
)O HTML carrega: nome canonico em cada sistema, qualificadores, evidencia grade, trace dos predicados, ambiguidades, atributos faltantes, e os horizontes formatados estilo planilha de boletim.
Se voce baixou o raster nacional do MapBiomas Solos Colecao 2 (30 m, classes SiBCS, 2023+), pode cruzar a coordenada do perfil com o mapa para verificar consistencia:
sibcs_no_mapa <- soilKey::lookup_mapbiomas_solos(
coords = c(perfil$site$lon, perfil$site$lat),
raster_path = "soil_data/mapbiomas/mapbiomas_solos_30m_2023.tif",
legend = data.frame(
value = c(3),
class_name = c("Argissolo Vermelho-Amarelo")
)
)
sibcs_no_mapa
#> [1] "Argissolo Vermelho-Amarelo"Concordancia entre o classificador e o mapa nacional aumenta a confianca. Discordancia (ex.: classificador diz Argissolo, mapa diz Latossolo) e um sinal de revisao – o pedologo decide qual fonte e mais confiavel para o caso.
Para qualquer coordenada do mundo, lookup_soilgrids()
(v0.9.48) le direto do endpoint COG da ISRIC sem download:
ph_topsoil <- soilKey::lookup_soilgrids(
coords = c(perfil$site$lon, perfil$site$lat),
property = "phh2o", depth = "0-5cm", quantile = "mean"
)
clay_subsoil <- soilKey::lookup_soilgrids(
coords = c(perfil$site$lon, perfil$site$lat),
property = "clay", depth = "30-60cm", quantile = "mean"
)
cat("SoilGrids pH (0-5cm):", ph_topsoil,
" | clay subsoil (30-60cm):", clay_subsoil, "%\n")| Etapa | Funcao | Onde |
|---|---|---|
| Construir o perfil | PedonRecord$new() |
R |
| Diagnosticos manuais | B_textural(), argic(),
distrofico(), … |
R |
| Tres classificacoes | classify_all() |
R |
| Relatorio | res$sibcs$report() ou
soilKey::report() |
R |
| Munsell de espectros | predict_munsell_from_spectra() (v0.9.47) |
R |
| Quimica de espectros | predict_from_spectra() (v0.9.46) |
R |
| Cruzamento Brasil | lookup_mapbiomas_solos() (v0.9.48) |
R + GeoTIFF |
| Cruzamento global | lookup_soilgrids() (v0.9.48) |
R + HTTPS |
| Cruzamento Europa | lookup_esdb() (v0.9.44) |
R + GeoTIFF |
| App interativo | run_classify_app() |
Shiny |
Esse e o caminho reproduzivel que o pacote oferece:
o pedologo chega com horizontes + cores Munsell + analises de
laboratorio, roda um comando
(classify_all()), e recebe os tres rotulos junto com o
trace explicando exatamente quais diagnosticos dispararam em cada
sistema. Em ~10 linhas de R.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.