Beispiel #1
0
  def drawtopography(self,resolution=5000,cmap=matplotlib.cm.gray,vmin=None,vmax=None,**kwargs):
    #try:
    #  url = '/cmld/data5/hinest/Data/SRTM/SoCal.h5'
    #  etopodata = Dataset(url)
    #except RuntimeError:
    url = 'http://ferret.pmel.noaa.gov/thredds/dodsC/data/PMEL/etopo1.nc'
    etopodata = Dataset(url)

    lons = etopodata.variables['x'][:]
    lats = etopodata.variables['y'][:]
    # This leads to branch cut issues if dealing with datasets that go
    # over the prime meridian 
    xidx = (lons > self.lonmin) & (lons < self.lonmax)
    yidx = (lats > self.latmin) & (lats < self.latmax)
    lons = lons[xidx]
    lats = lats[yidx]

    topoin = etopodata.variables['rose'][yidx,xidx]
    topoin = np.ma.masked_array(topoin,np.isnan(topoin))
    topoin.data[topoin.mask] = 0.0

    nx = int((self.xmax-self.xmin)/resolution)+1
    ny = int((self.ymax-self.ymin)/resolution)+1
    topodat = self.transform_scalar(topoin,lons,lats,nx,ny,order=3,masked=True)

    ls = LightSource(azdeg = 270,altdeg = 45)
    #rgb = ls.shade(topodat,cmap)
    rgb = set_shade(topodat,cmap=cmap,scale=10.0,azdeg=300.0,altdeg=45.0,vmin=vmin,vmax=vmax)
    self.imshow(rgb,**kwargs)
Beispiel #2
0
  def drawtopography(self,resolution=200,cmap=matplotlib.cm.gray,vmin=None,vmax=None,**kwargs):
    try:
      etopodata = h5py.File('/cmld/data5/hinest/Projects/MyPlot/data/ETOPO1.h5')
    except IOError:
      print('cannot open ETOPO1')
      return

    lons = etopodata['longitude'][...]
    lats = etopodata['latitude'][...]

    lonmin = self.lonmin   
    lonmax = self.lonmax
    # add a 10% buffer
    lonmin -= 0.1*(lonmax - lonmin)
    lonmax += 0.1*(lonmax - lonmin)

    latmin = self.latmin
    latmax = self.latmax
    latmin -= 0.1*(latmax - latmin)
    latmax += 0.1*(latmax - latmin)


    xidx = (lons > lonmin) & (lons < lonmax)
    xidx = xidx.nonzero()[0]
    xstart = xidx[0] 
    xend = xidx[-1] 

    yidx = (lats > latmin) & (lats < latmax)
    yidx = yidx.nonzero()[0]
    ystart = yidx[0] 
    yend = yidx[-1] 

    lons = lons[xstart:xend]
    lats = lats[ystart:yend]
    data = etopodata['elevation'][ystart:yend,xstart:xend]
    etopodata.close() 
    nx = resolution#int((self.xmax-self.xmin)/resolution)+1
    ny = resolution#int((self.ymax-self.ymin)/resolution)+1
    topodat = self.transform_scalar(data,lons,lats,nx,ny,order=3,masked=True)
    rgb = set_shade(topodat,cmap=cmap,scale=10.0,azdeg=300.0,altdeg=45.0,vmin=vmin,vmax=vmax)
    self.imshow(rgb,**kwargs)
Beispiel #3
0
  def drawscalar(self,val,lonlat,topography=False,resolution=200,penalty=0.0,cmap=matplotlib.cm.seismic,**kwargs):
    lonmin = self.lonmin   
    lonmax = self.lonmax
    # add a 10% buffer
    lonmin -= 0.1*(lonmax - lonmin)
    lonmax += 0.1*(lonmax - lonmin)

    latmin = self.latmin
    latmax = self.latmax
    latmin -= 0.1*(latmax - latmin)
    latmax += 0.1*(latmax - latmin)

    # form data interpolant        
    A = RBFInterpolant(lonlat,val,order=0,basis=rbf.basis.phs1,penalty=penalty)
    nx = resolution#int((self.xmax-self.xmin)/resolution)
    ny = resolution#int((self.ymax-self.ymin)/resolution)
  
    lons = np.linspace(lonmin,lonmax,nx)
    lats = np.linspace(latmin,latmax,ny)
    latitp,lonitp = np.meshgrid(lats,lons)
    latitp = latitp.flatten()
    lonitp = lonitp.flatten()
    positp = np.array([lonitp,latitp]).T
    valitp = A(positp)
    valitp = np.reshape(valitp,(nx,ny)).T
    data = self.transform_scalar(valitp,lons,lats,nx,ny,order=3)

    # form topography based intensity if topography is True
    if topography:
      try:
        etopodata = h5py.File('/cmld/data5/hinest/Projects/MyPlot/data/ETOPO1.h5')
      except IOError:
        print('cannot open ETOPO1')
        return

      lons = etopodata['longitude'][...]
      lats = etopodata['latitude'][...]
    
      xidx = (lons > lonmin) & (lons < lonmax)
      xidx = xidx.nonzero()[0]
      xstart = xidx[0] 
      xend = xidx[-1] 

      yidx = (lats > latmin) & (lats < latmax)
      yidx = yidx.nonzero()[0]
      ystart = yidx[0] 
      yend = yidx[-1] 

      lons = lons[xstart:xend]
      lats = lats[ystart:yend]
      topo_data = etopodata['elevation'][ystart:yend,xstart:xend]
      lonsgrid,latsgrid = np.meshgrid(lons,lats)
      topo_data = self.transform_scalar(topo_data,lons,lats,nx,ny,order=3,masked=True)
      intensity = hillshade(topo_data,scale=10.0,azdeg=300.0,altdeg=45.0)
      etopodata.close() 
      rgb = set_shade(data,intensity=intensity,cmap=cmap)
      return self.imshow(rgb,cmap=cmap,**kwargs)
  


    else:    
      return self.imshow(data,cmap=cmap,**kwargs)