def create_map(lon_min=-180., lon_max=180., lat_min=-90., lat_max=90., projection='cyl', resolution='auto', epsg=None, lon_center=None, lat_center=None, lat_ts=None, zoom=None, ax=None, overlay=False, fullscreen=False, nocache=False, cache_dir=None, **kwargs): """Generic creation of a :class:`Basemap` instance with caching .. todo:: Merge :func:`get_map` with :func:`create_map` """ kwmap = kwfilter(kwargs, 'basemap', defaults={'area_thresh':0.}) kwmap.update(kwfilter(kwargs, 'map_')) # Map arguments kwargs.setdefault('area_thresh', 0.) kwargs.setdefault('rsphere', RSHPERE_WGS84) # WGS-84 if kwargs['rsphere'] in [None, False, True]: del kwargs['rsphere'] projection = kwargs.pop('proj', projection) if lon_center is None: lon_center = .5*(lon_min+lon_max) if lat_center is None: lat_center = .5*(lat_min+lat_max) if lat_ts is None: lat_ts = lat_center if lon_max-lon_min<1.e-5: lon_min = lon_center-1 lon_max = lon_center+1 if lat_max-lat_min<1.e-5: lat_min = N.clip(lat_center-1, 0, 90) lat_max = N.clip(lat_center+1, 0, 90) if isinstance(zoom, (int, float)): lon_min, lat_min, lon_max, lat_max = zoombox( [lon_min, lat_min, lon_max, lat_max], zoom) # Special overlay case if overlay: projection = 'merc' resolution = None lat_center = 0 lon_center = 0 elif projection == None: projection = 'cyl' # Guess resolution res = kwargs.pop('res', resolution) if res is True: res = 'auto' elif res is False or res=='None': res = None elif isinstance(res, int): if res < 0: res= 'auto' else: res = GSHHS_RESLIST[4-res] if res == 'auto': res = gshhs_autores(lon_min, lon_max, lat_min, lat_max) if res in GSHHS_RESLIST: kwargs.setdefault('resolution', res) else: kwargs['resolution'] = None # Basemap args if isinstance(projection, str) and projection.lower() == 'rgf93' : # RGF93 kwargs.update(lon_0=3, lat_0=46.5, lat_1=44, lat_2=49, rsphere=RSHPERE_WGS84, projection='lcc') else: # standard kwargs.setdefault('lon_0', lon_center) kwargs.setdefault('lat_0', N.clip(lat_center, -90, 90)) kwargs.setdefault('lat_1', kwargs['lat_0']) kwargs.setdefault('lat_2', kwargs['lat_1']) kwargs.setdefault('lat_ts', N.clip(lat_center, -90, 90)) kwargs.setdefault('projection', projection) kwargs.setdefault('llcrnrlon', lon_min) kwargs.setdefault('urcrnrlon', lon_max) kwargs.setdefault('llcrnrlat', N.clip(lat_min, -90, 90)) kwargs.setdefault('urcrnrlat', N.clip(lat_max, -90, 90)) kwargs['epsg'] = epsg # Check the cache kwcache = kwargs.copy() if cache_dir is not None: kwcache['mapdir'] = cache_dir if not nocache: mymap = cached_map(**kwcache) else: mymap = None # Create the map object if mymap is None: mymap = Basemap(ax=ax, **kwargs) # Cache it? if int(nocache)<=1: if cache_dir is not None: kwcache = {'mapdir':cache_dir} else: kwcache = {} cache_map(mymap, **kwcache) elif ax is not None: mymap.ax = ax mymap.res = res return mymap