docs: def _handle_geom(self, value):
          """ Geometry processing (in place), depending on options """
          if value is None:
              geometry = None
          elif isinstance(value, dict) and 'type' in value:
              geometry = value
          else:
              if isinstance(value, GEOSGeometry):
                  geometry = value
              else:
                  try:
                      # this will handle string representations (e.g. ewkt, bwkt)
                      geometry = GEOSGeometry(value)
                  except ValueError:
                      # if the geometry couldn't be parsed.
                      # we can't generate valid geojson
                      error_msg = 'The field ["%s", "%s"] could not be parsed as a valid geometry' % (
                          self.geometry_field, value
                      )
                      raise SerializationError(error_msg)
  
              # Optional force 2D
              if self.options.get('force2d'):
                  wkb_w = WKBWriter()
                  wkb_w.outdim = 2
                  geometry = GEOSGeometry(wkb_w.write(geometry), srid=geometry.srid)
              # Optional geometry simplification
              simplify = self.options.get('simplify')
              if simplify is not None:
                  geometry = geometry.simplify(tolerance=simplify, preserve_topology=True)
              # Optional geometry reprojection
              if geometry.srid and geometry.srid != self.srid:
                  geometry.transform(self.srid)
              # Optional bbox
              if self.options.get('bbox_auto'):
                  self._current['bbox'] = geometry.extent
  
          self._current['geometry'] = geometry