docs: def save_gdf_shapefile(gdf, filename=None, folder=None):
      """
      Save a GeoDataFrame of place shapes or footprints as an ESRI
      shapefile.
  
      Parameters
      ----------
      gdf : GeoDataFrame
          the gdf to be saved
      filename : string
          what to call the shapefile (file extensions are added automatically)
      folder : string
          where to save the shapefile, if none, then default folder
  
      Returns
      -------
      None
      """
  
      if folder is None:
          folder = settings.data_folder
  
      if filename is None:
          filename = make_shp_filename(gdf.gdf_name)
  
      # give the save folder a filename subfolder to make the full path to the
      # files
      folder_path = os.path.join(folder, filename)
  
      # make everything but geometry column a string
      for col in [c for c in gdf.columns if not c == 'geometry']:
          gdf[col] = gdf[col].fillna('').map(make_str)
  
      # if the save folder does not already exist, create it with a filename
      # subfolder
      if not os.path.exists(folder_path):
          os.makedirs(folder_path)
      gdf.to_file(folder_path)
  
      if not hasattr(gdf, 'gdf_name'):
          gdf.gdf_name = 'unnamed'
      log('Saved the GeoDataFrame "{}" as shapefile "{}"'.format(gdf.gdf_name, folder_path))