class_docstr: Base reader for ABI L1B  L2+ NetCDF4 files.
class_docstr_tok: ["Base","reader","for","ABI","L1B","L2+","NetCDF4","files","."]
docstr: Get the area definition of the data at hand.
  
  Note this method takes special care to round and cast numbers to new
  data types so that the area definitions for different resolutions
  (different bands) should be equal. Without the special rounding in
  `__getitem__` and this method the area extents can be 0 to 1.0 meters
  off depending on how the calculations are done.
docstr_tok: ["Get","the","area","definition","of","the","data","at","hand",".","Note","this","method","takes","special","care","to","round","and","cast","numbers","to","new","data","types","so","that","the","area","definitions","for","different","resolutions","(","different","bands",")","should","be","equal",".","Without","the","special","rounding","in","`","__getitem__","`","and","this","method","the","area","extents","can","be","0","to","1.0","meters","off","depending","on","how","the","calculations","are","done","."]
code: def _get_areadef_fixedgrid(self, key):
      """Get the area definition of the data at hand.
  
      Note this method takes special care to round and cast numbers to new
      data types so that the area definitions for different resolutions
      (different bands) should be equal. Without the special rounding in
      `__getitem__` and this method the area extents can be 0 to 1.0 meters
      off depending on how the calculations are done.
  
      """
      projection = self.nc["goes_imager_projection"]
      a = projection.attrs["semi_major_axis"]
      b = projection.attrs["semi_minor_axis"]
      h = projection.attrs["perspective_point_height"]
  
      lon_0 = projection.attrs["longitude_of_projection_origin"]
      sweep_axis = projection.attrs["sweep_angle_axis"][0]
  
      # compute x and y extents in m
      h = np.float64(h)
      x = self["x"]
      y = self["y"]
      x_l = x[0].values
      x_r = x[-1].values
      y_l = y[-1].values
      y_u = y[0].values
      x_half = (x_r - x_l) / (self.ncols - 1) / 2.0
      y_half = (y_u - y_l) / (self.nlines - 1) / 2.0
      area_extent = (
          x_l - x_half,
          y_l - y_half,
          x_r + x_half,
          y_u + y_half,
      )
      area_extent = tuple(np.round(h * val, 6) for val in area_extent)
  
      proj_dict = {
          "proj": "geos",
          "lon_0": float(lon_0),
          "a": float(a),
          "b": float(b),
          "h": h,
          "units": "m",
          "sweep": sweep_axis,
      }
  
      fg_area_def = geometry.AreaDefinition(
          self.nc.attrs.get("orbital_slot", "abi_geos"),
          self.nc.attrs.get("spatial_resolution", "ABI file area"),
          "abi_fixed_grid",
          proj_dict,
          self.ncols,
          self.nlines,
          np.asarray(area_extent),
      )
  
      return fg_area_def
  
imports: import logging
  import math
  from contextlib import suppress
  from datetime import datetime
  import dask
  import numpy
  import xarray
  from pyresample import geometry
  from satpy._compat import cached_property
  from satpy.readers import open_file_or_filename
  from satpy.readers.file_handlers import BaseFileHandler
  from satpy.utils import get_dask_chunk_size_in_bytes
label_desc: Use image node_id 12 for calling the NC_ABI_BASE obj's underlying member method code with example usage: obj._get_areadef_fixedgrid(key) and returns: fg_area_def