code: def cat(
      ctx,
      files,
      precision,
      indent,
      compact,
      ignore_errors,
      dst_crs,
      use_rs,
      bbox,
      where,
      cut_at_antimeridian,
      layer,
      open_options,
  ):
      """
      Concatenate and print the features of input datasets as a sequence of
      GeoJSON features.
  
      When working with a multi-layer dataset the first layer is used by default.
      Use the '--layer' option to select a different layer.
  
      """
      dump_kwds = {"sort_keys": True}
      if indent:
          dump_kwds["indent"] = indent
      if compact:
          dump_kwds["separators"] = (",", ":")
  
      # Validate file idexes provided in --layer option
      # (can't pass the files to option callback)
      if layer:
          options.validate_multilayer_file_index(files, layer)
  
      # first layer is the default
      for i in range(1, len(files) + 1):
          if str(i) not in layer.keys():
              layer[str(i)] = [0]
  
      try:
          if bbox:
              try:
                  bbox = tuple(map(float, bbox.split(",")))
              except ValueError:
                  bbox = json.loads(bbox)
  
          for i, path in enumerate(files, 1):
              for lyr in layer[str(i)]:
                  with fiona.open(
                      path, layer=lyr, **open_options
                  ) as src:
                      for i, feat in src.items(bbox=bbox, where=where):
                          geom = feat.geometry
  
                          if dst_crs:
                              geom = transform_geom(
                                  src.crs,
                                  dst_crs,
                                  geom,
                                  antimeridian_cutting=cut_at_antimeridian,
                              )
  
                          if precision >= 0:
                              geom = recursive_round(geom, precision)
  
                          feat = Feature(
                              id=feat.id,
                              properties=feat.properties,
                              geometry=geom,
                              bbox=fiona.bounds(geom),
                          )
  
                          if use_rs:
                              click.echo("\x1e", nl=False)
  
                          click.echo(
                              json.dumps(
                                  feat, cls=ObjectEncoder, **dump_kwds
                              )
                          )
  
      except AttributeFilterError as e:
          raise click.BadParameter(
              "'where' clause is invalid: " + str(e)
          )
  
file_path: Fiona/fiona/fio/cat.py
imports: import json
  import warnings
  import click
  import cligj
  import fiona
  from fiona.transform import transform_geom
  from fiona.model import Feature, ObjectEncoder
  from fiona.fio import options, with_context_env
  from fiona.fio.helpers import recursive_round
  from fiona.errors import AttributeFilterError
label_desc: Use image node_id 1 for calling a global function with example usage: cat(ctx, files, precision, indent, compact, ignore_errors, dst_crs, use_rs, bbox, where, cut_at_antimeridian, layer, open_options) without return types