行业新闻

2020年全国各省、地级市、县的10米分辨率的土地利用数据的制作方法与分享

该数据来源是Esri公司基于10m哨兵影像数据,使用深度学习方法制作做的全球土地利用数据。该数据的数据精度总体精度为85%,混淆矩阵如下所示:

混淆矩阵

Esri全球土地利用数据的影像数据的分布如下所示:

Esri全球土地利用数据的影像图

但该数据只能分块进行下载,没有制作按区划数据进行归纳。因此本人下载了全球的728景影像,并利用2021年的全国行政区划数据对其进行批量裁剪,最后得到了全国各省、各市、各县的土地利用数据,最后使用镶嵌工具获得每一个地区对应的一张tif影像。

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

制作流程图


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

使用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

经过裁剪函数获得的数据可能有几个裁剪得到的数据,可以使用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天时间。我将下载链接放在下方:

贵州省_全省_土地利用数据_2020年_10米分辨率 展示图
上海市_全市_土地利用数据_2020年_10米分辨率 展示图
湖北省_全省_土地利用数据_2020年_10米分辨率 展示图
湖南省_全省_土地利用数据_2020年_10米分辨率 展示图


陕西省_全省_土地利用数据_2020年_10米分辨率 展示图
山东省_全省_土地利用数据_2020年_10米分辨率 展示图
北京市_全市_土地利用数据_2020年_10米分辨率 展示图
福建省_全省_土地利用数据_2020年_10米分辨率 展示图
吉林省_全省_土地利用数据_2020年_10米分辨率
广西壮族自治区_土地利用数据_2020年_10米分辨率 展示图

相关推文: 2017年全国各省10米分辨率的土地利用数据的制作与分享

引用: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.

平台注册入口