<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def to_geoviews(self, gvtype=None, datasets=None, kdims=None, vdims=None, dynamic=False):
 """Convert satpy Scene to geoviews. Args: gvtype (gv plot type):
 One of gv.Image, gv.LineContours, gv.FilledContours, gv.Points Default to :class:`geoviews.Image`. See Geoviews documentation for details. datasets (list):
 Limit included products to these datasets kdims (list of str):
 Key dimensions. See geoviews documentation for more information. vdims : list of str, optional Value dimensions. See geoviews documentation for more information. If not given defaults to first data variable dynamic : boolean, optional, default False Returns: geoviews object Todo: * better handling of projection information in datasets which are to be passed to geoviews """

        try:
            import geoviews as gv
            from cartopy import crs  # noqa
        except ImportError:
            import warnings
            warnings.warn("This method needs the geoviews package installed.")

        if gvtype is None:
            gvtype = gv.Image

        ds = self.to_xarray_dataset(datasets)

        if vdims is None:
            # by default select first data variable as display variable
            vdims = ds.data_vars[list(ds.data_vars.keys())[0]].name

        if hasattr(ds, "area") and hasattr(ds.area, 'to_cartopy_crs'):
            dscrs = ds.area.to_cartopy_crs()
            gvds = gv.Dataset(ds, crs=dscrs)
        else:
            gvds = gv.Dataset(ds)

        if "latitude" in ds.coords.keys():
            gview = gvds.to(gv.QuadMesh, kdims=["longitude", "latitude"], vdims=vdims, dynamic=dynamic)
        else:
            gview = gvds.to(gvtype, kdims=["x", "y"], vdims=vdims, dynamic=dynamic)

        return gview