<p>My ansatz for what <code>cyl</code> means is likely Equidistant Cylindrical Projection, because <a href="https://matplotlib.org/basemap/users/cyl.html" rel="nofollow noreferrer">in the older Basemap module, <code>'cyl'</code> was the shortname for that projection</a>.</p>
<p>But the reality is that since the GFS is a global spectral model with a latitude-longitude grid, it likely does not require a CRS. That is, it presupposes a sphere, where a CRS projects the spherical coordinates (latitude, longitude) onto a shape (such as a cone).</p>

CC BY-SA 4.0
2020-06-25T17:57:20.640Z
@gansub Yes, but a spectral model just describes how a model is solved, not necessarily the CRS of the model. Although it is easier to on a global latitude/longitude grid, there are a few regional spectral models, such as the RSM or ALADIN which use Fourier and/or Legendre transforms. The latter of those models, for example, uses a Mercator or Lambert Conformal projection (https://www.umr-cnrm.fr/gmapdoc/IMG/pdf/ykarpbasics46t1r1.pdf)
BarocliniCplusplus
CC BY-SA 4.0
2020-06-26T18:37:18.560Z
@BaroncliniCplussplus So my Proj string should be `"+proj='eqc' +R=6371229"` where eqc is _Equidistant Cylindrical (Plate Carrée)_ and R is the radius of the sphere (the given `a` and `b`, the major and minor axis of the underlying ellipse, are equal)?
Lance Berc
CC BY-SA 4.0
2020-06-26T19:15:18.450Z
@LanceBerc If that is what you want, sure. But the choice of projection is moot. A CRS tries to project a field on a sphere as if it were on a geometrical object, say a cylinder. The projection of the map matters if the model has a projection. But since the GFS doesn't have a projection, then really no projection matters. It is entirely your choice.

All of this to say, for the GFS, your choice in map will only alter what the map looks like, not how the data looks on the map.
BarocliniCplusplus
CC BY-SA 4.0
2020-06-26T21:29:33.310Z
@BarocliniCplusplus I see what you mean. But since I'm using  pyproj.Transformer.from_crs() to transform Lon/Lat to x/y it wants a source CRS; Plate Carrée seems to be a good choice. Thank you.
Lance Berc
CC BY-SA 4.0
2020-06-24T20:03:52.283Z
2020-06-26T07:55:10.267Z
2020-06-26T07:55:10.267Z
BarocliniCplusplus
<p>I'm trying to reproject GRIB data from NOAA forecasts onto other data using Python and the pygrib and proj packages (among many others). What is the proper Proj string for GFS GRIBs?</p>

<p>The projection should come from the GRIB file and I assumed GFS uses Mercator, but pygrib <code>grib.projparams()</code> returns
<code>{'a': 6371229, 'b': 6371229, 'proj': 'cyl'}</code>. 'cyl' is not a legal proj CRS and other cylindrical projections (Central Cylindrical, Plate Carree) don't have a or b parameters. I assume that a &amp; b are defining the earth as a sphere with radius 6371229m.</p>

<p><code>grib.projparams()</code> with an HRRR GRIB returns
<code>{'a': 6371229, 'b': 6371229, 'proj': 'lcc', 'lon_0': 262.5, 'lat_0': 38.5, 'lat_1': 38.5, 'lat_2': 38.5}</code></p>

<p>which is perfectly legal in the eyes of Proj and reprojects data accurately.</p>

<meteorology><python><gfs>
What CRS does GFS use?
Lance Berc
# What CRS does GFS use?

(Asked by: username_0 on 2020-06-18)

I'm trying to reproject GRIB data from NOAA forecasts onto other data using Python and the pygrib and proj packages (among many others). What is the proper Proj string for GFS GRIBs?

The projection should come from the GRIB file and I assumed GFS uses Mercator, but pygrib `grib.projparams()` returns
`{'a': 6371229, 'b': 6371229, 'proj': 'cyl'}`. 'cyl' is not a legal proj CRS and other cylindrical projections (Central Cylindrical, Plate Carree) don't have a or b parameters. I assume that a & b are defining the earth as a sphere with radius 6371229m.

`grib.projparams()` with an HRRR GRIB returns
`{'a': 6371229, 'b': 6371229, 'proj': 'lcc', 'lon_0': 262.5, 'lat_0': 38.5, 'lat_1': 38.5, 'lat_2': 38.5}`

which is perfectly legal in the eyes of Proj and reprojects data accurately.

**Tags:** meteorology, python, gfs


---

## 1 answers

### Answer by username_1 on 2020-06-24. Score: 3 | Accepted answer

My ansatz for what `cyl` means is likely Equidistant Cylindrical Projection, because [in the older Basemap module, `'cyl'` was the shortname for that projection](https://matplotlib.org/basemap/users/cyl.html).

But the reality is that since the GFS is a global spectral model with a latitude-longitude grid, it likely does not require a CRS. That is, it presupposes a sphere, where a CRS projects the spherical coordinates (latitude, longitude) onto a shape (such as a cone).

> **Comments:**
> **username_1**: @gansub Yes, but a spectral model just describes how a model is solved, not necessarily the CRS of the model. Although it is easier to on a global latitude/longitude grid, there are a few regional spectral models, such as the RSM or ALADIN which use Fourier and/or Legendre transforms. The latter of those models, for example, uses a Mercator or Lambert Conformal projection (https://www.umr-cnrm.fr/gmapdoc/IMG/pdf/ykarpbasics46t1r1.pdf)  
> **username_0**: @BaroncliniCplussplus So my Proj string should be `"+proj='eqc' +R=6371229"` where eqc is _Equidistant Cylindrical (Plate Carrée)_ and R is the radius of the sphere (the given `a` and `b`, the major and minor axis of the underlying ellipse, are equal)?  
> **username_1**: @username_0 If that is what you want, sure. But the choice of projection is moot. A CRS tries to project a field on a sphere as if it were on a geometrical object, say a cylinder. The projection of the map matters if the model has a projection. But since the GFS doesn't have a projection, then really no projection matters. It is entirely your choice.  All of this to say, for the GFS, your choice in map will only alter what the map looks like, not how the data looks on the map.  
> **username_0**: @username_1 I see what you mean. But since I'm using  pyproj.Transformer.from_crs() to transform Lon/Lat to x/y it wants a source CRS; Plate Carrée seems to be a good choice. Thank you.  

---

