Mais

Algoritmo para cálculo da textura do solo

Algoritmo para cálculo da textura do solo


Tenho valores percentuais de areia / silte / argila para 30 pontos de amostra na grade. Usei esses valores para criar 3 rasters IDW interpolados. Eu quero de alguma forma (acho que na calculadora raster) fazer um código usando instruções if / then para obter valores de cada IDW e gerar uma textura.

Exemplo: se raster "sand_IDW" valor> 50 e <70 e raster "clay_IDW" valor> 20 e <40, então, "Textura" = argila arenosa.


Grass 7 tem um complemento chamado r.soils.texture que calcula a textura do solo de uma camada de% argila e% areia.

No entanto, não funcionou no meu computador (ainda).


Não sei por que isso foi interrompido, mas me fez pensar, então.

Se você for classificar em Arc, provavelmente precisará (no mínimo) de uma tabela de consulta com colunas de argila | silte | areia | textura. Cada linha precisaria conter todas as combinações possíveis de três inteiros positivos que somam 100% e, em seguida, uma classe para essa combinação, definida com referência a um triângulo de textura existente. Então você teria que arredondar todos os seus rasters para inteiros antes de usar a tabela de pesquisa na calculadora raster. Uma precisão mais alta exigiria uma tabela muito mais longa, não que você se importe em passar das 2 casas decimais. Ainda é uma abordagem de força bruta limitada.

Eu tenho um fluxo de trabalho para um mapa de textura rápido e sujo usando R no meu blog, se você estiver feliz em se afastar do ArcGIS. Ele se baseia em um pacote que foi escrito exatamente para esse propósito, cujos fundamentos são muito mais sofisticados do que uma tabela de consulta (adereços malucos para o autor, Julien Moeys).

Seus rasters de entrada precisarão ser projetados corretamente e em um formato compatível com o GDAL.

Versão curta:

library (sp) library (rgdal) library (raster) library (solotexture) clay_src <- 'path / to / clay / raster' silt_src <- 'path / to / silt / raster' sand_src <- 'path / to / sand / entradas raster <- c (clay_src, silt_src, sand_src) # lidas em rasters, empilhar e promover a SpatialPixelsDataFrame SSC <- stack () para (i em 1: comprimento (entradas)) {rn <- entradas [i] r < - raster (rn) SSC <- addLayer (SSC, r)} SSCP <- as (SSC, 'SpatialPixelsDataFrame')

O SpatialPixelsDataFrame é legal porque permite que você pendure uma lista de atributos em cada pixel e trata essas listas como uma tabela. Tudo permanece organizado e em sequência enquanto você faz o processamento. A desvantagem é que tudo fica na memória, portanto, existem algumas limitações de tamanho.

# arruma alguns nomes (SSCP @ data) <- c ('CLAY', 'SILT', 'SAND') SSCP @ data <- round (SSCP @ data, 2) SSCP @ data $ raw_totals <- rowSums (SSCP @data [, 1: 3]) # isso normaliza os três conjuntos de dados para que permaneçam proporcionais, mas somam 100%: SSCP_norm <- TT.normalise.sum (tri.data = SSCP @ data, residuais = T)

definitivamente verifique os resíduos. Se você achar que muito do seu conjunto de dados está fora de 95-105%, você tem um problema com seus rasters krigados - quanto maior a variação, maior será o problema. Se eles parecem ok:

# anexa os dados normalizados ao conjunto original - é uma boa prática manter ambos os nomes de coluna (SSCP_norm) [1: 3] <- paste0 (colnames (SSCP_norm) [1: 3], "_n") SSCP @ data <- cbind ( SSCP @ data, round (SSCP_norm, 2)) rm (SSCP_norm) # o seguinte produz uma nova coluna com a classificação para cada pixel (praticamente!) # Verifique a vinheta solotexture para escolher um triângulo de textura adequado para sua região # e conjunto de dados (limites de tamanho de classe são importantes!), há um grupo pré-definido de SSCP @ data <- cbind (SSCP @ data, "TEXCLASS" = TT.points.in.classes (tri.data = SSCP @ data [, c (' CLAY_n ',' SILT_n ',' SAND_n ')], css.names = c (' CLAY_n ',' SILT_n ',' SAND_n '), class.sys = "AU2.TT", PiC.type = "t", recolher = ','))

a saída pode precisar de alguma arrumação para lidar com dados que caíram bem na borda de> 1 classe de textura, mas depois disso é muito fácil converter para numérico e exportar um raster classificado final.


Por favor, tente r.soils.texture na grama. dentro do GRASS 7.0, você pode instalar r.soils.texture com esta linha de comando: g.extension extension = r.soils.texture operation = add

você pode executar o addon r.soils.texture para obter o arquivo raster de textura com esta linha de comando: r.soils.texture sand = name clay = name scheme = name output = name

Você pode recuperar dados de exemplo ou arquivos de textura de esquema deste site: http://maplab.alwaysdata.net/soilstools.html

Se houver problemas, por favor me peça ajuda.