
简介广东土地覆盖数据是覆盖广东省全境的十米分辨率地表覆盖栅格产品每个像素对应实地十米乘十米的范围能清晰呈现森林、农田、城市、水域等地类边界面向地理信息科研人员、城乡规划与生态评估工作者。压缩包共包含十六个文件整体大小约一百六十三兆字节内含两套坐标系版本的高精度栅格影像、配套坐标配准文件、广东省边界矢量文件及其属性表、空间索引与元数据说明既提供适合大比例尺制图的通用墨卡托投影也提供便于全球定位分析的经纬度地理坐标。已有二百七十七人学习下载。包内同时提供栅格分类属性表、金字塔影像与可扩展标记语言说明支持在常用地理信息软件中快速加载并能进行重分类、镶嵌、裁剪等栅格处理叠加省界矢量后还可开展分区统计、缓冲区分析等空间操作。对于需要高精度地类信息的区域研究、生态评价、城市规划辅助和地理信息系统教学实训这份数据直接提供了可用的基础图层与完整文件结构能显著节省前期数据处理时间。1. 10米分辨率广东Landcover压缩包里的GIS底图到底能干什么做GIS项目最怕什么不是算子不会写是底图数据到手发现坐标系不对、分类瞎写、精度不够。这份10米分辨率广东Landcover数据集来自ESRI 2020年发布成果压缩包里同时给出UTM投影和WGS地理坐标两套成品tif外加广东省边界shp省掉自己找边界、做投影的重复劳动。它解决的核心问题在省域尺度快速拿到2020年地表覆盖底图用于土地利用变化分析、生态评估、城市规划前期研判也是做样本标注和模型训练前最稳妥的底图来源。适合遥感应用、GIS开发、自然资源相关行业从业者也适合写毕业论文需要可复现数据源的学生。压缩包十二个文件看着杂真正用起来就两件事搞清tif的坐标版本再拿shp把范围卡住。下面按我日常处理这套数据的顺序展开先拆文件再统一坐标系做裁剪统计最后把最容易翻车的地方单独拎出来说。2. 拆开广东Landcover压缩包文件构成、坐标版本与数据格式陷阱2.1 一份数据十二个文件tif、tfw、ovr、vat各自的职责解压rar之后第一反应往往是“怎么这么多文件”。其实可以分为三组广东省边界矢量组、投影栅格组和WGS栅格组。前一组是shapefile全套后两组是同一份地表覆盖栅格在两种坐标系下的成品核心数据是那两个tif。文件组关键文件对应作用省界矢量广东省.shp/.shx/.dbf/.prj行政边界几何与属性用于裁剪、统计、叠加矢量空间索引广东省.sbn/.sbxArcGIS空间索引删除不影响数据本体投影版栅格GuangDong_Landcover_10m.tif10米分辨率土地覆盖主数据UTM投影版本世界文件GuangDong_Landcover_10m.tfw记录像元尺寸和左上角原点坐标共6个仿射参数栅格属性表GuangDong_Landcover_10m.tif.vat.dbf像元值与地类名称的对应表最容易被忽视辅助元数据GuangDong_Landcover_10m.tif.aux.xml记录投影、NoData、统计信息GIS自动读取WGS版栅格GuangDong_Landcover_10m_WGS.tif同一分类结果换成WGS84经纬度坐标的版本金字塔与XML_WGS.tif.ovr / _WGS.tif.xml金字塔加速显示XML补存完整元数据先说一个最容易出事的点tfw和aux.xml这类小文件经常在解压、拷贝、网盘转存过程中被过滤掉。tif本身照样能打开但GIS不知道它在哪儿叠加时大概率对不上位置。所以下载后不要只把tif拎出来整个目录原样保留是最稳妥的。再说vat.dbf。它是栅格属性表打开后能看到一列Value、一列Label清楚写着哪个像素值对应“水体”还是“建成区”。我拿到任何一份LULC栅格第一件事就是打开这个dbf用Excel看一眼分类代码而不是凭经验猜。很多网传的分类代码表在这个数据集上对不上后面避坑章节会再展开。2.2 UTM与WGS两套坐标系选错版本会直接导致面积与位置错误WGS84地理坐标系用经纬度表示位置单位是度UTM投影坐标系把球面展平成平面单位是米。同一景10米数据在UTM下每个像元是整整10米乘10米换到经纬度下每个像元大约是0.00009度乘0.00009度。听起来只是单位不同落到面积统计上结果会差很多。我的选择习惯是做面积统计、缓冲分析、叠加规划CAD图用UTM版本做Web发布、接GPS轨迹点、和全球尺度数据集对比用WGS版本如果后续进国土业务流程大概率还要转成CGCS2000国家大地坐标系这个看项目要求不是必须。拿到数据先确认两个tif分别是什么坐标系最直接的办法是读旁边prj或aux.xml也可以跑两句命令gdalsrsinfo -o epsg GuangDong_Landcover_10m_WGS.tif gdalsrsinfo -o epsg GuangDong_Landcover_10m.tif第一条通常返回EPSG:4326代表WGS84经纬度第二条如果返回类似EPSG:32649就是WGS84/UTM 49N。广东大致处于北纬20到25度、东经109到117度UTM带号49N正好覆盖广东全境。如果两条命令都没有输出说明tif头里没写坐标系只能靠aux.xml或人工判断这种情况优先用WGS版省事。3. 统一坐标与裁剪范围先把数据整理成能叠加分析的状态3.1 用gdalinfo和gdalwarp完成坐标核查与重投影拿到tif先做一次全面体检。GDAL是处理栅格最可靠的工具链QGIS自带ArcGIS的Python环境里也能调用gdalinfo GuangDong_Landcover_10m.tif输出里重点看四个字段Size代表列数和行数Pixel Size代表像元尺寸单位是米就是投影版单位是度就是经纬度版Coordinate System会直接写UTM还是WGS84Data Type通常是Byte或UInt8说明这是单波段8位整型分类栅格。后面写脚本和调参数都依赖这些信息我一般先跑一遍再动手。确定要把投影版转成WGS84时用gdalwarp一条命令完成gdalwarp -t_srs EPSG:4326 -r near -of GTiff \ GuangDong_Landcover_10m.tif GuangDong_Landcover_4326.tif参数含义-t_srs指定目标坐标系EPSG:4326就是WGS84经纬度-r near指定最近邻重采样-of GTiff指定输出格式为GeoTIFF。这里有句要反复强调的话土地覆盖tif是分类栅格像元值只有1到9这类整数如果用双线性或三次卷积插值像元值会被算成1.5、2.3这种中间值后面统计面积直接崩溃。分类栅格必须用最近邻没有例外。如果反过来需要把WGS版转到UTM并保持10米像元加一个参数gdalwarp -t_srs EPSG:32649 -tr 10 10 -r near \ GuangDong_Landcover_10m_WGS.tif GuangDong_Landcover_10m_UTM49N.tif-tr 10 10强制目标像元大小为10米防止软件按默认分辨率重采样。这个参数在混合分辨率数据叠加时尤其重要比如和Sentinel-2的10米波段做对比分辨率必须对齐。还有一种情况是tif头里坐标系信息丢了。确认数据本身没问题后可以用gdal_edit.py补写gdal_edit.py -a_srs EPSG:4326 GuangDong_Landcover_10m_WGS.tif注意只有你非常确定这份tif确实是WGS84时才建议用这招。如果实际是UTM却写成了4326后面叠加验证会发现几十公里级别的错位排查一圈才发现是自己写错的。3.2 QGIS图形化裁剪按省界切出陆域范围不习惯命令行的读者QGIS里四步就能裁完。第一步打开QGIS把广东省.shp和需要裁剪的tif一起拖进图层区。第二步看右下角CRS状态栏确认栅格和矢量坐标系一致。第三步菜单栏选栅格→提取→按掩膜图层裁剪。第四步输入选择tif掩膜选择省界shp勾选“裁剪到掩膜范围”输出路径命名为GDLC_clip.tif点运行。这里要特别提醒QGIS裁剪只改范围不做重投影。如果输入的是WGS版tif输出仍然是经纬度坐标后续做面积统计前必须先用“栅格→投影→重新投影”转成UTM49N再跑统计脚本。很多人裁完直接算面积算出个不伦不类的数字就是因为坐标版本没换。如果加载时弹窗提示“未确定CRS”别硬着头皮往下点。原因通常是tif头没写坐标系且aux.xml丢失先在图层属性里手动指定正确的CRS再走裁剪流程能省掉很多定位错位的时间。3.3 用Python快速读取像元分布不打开GIS也能摸底有时候只想快速知道这份数据里有哪些类别、每类比多少没必要打整个GIS软件。用rasterio写几行就行import rasterio import numpy as np with rasterio.open(GuangDong_Landcover_10m_WGS.tif) as src: print(CRS:, src.crs) print(像素宽高:, src.width, src.height) data src.read(1) values, counts np.unique(data, return_countsTrue) for v, c in zip(values, counts): print(f像元值 {v}: 共 {c} 个像元)这段代码的逻辑rasterio.open读取tif头信息read(1)读取第一个波段也就是分类波段np.unique返回所有像元值及对应个数。输出里如果看到0表示边界外或NoData看到1到9的整数才真正代表地表覆盖类别。这套逻辑不依赖ArcGIS或QGIS装Python后pip install rasterio就能跑适合在服务器上批量处理多景数据。后续所有分类统计都会基于这个读取方式扩展。4. 把像素变成业务指标分类体系、面积统计与变化监测4.1 ESRI 2020土地覆盖分类代码别凭记忆猜地类名ESRI 2020年10米全球土地覆盖共有9个一级类别。广东山多地少、河网密布实际出现最多的是水体、树木、草地、农田、灌木、建成区和裸地冰雪类别基本可以忽略。像元值类别广东常见分布典型应用1水体珠江口、东江、北江、各水库水域监测、岸线变化分析2树木粤北南岭、粤东粤西丘陵森林覆盖率、碳汇估算3草地粤北山区、沿海荒地生态退化评估4洪泛植被珠三角河网边缘湿地与洪泛区调查5农田珠三角外围、湛江、潮汕平原耕地非农化监测6灌木丘陵过渡地带植被结构研究7建成区广州、深圳、东莞、佛山城市扩张、不透水面分析8裸地采石场、建设工地、裸露山坡违规用地发现、灾害隐患识别9冰雪广东几乎为零可忽略分类代码表的坑在于不同发布渠道可能重编码。所以这个表格只能当参考真正做统计之前去打开那份GuangDong_Landcover_10m.tif.vat.dbf看Value列和Label列确认本数据集的真实对应关系再动手。4.2 分区县统计各地类面积基于省界裁剪的Python脚本面积计算最稳的流程是先用UTM版本再用省界做mask裁剪最后排除NoData统计。直接用WGS版tif做面积计算等于用经纬度算面积数值会错得很离谱。import fiona import rasterio from rasterio.mask import mask import numpy as np class_names { 1: 水体, 2: 树木, 3: 草地, 4: 洪泛植被, 5: 农田, 6: 灌木, 7: 建成区, 8: 裸地 } with fiona.open(广东省.shp, r) as shp: geoms [feature[geometry] for feature in shp] with rasterio.open(GuangDong_Landcover_10m_UTM49N.tif) as src: clipped, transform mask(src, geoms, cropTrue) data clipped[0] valid data[data 0] total_area_km2 valid.size * 100 / 1e6 print(f陆域有效像元面积合计: {total_area_km2:.2f} km²) for code, name in class_names.items(): pixel_count (data code).sum() area_km2 pixel_count * 100 / 1e6 percent pixel_count / valid.size * 100 print(f{name}: {area_km2:.2f} km² ({percent:.2f}%))这段代码的逻辑分四层fiona读取省界shp里的所有面几何mask函数把tif裁剪到省界范围内cropTrue让输出只保留包含多边形的最小矩形valid data[data 0]过滤掉边界外和NoData最后按每个像元100平方米换算成平方公里。参数细节100是10米乘10米的像元面积单位是平方米1e6是把平方米换算成平方公里。做广东全省统计时真实陆域面积大约在17.9万平方公里上下如果统计结果明显偏低或偏高八成是没过滤NoData或坐标系不对。如果要做分县统计把省界shp换成县的shp或者在第一层循环里按县字段逐个提几何就行。同样的tif可以反复裁剪不需要每次都重投影。4.3 两期变化检测用栅格计算器找出新增建设用地10米分辨率最有价值的场景是变化分析。如果你手头还有另一期同分类体系的LULC数据比如2022年或更早的2015年版本最简单的变化检测是把两期同类别栅格做差值。Python里做新增建设用地提取new_data np.load(landcover_2020_utm.npy) # 假设已有的2020年数据 old_data np.load(landcover_2015_utm.npy) # 假设已有的2015年数据 change (new_data 7) (old_data ! 7) print(新增建成区像元数:, change.sum()) print(新增建成区面积:, change.sum() * 100 / 1e6, km²)逻辑是new_data里像元值是7建成区且old_data里不等于7的位置就是这段时间新增的建成区。这个思路同样适用于提取新增裸地、水域缩减、农田转建设用地等。用这套方法做变化检测有个前提两期数据必须已经统一到相同坐标系、相同像元大小。如果两期分辨率不一样先重采样到同一个网格如果分类体系不一样先各自把代码重映射到统一类别再比较。否则算出来的变化面积没有说服力这是遥感变化检测里最容易忽略的预处理步骤。5. 避坑指南坐标错位、NoData混入、分类代码对不上的典型翻车现场5.1 矢量叠栅格整体偏移了几百米现象省界shp和landcover tif同时加载边界明显错开几百米甚至一两公里像是打印重影。原因最常见的是shp用WGS84经纬度tif用UTM投影两者单位不同另一种是tfw文件丢失GIS把栅格当成无参考影像按左上角原点摆放看起来就像整体平移。解决先确认tif实际坐标系QGIS里右键图层属性查看CRS不对就用gdalwarp重投影到shp坐标系。如果是tfw丢失把原压缩包里所有文件重新解压一遍不要手动去改坐标。5.2 按省界裁剪后面积统计少了一半现象裁剪后统计各类型面积广东全省估算怎么也有十七八万平方公里统计结果却只有七八万。原因mask裁剪后省界外的区域不是不存在而是变成了NoData或0值。统计脚本如果没有过滤这部分像元海洋和邻省像元全被算进总面积有效部分被稀释。解决统计时必须过滤valid data[data 0]排除NoData后再计算各类占比。我习惯在脚本开头就打印有效像元总数一旦明显低于预期立刻检查少走冤枉路。5.3 在QGIS里打开tif全黑或出现花色条纹现象ArcGIS里打开正常换成QGIS或Python处理后整幅图黑漆漆或者花花绿绿像噪声图。原因单波段分类栅格没有内嵌颜色表QGIS默认用灰度模式渲染0到9的类别值被拉伸到整个灰度值域肉眼基本看不出层次如果软件误把它当成RGB三波段就会显示成花色噪点。解决图层属性里把渲染类型改成单波段伪彩色最小值和最大值手动设为0和9然后按类别配9个颜色存成QGIS样式文件。以后每次加载直接套用样式省得反复调。5.4 网上查的分类代码和本数据集对不上现象按网上流传的ESRI分类代码写统计脚本结果非常奇怪比如树木面积成了最大类明显和广东实际情况不匹配。原因很多二次发布版本已经把类别重新编码过或者只保留了原分类表的一部分你手里的这份广东数据真实分类以tif旁边那个vat.dbf为准上头不一定和官方全球版本完全一致。解决打开GuangDong_Landcover_10m.tif.vat.dbf把Value和Label列对照一遍再写脚本。这是整个流程里成本最低的后悔药几秒钟能省两小时的返工。5.5 手动修改tfw文件校正偏移结果越改越乱现象发现tif与天地图底图错位有人建议手动改tfw的平移参数改完之后错得更离谱。原因tfw六个参数不只管平移还包括像元尺寸和旋转。你只改X、Y偏移量遇到轻微的旋转误差偏移会随着栅格范围放大越往右下角越偏。解决确认偏移量在整幅图各位置是否相同。如果恒定可以用tfw的坐标单位换算后微调如果各处不一致用QGIS地理配准或gdal_translate -gcp做控制点校正不要直接编辑tfw。碰过这个坑的人都明白手动改tfw是短痛改长痛。6. 进阶验证与业务落地把10米土地覆盖用出业务底图效果的三个习惯6.1 随机点验证花二十分钟知道自己精度够不够处理完数据别急着输出。在QGIS里生成30到50个随机点叠加到天地图或卫星影像底图上逐个和分类结果核对点位落在什么地物上分类给了什么类别记下对错。正确率能达到90%以上这份数据当工作底图基本靠谱如果掉到80%以下说明局部区域分类质量不行。这个习惯不是因为不信任数据而是10米分类数据在城乡结合部最容易错分村路、施工空地、城中村屋顶经常被混成裸地或建成区。随机点验证不是玄学是给自己交付前留后路。6.2 多数滤波去噪让图面干净又不伤线性要素10米分类数据里常见椒盐噪声比如农田中间孤零零一个建成区像是或水体里偶发一个树木像元。做制图输出前可以加一个3×3多数滤波from scipy import ndimage filtered ndimage.median_filter(data, size3)size3就是3×3窗口取中值能把孤立噪点消掉。但要注意河流、道路这类线性地物本身只有一两的像元宽滤波窗口一旦扩大到5×5这些细节会成片被抹掉所以最好只用3×3而且只用于制图不用于面积统计。6.3 出图前强制走一遍CRS验证流程自从有次交付前发现文件错位从那以后我每次处理这套数据都强制走一遍固定流程先跑两个gdalsrsinfo确认坐标一致再做mask裁剪排除NoData最后随机点抽查一遍才出图。这套流程不复杂但每一步都在防着前面提到的五个坑。希望帮到你这份10米分辨率广东Landcover数据值得先解压下来对照着看一遍文件结构再决定是直接出底图还是拿去做更细的土地利用分析。本文还有配套的精品资源点击获取