source: qesdi/geoplot/trunk/lib/geoplot/layer_drawer_grid_fast.py @ 5890

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/qesdi/geoplot/trunk/lib/geoplot/layer_drawer_grid_fast.py@5890
Revision 5890, 4.5 KB checked in by pnorton, 11 years ago (diff)

Fixed a problem with the subsetting in the grid_builder_lat_lon_subset.py file.

Line 
1"""
2A layer drawer that draws the grid boxes of the data onto an image object.
3"""
4
5import logging
6import time
7
8import geoplot.utils as geoplot_utils
9from geoplot.grid_drawer import GridDrawer
10from geoplot.layer_drawer import LayerDrawerBase
11from geoplot.colour_scheme import ColourSchemeBuilder
12from geoplot.grid_builder_lat_lon_subset import GridBuilderLatLonSubset
13
14log = logging.getLogger(__name__)
15
16class LayerDrawerGridFast(LayerDrawerBase):
17    "Draw a lat/lon grid using subsampling and assuming that the bounds are paralell"
18   
19    def __init__(self, cdmsVar,
20                 showGridLines=False, 
21                 cmap=None, 
22                 colourBarMin=None,
23                 colourBarMax=None, 
24                 transparent=False, 
25                 intervals=None, 
26                 bgcolour='white'):
27       
28        self._gridDrawer = GridDrawer()
29        self._csBuilder = ColourSchemeBuilder()
30       
31        self.cdmsVar = cdmsVar
32        self.showGridLines = showGridLines
33        self._bgcolour = 'white'
34       
35        self.transparent = transparent
36        self.cmap = cmap
37        self.bgcolour = bgcolour
38       
39        self.colourBarMin = colourBarMin
40        self.colourBarMax = colourBarMax
41        self.intervals = intervals
42
43    def makeImage(self, xLimits=None, yLimits=None, width=800, height=600, dpi=200):
44        """
45        Creates a PIL image of the selected area of the layer.
46        """
47        st = time.time()
48
49        fig = self._getFigure(width, height, dpi)
50        figTime = time.time() 
51
52        axes = self._addAxes(fig)
53        axTime = time.time() 
54
55        grid = self._buildGrid(self.cdmsVar, width, height, xLimits, yLimits)
56        gridTime = time.time() 
57       
58        self._drawToAxes(axes, grid, xLimits, yLimits)
59        drawAxTime = time.time() 
60       
61        self._resetAxes(axes, xLimits, yLimits)
62        resetTime = time.time() 
63       
64        im = geoplot_utils.figureToImage(fig)
65        figToImTime = time.time() 
66       
67        log.debug("drawn layer in %.4fs : fig=%.2f ax=%.2f gd=%.2f draw=%.2f res=%.2f im=%.2f" % 
68                  (time.time() -st , figTime - st, axTime - figTime, gridTime - axTime, drawAxTime - gridTime, resetTime - drawAxTime, figToImTime - resetTime))
69       
70        return im
71
72    def _buildGrid(self, cdmsVar, width, height, xLimits, yLimits):
73        """
74        Builds a new grid object using the data found in the cdmsVar.
75        """
76       
77        gridBuilder = GridBuilderLatLonSubset(self.cdmsVar)
78       
79        grid = gridBuilder.buildGrid(width, height, xLimits, yLimits)
80               
81        return grid
82       
83    def _drawToAxes(self, axes, grid, xLimits, yLimits):
84        """
85        Creates a new grid object and draws it onto the axis.
86        """
87               
88        scheme = self._csBuilder.buildScheme(grid)
89        cmap = scheme.colourMap
90       
91        if self.transparent:
92            #set the bad colour to transparent
93            cmap.set_bad('w', 0.0)
94       
95        #draw the grid on the axis
96        self._gridDrawer.draw(axes, grid,
97                              basemap=None, 
98                              limits=(xLimits, yLimits),
99                              norm=scheme.norm,
100                              cmap=cmap,
101                              assumeBoundsParallel=True)
102       
103    ### properties ###
104                           
105    def __set_showGridLines(self, value):
106        self._gridDrawer.showGridLines = value
107   
108    def __get_showGridLines(self):
109        return self._gridDrawer.showGridLines
110   
111    showGridLines = property(__get_showGridLines, __set_showGridLines) 
112   
113    def __set_outline(self, value):
114        self._gridDrawer.outline = value
115       
116    def __get_outline(self):
117        return self._gridDrawer.outline
118   
119    outline = property(__get_outline, __set_outline)
120   
121    def __set_gridType(self, value):
122        if value != 'latlon':
123           
124            raise Exception(\
125             "For LayerDrawerGridFast the grid type must be latlon, not %s" 
126                % (value, ))
127           
128
129    def __get_gridType(self):
130        return 'latlon'
131   
132    gridType = property(__get_gridType, __set_gridType, None, None)
133       
134    def __set_projection(self, value):
135        if value != 'latlon':
136           
137            raise Exception(\
138             "For LayerDrawerGridFast the projection must be latlon, not %s" 
139                % (value, ))
140                   
141
142    def __get_projection(self):
143        return 'latlon'
144   
145    projection = property(__get_projection, __set_projection, None, None)
Note: See TracBrowser for help on using the repository browser.