On 5/11/10 8:02 AM, Michael Hearne wrote:
> Jeff - Thanks.  Is there an easy way you know of to detect when there are no 
> continent boundaries?  I'm making these maps automatically, and so will not 
> have the luxury of examining them to see where they are.
>
> --Mike
>    

Mike:  Unfortunately, there is no easy way to check since those 
computations are only done when you call fillcontinents.  Here's a 
function that follows the logic in fillcontinents:

def all_land(map):
     for poly,type in zip(map.coastpolygons, map.coastpolygontypes):
         if type == 1:
             x, y = poly
             xa = np.array(x,np.float32)
             ya = np.array(y,np.float32)
             # check to see if all four corners of domain in polygon (if so,
             # don't draw since it will just fill in the whole map).
             delx = 10; dely = 10
             if map.projection in ['cyl']:
                 delx = 0.1
                 dely = 0.1
             test1 = np.fabs(xa-map.urcrnrx) < delx
             test2 = np.fabs(xa-map.llcrnrx) < delx
             test3 = np.fabs(ya-map.urcrnry) < dely
             test4 = np.fabs(ya-map.llcrnry) < dely
             hasp1 = np.sum(test1*test3)
             hasp2 = np.sum(test2*test3)
             hasp4 = np.sum(test2*test4)
             hasp3 = np.sum(test1*test4)
             if not hasp1 or not hasp2 or not hasp3 or not hasp4:
                 allin = False
             else:
                 allin = True
             return allin

If you pass this function the basemap instance, it should return True if 
no coastline polygons will be drawn.

-Jeff

> On May 10, 2010, at 2:57 PM, Jeff Whitaker wrote:
>
>    
>> On 5/10/10 2:21 PM, Michael Hearne wrote:
>>      
>>> I have found  a (possible) bug in Basemap - when using 
>>> basemap.fillcontinents(), I see the chosen continent color only when the 
>>> map I create includes some ocean.  If I am in the interior of a continent 
>>> (I've tested with North America and Asia), the continent color is white.
>>>
>>>        
>> Michael:  If there are no continent boundaries inside the map projection 
>> region, basemap does not draw anything (hence you see the axis background 
>> color).  In that case, you should just set the axis background color to 
>> whatever you wanted  the continent color to be.
>>
>> -Jeff
>>      
>>> A code sample is below.  My version information:
>>> Basemap: 0.99.4
>>> Matplotlib: 0.99.1.1
>>> numpy: 1.4.0
>>> Python: 2.6.4
>>>
>>> To replicate my results, please try the following:
>>> ./maptest.py 37.894507 -121.816406  #map center is somewhere in the Bay 
>>> Area in California
>>> ./maptest.py 41.880332 -100.47821  #map center is somewhere in Nebraska
>>>
>>> The script creates a file called "output.png" in the calling directory.  In 
>>> the California case, I see the ocean as blue, and the land as a sort of 
>>> annoying salmon color.  In the Nebraska case, I see white with blue 
>>> denoting the various rivers and lakes in the area.
>>>
>>> Am I mis-using the basemap method calls in some way?
>>>
>>> Thanks,
>>>
>>> Mike
>>>
>>> --------------------------------------------------------------------
>>> #!/usr/bin/env python
>>>
>>> import matplotlib
>>> #use the non-interactive matplotlib setting
>>> matplotlib.use('agg')
>>> from mpl_toolkits.basemap import Basemap
>>> import numpy as np
>>> from pylab import *
>>> import sys
>>>
>>> clat = float(sys.argv[1])
>>> clon = float(sys.argv[2])
>>>
>>> figwidth = 5.4
>>>
>>>
>>> bounds = (clon-4, clon+4, clat-4, clat+4)
>>> dx = (bounds[1] - bounds[0])*111191 * np.cos(clat * np.pi/180)
>>> dy = (bounds[3] - bounds[2])*111191
>>> aspect = dy/dx
>>> figheight = aspect * figwidth
>>>
>>> fig = figure(figsize=(figwidth,figheight),edgecolor='g',facecolor='g')
>>> ax1 = fig.add_axes([0,0,1.0,1.0])
>>> mapcontour = Basemap(llcrnrlon=bounds[0],llcrnrlat=bounds[2],
>>>                       urcrnrlon=bounds[1],urcrnrlat=bounds[3],
>>>                       resolution='h',projection='merc',lat_ts=clat)
>>> water_color = [.47,.60,.81]
>>> mapcontour.drawrivers(color=water_color)
>>> mapcontour.drawcountries(color='k',linewidth=2.0)
>>> mapcontour.drawcoastlines()
>>> mapcontour.fillcontinents(color=[1.0,0.8,0.8],lake_color=water_color)
>>>
>>> plt.savefig('output.png')
>>> --------------------------------------------------------------------
>>>
>>>
>>> ------------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> Matplotlib-users mailing list
>>> Matplotlib-users@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>>>
>>>        
>>      
>    


-- 
Jeffrey S. Whitaker         Phone  : (303)497-6313
Meteorologist               FAX    : (303)497-6449
NOAA/OAR/PSD  R/PSD1        Email  : jeffrey.s.whita...@noaa.gov
325 Broadway                Office : Skaggs Research Cntr 1D-113
Boulder, CO, USA 80303-3328 Web    : http://tinyurl.com/5telg


------------------------------------------------------------------------------

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to