code: def woa_track_from_file(d, lat, lon, filename, varnames=None):
      
      d = np.asanyarray(d)
      lat = np.asanyarray(lat)
      lon = np.asanyarray(lon)
  
      lon[lon < 0] += 360
  
      doy = np.array([int(dd.strftime('%j')) for dd in d])
  
      nc = netCDF4.Dataset(expanduser(filename), 'r')
  
      if varnames is None:
          varnames = {}
          for v in nc.variables.keys():
              if nc.variables[v].dimensions == \
                      (u'time', u'depth', u'lat', u'lon'):
                          varnames[v] = v
  
      output = {}
      for v in varnames:
          output[v] = []
  
      for d_n, lat_n, lon_n in zip(doy, lat, lon):
          # Get the nearest point. In the future interpolate.
          n_d = (np.abs(d_n - nc.variables['time'][:])).argmin()
          n_x = (np.abs(lon_n - nc.variables['lon'][:])).argmin()
          n_y = (np.abs(lat_n - nc.variables['lat'][:])).argmin()
  
          for v in varnames:
              output[v].append(nc.variables[varnames[v]][n_d, 0, n_y, n_x])
  
      for v in varnames:
          output[v] = ma.fix_invalid(output[v])
  
      return output
docs: Temporary solution: WOA for surface track