summaryrefslogtreecommitdiffstats
path: root/krebs/5pkgs/simple/nomads-cloud/default.nix
blob: 9c39de891b167401b5cda7e5e972ca9f2883e1da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{ writers, coreutils, grib2json, curl, jq, findutils, imagemagick }:
writers.writeDashBin "nomads-cloud" ''
  prefix=$(mktemp -d)
  grib_path=$prefix.grib
  json_path=$prefix.json
  pgm_path=$prefix.pgm
  png_path="$1"

  mkdir -p "$prefix"

  date=$(${coreutils}/bin/date +%Y%m%d)
  for hour in 18 12 06 00; do
    url="https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25_1hr.pl?file=gfs.t''${hour}z.pgrb2.0p25.anl&lev_entire_atmosphere_%5C%28considered_as_a_single_layer%5C%29=on&var_CWAT=on&leftlon=-180&rightlon=180&toplat=90&bottomlat=-90&dir=%2Fgfs.$date%2F$hour"
    ${curl}/bin/curl -fsS "$url" > "$grib_path"
    if [ "$?" -eq 0 ]; then
      break
    fi
  done
  ${grib2json}/bin/grib2json --data "$grib_path" > "$json_path"

  width=$(${jq}/bin/jq '.[0].header.nx' < "$json_path")
  height=$(${jq}/bin/jq '.[0].header.ny' < "$json_path")

  # The maximum gray value.  Must be bigger than 0 and less than 65536.
  maxval=1000

  # pgm - Netpbm grayscale image format
  # http://netpbm.sourceforge.net/doc/pgm.html
  {
    echo P2
    echo "$width $height"
    echo "$maxval"
    cat "$json_path" |
    ${jq}/bin/jq --argjson maxval "$maxval" -c '
      ((.[0].data[] | sqrt | sqrt) * $maxval | round)
    ' |
    ${findutils}/bin/xargs -n "$width"
  } > "$pgm_path"

  ${imagemagick}/bin/convert -roll +50% "$pgm_path" "$png_path"

  rm -r "$prefix"
''