{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 📃 Inventory\n",
"\n",
"Ideally, GRIB2 files have a companion \"index\" file that are a plain ASCII text file that provides some details about the contents of each file (i.e., what each GRIB message contains). These files can tell you the variable represented in the GRIB message, the level, forecast lead time, and the starting byte range in the file.\n",
"\n",
"There are two \"flavors\" of index files, wgrib-style and eccodes-style.\n",
"\n",
"NCEP models provide the wgrib-style index files while ECMWF models provide the eccodes-style index file.\n",
"\n",
"Herbie provides a parser to read the index file into a Pandas DataFrame and calls it the file's **inventory**.\n",
"\n",
"Let's start by looking at the inventory for a HRRR file.\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from herbie import Herbie"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"✅ Found ┊ model=hrrr ┊ \u001b[3mproduct=sfc\u001b[0m ┊ \u001b[38;2;41;130;13m2024-Jan-01 00:00 UTC\u001b[92m F00\u001b[0m ┊ \u001b[38;2;255;153;0m\u001b[3mGRIB2 @ aws\u001b[0m ┊ \u001b[38;2;255;153;0m\u001b[3mIDX @ aws\u001b[0m\n"
]
},
{
"data": {
"text/plain": [
"\u001b[48;2;255;255;255m\u001b[38;2;136;33;27m▌\u001b[0m\u001b[38;2;12;53;118m\u001b[48;2;240;234;210m▌\u001b[38;2;0;0;0m\u001b[1mHerbie\u001b[0m HRRR model \u001b[3msfc\u001b[0m product initialized \u001b[38;2;41;130;13m2024-Jan-01 00:00 UTC\u001b[92m F00\u001b[0m ┊ \u001b[38;2;255;153;0m\u001b[3msource=aws\u001b[0m"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"H = Herbie(\"2024-01-01\", model=\"hrrr\")\n",
"H"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The path of the relevant index file is given by `H.idx`. You can go to that URL and see what the raw index file looks like.\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'https://noaa-hrrr-bdp-pds.s3.amazonaws.com/hrrr.20240101/conus/hrrr.t00z.wrfsfcf00.grib2.idx'"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"H.idx"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Herbie parses the raw index file as a Pandas DataFrame using `H.inventory()`\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
grib_message
\n",
"
start_byte
\n",
"
end_byte
\n",
"
range
\n",
"
reference_time
\n",
"
valid_time
\n",
"
variable
\n",
"
level
\n",
"
forecast_time
\n",
"
search_this
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
0
\n",
"
202809.0
\n",
"
0-202809
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
REFC
\n",
"
entire atmosphere
\n",
"
anl
\n",
"
:REFC:entire atmosphere:anl
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
202810
\n",
"
246792.0
\n",
"
202810-246792
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
RETOP
\n",
"
cloud top
\n",
"
anl
\n",
"
:RETOP:cloud top:anl
\n",
"
\n",
"
\n",
"
2
\n",
"
3
\n",
"
246793
\n",
"
496145.0
\n",
"
246793-496145
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
var discipline=0 center=7 local_table=1 parmca...
\n",
"
entire atmosphere
\n",
"
anl
\n",
"
:var discipline=0 center=7 local_table=1 parmc...
\n",
"
\n",
"
\n",
"
3
\n",
"
4
\n",
"
496146
\n",
"
649032.0
\n",
"
496146-649032
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
VIL
\n",
"
entire atmosphere
\n",
"
anl
\n",
"
:VIL:entire atmosphere:anl
\n",
"
\n",
"
\n",
"
4
\n",
"
5
\n",
"
649033
\n",
"
2038336.0
\n",
"
649033-2038336
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
VIS
\n",
"
surface
\n",
"
anl
\n",
"
:VIS:surface:anl
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
165
\n",
"
166
\n",
"
126776108
\n",
"
126785469.0
\n",
"
126776108-126785469
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
ICEC
\n",
"
surface
\n",
"
anl
\n",
"
:ICEC:surface:anl
\n",
"
\n",
"
\n",
"
166
\n",
"
167
\n",
"
126785470
\n",
"
128189723.0
\n",
"
126785470-128189723
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
SBT123
\n",
"
top of atmosphere
\n",
"
anl
\n",
"
:SBT123:top of atmosphere:anl
\n",
"
\n",
"
\n",
"
167
\n",
"
168
\n",
"
128189724
\n",
"
130514441.0
\n",
"
128189724-130514441
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
SBT124
\n",
"
top of atmosphere
\n",
"
anl
\n",
"
:SBT124:top of atmosphere:anl
\n",
"
\n",
"
\n",
"
168
\n",
"
169
\n",
"
130514442
\n",
"
131785130.0
\n",
"
130514442-131785130
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
SBT113
\n",
"
top of atmosphere
\n",
"
anl
\n",
"
:SBT113:top of atmosphere:anl
\n",
"
\n",
"
\n",
"
169
\n",
"
170
\n",
"
131785131
\n",
"
NaN
\n",
"
131785131-
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
SBT114
\n",
"
top of atmosphere
\n",
"
anl
\n",
"
:SBT114:top of atmosphere:anl
\n",
"
\n",
" \n",
"
\n",
"
170 rows × 10 columns
\n",
"
"
],
"text/plain": [
" grib_message start_byte end_byte range \\\n",
"0 1 0 202809.0 0-202809 \n",
"1 2 202810 246792.0 202810-246792 \n",
"2 3 246793 496145.0 246793-496145 \n",
"3 4 496146 649032.0 496146-649032 \n",
"4 5 649033 2038336.0 649033-2038336 \n",
".. ... ... ... ... \n",
"165 166 126776108 126785469.0 126776108-126785469 \n",
"166 167 126785470 128189723.0 126785470-128189723 \n",
"167 168 128189724 130514441.0 128189724-130514441 \n",
"168 169 130514442 131785130.0 130514442-131785130 \n",
"169 170 131785131 NaN 131785131- \n",
"\n",
" reference_time valid_time \\\n",
"0 2024-01-01 2024-01-01 \n",
"1 2024-01-01 2024-01-01 \n",
"2 2024-01-01 2024-01-01 \n",
"3 2024-01-01 2024-01-01 \n",
"4 2024-01-01 2024-01-01 \n",
".. ... ... \n",
"165 2024-01-01 2024-01-01 \n",
"166 2024-01-01 2024-01-01 \n",
"167 2024-01-01 2024-01-01 \n",
"168 2024-01-01 2024-01-01 \n",
"169 2024-01-01 2024-01-01 \n",
"\n",
" variable level \\\n",
"0 REFC entire atmosphere \n",
"1 RETOP cloud top \n",
"2 var discipline=0 center=7 local_table=1 parmca... entire atmosphere \n",
"3 VIL entire atmosphere \n",
"4 VIS surface \n",
".. ... ... \n",
"165 ICEC surface \n",
"166 SBT123 top of atmosphere \n",
"167 SBT124 top of atmosphere \n",
"168 SBT113 top of atmosphere \n",
"169 SBT114 top of atmosphere \n",
"\n",
" forecast_time search_this \n",
"0 anl :REFC:entire atmosphere:anl \n",
"1 anl :RETOP:cloud top:anl \n",
"2 anl :var discipline=0 center=7 local_table=1 parmc... \n",
"3 anl :VIL:entire atmosphere:anl \n",
"4 anl :VIS:surface:anl \n",
".. ... ... \n",
"165 anl :ICEC:surface:anl \n",
"166 anl :SBT123:top of atmosphere:anl \n",
"167 anl :SBT124:top of atmosphere:anl \n",
"168 anl :SBT113:top of atmosphere:anl \n",
"169 anl :SBT114:top of atmosphere:anl \n",
"\n",
"[170 rows x 10 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"H.inventory()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notice the `search_this` column; that is a column that Herbie can do regular expression searches to filter the GRIB messages you want. For example, if you want all the variables at 500 mb...\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
grib_message
\n",
"
start_byte
\n",
"
end_byte
\n",
"
range
\n",
"
reference_time
\n",
"
valid_time
\n",
"
variable
\n",
"
level
\n",
"
forecast_time
\n",
"
search_this
\n",
"
\n",
" \n",
" \n",
"
\n",
"
13
\n",
"
14
\n",
"
6299332
\n",
"
7003497.0
\n",
"
6299332-7003497
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
HGT
\n",
"
500 mb
\n",
"
anl
\n",
"
:HGT:500 mb:anl
\n",
"
\n",
"
\n",
"
14
\n",
"
15
\n",
"
7003498
\n",
"
7550668.0
\n",
"
7003498-7550668
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
TMP
\n",
"
500 mb
\n",
"
anl
\n",
"
:TMP:500 mb:anl
\n",
"
\n",
"
\n",
"
15
\n",
"
16
\n",
"
7550669
\n",
"
8417238.0
\n",
"
7550669-8417238
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
DPT
\n",
"
500 mb
\n",
"
anl
\n",
"
:DPT:500 mb:anl
\n",
"
\n",
"
\n",
"
16
\n",
"
17
\n",
"
8417239
\n",
"
8997799.0
\n",
"
8417239-8997799
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
UGRD
\n",
"
500 mb
\n",
"
anl
\n",
"
:UGRD:500 mb:anl
\n",
"
\n",
"
\n",
"
17
\n",
"
18
\n",
"
8997800
\n",
"
9584981.0
\n",
"
8997800-9584981
\n",
"
2024-01-01
\n",
"
2024-01-01
\n",
"
VGRD
\n",
"
500 mb
\n",
"
anl
\n",
"
:VGRD:500 mb:anl
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" grib_message start_byte end_byte range reference_time \\\n",
"13 14 6299332 7003497.0 6299332-7003497 2024-01-01 \n",
"14 15 7003498 7550668.0 7003498-7550668 2024-01-01 \n",
"15 16 7550669 8417238.0 7550669-8417238 2024-01-01 \n",
"16 17 8417239 8997799.0 8417239-8997799 2024-01-01 \n",
"17 18 8997800 9584981.0 8997800-9584981 2024-01-01 \n",
"\n",
" valid_time variable level forecast_time search_this \n",
"13 2024-01-01 HGT 500 mb anl :HGT:500 mb:anl \n",
"14 2024-01-01 TMP 500 mb anl :TMP:500 mb:anl \n",
"15 2024-01-01 DPT 500 mb anl :DPT:500 mb:anl \n",
"16 2024-01-01 UGRD 500 mb anl :UGRD:500 mb:anl \n",
"17 2024-01-01 VGRD 500 mb anl :VGRD:500 mb:anl "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"H.inventory(\":500 mb\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notice that only the rows that contain 500 mb are selected. This is useful when you want to download a subset of variables from the GRIB file. Notice the `range` column which tells us the byte range of each variable in the file. Herbie will use this byte range when you request downloading only the selected variables or opening it in xarray.\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"📇 Download subset: \u001b[48;2;255;255;255m\u001b[38;2;136;33;27m▌\u001b[0m\u001b[38;2;12;53;118m\u001b[48;2;240;234;210m▌\u001b[38;2;0;0;0m\u001b[1mHerbie\u001b[0m HRRR model \u001b[3msfc\u001b[0m product initialized \u001b[38;2;41;130;13m2024-Jan-01 00:00 UTC\u001b[92m F00\u001b[0m ┊ \u001b[38;2;255;153;0m\u001b[3msource=aws\u001b[0m \n",
" cURL from https://noaa-hrrr-bdp-pds.s3.amazonaws.com/hrrr.20240101/conus/hrrr.t00z.wrfsfcf00.grib2\n",
"Found \u001b[1m\u001b[38;2;41;130;13m5\u001b[0m grib messages.\n",
"Download subset group 1\n",
" 14 \u001b[38;2;255;153;0m:HGT:500 mb:anl\u001b[0m\n",
" 15 \u001b[38;2;255;153;0m:TMP:500 mb:anl\u001b[0m\n",
" 16 \u001b[38;2;255;153;0m:DPT:500 mb:anl\u001b[0m\n",
" 17 \u001b[38;2;255;153;0m:UGRD:500 mb:anl\u001b[0m\n",
" 18 \u001b[38;2;255;153;0m:VGRD:500 mb:anl\u001b[0m\n",
"curl -s --range 6299332-9584981 \"https://noaa-hrrr-bdp-pds.s3.amazonaws.com/hrrr.20240101/conus/hrrr.t00z.wrfsfcf00.grib2\" > \"/home/blaylock/data/hrrr/20240101/subset_6befbe61__hrrr.t00z.wrfsfcf00.grib2\"\n",
"💾 Saved the subset to /home/blaylock/data/hrrr/20240101/subset_6befbe61__hrrr.t00z.wrfsfcf00.grib2\n"
]
},
{
"data": {
"text/plain": [
"PosixPath('/home/blaylock/data/hrrr/20240101/subset_6befbe61__hrrr.t00z.wrfsfcf00.grib2')"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"H.download(\":500 mb\", verbose=True, overwrite=True)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/blaylock/GITHUB/Herbie/herbie/core.py:1088: UserWarning: Will not remove GRIB file because it previously existed.\n",
" warnings.warn(\"Will not remove GRIB file because it previously existed.\")\n"
]
},
{
"data": {
"text/html": [
"
Lambert Conformal can be secant or tangent, conical or bipolar
GRIB_iScansNegatively :
0
GRIB_jPointsAreConsecutive :
0
GRIB_jScansPositively :
1
GRIB_latitudeOfFirstGridPointInDegrees :
21.138123
GRIB_latitudeOfSouthernPoleInDegrees :
0.0
GRIB_longitudeOfFirstGridPointInDegrees :
237.280472
GRIB_longitudeOfSouthernPoleInDegrees :
0.0
GRIB_missingValue :
3.4028234663852886e+38
GRIB_name :
Temperature
GRIB_parameterName :
Temperature
GRIB_parameterUnits :
K
GRIB_shortName :
t
GRIB_stepRange :
0
GRIB_units :
K
long_name :
Temperature
units :
K
standard_name :
air_temperature
grid_mapping :
gribfile_projection
[1905141 values with dtype=float32]
u
(y, x)
float32
...
GRIB_paramId :
131
GRIB_dataType :
fc
GRIB_numberOfPoints :
1905141
GRIB_typeOfLevel :
isobaricInhPa
GRIB_stepUnits :
1
GRIB_stepType :
instant
GRIB_gridType :
lambert
GRIB_DxInMetres :
3000.0
GRIB_DyInMetres :
3000.0
GRIB_LaDInDegrees :
38.5
GRIB_Latin1InDegrees :
38.5
GRIB_Latin2InDegrees :
38.5
GRIB_LoVInDegrees :
262.5
GRIB_NV :
0
GRIB_Nx :
1799
GRIB_Ny :
1059
GRIB_cfName :
eastward_wind
GRIB_cfVarName :
u
GRIB_gridDefinitionDescription :
Lambert Conformal can be secant or tangent, conical or bipolar
GRIB_iScansNegatively :
0
GRIB_jPointsAreConsecutive :
0
GRIB_jScansPositively :
1
GRIB_latitudeOfFirstGridPointInDegrees :
21.138123
GRIB_latitudeOfSouthernPoleInDegrees :
0.0
GRIB_longitudeOfFirstGridPointInDegrees :
237.280472
GRIB_longitudeOfSouthernPoleInDegrees :
0.0
GRIB_missingValue :
3.4028234663852886e+38
GRIB_name :
U component of wind
GRIB_parameterName :
u-component of wind
GRIB_parameterUnits :
m s-1
GRIB_shortName :
u
GRIB_stepRange :
0
GRIB_units :
m s**-1
long_name :
U component of wind
units :
m s**-1
standard_name :
eastward_wind
grid_mapping :
gribfile_projection
[1905141 values with dtype=float32]
v
(y, x)
float32
...
GRIB_paramId :
132
GRIB_dataType :
fc
GRIB_numberOfPoints :
1905141
GRIB_typeOfLevel :
isobaricInhPa
GRIB_stepUnits :
1
GRIB_stepType :
instant
GRIB_gridType :
lambert
GRIB_DxInMetres :
3000.0
GRIB_DyInMetres :
3000.0
GRIB_LaDInDegrees :
38.5
GRIB_Latin1InDegrees :
38.5
GRIB_Latin2InDegrees :
38.5
GRIB_LoVInDegrees :
262.5
GRIB_NV :
0
GRIB_Nx :
1799
GRIB_Ny :
1059
GRIB_cfName :
northward_wind
GRIB_cfVarName :
v
GRIB_gridDefinitionDescription :
Lambert Conformal can be secant or tangent, conical or bipolar
GRIB_iScansNegatively :
0
GRIB_jPointsAreConsecutive :
0
GRIB_jScansPositively :
1
GRIB_latitudeOfFirstGridPointInDegrees :
21.138123
GRIB_latitudeOfSouthernPoleInDegrees :
0.0
GRIB_longitudeOfFirstGridPointInDegrees :
237.280472
GRIB_longitudeOfSouthernPoleInDegrees :
0.0
GRIB_missingValue :
3.4028234663852886e+38
GRIB_name :
V component of wind
GRIB_parameterName :
v-component of wind
GRIB_parameterUnits :
m s-1
GRIB_shortName :
v
GRIB_stepRange :
0
GRIB_units :
m s**-1
long_name :
V component of wind
units :
m s**-1
standard_name :
northward_wind
grid_mapping :
gribfile_projection
[1905141 values with dtype=float32]
gh
(y, x)
float32
...
GRIB_paramId :
156
GRIB_dataType :
fc
GRIB_numberOfPoints :
1905141
GRIB_typeOfLevel :
isobaricInhPa
GRIB_stepUnits :
1
GRIB_stepType :
instant
GRIB_gridType :
lambert
GRIB_DxInMetres :
3000.0
GRIB_DyInMetres :
3000.0
GRIB_LaDInDegrees :
38.5
GRIB_Latin1InDegrees :
38.5
GRIB_Latin2InDegrees :
38.5
GRIB_LoVInDegrees :
262.5
GRIB_NV :
0
GRIB_Nx :
1799
GRIB_Ny :
1059
GRIB_cfName :
geopotential_height
GRIB_cfVarName :
gh
GRIB_gridDefinitionDescription :
Lambert Conformal can be secant or tangent, conical or bipolar
GRIB_iScansNegatively :
0
GRIB_jPointsAreConsecutive :
0
GRIB_jScansPositively :
1
GRIB_latitudeOfFirstGridPointInDegrees :
21.138123
GRIB_latitudeOfSouthernPoleInDegrees :
0.0
GRIB_longitudeOfFirstGridPointInDegrees :
237.280472
GRIB_longitudeOfSouthernPoleInDegrees :
0.0
GRIB_missingValue :
3.4028234663852886e+38
GRIB_name :
Geopotential height
GRIB_parameterName :
Geopotential height
GRIB_parameterUnits :
gpm
GRIB_shortName :
gh
GRIB_stepRange :
0
GRIB_units :
gpm
long_name :
Geopotential height
units :
gpm
standard_name :
geopotential_height
grid_mapping :
gribfile_projection
[1905141 values with dtype=float32]
dpt
(y, x)
float32
...
GRIB_paramId :
3017
GRIB_dataType :
fc
GRIB_numberOfPoints :
1905141
GRIB_typeOfLevel :
isobaricInhPa
GRIB_stepUnits :
1
GRIB_stepType :
instant
GRIB_gridType :
lambert
GRIB_DxInMetres :
3000.0
GRIB_DyInMetres :
3000.0
GRIB_LaDInDegrees :
38.5
GRIB_Latin1InDegrees :
38.5
GRIB_Latin2InDegrees :
38.5
GRIB_LoVInDegrees :
262.5
GRIB_NV :
0
GRIB_Nx :
1799
GRIB_Ny :
1059
GRIB_cfName :
unknown
GRIB_cfVarName :
dpt
GRIB_gridDefinitionDescription :
Lambert Conformal can be secant or tangent, conical or bipolar
GRIB_iScansNegatively :
0
GRIB_jPointsAreConsecutive :
0
GRIB_jScansPositively :
1
GRIB_latitudeOfFirstGridPointInDegrees :
21.138123
GRIB_latitudeOfSouthernPoleInDegrees :
0.0
GRIB_longitudeOfFirstGridPointInDegrees :
237.280472
GRIB_longitudeOfSouthernPoleInDegrees :
0.0
GRIB_missingValue :
3.4028234663852886e+38
GRIB_name :
Dew point temperature
GRIB_parameterName :
Dew point temperature
GRIB_parameterUnits :
K
GRIB_shortName :
dpt
GRIB_stepRange :
0
GRIB_units :
K
long_name :
Dew point temperature
units :
K
standard_name :
unknown
grid_mapping :
gribfile_projection
[1905141 values with dtype=float32]
gribfile_projection
()
object
None
crs_wkt :
PROJCRS["unknown",BASEGEOGCRS["unknown",DATUM["unknown",ELLIPSOID["unknown",6371229,0,LENGTHUNIT["metre",1,ID["EPSG",9001]]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8901]]],CONVERSION["unknown",METHOD["Lambert Conic Conformal (2SP)",ID["EPSG",9802]],PARAMETER["Latitude of false origin",38.5,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8821]],PARAMETER["Longitude of false origin",262.5,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8822]],PARAMETER["Latitude of 1st standard parallel",38.5,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8823]],PARAMETER["Latitude of 2nd standard parallel",38.5,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8824]],PARAMETER["Easting at false origin",0,LENGTHUNIT["metre",1],ID["EPSG",8826]],PARAMETER["Northing at false origin",0,LENGTHUNIT["metre",1],ID["EPSG",8827]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1,ID["EPSG",9001]]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1,ID["EPSG",9001]]]]