Revision: 4972
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4972&view=rev
Author:   jswhit
Date:     2008-02-15 07:47:46 -0800 (Fri, 15 Feb 2008)

Log Message:
-----------
added "bluemarble" method, make sure data is cached correctly in warpimage.

Modified Paths:
--------------
    trunk/toolkits/basemap/examples/README
    trunk/toolkits/basemap/examples/warpimage.py
    trunk/toolkits/basemap/lib/mpl_toolkits/basemap/basemap.py

Modified: trunk/toolkits/basemap/examples/README
===================================================================
--- trunk/toolkits/basemap/examples/README      2008-02-15 13:45:41 UTC (rev 
4971)
+++ trunk/toolkits/basemap/examples/README      2008-02-15 15:47:46 UTC (rev 
4972)
@@ -80,9 +80,8 @@
 stereographic, lambert azimuthal equal area, azimuthal equidistant 
 projections (prefixed by 'np' and 'sp').
 
-warpimage.py shows how to interpolate (warp) an image from one
-map projection to another using the 'warpimage' Basemap method.
-Requires PIL.
+warpimage.py shows how to use an image as a map background with the
+'warpimage' and 'bluemarble' Basemap methods. Requires PIL.
 
 garp.py makes a 'World According to Garp' map - an azimuthal equidistant
 projection centered on a specified location.  Straight lines from that

Modified: trunk/toolkits/basemap/examples/warpimage.py
===================================================================
--- trunk/toolkits/basemap/examples/warpimage.py        2008-02-15 13:45:41 UTC 
(rev 4971)
+++ trunk/toolkits/basemap/examples/warpimage.py        2008-02-15 15:47:46 UTC 
(rev 4972)
@@ -11,7 +11,7 @@
 # define orthographic projection centered on North America.
 m = Basemap(projection='ortho',lat_0=40,lon_0=-100,resolution='l')
 # display a non-default image.
-m.warpimage(file='earth_lights_lrg.jpg')
+m.warpimage(image='earth_lights_lrg.jpg')
 # draw coastlines.
 m.drawcoastlines(linewidth=0.5,color='0.5')
 # draw lat/lon grid lines every 30 degrees.
@@ -20,16 +20,16 @@
 P.title("Lights at Night image warped from 'cyl' to 'ortho' 
projection",fontsize=12)
 print 'warp to orthographic map ...'
 
-# redisplay should be fast.
+# redisplay (same image specified) should be fast since data is cached.
 fig = P.figure()
-m.warpimage()
+m.warpimage(image='earth_lights_lrg.jpg')
 
 # create new figure
 fig=P.figure()
 # define cylindrical equidistant projection.
 m = 
Basemap(projection='cyl',llcrnrlon=-180,llcrnrlat=-90,urcrnrlon=180,urcrnrlat=90,resolution='l')
 # plot (unwarped) rgba image.
-im = m.warpimage()
+im = m.bluemarble()
 # draw coastlines.
 m.drawcoastlines(linewidth=0.5,color='0.5')
 # draw lat/lon grid lines.
@@ -43,7 +43,7 @@
 # define orthographic projection centered on Europe.
 m = Basemap(projection='ortho',lat_0=40,lon_0=40,resolution='l')
 # plot warped rgba image.
-im = m.warpimage(masked=True)
+im = m.bluemarble()
 # draw coastlines.
 m.drawcoastlines(linewidth=0.5,color='0.5')
 # draw lat/lon grid lines every 30 degrees.
@@ -58,7 +58,7 @@
 m = Basemap(llcrnrlon=-145.5,llcrnrlat=1.,urcrnrlon=-2.566,urcrnrlat=46.352,\
             rsphere=(6378137.00,6356752.3142),lat_1=50.,lon_0=-107.,\
             resolution='i',area_thresh=1000.,projection='lcc')
-im = m.warpimage()
+im = m.bluemarble()
 # draw coastlines.
 m.drawcoastlines(linewidth=0.5,color='0.5')
 # draw parallels and meridians.
@@ -77,7 +77,7 @@
             resolution=None,projection='omerc',\
             lon_0=-100,lat_0=15,lon_2=-120,lat_2=65,lon_1=-50,lat_1=-55)
 # plot warped rgba image.
-im = m.warpimage()
+im = m.bluemarble()
 # draw lat/lon grid lines every 20 degrees.
 m.drawmeridians(numpy.arange(0,360,20),color='0.5')
 m.drawparallels(numpy.arange(-80,81,20),color='0.5')

Modified: trunk/toolkits/basemap/lib/mpl_toolkits/basemap/basemap.py
===================================================================
--- trunk/toolkits/basemap/lib/mpl_toolkits/basemap/basemap.py  2008-02-15 
13:45:41 UTC (rev 4971)
+++ trunk/toolkits/basemap/lib/mpl_toolkits/basemap/basemap.py  2008-02-15 
15:47:46 UTC (rev 4972)
@@ -2674,8 +2674,18 @@
         im = self.imshow(rgba,interpolation='nearest',ax=ax,**kwargs)
         return im
 
-    def warpimage(self,file=None,**kwargs):
+    def bluemarble(self,ax=None):
         """
+        display blue marble image (from http://visibleearth.nasa.gov)
+        as map background.
+        """
+        if ax is not None:
+            self.warpimage(image='bluemarble',ax=ax)
+        else:
+            self.warpimage(image='bluemarble')
+
+    def warpimage(self,image="bluemarble",**kwargs):
+        """
         display an image (given by file keyword) as a background.
         Default (if file not specified) is to display 
         'blue marble next generation' image from http://visibleearth.nasa.gov/.
@@ -2700,25 +2710,31 @@
             ax = kwargs.pop('ax')
         # default image file is blue marble next generation
         # from NASA (http://visibleearth.nasa.gov).
-        if file is None:
+        if image == "bluemarble":
             file = os.path.join(basemap_datadir,'bmng.jpg')
-            newfile = False
         else:
+            file = image
+        # if image is same as previous invocation, used cached data.
+        # if not, regenerate rgba data.
+        if not hasattr(self,'_bm_file') or self._bm_file != file:
             newfile = True
+        else:
+            newfile = False
+        self._bm_file = file
         # read in jpeg image to rgba array of normalized floats.
-        if not hasattr(self,'bm_rgba') or newfile:
-            pilImage = Image.open(file)
-            self.bm_rgba = pil_to_array(pilImage)
+        if not hasattr(self,'_bm_rgba') or newfile:
+            pilImage = Image.open(self._bm_file)
+            self._bm_rgba = pil_to_array(pilImage)
             # convert to normalized floats.
-            self.bm_rgba = self.bm_rgba.astype(npy.float32)/255.
+            self._bm_rgba = self._bm_rgba.astype(npy.float32)/255.
             # define lat/lon grid that image spans.
-            nlons = self.bm_rgba.shape[1]; nlats = self.bm_rgba.shape[0]
+            nlons = self._bm_rgba.shape[1]; nlats = self._bm_rgba.shape[0]
             delta = 360./float(nlons)
-            self.bm_lons = npy.arange(-180.+0.5*delta,180.,delta)
-            self.bm_lats = npy.arange(-90.+0.5*delta,90.,delta)
+            self._bm_lons = npy.arange(-180.+0.5*delta,180.,delta)
+            self._bm_lats = npy.arange(-90.+0.5*delta,90.,delta)
 
         if self.projection != 'cyl':
-            if newfile or not hasattr(self,'bm_rgba_warped'):
+            if newfile or not hasattr(self,'_bm_rgba_warped'):
                 # transform to nx x ny regularly spaced native
                 # projection grid.
                 # nx and ny chosen to have roughly the 
@@ -2726,15 +2742,15 @@
                 dx = 2.*npy.pi*self.rmajor/float(nlons)
                 nx = int((self.xmax-self.xmin)/dx)+1
                 ny = int((self.ymax-self.ymin)/dx)+1
-                self.bm_rgba_warped = npy.zeros((ny,nx,4),npy.float64)
+                self._bm_rgba_warped = npy.zeros((ny,nx,4),npy.float64)
                 # interpolate rgba values from geographic coords (proj='cyl')
                 # to map projection coords.
                 # if masked=True, values outside of
                 # projection limb will be masked.
                 for k in range(4):
-                    self.bm_rgba_warped[:,:,k],x,y = \
-                    self.transform_scalar(self.bm_rgba[:,:,k],\
-                    self.bm_lons,self.bm_lats,nx,ny,returnxy=True)
+                    self._bm_rgba_warped[:,:,k],x,y = \
+                    self.transform_scalar(self._bm_rgba[:,:,k],\
+                    self._bm_lons,self._bm_lats,nx,ny,returnxy=True)
                 # for ortho,geos mask pixels outside projection limb.
                 if self.projection in ['geos','ortho']:
                     lonsr,latsr = self(x,y,inverse=True)
@@ -2742,14 +2758,14 @@
                     mask[:,:,0] = npy.logical_or(lonsr>1.e20,latsr>1.e30)
                     for k in range(1,4):
                         mask[:,:,k] = mask[:,:,0]
-                    self.bm_rgba_warped = \
-                    ma.masked_array(self.bm_rgba_warped,mask=mask)
+                    self._bm_rgba_warped = \
+                    ma.masked_array(self._bm_rgba_warped,mask=mask)
                     # make points outside projection limb transparent.
-                    self.bm_rgba_warped = self.bm_rgba_warped.filled(0.)
+                    self._bm_rgba_warped = self._bm_rgba_warped.filled(0.)
             # plot warped rgba image.
-            im = self.imshow(self.bm_rgba_warped,ax=ax)
+            im = self.imshow(self._bm_rgba_warped,ax=ax)
         else:
-            im = self.imshow(self.bm_rgba,ax=ax)
+            im = self.imshow(self._bm_rgba,ax=ax)
         return im
 
 ### End of Basemap class


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to