{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import io\n", "import re\n", "import itertools\n", "\n", "import geojson\n", "\n", "import pandas\n", "import numpy as np\n", "from shapely.geometry import LineString\n", "\n", "import itertools\n", "import more_itertools\n", "# import tqdm\n", "from tqdm.notebook import tqdm\n", "import netCDF4\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def simplify_transect(coordinates,tol=1.0):\n", " c = list(zip(*coordinates))\n", " y = c[2]\n", " x = range(len(y))\n", " ls = LineString(list(zip(x,y))).simplify(tol,preserve_topology=False)\n", " coordinates_s = list(zip(*\n", " [np.array(c[0])[np.array(ls.xy[0].tolist()).astype(int)].tolist(),\n", " np.array(c[1])[np.array(ls.xy[0].tolist()).astype(int)].tolist(),\n", " [int(lls) for lls in ls.xy[1].tolist()]]\n", " ))\n", " return coordinates_s" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "#ds = netCDF4.Dataset('http://opendap.deltares.nl/thredds/dodsC/opendap/rijkswaterstaat/jarkus/profiles/transect_r20240117.nc')\n", "ds = netCDF4.Dataset(r'C:\\Users\\fuentesm\\Marilu\\Deltares\\Projects\\Coastviewer\\jarkus\\scripts\\transect_r20240405.nc')\n", "\n", "ids = ds.variables['id'][:]\n", "times = ds.variables['time'][:]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "#id_ = 7003900\n", "\n", "def transect2features(id_, t_):\n", " transect_idx = np.searchsorted(ids, id_)\n", " time_idx = np.searchsorted(times, t_)\n", "\n", " variables = {\n", " 'lat': {\"var\": 'lat', \"slice\": np.s_[transect_idx, :]},\n", " 'lon': {\"var\": 'lon', \"slice\": np.s_[transect_idx, :]},\n", " 'z': {\"var\": 'altitude', \"slice\": np.s_[time_idx, transect_idx, :]},\n", " 't': {\"var\": 'time', \"slice\": np.s_[time_idx]}\n", " \n", " }\n", " data = {}\n", " for var, props in variables.items():\n", " data[var] = ds.variables[props['var']][props['slice']]\n", "\n", " for rr, row in enumerate(data['z']):\n", " #if rr%50==0:\n", " # print(str(rr)+ ' out of '+ str(len(data['z'])))\n", " # get coordinates from df and convert to a max of 5digits, and give z as cm\n", " coords = pandas.DataFrame(data=dict(\n", " lon=[float(\"%.5f\" % xx) for xx in data['lon'][rr]], \n", " lat=[float(\"%.5f\" % yy) for yy in data['lat'][rr]],\n", " z=[int(\"%.0f\" %(zz*100)) if not np.ma.is_masked(zz) else np.NaN for zz in row ]\n", " ))\n", "\n", " coordinates = coords.dropna().values.tolist()\n", " \n", " if not coordinates:\n", " continue\n", " # simplify geometry\n", " coordinates_s = simplify_transect(coordinates)\n", " # print(coordinates)\n", " \n", " geometry = geojson.LineString(coordinates=coordinates_s)\n", " date = netCDF4.num2date(data['t'], ds.variables['time'].units)\n", " properties = {} #\"date\": date.isoformat(), #\"year\": date.year\n", " \n", " yield geojson.Feature(id=\"{}-{}\".format(id_[rr], date.year), geometry=geometry, properties=properties)\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "de94ff43c73544839c93fbe8e9c32b17", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/59 [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "\n", "C = list(zip(*collection[\"features\"][0][\"geometry\"][\"coordinates\"]))\n", "print(len(C[2]))\n", "\n", "ll = LineString(list(zip(range(len(C[2])),C[2])))\n", "ls = ll.simplify(1,preserve_topology=False)\n", "print(len(ls.xy[0].tolist()))\n", "\n", "plt.plot(ls.xy[0].tolist(),ls.xy[1].tolist())\n", "plt.plot(range(len(C[2])),C[2])\n", "print(len(ls.xy[0].tolist()))" ] } ], "metadata": { "hide_input": false, "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.7.16" } }, "nbformat": 4, "nbformat_minor": 2 }