def tile(self, src, tile_bounds, tile_bounds_crs=None, geom_type='Polygon', split_multi_geoms=True, min_partial_perc=0.0, dest_fname_base='geoms', obj_id_col=None, output_ext='.geojson'):
    'Tile `src` into vector data tiles bounded by `tile_bounds`.\n\n        Arguments\n        ---------\n        src : `str` or :class:`geopandas.GeoDataFrame`\n            The source vector data to tile. Must either be a path to a GeoJSON\n            or a :class:`geopandas.GeoDataFrame`.\n        tile_bounds : list\n            A :class:`list` made up of ``[left, top, right, bottom] `` sublists\n            (this can be extracted from\n            :class:`solaris.tile.raster_tile.RasterTiler` after tiling imagery)\n        tile_bounds_crs : int, optional\n            The EPSG code or rasterio.crs.CRS object for the CRS that the tile\n            bounds are in. RasterTiler.tile returns the CRS of the raster tiles\n            and can be used here. If not provided, it\'s assumed that the CRS is the\n            same as in `src`. This argument must be provided if the bound\n            coordinates and `src` are not in the same CRS, otherwise tiling will\n            not occur correctly.\n        geom_type : str, optional (default: "Polygon")\n            The type of geometries contained within `src`. Defaults to\n            ``"Polygon"``, can also be ``"LineString"``.\n        split_multi_geoms : bool, optional (default: True)\n            Should multi-polygons or multi-linestrings generated by clipping\n            a geometry into discontinuous pieces be separated? Defaults to yes\n            (``True``).\n        min_partial_perc : float, optional (default: 0.0)\n            The minimum percentage of a :class:`shapely.geometry.Polygon` \'s\n            area or :class:`shapely.geometry.LineString` \'s length that must\n            be retained within a tile\'s bounds to be included in the output.\n            Defaults to ``0.0``, meaning that the contained portion of a\n            clipped geometry will be included, no matter how small.\n        dest_fname_base : str, optional (default: \'geoms\')\n            The base filename to use when creating outputs. The lower left\n            corner coordinates of the tile\'s bounding box will be appended\n            when saving.\n        obj_id_col : str, optional (default: None)\n            If ``split_multi_geoms=True``, the name of a column that specifies\n            a unique identifier for each geometry (e.g. the ``"BuildingId"``\n            column in many SpaceNet datasets.) See\n            :func:`solaris.utils.geo.split_multi_geometries` for more.\n        output_ext : str, optional, (default: geojson)\n            Extension of output files, can be \'geojson\' or \'json\'.\n        '
    tile_gen = self.tile_generator(src, tile_bounds, tile_bounds_crs, geom_type, split_multi_geoms, min_partial_perc, obj_id_col=obj_id_col)
    self.tile_paths = []
    for (tile_gdf, tb) in tqdm(tile_gen):
        if (self.proj_unit not in ['meter', 'metre']):
            dest_path = os.path.join(self.dest_dir, '{}_{}_{}{}'.format(dest_fname_base, np.round(tb[0], 3), np.round(tb[3], 3), output_ext))
        else:
            dest_path = os.path.join(self.dest_dir, '{}_{}_{}{}'.format(dest_fname_base, int(tb[0]), int(tb[3]), output_ext))
        self.tile_paths.append(dest_path)
        if (len(tile_gdf) > 0):
            tile_gdf.to_file(dest_path, driver='GeoJSON')
        else:
            save_empty_geojson(dest_path, self.dest_crs)
Tile `src` into vector data tiles bounded by `tile_bounds`.

Arguments
---------
src : `str` or :class:`geopandas.GeoDataFrame`
    The source vector data to tile. Must either be a path to a GeoJSON
    or a :class:`geopandas.GeoDataFrame`.
tile_bounds : list
    A :class:`list` made up of ``[left, top, right, bottom] `` sublists
    (this can be extracted from
    :class:`solaris.tile.raster_tile.RasterTiler` after tiling imagery)
tile_bounds_crs : int, optional
    The EPSG code or rasterio.crs.CRS object for the CRS that the tile
    bounds are in. RasterTiler.tile returns the CRS of the raster tiles
    and can be used here. If not provided, it's assumed that the CRS is the
    same as in `src`. This argument must be provided if the bound
    coordinates and `src` are not in the same CRS, otherwise tiling will
    not occur correctly.
geom_type : str, optional (default: "Polygon")
    The type of geometries contained within `src`. Defaults to
    ``"Polygon"``, can also be ``"LineString"``.
split_multi_geoms : bool, optional (default: True)
    Should multi-polygons or multi-linestrings generated by clipping
    a geometry into discontinuous pieces be separated? Defaults to yes
    (``True``).
min_partial_perc : float, optional (default: 0.0)
    The minimum percentage of a :class:`shapely.geometry.Polygon` 's
    area or :class:`shapely.geometry.LineString` 's length that must
    be retained within a tile's bounds to be included in the output.
    Defaults to ``0.0``, meaning that the contained portion of a
    clipped geometry will be included, no matter how small.
dest_fname_base : str, optional (default: 'geoms')
    The base filename to use when creating outputs. The lower left
    corner coordinates of the tile's bounding box will be appended
    when saving.
obj_id_col : str, optional (default: None)
    If ``split_multi_geoms=True``, the name of a column that specifies
    a unique identifier for each geometry (e.g. the ``"BuildingId"``
    column in many SpaceNet datasets.) See
    :func:`solaris.utils.geo.split_multi_geometries` for more.
output_ext : str, optional, (default: geojson)
    Extension of output files, can be 'geojson' or 'json'.
def tile(self, src, tile_bounds, tile_bounds_crs=None, geom_type='Polygon', split_multi_geoms=True, min_partial_perc=0.0, dest_fname_base='geoms', obj_id_col=None, output_ext='.geojson'):
    'Tile `src` into vector data tiles bounded by `tile_bounds`.\n\n        Arguments\n        ---------\n        src : `str` or :class:`geopandas.GeoDataFrame`\n            The source vector data to tile. Must either be a path to a GeoJSON\n            or a :class:`geopandas.GeoDataFrame`.\n        tile_bounds : list\n            A :class:`list` made up of ``[left, top, right, bottom] `` sublists\n            (this can be extracted from\n            :class:`solaris.tile.raster_tile.RasterTiler` after tiling imagery)\n        tile_bounds_crs : int, optional\n            The EPSG code or rasterio.crs.CRS object for the CRS that the tile\n            bounds are in. RasterTiler.tile returns the CRS of the raster tiles\n            and can be used here. If not provided, it\'s assumed that the CRS is the\n            same as in `src`. This argument must be provided if the bound\n            coordinates and `src` are not in the same CRS, otherwise tiling will\n            not occur correctly.\n        geom_type : str, optional (default: "Polygon")\n            The type of geometries contained within `src`. Defaults to\n            ``"Polygon"``, can also be ``"LineString"``.\n        split_multi_geoms : bool, optional (default: True)\n            Should multi-polygons or multi-linestrings generated by clipping\n            a geometry into discontinuous pieces be separated? Defaults to yes\n            (``True``).\n        min_partial_perc : float, optional (default: 0.0)\n            The minimum percentage of a :class:`shapely.geometry.Polygon` \'s\n            area or :class:`shapely.geometry.LineString` \'s length that must\n            be retained within a tile\'s bounds to be included in the output.\n            Defaults to ``0.0``, meaning that the contained portion of a\n            clipped geometry will be included, no matter how small.\n        dest_fname_base : str, optional (default: \'geoms\')\n            The base filename to use when creating outputs. The lower left\n            corner coordinates of the tile\'s bounding box will be appended\n            when saving.\n        obj_id_col : str, optional (default: None)\n            If ``split_multi_geoms=True``, the name of a column that specifies\n            a unique identifier for each geometry (e.g. the ``"BuildingId"``\n            column in many SpaceNet datasets.) See\n            :func:`solaris.utils.geo.split_multi_geometries` for more.\n        output_ext : str, optional, (default: geojson)\n            Extension of output files, can be \'geojson\' or \'json\'.\n        '
    tile_gen = self.tile_generator(src, tile_bounds, tile_bounds_crs, geom_type, split_multi_geoms, min_partial_perc, obj_id_col=obj_id_col)
    self.tile_paths = []
    for (tile_gdf, tb) in tqdm(tile_gen):
        if (self.proj_unit not in ['meter', 'metre']):
            dest_path = os.path.join(self.dest_dir, '{}_{}_{}{}'.format(dest_fname_base, np.round(tb[0], 3), np.round(tb[3], 3), output_ext))
        else:
            dest_path = os.path.join(self.dest_dir, '{}_{}_{}{}'.format(dest_fname_base, int(tb[0]), int(tb[3]), output_ext))
        self.tile_paths.append(dest_path)
        if (len(tile_gdf) > 0):
            tile_gdf.to_file(dest_path, driver='GeoJSON')
        else:
            save_empty_geojson(dest_path, self.dest_crs)