目录
- 下载方式1-(简单快捷)
-
- 根据WRF-VPRM 需要打补丁
- math_sds.patch 文件详解
- 下载方式2:(手动安装依赖)
-
- 一、安装所需依赖库(4 个主库 + 2 个基础库)
-
- 另- HDF-EOS 手动编译
- 二、解压并安装 LDOPE
- 参考
下载方式1-(简单快捷)
LDOPE-Land Data Operational Products Evaluation
1. 下载并解压文件
wget https://lpdaac.usgs.gov/documents/208/LDOPE-1.7-linux-x64-installer.run.zip
unzip LDOPE-1.7-linux-x64-installer.run.zip
2. 给 .run 文件添加执行权限
打开终端,进入该文件所在的目录,然后执行:
chmod +x LDOPE-1.7-linux-x64-installer.run
3. 运行安装程序
继续在终端中执行:
./LDOPE-1.7-linux-x64-installer.run
这将启动图形界面的安装程序(或命令行安装界面,取决于打包方式),你只需按照提示进行安装即可。
4. 安装完成后设置环境变量(如有必要)
安装完后,通常会提示你软件安装在哪个目录,比如:
/home/yourname/LDOPE/
你可以将其添加到环境变量中,确保可以在任何地方通过命令行调用工具。例如:
export PATH=$PATH:/home/yourname/LDOPE/bin
可以将这行添加到你的 ~/.bashrc 或 ~/.zshrc 文件中,以便每次启动终端时自动生效。
根据WRF-VPRM 需要打补丁
VPRM 预处理器对 LDOPE 的两个源文件做了修改:
- math_sds.c
- cp_proj_param.c
VPRM 预处理器的源代码中已经有了对应的补丁文件:
- math_sds.patch
- cp_proj_param.patch
它们的作用是将这些修改应用到 LDOPE 的源代码中,然后重新编译 LDOPE。
1. 找到 LDOPE 源代码目录
默认情况下,安装 .run 文件后,LDOPE 会安装在某个目录中,比如:
~/LDOPE/
你需要找到其中包含 math_sds.c 和 cp_proj_param.c 的目录,通常在:
~/LDOPE/src/
$HOME/vprm_project/tools/LDOPE-1.7/src/
2. 将 patch 文件复制到 LDOPE 源代码目录
cp $HOME/vprm_project/WRF-VPRM/*.patch $HOME/vprm_project/tools/LDOPE-1.7/src/
cd $HOME/vprm_project/tools/LDOPE-1.7/src/
3. 应用补丁
在 src/ 目录下执行以下命令:
patch < cp_proj_param.patch
patch < math_sds.patch
如果成功,终端将显示类似:
patching file cp_proj_param.c
patching file math_sds.c
若提示类似 Reversed (or previously applied) patch detected!,说明补丁可能已经应用过,无需重复。
4. 重新编译 LDOPE
通常在源代码目录下有 Makefile,你只需要运行:
make clean
make
如果没有 Makefile,你可能需要手动编译:
gcc -o cp_proj_param cp_proj_param.c
gcc -o math_sds math_sds.c
或者参考源代码中的编译说明(如 README 或 INSTALL 文件)。
math_sds.patch 文件详解
1. 修改命令行帮助信息
找到 math_sds.c 中几段类似下面的:
"-math=<arithmetic expression>,dt,f_nop1,f_nop2,f_nop3,f_ovf \\n"
替换为:
"-math=<arithmetic expression>,dt,f_nop1,f_nop2,f_nop3,f_ovf,scalar1,scalar2,SDS_name_out \\n"
并在说明文字下方 增加:
" scalar1 and scalar2 are scalars for multiplication of SDS1 and \\n"
"SDS2, respectively. Default is 1 (can be invoked by * symbol)\\n"
" \\n"
" SDS_name_out is the name to be given to the output SDS. Default is \\n"
"the SDS1 name (can be invoked by * symbol)\\n"
2. 修改函数参数定义(增加新的参数)
✅ 函数 1:
原来:
int parse_expr(char *dt, char *f_nop1, char *f_nop2, char *f_nop3, char *f_ovf);
改成:
int parse_expr(char *dt, char *f_nop1, char *f_nop2, char *f_nop3, char *f_ovf,
char *scalr1, char *scalr2, char *scalr3, char *sds3);
✅ 函数 2:
int compute_math_sds(..., char *f_nop, char *f_ovf)
改为:
int compute_math_sds(..., char *f_nop, char *f_ovf,
char *scalr1, char *scalr2, char *scalr3, char *sds3)
3. 增加变量定义
在函数中 char sds1[MAX_SDS_NAME_LEN], sds2[MAX_SDS_NAME_LEN]; 之后,加上:
char sds3[MAX_SDS_NAME_LEN];
char scalr1[10], scalr2[10], scalr3[10];
4. 修改参数提取逻辑
找到原来的参数解析循环:
for (i = 0, p1 = 0; i < 9; i++)
改为:
for (i = 0, p1 = 0; i < 13; i++)
并在 switch-case 中添加:
case 9: strmid(expr, p1, nc, f_ovf); break;
case 10: strmid(expr, p1, nc, scalr1); break;
case 11: strmid(expr, p1, nc, scalr2); break;
case 12: strmid(expr, p1, nc, scalr3); break;
最后:
strmid(expr, p1, nc, f_ovf);
改为:
strmid(expr, p1, nc, sds3);
5. 增加默认值处理
if (strcmp(scalr1, "*") == 0) scalr1[0] = '\\0';
if (strcmp(scalr2, "*") == 0) scalr2[0] = '\\0';
if (strcmp(scalr3, "*") == 0) scalr3[0] = '\\0';
if (strcmp(sds3, "*") == 0) sds3[0] = '\\0';
6. 修改输出 SDS 名称设置逻辑
原来:
sprintf(sds3_info->name, "%s%c%s", sds1_info->name, op_t, sds2_info->name);

改为:
if (sds3[0] == '\\0')
sprintf(sds3_info->name, "%s", sds1_info->name);
else
sprintf(sds3_info->name, "%s", sds3);
7. 最终计算时加入 scalar 运算
加入:
fscalr1 = (scalr1[0] == '\\0') ? 1.0 : atof(scalr1);
fscalr2 = (scalr2[0] == '\\0') ? 1.0 : atof(scalr2);
fscalr3 = (scalr3[0] == '\\0') ? 0.0 : atof(scalr3);
并应用:
dval1 = fscalr1 * dval1;
dval2 = fscalr2 * dval2;
...
dval3 = dval3 + fscalr3;
完成后重新编译
回到 LDOPE 目录:
cd $HOME/vprm_project/tools/LDOPE-1.7
make clean
make
确认 bin/math_sds 被重新生成。
修改完成后,就可以这样使用了:
math_sds -of=output.hdf \\
-math=sds1,input.hdf,+,sds2,input.hdf,INT16,-28672,-28672,-28672,-28672,1,2,100,evi_result
这里 1,2,100,evi_result 分别对应:
- scalar1 = 1(乘 sds1)
- scalar2 = 2(乘 sds2)
- scalar3 = 100(结果加常数)
- evi_result:输出 SDS 名称 ✅
下载方式2:(手动安装依赖)
官方页面-LDOPE(Land Data Operational Product Evaluation)Tools

LDOPETools_V3.6.tar.gz
是一个有效的工具包压缩文件,包含了 NASA 提供的 MODIS 和 VIIRS 数据质量评估工具。
一、安装所需依赖库(4 个主库 + 2 个基础库)
1. 所需库列表
| HDF4 | 支持 HDF-EOS2 的底层库 | HDF4 下载 |
| HDF-EOS2 | 基于 HDF4 的 EOS 数据结构支持 | HDFEOS2 下载 |
| HDF5 | 支持 HDF-EOS5 的底层库 | HDF5 下载 |
| HDF-EOS5 | 基于 HDF5 的 EOS 数据结构支持 | HDFEOS5 下载 |
| libjpeg | JPEG 图像压缩支持库(HDF4 依赖) | jpegsrc.v6b.tar.gz |
| zlib | 压缩支持库(HDF4 和 HDF5 依赖) | zlib.net |
# 安装基础依赖
conda install -c conda-forge libjpeg zlib
# 安装 HDF4 / HDF5
conda install -c conda-forge hdf4 hdf5
# 安装 HDF-EOS2 / HDF-EOS5
conda install -c conda-forge hdfeos2 hdfeos5
source load_vprm_env.sh
echo $HDF_INC
which get_sds_info
ls $CONDA_PREFIX/include/hdf.h # HDF4
ls $CONDA_PREFIX/include/H5public.h # HDF5
ls $CONDA_PREFIX/include/HE2_config.h # HDF-EOS2
ls $CONDA_PREFIX/include/HE5_config.h # HDF-EOS5
ls $CONDA_PREFIX/lib/libjpeg.* # libjpeg
ls $CONDA_PREFIX/lib/libz.* # zlib
2. 目录结构建议
~/vprm_project/
├── tools/
│ ├── hdf4/
│ ├── hdfeos2/
│ ├── hdf5/
│ ├── hdfeos5/
│ ├── jpeg/
│ ├── zlib/
│ └── LDOPEtools_V3.6/
3. 安装步骤(以源码编译方式为主)
Step 1:编译安装 JPEG 和 Zlib(基础库)
安装 libjpeg:
wget http://www.ijg.org/files/jpegsrc.v6b.tar.gz
tar -xvzf jpegsrc.v6b.tar.gz
cd jpeg-6b
./configure –prefix=$HOME/vprm_project/tools/jpeg
make && make install
安装 zlib:
wget https://zlib.net/zlib.tar.gz
tar -xvzf zlib.tar.gz
cd zlib-*
./configure –prefix=$HOME/vprm_project/tools/zlib
make && make install
# HDFEOS2
./configure –prefix=$HOME/vprm_project/tools/hdfeos2 \\
–with-hdf4=$HOME/vprm_project/tools/hdf4
make && make install
# HDFEOS5
./configure –prefix=$HOME/vprm_project/tools/hdfeos5 \\
–with-hdf5=$HOME/vprm_project/tools/hdf5
make && make install
另- HDF-EOS 手动编译
How to build HDF-EOS 
1、安装并编译 HDF-EOS2
tar -xvzf hdf-eos2-3.0-src.tar.gz
cd hdf-eos2-3.0
# 创建安装目录(可选)
mkdir -p ~/vprm_project/tools/hdfeos2
# 配置,指定 HDF4 路径(这里用 Conda 安装的 HDF4)
./configure \\
–prefix=$HOME/vprm_project/tools/hdfeos2 \\
–with-hdf4=$CONDA_PREFIX \\
CC=${CC:-gcc} \\
CFLAGS="-I$CONDA_PREFIX/include" \\
LDFLAGS="-L$CONDA_PREFIX/lib"
# 编译
make -j$(nproc)
# 安装
make install
ls ~/vprm_project/tools/hdfeos2/include/HE2_config.h
ls ~/vprm_project/tools/hdfeos2/lib/libhe2.*
2、安装并编译 HDF-EOS5

# 解压源码包
tar -xvzf hdf-eos5-2.0-src.tar.gz
cd hdf-eos5-2.0
# 创建安装目录(可选)
mkdir -p $HOME/vprm_project/tools/hdfeos5
# 配置,指定 HDF5 路径(通过 Conda 安装的 HDF5)
./configure \\
–prefix=$HOME/vprm_project/tools/hdfeos5 \\
–with-hdf5=$CONDA_PREFIX \\
CC=${CC:-gcc} \\
CFLAGS="-I$CONDA_PREFIX/include" \\
LDFLAGS="-L$CONDA_PREFIX/lib"
# 编译
make -j$(nproc)
# 安装
make install
安装完成后验证:
# 头文件
ls $HOME/vprm_project/tools/hdfeos5/include/HE5_config.h
# 库文件
ls $HOME/vprm_project/tools/hdfeos5/lib/libhe5.*
添加环境变量(建议加到 load_vprm_env.sh):
export HDFEOS5_INC=$HOME/vprm_project/tools/hdfeos5/include
export HDFEOS5_LIB=$HOME/vprm_project/tools/hdfeos5/lib
二、解压并安装 LDOPE
以下是标准的安装流程,当前目录为:
$HOME/vprm_project/tools
cd ~/vprm_project/tools
# 解压
tar -xvzf LDOPETools_V3.6.tar.gz
这将解压出类似结构的目录,例如:
LDOPETools_V3.6/
├── bin/
├── include/
├── lib/
├── doc/
└── src/
进入文件地址,并开始安装:
cd $HOME/vprm_project/tools/LDOPE_tools_V3.6/src/
cd ~/vprm_project/tools/LDOPEtools_V3.6/src
make
如果你下载了测试包 LDOPE_tools_V3.6_test_pkg.tar.gz,可以解压并运行测试:
tar -xvzf LDOPE_tools_V3.6_test_pkg.tar.gz
cd LDOPE_tools_V3.6_test_pkg/
less README
which get_sds_info
get_sds_info -h
which cp_proj_param
cp_proj_param -h


