Python GDAL实战:ASTER GDEM V003全国DEM高程数据处理(1123幅分幅合并→34省裁切,30m精度)
Python GDAL实战ASTER GDEM V003全国DEM高程数据处理1123幅分幅合并→34省裁切30m精度摘要本文详细记录了基于 Pythonrasterio GDAL对 ASTER GDEM V003 原始数据进行全国34省级行政区DEM裁切的完整工程实践。涵盖数据下载、分幅合并mosaic、矢量裁切mask、质量检验全流程附完整可复现代码。数据覆盖N18°N53°、E73°E134°成果34个GeoTIFF文件总计10.61GB124.8亿有效像素。关键词DEM高程数据、ASTER GDEM、Python rasterio、GDAL、遥感数据处理、GeoTIFF、空间数据裁切、数字高程模型标签GIS遥感空间数据库数据处理地理信息系统成果免费获取方式数据由WX号YouGIS顽石整理分享完全免费。两种获取方式任选其一方式一关键词推荐关注YouGIS顽石发送DEM-省份简称 获取省份成果数据DEM-分幅号 获取分幅数据DEM-{省份简称} → 获取省份裁切成果数据如 DEM-河南 DEM-{分幅号} → 获取原始分幅数据如 DEM-N30E14方式二YouGIS 数据助手平台入口小程序搜索「YouGIS数据助手」PC 端https://yougis.com.cn/res/home支持在线查看数据元信息分辨率、坐标系、覆盖范围适合批量检索多个数据集。一、数据背景与选型1.1 ASTER GDEM V003 vs V002 vs SRTM对比项SRTM C-bandASTER GDEM V002ASTER GDEM V003分辨率30m30m30m纬度覆盖N60°~S56°N83°~S83°N83°~S83°垂直精度(RMSE)~16m17m8.5m数据源年份2000年2月2000-20102000-2018空洞密度少较多大幅减少中国高纬度覆盖差漠河N53°已覆盖但更北缺失好好选型结论全国DEM处理选 ASTER GDEM V003兼顾覆盖范围含高纬度和精度。SRTM适合低纬度区域专项研究。1.2 数据获取来源来源网址特点NASA EarthDatahttps://earthdata.nasa.gov原始来源需注册地理空间数据云https://www.gscloud.cn国内镜像下载速度快ASTER GDEM官网https://asterweb.jpl.nasa.gov/gdem.asp产品说明文档二、原始数据技术规格2.1 核心参数数据产品ASTER GDEM V003 发布机构NASA METI 发布时间2019年8月 分幅规则1°×1° 经纬度网格 单幅像素3601 × 3601 单幅大小~41 MB 空间分辨率0.000278°赤道约30m 数据类型signed 16-bit integer (int16) 空间参考WGS84 / EPSG:4326 NoData值-9999 文件格式GeoTIFF 命名规则ASTGTMV003_N{纬度}E{经度}_dem.tif2.2 全国覆盖统计分幅总数1,123幅 覆盖范围N18°~N53°, E73°~E134° 总数据量~49 GB 单幅示例ASTGTMV003_N39E116_dem.tif → 北京 ASTGTMV003_N30E114_dem.tif → 武汉2.3 分幅筛选——根据省份bbox确定所需图幅importnumpyasnpdefget_tile_range(min_lat,max_lat,min_lon,max_lon):根据经纬度范围获取需要的ASTER GDEM分幅编号latsrange(int(np.floor(min_lat)),int(np.ceil(max_lat))1)lonsrange(int(np.floor(min_lon)),int(np.ceil(max_lon))1)tiles[fN{lat}E{lon}forlatinlatsforloninlons]returntiles# 示例河南省范围约 N31°~N36°, E110°~E117°tilesget_tile_range(31,36,110,117)print(f河南需{len(tiles)}幅:{tiles})# 输出: 河南需 42 幅: [N31E110, N31E111, ..., N36E117]三、处理流程与核心代码┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ 数据下载 │ - │ 分幅合并 │ - │ 省界裁切 │ - │ 质量检验 │ │ 1123幅 │ │ 按省镶嵌 │ │ 矢量裁切 │ │ 统计核查 │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ ~49 GB 临时大文件 34个TIF _summary.json3.1 分幅合并Mosaicimportrasteriofromrasterio.mergeimportmergefromrasterio.transformimportarray_boundsdefmosaic_tiles(tile_paths,output_path):合并多个DEM分幅为单个TIFFLZW压缩src_files[rasterio.open(p)forpintile_paths]mosaic,transformmerge(src_files)profilesrc_files[0].profile.copy()profile.update({height:mosaic.shape[1],width:mosaic.shape[2],transform:transform,compress:lzw,tiled:True,# 启用分块写入提升读取性能blockxsize:256,blockysize:256,})withrasterio.open(output_path,w,**profile)asdst:dst.write(mosaic)forsrcinsrc_files:src.close()print(f[OK] 合并完成:{output_path}({mosaic.shape[2]}×{mosaic.shape[1]}))3.2 省界裁切Maskimportrasteriofromrasterio.maskimportmaskimportjsondefclip_to_province(input_tif,geojson_path,output_tif,nodata-9999):用省级行政区划矢量GeoJSON裁切栅格withopen(geojson_path)asf:geojsonjson.load(f)# 处理 FeatureCollection / Feature / Geometry 等不同结构ifgeojson[type]FeatureCollection:shapes[feat[geometry]forfeatingeojson[features]]elifgeojson[type]Feature:shapes[geojson[geometry]]else:shapes[geojson]withrasterio.open(input_tif)assrc:out_image,out_transformmask(src,shapes,cropTrue,nodatanodata,all_touchedTrue)profilesrc.profile.copy()profile.update({height:out_image.shape[1],width:out_image.shape[2],transform:out_transform,nodata:nodata,compress:lzw,tiled:True,})withrasterio.open(output_tif,w,**profile)asdst:dst.write(out_image)print(f[OK] 裁切完成:{output_tif})3.3 质量检验importrasterioimportnumpyasnpfrompathlibimportPathimportjsondefvalidate_dem(tif_path):验证DEM数据质量返回统计字典withrasterio.open(str(tif_path))assrc:arrsrc.read(1)validarr[arr!src.nodata]return{code:Path(tif_path).stem,width:src.width,height:src.height,crs:str(src.crs),dtype:str(src.dtypes[0]),total_pixels:int(arr.size),valid_pixels:int(valid.size),valid_ratio:round(valid.size/arr.size*100,2),elev_min:int(valid.min()),elev_max:int(valid.max()),elev_mean:round(float(valid.mean()),1),size_mb:Path(tif_path).stat().st_size//(1024*1024),}# 批量检验results{}fortifinsorted(Path(a_output).glob(*.tif)):statsvalidate_dem(tif)results[stats[code]]statsprint(f{stats[code]}:{stats[valid_pixels]:12,}px | f{stats[elev_min]:5}~{stats[elev_max]:5}m | f{stats[size_mb]}MB)# 导出汇总JSONwithopen(_summary.json,w)asf:json.dump(results,f,ensure_asciiFalse,indent2)四、成果数据总览4.1 整体统计指标数值成果文件数34个总数据量10,868 MB (10.61 GB)总有效像素12,476,309,771约124.8亿有效像素占比43.42%高程范围-275m ~ 8802m数据类型int16坐标系WGS84 (EPSG:4326)NoData值-9999压缩方式LZW4.2 34省完整清单编码省份图幅数像素尺寸有效像素高程范围大小(MB)110000北京64008×28659,258,6263~2296m19120000天津43605×34918,632,021-5~1097m7130000河北3910845×947065,857,0020~2818m199140000山西279010×719544,388,292148~3055m195150000内蒙古46428848×19948280,552,49091~2840m1230210000辽宁3110846×900162,045,913-275~1337m162220000吉林4312642×893065,444,8910~2630m214230000黑龙江8418054×13394145,335,4350~1671m519310000上海53962×28896,837,004-10~352m4320000江苏309014×690038,332,587-32~685m61330000浙江257937×722634,425,8360~1920m118340000安徽279010×701942,437,091-2~1869m122350000福建238292×829240,449,7600~2160m150360000江西299369×795847,502,717-1~2145m177370000山东4010849×740745,702,055-11~1532m134410000河南4210489×852950,054,54912~2411m156420000湖北4012646×901462,375,665-6~3097m201430000湖南3510489×972856,001,68819~2097m235440000广东3210493×936655,021,5680~1901m185450000广西4812646×1009065,193,980-16~2109m271460000海南309370×630023,508,4200~1839m32500000重庆217585×684536,514,21226~2776m106510000四川7016258×14022125,472,821169~7523m658520000贵州309369×865054,395,708247~2896m223530000云南6014479×11586103,015,27776~6710m506540000西藏15128848×21612260,749,872122~8802m1476610000陕西4011711×901365,016,912166~3762m266620000甘肃18720704×16057172,464,233615~5786m507630000青海9719853×16625205,670,3091682~6751m801640000宁夏126127×541222,346,2511090~3554m56650000新疆22434260×23418357,088,649-154~8199m1833710000台湾306482×793819,908,7800~3886m44810000香港21622×18011,582,8400~958m1820000澳门11082×1441762,668-2~171m0五、工程注意事项5.1 大文件内存管理新疆成果文件 650000.tif 像素尺寸达 34260×234188亿像素直接全量读取会触发内存溢出。# ❌ 错误全量读取大文件withrasterio.open(650000.tif)assrc:arrsrc.read(1)# 1.6GB内存# ✅ 正确分块读取windowed readwithrasterio.open(650000.tif)assrc:forwindowinsrc.block_windows(1):blocksrc.read(1,windowwindow[1])# 逐块处理...5.2 坐标系一致性检查裁切前务必确认矢量与栅格坐标系一致否则裁切结果为空或错位。importrasterioimportgeopandasasgpdwithrasterio.open(merged.tif)assrc:raster_crssrc.crs.to_epsg()gdfgpd.read_file(province_boundary.geojson)vector_crsgdf.crs.to_epsg()ifraster_crs!vector_crs:print(f[WARNING] 坐标系不一致! 栅格: EPSG:{raster_crs}, 矢量: EPSG:{vector_crs})gdfgdf.to_crs(raster_crs)# 统一到栅格坐标系5.3 噪声像素过滤650000.tif新疆存在 104 个极端异常像素-32287~32008m使用前过滤importrasterioimportnumpyasnpwithrasterio.open(650000.tif)assrc:profilesrc.profile.copy()arrsrc.read(1).astype(np.float32)# 过滤物理不可能的高程值arr[(arr-1000)|(arr9000)]-9999withrasterio.open(650000_filtered.tif,w,**profile)asdst:dst.write(arr.astype(np.int16),1)5.4 投影转换注意事项数据为经纬度坐标EPSG:4326进行以下分析前需投影分析类型推荐投影原因面积/体积计算Albers等积投影保持面积不变距离/坡度分析UTM投影局部区域变形小流域提取UTM投影水流方向计算需平面坐标# 使用GDAL进行投影转换命令行# gdalwarp -t_srs EPSG:32649 input.tif output_utm49n.tif# Python方式importsubprocess subprocess.run([gdalwarp,-t_srs,EPSG:32649,-r,bilinear,-of,GTiff,-co,COMPRESSLZW,input.tif,output_utm49n.tif])六、数据读取与可视化importrasterioimportnumpyasnpimportmatplotlib.pyplotaspltwithrasterio.open(410000.tif)assrc:demsrc.read(1)demnp.where(dem-9999,np.nan,dem).astype(np.float32)fig,axplt.subplots(figsize(10,8))imax.imshow(dem,cmapterrain)plt.colorbar(im,label高程 (m),shrink0.8)ax.set_title(河南省 DEM (ASTER GDEM V003),fontsize14)ax.set_xlabel(列号)ax.set_ylabel(行号)plt.tight_layout()plt.savefig(henan_dem.png,dpi150)plt.show()七、总结阶段内容规模原始数据ASTER GDEM V0031123幅~49GB处理下载→合并→裁切→检验rasterio GDAL成果int16, EPSG:4326, LZW压缩34省TIF10.61GB处理流程全代码开源、可复现所有34个成果文件技术规格统一。参考文献NASA/METI. ASTER GDEM Version 3. (2019). https://asterweb.jpl.nasa.gov/gdem.aspNASA EarthData Search. https://earthdata.nasa.gov地理空间数据云. https://www.gscloud.cnrasterio Documentation. https://rasterio.readthedocs.ioGDAL Documentation. https://gdal.org如果觉得有用点赞收藏关注一键三连有问题评论区交流 ✌️

相关新闻

电商管理平台Smart Web核心功能与技术架构解析

电商管理平台Smart Web核心功能与技术架构解析

1. Smart Web管理端核心功能解析Smart Web作为一款面向电商企业的综合管理平台,其管理端设计遵循"数据驱动、效率优先"的原则。管理端采用模块化架构,主要包含以下核心功能模块:店铺管理中枢:支持多店铺统一管理&#x…

2026/7/22 1:44:28 阅读更多 →
嵌入式低功耗设计:Deep Sleep模式与SYSCFG模块实战解析

嵌入式低功耗设计:Deep Sleep模式与SYSCFG模块实战解析

1. 项目概述与核心价值在电池供电的嵌入式设备开发中,功耗管理从来都不是一个“锦上添花”的选项,而是决定产品成败的关键。我经历过不少项目,前期功能跑得飞起,一到功耗测试就傻眼,待机电流比预期高出几倍&#xff0c…

2026/7/22 1:44:28 阅读更多 →
明明自己写的期刊却说AI率高?原因和降到合格的方法

明明自己写的期刊却说AI率高?原因和降到合格的方法

明明自己写的期刊却说AI率高?原因和降到合格的方法 你大概正卡在一件特别憋屈的事上:这篇稿子明明是你自己一句一句敲出来的,一段一段查资料写的,投出去却收到编辑部反馈,说你的 AIGC 疑似度偏高,要求你降…

2026/7/22 1:44:28 阅读更多 →

最新新闻

嵌入式系统异常与中断:内忧外患的底层处理机制与实战设计

嵌入式系统异常与中断:内忧外患的底层处理机制与实战设计

1. 从“内忧外患”说起:理解系统运行的两种扰动做嵌入式或者底层系统开发的朋友,对“异常”和“中断”这两个词一定不陌生。它们就像是系统运行过程中遇到的两种“意外事件”,一个来自内部,一个来自外部,共同构成了我们…

2026/7/22 4:28:29 阅读更多 →
OpenClaw2026跨平台安装部署指南:从环境配置到生产实践

OpenClaw2026跨平台安装部署指南:从环境配置到生产实践

最近在尝试部署AI开发环境时,发现OpenClaw作为新兴的AI开发平台,其安装部署过程对新手来说存在不少挑战。网上资料分散且版本混乱,特别是针对不同操作系统的兼容性问题经常让人头疼。本文基于官方最新文档,整理了一套完整的OpenCl…

2026/7/22 4:28:29 阅读更多 →
Gitlab 任意文件读取漏洞(CVE-2016-9086)

Gitlab 任意文件读取漏洞(CVE-2016-9086)

GitLab 是一个利用 Ruby on Rails 开发的开源应用程序,用于自托管的 Git 项目仓库。该漏洞源于程序在处理用户提供的文档时没有正确检查符号链接(软连接),导致目录遍历漏洞。攻击者可以利用该漏洞读取任意文件的内容。GitLab是一套…

2026/7/22 4:28:29 阅读更多 →
门头招牌工程全流程:勘察、设计、施工与验收

门头招牌工程全流程:勘察、设计、施工与验收

摘要 门头招牌升级并不是简单更换面板、重新排版或安装发光字,而是一项同时涉及视觉识别、结构连接、材料耐候、电气安全、防水排水、施工组织和后期运维的综合工程。 部分门头在完工初期外观正常,但经过日晒、雨淋、温差变化和长期通电后,逐…

2026/7/22 4:28:29 阅读更多 →
同样叫 Agent,为什么有的能进生产环境,有的只配留在 Demo 里?

同样叫 Agent,为什么有的能进生产环境,有的只配留在 Demo 里?

聊《同样是Agent,为什么有的能上线、有的只能演示?》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值…

2026/7/22 4:28:29 阅读更多 →
C++20 Range适配器:transform、filter、take三斧合璧,构建高效数据处理管道

C++20 Range适配器:transform、filter、take三斧合璧,构建高效数据处理管道

1. 项目概述&#xff1a;为什么我们需要Range适配器&#xff1f;如果你写过C&#xff0c;尤其是处理过容器数据&#xff0c;下面这种代码你一定不陌生&#xff1a;一个std::vector<int>&#xff0c;你想把每个元素加一&#xff0c;然后过滤掉所有偶数&#xff0c;最后只取…

2026/7/22 4:27:29 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统&#xff0c;尤其是像TI C6000系列这样的高性能DSP开发中&#xff0c;我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动&#xff0c;但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案&#xff1f; 在数字化协作环境中&#xff0c;消息通知系统的重要性不言而喻明。但现实情况是&#xff0c;企业级通知方案往往需要复杂的API对接&#xff08;如企业微信、钉钉、飞书&#xff09;&#xff0c;个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点"&#xff0c;乙方听到的是"少做几页"。甲方说"不要太复杂"&#xff0c;乙方理解成"别放图表了"。结果交过去&#xff0c;甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里&#xff0c;是…

2026/7/22 0:00:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中&#xff0c;我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源&#xff0c;还是配置文件、证书等&#xff0c;都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下&#xff0c;但这…

2026/7/21 8:48:31 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP&#xff08;轻量级目录访问协议&#xff09;作为企业级身份认证的黄金标准&#xff0c;已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时&#xff0c;发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”&#xff0c;而是以可解释、可审计、可迭代的方式&#xff0c;赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 8:25:39 阅读更多 →

月新闻