{ "metadata": { "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.8.3-final" }, "orig_nbformat": 2, "kernelspec": { "name": "python_defaultSpec_1600068448644", "display_name": "Python 3.8.3 64-bit ('base': conda)" } }, "nbformat": 4, "nbformat_minor": 2, "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [] }, "outputs": [], "source": [ "# pip install mikeio xarray netcdf4" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "" }, "metadata": {}, "execution_count": 30 } ], "source": [ "import xarray as xr\n", "import numpy as np\n", "\n", "# remove this line if you like more advanced display of xarray datasets\n", "xr.set_options(display_style=\"text\")" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "from mikeio import Dfs2" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "dfs = Dfs2(\"../tests/testdata/gebco_sound.dfs2\")\n", "ds = dfs.read()" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "nx = ds[0].shape[2]\n", "ny = ds[0].shape[1]" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "x0 = dfs.longitude\n", "y0 = dfs.latitude\n", "x = [x0 + dfs.dx*i for i in range(nx)]\n", "y = [y0 + dfs.dy*i for i in range(ny)]\n", "\n", "# Either flip the y coordinates, or flip the data\n", "y = list(reversed(y))" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "res = {}\n", "\n", "spdims = [\"lat\", \"lon\"]\n", "\n", "if len(ds.time) > 1:\n", " dims = [\"t\"] + spdims\n", " coords = {\"t\": ds.time}\n", "else:\n", " dims = spdims\n", " coords = {}\n", " \n", "coords[\"lon\"] = xr.DataArray(x, dims=\"lon\", attrs={\"standard_name\" : \"longitude\", \"units\" : \"degrees_east\"})\n", "coords[\"lat\"] = xr.DataArray(y, dims=\"lat\", attrs={\"standard_name\" : \"latitude\", \"units\" : \"degrees_north\"})\n", "\n", "for item in ds.items:\n", " v = item.name\n", " res[v] = xr.DataArray(np.squeeze(ds[v]), dims=dims, \n", " attrs={'name': v,\n", " # TODO add standard name from https://cfconventions.org/standard-names.html\n", " 'units': item.unit.name,\n", " 'eumType' : item.type,\n", " 'eumUnit' : item.unit}) \n", "\n", "xr_ds = xr.Dataset(res, coords=coords)\n" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "\nDimensions: (lat: 264, lon: 216)\nCoordinates:\n * lon (lon) float64 12.2 12.21 12.21 12.21 ... 13.09 13.09 13.09 13.1\n * lat (lat) float64 56.3 56.29 56.29 56.29 ... 55.21 55.21 55.21 55.2\nData variables:\n Elevation (lat, lon) float64 -31.0 -30.0 -31.0 -31.0 ... -37.0 -38.0 -38.0", "text/html": "
<xarray.Dataset>\nDimensions:    (lat: 264, lon: 216)\nCoordinates:\n  * lon        (lon) float64 12.2 12.21 12.21 12.21 ... 13.09 13.09 13.09 13.1\n  * lat        (lat) float64 56.3 56.29 56.29 56.29 ... 55.21 55.21 55.21 55.2\nData variables:\n    Elevation  (lat, lon) float64 -31.0 -30.0 -31.0 -31.0 ... -37.0 -38.0 -38.0
" }, "metadata": {}, "execution_count": 52 } ], "source": [ "xr_ds" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "xr_ds.to_netcdf(\"gebco.nc\")" ] }, { "source": [ "# Clean up" ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "import os\n", "os.remove(\"gebco.nc\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ] }