docs: def _write_comid_lat_lon_z(self):
          """Add latitude, longitude, and z values for each netCDF feature
  
          Remarks:
              Lookup table is a CSV file with COMID, Lat, Lon,
              and Elev_m columns.
              Columns must be in that order and these must be the first
              four columns.
          """
          # only add if user adds
          if self.comid_lat_lon_z_file and \
                  os.path.exists(self.comid_lat_lon_z_file):
              # get list of COMIDS
              lookup_table = csv_to_list(self.comid_lat_lon_z_file)
              lookup_comids = np.array([int(float(row[0])) for row in
                                        lookup_table[1:]])
  
              # Get relevant arrays while we update them
              nc_comids = self.cf_nc.variables[self.output_id_dim_name][:]
              lats = self.cf_nc.variables['lat'][:]
              lons = self.cf_nc.variables['lon'][:]
              zs = self.cf_nc.variables['z'][:]
  
              min_lat = None
              max_lat = None
              min_lon = None
              max_lon = None
              z_min = None
              z_max = None
  
              # Process each row in the lookup table
              for nc_index, nc_comid in enumerate(nc_comids):
                  try:
                      lookup_index = \
                          np.where(lookup_comids == nc_comid)[0][0] + 1
                  except IndexError:
                      log('rivid %s missing in comid_lat_lon_z file' % nc_comid,
                          'ERROR')
  
                  lat = float(lookup_table[lookup_index][1])
                  lats[nc_index] = lat
                  if min_lat is None or lat < min_lat:
                      min_lat = lat
                  if max_lat is None or lat > max_lat:
                      max_lat = lat
  
                  lon = float(lookup_table[lookup_index][2])
                  lons[nc_index] = lon
                  if min_lon is None or lon < min_lon:
                      min_lon = lon
                  if max_lon is None or lon > max_lon:
                      max_lon = lon
  
                  z = float(lookup_table[lookup_index][3])
                  zs[nc_index] = z
                  if z_min is None or z < z_min:
                      z_min = z
                  if z_max is None or z > z_max:
                      z_max = z
  
              # Overwrite netCDF variable values
              self.cf_nc.variables['lat'][:] = lats
              self.cf_nc.variables['lon'][:] = lons
              self.cf_nc.variables['z'][:] = zs
  
              # Update metadata
              if min_lat is not None:
                  self.cf_nc.geospatial_lat_min = min_lat
              if max_lat is not None:
                  self.cf_nc.geospatial_lat_max = max_lat
              if min_lon is not None:
                  self.cf_nc.geospatial_lon_min = min_lon
              if max_lon is not None:
                  self.cf_nc.geospatial_lon_max = max_lon
              if z_min is not None:
                  self.cf_nc.geospatial_vertical_min = z_min
              if z_max is not None:
                  self.cf_nc.geospatial_vertical_max = z_max
          else:
              log('No comid_lat_lon_z file. Not adding values ...', 'INFO')