class_docstr: Provides an interface for accessing the contents of a shapefile
  with the fiona library, which has a much faster reader than PyShp. See
  `fiona.open
  <https://fiona.readthedocs.io/en/latest/fiona.html#fiona.open>`_
  for additional information on supported kwargs.
  
  The primary methods used on a FionaReader instance are
  :meth:`~cartopy.io.shapereader.FionaReader.records` and
  :meth:`~cartopy.io.shapereader.FionaReader.geometries`.
class_docstr_tok: ["Provides","an","interface","for","accessing","the","contents","of","a","shapefile","with","the","fiona","library",",","which","has","a","much","faster","reader","than","PyShp",".","See","`","fiona.open","<","https",":","\/\/fiona.readthedocs.io\/en\/latest\/fiona.html","#","fiona.open",">","`","_","for","additional","information","on","supported","kwargs",".","The","primary","methods","used","on","a","FionaReader","instance","are",":","meth",":","`","~cartopy.io.shapereader.FionaReader.records","`","and",":","meth",":","`","~cartopy.io.shapereader.FionaReader.geometries","`","."]
code: def __init__(self, filename, bbox=None, **kwargs):
      self._data = []
  
      with fiona.open(filename, **kwargs) as f:
          if bbox is not None:
              assert len(bbox) == 4
              features = f.filter(bbox=bbox)
          else:
              features = f
  
          # Handle feature collections
          if hasattr(features, "__geo_interface__"):
              fs = features.__geo_interface__
          else:
              fs = features
  
          if (
              isinstance(fs, dict)
              and fs.get("type") == "FeatureCollection"
          ):
              features_lst = fs["features"]
          else:
              features_lst = features
  
          for feature in features_lst:
              if hasattr(f, "__geo_interface__"):
                  feature = feature.__geo_interface__
              else:
                  feature = feature
  
              d = {
                  "geometry": sgeom.shape(feature["geometry"])
                  if feature["geometry"]
                  else None
              }
              d.update(feature["properties"])
              self._data.append(d)
  
imports: import io
  import itertools
  from pathlib import Path
  from urllib.error import HTTPError
  import shapefile
  import shapely.geometry
  from cartopy import config
  from cartopy.io import Downloader
label_desc: Use image node_id 1 to create a new FionaReader object  with example: obj = FionaReader(filename, bbox)