Source code for epygram._plugins.with_cartopy.D3Geometry
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) Météo France (2014-)
# This software is governed by the CeCILL-C license under French law.
# http://www.cecill.info
"""
Extend D3Geometry with plotting methods using cartopy.
"""
from __future__ import print_function, absolute_import, unicode_literals, division
import numpy
import cartopy.crs as ccrs
import footprints
epylog = footprints.loggers.getLogger(__name__)
def activate():
"""Activate extension."""
from . import __name__ as plugin_name
from epygram._plugins.util import notify_doc_requires_plugin
notify_doc_requires_plugin([cartopy_CRS_reproject],
plugin_name)
from epygram.geometries.D3Geometry import D3Geometry
# defaults arguments for cartopy plots
D3Geometry.cartopy_CRS_reproject = cartopy_CRS_reproject
def cartopy_CRS_reproject(self, lons, lats, projection=None):
"""Reproject lons/lats onto a cartopy CRS projection coordinates."""
if projection is None:
projection = self.default_cartopy_CRS()
if isinstance(lons, (float, int)):
lons = [lons]
lats = [lats]
tmp = projection.transform_points(ccrs.PlateCarree(),
numpy.array(lons),
numpy.array(lats))
return tmp[..., 0], tmp[..., 1]