夜雨聆风学习资料网

ARTICLE · 1184678

月球 DEM 从下载到可用:全流程实操 + 整理好的 4 GB 数据包

月球 DEM 从下载到可用:全流程实操 + 整理好的 4 GB 数据包

NASA 的月球全球 DEM(LOLA 数据)是公开的,但真要用起来,中间有好几道坎:文件是裸二进制、没有头文件、定标参数藏在另一个文本里、2 GB 的体积下载和读取都是问题。

我最近把这套数据完整走了一遍:下载 → 解码 → 转 GeoTIFF / 高度图 → 切片 → 写说明文档,整理成了一个 4.13 GB 的数据包。这篇把全流程和踩过的坑讲清楚,数据包在文末。

一、数据源

数据集是 LRO-L-LOLA-4-GDR,NASA 月球勘测轨道器上 LOLA 激光测高仪的全球地形产品。2009–2016 年间累计约 70 亿个测点,径向精度 0.5 米。

官方提供 4 / 16 / 128 三档分辨率(像素每度),128 是最高档,没有 256:

分辨率网格地面分辨率原始文件体积
4 ppi1440 × 7207 581 米2 MB
16 ppi5760 × 28801 895 米32 MB
128 ppi46080 × 23040237 米2 GB

选型建议:出全月小图用 4 ppi 就够;做全国范围分析用 16 ppi;做局部地形、三维渲染、地貌解译,直接上 128 ppi。

两个官方镜像:

https://imbrium.mit.edu/DATA/LOLA_GDR/CYLINDRICAL/IMG/https://pds-geosciences.wustl.edu/lro/lro-l-lola-3-rdr-v1/

第一个坑:别用 JP2 版。 官网同时提供 JPEG2000 压缩版,体积只有 IMG 的三分之一。我把 LDEM_16 的 JP2 和 IMG 逐像素比对过,它是有损的,误差约 50 米。要做分析、做三维,只下 .IMG。

二、下载

直接下 LDEM_128,单线程速度只有 1.5 MB/s 左右,要 20 多分钟。

我测了一下,这个镜像支持 HTTP Range 请求(返回 206)。那就好办了——分段并行:

# 核心逻辑:把文件切成 N 段,每段一个线程按 Range 下载headers = {"Range": f"bytes={start}-{end}"}# N=8 时实测 31.7 MB/s,2 GB 约 90 秒

8 线程实测 31.7 MB/s,2 GB 文件 90 秒下完,比单线程快 20 倍。下载完按偏移拼接,用文件总长校验(2 123 366 400 字节)。

三、解码:裸二进制怎么变成高程

IMG 文件没有任何文件头,就是一段连续的 int16 数组。定标参数在同名的 .LBL 文本里(PDS3 标签格式,记事本就能打开),关键就三行:

  • 数据类型:有符号 16 位整数,小端序

  • 尺寸:46080 列 × 23040 行

  • 定标:高程(米) = DN × 0.5,DN 是像素值

读取用 memmap,不要整块载入(2 GB 数据,8 GB 内存的机器会直接卡死):

importnumpyasnpdem = np.memmap("ldem_128.img", dtype="<i2", mode="r",shape=(23040, 46080)) *0.5# 单位:米

坐标约定(这个容易搞错):

  • 等距圆柱投影,简单说就是经纬度直接铺成矩形

  • 第 0 行 = 北极 90°N,第 0 列 = 0° 经线,经度 0–360° 向东(不是 −180~180)

  • 反算:纬度 = 90 − 行号/128,经度 = 列号/128

  • 高程基准:相对 1737.4 km 参考球面的起伏,不是"海拔"

实测这版数据的高程范围:−9 127.0 ~ +10 778.5 米,均值 −519.5 米。

顺带一个交叉验证:我从数据里独立扫描出的最高点坐标(5.410°N, 158.629°W),与 NASA 2010 年公布的官方坐标(5.4125°N, 158.6335°W)只差约 100 米——所以这份数据是靠谱的。

四、转换:三种产物,对应三种用法

1. 转 GeoTIFF(QGIS / ArcGIS 用)

转成 GeoTIFF 后坐标内嵌,QGIS 直接拖进去就能用,不用再配 tfw/prj。

第二个坑:GeoTIFF 里存的不是原始 DN。 为了让 GIS 软件和看图软件都能正常显示,我把它归一化到了 0–65535 的 uint16。还原公式和 IMG 完全不同,而且三档参数各不相同,混用会算出错误高程:

分辨率DN_MINSPANVMIN (米)VMAX (米)
4 ppi−1775738765−8878.510504.0
16 ppi−1796339334−8981.510685.5
128 ppi−1825439811−9127.010778.5

128 ppi 的还原:高程 = −9127.0 + (像素值/65535) × 19905.5

这个归一化是可逆的(每档 DN 取值数都小于 65536),不丢信息。但要绝对原始值,还是用 IMG 按第三节的方法读。

第三个坑(我自己犯的): 转换时输出尺寸要按 宽度 = 目标分辨率 × 360 反算。我最早为了省体积把 128 ppi 的 GeoTIFF 压到了 4096 宽,实际精度变成 11 px/度,比文件名标的 128 低了一个数量级。已重做为 46080 × 23040 全分辨率,并与原始 IMG 逐点校验零差异。

2. 转 16 位 PNG 高度图(三维引擎用)

做 Three.js / Cesium 位移贴图的话,导出 16 位灰度 PNG,还原公式同上。

第四个坑: LOLA 数据第 0 列是 0° 经线,而三维引擎的球体贴图 UV 原点通常在 −180°。直接贴会歪 180°,记得加 texture.offset.x = 0.5。

3. 切片(局部研究用)

全分辨率下按经纬度窗口裁切,1:1 不重采样。我切了 4 个地标各 4096 × 4096(约 970 km 见方):第谷坑、雨海、南极-艾特肯盆地、静海(阿波罗 11 号着陆区所在的月海)。

五、数据包里有什么

整理好的包共 35 个文件、4.13 GB:

月球DEM数据包/├── 说明.txt                  ← 12 节完整文档,还原公式/坐标/示例代码都在里面├── moon_3d_preview.html      ← 浏览器双击可转的 3D 预览├── 技术细节_生成过程.md├── 01_原始数据/              ← 三档 IMG + LBL,官方原样├── 02_渲染图与地标切片/       ← 128 ppi 渲染图 4 张 + 地标切片└── 03_GeoTIFF/               ← 三档 GeoTIFF + tfw/prj,QGIS 直读

所有换算参数、读取示例、注意事项都写在 说明.txt 里,拿到手不需要再查任何资料。

六、最后提醒几条

  • 128 ppi 的 IMG 和 GeoTIFF 各 2 GB,读取务必用 memmap / 按需加载,别整块进内存

  • 等距圆柱投影在极区有严重拉伸,做面积统计时要换算

  • 数据基于 2016 年 11 月前的观测,LDEM_4 是 V3.0,另两档是 V3.1

  • 引用出处:Smith et al. (2010), Space Sci. Rev., 150, 209–241;LRO-L-LOLA-4-GDR-V1.0, NASA PDS


数据包获取: 后台回复「月球dem」,这边直接发您百度网盘链接~

这个号会持续把公开的地理数据整理成"开箱即用"的包——下一期在做 SRTM / ASTER GDEM 对比。做 GIS 的同行可以关注,省得每次都自己从头踩坑。

觉得有用的话,转给需要的同学。

相关学习资料