python-awips/examples/notebooks/CRS.ipynb

766 lines
277 KiB
Text
Raw Normal View History

{
"cells": [
{
"cell_type": "code",
"execution_count": 51,
"id": "3fc72826-ccd5-4ec9-bb24-2bcf0ae6be62",
"metadata": {},
"outputs": [],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"import cartopy.crs as ccrs\n",
"import matplotlib.pyplot as plt\n",
"from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER\n",
"from scipy.constants import convert_temperature\n",
"\n",
"import xarray as xr\n",
"\n",
"from pyproj import CRS\n",
"import numpy as np\n",
"from pyproj import Transformer, transform\n",
"import pyproj\n",
"\n",
"import cartopy.feature as cfeature"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "dad676d3-397a-4951-a2f0-afbbf2d13525",
"metadata": {},
"outputs": [],
"source": [
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\") #access URL\n",
"request = DataAccessLayer.newDataRequest() # make request from created URL\n",
"request.setDatatype(\"grid\") #filter to grid data\n",
"request.setLocationNames(\"RAP13\") #filter to specific location\n",
"request.setParameters(\"T\") #filter to parameter/variable\n",
"request.setLevels(\"2.0FHAG\") #filter to level"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "6ceba201-df5f-44f9-8738-bfa20f1266a0",
"metadata": {},
"outputs": [],
"source": [
"cycles = DataAccessLayer.getAvailableTimes(request, True) #(request = request from above, what data/etc. we want, True = only unique times returned, no forecast hour\n",
"times = DataAccessLayer.getAvailableTimes(request) #now gets forecast hours for request above\n",
"fcstRun = DataAccessLayer.getForecastRun(cycles[-1], times) \n",
"\n",
"# Get the most recent grid data\n",
"response = DataAccessLayer.getGridData(request, [fcstRun[0]])"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "6bd16724-028a-43c0-8e9a-110b6b44d225",
"metadata": {},
"outputs": [],
"source": [
"response; #output - [<awips.dataaccess.PyGridData.PyGridData at 0x1086612d0>]\n",
"request; #output - <dynamicserialize.dstypes.com.raytheon.uf.common.dataaccess.impl.DefaultDataRequest.DefaultDataRequest at 0x108cdf250>\n",
"grid = response[0] #output - <awips.dataaccess.PyGridData.PyGridData at 0x1086612d0>\n",
"grid.getUnit() #output = 'K'\n",
"data = grid.getRawData() #output = array with len 337\n",
"lons, lats = grid.getLatLonCoords() #output = array with len 337 for both\n",
" #first element is a numpy array of lons\n",
" #second element is a numpy array of lats\n",
" \n",
"\n",
"# Convert temp from Kelvin to F\n",
"destUnit = 'F'\n",
"data = convert_temperature(data, 'K', destUnit)"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "ec2e31fb-ca00-41ad-aa34-4464eff6c085",
"metadata": {},
"outputs": [],
"source": [
"x_da = xr.DataArray(x_coords)\n",
"y_da = xr.DataArray(y_coords)\n",
"temp_da = xr.DataArray(data)\n",
"\n",
"#data is dataset from original EDEX request/response"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "399f4bc1-310d-434b-b563-3c5d8f5f09e4",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=dark],\n",
"body[data-theme=dark],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1F1F1F;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: '►';\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: '▼';\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: '(';\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: ')';\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: ',';\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-index-name div,\n",
".xr-index-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt;\n",
"Dimensions: (longitude: 337, latitude: 451)\n",
"Dimensions without coordinates: longitude, latitude\n",
"Data variables:\n",
" x_data (longitude, latitude) float64 -2.434e+06 ... 3.369e+06\n",
" y_data (longitude, latitude) float64 1.838e+06 ... -2.117e+06\n",
" temperature (longitude, latitude) float32 55.94 56.05 56.16 ... 83.28 83.16</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-cf8786f8-3815-469e-8c26-a7f6374cb2e5' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-cf8786f8-3815-469e-8c26-a7f6374cb2e5' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span>longitude</span>: 337</li><li><span>latitude</span>: 451</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-e076de26-c533-436b-9dbc-3f3d1ded805e' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-e076de26-c533-436b-9dbc-3f3d1ded805e' class='xr-section-summary' title='Expand/collapse section'>Coordinates: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'></ul></div></li><li class='xr-section-item'><input id='section-56987784-fde8-4a16-ba4a-a4da448f7f9b' class='xr-section-summary-in' type='checkbox' checked><label for='section-56987784-fde8-4a16-ba4a-a4da448f7f9b' class='xr-section-summary' >Data variables: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>x_data</span></div><div class='xr-var-dims'>(longitude, latitude)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-2.434e+06 -2.423e+06 ... 3.369e+06</div><input id='attrs-2d1a51bc-18d3-4551-b8fd-0dcffd4c838e' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-2d1a51bc-18d3-4551-b8fd-0dcffd4c838e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-cb3786a9-c703-41b1-bbbe-d3d947bc9e13' class='xr-var-data-in' type='checkbox'><label for='data-cb3786a9-c703-41b1-bbbe-d3d947bc9e13' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([[-2434129.30178358, -2422895.34441651, -2411662.80689466, ...,\n",
" 2497176.23643654, 2508110.93941049, 2519045.89840363],\n",
" [-2435780.32150323, -2424537.02499791, -2413295.97961352, ...,\n",
" 2499746.90785058, 2510690.99669517, 2521635.11363849],\n",
" [-2437429.90941645, -2426177.48054365, -2414926.89691957, ...,\n",
" 2502317.10631892, 2513270.35466318, 2524224.01339727],\n",
" ...,\n",
" [-2898588.08008125, -2884504.98648952, -2870423.58282823, ...,\n",
" 3336164.52735428, 3349999.73772297, 3363834.84070762],\n",
" [-2899746.78429046, -2885655.95057819, -2871565.97941893, ...,\n",
" 3338635.45151778, 3352478.30048785, 3366321.82529415],\n",
" [-2900904.41486956, -2886805.8610453 , -2872707.40789084, ...,\n",
" 3341105.66197206, 3354956.91969539, 3368808.05530385]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>y_data</span></div><div class='xr-var-dims'>(longitude, latitude)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>1.838e+06 1.836e+06 ... -2.117e+06</div><input id='attrs-6a9cb2c3-f4e5-413b-a82c-b85cf2034ef4' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-6a9cb2c3-f4e5-413b-a82c-b85cf2034ef4' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-6e5011ef-fa35-419b-a0de-cde207ecfd53' class='xr-var-data-in' type='checkbox'><label for='data-6e5011ef-fa35-419b-a0de-cde207ecfd53' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([[ 1837508.06675591, 1835842.01853881, 1834184.62729606, ...,\n",
" 2039320.01283812, 2041912.71041342, 2044514.89353232],\n",
" [ 1826286.66777588, 1824622.17242162, 1822966.75279091, ...,\n",
" 2028398.20303457, 2030990.28927765, 2033592.20085799],\n",
" [ 1815056.66645204, 1813393.37318109, 1811739.86681311, ...,\n",
" 2017466.94409976, 2020058.7615332 , 2022660.13486104],\n",
" ...,\n",
" [-2386479.6115271 , -2387679.98981599, -2388871.865159 , ...,\n",
" -2094514.55159803, -2091994.28132141, -2089465.89671706],\n",
" [-2400492.56787745, -2401691.62709412, -2402882.46928865, ...,\n",
" -2108280.98926426, -2105761.03075308, -2103232.67404151],\n",
" [-2414513.15485266, -2415710.88498289, -2416900.89636676, ...,\n",
" -2122055.66257891, -2119535.72181056, -2117007.71231963]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>temperature</span></div><div class='xr-var-dims'>(longitude, latitude)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>55.94 56.05 56.16 ... 83.28 83.16</div><input id='attrs-11be7c41-aef9-4078-bf18-97ec008a1bde' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-11be7c41-aef9-4078-bf18-97ec008a1bde' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-0bcbf41a-91b8-4a3e-90aa-215605bc4d9f' class='xr-var-data-in' type='checkbox'><label for='data-0bcbf41a-91b8-4a3e-90aa-215605bc4d9f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([[55.93855, 56.05105, 56.16355, ..., 48.51355, 48.28855, 48.28855],\n",
" [55.82605, 55.93855, 56.05105, ..., 48.62605, 48.40105, 48.51355],\n",
" [55.60105, 55.71355, 55.82605, ..., 48.62605, 48.40105, 48.62605],\n",
" ...,\n",
" [75.28855, 75.40105, 75.51355, ..., 83.83855, 83.83855, 83.83855],\n",
" [75.40105, 75.62605, 75.73855, ..., 83.61355, 83.61355, 83.50105],\n",
" [75.62605, 75.85105, 75.96355, ..., 83.38855, 83.27605, 83.16355]],\n",
" dtype=float32)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-913845a9-1207-4cbf-beee-b5e38d969c35' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-913845a9-1207-4cbf-beee-b5e38d969c35' class='xr-section-summary' title='Expand/collapse section'>Indexes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'></ul></div></li><li class='xr-section-item'><input id='section-35ede637-048b-403f-a9f9-d132029b934a' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-35ede637-048b-403f-a9f9-d132029b934a' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.Dataset>\n",
"Dimensions: (longitude: 337, latitude: 451)\n",
"Dimensions without coordinates: longitude, latitude\n",
"Data variables:\n",
" x_data (longitude, latitude) float64 -2.434e+06 ... 3.369e+06\n",
" y_data (longitude, latitude) float64 1.838e+06 ... -2.117e+06\n",
" temperature (longitude, latitude) float32 55.94 56.05 56.16 ... 83.28 83.16"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_da.name = 'x_data'\n",
"y_da.name = 'y_data'\n",
"temp_da.name = 'temperature'\n",
"\n",
"merged_data = xr.merge([x_da, y_da, temp_da]).rename_dims({'dim_0':'longitude', 'dim_1': 'latitude'})\n",
"merged_data"
]
},
{
"cell_type": "markdown",
"id": "06165c78-efd3-4d41-b2ec-1aec5284e8b1",
"metadata": {
"tags": []
},
"source": [
"[CF Mapping Attributes](https://github.com/cf-convention/cf-conventions/wiki/Mapping-from-CF-Grid-Mapping-Attributes-to-CRS-WKT-Elements#table-4---specific-projection-parameter-names)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "db7d57ba-8261-44b3-a45c-8bf823bc1ad7",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"<Projected CRS: +proj=lcc +lat_0=25 +lon_0=-95 +lat_1=25 +x_0=0 +y ...>\n",
"Name: unknown\n",
"Axis Info [cartesian]:\n",
"- E[east]: Easting (metre)\n",
"- N[north]: Northing (metre)\n",
"Area of Use:\n",
"- undefined\n",
"Coordinate Operation:\n",
"- name: unknown\n",
"- method: Lambert Conic Conformal (1SP)\n",
"Datum: World Geodetic System 1984\n",
"- Ellipsoid: WGS 84\n",
"- Prime Meridian: Greenwich"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"awips_crs = CRS.from_proj4(\"+proj=lcc +lat_0=25 +lon_0=-95 +lat_1=25 +x_0=0 +y_0=0 +k_0=1 +datum=WGS84 +units=m +no_defs\")\n",
"awips_crs"
]
},
{
"cell_type": "raw",
"id": "ace4fac5-1dea-4af1-996d-9e02d21a2f22",
"metadata": {},
"source": [
"Projection Info from EDEX *Can't recreate in notebook\n",
"\n",
"PROJCS[\"Lambert Conformal (SP: 25.0/25.0, Origin: -95.0)\", +\n",
" GEOGCS[\"WGS84(DD)\", +\n",
" DATUM[\"WGS84\", +\n",
" SPHEROID[\"WGS84\", 6378137.0, 298.257223563]], +\n",
" PRIMEM[\"Greenwich\", 0.0], +\n",
" UNIT[\"degree\", 0.017453292519943295], +\n",
" AXIS[\"Geodetic longitude\", EAST], +\n",
" AXIS[\"Geodetic latitude\", NORTH]], +\n",
" PROJECTION[\"Lambert_Conformal_Conic_1SP\"], +\n",
" PARAMETER[\"semi_major\", 6371229.0], +\n",
" PARAMETER[\"semi_minor\", 6371229.0], +\n",
" PARAMETER[\"central_meridian\", -95.0], +\n",
" PARAMETER[\"latitude_of_origin\", 25.0], +\n",
" PARAMETER[\"scale_factor\", 1.0], +\n",
" PARAMETER[\"false_easting\", 0.0], +\n",
" PARAMETER[\"false_northing\", 0.0], +\n",
" UNIT[\"m\", 1.0], +\n",
" AXIS[\"Easting\", EAST], +\n",
" AXIS[\"Northing\", NORTH]]"
]
},
{
"cell_type": "markdown",
"id": "afce9459-4ec2-441e-bf13-758a85d54b81",
"metadata": {},
"source": [
"***"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "eee282b2-0746-4c48-9d0c-9c92c5b1cd14",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA5IAAAJjCAYAAAB+yC4aAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOyddZhUZfvHP2e6truXpRtBQsUOFLsLsQNbjNfuV8XAFuNnIQa2IvKCjYmgoHSz3Tmd5/fHMsvs7szuzOzM7iycz3Vx6Z455znPmTjn/j53CaIoikhISEhISEhISEhISEhIBImsrycgISEhISEhISEhISEh0b+QhKSEhISEhISEhISEhIRESEhCUkJCQkJCQkJCQkJCQiIkJCEpISEhISEhISEhISEhERKSkJSQkJCQkJCQkJCQkJAICUlISkhISEhISEhISEhISISEJCQlJCQkJCQkJCQkJCQkQkISkhISEhISEhISEhISEhIhIQlJCQkJCQkJCQkJCQkJiZCQhKSEhISEhISEhISEhIRESERESP7www/ceeedbNiwIRLDSUhISEhISEhISEhISMQwgiiKYk8GcLlcXHPNNbz22mvIZDLGjRvHgw8+yPTp0yM1x5Cw2Ww4HI4+ObeEhISEhISEhISEhEQg1Go1arW6r6cRERQ9HWD9+vWsXr2ad999l3PPPZfZs2dzxhlnMHXqVJYtWwaAKIoIgtDjyXaHzWZjwIABVFVVRf1cEhISEhISEhISEhISoWKz2fYKMdkjISmKIp999hn//vsvNpsNgLlz5/L444+zadOmtv0EQcDlcqFQ9Fi3donD4aCqqorS0lLi4+Ojeq5YYOfOncybN4/HH3+cqVOnotFomDt3LvPmzePKK69k3LhxIY338ccfU19fz8yZMznzzDOZOHEi9913X7t9Dj30UERRZOnSpXz55ZcsX74cuVzOc889F8Er23dYtWoViYmJDBo0qK+nIiHhl6qqKrZu3crUqVN7ZUEwFiguLuayyy5j2LBh/Pzzz5x22mmsWrWKc845h9NOOw2NRhPWuCaTiS+++ILFixfjcDjIy8tj7NixTJkyhWHDhkX4KvZu1q5dy7x58zj00EP55JNPOPfcc7nooos44ogj+PTTT3n00UeZMGEC8+fPRy6XM2HCBG644Yawz3f55Zdz1113UVhYGLmLkJDYTWVlJdu2bWPixImd7i/pXzS2+zuzRNXu73+v00dtXi+//DKpqamcccYZnV5zOBxYLBYSExOjdv7eRBRFVq9ejUwmY8CAASQkJETlPC0tLeTl5WG32/cKIdmj0FaLxcLSpUv5+eefWbZsGfHx8Tz11FMccMABbfv88ccfvPfee6xZs4bc3FwefvhhioqKIjL5jrS0tJCQkEBzc/M+ISTtdjvHHXccy5Yt4+eff+a+++7jkEMOITs7m6uvvjrk8cxmMzNmzOCzzz5j+vTpOJ1OFi1a1HZT++233zjnnHO4//77ueSSS5g2bRpXXXUVixYt4o033oj05e0TOJ1OPB7PXnEzkdg7KSsrY8eOHRxyyCF9PZVewW63U1RUhCAIfPXVV+y33368++67nHPOOchkkatPJ4oiJSUlrF69mh9++IHNmzdjMBgYOnQoF110EYMHD47YufZGFixYwNq1a9m8eTNvv/02Z555Jt988w1ffPEFAwYMYMyYMUyePJmjjjqKbdu2sWDBgrAXs7du3crDDz/M22+/HeGrkJBoxe1289tvv5GTk8PI1Uld7pu1q72Q3HFzdISk2WzmpJNOYtmyZcjl8vbn3LGDK664gpaWFt57771+uxhut9vZuXMn2dnZxMfH43A4UCqVUV003du0So9chDqdjlNPPZVTTjmF6upqrrjiCl555RWmTJmCIAgsX76ciy++GJ1Ox/XXX8+SJUuYPn06X3/9ddTE5L6EWq3miCOO4LfffuPwww9nzpw53H///WE/LPV6PaIoYrFYUKvVTJ8+nXnz5rFixQosFgtyuZzrrruO5ORkAD766CNOPPFE3G43Ho8nokbWvoJSqezrKUhIdElKSso+tdDxwAMPALBmzRpSU1PxeDxRMSoEQaCgoICCggJOOeUUAKxWK//++y+33XYbp59+OjNmzIj4efcWDj/8cIqLi3nwwQf5/PPPOeGEE9DpdLjdbn799VcmTZpERUUFt912W4+Nteeee46bbropQjOXkNiD9pM93sYio4HU9TsQUvdDFPrenpozZw433XRTOxFpNBoRBIHPP/+cKVOmkJCQQEVFRb8Tkk6nk5KSEsrLy5HL5aSmpgKgUqm6OVKiIxH5pgqCQGZmJtdeey3z589n165d2O12rr32WiZNmsQ333zD5Zdfzptvvkl8fLzkvYogJ5xwAl999RUAV199Nccff3yPckTPOeccpk2bhl6v57zzzmPJkiXcd999vP7665SWljJy5EgWLVqEw+EgPj6eW2+9lU2bNnHZZZfxwQcfYLFYInVpez1btmxh165dfT0NCYku0Wq1pKWl9fU0eo1HHnmE8vLyNsOiN8N5tVotkydP5uOPP+aXX37hscceo4f18PZacnJyOPPMM0lMTGT+/PmMHz+e3377jZaWFn777TdSU1PbvAw9wWw2s3379pBTRSQk/FH0lLndP18qtRmIggyt29ZHs9tDcXExa9eu5fjjj2/b9tlnn3HmmWdy/PHHs3z5cqqrq3G5XJ28lbFOY2MjK1asoKKigvz8fCZPntx2v5cInbCF5Pfff99WHdXlcgGt8dKFhYXU19fzwQcfsHnzZv773/+SmZmJKIokJCSQkpJCSUlJ2zhms5m//vqLl19+GavV2sPL2fcYO3Ysa9asAeCkk07igQce4Pjjjw/b+DjnnHP4+uuvWbBgAYmJiSQlJaFUKjn33HOprKxEr9czcOBATj/9dOx2OyeccAJnnXUWX331Feeeey56vZ5Vq1ZF8Ar3TkRRpKamRjISJWKehoYGqYBZLyOXy5k3bx5xcXGcffbZNDY2dn/QPsiQIUPYtGkTRxxxBK+88goDBgzghBNOoLa2FkEQImIcLlmyhJNPPjkCs5XY1zj0CmeXwrEjVoWWlSnjsCh0IZ2nu3HD4ZFHHuGBBx5oW0gzm8288MILfPnll/zvf//j448/5q677mLp0qWMHDky4uePNKIoYjKZADAYDGRmZjJ58mQKCwujXr9lbycsIdnY2Mgdd9zBt99+C9D2ISxYsIAhQ4ag0+lYsGABp59+OkVFRbjdbgRBoLGxEZvNRmZmZpsInTVrFs888wxvvvkm06dPp7S0NEKXtm8gCAJFRUVs2bKFNWvWcMcdd/Df//63R6vocXFxAFRXV/Phhx9y9913c+WVVzJhwgQeeeQRfv31V6ZPn87tt98OwIsvvkhpaSlOp5MTTzyRiRMnRuTa9mZMJhMul4ukpK5zISQk+pra2lrKy8v7ehr7HIIgcM0113DLLbdwxhlnsHDhQmnhqQOiKPL6669z2GGHYTQaSU9PZ9OmTQwZMoScnBx0utAMcn98+OGHkpCUCIqOorF0aPet6DrmOyIIqN121G57lGbZPRUVFdTX1zNmzBig9Xc2e/Zsbr31VlQqFSqVinnz5nH11Vfz5ptvxnSxHVEUqa2tZeXKlaxZswa3241SqWTQoEFSGGuECEuGq1QqDj/8cM4++2zGjRvHAQccwLfffsu2bdt46aWXyMjI4IcffmgTml5+/fVXbDYbeXl5qFQqqqur2bFjB++//z55eXkceuihlJWVkZeXB7QaMPtSSFW4XH311Tz55JMcdNBBXHHFFRx77LERGTcpKQmdTkd8fDw333wzRUVFPPXUU6Snp3P55ZdTUFDAypUrmThxYlsO1WuvvUZmZiabNm2SqhB2QUNDA3K5fK9ItJbYu3G73f0udGlvYtKkSXz99dc8/fTTHHvssdx11137TOGj7jCZTGi1Wu69915OOOEEZs+eTVpaGnPmzCE1NbXHwnvFihVkZGSQmZkZoRlL7C2MK94GQHmNDlOJtnVjYft9OonEAGTtUlFZuFt0iiKjGzfQrIpna/xAv/tGm7l
"text/plain": [
"<Figure size 900x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#define coordinate system and projection \n",
"projection = ccrs.LambertConformal()\n",
"crs = ccrs.PlateCarree()\n",
"transform = ccrs.LambertConformal()\n",
"\n",
"#create figure and axes (subplots #, #, # is amount of dimensions in dataset)\n",
"\n",
"fig, ax = plt.subplots(figsize=(9,6), subplot_kw=dict(projection=projection), layout='constrained')\n",
"\n",
"# set extent - full globe (0, 357, -55, 55)\n",
"# lon_min = 0\n",
"# lon_max = 357\n",
"# lat_min = -55\n",
"# lat_max = 55\n",
"\n",
"pl_1 = ax.contourf(merged_data.x_data, merged_data.y_data, temp, transform=transform, levels=20, cmap=cmap)\n",
"ax.add_feature(cfeature.COASTLINE.with_scale(\"50m\"), lw=0.5)\n",
"# ax.set_extent([lon_min, lon_max, lat_min, lat_max], crs=crs)\n",
"gls = ax.gridlines(crs=crs, draw_labels=True, linewidth=1, color='gray', alpha=0.5, linestyle='--')\n",
"gls.top_labels=True"
]
},
{
"cell_type": "raw",
"id": "ad0b79eb-7594-442a-8c33-4ea4efa8c730",
"metadata": {
"jupyter": {
"source_hidden": true
},
"tags": []
},
"source": [
"crs | dx | dy | la1 | lo1 | name | nx | ny | lov | majoraxis | minoraxis | latin1 | latin2 \n",
"PROJCS[\"Lambert Conformal (SP: 25.0/25.0, Origin: -95.0)\", +| 13.545 | 13.545 | 16.281 | -126.138 | 130 | 451 | 337 | -95 | 6371229 | 6371229 | 25 | 25"
]
},
{
"cell_type": "raw",
"id": "902bd7ba-8212-46e1-896d-de865baa5d02",
"metadata": {
"jupyter": {
"source_hidden": true
},
"tags": []
},
"source": [
"PROJCS[\"Lambert_Conformal_Conic\",\n",
" GEOGCS[\"GCS_WGS_1984\",\n",
" DATUM[\"D_WGS_1984\",\n",
" SPHEROID[\"WGS_1984\",6378137,298.257223563]],\n",
" PRIMEM[\"Greenwich\",0],\n",
" UNIT[\"Degree\",0.017453292519943295]],\n",
" PROJECTION[\"Lambert_Conformal_Conic\"],\n",
" PARAMETER[\"standard_parallel_1\",25],\n",
" PARAMETER[\"standard_parallel_2\",60],\n",
" PARAMETER[\"latitude_of_origin\",42.5],\n",
" PARAMETER[\"central_meridian\",-100],\n",
" PARAMETER[\"false_easting\",0],\n",
" PARAMETER[\"false_northing\",0],\n",
" UNIT[\"Meter\",1]]"
]
},
{
"cell_type": "raw",
"id": "aa0ad63c-ea2b-4bfb-8cdc-15885cc03f40",
"metadata": {
"jupyter": {
"source_hidden": true
},
"tags": []
},
"source": [
"psql metadata\n",
"\n",
"metadata=> select nx,ny,dx,dy,majoraxis,minoraxis,la1,lo1,lov,latin1,latin2,spacingunit,lad,la2,latin,lo2,firstgridpointcorner \n",
"from gridcoverage where id=(select distinct(location_id) from grid_info where datasetid='GribModel:161:0:97');\n",
" nx | ny | dx | dy | majoraxis | minoraxis | la1 | lo1 | lov | latin1 | latin2 | spacingunit | lad | la2 | latin | lo2 | firstgridpointcorner \n",
"-----+-----+-------+-------+-----------+-----------+-----------+-----+-----+--------+--------+-------------+-----+-----+-------+-----+----------------------\n",
" 600 | 640 | 0.005 | 0.005 | | | 40.799999 | 261 | | | | degree | | | | | UpperLeft\n",
"(1 row)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e3a7c8a9-4b90-41ad-a1d4-1124f02229a8",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "f917e16c-851b-4c84-a3ec-62fde4266e0f",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "b4b0faa0-df63-40ce-b5b2-304917080c96",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "4ea7f2a0-f493-45e9-bf99-927628a8287a",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}