The complete structure of the metadata is provided in the product specification.
The metadata cube is a three-dimensional grid designed to simplify the calculation of parameters within a geographic information system (GIS) environment. These grids are defined for all NISAR level 1 (L1) and level 2 (L2) products. Users are advised to use three-dimensional interpolation routines (for Python, use the RegularGridInterpolator function of the open-source software scipy) to calculate values for several parameters for useful initial data analysis within a GIS environment. The geolocation error using the grids is estimated to be 1.5 cm. Further analysis is expected to lead to a more robust error estimate.
The example below shows the geolocation grid defined for an L1 RIFG product. Using slant range, zero Doppler time, and height above ellipsoid as the grid axes serve as input to calculate the values of all other parameters.
{
"granule": "NISAR_L1_PR_RIFG_001_030_A_019_002_2000_SH_20081012T060911_20081012T060925_20081127T061000_20081127T061014_D00404_N_F_J_001",
"dimension": {
"geolocationCubeHeight": 20,
"geolocationCubeLength": 226,
"geolocationCubeWidth": 68,
"twoLayersCubeHeight": 2
},
"science": {
"LSAR": {
"RIFG": {
"metadata": {
"geolocationGrid": {
"coordinateY": {
"type": "cube",
"dimension": "(geolocationCubeHeight,geolocationCubeLength,geolocationCubeWidth)",
"data_type": "float64",
"shape": "(20,226,68)"
},
"coordinateX": {
"type": "cube",
"dimension": "(geolocationCubeHeight,geolocationCubeLength,geolocationCubeWidth)",
"data_type": "float64",
"shape": "(20,226,68)"
},
"incidenceAngle": {
"type": "cube",
"dimension": "(geolocationCubeHeight,geolocationCubeLength,geolocationCubeWidth)",
"data_type": "float64",
"shape": "(20,226,68)"
},
"losUnitVectorX": {
"type": "cube",
"dimension": "(geolocationCubeHeight,geolocationCubeLength,geolocationCubeWidth)",
"data_type": "float32",
"shape": "(20,226,68)"
},
"losUnitVectorY": {
"type": "cube",
"dimension": "(geolocationCubeHeight,geolocationCubeLength,geolocationCubeWidth)",
"data_type": "float32",
"shape": "(20,226,68)"
},
"alongTrackUnitVectorX": {
"type": "cube",
"dimension": "(geolocationCubeHeight,geolocationCubeLength,geolocationCubeWidth)",
"data_type": "float32",
"shape": "(20,226,68)"
},
"alongTrackUnitVectorY": {
"type": "cube",
"dimension": "(geolocationCubeHeight,geolocationCubeLength,geolocationCubeWidth)",
"data_type": "float32",
"shape": "(20,226,68)"
},
"elevationAngle": {
"type": "cube",
"dimension": "(geolocationCubeHeight,geolocationCubeLength,geolocationCubeWidth)",
"data_type": "float32",
"shape": "(20,226,68)"
},
"parallelBaseline": {
"type": "cube",
"dimension": "(twoLayersCubeHeight,geolocationCubeLength,geolocationCubeWidth)",
"data_type": "float32",
"shape": "(2,226,68)"
},
"perpendicularBaseline": {
"type": "cube",
"dimension": "(twoLayersCubeHeight,geolocationCubeLength,geolocationCubeWidth)",
"data_type": "float32",
"shape": "(2,226,68)"
},
"slantRange": {
"type": "cube dimension",
"dimension": "(geolocationCubeWidth)",
"data_type": "float64",
"shape": "(68)"
},
"zeroDopplerTime": {
"type": "cube dimension",
"dimension": "(geolocationCubeLength)",
"data_type": "float64",
"shape": "(226)"
},
"groundTrackVelocity": {
"type": "cube",
"dimension": "(geolocationCubeHeight,geolocationCubeLength,geolocationCubeWidth)",
"data_type": "float64",
"shape": "(20,226,68)"
},
"heightAboveEllipsoid": {
"type": "cube dimension",
"dimension": "(geolocationCubeHeight)",
"data_type": "float64",
"shape": "(20)"
}
}
}
}
}
}
}
The L2 GCOV example below takes the x coordinates, y coordinates, and heights above the ellipsoid, spaced 500 m between grid points, as grid axes to calculate the values of all other parameters.
{
"granule": "NISAR_L2_PR_GCOV_008_029_A_010_0005_NASV_A_20251031T044409_20251031T044425_P05000_N_P_J_001",
"dimension": {
"radarCubeHeight": 21,
"radarCubeLength": 686,
"radarCubeWidth": 699,
},
"science": {
"LSAR": {
"GCOV": {
"metadata": {
"radarGrid": {
"slantRange": {
"type": "cube",
"dimension": "(radarCubeHeight,radarCubeLength,radarCubeWidth)",
"data_type": "float64",
"shape": "(21,686,699)"
},
"zeroDopplerAzimuthTime": {
"type": "cube",
"dimension": "(radarCubeHeight,radarCubeLength,radarCubeWidth)",
"data_type": "float64",
"shape": "(21,686,699)"
},
"incidenceAngle": {
"type": "cube",
"dimension": "(radarCubeHeight,radarCubeLength,radarCubeWidth)",
"data_type": "float32",
"shape": "(21,686,699)"
},
"losUnitVectorX": {
"type": "cube",
"dimension": "(radarCubeHeight,radarCubeLength,radarCubeWidth)",
"data_type": "float32",
"shape": "(21,686,699)"
},
"losUnitVectorY": {
"type": "cube",
"dimension": "(radarCubeHeight,radarCubeLength,radarCubeWidth)",
"data_type": "float32",
"shape": "(21,686,699)"
},
"alongTrackUnitVectorX": {
"type": "cube",
"dimension": "(radarCubeHeight,radarCubeLength,radarCubeWidth)",
"data_type": "float32",
"shape": "(21,686,699)"
},
"alongTrackUnitVectorY": {
"type": "cube",
"dimension": "(radarCubeHeight,radarCubeLength,radarCubeWidth)",
"data_type": "float32",
"shape": "(21,686,699)"
},
"elevationAngle": {
"type": "cube",
"dimension": "(radarCubeHeight,radarCubeLength,radarCubeWidth)",
"data_type": "float32",
"shape": "(21,686,699)"
},
"groundTrackVelocity": {
"type": "cube",
"dimension": "(radarCubeHeight,radarCubeLength,radarCubeWidth)",
"data_type": "float64",
"shape": "(21,686,699)"
},
"xCoordinates": {
"type": "cube",
"dimension": "(radarCubeWidth)",
"data_type": "float64",
"shape": "(699)"
},
"yCoordinates": {
"type": "cube",
"dimension": "(radarCubeLength)",
"data_type": "float64",
"shape": "(686)"
},
"heightAboveEllipsoid": {
"type": "cube",
"dimension": "(radarCubeHeight)",
"data_type": "float64",
"shape": "(21)"
}
}
}
}
}
}
}
The table below summarizes which parameters are available for the users’ analysis in the various NISAR L1 and L2 products. The parameters highlighted in gray indicate the input parameters for calculating the values of the remaining parameters.

Figure 4:NISAR cube metadata