Example #1
0
class Mapfigure_Nicolas:
    """
        Class based on Basemap with additional functionallity
        such as plot_trajectories
    """
    def __init__(self,
                 resolution='i',
                 projection='cyl',
                 domain=None,
                 lon=None,
                 lat=None,
                 basemap=None,
                 **kwargs):

        if basemap is None:
            if (domain is None) & (lon is not None):
                domain = [lon.min(), lon.max(), lat.min(), lat.max()]
            if projection == 'eqc':
                projection = 'cyl'
            if domain is not None:
                kwargs['llcrnrlon'] = domain[0]
                kwargs['urcrnrlon'] = domain[1]
                kwargs['llcrnrlat'] = domain[2]
                kwargs['urcrnrlat'] = domain[3]
            kwargs['resolution'] = resolution
            kwargs['projection'] = projection
            self.m = Basemap(**kwargs)
        else:
            self.m = basemap
        if lon is not None:
            self.x, self.y = self.m(lon, lat)

    def __getattr__(self, item):
        return getattr(self.m, item)

    def __call__(self, *args, **kwargs):
        return self.m(*args, **kwargs)

    def __dir__(self):
        return self.m.__dir__() + ['drawmap', 'plot_traj']

    def drawmap(self,
                continent=False,
                nbrem=5,
                nbrep=5,
                coastargs={},
                countryargs={},
                meridiansargs={},
                parallelsargs={}):
        """
        draw basic features on the map
        nbrem: interval bewteen meridians
        nbrep: interval between parallels
        """
        self.drawcoastlines(**coastargs)
        self.drawcountries(**countryargs)
        merid = np.arange(-180, 180, nbrem)
        parall = np.arange(-90, 90, nbrep)
        self.drawmeridians(merid, labels=[0, 0, 0, 1], **meridiansargs)
        self.drawparallels(parall, labels=[1, 0, 0, 0], **parallelsargs)
        if continent:
            self.fillcontinents(color='lightgrey')