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/9/23 3:49:07 阅读更多 →
嵌入式低功耗设计:Deep Sleep模式与SYSCFG模块实战解析

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

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

2026/9/23 14:12:01 阅读更多 →
明明自己写的期刊却说AI率高?原因和降到合格的方法

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

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

2026/9/23 20:13:02 阅读更多 →

最新新闻

Swagger Codegen 生成的 Java 枚举类型 OuterEnum:定义、源码实现与序列化机制解析

Swagger Codegen 生成的 Java 枚举类型 OuterEnum:定义、源码实现与序列化机制解析

Swagger Codegen 生成的 Java 枚举类型 OuterEnum:定义、源码实现与序列化机制解析 【免费下载链接】swagger-codegen swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by par…

2026/9/23 21:30:24 阅读更多 →
学术论文降AI率实战:三步策略与实测效果

学术论文降AI率实战:三步策略与实测效果

1. 项目背景与核心痛点去年帮导师审阅研究生论文时,发现一个令人担忧的现象:某篇标注"原创"的经管类论文,在知网AI检测中显示95%的AI生成概率。更讽刺的是,当我把检测报告发给学生后,他回复我的竟然是一段明…

2026/9/23 21:30:24 阅读更多 →
.ai域名注册全攻略:查询方法、价格陷阱与实操避坑指南

.ai域名注册全攻略:查询方法、价格陷阱与实操避坑指南

最近一个月,我至少被问了三次同一个问题:“想做AI相关的东西,名字后缀选.ai靠谱吗?”前两个还是软件公司的技术负责人,第三个是打算囤几个域名等升值的朋友,问得更直接:“现在是不是.ai域名最值…

2026/9/23 21:30:24 阅读更多 →
Airbyte WooCommerce 连接器增量同步深度解析:流清单、游标设计与未来演进

Airbyte WooCommerce 连接器增量同步深度解析:流清单、游标设计与未来演进

数据工程数据集成ETL后端大数据 【免费下载链接】airbyte Open-source data movement for ELT pipelines and AI agents — from APIs, databases & files to warehouses, lakes, and AI applications. Both self-hosted and Cloud. 项目地址: https://gitcode.…

2026/9/23 21:30:24 阅读更多 →
如何快速选出最适合的本地大模型?whichllm 的 LLM 选型实操指南

如何快速选出最适合的本地大模型?whichllm 的 LLM 选型实操指南

如何快速选出最适合的本地大模型?whichllm 的 LLM 选型实操指南 【免费下载链接】whichllm Find the local LLM that actually runs and performs best on your hardware. Ranked by real, recency-aware benchmarks, not parameter count. One command, run it ins…

2026/9/23 21:30:24 阅读更多 →
论文写作流程怎么安排?一份从开题到提交的指南

论文写作流程怎么安排?一份从开题到提交的指南

论文写作流程怎么安排?一份从开题到提交的指南 工具不是越多越好,关键是放在正确环节。每位学弟学妹在撰写论文时,都会经历从选题、资料收集、写作到最终提交的各个阶段。在这些环节中,合理利用工具和方法,可以大大提…

2026/9/23 21:29:24 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →