docs: def create_sky_plot(observation_table, outfile):
      """Given a VOTable that describes the observation coverage provide a PDF of the skycoverge.
  
      observation_table: vostable.arrary
      outfile: name of file to write results to.
      """
  
      # camera dimensions
      width = 0.98
      height = 0.98
      ax = None
  
      if outfile[0:4] == 'vos:':
          temp_file = tempfile.NamedTemporaryFile(suffix='.pdf')
          pdf = PdfPages(temp_file.name)
      else:
          pdf = PdfPages(outfile)
  
      saturn = ephem.Saturn()
      uranus = ephem.Uranus()
  
      t2 = None
      fig = None
      proposal_id = None
      limits = {'13A': (245, 200, -20, 0),
                '13B': (0, 45, 0, 20)}
      for row in reversed(observation_table.data):
          date = ephem.date(row.StartDate + 2400000.5 - ephem.julian_date(ephem.date(0)))
          str_date = str(date)
          # Saturn only a problem in 2013A fields
          saturn.compute(date)
          sra = math.degrees(saturn.ra)
          sdec = math.degrees(saturn.dec)
          uranus.compute(date)
          ura = math.degrees(uranus.ra)
          udec = math.degrees(uranus.dec)
          t1 = time.strptime(str_date, "%Y/%m/%d %H:%M:%S")
          if t2 is None or (math.fabs(time.mktime(t2) - time.mktime(
                  t1)) > 3 * 3600.0 and opt.stack) or proposal_id is None or proposal_id != row.ProposalID:
              if fig is not None:
                  pdf.savefig()
                  close()
              proposal_id = row.ProposalID
              fig = figure(figsize=(7, 2))
              ax = fig.add_subplot(111, aspect='equal')
              ax.set_title("Data taken on %s-%s-%s" % (t1.tm_year, t1.tm_mon, t1.tm_mday), fontdict={'fontsize': 8})
              ax.axis(limits.get(row.ProposalID[0:3], (0, 20, 0, 20)))  # appropriate only for 2013A fields
              ax.grid()
              ax.set_xlabel("RA (deg)", fontdict={'fontsize': 8})
              ax.set_ylabel("DEC (deg)", fontdict={'fontsize': 8})
          t2 = t1
          ra = row.RA - width / 2.0
          dec = row.DEC - height / 2.0
          color = 'b'
          if 'W' in row['TargetName']:
              color = 'g'
          ax.add_artist(Rectangle(xy=(ra, dec), height=height, width=width,
                                  edgecolor=color, facecolor=color,
                                  lw=0.5, fill='g', alpha=0.33))
          ax.add_artist(Rectangle(xy=(sra, sdec), height=0.3, width=0.3,
                                  edgecolor='r',
                                  facecolor='r',
                                  lw=0.5, fill='k', alpha=0.33))
          ax.add_artist(Rectangle(xy=(ura, udec), height=0.3, width=0.3,
                                  edgecolor='b',
                                  facecolor='b',
                                  lw=0.5, fill='b', alpha=0.33))
  
      if ax is not None:
          ax.axis((270, 215, -20, 0))
          pdf.savefig()
          close()
      pdf.close()
      if outfile[0:4] == "vos:":
          storage.copy(pdf.name, outfile)
          pdf.close()
  
      return