- 问题简述
- 问题分析
- 对比
- 一个可用MTL的模板
- 重构思路
- 解决方案
- 结语
一般如果要在ENVI上加载LANDSAT数据,只需要加载对应的MTL文件就可以实现同时加载所有波段文件。但是我从USGS上下载了几景LANDSAT8_OLI_L1数据,按照这个方法导入MTL文件后会报这个错。(从地理空间数据云上下载的数据不会出现这个问题)
上网搜了很久也没有找到清晰的解决方法。但从这篇博文上得知,可以通过修改MTL.txt的内容来解决这个问题。
ENVI报错的原因还没有搞清楚,但通过对比地理空间数据云上下载到的MTL.txt和USGS上下载到的MTL.txt,可以找到解决这个问题的方法。目前猜测是因为ENVI不支持USGS版的MTL组织格式,具体的解决方法可以直接看‘解决方案‘。
对比- 可以正常加载的MTL.txt结构是
GROUP = L1_METADATA_FILE # group1 该文件的描述信息 GROUP = METADATA_FILE_INFO END_GROUP = METADATA_FILE_INFO # group2 位置信息和tif索引 GROUP = PRODUCT_METADATA END_GROUP = PRODUCT_METADATA # group3 图像的参数 GROUP = IMAGE_ATTRIBUTES END_GROUP = IMAGE_ATTRIBUTES # group4 各波段辐射量的最大最小值 GROUP = MIN_MAX_RADIANCE END_GROUP = MIN_MAX_RADIANCE # group5 各波段反射率的最大最小值 GROUP = MIN_MAX_REFLECTANCE END_GROUP = MIN_MAX_REFLECTANCE # group6 各波段的取值范围 GROUP = MIN_MAX_PIXEL_VALUE END_GROUP = MIN_MAX_PIXEL_VALUE # group7 各波段的辐射定标数据 GROUP = RADIOMETRIC_RESCALING END_GROUP = RADIOMETRIC_RESCALING # group8 几个热红外波段的参数 GROUP = TIRS_THERMAL_CONSTANTS END_GROUP = TIRS_THERMAL_CONSTANTS # group9 投影信息 GROUP = PROJECTION_PARAMETERS END_GROUP = PROJECTION_PARAMETERS END_GROUP = L1_METADATA_FILE END
- 无法正常加载的MTL.txt结构是
GROUP = LANDSAT_METADATA_FILE # group1 该文件的描述信息,包括各种文件索引及它们的数据格式 GROUP = PRODUCT_CONTENTS END_GROUP = PRODUCT_CONTENTS # group2 图像参数、航道信息和文件的描述信息 GROUP = IMAGE_ATTRIBUTES END_GROUP = IMAGE_ATTRIBUTES # group3 位置信息和投影信息 GROUP = PROJECTION_ATTRIBUTES END_GROUP = PROJECTION_ATTRIBUTES # group4 描述信息、图像参数和文件索引 GROUP = LEVEL1_PROCESSING_RECORD END_GROUP = LEVEL1_PROCESSING_RECORD # group5 各波段辐射量的最大最小值 GROUP = LEVEL1_MIN_MAX_RADIANCE END_GROUP = LEVEL1_MIN_MAX_RADIANCE # group6 各波段反射率的最大最小值 GROUP = LEVEL1_MIN_MAX_REFLECTANCE END_GROUP = LEVEL1_MIN_MAX_REFLECTANCE # group7 各波段的取值范围 GROUP = LEVEL1_MIN_MAX_PIXEL_VALUE END_GROUP = LEVEL1_MIN_MAX_PIXEL_VALUE # group8 各波段的辐射定标数据 GROUP = LEVEL1_RADIOMETRIC_RESCALING END_GROUP = LEVEL1_RADIOMETRIC_RESCALING # group9 几个热红外波段的参数 GROUP = LEVEL1_THERMAL_CONSTANTS END_GROUP = LEVEL1_THERMAL_CONSTANTS # group10 投影信息 GROUP = LEVEL1_PROJECTION_PARAMETERS END_GROUP = LEVEL1_PROJECTION_PARAMETERS END_GROUP = LANDSAT_METADATA_FILE END
- 可以看出,USGS版的MTL是存在大量冗余的(应该是我还没有理解这样做的道理)。但不管怎么说,这说明了只要有USGS版的MTL,我们就可以重构出可以被ENVI识别的MTL结构。
GROUP = L1_METADATA_FILE GROUP = METADATA_FILE_INFO ORIGIN = "Image courtesy of the U.S. Geological Survey" REQUEST_ID = "0501508280281_00026" LANDSAT_SCENE_ID = "LC81330332015240LGN00" FILE_DATE = 2015-08-28T18:58:29Z STATION_ID = "LGN" PROCESSING_SOFTWARE_VERSION = "LPGS_2.5.1" END_GROUP = METADATA_FILE_INFO GROUP = PRODUCT_METADATA DATA_TYPE = "L1T" ELEVATION_SOURCE = "GLS2000" OUTPUT_FORMAT = "GEOTIFF" SPACECRAFT_ID = "LANDSAT_8" SENSOR_ID = "OLI_TIRS" WRS_PATH = 133 WRS_ROW = 33 NADIR_OFFNADIR = "NADIR" TARGET_WRS_PATH = 133 TARGET_WRS_ROW = 33 DATE_ACQUIRED = 2015-08-28 SCENE_CENTER_TIME = "03:55:31.0001247Z" CORNER_UL_LAT_PRODUCT = 39.96319 CORNER_UL_LON_PRODUCT = 99.51753 CORNER_UR_LAT_PRODUCT = 39.92019 CORNER_UR_LON_PRODUCT = 102.19890 CORNER_LL_LAT_PRODUCT = 37.85999 CORNER_LL_LON_PRODUCT = 99.50248 CORNER_LR_LAT_PRODUCT = 37.82009 CORNER_LR_LON_PRODUCT = 102.10604 CORNER_UL_PROJECTION_X_PRODUCT = 544200.000 CORNER_UL_PROJECTION_Y_PRODUCT = 4423800.000 CORNER_UR_PROJECTION_X_PRODUCT = 773400.000 CORNER_UR_PROJECTION_Y_PRODUCT = 4423800.000 CORNER_LL_PROJECTION_X_PRODUCT = 544200.000 CORNER_LL_PROJECTION_Y_PRODUCT = 4190400.000 CORNER_LR_PROJECTION_X_PRODUCT = 773400.000 CORNER_LR_PROJECTION_Y_PRODUCT = 4190400.000 PANCHROMATIC_LINES = 15561 PANCHROMATIC_SAMPLES = 15281 REFLECTIVE_LINES = 7781 REFLECTIVE_SAMPLES = 7641 THERMAL_LINES = 7781 THERMAL_SAMPLES = 7641 FILE_NAME_BAND_1 = "LC81330332015240LGN00_B1.TIF" FILE_NAME_BAND_2 = "LC81330332015240LGN00_B2.TIF" FILE_NAME_BAND_3 = "LC81330332015240LGN00_B3.TIF" FILE_NAME_BAND_4 = "LC81330332015240LGN00_B4.TIF" FILE_NAME_BAND_5 = "LC81330332015240LGN00_B5.TIF" FILE_NAME_BAND_6 = "LC81330332015240LGN00_B6.TIF" FILE_NAME_BAND_7 = "LC81330332015240LGN00_B7.TIF" FILE_NAME_BAND_8 = "LC81330332015240LGN00_B8.TIF" FILE_NAME_BAND_9 = "LC81330332015240LGN00_B9.TIF" FILE_NAME_BAND_10 = "LC81330332015240LGN00_B10.TIF" FILE_NAME_BAND_11 = "LC81330332015240LGN00_B11.TIF" FILE_NAME_BAND_QUALITY = "LC81330332015240LGN00_BQA.TIF" METADATA_FILE_NAME = "LC81330332015240LGN00_MTL.txt" BPF_NAME_OLI = "LO8BPF20150828034431_20150828042558.02" BPF_NAME_TIRS = "LT8BPF20150828034037_20150828042710.02" CPF_NAME = "L8CPF20150701_20150930.02" RLUT_FILE_NAME = "L8RLUT20150303_20431231v11.h5" END_GROUP = PRODUCT_METADATA GROUP = IMAGE_ATTRIBUTES CLOUD_COVER = 3.79 CLOUD_COVER_LAND = 3.79 IMAGE_QUALITY_OLI = 9 IMAGE_QUALITY_TIRS = 9 TIRS_SSM_POSITION_STATUS = "NOMINAL" ROLL_ANGLE = -0.001 SUN_AZIMUTH = 142.09548547 SUN_ELEVATION = 55.57261870 EARTH_SUN_DISTANCE = 1.0102265 GROUND_CONTROL_POINTS_VERSION = 2 GROUND_CONTROL_POINTS_MODEL = 406 GEOMETRIC_RMSE_MODEL = 7.313 GEOMETRIC_RMSE_MODEL_Y = 5.290 GEOMETRIC_RMSE_MODEL_X = 5.048 GROUND_CONTROL_POINTS_VERIFY = 104 GEOMETRIC_RMSE_VERIFY = 3.494 END_GROUP = IMAGE_ATTRIBUTES GROUP = MIN_MAX_RADIANCE RADIANCE_MAXIMUM_BAND_1 = 744.75226 RADIANCE_MINIMUM_BAND_1 = -61.50188 RADIANCE_MAXIMUM_BAND_2 = 762.63544 RADIANCE_MINIMUM_BAND_2 = -62.97868 RADIANCE_MAXIMUM_BAND_3 = 702.76202 RADIANCE_MINIMUM_BAND_3 = -58.03432 RADIANCE_MAXIMUM_BAND_4 = 592.60852 RADIANCE_MINIMUM_BAND_4 = -48.93781 RADIANCE_MAXIMUM_BAND_5 = 362.64688 RADIANCE_MINIMUM_BAND_5 = -29.94750 RADIANCE_MAXIMUM_BAND_6 = 90.18697 RADIANCE_MINIMUM_BAND_6 = -7.44767 RADIANCE_MAXIMUM_BAND_7 = 30.39784 RADIANCE_MINIMUM_BAND_7 = -2.51026 RADIANCE_MAXIMUM_BAND_8 = 670.66974 RADIANCE_MINIMUM_BAND_8 = -55.38413 RADIANCE_MAXIMUM_BAND_9 = 141.73062 RADIANCE_MINIMUM_BAND_9 = -11.70416 RADIANCE_MAXIMUM_BAND_10 = 22.00180 RADIANCE_MINIMUM_BAND_10 = 0.10033 RADIANCE_MAXIMUM_BAND_11 = 22.00180 RADIANCE_MINIMUM_BAND_11 = 0.10033 END_GROUP = MIN_MAX_RADIANCE GROUP = MIN_MAX_REFLECTANCE REFLECTANCE_MAXIMUM_BAND_1 = 1.210700 REFLECTANCE_MINIMUM_BAND_1 = -0.099980 REFLECTANCE_MAXIMUM_BAND_2 = 1.210700 REFLECTANCE_MINIMUM_BAND_2 = -0.099980 REFLECTANCE_MAXIMUM_BAND_3 = 1.210700 REFLECTANCE_MINIMUM_BAND_3 = -0.099980 REFLECTANCE_MAXIMUM_BAND_4 = 1.210700 REFLECTANCE_MINIMUM_BAND_4 = -0.099980 REFLECTANCE_MAXIMUM_BAND_5 = 1.210700 REFLECTANCE_MINIMUM_BAND_5 = -0.099980 REFLECTANCE_MAXIMUM_BAND_6 = 1.210700 REFLECTANCE_MINIMUM_BAND_6 = -0.099980 REFLECTANCE_MAXIMUM_BAND_7 = 1.210700 REFLECTANCE_MINIMUM_BAND_7 = -0.099980 REFLECTANCE_MAXIMUM_BAND_8 = 1.210700 REFLECTANCE_MINIMUM_BAND_8 = -0.099980 REFLECTANCE_MAXIMUM_BAND_9 = 1.210700 REFLECTANCE_MINIMUM_BAND_9 = -0.099980 END_GROUP = MIN_MAX_REFLECTANCE GROUP = MIN_MAX_PIXEL_VALUE QUANTIZE_CAL_MAX_BAND_1 = 65535 QUANTIZE_CAL_MIN_BAND_1 = 1 QUANTIZE_CAL_MAX_BAND_2 = 65535 QUANTIZE_CAL_MIN_BAND_2 = 1 QUANTIZE_CAL_MAX_BAND_3 = 65535 QUANTIZE_CAL_MIN_BAND_3 = 1 QUANTIZE_CAL_MAX_BAND_4 = 65535 QUANTIZE_CAL_MIN_BAND_4 = 1 QUANTIZE_CAL_MAX_BAND_5 = 65535 QUANTIZE_CAL_MIN_BAND_5 = 1 QUANTIZE_CAL_MAX_BAND_6 = 65535 QUANTIZE_CAL_MIN_BAND_6 = 1 QUANTIZE_CAL_MAX_BAND_7 = 65535 QUANTIZE_CAL_MIN_BAND_7 = 1 QUANTIZE_CAL_MAX_BAND_8 = 65535 QUANTIZE_CAL_MIN_BAND_8 = 1 QUANTIZE_CAL_MAX_BAND_9 = 65535 QUANTIZE_CAL_MIN_BAND_9 = 1 QUANTIZE_CAL_MAX_BAND_10 = 65535 QUANTIZE_CAL_MIN_BAND_10 = 1 QUANTIZE_CAL_MAX_BAND_11 = 65535 QUANTIZE_CAL_MIN_BAND_11 = 1 END_GROUP = MIN_MAX_PIXEL_VALUE GROUP = RADIOMETRIC_RESCALING RADIANCE_MULT_BAND_1 = 1.2303E-02 RADIANCE_MULT_BAND_2 = 1.2598E-02 RADIANCE_MULT_BAND_3 = 1.1609E-02 RADIANCE_MULT_BAND_4 = 9.7895E-03 RADIANCE_MULT_BAND_5 = 5.9907E-03 RADIANCE_MULT_BAND_6 = 1.4898E-03 RADIANCE_MULT_BAND_7 = 5.0215E-04 RADIANCE_MULT_BAND_8 = 1.1079E-02 RADIANCE_MULT_BAND_9 = 2.3413E-03 RADIANCE_MULT_BAND_10 = 3.3420E-04 RADIANCE_MULT_BAND_11 = 3.3420E-04 RADIANCE_ADD_BAND_1 = -61.51419 RADIANCE_ADD_BAND_2 = -62.99128 RADIANCE_ADD_BAND_3 = -58.04593 RADIANCE_ADD_BAND_4 = -48.94759 RADIANCE_ADD_BAND_5 = -29.95349 RADIANCE_ADD_BAND_6 = -7.44916 RADIANCE_ADD_BAND_7 = -2.51077 RADIANCE_ADD_BAND_8 = -55.39521 RADIANCE_ADD_BAND_9 = -11.70650 RADIANCE_ADD_BAND_10 = 0.10000 RADIANCE_ADD_BAND_11 = 0.10000 REFLECTANCE_MULT_BAND_1 = 2.0000E-05 REFLECTANCE_MULT_BAND_2 = 2.0000E-05 REFLECTANCE_MULT_BAND_3 = 2.0000E-05 REFLECTANCE_MULT_BAND_4 = 2.0000E-05 REFLECTANCE_MULT_BAND_5 = 2.0000E-05 REFLECTANCE_MULT_BAND_6 = 2.0000E-05 REFLECTANCE_MULT_BAND_7 = 2.0000E-05 REFLECTANCE_MULT_BAND_8 = 2.0000E-05 REFLECTANCE_MULT_BAND_9 = 2.0000E-05 REFLECTANCE_ADD_BAND_1 = -0.100000 REFLECTANCE_ADD_BAND_2 = -0.100000 REFLECTANCE_ADD_BAND_3 = -0.100000 REFLECTANCE_ADD_BAND_4 = -0.100000 REFLECTANCE_ADD_BAND_5 = -0.100000 REFLECTANCE_ADD_BAND_6 = -0.100000 REFLECTANCE_ADD_BAND_7 = -0.100000 REFLECTANCE_ADD_BAND_8 = -0.100000 REFLECTANCE_ADD_BAND_9 = -0.100000 END_GROUP = RADIOMETRIC_RESCALING GROUP = TIRS_THERMAL_CONSTANTS K1_CONSTANT_BAND_10 = 774.8853 K1_CONSTANT_BAND_11 = 480.8883 K2_CONSTANT_BAND_10 = 1321.0789 K2_CONSTANT_BAND_11 = 1201.1442 END_GROUP = TIRS_THERMAL_CONSTANTS GROUP = PROJECTION_PARAMETERS MAP_PROJECTION = "UTM" DATUM = "WGS84" ELLIPSOID = "WGS84" UTM_ZONE = 47 GRID_CELL_SIZE_PANCHROMATIC = 15.00 GRID_CELL_SIZE_REFLECTIVE = 30.00 GRID_CELL_SIZE_THERMAL = 30.00 ORIENTATION = "NORTH_UP" RESAMPLING_OPTION = "CUBIC_CONVOLUTION" END_GROUP = PROJECTION_PARAMETERS END_GROUP = L1_METADATA_FILE END重构思路
- USGS版的MTL中group5 ~ group10是可以照抄到可用版本的group4 ~ group9。
- 可用版本的group3内容可以从USGS版的group2和group4中找到。
- 可用版本的group2内容可以从USGS版的group3和group1/group4中找到。
- 可用版本的group1内容可以从USGS版的group4中找到。
- 经过试验,重构MTL这个方案可行,但我发现了另一种简单的解决方案,就是将第一行顶左的GROUP = LANDSAT_METADATA_FILE改为GROUP = L1_METADATA_FILE,倒数第二行的END_GROUP也一并修改。这么修改后ENVI就可以识别了,看来是ENVI定死了元数据的名称,而USGS没有同步这个规定。如果是二级数据应该也可以类似修改。
- 这篇博文分析了该如何重构MTL文件以达到可以被ENVI加载的目的,但实际手动操作还是太麻烦,本来计划写一个程序来实现,但后面又发现了简单的解决方法。
- 第一次遇到网上还没有明确解决方案的问题,就写了这篇博文记录一下思考过程,如果没有帮助还请见谅。