Opened 16 years ago

Closed 13 years ago

#2079 closed defect (fixed)

HDF4 driver can't read geolocation fields if the dimension map does not exist

Reported by: dron Owned by: dron
Priority: normal Milestone:
Component: GDAL_Raster Version: unspecified
Severity: normal Keywords: hdf
Cc: Mateusz Łoskot

Description

Ivan Shmakov reported the problem with HDF-EOS file

http://theory.asu.ru/~ivan/modis/MOD07_L2.hdf that does not contain dimension map. It is not possible to read and properly assign geolocation fields without information on dimension mappings.

Here the full content of "SwathStructure" metadata group (note the empty "DimensionMap" object):

GROUP=SwathStructure
	GROUP=SWATH_1
		SwathName="mod07"
		GROUP=Dimension
			OBJECT=Dimension_1
				DimensionName="Cell_Across_Swath"
				Size=270
			END_OBJECT=Dimension_1
			OBJECT=Dimension_2
				DimensionName="Cell_Along_Swath"
				Size=406
			END_OBJECT=Dimension_2
			OBJECT=Dimension_3
				DimensionName="Band_Number"
				Size=12
			END_OBJECT=Dimension_3
			OBJECT=Dimension_4
				DimensionName="Pressure_Level"
				Size=20
			END_OBJECT=Dimension_4
			OBJECT=Dimension_5
				DimensionName="Output_Parameter"
				Size=10
			END_OBJECT=Dimension_5
			OBJECT=Dimension_6
				DimensionName="Water_Vapor_QA_Bytes"
				Size=5
			END_OBJECT=Dimension_6
		END_GROUP=Dimension
		GROUP=DimensionMap
		END_GROUP=DimensionMap
		GROUP=IndexDimensionMap
		END_GROUP=IndexDimensionMap
		GROUP=GeoField
			OBJECT=GeoField_1
				GeoFieldName="Latitude"
				DataType=DFNT_FLOAT32
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=GeoField_1
			OBJECT=GeoField_2
				GeoFieldName="Longitude"
				DataType=DFNT_FLOAT32
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=GeoField_2
		END_GROUP=GeoField
		GROUP=DataField
			OBJECT=DataField_1
				DataFieldName="Band_Number"
				DataType=DFNT_INT32
				DimList=("Band_Number")
			END_OBJECT=DataField_1
			OBJECT=DataField_2
				DataFieldName="Pressure_Level"
				DataType=DFNT_FLOAT32
				DimList=("Pressure_Level")
			END_OBJECT=DataField_2
			OBJECT=DataField_3
				DataFieldName="Scan_Start_Time"
				DataType=DFNT_FLOAT64
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_3
			OBJECT=DataField_4
				DataFieldName="Solar_Zenith"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_4
			OBJECT=DataField_5
				DataFieldName="Solar_Azimuth"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_5
			OBJECT=DataField_6
				DataFieldName="Sensor_Zenith"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_6
			OBJECT=DataField_7
				DataFieldName="Sensor_Azimuth"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_7
			OBJECT=DataField_8
				DataFieldName="Brightness_Temperature"
				DataType=DFNT_INT16
				DimList=("Band_Number","Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_8
			OBJECT=DataField_9
				DataFieldName="Cloud_Mask"
				DataType=DFNT_INT8
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_9
			OBJECT=DataField_10
				DataFieldName="Surface_Temperature"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_10
			OBJECT=DataField_11
				DataFieldName="Surface_Pressure"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_11
			OBJECT=DataField_12
				DataFieldName="Surface_Elevation"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_12
			OBJECT=DataField_13
				DataFieldName="Processing_Flag"
				DataType=DFNT_INT8
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_13
			OBJECT=DataField_14
				DataFieldName="Tropopause_Height"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_14
			OBJECT=DataField_15
				DataFieldName="Guess_Temperature_Profile"
				DataType=DFNT_INT16
				DimList=("Pressure_Level","Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_15
			OBJECT=DataField_16
				DataFieldName="Guess_Moisture_Profile"
				DataType=DFNT_INT16
				DimList=("Pressure_Level","Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_16
			OBJECT=DataField_17
				DataFieldName="Retrieved_Temperature_Profile"
				DataType=DFNT_INT16
				DimList=("Pressure_Level","Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_17
			OBJECT=DataField_18
				DataFieldName="Retrieved_Moisture_Profile"
				DataType=DFNT_INT16
				DimList=("Pressure_Level","Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_18
			OBJECT=DataField_19
				DataFieldName="Retrieved_Height_Profile"
				DataType=DFNT_INT16
				DimList=("Pressure_Level","Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_19
			OBJECT=DataField_20
				DataFieldName="Total_Ozone"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_20
			OBJECT=DataField_21
				DataFieldName="Total_Totals"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_21
			OBJECT=DataField_22
				DataFieldName="Lifted_Index"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_22
			OBJECT=DataField_23
				DataFieldName="K_Index"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_23
			OBJECT=DataField_24
				DataFieldName="Water_Vapor"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_24
			OBJECT=DataField_25
				DataFieldName="Water_Vapor_Direct"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_25
			OBJECT=DataField_26
				DataFieldName="Water_Vapor_Low"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_26
			OBJECT=DataField_27
				DataFieldName="Water_Vapor_High"
				DataType=DFNT_INT16
				DimList=("Cell_Along_Swath","Cell_Across_Swath")
			END_OBJECT=DataField_27
			OBJECT=DataField_28
				DataFieldName="Quality_Assurance"
				DataType=DFNT_INT8
				DimList=("Cell_Along_Swath","Cell_Across_Swath","Output_Parameter")
			END_OBJECT=DataField_28
			OBJECT=DataField_29
				DataFieldName="Quality_Assurance_Infrared"
				DataType=DFNT_INT8
				DimList=("Cell_Along_Swath","Cell_Across_Swath","Water_Vapor_QA_Bytes")
			END_OBJECT=DataField_29
		END_GROUP=DataField
		GROUP=MergedFields
		END_GROUP=MergedFields
	END_GROUP=SWATH_1
END_GROUP=SwathStructure

Change History (4)

comment:1 by Mateusz Łoskot, 16 years ago

Cc: Mateusz Łoskot added
Keywords: hdf added

comment:2 by dron, 15 years ago

Milestone: 1.6.0
Status: newassigned

comment:3 by vesnikos, 13 years ago

has this issue being resolved? its been 2 years with no update

in reply to:  3 comment:4 by dron, 13 years ago

Resolution: fixed
Status: assignedclosed

The HDF-EOS documentation states: "In cases where a data object and a geolocation object share the same dimension, the relationship can be assumed to be a one-to-one mapping, and there is no need to explicitly define it with a DimensionMap entry."

The problem should be fixed that way with r21121 in trunk.

Best regards, Andrey

Note: See TracTickets for help on using tickets.