Beispiel #1
0
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
Beispiel #2
0
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