Python制作2020年全国各省、地级市、县的10米分辨率的土地利用数据及免费下载(1)

发布于 2021-09-16 00:08

1.数据介绍

该数据来源是Esri公司基于10m哨兵影像数据,使用深度学习方法制作做的全球土地利用数据。该数据的数据精度总体精度为85%,混淆矩阵如下所示:Esri全球土地利用数据的影像数据的分布如下所示:但该数据只能分块进行下载,没有制作按区划数据进行归纳。因此本人下载了全球的728景影像,并利用2021年的全国行政区划数据对其进行批量裁剪,最后得到了全国各省、各市、各县的土地利用数据,最后使用镶嵌工具获得每一个地区对应的一张tif影像。

2.制作方法

2.1制作方法流程图

使用Python制作裁剪与镶嵌脚本,对各省数据进行归纳。其中制作流程图如下所示:

2.2数据筛选

按照四至范围,选择覆盖了全国的分块影像数据,并将其放入同一个文件夹中。

2.3数据的裁剪

使用rasterio模块读取tif,使用geopandas读取矢量的各个要素,并利用rasterio的clip函数对数据进行裁剪。裁剪脚本如下所示:

#引入模块包
import os
from osgeo import gdal, gdalconst
import rasterio as rio
import rasterio.mask
import rasterio
from tqdm import tqdm

def Land_Cover(Mask_PATH,Data_path,OutPut_path):
tifPaths_folder_SHENG = os.listdir(Mask_PATH)
for mask_path in tqdm(tifPaths_folder_SHENG):
try:
#省目录
Land_Cover_SHENG_PATH = os.path.join(mask_path, Mask_PATH)
#获得文件中的名字
SHENG_PATH=Land_Cover_SHENG_PATH+"\\"+mask_path+"\\"+mask_path+".shp"
#裁剪函数
City = gpd.read_file(SHENG_PATH)
Land_Cover = gpd.read_file(Data_path)
City=City.to_crs(Land_Cover .crs)
Sheng_Land_Cover= gpd.clip(Parking_shp,City)
mkdir(OutPut_path+mask_path+"_2017年土地利用数据_10米分辨率")
#保存文件SHP
save_Land_Cover_path = OutPut_path + mask_path + "\\" + mask_path +"土地利用数据"+ ".tif"
Sheng_Land_Cover.to_file(save_SHP_path)
except:
pass

2.4数据的镶嵌

经过裁剪函数获得的数据可能有几个裁剪得到的数据,可以使用gdal模块包的Warp函数对每一个区域的数据进行镶嵌,获得该地区的一张完整的土地利用tif影像数据。镶嵌脚本如下所示:

#引入模块包
import os
from osgeo import gdal, gdalconst
import rasterio as rio
import rasterio.mask
import rasterio
from tqdm import tqdm

def mosaic_tif(tifPaths_folder)#tifPaths_folder是输入文件的文件夹路径
# 循环目录
for path in tqdm(tifPaths_folder):

Land_Cover_SMALL_PATH = os.path.join(tifPath, path)
for (pathname, dirs, files) in os.walk(Land_Cover__SMALL_PATH):
son_Paths_file=files
# 如果影像数量大于一
if len(son_Paths_file) >= 2:
Land_Cover_SMALL_PATH2=Land_Cover_SMALL_PATH+"\\"
# 循环子目录,进行镶嵌
#循环同一个文件下的tif文件
inputFiles = []
for path_small in son_Paths_file:
# 每一个栅格的路径
son_Paths_PATH = os.path.join(Land_Cover_SMALL_PATH2, path_small)
#读取影像
inputrasfile = gdal.Open(son_Paths_PATH, gdal.GA_ReadOnly) # 读取影像
inputProj = inputrasfile.GetProjection() # 获取坐标系
inputFiles.append(inputrasfile) # 推入列表
options = gdal.WarpOptions(srcSRS=inputProj, # 输入坐标系
dstSRS=inputProj, # 输出坐标系
format='GTiff', # 图像格式
resampleAlg=gdalconst.GRIORA_NearestNeighbour, # 重采样算法,这里是双线性内插
dstNodata=Nodata, # 缺省值
cutlineLayer=outline, # 输出范围,这里可以是一个外轮廓shp数据
outputType=gdalconst.GDT_Int16) # 数据类型,这里是有符号32位整型
#输出文件名
outputfilePath ="输出文件夹"+"\\"+path+"_Land_Cover_"+"_10m分辨率_Esri数据集"+".tif"
#写栅格
gdal.Warp(outputfilePath, inputFiles, options=options) # 图像镶嵌

2.5数据的后处理

主要是将根据裁剪出来的文件移动到同名文件夹、为每一个文件添加说明文档以及行政区域数据。最后形成的文件夹如下所示:

3.数据的展示与获取

3.1各省数据展示

由于工作量非常巨大,制作不易,我的电脑从下载、裁剪与镶嵌一共花费了2天时间。因此,我将分四期分享数据。

第一期的数据为湖北省、湖南省、河北省、河南省:

湖北省_全省_土地利用数据_2020年_10米分辨率 湖南省_全省_土地利用数据_2020年_10米分辨率

河北省_全省_土地利用数据_2020年_10米分辨率

河南省_全省_土地利用数据_2020年_10米分辨率

3.2各市数据展示

河北省的石家庄市_2020年__10m分辨率_土地利用数据_Esri数据集

河南省的郑州市_2020年__10m分辨率_土地利用数据_Esri数据集

湖北省的武汉市_2020年__10m分辨率_土地利用数据_Esri数据集

湖南省的长沙市_2020年__10m分辨率_土地利用数据_Esri数据

3.3各县数据展示

河南省_郑州市的上街区_2020年__10m分辨率_土地利用数据_Esri数据集

3.3数据获取

引用:Karra, Kontgis, et al. “Global land use/land cover with Sentinel-2 and deep learning.” IGARSS 2021-2021 IEEE International Geoscience and Remote Sensing Symposium. IEEE, 2021.


生态遥感笔记
生态遥感应用、科普及数据分享
28篇原创内容

本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。

相关素材