生活随笔
收集整理的這篇文章主要介紹了
土壤HWSD处理流程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
任務描述
獲取研究區HWSD數據集中:沙含量、淤泥含量、黏土含量、有機碳含量等。
技術流程
1.數據下載
2.影像連接數據庫
3.提取所需土壤圖層
1.數據下載
所需數據在寒區旱區科學數據中心下載HWSD中國土壤數據集
下載的數據包包括:數據說明pdf、img格式、mdb數據庫
2.影像連接數據庫
*比較關鍵的處理步驟為:img+link+dbf數據庫。個人理解:img中只是展示各類土壤的地理分布,像元值代表其土壤分類,用唯一ID值與dbf數據庫的各類土壤屬性相鏈接。具體操作可以參考鏈接
3.提取所需土壤圖層
代碼思路是:逐像元讀取土壤ID→憑借ID讀取excel表中對應土壤屬性值→將屬性值賦值給像元生成新的土壤圖層影像
*土壤屬性表格(自己整理出來)
具體代碼:
import gdal
import numpy
as np
from collections
import Counter
import xlrd
import xlwt
import osexcel
= xlrd
.open_workbook
('F:\\土壤數據\\白銀WHSD表格數據大范圍.xlsx')
table
= excel
.sheets
() [0]
nrows
= table
.nrows
print (nrows
)filename
= (r
'F:\\土壤數據\\HWSD_Baiyin_Clip.tif') data
= gdal
.Open
(filename
)
cols
= data
.RasterXSize
rows
= data
.RasterYSize im_geotrans
= data
.GetGeoTransform
()
im_proj
= data
.GetProjection
()
im_data
= data
.ReadAsArray
(0, 0, cols
, rows
)
del data
print ( cols
, rows
)list = []
MU_GLOBAL_List
= []
T_GRAVEL_List
= []
T_SAND_List
= []
T_SILT_List
= []
T_CLAY_List
= []
T_USDA_TEX_CLASS_List
= []
T_REF_BULK_DENSITY_List
= []
T_OC_List
= []
T_PH_H2O_List
= []
T_CEC_CLAY_List
= []
T_CEC_SOIL_List
= []
T_BS_List
= []
T_TEB_List
= []
T_CACO3_List
= []
T_CASO4_List
= []
T_ESP_List
= []
T_ECE_List
= []
for k
in range(1,nrows
):MU_GLOBAL
= int(table
.cell
(k
, 0).value
)MU_GLOBAL_List
.append
(MU_GLOBAL
)T_GRAVEL
= int(table
.cell
(k
, 1).value
)T_GRAVEL_List
.append
(T_GRAVEL
)T_SAND
= int(table
.cell
(k
, 2).value
)T_SAND_List
.append
(T_SAND
)T_SILT
= int(table
.cell
(k
, 3).value
)T_SILT_List
.append
(T_SILT
)T_CLAY
= int(table
.cell
(k
, 4).value
)T_CLAY_List
.append
(T_CLAY
)T_USDA_TEX_CLASS
= int(table
.cell
(k
, 5).value
)T_USDA_TEX_CLASS_List
.append
(T_USDA_TEX_CLASS
)T_REF_BULK_DENSITY
= float(table
.cell
(k
, 6).value
)T_REF_BULK_DENSITY_List
.append
(T_REF_BULK_DENSITY
)T_OC
= float(table
.cell
(k
, 7).value
)T_OC_List
.append
(T_OC
)T_PH_H2O
= float(table
.cell
(k
, 8).value
)T_PH_H2O_List
.append
(T_PH_H2O
)T_CEC_CLAY
= int(table
.cell
(k
, 9).value
)T_CEC_CLAY_List
.append
(T_CEC_CLAY
)T_CEC_SOIL
= int(table
.cell
(k
, 10).value
)T_CEC_SOIL_List
.append
(T_CEC_SOIL
)T_BS
= int(table
.cell
(k
, 11).value
)T_BS_List
.append
(T_BS
)T_TEB
= float(table
.cell
(k
, 12).value
)T_TEB_List
.append
(T_TEB
)T_CACO3
= float(table
.cell
(k
, 13).value
)T_CACO3_List
.append
(T_CACO3
)T_CASO4
= float(table
.cell
(k
, 14).value
)T_CASO4_List
.append
(T_CASO4
)T_ESP
= int(table
.cell
(k
, 15).value
)T_ESP_List
.append
(T_ESP
)T_ECE
= float(table
.cell
(k
, 16).value
)T_ECE_List
.append
(T_ECE
)
for col
in range (rows
):for row
in range (cols
):value
= im_data
[col
][row
]list.append
(value
)for k
in range(1, nrows
):MU_GLOBAL
= int(table
.cell
(k
, 0).value
)if value
== MU_GLOBAL
:NewValue
= int(table
.cell
(k
, 2).value
) im_data
[col
][row
] = NewValue
else:continue
driver
= gdal
.GetDriverByName
('GTiff')
data
= driver
.Create
('F:\\土壤數據\\沙含量.tif', cols
, rows
)
data
.SetGeoTransform
(im_geotrans
)
data
.SetProjection
(im_proj
)
data
.GetRasterBand
(1).WriteArray
(im_data
) del data
注:
*im_data = im_data.astype(np.float) #強行轉換為float格式
此句為強行轉化為float格式,因為im_data最開始讀取的img格式為整型,當土壤屬性值為整數時,可以正常讀寫;但當土壤屬性值為浮點型時,則輸出圖像還未整型,值錯誤,所以要進行強行轉化。
*data = driver.Create(‘F:\土壤數據\有機碳含量.tif’, cols, rows, 1,gdal.GDT_Float32 ) #用來輸出浮點型影像
此句與上句配套,以便合適輸出浮點型影像。
總結
以上是生活随笔為你收集整理的土壤HWSD处理流程的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。