:py:mod:`geovista.geoplotter`
=============================

.. py:module:: geovista.geoplotter

.. autoapi-nested-parse::

   Provide specialisation to support a geospatial aware plotter.

   See :class:`pyvista.Plotter`.

   Notes
   -----
   .. versionadded:: 0.1.0

   ..
       !! processed by numpydoc !!


Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   geovista.geoplotter.GeoPlotter
   geovista.geoplotter.GeoPlotterBase




Attributes
~~~~~~~~~~

.. autoapisummary::

   geovista.geoplotter.ADD_POINTS_STYLE
   geovista.geoplotter.BASE_ZLEVEL_SCALE
   geovista.geoplotter.COASTLINES_RTOL
   geovista.geoplotter.GRATICULE_LABEL_FONT_SIZE
   geovista.geoplotter.GRATICULE_SHOW_LABELS
   geovista.geoplotter.OPACITY_BLACKLIST


.. py:class:: GeoPlotter(*args, crs = None, **kwargs)

   Bases: :py:obj:`GeoPlotterBase`, :py:obj:`pv`


   A geospatial aware plotter.

   See :class:`geovista.geoplotter.GeoPlotterBase` and
   :class:`pyvista.Plotter`.

   Notes
   -----
   .. versionadded:: 0.1.0



   Create geospatial aware plotter.


   :Parameters:

       **\*args** : :class:`python:tuple`, optional
           See :class:`pyvista.Plotter` for further details.

       **crs** : :obj:`CRSLike <geovista.crs.CRSLike>`, optional
           The target CRS to render geolocated meshes added to the plotter.
           May be anything accepted by :meth:`pyproj.crs.CRS.from_user_input`.
           Defaults to ``EPSG:4326`` i.e., ``WGS 84``.

       **\*\*kwargs** : :class:`python:dict`, optional
           See :class:`pyvista.Plotter` for further details.











   .. rubric:: Notes

   .. versionadded:: 0.1.0



   ..
       !! processed by numpydoc !!


.. py:class:: GeoPlotterBase(*args, crs = None, **kwargs)

   Base class with common behaviour for a geospatial aware plotter.

   See :class:`pyvista.Plotter`.

   Notes
   -----
   .. versionadded:: 0.1.0



   Create geospatial aware plotter.


   :Parameters:

       **\*args** : :class:`python:tuple`, optional
           See :class:`pyvista.Plotter` for further details.

       **crs** : :obj:`CRSLike <geovista.crs.CRSLike>`, optional
           The target CRS to render geolocated meshes added to the plotter.
           May be anything accepted by :meth:`pyproj.crs.CRS.from_user_input`.
           Defaults to ``EPSG:4326`` i.e., ``WGS 84``.

       **\*\*kwargs** : :class:`python:dict`, optional
           See :class:`pyvista.Plotter` for further details.











   .. rubric:: Notes

   .. versionadded:: 0.1.0



   ..
       !! processed by numpydoc !!


   .. py:method:: add_base_layer(mesh = None, resolution = None, radius = None, zlevel = None, zscale = None, rtol = None, atol = None, **kwargs)

      
      Generate a cubed-sphere base layer mesh and add to the plotter scene.

      Optionally, a `mesh` may be provided (e.g. if one is available that
      better fits the geometry of the surface mesh).

      :Parameters:

          **mesh** : :obj:`PolyData <pyvista.PolyData>`, optional
              Use the provided mesh as the base layer.

          **resolution** : :class:`python:str`, optional
              The resolution of the cubed-sphere to generate as the base layer,
              which may be either ``c48``, ``c96`` or ``c192``. Defaults to
              :data:`geovista.pantry.meshes.LFRIC_RESOLUTION`. Alternatively, generate a
              regular grid using a format of ``rN``, where ``N`` is the number of cells
              in latitude, and ``N * 1.5`` cells in longitude. When adding a base layer
              to a projection, the default is to use a regular grid with resolution
              :data:`geovista.pantry.meshes.REGULAR_RESOLUTION`.

          **radius** : :class:`python:float`, optional
              The radius of the spherical mesh to generate as the base layer. Defaults
              to :data:`geovista.common.RADIUS`.

          **zlevel** : :class:`python:int`, optional
              The z-axis level. Used in combination with the `zscale` to offset the
              `radius` by a proportional amount i.e., ``radius * zlevel * zscale``.
              Defaults to ``-1``.

          **zscale** : :class:`python:float`, optional
              The proportional multiplier for z-axis `zlevel`. Defaults to
              :data:`BASE_ZLEVEL_SCALE`.

          **rtol** : :class:`python:float`, optional
              The relative tolerance for longitudes close to the 'wrap meridian' -
              see :func:`geovista.common.wrap` for more.

          **atol** : :class:`python:float`, optional
              The absolute tolerance for longitudes close to the 'wrap meridian' -
              see :func:`geovista.common.wrap` for more.

          **\*\*kwargs** : :class:`python:dict`, optional
              See :meth:`pyvista.Plotter.add_mesh`.



      :Returns:

          :obj:`Actor <pyvista.Actor>`
              The rendered actor added to the plotter scene.








      .. rubric:: Notes

      .. versionadded:: 0.1.0



      ..
          !! processed by numpydoc !!


   .. py:method:: add_coastlines(resolution = None, radius = None, zlevel = None, zscale = None, rtol = None, atol = None, **kwargs)

      
      Generate coastlines and add to the plotter scene.


      :Parameters:

          **resolution** : :class:`python:str`, optional
              The resolution of the Natural Earth coastlines, which may be either
              ``110m``, ``50m``, or ``10m``. Defaults to
              :data:`geovista.common.COASTLINES_RESOLUTION`.

          **radius** : :class:`python:float`, optional
              The radius of the sphere. Defaults to :data:`geovista.common.RADIUS`.

          **zlevel** : :class:`python:int`, optional
              The z-axis level. Used in combination with the `zscale` to offset the
              `radius` by a proportional amount i.e., ``radius * zlevel * zscale``.
              Defaults to :data:`geovista.common.ZTRANSFORM_FACTOR`.

          **zscale** : :class:`python:float`, optional
              The proportional multiplier for z-axis `zlevel`. Defaults to
              :data:`geovista.common.ZLEVEL_SCALE`.

          **rtol** : :class:`python:float`, optional
              The relative tolerance for longitudes close to the 'wrap meridian' -
              see :func:`geovista.common.wrap` for more.

          **atol** : :class:`python:float`, optional
              The absolute tolerance for longitudes close to the 'wrap meridian' -
              see :func:`geovista.common.wrap` for more.

          **\*\*kwargs** : :class:`python:dict`, optional
              See :meth:`pyvista.Plotter.add_mesh`.



      :Returns:

          :obj:`Actor <pyvista.Actor>`
              The rendered actor added to the plotter scene.








      .. rubric:: Notes

      .. versionadded:: 0.1.0



      ..
          !! processed by numpydoc !!


   .. py:method:: add_graticule(lon_start = None, lon_stop = None, lon_step = None, lat_start = None, lat_stop = None, lat_step = None, poles_parallel = None, poles_label = None, show_labels = None, radius = None, zlevel = None, zscale = None, mesh_args = None, point_labels_args = None)

      
      Generate a graticule and add to the plotter scene.

      This involves generating lines of constant latitude (parallels) and
      lines of constant longitude (meridians), which together form the graticule.

      :Parameters:

          **lon_start** : :class:`python:float`, optional
              The first line of longitude (degrees). The graticule will include this
              meridian. Defaults to :data:`geovista.gridlines.LONGITUDE_START`.

          **lon_stop** : :class:`python:float`, optional
              The last line of longitude (degrees). The graticule will include this
              meridian when it is a multiple of `lon_step`. Also see
              ``closed_interval`` in :func:`~geovista.gridlines.create_meridians`.
              Defaults to :data:`geovista.gridlines.LONGITUDE_STOP`.

          **lon_step** : :class:`python:float`, optional
              The delta (degrees) between neighbouring meridians. Defaults to
              :data:`geovista.gridlines.LONGITUDE_STEP`.

          **lat_start** : :class:`python:float`, optional
              The first line of latitude (degrees). The graticule will include this
              parallel. Also see `poles_parallel`. Defaults to
              :data:`geovista.gridlines.LATITUDE_START`.

          **lat_stop** : :class:`python:float`, optional
              The last line of latitude (degrees). The graticule will include this
              parallel when it is a multiple of `lat_step`. Defaults to
              :data:`geovista.gridlines.LATITUDE_STOP`.

          **lat_step** : :class:`python:float`, optional
              The delta (degrees) between neighbouring parallels. Defaults to
              :data:`geovista.gridlines.LATITUDE_STEP`.

          **poles_parallel** : :class:`python:bool`, optional
              Whether to create a line of latitude at the north/south poles. Defaults to
              :data:`geovista.gridlines.LATITUDE_POLES_PARALLEL`.

          **poles_label** : :class:`python:bool`, optional
              Whether to create a single north/south pole label. Only applies when
              ``poles_parallel=False``. Defaults to
              :data:`geovista.gridlines.LATITUDE_POLES_LABEL`.

          **show_labels** : :class:`python:bool`, optional
              Whether to render the labels of the parallels and meridians. Defaults to
              :data:`GRATICULE_SHOW_LABELS`.

          **radius** : :class:`python:float`, optional
              The radius of the sphere. Defaults to :data:`geovista.common.RADIUS`.

          **zlevel** : :class:`python:int`, optional
              The z-axis level. Used in combination with the `zscale` to offset the
              `radius` by a proportional amount i.e., ``radius * zlevel * zscale``.
              Defaults to :data:`geovista.gridlines.GRATICULE_ZLEVEL`.

          **zscale** : :class:`python:float`, optional
              The proportional multiplier for z-axis `zlevel`. Defaults to
              :data:`geovista.common.ZLEVEL_SCALE`.

          **mesh_args** : :class:`python:dict`, optional
              Arguments to pass through to :meth:`pyvista.Plotter.add_mesh`.

          **point_labels_args** : :class:`python:dict`, optional
              Arguments to pass through to :meth:`pyvista.Plotter.add_point_labels`.











      .. rubric:: Notes

      .. versionadded:: 0.3.0



      ..
          !! processed by numpydoc !!


   .. py:method:: add_meridian(lon, lat_step = None, n_samples = None, show_labels = None, radius = None, zlevel = None, zscale = None, mesh_args = None, point_labels_args = None)

      
      Generate a line of constant longitude and add to the plotter scene.


      :Parameters:

          **lon** : :class:`python:float`
              The constant line of longitude (degrees) to generate.

          **lat_step** : :class:`python:float`, optional
              The delta (degrees) between neighbouring parallels. Sets the
              frequency of the labels. Defaults to
              :data:`geovista.gridlines.LATITUDE_STEP`.

          **n_samples** : :class:`python:int`, optional
              The number of points in a single line of longitude. Defaults to
              :data:`geovista.gridlines.LONGITUDE_N_SAMPLES`.

          **show_labels** : :class:`python:bool`, optional
              Whether to render the meridian label. Defaults to
              :data:`GRATICULE_SHOW_LABELS`.

          **radius** : :class:`python:float`, optional
              The radius of the sphere. Defaults to :data:`geovista.common.RADIUS`.

          **zlevel** : :class:`python:int`, optional
              The z-axis level. Used in combination with the `zscale` to offset the
              `radius` by a proportional amount i.e., ``radius * zlevel * zscale``.
              Defaults to :data:`geovista.gridlines.GRATICULE_ZLEVEL`.

          **zscale** : :class:`python:float`, optional
              The proportional multiplier for z-axis `zlevel`. Defaults to
              :data:`geovista.common.ZLEVEL_SCALE`.

          **mesh_args** : :class:`python:dict`, optional
              Arguments to pass through to :meth:`pyvista.Plotter.add_mesh`.

          **point_labels_args** : :class:`python:dict`, optional
              Arguments to pass through to :meth:`pyvista.Plotter.add_point_labels`.











      .. rubric:: Notes

      .. versionadded:: 0.3.0



      ..
          !! processed by numpydoc !!


   .. py:method:: add_meridians(start = None, stop = None, step = None, lat_step = None, n_samples = None, show_labels = None, radius = None, zlevel = None, zscale = None, mesh_args = None, point_labels_args = None)

      
      Generate lines of constant longitude and add to the plotter scene.


      :Parameters:

          **start** : :class:`python:float`, optional
              The first line of longitude (degrees). The graticule will include this
              meridian. Defaults to :data:`geovista.gridlines.LONGITUDE_START`.

          **stop** : :class:`python:float`, optional
              The last line of longitude (degrees). The graticule will include this
              meridian when it is a multiple of `step`. Also see
              ``closed_interval`` in :func:`~geovista.gridlines.create_meridians`.
              Defaults to :data:`geovista.gridlines.LONGITUDE_STOP`.

          **step** : :class:`python:float`, optional
              The delta (degrees) between neighbouring meridians. Defaults to
              :data:`geovista.gridlines.LONGITUDE_STEP`.

          **lat_step** : :class:`python:float`, optional
              The delta (degrees) between neighbouring parallels. Sets the
              frequency of the labels. Defaults to
              :data:`geovista.gridlines.LATITUDE_STEP`.

          **n_samples** : :class:`python:int`, optional
              The number of points in a single line of longitude. Defaults to
              :data:`geovista.gridlines.LONGITUDE_N_SAMPLES`.

          **show_labels** : :class:`python:bool`, optional
              Whether to render the labels of the meridians. Defaults to
              :data:`GRATICULE_SHOW_LABELS`.

          **radius** : :class:`python:float`, optional
              The radius of the sphere. Defaults to :data:`geovista.common.RADIUS`.

          **zlevel** : :class:`python:int`, optional
              The z-axis level. Used in combination with the `zscale` to offset the
              `radius` by a proportional amount i.e., ``radius * zlevel * zscale``.
              Defaults to :data:`geovista.gridlines.GRATICULE_ZLEVEL`.

          **zscale** : :class:`python:float`, optional
              The proportional multiplier for z-axis `zlevel`. Defaults to
              :data:`geovista.common.ZLEVEL_SCALE`.

          **mesh_args** : :class:`python:dict`, optional
              Arguments to pass through to :meth:`pyvista.Plotter.add_mesh`.

          **point_labels_args** : :class:`python:dict`, optional
              Arguments to pass through to :meth:`pyvista.Plotter.add_point_labels`.











      .. rubric:: Notes

      .. versionadded:: 0.3.0



      ..
          !! processed by numpydoc !!


   .. py:method:: add_mesh(mesh, radius = None, zlevel = None, zscale = None, rtol = None, atol = None, **kwargs)

      
      Add the `mesh` to the plotter scene.

      See :meth:`pyvista.Plotter.add_mesh`.

      :Parameters:

          **mesh** : :obj:`PolyData <pyvista.PolyData>`
              The mesh to add to the plotter.

          **radius** : :class:`python:float`, optional
              The radius of the sphere. Defaults to :data:`geovista.common.RADIUS`.

          **zlevel** : :class:`python:int` or :obj:`ArrayLike <numpy.typing.ArrayLike>`, optional
              The z-axis level. Used in combination with the `zscale` to offset the
              `radius`/vertical by a proportional amount e.g.,
              ``radius * zlevel * zscale``. If `zlevel` is not a scalar, then its shape
              must match or broadcast with the shape of the ``mesh.points``.
              Defaults to ``0``.

          **zscale** : :class:`python:float`, optional
              The proportional multiplier for z-axis `zlevel`. Defaults to
              :data:`geovista.common.ZLEVEL_SCALE`.

          **rtol** : :class:`python:float`, optional
              The relative tolerance for longitudes close to the 'wrap meridian' -
              see :func:`geovista.common.wrap` for more.

          **atol** : :class:`python:float`, optional
              The absolute tolerance for longitudes close to the 'wrap meridian' -
              see :func:`geovista.common.wrap` for more.

          **\*\*kwargs** : :class:`python:dict`, optional
              See :meth:`pyvista.Plotter.add_mesh`.



      :Returns:

          :obj:`Actor <pyvista.Actor>`
              The rendered actor added to the plotter scene.








      .. rubric:: Notes

      .. versionadded:: 0.1.0



      ..
          !! processed by numpydoc !!


   .. py:method:: add_parallel(lat, lon_step = None, n_samples = None, poles_parallel = None, show_labels = None, radius = None, zlevel = None, zscale = None, mesh_args = None, point_labels_args = None)

      
      Generate a line of constant latitude and add to the plotter scene.


      :Parameters:

          **lat** : :class:`python:float`
              The constant line of latitude (degrees) to generate.

          **lon_step** : :class:`python:float`, optional
              The delta (degrees) between neighbouring meridians. Sets the
              frequency of the labels. Defaults to
              :data:`geovista.gridlines.LONGITUDE_STEP`.

          **n_samples** : :class:`python:int`, optional
              The number of points in a single line of latitude. Defaults to
              :data:`geovista.gridlines.LATITUDE_N_SAMPLES`.

          **poles_parallel** : :class:`python:bool`, optional
              Whether to create a line of latitude at the north/south poles. Defaults to
              :data:`geovista.gridlines.LATITUDE_POLES_PARALLEL`.

          **show_labels** : :class:`python:bool`, optional
              Whether to render the parallel label. Defaults to
              :data:`GRATICULE_SHOW_LABELS`.

          **radius** : :class:`python:float`, optional
              The radius of the sphere. Defaults to :data:`geovista.common.RADIUS`.

          **zlevel** : :class:`python:int`, optional
              The z-axis level. Used in combination with the `zscale` to offset the
              `radius` by a proportional amount i.e., ``radius * zlevel * zscale``.
              Defaults to :data:`geovista.gridlines.GRATICULE_ZLEVEL`.

          **zscale** : :class:`python:float`, optional
              The proportional multiplier for z-axis `zlevel`. Defaults to
              :data:`geovista.common.ZLEVEL_SCALE`.

          **mesh_args** : :class:`python:dict`, optional
              Arguments to pass through to :meth:`pyvista.Plotter.add_mesh`.

          **point_labels_args** : :class:`python:dict`, optional
              Arguments to pass through to :meth:`pyvista.Plotter.add_point_labels`.











      .. rubric:: Notes

      .. versionadded:: 0.3.0



      ..
          !! processed by numpydoc !!


   .. py:method:: add_parallels(start = None, stop = None, step = None, lon_step = None, n_samples = None, poles_parallel = None, poles_label = None, show_labels = None, radius = None, zlevel = None, zscale = None, mesh_args = None, point_labels_args = None)

      
      Generate lines of constant latitude and add to the plotter scene.


      :Parameters:

          **start** : :class:`python:float`, optional
              The first line of latitude (degrees). The graticule will include this
              parallel. Also see `poles_parallel`. Defaults to
              :data:`geovista.gridlines.LATITUDE_START`.

          **stop** : :class:`python:float`, optional
              The last line of latitude (degrees). The graticule will include this
              parallel when it is a multiple of `step`. Also see `poles_parallel`.
              Defaults to :data:`geovista.gridlines.LATITUDE_STOP`.

          **step** : :class:`python:float`, optional
              The delta (degrees) between neighbouring parallels. Defaults to
              :data:`geovista.gridlines.LATITUDE_STEP`.

          **lon_step** : :class:`python:float`, optional
              The delta (degrees) between neighbouring meridians. Sets the
              frequency of the labels. Defaults to
              :data:`geovista.gridlines.LONGITUDE_STEP`.

          **n_samples** : :class:`python:int`, optional
              The number of points in a single line of latitude. Defaults to
              :data:`geovista.gridlines.LATITUDE_N_SAMPLES`.

          **poles_parallel** : :class:`python:bool`, optional
              Whether to create a line of latitude at the north/south poles. Defaults to
              :data:`geovista.gridlines.LATITUDE_POLES_PARALLEL`.

          **poles_label** : :class:`python:bool`, optional
              Whether to create a single north/south pole label. Only applies when
              ``poles_parallel=False``. Defaults to
              :data:`geovista.gridlines.LATITUDE_POLES_LABEL`.

          **show_labels** : :class:`python:bool`, optional
              Whether to render the labels of the parallels. Defaults to
              :data:`GRATICULE_SHOW_LABELS`.

          **radius** : :class:`python:float`, optional
              The radius of the sphere. Defaults to :data:`geovista.common.RADIUS`.

          **zlevel** : :class:`python:int`, optional
              The z-axis level. Used in combination with the `zscale` to offset the
              `radius` by a proportional amount i.e., ``radius * zlevel * zscale``.
              Defaults to :data:`geovista.gridlines.GRATICULE_ZLEVEL`.

          **zscale** : :class:`python:float`, optional
              The proportional multiplier for z-axis `zlevel`. Defaults to
              :data:`geovista.common.ZLEVEL_SCALE`.

          **mesh_args** : :class:`python:dict`, optional
              Arguments to pass through to :meth:`pyvista.Plotter.add_mesh`.

          **point_labels_args** : :class:`python:dict`, optional
              Arguments to pass through to :meth:`pyvista.Plotter.add_point_labels`.











      .. rubric:: Notes

      .. versionadded:: 0.3.0



      ..
          !! processed by numpydoc !!


   .. py:method:: add_points(points = None, xs = None, ys = None, scalars = None, crs = None, radius = None, style = None, zlevel = None, zscale = None, **kwargs)

      
      Add points to the plotter scene.

      See :meth:`pyvista.Plotter.add_mesh`.

      :Parameters:

          **points** : :obj:`ArrayLike <numpy.typing.ArrayLike>` or :obj:`PolyData <pyvista.PolyData>`, optional
              Array of xyz points, or the points of the mesh to be rendered.
              Passed to :meth:`pyvista.core.utilities.helpers.wrap` without any
              cartographic transformation, i.e. ``0 0 0`` is centre of the globe
              (the plot origin), ``0 0 1`` is the north pole.

          **xs** : :obj:`ArrayLike <numpy.typing.ArrayLike>`, optional
              A 1-D, 2-D or 3-D array of point-cloud x-values, in canonical `crs` units.
              Must have the same shape as the `ys`.

          **ys** : :obj:`ArrayLike <numpy.typing.ArrayLike>`
              A 1-D, 2-D or 3-D array of point-cloud y-values, in canonical `crs` units.
              Must have the same shape as the `xs`.

          **scalars** : :class:`python:str` or :obj:`ArrayLike <numpy.typing.ArrayLike>`, optional
              Values used to color the points. Either, the string name of an array that is
              present on the `points` mesh or an array equal to the number of points.
              If both `color` (see `kwargs`) and `scalars` are ``None``, then the active
              scalars on the `points` mesh are used.

          **crs** : :obj:`CRSLike <geovista.crs.CRSLike>`, optional
              The Coordinate Reference System of the provided `points`, or `xs` and `ys`.
              May be anything accepted by :meth:`pyproj.crs.CRS.from_user_input`. Defaults
              to ``EPSG:4326`` i.e., ``WGS 84``.

          **radius** : :class:`python:float`, optional
              The radius of the mesh point-cloud. Defaults to
              :data:`geovista.common.RADIUS`.

          **style** : :class:`python:str`, optional
              Visualization style of the points to be rendered. May be either ``points``
              or ``points_gaussian``. The ``points_gaussian`` option may be controlled
              with the ``emissive`` and ``render_points_as_spheres`` options in
              `kwargs`.

          **zlevel** : :class:`python:int` or :obj:`ArrayLike <numpy.typing.ArrayLike>`, optional
              The z-axis level. Used in combination with the `zscale` to offset the
              `radius` by a proportional amount i.e., ``radius * zlevel * zscale``.
              If `zlevel` is not a scalar, then its shape must match or broadcast
              with the shape of the `xs` and `ys`. Defaults to ``0``.

          **zscale** : :class:`python:float`, optional
              The proportional multiplier for z-axis `zlevel`. Defaults to
              :data:`geovista.common.ZLEVEL_SCALE`.

          **\*\*kwargs** : :class:`python:dict`, optional
              See :meth:`pyvista.Plotter.add_mesh`.



      :Returns:

          :obj:`Actor <pyvista.Actor>`
              The rendered actor added to the plotter scene.








      .. rubric:: Notes

      .. versionadded:: 0.4.0



      ..
          !! processed by numpydoc !!


   .. py:method:: view_poi(x = None, y = None, crs = None)

      
      Center the camera at a point-of-interest (POI).

      If no POI is provided, then the center of the previous mesh added to the scene
      is used, if available.

      Note that, the camera will be positioned at the POI to view **all** the actors
      added to the scene so far; order is important. The point at which
      :meth:`~geovista.geoplotter.GeoPlotterBase.view_poi` is called relative to the
      other actors influences the final rendered scene.

      :Parameters:

          **x** : :class:`python:float`, optional
              The spatial x-value point, in canonical `crs` units, of the POI.
              Defaults to ``0`` if unspecified and `y` has been provided,
              otherwise ``None``.

          **y** : :class:`python:float`, optional
              The spatial y-value point, in canonical `crs` units, of the POI.
              Defaults to ``0`` if unspecified and `x` has been provided,
              otherwise ``None``.

          **crs** : :obj:`CRSLike <geovista.crs.CRSLike>`, optional
              The Coordinate Reference System of the POI. May be anything accepted by
              :meth:`pyproj.crs.CRS.from_user_input`. Defaults to ``EPSG:4326`` i.e.,
              ``WGS 84``.











      .. rubric:: Notes

      .. versionadded:: 0.5.0


      .. rubric:: Examples

      .. pyvista-plot::

         First, create an RGB mesh of the Bahamas from a GeoTIFF.

         >>> import geovista
         >>> from geovista.pantry import fetch_raster
         >>> fname = fetch_raster("bahamas_rgb.tif")
         >>> bahamas = geovista.Transform.from_tiff(
         ...     fname, rgb=True, sieve=True, extract=True
         ... )

         Now add the ``bahamas`` mesh to a ``plotter`` **before** adding a texture mapped
         base layer. Note that, the camera is centered over the ``bahamas`` mesh, which
         is the primary focus of the scene.

         >>> plotter = geovista.GeoPlotter()
         >>> _ = plotter.add_mesh(bahamas, rgb=True)
         >>> plotter.view_poi()
         >>> _ = plotter.add_base_layer(texture=geovista.natural_earth_1())
         >>> plotter.show()

         In comparison, add a texture mapped base layer to a ``plotter`` **before** the
         ``bahamas`` mesh. The camera is still centered over the ``bahamas`` in the
         rendered scene, however the base layer is now fully visible.

         >>> plotter = geovista.GeoPlotter()
         >>> _ = plotter.add_base_layer(texture=geovista.natural_earth_1())
         >>> _ = plotter.add_mesh(bahamas, rgb=True)
         >>> plotter.view_poi()
         >>> plotter.show()

         ..
             !! processed by numpydoc !!


   .. py:attribute:: crs


.. py:data:: ADD_POINTS_STYLE
   :type:  list[str, str]
   :value: ['points', 'points_gaussian']


   
   The valid 'style' options for adding points.
















   ..
       !! processed by numpydoc !!

.. py:data:: BASE_ZLEVEL_SCALE
   :type:  int
   :value: 0.001


   
   Proportional multiplier for z-axis levels/offsets of base-layer mesh.
















   ..
       !! processed by numpydoc !!

.. py:data:: COASTLINES_RTOL
   :type:  float
   :value: 1e-08


   
   Coastlines relative tolerance for longitudes close to 'wrap meridian'.
















   ..
       !! processed by numpydoc !!

.. py:data:: GRATICULE_LABEL_FONT_SIZE
   :type:  int
   :value: 9


   
   The default font size for graticule labels.
















   ..
       !! processed by numpydoc !!

.. py:data:: GRATICULE_SHOW_LABELS
   :type:  bool
   :value: True


   
   Whether to render graticule labels by default.
















   ..
       !! processed by numpydoc !!

.. py:data:: OPACITY_BLACKLIST
   :value: [('llvmpipe (LLVM 7.0, 256 bits)', '3.3 (Core Profile) Mesa 18.3.4')]


   
   Known GPU renderer and version combinations that don't support opacity.
















   ..
       !! processed by numpydoc !!

