From 0ade8652e75e914033a4d0684cc80aeedd01dd56 Mon Sep 17 00:00:00 2001 From: Martijn Visser Date: Thu, 1 Aug 2024 15:07:33 +0200 Subject: [PATCH 01/25] add imports --- .../Parametrize/HollandsNoorderkwartier_parametrize.ipynb | 1 + .../Parametrize/HollandseDelta_parametrize.ipynb | 1 + .../Parametrize/Rivierenland_parametrize.ipynb | 2 ++ .../peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb | 1 + .../postprocess_data/post-process_delfland.ipynb | 1 + 5 files changed, 6 insertions(+) diff --git a/src/peilbeheerst_model/Parametrize/HollandsNoorderkwartier_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/HollandsNoorderkwartier_parametrize.ipynb index 817200b..c18b5d1 100644 --- a/src/peilbeheerst_model/Parametrize/HollandsNoorderkwartier_parametrize.ipynb +++ b/src/peilbeheerst_model/Parametrize/HollandsNoorderkwartier_parametrize.ipynb @@ -16,6 +16,7 @@ "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", "import ribasim\n", "import ribasim.nodes\n", + "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", "\n", "warnings.filterwarnings(\"ignore\")" ] diff --git a/src/peilbeheerst_model/Parametrize/HollandseDelta_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/HollandseDelta_parametrize.ipynb index 03911b0..6435ca2 100644 --- a/src/peilbeheerst_model/Parametrize/HollandseDelta_parametrize.ipynb +++ b/src/peilbeheerst_model/Parametrize/HollandseDelta_parametrize.ipynb @@ -16,6 +16,7 @@ "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", "import ribasim\n", "import ribasim.nodes\n", + "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", "from peilbeheerst_model.ribasim_feedback_processor import RibasimFeedbackProcessor\n", "from ribasim import Node\n", "from ribasim.nodes import (\n", diff --git a/src/peilbeheerst_model/Parametrize/Rivierenland_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/Rivierenland_parametrize.ipynb index a60cb92..fc28c53 100644 --- a/src/peilbeheerst_model/Parametrize/Rivierenland_parametrize.ipynb +++ b/src/peilbeheerst_model/Parametrize/Rivierenland_parametrize.ipynb @@ -11,10 +11,12 @@ "import pathlib\n", "import warnings\n", "\n", + "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", "import ribasim\n", "import ribasim.nodes\n", + "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", "\n", "warnings.filterwarnings(\"ignore\")" ] diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb index e0569be..77a38d8 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb @@ -28,6 +28,7 @@ "source": [ "import geopandas as gpd\n", "import numpy as np\n", + "import pandas as pd\n", "from general_functions import read_gpkg_layers" ] }, diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb index 8bd09ed..1e62154 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb @@ -28,6 +28,7 @@ "source": [ "import geopandas as gpd\n", "import numpy as np\n", + "import pandas as pd\n", "from general_functions import read_gpkg_layers" ] }, From 69de52e9abba26abb935886efced255eddbfc049 Mon Sep 17 00:00:00 2001 From: Martijn Visser Date: Thu, 1 Aug 2024 15:12:14 +0200 Subject: [PATCH 02/25] fix AGV <-> Rijnland --- src/peilbeheerst_model/Parametrize/Rijnland_nieuw.ipynb | 1 + .../peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb | 1 + .../postprocess_data/post-process_rijnland.ipynb | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/peilbeheerst_model/Parametrize/Rijnland_nieuw.ipynb b/src/peilbeheerst_model/Parametrize/Rijnland_nieuw.ipynb index fedcaf5..0c294f3 100644 --- a/src/peilbeheerst_model/Parametrize/Rijnland_nieuw.ipynb +++ b/src/peilbeheerst_model/Parametrize/Rijnland_nieuw.ipynb @@ -16,6 +16,7 @@ "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", "import ribasim\n", "import ribasim.nodes\n", + "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", "from peilbeheerst_model.ribasim_feedback_processor import RibasimFeedbackProcessor\n", "\n", "warnings.filterwarnings(\"ignore\")" diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb index 77a38d8..cbd3c0d 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb @@ -29,6 +29,7 @@ "import geopandas as gpd\n", "import numpy as np\n", "import pandas as pd\n", + "import shapely\n", "from general_functions import read_gpkg_layers" ] }, diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb index bbd7459..22bc2f4 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb @@ -231,7 +231,7 @@ "\n", "gdf_rhws = gdf_rhws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", "\n", - "Rijnland[\"peilgebied\"] = pd.concat([gdf_rhws, AVG[\"peilgebied\"]])" + "Rijnland[\"peilgebied\"] = pd.concat([gdf_rhws, Rijnland[\"peilgebied\"]])" ] }, { From 4ed875b82a8232eb36396d13fda700f06687e40f Mon Sep 17 00:00:00 2001 From: Martijn Visser Date: Thu, 1 Aug 2024 15:24:01 +0200 Subject: [PATCH 03/25] More fixes --- .../Parametrize/Rijnland_parametrize.ipynb | 1 + .../preprocess_data/HHSK.ipynb | 30 ++++++++++--------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/peilbeheerst_model/Parametrize/Rijnland_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/Rijnland_parametrize.ipynb index c399854..276f8d7 100644 --- a/src/peilbeheerst_model/Parametrize/Rijnland_parametrize.ipynb +++ b/src/peilbeheerst_model/Parametrize/Rijnland_parametrize.ipynb @@ -16,6 +16,7 @@ "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", "import ribasim\n", "import ribasim.nodes\n", + "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", "\n", "warnings.filterwarnings(\"ignore\")" ] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb index 4ec315b..5c8aa26 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb @@ -26,7 +26,7 @@ }, "outputs": [], "source": [ - "from general_functions import read_gpkg_layers, show_layers_and_columns, store_data" + "from general_functions import burn_in_peilgebieden, read_gpkg_layers, show_layers_and_columns, store_data" ] }, { @@ -376,17 +376,21 @@ "metadata": {}, "outputs": [], "source": [ - "# streefpeilen_PG_v = pd.merge(left = HHSK['peilgebiedvigerend'],\n", - "# right = HHSK['streefpeil'],\n", - "# left_on = 'globalid',\n", - "# right_on = 'peilgebiedvigerendid',\n", - "# suffixes = ('', '_streefpeil'))[['code', 'nen3610id', 'globalid', 'waterhoogte', 'geometry']]\n", + "streefpeilen_PG_v = pd.merge(\n", + " left=HHSK[\"peilgebiedvigerend\"],\n", + " right=HHSK[\"streefpeil\"],\n", + " left_on=\"globalid\",\n", + " right_on=\"peilgebiedvigerendid\",\n", + " suffixes=(\"\", \"_streefpeil\"),\n", + ")[[\"code\", \"nen3610id\", \"globalid\", \"waterhoogte\", \"geometry\"]]\n", "\n", - "# streefpeilen_PG_a = pd.merge(left = HHSK['peilafwijkinggebied'],\n", - "# right = HHSK['streefpeil'],\n", - "# left_on = 'globalid',\n", - "# right_on = 'peilafwijkinggebiedid',\n", - "# suffixes = ('', '_streefpeil'))[['code', 'nen3610id', 'globalid', 'waterhoogte', 'geometry']]\n", + "streefpeilen_PG_a = pd.merge(\n", + " left=HHSK[\"peilafwijkinggebied\"],\n", + " right=HHSK[\"streefpeil\"],\n", + " left_on=\"globalid\",\n", + " right_on=\"peilafwijkinggebiedid\",\n", + " suffixes=(\"\", \"_streefpeil\"),\n", + ")[[\"code\", \"nen3610id\", \"globalid\", \"waterhoogte\", \"geometry\"]]\n", "\n", "# fig, ax = plt.subplots()\n", "# streefpeilen_PG_v.plot(ax = ax, color='cornflowerblue')\n", @@ -411,9 +415,7 @@ "metadata": {}, "outputs": [], "source": [ - "# peilgebied = burn_in_peilgebieden(base_layer = streefpeilen_PG_v,\n", - "# overlay_layer = streefpeilen_PG_a,\n", - "# plot = True)" + "peilgebied = burn_in_peilgebieden(base_layer=streefpeilen_PG_v, overlay_layer=streefpeilen_PG_a, plot=True)" ] }, { From b2490811a68034607c5f0ec69a9ae4a14b386348 Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Wed, 7 Aug 2024 09:00:57 +0200 Subject: [PATCH 04/25] Delete outdated notebooks These notebooks were used to post process the delivered data of the waterschappen. They have been modified severely, so remove them all and add new ones. --- .../postprocess_data/post-process_WSRL.ipynb | 402 ---------- .../postprocess_data/post-process_agv.ipynb | 350 --------- .../post-process_delfland.ipynb | 353 --------- .../post-process_rijnland.ipynb | 685 ------------------ .../post-process_wetterskip.ipynb | 513 ------------- .../post-process_zuiderzeeland.ipynb | 377 ---------- .../postprocess_data/post-processing_HD.ipynb | 367 ---------- .../post-processing_HHNK.ipynb | 361 --------- .../post-processing_HHSK.ipynb | 414 ----------- .../post-processing_scheldestromen.ipynb | 374 ---------- 10 files changed, 4196 deletions(-) delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb deleted file mode 100644 index cbd3c0d..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb +++ /dev/null @@ -1,402 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0", - "metadata": {}, - "source": [ - "# WSRL" - ] - }, - { - "cell_type": "markdown", - "id": "1", - "metadata": {}, - "source": [ - "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", - "- peilgebied_cat = 0 -> peilgebied\n", - "- peigelbied_cat = 1 -> RHWS (boezem)\n", - "- peilgebied_cat = 2 -> NHWS " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2", - "metadata": {}, - "outputs": [], - "source": [ - "import geopandas as gpd\n", - "import numpy as np\n", - "import pandas as pd\n", - "import shapely\n", - "from general_functions import read_gpkg_layers" - ] - }, - { - "cell_type": "markdown", - "id": "3", - "metadata": {}, - "source": [ - "## WSRL" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4", - "metadata": {}, - "outputs": [], - "source": [ - "# define relative paths\n", - "waterschap = \"WSRL\"\n", - "\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", - "\n", - "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", - "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", - "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_wsrl.gpkg\"\n", - "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" - ] - }, - { - "cell_type": "markdown", - "id": "5", - "metadata": {}, - "source": [ - "### Load Files" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6", - "metadata": {}, - "outputs": [], - "source": [ - "# Load HHNK files\n", - "WSRL = read_gpkg_layers(\n", - " gpkg_path=data_path,\n", - " variables=[\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " \"hydroobject\",\n", - " \"duikersifonhevel\",\n", - " \"peilgebied\",\n", - " \"streefpeil\",\n", - " ],\n", - ")\n", - "WSRL[\"peilgebied\"] = WSRL[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", - "\n", - "# Load waterschap boundaries\n", - "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", - "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", - "\n", - "# Load hws\n", - "gdf_hws = gpd.read_file(hws_path)\n", - "\n", - "# Load buffer\n", - "gdf_buffer = gpd.read_file(buffer_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7", - "metadata": {}, - "outputs": [], - "source": [ - "# check primary key\n", - "WSRL[\"peilgebied\"][\"globalid\"].is_unique" - ] - }, - { - "cell_type": "markdown", - "id": "8", - "metadata": {}, - "source": [ - "## Select waterschap boundaries and clip hws layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9", - "metadata": {}, - "outputs": [], - "source": [ - "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[[\"Waterschap Rivierenland\"]]\n", - "\n", - "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "10", - "metadata": {}, - "outputs": [], - "source": [ - "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(WSRL[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", - "\n", - "# # # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "# non_overlapping_peilgebied = gpd.overlay(WSRL['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", - "# overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", - "\n", - "# Step 3: Calculate Area Percentages\n", - "# Calculate the area of overlaps\n", - "overlaps[\"overlap_area\"] = overlaps.area\n", - "\n", - "# Step 4: Filter based on area Area Percentages\n", - "minimum_area = 20000\n", - "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", - "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", - "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" - ] - }, - { - "cell_type": "markdown", - "id": "11", - "metadata": {}, - "source": [ - "## Create peilgebied_cat column" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "12", - "metadata": {}, - "outputs": [], - "source": [ - "# Add occurence to geodataframe\n", - "peilgebieden_cat = []\n", - "\n", - "for index, row in WSRL[\"peilgebied\"].iterrows():\n", - " if row.CODE == \"LNG014-P\":\n", - " peilgebieden_cat.append(1)\n", - " else:\n", - " peilgebieden_cat.append(0)\n", - "\n", - "# Add new column and drop old HWS_BZM column\n", - "WSRL[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat\n", - "# WSRL['peilgebied'] = WSRL['peilgebied'].drop(columns=['HWS_BZM'])\n", - "WSRL[\"peilgebied\"] = WSRL[\"peilgebied\"].rename(columns={\"CODE\": \"code\"})" - ] - }, - { - "cell_type": "markdown", - "id": "13", - "metadata": {}, - "source": [ - "## Adjust globalid, code, nen3610id ['streefpeil'], ['peilgebied']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "14", - "metadata": {}, - "outputs": [], - "source": [ - "codes = []\n", - "globalids = []\n", - "nen3610ids = []\n", - "\n", - "for index, row in WSRL[\"peilgebied\"].iterrows():\n", - " codes.append(f\"dummy_code_peilgebied_{row.globalid}\")\n", - " globalids.append(f\"dummy_globalid_peilgebied_{row.globalid}\")\n", - " nen3610ids.append(f\"dummy_nen3610id_peilgebied_{row.globalid}\")\n", - "\n", - "WSRL[\"peilgebied\"][\"code\"] = codes\n", - "WSRL[\"peilgebied\"][\"globalid\"] = globalids\n", - "WSRL[\"peilgebied\"][\"nen3610id\"] = nen3610ids\n", - "\n", - "WSRL[\"streefpeil\"][\"globalid\"] = globalids" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "15", - "metadata": {}, - "outputs": [], - "source": [ - "WSRL[\"peilgebied\"][\"globalid\"].is_unique" - ] - }, - { - "cell_type": "markdown", - "id": "16", - "metadata": {}, - "source": [ - "## Add nhws to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "17", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"peilgebied_cat\"] = 2\n", - "\n", - "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "WSRL[\"peilgebied\"] = pd.concat([gdf_hws, WSRL[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", - "\n", - "WSRL[\"streefpeil\"] = pd.concat([streefpeil_hws, WSRL[\"streefpeil\"]])\n", - "WSRL[\"streefpeil\"] = gpd.GeoDataFrame(WSRL[\"streefpeil\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "19", - "metadata": {}, - "outputs": [], - "source": [ - "WSRL[\"peilgebied\"][\"globalid\"].is_unique" - ] - }, - { - "cell_type": "markdown", - "id": "20", - "metadata": {}, - "source": [ - "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "21", - "metadata": {}, - "outputs": [], - "source": [ - "buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", - "buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", - "buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(WSRL[\"peilgebied\"].geometry.tolist()))\n", - "\n", - "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", - "buffer_polygon = buffer_polygon.set_geometry(0)\n", - "buffer_polygon = buffer_polygon.dissolve()\n", - "buffer_polygon = buffer_polygon.rename(columns={0: \"geometry\"})\n", - "buffer_polygon = buffer_polygon.set_geometry(\"geometry\")\n", - "buffer_polygon = buffer_polygon.set_crs(\"EPSG:28992\")" - ] - }, - { - "cell_type": "markdown", - "id": "22", - "metadata": {}, - "source": [ - "## Add buffer to ['peilgebied']" - ] - }, - { - "cell_type": "markdown", - "id": "23", - "metadata": {}, - "source": [ - "## Add buffer to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "24", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer[\"waterhoogte\"] = [np.nan]\n", - "streefpeil_buffer[\"globalid\"] = [\"dummy_globalid_nhws_buffer_1\"]\n", - "streefpeil_buffer[\"geometry\"] = [None]\n", - "\n", - "WSRL[\"streefpeil\"] = pd.concat([streefpeil_buffer, WSRL[\"streefpeil\"]])\n", - "WSRL[\"streefpeil\"] = gpd.GeoDataFrame(WSRL[\"streefpeil\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "25", - "metadata": {}, - "outputs": [], - "source": [ - "WSRL[\"peilgebied\"].globalid.is_unique" - ] - }, - { - "cell_type": "markdown", - "id": "26", - "metadata": {}, - "source": [ - "## Store output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "27", - "metadata": {}, - "outputs": [], - "source": [ - "for key in WSRL.keys():\n", - " print(key)\n", - " WSRL[str(key)].to_file(f\"{output_folder}/{waterschap}.gpkg\", layer=str(key), driver=\"GPKG\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:stable]", - "language": "python", - "name": "conda-env-stable-py" - }, - "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.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb deleted file mode 100644 index 97993ba..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb +++ /dev/null @@ -1,350 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0", - "metadata": {}, - "source": [ - "# Amstel Gooi en Vecht" - ] - }, - { - "cell_type": "markdown", - "id": "1", - "metadata": {}, - "source": [ - "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", - "- peilgebied_cat = 0 -> peilgebied\n", - "- peigelbied_cat = 1 -> RHWS (boezem)\n", - "- peilgebied_cat = 2 -> NHWS Notes:\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2", - "metadata": {}, - "outputs": [], - "source": [ - "import geopandas as gpd\n", - "import numpy as np\n", - "import pandas as pd\n", - "from general_functions import read_gpkg_layers" - ] - }, - { - "cell_type": "markdown", - "id": "3", - "metadata": {}, - "source": [ - "## Amstel Gooi en Vecht" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4", - "metadata": {}, - "outputs": [], - "source": [ - "# define relative paths\n", - "waterschap = \"AmstelGooienVecht\"\n", - "waterschap2 = \"AGV\"\n", - "\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", - "\n", - "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", - "\n", - "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", - "\n", - "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_agv.gpkg\"\n", - "\n", - "# Buffer RWHS\n", - "rhws_path = \"../projects/4750_30/Data_overig/HWS/agv_rhws_buffer.gpkg\"\n", - "\n", - "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" - ] - }, - { - "cell_type": "markdown", - "id": "5", - "metadata": {}, - "source": [ - "### Load Files" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6", - "metadata": {}, - "outputs": [], - "source": [ - "# Load HHNK files\n", - "AVG = read_gpkg_layers(\n", - " gpkg_path=data_path,\n", - " variables=[\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " \"hydroobject\",\n", - " \"duikersifonhevel\",\n", - " \"peilgebied\",\n", - " \"streefpeil\",\n", - " ],\n", - ")\n", - "AVG[\"peilgebied\"] = AVG[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", - "\n", - "# Load waterschap boundaries\n", - "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", - "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", - "\n", - "# Load hws\n", - "gdf_hws = gpd.read_file(hws_path)\n", - "\n", - "# Load buffer\n", - "gdf_buffer = gpd.read_file(buffer_path)\n", - "gdf_buffer = gdf_buffer.to_crs(\"EPSG:28992\")\n", - "gdf_buffer = gdf_buffer.dissolve()\n", - "\n", - "# Load rhws\n", - "gdf_rhws = gpd.read_file(rhws_path)\n", - "gdf_rhws = gdf_rhws.to_crs(\"EPSG:28992\")\n", - "gdf_rhws = gdf_rhws.dissolve()" - ] - }, - { - "cell_type": "markdown", - "id": "7", - "metadata": {}, - "source": [ - "## Select waterschap boundaries and clip hws layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8", - "metadata": {}, - "outputs": [], - "source": [ - "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[[\"HH Amstel, Gooi en Vecht\"]]\n", - "\n", - "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")\n", - "\n", - "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_rhws = gpd.overlay(gdf_grens, gdf_rhws, how=\"intersection\")" - ] - }, - { - "cell_type": "markdown", - "id": "9", - "metadata": {}, - "source": [ - "## RHWS is not included in AGV bron data, therefore create inverse difference layer to extract" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "10", - "metadata": {}, - "outputs": [], - "source": [ - "# Select inverse of peilgebied\n", - "gdf_rhws = gpd.overlay(gdf_rhws, AVG[\"peilgebied\"], how=\"difference\")\n", - "gdf_rhws = gpd.overlay(gdf_rhws, gdf_hws, how=\"difference\")\n", - "gdf_rhws.plot()" - ] - }, - { - "cell_type": "markdown", - "id": "11", - "metadata": {}, - "source": [ - "## Peilgebied and HWS layer overlap:\n", - "1. Identify the overlapping areas\n", - "2. Clip\n", - "3. Calculate overlapping area percentage\n", - "4. Filter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "12", - "metadata": {}, - "outputs": [], - "source": [ - "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(AVG[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", - "\n", - "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(AVG[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", - "\n", - "# Step 3: Calculate Area Percentages\n", - "# Calculate the area of overlaps\n", - "overlaps[\"overlap_area\"] = overlaps.area\n", - "\n", - "# Step 4: Filter based on area Area Percentages\n", - "minimum_area = 500\n", - "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", - "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", - "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "13", - "metadata": {}, - "outputs": [], - "source": [ - "# Add occurence to geodataframe\n", - "peilgebieden_cat = []\n", - "\n", - "for index, row in AVG[\"peilgebied\"].iterrows():\n", - " peilgebieden_cat.append(0)\n", - "\n", - "# Add new column and drop old HWS_BZM column\n", - "AVG[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat\n", - "# HD['peilgebied'] = HD['peilgebied'].drop(columns=['streefpeil'])" - ] - }, - { - "cell_type": "markdown", - "id": "14", - "metadata": {}, - "source": [ - "## Add rhws to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "15", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "gdf_rhws[\"globalid\"] = \"dummy_globalid_rhws_\" + gdf_rhws.index.astype(str)\n", - "gdf_rhws[\"code\"] = \"dummy_code_nhws_\" + gdf_rhws.index.astype(str)\n", - "gdf_rhws[\"nen3610id\"] = \"dummy_nen3610id_rhws_\" + gdf_rhws.index.astype(str)\n", - "gdf_rhws[\"peilgebied_cat\"] = 1\n", - "\n", - "gdf_rhws = gdf_rhws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "AVG[\"peilgebied\"] = pd.concat([gdf_rhws, AVG[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "16", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_rhws)\n", - "streefpeil_hws[\"globalid\"] = \"dummy_globalid_rhws_\" + gdf_rhws.index.astype(str)\n", - "streefpeil_hws[\"geometry\"] = [None] * len(gdf_rhws)\n", - "\n", - "AVG[\"streefpeil\"] = pd.concat([streefpeil_hws, AVG[\"streefpeil\"]])\n", - "AVG[\"streefpeil\"] = gpd.GeoDataFrame(AVG[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "17", - "metadata": {}, - "source": [ - "## Add nhws to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"peilgebied_cat\"] = 2\n", - "\n", - "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "AVG[\"peilgebied\"] = pd.concat([gdf_hws, AVG[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "19", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", - "\n", - "AVG[\"streefpeil\"] = pd.concat([streefpeil_hws, AVG[\"streefpeil\"]])\n", - "AVG[\"streefpeil\"] = gpd.GeoDataFrame(AVG[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "20", - "metadata": {}, - "source": [ - "## Store output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "21", - "metadata": {}, - "outputs": [], - "source": [ - "for key in AVG.keys():\n", - " print(key)\n", - " AVG[str(key)].to_file(f\"{output_folder}/{waterschap2}.gpkg\", layer=str(key), driver=\"GPKG\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:stable]", - "language": "python", - "name": "conda-env-stable-py" - }, - "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.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb deleted file mode 100644 index 1e62154..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb +++ /dev/null @@ -1,353 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0", - "metadata": {}, - "source": [ - "# Delfland" - ] - }, - { - "cell_type": "markdown", - "id": "1", - "metadata": {}, - "source": [ - "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", - "- peilgebied_cat = 0 -> peilgebied\n", - "- peigelbied_cat = 1 -> boezem\n", - "- peilgebied_cat = 2 -> HWSNotes:\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2", - "metadata": {}, - "outputs": [], - "source": [ - "import geopandas as gpd\n", - "import numpy as np\n", - "import pandas as pd\n", - "from general_functions import read_gpkg_layers" - ] - }, - { - "cell_type": "markdown", - "id": "3", - "metadata": {}, - "source": [ - "## Set Paths" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4", - "metadata": {}, - "outputs": [], - "source": [ - "# define relative paths\n", - "waterschap = \"Delfland\"\n", - "\n", - "data_path = f\"../projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", - "\n", - "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", - "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", - "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_delfland.gpkg\"\n", - "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" - ] - }, - { - "cell_type": "markdown", - "id": "5", - "metadata": {}, - "source": [ - "## Load files" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6", - "metadata": {}, - "outputs": [], - "source": [ - "# Load HHNK files\n", - "delfland = read_gpkg_layers(\n", - " gpkg_path=data_path,\n", - " variables=[\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " \"hydroobject\",\n", - " \"duikersifonhevel\",\n", - " \"peilgebied\",\n", - " \"streefpeil\",\n", - " ],\n", - ")\n", - "delfland[\"peilgebied\"] = delfland[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", - "\n", - "# Load waterschap boundaries\n", - "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", - "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", - "\n", - "# Load hws\n", - "gdf_hws = gpd.read_file(hws_path)\n", - "\n", - "# Load buffer\n", - "gdf_buffer = gpd.read_file(buffer_path)" - ] - }, - { - "cell_type": "markdown", - "id": "7", - "metadata": {}, - "source": [ - "## Select waterschap boundaries and clip hws layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8", - "metadata": {}, - "outputs": [], - "source": [ - "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[[\"HHS van Delfland\"]]\n", - "\n", - "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" - ] - }, - { - "cell_type": "markdown", - "id": "9", - "metadata": {}, - "source": [ - "## Peilgebied and HWS layer overlap:\n", - "1. Identify the overlapping areas\n", - "2. Clip\n", - "3. Calculate overlapping area percentage\n", - "4. Filter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "10", - "metadata": {}, - "outputs": [], - "source": [ - "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(delfland[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", - "\n", - "# Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(delfland[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", - "\n", - "# Step 3: Calculate Area Percentages\n", - "# Calculate the area of overlaps\n", - "overlaps[\"overlap_area\"] = overlaps.area\n", - "\n", - "# Step 4: Filter based on area Area Percentages\n", - "minimum_area = 20000\n", - "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", - "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", - "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" - ] - }, - { - "cell_type": "markdown", - "id": "11", - "metadata": {}, - "source": [ - "## Create peilgebied_cat column" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "12", - "metadata": {}, - "outputs": [], - "source": [ - "# Add occurence to geodataframe\n", - "peilgebieden_cat = []\n", - "\n", - "for index, row in delfland[\"peilgebied\"].iterrows():\n", - " if row.globalid in overlap_ids:\n", - " peilgebieden_cat.append(2)\n", - "\n", - " elif row.HWS_BZM is True:\n", - " peilgebieden_cat.append(1)\n", - "\n", - " elif row.HWS_BZM is False:\n", - " peilgebieden_cat.append(0)\n", - "\n", - "# Add new column and drop old HWS_BZM column\n", - "delfland[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat\n", - "delfland[\"peilgebied\"] = delfland[\"peilgebied\"].drop(columns=[\"HWS_BZM\"])" - ] - }, - { - "cell_type": "markdown", - "id": "13", - "metadata": {}, - "source": [ - "## Add HWS to ['peilgebied', 'streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "14", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "gdf_hws[\"globalid\"] = \"dummy_globalid__hws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"code\"] = \"dummy_code_hws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_hws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"peilgebied_cat\"] = 2\n", - "\n", - "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "delfland[\"peilgebied\"] = pd.concat([gdf_hws, delfland[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "15", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws[\"globalid\"] = \"dummy_globalid_hws_\" + gdf_hws.index.astype(str)\n", - "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", - "\n", - "delfland[\"streefpeil\"] = pd.concat([streefpeil_hws, delfland[\"streefpeil\"]])\n", - "delfland[\"streefpeil\"] = gpd.GeoDataFrame(delfland[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "16", - "metadata": {}, - "source": [ - "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "17", - "metadata": {}, - "outputs": [], - "source": [ - "# Create buffer polygon\n", - "buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how=\"intersection\", keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how=\"difference\", keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, delfland[\"peilgebied\"], how=\"difference\", keep_geom_type=True)" - ] - }, - { - "cell_type": "markdown", - "id": "18", - "metadata": {}, - "source": [ - "## Add buffer to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "19", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "buffer_polygon[\"globalid\"] = \"dummy_globalid_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"code\"] = \"dummy_code_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"nen3610id\"] = \"dummy_nen3610id_buffer_1\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"peilgebied_cat\"] = 2\n", - "\n", - "buffer_polygon = buffer_polygon[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "delfland[\"peilgebied\"] = pd.concat([buffer_polygon, delfland[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "20", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer[\"waterhoogte\"] = [np.nan]\n", - "streefpeil_buffer[\"globalid\"] = [\"dummy_globalid_buffer_1\"]\n", - "streefpeil_buffer[\"geometry\"] = [None]\n", - "\n", - "\n", - "delfland[\"streefpeil\"] = pd.concat([streefpeil_buffer, delfland[\"streefpeil\"]])\n", - "delfland[\"streefpeil\"] = gpd.GeoDataFrame(delfland[\"streefpeil\"])\n", - "\n", - "# Fix\n", - "delfland[\"streefpeil\"][\"waterhoogte\"] = delfland[\"streefpeil\"][\"waterhoogte\"].replace(\"N/A\", np.nan)\n", - "delfland[\"streefpeil\"][\"waterhoogte\"] = pd.to_numeric(delfland[\"streefpeil\"][\"waterhoogte\"])" - ] - }, - { - "cell_type": "markdown", - "id": "21", - "metadata": {}, - "source": [ - "## Write output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "22", - "metadata": {}, - "outputs": [], - "source": [ - "for key in delfland.keys():\n", - " print(key)\n", - " delfland[str(key)].to_file(f\"{output_folder}/{waterschap}.gpkg\", layer=str(key), driver=\"GPKG\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:stable]", - "language": "python", - "name": "conda-env-stable-py" - }, - "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.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb deleted file mode 100644 index 22bc2f4..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb +++ /dev/null @@ -1,685 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0", - "metadata": {}, - "source": [ - "# Rijnland" - ] - }, - { - "cell_type": "markdown", - "id": "1", - "metadata": {}, - "source": [ - "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", - "- peilgebied_cat = 0 -> peilgebied\n", - "- peigelbied_cat = 1 -> RHWS (boezem)\n", - "- peilgebied_cat = 2 -> NHWS " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2", - "metadata": {}, - "outputs": [], - "source": [ - "import geopandas as gpd\n", - "import numpy as np\n", - "import pandas as pd\n", - "from general_functions import read_gpkg_layers" - ] - }, - { - "cell_type": "markdown", - "id": "3", - "metadata": {}, - "source": [ - "## Rijnland" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4", - "metadata": {}, - "outputs": [], - "source": [ - "# define relative paths\n", - "waterschap = \"Rijnland\"\n", - "\n", - "data_path = f\"../projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", - "\n", - "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", - "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", - "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_rijnland.gpkg\"\n", - "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" - ] - }, - { - "cell_type": "markdown", - "id": "5", - "metadata": {}, - "source": [ - "### Load Files" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6", - "metadata": {}, - "outputs": [], - "source": [ - "# Load HHNK files\n", - "Rijnland = read_gpkg_layers(\n", - " gpkg_path=data_path,\n", - " variables=[\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " \"hydroobject\",\n", - " \"duikersifonhevel\",\n", - " \"peilgebied\",\n", - " \"streefpeil\",\n", - " ],\n", - ")\n", - "Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", - "\n", - "# Load waterschap boundaries\n", - "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", - "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", - "\n", - "# Load hws\n", - "gdf_hws = gpd.read_file(hws_path)\n", - "\n", - "# Load buffer\n", - "gdf_buffer = gpd.read_file(buffer_path)" - ] - }, - { - "cell_type": "markdown", - "id": "7", - "metadata": {}, - "source": [ - "## Select waterschap boundaries and clip hws layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8", - "metadata": {}, - "outputs": [], - "source": [ - "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[[\"HH van Rijnland\"]]\n", - "\n", - "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" - ] - }, - { - "cell_type": "markdown", - "id": "9", - "metadata": {}, - "source": [ - "## Peilgebied and HWS layer overlap:\n", - "1. Identify the overlapping areas\n", - "2. Clip\n", - "3. Calculate overlapping area percentage\n", - "4. Filter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "10", - "metadata": {}, - "outputs": [], - "source": [ - "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(Rijnland[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", - "\n", - "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(Rijnland[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", - "\n", - "# Step 3: Calculate Area Percentages\n", - "# Calculate the area of overlaps\n", - "overlaps[\"overlap_area\"] = overlaps.area\n", - "\n", - "# Step 4: Filter based on area Area Percentages\n", - "minimum_area = 20000\n", - "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", - "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", - "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" - ] - }, - { - "cell_type": "markdown", - "id": "11", - "metadata": {}, - "source": [ - "## Create peilgebied_cat column" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "12", - "metadata": {}, - "outputs": [], - "source": [ - "# Add occurence to geodataframe\n", - "peilgebieden_cat = []\n", - "\n", - "for index, row in Rijnland[\"peilgebied\"].iterrows():\n", - " if row.code == \"dummy_code_peilgebied_18207\":\n", - " peilgebieden_cat.append(1)\n", - " print(\"yes\")\n", - " elif row.code == \"dummy_code_peilgebied_18322\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"dummy_code_peilgebied_18155\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"dummy_code_peilgebied_18161\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"dummy_code_peilgebied_19451\":\n", - " peilgebieden_cat.append(2)\n", - " else:\n", - " peilgebieden_cat.append(0)\n", - "\n", - "# Add new column and drop old HWS_BZM column\n", - "Rijnland[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "13", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "14", - "metadata": {}, - "source": [ - "## Add rhws to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "15", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "gdf_rhws[\"globalid\"] = \"dummy_globalid_rhws_\" + gdf_rhws.index.astype(str)\n", - "gdf_rhws[\"code\"] = \"dummy_code_nhws_\" + gdf_rhws.index.astype(str)\n", - "gdf_rhws[\"nen3610id\"] = \"dummy_nen3610id_rhws_\" + gdf_rhws.index.astype(str)\n", - "gdf_rhws[\"peilgebied_cat\"] = 1\n", - "\n", - "gdf_rhws = gdf_rhws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "Rijnland[\"peilgebied\"] = pd.concat([gdf_rhws, Rijnland[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "16", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_rhws)\n", - "streefpeil_hws[\"globalid\"] = \"dummy_globalid_rhws_\" + gdf_rhws.index.astype(str)\n", - "streefpeil_hws[\"geometry\"] = [None] * len(gdf_rhws)\n", - "\n", - "Rijnland[\"streefpeil\"] = pd.concat([streefpeil_hws, Rijnland[\"streefpeil\"]])\n", - "Rijnland[\"streefpeil\"] = gpd.GeoDataFrame(Rijnland[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "17", - "metadata": {}, - "source": [ - "## Add nhws to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"peilgebied_cat\"] = 2\n", - "\n", - "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "Rijnland[\"peilgebied\"] = pd.concat([gdf_hws, Rijnland[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "19", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", - "\n", - "Rijnland[\"streefpeil\"] = pd.concat([streefpeil_hws, Rijnland[\"streefpeil\"]])\n", - "Rijnland[\"streefpeil\"] = gpd.GeoDataFrame(Rijnland[\"streefpeil\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "20", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "21", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "22", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "23", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "24", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "25", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "26", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "27", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "28", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "29", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "30", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "31", - "metadata": {}, - "source": [ - "### Select waterschap boundaries" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "32", - "metadata": {}, - "outputs": [], - "source": [ - "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[[\"HH van Rijnland\"]]" - ] - }, - { - "cell_type": "markdown", - "id": "33", - "metadata": {}, - "source": [ - "### Create inverse layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "34", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# Remove mixed geomtypes (lines)\n", - "data = []\n", - "\n", - "for index, row in Rijnland[\"peilgebied\"].iterrows():\n", - " # print(row.geometry.geom_type)\n", - " if row.geometry.geom_type != \"LineString\":\n", - " data.append(row)\n", - "\n", - "Rijnland[\"peilgebied\"] = gpd.GeoDataFrame(pd.concat(data, axis=1, ignore_index=True)).transpose()\n", - "Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"].set_geometry(\"geometry\")\n", - "Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"].set_crs(\"EPSG:28992\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "35", - "metadata": {}, - "outputs": [], - "source": [ - "# Select inverse of peilgebied\n", - "gdf_boezem_out = gpd.overlay(gdf_grens, Rijnland[\"peilgebied\"].dissolve(), how=\"symmetric_difference\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "36", - "metadata": {}, - "outputs": [], - "source": [ - "# Store unfiltered layer\n", - "gdf_boezem_out.to_file(f\"{output_folder}/boezem_unfiltered_{waterschap}.gpkg\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "37", - "metadata": {}, - "outputs": [], - "source": [ - "# Create separate polygons\n", - "gdf_boezem_out = gdf_boezem_out.explode()" - ] - }, - { - "cell_type": "markdown", - "id": "38", - "metadata": {}, - "source": [ - "### Calculate area of polygons and filter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "39", - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate area of polygons\n", - "areas = []\n", - "\n", - "for index, row in gdf_boezem_out.iterrows():\n", - " areas.append(row.geometry.area)\n", - "\n", - "gdf_boezem_out[\"area\"] = areas" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "40", - "metadata": {}, - "outputs": [], - "source": [ - "# filter based on area of polygons\n", - "gdf_boezem_out.sort_values(by=\"area\").iloc[[-1]].to_file(f\"{output_folder}/boezem_filter_lvl_1_{waterschap}.gpkg\")\n", - "gdf_boezem_out.sort_values(by=\"area\").iloc[[-2]].to_file(f\"{output_folder}/boezem_filter_lvl_2_{waterschap}.gpkg\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "41", - "metadata": {}, - "outputs": [], - "source": [ - "# Store peilgebieden that do not connect properly\n", - "gdf_boezem_out.sort_values(by=\"area\").iloc[:-1].to_file(f\"{output_folder}/niet_goed_aansluitend_{waterschap}.gpkg\")" - ] - }, - { - "cell_type": "markdown", - "id": "42", - "metadata": {}, - "source": [ - "### Add boezem when peilgebied is part of dm_netwerk" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "43", - "metadata": {}, - "outputs": [], - "source": [ - "# Load Boezem network file (DM_netwerk)\n", - "gdf_dm_netwerk = gpd.read_file(dm_netwerk_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "44", - "metadata": {}, - "outputs": [], - "source": [ - "# Select the peilgebieden that intersect with DM-netwerk\n", - "gdf = gpd.overlay(Rijnland[\"peilgebied\"], gdf_dm_netwerk, how=\"intersection\")" - ] - }, - { - "cell_type": "markdown", - "id": "45", - "metadata": {}, - "source": [ - "### Add HWS_BZM flag to boezem polygons" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "46", - "metadata": {}, - "outputs": [], - "source": [ - "# Add occurence to geodataframe\n", - "boezems = []\n", - "\n", - "for index, row in Rijnland[\"peilgebied\"].iterrows():\n", - " if row.nen3610id in gdf.nen3610id.values:\n", - " boezems.append(True)\n", - " else:\n", - " boezems.append(False)\n", - "\n", - "Rijnland[\"peilgebied\"][\"HWS_BZM\"] = boezems" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "47", - "metadata": {}, - "outputs": [], - "source": [ - "for key in Rijnland.keys():\n", - " print(key)\n", - " Rijnland[str(key)].to_file(f\"{output_folder}/{waterschap}_bzm.gpkg\", layer=str(key), driver=\"GPKG\")" - ] - }, - { - "cell_type": "markdown", - "id": "48", - "metadata": {}, - "source": [ - "### Merge boezem and peilgebied layers" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "49", - "metadata": {}, - "outputs": [], - "source": [ - "# Select globalids of boezem polygons\n", - "bzm_id = Rijnland[\"peilgebied\"].loc[Rijnland[\"peilgebied\"][\"HWS_BZM\"]].globalid\n", - "\n", - "# Match globalids with streefpeil layer globalids\n", - "bzm_waterhoogte = Rijnland[\"streefpeil\"].loc[Rijnland[\"streefpeil\"][\"globalid\"].isin(bzm_id)]\n", - "\n", - "print(len(bzm_id))\n", - "print(len(bzm_waterhoogte))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "50", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem layer\n", - "boezem = gdf_boezem_out.sort_values(by=\"area\").iloc[[-1]]\n", - "\n", - "boezem[\"code\"] = \"dummy_code_999999\"\n", - "boezem[\"globalid\"] = \"dummy_globalid_999999\"\n", - "boezem[\"nen3610id\"] = \"dummy_nen3610id_peilgebied_999999\"\n", - "boezem[\"HWS_BZM\"] = True\n", - "boezem = boezem[[\"code\", \"globalid\", \"nen3610id\", \"HWS_BZM\", \"geometry\"]]\n", - "\n", - "# Create boezem streefpeil layer\n", - "streefpeil_bzm = pd.DataFrame()\n", - "streefpeil_bzm[\"waterhoogte\"] = [None]\n", - "streefpeil_bzm[\"globalid\"] = [\"dummy_globalid_999999\"]\n", - "streefpeil_bzm[\"geometry\"] = [None]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "51", - "metadata": {}, - "outputs": [], - "source": [ - "# Merge boezem layer with peilgebieden\n", - "Rijnland[\"peilgebied\"] = gpd.GeoDataFrame(pd.concat([boezem, Rijnland[\"peilgebied\"]], ignore_index=True))\n", - "Rijnland[\"streefpeil\"] = gpd.GeoDataFrame(pd.concat([streefpeil_bzm, Rijnland[\"streefpeil\"]], ignore_index=True))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "52", - "metadata": {}, - "outputs": [], - "source": [ - "for key in Rijnland.keys():\n", - " print(key)\n", - " Rijnland[str(key)].to_file(f\"{output_folder}/{waterschap}.gpkg\", layer=str(key), driver=\"GPKG\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "53", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:stable]", - "language": "python", - "name": "conda-env-stable-py" - }, - "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.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb deleted file mode 100644 index 490f844..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb +++ /dev/null @@ -1,513 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0", - "metadata": {}, - "source": [ - "# Wetterskip" - ] - }, - { - "cell_type": "markdown", - "id": "1", - "metadata": {}, - "source": [ - "This script adds a new column \"peilgebied_cat\" and make sure the peilgebieden neatly match the HWS layer (Daniel):\n", - "- peilgebied_cat = 0 -> peilgebied\n", - "- peigelbied_cat = 1 -> boezem\n", - "- peilgebied_cat = 2 -> HWS" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2", - "metadata": {}, - "outputs": [], - "source": [ - "import geopandas as gpd\n", - "import numpy as np\n", - "import pandas as pd\n", - "import shapely\n", - "from general_functions import read_gpkg_layers" - ] - }, - { - "cell_type": "markdown", - "id": "3", - "metadata": {}, - "source": [ - "## Set Paths" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4", - "metadata": {}, - "outputs": [], - "source": [ - "# define relative paths\n", - "waterschap = \"Wetterskip\"\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", - "\n", - "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", - "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", - "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_wetterskip.gpkg\"\n", - "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"\n", - "# Dm netwerk\n", - "boezem_path = \"../projects/4750_30/Data_overig/DM_netwerk/waterschapsgrenzen_boezem_netwerk.shp\"" - ] - }, - { - "cell_type": "markdown", - "id": "5", - "metadata": {}, - "source": [ - "## Load Files" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6", - "metadata": {}, - "outputs": [], - "source": [ - "# Load HHNK files\n", - "Wetterskip = read_gpkg_layers(\n", - " gpkg_path=data_path,\n", - " variables=[\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " \"hydroobject\",\n", - " \"duikersifonhevel\",\n", - " \"peilgebied\",\n", - " \"streefpeil\",\n", - " ],\n", - ")\n", - "Wetterskip[\"peilgebied\"] = Wetterskip[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", - "\n", - "# Load waterschap boundaries\n", - "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", - "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", - "\n", - "# Load hws\n", - "gdf_hws = gpd.read_file(hws_path)\n", - "\n", - "# Load buffer\n", - "gdf_buffer = gpd.read_file(buffer_path)\n", - "\n", - "gdf_rhws = gpd.read_file(boezem_path)" - ] - }, - { - "cell_type": "markdown", - "id": "7", - "metadata": {}, - "source": [ - "## Select waterschap boundaries and clip hws layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8", - "metadata": {}, - "outputs": [], - "source": [ - "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[[\"Wetterskip Fryslân\"]]\n", - "\n", - "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" - ] - }, - { - "cell_type": "markdown", - "id": "9", - "metadata": {}, - "source": [ - "## Check Peilgebied and HWS layer overlap:\n", - "1. Identify the overlapping areas\n", - "2. Clip\n", - "3. Calculate overlapping area percentage\n", - "4. Filter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "10", - "metadata": {}, - "outputs": [], - "source": [ - "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(Wetterskip[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", - "\n", - "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(Wetterskip[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", - "\n", - "# Step 3: Calculate Area Percentages\n", - "# Calculate the area of overlaps\n", - "overlaps[\"overlap_area\"] = overlaps.area\n", - "\n", - "# Step 4: Filter based on area Area Percentages\n", - "minimum_area = 500\n", - "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", - "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", - "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" - ] - }, - { - "cell_type": "markdown", - "id": "11", - "metadata": {}, - "source": [ - "## Create peilgebied_cat column" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "12", - "metadata": {}, - "outputs": [], - "source": [ - "# Add to geodataframe\n", - "peilgebieden_cat = []\n", - "\n", - "for index, row in Wetterskip[\"streefpeil\"].iterrows():\n", - " if row.waterhoogte == -0.52:\n", - " peilgebieden_cat.append(1)\n", - " else:\n", - " peilgebieden_cat.append(0)\n", - "\n", - "Wetterskip[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat" - ] - }, - { - "cell_type": "markdown", - "id": "13", - "metadata": {}, - "source": [ - "## Add nhws to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "14", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"peilgebied_cat\"] = 2\n", - "\n", - "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "Wetterskip[\"peilgebied\"] = pd.concat([gdf_hws, Wetterskip[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "15", - "metadata": {}, - "outputs": [], - "source": [ - "# update streefpeil dict key\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", - "\n", - "Wetterskip[\"streefpeil\"] = pd.concat([streefpeil_hws, Wetterskip[\"streefpeil\"]])\n", - "Wetterskip[\"streefpeil\"] = gpd.GeoDataFrame(Wetterskip[\"streefpeil\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "16", - "metadata": {}, - "outputs": [], - "source": [ - "Wetterskip.keys()" - ] - }, - { - "cell_type": "markdown", - "id": "17", - "metadata": {}, - "source": [ - "### Create buffer polygon between NHWS and peilgebied/RHWS" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18", - "metadata": {}, - "outputs": [], - "source": [ - "buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", - "buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", - "buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(Wetterskip[\"peilgebied\"].geometry.tolist()))\n", - "\n", - "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", - "buffer_polygon = buffer_polygon.set_geometry(0)\n", - "buffer_polygon = buffer_polygon.dissolve()\n", - "buffer_polygon = buffer_polygon.rename(columns={0: \"geometry\"})\n", - "buffer_polygon = buffer_polygon.set_geometry(\"geometry\")\n", - "buffer_polygon = buffer_polygon.set_crs(\"EPSG:28992\")" - ] - }, - { - "cell_type": "markdown", - "id": "19", - "metadata": {}, - "source": [ - "### Add buffer to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "20", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", - "buffer_polygon[\"globalid\"] = \"dummy_globalid_nhws_buffer_\" + \"1\"\n", - "buffer_polygon[\"code\"] = \"dummy_code_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"nen3610id\"] = \"dummy_nen3610id_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"peilgebied_cat\"] = 2\n", - "buffer_polygon = buffer_polygon.rename(columns={0: \"geometry\"})\n", - "buffer_polygon = buffer_polygon[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "Wetterskip[\"peilgebied\"] = pd.concat([buffer_polygon, Wetterskip[\"peilgebied\"]])\n", - "Wetterskip[\"peilgebied\"] = gpd.GeoDataFrame(Wetterskip[\"peilgebied\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "21", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer[\"waterhoogte\"] = [np.nan]\n", - "streefpeil_buffer[\"globalid\"] = [\"dummy_globalid_nhws_buffer_1\"]\n", - "streefpeil_buffer[\"geometry\"] = [None]\n", - "\n", - "\n", - "Wetterskip[\"streefpeil\"] = pd.concat([streefpeil_buffer, Wetterskip[\"streefpeil\"]])\n", - "Wetterskip[\"streefpeil\"] = gpd.GeoDataFrame(Wetterskip[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "22", - "metadata": {}, - "source": [ - "## Wetterskip data contains many duplicate peilgebieden" - ] - }, - { - "cell_type": "markdown", - "id": "23", - "metadata": {}, - "source": [ - "### Calculate polygons that overlap with more than 90 % of their area" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "24", - "metadata": { - "jupyter": { - "outputs_hidden": true - }, - "tags": [] - }, - "outputs": [], - "source": [ - "from itertools import combinations\n", - "\n", - "gdf = Wetterskip[\"peilgebied\"]\n", - "gdf = gdf[6:]\n", - "# Initialize a list to store index pairs with more than 90% overlap\n", - "overlapping_pairs = []\n", - "\n", - "# Iterate through each unique pair of geometries\n", - "for idx1, idx2 in combinations(gdf.index, 2):\n", - " print(f\"Processing {idx1} out of {len(gdf)}...\", end=\"\\r\")\n", - " geom1 = gdf.at[idx1, \"geometry\"]\n", - " geom2 = gdf.at[idx2, \"geometry\"]\n", - "\n", - " # Calculate intersection\n", - " intersection = geom1.intersection(geom2)\n", - " intersection_area = intersection.area\n", - "\n", - " # Calculate original areas\n", - " area1 = geom1.area\n", - " area2 = geom2.area\n", - "\n", - " # Calculate intersection percentage for each geometry\n", - " intersection_percentage1 = (intersection_area / area1) * 100\n", - " intersection_percentage2 = (intersection_area / area2) * 100\n", - "\n", - " # Check if both geometries overlap more than 90%\n", - " if intersection_percentage1 > 90 and intersection_percentage2 > 90:\n", - " print((idx1, idx2))\n", - " overlapping_pairs.append((idx1, idx2))\n", - "\n", - "idx1s = []\n", - "idx2s = []\n", - "\n", - "glob_1s = []\n", - "glob_2s = []\n", - "\n", - "\n", - "for idx1, idx2 in overlapping_pairs:\n", - " idx1s.append(idx1)\n", - " idx2s.append(idx2)\n", - "\n", - " glob_1s.append(gdf.iloc[idx1].globalid)\n", - " glob_2s.append(gdf.iloc[idx2].globalid)\n", - "\n", - "\n", - "df = pd.DataFrame()\n", - "df[\"idx1\"] = idx1s\n", - "df[\"idx2\"] = idx2s\n", - "df[\"globalid_1\"] = glob_1s\n", - "df[\"globalid_2\"] = glob_2s\n", - "\n", - "df.to_csv(\"overlapping_wetterskip.csv\")" - ] - }, - { - "cell_type": "markdown", - "id": "25", - "metadata": {}, - "source": [ - "### Create list of duplicates for removal" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "26", - "metadata": {}, - "outputs": [], - "source": [ - "numbers_to_remove = []\n", - "\n", - "# Go loop unique index values\n", - "for number in df[\"idx1\"].unique():\n", - " if number in numbers_to_remove:\n", - " continue\n", - "\n", - " # Find all combinations\n", - " associated_idx2 = df[df[\"idx1\"] == number][\"idx2\"].tolist()\n", - " # Append combinations\n", - " numbers_to_remove.extend(associated_idx2)\n", - "\n", - "# Remove duplicates using set operation\n", - "numbers_to_remove = list(set(numbers_to_remove))" - ] - }, - { - "cell_type": "markdown", - "id": "27", - "metadata": {}, - "source": [ - "### Remove duplicates" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "28", - "metadata": {}, - "outputs": [], - "source": [ - "Wetterskip[\"peilgebied\"] = Wetterskip[\"peilgebied\"][~Wetterskip[\"peilgebied\"].index.isin(numbers_to_remove)]\n", - "Wetterskip[\"streefpeil\"] = Wetterskip[\"streefpeil\"][~Wetterskip[\"streefpeil\"].index.isin(numbers_to_remove)]" - ] - }, - { - "cell_type": "markdown", - "id": "29", - "metadata": {}, - "source": [ - "## Store data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "30", - "metadata": {}, - "outputs": [], - "source": [ - "for key in Wetterskip.keys():\n", - " print(key)\n", - " Wetterskip[str(key)].to_file(f\"{output_folder}/{waterschap}.gpkg\", layer=str(key), driver=\"GPKG\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "31", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "32", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:stable]", - "language": "python", - "name": "conda-env-stable-py" - }, - "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.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb deleted file mode 100644 index ae1a321..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb +++ /dev/null @@ -1,377 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0", - "metadata": { - "tags": [] - }, - "source": [ - "# Zuiderzeeland" - ] - }, - { - "cell_type": "markdown", - "id": "1", - "metadata": {}, - "source": [ - "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer:\n", - "- peilgebied_cat = 0 -> peilgebied\n", - "- peigelbied_cat = 1 -> RHWS (boezem)\n", - "- peilgebied_cat = 2 -> NHWS " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2", - "metadata": {}, - "outputs": [], - "source": [ - "import geopandas as gpd\n", - "import numpy as np\n", - "import pandas as pd\n", - "import shapely\n", - "from general_functions import read_gpkg_layers" - ] - }, - { - "cell_type": "markdown", - "id": "3", - "metadata": {}, - "source": [ - "## Zuiderzeeland" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4", - "metadata": {}, - "outputs": [], - "source": [ - "# define relative paths\n", - "waterschap = \"Zuiderzeeland\"\n", - "waterschap2 = \"Zuiderzeeland\"\n", - "\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", - "\n", - "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", - "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", - "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_zuiderzeeland.gpkg\"\n", - "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" - ] - }, - { - "cell_type": "markdown", - "id": "5", - "metadata": {}, - "source": [ - "### Load Files" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6", - "metadata": {}, - "outputs": [], - "source": [ - "# Load HHNK files\n", - "Zuiderzeeland = read_gpkg_layers(\n", - " gpkg_path=data_path,\n", - " variables=[\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " \"hydroobject\",\n", - " \"duikersifonhevel\",\n", - " \"peilgebied\",\n", - " \"streefpeil\",\n", - " ],\n", - ")\n", - "Zuiderzeeland[\"peilgebied\"] = Zuiderzeeland[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", - "\n", - "# Load waterschap boundaries\n", - "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", - "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", - "\n", - "# Load hws\n", - "gdf_hws = gpd.read_file(hws_path)\n", - "\n", - "# Load buffer\n", - "gdf_buffer = gpd.read_file(buffer_path)" - ] - }, - { - "cell_type": "markdown", - "id": "7", - "metadata": {}, - "source": [ - "## Select waterschap boundaries and clip hws layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8", - "metadata": {}, - "outputs": [], - "source": [ - "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[[\"Waterschap Zuiderzeeland\"]]\n", - "\n", - "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" - ] - }, - { - "cell_type": "markdown", - "id": "9", - "metadata": {}, - "source": [ - "## Peilgebied and HWS layer overlap:\n", - "1. Identify the overlapping areas\n", - "2. Clip\n", - "3. Calculate overlapping area percentage\n", - "4. Filter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "10", - "metadata": {}, - "outputs": [], - "source": [ - "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(Zuiderzeeland[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", - "\n", - "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(Zuiderzeeland[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", - "\n", - "# Step 3: Calculate Area Percentages\n", - "# Calculate the area of overlaps\n", - "overlaps[\"overlap_area\"] = overlaps.area\n", - "\n", - "# Step 4: Filter based on area Area Percentages\n", - "minimum_area = 100\n", - "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", - "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", - "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "11", - "metadata": {}, - "outputs": [], - "source": [ - "# Add occurence to geodataframe\n", - "peilgebieden_cat = []\n", - "\n", - "for index, row in Zuiderzeeland[\"peilgebied\"].iterrows():\n", - " if row.code == \"dummy_code_peilgebied_18207\":\n", - " peilgebieden_cat.append(1)\n", - " print(\"yes\")\n", - " elif row.code == \"dummy_code_peilgebied_18322\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"dummy_code_peilgebied_18155\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"dummy_code_peilgebied_18161\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"dummy_code_peilgebied_19451\":\n", - " peilgebieden_cat.append(2)\n", - " else:\n", - " peilgebieden_cat.append(0)\n", - "\n", - "\n", - "# Add new column and drop old HWS_BZM column\n", - "Zuiderzeeland[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat\n", - "# Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].drop(columns=['HWS_BZM'])" - ] - }, - { - "cell_type": "markdown", - "id": "12", - "metadata": {}, - "source": [ - "## Add nhws to ['peilgebied']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "13", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"peilgebied_cat\"] = 2\n", - "\n", - "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "Zuiderzeeland[\"peilgebied\"] = pd.concat([gdf_hws, Zuiderzeeland[\"peilgebied\"]])" - ] - }, - { - "cell_type": "markdown", - "id": "14", - "metadata": {}, - "source": [ - "## Add HWS to ['streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "15", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", - "\n", - "Zuiderzeeland[\"streefpeil\"] = pd.concat([streefpeil_hws, Zuiderzeeland[\"streefpeil\"]])\n", - "Zuiderzeeland[\"streefpeil\"] = gpd.GeoDataFrame(Zuiderzeeland[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "16", - "metadata": {}, - "source": [ - "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "17", - "metadata": {}, - "outputs": [], - "source": [ - "buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", - "buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", - "buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(Zuiderzeeland[\"peilgebied\"].geometry.tolist()))\n", - "\n", - "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", - "buffer_polygon = buffer_polygon.set_geometry(0)\n", - "buffer_polygon = buffer_polygon.dissolve()\n", - "buffer_polygon = buffer_polygon.rename(columns={0: \"geometry\"})\n", - "buffer_polygon = buffer_polygon.set_geometry(\"geometry\")\n", - "buffer_polygon = buffer_polygon.set_crs(\"EPSG:28992\")" - ] - }, - { - "cell_type": "markdown", - "id": "18", - "metadata": { - "tags": [] - }, - "source": [ - "## Add buffer to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "19", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "buffer_polygon[\"globalid\"] = \"dummy_globalid_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"code\"] = \"dummy_code_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"nen3610id\"] = \"dummy_nen3610id_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"peilgebied_cat\"] = 2\n", - "\n", - "buffer_polygon = buffer_polygon[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "Zuiderzeeland[\"peilgebied\"] = pd.concat([buffer_polygon, Zuiderzeeland[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "20", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer[\"waterhoogte\"] = [np.nan]\n", - "streefpeil_buffer[\"globalid\"] = [\"dummy_globalid_nhws_buffer_1\"]\n", - "streefpeil_buffer[\"geometry\"] = [None]\n", - "\n", - "\n", - "Zuiderzeeland[\"streefpeil\"] = pd.concat([streefpeil_buffer, Zuiderzeeland[\"streefpeil\"]])\n", - "Zuiderzeeland[\"streefpeil\"] = gpd.GeoDataFrame(Zuiderzeeland[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "21", - "metadata": {}, - "source": [ - "## Store output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "22", - "metadata": {}, - "outputs": [], - "source": [ - "Zuiderzeeland[\"peilgebied\"].globalid.is_unique" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "23", - "metadata": {}, - "outputs": [], - "source": [ - "for key in Zuiderzeeland.keys():\n", - " print(key)\n", - " Zuiderzeeland[str(key)].to_file(f\"{output_folder}/{waterschap2}.gpkg\", layer=str(key), driver=\"GPKG\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:stable]", - "language": "python", - "name": "conda-env-stable-py" - }, - "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.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb deleted file mode 100644 index da0aa3f..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb +++ /dev/null @@ -1,367 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0", - "metadata": {}, - "source": [ - "# Hollandse Delta" - ] - }, - { - "cell_type": "markdown", - "id": "1", - "metadata": {}, - "source": [ - "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", - "- peilgebied_cat = 0 -> peilgebied\n", - "- peigelbied_cat = 1 -> RHWS (boezem)\n", - "- peilgebied_cat = 2 -> NHWS " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2", - "metadata": {}, - "outputs": [], - "source": [ - "import geopandas as gpd\n", - "import numpy as np\n", - "import pandas as pd\n", - "from general_functions import read_gpkg_layers" - ] - }, - { - "cell_type": "markdown", - "id": "3", - "metadata": {}, - "source": [ - "## Delfland" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4", - "metadata": {}, - "outputs": [], - "source": [ - "# define relative paths\n", - "waterschap = \"Hollandse_Delta\"\n", - "waterschap2 = \"HD\"\n", - "\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", - "\n", - "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", - "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", - "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_hd.gpkg\"\n", - "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" - ] - }, - { - "cell_type": "markdown", - "id": "5", - "metadata": {}, - "source": [ - "### Load Files" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6", - "metadata": {}, - "outputs": [], - "source": [ - "# Load HHNK files\n", - "HD = read_gpkg_layers(\n", - " gpkg_path=data_path,\n", - " variables=[\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " \"hydroobject\",\n", - " \"duikersifonhevel\",\n", - " \"peilgebied\",\n", - " \"streefpeil\",\n", - " ],\n", - ")\n", - "HD[\"peilgebied\"] = HD[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", - "\n", - "# Load waterschap boundaries\n", - "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", - "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", - "\n", - "# Load hws\n", - "gdf_hws = gpd.read_file(hws_path)\n", - "\n", - "# Load buffer\n", - "gdf_buffer = gpd.read_file(buffer_path)\n", - "gdf_buffer = gdf_buffer.to_crs(\"EPSG:28992\")\n", - "gdf_buffer = gdf_buffer.dissolve()" - ] - }, - { - "cell_type": "markdown", - "id": "7", - "metadata": {}, - "source": [ - "## Select waterschap boundaries and clip hws layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[[\"Waterschap Hollandse Delta\"]]\n", - "\n", - "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" - ] - }, - { - "cell_type": "markdown", - "id": "9", - "metadata": {}, - "source": [ - "## Peilgebied and HWS layer overlap:\n", - "1. Identify the overlapping areas\n", - "2. Clip\n", - "3. Calculate overlapping area percentage\n", - "4. Filter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "10", - "metadata": {}, - "outputs": [], - "source": [ - "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(HD[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", - "\n", - "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(HD[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", - "\n", - "# Step 3: Calculate Area Percentages\n", - "# Calculate the area of overlaps\n", - "overlaps[\"overlap_area\"] = overlaps.area\n", - "\n", - "# Step 4: Filter based on area Area Percentages\n", - "minimum_area = 500\n", - "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", - "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", - "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" - ] - }, - { - "cell_type": "markdown", - "id": "11", - "metadata": {}, - "source": [ - "## Create peilgebied_cat column" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "12", - "metadata": {}, - "outputs": [], - "source": [ - "# Add occurence to geodataframe\n", - "peilgebieden_cat = []\n", - "\n", - "for index, row in HD[\"peilgebied\"].iterrows():\n", - " if row.code == \"Zuiderdiepboezem en havenkanaal Dirksland\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"Havenkanaal van Goedereede\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"Zoetwaterboezem\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"Kanaal door Voorne\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"Binnenbedijkte Maas\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"Boezemloozende door Strijensas\":\n", - " peilgebieden_cat.append(1)\n", - " else:\n", - " peilgebieden_cat.append(0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "13", - "metadata": {}, - "outputs": [], - "source": [ - "# Add new column\n", - "HD[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat" - ] - }, - { - "cell_type": "markdown", - "id": "14", - "metadata": {}, - "source": [ - "## Add nhws to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "15", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"peilgebied_cat\"] = 2\n", - "\n", - "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "HD[\"peilgebied\"] = pd.concat([gdf_hws, HD[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "16", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", - "\n", - "HD[\"streefpeil\"] = pd.concat([streefpeil_hws, HD[\"streefpeil\"]])\n", - "HD[\"streefpeil\"] = gpd.GeoDataFrame(HD[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "17", - "metadata": {}, - "source": [ - "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18", - "metadata": {}, - "outputs": [], - "source": [ - "# Create buffer polygon\n", - "buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how=\"intersection\", keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how=\"difference\", keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, HD[\"peilgebied\"], how=\"difference\", keep_geom_type=True)" - ] - }, - { - "cell_type": "markdown", - "id": "19", - "metadata": {}, - "source": [ - "## Add buffer to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "20", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "buffer_polygon[\"globalid\"] = \"dummy_globalid_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"code\"] = \"dummy_code_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"nen3610id\"] = \"dummy_nen3610id_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"peilgebied_cat\"] = 2\n", - "\n", - "buffer_polygon = buffer_polygon[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "HD[\"peilgebied\"] = pd.concat([buffer_polygon, HD[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "21", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer[\"waterhoogte\"] = [np.nan]\n", - "streefpeil_buffer[\"globalid\"] = [\"dummy_globalid_nhws_buffer_1\"]\n", - "streefpeil_buffer[\"geometry\"] = [None]\n", - "\n", - "\n", - "HD[\"streefpeil\"] = pd.concat([streefpeil_buffer, HD[\"streefpeil\"]])\n", - "HD[\"streefpeil\"] = gpd.GeoDataFrame(HD[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "22", - "metadata": {}, - "source": [ - "## Store output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "23", - "metadata": {}, - "outputs": [], - "source": [ - "for key in HD.keys():\n", - " print(key)\n", - " HD[str(key)].to_file(f\"{output_folder}/{waterschap2}.gpkg\", layer=str(key), driver=\"GPKG\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:stable]", - "language": "python", - "name": "conda-env-stable-py" - }, - "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.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb deleted file mode 100644 index d21b4c7..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb +++ /dev/null @@ -1,361 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0", - "metadata": {}, - "source": [ - "# HHNK" - ] - }, - { - "cell_type": "markdown", - "id": "1", - "metadata": {}, - "source": [ - "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", - "- peilgebied_cat = 0 -> peilgebied\n", - "- peigelbied_cat = 1 -> RHWS (boezem)\n", - "- peilgebied_cat = 2 -> NHWS " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2", - "metadata": {}, - "outputs": [], - "source": [ - "import geopandas as gpd\n", - "import numpy as np\n", - "import pandas as pd\n", - "from general_functions import read_gpkg_layers" - ] - }, - { - "cell_type": "markdown", - "id": "3", - "metadata": {}, - "source": [ - "## Set Paths" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4", - "metadata": {}, - "outputs": [], - "source": [ - "# define relative paths\n", - "waterschap = \"HHNK\"\n", - "waterschap2 = \"Noorderkwartier\"\n", - "\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", - "\n", - "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", - "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", - "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_hhnk.gpkg\"\n", - "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" - ] - }, - { - "cell_type": "markdown", - "id": "5", - "metadata": {}, - "source": [ - "## Load files" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6", - "metadata": {}, - "outputs": [], - "source": [ - "# Load HHNK files\n", - "HHNK = read_gpkg_layers(\n", - " gpkg_path=data_path,\n", - " variables=[\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " \"hydroobject\",\n", - " \"duikersifonhevel\",\n", - " \"peilgebied\",\n", - " \"streefpeil\",\n", - " ],\n", - ")\n", - "HHNK[\"peilgebied\"] = HHNK[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", - "\n", - "# Load waterschap boundaries\n", - "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", - "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", - "\n", - "# Load hws\n", - "gdf_hws = gpd.read_file(hws_path)\n", - "\n", - "# Load buffer\n", - "gdf_buffer = gpd.read_file(buffer_path)" - ] - }, - { - "cell_type": "markdown", - "id": "7", - "metadata": {}, - "source": [ - "## Select waterschap boundaries and clip hws layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8", - "metadata": {}, - "outputs": [], - "source": [ - "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[[\"HH Hollands Noorderkwartier\"]]\n", - "\n", - "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")\n", - "gdf_hws.plot()" - ] - }, - { - "cell_type": "markdown", - "id": "9", - "metadata": {}, - "source": [ - "## Peilgebied and HWS layer overlap:\n", - "1. Identify the overlapping areas\n", - "2. Clip\n", - "3. Calculate overlapping area percentage\n", - "4. Filter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "10", - "metadata": {}, - "outputs": [], - "source": [ - "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(HHNK[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", - "\n", - "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(HHNK[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", - "\n", - "# Step 3: Calculate Area Percentages\n", - "# Calculate the area of overlaps\n", - "overlaps[\"overlap_area\"] = overlaps.area\n", - "\n", - "# Step 4: Filter based on area Area Percentages\n", - "minimum_area = 20000\n", - "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", - "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", - "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" - ] - }, - { - "cell_type": "markdown", - "id": "11", - "metadata": {}, - "source": [ - "## Create peilgebied_cat column" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "12", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# Add occurence to geodataframe\n", - "peilgebieden_cat = []\n", - "\n", - "for index, row in HHNK[\"peilgebied\"].iterrows():\n", - " if row.globalid in overlap_ids:\n", - " peilgebieden_cat.append(2)\n", - "\n", - " elif row.HWS_BZM is True:\n", - " peilgebieden_cat.append(1)\n", - "\n", - " elif row.HWS_BZM is False:\n", - " peilgebieden_cat.append(0)\n", - "\n", - "# Add new column and drop old HWS_BZM column\n", - "HHNK[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat\n", - "HHNK[\"peilgebied\"] = HHNK[\"peilgebied\"].drop(columns=[\"HWS_BZM\"])" - ] - }, - { - "cell_type": "markdown", - "id": "13", - "metadata": {}, - "source": [ - "## Add nhws to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "14", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"peilgebied_cat\"] = 2\n", - "\n", - "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "HHNK[\"peilgebied\"] = pd.concat([gdf_hws, HHNK[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "15", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", - "\n", - "HHNK[\"streefpeil\"] = pd.concat([streefpeil_hws, HHNK[\"streefpeil\"]])\n", - "HHNK[\"streefpeil\"] = gpd.GeoDataFrame(HHNK[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "16", - "metadata": {}, - "source": [ - "### Create layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "17", - "metadata": {}, - "outputs": [], - "source": [ - "# Create buffer polygon\n", - "buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how=\"intersection\", keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how=\"difference\", keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, HHNK[\"peilgebied\"], how=\"difference\", keep_geom_type=True)" - ] - }, - { - "cell_type": "markdown", - "id": "18", - "metadata": {}, - "source": [ - "## Add buffer to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "19", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "buffer_polygon[\"globalid\"] = \"dummy_globalid_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"code\"] = \"dummy_code_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"nen3610id\"] = \"dummy_nen3610id_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"peilgebied_cat\"] = 2\n", - "\n", - "buffer_polygon = buffer_polygon[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "HHNK[\"peilgebied\"] = pd.concat([buffer_polygon, HHNK[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "20", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer[\"waterhoogte\"] = [np.nan]\n", - "streefpeil_buffer[\"globalid\"] = [\"dummy_globalid_nhws_buffer_1\"]\n", - "streefpeil_buffer[\"geometry\"] = [None]\n", - "\n", - "\n", - "HHNK[\"streefpeil\"] = pd.concat([streefpeil_buffer, HHNK[\"streefpeil\"]])\n", - "HHNK[\"streefpeil\"] = gpd.GeoDataFrame(HHNK[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "21", - "metadata": {}, - "source": [ - "## Write output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "22", - "metadata": {}, - "outputs": [], - "source": [ - "for key in HHNK.keys():\n", - " print(key)\n", - " HHNK[str(key)].to_file(f\"{output_folder}/{waterschap2}.gpkg\", layer=str(key), driver=\"GPKG\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "23", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:stable]", - "language": "python", - "name": "conda-env-stable-py" - }, - "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.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb deleted file mode 100644 index 2904edf..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb +++ /dev/null @@ -1,414 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0", - "metadata": {}, - "source": [ - "# HHSK" - ] - }, - { - "cell_type": "markdown", - "id": "1", - "metadata": {}, - "source": [ - "This script adds a new column \"peilgebied_cat\" and make sure the peilgebieden allign witgh the HWS layer (Daniel):\n", - "- peilgebied_cat = 0 -> peilgebied\n", - "- peigelbied_cat = 1 -> RHWS (boezem)\n", - "- peilgebied_cat = 2 -> NHWS Notes:\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2", - "metadata": {}, - "outputs": [], - "source": [ - "import geopandas as gpd\n", - "import numpy as np\n", - "import pandas as pd\n", - "import shapely\n", - "from general_functions import read_gpkg_layers" - ] - }, - { - "cell_type": "markdown", - "id": "3", - "metadata": {}, - "source": [ - "## HHSK" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4", - "metadata": {}, - "outputs": [], - "source": [ - "# define relative paths\n", - "waterschap = \"HHSK\"\n", - "\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", - "\n", - "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", - "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", - "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_HHSK.gpkg\"\n", - "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" - ] - }, - { - "cell_type": "markdown", - "id": "5", - "metadata": {}, - "source": [ - "## Load Files" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6", - "metadata": {}, - "outputs": [], - "source": [ - "# Load HHNK files\n", - "HHSK = read_gpkg_layers(\n", - " gpkg_path=data_path,\n", - " variables=[\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " \"hydroobject\",\n", - " \"duikersifonhevel\",\n", - " \"peilgebied\",\n", - " \"streefpeil\",\n", - " ],\n", - ")\n", - "HHSK[\"peilgebied\"] = HHSK[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", - "\n", - "# Load waterschap boundaries\n", - "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", - "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", - "\n", - "# Load hws\n", - "gdf_hws = gpd.read_file(hws_path)\n", - "\n", - "# Load buffer\n", - "gdf_buffer = gpd.read_file(buffer_path)\n", - "gdf_buffer = gdf_buffer.to_crs(\"EPSG:28992\")\n", - "gdf_buffer = gdf_buffer.dissolve()" - ] - }, - { - "cell_type": "markdown", - "id": "7", - "metadata": {}, - "source": [ - "## Select waterschap boundaries and clip hws layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8", - "metadata": {}, - "outputs": [], - "source": [ - "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[[\"Schieland en de Krimpenerwaard\"]]\n", - "\n", - "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" - ] - }, - { - "cell_type": "markdown", - "id": "9", - "metadata": {}, - "source": [ - "## Check Peilgebied and HWS layer overlap:\n", - "1. Identify the overlapping areas\n", - "2. Clip\n", - "3. Calculate overlapping area percentage\n", - "4. Filter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "10", - "metadata": {}, - "outputs": [], - "source": [ - "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(HHSK[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", - "gdf_hws = gpd.overlay(gdf_hws, HHSK[\"peilgebied\"], how=\"difference\")\n", - "\n", - "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(HHSK[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", - "\n", - "# Step 3: Calculate Area Percentages\n", - "# Calculate the area of overlaps\n", - "overlaps[\"overlap_area\"] = overlaps.area\n", - "\n", - "# Step 4: Filter based on area Area Percentages\n", - "minimum_area = 50\n", - "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", - "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", - "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")\n", - "\n", - "# gdf_hws = gdf_hws_clipped" - ] - }, - { - "cell_type": "markdown", - "id": "11", - "metadata": {}, - "source": [ - "## Create peilgebied_cat column" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "12", - "metadata": {}, - "outputs": [], - "source": [ - "# Add to geodataframe\n", - "peilgebieden_cat = []\n", - "\n", - "for index, row in HHSK[\"peilgebied\"].iterrows():\n", - " if row.code == \"GPG-399\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"GPG-403\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"GPG-144_RV1\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"GPG-144_RV2\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"GPG-144_RV3\":\n", - " peilgebieden_cat.append(1)\n", - "\n", - " else:\n", - " peilgebieden_cat.append(0)\n", - "\n", - "HHSK[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat" - ] - }, - { - "cell_type": "markdown", - "id": "13", - "metadata": { - "tags": [] - }, - "source": [ - "## Add nhws to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "14", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"peilgebied_cat\"] = 2\n", - "\n", - "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "HHSK[\"peilgebied\"] = pd.concat([gdf_hws, HHSK[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "15", - "metadata": {}, - "outputs": [], - "source": [ - "# update streefpeil dict key\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", - "\n", - "HHSK[\"streefpeil\"] = pd.concat([streefpeil_hws, HHSK[\"streefpeil\"]])\n", - "HHSK[\"streefpeil\"] = gpd.GeoDataFrame(HHSK[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "16", - "metadata": {}, - "source": [ - "### Create buffer polygon between NHWS and peilgebied/RHWS" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "17", - "metadata": {}, - "outputs": [], - "source": [ - "buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", - "buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", - "buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(HHSK[\"peilgebied\"].geometry.tolist()))\n", - "\n", - "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", - "buffer_polygon = buffer_polygon.set_geometry(0)\n", - "buffer_polygon = buffer_polygon.dissolve()\n", - "buffer_polygon = buffer_polygon.rename(columns={0: \"geometry\"})\n", - "buffer_polygon = buffer_polygon.set_geometry(\"geometry\")\n", - "buffer_polygon = buffer_polygon.set_crs(\"EPSG:28992\")" - ] - }, - { - "cell_type": "markdown", - "id": "18", - "metadata": {}, - "source": [ - "### Add buffer to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "19", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", - "buffer_polygon[\"globalid\"] = \"dummy_globalid_nhws_buffer_\" + \"1\"\n", - "buffer_polygon[\"code\"] = \"dummy_code_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"nen3610id\"] = \"dummy_nen3610id_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"peilgebied_cat\"] = 2\n", - "buffer_polygon = buffer_polygon.rename(columns={0: \"geometry\"})\n", - "buffer_polygon = buffer_polygon[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "HHSK[\"peilgebied\"] = pd.concat([buffer_polygon, HHSK[\"peilgebied\"]])\n", - "HHSK[\"peilgebied\"] = gpd.GeoDataFrame(HHSK[\"peilgebied\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "20", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer[\"waterhoogte\"] = [np.nan]\n", - "streefpeil_buffer[\"globalid\"] = [\"dummy_globalid_nhws_buffer_1\"]\n", - "streefpeil_buffer[\"geometry\"] = [None]\n", - "\n", - "\n", - "HHSK[\"streefpeil\"] = pd.concat([streefpeil_buffer, HHSK[\"streefpeil\"]])\n", - "HHSK[\"streefpeil\"] = gpd.GeoDataFrame(HHSK[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "21", - "metadata": {}, - "source": [ - "### Fix duplicates hydroobjects" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "22", - "metadata": {}, - "outputs": [], - "source": [ - "# Rename duplicates\n", - "# identify duplicates\n", - "HHSK[\"hydroobject\"][\"temp_globalid\"] = HHSK[\"hydroobject\"].groupby(\"globalid\").cumcount() + 1\n", - "HHSK[\"hydroobject\"][\"temp_code\"] = HHSK[\"hydroobject\"].groupby(\"code\").cumcount() + 1\n", - "HHSK[\"hydroobject\"][\"temp_nen3610id\"] = HHSK[\"hydroobject\"].groupby(\"nen3610id\").cumcount() + 1\n", - "\n", - "# AAdd _1 etc\n", - "HHSK[\"hydroobject\"][\"globalid_new\"] = HHSK[\"hydroobject\"].apply(\n", - " lambda x: f\"{x['globalid']}_{x['temp_globalid']}\" if x[\"temp_globalid\"] > 1 else x[\"globalid\"], axis=1\n", - ")\n", - "HHSK[\"hydroobject\"][\"code_new\"] = HHSK[\"hydroobject\"].apply(\n", - " lambda x: f\"{x['code']}_{x['temp_code']}\" if x[\"temp_code\"] > 1 else x[\"code\"], axis=1\n", - ")\n", - "HHSK[\"hydroobject\"][\"nen3610id_new\"] = HHSK[\"hydroobject\"].apply(\n", - " lambda x: f\"{x['nen3610id']}_{x['temp_nen3610id']}\" if x[\"temp_nen3610id\"] > 1 else x[\"nen3610id\"], axis=1\n", - ")\n", - "\n", - "# drop columns\n", - "HHSK[\"hydroobject\"] = HHSK[\"hydroobject\"].drop(\n", - " columns=[\"temp_globalid\", \"temp_code\", \"temp_nen3610id\", \"globalid\", \"nen3610id\", \"code\"]\n", - ")\n", - "# rename columns\n", - "HHSK[\"hydroobject\"] = HHSK[\"hydroobject\"].rename(\n", - " columns={\"globalid_new\": \"globalid\", \"code_new\": \"code\", \"nen3610id_new\": \"nen3610id\"}\n", - ")\n", - "# check\n", - "print(HHSK[\"hydroobject\"].globalid.is_unique)\n", - "print(HHSK[\"hydroobject\"].code.is_unique)\n", - "print(HHSK[\"hydroobject\"].nen3610id.is_unique)" - ] - }, - { - "cell_type": "markdown", - "id": "23", - "metadata": {}, - "source": [ - "### Store post-processed data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "24", - "metadata": {}, - "outputs": [], - "source": [ - "for key in HHSK.keys():\n", - " print(key)\n", - " HHSK[str(key)].to_file(f\"{output_folder}/{waterschap}.gpkg\", layer=str(key), driver=\"GPKG\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:stable]", - "language": "python", - "name": "conda-env-stable-py" - }, - "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.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb deleted file mode 100644 index 5d7841f..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb +++ /dev/null @@ -1,374 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0", - "metadata": {}, - "source": [ - "# Scheldestromen" - ] - }, - { - "cell_type": "markdown", - "id": "1", - "metadata": {}, - "source": [ - "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", - "- peilgebied_cat = 0 -> peilgebied\n", - "- peigelbied_cat = 1 -> RHWS (boezem)\n", - "- peilgebied_cat = 2 -> NHWS " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2", - "metadata": {}, - "outputs": [], - "source": [ - "import geopandas as gpd\n", - "import numpy as np\n", - "import pandas as pd\n", - "from general_functions import read_gpkg_layers" - ] - }, - { - "cell_type": "markdown", - "id": "3", - "metadata": {}, - "source": [ - "## Scheldestromen" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4", - "metadata": {}, - "outputs": [], - "source": [ - "# define relative paths\n", - "waterschap = \"Scheldestromen\"\n", - "waterschap2 = \"Scheldestromen\"\n", - "\n", - "data_path = f\"../projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", - "\n", - "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", - "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", - "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_Scheldestromen.gpkg\"\n", - "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" - ] - }, - { - "cell_type": "markdown", - "id": "5", - "metadata": {}, - "source": [ - "### Load Files" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6", - "metadata": {}, - "outputs": [], - "source": [ - "# Load HHNK files\n", - "Scheldestromen = read_gpkg_layers(\n", - " gpkg_path=data_path,\n", - " variables=[\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " \"hydroobject\",\n", - " \"duikersifonhevel\",\n", - " \"peilgebied\",\n", - " \"streefpeil\",\n", - " ],\n", - ")\n", - "Scheldestromen[\"peilgebied\"] = Scheldestromen[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", - "\n", - "# Load waterschap boundaries\n", - "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", - "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", - "\n", - "# Load hws\n", - "gdf_hws = gpd.read_file(hws_path)\n", - "\n", - "# Load buffer\n", - "gdf_buffer = gpd.read_file(buffer_path)\n", - "gdf_buffer = gdf_buffer.to_crs(\"EPSG:28992\")\n", - "gdf_buffer = gdf_buffer.dissolve()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7", - "metadata": {}, - "outputs": [], - "source": [ - "Scheldestromen[\"peilgebied\"].globalid.is_unique" - ] - }, - { - "cell_type": "markdown", - "id": "8", - "metadata": {}, - "source": [ - "## Select waterschap boundaries and clip hws layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9", - "metadata": {}, - "outputs": [], - "source": [ - "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[[\"Waterschap Scheldestromen\"]]\n", - "\n", - "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" - ] - }, - { - "cell_type": "markdown", - "id": "10", - "metadata": {}, - "source": [ - "## Peilgebied and HWS layer overlap:\n", - "1. Identify the overlapping areas\n", - "2. Clip\n", - "3. Calculate overlapping area percentage\n", - "4. Filter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "11", - "metadata": {}, - "outputs": [], - "source": [ - "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(Scheldestromen[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", - "\n", - "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(Scheldestromen[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", - "\n", - "# Step 3: Calculate Area Percentages\n", - "# Calculate the area of overlaps\n", - "overlaps[\"overlap_area\"] = overlaps.area\n", - "\n", - "# Step 4: Filter based on area Area Percentages\n", - "minimum_area = 500\n", - "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", - "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", - "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" - ] - }, - { - "cell_type": "markdown", - "id": "12", - "metadata": {}, - "source": [ - "## Create peilgebied_cat columnm" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "13", - "metadata": {}, - "outputs": [], - "source": [ - "# Add occurence to geodataframe\n", - "peilgebieden_cat = []\n", - "\n", - "for index, row in Scheldestromen[\"peilgebied\"].iterrows():\n", - " if row.nen3610id == \"dummy_nen3610id_peilgebied_549\":\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"GPG437\":\n", - " print(\"yes\")\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == \"dummy_code_nhws_3\":\n", - " peilgebieden_cat.append(1)\n", - " print(\"yes\")\n", - " else:\n", - " peilgebieden_cat.append(0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "14", - "metadata": {}, - "outputs": [], - "source": [ - "# Add new column\n", - "Scheldestromen[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat" - ] - }, - { - "cell_type": "markdown", - "id": "15", - "metadata": {}, - "source": [ - "## Add nhws to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "16", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", - "gdf_hws[\"peilgebied_cat\"] = 2\n", - "\n", - "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "Scheldestromen[\"peilgebied\"] = pd.concat([gdf_hws, Scheldestromen[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "17", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", - "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", - "\n", - "Scheldestromen[\"streefpeil\"] = pd.concat([streefpeil_hws, Scheldestromen[\"streefpeil\"]])\n", - "Scheldestromen[\"streefpeil\"] = gpd.GeoDataFrame(Scheldestromen[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "18", - "metadata": {}, - "source": [ - "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "19", - "metadata": {}, - "outputs": [], - "source": [ - "# Create buffer polygon\n", - "buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how=\"intersection\", keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how=\"difference\", keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, Scheldestromen[\"peilgebied\"], how=\"difference\", keep_geom_type=True)" - ] - }, - { - "cell_type": "markdown", - "id": "20", - "metadata": { - "tags": [] - }, - "source": [ - "## Add buffer to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "21", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "buffer_polygon[\"globalid\"] = \"dummy_globalid_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"code\"] = \"dummy_code_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"nen3610id\"] = \"dummy_nen3610id_nhws_buffer_\" + buffer_polygon.index.astype(str)\n", - "buffer_polygon[\"peilgebied_cat\"] = 2\n", - "\n", - "buffer_polygon = buffer_polygon[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", - "\n", - "Scheldestromen[\"peilgebied\"] = pd.concat([buffer_polygon, Scheldestromen[\"peilgebied\"]])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "22", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer[\"waterhoogte\"] = [np.nan]\n", - "streefpeil_buffer[\"globalid\"] = [\"dummy_globalid_nhws_buffer_1\"]\n", - "streefpeil_buffer[\"geometry\"] = [None]\n", - "\n", - "Scheldestromen[\"streefpeil\"] = pd.concat([streefpeil_buffer, Scheldestromen[\"streefpeil\"]])\n", - "Scheldestromen[\"streefpeil\"] = gpd.GeoDataFrame(Scheldestromen[\"streefpeil\"])" - ] - }, - { - "cell_type": "markdown", - "id": "23", - "metadata": {}, - "source": [ - "## Store output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "24", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "for key in Scheldestromen.keys():\n", - " print(key)\n", - " Scheldestromen[str(key)].to_file(f\"{output_folder}/{waterschap2}.gpkg\", layer=str(key), driver=\"GPKG\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:stable]", - "language": "python", - "name": "conda-env-stable-py" - }, - "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.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From 2e70fd94ba00e89e3667ab87cf0f80a62a4c7169 Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Wed, 7 Aug 2024 09:02:23 +0200 Subject: [PATCH 05/25] Update the data processing notebooks --- .../postprocess_data/AmstelGooienVecht.ipynb | 658 +++ .../postprocess_data/Delfland.ipynb | 591 +++ .../postprocess_data/HHNK.ipynb | 993 ++++ .../postprocess_data/HHSK.ipynb | 1360 +++++ .../postprocess_data/Hollandse_Delta.ipynb | 622 +++ .../postprocess_data/Rijnland.ipynb | 1197 +++++ .../postprocess_data/Rivierenland.ipynb | 818 +++ .../postprocess_data/Scheldestromen.ipynb | 594 +++ .../postprocess_data/Wetterskip.ipynb | 1509 ++++++ .../postprocess_data/Zuiderzeeland.ipynb | 4629 +++++++++++++++++ .../postprocess_data/general_functions.py | 291 +- 11 files changed, 13103 insertions(+), 159 deletions(-) create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/AmstelGooienVecht.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Delfland.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHNK.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHSK.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Hollandse_Delta.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rijnland.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rivierenland.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Scheldestromen.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Wetterskip.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Zuiderzeeland.ipynb diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/AmstelGooienVecht.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/AmstelGooienVecht.ipynb new file mode 100644 index 0000000..3b33140 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/AmstelGooienVecht.ipynb @@ -0,0 +1,658 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "d13f9ab1-f6e7-4958-96cc-343f0c2138f6", + "metadata": {}, + "outputs": [], + "source": [ + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "import shapely\n", + "from shapely import wkt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "ad89ae02-4242-4aca-bd5a-c0c3fd8592ac", + "metadata": {}, + "outputs": [], + "source": [ + "from general_functions import *\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "pd.set_option('display.max_columns', None)\n" + ] + }, + { + "cell_type": "markdown", + "id": "09981d65-c7d2-4802-9fca-2ef490213b2c", + "metadata": {}, + "source": [ + "# Amstel, Gooi en Vecht" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b5fc0f1d-b2bf-4933-9472-96cb110e6111", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'AVG'\n", + "path_AVG = '..\\..\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht'\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/AmstelGooienVecht\"\n", + "DM_path = '..\\..\\Data_overig\\DM_Netwerk\\DM_Netwerk.shp'\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d54f0c7c-93a1-44bd-b0f9-fcf37279dc83", + "metadata": {}, + "outputs": [], + "source": [ + "#AVG has delivered all data in CSV format. Load it in manually with some data mutations\n", + "AVG = {}\n", + "variables = ['stuw', 'gemaal', 'afsluitmiddel', 'duikersifonhevel', 'hydroobject']#, 'peilgebiedpraktijk', 'peilafwijkinggebied']\n", + "for variable in variables:\n", + " path_variable = os.path.join(path_AVG, variable + '.csv')\n", + " df_var = pd.read_csv(path_variable, delimiter=';')\n", + " geom_col = df_var.keys()[-1] #retrieve the column name\n", + " \n", + " if not 'geometrie' in geom_col:\n", + " raise ValueError('No \"geometry\" string found in the last column of the dataframe. Check for existence') \n", + " \n", + " df_var['geometry'] = df_var[geom_col].apply(lambda x: wkt.loads(x.split(';')[-1])) \n", + " AVG[variable] = df_var\n", + " \n", + "#there is one last gpkg which contains the streefpeilen (and peilgebieden)\n", + "# AVG['peilgebied'] = gpd.read_file(os.path.join(path_AVG, 'vigerende_peilgebieden.gpkg'))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "d8ca7d9a-fcd9-4154-9278-029f2a25b7b7", + "metadata": {}, + "outputs": [], + "source": [ + "# AVG['peilgebied']['streefpeil'] = np.nan\n", + "# AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['GPGZMRPL'])\n", + "# AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['IWS_GPGVASTP'])\n", + "# AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['IWS_GPGONDP'])\n", + "\n", + "\n", + "# print('Number of missing streefpeilen = ', len(AVG['peilgebied']['streefpeil'].loc[AVG['peilgebied']['streefpeil'].isna()]))\n", + "\n", + "# fig, ax = plt.subplots()\n", + "# AVG['peilgebied'].geometry.plot(ax=ax, color='cornflowerblue')\n", + "# AVG['peilgebied'].loc[AVG['peilgebied']['streefpeil'].isna()].geometry.plot(ax=ax, color='red')\n", + "# ax.legend()" + ] + }, + { + "cell_type": "markdown", + "id": "3c3e568b-79b0-4809-8274-a029cc61b534", + "metadata": {}, + "source": [ + "# Nalevering" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "31327447-601e-4f6a-b141-e97162433b37", + "metadata": {}, + "outputs": [], + "source": [ + "#overwrite previous data\n", + "AVG['stuw'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Stuw.shp\")\n", + "# AVG['stuw'] = AVG['stuw'].loc[AVG['stuw'].LHM == 'LHM']\n", + "\n", + "AVG['gemaal'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Gemaal.shp\")\n", + "# AVG['gemaal'] = AVG['gemaal'].loc[AVG['gemaal'].LHM == 'LHM']\n", + "\n", + "AVG['duikersifonhevel'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Duikersifonhevel.shp\")\n", + "AVG['hydroobject'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\LHM_hydrovakken.shp\")\n", + "\n", + "#something went wrong with the new CRS. Take the old gpkg, and apply the crs to the new gpkg\n", + "peilgebied_oud = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\LHM_gebieden.shp\")\n", + "# AVG['peilgebied'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\verbeterde_LHM_gebieden\\LHM_gebieden.shp\")\n", + "AVG['peilgebied'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\verbeterde_LHM_gebieden_geactualiseerd\\LHM_gebieden.shp\")\n", + "AVG['peilgebied'] = AVG['peilgebied'].set_crs(crs = peilgebied_oud.crs, allow_override=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cd6401ef-673b-474d-bcac-0582bc3a8717", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fc108c0a-60f0-4b26-9d68-d2b0fac64041", + "metadata": {}, + "outputs": [], + "source": [ + "# AVG['peilgebied'] = AVG['peilgebied'].to_crs(crs='EPSG:28992')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a1edefc2-1230-49ba-b7e5-8c1346f02046", + "metadata": {}, + "outputs": [], + "source": [ + "# haven = AVG['peilgebied'].loc[AVG['peilgebied'].GAFNAAM == \"Noordzeekanaal/IJ/Amsterdamrijnkanaalboezem\"]\n", + "# haven = haven.explode(index_parts=False)\n", + "\n", + "# AVG['peilgebied'] = AVG['peilgebied'].loc[AVG['peilgebied'].GAFNAAM != \"Noordzeekanaal/IJ/Amsterdamrijnkanaalboezem\"] #remove this from the gdf, to be added later" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e0384530-d4aa-4ba0-8423-e729b51865b5", + "metadata": {}, + "outputs": [], + "source": [ + "# haven = haven.reset_index(drop=True)\n", + "# haven.GAFIDENT = haven.GAFIDENT + '_' + haven.index.astype(str)\n", + "# haven.GAFNAAM = haven.GAFNAAM + '_' + haven.index.astype(str)\n", + "\n", + "# AVG['peilgebied'] = gpd.GeoDataFrame(pd.concat([AVG['peilgebied'], haven]), geometry = 'geometry')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "adef7ed3-1f50-4576-9aa6-21f439e1e391", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "f68a9597-d088-40c2-88df-931aa281d000", + "metadata": {}, + "outputs": [], + "source": [ + "AVG['peilgebied'].loc[AVG['peilgebied'].zomer == 0, 'zomer'] = np.nan\n", + "AVG['peilgebied'].loc[AVG['peilgebied'].winter == 0, 'winter'] = np.nan\n", + "AVG['peilgebied'].loc[AVG['peilgebied'].vast == 0, 'vast'] = np.nan" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "951b70c4-740a-47db-9abf-7c5770aa24bb", + "metadata": {}, + "outputs": [], + "source": [ + "AVG['peilgebied']['streefpeil'] = AVG['peilgebied'][['vast', 'zomer']].min(axis=1, skipna=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "320352cd-a10b-48ff-afc0-71023df12cb4", + "metadata": {}, + "outputs": [], + "source": [ + "#determine aanvoer en afvoer gemalen\n", + "AVG['gemaal']['func_aanvoer'], AVG['gemaal']['func_afvoer'], AVG['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "AVG['gemaal']['functiegemaal'] = AVG['gemaal']['naam'].astype(str) # aan AGV gevraagd of alle opmaling informatie in de kolom 'naam' verwerkt is. Antwoord: ja\n", + "\n", + "AVG['gemaal'].loc[AVG['gemaal']['functiegemaal'] == 'onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", + "\n", + "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('fvoer|nderbemaling|f-|oodpomp'), 'func_afvoer'] = True\n", + "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('anvoergemaal|pmaling|an-|p-|pvoer'), 'func_aanvoer'] = True\n", + "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('irculatie'), 'func_circulatie'] = True\n", + "AVG['gemaal'].loc[(AVG['gemaal'].func_afvoer == False) &\n", + " (AVG['gemaal'].func_aanvoer == False) &\n", + " (AVG['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "7fd2e22c-95a0-4877-b160-843b36ea56a3", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_21164\\3966756081.py:47: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " AVG['streefpeil']['code'] = 'dummy_code_streefpeil_' + AVG['streefpeil'].index.astype(str)\n", + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_21164\\3966756081.py:48: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " AVG['streefpeil']['geometry'] = None\n" + ] + } + ], + "source": [ + "#stuw\n", + "AVG['stuw'] = AVG['stuw'][['code', 'geometry']]\n", + "AVG['stuw'].loc[:, 'nen3610id'] = 'dummy_nen3610id_stuw_' + AVG['stuw'].index.astype(str)\n", + "AVG['stuw']['globalid'] = 'dummy_globalid_stuw_' + AVG['stuw'].index.astype(str)\n", + "AVG['stuw'] = gpd.GeoDataFrame(AVG['stuw']).to_crs('epsg:28992')\n", + "\n", + "#gemaal\n", + "AVG['gemaal'] = AVG['gemaal'][['code', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "AVG['gemaal'].loc[:, 'nen3610id'] = 'dummy_nen3610id_gemaal_' + AVG['gemaal'].index.astype(str)\n", + "AVG['gemaal']['globalid'] = 'dummy_globalid_gemaal_' + AVG['gemaal'].index.astype(str)\n", + "AVG['gemaal'] = gpd.GeoDataFrame(AVG['gemaal']).to_crs('epsg:28992')\n", + "\n", + "#afsluitmiddel\n", + "AVG['afsluitmiddel'] = AVG['afsluitmiddel'][['code', 'geometry']]\n", + "AVG['afsluitmiddel'].loc[:, 'nen3610id'] = 'dummy_nen3610id_afsluitmiddel_' + AVG['afsluitmiddel'].index.astype(str)\n", + "AVG['afsluitmiddel']['globalid'] = 'dummy_globalid_afsluitmiddel_' + AVG['afsluitmiddel'].index.astype(str)\n", + "AVG['afsluitmiddel'] = gpd.GeoDataFrame(AVG['afsluitmiddel']).set_crs('epsg:28992')\n", + "\n", + "#duikersifonhevel\n", + "AVG['duikersifonhevel'] = AVG['duikersifonhevel'][['code', 'geometry']]\n", + "AVG['duikersifonhevel'].loc[:, 'nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + AVG['duikersifonhevel'].index.astype(str)\n", + "AVG['duikersifonhevel']['globalid'] = 'dummy_globalid_duikersifonhevel_' + AVG['duikersifonhevel'].index.astype(str)\n", + "AVG['duikersifonhevel'] = gpd.GeoDataFrame(AVG['duikersifonhevel']).to_crs('epsg:28992')\n", + "\n", + "#hydroobject\n", + "AVG['hydroobject'] = AVG['hydroobject'][['geometry']]\n", + "AVG['hydroobject']['code'] = 'dummy_code_hydroobject_' + AVG['hydroobject'].index.astype(str)\n", + "AVG['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + AVG['hydroobject'].index.astype(str)\n", + "AVG['hydroobject']['globalid'] = 'dummy_globalid_hydroobject_' + AVG['hydroobject'].index.astype(str)\n", + "AVG['hydroobject'] = gpd.GeoDataFrame(AVG['hydroobject']).set_crs('epsg:28992')\n", + "\n", + "# #streefpeil\n", + "# AVG['streefpeil'] = pd.DataFrame()\n", + "# AVG['streefpeil']['waterhoogte'] = AVG['peilgebied']['streefpeil']\n", + "# AVG['streefpeil']['globalid'] = 'dummy_globalid_streefpeil_' + AVG['streefpeil'].index.astype(str)\n", + "# AVG['streefpeil']['geometry'] = np.nan\n", + "# AVG['streefpeil'] = gpd.GeoDataFrame(AVG['streefpeil']).set_crs('epsg:28992')\n", + "\n", + "#peilgebied\n", + "AVG['peilgebied']['code'] = AVG['peilgebied']['GAFNAAM']\n", + "AVG['peilgebied']['geometry'] = AVG['peilgebied']['geometry']\n", + "AVG['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + AVG['peilgebied'].index.astype(str)\n", + "AVG['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + AVG['peilgebied'].index.astype(str)\n", + "AVG['peilgebied']['waterhoogte'] = AVG['peilgebied'].streefpeil\n", + "\n", + "AVG['streefpeil'] = AVG['peilgebied'][['waterhoogte', 'globalid']]\n", + "AVG['streefpeil']['code'] = 'dummy_code_streefpeil_' + AVG['streefpeil'].index.astype(str)\n", + "AVG['streefpeil']['geometry'] = None\n", + "AVG['streefpeil'] = gpd.GeoDataFrame(AVG['streefpeil'], geometry = 'geometry')\n", + "\n", + "\n", + "AVG['peilgebied'] = AVG['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "AVG['peilgebied'] = gpd.GeoDataFrame(AVG['peilgebied']).to_crs('epsg:28992')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "3cb1e8f8-fc21-4b03-a6e9-d0c1eecd5701", + "metadata": {}, + "outputs": [], + "source": [ + "#add duikersifonhevels to the hydroobjecten \n", + "AVG['hydroobject'] = pd.concat([AVG['hydroobject'], AVG['duikersifonhevel']])\n", + "AVG['hydroobject'] = AVG['hydroobject'].drop_duplicates(subset='globalid') #in case it is run multiple times\n", + "AVG['hydroobject'] = gpd.GeoDataFrame(AVG['hydroobject']).set_crs('epsg:28992')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "74d6b456-154a-4c13-b53d-4d5e67122485", + "metadata": {}, + "outputs": [], + "source": [ + "AVG['aggregation_area'] = AVG['peilgebied'].copy()\n", + "AVG['aggregation_area']['globalid'] = 'dummy_globalid_agg_area_' + AVG['aggregation_area'].index.astype(str)\n", + "AVG['aggregation_area']['code'] = AVG['aggregation_area']['code'] + '_dummy_id_' + AVG['aggregation_area'].index.astype(str)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "cba95812-69eb-4efe-8ce5-0150d321e090", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe0AAAGdCAYAAAA/lis6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3hc5Zm37zO9N/Uuucq2XOWCaaYYHEIoIVmSxXEgxSn0ALsJbDabZJOQLwGSAEmWkiwJOCEFEkpYYyA04y5b7pZlW71L03s73x8jjTXSSBrJkguc+7p04ZnznjNnRmKe92m/RxBFUURCQkJCQkLirEd2pm9AQkJCQkJCIjMkoy0hISEhIXGOIBltCQkJCQmJcwTJaEtISEhISJwjSEZbQkJCQkLiHEEy2hISEhISEucIktGWkJCQkJA4R5CMtoSEhISExDmC4kzfwNlOPB6nvb0do9GIIAhn+nYkJCQkJM5iRFHE4/FQWFiITDb5frFktMegvb2dkpKSM30bEhISEhLnEC0tLRQXF0/6dU/JaD/44IM88MAD3HXXXfz85z8HoKuri29+85ts2rQJp9PJxRdfzGOPPcbMmTOT511yySW8++67Kdf6zGc+w/PPP5987HA4uPPOO3n55ZcBuPbaa3nsscewWCzJNc3Nzdx2223885//RKvVctNNN/HQQw+hUqmSa/bv38/tt9/Ojh07sNlsfPWrX+U///M/M/aajUYjkPgFmEymcX0+EhISEhIfLdxuNyUlJUnbMdlM2Gjv3LmTJ598kgULFiSfE0WR66+/HqVSyUsvvYTJZOKRRx5h9erVHDp0CL1en1y7fv16vv/97ycfa7XalOvfdNNNtLa2snHjRgC+8pWvsG7dOl555RUAYrEYV199NTk5OWzevJm+vj5uvvlmRFHkscceAxIf3hVXXMGll17Kzp07OXr0KLfccgt6vZ577703o/c5YNxNJpNktCUkJCQkMmLK0qniBPB4POLMmTPFN954Q1y1apV41113iaIoinV1dSIgHjhwILk2Go2KNptNfOqpp5LPDT4nHYcOHRIBcdu2bcnntm7dKgLikSNHRFEUxddee02UyWRiW1tbcs0f//hHUa1Wiy6XSxRFUfzVr34lms1mMRgMJtc8+OCDYmFhoRiPxzN6ry6XSwSS15SQkJCQkBiJqbYZE8qS33bbbVx99dWsXr065flQKASARqNJPieXy1GpVGzevDll7YYNG8jOzmbevHncd999eDye5LGtW7diNptZsWJF8rnzzjsPs9nMli1bkmuqqqooLCxMrlmzZg2hUIiamprkmlWrVqFWq1PWtLe309jYmPa9hUIh3G53yo+EhISEhMTZwLiN9vPPP09NTQ0PPvjgsGOVlZWUlZVx//3343A4CIfD/PjHP6azs5OOjo7kurVr1/LHP/6Rd955h//8z//khRde4IYbbkge7+zsJDc3d9j1c3Nz6ezsTK7Jy8tLOW61WlGpVKOuGXg8sGYoDz74IGazOfkjFaFJSEhISJwtjCun3dLSwl133cWmTZtSvOkBlEolL7zwAl/60pew2WzI5XJWr17NVVddlbJu/fr1yX9XVVUxc+ZMli5dyu7du1myZAmQPh8gimLK8xNZI/aPDx8p33D//fdzzz33JB8PFBVISEhISEicacbladfU1NDd3U11dTUKhQKFQsG7777Lo48+ikKhIBaLUV1dTW1tLU6nk46ODjZu3EhfXx8VFRUjXnfJkiUolUrq6+sByM/Pp6ura9i6np6epKecn58/zFt2OBxEIpFR13R3dwMM88AHUKvVyaIzqfhMQkJCQuJsYlxG+/LLL2f//v3U1tYmf5YuXcratWupra1FLpcn15rNZnJycqivr2fXrl1cd911I1734MGDRCIRCgoKAFi5ciUul4sdO3Yk12zfvh2Xy8X555+fXHPgwIGUsPumTZtQq9VUV1cn17z33nuEw+GUNYWFhZSXl4/nrUtISEhISJxxBHEgXjxBLrnkEhYtWpTs0/7LX/5CTk4OpaWl7N+/n7vuuovq6mpeeOEFAI4fP86GDRv4+Mc/TnZ2NocOHeLee+9Fq9Wyc+fOpOG/6qqraG9v54knngASLV9lZWUpLV+LFi0iLy+Pn/70p9jtdm655Rauv/76ZMuXy+Vi9uzZXHbZZTzwwAPU19dzyy238J3vfCfjli+3243ZbMblcklet4SEhITEqEy5zTjV8vOh7Vu/+MUvxOLiYlGpVIqlpaXit7/9bTEUCiWPNzc3ixdffLFos9lElUolTp8+XbzzzjvFvr6+lOv29fWJa9euFY1Go2g0GsW1a9eKDocjZU1TU5N49dVXi1qtVrTZbOLtt9+e0t4liqK4b98+8aKLLhLVarWYn58vfve7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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "AVG['aggregation_area'].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "a544e97c-540e-4292-a14c-e1e9b3750fcd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
codenen3610idglobalidgeometry
0Polder Holland en Sticht westdummy_nen3610id_peilgebied_0dummy_globalid_peilgebied_0POLYGON ((129049.972 471580.425, 129035.352 47...
1Westerparkdummy_nen3610id_peilgebied_1dummy_globalid_peilgebied_1POLYGON ((120537.143 488786.773, 120531.029 48...
2Gansenhoef westdummy_nen3610id_peilgebied_2dummy_globalid_peilgebied_2POLYGON ((130201.406 463780.753, 130215.328 46...
3Breukelen boezempeildummy_nen3610id_peilgebied_3dummy_globalid_peilgebied_3POLYGON ((128821.123 464611.681, 128815.091 46...
4Nieuw-Slotendummy_nen3610id_peilgebied_4dummy_globalid_peilgebied_4POLYGON ((116494.254 484423.981, 116495.397 48...
...............
234Noordzeekanaal/IJ/Amsterdamrijnkanaalboezemdummy_nen3610id_peilgebied_234dummy_globalid_peilgebied_234POLYGON ((130338.556 461734.893, 130209.061 46...
235Noordzeekanaal/IJ/Amsterdamrijnkanaalboezemdummy_nen3610id_peilgebied_235dummy_globalid_peilgebied_235MULTIPOLYGON (((119896.554 493206.407, 119901....
236Eiland Zeeburg (oost)dummy_nen3610id_peilgebied_236dummy_globalid_peilgebied_236POLYGON ((126884.268 486841.136, 126832.862 48...
237IJmeerdummy_nen3610id_peilgebied_237dummy_globalid_peilgebied_237MULTIPOLYGON (((127568.276 485654.942, 127577....
238Noordzeekanaal/IJ/Amsterdamrijnkanaalboezemdummy_nen3610id_peilgebied_238dummy_globalid_peilgebied_238MULTIPOLYGON (((123564.450 488082.567, 123566....
\n", + "

239 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " code \\\n", + "0 Polder Holland en Sticht west \n", + "1 Westerpark \n", + "2 Gansenhoef west \n", + "3 Breukelen boezempeil \n", + "4 Nieuw-Sloten \n", + ".. ... \n", + "234 Noordzeekanaal/IJ/Amsterdamrijnkanaalboezem \n", + "235 Noordzeekanaal/IJ/Amsterdamrijnkanaalboezem \n", + "236 Eiland Zeeburg (oost) \n", + "237 IJmeer \n", + "238 Noordzeekanaal/IJ/Amsterdamrijnkanaalboezem \n", + "\n", + " nen3610id globalid \\\n", + "0 dummy_nen3610id_peilgebied_0 dummy_globalid_peilgebied_0 \n", + "1 dummy_nen3610id_peilgebied_1 dummy_globalid_peilgebied_1 \n", + "2 dummy_nen3610id_peilgebied_2 dummy_globalid_peilgebied_2 \n", + "3 dummy_nen3610id_peilgebied_3 dummy_globalid_peilgebied_3 \n", + "4 dummy_nen3610id_peilgebied_4 dummy_globalid_peilgebied_4 \n", + ".. ... ... \n", + "234 dummy_nen3610id_peilgebied_234 dummy_globalid_peilgebied_234 \n", + "235 dummy_nen3610id_peilgebied_235 dummy_globalid_peilgebied_235 \n", + "236 dummy_nen3610id_peilgebied_236 dummy_globalid_peilgebied_236 \n", + "237 dummy_nen3610id_peilgebied_237 dummy_globalid_peilgebied_237 \n", + "238 dummy_nen3610id_peilgebied_238 dummy_globalid_peilgebied_238 \n", + "\n", + " geometry \n", + "0 POLYGON ((129049.972 471580.425, 129035.352 47... \n", + "1 POLYGON ((120537.143 488786.773, 120531.029 48... \n", + "2 POLYGON ((130201.406 463780.753, 130215.328 46... \n", + "3 POLYGON ((128821.123 464611.681, 128815.091 46... \n", + "4 POLYGON ((116494.254 484423.981, 116495.397 48... \n", + ".. ... \n", + "234 POLYGON ((130338.556 461734.893, 130209.061 46... \n", + "235 MULTIPOLYGON (((119896.554 493206.407, 119901.... \n", + "236 POLYGON ((126884.268 486841.136, 126832.862 48... \n", + "237 MULTIPOLYGON (((127568.276 485654.942, 127577.... \n", + "238 MULTIPOLYGON (((123564.450 488082.567, 123566.... \n", + "\n", + "[239 rows x 4 columns]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "AVG['peilgebied']" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "f09335f6-d9ad-412d-80e6-594c2b94ced9", + "metadata": {}, + "outputs": [], + "source": [ + "AVG['streefpeil'].waterhoogte = AVG['streefpeil'].waterhoogte.round(2)" + ] + }, + { + "cell_type": "markdown", + "id": "9276888c-0ba2-4f5d-8ecb-a26baa1747f0", + "metadata": {}, + "source": [ + "# Control, store" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "f2554d9e-9957-47bd-8cef-e6bfd4220a61", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "['code' 'geometry' 'nen3610id' 'globalid']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "gemaal\n", + "['code' 'func_afvoer' 'func_aanvoer' 'func_circulatie' 'geometry'\n", + " 'nen3610id' 'globalid']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "afsluitmiddel\n", + "['code' 'geometry' 'nen3610id' 'globalid']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "duikersifonhevel\n", + "['code' 'geometry' 'nen3610id' 'globalid']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "hydroobject\n", + "['geometry' 'code' 'nen3610id' 'globalid']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "peilgebied\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "streefpeil\n", + "['waterhoogte' 'globalid' 'code' 'geometry']\n", + "type = \n", + "crs = None\n", + "\n", + "aggregation_area\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n" + ] + } + ], + "source": [ + "show_layers_and_columns(waterschap = AVG)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "be767e93-6ab9-4a3d-a7ae-247eb3877617", + "metadata": {}, + "outputs": [], + "source": [ + "# Check if the directory exists\n", + "if not os.path.exists(output_gpkg_path):\n", + " # If it doesn't exist, create it\n", + " os.makedirs(output_gpkg_path)\n", + " \n", + "store_data(waterschap = AVG, \n", + " output_gpkg_path = output_gpkg_path + '/AGV')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "45a1584e-d9e8-41e0-9fb8-8a51cf20c675", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Routing", + "language": "python", + "name": "routing" + }, + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Delfland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Delfland.ipynb new file mode 100644 index 0000000..0167485 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Delfland.ipynb @@ -0,0 +1,591 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "metadata": {}, + "outputs": [], + "source": [ + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "import shapely" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "metadata": {}, + "outputs": [], + "source": [ + "from general_functions import *" + ] + }, + { + "cell_type": "markdown", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "metadata": {}, + "source": [ + "# Delfland" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'Delfland'\n", + "gdb_path = \"../../Data_preprocessed/Waterschappen/Delfland/Watersysteem.gdb\"\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Delfland\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "532b0b83-2139-4d48-8e42-883ed8e88325", + "metadata": {}, + "outputs": [], + "source": [ + "Delfland = read_gpkg_layers(gpkg_path = gdb_path, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'watergang',\n", + " 'duikersifonhevel',\n", + " 'peilgebiedpraktijk',\n", + " 'keerschot']) \n", + " # 'peilafwijkinggebied', \n", + " # 'pomp'])\n", + " # 'streefpeil'])\n", + "#change names\n", + "Delfland['hydroobject'] = Delfland.pop('watergang')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f6b72904-57d7-45ed-90ac-a89836072faf", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", + "metadata": {}, + "source": [ + "### Adjust column names" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "059f9113-bcd4-470a-abb6-4fd8ec193f4a", + "metadata": {}, + "outputs": [], + "source": [ + "#discard irrelevant data of Delfland Delfland, and create a uniform dataset compared to the other waterschappen\n", + "#Stuw\n", + "Delfland['stuw'] = Delfland['stuw'][['CODE', 'GLOBALID', 'geometry']]\n", + "Delfland['stuw'] = Delfland['stuw'].rename(columns={'CODE': 'code', 'GLOBALID': 'globalid'})\n", + "Delfland['stuw']['nen3610id'] = 'dummy_nen3610id_stuw_' + Delfland['stuw'].index.astype(str)\n", + "\n", + "#Gemaal\n", + "\n", + "#determine aanvoer en afvoer gemalen\n", + "Delfland['gemaal']['func_aanvoer'], Delfland['gemaal']['func_afvoer'], Delfland['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "Delfland['gemaal'].FUNCTIEGEMAAL_resolved.fillna(Delfland['gemaal'].WS_SOORTGEMAAL)#sometimes recircualtie is located in another column, but sometimes they are different. Only fill in for NaN\n", + "Delfland['gemaal']['FUNCTIEGEMAAL_resolved'] = Delfland['gemaal']['FUNCTIEGEMAAL_resolved'].astype(str) \n", + "\n", + "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Onbekend|Onderbemaling|Afvoergemaal|Af-'), 'func_afvoer'] = True\n", + "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Opmaling|Aanvoer'), 'func_aanvoer'] = True\n", + "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Overig|circulatie'), 'func_circulatie'] = True\n", + "Delfland['gemaal'].loc[(Delfland['gemaal'].func_afvoer == False) &\n", + " (Delfland['gemaal'].func_aanvoer == False) &\n", + " (Delfland['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown\n", + "\n", + "Delfland['gemaal'] = Delfland['gemaal'][['GLOBALID', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "Delfland['gemaal'] = Delfland['gemaal'].rename(columns={'GLOBALID': 'globalid'})\n", + "Delfland['gemaal']['code'] = 'dummy_code_gemaal_' + Delfland['gemaal'].index.astype(str)\n", + "Delfland['gemaal']['nen3610id'] = 'dummy_nen3610id_gemaal_' + Delfland['gemaal'].index.astype(str)\n", + "\n", + "#Hydroobject\n", + "Delfland['hydroobject'] = Delfland['hydroobject'][['GLOBALID', 'geometry']]\n", + "Delfland['hydroobject'] = Delfland['hydroobject'].rename(columns={'GLOBALID': 'globalid'})\n", + "Delfland['hydroobject']['code'] = 'dummy_code_hydroobject_' + Delfland['hydroobject'].index.astype(str)\n", + "Delfland['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + Delfland['hydroobject'].index.astype(str)\n", + "\n", + "#Keerschot\n", + "Delfland['keerschot'] = Delfland['keerschot'][['GLOBALID', 'geometry']]\n", + "Delfland['keerschot'] = Delfland['keerschot'].rename(columns={'GLOBALID': 'globalid'})\n", + "Delfland['keerschot']['code'] = 'dummy_code_keerschot_' + Delfland['keerschot'].index.astype(str)\n", + "Delfland['keerschot']['nen3610id'] = 'dummy_nen3610id_keerschot_' + Delfland['keerschot'].index.astype(str)\n", + "\n", + "#duikersifonhevel\n", + "Delfland['duikersifonhevel'] = Delfland['duikersifonhevel'][['CODE', 'GLOBALID', 'geometry']]\n", + "Delfland['duikersifonhevel'] = Delfland['duikersifonhevel'].rename(columns={'CODE':'code', 'GLOBALID': 'globalid'})\n", + "Delfland['duikersifonhevel']['code'] = 'dummy_code_duikersifonhevel_' + Delfland['duikersifonhevel'].index.astype(str)\n", + "Delfland['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + Delfland['duikersifonhevel'].index.astype(str)\n", + "\n", + "#afsluitmiddel\n", + "#niet geleverd\n", + "\n", + "#Peilgebiedpraktijk\n", + "Delfland['peilgebiedpraktijk'] = Delfland['peilgebiedpraktijk'][['WS_HOOGPEIL', 'CODE', 'GLOBALID', 'geometry']]\n", + "Delfland['peilgebiedpraktijk']['nen3610id'] = 'dummy_nen3610id_peilgebiedpraktijk_' + Delfland['peilgebiedpraktijk'].index.astype(str)\n", + "Delfland['peilgebiedpraktijk'] = Delfland['peilgebiedpraktijk'].rename(columns={'WS_HOOGPEIL': 'streefpeil', 'CODE':'code', 'GLOBALID':'globalid'})\n", + "\n", + "#Streefpeil\n", + "Delfland['streefpeil'] = pd.DataFrame()\n", + "Delfland['streefpeil']['waterhoogte'] = Delfland['peilgebiedpraktijk']['streefpeil']\n", + "Delfland['streefpeil']['globalid'] = Delfland['peilgebiedpraktijk']['globalid']\n", + "Delfland['streefpeil']['geometry'] = None\n", + "Delfland['streefpeil'] = gpd.GeoDataFrame(Delfland['streefpeil'], geometry = 'geometry')\n", + "\n", + "Delfland['peilgebied'] = Delfland['peilgebiedpraktijk']" + ] + }, + { + "cell_type": "markdown", + "id": "54a863ea-caab-4be6-bca6-78c2ae91941f", + "metadata": {}, + "source": [ + "### Add column to determine the HWS_BZM" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "fda7f5c9-6949-4044-b04d-ba438d2b37d3", + "metadata": {}, + "outputs": [], + "source": [ + "Delfland['peilgebied']['HWS_BZM'] = False\n", + "Delfland['peilgebied'].loc[Delfland['peilgebied'].code == 'BZM 1', 'HWS_BZM'] = True #looked up manually" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fd32e28d-d92c-40a6-880c-08ccc76163b4", + "metadata": {}, + "outputs": [], + "source": [ + "Delfland['streefpeil'].waterhoogte = Delfland['streefpeil'].waterhoogte.round(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", + "metadata": {}, + "outputs": [], + "source": [ + "#delete irrelvant data\n", + "variables = ['peilgebiedpraktijk']\n", + "\n", + "for variable in variables:\n", + " if str(variable) in Delfland:\n", + " del Delfland[variable]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "fedc359d-3b06-41eb-b6bc-0526e04fcc85", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
streefpeilcodeglobalidgeometrynen3610idHWS_BZM
0-5.30DOP 17{2531CB3F-6001-4B96-8199-6C32F2A3F110}MULTIPOLYGON (((90612.823 449598.605, 90683.17...dummy_nen3610id_peilgebiedpraktijk_0False
1-0.92DPP 2{98322829-BD2C-4509-88EB-3020D4F5B7AE}MULTIPOLYGON (((74942.850 449582.666, 74945.04...dummy_nen3610id_peilgebiedpraktijk_1False
2-2.20DPM 1 a{CECA72F6-1CB0-4959-B074-16A25DDFFBCC}MULTIPOLYGON (((77686.692 438546.781, 77761.73...dummy_nen3610id_peilgebiedpraktijk_2False
3-5.40DOP 18{CBD8FADF-568E-4202-A96F-A1B9BD3128D3}MULTIPOLYGON (((90779.645 449399.310, 90774.26...dummy_nen3610id_peilgebiedpraktijk_3False
4-0.25BZM 17{25EC567D-B04A-4D3E-992B-42A752D7C707}MULTIPOLYGON (((71961.494 444699.340, 71824.22...dummy_nen3610id_peilgebiedpraktijk_4False
.....................
1554-2.50KPN 2{89BC3095-7743-419E-A3D5-97EC2E9358AB}MULTIPOLYGON (((82221.600 445680.656, 82222.84...dummy_nen3610id_peilgebiedpraktijk_1554False
1555-3.30KLE 2 r{532BBE4E-DB29-4A9D-8B1D-F82B1AC0E0E3}MULTIPOLYGON (((80955.711 444823.816, 81352.20...dummy_nen3610id_peilgebiedpraktijk_1555False
1556-2.61KLE 2 m{710B38F9-4FF0-43BC-89D4-2F2D2EA55561}MULTIPOLYGON (((81042.188 444624.391, 80822.99...dummy_nen3610id_peilgebiedpraktijk_1556False
1557NaNKLE 2 n{8FE7621C-AC97-4B16-BBF2-6CB0EDB21E19}MULTIPOLYGON (((81312.894 444166.511, 81311.17...dummy_nen3610id_peilgebiedpraktijk_1557False
1558-3.68PVN 1 b{BC677CAC-DF2D-4BEF-A6C5-02E7261CBFFC}MULTIPOLYGON (((86852.957 450810.593, 86865.79...dummy_nen3610id_peilgebiedpraktijk_1558False
\n", + "

1559 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " streefpeil code globalid \\\n", + "0 -5.30 DOP 17 {2531CB3F-6001-4B96-8199-6C32F2A3F110} \n", + "1 -0.92 DPP 2 {98322829-BD2C-4509-88EB-3020D4F5B7AE} \n", + "2 -2.20 DPM 1 a {CECA72F6-1CB0-4959-B074-16A25DDFFBCC} \n", + "3 -5.40 DOP 18 {CBD8FADF-568E-4202-A96F-A1B9BD3128D3} \n", + "4 -0.25 BZM 17 {25EC567D-B04A-4D3E-992B-42A752D7C707} \n", + "... ... ... ... \n", + "1554 -2.50 KPN 2 {89BC3095-7743-419E-A3D5-97EC2E9358AB} \n", + "1555 -3.30 KLE 2 r {532BBE4E-DB29-4A9D-8B1D-F82B1AC0E0E3} \n", + "1556 -2.61 KLE 2 m {710B38F9-4FF0-43BC-89D4-2F2D2EA55561} \n", + "1557 NaN KLE 2 n {8FE7621C-AC97-4B16-BBF2-6CB0EDB21E19} \n", + "1558 -3.68 PVN 1 b {BC677CAC-DF2D-4BEF-A6C5-02E7261CBFFC} \n", + "\n", + " geometry \\\n", + "0 MULTIPOLYGON (((90612.823 449598.605, 90683.17... \n", + "1 MULTIPOLYGON (((74942.850 449582.666, 74945.04... \n", + "2 MULTIPOLYGON (((77686.692 438546.781, 77761.73... \n", + "3 MULTIPOLYGON (((90779.645 449399.310, 90774.26... \n", + "4 MULTIPOLYGON (((71961.494 444699.340, 71824.22... \n", + "... ... \n", + "1554 MULTIPOLYGON (((82221.600 445680.656, 82222.84... \n", + "1555 MULTIPOLYGON (((80955.711 444823.816, 81352.20... \n", + "1556 MULTIPOLYGON (((81042.188 444624.391, 80822.99... \n", + "1557 MULTIPOLYGON (((81312.894 444166.511, 81311.17... \n", + "1558 MULTIPOLYGON (((86852.957 450810.593, 86865.79... \n", + "\n", + " nen3610id HWS_BZM \n", + "0 dummy_nen3610id_peilgebiedpraktijk_0 False \n", + "1 dummy_nen3610id_peilgebiedpraktijk_1 False \n", + "2 dummy_nen3610id_peilgebiedpraktijk_2 False \n", + "3 dummy_nen3610id_peilgebiedpraktijk_3 False \n", + "4 dummy_nen3610id_peilgebiedpraktijk_4 False \n", + "... ... ... \n", + "1554 dummy_nen3610id_peilgebiedpraktijk_1554 False \n", + "1555 dummy_nen3610id_peilgebiedpraktijk_1555 False \n", + "1556 dummy_nen3610id_peilgebiedpraktijk_1556 False \n", + "1557 dummy_nen3610id_peilgebiedpraktijk_1557 False \n", + "1558 dummy_nen3610id_peilgebiedpraktijk_1558 False \n", + "\n", + "[1559 rows x 6 columns]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Delfland['peilgebied']" + ] + }, + { + "cell_type": "markdown", + "id": "87278eea-6c4b-416e-b4b4-f10341e2cb37", + "metadata": {}, + "source": [ + "# Embed the boezems including the KRW-bodies" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "111131dc-d598-41e8-9ba9-1c87d8327475", + "metadata": {}, + "outputs": [], + "source": [ + "KRW = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_overig\\KRW\\Delfland\\Opgedeelde_boezem_Delfland_definitief.shp\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "b1df81d4-20cc-4c9e-a483-0429d381fa0b", + "metadata": {}, + "outputs": [], + "source": [ + "KRW['code'] = 'dummy_code_BZM 1_' + KRW.index.astype(str)\n", + "KRW['nen3610id'] = 'owmnaam'\n", + "KRW['globalid'] = 'dummy_globalid_BZM_' + KRW.index.astype(str)\n", + "KRW['HWS_BZM'] = True\n", + "KRW['streefpeil'] = -0.43\n", + "KRW = KRW[['code', 'streefpeil', 'nen3610id', 'HWS_BZM', 'globalid', 'geometry']]\n", + "KRW = KRW.reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "1e4fd09b-4e10-4dfc-8bfd-7a5dbb46c637", + "metadata": {}, + "outputs": [], + "source": [ + "#remove the previous boezem, and replace it for the new boezem which is splitted based on the KRW bodies\n", + "Delfland['peilgebied'] = Delfland['peilgebied'].loc[Delfland['peilgebied'].code != 'BZM 1']\n", + "Delfland['peilgebied'] = gpd.GeoDataFrame(pd.concat([Delfland['peilgebied'], KRW]), geometry='geometry')\n", + "\n", + "Delfland['streefpeil'] = Delfland['peilgebied'][['streefpeil', 'globalid', 'geometry']]\n", + "Delfland['streefpeil'] = Delfland['streefpeil'].rename(columns={'streefpeil':'waterhoogte'})\n", + "Delfland['streefpeil']['geometry'] = np.nan" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "e1bf44e7-401e-4d52-84e3-8ea1323432d7", + "metadata": {}, + "outputs": [], + "source": [ + "#add aggregation areas\n", + "aggregation_areas = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Delfland\\Delfland_aanvoergebiedafvoergebied.gdb\")\n", + "aggregation_areas['code'] = aggregation_areas['CODE']\n", + "aggregation_areas['nen3610id'] = aggregation_areas['NAAM']\n", + "aggregation_areas['globalid'] = 'dummy_globalid_agg_area_' + aggregation_areas.index.astype(str)\n", + "aggregation_areas = aggregation_areas[['code', 'nen3610id', 'globalid', 'geometry']]\n", + "\n", + "#remove old boezem, implement new one\n", + "aggregation_areas = aggregation_areas.loc[aggregation_areas.code != 'BZM']\n", + "aggregation_areas = pd.concat([aggregation_areas, KRW[['code', 'nen3610id', 'globalid', 'geometry']]])\n", + "\n", + "Delfland['aggregation_area'] = gpd.GeoDataFrame(aggregation_areas, geometry='geometry')" + ] + }, + { + "cell_type": "markdown", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "metadata": {}, + "source": [ + "### Check for the correct keys and columns" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "['code' 'globalid' 'geometry' 'nen3610id']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "gemaal\n", + "['globalid' 'func_afvoer' 'func_aanvoer' 'func_circulatie' 'geometry'\n", + " 'code' 'nen3610id']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "duikersifonhevel\n", + "['code' 'globalid' 'geometry' 'nen3610id']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "keerschot\n", + "['globalid' 'geometry' 'code' 'nen3610id']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "hydroobject\n", + "['globalid' 'geometry' 'code' 'nen3610id']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "streefpeil\n", + "['waterhoogte' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "peilgebied\n", + "['streefpeil' 'code' 'globalid' 'geometry' 'nen3610id' 'HWS_BZM']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "aggregation_area\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n" + ] + } + ], + "source": [ + "show_layers_and_columns(waterschap = Delfland)" + ] + }, + { + "cell_type": "markdown", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "metadata": {}, + "source": [ + "### Store data" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "metadata": {}, + "outputs": [], + "source": [ + "# Check if the directory exists\n", + "if not os.path.exists(output_gpkg_path):\n", + " # If it doesn't exist, create it\n", + " os.makedirs(output_gpkg_path)\n", + " \n", + "store_data(waterschap = Delfland, \n", + " output_gpkg_path = output_gpkg_path + '/Delfland')\n" + ] + }, + { + "cell_type": "raw", + "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fedb4c6e-49c2-44f4-88f0-0e1ce4802bc7", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Routing", + "language": "python", + "name": "routing" + }, + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHNK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHNK.ipynb new file mode 100644 index 0000000..8e4c031 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHNK.ipynb @@ -0,0 +1,993 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 92, + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "metadata": {}, + "outputs": [], + "source": [ + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "import shapely" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from general_functions import *\n", + "pd.set_option('display.max_columns', None)\n" + ] + }, + { + "cell_type": "raw", + "id": "92904555-a98a-4211-8b13-daf79335a6f8", + "metadata": {}, + "source": [ + "Gebeld met Jeroen Hermans. Conclusie: GAF70 gebieden niet gebruiken, en aggregeren op basis van polders ivm niet overlappende intekeningen. Duingebieden in Texel kunnen er uit gelaten worden, Jeroen geeft later vandaag aan of dat ook overal kan. Het liefst heeft hij de flubbertjes bij de duinen in Texel er wél bij, maar alleen als het niet te veel gedoe is." + ] + }, + { + "cell_type": "markdown", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "metadata": {}, + "source": [ + "# Hollands Noorderkwartier" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "gpkg_path_HHNK = \"../../Data_preprocessed/Waterschappen/HHNK/Noorderkwartier.gpkg\"\n", + "# gdb_path_HHNK = \"../../Data_preprocessed/Waterschappen/HHNK/Watersysteemanalyse_BWN2.gdb\"\n", + "gdb_path_HHNK_nalevering = \"../../Data_preprocessed/Waterschappen/HHNK/Na_levering_HHNK_gemalen_stuwen_20240321.gdb\"\n", + "output_gpkg_path_HHNK = \"../../Data_postprocessed/Waterschappen/HHNK/Noorderkwartier\"\n", + "interim_results = \"../../Interim_results/Waterschappen/HHNK/Noorderkwartier_IR\"\n", + "peilgebieden_NH_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHNK\\20240618_peilgebieden_en_polders\\NoordHolland.gpkg\"\n", + "Texel_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHNK\\20240618_peilgebieden_en_polders\\Texel.gpkg\"\n", + "polders_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHNK\\20240618_peilgebieden_en_polders\\Polders_export_2024-06-18.shp\"" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "baf1ecdb-36e9-4370-ad9d-28dd4b7b0c6b", + "metadata": {}, + "outputs": [], + "source": [ + "#retrieve the data\n", + "HHNK = read_gpkg_layers(gpkg_path = gpkg_path_HHNK, \n", + " variables = [\n", + " # 'stuw', #nalevering\n", + " # 'gemaal', #nalevering\n", + " 'afsluitmiddel',\n", + " 'hydroobject',\n", + " 'duikersifonhevel']) \n", + " # 'peilafwijkinggebied', \n", + " # 'peilgebiedpraktijk',\n", + " # 'pomp'])\n", + " # 'streefpeil'])\n", + " \n", + "#retrieve data from a gdb, as the gpkg of HHNK does not contain all relevant data\n", + "# data_gdb = gpd.read_file(gdb_path_HHNK, layer='BWN_ruimtekaart')\n", + "HHNK_nalevering = read_gpkg_layers(gpkg_path = gdb_path_HHNK_nalevering, \n", + " variables = ['stuw', 'gemaal']) #nalevering\n", + "\n", + "HHNK['stuw'] = HHNK_nalevering['stuw']\n", + "HHNK['gemaal'] = HHNK_nalevering['gemaal']" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "id": "3dbf5fe0-ac68-4270-b936-51dd5e7e8215", + "metadata": {}, + "outputs": [], + "source": [ + "# HHNK['peilgebied'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHNK\\Na_levering_peilgebieden.gpkg\")" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "id": "314a1a85-e2e3-4014-bc2b-76a748412075", + "metadata": {}, + "outputs": [], + "source": [ + "from shapely.affinity import translate\n", + "\n", + "def translate_point(point, x_offset=0.01, y_offset=0.01):\n", + " return translate(point, xoff=x_offset, yoff=y_offset)\n", + "\n", + "# Apply the translation to each geometry in the GeoDataFrame\n", + "HHNK['gemaal']['geometry'] = HHNK['gemaal']['geometry'].apply(lambda geom: translate_point(geom))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "id": "033468ab-b74c-468a-90b1-eac395ad8d17", + "metadata": {}, + "outputs": [], + "source": [ + "#determine aanvoer en afvoer gemalen\n", + "HHNK['gemaal']['func_aanvoer'], HHNK['gemaal']['func_afvoer'], HHNK['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "HHNK['gemaal']['functiegemaal'] = HHNK['gemaal']['FUNCTIEGEMAAL'].astype(str) \n", + "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] == 'onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", + "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] == '99', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", + "HHNK['gemaal']['functiegemaal'].fillna(HHNK['gemaal']['OPMERKING'], inplace = True) #some additional is given in this column\n", + "HHNK['gemaal'] = HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] != 'niet meer in gebruik'] #filter the gemalen out which are not in use\n", + "HHNK['gemaal'] = HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] != '901'] #filter the gemalen out which are not in use\n", + "\n", + "# HHNK['gemaal'].loc[HHNK['gemaal'].functiegemaal.str.contains('onderbemaling|afvoer|af-'), 'func_afvoer'] = True\n", + "# HHNK['gemaal'].loc[HHNK['gemaal'].functiegemaal.str.contains('trekker|opmaling|op-|wateraanvoer|aanvoer'), 'func_aanvoer'] = True #aannamen: trekkerpompen vooral voor wateraanvoer\n", + "# HHNK['gemaal'].loc[HHNK['gemaal'].functiegemaal.str.contains('doorspoelpomp'), 'func_circulatie'] = True\n", + "\n", + "afvoer_values = ['2', '4', '5', '6', '903']\n", + "aanvoer_values = ['1', '3', '5', '902', '903'] #aannamen: trekkerpompen vooral voor wateraanvoer\n", + "circulatie_values = ['904']\n", + "\n", + "\n", + "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(afvoer_values), 'func_afvoer'] = True\n", + "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(aanvoer_values), 'func_aanvoer'] = True\n", + "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(circulatie_values), 'func_circulatie'] = True\n", + "\n", + "HHNK['gemaal'].loc[(HHNK['gemaal'].func_afvoer == False) &\n", + " (HHNK['gemaal'].func_aanvoer == False) &\n", + " (HHNK['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "id": "805ffd9b-da23-46e3-977f-84575e32f225", + "metadata": {}, + "outputs": [], + "source": [ + "#gemaal\n", + "HHNK['gemaal'].rename(columns={'CODE': 'code',\n", + " 'GLOBALID': 'globalid'}, inplace = True)\n", + "HHNK['gemaal']['nen3610id'] = 'dummy_nen3610id_' + HHNK['gemaal'].index.astype(str) #create a string as the globalid is usually a str as well\n", + "\n", + "#stuw\n", + "HHNK['stuw'].rename(columns={'CODE': 'code',\n", + " 'GLOBALID': 'globalid'}, inplace = True)\n", + "HHNK['stuw']['nen3610id'] = 'dummy_nen3610id_' + HHNK['stuw'].index.astype(str) #create a string as the globalid is usually a str as well\n" + ] + }, + { + "cell_type": "markdown", + "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", + "metadata": {}, + "source": [ + "### GPKG" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "id": "9b86f37d-16de-49db-969a-b233f1531abb", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# discard irrelevant dataHHNK\n", + "HHNK['stuw'] = HHNK['stuw'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "HHNK['gemaal'] = HHNK['gemaal'][['code', 'globalid', 'nen3610id', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "HHNK['hydroobject'] = HHNK['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "HHNK['afsluitmiddel'] = HHNK['afsluitmiddel'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "HHNK['duikersifonhevel'] = HHNK['duikersifonhevel'][['code', 'globalid', 'nen3610id', 'geometry']]" + ] + }, + { + "cell_type": "markdown", + "id": "cdc5db0a-4f5f-464f-aa98-1cc7ea968680", + "metadata": {}, + "source": [ + "### Peilgebieden" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "id": "17825562-4082-42f5-9e39-3d1e30d784e3", + "metadata": {}, + "outputs": [], + "source": [ + "# peilgebieden = gpd.read_file(peilgebieden_NH_path)\n", + "# Texel = gpd.read_file(Texel_path)\n", + "# polders = gpd.read_file(polders_path)\n", + "\n", + "# Texel['centroid'] = Texel.centroid\n", + "\n", + "# Texel = gpd.GeoDataFrame(Texel, geometry='centroid')\n", + "# polders = gpd.GeoDataFrame(polders, geometry = 'geometry')\n", + "\n", + "# Texel['CODE'] = Texel[['centroid']].sjoin(polders[['CODE', 'geometry']],\n", + "# how = 'left',\n", + "# predicate = 'within')['CODE']\n", + "\n", + "# peilgebieden = pd.concat([peilgebieden, Texel]).reset_index(drop=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "id": "5a51ed80-a0ee-431b-899d-ee5475834e73", + "metadata": {}, + "outputs": [], + "source": [ + "# peilgebieden['waterhoogte'] = np.nan\n", + "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.STREEFPEIL)\n", + "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", + "\n", + "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.VAST)\n", + "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", + "\n", + "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.ZOMER)\n", + "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", + "\n", + "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.WINTER)\n", + "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", + "\n", + "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.ONDERGRENS)\n", + "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", + "\n", + "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.BOVENGRENS)\n", + "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", + "\n", + "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.STREEFPE_1)\n", + "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", + "\n", + "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.ONDERGRE_1)\n", + "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "id": "fb0cccac-68e1-4638-a3bb-492395dde13e", + "metadata": {}, + "outputs": [], + "source": [ + "# peilgebieden['HWS_BZM'] = np.nan\n", + "# peilgebieden.loc[peilgebieden.CODE == '03010-01', 'HWS_BZM'] = True\n", + "# peilgebieden.loc[peilgebieden.CODE == '1000-01', 'HWS_BZM'] = True\n", + "# peilgebieden.loc[peilgebieden.CODE == '1700-01', 'HWS_BZM'] = True\n", + "# peilgebieden.loc[peilgebieden.CODE == '1800-01', 'HWS_BZM'] = True\n", + "\n", + "# peilgebieden['polder'] = peilgebieden.CODE.str.split('-').str[0]\n", + "# peilgebieden['code'] = peilgebieden.CODE + '_' + peilgebieden.index.astype(str)\n", + "# peilgebieden['globalid'] = peilgebieden.OBJECTID\n", + "# peilgebieden['nen3610id'] = 'dummy_nen3610id_' + peilgebieden.index.astype(str)\n", + "# peilgebieden = peilgebieden[['waterhoogte', 'code', 'nen3610id', 'globalid', 'polder', 'HWS_BZM', 'geometry']]" + ] + }, + { + "cell_type": "markdown", + "id": "65b8484f-0fd5-48f8-8f6f-efab55e7ff71", + "metadata": {}, + "source": [ + "### The polders and peilgebieden of Texel are different. Load them in seperatly" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "id": "07f46840-c879-4517-9b86-9c5444f4f19e", + "metadata": {}, + "outputs": [], + "source": [ + "# aggregation_areas = peilgebieden.dissolve(by='polder')" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "id": "4c5d03fd-b7a2-45da-8198-5d65252073b3", + "metadata": {}, + "outputs": [], + "source": [ + "# peilgebieden['polder'] = peilgebieden['NAAM']\n" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "id": "be8cba4d-9e34-491a-a391-2b77421a548c", + "metadata": {}, + "outputs": [], + "source": [ + "# streefpeil = peilgebieden[['waterhoogte', 'globalid']]\n", + "# peilgebied = peilgebieden[['code', 'nen3610id', 'globalid', 'polder', 'HWS_BZM', 'geometry']]\n", + "\n", + "# peilgebied.globalid = 'peilgebied_' + peilgebied.globalid.astype(str)\n", + "# #add the data to the dictionary\n", + "# HHNK['peilgebied'] = peilgebied\n", + "\n", + "# HHNK['streefpeil'] = streefpeil\n", + "# HHNK['streefpeil']['geometry'] = None\n", + "# HHNK['streefpeil'] = gpd.GeoDataFrame(HHNK['streefpeil'], geometry = 'geometry')\n", + "\n", + "# #fill False for HWS_BZM (needs to be done for the added areas of Texel)\n", + "# HHNK['peilgebied'].HWS_BZM = HHNK['peilgebied'].HWS_BZM.fillna(value=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "id": "cea5c278-e0b1-4952-a174-7c4140395d4a", + "metadata": {}, + "outputs": [], + "source": [ + "# HHNK['aggregation_area'] = HHNK['peilgebied'].dissolve(by='polder', as_index=False, sort=False)\n", + "# HHNK['aggregation_area'].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1477a886-9e47-46f5-b375-7eede24c08d0", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "56fa3a9e-2894-4676-9a47-29fbdadc96c5", + "metadata": { + "tags": [] + }, + "source": [ + "# Add the boezem and hoofdwatersysteem" + ] + }, + { + "cell_type": "markdown", + "id": "064607bb-4c54-4dc2-b913-94dfcd18cfa0", + "metadata": {}, + "source": [ + "Some changes by hand have been made. The resulting shapefile contains the bordering BZM and HWS shapes, including streefpeil" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "id": "ba0652d8-fad6-4ce8-b24f-d6c8c06d9147", + "metadata": {}, + "outputs": [], + "source": [ + "# waterboards = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_30\\20240418_samenwerkdag\\Oorspronkelijk_LHM_versie\\Waterschappen_peilbeheerst.shp\").to_crs('EPSG:28992')\n", + "# HHNK_boundary = waterboards.loc[waterboards.name == 'Hoogheemraadschap Hollands Noorderkwartier']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bcfc3dcc-a777-4db6-9035-16b80d8dd73d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 109, + "id": "8e8c8649-cde9-40db-b155-d8d80ba65f6a", + "metadata": {}, + "outputs": [], + "source": [ + "# path_HWS_BZM = \"..\\..\\Scripts\\Aggregeren\\Hoofdwatersysteem\\BZM_HWS_HHNK.shp\"\n", + "# HWS_BZM = gpd.read_file(path_HWS_BZM)\n", + "# HWS_BZM = HWS_BZM.clip(HHNK_boundary)\n", + "\n", + "# HWS_BZM = HWS_BZM.loc[HWS_BZM.naam != 'IJsselmeer en Randmeren Noord']\n", + "# HWS_BZM = HWS_BZM.loc[HWS_BZM.naam != 'Markermeer & Randmeren Zuid']\n", + "\n", + "# HWS_BZM.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "id": "0ce64996-c3eb-460d-b252-48b7ec25f44c", + "metadata": {}, + "outputs": [], + "source": [ + "# HWS_BZM.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "id": "0e4ab064-6b94-46c4-9630-c459b254e83e", + "metadata": {}, + "outputs": [], + "source": [ + "# HWS_BZM = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_overig\\KRW\\HHNK\\Opgedeelde_boezem_HHNK_definitief2.shp\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "id": "9c623cd7-b0ff-4670-977f-1ce2eee859e7", + "metadata": {}, + "outputs": [], + "source": [ + "# HWS_BZM.loc[HWS_BZM.owmnaam.str.contains('Amstel'), 'zomerpeil'] = -0.4\n", + "# HWS_BZM.loc[HWS_BZM.owmnaam.str.contains('Schermer'), 'zomerpeil'] = -0.5\n", + "# HWS_BZM.loc[HWS_BZM.owmnaam.str.contains('Alkmaar'), 'zomerpeil'] = -0.5\n", + "# HWS_BZM.loc[HWS_BZM.owmnaam.str.contains('VRNK'), 'zomerpeil'] = -0.6" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "id": "350baa05-21ab-48af-b4b9-cae7fef089a6", + "metadata": {}, + "outputs": [], + "source": [ + "# HWS_BZM['code'] = 'dummy_code_' + (HWS_BZM.index + max(HHNK['peilgebied'].index) + 1).astype(str)\n", + "# HWS_BZM['globalid'] = 'dummy_globalid_' + (HWS_BZM.index + max(HHNK['peilgebied'].index) + 1).astype(str)\n", + "# HWS_BZM['nen3610id'] = 'dummy_nen3610id_' + (HWS_BZM.index + max(HHNK['peilgebied'].index) + 1).astype(str)\n", + "# HWS_BZM['waterhoogte'] = HWS_BZM['zomerpeil']\n", + "# HWS_BZM['HWS_BZM'] = True\n", + "# HWS_BZM = HWS_BZM[['code', 'globalid', 'nen3610id', 'waterhoogte', 'HWS_BZM', 'geometry']]\n", + "\n", + "# HWS_BZM_peilgebied = HWS_BZM[['code', 'globalid', 'nen3610id', 'HWS_BZM', 'geometry']]\n", + "# HWS_BZM_streefpeil = HWS_BZM[['waterhoogte', 'globalid', 'geometry']]\n", + "\n", + "# HHNK['peilgebied'] = gpd.GeoDataFrame(pd.concat([HHNK['peilgebied'], HWS_BZM_peilgebied])).reset_index(drop=True)\n", + "# HHNK['streefpeil'] = gpd.GeoDataFrame(pd.concat([HHNK['streefpeil'], HWS_BZM_streefpeil])).reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3c53955a-2d9d-40a0-ab70-d18c914a1721", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26cfd68d-f60a-4d8b-ac9d-e481b111516f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 114, + "id": "5ac88d35-0c29-4c7d-95f1-97971746be94", + "metadata": {}, + "outputs": [], + "source": [ + "# HHNK['aggregation_area'] = gpd.GeoDataFrame(pd.concat([HHNK['aggregation_area'][['code', 'nen3610id', 'globalid', 'geometry']], HWS_BZM]), geometry = 'geometry').reset_index(drop=True).to_crs('EPSG:28992')" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "id": "5f022db2-0902-49cd-b507-e624f9e6efbf", + "metadata": {}, + "outputs": [], + "source": [ + "# #remove the southern part most peilgebieden\n", + "# #ERROR SENSITIVE\n", + "\n", + "# HHNK['peilgebied'] = HHNK['peilgebied'].loc[HHNK['peilgebied'].code != 'dummy_code_5165']\n", + "# HHNK['peilgebied'] = HHNK['peilgebied'].loc[HHNK['peilgebied'].code != 'dummy_code_5207']\n", + "# HHNK['peilgebied'] = HHNK['peilgebied'].loc[HHNK['peilgebied'].code != 'dummy_code_5183']\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "id": "83f2a4df-b327-41e3-ba34-9feddf6ce6c7", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "# from shapely.geometry import Polygon, MultiPolygon, shape, Point\n", + "# from shapely.ops import unary_union,cascaded_union \n", + "\n", + "# def convert_to_polygon(line):\n", + "# if line.is_ring: # Checks if the LineString is closed\n", + "# return Polygon(line)\n", + "# else:\n", + "# return line # Returns the line string as is if it's not closed\n", + " \n", + "# HHNK['peilgebied'] = HHNK['peilgebied'].explode(ignore_index=True)\n", + "# HHNK['peilgebied'] = HHNK['peilgebied'][HHNK['peilgebied'].geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n", + "\n", + "\n", + "# HHNK['peilgebied']['area'] = HHNK['peilgebied'].area\n", + "# dissolved = HHNK['peilgebied'].dissolve()\n", + "# exterior = gpd.GeoDataFrame(geometry=dissolved['geometry'].boundary).to_crs(crs='EPSG:28992')\n", + "# HHNK['peilgebied'] = HHNK['peilgebied'].to_crs(crs='EPSG:28992')\n", + "# exterior = exterior.explode().reset_index(drop=True)\n", + "# exterior['geometry'] = exterior['geometry'].apply(convert_to_polygon)\n", + "# exterior['area'] = exterior.area\n", + "# exterior = exterior.sort_values(by='area', ascending=False).reset_index(drop=True)\n", + "\n", + "# #get rid of some exteriors which should not be filled in\n", + "# exterior.dropna(inplace=True)\n", + "# exterior.iloc[3::] = exterior\n", + "# exterior = exterior.reset_index(drop=True)\n", + "\n", + "# # new_gdf = gpd.GeoDataFrame(columns=HHNK['peilgebied'].columns())\n", + "\n", + "# for i in range(len(exterior)):\n", + "# print(i)\n", + "# # for i in range(10):\n", + "\n", + "# buffered_peilgebied = HHNK['peilgebied'].buffer(0.)\n", + "\n", + "# exterior_sample = exterior.iloc[i:i+1] #just pick a single sample\n", + "# if exterior_sample['geometry'].values[0] is not None:\n", + "# exterior_sample.geometry = exterior_sample.buffer(0.0001) #let op! hierdoor komt er alsnog een kleine overlap. Maar anders werkt de code even niet, en vanwege tijdgebrek kan dit nu niet worden opgelost. In het bepalen van de crossings wordt hier echter mee omgegaan.\n", + "\n", + "# intersects_mask = buffered_peilgebied.intersects(exterior_sample.iloc[0].geometry)\n", + "# intersecting_polygons = HHNK['peilgebied'][intersects_mask].sort_values(by='area', ascending=False)\n", + "\n", + "# if len(intersecting_polygons) > 0:\n", + "# # print(i)\n", + "# # polygon_to_dissolve = intersecting_polygons.iloc[0:1]#.geometry.unary_union \n", + "# # sample_geometry = exterior_sample.geometry#.unary_union\n", + "# intersecting_polygons = gpd.GeoDataFrame(intersecting_polygons.iloc[0:1], geometry = 'geometry')\n", + "\n", + "# # dissolved_polygon = # dissolve/union them\n", + "# all_geometries = list(intersecting_polygons.geometry) + list(exterior_sample.geometry)\n", + "\n", + "# # Use unary_union to dissolve all polygons in the list\n", + "# dissolved_polygon = unary_union(all_geometries)\n", + "\n", + "# original_index = intersecting_polygons.index[0]\n", + "\n", + "# # Ensure it's a single geometry object.\n", + "# # print(len(HHNK['peilgebied'].loc[HHNK['peilgebied'].index == original_index, 'geometry']))\n", + "# # print(len(dissolved_polygon))\n", + "# HHNK['peilgebied'].loc[HHNK['peilgebied'].index == original_index, 'geometry'] = dissolved_polygon#['geometry']\n", + "# # new_gdf = pd.concat([new_gdf, dissolved_polygon])\n", + "# else:\n", + "# print('No intersection found for iteration ', i)" + ] + }, + { + "cell_type": "markdown", + "id": "8ebbe88e-2fc4-4a9e-8925-bdbac19c4254", + "metadata": {}, + "source": [ + "### New peilgebieden and poldergebieden have been deliverd on 04 07 2024" + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "id": "7a0eb5d9-b3f1-4db4-b5c7-4fedddd68ee7", + "metadata": {}, + "outputs": [], + "source": [ + "peilgebieden = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHNK\\20240704_nieuwe_peil_aggregatie_gebieden\\Peilgebieden_export_2024-06-18.shp\")\n", + "polders = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHNK\\20240704_nieuwe_peil_aggregatie_gebieden\\Polders_export_2024-06-18.shp\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "id": "aab8ee8b-8119-4ba1-9863-06c189a898d5", + "metadata": {}, + "outputs": [], + "source": [ + "#Jeroen H asked if the following peilgebieden could be removed from the data (see email 04 07 2024)\n", + "codes_to_remove = ['2040-2020', '2040-2030-02', '2040-2060', '2040-2700', '8071-01', '8071-02']\n", + "peilgebieden = peilgebieden.loc[~peilgebieden.CODE.isin(codes_to_remove)].reset_index(drop=True)\n", + "\n", + "#add waterhoogte column, and fill it with the streefpeilen\n", + "peilgebieden['waterhoogte'] = np.nan\n", + "\n", + "#replace all null values with NaNs\n", + "peilgebieden.loc[peilgebieden['VAST'] == 0.0, 'VAST'] = np.nan\n", + "peilgebieden.loc[peilgebieden['WINTER'] == 0.0, 'WINTER'] = np.nan\n", + "peilgebieden.loc[peilgebieden['ZOMER'] == 0.0, 'ZOMER'] = np.nan\n", + "peilgebieden.loc[peilgebieden['STREEFPEIL'] == 0.0, 'STREEFPEIL'] = np.nan\n", + "peilgebieden.loc[peilgebieden['ONDERGRENS'] == 0.0, 'ONDERGRENS'] = np.nan\n", + "peilgebieden.loc[peilgebieden['BOVENGRENS'] == 0.0, 'BOVENGRENS'] = np.nan\n", + "\n", + "peilgebieden['waterhoogte'].fillna(peilgebieden.VAST, inplace=True)\n", + "peilgebieden['waterhoogte'].fillna(peilgebieden.WINTER, inplace=True)\n", + "peilgebieden['waterhoogte'].fillna(peilgebieden.ZOMER, inplace=True)\n", + "peilgebieden['waterhoogte'].fillna(peilgebieden.STREEFPEIL, inplace=True)\n", + "peilgebieden['waterhoogte'].fillna(peilgebieden.ONDERGRENS, inplace=True)\n", + "peilgebieden['waterhoogte'].fillna(peilgebieden.BOVENGRENS, inplace=True)\n", + "\n", + "#only sselect the relevant columns\n", + "peilgebieden['code'] = peilgebieden['CODE']\n", + "peilgebieden['code'] = 'peilgebied_' + peilgebieden['code']\n", + "peilgebieden['globalid'] = 'globalid_' + peilgebieden['OBJECTID'].astype(str)\n", + "peilgebieden = peilgebieden[['code', 'globalid', 'waterhoogte', 'geometry']]" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "id": "35e6b77f-2799-4a0d-b22b-702e7498d45f", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py:3377: FutureWarning: The `op` parameter is deprecated and will be removed in a future release. Please use the `predicate` parameter instead.\n", + " if (await self.run_code(code, result, async_=asy)):\n" + ] + } + ], + "source": [ + "#add polder ID's to the aggregatiegebieden\n", + "peilgebieden['repr_point'] = peilgebieden.representative_point()\n", + "\n", + "peilgebieden = gpd.sjoin(peilgebieden.set_geometry('repr_point'), polders[['CODE', 'NAAM', 'geometry']], how='left', op='within')\n", + "peilgebieden.rename(columns={'CODE': 'polder_id',\n", + " 'NAAM': 'nen3610id'}, inplace = True)\n", + "peilgebieden['nen3610id'] = peilgebieden['nen3610id'] + '_' + peilgebieden.index.astype(str)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "id": "5ff4bee5-0551-421a-bf67-6aec37e5d07d", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#collect the aggregatiegebieden and streefpeilen\n", + "aggregatie_gebieden = peilgebieden.copy(deep=True)\n", + "aggregatie_gebieden = gpd.GeoDataFrame(aggregatie_gebieden, geometry = 'geometry')\n", + "aggregatie_gebieden = aggregatie_gebieden.dissolve(by='polder_id')\n", + "aggregatie_gebieden = aggregatie_gebieden[['code', 'nen3610id', 'globalid', 'geometry']]\n", + "aggregatie_gebieden = gpd.GeoDataFrame(aggregatie_gebieden, geometry = 'geometry')\n", + "aggregatie_gebieden = aggregatie_gebieden.set_crs('EPSG:28992')\n", + "\n", + "streefpeilen = peilgebieden[['globalid', 'waterhoogte', 'geometry']]\n", + "streefpeilen['geometry'] = np.nan\n", + "streefpeilen = gpd.GeoDataFrame(streefpeilen, geometry = 'geometry')\n", + "\n", + "peilgebieden = peilgebieden[['code', 'nen3610id', 'globalid', 'geometry']]\n", + "peilgebieden = gpd.GeoDataFrame(peilgebieden, geometry = 'geometry')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 154, + "id": "93f32c70-1341-4ed2-8eda-e5daf937a3ce", + "metadata": {}, + "outputs": [], + "source": [ + "#add the HWS_BZM to the peilgebieden\n", + "HWS_BZM_list = ['peilgebied_1000-01', 'peilgebied_1700-01', 'peilgebied_1800-01', 'peilgebied_03010-01']\n", + "\n", + "peilgebieden['HWS_BZM'] = False\n", + "peilgebieden.loc[peilgebieden.code.isin(HWS_BZM_list), 'HWS_BZM'] = True\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 155, + "id": "ab8cdade-9ecc-4f35-be07-be418a4eb302", + "metadata": {}, + "outputs": [], + "source": [ + "#Add all variables to the dictionary\n", + "HHNK['streefpeil'] = streefpeilen\n", + "HHNK['peilgebied'] = peilgebieden\n", + "HHNK['aggregation_area'] = aggregatie_gebieden" + ] + }, + { + "cell_type": "code", + "execution_count": 157, + "id": "2eaaabf9-517e-420c-bb5a-db7ade053f7d", + "metadata": {}, + "outputs": [], + "source": [ + "HHNK['streefpeil'].waterhoogte = HHNK['streefpeil'].waterhoogte.round(2)\n", + "HHNK['hydroobject'].code = HHNK['hydroobject'].code + '_' + HHNK['hydroobject'].index.astype(str)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 158, + "id": "59a53ca0-f1b1-40e9-80fc-a89565f8aa0d", + "metadata": {}, + "outputs": [], + "source": [ + "# # HHNK['streefpeil'] = HHNK['peilgebied'][['waterhoogte', 'globalid']]\n", + "# HHNK['streefpeil']['geometry'] = None\n", + "# HHNK['streefpeil'] = gpd.GeoDataFrame(HHNK['streefpeil'], geometry = 'geometry')\n", + "\n", + "# HHNK['peilgebied'] = HHNK['peilgebied'][['globalid', 'code', 'nen3610id', 'HWS_BZM', 'geometry']]\n", + "# HHNK['peilgebied'] = gpd.GeoDataFrame(HHNK['peilgebied'], geometry = 'geometry')" + ] + }, + { + "cell_type": "code", + "execution_count": 159, + "id": "0e09445c-def9-4b56-8d48-bca6af7e3eb3", + "metadata": {}, + "outputs": [], + "source": [ + "#there are appareantly some comma's included, which causes erros later on. Replace these\n", + "HHNK['peilgebied']['globalid'] = HHNK['peilgebied']['globalid'].astype(str).str.replace(',', '_')\n", + "HHNK['streefpeil']['globalid'] = HHNK['streefpeil']['globalid'].astype(str).str.replace(',', '_')\n", + "HHNK['aggregation_area']['globalid'] = HHNK['aggregation_area']['globalid'].astype(str).str.replace(',', '_')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 160, + "id": "886a1f73-2a79-44fb-bed0-c6474fba28cc", + "metadata": {}, + "outputs": [], + "source": [ + "HHNK['peilgebied'].globalid.fillna(value='dummy_globalid', inplace=True)\n", + "HHNK['peilgebied'].loc[HHNK['peilgebied'].globalid == 'dummy_globalid', 'globalid'] = HHNK['peilgebied'].globalid + '_' + HHNK['peilgebied'].index.astype(str) \n", + "\n", + "HHNK['streefpeil'].globalid.fillna(value='dummy_globalid', inplace=True)\n", + "HHNK['streefpeil'].loc[HHNK['streefpeil'].globalid == 'dummy_globalid', 'globalid'] = HHNK['streefpeil'].globalid + '_' + HHNK['streefpeil'].index.astype(str) " + ] + }, + { + "cell_type": "code", + "execution_count": 161, + "id": "eff5302e-44a4-4508-b523-17f198acd9f3", + "metadata": {}, + "outputs": [], + "source": [ + "# HHNK['peilgebied']['globalid'] = HHNK['peilgebied']['globalid'].str.replace(',', '_')\n", + "# HHNK['peilgebied'].loc[HHNK['peilgebied'].globalid.str.contains(',')]" + ] + }, + { + "cell_type": "markdown", + "id": "d72f3d5c-20ed-4ca6-a71f-ddca9cf93fee", + "metadata": { + "tags": [] + }, + "source": [ + "### Check for the correct keys and columns" + ] + }, + { + "cell_type": "code", + "execution_count": 162, + "id": "ffd4ea1b-e2a2-4e3b-a5cf-e820a4709c30", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "afsluitmiddel\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "hydroobject\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "duikersifonhevel\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "stuw\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "gemaal\n", + "['code' 'globalid' 'nen3610id' 'func_afvoer' 'func_aanvoer'\n", + " 'func_circulatie' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "streefpeil\n", + "['globalid' 'waterhoogte' 'geometry']\n", + "type = \n", + "crs = None\n", + "\n", + "peilgebied\n", + "['code' 'nen3610id' 'globalid' 'geometry' 'HWS_BZM']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "aggregation_area\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n" + ] + } + ], + "source": [ + "show_layers_and_columns(waterschap = HHNK)" + ] + }, + { + "cell_type": "markdown", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "metadata": {}, + "source": [ + "### Store data" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "metadata": {}, + "outputs": [], + "source": [ + "store_data(waterschap = HHNK, \n", + " output_gpkg_path = output_gpkg_path_HHNK)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b10b40ec-2aed-4809-b051-613544311ca0", + "metadata": {}, + "outputs": [], + "source": [ + "print(len(HHNK['peilgebied'].code.unique()))\n", + "print(len(HHNK['peilgebied'].globalid.unique()))\n", + "print(len(HHNK['hydroobject'].code.unique()))\n", + "print(len(HHNK['hydroobject'].code))" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "id": "23157b6b-07a8-419b-91a2-f442efda8d7d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQYAAAGdCAYAAADwlN28AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB86ElEQVR4nO29eXhT55n3/9UuWZbk3bJsY5t9sXGIQwwkQFgCpBjSJG0CoTRpO5PJdEgm8+PtpJl5Z6CZzktnJk2XTNMl3ZKZNnRJ0jaBECCBEGKzxGaxAWODd1uybFn7Lp3794exQMiLZEuWZD+f69J14XPuc85zxNH3PMu98IiIwGAwGLfAj3cDGAxG4sGEgcFghMCEgcFghMCEgcFghMCEgcFghMCEgcFghMCEgcFghMCEgcFghCCMdwMSHY7j0NPTA4VCAR6PF+/mMBgTgohgtVqh0WjA54/cL2DCMAY9PT0oLCyMdzMYjKjS2dmJgoKCEfczYRgDhUIBYPCLVCqVcW4NgzExLBYLCgsLA8/1SDBhGIOh4YNSqWTCwJgyjDUsZpOPDAYjBCYMDAYjBCYMDAYjBCYMDAYjBCYMDAYjBCYMDAYjBCYMDAYjBCYMDAYjBCYMDAYjBCYMDAYjBCYMDAYjBCYMDAYjBCYMDAYjBBZdOU1p6rXiRFMfzE4veAAUUhHkEiGqyvOglIri3TxGnGHCMMUw2j0432nC6dYBNPdaYbB7YHJ4kKeSYU5uKtJSxDh+VY+LXeZhjzc7vfjb+2ZNcqsZiQYThimC3urCs2+ew6mWgWH3txkcqGkxjHqOgnQZHr97Riyax0gy2BzDFICI8I9/vDiiKITL3FwFVClsGMFgwjAlePeiFsev9iErVTyh85xs7kevxRWlVjGSGTaUSHJcXj+6jU58/I37kKuU4k/nuvHJtX5UX+vH9rtn4NXj18M+l8fP4YrWglylNIYtZiQDTBiSnE+a+/GVe4ohFQkAANvunoFtd8/AFa0FP/ywOeLz/ejYNSwtzoBcwh6N6QwbSiQ59y/MDYjCrVhdPhy53AsASItg3uBsmxHPv3URXj8XtTYykg/2WpiizMyW4+Dfr0RtuxEbF6nx6E9rcE1vC+vY9y5qwePx8P3H7oCAz4rsTEdYj2GKkpUqwdxcBbbfPQMZcjHe+OrdyFVKwj7+3Qs9eO2Tlhi2kJHIMGGYJmjSZPjFE0shG2bYMRLfO9KE852m2DWKkbAwYZhGlOargrwaZ2Sk4I7CNDy/aT5++1eVeHbdnCB7t4/Dj49fm+xmMhIANscwzXhsaSE6Bhx4evUszM5JhdfPQSTgw+ry4lpf6BzEp9cMaOg2ozRfFYfWMuIF6zFMM3KVUrz0xXLMzkkFAIgEg4+AQirCFysKUVGUDgAQC/iYlS2HWMhHSZY8bu1lxAfWY2AEkIkF2LtlEQ7Ua/HY0kJc7DKhw+BgPg3TkIh6DHv37gWPxwv6qNXqwP4nn3wyZP+yZcuCzuF2u/HMM88gKysLcrkcW7duRVdXV5CN0WjEzp07oVKpoFKpsHPnTphMpiCbjo4ObNmyBXK5HFlZWXj22Wfh8XiCbOrr67F69WrIZDLk5+fjxRdfBBFFcsvTjrICFb75wHyUZMmhkomwYnZmvJvEiAMRvwoWLVqEo0ePBv4WCIJnuTdt2oRf/epXgb/F4mD//eeeew7vvvsu9u/fj8zMTOzevRtVVVWora0NnOvxxx9HV1cXDh06BAB46qmnsHPnTrz77rsAAL/fj82bNyM7OxsnT56EwWDAE088ASLCK6+8AmCw3Pf999+PNWvW4OzZs2hqasKTTz4JuVyO3bt3R3rb05LBisjMj2FaQhGwZ88eKi8vH3H/E088QQ8++OCI+00mE4lEItq/f39gW3d3N/H5fDp06BAREV2+fJkA0KlTpwI2NTU1BIAaGxuJiOjgwYPE5/Opu7s7YPPmm2+SRCIhs9lMRESvvvoqqVQqcrlcAZt9+/aRRqMhjuPCvmez2UwAAuedTnx8VU8XOo3xbgYjioT7PEc8+djc3AyNRoOSkhJs27YNLS3BTjDHjx9HTk4O5s6di7/+67+GXq8P7KutrYXX68WGDRsC2zQaDUpLS1FdXQ0AqKmpgUqlQmVlZcBm2bJlUKlUQTalpaXQaDQBm40bN8LtdqO2tjZgs3r1akgkkiCbnp4etLW1jXh/brcbFosl6DNd4fEAjo28piURCUNlZSXeeOMNfPDBB3jttdeg0+mwYsUKGAyDCUAeeOAB/OY3v8FHH32E7373uzh79izWrl0Lt9sNANDpdBCLxUhPTw86b25uLnQ6XcAmJycn5No5OTlBNrm5uUH709PTIRaLR7UZ+nvIZjj27dsXmNtQqVQoLCwM+/uZinBsTmZaEpEwPPDAA3jkkUdQVlaG9evX48CBAwCA119/HQDw2GOPYfPmzSgtLcWWLVvw/vvvo6mpKWA3EkR0Yzw7yK3/jqYN3XjIhzt2iBdeeAFmsznw6ezsHLXtUxkeeHi9ug3/9t5lGGzueDeHMYlMyI9BLpejrKwMzc3Dh/fm5eWhqKgosF+tVsPj8cBoNAbZ6fX6wNtcrVajt7c35Fx9fX1BNre/9Y1GI7xe76g2Q8Oa23sStyKRSKBUKoM+0xW5RIAuoxMfXunFF35SHXYQFiP5mZAwuN1uXLlyBXl5ecPuNxgM6OzsDOyvqKiASCTCkSNHAjZarRYNDQ1YsWIFAGD58uUwm804c+ZMwOb06dMwm81BNg0NDdBqtQGbw4cPQyKRoKKiImBz4sSJoCXMw4cPQ6PRoLi4eCK3PW0ozVdBLhGgzeBAa78DJodn7IMYU4NIZjR3795Nx48fp5aWFjp16hRVVVWRQqGgtrY2slqttHv3bqqurqbW1lY6duwYLV++nPLz88lisQTO8fTTT1NBQQEdPXqU6urqaO3atVReXk4+ny9gs2nTJlq8eDHV1NRQTU0NlZWVUVVVVWC/z+ej0tJSWrduHdXV1dHRo0epoKCAdu3aFbAxmUyUm5tL27dvp/r6enr77bdJqVTSSy+9FMktT+tVCSKif3v3EhU9/x4VPf8e/fyTlng3hzFBwn2eIxKGxx57jPLy8kgkEpFGo6GHH36YLl26REREDoeDNmzYQNnZ2SQSiWjGjBn0xBNPUEdHR9A5nE4n7dq1izIyMkgmk1FVVVWIjcFgoB07dpBCoSCFQkE7duwgo9EYZNPe3k6bN28mmUxGGRkZtGvXrqClSSKiixcv0sqVK0kikZBaraa9e/dGtFRJxIThWGMv3fOdD6no+ffovv86Rn5/ZN8fI7EI93nmEbFp59GwWCxQqVQwm83Tcr7B6+fwV69/ho+b+gAAv3pyKdbMD101YiQH4T7PLIiKMSoiAR+LNDcfoNdr2uLXGMakwYSBMSar5mZj5o0Iy4+b+tBusMe5RYxYw4SBMSZLizMCoddEwP+eao9zi6YH14fJjzFZMGFgjImAz8OCPCWEN56W33/WBafHH99GTQOae61xuzYTBkZYrJmfjbKCNACDhW//cqE7vg2aBkiE4efnjDZMGBhhsaQwHSrZzfoUb9S0s9wWMcTj4+CLYwQbEwZGWPD5PBRlpgRSv13qsaCuwzjGUYzxcqrFEPiu4wETBkbY6MwunO80YZFGAQD4xcnWOLdoauLnCFqzExnyiRUpnghMGBhhcU1vwzW9DYefW4U183KgkAhxsF6Ho5dDA94YE+PP57uxadHw8UeTBRMGRlj85nQ7OgYcMLu8+D8b5+PD3avx4B0a/O1vavFfHzSyVYooQEQ4erkXlTMzoYqg3mgsYMLAGBOz04s/1nZByOdjVvZg2vkcpRQ/2LYEr3/1brzfoMO67x7HoQYdm5AcJxxHeL9Bh4qidOSnyeLdHCYMjLH507luWF0+bFiUG7QyAQArZmXh0N+vws7lxfiH353HV399lnlGRojb58eBei3Wzs9BehznFW6FCQNjVDiOsP/sYBarR+8aPs2dWMjH3943C0d3r4ZEKMD93zuBHx27Bo+Pm8ymJiWdAw4ca9Tjc2V5kEZQVzTWsOjKMZju0ZXHruqRnSqB18/hjsK0UdPiBY5p1GPPXy5BJODh258vw/JZrDbF7VzVWdFusKM4S465uYpJu264zzMrMcQYlStaC9bcNzuiY9bMz8HyWZn4ycfX8eSvzuCBUjX+6XMLkKOUxqiVyUNDtxldRifm5qZiwyL12AfECTaUYIzIVZ0Vc3PG9zaTigR4bv1cHPmH1bC4fFj73Y/xy5Ot8Pmn5/DibNsAfn+2EyqZCJtK1Zh5YxI3UWFDiTGYzkOJHx+/jqdWzYSAP7FqVESEw5d78eK7l6GUifDtzy9CRVFGlFqZuBAR6jqM6Ld5UJwpxzz15A0ZRoINJRgTwmBzQyUTTVgUgMF0/RsXqbFyThZ+dOwatr92Gg+Wa/DNB+YjM1Uy9gmSBJfXj0+v9UPA58HPEXwcoaIoPSlFkPUYxmC69hh+/kkLHltaCIU0+o421/ts+Nc/N6Ch24JvbJyH7XfPiIoAxROOG+wVbViYCz6fF1LjJFFgqd0Y48bq8sLk8MZEFABgVnYq/vdrlfj250vxww+b8dCrn+JCpykm15oMiAgfNuqxem42+DcELhFFIRKYMDBCOHK5d0SfhWjB4/GwpVyDD3evxtLiDHzhJ9X453fqYXZ4J3xut8+Phm5zFFoZHmfbjFg1NwsyceL4IUwUJgyMIIgInQNOzMhMmZTrKaQi/EvVQvxl171o6rVizXeP4w+fdUbsWt1jcuK3pzvwV69/hiUvHsHDr1ZHrUAOxxFsbh+6jA7ozK7AdovLi9MtBqhkorgmVYkFbI5hDKbbHMOZ1gFwRFg2c/KdkogIf6ztwr73GzEzS45/f6hsxJl8r5/DZ21GHG/S4+OrfWjUhaZBK0iX4dufL8V988ZOd+/w+HBdb4eX42ByeCAS8JEqEcLrJwj4gFIqQqpUeGOIJYTD44fR7sFdxRlJNT8S7vPMhGEMppsw/OjYNXz9vllxHSObHV68fOQq9p/txJP3FGPXmtlQSEXotbjw8dU+HLuqx8nmfljdvjHPlZ4iwuF/WI1sxfCrH26fHyeb+5GZKsGCPEVYb/62fjuyFBKkSpJvUY8JQ5SYTsLQZXTgbNsAHlpSEO+mABj0Enz+rYto7rUhLUUEvXV8FbcXaZR4++srhv3R17YbsbhABZFgeoyq2aoEI2IONejwubL4Jgi5ldJ8Fd7ddS++9eAieCfgMXmpx4IDF7VB2ziO8MqHzXjud+cmdO6pSvL1hRgxweEZ7JYn2iQan8/Dw3fm44rWgv891Y7x5kf99wNXcFVnRVaqBAqpEO836PBxUx++ft8siKdJbyESmDAwAADvXdBiw8LECeohIvz8kxaUZKXistaC59bPxdZyDXb8/DTc4wjnNtg9+OmJlqBtOQoJ/uH+uRAyYQiBfSMMcByh3+6etCXKcHi/QYc7izKwfmEunl03BxlyMe4qzsB3Hy2P2jX0Vjd++vH1qJ1vKsGEgYGPm/qwak52vJsRwOX140KXadj06VWLNfjD08sxJyc60YmvfHSN5ascBiYMDDT1WlGar4p3MwL89nQHnlhePOL+pcUZeO/Ze/Hc+jkQCSa2rOr2cTjTNjChc0xF2BxDksFxFPDHj9b5EmmMrTU7IRLyoRkjIapEOJjv4UvLilB93YBPm/tx8lo/uk3OiK95oqkPq+cmTo8pEWDCkGRYXYOrB9FKL96st2FubmIkDfH6Ofz04xa88Ln5YR+TlSrB1nINtpZrQERo1FnxjT9eQEO3JexznGzuH09zpzSJ86pghIUqRQSBgDeuN+Nw1LYb41oKbQiOI/z04+v42/tmjXvJlMcbrMr9x6dX4JE7w3fSatJbWeLa22DCkISkSoTIUUjQOeCY8APt8PiQIo5vx5HjCD8/2YKH7yxAbhTyQkpFAvz7Q6UI16t7gVoJsZD9FG6FfRtJikjAR2FGCkwODyyu8YUqExHi7RDv5wg/+6QFD5TmjTmvEAk1LYaw7231PDa/cDtMGJKcHKUURIDe4hrb+Dau99kwM1seg1aFR+eAA//v4BVULc5DYUZ0fSiONerDsls5Jwt/v25OVK89FWDCMAVQyURQpYjQYXBElIX5bJsRS0smPx+hx8fh15+24uS1fnxj4zwUpEdXFDiOIBUJ8Msn78La+SOHXC+bmYGf7bwroQq9JApsVWKKIBEKMCMzBVqzEwqpKKyQYLvbB2WM0reNhJ8jfHBJh4fuLAgpdxctznUOOketnZ+LtfNzcb3Phl9/2oY/1nbBx3EoL0jDspmZ+Nv7Zk2prEvRhAnDFCNPJYPB5obD40OOYuSJvHglK62+3o9NpeqYhjl/fFWPr6+5WSRnVnYq/u3zpfjHTfMgEvBZDyEM2FBiCpKZOphEpK3fPmKKtNZ+O0qyJjc24nyHEQvzlDEVBY4juH3csD9+hVTERCFMmDBMUVLEQhRlpqDL6IR9mExHZ9sGcFfx5M0vnLtReCXWdSTOdRqxZEZaTK8xHWDCMIXh8XhIEQvQb3Oj77bsR1bX5M0v9Fpc+Lvf1OHDMFcKJsKxxj6snjt2jkfG6DBhmOJkpkpQlCmHVMSHzuy64bswec4L3SYntv3sFIQCPpYUpsX0Wn6O4PVzbEIxCrDJxySHiKCzuGB3+zAjQz6iB59CKoJcLERrvx0uL4fizNj5L/RaXLjcY0F9txm/rm6DJk2KX3/lbmTFeBjxq09bsfUOTUyvMV1gwpDEmJ1eDNjcmJEpB185uEx354yR4x74fB5mZqfiH/94Af+8eWFU20JEOHK5Fz/5+DrqOkwAALGQj2fWzMbfrJ4Vc5fjz9oGkCIWYpEmccLHk5mI/rf27t0LHo8X9FGrh08H9jd/8zfg8Xj4/ve/H7Td7XbjmWeeQVZWFuRyObZu3Yqurq4gG6PRiJ07d0KlUkGlUmHnzp0wmUxBNh0dHdiyZQvkcjmysrLw7LPPwuMJLjBSX1+P1atXQyaTIT8/Hy+++OKkdqNjjVIqREl2KgT8wf+LhXlKXNGOHVVod/uj6kNwuceCL/ykBj870YL/W7UQl761EZ/84xqc/9f78cy6OTEXBZPDgyNXerH97thWz5pORNxjWLRoEY4ePRr4WyAIHc/96U9/wunTp6HRhHbrnnvuObz77rvYv38/MjMzsXv3blRVVaG2tjZwrscffxxdXV04dOgQAOCpp57Czp078e677wIA/H4/Nm/ejOzsbJw8eRIGgwFPPPEEiAivvPIKgME02ffffz/WrFmDs2fPoqmpCU8++STkcjl2794d6W0nJLf7IUhFAqiVUlzTWzE7Z/hCLd0mJzLk4lHP6/NzICCsZUWvn8PT/1uLL1YU4G/vmxXI7SCfpJoLRIRXj1/HM2tnJ329yISCImDPnj1UXl4+qk1XVxfl5+dTQ0MDFRUV0fe+973APpPJRCKRiPbv3x/Y1t3dTXw+nw4dOkRERJcvXyYAdOrUqYBNTU0NAaDGxkYiIjp48CDx+Xzq7u4O2Lz55pskkUjIbDYTEdGrr75KKpWKXC5XwGbfvn2k0WiI47iw79lsNhOAwHmTAZPDQw3dpsDfHp+fPD4/Xew00fN/vEAHLvaMeY7WPltY16rvMtEfP+scd1snyv/UtNGFTmPcrp9shPs8R9zHa25uhkajQUlJCbZt24aWlpuZdzmOw86dO/GNb3wDixYtCjm2trYWXq8XGzZsCGzTaDQoLS1FdXU1AKCmpgYqlQqVlZUBm2XLlkGlUgXZlJaWBvVINm7cCLfbjdra2oDN6tWrIZFIgmx6enrQ1tYW6W0nFSqZCAXpKTh+VY/vH23C829dxL6DjbisNaMgXTZq/MAQmjQZesMIzHJ4/JgdpfyLkXKxy4QrWgsWF6TF5fpTmYj6e5WVlXjjjTcwd+5c9Pb24tvf/jZWrFiBS5cuITMzE//xH/8BoVCIZ599dtjjdTodxGIx0tODJ8hyc3Oh0+kCNjk5oQ9uTk5OkE1ubm7Q/vT0dIjF4iCb4uLikOsM7SspKRm2jW63G273zTV/iyX8TECJhEomwqo52Vg1JzsoFdyfz3eH5f0nFvIhFvBhdnpHnY9o6rXisaWTP7a3uLzY9dtzESVkYYRPRMLwwAMPBP5dVlaG5cuXY9asWXj99dexevVq/OAHP0BdXV3EYz26zW9/uOOjYUM3Jh5Ha9++ffvwrW99K/zGJzC354Ycun+PjwtrQtDt43Cxy4RVc7NHFBMhnwez0xvzpchbISJ8862L6BhwoN82vrJ1jNGZ0HSxXC5HWVkZmpub8cknn0Cv12PGjBkQCoUQCoVob2/H7t27A29utVoNj8cDo9EYdB69Xh94m6vVavT29oZcq6+vL8hmqGcwhNFohNfrHdVGrx/0vLu9t3ErL7zwAsxmc+DT2dkZwTeS2DT12iDk89ETRlq4hm4z+m1ubFikRnOvbVgbn59D+4ADnQOOqLXR7vbh+0eb8PKRJrx8+CpeO9GCY416dA44wHEEP0f431PtOFh/o2c4jjwUjLGZ0NSx2+3GlStXsHLlSuzcuRPr168P2r9x40bs3LkTX/nKVwAAFRUVEIlEOHLkCB599FEAgFarRUNDA/7zP/8TALB8+XKYzWacOXMGd999NwDg9OnTMJvNWLFiRcDm3//936HVapGXN1hr8fDhw5BIJKioqAjY/NM//RM8Hg/EYnHARqPRhAwxbkUikQTNS0wF/BxBwOfhQpcJGxepRx0aeP0czrYOYJ5aEYhrmJObiqZeK+bmBq90DNg9uGdWFpaM4jsRKXKJEM+tnxt0jaZeKz66IQ49ZifOtN5M9641Ryf3JeM2IpnR3L17Nx0/fpxaWlro1KlTVFVVRQqFgtra2oa1v31Vgojo6aefpoKCAjp69CjV1dXR2rVrqby8nHw+X8Bm06ZNtHjxYqqpqaGamhoqKyujqqqqwH6fz0elpaW0bt06qquro6NHj1JBQQHt2rUrYGMymSg3N5e2b99O9fX19Pbbb5NSqaSXXnopkltOylWJ2zl+VU8mu4d+/WnrqHY6s5NOXe8nvz901abP6iK9ZXCFp8Ngp//+qJk4jqNPm/vo8CVdLJo9Ina3l3pMDvroSi9t+2nNpF472Qn3eY5IGB577DHKy8sjkUhEGo2GHn74Ybp06dKI9sMJg9PppF27dlFGRgbJZDKqqqqijo6OIBuDwUA7duwghUJBCoWCduzYQUajMcimvb2dNm/eTDKZjDIyMmjXrl1BS5NERBcvXqSVK1eSRCIhtVpNe/fujWipkmhqCIPF4aZT1/vpF5+0jGhzucdMzb3WUc9zVWehAxd7qHTPISp6/j3a+5cGutxjoupr/dFuctis+a9j5PX543b9ZCPc55lHNIVcAWOAxWKBSqWC2WyGUqmMd3PGhd/vx18uavFgeX7IhKTL60dduxGLNKpRa1U4PD406qyYl6vAgN2DT6/1QyYW4PjVPrz8aHncnIv+7b3L2H534YgOXYxgwn2eWXTlNGDIo/R2UegxOXGpx4LlszJHFQWd2YUuoxN3zkiHXCJEYUYK7irOwOq52fBzBKPDM+Kxsebr983C785OnQniRIEJwzSgy+jAzKxgJ6SGbjP8HKGiKH3Etz0R4arOCqGAFzLxOCtbjn6bB9uWFuKzNuOwx08GmakSKKUitPbb49aGqQgThmlAbbsRiwsGow4dHh8+axtASZZ81JTtNrcPF7vMmJktH9ZHgcfjYXZOKlbMzgKAiLJTR5sn7inGC29fhNk5vvoajFCYMExxiAgeHwcej4cekxMtfXbcVZwxapBTl9EBg82N8sK0sAKp7pmdhZPX4lf/USkVYf2C3LAiSxnhwYRhilPXYURZgQrnO03g8TBqufuhoYNcLERRBIlc5BIhiAZ9IOLFzuVF+MNnXVMqrD6eMGGY4lzWWlHfZcZ8tQJ5qpFLwJkcHjTqrJidk4r0McKyb8fs8CJbIQE/jmHPEqEAK+dk4aNJyCs5HWDCMIVxef1we/344l2FowZO6S0uXNVZsSBPCQE/sh93u8EOs9OL0nxVxMdGm63lGhyo18Z1vmOqwIRhCnP8qh4r54xcsJXjCO0GO1IkQizUKCOKefD5BwOs0mRizMic3PoUI8Hn8/CFigL8obZrbGPGqDBhmMI099owTz2844/V5UWX0YkZGSlIlQihkIqglInQZRxbHHRmFxp1VpTlj+4UFQ9WzMpCQ7d52FoajPBhwjBFMTu9UEiHX3nQmp1wev2YkZkS5MOgkokgFvJH7Tk091rBEaE0X5WwqdS+em8JfnmyNd7NSGqYMExRPrikw6bSvKBtfo7Q0meDSiYasa5ljkIKoYAH/W3hzC6vHxc6TchPl0GTNvIkZiIwKzsVJqc3rAxUjOFhwjBF6bO6oVbd/PFbXV50DDhQkiVHinj0aPs8lQxejjBgH3R11pqdaO23o7wwbcxjE4W/XjkTr3zUHO9mJC1MGKYgFzpNmHeLC3OvxQWPj0NJljzs7n9+mgwOj2/Q/wE8LMhLrgAytUoKlUyERh1zehoPTBimIO9d7MHa+TmDGZYMdqhkooiLyTo8PpgcXsxXK4J6HsnE1vJ8vF+vG9uQEUJy9AsZYXO2bQCZqRJYXT6Ynd6IPBiH0JldsHt8o3pJJgNGhwcOD1udGA9MGKYQVpcXPzl+Hec7TfD5OczJVcBgdyNXKUWuUjqmAxIR4WqvFVmpEszKjk9K+Giitw7GezAihwnDFIGI8PNPWjFXrUC6XIxda+fA5vah1+JCW78dn17rh58jfH5J/rBekFaXF816G8ryVWEFTiUDeosLGxcNX0KRMTpMGBIcu9s3Zrk3IsLLR5pQmJ6CR5cWwuX1o63fjoxUMWZlpwbe/g6PD78724kVszIx55bJyS6jAy4vN2pB3GREf9vKDCN8psarYQoztGQ4Ena3Dz/88BqWz8rEozcKv0hFAhRnyeH1cWjrt8PPDUYcpoiFeGJFMTqNDvz5fDc4jnCpx4wUsTBu1aRiicfHTZnez2TDvrUEZehHO1IhF4vLiytaC/a9fwXb7y7EillZITaZqRIUZaagx+QMcvZZOz8XRZlyfPX1s5CLhWMWuU1WWAj2+GFDiQSFz+dBLhZCJh4+KvKdum64fX58a2vpqJOKPB4PhRkpcHn96DA4oJAKYXP7kJEixmtfvguvV7dhkUaF5bMyI24jxxGu99lguNGrWaBWJlTsRKK6bCcDrMeQoPRZ3chMHf5N/ruzHZiRmYKnVs0KO9RZKhIgP12Ga302pKWIMCMzBSIBH3+1ciYIhP+paQs70cqA3YNjV/X4Q20nRAI+ls3MRGVJBjoGHDh+VQ+9NTFckSVCPus1jBPWY0hQzE4PPH4hzE4vNCpZIMOz3upCiliIFRG+4QfsHujMLtw1TPLXFbOyMC9XgZ9/0oqqxXnD5oIcSjPv5QiZcjHum5sdUie07EZeyUs9ZpxuGQCfx8M9szORlhKfocqCPCUaui2BdjHCh9WVGIN41JVoN9iRmSpBqkQIIkKX0QkeD8hWSPD7z7qwfWkhhBFMql3TWyERCkZN/goMjsnfb9DB4fFjvloRcHTKkIshEwlwR2FaRNdt6rWipc8Gj49DlkKCu4szIjr+VnotLsjEAiil4Q9VzA4vfvlpK/7h/rljG08Twn2eWY8hAclRSANzC0NzBMBgyvfsVHHYPy6Pj8NlrQWzc1KROsaS59C1PleWh+ZeKx56tRpPrZqJr91bMuZy6UjMzVVgbq4Cbf125CqlqL5ugI/jME+tRH6YEZrnOoy4rLXgnXPdcHn92FKWhy8unRHWhKkqRcQyR48TJgwJyEgTjnUdRuyoLArrHHqLCwa7B+UFkedN0KTJsCBPAbfPP25RGIKI4OMIMrEAq+YOZpO63GPBlR4LUiSCEXsRFzpN0FlcWFKYhtJ8FQ5c1OKzNiPuLsnAvx+4jFSJEA8uyceSwrRR708i5ENvdY0YZs4YHiYMSULngAM5CklYk42NOguUUtG4IyLlEiF+/zfL8f8OXoHPz427+w8Abh8HqSj4+IUaJRZqlLC7ffikuR8Ddg8qZ2ZAo5LhstaCHpMTZQWqIHfmV7YvwW9Pd2DN/ByU5qtwusWAE019+PP5bizMU+KBsrxhhxk9Zldck9QmK0wYkoQPLunwlXtKxrQ72zaAPJV0wslUeDweVszOQvV1Q+BNPx6sLt+IORzkEiHWzM8BMJgZ6k/nu7G0OGPY4K3MVAk2lqoxM2swKKxyZiaWFmdg9x8uoGpxHn507Dr8RKgsycCcHAUkosFMVC19NmTEafIzmWHCkAR0GR3QpMnG7C0YbG4UpqcgVSpEa78deSrpqNmhx6IgTYbfnO6YkDB4/BwypWP/MOfkKoLctG/H6+cg4POCei+//LQVX7mnGHKJCLs3zMPW/z6J+i4zDDYPbG4fuk1OAMDmV07i/b9fOe57mI4wYUgCPmrUhzW30GtxY6FmcPiQKhFCa3ZCrZSO29Fndk4q/ulzC8Z17BBurx8S4cTdZeraB+cXhug2OZGZKsbigjQAAJ8HLC3OwL9WLQSfzwPHEc51mnC+04SffHx9wtefbjBhSHD6bW5kpY49t2C0e0IcokYrMBMOPB4PYmHkouLy+tHUO7hE2m1yQCIShL0KcTtmhxdWtxdOrx9dRieIgD6bC0qpCA8tKQjYXe+z4fHKGQF/Dz6fh4qidFQUpUNndsLrZ3ETkcC+qQTno0Y9yvJVYy676Swu5CoTY+ZdKhJgYZ4SeWlSLNKoIBXyceyqHk291rC9KzmO0NpvB0cEhUQUKMI7IzMFFUUZIUKpNbtCKnIP8cSKYvzubOeE72s6wXoMCYzL64eQP+jHYHV5oTU7IRMJQjwJDTZ3wgVCCQV8KAV8ONx+ZKZKIBUKcL7TBKVUBP7Q64gG7bx+DjwAPo7gvbEK4vFxKMpIAZ/PQ0O3OWRCUsi/+U77w2edqCwZ2RO0IH3QD6TD4EiY4jiJDhOGBObI5V6sm58LAFBIRVBIRbC4vOgccEAuuRkVqbe6EzJZq9nhBWHQsXb5rEwsR/CPl4huLGeOLGomhwcqWegyZKpUCIdncMXjmt6GL95VOGpbti0txMtHmvCNjfNYcFUYsKFEgkJEMDu9IdGKSqkIhRkpEAl46DI60NZvR3qCLsepUkSjznPweLwxV01a+u3DunILBTx0DDhwsF6LO4vGTjAjFPCx9Q4NfsEK0YQFE4YE5WybEXcVj/zAK6QiFKSnwOn1T9ksRXqrC0UjxHcopSL4/IRPmvuwYWFuWOebr1ZiyYx0/M+p9mg2c0rChCFBqe82Y7569OHBgN2TsL2FiWJxeQPzEyMxM1uOe2ZnRTQ0qChKR0mmHL872xGNZk5ZmDAkIDXXDbgrjO6x1uyckr0Fs9MLg82D4qzRU99/5VdnkSaLXBjvnZOFHIUUfz7fPd4mTnmYMCQYZocXzXrrmGnPE3ElIhrY3D7Y3T6UjCEKQ8FZqSMU7h2LNfNzIBEK8N7FnnEdP9VhwpBg/PZMB75YMfoMOzDo5ThRB6ZEw+cfTF4bTpwHj8fDL59YCp15MFuU2+eP+HqbStXQmV0hBXwZTBgSih6TE9kKyYhh10MY7Z4p01sYKqPXOeCAzuLCIk34y64KqRBtBjt+f7YTP/ro2rjSuG2/ewb+WNcV8XFTHebHkEC8e6EnrAjKXqtrzInJZKFjwIHiTHnAlTkSbB4fekxOrJyTFUidHylyiRBSoQADU0hsowHrMSQIOrML2QoJxGMEHJkd3nFNuCUqCqloXKIAAF0DTjy0JB+LNBPL6fjFuwrwenXbhM4x1WDCkCAcqNdiS7lmTLs+29SqrjQRJ8SFGiWikbBUIRXh3jlZbJXiFpgwJAC9Fhcy5eIxo/8sLi/kkvHnV0hEOG78P22nxw9BlNyblxZnwOcnXOg0ReV8yQ4Thihid/vGNQH23kUtNi/OG9Ou1+yK6UpEo84yoR/qeBjvMAIYzIEZyWTlWDxSUYCT1/qDqnZNV5gwRJF971/BAz/4BH+s7UJzrxWXesxjHhNJb0ERQer08TA3R4HrfbaYXgNAILtSj8kJty+8MOxbOd1iQKNuMPv1RPJRDsdTq2Zi/xkWoh3Rt7p3717weLygj1qtDto/f/58yOVypKenY/369Th9+nTQOdxuN5555hlkZWVBLpdj69at6OoKXi4yGo3YuXMnVCoVVCoVdu7cCZPJFGTT0dGBLVu2QC6XIysrC88++yw8nuACsPX19Vi9ejVkMhny8/Px4osvxqwyERHhWGMfGnVW/J8/XMD/9/sLY9ZxAIADF7X4XNnYvQWd2RXzuQW91T3mUulEcXh88Pk55KfJoEmTjSuBy1BYdizyT4gEfLB8LuPoMSxatAharTbwqa+vD+ybO3cu/vu//xv19fU4efIkiouLsWHDBvT19QVsnnvuObzzzjvYv38/Tp48CZvNhqqqKvj9Nx1UHn/8cZw/fx6HDh3CoUOHcP78eezcuTOw3+/3Y/PmzbDb7Th58iT279+Pt956C7t37w7YWCwW3H///dBoNDh79ixeeeUVvPTSS3j55Zcj/pLCoc3gCOQYLEiX4c2nlsFk9+L6jYIrw6G3uJAuF425EmF1ecOqCzERvH4OeqsrkLsgVqSIhROqTOX2+dFjcgZSusUCFpYNgCJgz549VF5eHra92WwmAHT06FEiIjKZTCQSiWj//v0Bm+7ubuLz+XTo0CEiIrp8+TIBoFOnTgVsampqCAA1NjYSEdHBgweJz+dTd3d3wObNN98kiURCZrOZiIheffVVUqlU5HK5Ajb79u0jjUZDHMdFfA9D5x2J/Wfaqej596jkm+/Rqev9Qfuae610ucdMLq8vaPuvP20lj88/Zhuu6ixht3ci9FtdpDM7J+Va48Fgc1OTzkKnWwxkc3ljdp0fHWuO2bnjTbjPc8Q9hubmZmg0GpSUlGDbtm1oaWkZ1s7j8eBnP/sZVCoVysvLAQC1tbXwer3YsGFDwE6j0aC0tBTV1dUAgJqaGqhUKlRWVgZsli1bBpVKFWRTWloKjebm8t7GjRvhdrtRW1sbsFm9ejUkEkmQTU9PD9ra2ka8P7fbDYvFEvQJh6G8An+/bi4qZwYnJJmdk4r5agV6TC7UdRjh8vrRZXQgM3XsuQWb2zfhoi/hkpkqgcPjR+eAY1KuFwl6qwsurx9zchVYWpyOcx0D8MdgonT/mQ5Io5C8NtmJ6BuorKzEG2+8gQ8++ACvvfYadDodVqxYAYPBELB57733kJqaCqlUiu9973s4cuQIsrKyAAA6nQ5isRjp6cGRg7m5udDpdAGbnJyckGvn5OQE2eTmBsfgp6enQywWj2oz9PeQzXDs27cvMLehUqlQWBieR92Dd+Rj75aF+PqaWcPu5/F4KMmS484Z6egxObH3L5exam52wNd/JDoMjnEnUh0PJVlypIgFsLgSq7SbiM8PiCiPx8OymVk4ea0/6tc522bE1jvyo37eZCMiYXjggQfwyCOPoKysDOvXr8eBAwcAAK+//nrAZs2aNTh//jyqq6uxadMmPProo9Dr9aOel4hCKifHwoZuTDyONoZ84YUXYDabA5/OzvBnqL+8vBh17cYx7WZmp+Jr95agvssMu8c3op3D44NinNGDE0EmFsDnT5xax31WNwx2d5APh1DAx9LidBy7OvqzFSkSEX9CtTimChPqM8nlcpSVlaG5uTlo2+zZs7Fs2TL84he/gFAoxC9+8QsAgFqthsfjgdEY/OPR6/WBt7larUZvb2/Itfr6+oJsbn/rG41GeL3eUW2GBOr2nsStSCQSKJXKoE+48PmDKzVunx+Xeyz4y4WeEbu7CzVKeHwcZmWnjni+bqMzrJWNaJMiHqxJcU1vnfRrD+H0+NFmsKGlzwYhn4fZOYqQilYpYiEK02VRG/rY3D7cMysr5hO9ycCEhMHtduPKlSvIyxt5uY2I4Ha7AQAVFRUQiUQ4cuRIYL9Wq0VDQwNWrFgBAFi+fDnMZjPOnDkTsDl9+jTMZnOQTUNDA7RabcDm8OHDkEgkqKioCNicOHEiaAnz8OHD0Gg0KC4unshtj0pFUTo+uNSL851GPPvmOTz+2qlh7VQyEazukXsLTo8/Lm+udoMdDd1m/PJkG+7/3gm8eyE++QpkYgGKM1MxMzsV6aMEN83OUUTFIUlrduJs2wA+V6Ye23g6EMmM5u7du+n48ePU0tJCp06doqqqKlIoFNTW1kY2m41eeOEFqqmpoba2NqqtraWvfe1rJJFIqKGhIXCOp59+mgoKCujo0aNUV1dHa9eupfLycvL5bs7Yb9q0iRYvXkw1NTVUU1NDZWVlVFVVFdjv8/motLSU1q1bR3V1dXT06FEqKCigXbt2BWxMJhPl5ubS9u3bqb6+nt5++21SKpX00ksvRXLLYc/i3sqJJj29ebqdSv/1EL18+OqIdn8+3z3ivuZea0TtjBYcx1G/1UXfP9JEi/71EK36z4/i0o5wsbm8VN9lGtexZqeH6rtMdKHTSC19tii3LDEJ93mOSBgee+wxysvLI5FIRBqNhh5++GG6dOkSERE5nU566KGHSKPRkFgspry8PNq6dSudOXMm6BxOp5N27dpFGRkZJJPJqKqqijo6OoJsDAYD7dixgxQKBSkUCtqxYwcZjcYgm/b2dtq8eTPJZDLKyMigXbt2BS1NEhFdvHiRVq5cSRKJhNRqNe3duzeipUqi8QlDe7+dzncY6VBDDw3Y3CPa/fJky7DbnR4fdQ7YI2pnLOgxOWj/mXbqMNxsi8XpobZ+G7X02ajH5Ahsj/R7jRafNveN+9qTtQycSIT7PPOIYuQKOEWwWCxQqVQwm81hzzforS5kyiXw+jm09ttHrPnwQYMWy2dnhZRvb+mzYeYocw+TjdPjR5/VjQGHB1IRH2qlFGkpYrT225GRIobO4oKAP5irsaIoI+jYSz1mNPfa8OAdmqg6DllcXlzsNGNWjnzc8SNXtJaErMcRS8J9ntksSwxQyUTgiCAVCZCtkKDb5Bx2ybG0IA2NWmtQsVaPjxvTE3KykYkFmJGZArlkMKHJkOdiqkQIncWFeerB0nDnOoxo7rWCI4AjgkjAR36aDPPVSrQbHGMmd40EqVAAr5+bkI/HWPVApzNMGGKARHhz0jArVYL6LjPSU0Qhs+oalRSftQ0Ebes0OkZdqYgXHh+Hn55owd+vmxPYlq2QIFtx04FsyYyRM1uny8UwOTwTcoe+ldp2I1bPzZ5QdCYThpFJrFfTFKWsQIWOAQc+auzFNb0VvhuFXW/vWnv9HMQJGsHTMWDHCw/MH/cbWiUTweoaeRUmEjoHHChIlwWJwi9OtqKpN/zlVZfXDz6LiRiRxHwKpyCpEiFmZaeiOFOOs23GoMCqoWmeLqMTBemJmfnZ6Yk8PPp2TrUYohLder3PFuTf4fT4sSBPMWK16+Fo6bOjmBW4HREmDJNEr8WFokw5hAI+KksyUN89mKuBx+PB6fXD5+fA5yVuZJ9MzJ9w2/LTZJioLmjNThRn3pyr6DE5YXR4sGJWVtjnMDu9SJeLEva7TgSYMEwCPSZn0MqDl+MAEFxePxaoFWjrd6DN4MCMOHg5hs/Ef0R5aTJoJ+iM1NBtCSR36bW4kCIWhFWH4lZ0Mc6ENRVgwjAJtBscmHNLN1ciFOCOwnTUdRhRkiVHQ48ZZqcXbQYHOgyOmEQNTpRozNMVZ6ZAIRVCb41cHPwcoaXPhk+a+/DmmQ7ozC6kSiLP7aAzD+bAYIwOE4YY02txISs19OEV8HmYk6PAuU4TXF4/jlzuRUmWHIUZMrT22xMq76DPz8HlnfgcA4/Hg8nuxbXeyNPHDdg92PvuZWwqVaNjwIGsVPG4JkLNTi9yFFMny3asYMIQY9r67UG9hVvJVkiwtDgDX15ejKLMFJidXvB4PMzOSY1J2rLxIuDzkBKllG8zMlPQO44ew8F6Ldr6B+M4fvylO8eV67FzwAFNWuJ8r4kME4YY0mtxjVrG/VYevasQRy6HRpUmAjweLyr1G4YoypSHPZzgOML/nmqHSMDHB8+twlOrZgX5iYQLEcHr52KeUHeqwIQhhtR3mVEU5pKYgM/DHYUq1LYPjG0cBwQ8XtTmPpYUpuHjq31j2tncPhxv0mPDwlxsKlVPKFFtx0CiT+4mFkwYYoTe6gorddutzM5RoMvohH2UcOx4oUmToudGstuJwuPxkJ8uw4VO04h+Dc29Vvz4+DXkKqXIUUqRnjL+N73Pz8HPUdRTzU9l2DcVI/wc4Y7CtIiP+1xZHt67GJ8cCKMR7XWSRRoVdv/hAuo6gpP2uLx+fNLcB5lYgG9snB+oSzkRn4M2gx0lUYzTmA6wWIkYMd51covTC4VEiA6DAzMSyDNPJODD6PAgRykZ1xj/dv7xjxfwzNrZWFyQBq3ZCa+P0KizQC4R4p5ZWROKgbgVu9sHiVDAnJkihPUYEgi91QWpSIAHyvJw6JI2EFORKOSpZOi3ecY2DIO183OQnybDW7VduK6342CDFv02D+6ZHT1RAAaL6MQjPV6yw4QhQTA5PFBKRZBLhODxeHhs6Qz86tO2hHF26hxwoKnXGpWM1X6OcPSKHseu6vHY0kLcOycLT6+ehXlqBToM0Utdb3J44pJMdyrAvrUEYPABFgWFAatkInzxrgL86Vw3HqkoiGPrBilIl+Gz9gH4/FzYk3hEBLPTi84BJxp6zJCK+HjvghZn2wbw1ytnYtfa2UFd/IqidHQZHTjTOoC7itIn3HPQW90RBVYxbsKEIc7Y3D6kSoTD5gZISxGDI4Lb54/KuH4i8Hg8bC7T4MjlXjxwW63NSz3mwCQhMOhdeKZ1AO83aPHeBS3mqlPxyyeXIkchxfoFuRiwe1CUOfxkYEF6CtRKKT5rN0JvdcHj47B2fk7Ers89JmfEMRSMm7DUbmMwntRu0cTk8OCjRj0evjP+vQYAqL7WD7GQj7uKM+D1c+gccODHx6/j2XVz0Gl0QMgf7E0sLU4Hj8eD1eWFXCwc19v/YpcJzb22iHtMPj+HNoMds3NYb+F2wn2e2RxDgpOWIoZQwEe7wR7vpgAAVszOgsXlxeFLOnQMONAx4MAfarvw8I+rUVmSibtLMnB3SUZgiKCQisY9JFhckIbKmRk42xaZ09e1PltCZsFKJpgwJAFbFufh6BU9vAmySrF2fi7cvsFS9gqpCCqZCGIBPyap0grSU9BjcmLAHt5qiN3tQ4pIyJYnJwgThiRgcJWiEL893RHvpgTYsCgXb9V1oSBdhnP/cj++dm9JzISrarEGDd1mnGkdgMvrH9W2PcH8P5IVJgxJQqpEOGlVr8NBIhTgnllZyFVKwefz8KVlRfjL+dh4bAr4PKyam427itJxodOET6/1o8/qDrHrMjpQmMEmHKMBE4YEx+72wWBzQ29xYcDuxm9Ot8e7SQFuTQcvFvIxT63AX853x+x6fD4PlTMzcc/sLDg8PtRcN6Ctf3DuxeX1w+nxs+jJKMGEIcEZ6iW03sjrcGsS2USjNF+FLIVkUoLAijLlWD4rE6lSIf50rhtvnukYMe8FI3ISp2/KGJHMVAkyUyWwuX3oH6YLnUhUFKXjyOVeVC3WTMr1slIl+PySfLT0RZ4VijEyrMeQRKRKhHB4Rp98izcSoQCCOKwIRBLePhZ6iwvOBP+eYw0ThiRDJUv8MbQyDm2MxoqIxeXFVZ0VIgF/QklhpgJsKJFkiAR8cBxFNQJxKuDjCEQU8F8gInj8XFiu5ESE850mKGWiQB3O6Q4ThiRjkUaJi93mcSWBmSzcPn/Qj3Qy8HOD1+sccMDm9oEIkIr44AgQCXgjxmborS7Y3X4I+DxkhZmfczrAhCHJUKukqL5uwHy1AlJRYnZ35WIhrG5fUJGdWOL2+WFz+9Cos6AwPSUk/8KFThMK02/2snRmF2xuHwAaTB13I528LQFT6sULJgxJhlQkwMN35uMPn3ViR2VRQg4pxEI+tCYXlOrYCoPR7oHdM9g7WFqcMaKdVCQAjzfoE6KzuJCjkCArVRwSPp6aQA5k8YZNPiYhUpEAK+dk4zen26NSJDbaFGXK0dof26Avu9uHbpMTBcP0EG7Hxw0WzNGaXZiVnQqFVMQSw44Bk8gkg4jQYx7MQH3fvBz86Xw3HloyeljyVZ0VNdf7Yb9RFXrt/NyYtjFDLobbF9vlvkadJSgHxEi4fX5c09ugkAgxO4dFXIYLE4YkwuryYsDuQUF6CgR8HhRSEQbsHhy/qsd983KCbPUWF+o6TPBxHH58/Dou9VgAAF+sKIi5MAAAP8YTj34OY86xtPXbUd9txpbFmoQcciUyTBiSALPDC7ffDz4veHZdZ3YhTSZCp9GB357ugFolARHg9ROyFWJsWJgLPp+HzWV56Ld5UN9tmjQHqRxFbGb4bW4fzrYOjLkqU32tHwa7B1WL81gI9jhgwpAEuH1+pEqFSBEP/nf5/Bya9Tbkp8ugVklRlCXHb093oLwgbdiSeDweD9kKyaT0FIDBpcNoz3x0DjhuFI3hYc38nBHtjHYPLnSZcEdhWsTp4Bg3YcKQBOTcVuDW6vJhvloR9CZ8bGkh/vdUO3Yui/9KRWt/dOMWuowOpKWIRo2cdHr8uKKzgM/jYdWc7Lh/B8kOE4YkJF0e+iYU8Hm4f2Eu3jzbgR2VRXFoVTDR/Fnmp8lGHQ4091rh9nG4c0Z6FK86vWHCMIXQpMkwIyMFA3YPMoYRj8mCz+PBEGYqtnAYThQ4jnBZawERUJghY8OGKMMWc6cQZqcXuUopjl7ujXs7TjSNXc16vFzqMeNitxnz1QqUFaiYKMQA1mOYQnj9HObmKmBz+9BusI8YHxBrlsxIR1OvNarnvKa3wXujarVaJWVxDTGGCcMUYujHcueMdJxo6kOvxY27S0Z2FY4lubdNmE6EzgEHiAgL8ia/rsd0hQ0lpiir5mbD6fVHtRZkPBhyfWZp2yYXJgxTkB6Tc3AokZGCug5jTK7BcYN1KUfC64+OJ8OJpj4Ux2lINJ1hQ4kpAhFBb3XD5+OQIhEE6jaanINZiaKdgITP5+HNMx3QmV1IEQtw7+wslBaokCIS4L2L2qgNYQx2D3KVbD5hsomox7B3717weLygj1qtBgB4vV48//zzKCsrg1wuh0ajwZe//GX09ATXGnC73XjmmWeQlZUFuVyOrVu3oqurK8jGaDRi586dUKlUUKlU2LlzJ0wmU5BNR0cHtmzZArlcjqysLDz77LPweIKXyOrr67F69WrIZDLk5+fjxRdfTMhoxGjA4/GQq5QiUyEB3eJFcEdhGv4Ug5TuRrsHOQoJ9m5dhMeWFqJjwIHP2gbw5/M9WLsgJ2oFZVUyEXNpjgMR9xgWLVqEo0ePBv4WCAYDWRwOB+rq6vAv//IvKC8vh9FoxHPPPYetW7fis88+C9g/99xzePfdd7F//35kZmZi9+7dqKqqQm1tbeBcjz/+OLq6unDo0CEAwFNPPYWdO3fi3XffBQD4/X5s3rwZ2dnZOHnyJAwGA5544gkQEV555RUAg8U777//fqxZswZnz55FU1MTnnzyScjlcuzevXucX1fiIxUJQoKLuBiI4YeNety/YNDFuihTHpMVEI+PQ3aMYi4YY0ARsGfPHiovLw/b/syZMwSA2tvbiYjIZDKRSCSi/fv3B2y6u7uJz+fToUOHiIjo8uXLBIBOnToVsKmpqSEA1NjYSEREBw8eJD6fT93d3QGbN998kyQSCZnNZiIievXVV0mlUpHL5QrY7Nu3jzQaDXEcF/Y9mM1mAhA4b7JR32WiRq0laufz+zk602qgK9rYfx+Xus3k9vpjfp3pRLjPc8STj83NzdBoNCgpKcG2bdvQ0tIyoq3ZbAaPx0NaWhoAoLa2Fl6vFxs2bAjYaDQalJaWorq6GgBQU1MDlUqFysrKgM2yZcugUqmCbEpLS6HR3KxdsHHjRrjdbtTW1gZsVq9eDYlEEmTT09ODtra2EdvsdrthsViCPsnMuQ5jVOcXDjZooVZKMV8d+6VDP0cQC9n8eDyI6FuvrKzEG2+8gQ8++ACvvfYadDodVqxYAYPBEGLrcrnwzW9+E48//jiUysGHSKfTQSwWIz092Kc9NzcXOp0uYJOTExo9l5OTE2STmxscKZieng6xWDyqzdDfQzbDsW/fvsDchkqlQmFh4ajfyVgY7Z6YZzMaieZea1TX/jmOkCIWjJkxKRoY7R4opGxuPF5EJAwPPPAAHnnkEZSVlWH9+vU4cOAAAOD1118PsvN6vdi2bRs4jsOrr7465nnptozCw002RcOGboy1R5vMeuGFF2A2mwOfzs7OMds/Gja3D1/6+Wk8+aszaDcEC4Tb549ZhWivn8Op1gHcNUouxEg51WqI6vlGo33AEVQbkzG5TKifJpfLUVZWhubm5sA2r9eLRx99FK2trThy5EigtwAAarUaHo8HRmPw2rperw+8zdVqNXp7Q339+/r6gmxuf+sbjUZ4vd5RbfR6PQCE9CRuRSKRQKlUBn0mQmFGCk784xpsWKiGjwueBOy1uCKqoOTzc+C48CYS32/QYcvivIjaOhYcB7i9k1M7k61DxJcJCYPb7caVK1eQlzf4AA6JQnNzM44ePYrMzMwg+4qKCohEIhw5ciSwTavVoqGhAStWrAAALF++HGazGWfOnAnYnD59GmazOcimoaEBWq02YHP48GFIJBJUVFQEbE6cOBG0hHn48GFoNBoUFxdP5LYjRsDn4fHKGShIl6Hf5r5le2Rfv8Xlw/U+G3Rm55i2RBT1qlWVMzNwfRJqRBps7rhGhzIQ2arE7t276fjx49TS0kKnTp2iqqoqUigU1NbWRl6vl7Zu3UoFBQV0/vx50mq1gY/b7Q6c4+mnn6aCggI6evQo1dXV0dq1a6m8vJx8Pl/AZtOmTbR48WKqqamhmpoaKisro6qqqsB+n89HpaWltG7dOqqrq6OjR49SQUEB7dq1K2BjMpkoNzeXtm/fTvX19fT222+TUqmkl156KZJbjvqqxIDdTRanh4iIGrpNZHV5yeL0UH2Xia7prdTca6Xreiu19NmoodtEdrc3cGyPyUF+P0dGu5u0Jueo1/njZ51Bx0aLmuv9UT/n7Xx6rS+ilSNG+IT7PEckDI899hjl5eWRSCQijUZDDz/8MF26dImIiFpbWwnAsJ9jx44FzuF0OmnXrl2UkZFBMpmMqqqqqKOjI+g6BoOBduzYQQqFghQKBe3YsYOMRmOQTXt7O23evJlkMhllZGTQrl27gpYmiYguXrxIK1euJIlEQmq1mvbu3RvxAxeL5cpL3WZq0lnIZPdQk85Cl7rNZL4hFkREHp+ffP7Bdrb326lJZ6GGbhPVtQ/QZ20G+qzNQGdaDdRtdIx4P006Cx1r7I1am4f4pKkv6ue8lT6ri67prTG9xnQm3OeZRzRFXQGjhMVigUqlgtlsnvB8wxDRCom2uX1o6rUOm7nordoubCnXRHW5T29xwe7xoySGk4KnWgxYNjNzbEPGuAj3eWaLxHEgK1USlSXMVIkQc3MVONs2AN8tqxsN3WaoZKKo+wBc67OhODO2S5US5reQELD/hTgglwgRrVylqRIhKmak40KXObDtdOsA1i0YOZPyeNCZXYHCsbEkklUaRuxg/wtxwOX1o98WvZyIfD4PVtfNEGixkB+1sGdgsAfyz+/U455ZWVE750i4fZOzHMoYHSYMcUAqEkS1y3ypxxz0ppUK+fBx0fmBERF+8vF1fPuh0klJyZ6WIgoSOUZ8YMIQJ1LE0SthvzBPCamIj+YbeRbz02SwuqJT0v0PtV1YtyAHearohFGPxazsVFzqsUzZ8PhkgQlDnJBHURhOXusHj8fDkFNkWYEKde0Tz9z0+8868X69Fp+/I3/C54qEOwrTUNdhDNvLkxF9mDBMIiaHBz0mJ7goTuK5vH48/8eLePjVavzTO/UAAIVUBE8UYjBer27DU6tmTXqiFKlIgPKCNHwWBXFjjA8mDDHG5fVDZ3ahz+qGRCiAWilFm8E+4dqOzb1WdA448PNPWtBjdgEAatuNqL7eDwBQTtAd+mKXCSIBH8tmxifLtFDAx9zcVNTfstrCmDxYXGuMkYoEUKuChw0+jjBg98Do8EAqFKA4Sw6rywut2QUeAI4G4yt8HDdi3oOffNyCg/VaCG+ZEMxWSJAiFuLYVT1ONvfjvrnZw0aY6iwuWJ1eyMQCFKSnDNsj+J+adjy9emZc06qlpYhhdnrRYXBgRoz9JxjBMGGYBOhGOHjnwGAq91yFFKqUwTe6w+NDo84CuXjQWelWHB4frultmJ2TGrS9qdeKt8914fb5uexUCYR8Hu6dnYU3qtvg4wgiAS/QhroOE8xODwrTU8Dn82Bx+fBxUx9EAj4WF6gCRWO9fg5NvVZ855HFsfg6IqIoU44Pr/SiMGP0+pWM6MKEIca4vH4YHR5wN97US2/LZ5AiFo7YK0gRCyER8mFxeeH0+GF1ecER8N5F7bD2Brsbhxp0ePX4NTT12tDca8NCzeC5eTwepCI+KopCQ86JCJd6LPBxBCGfh36bGz6OsOcvDVhanIEHSvPimklJIhTA4fFDLmGP62TBYiXGIJqxEuONkegccEAhFUIlE8Hl5SATC3BVZ8VLh6/iyOVeaFRSbLt7Bn74YXNQzof/+sJifPGuwQxUzb1WFKSnQBbGasgbNW2QigTYXJaHE019aNbbIBTwsOPuokBPZzKpbR9ARVF85jqmGuE+z0yCJwmOI4x39e3WVGpDP+x5agVe+/JdONHUB53FhR9+2Bxy3JnWAXzxrkL029xQSEVhiUL1tX7cOSMdpfkqAMADZXl4AIDV5cXvP+tC54ADz62fE9VCsmanF9f0VhAB+eky5CqkQc5U5zvNyJBLYhq8xQiGCcMkwefzou60Y7C5kZUqgdHhQZcxNHnL2+e6sW5BDrJSJWGlZLO7fWjW2/DEiuKQfQqpCF+7twS7f38B6777MZ5aNRNlBSpIhHzweDzweTzweQCfx0NWqgRq1di1K/0c4YNLOnBEWDd/cIhztdeKAxe1sLv9kIr4MDu9ONdhQmm+EkUZKZPifclgQ4kxidZQwmBzw+PnkJUqiUqgkM3tg87sQnFmCtZ89zg6B0bO6rS4QIV/e7AU5YVpo57zqs6Kdy/04P9snDeijcfHod/mxommPlzT2zA/T4lZ2XJIhAL0Wl0oykhBu8GBDxt7sTBPhTuL0iAW8OHw+OHxcxAL+PD6OdS2G6FJk2HV3GykjjF30G1yosfkhMvrxzy1AjmK6BXMnW6E+zwzYRiDaAiD2ekFjwcopdEZn7u8frQbHIG08C8fvooffnRt1GPkYgGOfeO+UX9UA3YP/uuDRux7ODqrERxH6DY5wefzkCoRQirio9/mgdHuwYzMlHF9H38+342t5Rq2QjFOWD6GBGAwitINsYAfNVEAEFKLMhwPQbvHjz981jWqm3GGXIzKkuglSeHzeSjMSEF+mgwqmQgSoQD5aTKU5qvG/X3kqWS4eiMmhBE7mDBEmdMtBnzWNoA+qxtu3+DQIZxJv3BpN9gx6xa/huZeK6qvh9b1GI7/+uAqfjDMJOUQBpsbaXFYdYiEiqJ0tPU7WJBVjGHCECWICLXtRtR1mNBv8yArVRyUpdnl9U/4Gg3dZoiF/MCYvNfiwl+98dkYRwXzm9MdMNpDc0EY7R688tE1rJyTPeF2xhIBn4flMzPRqGO9hljC5hjGINI5BiIC0WA3emguIFU66Kjk8vrh8xN4N2bvh775dLko4HU4HF4/hy6jE6kSIbIVEhARfv5JK/7nVDs6bnhTjoRcLMBX7inBR416NOos4AgozJDhzb9ehoL0FBARaloMGLB7sHpu9qjtSCT+fL4bD05y1OdUgPkxxAkejwe7x4e367rwg6PN+NctC0d9gHtMTtjcPhhsHvB4AA885KVJg1YudGZX0Bq+0eHFr6vb0G0au77EX62ciX+4fy7+z8Z5uKa34gs/qYHLy+FM6wC8/sHlwu1LZ8TFcWm8+DmC3uLGR429yJRL4OMIxZkpyExllbGjBROGKKIzu/Dn89149fh1mJ1e5KfJcP/Ckate2dyDyVRuTYJCRNCaXbC6fHB5/chRSkKKr2TIxfjLrnvw5K/Oor57MPpwZrYcaTIRmnptsLl94PGAb2ychy8vLw4cNztHgRcfLAWfB1Qt1uCf36nHV+8tSSpRAIDznUZ85Z5iCG+Ip8/P4bLWgqu9VkhFApTlq1juyAnChCGKqFVSSISDTjkA8P/dPxcp4pG/4n6rO6Q+I4/HgyZNBr3FBaFAghSxAFJR8OTlvx+4jG13z8D9C3NR323G9rsL8bV7Z2J2TircPj/q2k2YlS1HjjJ0aXJr+c0K4eUFaZiZhN6EYoEgIArAYIj24oI0AIPDroZuM/wcgQCkp4gwI0POqmZHCBOGKMFxhPcbdAF/AoVEiM1j1I6UiEZ+WC9rLbhvXmimZ5vbh9er27H/TCd8HGHd/Bzs3boIEuGgeEiEAiyfFd6SI5/PS0p/gNHyWYoEfCy5pc6GyeFBbbvxhlAQnB4/7i7JiKpL91SECUMUaOu3Qyzk4+/3nwsEMc3PU4S86W9laJLydjoMDvTZXCEh2EPsP9MBj5+Dx89hXq4CP9pxZ0AUImWoZ5NMmB3eiH7UaSniIKEciiSt6zAiVSLC0uL0pBTHWMOEIQoMDQeyFRJob2RTemrVrFGP0VvdyL2tq+/2+cHjYcRIQiLCgfrBkGuxgI/vPXbHqOIzFkO5GpKJjgEHSvPH75rO4/FuBIipoLe6UNNigJDPx5IZaUHzEk6PP6r+J8kGG3hFkd89tRzr5udgTk7qqJOOwGDMgYB/e3al4EjK2+HxeHj9q3ejvDAN/7hpXiDXwngYsHtChCkZ4Ch6+TJzFFKsmJWFJTPScK7DhOrr/ei1uNDab8fmVz7Bx019UblOMsL8GMZgPLESHEejRgGaHB44vf5xp2Q3O71QSIQTijQ81WJAVqokJDtUonO+04Q7xggGmwgnm/thsLtx54x0HL3Siy8tK5pSKxwsViKOjPWDtXvGLwoAoJKJJhx+fL3PhqIky6Po8Pggm8DQaSw6BxzIkIvx4B35KMxIweOVM3CsUR+z6yUyTBgmmUTpoHl9XNK9Ca/r7ZiZHf3lVSLCZ20D8HMUNDyTCAVoNzjw2omWqF8z0WGTj5NM54AT+emTU9VpJKwub1AKuGRhTm4qmnqtWKRRhWXf0mdDu8EBqUgAAgEELNQog1Y1hlzC75yRPuxE7up52fj+0aao3UOywIRhErG5fRAIeCGTjpOB3e1D3w2HqtZ+e1DYdrIgFQngC6NYr58bDGiTCPlYM/+mLwgR4ZPmfhRnyjEjMwV6iwsNPWYsyFOOuLozJycV2dPQ1ZoJwyRhcngGcxqmxae38OvqNrx8pAn3L8jFQo0Sz6ydHZd2TATuhjfjaDT3WtFndWNxYVpIZigej4dVc7NRc92APpsbuUoJ1s4fffWIx+NhQd7EkgAnI8k1yExSDLbBKlTp8vh421lcXvzsRAv8HOF0qwFKqTApnXrOtA1g4Qg/UqfHj8OXdJCKBFgxO2vUdHHLZ2WioigdBeljT74SEeweP1r77eNudzLCegyTgNvHITM1fs4yvzzZGvByfPCO/DHfkomG2eHF8SY9DDYP2g12eHyDLtEL8pQoK1DB6fGjoduC9Qtyo5YslohQ321Gl9GJL9xZAIvLixNNfbhndtYw/ieD4mF1eWFz+eD0+sHn8ZCWIoKfI3j9BImQD7VKil6LC0a7F2bn4Mfu8eHRGyn+EwkmDDHk1tRu8eT3ZzsBAKvnZmNGRkrSlXu70GUKCV032Nw43TqA7x9thsvrx54ti6J2PZvbhzOtBszJUQSCs1QpIuSppPioUQ+ZSAA/ETgiSIV8iIUCpIgFUMlEyFFKIRMJ4PT4Yff4IBTyoZTyYff4cEVrQY5CigV5CvB4g4V9/vdUe9TaHU2YMMSARp0FNpcPWakSCAW8uFZQ8vo5zMpJhd7qxpMriqG3uuLWlvHQ0G1GtiJ08i8zVYJNi9SQiQW4qyh9mCPHT1OvddhelVDAH9OjdQixkB8Uzp4uF4cMXXKV0oDwJBpMGGLA69XtqGs34oN/WAWDzQ0ujr4LIgEf//O1SlhcXnx8tS+phhEOjw9un3/E2JG6DiNKMuVRzzrFn6T5F7PTC3+CLhuzyccYsO/hMnz30XIAg2+2REiXppSK0Gd1D/v2nQgcRzDY3FE95xDnOkwj+ix4fNxg5qYY5JNImYTgqerr/Vj33ePITE3M8G/WY4gRQyXeEoU+qxtZURYFAGjpt8HjI1zVWSES8iER8uHjBifbVDIRchTSsJKkdA44UNdhRJ5KBj5v0G18Xu7IoesXukyoLIlNPcuhzFqxwM8Neln+5OMW9Ns8SE/Q7FlMGKYJHzX2Ysst2ZuiRceAA0sK00MiPV1eP0wOL5p6rTA5vLi7JCNEILqMDnzUqEef1Y3PL8nHwjwl5oyQh+JWOI4gEwlituQqFQrg83NBWaImgtXlxYVOMzgi+DgONrcfJ5r6oJAKR83wFU8Ss1WMqOPw+GPyEM7JUaC+24xVc4PTzktFAqhVAqhVUnAcobbDiKW31c802r1BOSnD5VSLARXF0Z1wvJUFeQo0dFtQVjC+Xh8RoaXfjg6DA+ABcrEQlTMzgmJT0mQizMlNnVAwXSxhwjAN0JqdmDFKnoeJUJiRMuZKB58f6gZON5b7xgNHGHfWqnDg8XjwR9C2fpsb1/Q2mByD9TpEAj7m5CiC3LFv53YhTTTY5OM04JOmftw7Jytm5zfYPGPOrs/KTsUVrQXAoHv46v86DrtnfGP5yVg0yFZI0DNGen4iwuvVbXj6f2qxSKPExkVqbCrNw7oFuUnnK3I7TBimMDqzCy19Nji9/pi8Yf0c4c/nuyEMIzBMJRPB4vTC4fHhud+dR8eAA0WZka8ouLz+oApfsSI/TYb+UVZb9BYX/n7/edS2G7FyTjZ+c7oj5m2aTNhQYopBRHi7rhtyiRD3zM6Eze2LSQ4DAKhtN6JqsSbsaNHZOak4WK9DdqoE25YWInMcsSOXtRYsiWEGp1sZzp9Bb3GhvtuMjgEHnlo1M7D69OaZDjz+2mlsvUOD7XfPmJT2xRSKgD179hCAoE9ubm5g/1tvvUUbNmygzMxMAkDnzp0LOYfL5aJdu3ZRZmYmpaSk0JYtW6izszPIZmBggL70pS+RUqkkpVJJX/rSl8hoNAbZtLe3U1VVFaWkpFBmZiY988wz5Ha7g2wuXrxIq1atIqlUShqNhr71rW8Rx3GR3DKZzWYCQGazOaLj4kXngJ18/pv3+EZNW9Df0aSufSAm5x2Jcx1GMjk8k3a9S903/899fo7eqG6lv5zvHvEZMtjc9J+HrtCbp9vJH6PvfKKE+zxHPJRYtGgRtFpt4FNfXx/YZ7fbcc899+A73/nOiMc/99xzeOedd7B//36cPHkSNpsNVVVV8PtvFn19/PHHcf78eRw6dAiHDh3C+fPnsXPnzsB+v9+PzZs3w2634+TJk9i/fz/eeust7N69O2BjsVhw//33Q6PR4OzZs3jllVfw0ksv4eWXX470lpMKjkPQG9zh9sUs/8Nkeu0Z7R6oZKJJGUbcTkO3GU+98Rk0aTJsKdeMuEyaIRfjGxvnY92C3LArkCcskajNnj17qLy8fEy71tbWYXsMJpOJRCIR7d+/P7Ctu7ub+Hw+HTp0iIiILl++TADo1KlTAZuamhoCQI2NjUREdPDgQeLz+dTd3R2wefPNN0kikQSU8NVXXyWVSkUulytgs2/fPtJoNBH1GpKtx9BnvXm/fj9HPzl+LerX4DiOzncYSWtyRv3cI13v0+a+SbnWrVzRmun4VT397kwHOT2+iI5t7rVQl9ERo5aNn5j1GJqbm6HRaFBSUoJt27ahpSX8fHi1tbXwer3YsGFDYJtGo0FpaSmqq6sBADU1NVCpVKisrAzYLFu2DCqVKsimtLQUGs1Nh52NGzfC7XajtrY2YLN69WpIJJIgm56eHrS1tUV620lD1i3ZhrpNTsyNYqYmh8eHmusGXOqxIFshgVoV+/Tzfo5Qfd2ApTHychyN+WolVs/NxqNLCyOu3zE7R4HWvuTN4RDR5GNlZSXeeOMNzJ07F729vfj2t7+NFStW4NKlS8jMHLssmk6ng1gsRnp6sHNKbm4udDpdwCYnJ3T9NycnJ8gmNzc4GCg9PR1isTjIpri4OOQ6Q/tKSkqGbaPb7YbbfXM22mKxjHlficqFLtOE18sNNjesLh80aTKc7zBh+azMSUnycqnHDLPDCwGfh2UzM+OSDm+iZCnE0FtdyFEkX/2OiHoMDzzwAB555BGUlZVh/fr1OHDgAADg9ddfn1Aj6LYiIsM9eNGwoRtOK6M92Pv27YNKpQp8CgsTL4lGuFicPignGMDVaXQiPUWMRp0Fy2ZOjig06ixQK6VYMTsLlUkqCgBQnCnHyeb+eDdjXEzIj0Eul6OsrAzNzc1h2avVang8HhiNxqDter0+8DZXq9Xo7e0NObavry/IZqhnMITRaITX6x3VRq8frBFwe2/jVl544QWYzebAp7OzM6x7S0Rs7onXpuSIoJQJsbggLWrZkUZDb3FBLhYicwokYG3qtcYkPmUymJAwuN1uXLlyBXl5o1d1HqKiogIikQhHjhwJbNNqtWhoaMCKFSsAAMuXL4fZbMaZM2cCNqdPn4bZbA6yaWhogFarDdgcPnwYEokEFRUVAZsTJ07A4/EE2Wg0mpAhxq1IJBIolcqgTzJyscsUFTfo2TmpaJnEfIc6i2vUMn3JwjW9DTMyUpKudkeASGY0d+/eTcePH6eWlhY6deoUVVVVkUKhoLa2NiIiMhgMdO7cOTpw4AABoP3799O5c+dIq9UGzvH0009TQUEBHT16lOrq6mjt2rVUXl5OPt/NWd9NmzbR4sWLqaamhmpqaqisrIyqqqoC+30+H5WWltK6deuorq6Ojh49SgUFBbRr166AjclkotzcXNq+fTvV19fT22+/TUqlkl566aVIbjnpViWIiPafaaeHX/00amvp9V2mqJwnHC50GiftWrGi2+ig7gRckSAK/3mOSBgee+wxysvLI5FIRBqNhh5++GG6dOlSYP+vfvWrEAcoALRnz56AjdPppF27dlFGRgbJZDKqqqqijo6OoOsYDAbasWMHKRQKUigUtGPHjmEdnDZv3kwymYwyMjJo165dQUuTRIMOTitXriSJREJqtZr27t075R2c3qhpo6Ln36PvH2mK2jkn68dqcXqoUWuZlGvFCpPDQ026xL2HcJ9nVtR2DMZT1DZeEBEe/NGnuNhlxt3FGfjtX1dGJadArAvJDtFjckIs5ActuSYTXUYHzE5v2JWy4gErajsNGbB7sPZGqO+ZtgE8u/8c3D7/GEeNjt7qmjRvw2R+Q13vs4HH4yW0KEQCE4YpxA8/bMb3j95cITpYr8NXf312zPDh0eg2OlESg7yKw9FvdY8rsCreHKzXws9R3KqMxQIWXTmF2HpHPloNDpxo6gts+/SaAff8x0dYoFaicmYGls3MRGVJRlBh19GYLB8CP0e4prehfJIiJ6PFNb0VDo8fc8NISZdMMGGYQlQUpUMi5GNWthzXb3HHJRoMV76steBXn7YBAOarFagsyUDlzEzcMztrxOFCLBOj3srxq3o8UKaelGtFC6+fw/lOM75QURDvpkQdJgxTjJ9+qQJ7/nIpSBiGo1FnRaPOitdr2pEqEeK59XOwc3lRUEIXq8uLlw83YfnT0fd4rOsw4kcfXYNKJkJ5YRrunJGesIlRR0IkGBThqUhy/U8wRsTt80NrcuG7R5rw7oWeiI61uX349oEr+MnHLfhCRQGqFudhZvagO69QwIuJG/QdBWkoL0zDmdYBpKWIxp14Nd4kaL2YCcOEYYogEQrw2ictEYvCreQoJPibVTPxzrlu/OZ0B2ZmyeH1EzoHHFH3RuTzefjqvSW4Z3bmiJWmkoOpqQxMGKYQ5zpMQX8L+Tz4Inil+TgO6XIxvnrvzcjTDLkYsfJ0OddhxL2zY5ekdnJIzgCvsWDCMEUgInTfWJacr1bg62tmQ8Tn4eu/rQv5YSukQjy8JB8F6SnwcQQeD3B6/Dh5LTQScH6eAm0Ge9SzHhvtHqRKhJMSrRlbWI+BkYDQjVBzHo+HwgwZMtxivPnXy6CQCrH6v46HiMKWcg1efrQ8JLinz+pGryW0PsS8XAXe6enGmdYBWJxepKWIUFGUPuEf9IUuE1YneG2FsSCimPWm4g0ThiSFiDBg9+C1T1oBAEWZKdi1Zjbum5cDqUgAl9cf6EEAwLr5Odi1djbuKEwb9kft9vmHLQ8nFPDxxbtu5qRo7bfjxfcu4182Lxx3GHa/zY20FHHS9xauaK2YF8UMWYkE83xMUng8HjJTJZCK+FhanI6HluRjU2leIAVZTUtwMlIBn4clM0Z+0394RY8188Z+g5dkyfHwkgL8qrptXO12ef24qrNOSuxFrHF6/QlRyTwWMGFIchRSEdYtyA3JSXjqtizFHzf1wTFK5Se7x4eZ2alhXbOsQIVFGiXaxpGnoa7DiBWzxk4DmAykp4hgdU08GU4iwoYSSU6PyYln3zyH5bMy4fVzWD03GzKRAPvPBmeeenr1LEhHqUbl8kQWbLVsZiY+vdaPjgEHMlPFWKBWjjm04DiCWMBP+iHEEC4vB1mESWKTBSYMSc4/3D8XOrML/37gMo5d7UNBugwGmwdOb/APfXGBatQfrs0deRTmPTeWGgfsHtS0GGB3+yAS8rFqTvawRWz/dL4bGxYll9vzSFhdXvD5iEpYeyLChCHJSZUIMTsnFb98cik+98OTgcKxt7P/bCfWLRg51+VEyJCLAyJhdnhxsF6LHIUElTMzYXZ48X6DFgTggVI1UiXJ/8j1WlzoMjqS3DFrdKam3E1DeDwenlo1fEp8ALiqswb+7fVz8Pi4oP3jLUl/O6oUEbaUa5CZKsbhSzp83NyH9xt02La0MOyIzkRGb3Ghz+qe0qIAsB7DlKK23TjiPpfXj33vX0FLnx16qxsvbl0UFOIc7WH/7BwFRAI+vvGHi/h/D5dOiXmFzgEHbG5foJDtVIYJQ5Lg9o1eyr613463artH3K+3uvHTj1uQIhbA4fFDfluXnhdl116j3QOt2YXvbbsDjVoLZuck93q/3e2D0eHB4oK0eDdlUmDCkCSYnV7kKIKF4Y+1Xai+3o80mRgfNfaGTDjeCp8H/Pord2PV3Gz88mQrfvrxdexYVoSOAQfUSmlUewxasxPdRieWzcwEEeGjK6F1QpIJIkJDtxmVM6fGMms4MGFIEox2L96v14Ejgs3lgypFBK+f8HbdyL2EIYR8Hr6xcV6gXN1X7y1BzXUD3qhuw5xcBerajWiNUu2IzgEHLC4v7ioeHIPzeLzkra1wgytaa9JllpooTBiSBIVUiE+v9ePIld6Af344M/x/s3om1i/IxdLi4Mmy5bMysfwWR6N9B69MuI06swtWly8kISo/iecXiAgunz/iorbJTnJL+TRCkybDy4/dAeEt/gE2tw/rF+RCo5JCJBjcniEX46El+chTSaGQCvHNTfNDRGE4PH5uTJvbcXr8qG03orZ9AHUdRhgdHizUhKYkT5EIRvW6TGSaem2YnROeR+hUgvUYkgQiwoVOE/LTZGgzOALbM+Qi/PFvV+BgvRaNOiv+bs1slGTJobe6IOKH72WYlSpBt8kZdqZjt8+Ps20DWDkna8xrrJ2fg3977wr+tWohZOLkevPqra4pGyg1GqzHkCTweDzcXZKBP++6F/cvzEVRZgryVFJc7bXB5R1cZXjpi+WBVO85CinSI0jFXlmSgdO3BV6NBBGh5rohLFEAgBSxEM9vmodfftqKZKtvNNpK0HiYaJ2PyYL1GJIIkYAPlYyP1758Fzw+Dg7PYJl7Pp8XdgDUSJQXpg2bqGU4aq4bsGxmZAli01LEePAODX56ogVr5+ckRbp1P0cQCyf+7jzTOgAigtPrh0jAh8PjR55KmtD+EEwYkhSxkA+xMHqehCIBP8Qb8lYu9Zjh8nJwe/1YpFGNazKuID0Ff7NqJqqvG3C2bQB8Hg8cERxuPzgi3FWcjjtHCQ2fbHotLhRNMNelx8fB6+cCLuNDtBvsOHK5F2vn50xa7Y5IYMLACCDg8+DxcSFvyUadBZlyCdQq6YSvwePxcM/srJAfCgB81jaAH354DV9eXhTRMChWuH0clBMsz1d9vR8r54TmuSjKlCNXKcUnzX0QC/goL0wLcTqLJ2yOgRFgvlqJSz3moG0Wlxc2ly8qojAWdxVn4G/vm4X3LvbgvYs9cZ+PsLt94w6rJiKcaOrDzKzUEXsEUpEA983LQWFGCn58/Dreuzj+DN/RhlW7HoNkqnY9Xs62DcBo96DH5MThy71YOScbuUoJ1EopesyuuFRaauu344NLOiikIszKlmN+nnLSiusOcaZ1AHeXjC9Y6s/nu3Hv7CxkRlC5u+a6AcVZKchTxa4GZrjPMxOGMZgOwvCnc934/JJ8AINvum+9exm/rm7DvFwF/vR398R1idHn59Dab8elHgusLi9SxEKkiAW4Y0baDVfum2/jocS40eJCp2lcHo/HrupRqlEhWxG+KAzxzrku3FWUEfU6HkOE+zwnzqCGETdu7eryeDzs2bIQ713sQUVxetz9DoQCPubkKoIS1To9fpzrNKL6mgEcEYQCHvzcYOi4gMeDj+NwV3EGZk1wpWY8GnNVZ8Xs7NRxiQIAPLSkANXX+pEuF8c1dwUTBgbkksGs0kMrDTweD1KRALmK2M8rjAeZWIAVs0YvVHPkci+adFZsXKSOOJu1y+vHyeZ+LMqPrIfo8XEYsHswTz2xYKvlszJx7Koeq+Zkh50hyuPjcOyqHvNyFSjOmng9TTb5yMCMjBT0Wd2Bv00OD7qMTtiT1I0ZAO5fmIvywjS8XtMGLoJqXESEcx0mrFuQE9FY3+b24VSLAZXjnJO4FR6Ph1VzsvHJtf5RJ2CJCLXtA/ifmjb8sbYL5QVpUREFgPUYGABylFI091oD49p3L2oBDKZpS2Y0aTJ8/o58/Lq6DVXleci5rQfEcYSOAQea9TboLC4IeDw4vX58eXlRxHMVFztNgejVaCAU8HF3cQbOtA4Ewr0NNjeu6W240GXCqZYBNPVa8Z+PLMaXlkXe3jGvH9WzMZIShUQIq8sX9DcwOMaO9oRerPH5OXQZnVBIhchMlSBdLsYTK4pxrFEPk7MfLq8feqsbde1GLMhT4HNleVgxKxNasws9Jifm5irQ1GsNiRAdjet9tmGL9UwUuUQIsZCP/6lpQ4ZcgnfOdeHY1T4Upsvw5Ipi/N/NCybs8ToSTBgY4PF4QRUYh/z595/txPJZmXjwjvz4NGwE/Bzhco8FPu6mp+bQBCoPg6X6zE4v2gwO5KfJoFZJsbhQBavLB5vLhwV5StjdPggFvEDBmNk5qUFRlDqzKyzfDY4j9FpcE57oHImFGiUef+00PnhuFTYvzsOpFgOWFmdAwOfF1M+DCQMDQHDN5ofvHPRb+MnHLfj2gStYOz8nYSouXewyweXlsGRG2qgJYNJSxCjKlON6nw2NOgscHj/unJEe2D+aO7laJUVTrxW9FhcK0mWj+iKcajWgoih9xP0TRSIU4IFSNQozBuc7lt2SRSqWPTkmDIyQyTmRgI/Hls7AhoVqbP7hJwkxlDA5PINLgTmpETkNDb3J7W4fLnaZws7ZOBTk9ZcLPWjvt+OxuwuRnSoJ+i4u91gwOyc16hGYt7N6Xvak/x8wYWDgaq912GjHdLkY89QKpMQxexHHEeo6jEhLEU8o56JcIsScHAUu9Zgjmj/YWq6BwebGfxxqhEomwjy1ElWL89BmsEMq4odMaEYbj4+bdI9PgAkDA4Nl7hbkDb9mPys7FR839WHN/JxJbtVgu7pNTtxROPqwIVxkYgF8/sjH5ZmpEvznF8oDodP7Dl7B19fMRq4ytqJARPj5yRZ89Z6R64XECiYMjFEDhUqy5ZPuz+Dw+NDca4NYyA8rLV0kTKSwDo/Hw2snWvHMujnIimA4M15OtQzgixWFcck3yYRhmhPOzPZoeRqizTW9DQ6PD4s0yqjXhSQi+CNwdrods9OLLIV4UkShy+iAUiYct2v1RGGej9OcjgEHikbxltOkycbV/Y4UP0c412FEiliAxQVpMSkWe0VrndCy4p/Pd+OROycn0vSqLjJfimjDhGGaozO7Rk0Au0CtRLPeOuL+aPHptX4UZ8qhCTMZ7Xiwe3zjTgDT3GvFXUUZk9Ktv9hlwh1xrmPBhGGa4x2jN7D/bAfuXxjb0vXtBjsyU8Uxz9o03voWHh+HLpNz2NT4scDk8Ea0JBsLmDBMc0bLWqy3uKAzu8adrCQcGnUWEGFSus3jdQX49Fo/lk9SeTqLy4tESJASkTDs3bsXPB4v6KNW33ybEBH27t0LjUYDmUyG++67D5cuXQo6h9vtxjPPPIOsrCzI5XJs3boVXV1dQTZGoxE7d+6ESqWCSqXCzp07YTKZgmw6OjqwZcsWyOVyZGVl4dlnn4XH4wmyqa+vx+rVqyGTyZCfn48XX3wx7unCEo3RxvKnWgdQVqDCD44248fHr0e9aExdhxHpKeKoRQSOht7ignIc3ptGuwepUuGkrQz85Pj1qERoThiKgD179tCiRYtIq9UGPnq9PrD/O9/5DikUCnrrrbeovr6eHnvsMcrLyyOLxRKwefrppyk/P5+OHDlCdXV1tGbNGiovLyefzxew2bRpE5WWllJ1dTVVV1dTaWkpVVVVBfb7fD4qLS2lNWvWUF1dHR05coQ0Gg3t2rUrYGM2myk3N5e2bdtG9fX19NZbb5FCoaCXXnopklsms9lMAMhsNkd0XDLg83P0SVPfiPv9fo4+vKKjS91mutBppL9/s47er9cSx3ETvvalbjMZbO4JnyccrC4v1VzvH9exnzb3ReV+w+Ga3kqr/vOjmF4j3Oc5YmEoLy8fdh/HcaRWq+k73/lOYJvL5SKVSkU/+clPiIjIZDKRSCSi/fv3B2y6u7uJz+fToUOHiIjo8uXLBIBOnToVsKmpqSEA1NjYSEREBw8eJD6fT93d3QGbN998kyQSSeCGX331VVKpVORyuQI2+/btI41GE9F/9FQWhg6Dneq7TGHbu71++sYfztPevzSQzz/+H0uv2UmNWsvYhlHik6bx/bgtTg+d7zBGv0Ej8H/fqaf7Xz4e02uE+zxHPMfQ3NwMjUaDkpISbNu2DS0tLQCA1tZW6HQ6bNiwIWArkUiwevVqVFdXAwBqa2vh9XqDbDQaDUpLSwM2NTU1UKlUqKysDNgsW7YMKpUqyKa0tBQajSZgs3HjRrjdbtTW1gZsVq9eDYlEEmTT09ODtra2Ee/P7XbDYrEEfaYqPRGUpAMGa1n85xfKcf+CXPzD787jlQ+bUd9lHvvAW7C6vOg0Oiat7FtDtxlzclPHFWvQ0G3B4oLJWTLkOMKhSzoI+Ikx7RdRKyorK/HGG2/ggw8+wGuvvQadTocVK1bAYDBAp9MBAHJzc4OOyc3NDezT6XQQi8VIT08f1SYnJ9T9NicnJ8jm9uukp6dDLBaPajP095DNcOzbty8wt6FSqVBYWDj6l5LEGOwepKVEPu5eMTsL987JwnePNOGKNjzhbOg2w+Hxob7bjIqi2I+hfX4Op1sMSJUIx+267PFzkxa8VNdhRJ/VDUkUKl9Fg4ha8cADD+CRRx5BWVkZ1q9fjwMHDgAAXn/99YDN7V8khZHo43ab4eyjYUM3Jh5Ha88LL7wAs9kc+HR2do7a9mSGh/GH7n7hzgKIBXxc7DaFZe/2+XG+0zRmrsZo0GV04EKXCXcVZ4x7YpOIIkoJN1GOXO4FAEhFSSgMtyOXy1FWVobm5ubA6sTtb2O9Xh94U6vVang8HhiNxlFtent7Q67V19cXZHP7dYxGI7xe76g2er0eQGiv5lYkEgmUSmXQhxGK3eODx89BZ3aPbYzBqk7qGAcdDUEEVBRlTKj0m8HuQWbq5FTDGgoH/+H2JbhrEnpT4TAhYXC73bhy5Qry8vJQUlICtVqNI0eOBPZ7PB58/PHHWLFiBQCgoqICIpEoyEar1aKhoSFgs3z5cpjNZpw5cyZgc/r0aZjN5iCbhoYGaLXagM3hw4chkUhQUVERsDlx4kTQEubhw4eh0WhQXFw8kdueMvgm8Eb8zekOAMCTK4rHtO0wOEBEMUtDdjvRqMlwvsOEgvTY1HYYwub24URTH1QyETYvzsPWck1coliHJZIZzd27d9Px48eppaWFTp06RVVVVaRQKKitrY2IBpcrVSoVvf3221RfX0/bt28fdrmyoKCAjh49SnV1dbR27dphlysXL15MNTU1VFNTQ2VlZcMuV65bt47q6uro6NGjVFBQELRcaTKZKDc3l7Zv30719fX09ttvk1KpZMuVt/B2Xee4j33mt3VU9Px79PFV/Zi2410qjCf//VEzub3+mJ3f6vIOu1pyptUQs2sSxWi5csgvQSQSkUajoYcffpguXboU2M9xHO3Zs4fUajVJJBJatWoV1dfXB53D6XTSrl27KCMjg2QyGVVVVVFHR0eQjcFgoB07dpBCoSCFQkE7duwgo9EYZNPe3k6bN28mmUxGGRkZtGvXrqClSSKiixcv0sqVK0kikZBaraa9e/dGvGw1lYXh3QvdYxuNwO/PdlDR8+/Ry4evjvmdRrIkmij89nQ7+SewJDsWNdf7hz3/2QQRBlaibgymcom6Qw1abCrNG9exRIR97zfiZydasHJOFn7+xF0jpjhr67dDLolfCPF4+KS5b9gq1dHi+FU97psXOmyobR+I6apNuM9zYkyBMiYdi8s7oQSvPB4P//S5BfjHTfPwSXP/qDUoirPk6BhwJJU7eq5Sig6DIybn5jga0cVaLhHC6op/PQ8mDNOU2nYjSicYuGS0e/DaicHUY2NFAy7MU+JihM5Q8WRurgKXtWbY3dHPXuUnGlF0CtNT0GV0Rv2akcIyOE1T7G4fVONwbrqVH3zYDKPDi+WzMqG3uvBWbRdOtQxg7fwcPF45A9f0NpgcXggFg8uG8SzSOh42LFTjyJVebFwU3bDzt+u68E/vNIBAeGzpjKB9cokw6sFq4yG5/qcYUYOHiXv0pdyohL3nzw3ot3sCKeDKClTotbgwT62IShLXeMHn86IuZh9e6UVzrw0SIR/Pv1WPQw06zMpORX66DNvvnhGX/I7DwYRhGtJrcSFFMvEH8KlVM/GLk63oMbsC255ZOxu7N8yb8LkTBZd35HwVkcBxhDfPduDe2VlYtyAXX723BA+9+imOXe3Dsat9AICfftyCf6laiFxl/Cdpk1fOGePm46a+qCQeSZUI4fXfTBRbmq/E1++bPeHzJgpOjz+opud4cPv8OHZVj4+b+/DgHfkoyhx00dakyfCbv1qGzWV5mHnDbVtnceHvfluH/Wfj74bPegzTEKvLF5Uua/V1A4acJ8UCPr7z8GLIxInRFZ4oRITjV/VYMiNtXMdbXF6cum7AgN2DL95VOKx79uycVPxox50ABitZH7qkw7f+chkiQfwrfzFhmGb0Wd1R66r+uroNAj4P/9/9c/HQkvyYJnKdTHx+Dl/59Vl8oaIg8IYPh16LC1d1VviJoJAIcUdhGrIVkrAC1TJTJdhRWYR7Z2fhu4ebYHJ4kJYyObEaw8GEYZpx8lof1i8YOYgsEvqsbvzVvSX4uzVTZ/gAAB9c6kVRZkrYVb6v6a3oGHAgVynFyjlZEwrVLsqU4wfb7oAzSnMb44UJwzTjYpcZDy2JTm0ETZo0YWbRo8nmxXng8waDv2Zkjh5IdaHTBKGAh7XzoyO2wKDzWIo4vj9NJgzTCLPTG9V8CHKxcNyZlxOdB8rycK7DiGa9FRKhADMyUoJEgohw8lo/shUSzFdPLVd5gAnDtOJUiwGr50bP/19rduGRismpzBQPlsy4mWnsmt6KDy7pIL/xJteanVgzP2dSytXFAyYM0wiX1x/Vrr/V7Q04OU11ZucoMDtHEVZGsqkA82OYJuitrqhHN/71ypn4xz9eRKNu6ibMvZ3pIAoAE4Zpw5nWAVSWRLea0oN35OPZdXPwpZ+fxsF67dgHMJIGNpSYRkwkB+JIbCnXYEGeAn/7v3VYpFFGtO7PSFxYj2Ea4PL6YzoXMDtHgb9bMxs/Pn49ZtdgTC5MGKYBl3osWJAX2yW1Rt2gkw9jasCEYRowYPcgTxVbd+XmXisG7J6xDRlJAROGaYAwBnMLtzM/T4FGnRVGJg5TAiYMUxyfn4N/EioqPbVyFmQiAQ6w1YkpAROGKc7p1gEUZMQ+6lGVIsKz6+bgx8evRy25CSN+sOXKKc7MbDlkkxTo9PCd+TjXYZyy8RPTCSYMU5xYTzreSq5Siv+7eSE4bmxbRmLDhIERVcYKU2YkB2yOgcFghMCEgcFghMCEgcFghMCEgcFghMCEgcFghMCEgcFghMCEgcFghMCEgcFghMCEgcFghMCEgcFghMCEgcFghMCEgcFghMCEgcFghMCEgcFghMDCrseAaDAtmsUyfaotMaYuQ8/x0HM9EkwYxsBqtQIACgsL49wSBiN6WK1WqFSqEffzaCzpmOZwHIeenh4oFIqEqVtosVhQWFiIzs5OKJVTrwQ7wO4xVhARrFYrNBoN+PyRZxJYj2EM+Hw+CgoSs9S7Uqmcsj+aIdg9Rp/RegpDsMlHBoMRAhMGBoMRAhOGJEQikWDPnj2QSCTxbkrMYPcYX9jkI4PBCIH1GBgMRghMGBgMRghMGBgMRghMGBgMRghMGGLAiRMnsGXLFmg0GvB4PPzpT38K2v/2229j48aNyMrKAo/Hw/nz50PO4Xa78cwzzyArKwtyuRxbt25FV1dXkI3RaMTOnTuhUqmgUqmwc+dOmEymIJuOjg5s2bIFcrkcWVlZePbZZ+HxeIJs6uvrsXr1ashkMuTn5+PFF18c05d+tHv0er14/vnnUVZWBrlcDo1Ggy9/+cvo6emZMvcIAHv37sX8+fMhl8uRnp6O9evX4/Tp00l1jyNCjKhz8OBB+ud//md66623CAC98847QfvfeOMN+ta3vkWvvfYaAaBz586FnOPpp5+m/Px8OnLkCNXV1dGaNWuovLycfD5fwGbTpk1UWlpK1dXVVF1dTaWlpVRVVRXY7/P5qLS0lNasWUN1dXV05MgR0mg0tGvXroCN2Wym3Nxc2rZtG9XX19Nbb71FCoWCXnrppXHfo8lkovXr19Pvfvc7amxspJqaGqqsrKSKioopc49ERL/5zW/oyJEjdP36dWpoaKCvfe1rpFQqSa/XJ809jgQThhgz3AM1RGtr67DCYDKZSCQS0f79+wPburu7ic/n06FDh4iI6PLlywSATp06FbCpqakhANTY2EhEgw82n8+n7u7ugM2bb75JEomEzGYzERG9+uqrpFKpyOVyBWz27dtHGo2GOI6b8D0OcebMGQJA7e3tU/YezWYzAaCjR48m5T3eChtKJCC1tbXwer3YsGFDYJtGo0FpaSmqq6sBADU1NVCpVKisrAzYLFu2DCqVKsimtLQUGo0mYLNx40a43W7U1tYGbFavXh3kZLNx40b09PSgra0tavdkNpvB4/GQlpY2Je/R4/HgZz/7GVQqFcrLy5P+HpkwJCA6nQ5isRjp6elB23Nzc6HT6QI2OTk5Icfm5OQE2eTm5gbtT09Ph1gsHtVm6O8hm4nicrnwzW9+E48//nggWGiq3ON7772H1NRUSKVSfO9738ORI0eQlZWV9PfIhCGJIKKg0O/hwsCjYUM3JqyiEWbu9Xqxbds2cByHV199dUz7ZLvHNWvW4Pz586iursamTZvw6KOPQq/Xj3pMMtwjE4YERK1Ww+PxwGg0Bm3X6/WBt4BarUZvb2/IsX19fUE2t78tjEYjvF7vqDZDD/btb6BI8Xq9ePTRR9Ha2oojR44EhRZPlXuUy+WYPXs2li1bhl/84hcQCoX4xS9+kfT3yIQhAamoqIBIJMKRI0cC27RaLRoaGrBixQoAwPLly2E2m3HmzJmAzenTp2E2m4NsGhoaoNVqAzaHDx+GRCJBRUVFwObEiRNBS1+HDx+GRqNBcXHxuO9hSBSam5tx9OhRZGZmTrl7HA4igtvtTv57jHi6kjEmVquVzp07R+fOnSMA9PLLL9O5c+cCM/IGg4HOnTtHBw4cIAC0f/9+OnfuHGm12sA5nn76aSooKKCjR49SXV0drV27dthlrsWLF1NNTQ3V1NRQWVnZsMtc69ato7q6Ojp69CgVFBQELXOZTCbKzc2l7du3U319Pb399tukVCrHXOYa7R69Xi9t3bqVCgoK6Pz586TVagMft9s9Je7RZrPRCy+8QDU1NdTW1ka1tbX0ta99jSQSCTU0NCTNPY4EE4YYcOzYMQIQ8nniiSeIiOhXv/rVsPv37NkTOIfT6aRdu3ZRRkYGyWQyqqqqoo6OjqDrGAwG2rFjBykUClIoFLRjxw4yGo1BNu3t7bR582aSyWSUkZFBu3btClrSIiK6ePEirVy5kiQSCanVatq7d++YS1yj3ePQMuxwn2PHjk2Je3Q6nfTQQw+RRqMhsVhMeXl5tHXrVjpz5kzQORL9HkeChV0zGIwQ2BwDg8EIgQkDg8EIgQkDg8EIgQkDg8EIgQkDg8EIgQkDg8EIgQkDg8EIgQkDg8EIgQkDg8EIgQkDg8EIgQkDg8EIgQkDg8EI4f8HT7GpCf91C9sAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "HHNK['peilgebied'].loc[HHNK['peilgebied'].HWS_BZM == True].plot()" + ] + }, + { + "cell_type": "raw", + "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", + "metadata": {}, + "source": [ + "Toevoegen aan notities:\n", + "\n", + "Duikersifonhevel and hydroobject have a type of multicurvedZ, the peilgebieden a MultiSurfaceZ, which geopandas can not handle. I have manually exported these to single shapes, which automatically converts it to regular MultiStrings. Then these layers have been packed together to a geopackage again. \n", + "\n", + "Peilmerk is geometrisch gekoppeld aan peilgebieden, niet administratief. Daarnaast zijn bij een aantal beschikbaar of deze gekoppeld zijn met een gemaal, stuw, duikersifonhevel (wel administratief). Wel is er een streefpeil tabel beschikbaar, die wel administratief gekoppeld is. Ga kijken wat het verschil is.\n", + "\n", + "In de streefpeilen kaart zijn er verschillende soorten peilen:\n", + "- winter\n", + "- zomer\n", + "- vast\n", + "- dynamische bovengrens\n", + "- dynamische ondergrens" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ea0b5636-1b7c-4e13-974a-3a86bcbcb34e", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5ca41d74-0d02-4342-b4a0-917a03db14bb", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Routing", + "language": "python", + "name": "routing" + }, + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHSK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHSK.ipynb new file mode 100644 index 0000000..1a8ce0e --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHSK.ipynb @@ -0,0 +1,1360 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "metadata": {}, + "outputs": [], + "source": [ + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "\n", + "import shapely\n", + "from shapely.validation import make_valid\n", + "from shapely.ops import unary_union,cascaded_union \n", + "from shapely.geometry import Polygon, MultiPolygon, shape, Point\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "metadata": { + "tags": [ + "test" + ] + }, + "outputs": [], + "source": [ + "from general_functions import *\n", + "\n", + "def convert_to_polygon(line):\n", + " if line.is_ring: # Checks if the LineString is closed\n", + " return Polygon(line)\n", + " else:\n", + " return line # Returns the line string as is if it's not closed\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", + "metadata": {}, + "outputs": [], + "source": [ + "pd.set_option('display.max_columns', None)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'HHSK'\n", + "path_HHSK = '..\\..\\Data_preprocessed\\Waterschappen\\HHSK\\HyDamo_metWasverzachter_20230905.gpkg'\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/HHSK\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1f39bd82-2fed-41d6-a4f7-979a9a2120bd", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK = read_gpkg_layers(gpkg_path = path_HHSK, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'afsluitmiddel',\n", + " # 'duikersifonhevel',\n", + " # 'hydroobject',\n", + " # 'peilgebiedvigerend',\n", + " # 'peilafwijkinggebied',\n", + " # 'peilbesluitgebied',\n", + " 'streefpeil'],\n", + " engine = 'pyogrio') \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "279c940f-4290-48d6-bd48-b1e79f8be16e", + "metadata": {}, + "outputs": [], + "source": [ + "# HHSK_nalevering = read_gpkg_layers(gpkg_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\LHM_hhsk_nalevering.gpkg\",\n", + "# variables = ['Persleiding'])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "6ea5a43d-b2e6-42ef-8002-01c3377ed897", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK_2nalevering = read_gpkg_layers(gpkg_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\hhsklevering_07032024.gpkg\",\n", + " variables = ['PeilgebiedPraktijk',\n", + " 'VigerendPeilgebiedZPP'])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "287a1b71-b336-4d09-b511-de068096f1be", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK_3nalevering = read_gpkg_layers(gpkg_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\poldergebieden_en_duikersifonhevels_persleidingen\\LHM_06052024_hhsk.gpkg\",\n", + " variables = ['hydroobject',\n", + " 'duikersifonhevel',\n", + " # 'persleiding', #edit: after a phonecall, it became clear that the persleidingen should NOT be used, only the duikersifonhevel and the hydroobjecten\n", + " ])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "279de659-9206-4dcb-83e3-2b5fde71de35", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([98., 1., nan])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "HHSK_3nalevering['hydroobject'].CATEGORIEOPPWATERLICHAAM.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "c6b46928-96b0-4618-9835-2aebffeacd23", + "metadata": {}, + "outputs": [], + "source": [ + "#there was no categorie oppervlakte water lichaam assigned to the third additional datalevering of the duikersifonhevels within the hydroobjecten. Fill all Nones with 1, so that the \n", + "HHSK_3nalevering['hydroobject'].CATEGORIEOPPWATERLICHAAM = HHSK_3nalevering['hydroobject'].CATEGORIEOPPWATERLICHAAM.fillna(value=1)\n", + "HHSK_3nalevering['duikersifonhevel'].STATUSOBJECT = HHSK_3nalevering['duikersifonhevel'].STATUSOBJECT.fillna(value=3)" + ] + }, + { + "cell_type": "markdown", + "id": "32562573-3c78-4565-85be-1b7c03a023be", + "metadata": {}, + "source": [ + "## Only select status_object == 3" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "10efac14-fd47-4f61-9180-e89e864713c7", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK['stuw'] = HHSK['stuw'].loc[(HHSK['stuw']['statusobject'] == '3') | (HHSK['stuw']['statusobject'] == 3)]\n", + "HHSK['gemaal'] = HHSK['gemaal'].loc[(HHSK['gemaal']['statusobject'] == '3') | (HHSK['gemaal']['statusobject'] == 3)]\n", + "HHSK['afsluitmiddel'] = HHSK['afsluitmiddel'].loc[(HHSK['afsluitmiddel']['statusobject'] == '3') | (HHSK['afsluitmiddel']['statusobject'] == 3)]\n", + "\n", + "# HHSK['peilgebiedvigerend'] = HHSK['peilgebiedvigerend'].loc[(HHSK['peilgebiedvigerend']['statusobject'] == '3') | (HHSK['peilgebiedvigerend']['statusobject'] == 3)]\n", + "# HHSK['peilafwijkinggebied'] = HHSK['peilafwijkinggebied'].loc[(HHSK['peilafwijkinggebied']['statusobject'] == '3') | (HHSK['peilafwijkinggebied']['statusobject'] == 3)]\n", + "\n", + "# HHSK_3nalevering['persleiding'] = HHSK_3nalevering['persleiding'].loc[(HHSK_3nalevering['persleiding']['STATUSOBJECT'] == '3') | (HHSK_3nalevering['persleiding']['STATUSOBJECT'] == 3)]\n", + "HHSK_3nalevering['hydroobject'] = HHSK_3nalevering['hydroobject'].loc[(HHSK_3nalevering['hydroobject']['STATUSOBJECT'] == '3') | (HHSK_3nalevering['hydroobject']['STATUSOBJECT'] == 3)]\n", + "HHSK_3nalevering['duikersifonhevel'] = HHSK_3nalevering['duikersifonhevel'].loc[(HHSK_3nalevering['duikersifonhevel']['STATUSOBJECT'] == '3') | (HHSK_3nalevering['duikersifonhevel']['STATUSOBJECT'] == 3)]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "d91f9e5b-dab1-4af3-aaa4-18791d568ab3", + "metadata": {}, + "outputs": [], + "source": [ + "dsf = HHSK_3nalevering['hydroobject'].loc[HHSK_3nalevering['hydroobject']['CODE'].str.contains('Duiker|Sifon|Hevel|Gemaal|Inlaat', na=False)]\n", + "HHSK['duikersifonhevel'] = pd.concat([HHSK_3nalevering['duikersifonhevel'], dsf])\n", + "HHSK['duikersifonhevel'] = gpd.GeoDataFrame(HHSK['duikersifonhevel'], geometry='geometry')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "d91ef127-a46e-4ce7-b4fc-ec13d39b6820", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK_3nalevering['hydroobject']['CATEGORIEOPPWATERLICHAAM'] = HHSK_3nalevering['hydroobject']['CATEGORIEOPPWATERLICHAAM'].astype(float)\n", + "HHSK_3nalevering['hydroobject_original'] = HHSK_3nalevering['hydroobject'].copy()\n", + "HHSK['hydroobject'] = HHSK_3nalevering['hydroobject'].loc[HHSK_3nalevering['hydroobject']['CATEGORIEOPPWATERLICHAAM'] == 1] #only select primaire waterlichamen" + ] + }, + { + "cell_type": "markdown", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "metadata": {}, + "source": [ + "# HHSK" + ] + }, + { + "cell_type": "markdown", + "id": "62a8afeb-9d69-4df0-8e9a-0aa255543fb1", + "metadata": { + "tags": [] + }, + "source": [ + "### Add the gemalen columns" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "8196e429-c7c1-40f1-9dd3-525699656dc7", + "metadata": {}, + "outputs": [], + "source": [ + "#determine aanvoer en afvoer gemalen\n", + "HHSK['gemaal']['func_aanvoer'], HHSK['gemaal']['func_afvoer'], HHSK['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "HHSK['gemaal']['functiegemaal'] = HHSK['gemaal']['functiegemaal'].astype(str) \n", + "\n", + "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('2|4|5|6|7|99'), 'func_afvoer'] = True\n", + "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('1|3|5'), 'func_aanvoer'] = True\n", + "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('8'), 'func_circulatie'] = True\n", + "HHSK['gemaal'].loc[(HHSK['gemaal'].func_afvoer == False) &\n", + " (HHSK['gemaal'].func_aanvoer == False) &\n", + " (HHSK['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "5f19829d-6116-45d4-92ae-a0e27509afa3", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n" + ] + } + ], + "source": [ + "HHSK['hydroobject']['code'] = HHSK['hydroobject'].CODE\n", + "HHSK['hydroobject']['nen3610id'] = 'dummy_nen3610id_' + HHSK['hydroobject'].index.astype(str)\n", + "HHSK['hydroobject']['globalid'] = HHSK['hydroobject'].GLOBALID\n", + "\n", + "HHSK['duikersifonhevel']['code'] = HHSK['duikersifonhevel'].CODE\n", + "HHSK['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_' + HHSK['duikersifonhevel'].index.astype(str)\n", + "HHSK['duikersifonhevel']['globalid'] = HHSK['duikersifonhevel'].GLOBALID" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "fe221b99-ad03-4688-a656-9cb19e4f1a8b", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK['stuw'] = HHSK['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "HHSK['gemaal'] = HHSK['gemaal'][['code', 'nen3610id', 'globalid', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "HHSK['hydroobject'] = HHSK['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "HHSK['duikersifonhevel'] = HHSK['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "HHSK['afsluitmiddel'] = HHSK['afsluitmiddel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "\n", + "# HHSK['peilgebiedvigerend'] = HHSK['peilgebiedvigerend'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "# HHSK['peilafwijkinggebied'] = HHSK['peilafwijkinggebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "\n", + "# HHSK['streefpeil'] = HHSK['streefpeil'][['code', 'nen3610id', 'globalid']]" + ] + }, + { + "cell_type": "markdown", + "id": "8c3e7f83-1aa8-4714-8ef5-7d0176097d94", + "metadata": { + "tags": [] + }, + "source": [ + "### Add the nageleverde persleidingen to the duikersifonhevels" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "75bbbea1-5ef9-4935-ad8e-4f294eaf1c9f", + "metadata": {}, + "outputs": [], + "source": [ + "# HHSK_3nalevering['persleiding'] = HHSK_3nalevering['persleiding'][['CODE', 'GLOBALID', 'geometry']]\n", + "# HHSK_3nalevering['persleiding']['nen3610id'] = 'dummy_nen3610id_persleiding_' + HHSK_3nalevering['persleiding'].index.astype(str)\n", + "# HHSK_3nalevering['persleiding'] = HHSK_3nalevering['persleiding'].rename(columns = {'CODE': 'code',\n", + "# 'GLOBALID': 'globalid'})\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "8495f3ba-98df-4eea-97a5-d09534e36885", + "metadata": {}, + "outputs": [], + "source": [ + "# HHSK['duikersifonhevel'] = gpd.GeoDataFrame(pd.concat([HHSK['duikersifonhevel'], HHSK_3nalevering['persleiding']])).reset_index(drop=True)\n", + "\n", + "#HHSK has apparently non unique values for the global ids in duikersifonhevel\n", + "HHSK['duikersifonhevel'] = HHSK['duikersifonhevel'].reset_index(drop=True)\n", + "HHSK['duikersifonhevel']['globalid'] = 'dummy_globalid_duikersifonhevel_' + HHSK['duikersifonhevel'].index.astype(str)\n", + "\n", + "#remove empty point geomtries from the gemalen\n", + "HHSK['gemaal'] = HHSK['gemaal'][~HHSK['gemaal'].is_empty].reset_index(drop=True)" + ] + }, + { + "cell_type": "markdown", + "id": "31841446-4e06-47b7-98a3-38d389df26df", + "metadata": {}, + "source": [ + "### Add the nageleverde peilgebieden to the original data" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "9bbfde44-60d9-4669-8994-410dc16299b9", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK_2nalevering['PeilgebiedPraktijk'].loc[HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'] == 0, 'ONDERPEIL'] = np.nan\n", + "HHSK_2nalevering['PeilgebiedPraktijk'].loc[HHSK_2nalevering['PeilgebiedPraktijk']['VASTPEIL'] == 0, 'VASTPEIL'] = np.nan\n", + "HHSK_2nalevering['PeilgebiedPraktijk'].loc[HHSK_2nalevering['PeilgebiedPraktijk']['BOVENPEIL'] == 0, 'BOVENPEIL'] = np.nan\n", + "HHSK_2nalevering['PeilgebiedPraktijk'].loc[HHSK_2nalevering['PeilgebiedPraktijk']['SCHOUWPEIL'] == 0, 'SCHOUWPEIL'] = np.nan\n", + "\n", + "HHSK_2nalevering['VigerendPeilgebiedZPP'].loc[HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'] == 0, 'ONDERPEIL'] = np.nan\n", + "HHSK_2nalevering['VigerendPeilgebiedZPP'].loc[HHSK_2nalevering['VigerendPeilgebiedZPP']['VASTPEIL'] == 0, 'VASTPEIL'] = np.nan\n", + "HHSK_2nalevering['VigerendPeilgebiedZPP'].loc[HHSK_2nalevering['VigerendPeilgebiedZPP']['BOVENPEIL'] == 0, 'BOVENPEIL'] = np.nan\n", + "HHSK_2nalevering['VigerendPeilgebiedZPP'].loc[HHSK_2nalevering['VigerendPeilgebiedZPP']['SCHOUWPEIL'] == 0, 'SCHOUWPEIL'] = np.nan" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "9ee954f4-c333-4bb4-8dcc-b1e1cd7c2b57", + "metadata": {}, + "outputs": [], + "source": [ + "#edit the peilgebiedpraktijk\n", + "HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'].fillna(HHSK_2nalevering['PeilgebiedPraktijk']['VASTPEIL'], inplace= True)\n", + "HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'].fillna(HHSK_2nalevering['PeilgebiedPraktijk']['BOVENPEIL'], inplace= True)\n", + "HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'].fillna(HHSK_2nalevering['PeilgebiedPraktijk']['SCHOUWPEIL'], inplace= True)\n", + "\n", + "HHSK['peilgebiedpraktijk'] = HHSK_2nalevering['PeilgebiedPraktijk'][['CODE', 'ONDERPEIL', 'BRONGID', 'geometry']]\n", + "HHSK['peilgebiedpraktijk'] = HHSK_2nalevering['PeilgebiedPraktijk'].rename(columns = {'CODE': 'code',\n", + " 'ONDERPEIL': 'waterhoogte',\n", + " 'BRONGID': 'globalid'})" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "c37cfb5c-3b9e-4e57-b44c-3cbe610da093", + "metadata": {}, + "outputs": [], + "source": [ + "#edit the peilgebiedvigerend\n", + "HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'].fillna(HHSK_2nalevering['VigerendPeilgebiedZPP']['VASTPEIL'], inplace= True)\n", + "HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'].fillna(HHSK_2nalevering['VigerendPeilgebiedZPP']['BOVENPEIL'], inplace= True)\n", + "HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'].fillna(HHSK_2nalevering['VigerendPeilgebiedZPP']['SCHOUWPEIL'], inplace= True)\n", + "\n", + "HHSK['peilgebiedvigerend'] = HHSK_2nalevering['VigerendPeilgebiedZPP'][['CODE', 'ONDERPEIL', 'BRONGID', 'geometry']]\n", + "HHSK['peilgebiedvigerend'] = HHSK_2nalevering['VigerendPeilgebiedZPP'].rename(columns = {'CODE': 'code',\n", + " 'ONDERPEIL': 'waterhoogte',\n", + " 'BRONGID': 'globalid'})" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "fd7bfade-497b-40bd-8345-8dc4fd3d172b", + "metadata": {}, + "outputs": [], + "source": [ + "#select the peilgebiedpraktijk which have a primaire hydroobject\n", + "\n", + "#pgp_pw : PeilGebiedPraktijk Primaire Watergang\n", + "pgp_pw = gpd.sjoin(left_df = HHSK_2nalevering['PeilgebiedPraktijk'], \n", + " right_df = HHSK['hydroobject'],\n", + " how=\"inner\", \n", + " predicate='contains',\n", + " lsuffix = 'pgp',\n", + " rsuffix = 'hydroobject').drop_duplicates(subset='CODE') \n" + ] + }, + { + "cell_type": "markdown", + "id": "8383b5e1-7bfa-4a89-b2a3-dfaf3a3f04d2", + "metadata": {}, + "source": [ + "# Insert the manually created GPKG's" + ] + }, + { + "cell_type": "raw", + "id": "bb343e7a-62e5-426e-b10a-f498fe9aa9e2", + "metadata": {}, + "source": [ + "There are too many zero's in the streefpeilen, both in the vaste peilen as well as the boven- or onderpeilen. Change everything to NaN to prevent wrong data. Consequence may be that streefpeilen which are actually 0 are removed, but its likely that still is just a small percentage of all peilgebieden, if any." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "58561bba-371e-4d7e-8c62-f670703b407f", + "metadata": {}, + "outputs": [], + "source": [ + "# VASTPEIL\tBOVENPEIL\tONDERPEIL\tSCHOUWPEIL" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "52e7fa05-264e-414b-a149-cf11aa8338c4", + "metadata": {}, + "outputs": [], + "source": [ + "first = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\korte_analyse_nalevering_HHSK.gpkg\", layer = 'peilgebied_praktijk_met_primaire_watergangen')\n", + "second = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\korte_analyse_nalevering_HHSK.gpkg\", layer = 'peilgebied_vigerend_boven_1ha')\n", + "areas = pd.concat([first, second])\n", + "areas = gpd.GeoDataFrame(areas, geometry = 'geometry')\n", + "areas = areas.loc[areas.area > 100] #filter out the smallest areas \n", + "areas.reset_index(drop=True, inplace=True)\n", + "\n", + "areas.loc[areas['ONDERPEIL'] == 0, 'ONDERPEIL'] = np.nan\n", + "areas.loc[areas['VASTPEIL'] == 0, 'VASTPEIL'] = np.nan\n", + "areas.loc[areas['BOVENPEIL'] == 0, 'BOVENPEIL'] = np.nan\n", + "areas.loc[areas['SCHOUWPEIL'] == 0, 'SCHOUWPEIL'] = np.nan\n", + "\n", + "\n", + "areas['ONDERPEIL'].fillna(areas['VASTPEIL'], inplace= True)\n", + "areas['ONDERPEIL'].fillna(areas['BOVENPEIL'], inplace= True)\n", + "areas['ONDERPEIL'].fillna(areas['SCHOUWPEIL'], inplace= True)\n", + "areas['waterhoogte'] = areas['ONDERPEIL']\n", + "HHSK['peilgebied'] = areas\n", + "HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied']['CODE'] !='GPG-1206'] #Not a regular polygon\n", + "HHSK['peilgebied'] = HHSK['peilgebied'].loc[:,['CODE', 'waterhoogte', 'geometry']]\n", + "HHSK['peilgebied'] = HHSK['peilgebied'].rename(columns = {'CODE': 'code'})#,\n", + "# 'ONDERPEIL': 'waterhoogte',\n", + "# 'BRONGID': 'globalid'})\n", + "\n", + "\n", + "# Remove and add the (splitted) boezem, partly manual\n", + "HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied'].code != 'PPG-237']\n", + "HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied'].code != 'PPG-1053']\n", + "HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied'].code != 'PPG-49']\n" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "5631e7ba-f5a0-4eaf-942a-3b6535a4ba8b", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "splitted_boezem = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\boezem\\boezem_split.shp\")\n", + "splitted_boezem['code'] = splitted_boezem['code'].str.split('_').str[0]\n", + "splitted_boezem = splitted_boezem[['code', 'nen3610id', 'globalid', 'geometry']]\n", + "splitted_boezem = pd.merge(left=splitted_boezem,\n", + " right = HHSK['peilgebied'][['code', 'waterhoogte']],\n", + " left_on = 'code',\n", + " right_on = 'code',\n", + " how = 'left')\n", + "splitted_boezem['code'] = splitted_boezem['code'] + '_boezem_' + splitted_boezem['code'].index.astype(str)\n", + "\n", + "HHSK['peilgebied'] = pd.concat([HHSK['peilgebied'], splitted_boezem]).reset_index(drop=True)\n", + "#globalid is not unique, change\n", + "# HHSK['peilgebied']['code'] = 'dummy_code_peilgebied_' + HHSK['peilgebied'].index.astype(str)\n", + "HHSK['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + HHSK['peilgebied'].index.astype(str)\n", + "HHSK['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + HHSK['peilgebied'].index.astype(str)\n", + "\n", + "HHSK['peilgebied'] = gpd.GeoDataFrame(HHSK['peilgebied'], geometry='geometry')" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "dd5ddc6f-6593-451c-8904-ad988d4137c8", + "metadata": {}, + "outputs": [], + "source": [ + "# test = gpd.GeoDataFrame(columns=['test', 'geometry'])\n", + "# test['test'] = np.nan\n", + "# test[0, 'geometry'] = dissolved_polygon\n", + "# test.rename(columns={'(0, geometry)': 'geometry'}, inplace=True)\n", + "# test['geometry'] = test.iloc[:, 2]\n", + "# test = test[['geometry']]\n", + "# test.set_crs('EPSG:28992')\n", + "# test.to_file('snelle_test.gpkg', driver='GPKG') " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "f0d1d16e-8c2f-4258-b28b-0b509a710d3e", + "metadata": {}, + "outputs": [], + "source": [ + "peilbesluit = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\poldergebieden_en_duikersifonhevels_persleidingen\\peilbesluit_hhsk.gpkg\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9b49add0-6c1c-46e7-9867-cf19bf5ae3f3", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "10009cfa-f240-4f4a-844e-fb4310207167", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py:3377: FutureWarning: The `op` parameter is deprecated and will be removed in a future release. Please use the `predicate` parameter instead.\n", + " if (await self.run_code(code, result, async_=asy)):\n" + ] + } + ], + "source": [ + "joined_gdf = gpd.sjoin(HHSK['peilgebied'], peilbesluit, how='left', op='intersects')\n", + "# joined_gdf.globalid = joined_gdf.globalid.astype(str) + '_' + joined_gdf.globalid.index.astype(str)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "dfca65da-384e-4604-81df-ddc152758f3c", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK['peilgebied']['id'] = HHSK['peilgebied'].index\n", + "HHSK['peilgebied']['area'] = HHSK['peilgebied'].area\n", + "\n", + "# Step 1: Calculate intersections with overlay, ensure to keep the identifier\n", + "intersections = gpd.overlay(HHSK['peilgebied'], peilbesluit, how='intersection', keep_geom_type=False)\n", + "intersections['intersection_area'] = intersections.area\n", + "\n", + "# Step 2: Merge back with HHSK['peilgebied'] to get the original areas using the identifier\n", + "intersections = intersections.merge(HHSK['peilgebied'][['id', 'area']], left_on='id', right_on='id', how='left', suffixes=('', '_original'))\n", + "\n", + "# Step 3: Calculate the percentage of the intersection area relative to the original area\n", + "intersections['overlap_percentage'] = (intersections['intersection_area'] / intersections['area_original']) * 100\n", + "\n", + "# Step 4: Filter out intersections with less than 10% overlap\n", + "significant_intersections = intersections[intersections['overlap_percentage'] >= 10]\n", + "\n", + "# Step 5: Join significant intersections back to the original HHSK['peilgebied']\n", + "joined_gdf = HHSK['peilgebied'].merge(significant_intersections[['id', 'NAAM']], on='id', how='left')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "e04d6710-6ade-47bc-bb3c-3a8e0e64e0ba", + "metadata": {}, + "outputs": [], + "source": [ + "joined_gdf = joined_gdf.reset_index(drop=True)\n", + "joined_gdf.sort_values(by=['globalid', 'area'], inplace=True)\n", + "joined_gdf.drop_duplicates(subset='globalid', keep = 'first', inplace = True)\n", + "joined_gdf = joined_gdf.reset_index(drop=True)\n", + "HHSK['peilgebied'] = joined_gdf" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "69677287-9ba3-417b-bfd9-4c3358ea7c52", + "metadata": {}, + "outputs": [], + "source": [ + "# new_gdf = gpd.GeoDataFrame(columns=Zuiderzeeland['peilgebied'].columns())\n", + "HHSK['peilgebied'] = HHSK['peilgebied'].explode(ignore_index=True).reset_index(drop=True) #explode to prevent multipolygons\n", + "HHSK['peilgebied']['area'] = HHSK['peilgebied'].area\n", + "\n", + "#remove all areas which are smaller than 25 hectares (25*100*100)\n", + "HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied'].area > 25*100*100]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e34ce435-3a9e-45b9-b043-bfa929b762bc", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "6842567f-a669-412b-8616-88975234f1ce", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_17744\\3850806707.py:9: FutureWarning: Currently, index_parts defaults to True, but in the future, it will default to False to be consistent with Pandas. Use `index_parts=True` to keep the current behavior and True/False to silence the warning.\n", + " exterior = exterior.explode().reset_index(drop=True)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "No intersection found for iteration 38\n", + "No intersection found for iteration 60\n", + "No intersection found for iteration 92\n", + "No intersection found for iteration 98\n", + "No intersection found for iteration 103\n", + "No intersection found for iteration 119\n", + "No intersection found for iteration 142\n", + "No intersection found for iteration 245\n", + "No intersection found for iteration 389\n", + "No intersection found for iteration 437\n" + ] + } + ], + "source": [ + "HHSK['peilgebied'] = HHSK['peilgebied'].explode(ignore_index=True)\n", + "HHSK['peilgebied'] = HHSK['peilgebied'][HHSK['peilgebied'].geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n", + "\n", + "\n", + "HHSK['peilgebied']['area'] = HHSK['peilgebied'].area\n", + "dissolved = HHSK['peilgebied'].dissolve()\n", + "exterior = gpd.GeoDataFrame(geometry=dissolved['geometry'].boundary).to_crs(crs='EPSG:28992')\n", + "HHSK['peilgebied'] = HHSK['peilgebied'].to_crs(crs='EPSG:28992')\n", + "exterior = exterior.explode().reset_index(drop=True)\n", + "exterior['geometry'] = exterior['geometry'].apply(convert_to_polygon)\n", + "exterior['area'] = exterior.area\n", + "exterior = exterior.sort_values(by='area', ascending=False).reset_index(drop=True)\n", + "exterior = exterior.iloc[2::] #-2 as all rows should be taken into consideration, except the last two as HHSK consists of \"two islands\"\n", + "exterior = exterior.reset_index(drop=True)\n", + "\n", + "#determine the polder at which each exterior is laying\n", + "exterior['id'] = exterior.index\n", + "exterior['area'] = exterior.area\n", + "\n", + "# intersections = gpd.overlay(exterior, peilbesluit, how='intersection', keep_geom_type=False)\n", + "# intersections['intersection_area'] = intersections.area\n", + "# intersections = intersections.merge(exterior[['id', 'area']], left_on='id', right_on='id', how='left', suffixes=('', '_original'))\n", + "# intersections['overlap_percentage'] = (intersections['intersection_area'] / intersections['area_original']) * 100\n", + "# significant_intersections = intersections[intersections['overlap_percentage'] >= 10]\n", + "# joined_gdf2 = exterior.merge(significant_intersections[['id', 'NAAM']], on='id', how='left')\n", + "\n", + "intersections = gpd.overlay(exterior, peilbesluit, how='intersection', keep_geom_type=False)\n", + "intersections['intersection_area'] = intersections.area\n", + "intersections = intersections.merge(exterior[['id', 'area']], left_on='id', right_on='id', how='left', suffixes=('', '_original'))\n", + "# intersections['overlap_percentage'] = (intersections['intersection_area'] / intersections['area_original']) * 100\n", + "# significant_intersections = intersections[intersections['overlap_percentage'] >= 10]\n", + "joined_gdf2 = exterior.merge(intersections[['id', 'NAAM']], on='id', how='left')\n", + "\n", + "\n", + "joined_gdf2 = joined_gdf2.reset_index(drop=True)\n", + "joined_gdf2.sort_values(by=['id', 'area'], inplace=True)\n", + "joined_gdf2.drop_duplicates(subset='id', keep = 'first', inplace = True)\n", + "exterior = joined_gdf2.reset_index(drop=True)\n", + "\n", + "\n", + "\n", + "for i in range(len(exterior)):\n", + "# for i in range(10):\n", + "\n", + " buffered_peilgebied = HHSK['peilgebied'].buffer(0.)\n", + "\n", + " exterior_sample = exterior.iloc[i:i+1] #just pick a single sample\n", + " exterior_sample.geometry = exterior_sample.buffer(0.0001) #let op! hierdoor komt er alsnog een kleine overlap. Maar anders werkt de code even niet, en vanwege tijdgebrek kan dit nu niet worden opgelost. In het bepalen van de crossings wordt hier echter mee omgegaan.\n", + " exterior_sample_NAAM = exterior_sample.NAAM\n", + " \n", + " intersects_mask = buffered_peilgebied.intersects(exterior_sample.iloc[0].geometry)\n", + " intersecting_polygons = HHSK['peilgebied'][intersects_mask].sort_values(by='area', ascending=False)\n", + "\n", + " intersecting_polygons = intersecting_polygons.loc[intersecting_polygons.NAAM.values == exterior_sample_NAAM.values]\n", + "\n", + " if len(intersecting_polygons) > 0:\n", + " intersecting_polygons = gpd.GeoDataFrame(intersecting_polygons.iloc[0:1], geometry = 'geometry')\n", + " all_geometries = list(intersecting_polygons.geometry) + list(exterior_sample.geometry)\n", + "\n", + " # Use unary_union to dissolve all polygons in the list\n", + " dissolved_polygon = unary_union(all_geometries)\n", + " \n", + " original_index = intersecting_polygons.index[0]\n", + "\n", + " # Ensure it's a single geometry object.\n", + " HHSK['peilgebied'].loc[HHSK['peilgebied'].index == original_index, 'geometry'] = dissolved_polygon\n", + " else:\n", + " print('No intersection found for iteration ', i)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "273a594e-3888-42ac-a829-3e5e29d0b6d5", + "metadata": {}, + "outputs": [], + "source": [ + "#door niet lekker liggende intekeningen met peilbesluiten, blijven er een aantal gaten inzitten...\n", + "#handmatig gebieden aan andere toegekend. Helaas was dit nodig om zo een betere schematisatie af te leiden\n", + "\n", + "verwerkte_peilgebieden = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\poldergebieden_en_duikersifonhevels_persleidingen\\Opgevulde_peilgebieden_dmv_nalevering_en_handmatige_aggregatie2.shp\")\n", + "verwerkte_peilgebieden = gpd.GeoDataFrame(verwerkte_peilgebieden, geometry = 'geometry')" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "91639ee7-c7cc-4f60-bace-54f7d53b8fc3", + "metadata": {}, + "outputs": [], + "source": [ + "# for i in range(len(verwerkte_peilgebieden.loc[verwerkte_peilgebieden.CODE == 'PPG-1596'])):\n", + "# # display(verwerkte_peilgebieden.iloc[i])\n", + "# verwerkte_peilgebieden.loc[verwerkte_peilgebieden.CODE == 'PPG-1596'].iloc[i::i+1].plot()\n", + "# # plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "14cf1a7e-ecba-471b-8b1b-0a204cd25fbf", + "metadata": {}, + "outputs": [], + "source": [ + "merged = pd.merge(verwerkte_peilgebieden,\n", + " HHSK['peilgebied'],\n", + " on = 'nen3610id')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "17c316c2-5cba-44d6-86a0-1c18ce961fe7", + "metadata": {}, + "outputs": [], + "source": [ + "merged['geometry'] = merged['geometry_x']\n", + "merged['globalid'] = merged['globalid_x']\n", + "\n", + "\n", + "merged = merged[['code', 'waterhoogte', 'nen3610id', 'globalid', 'geometry']]" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "c4803353-c4e8-4f41-8dcd-c82e9f5b2481", + "metadata": {}, + "outputs": [], + "source": [ + "twee_overige_gebieden = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\poldergebieden_en_duikersifonhevels_persleidingen\\2_overige_gebieden.shp\")\n", + "twee_overige_gebieden['code'] = 'code_2_overige_gebieden_' + twee_overige_gebieden.index.astype(str)\n", + "twee_overige_gebieden['nen3610id'] = 'nen3610id_2_overige_gebieden_' + twee_overige_gebieden.index.astype(str)\n", + "twee_overige_gebieden['globalid'] = 'globalid_2_overige_gebieden_' + twee_overige_gebieden.index.astype(str)\n", + "twee_overige_gebieden['waterhoogte'] = -5.95\n", + "\n", + "twee_overige_gebieden = twee_overige_gebieden[['code', 'waterhoogte', 'nen3610id', 'globalid', 'geometry']]\n", + "\n", + "merged = gpd.GeoDataFrame(pd.concat([merged, twee_overige_gebieden]), geometry = 'geometry')\n", + "HHSK['peilgebied'] = merged.reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "273a404b-5fc6-4c75-a1a9-a14e44b5b86c", + "metadata": {}, + "outputs": [], + "source": [ + "# HHSK['streefpeil']['last_id'] = HHSK['streefpeil']['globalid'].str.split('area_').str[1]\n", + "# HHSK['verwerkte_peilgebieden']['last_id'] = HHSK['streefpeil']['globalid'].str.split('area_').str[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "89e3b294-8100-4631-b2c3-6fc2464e1b94", + "metadata": {}, + "outputs": [], + "source": [ + "# verwerkte_peilgebieden.loc[verwerkte_peilgebieden.VASTPEIL.isna()].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "7df9baa4-7092-4401-be9a-fd3a451c38b0", + "metadata": {}, + "outputs": [], + "source": [ + "# pgv_diff = gpd.sjoin(left_df = HHSK['peilgebiedvigerend'],\n", + "# right_df = pgp_pw,\n", + "# how = \"left\",\n", + "# predicate = 'intersects')" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "a03b9016-af7d-4c4e-a10b-1f2ea2ee9254", + "metadata": {}, + "outputs": [], + "source": [ + "# pgv_diff.drop_duplicates()#.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "9736e6e4-0e8f-4396-a1f4-3b4f3e9bf690", + "metadata": {}, + "outputs": [], + "source": [ + "# streefpeilen_PG_v = pd.merge(left = HHSK['peilgebiedvigerend'],\n", + "# right = HHSK['streefpeil'],\n", + "# left_on = 'globalid',\n", + "# right_on = 'peilgebiedvigerendid',\n", + "# suffixes = ('', '_streefpeil'))[['code', 'nen3610id', 'globalid', 'waterhoogte', 'geometry']]\n", + "\n", + "# streefpeilen_PG_a = pd.merge(left = HHSK['peilafwijkinggebied'],\n", + "# right = HHSK['streefpeil'],\n", + "# left_on = 'globalid',\n", + "# right_on = 'peilafwijkinggebiedid',\n", + "# suffixes = ('', '_streefpeil'))[['code', 'nen3610id', 'globalid', 'waterhoogte', 'geometry']]\n", + "\n", + "# fig, ax = plt.subplots()\n", + "# streefpeilen_PG_v.plot(ax = ax, color='cornflowerblue')\n", + "# streefpeilen_PG_a.plot(ax = ax, color='blue')" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "b5d16748-7262-4e43-baa2-f182cb8dd142", + "metadata": {}, + "outputs": [], + "source": [ + "# streefpeilen_PG_v.to_file('vigerend.shp')\n", + "# streefpeilen_PG_a.to_file('afwijking.shp')" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "0292ab77-acfd-4666-9c3b-b9bd8c1f1fec", + "metadata": {}, + "outputs": [], + "source": [ + "# peilgebied = burn_in_peilgebieden(base_layer = streefpeilen_PG_v, \n", + "# overlay_layer = streefpeilen_PG_a,\n", + "# plot = True)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "b9740281-ce51-4146-b05e-ca02a74bde50", + "metadata": {}, + "outputs": [], + "source": [ + "# HHSK['peilgebied'].code = HHSK['peilgebied'].dropna(subset='code')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2a4dfd7e-5542-4922-830b-431ccb04d084", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "d49f52a9-0a9a-4fff-8359-a0b0abb063e6", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('PPG-49_boezem'), 'waterhoogte'] = -2.15\n", + "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('PPG-237_boezem'), 'waterhoogte'] = -0.9\n", + "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('PPG-1053_boezem'), 'waterhoogte'] = -2.1\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a9839425-5b7e-4acf-b474-7cb0e7c9311e", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "40d3866c-e672-4a20-8989-8e020adf59a5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "88e9543c-2dbe-4ebf-9423-b38daeeaa004", + "metadata": {}, + "outputs": [], + "source": [ + "# HHSK['peilgebied'] = gpd.GeoDataFrame(peilgebied[['code', 'nen3610id', 'globalid', 'geometry']])" + ] + }, + { + "cell_type": "markdown", + "id": "51df5dde-d374-4ae3-8d43-1c495581f021", + "metadata": {}, + "source": [ + "### Delete irrelevant data" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", + "metadata": {}, + "outputs": [], + "source": [ + "#retrieve the original hydroobjecten back, where also the secundairy and tertiairy hydroobjects are present\n", + "# HHSK['hydroobject'] = HHSK['hydroobject_original']\n", + "\n", + "#delete irrelvant data\n", + "variables = ['peilgebiedpraktijk', 'peilgebiedvigerend', 'peilafwijkinggebied', 'hydroobject_original']\n", + "\n", + "for variable in variables:\n", + " if str(variable) in HHSK:\n", + " del HHSK[variable]" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "375f1598-03c1-48a1-bb19-54790273dad0", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK['hydroobject'] = HHSK['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "\n", + "#add duikersifonhevels to the hydroobjecten \n", + "HHSK['hydroobject'] = pd.concat([HHSK['hydroobject'], HHSK['duikersifonhevel']])\n", + "HHSK['hydroobject'] = HHSK['hydroobject'].drop_duplicates(subset='globalid') #in case it is run multiple times\n", + "HHSK['hydroobject'] = gpd.GeoDataFrame(HHSK['hydroobject']).set_crs('epsg:28992')\n" + ] + }, + { + "cell_type": "raw", + "id": "02e1dd84-468f-4a36-94fe-6a0e66b61e41", + "metadata": {}, + "source": [ + "Another additional data delivery. In short, the network looked fine, except some peilgebieden were aggregated which should not be aggregated. HHSK did some (handmade) changes to cut them up. So, the majority of the processings steps of above are been part of the aggregation area as loaded in here below, except some changes. " + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "ebca513a-fb19-4f36-807e-b5f2c40e00bf", + "metadata": {}, + "outputs": [], + "source": [ + "aggregation_area = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\20240701_losseshapes\\basin_area_hhsk.shp\")\n", + "HHSK['aggregation_area'] = aggregation_area\n", + "HHSK['aggregation_area']['globalid'] = 'dummy_globalid_' + HHSK['aggregation_area'].index.astype(str)\n", + "HHSK['aggregation_area']['nen3610id'] = 'dummy_nen3610id_' + HHSK['aggregation_area'].index.astype(str)\n", + "HHSK['aggregation_area']['code'] = 'dummy_code_' + HHSK['aggregation_area'].index.astype(str)" + ] + }, + { + "cell_type": "markdown", + "id": "00979679-8879-4453-8765-d26d0251b5be", + "metadata": {}, + "source": [ + "### The streefpeilen are not correct anymore. Load in an old data delivery, and retrieve the streefpeilen by using a spatial join" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "ea265bc0-7947-42f5-9bf5-688ee332a2ac", + "metadata": {}, + "outputs": [], + "source": [ + "#read file with old streefpeilen\n", + "old_SP = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\hhsklevering_07032024.gpkg\"\n", + "old_SP = gpd.read_file(old_SP)\n", + "\n", + "#replace 0 with nan\n", + "old_SP.loc[old_SP['ONDERPEIL'] == 0, 'ONDERPEIL'] = np.nan\n", + "old_SP.loc[old_SP['VASTPEIL'] == 0, 'VASTPEIL'] = np.nan\n", + "old_SP.loc[old_SP['BOVENPEIL'] == 0, 'BOVENPEIL'] = np.nan\n", + "old_SP.loc[old_SP['SCHOUWPEIL'] == 0, 'SCHOUWPEIL'] = np.nan\n", + "\n", + "#fill nan with actual values\n", + "old_SP['ONDERPEIL'].fillna(old_SP['VASTPEIL'], inplace= True)\n", + "old_SP['ONDERPEIL'].fillna(old_SP['BOVENPEIL'], inplace= True)\n", + "old_SP['ONDERPEIL'].fillna(old_SP['SCHOUWPEIL'], inplace= True)\n", + "old_SP['waterhoogte'] = old_SP['ONDERPEIL']\n", + "\n", + "#repeat for the NAAM\n", + "old_SP['NAAM'].replace(to_replace = ' ', value = '', inplace=True)\n", + "old_SP['NAAM'].replace(to_replace = '', value = np.nan, inplace=True)\n", + "old_SP['NAAM'].fillna(old_SP['PEILBESLUI'], inplace= True)\n", + "\n", + "#rename\n", + "old_SP = old_SP[['CODE', 'NAAM', 'PEILBESLUI', 'waterhoogte', 'geometry']]\n", + "old_SP.rename(columns = {'CODE': 'code',\n", + " 'NAAM': 'globalid',\n", + " 'PEILBESLUI' : 'nen3610id'}, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "016c1dc0-6ff5-416c-8653-2e677ba6065b", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK['aggregation_area']['repr_point'] = HHSK['aggregation_area']['geometry'].representative_point()\n", + "joined_gdf = gpd.sjoin(aggregation_area.set_geometry('repr_point'), old_SP, how='left', predicate='intersects')\n", + "joined_gdf.rename(columns={'code_right':'code',\n", + " 'globalid_right': 'globalid',\n", + " 'nen3610id_right': 'nen3610id'}, inplace=True)\n", + "joined_gdf = joined_gdf[['code', 'globalid', 'nen3610id', 'waterhoogte', 'geometry']]" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "672e16ff-b307-4448-95dd-b0338fbfcb29", + "metadata": {}, + "outputs": [], + "source": [ + "#make unique rows\n", + "joined_gdf['code'] = joined_gdf['code'] + '_' + joined_gdf.index.astype(str)\n", + "joined_gdf['globalid'] = joined_gdf['globalid'] + '_' + joined_gdf.index.astype(str)\n", + "joined_gdf['nen3610id'] = joined_gdf['nen3610id'] + '_' + joined_gdf.index.astype(str)\n", + "\n", + "#change all comma's to underscores\n", + "joined_gdf.code = joined_gdf.code.str.replace(pat = ',', repl = '_')\n", + "joined_gdf.nen3610id = joined_gdf.nen3610id.str.replace(pat = ',', repl = '_')\n", + "joined_gdf.globalid = joined_gdf.globalid.str.replace(pat = ',', repl = '_')\n", + "\n", + "#make floats of the waterhoogte, just to be sure\n", + "joined_gdf.waterhoogte = joined_gdf.waterhoogte.astype(float)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "8f28c04c-f435-404e-89b8-a64798395c44", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n" + ] + } + ], + "source": [ + "HHSK['aggregation_area'] = gpd.GeoDataFrame(joined_gdf, geometry = 'geometry')\n", + "HHSK['peilgebied'] = HHSK['aggregation_area'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "HHSK['streefpeil'] = HHSK['aggregation_area'][['waterhoogte', 'globalid', 'geometry']]\n", + "HHSK['streefpeil']['geometry'] = np.nan\n", + "\n", + "HHSK['aggregation_area'] = HHSK['aggregation_area'][['code', 'nen3610id', 'globalid', 'geometry']]" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "99cd52fe-923f-4411-bc9a-e9ef1ae56121", + "metadata": {}, + "outputs": [], + "source": [ + "# # HHSK['aggregation_area'] = HHSK['peilgebied']\n", + "# HHSK['aggregation_area'] = aggregation_area\n", + "# HHSK['aggregation_area']['globalid'] = 'dummy_globalid_agg_area_' + HHSK['aggregation_area'].index.astype(str)\n", + "# HHSK['aggregation_area']['code'] = 'dummy_code_' + HHSK['aggregation_area'].index.astype(str)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "cd21bcac-8d25-4d47-ad0a-c7338e6e6653", + "metadata": {}, + "outputs": [], + "source": [ + "# # stop\n", + "# streefpeil = gpd.GeoDataFrame()\n", + "# streefpeil['waterhoogte'] = HHSK['peilgebied']['waterhoogte']\n", + "# streefpeil['globalid'] = HHSK['peilgebied']['globalid']\n", + "# streefpeil['geometry'] = np.nan\n", + "# HHSK['streefpeil'] = streefpeil #gpd.GeoDataFrame(HHSK['peilgebied'])\n", + "# HHSK['streefpeil'].waterhoogte = HHSK['streefpeil'].waterhoogte.round(2)\n", + "# HHSK['peilgebied'] = HHSK['peilgebied'][['geometry', 'code', 'nen3610id', 'globalid']]" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "15800d54-0cfd-481f-9e61-57f50b862e02", + "metadata": {}, + "outputs": [], + "source": [ + "# HHSK['streefpeil'].waterhoogte#.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "1803b0c0-4f61-416e-a27b-ff4e2050aa46", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "HHSK['peilgebied'].plot()" + ] + }, + { + "cell_type": "markdown", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "metadata": {}, + "source": [ + "### Check for the correct keys and columns" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n", + "gemaal\n", + "['code' 'nen3610id' 'globalid' 'func_afvoer' 'func_aanvoer'\n", + " 'func_circulatie' 'geometry']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n", + "afsluitmiddel\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n", + "streefpeil\n", + "['waterhoogte' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "duikersifonhevel\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "hydroobject\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "peilgebied\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "aggregation_area\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n" + ] + } + ], + "source": [ + "show_layers_and_columns(waterschap = HHSK)" + ] + }, + { + "cell_type": "markdown", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "metadata": {}, + "source": [ + "### Store data" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "metadata": {}, + "outputs": [], + "source": [ + "# Check if the directory exists\n", + "if not os.path.exists(output_gpkg_path):\n", + " # If it doesn't exist, create it\n", + " os.makedirs(output_gpkg_path)\n", + " \n", + "store_data(waterschap = HHSK, \n", + " output_gpkg_path = output_gpkg_path + '/HHSK')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "f60d7964-db4d-4c9f-9861-356a2a881382", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "12509\n", + "12509\n" + ] + } + ], + "source": [ + "print(len(HHSK['duikersifonhevel'].globalid.unique()))\n", + "print(len(HHSK['duikersifonhevel'].globalid))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0a681bab-0174-4b54-94ac-fac1479612a5", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Routing", + "language": "python", + "name": "routing" + }, + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Hollandse_Delta.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Hollandse_Delta.ipynb new file mode 100644 index 0000000..9263757 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Hollandse_Delta.ipynb @@ -0,0 +1,622 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 81, + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "metadata": {}, + "outputs": [], + "source": [ + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "import shapely" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "metadata": {}, + "outputs": [], + "source": [ + "from general_functions import *" + ] + }, + { + "cell_type": "markdown", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "metadata": {}, + "source": [ + "# HD" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'Hollandse_Delta'\n", + "data_path = \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Hollandse_Delta_aangepast.gpkg\"\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Hollandse_Delta\"" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "532b0b83-2139-4d48-8e42-883ed8e88325", + "metadata": {}, + "outputs": [], + "source": [ + "HD = read_gpkg_layers(gpkg_path = data_path, \n", + " variables = ['stuwen', \n", + " 'gemalen', \n", + " 'afsluitmiddelen',\n", + " 'sluizen',\n", + " 'HydroObjectWatergangtype', #= hydroobject\n", + " 'HydroObjectKunstwerkvakken']) #= duikersifonhevel\n", + "\n", + "#change names\n", + "HD['stuw'] = HD.pop('stuwen')\n", + "HD['gemaal'] = HD.pop('gemalen')\n", + "HD['afsluitmiddel'] = HD.pop('afsluitmiddelen')\n", + "HD['sluis'] = HD.pop('sluizen')\n", + "HD['hydroobject'] = HD.pop('HydroObjectWatergangtype')\n", + "HD['duikersifonhevel'] = HD.pop('HydroObjectKunstwerkvakken')\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "077f1c26-c738-48f7-b9df-bec5b7356c9a", + "metadata": {}, + "outputs": [], + "source": [ + "#see the readme: peilgebieden have not be delivered properly. This data is retrieved from an external online database.\n", + "# peilgebieden_path = '../../Data_preprocessed/Waterschappen/Hollandse_Delta/WSHD_Peilgebieden_(Vigerend).shp'\n", + "peilgebieden_path_all = \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Nalvering_tweede/Shapefiles/PeilgebiedenPraktijk.shp\"\n", + "peilgebieden_path_geen_AP = \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Nalvering_tweede/Shapefiles/PeilgebiedenGeenAP.shp\"\n", + "\n", + "#load in both the old ones and the new ones, as the new ones do not have the peilgebiedafwijkingen, but they dont have the streefpeilen. These are stored in the old ones.\n", + "peilgebieden_all = gpd.read_file(peilgebieden_path_all)\n", + "peilgebieden_all = peilgebieden_all[~peilgebieden_all['CODE'].str.contains('.AP')]\n", + "\n", + "peilgebieden_geen_AP = gpd.read_file(peilgebieden_path_geen_AP)\n", + "\n", + "peilgebieden = pd.merge(left=peilgebieden_geen_AP,\n", + " right=peilgebieden_all,\n", + " left_on='Dis',\n", + " right_on='Dis',\n", + " suffixes=('', '_all'),\n", + " how='left')\n", + "\n", + "#add the shapefile to the dictionary\n", + "HD['peilgebied'] = peilgebieden.drop_duplicates(subset='Dis')" + ] + }, + { + "cell_type": "markdown", + "id": "1ce54d69-78fd-409d-8705-72c23795bc70", + "metadata": { + "tags": [] + }, + "source": [ + "## Add aggregation areas" + ] + }, + { + "cell_type": "raw", + "id": "bb84b770-ff22-4cab-95d0-90aa99283faf", + "metadata": {}, + "source": [ + "Tijdens het 1 op 1 gesprek met HD is aangegeven dat de wateraanvoergebieden, bemalingsgebieden en de KRW lichamen door elkaar gestanzd moeten worden. De bemalingsgebieden worden achterwegen gelaten, want deze grenzen liggen praktisch perfect op de wateraanvoergebieden. Dit is alleen niet het geval op kleine stukken, wat op foutieve intekeningen lijkt. Als dit wel gebruikt zou worden zouden er veel kleine gebieden ontstaan, dus dit is achterwegen gelaten. Eigenlijk geldt hetzelfde voor de wateraanvoergebieden, dit is vrijwel gelijk aan de peilgebieden zonder afwijkende peilen. Deze peilgebieden worden voor nu aangehouden, met alleen de KRW lichamen eruit gestanzd.\n", + "\n", + "Bij een aantal peilgebieden vormt het KRW lichaam veruit het grootste gedeelte van het gebied, of zouden er hele vreemde stukken komen als dit nog eruit gedrukt zou worden. Ik (Ron Bruijns) heb zelf een selectie gemaakt van de gebieden waarvan ik dacht dat het het beste is om de KRW lichamen als aparte basin te onderscheiden. Dat zijn de gebieden met de volgende codes:\n", + "\n", + "P-G13.004\n", + "P-G12.008\n", + "P-G22.005\n", + "P-G33.008\n", + "P-G42.001\n", + "P-G44.005\n", + "P-H02.001\n", + "P-V03.005\n", + "P-V05.008\n", + "P-V06.010\n", + "P-V06.010\n", + "P-H03.002\n", + "P-H04.002\n", + "P-H17.009\n", + "P-H18.001\n", + "P-H18.002\n", + "P-D21.006\n", + "P-D27.006" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "333d7252-963e-4779-be68-f4a098e4272e", + "metadata": {}, + "outputs": [], + "source": [ + "#Load the additional data\n", + "KRW = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Hollandse_Delta\\Nalvering_tweede\\Shapefiles\\KRW-vlak.shp\")\n", + "# aggregation_area = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Hollandse_Delta\\Nalvering_tweede\\Shapefiles\\Aanvoergebieden.shp\")" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "id": "0f022cf4-2f22-47ee-b368-a7fec647f8ca", + "metadata": {}, + "outputs": [], + "source": [ + "aggregation_area = HD['peilgebied']\n", + "aggregation_area['code'] = aggregation_area['CODE']\n", + "aggregation_area['nen3610id'] = aggregation_area['NAAM_BEMAL']\n", + "aggregation_area['globalid'] = 'dummy_globalid_agg_area_' + aggregation_area.index.astype(str)\n", + "aggregation_area = aggregation_area[['code', 'nen3610id', 'globalid', 'geometry']]" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "id": "ef0831b3-979f-4915-8f73-8a6d9ffce6a0", + "metadata": {}, + "outputs": [], + "source": [ + "KRW['code'] = KRW['OWMIDENT']\n", + "KRW['nen3610id'] = KRW['OWMNAAM']\n", + "KRW['globalid'] = 'dummy_globalid_KRW_' + KRW.index.astype(str)\n", + "KRW = KRW[['code', 'nen3610id', 'globalid', 'geometry']]" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "id": "b8e431e1-fa32-4cac-9ac2-9bcb6e0b7a99", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "codes = \"\"\"P-G13.004\n", + "P-G12.008\n", + "P-G22.005\n", + "P-G33.008\n", + "P-G42.001\n", + "P-G44.005\n", + "P-H02.001\n", + "P-V03.005\n", + "P-V05.008\n", + "P-V06.010\n", + "P-V06.010\n", + "P-H03.002\n", + "P-H04.002\n", + "P-H17.009\n", + "P-H18.001\n", + "P-H18.002\n", + "P-D21.006\n", + "P-D27.006\n", + "P-G43.006\n", + "P-G32.007\n", + "P-V01.010\n", + "P-V01.022\n", + "\"\"\"\n", + "code_list = [code.strip() for code in codes.strip().split(\"\\n\") if code.strip()]\n", + "\n", + "agg_area_dont_split = aggregation_area[~aggregation_area.code.isin(code_list)]\n", + "agg_area_to_split = aggregation_area[aggregation_area.code.isin(code_list)]\n", + "clipped_KRW = gpd.clip(KRW, agg_area_to_split)\n", + "\n", + "burned_in_areas = burn_in_peilgebieden(base_layer=agg_area_to_split,\n", + " overlay_layer=clipped_KRW)\n", + "aggregation_area = aggregation_area.dropna(subset='geometry')" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "id": "0c9cfebb-3aa5-4f44-a437-9ba675c655c5", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_3564\\901116719.py:24: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " KRW_to_add = KRW_to_add.append(new_row, ignore_index=False).reset_index(drop=True)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\array.py:1459: UserWarning: CRS not set for some of the concatenation inputs. Setting output's CRS as Amersfoort / RD New (the single non-null crs provided).\n", + " return GeometryArray(data, crs=_get_common_crs(to_concat))\n" + ] + } + ], + "source": [ + "KRW_to_add = gpd.clip(clipped_KRW, agg_area_to_split).reset_index(drop=True) #these KRW bodies are cut out, so they need to be inserted again\n", + "KRW_to_add = gpd.clip(KRW_to_add, HD['peilgebied'])#.dropna().explode(ignore_index = True) #however, they may cross multiple peilgebieden with different peilen. clip it on the peilgebieden\n", + "KRW_to_add = KRW_to_add.explode(ignore_index=True) #explode\n", + "KRW_to_add = KRW_to_add[KRW_to_add.geometry.type.isin(['Polygon', 'MultiPolygon'])].reset_index(drop=True) #discard points, linestrings, and geometry collections\n", + "KRW_to_add = gpd.GeoDataFrame(data = KRW_to_add, columns=['geometry'])\n", + "KRW_to_add = gpd.sjoin(left_df = KRW_to_add,\n", + " right_df = HD['peilgebied'][['REKENPEIL1', 'geometry']],\n", + " how = 'left',\n", + " predicate = 'within').reset_index(drop=True)\n", + "\n", + "indices_to_dissolve = [18, 19]\n", + "\n", + "# Extract the rows for these indices\n", + "rows_to_dissolve = KRW_to_add.loc[indices_to_dissolve]\n", + "\n", + "# Dissolve the selected polygons into a single polygon\n", + "dissolved_polygon = rows_to_dissolve.unary_union\n", + "\n", + "# Create a new GeoDataFrame for the dissolved polygon\n", + "new_row = gpd.GeoDataFrame({'geometry': [dissolved_polygon]}, index=[min(indices_to_dissolve)])\n", + "\n", + "# Drop the original rows from the GeoDataFrame\n", + "KRW_to_add = KRW_to_add.drop(index=indices_to_dissolve)\n", + "KRW_to_add = KRW_to_add.append(new_row, ignore_index=False).reset_index(drop=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "id": "92732485-2729-4d5e-9d06-ef86dfa6bd19", + "metadata": {}, + "outputs": [], + "source": [ + "KRW_to_add.loc[0, 'REKENPEIL1'] = -0.9\n", + "KRW_to_add.loc[3, 'REKENPEIL1'] = -1.0\n", + "KRW_to_add.loc[6, 'REKENPEIL1'] = -1.75\n", + "KRW_to_add.loc[7, 'REKENPEIL1'] = -1.00\n", + "KRW_to_add.loc[11, 'REKENPEIL1'] = -1.40\n", + "KRW_to_add.loc[12, 'REKENPEIL1'] = -0.95\n", + "KRW_to_add.loc[15, 'REKENPEIL1'] = -2.65\n", + "KRW_to_add.loc[17, 'REKENPEIL1'] = -2.25\n", + "KRW_to_add.loc[18, 'REKENPEIL1'] = -2.0\n", + "KRW_to_add.loc[22, 'REKENPEIL1'] = -1.2\n", + "KRW_to_add.loc[26, 'REKENPEIL1'] = -2.0\n" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "id": "21529995-1705-4fee-a5d4-1b3f056dc902", + "metadata": {}, + "outputs": [], + "source": [ + "KRW_to_add = KRW_to_add.dropna(subset='REKENPEIL1').reset_index()\n", + "KRW_to_add['REKENPEIL_'] = KRW_to_add['REKENPEIL1']\n", + "KRW_to_add['NAAM_BEMAL'] = 'KRW_body_' + KRW_to_add.index.astype(str)\n", + "HD['peilgebied'] = pd.concat([HD['peilgebied'], KRW_to_add])" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "id": "9105b8ea-ceae-45ec-9703-7199146e7ec9", + "metadata": {}, + "outputs": [], + "source": [ + "aggregation_area = pd.concat([burned_in_areas, agg_area_dont_split])\n", + "aggregation_area = gpd.GeoDataFrame(aggregation_area, geometry = 'geometry')\n", + "aggregation_area = aggregation_area[(aggregation_area.geom_type == 'Polygon') | (aggregation_area.geom_type == 'MultiPolygon')]\n", + "HD['aggregation_area'] = aggregation_area" + ] + }, + { + "cell_type": "markdown", + "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", + "metadata": {}, + "source": [ + "### Adjust column names" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "id": "d54bf05e-f563-44ec-9864-4774e2aecfc6", + "metadata": {}, + "outputs": [], + "source": [ + "#determine aanvoer en afvoer gemalen\n", + "HD['gemaal']['func_aanvoer'], HD['gemaal']['func_afvoer'], HD['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "HD['gemaal']['functiegemaal'] = HD['gemaal']['FUNCTIEGEM'].astype(str) \n", + "HD['gemaal'].loc[HD['gemaal']['functiegemaal'] == 'Onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", + "HD['gemaal']['functiegemaal'].fillna(HD['gemaal']['NAAM'], inplace = True) #some additional information may given in this column\n", + "HD['gemaal']['functiegemaal'] = HD['gemaal']['functiegemaal'].astype(str) #again, otherise issue True False\n", + "\n", + "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('f-|fvoer|nderbemaling'), 'func_afvoer'] = True\n", + "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('anvoergemaal|pmaling'), 'func_aanvoer'] = True\n", + "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('Doorspoel'), 'func_circulatie'] = True\n", + "HD['gemaal'].loc[(HD['gemaal'].func_afvoer == False) &\n", + " (HD['gemaal'].func_aanvoer == False) &\n", + " (HD['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "059f9113-bcd4-470a-abb6-4fd8ec193f4a", + "metadata": {}, + "outputs": [], + "source": [ + "#discard irrelevant data of HD HD, and create a uniform dataset compared to the other waterschappen\n", + "#Stuw\n", + "HD['stuw'] = HD['stuw'][['CODE', 'GLOBALID', 'geometry']]\n", + "HD['stuw'] = HD['stuw'].rename(columns={'CODE': 'code', 'GLOBALID': 'globalid'})\n", + "HD['stuw']['nen3610id'] = 'dummy_nen3610id_stuw_' + HD['stuw'].index.astype(str)\n", + "\n", + "#Gemaal\n", + "HD['gemaal'] = HD['gemaal'][['CODE', 'GLOBALID', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "HD['gemaal'] = HD['gemaal'].rename(columns={'GLOBALID': 'globalid',\n", + " 'CODE': 'code'})\n", + "HD['gemaal']['nen3610id'] = 'dummy_nen3610id_gemaal_' + HD['gemaal'].index.astype(str)\n", + "\n", + "#Hydroobject\n", + "HD['hydroobject'] = HD['hydroobject'][['CODE', 'GLOBALID', 'geometry']]\n", + "HD['hydroobject'] = HD['hydroobject'].rename(columns={'GLOBALID': 'globalid',\n", + " 'CODE': 'code'})\n", + "HD['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + HD['hydroobject'].index.astype(str)\n", + "\n", + "#sluis\n", + "HD['sluis'] = HD['sluis'][['CODE', 'GLOBALID', 'geometry']]\n", + "HD['sluis'] = HD['sluis'].rename(columns={'GLOBALID': 'globalid'})\n", + "HD['sluis']['nen3610id'] = 'dummy_nen3610id_sluis_' + HD['sluis'].index.astype(str)\n", + "\n", + "#duikersifonhevel\n", + "HD['duikersifonhevel'] = HD['duikersifonhevel'][['CODE', 'GLOBALID', 'geometry']]\n", + "HD['duikersifonhevel'] = HD['duikersifonhevel'].rename(columns={'CODE':'code', 'GLOBALID': 'globalid'})\n", + "HD['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + HD['duikersifonhevel'].index.astype(str)\n", + "\n", + "#afsluitmiddel\n", + "HD['afsluitmiddel'] = HD['afsluitmiddel'][['CODE', 'geometry']]\n", + "HD['afsluitmiddel'] = HD['afsluitmiddel'].rename(columns={'CODE':'code'})\n", + "HD['afsluitmiddel']['nen3610id'] = 'dummy_nen3610id_afsluitmiddel_' + HD['afsluitmiddel'].index.astype(str)\n", + "HD['afsluitmiddel']['globalid'] = 'dummy_globalid_afsluitmiddel_' + HD['afsluitmiddel'].index.astype(str)\n", + "\n", + "#Peilgebied\n", + "HD['peilgebied'] = HD['peilgebied'].reset_index(drop=True)\n", + "HD['peilgebied'] = HD['peilgebied'][['REKENPEIL_', 'NAAM_BEMAL', 'geometry']]\n", + "HD['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + HD['peilgebied'].index.astype(str)\n", + "HD['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + HD['peilgebied'].index.astype(str)\n", + "HD['peilgebied'] = HD['peilgebied'].rename(columns={'REKENPEIL_': 'streefpeil', 'NAAM_BEMAL':'code'})\n", + "HD['peilgebied'].code = HD['peilgebied'].code.astype(str) + '_' + HD['peilgebied'].index.astype(str)\n", + "\n", + "#Streefpeil\n", + "HD['streefpeil'] = pd.DataFrame()\n", + "HD['streefpeil']['waterhoogte'] = HD['peilgebied']['streefpeil']\n", + "HD['streefpeil']['globalid'] = HD['peilgebied']['globalid']\n", + "HD['streefpeil']['geometry'] = None\n", + "HD['streefpeil'] = gpd.GeoDataFrame(HD['streefpeil'], geometry = 'geometry')\n", + "\n", + "#Remove the streefpeil from the peilgebied\n", + "HD['peilgebied'] = HD['peilgebied'][['code', 'geometry', 'nen3610id', 'globalid']]\n", + "HD['streefpeil'].waterhoogte = HD['streefpeil'].waterhoogte.round(2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "626e1734-2515-4c0a-8f7f-81ce3d400785", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "121534de-ebf7-418d-8d47-10697b28cb55", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 96, + "id": "5ca0372f-48db-47e1-b5c9-2574b17234eb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "798\n", + "798\n" + ] + } + ], + "source": [ + "print(len(HD['peilgebied'].code.unique()))\n", + "print(len(HD['peilgebied'].globalid.unique()))" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "id": "4be7418b-4d01-415e-a1f2-4fdc33d10ee4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "798\n", + "798\n" + ] + } + ], + "source": [ + "print(len(HD['peilgebied'].code))\n", + "print(len(HD['peilgebied'].globalid))" + ] + }, + { + "cell_type": "markdown", + "id": "fc6461c9-0c4d-4c37-b6e0-039be24d4f51", + "metadata": {}, + "source": [ + "## Delete irrelevant data" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", + "metadata": {}, + "outputs": [], + "source": [ + "#delete irrelvant data\n", + "variables = ['peilgebiedpraktijk']\n", + "\n", + "for variable in variables:\n", + " if str(variable) in HD:\n", + " del HD[variable]" + ] + }, + { + "cell_type": "markdown", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "metadata": {}, + "source": [ + "### Check for the correct keys and columns" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "['code' 'globalid' 'geometry' 'nen3610id']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "gemaal\n", + "['code' 'globalid' 'func_afvoer' 'func_aanvoer' 'func_circulatie'\n", + " 'geometry' 'nen3610id']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "afsluitmiddel\n", + "['code' 'geometry' 'nen3610id' 'globalid']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "sluis\n", + "['CODE' 'globalid' 'geometry' 'nen3610id']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "hydroobject\n", + "['code' 'globalid' 'geometry' 'nen3610id']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "duikersifonhevel\n", + "['code' 'globalid' 'geometry' 'nen3610id']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "peilgebied\n", + "['code' 'geometry' 'nen3610id' 'globalid']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "aggregation_area\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "streefpeil\n", + "['waterhoogte' 'globalid' 'geometry']\n", + "type = \n", + "crs = None\n", + "\n" + ] + } + ], + "source": [ + "show_layers_and_columns(waterschap = HD)" + ] + }, + { + "cell_type": "markdown", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "metadata": {}, + "source": [ + "### Store data" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "metadata": {}, + "outputs": [], + "source": [ + "# Check if the directory exists\n", + "if not os.path.exists(output_gpkg_path):\n", + " # If it doesn't exist, create it\n", + " os.makedirs(output_gpkg_path)\n", + " \n", + "store_data(waterschap = HD, \n", + " output_gpkg_path = output_gpkg_path + '/HD')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "52f17e20-95a7-493f-bff9-6600df570fe0", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Routing", + "language": "python", + "name": "routing" + }, + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rijnland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rijnland.ipynb new file mode 100644 index 0000000..650be62 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rijnland.ipynb @@ -0,0 +1,1197 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "metadata": {}, + "outputs": [], + "source": [ + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "\n", + "import shapely\n", + "from shapely.validation import make_valid\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "metadata": {}, + "outputs": [], + "source": [ + "from general_functions import *" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", + "metadata": {}, + "outputs": [], + "source": [ + "pd.set_option('display.max_columns', None)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'Rijnland'\n", + "path_Rijnland = '..\\..\\Data_preprocessed\\Waterschappen\\Rijnland\\DataRijnland\\DataRijnland.gpkg'\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Rijnland\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "ca6ddcd9-e960-4b5f-ba10-4d222c16a843", + "metadata": {}, + "outputs": [], + "source": [ + "Rijnland = read_gpkg_layers(gpkg_path = path_Rijnland, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'afsluitmiddel',\n", + " 'duikersifonhevel',\n", + " 'hydroobject',\n", + " 'peilgebiedvigerend',\n", + " 'peilgebiedpraktijk',\n", + " 'peilafwijkinggebied',\n", + " 'streefpeil']) \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c49f0339-19e4-497f-87fe-8b4918aefb5f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Opmaling', 'Afvoergemaal', 'Onderbemaling', 'Doorspoelgemaal',\n", + " 'Aanvoergemaal', None, 'Overig', 'Noodpomp'], dtype=object)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Rijnland['gemaal'].functiegemaal.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "ec085e98-5791-4829-bc95-35b833c632f1", + "metadata": {}, + "outputs": [], + "source": [ + "#determine aanvoer en afvoer gemalen\n", + "Rijnland['gemaal']['func_aanvoer'], Rijnland['gemaal']['func_afvoer'], Rijnland['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "Rijnland['gemaal']['functiegemaal'] = Rijnland['gemaal']['functiegemaal'].astype(str) \n", + "\n", + "Rijnland['gemaal'].loc[Rijnland['gemaal'].functiegemaal.str.contains('Afvoergemaal|Onderbemaling|Overig'), 'func_afvoer'] = True\n", + "Rijnland['gemaal'].loc[Rijnland['gemaal'].functiegemaal.str.contains('Opmaling|Aanvoergemaal'), 'func_aanvoer'] = True\n", + "Rijnland['gemaal'].loc[Rijnland['gemaal'].functiegemaal.str.contains('Doorspoelgemaal|Noodpomp'), 'func_circulatie'] = True\n", + "Rijnland['gemaal'].loc[(Rijnland['gemaal'].func_afvoer == False) &\n", + " (Rijnland['gemaal'].func_aanvoer == False) &\n", + " (Rijnland['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "39014a74-876e-41f8-b620-913afef1ac06", + "metadata": {}, + "outputs": [], + "source": [ + "path_Rijnland_nalevering = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Rijnland\\20240402_gegevensRL_nalevering.gdb\"\n", + "\n", + "Rijnland_nalevering = read_gpkg_layers(gpkg_path = path_Rijnland_nalevering, \n", + " variables = ['boezemvak', \n", + " 'Inlaat', \n", + " 'Peilgebiedenpraktijk_aggregatie_RL']) " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b956b1d7-bb90-416a-bad3-fcd47131041f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "metadata": {}, + "source": [ + "# Rijnland" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "01dda03c-5a50-4bde-a655-7ed14c85a8d3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbgAAAGdCAYAAABgq2Y2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3hb1f3/X9rLkjxka3g723H23pQRaJndLTQtHbT9Usrsgm46gJZVoJNOCi0dwI+WEcIKSch24sRO4mxPyZaHhiVb+/7+uI4cxTsDKJzX8+jBuudzzz1XRPetc85nKCRJkhAIBAKB4F2G8u0egEAgEAgE5wIhcAKBQCB4VyIETiAQCATvSoTACQQCgeBdiRA4gUAgELwrEQInEAgEgnclQuAEAoFA8K5ECJxAIBAI3pWo3+4BvNNJpVK43W7MZjMKheLtHo5AIBC855EkiZ6eHlwuF0rl8PM0IXCj4Ha7KS4ufruHIRAIBIJTaG5upqioaNh2IXCjYDabAfmDtFgsb/NoBAKBQBAMBikuLk4/n4dDCNwonFiWtFgsQuAEAoHgHcRo20bjcjL5wQ9+gEKhyHg5HI50uyRJ/OAHP8DlcmEwGDjvvPPYt29fRh/RaJSvfvWr2Gw2TCYTV1xxBS0tLRk2Pp+PNWvWYLVasVqtrFmzBr/fn2HT1NTE5ZdfjslkwmazceONNxKLxTJsamtrWbVqFQaDgcLCQu68805EbmmBQCB4bzBuL8rp06fj8XjSr9ra2nTbz372M+6//34eeeQRduzYgcPh4KKLLqKnpydtc/PNN/PMM8/w5JNPsmnTJkKhEJdddhnJZDJtc/XVV1NTU8PatWtZu3YtNTU1rFmzJt2eTCa59NJLCYfDbNq0iSeffJKnnnqK2267LW0TDAa56KKLcLlc7Nixg4cffph7772X+++/f9wfkkAgEAj+B5HGwfe//31p1qxZQ7alUinJ4XBId999d/pYJBKRrFar9Jvf/EaSJEny+/2SRqORnnzyybRNa2urpFQqpbVr10qSJEn79++XAGnr1q1pmy1btkiAVF9fL0mSJL3wwguSUqmUWltb0zZ///vfJZ1OJwUCAUmSJOlXv/qVZLVapUgkkra56667JJfLJaVSqTHfcyAQkIB0vwKBQCB4exnrc3ncM7jDhw/jcrkoLy/nE5/4BMeOHQPg+PHjtLW1sXr16rStTqdj1apVbN68GYDq6mri8XiGjcvloqqqKm2zZcsWrFYrixYtStssXrwYq9WaYVNVVYXL5UrbXHzxxUSjUaqrq9M2q1atQqfTZdi43W4aGhqGvb9oNEowGMx4CQQCgeB/j3EJ3KJFi3jsscd46aWXePTRR2lra2Pp0qV0dXXR1tYGgN1uzzjHbren29ra2tBqteTk5IxoU1BQMOjaBQUFGTanXicnJwetVjuizYn3J2yG4q677krv/VmtVhEiIBAIBP+jjEvg3v/+9/PhD3+YGTNmcOGFF/L8888D8Je//CVtc6pXiyRJo3q6nGozlP3ZsJH6HUxGGs/tt99OIBBIv5qbm0ccu0AgEAjemZxRqi6TycSMGTM4fPhw2pvy1NmR1+tNz5wcDgexWAyfzzeiTXt7+6BrdXR0ZNiceh2fz0c8Hh/Rxuv1AoNnmSej0+nSIQEiNEAgEAj+dzkjgYtGoxw4cACn00l5eTkOh4OXX3453R6LxXjjjTdYunQpAPPmzUOj0WTYeDwe6urq0jZLliwhEAiwffv2tM22bdsIBAIZNnV1dXg8nrTNunXr0Ol0zJs3L22zYcOGjNCBdevW4XK5KCsrO5PbFggEAsH/AuPxXLntttuk9evXS8eOHZO2bt0qXXbZZZLZbJYaGhokSZKku+++W7JardLTTz8t1dbWSp/85Cclp9MpBYPBdB9f/vKXpaKiIumVV16Rdu3aJZ1//vnSrFmzpEQikba55JJLpJkzZ0pbtmyRtmzZIs2YMUO67LLL0u2JREKqqqqSLrjgAmnXrl3SK6+8IhUVFUk33HBD2sbv90t2u1365Cc/KdXW1kpPP/20ZLFYpHvvvXc8tyy8KAUCgeAdxlify+MSuI9//OOS0+mUNBqN5HK5pA996EPSvn370u2pVEr6/ve/LzkcDkmn00krV66UamtrM/ro6+uTbrjhBik3N1cyGAzSZZddJjU1NWXYdHV1Sddcc41kNpsls9ksXXPNNZLP58uwaWxslC699FLJYDBIubm50g033JAREiBJkrR3715pxYoVkk6nkxwOh/SDH/xgXCECkiQETiAQCN5pjPW5rJAkkdpjJILBIFarlUAgIPbjBAKB4B3AWJ/Loh6cQCAQCN6VCIETCAQCwbsSIXACwVjpa4f9PwP3S2/3SAQCwRgQ5XIEgrHScxCan4GDD4GxGIxF8iurHGxLIXceiKrvAsE7BiFwAsFYKVgJF2+R/04loM8NLf+BaCfsugVi3TD9u1D6cSF0AsE7ACFwAsFYScUhGQWpX9xUBth9G6ROqkO4+ZNw7A8w7xdgrXz7xioQCITACQRjpvom6NwK8R5QaUGpB/MkSPZB6NiAXdsr8MJMKLoKCi+Hko/IYggQPAiho3IfZZ98W25DIHivIOLgRkHEwb2H6dgCDY9DMgJxPyR65b8B1CZZrFIxkJKAJL+k/v+mYhDzDd83gMEJuQsguwqcF0P+clAIvy+BYDTG+lwWAjcKQuAEp4UkQdd2OPRLiHZAPAhSClJxYtEYqUQMjeRDFfcOnJM1Aco/I8/4rNPevrELBO9whMCdJYTACc4agXp4YTpRTQWqvmOoVSk6e2z4U9Moym9DHzss25nKYMljULDibR2uQPBOZazPZbEHJxC8VTT/G6QUutgR4oZikpEWbOZObGyEGBzunIPDkcIc3gOvrILp35aXMSs+C2rD2z16geB/DrHgLxC8VUy+QXY8ATSxZrypZRnNJdZ9mBN7qO9cQFxbDPt+DDu/AhHPEJ0JBILREAInELyVeDek/zTpwum/97dOZduRRQSTUB9JEQl20aOeJTdu+TREu9/qkQoE//MIgRMI3gokSU7zFRsQKktyN25/EQAVBcepcNQzv0nJLbFd+ON6+mImUpo86HgTXlkJvS1v1+gFgv9JhMAJBOeSQD1s/xI8Wwr77xrUnNBXAKDXRDnWPoWNdi1ZKR3f61KTr9zKvuapNMcvgMA+WLcEAgfe6jsQCP5nEQInEJxLPGvhyO+gt3nIGDeX+Uj671RKid0Y4RdZOZzXW0pcW8IMx5t0dcQ5Guyfwb28XI7PEwgEoyIETiA4l+TOA6UOXB+A7FmDmtVxNwc75gJgs3Syp2kGWX3lzLFZ8UWKqGtbSCx3AxXmDRzqXoIUD8JrF0Drc2/1nQgE/3MIgRMIziX5y6HyG3Lmk6m3DaTssk6H/BUEjBeSnaensWsC0VQ2s0pqWVi+mTztflo9Gv4bCbOoGX4VgDzrFg53zEBCCRuugqN/eltvTSB4pyPi4ASCc4lCATPvhEgn6G0Q2A9t66B7JwCGnPPpCeopzjlKad7R9GmF2a1kaUM0eW0A3NABt3ZCmXo3P0+WcnlhN4ptn4NIG1R+S1QvEAiGQMzgBIK3Ar0sVEy9RU62DGCegjZUTSqRQDnEN9FqDHCHJcljpgpWq3OxKhQcisM/pEaOdPUvd+65A6pvltOACQSCDITACQRvFfGQnJ+yYJX8XmOGeIBIuHdI8zrPAjr6yllh6uFYKowOJXlKBf8OgVuziZZofyqvQw/Bm5+US/kIBII0QuAEgreADbseoO/FBXD4V9D2qnww5kPS5uM0De36X+XcwXrj6/ww1MWRVBR3KsnllKABrDErrV4zR3tWIqlM0PRPWP8BOamzQCAAxB6cQHBOeXrjN3iy7u/Ewy38zQEoVZCKyJUDtHn4wnnk6rcPeW5jDG7rBKtCXn78YBbcqpH4uCIXKTwDrSrMBPMG2rsdZOc70LW/JuewPO9FMDjewrsUCN6ZiBmcQHCucK/lXzvu55C/hb8VWzHkL5WFJ2e+XCC1ezudXbJzyNHOqRzrnESrvzh9eqEashQQkOQv6s9yYIatCVtkPglJywz7JgDs1jYi/g6Cqjngq4GXl0HPkSEGJBC8txACJxCcKzzruMCQ5Bf5YMidCV2bIdwk14fLX04iexFFphr2tc3HZTlOhe0wraHp6dPVSmgug+stsNIAFXoIRYwoFVE0yihqVTJtazUGSQaP06uZLovnuqXg3fg23LRA8M5B1IMbBVEPTnBaJKPwtINUzI8CUNgWQ9fWDBOfcgFRXzO5pk6UihR17cuY7drIXs9SZjo3p+2au0sIRJ2kUKEggU7VS0nOYfSawU4lvVE9MeN0spPVoFDD9Dug4lrIKj/HNywQvHWM9bksZnACwdlGkmDv9yDuR6kAhX3lIHED6PTpcVjbkCQFRzpnMtslz7gKzQcJRYxpu0DUSZVzGzOdm4mnjMRT+iHFDcCoi5AV2017ailICai7E16YCbu/Li9fCgTvIYTACQRnm6N/hMO/GXgfDw0ySUnQmdwPwJGu2Uy116Tb8rK6ONy9IP2+yrmNGvdKDnmn48w6xHTHzhEvr1alsCs309i3Uj6QCMGBe2HtfHjtYjjyKES7Tv/+BIL/EYTACQRnk0gnbL8OcmZD/grIWyIvFZ7Cq4lyXqeLGvdKpjt2DGqfXrCZxu6BZUVJUhCIFeK0usc0DF84B79Pota7Cp9yoZzeS0rKWVS2fxHWLpDL90Q6TvtWBYJ3OiJMQCA4m1R/FZCgY6CwKdkzB5nV+3RcoSpmYv62IbvRquMcj2m4vwM+o8kjT99IZ6RiTEM46J1Fac4BZrk24g3a6WzLwytNJ0oeJc4QVqkGRfg41HxTfmVNBNtisC2R/5s9E5QnPRqiXXJNuqIrxvNJCARvO0LgBIKzhWcdNP5j8PFAHRhc0CfPvqIKDR/T+/CEJqPXNA/b3XmOQ/z5eBE/JsqXjHHsY1xvUSmi6DUxAIzaMAZtCLM+TGNkJbGkhnBUS3N4EaYsHWZDD9boMZQNj0PD4/0dGCFvgSx2uQug/VVwXTquj0IgeCcgBE4gOBu0vgBvXCovBaqMKJLhgTYpRcQ0gTu7VPy5rYVyjZpfqyZiUncP318/v3C1c0e7mZfiIW7IToxqv9ezhCLLwfR7jSpGl2IxJnUdqSQUKLaAHqbp3wQglYDmjnL8sRkYtFFMFjU2YxBdxybwvjHQceOT4Hw/2BZB3mJ5CValHfPHIxC8HQiBEwjOBq3P0quZTq+vDZM2xEH/xehUYZLKbApU2/mNx80D4WZMCihDhUbVi0qRoMa9kjxDI8U5jUN229C1kK/bdvJCqGLIhMwnU+NewRTbdlr85TQFKgEFKlWSiqJujrRNYHLehkHnKJVQmnecqNfI5Lx9AKx338N5y4Kw7yeykeMiuWpB05PQ+Lf+E3Vyrbv8pbLg2ZaA0XW6n55AcE4QAicQnCHJrjoe2bWFT6ncJJJ6DNoo/tRUFl93N1t//yOqcp7jexYvF7dVsS4ZJaQ7zJS83TzdkUeelEuxpof69lkkJD1Ry07mGZN4wxbag5XMcskzrcsiIdBnjzISBeFYFhadD5WxgOLcYwRihQQ7u5mcN7JzSm8iDwBv0E7Zig9Cbv8sUGOF970kl+OJ98jJoju3yK+ON6FzIF4PY4m8rFl4BZRfc5qfpkBw9hBelALBGfK7reu4ub2Wb/pjtPdOYEP0dyz7ys/Rm/TkVn2AaFzLZm8JNouTT2o03GODV3rho4Euroxs4ZLubjbEQyRSWrQ9U6hum86u7pnMcMqxc5IEN0Wa+VO3l46e/GHHMdOxAbIm8LrGzDd99cw72Ea9J8RPfFr+1jqV9lDOsOeqFHJcXX3oCspmTJILsgLEA9D+uvy3xgyOC6DqO3De8/C+dZmdJHqg+Snwrj/tz1IgOJuIGZxAcIY8svcRAD7VNwtf1gLO++x16baZFyyjoelNfvjPpSzqa+LOAvn4NC2cZ4D1fbA/BheWHqVCI9eJ29QxkQnaY9S4lzO9YCvPRxL8vzDURZr4tH0J+Qzt2n80soIfdNTzt9hA+3HTPn4Zghck+Eo7lHVoqVTkMlNp5Qq9xKS8I6hVKQpM8hKpIn+xfKKpFNRZcgyd9w1wnD9wod4WaHtNXpIsOE8WNJURrmwEFJA4af9RIHgbETM4geAMMavMZCvhvImb0ZesGNR+zPs6WVKcW7IHjhVr4PUieMoJy/TwpwCE+2uWHtIe4VNBL0pNK/UdM7mtX6+OJuMYLUOL26HuRfza38R/4pntL/eXmjueAH8KahIx/hZv40exg0zKP0QsqeOQtwq7pQ0A54x+gVMoB2ZxgbrMixmLoOLT4LgQij8oH0v2yjkwNVlgsI/pcxMIzjVC4ASCM6TIVMK3NRXUuFex+CMfzGh78qlH2f/m9whLoBri3A8YwaCEf4dA0X/ssxYwqhN8JtxESu2jrT+ncoFSiS1RT29Un9FHY9dENqkC/KWvkVB/ZlkD8EET+JJwqRGuMsEKPWT3f+MX6EGtAKO2j8kFsoA1dE2gfMaUgY6zZ8j/9deOcPNXDvzd9M/h7QSCtwGxRCkQnCH//sp/AUjGB7L7N7rfJNjVycr27+PKj3DDMOfqlfC0EzqSYFTCwRi0J2Uh8klKAkn4hrmS9+eHqVJ6UBEjEMnFqJOdRjp7bOhtuTzXtJPulPyLdbUBEsAzJ60Unq/ORgNMkSI41VnMTuawz2OmJOcwZn0PAP5oIUZ3h7xc2b0Tgv2FWGMjhDOYSiF7Fvj3QMuzMOsnp/chCgTnACFwAsEZcsP9H+R9lR/hw5fInoPb6v7A8qe+wN5ScGWPfr5KAY7+b+JjQXgkAP/PAcZeF4vyj2PvWsgU5f60fSIlx5+5/YXoc4tpadVxoSlFXCHPytb2glYBy1RmShRmjGioUOkpUao4oowRJEmbFOOpaILJXYUs1ElU2A6iUfTRXFdLwTwV5C8H8yR4/WJI9EEqKRdrHYqiK2WBC+yDnqNgnnAmH6dAcNYQAicQnAE/+t0t/Kbn/5F9LJ8PIwvcU5u/zbpC2ZFkPLwQgp/65L+f7yrn3pLjAEzI3klEOxV9rB6AAruK5p6V6KwpVKG9VOb3kmhfycvSVg5F4AqVnXkGP7p4MYtNnSwaIUTgt42LceTvAcCg8dPRXAuX3io39shOL+n9NcukoTspukKuWgDyLG7areO7cYHgHCH24ASC0+TuP36T73ke5CJVBT++/ncABEMtbAv1pffTxkoyBbd2wCVGyFfAGnNPuq0zZOdwc0H6vS52lEQCChSbsBqDBCNWJPSs1CtZpiojV6mkMGXjppL9LMrzDnvNHd35HEh1oldH6I0ZKM09gqqnFvo8sPsbA6IFEBhhH05tlr0oAVr/O847FwjOHWIGJxCcBqFwiAdb70UN3LzyF+njZqOLxdZc/tkT5Dzj8OefSkyC6Tp4Ogyf1eXyg75OnukPWzvmm02hqY6W2ApyTH7cPgeTsl4mlVJwqGMmfYlsTCov74vN4JbywZUJhiKahPU9RXxGa0KpPEKzbxJT7HvJU9WBwQlzfga9bjj+mHxC8NDgTsJNctybrgAMDnmW17ERot2gyx37zQsE5wghcALBafDMEw9QrEnxL0Mhy5Z9IH1coVQyu3Axn+xuGFd/GiUs10NXCv7U180z6pk0dofwRYpQxrspzW8GmiEOL3cZCQbOx6xux6AOEUw4mZS9nSx935iuVR/I5q/dZXxQY0GhkN0u+5LZAJTl7CMZT6LSqMDgpC9rGr1xPbl9bYNnpaYSmHqL/HdvE+y5Qy7J0/pfqPjMuO5fIDgXCIETCE6Dhq6n+IcTVCEte9atxzl1KgUlDpQqJRXhDwFPjqu/rRF4PAQuFeQpYXLeXvr8s5ict53uk2ZDvt4s5uVVM1Fp5KhvPkqFm4WFa8d8HUmCf/nK+KhewWynnEzZE3ChJA6AUddHQ/0xOZuJQsG0mja+ZY3zpaovjNyx/aRA8Oqb4eBDciwdClBq5FRfOXNg/sNjHqtAcKYIgRMIxkkqmeLn8T10BeDaeDFzfBfAFnhj3QNUrLyM3OY7oWD0fk5GATTG5Vi5Cw2QowSnXXb+OBESANAbszLbFEOnCTLX+Bqt/mJqPYvTab1G40l3BZeY28lmYP00ltBjUPvT7z37ayibMYnuYDcd+LjMCm7eT+FIHStP8qiJ+8G3a7CNrwa6doBKB8v+KQLCBeccIXACwThxe93M0qp4LpykhwY+HfoF+ZVL6d3zb7as/Qgfs9eN3skpTFbDTK0cA/ezfHBqhrbr6K2gMLs1/b4wu5nC7GaOdU4hltQztV8UhyIQVXMwbqZKmU+Zc6DQqi/qYnrBlvR7l/d2Nv89ydbYAbSAN6FgWqFj+MHHfHDsTwPvy66B+Y/Iy5WSBMF6CO6XkzBrrKA2jPp5CARnA+FFKRCMkx898UUkRZKjcXgs3kS1rpPK5fM5VnyQ1xXDC8xIaJSwzAB/c0DJMOIGMJx7ZoXtIFPte6hrW0RbwDmoPRxXclmrkSKVxAxnZhXxuJSFRj0QpF6ad5Sl0ie5VXMnHRVQ3Tmd7U/8ln0bthOLxIYYkxoKVg6819lAmw26PNDb5LI6JR+XHVGEuAneQoTACQTjZEffmxTGp3C+qoi/zvsjlyz9OG7vLl4+8gKFaugYvS7pILJV8O1cmKUf2U7FyJ1XObZhNfiobr2AWGJggeb1jgl00ccEpWmIs6Rh+1MrYaHayirzLUxvWUTjb+YNNtKYZVE7geEUgVUbQGsdcdwCwblALFEKBOMgkUhwRAryrXkP87EPfBopleLVXffyty2P0xaLsTsFITMMX9RmePRj+LmZox+5rhuAQRtBpYjT3lOIP+IkR9/K+bYWHu9YRlzKFDh/bxY3JF7mptYJTMaFR+FjodmN3Xxyeq6BaeOkgjraGzzYy06dJZ40tQw3ySEGCmW/owkQ8cpCaCod/SYFgrOEEDiBYByo1Wrct/WQZcoC4M5/X8D6hvUEU7DGDFdlQdlIS4xnQLOvNKPy93MhOS3XXTYwnyKOFm07xTmNFNPI0Y6p9PTFmVu4nh0tq9nfNpdKh+wEUu0vZU98H/cpjhJOHeVgHG7RgKnHyvmpiSRQUabtzOi7ZV/dEAJ30izw8K/k16k4VsP5L53JRyAQjIszWqK86667UCgU3Hzzzelj7e3tXHvttbhcLoxGI5dccgmHDx/OOC8ajfLVr34Vm82GyWTiiiuuoKWlJcPG5/OxZs0arFYrVquVNWvW4Pf7M2yampq4/PLLMZlM2Gw2brzxRmKxzD2C2tpaVq1ahcFgoLCwkDvvvBNJGn5JRiAYjRPiBrCo5Dx2RqBUDTfnnDtxA/BFXBnv/9EDvwzAh4aY1FXYDtLcXQbAhPx6svRBtre8nwVF64glDaRS8ozLmnLyD30ZfXEdCuAijZ5H/LAhGeAnqWryc6spyTma0Xfw0CuDLyilBv6efAN8LAQf8cNHuuHDnfChDljx79O/eYHgNDjtGdyOHTv43e9+x8yZM9PHJEniqquuQqPR8Oyzz2KxWLj//vu58MIL2b9/PyaTvDxy880389///pcnn3ySvLw8brvtNi677DKqq6tRqeSErldffTUtLS2sXSvH+Hzxi19kzZo1/Pe//Znbk0kuvfRS8vPz2bRpE11dXXzmM59BkiQefliOtQkGg1x00UW8733vY8eOHRw6dIhrr70Wk8nEbbfddrq3LvhfpO7H0LkFpt8hL5MZi868T0ninjfvZm3hYGELRw20+OXsIGdCoNeC1RgEwKAKZrR9zgrz9DB3mH27rkgJxTQAYNL1olXK5QUm5O2ltm0pZTm1qJV9XOlqoDJopTGWzwV5LWzqcvJLX4J2XTdVuiRHOmcw1V4DgNvvwprYwYafX0fKXIm5qIopy5eQlTcf5v9SDv7OmQ3qofb6BIK3FoV0GtOZUCjE3Llz+dWvfsWPf/xjZs+ezYMPPsihQ4eYMmUKdXV1TJ8uF0tMJpMUFBRwzz338IUvfIFAIEB+fj5//etf+fjHPw6A2+2muLiYF154gYsvvpgDBw5QWVnJ1q1bWbRoEQBbt25lyZIl1NfXM2XKFF588UUuu+wympubcbnkX7ZPPvkk1157LV6vF4vFwq9//Wtuv/122tvb0el0ANx99908/PDDtLS0oFCMnjEwGAxitVoJBAJYLJbxflSCdxKBeqj9Pky6Huyrzri7SNdeDj47iyqdXBHgZJq6yzDrgmzsqCSpauSDxc2ndY09nmXMcr5JTILq1mUsKXpzzOe2+EopOmlJMxLX0eKvYGK+XAanvm0Wz8ciXGM/hEM3+DEQ6DNzzDeHlKRBqwxRYGqgPVyOJGkwabqYmL+fZErJZs9nWPH1P8Lxx+UQgTF8rwSCM2Gsz+XTWqL8yle+wqWXXsqFF16YcTwajQKg1w/8pFSpVGi1WjZt2gRAdXU18Xic1atXp21cLhdVVVVs3rwZgC1btmC1WtPiBrB48WKsVmuGTVVVVVrcAC6++GKi0SjV1dVpm1WrVqXF7YSN2+2moaFhyHuLRqMEg8GMl+BdgnUqLP/HWRE3gEPdh/AkBsTtjV7YK38FKMltQKvu4xWplZ8nhk94PBI17pUokd33v94B61Pj66cop5FjHZPT7/WaKAVZLdS3z6LVV0wkZeXj5gi/9EwnkRp8vtXQwxzXBuYVvsoM5zbslnYm23ajUfaSkuSVFpUyxWv6P/H/1v0D+lqFuAneUYxb4J588kmqq6u56667BrVNnTqV0tJSbr/9dnw+H7FYjLvvvpu2tjY8Hg8AbW1taLVacnJyMs612+20tbWlbQoKBqeCKCgoyLCx2zMzIeTk5KDVake0OfH+hM2p3HXXXel9P6vVSnFx8aifieDdRUeLl8a6IyParG9Yj5Q1ibLw7PSxFQaYOfBbCpOuj1+UHWeBPsr9PggNISLDsbt1JRIQSWZzPAbVUbApx9FBP8F4ZoC2xdCDWhnDYW1ltmsDRTmNfMYc4MfuvDH1p9dE0anDJKWB3Y3qKPx+xzcga+K4xycQnEvGJXDNzc3cdNNNPPHEExmztBNoNBqeeuopDh06RG5uLkajkfXr1/P+978/vbc2HJIkZSwZDrV8eDZsTqzIDrc8efvttxMIBNKv5ubTW1oS/O9S1/43tq3/5Ig2+7z76HJ3pvemAJRD/JMKpOBgCu7sHinabDB6dQin6TAaZZhgCq4wwaVW/zh6kHGYMoU6kVSiVKRQnSSWE/OayUpMoK5v9NlXbwq6lL1Ek2bq2hZQ417J3epp/GqSBQovG/f4BIJzybgErrq6Gq/Xy7x581Cr1ajVat544w0eeugh1Go1yWSSefPmUVNTg9/vx+PxsHbtWrq6uigvLwfA4XAQi8Xw+XwZfXu93vTsyuFw0N7ePuj6HR0dGTanzsJ8Ph/xeHxEG69XXuY5dWZ3Ap1Oh8ViyXgJ3jsEQy18/dVvkG3U0eUecI8/daf6s1M/i/G1wa7wgVimt0m2CtYWQlPZYFd+SZKXNYcikdLh7S3HoAowSw/fyIWOnqnjvh+H1c0hb1X6/b72ZVTYDmbY7GtbwNfKtvPP9kpSo0wSjUowxZ3Mdm2gyrGD2a4NhJMOoqnz5ByTAsE7iHEJ3AUXXEBtbS01NTXp1/z587nmmmuoqanJmKVZrVby8/M5fPgwO3fu5MorrwRg3rx5aDQaXn755bStx+Ohrq6OpUuXArBkyRICgQDbt29P22zbto1AIJBhU1dXl176BFi3bh06nY558+albTZs2JAROrBu3TpcLhdlZWXjuXXBe4TLHp3O14srmL78cfb97TsA7NkDK1fC449DXzgBvS10PvcZFhc+nXFuPKlilzSF73gqBgmiZYgFDH9KFsChmGSrJiWpCMdzqW+fAcAs15vs9SwmmRrfzkJvIhuAYx2TmW7fPKhdo5RVdr7KwLbo0H0c6pqHJ1CEL5yLlBq4uZ80TcRreoO2yOxxjUkgeCsYV5iA2Wymqqoq45jJZCIvLy99/F//+hf5+fmUlJRQW1vLTTfdxFVXXZV2KrFarXz+85/ntttuIy8vj9zcXL72ta8xY8aMtNPKtGnTuOSSS7juuuv47W9/C8hhApdddhlTpkwBYPXq1VRWVrJmzRp+/vOf093dzde+9jWuu+669Kzr6quv5oc//CHXXnstd9xxB4cPH+anP/0p3/ve98bkQSl471GRlc/FF/2TbFsZx2wL2P7Mc/zylQ6Kijfjf0VHMvYXwqZCSjg46NzmvqWUomCFys8P2ybwKVMHEy3DOynlqOTXUOg1MSSUWHRe8k0t/XtyKmY511PbtoKjKT+TVFnMdA4WrFMpte6nN6pDoZRQq5IZbYc7pjO5YJ9sp1Twt84CFhR6UZ+ioQaTni5/EcmUilku2ZPz4aYqmnV1XBC8nEVf/Nyo4zhjYn5of60/G4pCzpKiMsohH+pxVJcVvGc465lMPB4Pt956K+3t7TidTj796U/z3e9+N8PmgQceQK1W87GPfYy+vj4uuOAC/vznP2fMAJ944gluvPHGtDBeccUVPPLII+l2lUrF888/z/XXX8+yZcswGAxcffXV3HvvvWkbq9XKyy+/zFe+8hXmz59PTk4Ot956K7feeuvZvm3Bu4Qbln2PbJsc27ni2s+z/Znn+ID9CPVTf88NJ/wwkoPFDaDMuJGUpKQiK8XFZzgOf9iKAomeuI2Jxv3MMW6gL6bjkHcWs10bmA2kUpBIqgaJ1qnkmLrZ3vJ+Fha9OKgtkjDT3F2GTt2LPauJa/qyeaKlmE+69qJVyzXiAr1WIqFuokkHEhr2epbTm8zjMuM+LmMyigvvQzHUBuTZIhWHmm/JAnfsj5ltujx4f40QOMGQnFYc3HsJEQf33sZ3ZCc9L19LsWXfW+YBH+zLQqVMYdL1crRzKuW59Sj7Z1R73MtQ6Y9SldtGfftMpo4QSB6OGugO2wnHs8k1eFAqk/h67USSWSQlLQnJSHsqToII5eooKoWCWMpEPGUgiRYtYfKNx+iJ5RFPGanI2U17cikVuXtQXtWIQq0d9tpnFUmSa8wd/ytU35TZprHAvIfBWgl589+a8Qjedsb6XBa5KAWCYVj/5CssjX2AHGv8Lb2uxRBiX9sCpjt2MMFWT417JbNdG4jGNcSkLBbkyo5TLXEL+z1luBMaIpKWSEpJOxGOSwHapBD/ttoJxfNJpLQkJRUKSaIzbmZHPEVc1Y1Rd4Bfh/qoTYaxKmCFqoCLlaWcr++i0l5HjXs5JbnHCfR10+yfijs4kbLCo6hibbBuPqx8FrLKx3+DUkoWLemkzzWVkN+nEnJ7XwvEQ0BKrjensYCif4VHqZFL9Kiz5L/3fhdm/VRO5oxCfkkJ0gmgNVlnJ3ON4H8OMYMbBTGDe2+ydVuI3v9eyvmVG96ya3qDBUQSRqIJE6FEHrm6VsKJbPoSFmIpC5BionUL+ZZOUil41j2PImMTleYuTJrB7o/RuJbDXdOojhnYmuqkOuWhJhnGgpqdZQnKNNAYMvMRb4qdyXD6PLtSyWplER/XabnUJYcZxJJa1Mo4kqRCtfwxWWxUOllkTuyHKZQDf6McfEypk/8rJfuPqeSXUtVv3/9eoZQrhCsU8nGleqANhfxe8J5GzOAEgjPgwV2VhLObmZcE68ghnGcNtTJOLKknnMhBo4igVfdRmjeQ6NjtLyLf0kksoWafdymlCiVzczsy+mjomsjr4WyeSrjxSCGOS3vxnfIb1qpOcMy7iLLCbZRm9fCKRs1HWnN4JSmH7rSnUvw11cRfE/CB4zZ+VRCh1BQC4IB3JtPKRo4RFAjeKYiCpwLBEBwJd/FcGOY2w+7I8HZ1noUE+7KGNxgHuVk+JubXU2XfTEwyYdH72O0eqJTd1VdEW8DB0a5ZzHFtQKlIcbRjGq+3LuC64xOZdsTE5O4jfC66k+eTboKqICtPcb6wq2BdIZxfuC3dt1WX4IVSHx9XD64E/kKik5WeFG90OPlakx3TFU+dlXsVCN4KhMAJBEPw4fLlAByLw5f7U0CeGgR9uKOSKud2emMWaj2LOFuoVSk0ij5Mur50Be8a90pmOLcST+pREOGJ5sUcSPl5MNzDBb07+H3iCPVSmJN3C/tS8HRpmFuz5fcaFPxSX8mEft+QOa4N7PUsI5FUolHBzyxafqWbyc90E1mskkW7QmGgSerlg4E2FkqLcRRmluwRCN7JCIETCIbg44tuT/+dq83CH7byhyB8sQ1i/St+Un/CYYfVzQznNg60zz0r144nVFh1bdS4V1KSvZ9WfzFOSw33NE7m//xhbogeYod+K03GvXzN2cIUxdAzyJAkpw+71ya/nnJKfNi1P2NWONP5Jvu9sjh3Rcu4UJ/k6yVHeKW4lxs15dSUxngkHwKSxJ9Sm+hydwx5LYHgnYgQOIFgCCqKzuPuGZdQplXzm0+s46O/eokiDTwdhru7YWung8kFtRnnRJJnZ6myNVBKYXYjk/J2EEvq2NlTzHJvH9+KHWKD1ME/CuM8mA/fzIVSHdSUhFiiHJwsuap/pqZQwG05cHn/8Oa4NrDHvZxkf9HTKvtW9nqWMsf1BkXZR9nnWYBJk+IXZccxa5J8JRuedsKmZBeb1j56Vu5RIHgrEAInEAzDNz/0Isdvj1PqWsLHL3iT95ugowK+mwvWROZ+VXvQwZS87cP0NDqexEC+S29Cyct+ExptH7W+Sq6P7OBIUl58NCpAd0o8nk4Lmyd08UFlYfpYjhL+M3hLLc0s1ybqvfPpi+lQKqV0RhSDNsJUezV73MvTtu4+NbaEhecLYWdgiGreAsE7FCFwAsEYqJgkO2soFPIrmjJntLeHyzHqRvBGGQXfSclIGnUS3w30cn1DMffG63GftLPWnoRbOyA5RHDP0xNa+ZK6DLsSaktAnzKQSA7vAjrdsYNG31R8oeyM4yplilmuTex2r6IvAbNbFZzXEaQhYKM51XLa9ygQvNWIMAGBYAyc/74U7Bx4X2Q+kP77SEclM51bRjw/FDEiocCsDw/ZXnlSIv4WFOxMpLjV0czt7YZBto8G5X3Ae7I1xMIF9CZziSSySaUSGBUdfE4xhc4OGwmdG4CeeD5VjqFnl1Pte2jqLicaMOCwejLa5rje4D9tRfilFhLAZ3o6mcLpi7hA8FYjBE4gGAuhY+k/j3dOotx2OP1+tFwJh7xV5Bk99MWzONY9F5DkeOeUAgkFCgVo1TEeUzez0mpmobKPfzvgQ1lw++CqUQD8pQf+0hNHTSvLVX0UKLxsSvjwEuNACQSlg5T2l2xMpY5T417ObNemIfsqyT2ON2inoWsCZSfF3QFc4WihJgdWtkBXCoyKwXUgBYJ3KkLgBIJRkFIp/u/N37JMA2ssEIg5AVng9rqXMNM18uytN5HLfeE6Jmu7uM3VCEA8qSYczcLfl09v3IJF4+XfgXb+GWjjE1kmrlNUsK/NShktNNI3bN8JYH2yO/0+WwERCaaclCZSqYTZ/UuOc1xvDNlPgaWdQF8fh7wzBjnPVOqgqRxKjsEs9YQR71UgeCchBE4gGAVv9352h0MstMrvnVmHAAhHjdizjo1wpsyhVCfrY/BbOxzunENC0qOlmwn5BzFqQ2jVcqzb4WzZfnuHhXmB44RTEiuVjnGVAvdL8FMf/G0IB5M5rjfY615KpX3bkBUIrIYgevVBdrtXolbEmZi3C4NWLhBnVMKTTmiPnjf2wQgEbzPCyUQgGAVJSqEG1pihvn0mdouc7HhjxwxyzcOsIZ7EHB38tkD+OyHpmZa/hQn5csmdE+J2MpXmDh4pkPhQFliVI5fCOZVZWnh86GL1AMx0beZgx2x6Y4P39gB0mhhzXBuY4dxCi38S/rA13dYY0VNmmzeu8QgEbydC4ASCUchTJni9GDRKiCSzicR11LbN4TvJ7XxhdH1jRwSe6IGWOEjJ2Kj2Wfoonb1mPmaGh3I1mMb4Nf2gCXYWky6tMxzTHdW0+svoDg+OnTuZSQV1BKO5eAIu/tA6gRcD+dgnTx/TWASCdwJC4ASCUVB1bkPbH3vmyqqn2T+BGY7d7CyV+Itj9POdShVfz4EiDehUoTFd82JFGVeawGl1U6gYvZjnRQZ42sWgStzDMangAL1RI63+4hHtSnKPczQV5da+o6BIkuscYXooELzDEAInEIzCIzv/REN/KFqBxcuk/P3jOn+WtYXJ/U4fWvXY3OxDsdx0gdWZytxR7a80jWtIABTlNqNT9XKsc8qgtlrPItoCdrqTcG2gi6AEJYpicp0jz/oEgncSQuAEghFIJCJ0+A9QeAYlc3KzfBzpmARAb8w8irVMUtLQ7J9Ak28yq1SjJzi+oRN+4Rv/2GzmLgyanow8msmUAqf5KEoFfLIpm6P94l6qnTT+CwgEbyNC4ASCk3h9y8tcf9+VAwean+dWnR7NGX5TEikjyZSSWGps+So1qhhdvS6C0RyWKFWckp0LBWBXDMQCZClg9WnM4kBeBp2Yt4e9nqUA7G9fhC2rk42KdtYl/Gm7CZbZp3cBgeBtQgicQNBPt6+bW175EJfP+xweD/zivhCvvngtX+/pPOO+p9r30NA9haSkHd0Y0Cp6KDTXU+XYRrH1CNnIU0gVoEEWuHZpwGElJMFfgpAaR0jByWjUSWY6N7O7dRU2YxMAu6InjQewGAtOr3OB4G1CCJxAANz2i6uZ94iDeakreOieKykqgqbXfssSc4ibs8/ONUxmPYXZTWOy1auDtPZMpdazmAJLO/kKAwogCcSB1BDn3OODz43Bq3MklIokTquc4st80tMhBmxs/jPhwNCpxgSCdyIi0FvwniaRSPCTP97G/f6/A+AL+1m7FhSKFDdf8iD1cVh4htmpAkn4aTe0J3fz5zF4XQJY9H4q8uW0WXs9ywixc9R4bwWwenSHy5GvqxtQyG/lgkMN17XLGVN+FHuNtl8u4TNzH2T+Jeef2YUEgrcAMYMTvKfZs383P/Y8lH7fqZdTaUmSkkeqL+K8FvCPL9Y6g6buMo63L8aphq6kglHSVgLQ6iuiLTSRhq6JAHijGnqk6Chnwc9tcLXl9McKEIhmpkC51gIvFUK2EqLANmUtHfu+xOsPfpseX8+ZXUwgOMcIgRO8p3n8tfs4OZdIl7qVz30O7HY4v+pVrrVA9hl4UPoiRUzN383iVCkeTIRU0whFhp5mhSJGatwryTe3U+Xchj/q4mhnOT9PHGI0KfmqFW7NPv1xnkCrHLwEeb4RNhXB+QZYVwiLLZ1MN/yBvY9ex/Znnj/ziwoE5wghcIL3NDd9+C5uy7maVWp5tjRZVcwf/gBuNyx3xPll/pn1X2g+iF4TRR8tZRZWzKkDHOkenO4qlYJG/3RmuzagVccJRbJoTmq5JtjBOsk94jU+mgUP5pOOmzsTKh3V1LhXkEpldjZdB68UgiJqIRCxkUopmW9/Blvzbay/72a6PV1nfnGB4CwjBE7wnqasuJx7b3yCH1zwGwDmFlwIyOmufAHNGYuGJyRn31cqUmTrlBz3llFZsAW3ryjDrrZ9GdMdOwCob6vkHk8Fa6KvsC05cuaTlQZ4zA7KsyBuJ5jt2si+9oVE45kenwoFuHsmUpZ3BIfVg04To8J2kIW5v+XRP1/Kxn/+6+wNQiA4CwiBEwiAVs8xShVmvv25ewHoaPFiN488cxoLauUJV36JiCqBydrC0e7ZdPSVZtgpSBFPqHmqeQXf6u3gx4m9BIbYrzOg4NuqCvQKmK+D/zpBfw6+xTOc22jonkqwLzMwXaWIcbRjGoe8VeljoVgOAeN2vnRoDX+47wv0BnvP/oAEgtNACJxAACRaj7BIMxmlSv5KfP/Jz/GR5ly2dhXQFRlb7NrJuP0uatwriCZN7Gy9kHhKxyqDAY+UYFrBTkqsBzjaMZAiq9S6jxuai/lYZCP/SXbwfiN8IwdyT/mG9iHxJI380mLl5UKwnMH+4GhMse/FEyzPODa5oA6X9Rh6tSxi244s4Lh/Ft/Jk5huiPJ/oT9w68NL2fHCy+duYALBGBECJxAAhGqo0kzgxfXPsmHbaxRlT2NHqoufBCW+01A47u4cFjcWrZfZro1ka91olL3oYlFy+wXJGy5Ol8w5HtIwz53gd4njpJDLv73UC/lKqBxCWxuSSYxo8fnObeqsvpgOpWJwxJ1BG6W5s5BazxJmlh5gUfFajrYv4k85Oj6iyefPib18adeV/PXezxPsCp7TMQoEI6GQpLE4Lr93CQaDWK1WAoEAFssZ+mAL3pEc2rYX3fYPcTh1NRfedCcAqWSKyp+aOJiK8GdtGZ8pbRh3v8c7JxFP6SjOPoxBG2VTbym9QQVF5BFP6ZFQ8WLyMN+LeEgix7GdKiefzIK/n7IN94cC+JwVeiJmWgMVTLXvGXTtGvdKSiy15GadRoJK5HyU9d756X3Bk+mL6QAFBm1m4uga90pmuzbQEDJzX2ce/0228GHVDK6Zex/5pWUkEwnKZoh8loIzZ6zPZTGDE7yneWnDc/zs1TUEonZWXPft9PHbf/U5DqYilCr0rClpOK2+y22Hac2q4xehKPvbp5KrbGS1o4FKRzUpZYDP9+7ljoiHBPKsLQWcuuJ46hf0zlxZ3ADM+h4q8vZT61mcYbPXs4zZrg1YDIHTGjdAXduyIcUNoK6lapC4dYfzKM/ZDUBZVg8PlzXwU+1MfhHfzVd2XsGu534kxE3wliMETvCeJRaN8c03PklQt5eQVILOqAMgFA5xf/dfALhKlzNuD8WUJL8e9sNH3PCIH+KSksbOefxfwySWHM1lUU8duyT/oHNPjSlPnLS+8kULfOeUyjladZwZzq3UuFcCsK9tPtPtWwhFslCrhkroNTo17pXMcm0atn1BRTUbDqwgGtfy5sGlROI62ntcdIcH0rTUehZzdfEunnNBXTLEd/v+yY5nXzit8YwF76aHYcNV8IwL/mGA1ufO2bUE/zuIVF2C9yy3/PJj7EmFuCMLEprz0se1yQDfsJbjicb5urNlXH2mJPhUGyzWQ3Uwm3t0xUyUCvhEaDv1Ug9aYJIGEmPUnoP9pWouN8EvC4aPdZvt2sBez1Im5u1GpUwRiprJ0o+tuOrJ7HEvZ7Zrw6h2K6dtpKXLxbIpmznmLWNKQS0bD65CAmJJE1PydwJwiQm+kQs/646wYf8dTFu1kqzssVVUGCtHdu1nQuNNoDjp10BybHX3BO9uxAxO8J7kF0/8hD/0/Ac9Ss7X6Ciad166TZto5ycFx/ljcQuF4/wJ2CvB/EQZFyfL2Cz5Oc9eS446yiK1iRIV9E2AujLwlpNRY244Z0h3Qs4v+aQD1KPMJGc6N2PU9gHQlxi/iOxrm0+VY/OY7Yvy5DCKioIGlEpYNe0NIlENSUmJVj2QH+aLGge/LkjxYKKOjX+9d9zjGg3vwVoUCuFKIBiMEDjBe4pgMMiH71rIt458lygSq00pgqESymdMTts88Oqt/OmU7atgEl4cJZH+1q4CbmhycHNRA1NsDewugYlaiKWM3GnRsj3PhrL/G2dTw7EymKuVy98Ml+4yVwX/cYJxnN/UWCIzHZjsGDI8+9rmUZ67D5Xy9JY1T1BZuJ98QyO7W5cRickuoHmmDj5sVBBVJPlX8C8c2TV8RfRuTxcb/vAbNv/t73iOtiCNUv+nN9iLpuUvgxsU4tEmEAIneA+x72Ad0x8s4P/FdhDpz81/lTKfRuljKPo32qR4iH8e38ibp6xwWVRwkQG8iVN7hb6Egv9rKOW8bi+Pxduo74/tzlLK+1kLitbR0TsBuzWzrpwaCKTk8jdDkauEfxor8PWMsQTBSSROqjvXHrTjCZYNyp5ygubuMkqyD6Vnf2dKgbWLyoJtHOhYBIBaleRI51xuyYanUw3cv/YqNv5jcNaTwzvrCD21gJWG/2MpV+PcVkz8cR3+3+dQ/8Ac9m3YnmHf5e5k/28/yILCFwcPQiM8ngVC4ATvEVLJFNf8cwktUjTtij9BA5+xdzDB0QCbPgYbP4rixVlsLkzxyBA5KGPAQ/7MY5IEVzXn8Jt4I1HgfQaY1q8tGw8O7GfNK3p9UI7H5a1wdAjBBJigho25DuyGMB29ZeO+30RqQODslnYkCaIpA0c7p2TYdfTko1bFMOvPbmUAnSbBnMKN7G9fiL/XilqZ4vZc+LsDfh0/zFcOruG7d62myy2L/ua//Z2iugWU5B7P6EerjpNt9FNkPUyOS650cHDbHt78+afIfs3O/MJ1Qw9AdYZ1gwTvCoTACd4TvLH9Va7MX5Nx7KtWOYdjNL4fmv4Fzf+G0DEUiqHTXxmV8GNb5rH7WyayLtGdfv9aH3yjUxa+RlVfRnmc2a6NVLsv5qB3Jp9tgy1D+EGUquE3+bCzwEqWZKDA3E5SGnl5cSikU3b1JuQfJBC14zC3sL99LgDBvixC0ex0gdNzQaV9O7GkiZ6QGn+vhYV6cCqhVory49jLXPT7KdS+sZ1Y0DMo9OBksvRhst6YzsEHZzHl6GyWFT5xxsupgnc/wotS8J4glUrxn47H0+9NqFjYN4eaPiP/1h9jQxguNcEnzFCqGVufgaiaB2OZMw4F8KeAmsOxBC9Iu/h3gx0NCpwKA78oPU559k4aAzP5TA78tYd0gPdHsuBX+fLeXF9MR4u/iEkF+wBQKUavBXcqEpkeKYc7Kplsq8ao7WOybQ97PcvQKsNMtdeMu+/xUmB2o1QkCMfMGBQJPqHO4YFYKwC7pW4Wr1/Cd40fQRm6jpWuR9Pn9URMmPUDG58WQw8Ww970+0C8BJOuh4QyD2/IhU6boqNbSyoeRb0fKled81sTvMMRAid417NpxwYufeUSTpaJm3KSLLHJruyFPfl8uxBeCMPXO+E3BaRTao3EdzxFtKQaMo5ZUNMlJXi2F0Di2cRAhezuhkJu0ZQxxbadLD1sL4Zr2uBfTqjqn6QlUwqOdc/MCLI2azP37saCon8hti3gxNtbRpF5YI9NrUoy0/nmuPs8E2xZXva4l5Enqbi/tIn/HB9Ynu0lxe29/2SFwsVfuysozT1GV68di7aLhq4ppFCRlDSUubrRxJoB6GIhxxLbsfpmYNV3UpS1kWRKhd2W4HjnJEKps1heQfA/ixA4wbuaSCTC115akyFu+Sr4Vn/A9JGOSibmy159HzbLr5GIS/CtTviWRcETicaMthxU+BhmUw1ooJuy7J50fNpcPRwoy7SpbVvObNfGjGMuayPJlAKVcuyu8EqF7JfZ3lvBrLdYzE4m0Gem0V+FThVmlmtgHNEhbmWj5GZhl5ZmK6T0JWiU7ZTlHUy3t0dXYFDn4Q9biIZ6mJQN2QW1tPhKqWtfiiQpkFAiSSo0Z6M4nuB/HiFwgnc19/zl62xLNmUcm6M0YFbKs5lwPHeo04blF3643w89vdn4pIE8j7K4DefsD5NUKh7NySIvqwMAb7CAjt5SLNoOinMbgIFcjqeiVcdp7i5L242FLE0nNe4VmDUdYz7nbHKwvYqEpGeyrYaZzi2D2n+eLwfEn/qJeYmxvMHCby1OWuMrUJDCqO7Gbm7GbthIKq6gMzSZcKyAaMciutR+JuQfpIiBHxvHOycxSkSH4D2CEDjBu5rd3ZmByyYFfFMzjc6eZmzmDpSKOD9qnEyj1Mc3jFlMLjgwbF+JFPyhy8Q0VYywNOCFYkU5org5lAp+byphWra8X9fqK0KpkJju2IEvnMOxzklIkhKzpg1vj50Cc3vG+Z0hGxrV+Fz4K2yHgEPjOudsEEuoOeBdPGKqL5D3Og/G4Afdg9uOpMLok01MduwllVLS0D2FY765aANhCq2HqLAdBA4OPrEfSfjOCfoRAid4V1NmmIwitosTK2I3ZcP5tl34wtmE1NNxmg/zQmcPLm2c3sRKYHiBu7vVQb3UhjIJOUn5IWoFegbVADjp+mp4SDeBlfYjAHgCLtSqJHaLB4CeaA7heDaTbHs51lWFOhanqbsCSVIQjmcTTxlBSqJUpnBY24e9zjuBRFLJ4c45o4rbCb6fB38NDg6VUKEkx9BGvXcuZTn70s42YyWe1A2f00zwnkIInOBdi5SSeDX4PEYU5KLFpU7y9Rz5adqZmEFx8jBBRZgrFSV8wtxFjnr3iP1FUzlMUfqIKKNoUkAKehhc4uYEegX8UTub97lqAAj0WkgktemlRm/QTk8smxLrIfSaKJWOah5pLaZKkc8MSwOleUcBiCU0xJOace/DvdXUtY8tj+XJvFgIUxrh5LvKR4/D2obD2jamPva4l/fP2iQUpIikcrBoxugKK3hXI+bygnclUkpi132r2VPRw4ezJDxEuUxhJ7vfO7LY1oZeauNYyM75GjPBUCVWw9DBzoFeCzXulfyo9ACv5WXzb835VCpygOHFDeAmbRHvK6wBZNd/b6g4LW7BPjOBvlxyDW1YjQN5wT5sb2a9bhd5WQNrd1p1HJOul8aud265mcPeacxwjG3mdjKTtHDVKTHZkxSjePqcgkbZx2zXBma7NjLL9SYqRQSjqN0oQMzgBO9SJEnCqO5CqYS/OOF692ymZh9l/f6VZNsMzC54CYC8ZBk2QyPFOTXpc3e7V5Kja2VfrwOHEpRomFO4HoAcox9vb4JsxcjB18v0cHexXIngVNf/aFyLO1hOJJnNJGvmkqhTDT/Ig3/1yEmWrSeFK/TEC3g79tVGIxrXoFNHTzvw+o92ePb4wI+FD2kcwNiDz1PSqY8xJaYc62mNRfDuQszgBO864tE4W+/7ODplmFT/UzNf24vV2ENeTgwD7aQkeY+m3LoHpSKBPyw/EFv9hUyx7aAs7yibOMhO05vMdq1nY+tidnQ5ONi5iNmuDWk3/KGYoIYNhQPvTy4emkopONQ5h2jSMuRyniTB3wKgY0DcwinY0gfDp2R+eznQsYSS3GOnfb5VJZcQAvkXt18ZJDKKVqZSCva1LWBf2wIiSTN1noV09sj51SRJidWWfdrjEbx7EDM4wbuOrU8+zvTs18nN6qLZV0osYSCSNLPHvZxpBVvTpVySKQXNwUoM6iBGTS817hXMdGxCqZTY3zaPHxdVUxuT/RWWObdS7Z2CkjiHvDNQMfReWL4S9paQrhpwquv/3rblaJR9TCvYOeT5T4VgWxQeOCkX5u8C0JqAG/Vy9o/OHhtdvS6m2PcO2cdbyRFv5WktTZ7M9uhA3Ts7Wh6IHccWgmtGWGXsixvTPxq6QnkcDSyhMWilORhFoUii0Yk9OIEQOMG7jPotu5kQ/h652V0AFOcMxEftaLmEJt9kQnEbSkUcSVIwyzUQRpBjGgiwnphXwxOtVayy1wFwuGsWXdkxlME2Vhcch2NVg65tVkBdKRj7Z157PMsyxO2E2LX1e1KeiiRBYwLuySOjivjN2fLxEk0TDZ1ltPeUMb90A3WeBVQ5dwzq560iEteiVfedcU7I+TqYqIEjcchT6HDqetgbg2tGOEelTLC+F37UDZWJPB6+479nNAbBuxMhcIJ3DQc278K5/wKys/2D2lp8JZRZd5JvltNedYdyBsVLvd4LBgUUqeHLbhVm9T6e64CPmmGhys9crQujqwdPl5ONkjfjXA2wtQgK+r9R+9rmU2UfCHDe61nKbNcG/GErGtXg3JKv9MLaEHzMDPpT0oQpFFDWPyHpik7AaTnCroY5ZBmHz5ryVlDfsXjcXpOnIknwRa8sbgBXaPL5Wl4KvW7kUO2UpOTv/T5Bk5Viv00wNGe0B3fXXXehUCi4+eab08dCoRA33HADRUVFGAwGpk2bxq9//euM86LRKF/96lex2WyYTCauuOIKWlpaMmx8Ph9r1qzBarVitVpZs2YNfr8/w6apqYnLL78ck8mEzWbjxhtvJBaLZdjU1tayatUqDAYDhYWF3HnnnUjSO9fVWnB6HNq+F8e+C8k2+odsb+udlhY3AHfPZPKyujJsVhlgvh4+25xDVXIify5Q8XcnXK7XUZrbiCJ8DCNuXko4eT01IHAqYK0LKvXy+yPeyozioQfa5zItfxsgx70lU5m/KyVJrgv39VxYaBjlRiUw6ULMKd1NZyizpk9Tdxm73StH6eDscLB9JjMdG0c3HIV/huBPQflvLfCFnG5SKR26UZ5MamWCn+QoecYJ81TlZzwOwbuT0xa4HTt28Lvf/Y6ZM2dmHL/llltYu3Ytjz/+OAcOHOCWW27hq1/9Ks8++2za5uabb+aZZ57hySefZNOmTYRCIS677DKSyYFlm6uvvpqamhrWrl3L2rVrqampYc2agXInyWSSSy+9lHA4zKZNm3jyySd56qmnuO2229I2wWCQiy66CJfLxY4dO3j44Ye59957uf/++0/3tgXvQJoPHCd712pyTL4h2xu7KpiQvS39vtazmCrntkF2SgXc2+rglaSPT+a04+/NY4/7POo7FhFPqMk3t/NmYwlf7s6Ml/uWppzzTf1j6S4hz9SWTmx8tHMqNn0TGrX8b7s4twFPKNPd//EgTFCOLcGzUdONry8fd6CMafbq9PH2YAFKRZI5rg3UehYTjZ+7PShvsIA8kxvlGcTkSRI8GpCTTZ/o5RJ1ATrJSI5piPQmp6BVx+kJTsCighTjLyckeG9wWgIXCoW45pprePTRR8nJyclo27JlC5/5zGc477zzKCsr44tf/CKzZs1i5055Uz0QCPCHP/yB++67jwsvvJA5c+bw+OOPU1tbyyuvvALAgQMHWLt2Lb///e9ZsmQJS5Ys4dFHH+W5557j4EE5Rc+6devYv38/jz/+OHPmzOHCCy/kvvvu49FHHyUYlH8SPvHEE0QiEf785z9TVVXFhz70Ie644w7uv/9+MYt7lxDsChJddxkFluGzfHREJpBj8gOyg0axtX5Y279HetEDdWEzdms7cwvXM9u1gUbfRHa0XsKn+uqJnuRg8n8WuN3Zzv62uXT25KFSSukHdKu/mHhSg1qdYq9nafqcsuy9HPLOACCSgtUmmG0EzRiSbxRZjzAxv54srQ+bWZ6BBvuyCMdy6InlE4oYmeHcSoOvkmZfKcG+rNE7HQd9MR3BqA1b1vgrHJwg2b8s+UXvgF+oGbhONQnHOGrTRZNyAN2pte8EghOclsB95Stf4dJLL+XCCy8c1LZ8+XL+85//0NraiiRJvP766xw6dIiLL74YgOrqauLxOKtXr06f43K5qKqqYvNmecN/y5YtWK1WFi1alLZZvHgxVqs1w6aqqgqXy5W2ufjii4lGo1RXV6dtVq1ahU6ny7Bxu900NDQMeW/RaJRgMJjxErwzkVISe/94ExpllIPezJWEe7qhNgrHOqcwJW9gL6w9XD7sMqYvnMuLtizeNJ6HJeXKaJuYX8+90QM0SQNFOZ0q+JUdTLpeJufvoTE4i1hSXqfsDufRG8vCpOkhx9TNTOdmavqXD63GICU5B6numMCrnhLs49gJN+t7aOiaQG7WwGzVHZxEhe0g0+y7CEbyqPUspixnPy5rM11hJ509thF6HDs9ERONvmnp6gunyzc74fenfK2+rJ7Gxa7Bs+qRUCnk7YiUSgR1C4Zm3AL35JNPUl1dzV133TVk+0MPPURlZSVFRUVotVouueQSfvWrX7F8+XIA2tra0Gq1g2Z+drudtra2tE1BQcGgvgsKCjJs7HZ7RntOTg5arXZEmxPvT9icyl133ZXe97NarRQXF4/4eQjePt58/C9kKw8QTRopzaknEh/4IXNDNrzUC/v68jD3l6fZ61maUWftBHVtC9nrWUoypaAlVIUCiWJ1puoc9k7gmeSAR2aZGo6UDbSrVUnmFb5GX9xEffts2npKAFVGBYDZrg3UuJeTSoGkivH3cIJLCzMrHYyFQMyR8T4pDcxgXNnNzHBu5VDnPI53TqXcdpiO3pJxX+NUjndOpCvsOOMCqX8Lwn3+gffTFBouVDqYrO1Fox7ZaSYuwb97IJqC/R2TycmTg+QlhfaMxiR49zIugWtubuamm27iiSeeQK/XD2nz0EMPsXXrVv7zn/9QXV3Nfffdx/XXX59efhwOSZJQnJQgVTFEstSzYXNiaXKocwFuv/12AoFA+tXc3DziuAVvD55jrUyP3kKVcxuTC2rRqmJ0hQd+FJmUcEW8igvsuwBoDzpQ91fGPnV1WqVIoFVFaA1NwajyM9m2nVPD3P7aa6Lf0Y8pGjhSCsYhvj1aVQSrvo1EysCkgrpB7bNdm9jTtpDvt9r5YWHL4A7GgNQfpN4dypPHk7+LPe7lGTYznFtJSPKDP5Y8JRfWOAhHDdS4V1Kcc5yy/tyYp8v6Xvhsv29OrlLB5cpCGqUEW6U2jsVHn8aqgS97ofA47I/qqI/BnwJwQOoa9VzBe5NxCVx1dTVer5d58+ahVqtRq9W88cYbPPTQQ6jVasLhcHqP6/LLL2fmzJnccMMNfPzjH+fee+8FwOFwEIvF8PkyHQK8Xm96duVwOGhvH7yn0tHRkWFz6izM5/MRj8dHtPF65W/YqTO7E+h0OiwWS8ZL8M5CSkk0/vt6/H357G+bx8H2mRztnEZhduaPkZ54PkatvKTo6ZmEI7eGy92woBne6JEfqM3dZUzM24NaEWGWczNKYhzvrsKedSTdT3N3Ec+m5BRZkzRQUwKqYb45TksjHT1FVDk2U+NeMaTNw1EPM6QKTJrhM5O83isLwlBkaTrp7MknEjdwrHMKalWKWa5N7HavSts0dlfgNB+jJ2LGlTV8aZmRqPMsJBTNZrZrw5Bxe+NhbxSu9EBMgqWKLBxSFs+lWinVSMQkCGlb6OgdOQelQgEXayx8Tl3Blc5alhvgs1aYpp98RmMTvHsZl8BdcMEF1NbWUlNTk37Nnz+fa665hpqaGpLJJPF4HKUys1uVSkWqP2fSvHnz0Gg0vPzyy+l2j8dDXV0dS5fKG/FLliwhEAiwffv2tM22bdsIBAIZNnV1dXg8nrTNunXr0Ol0zJs3L22zYcOGjNCBdevW4XK5KCsrG8+tC95BbP773zCrWym3HabSUc0U+14MmhA17pW0B50A1LfPRqlIEei1yLMbhYKfBJI8F4bqKGz3TaTWs4hYUoeEglA8D2/QTgIjZTl1uEPT6YvJqxTP9bjQqSM8YJOzlOiH+dYkU0rqWqYzs2gnSiXMdm1M77udYLd7Jddpi1hTsoV9bfM53FHJb5qn0xXJXGabp4Opw6y8dUcraOmZik4TJj+rhT2eZXSF8lAgsce9BLe/CJ2qF6sxyNHu2eRbxlf0tNVXxO7WFVQ5t6fL+pwJTXF4fysEU7BaaWOP1ItN10OOEg7EIQY8HI7yROfEYfsIRDV86LidpCbIz0qPoTnJr0RfMOWMxyh4dzIugTObzVRVVWW8TCYTeXl5VFVVYbFYWLVqFV//+tdZv349x48f589//jOPPfYYH/zgBwGwWq18/vOf57bbbuPVV19l9+7dfOpTn2LGjBlpp5Vp06ZxySWXcN1117F161a2bt3Kddddx2WXXcaUKfI/5tWrV1NZWcmaNWvYvXs3r776Kl/72te47rrr0rOuq6++Gp1Ox7XXXktdXR3PPPMMP/3pT7n11luHXaIUvLNpqW+gKnI9J//f2+tZgkUvrwiYtAF2tFxCKJ7PHNcbdPU6qMjdRQ9BfuGX7ZdrDNzsOsgM5zZKcw+jVSfQqwIUWNpJSWqy9H3MK3wZT2gStZ5F/CN5kN8UwM05w4sbyCmjCiyZAeCzXRvY61lKIqlij3s5CiSWFMpOL9MdO5mUv5+EeR81nbMzzrOowDHEqt2Olvcz1/kSs10bOepfglkfZpbzTSx6P5PydqBWxpEkcFjbCEeNlGfvGfNn6wm4qHGvIBjNZ07hmce4gbwc/MNucCdhrsJAteTjb84U/3KSXvIFOZawStdFi2/o/UKtKsl/E+2Yhvj8XZWzzspYBe8+znqy5SeffJIFCxZwzTXXUFlZyd13381PfvITvvzlL6dtHnjgAa666io+9rGPsWzZMoxGI//9739RqQZ+lj3xxBPMmDGD1atXs3r1ambOnMlf//rXdLtKpeL5559Hr9ezbNkyPvaxj3HVVVell0JBFtOXX36ZlpYW5s+fz/XXX8+tt97KrbfeerZvWzAOenw9rH/gaxx9aBpdv7Ox/jf3I6VGD9voC/URfOGjWA1BCi2HCfRZqPGsYKZzCxZDiNmuDXSGHSiJMDlvK3vdi+mJ5mHW9/JG0k8SeR/nW9oSNGr5emqVvLIQS5mpbr0gI3ykIreWvQkls80B5g695ZxBgaWDLH2Y2ubpAGw4sIJtx5YyNX8HDd2TcJnrmeF4c9B5N2RDvmr0PajdrcvJ0TWmlwun5L5JrXshABp1kqNdc9Aq+yjMkff2TLpeOsMuOvv36oai1VfMHvdyDrTPxW72MMW2gyzt0PGEp8MPu+CP/R6TBUorVbokl5vkjC8PnuTceZ4qB4smgj869NaBQZ3iB0YbPzvFITQUMVE0peysjVfw7kIhiYCwEQkGg1itVgKBgNiPOwu0HmoisvZiJtjq6Qjm4wlPYrp9Cxs7v8mCa7+DKds05HmxSIxdD3+CxYXPALLnYyKlH5QqKpVSsLdtef/y4AqKzPW09ExDQw8bknFCUpyvl2TuSe31LGWmUw4/SaaU7G9fQCSVQ5a6jR/3dvJNVwszxxFLHEto2HZ0Ic7sNibaj7Lp0AqWT5ZnRHvdSzFrOym3DZS9qXGvoMq+ecR9rj3u5ejVPSiJo1VHKO3P3r+vbT6F5kOYDT3sb1/IjCEC2Fv9xSBJ9CYshOM2VIooBnUP+abWjFp0qZSC/e0LhwyCP12+2QE/88t/f1U9mQtsh7iyf6utOQ43tFr5iDaPNa6BagT17bOYah8889zXNp/pjswk1XVtC6m69eyNV/C/wVify0LgRkEI3Nmjse4IyvUX4bA0s8+7jIm5u4jEdXT0ylk5trVcQZ96IkrbbCrPvwRbkZyKattTz1LQ+g3KbYfwh624eyrQKGNMKtg36BonEhq3dBeTm9WZzigit61gtitz6S2WUBOOmofMgnLIO4M7+1r4XbFvSI/JMd1zdwVSSgkKKMuTHVeicQ0HOpYw07GRA975TMyr4WjXDEpz6kkkNfRErRTlDIQP7G+bQ47eizO7FX9vNk3+qZg0fibkywHr21vej4IUC4peGnIMtZ7FmLUd5Bq9WIYp6gpDfz5ng4d8cHeXgl0FOZi0cZTaHh5tz0GbLOD/Cg9y6m7Bsc5JlOUeSWdK6Qrl0RKUC6qesr3PBvcXWPm1R8/6mAXvbMb6XBb14ARvCU+/+ARP/vcjOCzNHO2awaS8HRzpnotGHWdy/i5q3CtZVPQfnIpX8Hge5PdPu9h870K2/PwjTPFdSzRhoMa9HLUqSThRQDQ5OGljKKKnVmollYLehDVD3ACm5W9jzymejfu9S4dN8aVXh5muHTocYCx4g3Z0ql7KbEdQEuPEKqxOE2e2awMHO2YxIW8POk2cSscu2oIl9MWNOK3N1HoW09FTwLHOyWhVEZzZcqmcbKOfqQXVBGIOjnfK3oNqRS8Tc4avKqBWRijLOzqKuK08J+IGME8P8xR5OCzdbOiYyy9apvDZ3BDXFw0WN4AK22Fq25YRjWupca9Eo4oyy7WJJt9EeTZ6EpJ15uAOBIJ+hMAJzjmvb3mZn+7+NN+L7eHHLTMIx23EEgZmuzbQ0VPE8a5pzHZtYI97GQCL8/aRVCbYa9zBksKn8PfZmOrYg1XbTpY+xDzXOvpSecQTmSmatncu5ueJo/ympYrJQ8Sg6TQxZrk20tA1iX2eBYCclT6eUJNMDf4qNPfl8XTMT/tpJO0P9pkJx804rHKYSmFOC28eyoxVm2avQa8Z8PCdkF+Pw+pBpZSY4dyKp2cC0aSJifmZVb+16jhzC9fjizrY61lMtq6V4/6hH/SBXgtGzcjZeE5UOjgXRFLw6Ta43qSj1rOYS4vf4I6Sg1h18RHPq0+GONBVzmzXBmJJPW+EHsT5+TqcX2pgd+5rbGr9DKGICXPhtHMybsG7AyFwgnPOkV3r+FZeivoyWKLKIo6ezl47+9rmM7FgP4XWY+zxLKPKsRmlMkGpMcq3c+HL2fL5iZS8ARbsz+ChVEosKHyJ2vaBuK+WoI18wxGezirlWschRqIs7zAaVQS330WRZT972s/HE8hMzRVPqPlDrIOdMYkve4fpaBiicS2eYDnleQOxdCplihVTNrF+/0rqPZX0Rkf3WlEoJKbZdw/bPsu5kWgym6LsRuYWrh8UdxeJa2kPlaT364Zif9u8dKWDc0FdDJZTyPsdrZRm16Wrbg/HhvYJXHXMwSciNVwbdrOl9aMkV+9l1RdvQmfUoVQpmXPJ+1j+9T9TnfoZrmmV52zsgv99hMAJzjnnLfoMHzFDb9d8SrVhcrRNxJJGpjt2cqSjEm+Pi1nONznSOZNQPNNNbq97GRPz5b22Euu+jFlbZcGbHO2YCsC//aV8MNhCPGnEqM0smRTsM7PbvZIDbXNo6S7maMcUJEmBOzSVArOX+YXrUCqguvV8WnylALzsmc+TyQaK1fDwyM/kDFIpBYc65wxbbfu8yg1o1EkOdS0csZ8a9wpmOLcO2x6OGtjfvpgFRWvRquXZ0BTbDpq7y/rHAUe6Zg85kz1BVyiPkuwD6UoHZ5tDMfiiR8vddjn5tMUQoi00dGmbtoCLXzYu4JpQA88m2zAoYLGylHk3PI69zDnkOZbCqTjKXUO2CQQgnExGRTiZnDmJWIItv/g8VoW85zLDuY0jHdOIJk1pr7hD3hkUWQ9j1EUyzj3eOYly2+H0+7q2BVSdlE+yvn0WSkUMm6mdXb5pVOg7qbDJXpKxhIb93iVMzd+asRQI8gzN2+OkMCcz+0mNewUpSc3t0YOsS7q5Ow++mTv2ex2Po8Zez1Km5W8bJDA/apjGJ/PcTDQHhjyvLeAkkjClnVZO5khHJeV5+6lrW84s16ZRx7DHs4xZzsGhC2MhkVQN6/lZHYHr2tTcbyrgvPzMCgGHvANLyD0RMy95Z/CLRB2bkkFUwMc1+XxF62DSx14mv2TosAHBexvhZCJ4x7Dxdz/HojhCafaBtBv7xPwDTHfsxN+bTX37LBQkBonbYe+0DHGTyfRKmGrfgy9WytFeKy9qttCoPY7HX0giqWK/dwl6VWCQuAHs8y4ZJG4gZx85noqwLik/lH/cDd1jnODsHqejxkznZo50zSIUGcgV+dOmiXwvfoCLvGG2dw9+uLf6iuUK30OIG8DE/P3s9qwek7gBzHK+yR73cpKp8SU+aOiaQKDPOmQ6sudCcFmrgp8aHIPEDUChSBFPqHm+eQk3eHK4JrqZTckgF2iMPGuaxhNlHaQKbhPiJjhjhMAJzim7167H1LuJWa7NWI2Zzg5tAReBvjwkFEwqODDo3IQk773d1Q3H+jVqUl4NO4Mm9sl5kznQPpdFRWsJ65v4TU+Kl2MxjLogjd0Tme3aQHH2IQ55qzL6DUeNzHAMLwDrkwPJe6crrJgY/eG/17MUnbKHcHToOL7hmGbfRXuohM6ePI53TiRHocWkgIZUgst8Xp5tHfAa9AQL0ahio6bPml+4Tp6JjlG0Zrk2Ue+dTywxtro9xzqnYNCEyMvqHpSObEcErmtX8BtjCZfYh04m7cqu50vNRXwosoXHEk1MUat5VD+dl0r6uNR1gOrWi1j2qU+PaSwCwUgIgROcM/xeH7mHv0Ce7hj+sDWj7XjnJJSKBN3RQqYNUYKlN6oniYmfNs7mWETFq33gS0JCFeP+Lgt/7ZH3uwxqWTSnGpKcb4DbrGA19DAhX16mNOn6cJgbONIx4Izg681nj+d9GeV1TuAN2nkzNTCz25YK8Et3Ob2xwWEJJzjQPpdp+duodOymraeIrhEyhwzFBFs9DcG5mPV+PmTt5ve6meQrFXSkJD7V18yjDRX4+3JJJlUjFnY9mdmujexrX0Q0PrZSMtMdOzjcOYf+lLFD0hHMY7d7JaW5h7CfNI4TZYDqovApj4qHDKVc6WwcdH5nRM2HjtmZ0KjkT4kGbCr4oXYymxwavlC8D5VSIhw1UnDZb1EoRSo9wZkjBE5wTujo7mDlb8sozjnKhPx6NOoEe91LqfMspL59NnkmD919LmY6Bi/ptfiKOe6rosfyJnfFa7DHpvEFC7zZB/ObYKHawP9Zoa59GWV5R3gpDB0J2BWFK9vkQqcnYzGEyM9q5linnMe0q6+IuYWv0eSbxIH2ORm2OwMTqEkOxM991Qq3FB3D7S+nOzx4M+5ox1SKrfXpfbQJtoNE4sZhcyoORa17MWWWGmxZndgtbbzf1sBzubnM1yq4QzuF92UH6QrZM4K/x8IM51aOd0+jJzJylv4TWLQd7GlbmfbwPOSZyBsHVpBMKdhyeDH+vjxKLHWolIO37bcZN3Fdcx4v2ox81NWQ0SZJ8K3GUma3SjyTbCcopfg/bTEbcwv4XukhLIaBz3tH7McUTxvaEUUgGC9C4ARnnWQiyeW/nM1vXUGUSmjqLseg6UWtjDHRVsNUew0qZQqn+diQD8veeDbTHTvpSMKKZAGPJw/g68vi5T6oj4MlqxFjXz6urHpe7ZULmx5NwIsuOSi7QjN4TFZDDzn6dhq6JhJEXu+cXFBHee4+drZeRCyhYbtnLj+M702XgvtoFjyQL5dpmViwn3DMjNtflO7T7S/GauggS59Z16YwpxmDNsSRjtFjtA56Z5Bj8GAzD2T8txqCLMzpYluJxOezAySiRUzIH7yEOxam2vfgjzrw9oy+n1Wc28Ac1wZaAxNp6izEYuxh1bSNeAN2lkzaSiSVS46xO+OcZBKubNay3W9jy8QuKsyZweTbOh3MP27knlgjrakkH9Hk8qqlnF+VNlORnRl/Ude2kBWfu/G07lMgGAohcIKzzvy7K/hdoZslBjlDhtPSRGP3RKYW7Ew7fJh0vXhDg6ulH2yfyeSCWgCuyIIXpnh5WFfC1s6FXG+V67HZNEkae2ZiM3dSqIZf+OEBP1Tp4NNm0A6zupWT5ces6+ZAaiBziV4TY37hy6z3rOK6vv1sT8rVv1cZ4DE7qE7qqzinEa26j2OdU+gO5ZGSwJY1dLHNPFM33dESDrTPHfZzauicgEqRpChn8HIegFIBBZa2M66iXWw9TDKloql7bDOjFArC8WwcVnkZ0pEtB6vPcG5lf/sionH5F8T2PljUmMVXTBr+UNaZ0Ud7n55rjhfy/3qs7E/1skyt437dBP5V1s0S++DCqfGEGu2K36PSqAa1CQSnixA4wVnlmkc+SImuiUrtQF5IjTpJue1wRh7BIx2VlOZmJj1uCzixmVoH9TnXlKAq6wg9Hat5zWalKmFDSZIDMfhBlyxoThU8E4JfBqCqEf7eA0MVKMjL6saRKqY7lJM+trZlMf9hJ9+wRdAqoFIL/885dGkcW1YXBVnNHA/MomgIL8wT7Gy5kFn215iYt4e9nqWD2tuDDnri+UzM3z9sH2cTp9WNRdfNYe/0UW2nFNRSnNNIrWcxiRS8rwV+2j9xq3Juo76jks+6NXzXk8e20hCrc8Ppc3viKh5srGShO87fEq1spJnnTBN4rSjOLSXDVwR/0387kxfMOOP7FAhOZmxuUwLBGJjzk3JqEg18WzsJpGMoFcPnuFIrI2jVA+3HgxYi0Swm5ckPwVZfEWa9nyxdiI4+OWVTCU3scS/ncEJFqVJiZTN0puCDJtApYLoOXCrZGeW3AbjUKNdVO5muUC6Lsg/QHi4nN8vH081LeV1RywNFPWgUUKKBMjVkjzCRyNL3olFGhm3f7V7FLMfr6X25mc7NabEHOX2WOzSFOa43RvtIzyrZpgA6TYR9bQuY7hg+dyVAlj7EdPtW5jRo2JuMM1ULrVEln23KI6Ro4S6bllWuzNnrPU0TuS9+FJ1Uj0Gp4BuaCdxoa6cwa3hhA7mq+uLP33HG9ycQnIqYwQnOCvN+MoGaRAMq4HrnYfa2rUiXoDmVg+0zKcvLTB/1f11q7o604+0pZI97Gb6oC5VSYpd7dUaeRKuujWKliQVFb7BKKe8rPRuGO3LkCthPueAxB8zXwaVuOHBSCJwkgdXgp6O3hGn2XfyucTl3Jrfyc5csbgArDFA8xB7eyexxLxv23mo9i8jTNw4K3pY9DVcQjho55Fv8lovbCQzaKFMLdspVzkdAkuDGTjiUTPI7Sy43pmbx+ZY8fl3YzeaJXazKDmfY/6ZlIndEjxCUJFar7byYk8c9ZUcpzAqNOqZm2z3oTWMouCcQjBMxgxOcMd974hvsShzDrIBNRUBfKTMdmcl7d0fkGZZWAUkpU0H+6S6jLtmIWSfR1D2FxRUDmTViio4M27beKUzOlcXlA9osnkq0c70Vppzk8b9QDwt0sDEC5f3/wqvbK3nZn+J92nxyjN38oXEBt8U38e9hliKHo8a9itnDiNMh7wzspuP4IwW0+EoH7a3NdGyixrOcGQVvj7idoDeWhSQpqW69kHmFrwxqDyThHh8cDufyX6uBCwtagW7WDtPfm50OvhM9yhU6PTdqS3jfKLlAT6bWs4Qlt3z09G5EIBgFMYMTnBFrHvkgDx95kMV68FbATD24rI3sa1+StpEk+FgbfLbZwtGOqVQ6qtNtPX0G/hRr57v6CdzQN5sKW0O6rdq9lD/2+Pj0wRIkSS76aVR1k9tf3maN4yiXqXP40RBhZwoFrDTI4lXjXkE0q56/6uuZXLiFl6IGfpDcySWmkZciT0VOwzW0ODV1V6BSxCiweMk1tJFj7BxkU9u2jLmFG2n0TSbQ99akfesK5WXE5cUSGl7vdlLl2kBZ9i52tF4yqJLCzR0QCVfwUnl3v7gN5mB7FYFeC+19en7SE+M+zUJ+ri8bl7gBKObdL2LeBOcMIXCC0+aWP36Zjd3r8RPnWpU9YyY0y/Ume9xLicS0HGidxo9Vc/mZLUFpbuYDsME/i587+nhecYTsLCUFFnnGVt8+i8m5e/j91AYem9JEMGKhL5nNTNeW9LkaFfzJpsY8VFGxfura5ereS00pdjg1/MZTxV2JnbxQKPEvJywa48pYrWcRM4fJfuIN2kmmlGhU8nqozdxJWzDTQ7TGvTKdPmtKQS2+XhvtQcfYLn4GNAcr++Py5CTS+71z+X7iEFe5QW/oZmruG3ytqYzqtklEU/BYEI71Wbi3ZOgKBPvb5nLIW8UUex0dvbl8z13Kt9WTuaZwBxML6sc1ti2tH6XqvMVnfI8CwXCIZMujIJItD83G2g2senoVEmBRwBt5eRQodLiy5dyD+9vmkUhpydU34YsUMsO1fVAf7UF7RkYMgD3uFczqz+cYjho50jUXk6aT7mgF5dYd5JszlyxPdt4Yjj1tK3EaDtIaLmFxeAevFcGy4ROTDCIa1+DrzcdhHZxXMdhn5nDXfKy69gyPyD3uZcxyvTno75NpC9iJJrIozRvZCeNMqXGvoMiyH0/PJCbYt+JPwSWtcszgLdnwiTbQAKsNkBV38oeidkya1KA+cvWtlJxUeieVgj2BbB4MGPhFkYfscWx4HO5TEZq1mTnzR66qIBAMhUi2LDhnJBNJLnn6fMrU8J0cOFoGs3O6ACXtQTtN3RVMstUw3bGNYMwxpLgB6DVxDnkHXMMjcS15hoFsHSZdL7Ncm1AgoVH0ZIhbPKHuXzKUxU2SIHHKT7WOnnz2NM/BqGhHqUoST+WgUcixdONBp4mTTKkGZSeJxrXs7zqPeUWvD3L3r3Js5mD7TPa1zafKMbRDisPaTiBWML7BnAazXRtx90ym0rGVFS3wXBg+lAXbIvBFLxhQMFVh4TKFgyfLPYPErc6zgNmujRniBqBUwpwcPw87uljrGXtaMIC1XVcKcROcc4TACcbNL59/kF6S6BRwUw7Y+n+5u7JbCEVzsJnc1HmXs69tScZ+26lYDd3YzQ0E++RUUoc75xEwNhI4JXu/L1rMnMLMlF77vEsyMvc/5JfjtU4WubbQRGYV72aS/SC2rE5cpnpcSg3XtkNsnOsWhTnNGDQhjvZnJ0mlFOxtP5/FRf+lxr1yUA5HlVKiLPcA5TlDp7YCONYxmYqc2vEN5DTY61nKTOcWVAr4lBm+5IUfdkOBUskt6om4i5XsnRjky4VtQ57/SmLk/JcWfYxPFG+jzrucRFJFXwqCI1RgeLLLxAc+es+Z3JJAMCaEwAnGxScfvpy/7fsmXzJDTwpu9YL/pIfZhPx6jnbPokB/hJlDLMuditXQgzs4gT3uFcxwbuGWTpjYCL/2y4Ha1a3LeEq5I0OQmrrLKbMOFBQNJuEuHxyKQ7hfaBq6JjDdnlkw1G52U4iJPmnoIPDRyMvqxmFp4ED7PKo9q1lQJPsVznZtYL93IX2xzOTNOk18UAmgE/RG9Vj0PrL0o7vRnwn72+aRTKnTlQVe6Pfun6cysi43hx+UHiFbP7waxRJqzjd1kRghCfMJ5hW+Rl37MgzKwfGHJ+hNQXXqSiaUTxzvrQgE40YInGDMfOTBizkWfo7NJUl+44Cf5sLTIVjdKgdXA3hikJsr4cwe2vvuVBJJJTZjK4XmAzR2V/C0Exbr4foO+JRbw2sJH0stAT7VBnFJnjnFEgayTQPFQO/1Q3sSNAow9/+L9kULUfbPnHb1a4xGnaBMYeXZcYYGnIxJ14ckSWgUfRnHqxzbafFPxBfKHlM/h7oWZeSfPBcc7ZhKnr6ZOYUb2N++kL2eZXxNNYnL1DlsKe1lVs7QacZORqtO8EKgEP8wAtcUz3yvVgwfAA/w9aYK7vzi78d6CwLBGSEETjAm3tiznpeC63ijiHTKrU9nw4tFcDAON3bAgShMaIL3tdQhSdA5hkKhhzoXYNb7SUlKSnOPkaWU02Q9aIMpsSkEjfv5Twh+nCsL2J62FUwsyNzvWqoHFXJy5BMe5yf7Vc7WyXt0jXGwK7LY37aY+vbZp/1Z5Bnc5OhaM+qgAUwq2EdXn2vU8/e6lw0bbnC2cPuLSEoqDDo5EXSVcxsznW+CsYWv6K2MJ+Xj10qO0BusGLKt+BTHkirn9kGfywn+01bK5z70DwyGcXj4CARngBA4wZh4te4FeqXBM58VBnitEL6WDbOboE+Cw6leLmg0Ma8JfhcYsrs0hZZ9NPsnEksOPPRUCljeewHX5XnRKmGqDlxqaOyuYHrBYIeNS0ywoxiuP6nk3GzXBnqjerY3rqSpeyLVUXCoYJaUz5Tsg0zIq2WvZ8mgvsaC3dpGtqEDvcpPrWcx8f5CobGEhkRqeA+WVn8hNe4VVJ6ydHq26Q7lkUjB5IJ9HPPNJpWCY3G4uBU2Bgq5xNkwrv7UqhTBaC51bQvo7MkMOhwqQmO2a0NGppSEBI+1VDH5kueZN3X+6dySQHBaCIETjIkZRfMACA2xVDWvf0kxhpwap1JhQqEJE0jJKbNGIhTJQafuZbemEXd/aspazyKURHFZvHw3D75sBWXSgCQpMvJXnswcPUw6xYmvI5hPaXY9NpMbvW8ROiX8PlWPP2KkLVjMTOeWYWcbo2E1BinPPYCEkuPdU2gPOjjYMY+p9j3DntMbszA1fztq1RimtqdJOGrksYCOr0RaOBwDX/YmNnin8nEPVMbL+VHxkdPqt9K+k5Sqi47ewRUghmKGYxO1nsXEEhqe83+PT9xUzdTK0RM9CwRnEyFwgjHxlfXXUqyGrGH+xQRS8jLhHWYr+6UwB+PyzG7uKIHUhTnN2M2tHOmuxK6CI96JeJIJCi372ONeAYBJCQc7F1A2znixzr4izPoesvS9VDm3sbt1FXqFkvK8Vsw6Hy2+EmY6NvCdFiexMThRnIpOE2emczNWXRfhqIUZzuFnZs3dJdhM7eg10WFtzpR4Qs3PvXnc0efmuTDMaIKLWuFLoWbu0JTyQNnxIWdcY0GphFi0Ar1qbE4xSiVIkoIjE7dy1Vd+iFY39hACgeBsIQROMCZ+vuQR2pMM6023uQj+kzuNH9gDfCsHHneMLm4n0KoT3FKyn7q2ZbwWjfODyDHe7/NRbN9IdeuFHOucMmTl7+G4rbGCv7RWMNm5jZc6p9IRtAGQbzzOVKW8FJptCqBWxlh2PI+f9Hkob4DA8MUPRqStdzIV+cOnqNrtXolamSTH1D2szdngz57J/DDSTF+/h2hUgmUqKztLI3zQOXTNufGgVwUpt40+A4zEdawP/IzpN22kcunw9fAEgnONSLYsGJE/rP0t4WiIn+z5Lj/OA/UwP4ksKpgmJXEHCrnLNjYPypNJJJUkUjqudbRQ1+KiIaEhW+FltvM19rUtGjaW7GSSKQUHvXNZkbOb+7sM6DtdPJSsIRyYx7weG5JSy6PxOsrdDm5wtXFbt8TWlOxJqE0a8HSWI5lbMzw0R6PWs4RZzuEzqfRETOToPGP2Kj1datyr+ELRG+zrlAvAApgV8EiOCrPm7CyJWvUjx8OBvE/aM+NvnLdq0Vm5pkBwJohUXaPwXk/VVfGjPI6nuslRQveEwe3hqJHWQAWTC+oAOSHyiZyLY6UzlEd3rwuDuge1KobT6ubLDUXEUPANQw4FpmZys3wj9hHoM2M19HCsYzJqVYx4UsOE/MOEU6BHyS7PahqlTj7atxMlcJvWwW9i7fQg//P/sqqUX1c00tRdjkYVxTlEWq5T2d82h96oAZUUpii3hWDcTiiag1oZYWLeXpSKFEe7ZjLVvntcn8d4kTO6bCQhwSfb4N/9q4hf11bws9Khc0qeDpG4Nl2RfSg2uL/EvOvuw2Q1nbVrCgRDMdbnshC4UXivC1yoN4T152auyYLHnJlt8YSagx1zmFpQTV37MoxqP4XWI5h0fUN3NgTHOydi1IaxmT0kEmr2es+n0vYmamWUe9ttfLOwDfUo+0b+sBUUCg77FqEmQkwysqjoxUF2P2ycyA9ig5fYlMA2aznzC44D0NFTQFevc0SHkSMdk4mnjEyz1wzZ7vEX0h1xjVpY9Eyp9Sxiun0bRxLwo254vEc+Pl2lo7o0im4c4QBj4XjnJMpthzOOtfhKaS97lHmXXnR2LyYQDMNYn8tiiVIwLK0drSz+dSUpBjuXxBNqDnfOpMopP8CNaj8uy9Di1tJdTCRpYmJ+Zrb5Q95p5Bo7sGV1ck0bzNAmsKXcZPnKiaWyubVgR4a4pSQIpgaXuPl1l52mRJxr1L0sKNnIztYLB40hlVKwLzkwNhXyEp5fglKFOi1uAPlmL3mmjozEzxn34ysiljSjVYXpDuWRmzU4YNqZ3YqTc7ssebB9FpNtu/Cm5BCAhpP2EL+otaFTnd3r+3uzyV+ziyPHGmmtfgV94FWiykLmfO5nFOWYz+q1BIKzgRA4wZDsOVLDgifmEAcuNcKv7ANt4aiJ491VVDm3AXKhz+FmbtG4hs5IGZUFWzMy/x/tmIrL0szR7plY9T5uyk5Sooac7Dpec8/n/UWDlzljkjxLuSpLjr87wX8SbnYnQ1ysM9Ib1ZMZ5i2zv30h9dK+9HsF8JRTzmFp7y0EMp0wlEqJWa6Ngwqcdvbk0dlXkb6P5u4SIn4jruzmkT/Qs0xD10QclmNElXE+cIq4lSv03Fh09sXV01NOuVbNxHnTmThvOnDTWb+GQHA2EV6UgkEkE0kueGIxceRqAc8VZrYf6pqXFrf9bfMpzj407LLkgY4lFFv2sd+7mNmuDdS4l9PYVUqu0UuWPsQs12b2eZcxV6PEoQaSWiZo5b6Spyye65Vwt23wr7JnHX18TFlOMQ7qOxcjSYP/WauVUVpSvQP3iFwm5gZ1Pn+hkd/7h/4sZrveYK9nCbGEmmBfFg3BuRkencW5TWjVvRzrnDJ0B+eAtoALg6YHq6EHXwq8J/mQqIFbDdZhzz1dkikl7byPvp7e0Y0FgncIQuAEg/jWLz9LvlJeB/z4ECtPMx2bqHEv52DnfCbaajBoh47tOtA+l9muDeRldVNZsIWdrRcSl0x0RiZi1A7EU812baC2fQXPh+Fgx3wmF+zjHz3wmSGc9jQKWHJKpqenu8tZrTExr/BVIEWefrBjRU9SgZ8UZhRcpyihxWbned0SFmf7maaFb4/gwT/TuYVjXVXUd69kfuHL6RyXJ7BldVGQ1YzHXzhMD2cPf2820aQOu6WdUErOvfla/2VVwE1aJzcUju7tOF52eK7gvFvuI8eRe9b7FgjOFWKJUpDBoR21mFL/4LPZMV4JZNOX8g+yUSlTGPVxJuXuRsFgF/SuiJYH2kv4qFaFx1+IM7sVrTqBJCmZ63oZlTLFztaLmOF8mUTcRJN/MnNcbxB3L2CmS07FdaUJLut3xns5LMd0XZY19JglRQ/nmUNIEvxOsZVf5w329NsdV1GKgQ0FJoqtcs05V44sBNXF8t7eSCgVSSzqVjp6Csg3ewe1Z+l78ffl9ZemGbr+25kSjuqoDRbQkXWIY73wITdkoeJClYPPaiSuyerlApvnnFxbP+vmc9KvQHAuEQInyCCw/lvc6IjRGocrEmVEfBbc0eMZe0yHuhYyOW/bsH286nNxX/wIh7Xwt/7Vsl3u85lhX49KmaIpDvMLX+YvTYv5qH03kaSZWs9CrOqBZc6Tc15u7SphqVbLy4Fcltq3YzrpX+06r5mbe9vJMcPCkJkJ8SJqPbm4zAexmTvTdselPjaX9+FUD15KVSohe4S1jCPeSoqzD+MNuQhG8oYUOICinGaKaKbGvZLpBZvRDJNW7HRIppTc7MnlJekQzT3gVKr4ksbOT4vdKJXn1pnlQPtcZn3i9FKaCQRvJ0LgBGl6fD04jfvIVUGuCmq6s5jt2kAypWCvZzGv4sejCXNPwT5iqmK08UzHit3ulWiVfv4UaSUiwT9DcF0fWH3L2Gd4k7maGJIE9/vhARusKdrGLvcFzC96Zdgx1XkWcLlaT0X+RpzHwdlg5MjEgX2g7/eoyFLCjgiAjq+XHgBgc9skHunO5lJ1PiZVFLsyguM0XOYbu8qxZbkxaCOU5o4tpmy2awMH22fitBzHYugZ/0WH4BtNZfw1cQynQs1H1TZ+X9SGRTN6rN7ZoCvvRhTK08zxJRC8jYg9OAEAT/zn92x47Kc4rSeLlvxQUykllLlbeShST5m6GUUqTCI2eNNKAUzKq2OJ0k6eUoFRAVn+hcSy9vDV7ig/6Zazzz+YL/9XqZSY7XydfW3zBvVV61nMrtZVlOfuY7ZrIw80V5KUFHzRpGJf/5Zfc9jEdRo7P9dNJl8FW3oH1jATyRy+U3KEWO4WOpXdZGl8487D2BHMR6uOkm30j+9EYIp9L929BXh77KMbj4E/JY7zE00pxyoS/LO8DcvwRQvOKg1dE1nyyU+9NRcTCM4yYgYnAOCftffTLDWikwq5sKCZWs/itLdgUoJr2+VZ3Yu9YFfB9miYn+SBWgF7PUtJSSpmOjaiVEp8r3Q/q9oq2BuzMNF8DJs5xFNquNgt9/Xd3IEyK3Xty5hxklfi4Y5KnOYmpuRXA7C3fRXzC1/hjqJDXN62lF3GN9kThek6OBqo4AJnLaUaeL3DRUInP/UbQmZajLtQK2CZAbb6CnBZxhdwHezLIhTLHhTUPB5UygRqZXx0w1E4EIU8DNxWeub5JMdLA9dQNp7icQLBOwghcAIamo+zPnmAoARN0WIOeasyMuOrFPAPB3yzC56wg04JR+Pw7S64xwaF5noSKV2Gd6FTaWKyxZveB1ttgvtsEE7J4haJ6zjSOTMdT3aCcDwbT1AihZZQ3IbdICcx9vSXt5mJEm+PgyMd2Xynz01hB9ycDSttbmo9K4HDdAVmYc/exI4ILNDDnjh81DD2hD3xhIrmwLQzykLS0ZOPWpEg9ywkWH6/G+6xvPVf1VhCw7TLv/SWX1cgOFsIgRPwyT8vICiBSQFOrEwu2D7IZoIW/uUYmHl9I1euDbfXs4TynDry9AMP8mOdk1GQxJmduUd0a87A3/UdC5ndnyXkQNscjJpufNFSJuXtpCPkIkvXTp7UQjgue6mU5B6nrm0hKkWc3kQOsxxvcHHvVJoVXbzZB48EoUy7gYbm+cw1uZnX74EZT6jxESF3jJOQcNRAo6/yjMQt2JdFKHpms78TrHEDCQMfLwiecV+jkUwpOeidSwdL0SVbiCntrCxzjn6iQPAORQjce5ynX/p7OqP+zwz/n73zDo/rrPL/597pfUYjaUajYkmWLVuWZbl3pxdIYels2CyhhAWyhBAC/GB3A6EFCL1D6DUssAuE9O7eLcuyZcuWrDqjmdHMaHq/9/fHlUeSJZeEhCVBn+fRY+vOe99bZjTnnvOe8z21zFPnS8LFZ3P2GpZZBLVWg0U/OXYw3EA6b8Vlnj2cFk1bGY4uLBm3w97NyIBU0DJi2cpzcR3/JBQpN4cZCDVg1U+KLBckPaJYYJ6tk2OBNbxRn2LRlCWub43D/VIXD5Vl8MfcdMYa2F9McZnz2EXfD5MujdP4wrMScwU13lgTi86hUSlJwow6utlIS7B5CLJ5C72NF5eo4o+58CUWkpcN6MQ4AcaoMgRosUVnXX+UJIGt8S8i6qzo7G4WbbmElvIXv0h8jjn+r5gzcP/g9I92owJuUFdytTFPk+MQXaNrsBlmenFnk8lr0cqTBsgX9ZDIOag0DyLPIpcVSjiJZ20sce8HmCbdNZZw8qsMVKcW8C05xd1WFbGcm3nO08Q0qxkc1rDUvY1IqgxJUtNWtYsjvuktWf7dDv9uz/DHwc18tnCQT7t28RGjEmJ9PqTzFmD0+e00QV9oCTnJSId3CyJFtKoEJu04enUKgybJqfCqGWHZs+nJwatHBF4r1nBf04UlwI6NrkAjZllQeRSX1U+HdzNtVbt42yiMJaAspeJT2vkk8g4OZqBRvQBN42tp3nwpl84Vbs/xCmbOwP0D87FvvYNnx5/krep6PqyvpMrYCUCrey/Duc3UaM/dZNQfc5HM2ZnnOALAWKKccLqaJe59FIoqMnnDjH0CydqS+v5QuJ6BIizMaTBq80j6EIeicELsZrggcCrhYJ7lOGPFdsrZR+uEp3aimEWTM1IuCdya7mZzED7mgLKJT/JguJEvFQ5zS1mSa19g15Zy0wsvlj5fB4LD3k0XNG4AkYyNbxptvMo1eMGxjw6vImg5wM22Sa9Qp1I8vqfTsFoH9doiDeXKWmZzQc22zK1sfuPrLjj3HHO83JkrE/gHZfveZ7kv9BN2F4d4ouhjoXsvPaE15AsiiYyRSOIYPz9H38+iJOBPzuf3SRXzBuBEwsxIrLm0bqVWFTHrE9P2OezbWDJuHd4t6K39vCu/lXePVFGURH4VV9REnsoUuVvvYbljjDJzhHJVx7R5lpoTjOQquXtoAXuKMb40Dv813MBh70Z2j2zhqZiZPcUYDS8wjX406ppx7i8GXb41LHXvOO8YSYKfhQzk0hdn3A55t/An7X60Z4U8nQYvKQmGC0rG65YpzxpadQG91f5CLmGOOV52zBm4f1A+/fjbSyJbVlFiONSAQTWOP1bDeLqcWLaGb43DvTM7wXBkdBNtVTtpUqkoQ8dgZAMLy/eXXs8X1HR4t5ArKFamN7iYxRV7yOS1HPEpossVani1EQblcfaPrGMwD7GiwP2GeVznHpyYR8UR3zo6vJs5NrqCYLyCYKSZZbo4X5vo66ZH4F3WGMs8O1hXvZX/lUcpADd6YdfFt6UDlAQTf7Lped7JC3Pcv4wF5R3nXHt7PAlvHNZx7UAZhayZ1WWjdHjPrRxybHQFnb4NLPdsZVsa2nWTr0XTViqtAU5NVCd8wgmXGSdfzxXUmBzlL8ZlzTHH3z1zIcp/QH7xx+/zeLEfUJ7wv+/Ok4qWI6EmllPT4j5IPtnAJ2S4wQc3mKF14kt0JFLDAqdSo/a6miNcmnBQZn6cAyOX0+TYjyDIjMTmT3QOUNbY8pKWdN7AaLxhWvnBf+orcFgyjCVSuNOt3KlJ8sZqpS9bURI4MbaKpVW7GQrXk9T6EdCRzDkpM4zwLs0Cvp4/QQaZuyIafqN24UssoIEAEKAI/DwOy3XTZb/OxyPBZq5xnVuC7IXQN9ZMslCObpZO2Kdz8N5RPfMlB7+p8zEUriWRL2d4PEa7ZyuHRi7BoB5Hp0oxmHHRVcxwRA6S0R7hp5484SL056FJAweiZn4acXKrzkObYRc9OTAIyvs7NcEklHBibq14Ua9xjjn+XpkzcP9gSEWJ+458CIA2LfxvmRmbpMVZtY/+0HycpgAD4QaqXQNUZuFbFZPGDSCec1LtGC79XmZWkkxWVj/NoZFLcOgHS6FIkzrE/uErcBt7SGWtNFd2lvbzx9wIeTvjeZFFrg4WoXSnzhcG0aiLdI1uZJlnO7G0spDmMaTxFdK0eXZy3N9GRFbWmVoEC98uz+Iwxqi0+nmbt50fFyABfC8KXVn4k4cLlgkciZTxxnQHqn5INyldC/5ahiN1WPVjNJaf4JB3C8s9W4kVoSsHezOwb9zD/ZXjRGIN9IfKaKo4CiieqXfcQ5PzIP54LffG0vywuJ0z/t/tE2uLv4rBa81KEs0XwyZG1AO0VSnZqykJPmibmfk6nrTj9rj/+oubY46XAXMhyn8wvvHrz3BKSgJQLVuIxZczmmig07eBemcv8YwdfVkt2nw/JhHeZ5/c99jo8vMmUSyvfo5oVundIkmQLDjRiFlEUabKPpl63x9aQDpvQJLVNFVMpvDLqNColcCpgMSBkSv4VcTKgayIVQXNOiU5pSAbuF1Twa90qzjaFGeRLVLab4WngyuEmtKc/oLSJLXvAoIiRpUijFwEBv568RECcReiUKB8ott3XcVWWvv02Prg2hHIxZv4mKEanWRRwr0VR6ftb9Im8MXqaao4xidqhqc9iX50op7wG1GldhGgq5hkxZQHkeP5SaO+Jw1vH4VAHpJZK/bKKQWJc8zxCuavMnD33nsvgiBwxx13lLYJgjDrz3333Vcak81mef/73095eTkmk4kbb7yR4eHhaXNHIhFuvvlmbDYbNpuNm2++mfHx8WljBgcHueGGGzCZTJSXl3P77beTy00PBR05coRLLrkEg8FAdXU1n/rUp5Dli1e1eCWRSqX4Vv9nsYgi/0+zkIfr47R7trHEfQCQOTm+iaqyIC5mZvpl8xp0syjxT2U4UscCp7IW1+XfUMoY9Ngn39tcQYMsy+SLRhZWdpW2d42uYYlrFwDHog4WVO5iWdUzXKOz0ii7kCQYGa9GLeZpde9hZc1eri3rY//wVUSSDhKZSR3KTxodOBB5oxmsKvjaOGwYgoOZ2c/7ZzH4YnqykPrUBQxc5+zt70pk81riGTueKYXu7xx2cbyY4Uq1gwd0a7hBZ6HVvY9Ky+y922zGGNG8h1ROTzKyiJtUDXxcs4R/08wjHHcxELdTroKbrMr4YTk9LZlkrAiuCat4Ig8/jUMSSBWsc8LJc/zD8IJDlPv27eMHP/gBbW1t07b7fNNTrB955BHe+c538vrXv7607Y477uDBBx/kgQcewOl08qEPfYjrr7+eAwcOoFIpj5033XQTw8PDPProowC8+93v5uabb+bBBx8EoFgsct1111FRUcH27dsJhUK87W1vQ5ZlvvnNbwIQi8W46qqruOyyy9i3bx89PT3ccsstmEwmPvShD73QS3/Z8l/3vwuXNkc0B2lTD4e9m1jm2c5o1ENVlUwF2+EcfdGOB9eyzLP9nHPvS0MhU4HDGARgiWsXnb715CXjtHE9weWUG4dx206VtnX7V9Dk7EAlyjzir+UDyVHmh8t4pCFEoSCiU41zyHcFiyt2YtROGtkycxiN8QlOj65HRmSZZwcD4UYErPzZ1Mx70710FZUHHn8RLhmGX7nhxglbGCwoXtD/xtT0FCZb25zPwH0xDCEJFmlBew470R1cVzLucQlOZVS0C5V82OhBJztZ4Xlq1oQT73gtkYyLdLEMKPL/Mh3sH8gj0cNdehf/pK6mzupjNFFPKG3jawKIYR2HhTifMXhpLyQBpZVPVIJnkoqHN5gDowBuEfrkczTVm2OOVyAvyMAlEgne+ta3cv/99/OZz3xm2mtu9/T4/p/+9Ccuu+wyGhsbAYhGo/zoRz/iF7/4BVdeeSUAv/zlL6mtreXJJ5/kmmuuobu7m0cffZTdu3ezdq1SzHv//fezfv16Tpw4QXNzM48//jjHjh1jaGgIj8cDwJe//GVuueUWPvvZz2K1WvnVr35FJpPhpz/9KTqdjtbWVnp6evjKV77CnXfeifB85eVfxpweOM2zid+hUcOnnXCtCczZ44zkN+Gx7UTg3K1X/DHXeY3bD0ea+G4ySIPs4/dVafpDjUSzHsoN/fiSi0vjOn3rUJHHbVOOlc7p8cc9LHYdBKBrdDVfyHZwspgnI46TKKjYKxWIEeJqrYBOPdN18gaXAlCQDPQGm6m2n+YZdR8HM/AbwxqGChoOyn72FmMclEL8k6/IJ+wijkw9WcnOBlHLLeZxRnIOHszH+FXhBI8lC7zPqvSJm8qfEvCjGPTk4VAWfu9WPMSpDCXNyJa95GRFd/PmQTu3qJdwvcaEigx6dRhRlIlnLJyOtJKVbICMQYxg1oaoMA5Rad1POOlkjzdCcuKJ43OZUV5vrsNhCuMwhYmmrdgMitcZjFeyKdbM3liRBnsACUgU4Q9p+HECmjVQpQaDCjRCAqkoIarmVifmeOXzggzcbbfdxnXXXceVV145w8BNxe/389BDD/Gzn/2stO3AgQPk83muvvrq0jaPx0Nrays7d+7kmmuuYdeuXdhstpJxA1i3bh02m42dO3fS3NzMrl27aG1tLRk3gGuuuYZsNsuBAwe47LLL2LVrF5dccgk6nW7amI997GP09/fT0NDwQi7/Zcmp33+bJip4tc3H2ybCWvFiljLDUYTCpNvmKyhfhlPxJRbiss4eSgPYlRtniTXKPeYc4YSD8WwN7Z6tZPNawhkP6ZweSRbRCBkWuztK+/WMrWKZZztFSeDI6CbaPdv4eVbkO/4qVsqNfHC4n1F5nC85QMqJZPJ6dNoUKsAfdzOabGZx+S50mhwd3s3MrzgBwAYZokXQCwkuK++lIbyYf9XmyRaa6cvasOfTVJkjjKXMNDkPYtEnmA9sAW4P1/PjmJlLTntpNcT4ZGUBlxokGT4WUowbwBMp2DIM36iE03lK9/T+MTce2ynuGFTzOtr5tjXIPOcOUjkDI+MNpAtW9o1cg1EVpqVyL2rVzI7oAL3RWpJM1mjkkLFpJ1VNRuP12AxK0k6FJUCFJYBrvIafDq3kuDCMgL9UBiICnglD7DT4iPjDOD1zpQJzvPJ53gbugQce4MCBA+zfv/+CY3/2s59hsVh43esmVRNGR0fRarU4HNMXul0uF6Ojo6UxlZWVM+arrKycNsblmt5ry+FwoNVqp42pr6+fcZwzr81m4LLZLNnspKcQi730IrcvNXt+/0dc7ORuvYt8tpUQMUJhFSo5hpx10GSbVCw527gBlBuUzLxMXsfx4Br0qhhVln586igeFdxlrGNR5RjRlJZ0wUBOVtL8dJocS6v2sm/4VZjUAVrcB0pzHvGtp8W1iyOhSsR8He2ebfhjLqLJej5k72FzaA+gIVXI8P3IAj5SFsakS/HlMIiJRgzacd5T9RwAyayZettkhuZCrfJzdNSEXpOdpgvZBESSZfji9RjUERBEklkTJp2SeFNb1s8nyuCjeRXf8i3kJ94iKSHOqBhhOJ9BC5xZ5T2cU8KeZaJA17ibRVRSiwVjtIKvaHIsq9zP01mYBxi1aVRiARkVq6sfm3Z/h/OK6kiVCL9JwK4MLCgqDxRqwCFCs1qN2zb5kJEuzNSM9NiHeZvFx8mxdn6YLuM54QQJWXl4cU+8r9FsGS1u52wfkznmeMXxvAzc0NAQH/jAB3j88cfR6/UXHP/jH/+Yt771rRc1VpblaSHD2cKHL8aYMwkm5wpP3nvvvdxzzz0XPN+XC9HgOLr+r9Dq3kWXfx2ilKeMAzjLCiQ1S/BHzh+m7Q/Np97Zy+mxBQiCVBJJ/ulwC7emo7xdrOIeTzeCAPeHKvlg7Un8ycZpc8jI04xbT2Apiyv34I3VozENsEAbpMO7maayQ0gJNV/NRUjJYBELtKnLWWcfYiSxkVjWztVFG821u/j6mJrfxmBHBt4hLaHdrdSvjUarcNt8HPZtZIHz4KzXZNQmKEha5tl7sehinAoupqlC6QSeL6g57F/HU4VxXIY0t1T2AuCN1HCbMA+1mKMoCWRlFRkZZAR+nQvyGn2BFbYTyKgYGm9ikeswsqwYrTPEcm5SUpJ3jEJnDkYKSpNYjxqWapVkEBWw2QAb07V8vjzOYzEPf6CHZm0BzZS/Vpepl6Ojq0q6nmdQq4rYnQdIhmBrcQk/y+bxyhGqxRBFWSKhiuMPjuJ2zXUJmOOVz/MycAcOHCAQCLBy5WQH5mKxyNatW/nWt75FNpstJYls27aNEydO8Nvf/nbaHG63m1wuRyQSmebFBQIBNmzYUBrj988MiQWDwZIH5na72bNnelFuJBIhn89PG3PGm5t6HGCG93eGj33sY9x5552l32OxGLW1tee5K39HpLygdYB6Mp3u8F/+gAUVvWOL0auS1DkOMZBaT71xG6b8URovkHNQ7+yl27+COns3Jt1kgkdXMUMBuF/ysd2n42vaDVxiGObb3mpu1I1OU80v15/mqG81S6r20T26gjpHN6fGWskU7WizNgbVSdo929h9ag0Drh24M1qCxRztOht3O8dYpQccT7Jv+BpW1zzGcX87zQWJj8VPcKyYRa8boR3FGBs0KQpFEYMqxomx1ejEBHX245j1KQCOjq5GlgWWuPdwPLCSUxETRdlIl8+MSRshmHbxlUI37dYQxbyTRyOLyeRSLJSdLPMoUlvpnJ5QshJRkJGBd8UbWFW5lU7fetqqdpEtKvFKQYD+IiyduGdaMUlB0rJMreP15iwpGY7mlK4MowXYOWX5+t9Oh7glkAAUDcl1eogUwTERaqyyeYlmZi/Y3psBuwpGzUc5HYVGyc7y7Bo+OximU9PNWw4+xRteNdele45XPs/LwF1xxRUcOXJk2ra3v/3tLFq0iI9+9KMl4wbwox/9iJUrV7Js2bJp41euXIlGo+GJJ57gTW96E6BkXnZ1dfHFL34RgPXr1xONRtm7dy9r1qwBYM+ePUSj0ZIRXL9+PZ/97Gfx+XxUVSlPo48//jg6na5kgNevX8/HP/5xcrkcWq22NMbj8cwIXZ5Bp9NNW7N72ZANw+PrwbkaNv0OBIHIaBhpbB/Lq58F4FSwBVGQ0GRPg/H8003lTBLIVMbkHG9UV7FYZUSSBZY5D+IyZGiMl9Efa0E9nqe2TAltOgxBVEKenkArdoOX/kgLGjFDQdLQ5lYkrAYiHlpqjrNOD0sDAr82N9JVMLFKP/l5k5Hp8G6mwtDPja4hbpDhc0NNvNacpMu3hjKDj9HEfFxWHwsrjxCMVaBWFTFq0/SHFjCWnkeN5Shum5LpW2XuRUbEaQ5RKKoIxN3IqPBJBTpDWt6idRLPSriECgpqNYe9G8nLeqpNx6lxDCJJArsSOsq1dgAMqhjZvAZRmMzIDE1ZYqsvO8aJ4Bqq8x4+mjyNVlDCj2qgUTv9/lYIBtpVBpbrJF5tzXIoCxR0oJoMn1dZ+2Z9v/ZnFZHlvRkoyNAtjPPVut3sG34Vmyinr+vnFK/8Z1RznbrneIXzvAycxWKhtbV12jaTyYTT6Zy2PRaL8bvf/Y4vf/nLM+aw2Wy8853v5EMf+hBOp5OysjLuuusuli5dWsqqXLx4Mddeey233nor3//+9wGlTOD666+nubkZgKuvvpqWlhZuvvlm7rvvPsLhMHfddRe33norVqvyBH3TTTdxzz33cMstt/Dxj3+ckydP8rnPfY677777lZdB2Xk3pAaVn8Mfp9jySQK/uZxLqw9zdHQlmaKNldVPAyDJajq9G1hUuRetunCBiWfnDm3jrMr4I/HFrKp+giO+9dQyYeBMYTIFPT+JiyzNmbBiwCXqcBl7Oei7klXVT5DOVTDP4eXJ4Y18Updmk/UYB0P20rzHRlfS5nqWnrEVVDuUZAtBgP+oO4V3vBZP1d5p7XcARhKLS7+PZ6tYVfPktHONZZ3UO5VyBbWqiMc+gsc+wje8GxksFLihbqZsVzRlxWZU1mVFUWahYEVrGaAn0MrCyi46vJswahMcPN3OioYOVukVVRGjqKzDCUIRuVjGG0yn6c/D9gzoBFgwRRzaGzNjV8V4jeDBWxzn+5Eitwj12MpOMRKpJZhuQKdKzPrgAUq7nWoRDmchL8PKiRUCp76PanWSjaYAW7/xUVa/85OY7XNlA3O8cnlJpLoeeOABZFnmn//5n2d9/atf/SpqtZo3velNpNNprrjiCn76059O8wB/9atfcfvtt5eyLW+88Ua+9a1vlV5XqVQ89NBDvO9972Pjxo0YDAZuuukmvvSlL5XG2Gw2nnjiCW677TZWrVqFw+HgzjvvnBaCfEUQOwGnvjf5+7HPIx//Ac0upcv2EvcBipLAYd9Gyg2D1Jb1U0s/Q5F5JHKOkrTWxZAvqOgOrqXds5XhcC2pgo1oUc3qqg56AktpcCjJHlnJzDMpSMlwnQlCKQ8e235+EzcQFHrJF+BJu5LUcSb0COBSZVmgHefL/gbMVmVdbDTqwW3u49TYctqmaFmeQa9Rwo9aMcVAqJF5TsWz0anidI2uRScmqbNOjzzsj5RzV2KIP9qVcN4ZTvjbsGgCbLYHZ71+mzFGJFmG2RjmfxOwOFFPne04kqz8KZlEH6mkkbY6RZmk9axggEbI0lUI8sOocm/MKnCJUK2GN/qU+jVHXsPjhSHGpwgSfLF8HFGEasdQycCfISmBaWKtryjDw0llnno1vNoEDRooFEWqbac5GWrHYx/GIe/j8P3vYfX7f4xWf5b7OMccrxAE+R9V1uMiicVi2Gw2otFoyTP8u2Pb62Hofy56eKdvPVXmXiosgRlez4U4M34kUoOMCnQhrhjNcq92KTe4O9FMeIQHRi5HU/40p/MwP76GescxzPoEP4/BHQEYlyE2H1IJF3pNEqshwViikoFoKxZNgI8lYvxk3iAGWc2pUBtucz/BRBWpohOLJoDHdhq1WECjLtITaCVVcLC4Yg/pvJFsQYfNEOF0uOWcxvsTg418KttHtRqGG5Tu1odGNqFR56ixnqLMNEsbhQnOeGsAPxxczkadMKs3dSrYQjJfhoxYuseHvJfSUvkszwSqMYt5CojEcuW0mdLUlfUiCkoSzrsSAxyWYjSIBuoFC/9bH5i1K/f+DNwXgd9O5Ix0ZWHpICzXwnvtcOtEsuVguJ6jeQlXYR4rqreV3sdngv/BlvfdMxeunONlxcV+L8+JLb/cCWx/XsYNoK1qF9GUlQ7v5udl3EZjLmqsinZkNOuixX2AgaSF/6er43XV07/gDaooDYIOKbaGVs9kGcK/WhUPI1hU6rP+J1rJu2uOIMuwK6GjnhD/FD3NZZYkVhV0eldg1wfJFnQki06WT5xvURIZGZ9HpWWkZGy84x60quxEV2ul3Uy3vx1J0rCkat+087vTNcSfR4y83lQEsvQEl/Hj4iDfrh244H3IFBWr0RNo5Qb7CNnCuTqrKin6TWXKvckX1Mgy6NRwrWdkyrhRwgkHh31bWObehkkzzi9dErVGEIQ0cG6JtO9F4e1T/r6jEqzSKYZuqjblWNrN69O7ecKoJKaIglLQt8F+Hzu/NsjmD//8gtc9xxwvN+YM3MsZqQD73vuCdrUZY7Qbz92xezZ8iWbK9f0MR2opyMrCzjxTnLeb4jPGGtQxngjVsFw/RId3M0CpxOCBCW/jsG8j5aoRfu9t4CvZIEmC/Mxgwi3q2ZBv4D8CR5lfKHIlMm6bD40qy1C4ntqyflSiRDhTS13Z6dIxp2o/qoU0rRNGLTvRh64oaydey7Kocj9/KXMykmzlsDdBubGP90i1wIUN3DybksASzVeTKpSd8yGhwuylyXCcaMrGyeASxrO1LC6ffWyZOUKZWcnEtOv8CFkngun8jVejRTiQhR9MKRn9bRyW6aCyUEl3yMDKauV6eiUVDkGkRqeErbdp9vPhvnIeaxyjUn2YXCY3F6qc4xXHnIF7OdP/S4h2XXjc82SsCHYR1FNCYoeCDSx07iGdNxPLlNNWNXt36kJRpMu/CYM6QpEMoUw17Z6tDIbrAZBluC0I95qN2LVe3uDsJ1uEXw1W4jAEGCrYeXr+cSDE434PZcZ+6spCHBtdgUEdo8Z+uuSdncuwxNJmJCazNpSC85lrd1XWYbyJxSDIVNtHsOmC9AYbmF9xesbYqdiMMU4G52NUBamznwTguYSKx6I2blI1kZf0NNgOU5A0RNMWbMYoNmOUoXCyVK5wLtqqdjEQaiCUrS8l6ZyLX8bhFguc0U4OFBRR5R9ZnNxUDPBwCr7dZ+YWbRWBQowmwUKNox8AP3kOSuMANDi7Ob5zP22Xbzjv8aZSyBXY8fMfMG/t1dQvffGbxM4xx4vBnIF7OWNfBiu+AofuAvkcKskTFGU1KuHCGZNjRfhwUJGeCkvwoSAs0cL8vMxY0sS9VhON5Sdm3bcnsIR80YBNO0o876ROqsComV7PeCRSRXcuwcmCmlVOxZDoVPCzyjTHI69mtedRoikbPwmVs0Ej4hLVdHiX0O7ZiiQJnAwupcp8Ypp0WFESODpWD8UqBCTyko4V1c9d8Fr9MQ86MYHLfJonh9fygfQxbis/zfsusF9GglujMV6nKWdjaDVu0wk2Wb1cYg4De8+5XzznAPoveF5AKWnlXMgy/CIOj00q1fHVcXijGX6TUHPmnd5dTLA7fZLVOlhdrEclRgGlEWxILiBJoFXnifQegos0cL0Huwk/dReXVD/MM9vuo37pXRe13xxz/K2ZU1x9OVO2HBZ9ECovveBQlXM5GesWCsXzJxMYBHiXDS41wvEc9BeUTLyv1/fzBauJgmSYsU80ZeWwdxOZooWCrMdjO01b1S6K6FhYqWQT6tRp8gU1omTiI444q6yRaXPYTXGs6lEOeq+mN9LOpapqVlWeorZssOSpiaLMvLITaMTJlkiHvZuJJMtpKD9NW9VOFlXsJyJp6A/Nv+A9SRUszLN3kcxasEpmfloTZ/OFRXf47sgCIsT497o9NNgOUW0fQTVLd4CzkS/yeXKe8zQFyUCuoDnnmO9G4W4H2CbezmgR7o/CB+1wTAiwQrTinOKB78vCdwr9fLRfKbNpTLZwlWpSj1KInrvP31Se/PH3sO/fzOrqhwEoS/0JWZrLU5vj75M5D+6VwJofwLHPg/dhyAQAaaZHFzmE3tzIaLoWt7n/nFOZRNg4YcP8RbjDPtn0tKZsiECskq7RtRQkHTKgIkdetqAWU5TpfXhsAyUVfg1JCkURtUrCZfVzKthCa8UxWmc5LoAka1hd8+h5L7U31MYS9z6Ojq6iKOtY5pm+jqhRF7ii9km2DV5FvbP3nPMUiirGCzJlqjSNFT18/XSMbwzD1Xp47CzhmmTWQCBeQzJfRkHWIen2cbfazWi0OK3X3YVoch4mkTFeMEwJoBaSdAfWzbg+ULy33yXgUY/y/3f4oUkL/2JVyhIOz5N5uz/GsSQsF62MyAkCE58Hk1ig07ceszrCY41jpTnLhM4LdhnY+cDv+eLoh3lk3uTa4BLXDo7uPkDrhlUXfR/mmONvxZyBeyVgmQ9r75++LT2K7N/G1j0fJ4MWTzFAa+IUUrH+oqf9+ixKUJXWAJXWwIzth72bqHEMcCq4hFTBSkvlHmxaH0ORRhrKlWLqcHYe6VwvBu3sHUNFoUC+oEajnvx3xhhydPlW4rGePm8q/3PFPjZP+b1QVHHIv5Kf5YLsl4J8XFdNxtDLUyNL2KiHgWKEctRo8g6O+OZj1IwznvWgFrIsLD9AQ/nJyXPwbaStagcd3i3Py8CdCK6izbPzguO6R9spYEArhGd9fXsGNuhBJ8ITSWXd7TsV8B9lyus6EX7uVhJO7o3ECOegXbRgF3R82NOHQd3Lcf8yYmkLVoOSIDTPcYzeQ90sWLVkxvHy2TxHntrKsYFP80Q+wVMpWKWHAxm4Y0zmhrEv8/kNv7no+zDHHH8r5gzcKxWDm95Mim8FwrzfVcFSVYpE2ozHNru808USTVlJ500luaszLPNs59jocoyaGG1VR+kdW0QiX05RVtPAKUajHuza4XMaN4AW9wE6vFso0w9RlNTkJT2pggOHfhiVUCRTMJCXTeQkE2WmSfHmqd0AzlCmHeM5bwvfyo4zKI9TrYb/qdtLSxGeG/MQz+r5bshEWH2Yvkw9t+pq+EHVIBWqIIKgFHl3eh20eXZNmzeWtuCxHAfArhvhXAyGG4hkqhGFPIIgYdP6L8q4RVNWRFFioWMnwWTNrGN+FFV6+gF8aVxphfP2s0qB1AK81Qr/bIE/JeHb43HeryrDoFa8tkWuwwyEFFFsqyGORR/n8LEDJQPnPTVE7/YnyAUP8PHMAxgEWC5YcasU3cyCDKv10JcHv3z8gtc1xxz/F8wZuFcw9orVfLPOgzupZFqaX4Qs8NPjy2hzb+e4fzmpgo0K42lqHUq2X4v7EIGYkrM+v/w4RUmkw3cp+0eupsm+p9To9Hy0e7aSK6hnSIgViiLHAutoq9rJ/pGrStvTOT0nQqsZk9I8UggzJCcYlGMMSTEcQoZuSTGoqXplvEkF1cVGltVtpzC4jBbTMJGEmzKVmsqz/hos2rEZJQ59keVKoft47awhUEkS6Au1UOc4Ma2E4WJJ5Sw0VypqMH3jK4HpWbIJCYpArUaR4no8Bd+oAP1EZLEnBx1ZeIMZ/t8YWET4N62LBnEh7VXTw52RbE1J9QVAGn2Gp781jD51iAptNxvKu5GrJA70Ksc8yDgfLYN/ndKp50ojDGf7KOaLc8Xic/zdMWfgXsGUO1s4YV9VMnAAORm0f4UMp4CMKMpYtUEsujFSuelahqG0pxTCVIkSMhrUQgq7KTpt3InAUiza0LTatTPMpo9ZkNRYtcq8sqwqdSvQqbOoydJn3sPXpqhraYAK4cw5w58T8OYJL8esCXJ0dBXXlJ2m3BxiWWyc7xcvpcu3loKsQxSKaFVx7LoAR3M6wkWBduDo6EoEinR4t2DRzAzTAsQyNmrsJ1+QxmdPYCkLKyclxSR5ZpKJWYQfVgicHmviR9JJXCp41xTvbaEW/hKy8tUE1OerMamylDv6qLTM7M5h0/qIpmzYjFGiaSvl6k7KxMcwlSew6CdrG1fqYG8W4kj0ZaZ2xINrjfCBZIzekydZ2LLoeV/zHHO8lMwZuFc4C1d8gkQqgjrwCBp1jrQE2r/mQVtQMuYeTzgBiVtqp2s8GtUxDvs20lTWgUmXRKBApXG6p9Ph3YKARKZgo9wcuKAxODa6HLN2vCSMvKh8B98fWsUbygbwJRoxqGPEpyTyicA/meH6Yj0mNMzXpdgWLsPPEC6rv9T5+ww/cRfZM5rgvbWT4srZvIZMQY8r3kaNKs3e4VdRoTvGvMrJJJrZ0KhyaFW5cw84D8nC9CbAyEpCiFbMEMwZOSLlOC6N4xVC+OURXi228/XywximZHAe9m7k7baj2I3jCML5m/U2lJ/ksG8jy4w76AlvZHX1IxNzbGKZZ3tp3CeccJ1X+bI4kNYw1cC91aKUJ3zq0Q/yy5ZHXtB1zzHHS8WcgXuFI1jqMV/5c8Z3fZnRvk9R/1eEKbN5DfV2xaBVCircmpnZgPOcfcyjj0TGyGHvJjRiapqX9pGB+dxTuxXDhJHo9G2grWr2talYEQYCy1ladWja9qAqzvty+zgeauIjrn08HKmgQSewp1YmK0OVSskqhElD1l7Rx5+G1vAa60xPZoUBihoH+0euRCfGsev8VNmGsBniaMQ0WjFBXMrROj7Aj4tO3uw+d3KLSZea4YldLDoxSaGooj+8kLHsfGRJRi3n+HrmFNsJUpShuwCX6+FIDlTqDl4VXk7eeISirOL42JpSKPVi6AsupNHRSW9wMXUWRU6sd6yZekfntHGvNoGvATpDLu6OJ4lLSugTwCoofep2J56fKs4cc/wtmKuD+0dAYyVb9x5ihb9ujeRkqB2bIcZAqJFX1xyk2nBuD8GsT7HMs522ql0EYpWksjqeGN7EQ8VhjsUV7UZ/1IVKyNPh3Ux+lnP7cQxOmA/R7V8xbbtLBf/hADUqOsY2YjWP8gabzBq90g27aRYjXpREKlU50jk9vcFmDns3sX/kKg6NXEpPYCkWjQ+RPG5zH6FMHccDqxiO1NFg78SkiXJfsYMU8JfUhZ8Js8VzaVOenzp7N52jm3Ea/ayq/gs/0D3Ecs9WMrogXTnoVuQj8RYVzcnnMvCgeIj7hpfSG2qdscZ2IRoresgWdIznqnBZ/RSKKpK5MmxT3tfvjIP1FJSJoJHsfF6/kGxqsn5OFBUhgF45yZ+e/P0Luu455nipmDNw/wBkkhm8v7+JNmORv6Ym90yRdySrZPdVmP1EEvZZjdMZxhJOCpKWo8FLWF3Wxd5qNZpkO8msgZxkYIl7H+2ebfSHF9PpW0//RGYfwKXpzSxLL8FpnJ6taBJhoAB1gpUGTbK0tnY+TgaXYhIMRNNlzK84wTLPdlZVP8Hy6mdZWHmERa7DpAtm1gZCfEHYSnnFHsKGQWzGKOFMLatMWearoUZ14f5pC8sPctw/vdFvMmugUDz3n1s8Y+JkeBUrqp/FYQrTk4OIBA8l4c9TEkTVQG9+8vcdWXhGOEokV0E2//zd88FYK+1VzwJwePTSGVmjrWrwCAYe865ifflpLq05yHCsZdqYT5Qp65xf3PMfz/v4c8zxUjJn4F7hZFNZDn/nTSz3PAuArwhPXrjOeFYElPbU5YYBcgUNoggO8zjdwbWzjs8VVIynXXjswwjI+OL19IRWU0RFKmsikqmi27+CZNbEgsou2qp2Uevo59CE1mSt9RgLKo/OmiDxUxesEMuosfWcV/Gj07eeAyNXIgoF2qp2nTeT0206xlWihwcSsGRACXV2eDejEvPcXQ6nGuBf9dOtaTjh4IhvHYe9mzjhbwMU7cucpBjCQKySbv8KTLo0w+ONRFMzrfGx0RWAWOqUAHA4pxTcP5pUJNPOMF8D+bP2r5CtbKp7lCOBLWTyF9+NPhivwKIJohKVA0yVB+vOwZ1BeHsQHq/Qc0PNfvQaZe3Nrpt+D68wgVOAU8WT9JzquejjzzHHS82cgXuFs/fb72Ft9YOcmsgLqFaDChg++1vyIlCLOfxRNzWOAcYSLuIZJRTnNs2uGHIssIFTWTPjKQtGdZjmig4l+1AWsBpitFXtYrHrIAZNEn/UTadvPUf965BkNR3ezTjN517rUgmwQxrlPUHwx6s4MHIF6dykztbR0dV0jGympXIvK6ufLEmGnY/55ae5RdNMq2ji02XgDW6i3bONxRV7udtr5MGYiCwLnA41cXD4Mg6NXILdOM7Sqt0TSRkCh72byea11NsPczKwmGzBWOoVV+88RTxr54hvHZkJb+ugdw2PajoZFKZ3ZDiUVYq5D55VNlhxlrPsEOHuqjE6vFtYVf0kxwNr8MfcF7xWgP7YKhZUKPelKImIah+ZCWP6k5iSPNJXgN9EXNP2q3eeom+sedq2V5shh8wH/nv2JsdzzPF/wZyBewWz45e/ZHP1TxkrwidDlMKTlxnh2bTS/fn5kJcMBFINAITT1Xijit5jpdXPyUArnb6NRBL20ni3qQeXqKYruIVkoZxDviuI5ytQk0WnmczEE0Vw2UZpq9pFW9VOTOoIavHcBeEAkbSRXxdPcFSOU+sYZGX1UwyPN9LpW8/eoWtZXLmf9uptqFXF53WNq6ue5Qfay2hMt/JzzXaWDEBtv0ws6+YyrZEW90EanKdQiXmWVz+HPzapdtzsOsz8skOEkxWMJTwsqOymtqx/2vx22yB1lbvx59XsHHPxK81efpwoEDtLWa0jC61a5d/zcb0JFumU+sHD3k20uncQzzo47m8/736HfRuxqic9MQGZ7xR6SyUkN5nhUoMiyvzn4syuBrFc5bTfP+tUmtg+lj/IiZOzi3HPMcffmrksylcoXc/tYbX0DhDhB1FF3mlPBtZP6Ey+1gw/iyldA1QXWRfn1PfjTzfT7V+BTecnlKkrvbZgounoQKiBUwXwZW3c6BrAbfNzIrCM5spJMd+xePmMuaeSLRqZZz+/x/WnsUZ6pC5WaiZr+xZUKs1Y8wUVp8Zan1cmY6Eocsh7GQiQFof4t2Qfg8AlKh2/1K/AY+3DrJ/UYKy2nCCathDOVFHF5BphrqglmJ6HJKuAmeG6N/sUEesiKWQ5hYTS7mbFxPLZu/xKQ9g/u2HjkLLeWJQgO/Ewkp7yUKIC/qts8vdlnu10+1dQbe2hJ7SGTu/6GWtqyayR7rFNuI3djCabeXJ4EyvsXeg0Of6f1s2BbC8/icFv4lCrVrI1V+rS7AzMY0PlpKGrtR6dJqdWo4F/0thxCQa8D/2Mpts+PVf4Pcf/OXMG7hWILMlI++9EW6XEIT9kVwxZ9cS7fWqsFQSB19qPcGcQnkrBlyvgciNozmPsassGqWWw9LsUEsnkdeg1k27GL3Mif5HzvNY4gie8lq/kTvPDsskv+uP+dha5Os5//lz4i7EFHdEGpdXO2fSHF6JVpTns3YRZE5xR93Y23b4WkkU37Z6taFR5EkVo7CvnK64Ur7dmOeKTGE024bL6SWX1GHUZyi1BipLIEvd+/DE33sRCBMCm9WJQRbDowqUi6ql4C5CUlT88rQB6QXlfzlzHgwmIydBXhEARgmd5dqEpDunNFlhwVl7JYtdB+kPzqbYcR6fOcMS3rtQLrze4mPGcm1XVjwMwlm4gRpRfRxbQjoOP8zjbhpR53CpYplUM6oEs/ElSM7WZjtMc5ujoapa4Jzul36Nroa1qJ5n8V9jxiwa2vOPW8973OeZ4qZkLUb4C6XjsmWm1ZTpR+RItSgL9qS3MLz+GwWrHoYL7KuBak5IF93yfduY5+zgVakOSFKt4v28Bn070coPezFudlax07GGTKUe+OJkEInD+vnUAKiFPX8p23jEJ0mTOEWKN513UO0+xzLOdeH56KK1QFDnub+PgyOV0etez+/RlWIw5VtU8jUalPBDE49Xco2umO1bGRwIi3YU0+aKBwXAjv/YvLM31+mGRK04biGftlNt38enMCf4nG2dBpeIdDccWcjaH5sFoIww3Ql8DnKiHp6dITo5JirbkI8nJWrOpTDVwdzlmvg6QKtiosnkpM4XxWE5yxLeW/SNXY9GHWFn9TGmcSsghSVp+nD1CZ2GIhAxvMCmhybEidOZgvlpJbHlM7id31rqtPOX+S5LAEwU/142AVpXFOX4/8fDMTu9zzPG3ZM7AvcIIeYNUnr5lxnbveDUZ3RLqjVsRkHCZFJ1Eb3gBt1s30RWt5fTzV5ei1b2PI6Ob6Aks5dVlp/lni44+ocjt3nEKxvlUMs6vx5WOz4e9m2h2dV5gRijKGtrLBs87psEyOk29RJLhv+PwFh98u3iYREbJYmwu30d/qIFO33oOjlyKP17NIlcny6qeJpE1oNGrqbEpYtAHRy5jz/B1jKU9LCvvoj9fxvV6FW+q7cSkDlFX1seRQpQ/x6HLt5Y/1BT5U5VAU8Vx9sftPCX5+XpOyfistR5FkgTikmIsvAUYzCvJPafzSnH02XRnQQKW6RSvaTbO2BgN0HKOqoCp2ZBOcwiDKk6l4SSJrI3D3k10eLfQ4d2CWRPihxxgFIlV1nEer4bfeaBVAyt0ynmmZEVc+XChyKe90/sINZV3sNXXwqv6KjD3wl2Z3jNCNyxx7+Pwj25DKl74gWaOOV4q5kKUrwTChyB2AvxP88zOLt7gGpr28smx5TS5TiLkJ9eK1LlhQsJa6p17gJPcVt9EVxTlm/N5ssyzbULaysDXq5tIM8i+QAtBn48lVjvPxRMc9m5gUcWeC08GaMQ0g5H5JWmu0mUmHAzFlqAS86iFNKqilT/p+vl5DJ5LKx7N1yrArY6wb/hK8uQwi3kaHF3UOyeFj7tG2rCa0mxoeJpsXsuuodeg1h5h9RTvBuDTZSZ88fUcSeaodxzhG2G4vziAFPTwzUblWsaS1QyOW0nlikTlII0qCKfMjMSbkWWBTf16OouZGdf4Mxf861kVA3+cWOK70ghPBqF4Vri4TIT4hL2oU4MwSzg5GK9gUcWBadsi+TpWVz5Kb3ARyzzbkWUlS/JETqkn/BdhPmuc3YDSrbxRCx0TOUBRSQmpAvwyH+TTwFC4nlCmjhpLN98XjvFoEWwivNUM/2xWkoaOZuFLwi+49KtF3vL6+3A3eJhjjr81cwbu5U4+Do8qSh+yDN/OwQ2SEpaUJBhIb6GpfBvCLCmTTnnS4GilAI2SHRh/QachCQU+MlrGLXYTFaolXO9UarqG/Q206P08JZ/isYCba1UN5It60sRwaoMsdA6W6rAADnm3oBUSVFqUPmuJjJG+yHI0YoqFFYcpM09qJO4fuZomcz9hSelC/moTuCc+0S0VO4hnHDPq3g6NbGF59WS9WUFSY1SNUcjXAtNbCVXZvIwm57O0ajfJrIl4YgHHPP3Um7wMhBqJZGtK3cYPh3XsrADT+AZS2REWV+zhG975fFHbRsa+FxXKmtuZH38BfhJV1rh8eSUD8WBGqb3ryUISqBeV9/HVRujKw2Ktov24eVgxgrMxEl9MhWXrtG0aIUGHdwttbkXp5KEkvDugdAioFgX+Va/iQEZRjvmfBMgoGbZxGXpzSvhaBuJk2D+6mFXubnbF+3lbWHke+h83PJGCBxLww5iibHJ0wkD+iV8T/t//5uriTRiX3Ez7NZeft6nqHHO8mMwZuJcz3V+Gjo+UfhUEWC3O486xAT5lKkNtradB3HqeCSbpjW2gyXT+btqzcSKwlLxk4BfFU/y0MMDduiDVxslK8jWu0wynRd7r1bGvJoxB68WXdDAgRtjgBWdMQ71gZ55gY63KwXp1hkrzMAORxSQLlRRlDWohTaZoJRj3lwyWJAlIsgp7qppnamb2ZTPp0hwf21Aany+o6A6unWbcQBFHltUj6GdR7gcoSEYkSeBUaAX/UacYiCO+dbS49jJPnDSIb3FkOZGFA4UkrZkawmk3C1VxqkQVbbOIn2hPKuHGM8ZjKr9PKqHK00WgCD82w5dHYI1eaTR6Yh7kz7H+WGmcbqR949VUmXvxJZqQEZAkmT/FQYuSPVsmm/mU0MVDw8p6RVZWzusqAzyRhjI1rFMr3QRCMtyZ72b/qclszmuN8DY/08LF4QIYBGXtbrEGghRQl/2cFeM/Z/h7dTyeu5aGdW/gsvVXMcccLyVzBu7lSnIAuj4D8vQ1jtsrargjOIze7sCUP3hRUxW01dgT+wgnHEiIlJ+nwPpstGKGbNFCVBL5lKmJauMpRguKXuSZEJpbJ1IhGPhyLMpYch5bhQEk4DfWSjSoeW3Uy1OEeUoa4hZpEZ+0BKiwzGxH0+lbjzexgDb3dg75rqDN9TRH/JdR7Zi98WiF4ZSiuCIU6RlbMS3x5lRwEQVJR52jh2ihDCtmArFxKq1BhiPziGYrUAkFMsSIZyws82wjWYCPj1ThJMxScfp9Pxxspsw0wlXlJ6g0ZDjs3cg8TYLBQpy2Wc7tU2VKeYAoK94ZsvJ7UVaaif46qRiJGjUcmPCGVk2IlNTNYouP+NYhySqWeXZM2+5LNrOi+mlcVh8f8ZrYW0ziKyhGVSXAarGcHyenJ4OcWd+706Gc1y8TEJ+Ish7Jgl2ESiBchEdTipF7NKVsFwFRglvMcFqCh1LKOt6JgpJMU+MYpCX9A9Y//gNuerqKoLaWr7zuh7TOXzrrezjHHH8Ncwbu5YhUhO1vhvz4jJeyOQ1fM1bjG2+i6RwKI2fz435YJTezononvcFFz8vANZSfBE5yR2gzDWVKrdv2tNK37FqTopBxKrqBpxq28lAS7olFGJE1qBG4LhfAKqgoInKDqpx/M+pp0vvOeay2ql1E01Y6Ri9jnvUwek2WloqtnPAvodk1s25Or05zLLAeAWla+xeARL6Sds9WokUI5Kw4dDkC6YUMxJdjEMdxW/oYTczHo4tgM8Z4JmTn2vA4S3U+9tfNPEeh6CQSrUAUCngjaloq93DfiIunC1naI3WU2QYZKyqez7YU/GdYMTKVKhgtKp6cRVCMzpIJA6YV4BYL7JswLqv0Mw5botbaTbZomLZNkgTEibSUQ94t3FO+F4MWDKeUhjdlkoGiNgQTyUWtWniHFW62QrkKWvonBZ49KjAKMFIAtwjHJ7Y3ayBVhAoR9CiNV1MC/D41vcRhR1oJoQsCrNVDvRqSOh9PJH1c/us29LKWn+uvBs1CBMt8ThqSLG5ey7r2jajUc/V0c7ww5gzcy5HQbgjNTNiQVUYyySTzXYNI0hBxdTuWQscFp7tUV0W5TkkyqHf2MJZwPi8jB1BtOohQzIIabjAp6e6gJD2Y5EFUAtxohhvN0zsQSFJxor/apMcWSjjPKdNlM8RYVf0ke4dfhcP4BCZdikzRXnq9N9hMJFvNuDDOpsqjDMR0rK55YsY841KeztE2TuXszNeAQ+dFFPO0uia9QbtpjENZ+MNwLV9Me8mhZD8O5GDeWRmMkqRBLWYAAUnWkitoeF/NME8N2BhLL+JH0iD/m1CMlkaALQbl/waU7gD1athgUMo5TuQU/cn6ifKOjUZ4kwU85/lrTRdMVFpGp23rCbaxoFxJOLFpRzFoMyQkRe4rn9PyJm0tD+R7uNWqGLa1esUADYYb6cjUUCUdpRvlfTCL0DNh1Fo0Sv3eQAFO5kGjgS864GcpxdAdyYJFBcGc4tFVqxQbeiQHbTrlGG+2wDfHlXY7aQmC5Aja/sIbLcoxfuGHrwxA4BH4omYFa7Rq4sV5ZDXzUTkWYHE30nLJBrT6F6FN/RyvWOYM3MuR8a4Zm2RRT198I0tcype5KMqMxexYzk5GEA0U7KsR1AZU4V1QiCHJGsz6OMdGV2LURKh39tHlW0tr1cVlPQJY9JOS9zoRqifyCNy2mULJ007nrHwDSZo9O/BsllY+wyH/laypfpRlnh3sHb4Gt7FnoqhbKewOxFw0OfZxKtiCTRfEm1hIRnIgUMREgTKdl9e5O+nyrcJuDDE0voDqCVWSogz3RxWpqjurhvh2n4kQSZZg43TIxbyq6SolNp2PxvIexgvwk1EPHx4xEJBljslR1ET4mAP68orqSkZW1rqyspKK7y8qpQRnDIBVhGN5GBKgMQv/aoNfxuBNPvjvqsn7NPXe+ZNNVE1JqJEkGEk6WORS1kM/kwqS8cF4EbIS1Iom3mfS8LlyMExkZ+7yL6Rc1LCw8ih19HF3sJKnx5X5TudhtVYxvI+nQScrRr4/D8NFOFIEkwANWniPHU5kIR2Fo3kYKsIVBiX0eoa3WOALEcUDPJFXvoj+kKBk4H7ogj/G4Z8s0OE10ereBuydnCAEoZ876Yq/hYq1t7B4w0oE8a9oVT/HK5K5dKaXIw03g7lp2qZAcTUe9WQCxYnIJhqMz04O0HugYgtZXRPZdBFV4DFwKKtDJpuBE8EVtLgPUO/sQ5KgiJqR8eqLOp2xhJN07uJV7M/HiWA7ZaYLe48GbYY6cyeHvJcA4NANU1c2WQqQL6iJpMsR9eOEs3VYDVGanIcQ5DxG1RgaMUONQ5GeqrUfJ50zUpySaKIS4L12WGcAtQouU5dzfB78uSHKpVU99AYXEUo4OeJbR4d3M6JQpCDBU2n4N4+XP8wL8YWqNCrAau0lnBc4moPBguIFFmQl5LfRAFcZ4avlivH6gnOyFCAtw3UTreUeTcHvEjA2EU78jzBsGlIMWSJjpNExvSnsMf9yYpp0qeZNJ5m42gg/c8Mj1fAJ/XKaKo5yKAvv9MP1g0Z6C+ppotSXVASYL2hxq5TwY08BegtKAoxGVAx2VIZxSQlL/6UavlCurB2+bwxW6uE/y6CvHp6sgRVTQqzLtIpxs6ugXFRa7tw/vSYfqwhPJuHR/OwPSU5ziEuqvs2Ro6u5+74aDj3y9AU/N3P8YzHnwb0cEbVQ+3ro/gIA/akt1Bu3ghZ6AkvxVOVpdkxfc8rp5xMKaqnQxdFlJzQai1nGWIetsJfaqkmdRVFUQnbB1Hyq7bMncERTVoZjzbhM/ZyOraDRvg+D9gLKwBdBc0UHh70baXJ2YNIlzzvWbfMSSbs5FVxMmWGU4/5lLHIp64DdgTW0eZSkkkr9SU6MrWS8qGJL7WMA7Bm+pDSPzZDgaHQRRfncRvqDujqatZNajFpzH05Dbloo9Zcx+GUc3heEYFFZY7MI8OmQkYfyeQJyAYnJrEkVcKbe+/cTl3qVYbKYu4CiKgJKdwGjoCRyLBmAYEFZ41oyCF8X27i6bve0892a05Cy7uFqm6Jn+W/eLbTblNKLCjXkMHGrT0MhV8k/67VcU38aULQ8cwU1R/3LeaDoxaAeKfWfK0dZK0zJihErAK83KZJhU0O26/RwfB40T2zzRT1IFh+iOOnCCYLixT2SVG7ItSYlrAnKZzhVcGCXJB6W+niz8/xF/2+2wJstXkZO3wKcf+wc/1jMGbiXG5Ej0P1FGPwtMMW4TWCxaTEXFQMmoWJP3xYMmji5YTMu43G8yMS5kpaK3YyMGqjRblUWgqbQ7W9nsasDVaSAL1pFlW1mUoXNGGNoQmZRI6RxmsIvyuWJIizz7GD/8JXMs3XOmk05lcXug+wfvhK7Plgybh3ezbR7lJT+nkAr47lanOb9tNmDpf20wnTZlkzRjlqYbqCjKRvDsYXkJQOpgpprhpUv9+4cWMQcO2vg6bTSmSEvK17MuAROlZJFGi0qhdOH80U+ol3IzzmGTlBS9M+sxR3KThg8Wfn3BqPSxPTdFthkUJI2QPF2luvgj0k4loNPOuCeiFKEPaDp5csDzdxcNl7qnVcQEnzADrmCyH7vldTbJzNqC0URUSjyb/JaVtdPPggptX3V/EW1j3tS+87knqAG5qnhDjvcPqZsC0uwrVrxwFq0sDcDBQnUomK86gUtR3wrUIsZFrs66PYvZ7Frupf5X2XwSSe8zw/bolbU4XaqTD3TRLKn93I/P9X2IWKhGFbnRXTAneMfgjkD93IjdABSQ6B3E8m4pxm3RMaM2ZAEGYoaF4eHVqDV5VCLKtpcj055gh5g39D1qIkhGGqodgxPO4Q48dV2MlXFrwsD/OAcspCtVfuIpqylYucXE4M6Sq6oOW/CyRlW1UwknZgeo2t0Q8m4dXo3kJbsrK15eFrdWDhhp8nZMW0OvSrCEreSkHHEt07RzBRAllWAjFUTw5vW0FXMs1QLB+vgUEZJtvh2BWhFyOZVHA438N+ZIs8UxghLCQRkBoQEl6nLuOMsMY/b/PDIWc1n1xvha1H4sweWTHEo/2di37f4lD/aT5TDZgOsELVEknYOEiCeLidb0FNtG+RSrUg2a2RgfDF23RDl5rHSXMeDK1CLaUREunxrKKDDrB6jqaIbW6GPfyrCf8WUNbXXm+FeOzycgS+PQ41KCVG+26Z4aJ+LKIXjLhU8XA1nSv4yeQMLyw+g0yjuX65omvG+qQTlAeQ9koVW1y7Ei6zZPB/9HUdou2LjXz3PHK8M5gzcy4XjX4ORv0DFZsiGkFAjJk7AlCQSSRbxRTwIRTMuwwk0cpisbEUU8iXj5h2vxp+az2rPX0r7HR1dRV7S02DvxGaMgSAwEG5gvXsfw0EXJ4MtLKg4Nutp2YyxWbf/tdQ7ujgZWkVB0hNMBksdCHaklXWrGeNtBzkwci1rah8GFMWSStNp3NbdPDu8lktrJhNmyszjHPJeWupyDmDRjClp9aLM4sp9qFVFQgknQ7ElGNRR6uwnWD9SybbGEVIy9OSgkHJTSLn4VDjJk5KXBbo0v/CcYg2gO6mk4psEqNcWSBVV9ERtLLRNdhc4NNkSD1DCfyu0EJOmG7ep7MooGZcAl5sgKeXIpBOsLY/wqLeVq9VDDEYasaiz+OPzcBqG0agK5Apqjvi3kJeMCBTQiCnapxS9n8zB67zweAr+1w1H6hQP86NjsNarJJLoUIq3j9Yr+zyWVNbJjtQpBn4qNmOUI761LJ1IVNKrp3dVSOUMnBxbRYPjEFZDgheL8f5OYM7AzaEwZ+BeLhRT4H8KpBwgk8pZsBknkypOBpbgsgzQbH+ao6OrGMi10mA/gsWQQJIEOrxbcBt7SOXtLPdM9fqM5It62qu3MxavYO/wtSxzPUlvqI1ufw03ubchiqOznNBLi0mXLnliB72XMhypI2saZNc5DNyoxs8j8jGqwvMIphuoMveUsgrbHCcZCNczb0rzUbM6QFESOBFYQZnBh8c+TH9oIY0VJ0pNUp3mEE6zcq8KRZEKyvn0kI40Ga4xxXn9+CjNqiCN+iLdaXjLlPPaolfa3vzeDbVa+OlgmoOJIrfnG0nmq5BlkWZxN3ldnlN5JbRZo4aEfP6WRcEivHmKMopJhJQ6zONhMynBRzhThyyDXh0vhQRPBRdzKrKeCsNxYjkPZrUfj32Qoqy0SvphTJHkikmwUqeshX0qrCS1qFDW/SxAHCW7szMDbXq4xqT8nIuiNPn10lx5hJHxWnTqNMOxFubZOlk28f6+qIxfWMx7jn8c5gzcywVjLWisYF3M6WODGDKHMVoEJFnkWGANC8sPoNfk6B5dzhL3fkBR77envcwr66PefpjjoU2sq32oNGUsbWFgfAnt1co6jN0YZpn+aTr9l6NXxUoG5m9BdkI/czZWeJ7lmZH1+OIO3u7sB6Z7A58PKVmFVxj6eVXq1YA0rSaszBRmLOkhmdVj0ilV0wsqj7Fn+HqqTZ0lOa9EwVnaZzTqIpiqpyjrMKjGqXWc5OOekwTiHhrKlfFvKsDedBEt8KBHMQ5nWG9QDEftRKJFu1pPO8tpKt/GGc3LnwC5goaRaD3BrAVZMrLfl+PftCeByKz3ItWkrHVNZaU1y8PhxWiFDO2erewauhGrOLnemMw7WVi2HYdpnC6fg2TByU9SJziYgR/Hlbq4D9qUlPzFWmX+jqxSoxaTISQp9W1nsju/NA4/d8/+Xk2l3KAk5YzFyxmMtaES8iyq2P2ShLTPYGfOwM0xyZyBe7lQdS28uguKWUyn34uumOSYfzUWbZC2qsmuzTa9nw7vZiqN/ZTphxHFPNm8luPhS1hT/edSA8xO3wbsOi9aMcVwZB41jgE6B9vQ6DVohVipSebfglM5iEiw+jxKHRVimpVlpzkVWsmO8SA3Viu1gP8RFPjcuEytGj4nXIVACoMqPk3AGWBhZRcPDq1hU9VeHBOfeqt6hBrHIJm8lsHIQrJFK12ja3GZTiMIAlWWUzMK3sWkRL6gQqMu8kMXbA+Vs8A2RsNZ9cbLdHDLlFyHGFHsmDkbrTpPg/MkDVO2XQ70jS0gnKmnynwMjZin0jqZbKM+60FgPGnkzqoeTDplQU8lFIjnK4BuDo5cyqKK3Ri1GYqSQFqy4xVP8rkwtOvgYQ9cYVSSXqbO31EH5ilCOKKkZITGZdiZnnEZSJJSQnA4C2+YqGWrKRtm/8g1GMQQK6r/Nin8DY5OCrkCau3cV9scc3VwLx/0FWCqBSlNhSWIL9VCa9Ve5k1pAwPgsXtp92zDaRqltqyfavsI3WMbqTF1csh3FaJQoDfYTFvVTuomQnZWfZgO72bQ2Fji2ossTH5b+2MuRiLT+4DNhizDDd4LDisxWoCPTeQ9VKpmGjdZhthEDn2HdwvVllMcSguoxTRuWTEUJ6ObuN6xAL0A7xGX0uzchUoo0uKe3i4mM2Hrrq/Zy0n/JobCdez3rqMjL3HMv5BAoo6FlV2srnmUVvceKiwBXNZRwqkqcoXpX5Tzyvo4FlwPgFEEIe/iZGghh+PTK+pfb4HPlSv/jxUhoz9NRrIyGr0I1wdoLD9JmX6AYGo+/mQ9A+EGRiK19Ifm44+6kabY76+OebjMP5mtIqHGqA5zYOQKlrq2YdRmyObVHPOvZXX1E5gKdeytg4eq4VWm6cbtDEYRGtXgmPiGCACb9ErngFMN08d+LQK6Xlg+ONnHLp3T0+ndwKrqx1hStf+irvnFIJouw3tqrlRgDoU5A/dyYkJgWZCSzG82nNfwnMleA1hW9QyeihjLavawxL1/Qu0DvJEa8pKBeMZOXjKhVhU5NLIJZInxpJI6OZpswmX1csS3rjTfn4ZX0TfumnY8QYBAYTKM1e1vP++luNVw74QBsM4iNXjYt4U/RRWrV27oJZ6rxJheQk62U2Me4nRyC02O/axX93Ckcgt3eno4GVoza1i15jT8Ia6c40EG8BkHWeXZzSpdjhZXD8GEa8Y+oHh93YF1M7aXGwbIF5STrsDJ1VU9NOpz/Ha4ldNZOBFzEIiWEUqUEU442DvuQJW3oxJyVFr8HBtdRZdvTWmO2QgnHFSYR2j3bGVp1V4M6hSBdAN6dYoKyyjhlJN4xkQ6pyOj9rMvq0h8ATxWGOJgxszyqqfRqIuMp0z8yLeAlKg8UbTbu9CmK8957DN8oVzpO/dBO4w3wsM18FrLzHGbDPArNySalPe007eBkWhDqQ7xpSSb13Jg5EqeDX6c7nn7qX5vP3UtjcqLqWGQXkAX3zleMcz58S8XRp+Ers9CcCfIOTT08STLeYM0hOkCjykCIBTC055mEhkjOUlHc8V+jgXWU2no4Tf0sTNdxie0S7GblHWuZVU7GIk1YTco9VV/HF7B7wpDuOLLyWRGaXF3lObcWjO5jraw4vBFXVY0pcTxDNoURVEphDaJIFBgTb4J6CJbtFLUejDrkqilIWyGMCbdCEgwnF5DJpnhSOwyVtfMbPfTlVXWkNZOeIgqMcNAXmk9kywoFnZp1R7GEi7KzTMVM5Z5tk+rqwOl3urY6Apa3AcRBMXNtGgKvKm6i7GsHo0pwh0TEcXrzPBGJ0CEvcOtiKJMy8Qa6ViinOFYCxWG01Q7pjepTeXN1Jgnt1Va/VRa/eQLajpHN9PoOEQo6eabyTgf9QR4cBj+LQA/darZrCrj8tqnAPDHHfwspsWn7SaXr2ctoBIlBqILL1hj+HqL8nMhVk208ckVNJwca5vWteGlIJ3T0xdeStD4FhZd8xZWnquZqq4CIofAufolPZ85/n6ZM3AvF7yPQuDZ0q9+rOxJHedtjhc2nVmfYiwJkVQ5dr2fYY2f/xqFHxicLHAe5LB3U0mBv9qqdNbuCSyhSpVEldChMqfJSdMLaqcmiagmyhL684oC/UrdZNHyGTq8W6izHmU0UU9RVlOUwa4bozfrQqeKU8BEb2wjWbWFebqtGMxpRFHmiG89S6t2cSywgebyXYzJm2c1bgCfDSsKIDUTKlxmTYrBiYf6Gms3RUlAqy4wFG2e1cABtLp2csLfRrNrMoFBNVEobtZM1pcJAlToM5zMgr1ooYBMuZDmjF6JeFYhebl5jPKJLM3j/nayRRM11m506gw61cwu4ADeaC0yAqdCq9CpkryuopeWAfhjFXwiBP8+YuHPjcp611C0gp8nJHyinxPRCm6yWJEkgXxRO1Hf9+JyLLDuJUtMejZ6H/MvfT1lnkpMNhNLLmYnlQ7l8W6Of1TmQpQvF+a9GdRK2DBn38xRv4dFpvNLWV2Iemcv/mQ988pOslqf4vu6zby95iRWQxxRyCvrchMkMkbi+UrWVp3g54sGkZk9Pzx+VoZfvQbW62Hf6GqO+NaWtp9R0+gbX44sK0oi7Z491Dt7cZlPk9RV8KgcIxw30WJ/lL5wGz3BpXT61mPRBhU5r7K9dI1uPGdWXkKC3yYUAeMzXGpN0n9Geso8xonAcgAWOPcTy8xe0a5WFal1nKRvbEFpW7OrUym9sMxc79En6/laTZxv1SRozNZPXrMQJ5mdvRX3IlcHyzw7sBvHCSRqGU4spje4qLTWNhBqpNO3kVpHP8s9W1lR8yyCIGGKbOG1ZtgyAq82Q71YiSjKeONl/CIBQSHCsVg5f5wfpNYyTDino9IaoCDPUmtxHoqyUvf2hXMI1vQGF9FSuWv2F18ABQk+EoSaPviXUVj22ndQu7gBk+08dQmzYaqH9N++zGWOvw/mDNzLBNmxilzVm5Esi9COb8NmO/ZXu99FSaAgGzgVXERH4FreUbeNw95NnAgsY1HFfto92xgIKesZ3WNbWFn9TGnf5rLtzOxFDf8+S9Tr6Ohamir3sdi9h+P+dkYTDkRRoq1qB432A6SL5Sx1PcupwCKORy4hlFtAbyBMIqOh1tRJNq9ladVuskUrra5dvCs6zphqmKFI04w+b2dISLB0QHl+/1SZsi2atlKpgaEpyzJ5SfmiN+tTnBpbds57ZdSmMWiShJJlpW0LnPvRa2Z6Won8pFutU0+mHKZ0pxlLVJ3zGKCEDxvLT7Dcs5X5FceJZ62Mp+zMc/bRVrVjmp5jmWGY+WWHeG9+E3ZR8VQNosBzow38OCYwUExwOO7g4flj6FXwiVSYfeH5AGhEpbj6t3FFHeXps56VEhL8JAqfC8MnQ9DYD9d64e6w0i5oKoWiCgEJrfrFWe/qzcF1Xvh5HEaKsCsNz+x68IVNpi+H3IsjIzfHy485A/cyIZ/LEz7+JGL8OKA0wXx/EAbyF9jxHJzwt9Hhu5zFFbtI5CtYPtFmp9W9A7elD41aCauNZebRE2jFqe+btr/NGEOSZ5rYfzlrzSaV1eM0eBGBjtGl/DKV58ZAmq8PLOYRXyNl5ghqMUl/eDGY66GQwmkYZpHFwifqO4nlKjgaWE/X6Brc5iMs6jVyvJjErU0wv+L4rNeWkWBhv/LhfsYDV0089CezVlSCUpJwhibnIZJZxcjNsx8hnTu3Z1Nl8zKWqGEkK5CXwaRLMTw+f8a4nDTpZRg0k5bjcmeQeL5sxvjzYTPEsBvHZ33NbfNzLNTKiprt3KdpY4sBDGjoFsboyhbJZG08tSCEVqV8Vl5vhnKpmsFwIyohx3+MKXqZv3YpqiiyDLvT8J9j4DkN7wjAvWFF5cRXgDeaYYEalg5Caso97PJvpLGiZ9ZzfD7IsmJYPxOG/VmIThyjrwCPnf7fFz5xIQXF2UO+c7yymTNwLxN2fecjuE2TRmaBFm6yKMoWz4fu0eV0+1fQ7OpkZfVTHB69nCrzSTQTT98qUcZmiAMQiLrwmLr5Y1JDjWPmF5jS4HM6V02JIPljLlI5M6eTHj47vJAPZk/wJ46y3JShxd5Pi2OYbww1k9Seoqmii2IyiJoYkYSVtiplLWdh5REM6jgNjk78QgE/GT5lqEHKLGAsUT7j+HvSsGIQluqgtwH+nILvjSuvJfNKCLJGrTTZBMVI9YbbAXCaI/SMrTrv/Wt2dTI8tpavhuHhBPwuoZRUyFOcWbWoPHUcHNmCSTcpQzVagEzBTsfQGvpD8zme0pVKGF4Iu9Lwu7yPfcNXY5HtPBGoY7UuSjxt4Eqdhp8tGCUF3BaEdaIZd2w9y6ueJF/UIMkaPlsO77Yr3Qv+Ow5v8MH6YfhsBFo1imLK/1QpHQ6W6+CnLkXlJCErRgggnrHgNp184ReB4ilePqx4bV+OwE/jiphzduKeCoBLW/HCD+BYDuGDFx43xysOQZblmXGmOUrEYjFsNhvRaBSr9f9GpTwZTaL7s60kIfVCCSXKUItFbEYlQzIQczGeqWBh5cwGqvmCiq7AJh7KhRmTs3iFMe41VZRKDAC6RtfQ6t47Y9/xpI2h2GIkWc0v872YhAJj+iCfKINy1WRD01TOwLCcZk9Kw1i6lStRoRLlGXVsAN7xWsJpN61V+xhP2VCJBUJJN+PZaozqMAsru/hhUM9t4xn+3a70VTuahytH4HS90pG6w7uFds9WcrKSXXWmP2a3fwXlhiEqrEGGwx7KzOMYtakZ53CGR0ad+FKLKBfTNOqLZArlBLWdvKoyiCzDD4ebudIcw6mPE1Al+MO4muX5ZYhCgnJBT3/eSr1aYCAvUa1Sc5oY6ys6qNGd39qdCCyjKKnJSSYkJB7OB3md1oAoyqQLalLAioouDNossgy/isOvoyr+iSXc7DoxrZ1RNG1mKGPifyQ/340qXQneZlEKtd9hgzeYwDyRh9Kbg6YB+E+HUhJwrRc8KhhphC7fGlqrZn4GLoacBP8ehPsnhJ3tohJO/klc8RCrVQLhnJX/bPku177un1/QMUqM7YHytRceN8fLgov9Xp7LonwZYNCkGeI6XPlH0Gtmj0lm85pptW+z0Te+hhUepR+aJAkMx1tYMWVdbSodo5eTkOGrhS6+pWunSZhHLJfj0IiL5dVb6Q0upFDUTNsnm9fQHVyPSsiSKMInMj2cFgN8SbeQ11QGZxzDqE1zLAFjcp6n8yfZIK7Fqhqf9Xw89iE89iE6vJuwGrr54LgGM2lWqr28t6KPvwyt5LuFDv7VJPDlCpmxIrxqBN5hVYxbURKptnQDMwubF7uUrNEKa5CaMi/7+zewqn5mqvuTATfa3FI2OHdjc++Y9tqp4BKe9duoM/rYIQfoCpdzk64RtP1cW3AjC0bq7Cd4fThBtGDkYF2K3ODVrKp5HIu/jbGxDVRV7ZyhwHKG4UgdtbYT6DUZOkc3s6MQ4BKxBpkoWjGGqNHR4uhBnChb+OKYCOmF/Mo5gsM0Xb5KkkCvznE60c4zgp97y5Xw47nKTeZrYZFG6Tj+6XJ4rxW+G4NnhldzWc2FjZssT+/S/t9x2KBX1vXOfGKTMrzBAB1JEz+6bCdl1VWUV/8VXtvZGKqUOlLTvBdvzjn+7pkLUf69kw0jPr2ZefqtSMYF0xQsztAb38JY4vwKGR3eLayueZTDo5cSS1v44lAbO0zPzMh6BDg4cjkLy/aw0Hyc/zU3c5VjkJaKnSyvfo4iGnYPvRqdOoVBM9lJ4IhvHZ3+K1jg3M8PMmF+Lx1HrwvwVgsEi+d+wmoV9GyLVvAVi5mlrp1ki2Y6vevpD81c2wJo92ynXJ/DJhv4dcHLhzKnWD6kJipGuF1dyzvNBsIFuD2ghG/fP5EYeSKwnArLTCN7hibnIQIxpfh5Vf1OOn2KWkmgAL+Nwq9Pr6SyUMGWmidKIdxp+1ccxa0uYEXNHWYtNsHAD9MBAnKOMsMYaiFDmTHBJ8uUUoVTwfkYVUpGTrOrE60qxVhiZvF1LG0hmTUynnVh1GUQJ/5iHXINOtTYDX7SRRsLK7sYiDSX1k4zGRcpIYrDNPNcRRG6g+tYpAvxTI0iKXahWsp/sUBoIoDwKafS006lmdkncDY+HoL9mUlFmaKsrCFbJo4pAJ8xvZnXFK7hpoZfsHBN24tr3ABMdZA5f93fHK885jy4v2fyMXj2OogdR0ZkONzMwllyFIzSKSRh9rqmTt8G8pKBxRWKx9Hm2sqR0Q04zXv5cRxebQTLFB3F7tF2Fjj30Rduw2kYZotbSeQ4NroSQZBosB3CaQ5zYORyVEKO0aibRM7J0qrdPOZdzPWDev7FeZJ3OCaf2o8mu9gTqGe+MTGtL9lIxEMs1czPPTsx65TwWbvnOSJJB/3RpUS8HmosJ2YUJFsNcVap6vltcYh1Bojk89yfjXCVysm6dCM3jA2wsxhnmXay/i0nzZ6efwaTLknP2KqS5mOj4zC/GmojqTnJ6VQNl7kOIMTWMRqvxW0ZmrF/LG1Bj8hT43XU6YJ8qrGT4/5lZIpVhDNFBOD02ALGdCe50QxNjt5p+xdkLcmcDZie0q5WFQgnyml17ytta/dswxxsodw0wunIMsoMSj+/vKSnM2bmhkCBQdmHGZFPSJSM4lSWVO5gJFpfCtuei2dT8J8hpWA+Lyvp++Vq2O6oY2XZxUli3WiCr0TgNrsi5vzPVvhAQOmasEgD96hu4E13PXBRc71gsiFInJ4r+v4HY87A/T3z1BUQVlQv+hIbWVg2exHtmbYwZ9Mfmo/HfJJyS5AjvvVUmU8iI2DTBbjVmeVW5/Txw+E6tKoMPaHV1FiOYdEra3WSBFpVkjKDnzKzonIfIEC8oCJXLOASYryjt5EbrD7+0jiOKEwPSS0xZdg37qHcPBn26w0uYjxfzcrqp2act8MUwWHaynBkHt7EAgZjrSwu34lxohPAiYiLrxe6capAlsAoWXlOirBbinCZdim36I3sTsb5+YQC11iinAXOC+shLqvayrHR5YRshziSTCHmJRpEF7c2nEQQoDMqUigqRXX5gppsQY9ZrySRDEWbyUoi13j2Yp941jjTYRwgmTVwYmwdry+fPSFDltXIE0XJRUnkyOimiSxVmfaqmWHkRN7G9jEnt9RtJZk10htcRF7SU6nJMCQrCUMJJD4+XMXn62Z6Whp1kaIk4tSdptO3nkUV+9GqlYBhuKAYtd8klDY+Z5inVkKT77eDPu9BFC9s4PwFpbPCZ0JwWwC+Ug6XGhTv+kN2+OO4jcvf9qMLzvNXk4+B+8qX/jhz/F0xF6L8e6SYgT3vLhk3nGuYb37+ChGpvJXyibDc0qpdRLNO/ifUgMV+YsbYWNpCNOckni9DkjT4k/XkClo6vFs4MroJuyFYMm7Hog6+I52gxTJMPNHAjZEgRnWAxVIdGlmDYZZP1epqJeznj7k47NtAumBhpWemcZtKjWOAZVU7MKlD9Ibb6fRtQJLgj7FK+qUCviLUYWFcSFMhCny9Aox6HzeY4AeGBk5lNBzxrUWrymDSzSKBfxZKjZnId0MC9aklvKexi2uq+0vGWkJNdkJ8WaMuoFNniGcsdHg3Y9REaXYeKRm3s9GpsxQ4RxdTQBaEUlmhSpRw6gcxqcdYUf0Mx/wzkyO2FWOYHds4FVzEydBKbPoQelWUbLKBTeJkdun3c4pH6ot6SvqiZ4jn3aQKDhy6EY751/Ksfx5tA1B+WjFk42eFr8tE+Pa4UvfmNk/3QM/Fg0nFe+vMKao234jC42klLLozDR+2vufFD0fORiYAuudXojHHy585A/f3RuwkPH019N6v/G5phvCh5zXFYe9mOrybEQQB73h1aXs6b+PV7v0z1t3SOT1PhBpoqDyEJGtZXfsYZXofJ8PrafdsRUac1jamkGrmE+IlmIpOioKFT+iW8LlKiUWuTobHG895XlZtkIHoMuzaUVqr9p1z3Nksch1mgWs3PfkCu4dfw406DYfq4E0mkc9X5PmtpYrbNfVsSK0inViPWlVkuVpFf3QBCc1pDPqL6xh9IguyGOWLdi0FwT7jdZM6hCRNuqYadYGR6HzsOi8mTey8RrQoqWiteO7cB5eFaapSoUwdza5ORqMeEOSSZifAybE6lunHeIMFmiqO0+7ZRpkpyCJXJ6mCnV9WxVEBbVp4rqZIh3cLVTZvSV8UFGWURRV7aXZ14rL6EEWJKlnHRql+xqk1quGbFfDfbjDKGo752867njmVWywQLCi1hwUZnkrC/yTgciO06EBjqbmoef4qMgFQPT/lljleGfxVBu7ee+9FEATuuOOOadu7u7u58cYbsdlsWCwW1q1bx+DgZDgjm83y/ve/n/LyckwmEzfeeCPDw8PT5ohEItx8883YbDZsNhs333wz4+Pj08YMDg5yww03YDKZKC8v5/bbbyeXmy6zcOTIES655BIMBgPV1dV86lOf4u+2MmL0SXhiPQQnvDVDNXI+AvLFV3MXiiJNzoM0lR1isesgvuQiZeqoG6MmSq1eonHKmlsqZ6BnbAXtlZ3s961gRfWzAHhsg6iFzITQsLJG0ze2gC7fGloq96ETkxg1EQ4Jx9jiGGRwfCmdvg24LMNnn1KJscw8tKoU85x95xxzLh4YraVKtLCu5s/kZQNyaBNf0DVQY8iwrGKA95eH0YpZqk2HKTePscDup01tIJ2pYKevnqfiKkYKMJhTPIrgLKIbHYHl5DQBuqMtzNdkOOlvpmNkAyf8bUiSQLW9j0xRqWTPF9R0eLcgqUKYNDEqrbPrWJ5Bp8kzPN503jEiypPH6bH5yLLAsdEVDMRXcLQYJpSaVEAZyyxkS8X0451ZZ1vi3oc652SH/lIOz1M6b7d7ttLlW0s0rZx7Nq9BRoVeo6x7atV52qp20uzu4T26Gg5YGrlB5WG1WsNAvVJP+O92yISXc7AhT4/l4h+4nksrLXRcavBolDY8T6TgRzH4iAMs8U/T+dSOC0/0Qkn7wfcYONpeumPM8XfLC16D27dvHz/4wQ9oa5v+went7WXTpk28853v5J577sFms9Hd3Y1eP9nw64477uDBBx/kgQcewOl08qEPfYjrr7+eAwcOoFIpMZ6bbrqJ4eFhHn1UEdF997vfzc0338yDDyqSPcVikeuuu46Kigq2b99OKBTibW97G7Is881vfhNQaiWuuuoqLrvsMvbt20dPTw+33HILJpOJD33oQy/00l98pAIc/zJ0fIxSnErrREKFmBl5XlN1+TfS7tlGOqfHH3NjVgdJZEyMJFpYOUvTySOBy1nmeoJYupJlUxIfvNE6qszduG3KF2muoKZQ1FFmHECtKrK0ahd3n17CsvKj2M2UQqGz0enbSKZoo8bciTexmExeV/pyvRjGEk4WS0tpKd+GKMq0Ve0gEKtkJL6Y4FAD88sOYTeE6Al7aHYdAcCij/PfqgO8JX8JTkGiM7aAHeEsR1RD/D5dYCQP91Yoa0QnQzVUSJU8Vwzx/8Zj3GE/xFUOkGToibgIZOrZOdRKUVCzQiWwd3gzeVlCFPLU6JJo1TOvpSgJDEcaiOUqKcpaBCQKso59w6/CoRugqeJYaexQZB52vY+xVDV5vwZRlFlefcbbO8halLYw/piL0cR8lrsmk0LOdDWYisfuxWaIcHpsAQ0Ta36tVXvwjtcylvAQz7vOmViyzLOdWNrCPdJyHFodgUATFvt+HKYIeVnxIo3P47H4ChPcOQb/ZoX/CCmf7ogE/xuHq4wg5d7IgrUrLn7Ci6X/N8oDo6Mdmt//4s8/x8uCF1TonUgkWLFiBd/5znf4zGc+Q3t7O1/72tcAeMtb3oJGo+EXv/jFrPtGo1EqKir4xS9+wZvf/GYAvF4vtbW1PPzww1xzzTV0d3fT0tLC7t27WbtWWX/YvXs369ev5/jx4zQ3N/PII49w/fXXMzQ0hMejtMt44IEHuOWWWwgEAlitVr773e/ysY99DL/fj06nrH98/vOf55vf/CbDw8MIgjDrOU7lJS30lmXo+zGc+AaMT6lVElRI1hbE6JHnPWUwVkG2qKdmov1KIFbJyegGNtb+ccbYSLKMcKpCyTCUZRa7O+j0baDCMICMjMc+mbzSNbqWausx3hcq8iqhkXoVfFoaQU2Ehz3Tk0rOkMoZOBrcTIW+F7WYx24IE05VEs1WssS1Z5qu4vl4aHgJy0xxahyTUYAz2X/jKTt948spSAbMav+0IvGOrNK1OpRwEk5VcjJrwyabOUUKXy7KFqOJYrGIUdBTpvPxzmwfz6ThfTb49lkZ+5/rb6FbfZIri804HV1cZZ7snnBoeAOLK/ej1+boDq5DQwyP7TRG7cyQZSanYSxZRjC1iOPCKP2FAmFJy3313WTzWvrCS6i1nSwlr0zlZKCFXNHAkirlGn1RD9mCnvpzeMSZvJbu4DpaKnaj0yiRjWjaikUXv6h7r3j3q9GrxkgVXBRlLatrHrvgflO5zQ+LtIqu5IGskqgSKUJGhioVfG3ed3jNze99XnNeFNvfBO1fAJ0TNP83Ag1zvHRc7PfyCwpR3nbbbVx33XVceeX0rCRJknjooYdYuHAh11xzDZWVlaxdu5Y//vGPpTEHDhwgn89z9dVXl7Z5PB5aW1vZuVPJstu1axc2m61k3ADWrVuHzWabNqa1tbVk3ACuueYastksBw4cKI255JJLSsbtzBiv10t/f/+s15bNZonFYtN+XhKKGTh0F+x5FxSmfBEKKuSyNS/IuA1F5uFNNJPK20lkTBwYuYKCpMGm9nL8rAakkgxFfZhUwU6q4ECrSnNsdBVtVTupsPimGbfD3k20uvfgMMb5RU0Kh3qcqGqUSCZJXILALAIrkWQZR4ObaSnfQb2zlxrHIL3h5eg1cZZW7b5o4wbQqNEhy5Mf1bGEkwVO5T22G8dZ4XmGFVWPkZf17B+5ksPejSQyZton3naNKseCym5eXbubJeX7eV3lEd5Vc4K17v1UGxIsce2noaKPVi18ogwumWW55gadlV/U5CnKVroiCznk20i3fyX+WBWyoKdzWEk/z+a1NFUcm9W4dUcd/CQwj7Qqj0ZMsyin46O1vfQJgxwbd6PT5FjsOjTNuEkSHPcv41RwMaFsU8m45QsqIumqcxo3AL0mx3LPVkZjNfhjboqSiCSpL/reG7Vp2j1bqbIOIwpF7Npzh5/P5mAa/t2vGLVPhSFagGaNsswYlSELXKXVs2L1qy56zotGlqD5g2BumDNu/+A8bwP3wAMPcODAAe69994ZrwUCARKJBJ///Oe59tprefzxx3nta1/L6173Op57Tgm5jI6OotVqcTimNzJzuVyMjo6WxlRWzix6raysnDbG5ZreidnhcKDVas875szvZ8aczb333lta97PZbNTWnrtr9gtle8fX2f27RfhO/QpsSyAxmTouO9chhF5Y2xFJEqk0nmZh5RG6xi5lmftZAqn5tFbtJV/U0+ldR99YM6DIVG33rgFgZfXT2A1jlBsHAFCrJrNQxpNWmpyTIbBQ3M1yfY6rysd4sqbITbn5fGdsukUIxis5GVlH3PYUJt2k2LBdP0wi8/wb2OUlHYIw+aU8FFsybV7lnIssq9rBquonqTAO0hNexb7ha+jwbmE4upBwUqmJKEoqdOoM5fpCSbl/NKokOhSAu8tgjWDkyOASth7fxI7eK+n0rsOiVer3eolzQk6RQiJbNDGamI9BHcFkypPMGqgwnp5x/umCyC+8jcQKWt5bc4oF1jCtVXvJiZXk8lreX5HkVMrN/uErGI7UlfY77NvIUf96FrkOE8guZKFjMpO2N9RKrX12sekzDMQtjCSNzHP2UZBU9I0twmF6/sr6NkMMtZBhQeXRixp/9xj8IAa/T8KerKIp6ZeUQu/TBbAKcK2qjJtX/pHaRfXP+3wuSLQbbC0v/rxzvOx4XmtwQ0NDfOADH+Dxxx+ftqZ2BmlCZuM1r3kNH/zgBwFob29n586dfO973+OSSy4559yyLE8LGc4WPnwxxpyJyJ4rPPmxj32MO++8s/R7LBZ7UY3cto5v8Oo/38F3KqHKtVgJoZw5N0FNbnQ/uufxrkgSRFN2rMYosZwLAQl/qpF21xOoVUUqjKfp8G6hpXIXWnWeSNJOh3cLJvUYbiqps2+nUFQxni4nnneRKZioK+vHO+7Bn1qASsiRlSysrHqCcMpJrqij1qEYQr2uyPvm9/LZgYVkpR50InjHa/AmF7Om5mHiEowVFf3Jbv9yFrsO0T167pY05yJTtFHjmDT6xnPIeZ3BYBliiXUInQiD427CqUZGYk0E4y5iuXLUKgGbPoiKLAVJw8m0g50DRW6VzezqsSKJBkSNFpM5g0EVwmXpL60ZvklrY5nnCDDpzRyPOskmGzkVWjmtfU8yr+I7vgYWavO8taqvpH15hgVlB/HH3VzqHKRj3Eq58QRjqXrKjAGMugyyLLLUs4NDI1vQkCyVafiiHjJFKxb9+fsB3uE187TKx0fkJv69OoBWyHLYu5Flnh2kc3pOjK2mynwKl/XCiiTpovOCY85Qp1YEm50i6IG4rDxJL1cL/Jfqcrya/bzhimdZtHzpRc/5vBj5Myz52Esz9xwvK56XB3fgwAECgQArV65ErVajVqt57rnn+MY3voFarcbpdKJWq2lpmf70tHjx4lIWpdvtJpfLEYlEpo0JBAIl78rtduP3z8xKCwaD08ac7YVFIhHy+fx5xwQCSl3Q2Z7dGXQ6HVarddrPi8nDh+/nA+5Kbm7awrx0NySHQK0cQzY2EEqU0Z/aQjp37pqpqZwOLaKImgO+V7G0ajdu82nykp5cQdm/2j5Eu2drqYjXYRqn0thHMNuEx3Qcsz5Bl38jNv0YNdZjhDOKMd8TLydBiJbKvejFKAe81xBKukvGbSpnJJcGwo34kgtZVf1EaXu0qCw1FiQtYwkn4/n6aan2F0NR1nFw5HKiKaWOy23tL722ehD+cJYa1R8T8HRaUd74rt/Mo8kAA9IIze5jzHceQ60qMJaqxZtsxh+vYS9JHiim0elVtNYdYfOCp9hY/wgra56hpeoQ0UwFJp0ivizN8idjNIbIOvZRkLV4xxVvcDBp5g3DdiTgNe6BGcYNoMwcJpFXPocaMcV4vhYZsVTwrRVTihKNrGdJxaThDCTns9C5jy7fao6OrgTgRGApqawe77gSsn9wpJY/iz5iMtRpiuQKWipsYyzz7KDLt5qesVW0e7ahEs5q7jYL8YwFnRi94LgzvMsO8zUwJilJJcvUAr92fZr//mcv7/jYk/znXeMvnXGDuZKAOUo8LwN3xRVXcOTIETo6Oko/q1at4q1vfSsdHR3odDpWr17NiRPTC4l7enqYN08ROV25ciUajYYnnnii9LrP56Orq4sNGzYAsH79eqLRKHv3Tgq57tmzh2g0Om1MV1cXPt/k0+fjjz+OTqdj5cqVpTFbt26dVjrw+OOP4/F4qK+vfz6X/qKQzcbI5WPcbQ5BYCKLLXla6YOmsiCqVLhrrNRb9jMmX5zyeTxfyWB0KWuqH2b/8FX0RVeyuuYJ+sdbp+lWSpJAIOYikTHiTS5iifM53NYBVEIBt+kUoVQVAhKLKvbwwNAyatQio5JEMmumIOkxqoM0u2Z2HQBYJNgZCi0mnK6Zkak5T6N0+a61HieRtbHAsZ2j/jUXfc+SWQNWzQhLKrdxenwJ+4avUWrGULzXg1nYfVbXnuN5GC4oUlA5ZAaKRU6klS+9oiSypHIHa2ofY33dw2xofJIrKzpZYvXT7Do8q85kIje1QHjmn0ydBgYLSqjXl1xIh3cTvwxV8VN3io/WnTrv9S1x7+OobzXlhgEkSURGJJxUjF6L+wA5yYhWTJdUXDq8mwAZSRbJywa0YoaiJHAia2RgvIVAqomewALuyviRgOskF9eWJaiwTkqktVbtK3maJl2CI751ZPPas09t8n6OrafFtee81wHKg8y+jPLvzhpF1DoLNMlNvPk9/0nlvPPrpb5oaO1/m+PM8XfP8wpRWiwWWltbp20zmUw4nc7S9g9/+MO8+c1vZsuWLVx22WU8+uijPPjggzz77LMA2Gw23vnOd/KhD30Ip9NJWVkZd911F0uXLi0lrSxevJhrr72WW2+9le9///uAUiZw/fXX09ysrCFdffXVtLS0cPPNN3PfffcRDoe56667uPXWW0te10033cQ999zDLbfcwsc//nFOnjzJ5z73Oe6+++6LyqB8MUkkRzl24NN8wTiE+uxO2OOdUHkJBJ5DBLzCqzDk9nEe4QsAhsK1zLN1YdAmODhyGTIC8yyH6Am00la1i0Mjl5TSzQ+Pbma+4wDHxragEvIYtYmSMK/b5qXCMspAqAmnOcwi0cpS1w4WZY2cCq9AECSWzNLCplAUedK7FpMqRjJvZ3n1zNRztQBWFQxnzajFPH3jKwEVhaJIJq9nLOkmmXdQkIzICIiChFrIoFfHsepD/HjMzm1V3eg0edo9OznqW41GlWXfyLV0qvYjMca/qsuByS/wHWlF4xAUD2JMyLFZO3nPz9Zm3GBQfs5FUZ58UZZn/9yoC3o6vGvQCBlSeSsfnzd7p3GAvjx8MQyfcEKVGpzGEU75F7Jx4Q46vJuIZivxjlQyKgQIid20FRcRSdhJF4wscB5iNFbLyfAqBCTUYo5Do+s4JaWZL2swqKJ8JyLRI+ZwCAKfc8qzljGcwaDNsrRqN/GMie7gOtrc26YlocTSFlRCDrWqOKMrwBlyMtwTgq4cSMBVWi1bcuv5n6rn+GQIWlUvobd2Nv0PgPcRaLzlb3fMOf5uedG1KF/72tfyve99j3vvvZfbb7+d5uZm/vCHP7Bp06bSmK9+9auo1Wre9KY3kU6nueKKK/jpT39aqoED+NWvfsXtt99eyra88cYb+da3vlV6XaVS8dBDD/G+972PjRs3YjAYuOmmm/jSl75UGmOz2XjiiSe47bbbWLVqFQ6HgzvvvHPaGtvfit7OL7Jm+DtQvgHGprZiEaFiEwSeQxZU9EY30GR9BCznnIqRSA0mbZxUwUG2YKHJdAxRKLDUtU1pXBqFwXADTc6DHBi5Ept2hNbKHRwLrkMnJpARS8btDN2BVbS699LtX0V79TYOjFzJUtezaMQsrVWzP71v9S8mSpxyNCzznD8xxptsQ68ax6CKsrRqDx0jG2mv3oFZf+4swLECHJMt0xNKBAmjLoNWiPM6S4pErglTUWAobCaUrUUjZDBwgH8yK+5rXpaJihnq9Mr1FqWZWlqj0Sos+mgpDHk2s4UlAXzj1YQzHvKSnsutR/Bl46jEIvOdh9ndu5F182cvYG7UwPemRMjdNi9DsRayeQ3tnu1IkvJ+LNdIjOX1iGKO7mgzFdoE2YKZRL6coqSiznaCSouf3w5ouURtQytGcTiP8vMEIMGtxfloikZsxs5ZzwPg+32NbHREaHVEJgrC17CgvKNUVtAduoSVVY8AiuzWjWZlv/si8GEHeAvwet90L7oib+P9H30G54l+/qTVUDX//7d33uGRXFXefqs6Z3Urt/IkTZAm5/HMOAccwBhssDEGjEk2YGyzLAu7eEmGbx1YE5YlLYsxGFhjko3xOI7D5ChNDsrdyp1zd9X3RylMj1ph8oym3ufRM6OuW7fqtqQ6fc4953fOglrJIP7d4FqsdPHWji2wrTL5URuejsNpqYOL99Lz3FQKDSZAACkFyT7IX6GEKOOdSLp8jnrLmFYw+sNokMM9s/Any5mZ/zaxlJWW4Fyq7TspsA17Mbu9y7FoA5TYWwnG7PgTpdS49uBNr6Jc9wY6bYbecAFOcz/RpIV40kgiY8Soiw0p/m/ruIJyWyPFOVQ6Xu0uoydlYo7owqbvoSp/ZPbgsezrmk8srSEmWcjXh2iNF3J11UtjniNJ8IeOxdxWMSyUvLdzAbNLdrDDs4YF7vWkMyJpScf+nmVDxcuptIbOUDk90Wre0W9HEtJcLZfh0Ec5Gq5gmrWFYsfw3mxUAo+vhmmjrEFRc1EyGN9pfTfT8t7CZfERjtvoi5YSTBWRb2yn0jVsrLe2X8ZU5w6cFv+Yaxykw1/BIU8Nl85W1tCfhqaeWXxXOghJK0bM6NEQkFMclKNcL+Zxo74Sm6mJV0IFXGMUKTB38A+5hw91wTzRxFOmWhB0FJia+VIwyRWOAHcdI0fpi+tY3iHwE4sLBFhb3Dn0syq1NdMamMWswi1D3d5Ljiptc4ISPBOGmy1KaPb1GBgFeJ8VahJL2C/s5d8ufYO65YsmtPbTyuDjrHcDFK48+9dXOSuoDU/PJ/Y/TmHhYtDooes1EDRQuHpIkiuiq8PrSXNUr6MoZsVuyq2d6ImaCYfLCaeKWFy2jgbvcmRZpsK2O8u4Acwt3UgsaWBP92p0mjDvJNMc9i6nSp+hQ1eFXpPCbuxjT9dSZFnDPPfbHOiqJ5kxU2Dt5VD3HFyGlpzGLZGB5qSFeUIldaUvj6ixy8Ws4p2sb7uMSnsD1Y5e0t7x9+F+1q+lWpetkCIKimemGWjsqdVIaDUJ5rvXs7dzEbNLtqHTZqhwthBKFHBf4eCemrIX1hGexe8DDn7k62SBAW6xKoXI25MJ5J5ppCUjbWkDRYIFrRjDYGjDqhvW4Zzi2ERLcAE6zTacFt+AvuPIdP35pes52F1HSjZTZM3d7WGQjCQSTjhYUL0Df8ROniVINFSBXaPh96UZfh8McIkxwLRWZV9rugaeSIV4Jt3Nt2QXa7U2rPo2Cmw9LEsqf9Rft5RhEFJIyHzBJ/LndIClx2mQ/mtzBZcisy8q8Kkpw8Z5VvFO+sN5mDTBIeMGStH8Y/7h838Vggqtcr1yLTxsM+H+xBuYrOcwyWMwhtq5DlyLQDOxZC2VyYkqtnw2mPMvcOUrcNnf4Yb9yifLAePmzVyCPrYP9IVc7dhG0lQ36jR/7q3GaD/CVNcO9nYuQCMkKbK0UjzQwyyeUtT/IwnlAWPSJ5hVuIGUZOcLqa18MPEmIc0h7AY/baF5GHVx5pZuZJ77bXZ0rKW2uAGNkMLjL0dApqYgd4LETu8STJki5pUobVxmFu+kwTucFCONEhMwixqqHYohLrI0D2VFjkY4MoUiqSpLBX+wY7VBMzIZJClZsr5PSSMftDohQRSR/Sl4NaoUIs8xgMXqIS3rmVXcSNSxjfnu9dSVbGFjxEoolc+OjkvZ2n4VwYQLgxjBafGNmPtYtJoMLnMPR3umkc7kbjEw+PruzkuoLW7EYQ6xp2MOAF3R6UwvUpJ6brWDW6/8sc7Tw4cccIMZeknw40SQJ5PNNEeL+FvHNEI9q9lcUEpZpoq45KA5E+MP6S5maTXcabAPFI7X09RXyfO6Vm7PizHFFB9xb9v9tfxAzq57e6YESo5ZilWALxrv5Ev6pTzs/Co1H4ucW+N2LFortP7fub4LlXOM6sGdDXTW4f9bq2HNn2HT3Rzd62GKRQlJlVl2gLkKV/IAsagBkz47MWB/1zyutwbp619NWckb/Dwe5ctFLRSYlYdTOiNytK+e+e71dAbcNPfXMa1gF3t7VvNPvIgO0CAw39ZLk38+U50b2O69hqXlf2e3dwUWXT+9oQIEQSaasjCtaC/Hk0xr2du9EhETN5W8yf7uxdSVbsIXcVJgaiee0mPUJQlmIC/Hb5ZwTHLNY8lu3hevZIk5d/p5MAMSRua715NKa2nwLkcnxtAIyvuyVzjKz5pqOEiQnxYkKbKFmO9ez07PavIMXn4SiVFl3sLxVXeCIDGYL9glKdmWAO+1we6wki05WPYgyyBJdhaUDxdY94XzaQlMrL1LyUCfvl2dl1JqOYA7b7h2LpYy0x/Ooyc2jbqiY/bqht4igdb+KVS6jpLOiPhjTmbr+1hjgs874RoLzAjAEkOE10Np/kXqYJEOOqJ9fFGsREsaAYl7os24BIFv6+twmHex27uCeMbB+niKasnG4ZiJu2uU0GxPqJBCWw8d/jL+S9hKjajsse1LKJqSeRr4X8MCNskVHE1vIl+w86n7fo7OoJvQ+3FWmfFZ2PNNRs2MUbkoUA3cuUBrRl76C3zv3AQDTodJG0ZKW2jrLiBlPUQyYiAVWIwoZNCJMaJpBzOLd1FJE9cdLePFzAFe7oFdSvUFe7pWDqV+lzg8BONOvMFydGKEf3LA7V7QAS/1VlMlWDDrIuTp22jum4IoZJhR1MBzbZeyUWrh6+7ciR/7upfTnA7TJ/uw+WtxGjtIpnW0BOqY5trB/p7l1Jeu55ZO+GenkploGTAWkYQZ40CBtiTBLwNQITpZJLXm7Dj9F28Ztw50jNZp09SXbgQUcWGAW/xhzEKYiAyr/TXckighkCwhIdmQ5G6eTHbweI7QvICEdrDODOhOaUmmBfTaFNJAhqRl4HmYASqE7ALnfGsfzYHRAx+JlA6Dbrj7w2CGaoN3Fd7ITPRimKq8PbQGZlNXsokyp2IEA1E7XaFKjBYDm9uvYYpj+5CAtVYjkZG0/DWvAEnWk850MlMv8a1CeKAHno4lqNDDkTS0iD4Wl/h4pmU+1ZoETtnINbp8ykQTh3tmkZH1THNu5t/8/ayMz0aWRXrDBfRGykhKVpr6Z/GOpgmdJsPPg/B9v6Lw0lEDJVqYeuXTXL1g1qjrP2/Q6MFUqjQ61Y8dKVCZvKgG7hwh6EzM+uSf6X7+eork1wEQk11UuZQ9r7QmxdFIkBlFiiZlb6iQXZ5VeOQ0L2aUrMbdSXi/F74iDydBgJKIkW9qo9jRy7aOGq6zwGvl8HJY4NdBP89OOciRnlpmFDWy07OaEsth3mq7jBohwoKCrqwH9CChuGKJN8md/CHl4wXTFMqc7ez0rGZGwVYO9C7Bqu1BI4BTA1d74F9d8PV8pbXMob5FQ/coivD9ImjohQ5/JRWu7M7QkgTJdDmVtpHZmxadEho0CooBAniHNh4qSCPJh7i7U6AgVENKhsLgUnbHNOg0ae4NHyJCiiX0skQrcI1WDxqZL1g1PN5twp8o5k6TkkVZMeCQaAWwCCPrwzKykc5ACSXHJKqE42YO9y+i1HoYfSKG0+ofOqYRJeaXKWtv6ptOs78eSdawreMSokKYpN6DV9/N7UWNiAJsbr+WtCTS1l9JLO2g0nkgay+0O1iELItotUkOJPsxiVCjhT9GlD0xQYDFJTv5R3ctP7Dm45DLMWj8FFo7CPYX49f381IUPmnMo1+O4DD6SWX06LQ9PNvv5Auxtqz16oGEBBs73sPy2y8A4zaIZYpq3C5yVAN3DjHbzUjX/ZXOv1xFiVbxUGJJPQd6l5Bn6CSUGg6FecLl5JvamOdspb4FGgZq182JMuZXDxs3XySPbn8eU1x72NGxmgKj0gJnumBBl57FQ1OUjMSphQc41D0HAYn20GyCyQw1Li9llpGp8qGEhl91zmalTssjVR7+rwm+Gw5wf2Y51Y7dHOxdzHTXVqxG5dxHC+BvEfh/PviwFfy9l7K47OWsOdeaQNTY6Ys7CHSWUONsHErT3+i3MUuXO2VfKyrG1yxAVAYNsCutxBl3J+BPERkDzdygKefmymGhgLaQjsNSijJNEF1eN2tS0JIGvSFFqRjHYPIRDL0Lf8RB2TGNQUVGGnuNkKQrMo3OyHQ0QlrpcefcP2TAd3tX4LTmLpuoyT8EHMKbhvmtA0LVEfh2PkNqJ1ohjt0UHBJsPtozgymFB4fmKBrYc40lDXwyPY+/mnYNNUv97MDzfLoRvIUHuKwdFmu6eY+2nLWJWdh1EQIZ+IBVoFLSE5JD6LRpREFGI6b5SfogAkqktFoLHzUbKU0s4LDtfi7/8Ptzrum8xVoNUQ+Y3eMOVZmcqAbuHGPNs5K57u8cfHoNM4oaONS3GIMmQoHFS298Cn/rmMG/xDrpE3awc8De/VcRXNIOV2jy+d/q4X5xrf3VtPtqmFXSSJOvjmn52zjcv5RoZx4yGuaUbM26dlIykJZNIPTzCWkPW4wjH+Z7OxchybDY3EVtgeJpvVkO17f6OJRxMMcUYL7lzaxzqnVKjdQ3++HXnXN4uOrlEfMWa6FaY2C+Wzl2qHsO04v2IMvQGJ7JJypzd/zWaRTLbhEhlQGNAG0D+2ivxpSH8pccEtWRUo7ViyyXrBzGh0s0cLsdvjyQdCoDU/XgjYFF109HcAZ5li14/BV0RWuyklm2xGCJSQlzHqs5eSzNfVOJZ8YXlO7LDHdhWGSAhwZOOdwziynOnVndCEQxR7sGoCtUwQJHlJvyFK/3cjPcZNADynu02giXmuCdeAStcIDfS2CMWPgPpvNFuZSEbKNQdPOq93Ly5EbSkoH/Z2xiV6oCr7mYe1Z8kWkL5yBqLtBcNHstdL1x7gxcrBNMZ0m9RSUnqoE7D3AU5hG69i/43lxIROjGmCmjJ1zO4rJ1PNZeSoMcBBke7IFflcIqE3zNMJ2HK4e7EGzvuAy/lKG2aCve0DySso1AtA+kNDHJQYn1UNY1d3tXUGE/gC8W4WOBfj5tdPLXLjefqB7uHLDTs4Zy2z78sXzqilrpz4AZKNHBoyURvt7ZzRTvMuaXjQwl/rMT4qEZ3G3LXfKQSmsoMg3v9dkM/eztXMhbqSBN8uhp9VoxxY9a66iVPQSEBG6NiFXQkUiFecCZ5GM2iAL+RLZRKMvYQOOjXVaKxt0a+Ihd6Ul2oPMSrtR6SEpWtEKSWNJAZ2QqC8te52jvzKE5uobS7CV2eVYhCLKibCKASznGSgAAVGVJREFULGtw6L3UFBzCFvERSVhIpIy4rH3kYo5e8WLfisF/FymyYgC+ZBXTCvdljRWOV74ZIJAsRiOkqEAJ+37QDu2+Eg71VQMyVfYG7nX42RSD7jSUSvnEyfDxsJe5miAPaudx3UN/UebqDYAs4yjM44pR3/0LEI0JkoGzF6qUMiAlQTuQTZqJg2akML3K2UE1cOcJ5TOr2X70D/xgz7u4KZPiNrciavxguZdfHrbRKId4Kgy3hqE8uIaHK5Xsy55QAS3BBSwofQWNKLGhfTnzirZh1sfoCRaSEUxD4seDxLRTycgG/tZXyS9SHm4ziXza3cn+YJDfecp4d2EP+3uW49B3kszoCKcLgf04RCW70a6ByyzwL/jZmxKpidlxmLL75h30rOCbZVtp9c3Iud7GrlXoxBi9oQAyAh3hmexMx/hzOsILkpdKP3w6L/ucaMJIb7iYh5N76ZElPmOHHw4ogmzuruahaAdJWeRJfR06IVvFYopG2UvTCYqX6slArV7xuOy6ALVFR9naMRWNkKQvUkwGE+G4hWCyYGiO1ICB0wkJ6t0bR/1Z5lv6iaf0mPRp+sL55OcwcoIAX3bC60ZYNPD8S2c0GEX/iLFleS0c7plNKFUA2i7mFhxEI8rkGbz44hU0903D7WhGr01T7myl3NnK3s5FhJIuXg86mKv1kMhYeVMevo8D6TA90nZ+um0P0xbNwVEwSfeq9E5Ih8+8get+C3zbQWtRWmA5F4BvhyLBp3LOuEBjD5OThe+6gvdXPMGj6S6O1Zf5R1mcwfKj5v7ZQ4odDZ7l+GPFLC5bh0ZUnr4ryjfS3D+brmAJhfYeKmwNQ50J0oKTAz0L2ds6lZ/GOjiEj9emdvNpt5LAMNMexZcspy+Uj0ZIYtH3kTR1DWXaaQYSOwbr3J5wp/hLpoPD/dnJ+Ie65yDZGjDoUkwv2sNur6Io8aQP3tUBD/cyIAG2hZbgApqDC6krepvbS3eyWqc8iB7ph58FFJURb8DNLs8lPOWt4y/JCEFZWeuxCv1Li5oRtSk2pROYCrahFYbDrYmUjjqjlqk6WGaJ4c9AsQieFPgTbmoHEnk0xJni2s2/BaM4Cv/O0f65pCQz69quYHPHdST8l7C5/ToiUj4HusbWVzTqkpj0CTpCtaOOudKsNFgdZH/3ImYUbB8xTqvJMK1wLwvc65lRcIBw3E6jdxl6k4eAFMOXcKM/piAbFKHmQmsHH9NX8fdiPddoCzm+Gu91qZdfv/gxpMxxFeCTCft06NsM/hNvIJyT9HF7w6kQNH4TRB3Ufg5q7lI8tgP/CfufOD3XVDlpVKmucTgtUl0nyDceuwxfsI3Ha48MvfbPzRXM0Br5WPkhgjELB/rWMLtw/YjGn4Mc6aklmnZi1fVSU3CYjKzhUOgqgsE0DycaCRLhrakji6X3d80nlC6myHgQX6KCDfptREIzWasvZEnZiwD0pKFwwPf3R2284ithkVGmOv8wzaE8UtFCphcPh0R7QwUYdXH2xdPc06fHJRn4T0slSdlOkfkIFc7hLEpZhk+2urkur5P7+iQ+p51JRjLi1gdYmN9EnR70hxVDe59DycYcRJLhX/vgEiNcadQSS5kw66NoNdnhyh922mnRBJlvgEXxWdQWKSHBg91zmFG0h892K/tZU0MrmVv6DscTiNmJp8wUWjtzljgcS4N3GfWjaHkez5b2a1lS/uKExgIsboWbLHC/2UZK0pGfo5mpL5LHUd8iymz7+E3QzIPxwxiAa0xg04A34uDf3N9i7cfvnfB1LziklLIfZjkNfR1TQRC0kIlB2x8h5lGMmrV65Nj9T8DML5z6NVVGMNHnsurBnYd8/qN/wWVLEEkpn7k7A24+YTHxsfJDHOiqp8Vfx5Lyv49q3ABCqWJmFW0eUiMJCbNJRfp5Qd7HQyWdfN84P3t83EJj5zJmFu+k3NKIgMw011ZWJBdxqc5JofEQf25dQl9CwCAo3ZkB8swhdFIB3qSy5/CXfjfTirL3+zozAu9rs/J0WMtfKoO8t7CHT8SOkJRiWcYNlNDdjys8TIks5zXbdOYbwtxQspOPuJuYqlP6y43GXyPQlYFuSamds5tCI4wbQFfShhFIAXtCw8obxdZ2ekOFfL8IbrZC6jhllEFshhCJtAlf1JXz+LHUOBuIp3LLRUWTw9fuDRcgCkl8kbxx5xykIQHvtUJPuGyEcTvYXccu7ypM+hiLyl+hxOHhgYrD/I9xPkeq4T02+Ekx/KMmjMb3U4J9wdwXmQyEj4L5NAk+6+yKkWt5BqZ8FOq/ltu4AViqoH/H6bmuykmhenDjcC48OIDDW/cQeePTGMQwxZYmLMYwOzuvYGre1px7OoP4Ik6O+JawuDxbyLg5MBe7tgOLqY+ABMaUjWRGj4BMW3AO+cY2KlzNQ+N3eNYwJW8Xf/E70aXt2LQxGujn3yJ9zDXAs8VQNfDcTmc0fLd5JtN0Nq4o24hdVDQTQ3EbB/pW8Jnkq9xkS/PV4e0s8g/BNeIUfuzuztLe9EQtbAnk8+7SVuIpPX/yLmR16caBmjTYkYB4oIp6cwitRkBEoi1Yx7yBFP2uNPwxPHL/LpXWIggyWk2Ge46W40BHmWhksVhMmBAujQabNo1N34tBEyfP3M/e7pVD4eDjOdhdh14TpTp/9G4IgzR4l2PW+omkXUiyFr0YocjSgtPSR4e/imCiiGjGxWL3PxBFmdb+KfjibgQkXKY2yp1tI+bsTEN5E6SnK8lAg/d5oLseEKgtyi3aHU8Z8EddlDi8fKtPyTxNJPL4Ts2TXPKhO8ddywWHlIHwYSWjciKkgooRG4vAXkj0Q9ElY4/LJOHwf8O0TyqF5yqnDVVs+QJn2uI5bGh+AHPHVwgmnBz0r2JZ+fNjnrOvaxE6MUKxOVv8t9G7lBmFO4a6eheJgDbEga65FFg6sorEB2nS7+IXngL+TDudcjMrMzoWaPUsFA1UpAq4vLWX/zXOxaox0kk3v5VbeKcsjF0DR3tn0BOfTolpL+7il7jWD/8VJMvA3Z8HT/hb6I1MJSX1km/p552eQv4t2k9cbOUPzaV8xRkjJvbwj6iiVN+Rhuk68JkilDiGPZb2kLL/tC8Jh5LgHdiO6gvn0xGaQSTpwKwPIMs6knKaVZoAC3ROCs3NbE0ESCULWOJopuC4Dw5jdbtOSUZiaQcwvoGTZA1TC0cKMgNUupqBZhq9S4b6sFW6jlJ5zLz9ERfN/noysh6z1kextYn/S/eRPxB/OTYb1WnspiiHQPYgRl2C7mgNJQ4vX3DCV/Lh2uYkma7NwCQ0cIE9kDe6vusI4j25DVy8ByItSmjy0I9h5a/Hn0ujV7y8tj9C9Qcmfg8qpw3VwJ3HLLv5Jt5+7FmsYivzil+iuW8a1fm5BZB3e1ciyRqqnY1ZOpY7Pctw5G9Cn+MnXVs88lP+C2F4obsUnS7GB8uO8D09tGagRp8CUkNtamIZMGmUWrW/hWBPBP7srWO+xkqRuYlE2kNVfhOSDP/igoMpSEugHXgof9kF3/NDmaOZ7pCbdEZHc6yCTckeCrWQFr08GBApFdK0BOHtKByKw43yTL44JdtYDKbR39vsolWO0y8meVf0Miy6EFNdu0eEcst95bidipDwTQB42NpxFeHkfh4K9VMmFXCLQUda086WjquxiL3MLs1O/shIerTi6I1Ej6XMdmDcMRl5dNX75p4qFla/QYNn+VAt41pfERZ9Pts63Fh1nfSGYzjN/fjjRUMG7v/1K/JaHx54Xh/omktG1lFXvIGm3unUFCih5IfyYyT7O3Ne+4JFykD/VsVzEya4EyPLkOgF29Ts1w/+EJI+MBZBKgyLn5y4vqWog0ADSLco/1c5q6gG7jxG1IgI7qtZIH4YULpJpzOarH2lQNRBk38uNc6dOEzDSSP7uuYTTzsQbdupOebZ2ZKCg0m4ygLrYzBfr6T9A7zs1/GvPWZ8opejx+zH1wwcT2dEnAalRs10TEreuyxQrxX4RzLMNYUdFNl8FDu6hoq3jQI8Uzo8fksMftDp5j90lcB2KlzN7O1cyO2VWzG0z+LB5D6SwMOFEn+PhlkiKF26E+k8vlCTyxNSDFxakJDFNO8yp1nuXpdjnILZ1MuXmqfQQYwiQcNduipA5lC0Bp2+jTY5wlEztGfgq8XtpDMaNrbfiFH0MX+gwDsj67Foxu4oMEiBrXfovRiNtDx6CCstmZAkMOqGDXW9s5t6Zze+SBcGbRSzQRHdFoUU/eF8BEFidXQmLn2E5lQEq8FPbfFu9nUuYE/X0iFFmEM9dRjiRrZL/Vw1odVcIMS7lHY54gk84jzPwxs3Qt48mPUQ2GcqzYlt08F93fC4aMfocxyPlFJaY3n/AWU3TPw8ldOCauDOc+Ze926kvwu0+6tIZCxoNRn8GUXZvaV/CsFEQc4QYyztAmTm2bMzJR/shccGQoWSDN/oh/8ohAfbbLwQj/P+vABfH0UsX6uRSGSGEyMSKT1PemYTJUww3UKrJshPe6vZ7Q+z2pqiNiUzPcc8L3fN4xdVDWhEDzs9q6nJ200io7gZt5TvY4pnEY26Ayw2hplvhK/3QWc8j1fKI2hzdilQEBHI16axRiqAkftWg4Q0cV4Tj6IXwGWAeUWK4sl2zzIeLRwWoC8buFYqo8Wu9TC9YBdb2q9hZsHbZGQdFn3uTgi5iKTzxzwuMfqne4sxTkPnJTnVU1oCdVn7hCW2dpp8M9EKGRaVbOFAzyJi6Tyq84/QGSglIdmY5tqO1RhmT+dyZhZtRpeWeMqzcMJruTCQT8y4AZgGFE/8u2DT3VB7P1S8FwqWHTeudMSpo6Kzgvta2P89pVQhb+zyEpXTi2rgznPs+XZ2hT/EbPtv2dutZILlaZSQZFrSs7Ds9azxobgFmzFCIBNmddm2EfP9oWQ4unKpWUna+FZLOTqhn8YpKTS5W5cNUVvUwJ7OxbyaTPOXzFF6NTt5vQz+VQSZflrT/UwNavltv41fyW1890gBCTmDXTDyG3c/DlOCW63xobq9+e432eNdhF4TpD/iwmXpZ4F7G0X+Uv7YlcdVhe0Uxyr4fn4Qq2mklJiC4sEJQI8sYcmM3eSyUANPFChSWc5j1ivKWqwpW5YnDOCL5mPUKs0/l5T/g+82LcBNgpmGftIZEa1m/DqyfGPz2APk0cNoxbYWCmwjE4tiSSM1eTuzXjvYv5gS82Haw/WEEy3Ul24ikdKz27uC2UWbcZr7ONJXz+ySbcwpUYrVS7RwvWZiLYAuGBJ9sPkTireVCsAVr4B1ivLppect0Lsgbw6kI0pY0lIFroVQdKlSsL36OSi5PPfcEw15HsvM+5Vi8MM/gbIbT8xIqpw0qoG7AKhcvBbdwaeosO9hf9c8REFCljUjjFubv4ZCi4ddnkv411QDLwuZET/g47cOvuCEjakkxY7ouMYN4HB/GS8mY6zX7uEHJUrSx7EF1zU6qMlP84H8EBkZREJ8uhv+NwgPdhfzAU0FVcfoLALMKd1GU+9UGnsvoU5+C5e1n7I8L1cmjPy0bQ4r9QIz80b3yISBLt8iAs1pKNSMvT9iFGGVeeTrEjocphChuI1AzEkklUcyY0FGYIpz59C4VqGPt9lLT18+a+TZ1BWvx6gbPSEFoMLVyuGe2Uwr3EtzStHrTMuKJmWxFhBGN5K5jBvAwd4lQ9mjAP5oHkgC7rx2Qgnlw0I4buVw/wJKLEdo7FpBqfUQVn0fiZQew8A9G0UoF9OkEqnzs7fbyZCJgueF4e/3PwH2WXDoR0riSclVYC6D5t8oJQQ3HFA8PscspWB7NON2KhRdAoWrYNeXofzmkZ6hymlHNXAXAM75txNo+DJaTQy7oY/uaA3TCkeGq5q6yum1VbM3neFfigPoJ7AP7o/mMd8ZwDiB59ob3jmEhBAPVu7hwQnc96Cd+X6R4jHphC5+3Rtnt5TirgzkH2NQawqO0JSw0xKcRjDRS5XrKPsiepYYUkyzBjjSMzNnJuLB7nosOh/pjEiRtR/CUGOM887BFaQyOhwmP/Orc6fMH89gt3CbMYTNGAKUGr3eUOFQpwSAI1KYlD7BA2UewEOjdwltaVhb3Jglknw84ZQSG64eeK9l4LkwFGmhivSo5+VCkgRcxpas1476FjLVpXjtNfl72d5xKVOd25nvfpNESkeJw8Nu7wqKLU1Dxm2QxkwnvLyeRddPEiVK+bj6x4M/yP6+85g92vBRaHgY5n4Dggeh/utn7r4EAeZ+UylHUDnjqAbuQkBrIu7+KNLRXxNLmQiXfpJ3pA9jlgxovc+xvOw59ngXUl++h+ZAHVc596EhH1EYvV4OlAJyT3gmC8teHfcWesMOnkt38r2K3HM2p+D5CNybN/KYTgCdRokOlVgC/KjTTrEZ7jguG/vysh283L4EJwI7OlbQRZT3lO8CwGYI0OBdPtT4tDecjydUy9zSd3gtCoubYcFAZLLF0sZtFYrH9/reiWsBjpYVGUy4hpqPAnzUkMfvhOEyhTxjF91xI9GkmYO9i7HqeklJJjxpgXxBKRYXkEnLBrZ2XINAGpEUek2EK8QoeimBX4hP+D4B9nUvyuoO0R0qxqwZvke9No1RG8RhVh6kBl2KXZ5VzHO/PWIugF1SmP6G7+c2cFJaSY/X2SZ+g0mfogN5Nul+U9F/zKtX7vlEOPCfyr81HwZjwdhjTxVRC4bxRQJUTh3VwF0gFK/5Al3d65Hn/JxLFs4een39L6Ic7D5EmaOJlv7piKJEka2HvZ0LRy0IjyTM7O9dSaVt14SMG8BTfdWscu0a9XhrGu7vgY/ZwTTKFsWRFPwqCAICdaNsk023H8Gij+IydyP3Lx163aSPU1+6kZ2eNYBMjXPXkIyWTlCEk9ealBDpZ/KG59NqJv6gM2hyK8PkGXvZ5VmFhAYRiUttB7nyGJGTcmcr+mAxBdY+CqxvcqRnJrOKt5OXhtIJ/IVFEhYOxU5MRCAlmUimtUMalJ7QDOa73+RA11wcZsVjPZzUM/uYc3Sa0b3L6UIhS/VHeO3JrzHzhk9QWpmnCAcDRNvAWnNC94csKSr+7X8G74uKlzT7n6HiPSc2z/H4G6B/O0RaIRNRrhH3QtKvqPhfuV6Rz2r/07Dg8URIhxWR5OoPntr9qZxXqAbuQsFUQvEdb1EsZm+UrfnYJ3ntR0FmmP+JZr8Oq66PZFpLShq5yeSJmPliVz73WgVWHteAdDw8cpzPWUc/Pl8PaWBnAlaYco+Zpod5Wi1afZJ5oxg4lz5Bd6iSUKqEmQUb2dpxFXOLXxt6kOdSFolJ8E4cvlMAq4+79orpG+gLu8i3jtRpPB6rPnfav8vah8ua2/MZpMjehS+Sh9PiV1T/mZhxA9BrEhi0o8uu5UZmd9elmDU+alyN5Bm8AKRkpaTgquZ8mqXtA3V+CrOLt9PgXUF9aXYz1kbvUm5xNlNk7yaWPEzDs1vo1afIs6dx1L0He54Rpn9y4rcWboKjv1SSMSpvhcr3Q/gItPxW8eymfvQE13oMvt2Kl+V5XknfD+xV6t0SfeB9SfGOLJXKPtqMzyoGdvsXlOvO+Cx4/ga+nSPn1TkUg6gyqVAN3IWEmDsL5LLPfJHXnuimzva/+GOFNHatYmHZG0PHPf5ymoOzuCnxGgW6NlacRMKcXtAwVu6GXQNfcsLycVpfhaOVXOcaXf3DZowgCm1MNRzkSM9Mqh072NO1kqq8BlyWYQP0PR/cPxABK9DAVWaw5/AcNaKEaZTu4MdTYOme0LjRCMQL2O+fgzxK/7bR8MdcVOkm7mn2hguG6vEOds9hb89q5pe+TFPvdCIZiWlHjfTThwC09JaTwUQwWYpREyDf2MLR3ulkJD3Ti/awy7Oa2UXvoNMqe1b+aD5Vtu149V0cSgkcfLWVFkOGh6/WYJj1sdEzCMNHkbvfgX3/gRDYDcVXwBXHfIjS2WDet+DIL6D5tyfvKWWiyj5WXj30bwNLjeK5ISieppQaLqgWBKV+rewGpS+bzgr5i+HN98KUu6HpV8oYQxFc+rxSyJ2OgjZHBpLKBYlq4CYJC+74F3b/KsBC12/w9VSQSOkJxJy0heqZ4drIysp1fPHoAt7tPIogTLx+a5ConCEqgXmMDOlanaLyP9ovVUqGHZkQX8mtYTyExaCE0qYW7me/r5DtUg9CYA6huIeqAe1HzzH2YIERXiqD34WUFjvHdhgI5OhVl4v+sBOXdWKF26NRnX+YTaHD/L23ipUncF4w7qTSeWT8gQN0haspsCotyWcU7WF7RxEaEXyZDLfFdtFLkoisdBpoiU5ncel6puiO6e4QLqAjWMt2z2UsdL8GKHqWWiFGoaWVYnsXxUBjQqbLcZR3ArDy2ft5pOr7XL3wVnAtBiAVbKfv8Ha2tb/Gj/q7aEgFeZ+9lMeLUUKD6dhw48/BPbGpHwPvOtjziKK0fyLNQNMxxVMbnE9KQ95c5UvUQNWtI8/RDIQKxIHwQ9lNcMVrULRG8UqdC5Q5jQOf+iJtqoGbRKgGbpKQV+RkzUM/Yf/me9n15jWIXWuozd/AomNCkR8oOsjG/sXMdAx7d2lZUQlZZlTSxY8nntLT0HU5MzXdPOGHr4yxN/5RB/gzsD0BW+OwJQEa4BfFimH8R4+b/y7tHHGdwz1zCKeUQmgBCUGQEJDQCCk2pUN8KbmPxoJiuqM17PK4kRFZI/exw5OPliRpDFi0fbyaaCVf1vNmlw2DLHI0qaNAzKdQ68euiaLTR3CZQjkzHYOJ/FM2cAB1ergz3cLjMTMu08Q8x2g6D5124h5c8rjwc3qgSPyH0lHaB5zHr5gd3KmpRlf4Gj8e0LI2CaAVoFDTi97RS61OKfbf5VXk10asxaB8fdAOW+MRPtq6m1WeHg5m4hSLRjYl++khwQot7JMhrQF/op8DmXrwT6X2WOOlOSZ2XHqVko6//QFFqzF/ychF+huVvbaKm4eTW/Z+B6bcpRg2Q75ShD1KVGNUBEEJbYKidALDxg0Ug5gKK96eygWPauAmGTOXzmNX2zfoO/IzDvYtpEPsYnNKYLnGxjxzD7XaDN9sLUdnbadWA1/t1eGXRNZaEjztzp7rSE8tL0by+HTlP5gvCXzVWwCu3hHX9GXggR54Ow6HjqvFFlFCh5frTLgzdspMnhHXmFY4uoRVacTFmmgtJY4DmPRR+iOlNCd1zNRliGUSzCraSiKtx2KI8f6+fOrNERr6pvBUuh2v3MNCTRefKPBhiOdxX4+GI2kDTcQp1OiYLjgJyQlsgp5SgFANVYIFs6BBQxqnKOMSMxRr02gkPWltGIsugtsYwmHIXXSep1Ha8LzuK+O9pkM5xxxPSjoBLwbQi9n7dXpBMaSzjVAWg//SL+Xyol3otLvYmlB621kFMApK6YZFUIriAxL40wJ1RWPvLwIsNkLDFAAvJUfgy0UwIwYvReG9BiuHxTA9GfikLcLGcANLE6bsokvzcb9c5nJY/AOl8Hn/E4pXqDEoDUQzUTBXKnVimz8Jle9TDJ5zvlKsnehTDNzJojErIctc3qOxSNnXc8weeUzlgkM1cJOQ2265hx/8cD+94Zf5UOQgAFeb4UUnhLvzCCXyeLU/xJcsVjaV95ORtBzqvwR4BYCMJLLTewWPpDbSlenmXlFGFGXypRL+L9TL9oTSjfryAUfi92H45cjeqQBIwF/CIiv11ayp2DfiuC9RCYwuRuy09COg7A+1+WcRFQIsch3B219JvVtpJBqImbAYYswUrRSb+igu38x3WrSEU2auyI8okltWP89YoSlQwOO+KpZqzZSKWo5mUnjkFGFdGz2JfMoEOykhyT8yPUQzGS7RFGOXwCq5uKtkH5KsGIammJ5I3E4sbSGVMZGRjMiyjuaMBGzjhYTEov5KTNoE+daeIeWW3O/R2Morx1NsbR76fyxpwGlooy+uR/JP5ZNocItG9vcso1+O8XimgTQSm1NJ9ALkiWAQwCGCSwPPlgg09dYyrWjvhK/fORUlkcUC0wKwTDZytzWGV85QqYOSJByK9zJrvIkEUfHCHAOKIhoDWKcqSSKDLPkhHP4ZlN+kGDhQEkJOBa0F0qHRw6N6p5KVqc87teuonHNUAzdJ+cyn/oMfPP5xLtE0o0GgLp3Pvl4NU1z7+ZhQywfT8zBpfOg0XbT4ZlNl30m7rwJRkOgI11Nf/BoH2hMsFkuG5nygfA8fbS1nndxOUFLS8j/cBX/IYdxE4DKNk1t0pdzmaqcj6OBQz2ymFw4/SNMZkTzD6Aolg8TSFqSwiEHfSWtgFkFdCFEcLuRtC87BG45TaB6eKy6mqdDYKI7XkDTvHWoVVOPo5fuObC+0L5xPT2QWM6t3AoqH+fGhoz4SKT2N3dXKugRF3stpSoKpF8ieK9FVDQn4efoIC0NLucKUoDM8Bb0mgiTrhsKLejGGTd9LvnX01ja56Ay4KXEMe8Ft/mn0JPU8HzJzX3ErbnO2d3c5ivD29IqdeFLQnIG2FHgy0J+B3UmJBUV72eW5hFlFG4eyVcdjsJP5nQ5o8E5DY9+EKVLEYX8B4VQBhVrP2BMMEu+CotWjH9c7oeZD2dJWJ6oxeTxSUvHiRsNUCsEDqoGbBKgGbpIiakQ+fu8PqPt+igrjVsKpIgQpiCwzohnm7JJtNHYuI5gqQadtYkn5i/SECvmsQcdau39onFYj81RNO4+3zmZHoolnwzF+c5xxswFzRCcfNZn5hLsDUPa1XJaNHOzOFprd272UuQOF22MRTOQjySJ7xHcx2/4bXNZ+DvYtZbe3iNqCrdQVv41WIxGMWekJFuKLF/MDjQu7sZMphaPX7g2Sb+0bs4msovoxsczIQhH+zaUolLThp7ZI8aCP9NQytTC3osqJ9Bzuj5VmGTizLsgUg8S3HaMr3Bs1AfKPQvA4J3KFEe62K7WJHyx9i3DUyf6emcw9roxgPHRiDFGUKbR1U2hTMlEP9swdVq0eC2ECEjqnW7dRa1b6u8XCYCzOTirJJJWSgvTE9k9Vzm9UAzeJMZvNOOruIrS3fYRu5fG4rQco5TAv9VfyP8153Kit4RPlm3OOfaByL/0xC//VPYvrND0YBR3lgoUFWj3vcrXwg5iPGxyKYcvIkJCVBIca1z4avCswaELMKGokLY1SMHcMaRlqChvY1vdpbrnvW3gOf4qmv70vZz2c3RQGU5hCe0+OmU4Ni3ZsVZhBinUp/j1PySh9q394ny6eGT1pQZhob7Ec5Or2fTx5Jh/6oLLvNk+vSIVFZCVM+UoMPtWtJBr9d7GPzvDoxeCj4TRle6F94XwkWYvyoWCctUknpuBy2pBSSvF6KgixLkj2gaEAEMFUrCSZRFqzw6UqFxyqgZvkLLr+St7Y90f2dQWZVbx91HEuq1/pWWZvwh+08oHYFn4ZgptHUWdymSJ8pWrknhrANwY+EPek4Z5uOJyCb+TDzdb0UJHxns4lTHWO7HYwSEqGN2PwfyHojBbx6889hiAKlM2opOBTb/L6f3+FS4sfm9ibcBoQxhBDPhaNqIT4brTCC33DBi5X4f0gBnHiuoRp6cT26wCcFj+3mUW2pSS2xJUuCl/Phw9YYWcSrjPDXyLwfu9MrizdeUJzJ9NaCo8Ls7YFZ5MxVo6vui9PwACeCZL+YaksnV3x2uwzs+9Xa1HGqVzQnETfB5ULjcqr7ieesZLOjP3jnl60h3LBxFqTkeed+TzZbSc8sed6Tl6LwZ8jYBPg6uOctVgmb0gnMRc6AX4ehLfDJr6w5jeYbcMTGMwGLv3Co2wx/01R0D8bTDCMKA4YwoQMuzN+pIH3Tx7lQX64ZyaF5pacx3JR7ZyYcPTx7Ixr2RhX6hRNIuxJwNw2+FKvUi/XmYEuQzMtfVNOaF5PoBJRHH5vPP4K0rIBS+kE+p5F25VsyrONPm84wUSWFW8tlzEWRKUzuMoFi2rgLgJq5s3Ar1tDY9eqcceWOLxU2TvIS0/h6ZI41x1x8ewoGZLj8X4rfNWlFGJbjitXsmjHT65YYICrzO9i9ercCvdL3nM9wZXb2Nd15iWWtOLEki8GPbjmFOiPMYpGTRiP3z1ifDBZSonDO6G5O/wVShj2JHBhRAusNkJfGp4IwNGUUtrRmYH9VXC7M45BG6c7WDTufIMEktn7Y93RKhaXvYx79rg5lEqCyamk+58OBGH0bEpjCYQOTnyuVEjxBlXOG9QQ5UXC8o/9Cwf/+3V84TycVv+YYy2GGAWmVjSiSFzfz792WpmRMjMnr5v2DLg1oJ3ARyNBUEKT/uM+BB/ormdW8fieyKWRK5j72d+MOaZy9hQCRa+x6X/uZFnZX8e/qZNEQmRfl9L1WifGMGojmPVh7MYAWs3wAvXaJJKk1I3N15sQB2rWZhVvZ/GRPJ5IVJMv52M3dFPubCMj53647k0oXux0/fBr/bEyysboizcWNYKNUm0QTxrmGmD9wNaXVYDbbIpYNUCJw0NL/xSO9LiocB6mzTeFSKqAjKxBI6bRCXFMuiAOQx9Oqx9ZFvH4K3CY+rEYIoDIoZ46plctGv+mjm9pc74hCEqCS6RFaYg6FlGPMj7ZBuaKE+u8oHLGUA3cRYLJZiI5/cu0HPouTut62vsrKHflflj2hV0kMyYqTZ1sqIApTWHuDYeJ9JmIoKFW1HNNXoib7CnKJ5AEl3ec9xZJjS+GuctzCe5bfonepB93rKPAwZIH/sQb3/s8a0t/MO74idAXzudQYC1x+yUUzlrFjFsWcOAHq6kr3TRibChuIZqwEU1bSabNJCQLGUlPVSbA15tKuU7nRhTSrNE04xa1xDJauqLTKXe2oRmlTU53Rgnxvs8K9QPbbhk5+73Y7V3F0UyM6VoNAhKzS0bf06zETI0ONsaUDt4ABuBnxTBrYNo9nYsRhTRGbRiNmOZIbz2RTD4LS19m/YE1VBX2oBWTVLiUPnnJtI5iyxFCiXz6Ym4kwUBa0tMvL1SaiY6FlFY6DpyPpAe6FJjdA6UCgtIZ/Pg1xQY80HCTckxrVgxi6LBSSG4c//dc5cyiGriLiKKpM3D17WBf1yJmFW9jb+diUrIBDWlSsgEBGZMmgE6TYEqBUnwtC9BYDT/wg80WY5YOrrRCRzCP3V1TeSaT4L2WJFMKJhbKCUQdVNp3jjkmIwnEqh7APXXi+zOiRmTajV9k7982MvuYPmkTpaV/Cm2x1Uj5Kyidu4qpC2azXJPtpqbk3IkiNmMEm3FkN4C3/fBOwMa/lTcAoPGspMK5mb6Qi5/7C5Har0VGpjdcjCxLxFIWQskCCsztHJU7qdLAzGNsmknjz5q/3L6PX0T7OaCBa+O5w8+huIVXe2eyQbeNrRFYaoRdCSX8+918pVi7M+DGFy/K6i83yNaOq4kkLcwsO0IiZaQvXk3T/krmVuwmLekIJopIxDP0Rwzk2VIYtXGkvLljvNMDhJvOz47WUhpi3uzQqd6htODJ5CvhTFlW9g91VsW7s03LLoewTYNYp+LVHa/gonJWUQ3cRUTl7KlEt2SYVax80p+IIdiThD+H4WvHbZWU2f2U2bdx3cD3zX1T2R8txisEuNnVQZ7Zn3O+o/4FLHC/PuY113d/gcseuHncezseJcPyLdb/1xdwCdupKxnpbQGk0lr29yymT1iBseISZq69jKoiJ+MEobBoT6z84C47/HevxPoorDGDURNBr02zV0pSbOhliXsPe7yLaQ/PYX7Jq0AP0MzOjtXMy+/kSErR9FxhUjp4lzkOD83t8btx53noDSnZqneYmkdcf2/nAv4qH+Xr8W2sMCphyI1xmDPQO+8qi9IRvcjSyqzinTnXoBPCtPjmUFeqlIxYwwF6tNXIskhbaM6QhuWbB1ZTV7oZrSZDu/vjOefKItEN9ukn9H6eFUQtGArBtx2KLh02XI5ZEG5WvDQppYQgpSTYpuaex1SijFc5p6gG7iJCEAUO9C1noXtiTU4B5htg7vhRQqrzj1Cdryjih2JWGjzL6JYMzLYeoTSvg52e1WjFBDph7L5nm9pvZMW935rw/R2PwWxgzYM/QpZkXv/p91hl+ieiSQuHfMsIm1aTN2M1tSuXUm8dvwbvWFKJFHb9xGrhBrGJ4BKMrBlQF7HofOzrXMD/xaI8WqF4yHnGTnpiRn7YPI89coA6nYb6TIjVRlh0zPZcLGXGpB8uPu6PlePO85AnKhmbGouHVFqDTpshnRFp7LqE7Zb1PNKrtDHaGgdBA4sMEJbhy0442F1HueMQZkPuMKnH56ba2UCLfy6t/TXE0jZqi3aTb+0lkdIz1TncTHR+9W60mgzRpImS2gnoOJ7P+296h1I2EDqcbYRNJYrCSSqgaGeqSifnPaqBu8gIWq8HJm7gdiWgNaXUdU0UQQBZEHHrwui1MbZ3XEq+sZkCazdG3eiFxH1hF/lXfAej5cTEh3Pegyhw6Se/wN43L2HGsgUs1p/ar3pPWxcuy4kZOEkGOxJve2qptffiMPmocLXyMU89+7uuQJI16MQooiDTTZxNmmbeyMDvikfO5Q1WMe1YmTPZSCCjeGP7kuCVZKRoCW1xJ8+k2/m0rZF36w2srUjw1whcZ4ENcQilYFM59PmnUGxtzTJunQE3PdEKyu2HcFr66YzW4pJaKbPtpy04m3LbcN2jQZccUHhRsBmUFkwdwVqmF+XoDnAs8W7Qn+PsydEYDD/qHaB3DeyvlUNgD7x1m5JVeckfJtZSR2dXVFH0zjN/3yo5UcsELjJqVr+bcHychmzHkJKh8AQ7kliNYeaWbmBW8XZiKSvTXFsJJMqIJi3s6VpBMp3b2OyzPMm0RadXxX326iVoT9G4AfS1tWPUnVgKuDcDG2Qfu80HKLD2odcmiSaMzMhrRSvEARkZEbPWz2WaSn5ZDH8ogUzfItIZDaG4g+0dl7KtdRXB5Eir91xEafZqF6EjDa0JE9+VGrnFLGKWbLT7llCmhdutsDsJT4Xgm/kQj+ajFeMj6hC7IjXUl27CaemnpW8KEiLBZCH51j4KTc3otAkavMtGSK4dS0ieAppxXP7Q4fNXrT/mURJGdHZF/NlYpLTtcc6Hy/6udBM35vgEkguDSykdUDlnqAbuIqNqzlT2Op9BkiamILHYCMtPLJqXRbmzla5wFX2G69Dfcoi45MIXLSAQy06jfsNzD6s+ePvJX+gM03949AzF0cgXoc4I5qjirRh1CXzRQhzmAPPcb1NkOsoC93qmFe4hTIq/RZSuDEFxQMaRFFohhajR4NBnixdbdb1ca1Z+PquNME0Hj0mH+bopn2rBRoWzBRmBRNyOVQM9GaWTQJ2ooz9WjDsvez5JErKKyKvyj7K47BWKLU3s9KymzNmGwxSivnQTecbRO59r8+eM/8YI4vgalecMIbvo278HgvuV/1unwIr/HVscOtd8p8r5mm16AaAauIuQpTffwPrAN8/a9TypVaz+xJdwFDhY/MCf2R+9lV2+4e7L+zrnM/8j/4Egnq8PPdD4T0yAGJQGsrdaYUdi+BNCODnc6qXE3jakdOIUg1xthpstoE0aaA/WEogVodEkIR0hnrZnze00dVGihWotbE0oJQXfNBXgxEqFs4VY0khaNtDsn4sG+L9SpZi7s395VkcHULJWd3degsM00tsotncxt+RNtrZfRXt/JUd7ZlBkH71Iv2D6/LHfFFlSkjTOV7QWRZ8SoO2P8PJqaP71yc83EUMu5RAR6N0E+/8Tejcq+369mxWB6LHInCNdz/MYdQ/uImXNp/6Z15/0kS+9TZGliWJ75xm5zob2W1j66e+hNSi/aqJGZO0D/0kmleG1H1dTKT+FvPRnOApOscfXGUSWZAq0jSd17mw9/J80nBySlIbDwwZdkkDUji9WxH9ljvB0G0zXQUPZVmIpM2Z9hDJtM1t6K0E33G28sb+UOU4vvwzCXTa41AwzZBO+cCnlRQ0kUnr2dK9mg9SByb6P61vgRTdI/Sspt4/s+3awZx7z3W+y07Oa+pK30IjZsmSiCIvL19EfzqMzMAN6yVkW0hfOp3TOOPtvvl2QNwEZr3OF3gHxXhCikL8cTG7oelWpjdNOPLQ/zAR8iKRvZM2cqFXaBB1brhDYDwhgLMgem4kre4Vai1KvZ59x7hVizhNUA3eRImpELv3Cfwx9Hw1G8RxuxtfaRLSnCTnchCF1GFPhX6jWQN5J/KZs6biGWR/5GSbbyBinRqfhss9+FfjqKazi7ODr6qfI0npS5zYmYbbGCvQDI4u1NWKacDKPh7TFfFwjkZTT7OvRoxXSyMgYNWEyiRqWFDw/dE5/3I0geNmbVByEVSbY5VnEPPdbxFMGGrtX0yF084XEXjI9UKqBTLCa6a7tOTMm05KBIz0zmVvyFgd75lFkacFl9Y0Y57L6cVlfZnP7dTjCI1sMdUVnkG8Zp3Yx3g2uMy+tdkoYC5REk0Q/LHxcKQk4KeM2CtEOxagNIiWVTgaCoLwebgLrNMXYHottGmy9Fyrep9QQxrsVQWiteXhP01IJ/galDi9vAuHiSY5q4FQAMNvNTFs4GxZmb/57Oj282fgOHs9BYn4PyVgrWrkTq7aLebZultlyh0X2dC6h6rb/Ja8o7yzc/ZnFYDayy38VK62/P+FzGxJwufbYB1V2yMofzedwykAg721EwCyAJEK+BpYMJJOGO7I/saclM/0DDUsHkQWBQNTBId8SdEIcwbabTBSMAjxdYMSZZtRygPoBdZZA1E5KMnLUv5iMtJ1Ce+6s0SLTQRwmHy19NQQSpUgDj5GMY9EE+r9dALsi8V4lbGibBs4JFK2fCNF2pUQir274tUxyYJ9PBq0VXAtznytqYcGjkOyHRK+S7GKbNnJcXr2istK7GQqWnt77v8BQDZzKmLhL3LhL3pfzmCzJ9LR303W0iaCniWT/UTTxJoyyh6Lrf0BR5QSzzc5zLA4LCz/zv2x9/eNEOg8jBw9gyeynxLyfCufYnQBWCg7qtcNemyhk77cYtHF+n2nlt8dta5VqwDMg7O/QZ4sxi0Kc34ag+Jjs1mnObRzoW4ZOiNPheItbvcof96+KIT+8gMoJNDF1mIPUm5UGtHs7FxJMuphacChrjDfgHqp3rMpvApqGjh3Oe//YF0iFJp6BeK7IJEBOgbX69Mynsyrr1tkUr0rQjuygoNErheQTQWudmM6lqRjCR87PMoVcsmdnCNXAqZw0gihQWFlMYWUxsPxc384ZxWg1sviGq4Crhl6TMhLNe4/Sc+Qgke4jCKH95LGLctv+ofBdfaqOoOgfOkcnDntRB7rnMa2ggS9H5vFoYRv+DIRkCElKDR1Ah6+MCufRoXNkGVyGLp4LwyePcQytxihu6wEaNF7e51V2fp4vgwL/Jcx1v3XC651dsh2vv4w9nQuZUzLcR7ArMpVShyfnOcU144Qn5QyIExAvPZekw6DLO33z6exKkoiuVjF0p6reciLZp4UroW8r5C8+tWuebkKHVQOnonK+I2pEquunUV2fHSaKh+Mc3H+YnkN7SOp28ef4Lwh4aimmGEnWkpFEukMl1Bbt4mhvLXZDALcW3Dn+GvvilZQ5O4a+3+srYY6rlW1Nip7ksZQ6PPgS8Hq5YuBc4VrKCnPLlU2E0rwOPB0zs16z6kYvdvfs30ftrPeMPqE+T/EqzmfS0dOfoGFyQ2AvCPqB+o+zmC0s6k4hQeYMIMsQ6xh/3GlCNXAqKqcZo9XIjMV1zFhcB9zGZXybw9v20L7hT+QnnicctxJNKmEmrZhCkkffl0pKFo70zEBEQq+N0Rktw2TrJANMyeEMzR4weo3eZZjNrRh0p5aSr2G4uL03lJ+lpnI8mdYXIP35sVU+NOfJg3ZUzkDNmc42IE12DnrFGQqUcofKW5XC9XON5+9gHUW/8wwgyPIEWxVfpASDQRwOB4FAALvdPv4JKirj0LaviSNvPEdB9PdoSDG9cFdWT7mxONA1mzZJYov+AF/Oz/2n2+arwmHsO+nmqIOE4hZiSTNFdqX+ardnJXPd74x5TmvJf1F5+adGHxDvBq0NtKegHnAm8e2EvLmnLxlGlqHzZWVO0znaf3zrA9C/BVb+9twmncgybPkULPnxKXuxE30un9JP8ZFHHkEQBO6///6h1z7ykY8gCELW1/Ll2fsziUSCz372sxQUFGCxWLjppptob2/PGuPz+bjzzjtxOBw4HA7uvPNO/H5/1pjW1lZuvPFGLBYLBQUFfO5znyOZzP6U1NDQwNq1azGZTJSVlfH1r38d1aarnEsqZtVw6aceoO6BjXSZ75ywcQOoLd7LlaX7uddspbFzKbs8l9AZGH5wdgeLEZFO2bgBNPvqhowbgCiMf5/BhmeUMN9oGAqHlUHOF2RZCeMl+sFcqbTAOR3qIbIMvh1QtObcek+rfgM1H4E3boBdX4XAvnFPOSO0PwcVt5zVEO1JG7gtW7bwk5/8hLlzR6bRXnvttXi93qGvF154Iev4/fffz3PPPcczzzzDW2+9RTgc5oYbbiCTGf4Duv3229m5cycvvvgiL774Ijt37uTOO+8cOp7JZLj++uuJRCK89dZbPPPMMzz77LM8+OCDQ2OCwSBXXXUVbrebLVu28P3vf59HH32Uxx9//GSXraJyWpETJ9aCZxC7KURdyWbmud+ixNFFc990trRfTWtwLoW201O0n5Ss7PJcQjRhJJHSMSV/7C7sezsXYaSbzo1jKH8IAqTPM33GaKtSLC0lFP1IS7WSbHIqpIIQaATHHMW4ncvOA4II9f8K726C/GUTz9g8nUhp5UNE6dVn9bIntQcXDoe54447+OlPf8o3vzlS8slgMFBSUpLz3EAgwM9//nOeeuoprrzySgB+/etfU1FRwcsvv8w111zDvn37ePHFF9m4cSPLlilNEX/605+yYsUKDhw4QG1tLS+99BJ79+6lra0Nt1tpKvjYY4/xkY98hG9961vY7Xaefvpp4vE4v/zlLzEYDNTV1XHw4EEef/xxHnjgAYTzVg9P5WJBSI/dPmgiRJMmgskClpS/BCihxQM9iwCocTZiNZ7cw7rIfJgKZwvhuJXGrstZWv5CznHpjIa9XcuGwpeNO/6PkuV3jJ7YoLUq6fjnw54QKA9frXX4fgRByX48WdJRJT3/fFNs0VqgYLmiJuOcd3av3bsRKm87u9fkJD24e++9l+uvv37IQB3P66+/TlFRETNmzOCee+6hu3tYnHXbtm2kUimuvnrYkrvdburq6njnHeUPZMOGDTgcjiHjBrB8+XIcDkfWmLq6uiHjBnDNNdeQSCTYtm3b0Ji1a9diMBiyxng8Hpqbm3PeeyKRIBgMZn2pqJwpNJL/lM5v66+mO+Rm7jF1bjZjhPrSjdSXbiQjiUQSE2jtchwef/lQjZ83VDmqcdvlWU1X0J21Nzcz71W6t/xu9Mnz6qH/xLuunzE0JkVN5HQR7wLLeO1zzxHGwrFDyGeCTFJ5f8frMnEGOGED98wzz7Bt2zYeeeSRnMevu+46nn76aV599VUee+wxtmzZwuWXX04ikQCgs7MTvV6P05ldfFhcXExnZ+fQmKKiohFzFxUVZY0pLs7etHU6nej1+jHHDH4/OOZ4HnnkkaF9P4fDQUVFxZjvh4rKqaCRh/vjJU9w26fBu5w8c89Q4XUuHOYg3mDNCd9XgbWLnZ41tPmqCKcKRh2nFWOUOduyX9Nk8O54efTJRd3pNSinQrxbuZ+JFE9PhFRI8QbPV8JHofUPZ/eaXa8oNXnngBMKUba1tfH5z3+el156CaMxd1PK224bdkPr6upYvHgxVVVVPP/887z3ve8ddW5ZlrNChrnCh6djzGCCyWjhyS9/+cs88MADQ98Hg0HVyKmcMfag4TMtEJagWgMvV45/TjBmo8U/m/rSjRO6Rjh14nVdem2K+e71ALjMvaOOS0u5nwNOeZOSrDGaJyPLZ78mLBeZuKLfeLqId4Pt7KXBnzCZBBz+b5h5/+ld92hIKeU91px6E+OT4YQ8uG3bttHd3c2iRYvQarVotVreeOMNnnzySbRabVaSyCClpaVUVVVx6JAi+VNSUkIymcTnyxZz7e7uHvKuSkpK6Ooa2ZKjp6cna8zxXpjP5yOVSo05ZjBcerxnN4jBYMBut2d9qaicKabZl3J/HnzRCZ8aQ1GpK1jCbu8KdnkuIRB3DelHToSprm10+E/+Q5rFMPo+oUnrz/l6pfMoni1/HX3S/MVK8fM55zRmVEdalCSV8xnHLFj+C9j3H9C3BfZ858xer/k38OYtsPGjZ/Y6o3BCBu6KK66goaGBnTt3Dn0tXryYO+64g507d6LRjGz93NfXR1tbG6WlpQAsWrQInU7HunXrhsZ4vV4aGxtZuVJxY1esWEEgEGDz5s1DYzZt2kQgEMga09jYiNc7rNP30ksvYTAYWLRo0dCY9evXZ5UOvPTSS7jdbqqrq09k6SoqZ4TCmSu4UZPPJ/PgfaNEyQ5216EVk8wt3cA891vj6l8ej80YIS2dGYmsGUWN7PauyHms/8AYEmE6uyIafK7JnKZQafgo6Bznn+5jLqpug8Xfh/wlMOUu6D/xZr4TItapZE7eFoNF3z8z1xiHEzJwNpuNurq6rC+LxUJ+fj51dXWEw2EeeughNmzYQHNzM6+//jo33ngjBQUF3HzzzQA4HA7uvvtuHnzwQV555RV27NjBhz70Ierr64eSVmbNmsW1117LPffcw8aNG9m4cSP33HMPN9xwA7W1tQBcffXVzJ49mzvvvJMdO3bwyiuv8NBDD3HPPfcMeV233347BoOBj3zkIzQ2NvLcc8/x7W9/W82gVDlvmLNmKXsCN496fH/XfKqcB8i3npoxOJO/7bUF29jpWTPidXtq60APs1GQ0+e2W3W0A6wnvj85AllW5jqXpQAni6n0zCWdpIJKAo/GoIhOnwNOa+8KjUZDQ0MD7373u5kxYwZ33XUXM2bMYMOGDdhswx9Pn3jiCd7znvdw6623smrVKsxmM3/961+zPMCnn36a+vp6rr76aq6++mrmzp3LU089lXWt559/HqPRyKpVq7j11lt5z3vew6OPPjo0xuFwsG7dOtrb21m8eDGf+cxneOCBB7L22FRUziWCKOBc9DEaO4czhjOSyMHuuezoWENF3oFTltuCiRVpnywGXW4vqNJ1BO+OF0c/MW+ekrJ+LhFPg1phJgbGkUlxFwSRluFecqeTdERJ3DEWQ9Qz3CX9LKNKdY2DKtWlcjbY+dJ6Mrv/HQ1pym17KbCNnthxohzuns20ouH9rmjCOGpvuJMlkrAQjDtGdBpoCNxK/adzlAxIGfBtV7yfsy0flUkoWZzJ/tOTzt/xAhSvPX8EjU+ErtcV77PmjtM7b+iIkmwjZWD/Y1C0VmnSepo4K1JdKioqp4f5V68haFh7Wo1bKAO/DkBSMtHaX8PeroVs67gcsyHO4Z7T+6ndYojQE60e8bpT3oQcODzyBM/z4Kg7+8Yt0Q/xTkX8WDNGfaAsK95NuEnZo0qNUiwf71EEjS9E49b+Z9j3KOx4QCl2P12kI0poEkDUwPRPKaUCp0HU4ERRPbhxUD04lbOFlJHY8NgdrCp/5rTMlxn4y76/tYIbdQ6udjcCSkZmgbWbdl8NgiDhi7uZUbAVkz5xSteTJIHuUBEljuwM6IbQnZgsWqqu+CS60oFP8V2vQ/Glp3S9E2LLfUoorvJWMI5e1zdk2KQEWKcpD+h0VGnzI8uKYYy2Kd6fsQSc88GUW7XpvKb7LXjtKsWTlSVY8iOY/unTM3dg30g5sFQQGr8JtfeD2Z3ztBNhos9ltV2Oisp5gqgRqX7Pd3nzTwYsQgs2XQ/Ti/ac9HyagcwSEzraNMPZxv0xN8X2TqoGCsQraSKeMtDuq8QXLz2hEoSs+xdlWoKLKHEoqift/RWUu9qotyl75wferqT2fQMGTp8HSf+ZScxIBqD510rozVIF1bcr6fv7H1OyBo8leEApV9AYFa/DUqUILovHZIRrzdmyW64Fp/+ezzZFl8CavyhJNu/cCVs+A6Iept59avMG9oIpRzNTnV3RwdQ7Fa/YWDx2W6XThBqiVFE5jyibUcnqf/ol8x94hQ7jR3k9+AQ7PJee0pzvsUYwxuqGvk9kRma0GXUJyp2tzCnejD/iGHF8LPoj+ez0rGZv5yKWVbzA9o7LaPAup9DWRU+wkFRawy7vKuLeHcqeDCjtYwInb7xHJXgA/j5fCUV6X1Tas7z1fqh4v+KZvfWB4YSHVFgxahU3g/s6xaO01mQbt8lM6VVKbzaXUlbFpnug6emTny/Rp2hOilplD+5YYl1K41etSXmPB0OYZxjVg1NROQ8J9PgxFkxh+ftuZvcrS2na81FqCg6e1Fwr87swJWqHvhcZPaNSFGXagrPJs2zIej2SsGAxREimdbT7a/An3GRkIwYxSKGlmfnuN4+ZIz2kstLVV0MsbWVe6dvEkkb6D/8D14x3DfRbO8XiBSmjhA51NiWM2Pp76HwFVv1O2dub+XklpKi1wYHvQ9UHFZ3IaAc47BBphry6cS8zqclEofuNgW9k2PAhRa/yZFT/4z1QcxcE98HmT8BVbw8r1fRthpJjtIvPUpmWugc3DuoenMq5QpZk9ry5Gf/mH2Kmg4Vlr570XAe7Z1PpPIJRl+BAVx21xY1jjm/qnUZKMhBMlQAaDGKQlGTCrPVRamvCYQ6Mem4ipcMXLaTkuIxKWYb/jXycj3zip8oL/dsUT048iSL0rtdgw4ch5oWpH4eymwb2w0pzPzyllGLczOXK98EDYK44K2Gy857eTfDSMT07dXZY9jOoeB/4G5T3VEoqXtdoSi2pMCR6wVqd+3jbH6H85tNm2NQ9OBWVCxxBFCisqiS/4hEOPPddYGIGri/ioi81CyETwSj6cZm7yLd04glUM6XgANMLG9nfNZ+ZxTtHncOXqGR20dtohAPotCeWYWfQpeiMTBth4AQBoj0HFGMj6hTj5t89HCKTMtDxZ+WhaquFkisUb0KWlFozjQkQ4OgvYcdDSvPMKR+FwtxKKlmIOuW6qbCSJBI+Avba8c+7GHDMAtfi4Q4PqSC0/F75AOBapHyI6H5DybS0TRsQk5bBuWDYYIWPjNOCRzwnuqOqgVNROY8prlYk7o5Ifho7lzLVtZtgPI9o0obT3EOe2T/iHG9oOlMr+jClhlVETBY9HUFFdFkUISUZ2e1diUGMYNH7KbB2YtQNZ1G6jC3oNQnEE9yljyRMHOxbwnTX9pzHy7WdHNj1Z2oXvE8xOoMBpEgrvP4uZV8urx5W/1FpjOrZDtEWpVjYkK8kKRjyleadJ9qzzVoDvt1gLjs3TT/PV3R2WPOcokt56IdQ9zWo++pwEbylEmruzD4nHYG+TUqxfqRZMYZjkTm9dZcTRQ1RjoMaolQ5H2h8fSPprV9CK8aRZB0gISIRzbiosO6iNE/xlnZ5V1FXvAFJFgloFlPARjK6EjrCs+nry7DA/UbWvH0ZyB/IqeiLuPAGpyIKEinZSDxjx6b1Mrtk55j3ls6IHOmdTSzjpCZvd87wpSzDoZ56NGKY1/SL+Pgt9yshw2QQdBbY9VXFoC14HKpuHdijUzmryDIE95+Y8Q8egJZnoP5rY49r/wuU33Rq93fsZdUQpYrK5GH60gVs31zICvez7PYsZ07JZjSiouO407OGaMpKKFUy1OJGg4QpuYeG4NXMzHuFSsOr9HPJiHk/3Q0/LwabCPmWfjzBGcwu2QLAbs9K9JoE8ZSB3nAJ4WQeScmMLCuPDVFIY9QEcTuaxtzT6w0X8NVePdcbylk4bRZ3Lv4QuOZAtFXxHhL9sOIpcC08PdJZKieHIJy4Z2uvhWmfVJJ7Sq4YY+5z84FF/W1SUbkAMJgNaGd+nP1HjlLl3MM277UISMiyyJS8zRzxL+Y104vUSmAaeJZY9CHkVBiddjBrcuQeyLvM0JcG2zHNlpNpHXptiipnA0ZtnO6we6CDwYl1MQClKatP6CIg+LisLon16keH92IsAyn5F6qOo4qCqQQ6/jZ2f79Y7gbTZxo1DqCicoGw5KZr6bZ/gs5QDdW2bSwpe5Gl5S/gDU1jet5m1kVE3u+FFyLw4oAqknzMZ1i9JoI/DW94P8vrPV+mM+DGIELDMVrJ9aUb2dutJG04TCGafbPpi52cXmMwZiOgP8SNkSY+Vn8f1qWPZT8AL5Z6s4uB8BGIeXIfi7Yroc/gobN7T6gGTkXlgmLN3Z/Co/0AocRwunZ96UZc1n6+rZ9JOqPleg/80A/BDAgMt6NxGb1sDvwrax98kks//20Mi/+NmugC1o5RcxtP27HqTu7Td4t/Dj9O9bFcLOGqdz08TpadygWLlFEKxs05FEyklJKROeUusE8/67emJpmMg5pkonK+kUll2P2fV5BvbKXS1ZR1rDNYxD8Cbnyyj3xxBVWFlyPF/ZAKYa1ZxeIbr8meLNKK59VHoe1PuPPaANjpWT1UuN0TLECjkeiPljCtcGIduH0RJy2BerC/xWf7ZR5f+2uWrLj9lNetch7R/aaixSmIkOhRsim1OT4p9bytjAsfheLLT5vXriaZqKhMUjQ6DZGij2L3PTLiWIm9m/fqo+zP/x1L3v2u8SezVOK+8Unihy7nwAvfJJqysGAgUQWg0N7Ljo61CELuz8HJtI4OfzWVLkWaKZ4y0RaYwbZ4O7/OSHyg6G7VuE0mou3DPfyKViv/2qaOPl6fPyxGfQ5C0qqBU1G5ACmpW8LU/Qc40jOLqYX7hl7vCRXhW7COJUvnntB8xunvwbEyQ+LN77Gt4woEOYFBEyPf7EEQJMpt+wjE7DT7pxOQU5TpkoRSRRjFADpNnIPd8xAECVHIILk28b0OHSvEeu796E9O99JVzhXhJqUIvOz6iZ+j0UPw4DmTRFMNnIrKBUgmqWSGRNN5Q68FYzZ8C9Yx4wSN2yAlS24BUzFtb/wKOR3GILUQS9tJSxpagvVkZBMGMUCHHMeRykcGim0thJNOAswmZZ5FOhPn2R49N9mLeej931br2SYTUlrp4XciWKcoySXpKOhPTMT7dKAaOBWVC5CK2TMI7LGjEVIAJFJ6mqqeZ95JGrdBSuouoaRuuF5O6t1B5u3n6W9tQpf2khLcTBOnkJAk0Fromfp5pq9YS4UhbygEteqU7kDlvEXvgEwExBNVkKk+Ob3R04Bq4FRULkDMdjO7/fXYdD0AbBF+wiVXrj7t1xELFjDt3ZOg/5nKqZOJKZ0ZTpRzZNxALRNQUbkgObxtDwnJQShVyFvp/+GSD981/kkqKidLpAVan82dKXkeo3pwKioXIFaXE+NNP6K89uSKsFVUJsTOf4Gjv1D20K7dcq7v5oRRPTgVlQuQkhq3atxUziyyBB1/VUSx0yGl20P46Lm+qxNCNXAqKioqKtlkErDvUQgcI6IdPqoaOBUVFRWVC5hUCBJ9MOM+mHr38Ovu66HkynN3XyeBauBUVFRUVBSSPiVb0uwGrRmW/QxWPq1kT1Z/6Fzf3QmjJpmoqKioqEC8N3f7ourboeK9oDGem/s6BVQPTkVFReViJ9apyGrpnbmPX4DGDVQPTkVFReXiJJNUeriJeqWzus56ru/otKMaOBUVFZWLiUxc8dgEjSKjNYlRDZyKiorKxYSUnvSGbRB1D05FRUXlYmIShiJHQzVwKioqKiqTEtXAqaioqKhMSlQDp6KioqIyKVENnIqKiorKpEQ1cCoqKioqkxLVwKmoqKioTEpUA6eioqKiMilRDZyKioqKyqRENXAqKioqKpMS1cCpqKioqExKVAOnoqKiojIpUQ2cioqKisqkRDVwKioqKiqTEtXAqaioqKhMStR+cOMgyzIAwWDwHN+JioqKigoMP48Hn8+joRq4cQiFQgBUVFSc4ztRUVFRUTmWUCiEw+EY9bggj2cCL3IkScLj8WCz2RAE4VzfzhklGAxSUVFBW1sbdrv9XN/OWeFiXDOo61bXfWEjyzKhUAi3240ojr7Tpnpw4yCKIuXl5ef6Ns4qdrt9UvwRnAgX45pBXffFxmRa91ie2yBqkomKioqKyqRENXAqKioqKpMS1cCpDGEwGPja176GwWA417dy1rgY1wzqutV1XxyoSSYqKioqKpMS1YNTUVFRUZmUqAZORUVFRWVSoho4FRUVFZVJiWrgVFRUVFQmJaqBu4AJhULcf//9VFVVYTKZWLlyJVu2bBk6LssyDz/8MG63G5PJxKWXXsqePXuy5kgkEnz2s5+loKAAi8XCTTfdRHt7e9YYn8/HnXfeicPhwOFwcOedd+L3+7PGtLa2cuONN2KxWCgoKOBzn/scyWTylNe4fv16brzxRtxuN4Ig8Kc//Snr+Pm2xoaGBtauXYvJZKKsrIyvf/3r4+rlncy6//jHP3LNNddQUFCAIAjs3LlzxByTbd2pVIovfelL1NfXY7FYcLvdfPjDH8bj8UzqdQM8/PDDzJw5E4vFgtPp5Morr2TTpk0X/LrPOLLKBcutt94qz549W37jjTfkQ4cOyV/72tdku90ut7e3y7Isy9/5zndkm80mP/vss3JDQ4N82223yaWlpXIwGBya41Of+pRcVlYmr1u3Tt6+fbt82WWXyfPmzZPT6fTQmGuvvVauq6uT33nnHfmdd96R6+rq5BtuuGHoeDqdluvq6uTLLrtM3r59u7xu3TrZ7XbL99133ymv8YUXXpC/8pWvyM8++6wMyM8991zW8fNpjYFAQC4uLpY/8IEPyA0NDfKzzz4r22w2+dFHHz3t6/7Vr34l//u//7v805/+VAbkHTt2jJhjsq3b7/fLV155pfy73/1O3r9/v7xhwwZ52bJl8qJFiyb1umVZlp9++ml53bp18pEjR+TGxkb57rvvlu12u9zd3X1Br/tMoxq4C5RoNCprNBr5b3/7W9br8+bNk7/yla/IkiTJJSUl8ne+852hY/F4XHY4HPKPf/xjWZaVB4ZOp5OfeeaZoTEdHR2yKIryiy++KMuyLO/du1cG5I0bNw6N2bBhgwzI+/fvl2VZ+eMURVHu6OgYGvPb3/5WNhgMciAQOG1rPv4P/3xb449+9CPZ4XDI8Xh8aMwjjzwiu91uWZKk07buY2lqaspp4Cb7ugfZvHmzDMgtLS0X1boDgYAMyC+//PKkWfeZQA1RXqCk02kymQxGozHrdZPJxFtvvUVTUxOdnZ1cffXVQ8cMBgNr167lnXfeAWDbtm2kUqmsMW63m7q6uqExGzZswOFwsGzZsqExy5cvx+FwZI2pq6vD7XYPjbnmmmtIJBJs27bt9C9+gPNtjRs2bGDt2rVZxbTXXHMNHo+H5ubm0/8GjMHFsu5AIIAgCOTl5QEXx7qTySQ/+clPcDgczJs376JZ98mgGrgLFJvNxooVK/jGN76Bx+Mhk8nw61//mk2bNuH1euns7ASguLg467zi4uKhY52dnej1epxO55hjioqKRly/qKgoa8zx13E6nej1+qExZ4LzbY25xgx+fybfh1xcDOuOx+P88z//M7fffvuQgPBkXvff/vY3rFYrRqORJ554gnXr1lFQUDB0vcm67lNBNXAXME899RSyLFNWVobBYODJJ5/k9ttvR6PRDI05vsWPLMvjtv05fkyu8Scz5kxxPq0x172Mdu65YLKsO5VK8YEPfABJkvjRj3407vjJsO7LLruMnTt38s4773Dttddy66230t3dPeY5k2Hdp4Jq4C5gpk6dyhtvvEE4HKatrY3NmzeTSqWoqamhpKQEGPmJqru7e+jTVklJCclkEp/PN+aYrq6uEdfu6enJGnP8dXw+H6lUasQnvdPJ+bbGXGMGH0Bn8n3IxWRedyqV4tZbb6WpqYl169ZltX+ZzOu2WCxMmzaN5cuX8/Of/xytVsvPf/7zoXuZrOs+FVQDNwmwWCyUlpbi8/n4xz/+wbvf/e4hI7du3bqhcclkkjfeeIOVK1cCsGjRInQ6XdYYr9dLY2Pj0JgVK1YQCATYvHnz0JhNmzYRCASyxjQ2NuL1eofGvPTSSxgMBhYtWnTG1n2+rXHFihWsX78+K6X6pZdewu12U11dffrfgDGYrOseNG6HDh3i5ZdfJj8//6JYdy5kWSaRSAAX17pPiLOY0KJymnnxxRflv//97/LRo0fll156SZ43b568dOlSOZlMyrKspNA7HA75j3/8o9zQ0CB/8IMfzJlCX15eLr/88svy9u3b5csvvzxnavHcuXPlDRs2yBs2bJDr6+tzphZfccUV8vbt2+WXX35ZLi8vPy1lAqFQSN6xY4e8Y8cOGZAff/xxeceOHUNZc+fTGv1+v1xcXCx/8IMflBsaGuQ//vGPst1uP6n06fHW3dfXJ+/YsUN+/vnnZUB+5pln5B07dsher3fSrjuVSsk33XSTXF5eLu/cuVP2er1DX4lEYtKuOxwOy1/+8pflDRs2yM3NzfK2bdvku+++WzYYDHJjY+MFve4zjWrgLmB+97vfyVOmTJH1er1cUlIi33vvvbLf7x86LkmS/LWvfU0uKSmRDQaDvGbNGrmhoSFrjlgsJt93332yy+WSTSaTfMMNN8itra1ZY/r6+uQ77rhDttlsss1mk++44w7Z5/NljWlpaZGvv/562WQyyS6XS77vvvuy0ohPltdee00GRnzddddd5+Uad+/eLa9evVo2GAxySUmJ/PDDD59U6vR46/6f//mfnMe/9rWvTdp1D5ZE5Pp67bXXJu26Y7GYfPPNN8tut1vW6/VyaWmpfNNNN8mbN2/OmuNCXPeZRm2Xo6KioqIyKVH34FRUVFRUJiWqgVNRUVFRmZSoBk5FRUVFZVKiGjgVFRUVlUmJauBUVFRUVCYlqoFTUVFRUZmUqAZORUVFRWVSoho4FRUVFZVJiWrgVFRUVFQmJaqBU1FRUVGZlKgGTkVFRUVlUqIaOBUVFRWVScn/Bx0NYRgaWk+kAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "Rijnland['peilgebiedvigerend'].plot(ax=ax, color='blue')\n", + "Rijnland['peilgebiedpraktijk'].plot(ax=ax, color='orange')\n", + "Rijnland['peilafwijkinggebied'].plot(ax=ax, color='green')" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "e58ee099-54b3-415b-8222-9545776a7a61", + "metadata": {}, + "outputs": [], + "source": [ + "Rijnland['stuw'] = Rijnland['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['gemaal'] = Rijnland['gemaal'][['code', 'nen3610id', 'globalid', 'geometry', 'func_aanvoer', 'func_afvoer', 'func_circulatie']]\n", + "Rijnland['afsluitmiddel'] = Rijnland['afsluitmiddel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['hydroobject'] = Rijnland['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['duikersifonhevel'] = Rijnland['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['peilgebiedpraktijk'] = Rijnland['peilgebiedpraktijk'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['peilafwijkinggebied'] = Rijnland['peilafwijkinggebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['peilgebiedvigerend'] = Rijnland['peilgebiedvigerend'][['code', 'nen3610id', 'globalid', 'geometry']]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "023a704c-685e-4fe9-9745-39a5ed461a03", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n" + ] + } + ], + "source": [ + "#fix geometries\n", + "Rijnland['peilgebiedvigerend']['geometry'] = Rijnland['peilgebiedvigerend'].buffer(distance = 0)\n", + "Rijnland['peilgebiedpraktijk']['geometry'] = Rijnland['peilgebiedpraktijk'].buffer(distance = 0)\n", + "Rijnland['peilafwijkinggebied']['geometry'] = Rijnland['peilafwijkinggebied'].buffer(distance = 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "eb236dc1-11b3-42c4-99e9-fecd568bec2b", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# peilgebied = burn_in_peilgebieden(base_layer = Rijnland['peilgebiedpraktijk'], \n", + "# overlay_layer = Rijnland['peilafwijkinggebied'],\n", + "# plot = True)\n", + "# Rijnland['peilgebied'] = gpd.GeoDataFrame(peilgebied)\n", + "\n", + "peilgebied = burn_in_peilgebieden(base_layer = Rijnland['peilgebiedvigerend'], \n", + " overlay_layer = Rijnland['peilgebiedpraktijk'],\n", + " plot = True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "a68eb09d-a30c-4530-960e-4dd0f329039a", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n" + ] + } + ], + "source": [ + "#Add aggregation areas\n", + "peilgebied = peilgebied.loc[peilgebied.code!='RIJNLANDSBOEZEM'] #REMOVE the boezem, as it needs to be split based on the second data delivery\n", + "\n", + "Rijnland['aggregation_area'] = Rijnland_nalevering['Peilgebiedenpraktijk_aggregatie_RL']\n", + "boezem = Rijnland['aggregation_area'][(Rijnland['aggregation_area']['CODE_AFW'].str.startswith('NL13_')) |\n", + " Rijnland['aggregation_area']['RL_aggregatie_id'].str.contains('ouwe')] #only select the boezem to add to the peilgebieden\n", + "Rijnland['aggregation_area'].RL_aggregatie_id.fillna(Rijnland['aggregation_area']['CODE_AFW'], inplace=True)\n", + "Rijnland['aggregation_area'] = Rijnland['aggregation_area'].dissolve(by='RL_aggregatie_id', as_index=False)#.plot()\n", + "Rijnland['aggregation_area'] = Rijnland['aggregation_area'][['code', 'nen3610id', 'CODE_AFW', 'globalid', 'geometry']]\n", + "\n", + "Rijnland['aggregation_area']['code'] = Rijnland['aggregation_area']['code'].astype(str) + '_dummy_id_' + Rijnland['aggregation_area'].index.astype(str)\n", + "\n", + "pg_sp_Gouwe = Rijnland['aggregation_area'].loc[Rijnland['aggregation_area'].CODE_AFW == 'Gouwe']\n", + "pg_sp_Gouwe['naam'] = 'Gouwe'\n", + "boezem = gpd.GeoDataFrame(pd.concat([boezem, pg_sp_Gouwe]), geometry = 'geometry') #add the Gouwe to the boezem" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "05098a9e-9b5a-487e-8b3e-7f3d82bda74e", + "metadata": {}, + "outputs": [], + "source": [ + "peilgebied = gpd.GeoDataFrame(peilgebied)\n", + "peilgebied = peilgebied[peilgebied.geometry.type.isin(['Polygon', 'MultiPolygon'])] #only select polygons\n", + "\n", + "Rijnland['peilgebied'] = gpd.GeoDataFrame(peilgebied)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "9efaf904-e94c-4c87-aeb6-c04d4f183e27", + "metadata": {}, + "outputs": [], + "source": [ + "Rijnland['streefpeil'].peilgebiedpraktijkid.fillna(value=Rijnland['streefpeil']['peilgebiedvigerendid'], inplace=True)\n", + "# Rijnland['streefpeil'].drop_duplicates(subset=['peilgebiedpraktijkid'], inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "1511cf73-aa2b-423f-be87-c95fb0d9bdbb", + "metadata": {}, + "outputs": [], + "source": [ + "#get rid of irrelevant streefpeilen, which otherwise results in too many overlapped peilgebieden\n", + "filter_condition = Rijnland['streefpeil']['soortstreefpeil'].isin(['omer', 'ondergrens']) #'omer' for all rows where something of zomer, Zomer, dynamische zomer, etc, is used\n", + "kept_rows = Rijnland['streefpeil'][filter_condition]\n", + "\n", + "other_rows = Rijnland['streefpeil'][~filter_condition].drop_duplicates(subset=['peilgebiedpraktijkid'])\n", + "Rijnland['streefpeil'] = pd.concat([kept_rows, other_rows])" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "7bdd80ad-650c-4e9f-a3bd-d675c4544830", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_22236\\371328050.py:10: UserWarning: Geometry column does not contain geometry.\n", + " pg_sp['geometry'] = gpd.GeoDataFrame(geometry = pg_sp['geometry']).reset_index(drop=True)\n" + ] + } + ], + "source": [ + "# Rijnland['streefpeil'].peilafwijkinggebiedid.fillna(value=Rijnland['streefpeil']['peilgebiedpraktijkid'], inplace=True)\n", + "# Rijnland['streefpeil'].peilgebiedpraktijkid.fillna(value=Rijnland['streefpeil']['peilgebiedvigerendid'], inplace=True)\n", + "\n", + "pg_sp = pd.merge(left = peilgebied,\n", + " right = Rijnland['streefpeil'],\n", + " left_on = 'globalid',\n", + " right_on = 'peilgebiedpraktijkid',\n", + " suffixes = ('', '_streefpeil'))\n", + "\n", + "pg_sp['geometry'] = gpd.GeoDataFrame(geometry = pg_sp['geometry']).reset_index(drop=True)\n", + "# pg_sp = pg_sp.explode('geometry',ignore_index=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "03a06d24-823f-4c20-908f-23c390b9b4ce", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "dbb4827e-17ad-461f-8101-f97f38b2b31e", + "metadata": {}, + "outputs": [], + "source": [ + "#there are duplicate codes, nen3610ids and globalids due to the exploded function. Rename these.\n", + "# pg_sp['nen3610id'] = 'dummy_nen3610id_peilgebied_' + pg_sp.index.astype(str)\n", + "# pg_sp['code'] = 'dummy_code_peilgebied_' + pg_sp.index.astype(str)\n", + "pg_sp['globalid'] = 'dummy_globalid_peilgebied_' + pg_sp.index.astype(str)\n", + "\n", + "#add the boezem with the peilgebied\n", + "boezem['globalid'] = 'dummy_globalid_boezem_' + boezem.index.astype(str)\n", + "boezem['waterhoogte'] = 0.61\n", + "pg_sp = pd.concat([pg_sp, boezem])\n", + "\n", + "Rijnland['peilgebied'] = pg_sp\n", + "Rijnland['peilgebied'] = Rijnland['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['peilgebied'] = gpd.GeoDataFrame(Rijnland['peilgebied'], geometry = 'geometry')\n", + "Rijnland['peilgebied'] = Rijnland['peilgebied'].set_crs('EPSG:28992')" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "67ba9685-90b6-4389-818f-a003d9d41dc8", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_22236\\1567509723.py:3: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " streefpeil['geometry'] = np.nan\n" + ] + } + ], + "source": [ + "streefpeil = pg_sp[['waterhoogte', 'globalid']]\n", + "\n", + "streefpeil['geometry'] = np.nan\n", + "streefpeil = gpd.GeoDataFrame(streefpeil)\n", + "Rijnland['streefpeil'] = streefpeil" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", + "metadata": {}, + "outputs": [], + "source": [ + "#delete irrelvant data\n", + "variables = ['peilgebiedpraktijk', 'peilgebiedvigerend', 'peilafwijkinggebied']\n", + "\n", + "for variable in variables:\n", + " if str(variable) in Rijnland:\n", + " del Rijnland[variable]" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "9ea24ea8-67ae-4cff-ac30-6492dcd80c41", + "metadata": {}, + "outputs": [], + "source": [ + "#Add the duikersifonhevels to the hydroobjecten\n", + "Rijnland['hydroobject'] = pd.concat([Rijnland['hydroobject'], Rijnland['duikersifonhevel']])\n", + "Rijnland['hydroobject'] = gpd.GeoDataFrame(Rijnland['hydroobject'], geometry = 'geometry')" + ] + }, + { + "cell_type": "raw", + "id": "d92489bc-2752-4d36-b428-a29ffd0efac2", + "metadata": {}, + "source": [ + "Retrieve the boezem\n", + "Retrieve all peilgebieden, excep the boezem\n", + "\n", + "Buffer the boezem\n", + "Clip the buffered boezem based on the all_peilgebieden_except_boezem\n", + "\n", + "Add the clipped_buffered_boezem to the all_peilgebieden_except_boezem" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "c68c7da1-488c-4d46-bfa4-cc5445efdaab", + "metadata": {}, + "outputs": [], + "source": [ + "bzm = Rijnland['peilgebied'].loc[Rijnland['peilgebied'].code.str.contains('BOEZEM')].reset_index(drop=True)\n", + "all_others = Rijnland['peilgebied'].loc[~Rijnland['peilgebied'].code.str.contains('BOEZEM')].reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "b6eabbd1-8c12-4d25-b04a-30fa73f6726b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bzm.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "f7e252b2-0aac-4f81-b1a8-0b8699ff7e1d", + "metadata": {}, + "outputs": [], + "source": [ + "# bzm.to_file('bzm_Rijnland.shp')\n", + "# all_others.to_file('all_others_Rijnland.shp')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b3940975-92e4-4e2b-841e-2502b3776cb6", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "374d9b69-5770-48e8-9de6-f20b8e2b4d15", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_22236\\761390022.py:6: UserWarning: The indices of the two GeoSeries are different.\n", + " bzm.geometry = bzm.symmetric_difference(all_others)\n" + ] + } + ], + "source": [ + "bzm = bzm.set_crs(crs='EPSG:28992').reset_index(drop=True)\n", + "all_others = all_others.set_crs(crs='EPSG:28992').reset_index(drop=True)\n", + "\n", + "bzm.geometry = bzm.buffer(1)\n", + "bzm = bzm.dropna(subset='geometry')\n", + "bzm.geometry = bzm.symmetric_difference(all_others)\n", + "bzm = bzm.dropna(subset='geometry')\n", + "\n", + "total = pd.concat([bzm, all_others])\n", + "total = gpd.GeoDataFrame(total, geometry='geometry').reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5af48a5b-fcd2-4318-b52f-c8f23817d757", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "6732df48-89b5-4351-9a45-d529cc7697f9", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_22236\\2749980879.py:21: FutureWarning: Currently, index_parts defaults to True, but in the future, it will default to False to be consistent with Pandas. Use `index_parts=True` to keep the current behavior and True/False to silence the warning.\n", + " exterior = exterior.explode().reset_index(drop=True)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n" + ] + } + ], + "source": [ + "from shapely.geometry import Polygon, MultiPolygon, shape, Point\n", + "from shapely.ops import unary_union,cascaded_union \n", + "\n", + "def convert_to_polygon(line):\n", + " if line.is_ring: # Checks if the LineString is closed\n", + " return Polygon(line)\n", + " else:\n", + " return line # Returns the line string as is if it's not closed\n", + " \n", + "total = total.explode(ignore_index=True)\n", + "total = total[total.geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n", + " \n", + "# total = total.explode(ignore_index=True)\n", + "total = total[total.geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n", + "\n", + "\n", + "total['area'] = total.area\n", + "dissolved = total.dissolve()\n", + "exterior = gpd.GeoDataFrame(geometry=dissolved['geometry'].boundary).to_crs(crs='EPSG:28992')\n", + "total = total.to_crs(crs='EPSG:28992')\n", + "exterior = exterior.explode().reset_index(drop=True)\n", + "exterior['geometry'] = exterior['geometry'].apply(convert_to_polygon)\n", + "exterior['area'] = exterior.area\n", + "exterior = exterior.sort_values(by='area', ascending=False).reset_index(drop=True)\n", + "\n", + "#get rid of some exteriors which should not be filled in\n", + "exterior.loc[exterior.area != 67444.410779918616754]\n", + "exterior = exterior.iloc[8::]\n", + "exterior = exterior.reset_index(drop=True)\n", + "\n", + "exterior = exterior.reset_index(drop=True)\n", + "\n", + "# new_gdf = gpd.GeoDataFrame(columns=total.columns())\n", + "\n", + "for i in range(len(exterior)):\n", + "# for i in range(10):\n", + "\n", + " buffered_peilgebied = total.buffer(0.)\n", + "\n", + " exterior_sample = exterior.iloc[i:i+1] #just pick a single sample\n", + " exterior_sample.geometry = exterior_sample.buffer(0.0001) #let op! hierdoor komt er alsnog een kleine overlap. Maar anders werkt de code even niet, en vanwege tijdgebrek kan dit nu niet worden opgelost. In het bepalen van de crossings wordt hier echter mee omgegaan.\n", + " \n", + " intersects_mask = buffered_peilgebied.intersects(exterior_sample.iloc[0].geometry)\n", + " intersecting_polygons = total[intersects_mask].sort_values(by='area', ascending=False)\n", + "\n", + " if len(intersecting_polygons) > 0:\n", + " # print(i)\n", + " # polygon_to_dissolve = intersecting_polygons.iloc[0:1]#.geometry.unary_union \n", + " # sample_geometry = exterior_sample.geometry#.unary_union\n", + " intersecting_polygons = gpd.GeoDataFrame(intersecting_polygons.iloc[0:1], geometry = 'geometry')\n", + " \n", + " # dissolved_polygon = # dissolve/union them\n", + " all_geometries = list(intersecting_polygons.geometry) + list(exterior_sample.geometry)\n", + "\n", + " # Use unary_union to dissolve all polygons in the list\n", + " dissolved_polygon = unary_union(all_geometries)\n", + " \n", + " original_index = intersecting_polygons.index[0]\n", + "\n", + " # Ensure it's a single geometry object.\n", + " # print(len(total.loc[total.index == original_index, 'geometry']))\n", + " # print(len(dissolved_polygon))\n", + " total.loc[total.index == original_index, 'geometry'] = dissolved_polygon#['geometry']\n", + " # new_gdf = pd.concat([new_gdf, dissolved_polygon])\n", + " else:\n", + " print('No intersection found for iteration ', i)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "109088b3-6593-49a5-a800-51154d1b458e", + "metadata": {}, + "outputs": [], + "source": [ + "exterior.to_file('exterior_Rijnland.shp')" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "b9ab4a14-30af-4a7c-a3a4-f08d4f3d081d", + "metadata": {}, + "outputs": [], + "source": [ + "Rijnland['peilgebied'] = total\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "794f58c9-5a41-4b08-96d4-c2c40d632d2f", + "metadata": {}, + "outputs": [], + "source": [ + "Rijnland['streefpeil'].waterhoogte = Rijnland['streefpeil'].waterhoogte.round(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "ef631fb5-bf60-40f1-b7d5-da6c3d239751", + "metadata": {}, + "outputs": [], + "source": [ + "#reload the boezem. It has been buffered and then clipped on the other peilgebieden, to make sure all gaps are filled\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "28675925-8e85-42a9-ae0e-2c39bad15c86", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
codenen3610idglobalidgeometryarea
0PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363NL.WBHCODE.13.Peilgebiedvigerend.7682dummy_globalid_peilgebied_6POLYGON ((100416.597 479665.902, 100416.596 47...8.872630e+00
1PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363NL.WBHCODE.13.Peilgebiedvigerend.7682dummy_globalid_peilgebied_6POLYGON ((100265.398 479731.704, 100265.394 47...3.606838e+02
2PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363NL.WBHCODE.13.Peilgebiedvigerend.7682dummy_globalid_peilgebied_6POLYGON ((100256.025 479865.950, 100264.082 47...1.081529e+02
3PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363NL.WBHCODE.13.Peilgebiedvigerend.7682dummy_globalid_peilgebied_6POLYGON ((100053.575 478917.651, 100053.648 47...8.758138e+00
4PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363NL.WBHCODE.13.Peilgebiedvigerend.7682dummy_globalid_peilgebied_6POLYGON ((116604.646 464224.245, 116607.555 46...7.272443e-05
..................
8804WW-09KNL.WBHCODE.13.Peilgebiedpraktijk.1707dummy_globalid_peilgebied_1357POLYGON ((97104.931 460639.993, 97105.856 4606...1.404138e+06
8805RL-010-3.1NL.WBHCODE.13.Peilgebiedpraktijk.1708dummy_globalid_peilgebied_1358POLYGON ((94163.596 465298.477, 94165.318 4652...4.345614e+05
8806WW-09ANL.WBHCODE.13.Peilgebiedpraktijk.1709dummy_globalid_peilgebied_1359POLYGON ((98639.002 459871.114, 98639.002 4598...2.268386e+06
8807WW-25AHNL.WBHCODE.13.Peilgebiedpraktijk.1998dummy_globalid_peilgebied_1360POLYGON ((101455.305 456467.297, 101403.881 45...3.520037e+06
8808RL-029-01.1NL.WBHCODE.13.Peilgebiedpraktijk.2003dummy_globalid_peilgebied_1361POLYGON ((104401.424 493474.238, 104409.770 49...3.294050e+04
\n", + "

8809 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " code \\\n", + "0 PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363 \n", + "1 PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363 \n", + "2 PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363 \n", + "3 PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363 \n", + "4 PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363 \n", + "... ... \n", + "8804 WW-09K \n", + "8805 RL-010-3.1 \n", + "8806 WW-09A \n", + "8807 WW-25AH \n", + "8808 RL-029-01.1 \n", + "\n", + " nen3610id globalid \\\n", + "0 NL.WBHCODE.13.Peilgebiedvigerend.7682 dummy_globalid_peilgebied_6 \n", + "1 NL.WBHCODE.13.Peilgebiedvigerend.7682 dummy_globalid_peilgebied_6 \n", + "2 NL.WBHCODE.13.Peilgebiedvigerend.7682 dummy_globalid_peilgebied_6 \n", + "3 NL.WBHCODE.13.Peilgebiedvigerend.7682 dummy_globalid_peilgebied_6 \n", + "4 NL.WBHCODE.13.Peilgebiedvigerend.7682 dummy_globalid_peilgebied_6 \n", + "... ... ... \n", + "8804 NL.WBHCODE.13.Peilgebiedpraktijk.1707 dummy_globalid_peilgebied_1357 \n", + "8805 NL.WBHCODE.13.Peilgebiedpraktijk.1708 dummy_globalid_peilgebied_1358 \n", + "8806 NL.WBHCODE.13.Peilgebiedpraktijk.1709 dummy_globalid_peilgebied_1359 \n", + "8807 NL.WBHCODE.13.Peilgebiedpraktijk.1998 dummy_globalid_peilgebied_1360 \n", + "8808 NL.WBHCODE.13.Peilgebiedpraktijk.2003 dummy_globalid_peilgebied_1361 \n", + "\n", + " geometry area \n", + "0 POLYGON ((100416.597 479665.902, 100416.596 47... 8.872630e+00 \n", + "1 POLYGON ((100265.398 479731.704, 100265.394 47... 3.606838e+02 \n", + "2 POLYGON ((100256.025 479865.950, 100264.082 47... 1.081529e+02 \n", + "3 POLYGON ((100053.575 478917.651, 100053.648 47... 8.758138e+00 \n", + "4 POLYGON ((116604.646 464224.245, 116607.555 46... 7.272443e-05 \n", + "... ... ... \n", + "8804 POLYGON ((97104.931 460639.993, 97105.856 4606... 1.404138e+06 \n", + "8805 POLYGON ((94163.596 465298.477, 94165.318 4652... 4.345614e+05 \n", + "8806 POLYGON ((98639.002 459871.114, 98639.002 4598... 2.268386e+06 \n", + "8807 POLYGON ((101455.305 456467.297, 101403.881 45... 3.520037e+06 \n", + "8808 POLYGON ((104401.424 493474.238, 104409.770 49... 3.294050e+04 \n", + "\n", + "[8809 rows x 5 columns]" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Rijnland['peilgebied']" + ] + }, + { + "cell_type": "raw", + "id": "b423b998-bf46-446a-8144-959ac58f994f", + "metadata": {}, + "source": [ + "The globalids and codes are not unique anymore, due to the additional code. This leads to uncoupled streefpeilen. Add the peilgebieden and streefpeilen together, change the codes and globalids, and then split them again" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "9649bce0-3bd2-4290-b722-f486386cd08e", + "metadata": {}, + "outputs": [], + "source": [ + "combined = pd.merge(left = Rijnland['peilgebied'],\n", + " right = Rijnland['streefpeil'],\n", + " on = 'globalid',\n", + " how = 'left',\n", + " suffixes = ('', '_sp')).reset_index(drop=True)\n", + "\n", + "combined = gpd.GeoDataFrame(combined, geometry='geometry')\n", + "combined.code = combined.code + '_' + combined.index.astype(str)\n", + "combined.globalid = combined.globalid + '_' + combined.index.astype(str)\n", + "\n", + "Rijnland['peilgebied'] = combined[['code', 'nen3610id', 'globalid', 'geometry']]\n", + "\n", + "Rijnland['streefpeil']['geometry'] = None\n", + "Rijnland['streefpeil'] = gpd.GeoDataFrame(combined[['waterhoogte', 'globalid', 'geometry']], geometry='geometry')" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "ab75c0ae-3675-446d-b3bf-a2209dc3f6ad", + "metadata": {}, + "outputs": [], + "source": [ + "Rijnland['hydroobject'].code = Rijnland['hydroobject'].code + '_' + Rijnland['hydroobject'].index.astype(str) \n", + "# Rijnland['peilgebied'].code = Rijnland['peilgebied'].code + '_' + Rijnland['peilgebied'].index.astype(str) \n", + "# Rijnland['peilgebied'].globalid = Rijnland['peilgebied'].globalid + '_' + Rijnland['peilgebied'].index.astype(str) " + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "a155f289-27f9-4726-84db-f813ce1cc25b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
codenen3610idglobalidgeometry
0174-058-00080-04_0NL.WBHCODE.13.Hydroobject.789716{FEB49A57-8C9D-48CB-A895-8777D12CB9D9}LINESTRING (97388.109 468171.303, 97385.257 46...
1077-058-00326-01_1NL.WBHCODE.13.Hydroobject.49229{C0DC5E47-14DC-41B9-ADFF-D0ED9FA2DC5B}LINESTRING (103968.757 456387.807, 103975.602 ...
2077-058-00336-02_2NL.WBHCODE.13.Hydroobject.49249{9D984A0E-AB4E-4EDA-B199-B9E567CBF455}LINESTRING (104940.751 455095.857, 104940.812 ...
3077-058-00342-02_3NL.WBHCODE.13.Hydroobject.49263{090E19AD-C548-4AE9-AEBA-50F03D10A375}LINESTRING (103817.911 456698.921, 103818.571 ...
4077-058-00342-04_4NL.WBHCODE.13.Hydroobject.49265{9FA9FC47-B2B8-4D75-9F9E-0953A337E3F6}LINESTRING (103893.043 456453.097, 103893.701 ...
...............
35957107-033-00333_35957NL.WBHCODE.13.Duikersifonhevel.476989{34F1AB6A-C46D-446E-9486-CD57207C726A}LINESTRING (91159.591 469326.780, 91148.178 46...
35958078-033-00082_35958NL.WBHCODE.13.Duikersifonhevel.360366{DEFA63AE-0702-4963-9BAF-213F07945CFF}LINESTRING (99934.878 463132.555, 99936.654 46...
35959016-033-00187_35959NL.WBHCODE.13.Duikersifonhevel.476991{9E75C497-43F4-449D-A6A9-AADF1466C3E8}LINESTRING (96179.051 465624.809, 96180.499 46...
35960162-033-00066_35960NL.WBHCODE.13.Duikersifonhevel.176321{48A5C8C9-C806-4F2E-B409-5E9A3D56CEF4}LINESTRING (99593.400 468415.310, 99587.290 46...
35961111-033-00208_35961NL.WBHCODE.13.Duikersifonhevel.5999{943D3470-654F-4CF4-A3BC-DE4D3951A37E}LINESTRING (103012.597 464630.046, 103014.255 ...
\n", + "

221060 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " code nen3610id \\\n", + "0 174-058-00080-04_0 NL.WBHCODE.13.Hydroobject.789716 \n", + "1 077-058-00326-01_1 NL.WBHCODE.13.Hydroobject.49229 \n", + "2 077-058-00336-02_2 NL.WBHCODE.13.Hydroobject.49249 \n", + "3 077-058-00342-02_3 NL.WBHCODE.13.Hydroobject.49263 \n", + "4 077-058-00342-04_4 NL.WBHCODE.13.Hydroobject.49265 \n", + "... ... ... \n", + "35957 107-033-00333_35957 NL.WBHCODE.13.Duikersifonhevel.476989 \n", + "35958 078-033-00082_35958 NL.WBHCODE.13.Duikersifonhevel.360366 \n", + "35959 016-033-00187_35959 NL.WBHCODE.13.Duikersifonhevel.476991 \n", + "35960 162-033-00066_35960 NL.WBHCODE.13.Duikersifonhevel.176321 \n", + "35961 111-033-00208_35961 NL.WBHCODE.13.Duikersifonhevel.5999 \n", + "\n", + " globalid \\\n", + "0 {FEB49A57-8C9D-48CB-A895-8777D12CB9D9} \n", + "1 {C0DC5E47-14DC-41B9-ADFF-D0ED9FA2DC5B} \n", + "2 {9D984A0E-AB4E-4EDA-B199-B9E567CBF455} \n", + "3 {090E19AD-C548-4AE9-AEBA-50F03D10A375} \n", + "4 {9FA9FC47-B2B8-4D75-9F9E-0953A337E3F6} \n", + "... ... \n", + "35957 {34F1AB6A-C46D-446E-9486-CD57207C726A} \n", + "35958 {DEFA63AE-0702-4963-9BAF-213F07945CFF} \n", + "35959 {9E75C497-43F4-449D-A6A9-AADF1466C3E8} \n", + "35960 {48A5C8C9-C806-4F2E-B409-5E9A3D56CEF4} \n", + "35961 {943D3470-654F-4CF4-A3BC-DE4D3951A37E} \n", + "\n", + " geometry \n", + "0 LINESTRING (97388.109 468171.303, 97385.257 46... \n", + "1 LINESTRING (103968.757 456387.807, 103975.602 ... \n", + "2 LINESTRING (104940.751 455095.857, 104940.812 ... \n", + "3 LINESTRING (103817.911 456698.921, 103818.571 ... \n", + "4 LINESTRING (103893.043 456453.097, 103893.701 ... \n", + "... ... \n", + "35957 LINESTRING (91159.591 469326.780, 91148.178 46... \n", + "35958 LINESTRING (99934.878 463132.555, 99936.654 46... \n", + "35959 LINESTRING (96179.051 465624.809, 96180.499 46... \n", + "35960 LINESTRING (99593.400 468415.310, 99587.290 46... \n", + "35961 LINESTRING (103012.597 464630.046, 103014.255 ... \n", + "\n", + "[221060 rows x 4 columns]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Rijnland['hydroobject']" + ] + }, + { + "cell_type": "markdown", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "metadata": {}, + "source": [ + "### Check for the correct keys and columns" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "gemaal\n", + "['code' 'nen3610id' 'globalid' 'geometry' 'func_aanvoer' 'func_afvoer'\n", + " 'func_circulatie']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "afsluitmiddel\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "duikersifonhevel\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "hydroobject\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "streefpeil\n", + "['waterhoogte' 'globalid' 'geometry']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n", + "aggregation_area\n", + "['code' 'nen3610id' 'CODE_AFW' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "peilgebied\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n" + ] + } + ], + "source": [ + "show_layers_and_columns(waterschap = Rijnland)" + ] + }, + { + "cell_type": "markdown", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "metadata": {}, + "source": [ + "### Store data" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "metadata": {}, + "outputs": [], + "source": [ + "# Check if the directory exists\n", + "if not os.path.exists(output_gpkg_path):\n", + " # If it doesn't exist, create it\n", + " os.makedirs(output_gpkg_path)\n", + " \n", + "store_data(waterschap = Rijnland, \n", + " output_gpkg_path = output_gpkg_path + '/Rijnland')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0090fd91-40eb-48e1-aa99-2360a13a708e", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Routing", + "language": "python", + "name": "routing" + }, + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rivierenland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rivierenland.ipynb new file mode 100644 index 0000000..8eff3bf --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rivierenland.ipynb @@ -0,0 +1,818 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "metadata": {}, + "outputs": [], + "source": [ + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "import shapely" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "metadata": {}, + "outputs": [], + "source": [ + "from general_functions import *" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "4c2a1a6e-1255-4481-9d94-b0206f40e94d", + "metadata": {}, + "outputs": [], + "source": [ + "pd.set_option('display.max_columns', None)\n" + ] + }, + { + "cell_type": "markdown", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "metadata": {}, + "source": [ + "# WSRL" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'WSRL'\n", + "data_path = \"../../Data_preprocessed/Waterschappen/WSRL\"\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/WSRL\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c0f66000-73e6-4b06-b5a2-8308213c2461", + "metadata": {}, + "outputs": [], + "source": [ + "#WSRL has delivered the data per catchment. Loop through each catchment, and concat all data to a single dictionary\n", + "WSRL = {}\n", + "\n", + "for root, dirs, files in os.walk(data_path):\n", + " for file in files:\n", + " if file.endswith('.gpkg'):\n", + " gpkg_path = os.path.join(root, file)\n", + " \n", + " if WSRL == {}:\n", + " WSRL = read_gpkg_layers(gpkg_path = gpkg_path,\n", + " variables = ['Stuw',\n", + " 'Gemaal',\n", + " 'Hydroobject',\n", + " 'Duikersifonhevel']) \n", + " else:\n", + " temp_WSRL = read_gpkg_layers(gpkg_path = gpkg_path,\n", + " variables = ['Stuw',\n", + " 'Gemaal',\n", + " 'Hydroobject',\n", + " 'Duikersifonhevel']) \n", + " for variable in WSRL.keys():\n", + " WSRL[variable] = pd.concat([WSRL[variable], temp_WSRL[variable]]).reset_index(drop=True)\n" + ] + }, + { + "cell_type": "markdown", + "id": "7469bb6f-dc28-43b3-b9cb-2d4505b5d5fd", + "metadata": {}, + "source": [ + "Additional data is given in another gpkg, which includes the peilgebieden" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "5018d1e6-f7ba-4e02-b01a-6d83a3a5e9a3", + "metadata": {}, + "outputs": [], + "source": [ + "gdb_path = r\"..\\..\\Data_preprocessed\\Waterschappen\\WSRL\\OverigeGegevens.gdb\"\n", + "WSRL_gdb = read_gpkg_layers(gpkg_path = gdb_path,\n", + " variables = ['PeilgebiedenPraktijk'])\n", + "\n", + "#add the gdb to the dict\n", + "# WSRL['peilgebiedafwijking'] = WSRL_gdb['Peilafwijkingen']\n", + "WSRL['peilgebiedpraktijk'] = WSRL_gdb['PeilgebiedenPraktijk']" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fc85db32-bb81-4f7f-9a38-2bd89b3fc658", + "metadata": {}, + "outputs": [], + "source": [ + "#change names\n", + "WSRL['stuw'] = WSRL.pop('Stuw')\n", + "WSRL['gemaal'] = WSRL.pop('Gemaal')\n", + "WSRL['hydroobject'] = WSRL.pop('Hydroobject')\n", + "WSRL['duikersifonhevel'] = WSRL.pop('Duikersifonhevel')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "773fed7a-3d4c-4106-8826-96b5bb9c0307", + "metadata": {}, + "outputs": [], + "source": [ + "aggregation_area = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Aangeleverd\\Aanvoergebieden_detail\\Aanvoergebieden_detail.shp\")\n", + "# aggregation_area = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Aangeleverd\\Aanvoergebieden_detail\\Aanvoergebieden_detail2.shp\")\n", + "aggregation_area['code'] = aggregation_area['GAFNAAM']" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "6b5ecbfe-fcad-4982-80a6-db7d4fb71787", + "metadata": {}, + "outputs": [], + "source": [ + "#add aggregation areas\n", + "aggregation_area = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Aangeleverd\\Aanvoergebieden_detail\\Aanvoergebieden_detail.shp\")\n", + "# aggregation_area = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Aangeleverd\\Aanvoergebieden_detail\\Aanvoergebieden_detail2.shp\")\n", + "aggregation_area['code'] = aggregation_area['GAFNAAM']\n", + "\n", + "#not all peilgebieden should be aggregated. The Linge and other boezems should remain as single peilgebieden. \n", + "#For now, remove these aggregation areas and check the result\n", + "\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'pannerling']\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'kuijkgemaal']\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Aftakking']\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'van beuningengemaal']\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Linge Tiel_Buren']\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Linge']\n", + "\n", + "aggregation_area = aggregation_area.loc[aggregation_area['GAFIDENT'] != 'AANV_D_352']\n", + "aggregation_area = aggregation_area.loc[aggregation_area['GAFIDENT'] != 'AANV_D_459']\n", + "\n", + "#due to some non logical overlap, remove the aggregation area in Oostkil as well\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Oostkil']\n", + "\n", + "#there are two aggregation areas in one peilgebied, which makes the two aggregation areas redundant. Remove it\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'bonte morgen']\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'de waaij']\n", + "\n", + "#the peilgebied and aggregation area do not overlap at all. Try to see if this works properly\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'z20']\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'z16']\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'duisterestraat gemaal']\n", + "# aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Hedel/ Stuvers']\n", + "\n", + "#add some dissolved aggregation areas.\n", + "#Elst\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'eind a15 stuw']\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Weeneb']\n", + "\n", + "elst = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Uitprobeersel\\aggregatiegebieden\\elst.shp\")\n", + "aggregation_area = pd.concat([aggregation_area, elst])\n", + "\n", + "#Overwaard\n", + "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Overwaard']\n", + "\n", + "overwaard = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Uitprobeersel\\aggregatiegebieden\\overwaard.shp\")\n", + "aggregation_area = pd.concat([aggregation_area, overwaard])\n", + "\n", + "\n", + "aggregation_area.reset_index(drop=True, inplace=True)\n", + "aggregation_area = gpd.GeoDataFrame(aggregation_area, geometry='geometry')" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "e905074a-ad4b-4234-9946-4b8de446d9ab", + "metadata": {}, + "outputs": [], + "source": [ + "#some peilgebieden are not connected through hydroobjecten. \n", + "#For schematisation purposes its more convenient to aggregatie the peilgebieden upfront\n", + "#Delete the peilgebieden first from the loaded peilgebieden, and add the dissolved peilgebieden afterwards\n", + "\n", + "#Werkendam\n", + "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'LHA201-P']\n", + "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'LHA202-P']\n", + "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'LHA203-P']\n", + "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'LHA204-P']\n", + "\n", + "werkendam = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Uitprobeersel\\peilgebieden\\werkendam.shp\")\n", + "WSRL['peilgebiedpraktijk'] = pd.concat([WSRL['peilgebiedpraktijk'], werkendam])\n", + "\n", + "#Asperen\n", + "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'TLW635-P']\n", + "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'TLW636-P']\n", + "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'TLW637-P']\n", + "\n", + "asperen = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Uitprobeersel\\peilgebieden\\asperen.shp\")\n", + "WSRL['peilgebiedpraktijk'] = pd.concat([WSRL['peilgebiedpraktijk'], asperen])\n", + "\n", + "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d50cf6f5-1785-4765-804e-4d669440c189", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "76f6a7a2-c71e-4137-8f48-bc2364933816", + "metadata": { + "tags": [] + }, + "source": [ + "# WSRL, goed leggen boezem" + ] + }, + { + "cell_type": "raw", + "id": "1778c025-f5aa-47b6-9423-416da12114a9", + "metadata": {}, + "source": [ + "Doel: de boezem (Overwaard) goed in de schematisatie krijgen. PvA:\n", + "- Inladen aggregtatiegebieden en hydroobjecten\n", + "- Selectie overwaard\n", + "- symmetrical difference van de aggregatie gebieden en boezem\n", + "- mogelijk nog uit elkaar trekken van bepaalde gebieden" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "4c0f36cf-593a-4e6a-a08a-41b8d1cca128", + "metadata": {}, + "outputs": [], + "source": [ + "# select the praktijkpeilgebieden of OVerwaard\n", + "overwaard = ['OVW202-P', 'NDW102-P', 'OVW200-P', 'NDW100-P']\n", + "overwaard = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['CODE'].isin(overwaard)]\n", + "overwaard = overwaard.reset_index(drop=True)\n", + "\n", + "# create an unary union, and then take the difference of those with the aggregation area\n", + "overwaard_union = overwaard.unary_union\n", + "aggregation_area['geometry'] = aggregation_area.geometry.difference(overwaard_union)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "3ac3f810-7ab7-4708-a7e2-912c5cae4fb9", + "metadata": {}, + "outputs": [], + "source": [ + "# aggregation_area.to_file('agg_area_WSRL_kan_weg.gpkg')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "8f723908-098d-4cff-bf9f-ec07a4d122c6", + "metadata": {}, + "outputs": [], + "source": [ + "# there are now some disconnected parts in the aggregation areas. Explode these to maintain logical units, and dissolve them back\n", + "to_explode = ['AANV_D_414', 'AANV_D_413']\n", + "to_explode = aggregation_area.loc[aggregation_area.GAFIDENT.isin(to_explode)]\n", + "aggregation_area = aggregation_area.loc[aggregation_area.GAFIDENT != 'AANV_D_414']\n", + "aggregation_area = aggregation_area.loc[aggregation_area.GAFIDENT != 'AANV_D_413']\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "6b4e1b07-7ad0-42ea-b24e-02a2a1ee564a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "test = to_explode.explode(index_parts=False).reset_index(drop=True)\n", + "test['kleur'] = test.index\n", + "\n", + "test['area'] = test.area\n", + "test.sort_values(by='area', inplace=True)\n", + "test = test.loc[test.area > 1000] #only select the areas which are larger than 1000 m2, as many small parts are created\n", + "test.plot(column=test.kleur)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "7810693a-ca71-4721-bfa1-3ae9c6976239", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#result look good. Add it to the aggregation areas again\n", + "aggregation_area = pd.concat([aggregation_area, test])\n", + "aggregation_area = gpd.GeoDataFrame(aggregation_area, geometry = 'geometry')\n", + "aggregation_area.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "a3330861-0d96-4aa1-a9c8-4c44b99315c6", + "metadata": {}, + "outputs": [], + "source": [ + "aggregation_area['code'] = aggregation_area['code'].astype(str) + '_dummy_id_' + aggregation_area.index.astype(str)\n", + "\n", + "aggregation_area['nen3610id'] = 'dummy_nen3610id_agg_area_' + aggregation_area.index.astype(str)\n", + "aggregation_area['globalid'] = 'dummy_globalid_agg_area_' + aggregation_area.index.astype(str)\n", + "aggregation_area = aggregation_area[['code', 'nen3610id', 'globalid', 'geometry']]\n", + "WSRL['aggregation_area'] = aggregation_area" + ] + }, + { + "cell_type": "markdown", + "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", + "metadata": {}, + "source": [ + "### Adjust column names" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "c0302db0-e7f0-4dd2-88b7-3dc9aadd581f", + "metadata": {}, + "outputs": [], + "source": [ + "#add gemaal information\n", + "WSRL['peilgebiedpraktijk']['waterhoogte'] = np.nan\n", + "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'seizoensgebonden', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'flexibel', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'natuurlijk', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'vast', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['VASTPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'streef', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['STREEFPEIL'], inplace=True)\n", + "\n", + "#niet elke kolom is ingevuld met de paren die je zou verwachten. Vul voor de ontbrekende waarden de volgende waarden in:\n", + "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['STREEFPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['VASTPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['MIN_PEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['WINTERPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['MAX_PEIL'], inplace=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "6f56f578-aca0-4957-89df-b6a3a08278a3", + "metadata": {}, + "outputs": [], + "source": [ + "#Add gemaal information\n", + "#determine aanvoer en afvoer gemalen\n", + "WSRL['gemaal']['func_aanvoer'], WSRL['gemaal']['func_afvoer'], WSRL['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "WSRL['gemaal']['functiegemaal'] = WSRL['gemaal']['naam'].astype(str) \n", + "\n", + "\n", + "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Afvoer|Onbekend|Af-|Onderbemaling'), 'func_afvoer'] = True\n", + "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Aanvoer|Opmaling'), 'func_aanvoer'] = True\n", + "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Doorspoelgemaal'), 'func_circulatie'] = True\n", + "WSRL['gemaal'].loc[(WSRL['gemaal'].func_afvoer == False) &\n", + " (WSRL['gemaal'].func_aanvoer == False) &\n", + " (WSRL['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "6dce84db-36f3-4a1c-9f10-7c14d9e4a6ed", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "#discard irrelevant data of WSRL, and create a uniform dataset compared to the other waterschappen\n", + "WSRL['stuw'] = WSRL['stuw'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "WSRL['gemaal'] = WSRL['gemaal'][['code', 'globalid', 'nen3610id', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "WSRL['hydroobject'] = WSRL['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "WSRL['duikersifonhevel'] = WSRL['duikersifonhevel'][['code', 'globalid', 'nen3610id', 'geometry']]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "059f9113-bcd4-470a-abb6-4fd8ec193f4a", + "metadata": {}, + "outputs": [], + "source": [ + "# gpd.overlay(WSRL['peilgebiedpraktijk'], WSRL['peilgebiedafwijking'], how='union', keep_geom_type=False).to_file('WSRL_kan_weg.gpkg')" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "0181e016-5103-4d66-b0fa-27ef59282f51", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "WSRL['peilgebiedpraktijk'].plot(ax=ax, color='cornflowerblue', label = 'Peilgebiedpraktijk')\n", + "# WSRL['peilgebiedafwijking'].plot(ax=ax, color='blue', label = 'Peilgebiedafwijking')\n", + "ax.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "96f0e8bf-89e3-4743-b047-d23791bdc5b4", + "metadata": {}, + "outputs": [], + "source": [ + "def intersect_using_spatial_index(peilgebied_praktijk, peilgebied_afwijking, check):\n", + " \"\"\"\n", + " Conduct spatial intersection using spatial index for candidates GeoDataFrame to make queries faster.\n", + " Note, with this function, you can have multiple Polygons in the 'intersecting_gdf' and it will return all the points \n", + " intersect with ANY of those geometries.\n", + " \"\"\"\n", + " peilgebied_praktijk_sindex = peilgebied_praktijk.sindex\n", + " possible_matches_index = []\n", + " \n", + " # 'itertuples()' function is a faster version of 'iterrows()'\n", + " for other in peilgebied_afwijking.itertuples():\n", + " bounds = other.geometry.bounds\n", + " c = list(peilgebied_praktijk_sindex.intersection(bounds))\n", + " possible_matches_index += c\n", + " \n", + " # Get unique candidates\n", + " unique_candidate_matches = list(set(possible_matches_index))\n", + " possible_matches = peilgebied_praktijk.iloc[unique_candidate_matches]\n", + "\n", + " # Conduct the actual intersect\n", + " overlapping_pg_praktijk = possible_matches.loc[possible_matches.intersects(peilgebied_afwijking.unary_union)] #the entire peilgebied praktijk polygons\n", + " \n", + " #remove the peilgebied afwijking from the peilgebied praktijk\n", + " intersection = gpd.overlay(overlapping_pg_praktijk, peilgebied_afwijking, how='intersection')\n", + " overlapping_updated = gpd.overlay(peilgebied_praktijk, intersection, how='symmetric_difference') #check of het difference of symmetrical difference moet zijn!#remove the difference between pg_praktijk and pg_afwijking\n", + " peilgebied = overlapping_updated.append(intersection, ignore_index=True) #add the removed difference, but now only the intersected part of pg_afwijking\n", + "\n", + " \n", + " if check == True:\n", + " peilgebied_praktijk.to_file('Checks/Rivierenland/peilgebied_praktijk.gpkg', driver='GPKG')\n", + " peilgebied_afwijking.to_file('Checks/Rivierenland/peilgebied_afwijking.gpkg', driver='GPKG')\n", + "\n", + " intersection.to_file('Checks/Rivierenland/intersection.gpkg', driver='GPKG')\n", + " overlapping_updated.to_file('Checks/Rivierenland/overlapping_updated.gpkg', driver='GPKG')\n", + " peilgebied.to_file('Checks/Rivierenland/peilgebied.gpkg', driver='GPKG')\n", + " \n", + " return peilgebied" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "500d4d64-c65b-4426-9f89-7f10e12a0514", + "metadata": {}, + "outputs": [], + "source": [ + "# peilgebied = intersect_using_spatial_index(peilgebied_praktijk = WSRL['peilgebiedpraktijk'], \n", + "# peilgebied_afwijking = WSRL['peilgebiedafwijking'],\n", + "# check = False)\n", + "peilgebied = WSRL['peilgebiedpraktijk']" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "363a8b04-a132-469a-b5c8-cde2e911a9c0", + "metadata": {}, + "outputs": [], + "source": [ + "# WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'][['ZOMERPEIL', 'WINTERPEIL', 'MIN_PEIL', 'MAX_PEIL', 'STREEFPEIL', 'VASTPEIL', 'TYPE_PEILBEHEER', 'geometry']]\n", + "# peilgebied['waterhoogte'] = np.nan\n", + "\n", + "# for fill_column in ['ZOMERPEIL', 'STREEFPEIL', 'VASTPEIL', 'MAX_PEIL', 'MIN_PEIL', 'WINTERPEIL']:\n", + "# peilgebied.waterhoogte.fillna(value = peilgebied[fill_column], inplace=True)\n", + " \n", + "# WSRL['peilgebiedpraktijk'].waterhoogte.fillna(value=WSRL['peilgebiedpraktijk'][['ZOMERPEIL', 'STREEFPEIL', 'VASTPEIL', 'MAX_PEIL', 'MIN_PEIL']])" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "cfbf8612-93a9-4357-a3c9-cd3dd9d9bf71", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#store the ontbrekende_streefpeilen to a gpkg, check validity\n", + "ontbrekende_streefpeilen = peilgebied[peilgebied.waterhoogte.isna()]\n", + "# ontbrekende_streefpeilen.to_file('Checks/Rivierenland/peilgebieden_zonder_streefpeil.gpkg', driver='GPKG')\n", + "peilgebied.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "74734b29-5c4a-4e63-a873-88d8f6ebbd14", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_16448\\1047803125.py:15: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " WSRL['streefpeil']['geometry'] = np.nan\n" + ] + } + ], + "source": [ + "peilgebied['CODE_0'] = peilgebied.CODE #change names for later purposes\n", + "peilgebied.CODE = np.nan\n", + "\n", + "#add and fill the final columns\n", + "columns_to_check = ['CODE_0']\n", + "\n", + "for fill_column in ['CODE_0']:\n", + " peilgebied.CODE.fillna(value = peilgebied[fill_column], inplace=True)\n", + "\n", + "peilgebied['globalid'] = peilgebied.index.astype(str)\n", + "peilgebied['nen3610id'] = 'dummy_nen3610id_peilgebied_' + peilgebied.index.astype(str)\n", + "\n", + "#create streefpeil key\n", + "WSRL['streefpeil'] = peilgebied[['waterhoogte', 'globalid']]\n", + "WSRL['streefpeil']['geometry'] = np.nan\n", + "WSRL['streefpeil'] = gpd.GeoDataFrame(WSRL['streefpeil'])\n", + "\n", + "#only select the relevant columns\n", + "peilgebied = peilgebied[['CODE', 'globalid', 'nen3610id', 'geometry']]\n", + "WSRL['peilgebied'] = peilgebied #add to the dict" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "9cd5297c-5d23-4e27-a55a-efb95a6cbb43", + "metadata": {}, + "outputs": [], + "source": [ + "WSRL['streefpeil'].waterhoogte = WSRL['streefpeil'].waterhoogte.round(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", + "metadata": {}, + "outputs": [], + "source": [ + "#discard irrelvant data\n", + "variables = ['peilgebiedpraktijk','peilgebiedafwijking']\n", + "\n", + "for variable in variables:\n", + " if str(variable) in WSRL:\n", + " del WSRL[variable]" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "0499733f-4dee-4d0a-a995-c64e718ab2c4", + "metadata": {}, + "outputs": [], + "source": [ + "#I have splitted a peilgebied manually. Make sure that the peilgebied has an unique code\n", + "WSRL['peilgebied'].loc[(WSRL['peilgebied'].CODE == 'LNG014-P') & (WSRL['peilgebied'].nen3610id == 'dummy_nen3610id_peilgebied_1133'), 'CODE'] = 'LNG014-P_extra'" + ] + }, + { + "cell_type": "markdown", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "metadata": {}, + "source": [ + "### Check for the correct keys and columns" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "gemaal\n", + "['code' 'globalid' 'nen3610id' 'func_afvoer' 'func_aanvoer'\n", + " 'func_circulatie' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "hydroobject\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "duikersifonhevel\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "aggregation_area\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "streefpeil\n", + "['waterhoogte' 'globalid' 'geometry']\n", + "type = \n", + "crs = None\n", + "\n", + "peilgebied\n", + "['CODE' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n" + ] + } + ], + "source": [ + "show_layers_and_columns(waterschap = WSRL)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d81fa34f-69aa-4d0e-9612-8ae36b959e0b", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "metadata": {}, + "source": [ + "### Store data" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "metadata": {}, + "outputs": [], + "source": [ + "# Check if the directory exists\n", + "if not os.path.exists(output_gpkg_path):\n", + " # If it doesn't exist, create it\n", + " os.makedirs(output_gpkg_path)\n", + " \n", + "store_data(waterschap = WSRL, \n", + " output_gpkg_path = output_gpkg_path + '/WSRL')\n" + ] + }, + { + "cell_type": "raw", + "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fedb4c6e-49c2-44f4-88f0-0e1ce4802bc7", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Routing", + "language": "python", + "name": "routing" + }, + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Scheldestromen.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Scheldestromen.ipynb new file mode 100644 index 0000000..5ba46d7 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Scheldestromen.ipynb @@ -0,0 +1,594 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 39, + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "metadata": {}, + "outputs": [], + "source": [ + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "\n", + "import shapely\n", + "from shapely.validation import make_valid\n" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "metadata": {}, + "outputs": [], + "source": [ + "from general_functions import *" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", + "metadata": {}, + "outputs": [], + "source": [ + "pd.set_option('display.max_columns', None)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'Scheldestromen'\n", + "path_Scheldestromen = '..\\..\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Scheldestromen.gpkg'\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Scheldestromen\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "1f39bd82-2fed-41d6-a4f7-979a9a2120bd", + "metadata": {}, + "outputs": [], + "source": [ + "Scheldestromen = read_gpkg_layers(gpkg_path = path_Scheldestromen, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " # 'afsluitmiddel',\n", + " 'duikersifonhevel',\n", + " # 'hydroobject',\n", + " # 'peilgebiedvigerend',\n", + " # 'peilgebiedpraktijk',\n", + " # 'peilafwijkinggebied',\n", + " # 'streefpeil',\n", + " ],\n", + " engine = 'pyogrio') \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "08cc74ef-4286-4114-bb1b-6e88f4f3c656", + "metadata": {}, + "outputs": [], + "source": [ + "# #the peilgebieden and streefpeilen do not contain overlapping values. Scheldestromen has delivered additional files as shapes\n", + "Scheldestromen['peilgebied'] = gpd.read_file('..\\..\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Praktijkpeilgebieden_20231204.shp')" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "066b2c9f-be0e-41c2-9ec1-9c9d310d2ee6", + "metadata": {}, + "outputs": [], + "source": [ + "#Third nalevering\n", + "Scheldestromen_nalevering = read_gpkg_layers(gpkg_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Oplevering_Scheldestromen_20240328\\Oplevering_20240328.gdb\", \n", + " variables = ['Gemalen', \n", + " 'main_Hydroobject_regionaal', \n", + " 'main_Peilgebiedpraktijk_regionaal'],\n", + " engine = 'pyogrio') " + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "2a3c46b8-d446-43aa-a0d8-5c510abc2978", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Ja', 'Koppeling afvoer (energiebesparing)',\n", + " 'Ja (+ aanvoertraject)', 'Koppeling aanvoer',\n", + " 'Koppeling afvoer (zomer)'], dtype=object)" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Scheldestromen_nalevering['main_Hydroobject_regionaal'] = Scheldestromen_nalevering['main_Hydroobject_regionaal'].loc[Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal != ('None')]\n", + "Scheldestromen_nalevering['main_Hydroobject_regionaal'] = Scheldestromen_nalevering['main_Hydroobject_regionaal'].loc[Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal != ('')]\n", + "Scheldestromen_nalevering['main_Hydroobject_regionaal'] = Scheldestromen_nalevering['main_Hydroobject_regionaal'].loc[Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal != ('Koppeling afvoer (extremen)')]\n", + "Scheldestromen_nalevering['main_Hydroobject_regionaal'] = Scheldestromen_nalevering['main_Hydroobject_regionaal'].loc[Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal != ('Koppeling afvoer (winter)')]\n", + "Scheldestromen_nalevering['main_Hydroobject_regionaal'] = Scheldestromen_nalevering['main_Hydroobject_regionaal'].dropna(subset='regionaal')\n", + "Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal.unique()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "1362afea-8b85-4aec-8085-e854dfaa71cc", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_18924\\103704338.py:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " test =[Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal.str.contains('Ja|Koppeling afvoer (zomer)|Koppeling aanvoer|Koppeling afvoer (energiebesparing)')]\n" + ] + } + ], + "source": [ + "test =[Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal.str.contains('Ja|Koppeling afvoer (zomer)|Koppeling aanvoer|Koppeling afvoer (energiebesparing)')]" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "2295a8a2-8307-4a66-9743-d06fd5a85666", + "metadata": {}, + "outputs": [], + "source": [ + "Scheldestromen['gemaal'] = Scheldestromen_nalevering['Gemalen']\n", + "Scheldestromen['hydroobject'] = Scheldestromen_nalevering['main_Hydroobject_regionaal']\n", + "Scheldestromen['peilgebied'] = pd.merge(left = Scheldestromen_nalevering['main_Peilgebiedpraktijk_regionaal'],\n", + " right = Scheldestromen['peilgebied'],\n", + " left_on = 'naam',\n", + " right_on = 'GPGIDENT',\n", + " how = 'left',\n", + " suffixes = ('', '_merged_oudelevering'))" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "1fbd3407-e961-4dae-b4c1-645acd5e8f36", + "metadata": {}, + "outputs": [], + "source": [ + "Scheldestromen['aggregation_area'] = Scheldestromen['peilgebied'].dissolve(by='RWE_ID')#.plot()\n", + "Scheldestromen['aggregation_area'] = Scheldestromen['aggregation_area'][['GPGIDENT', 'nen3610id', 'GLOBALID', 'geometry']]\n", + "Scheldestromen['aggregation_area'].rename(columns={'GPGIDENT':'code',\n", + " 'GLOBALID': 'globalid'}, \n", + " inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "28df20d6-5061-4aae-ad22-cccda14133de", + "metadata": {}, + "outputs": [], + "source": [ + "#determine aanvoer en afvoer gemalen\n", + "Scheldestromen['gemaal']['func_aanvoer'], Scheldestromen['gemaal']['func_afvoer'], Scheldestromen['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "Scheldestromen['gemaal']['functiegemaal'] = Scheldestromen['gemaal']['KGMFUNCT'].astype(str) \n", + "\n", + "Scheldestromen['gemaal'].loc[Scheldestromen['gemaal'].functiegemaal.astype(str).str.contains('8'), 'func_circulatie'] = True\n", + "Scheldestromen['gemaal'].loc[Scheldestromen['gemaal'].functiegemaal.astype(str).str.contains('2|4|6|7|98|99'), 'func_afvoer'] = True\n", + "Scheldestromen['gemaal'].loc[Scheldestromen['gemaal'].functiegemaal.astype(str).str.contains('1|3'), 'func_aanvoer'] = True\n", + "# Scheldestromen['gemaal'].loc[(Scheldestromen['gemaal'].func_afvoer == False) &\n", + "# (Scheldestromen['gemaal'].func_aanvoer == False) &\n", + "# (Scheldestromen['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "8856eb4f-c3ef-4f75-9d1c-89740bbdbbf7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "852\n" + ] + } + ], + "source": [ + "print(len(Scheldestromen['peilgebied'].code.unique()))\n", + "print(len(Scheldestromen['peilgebied'].code))" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "4a7d78f8-7605-4aba-b4c6-b17b81d4f5df", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_18924\\3963481977.py:13: FutureWarning: You are adding a column named 'geometry' to a GeoDataFrame constructed without an active geometry column. Currently, this automatically sets the active geometry column to 'geometry' but in the future that will no longer happen. Instead, either provide geometry to the GeoDataFrame constructor (GeoDataFrame(... geometry=GeoSeries()) or use `set_geometry('geometry')` to explicitly set the active geometry column.\n", + " Scheldestromen['streefpeil']['geometry'] = np.nan\n" + ] + } + ], + "source": [ + "Scheldestromen['peilgebied']['code'] = Scheldestromen['peilgebied']['GPGIDENT']\n", + "Scheldestromen['peilgebied'] = Scheldestromen['peilgebied'].reset_index(drop=True)\n", + "Scheldestromen['peilgebied']['code'] = Scheldestromen['peilgebied']['code'].astype(str) + '_dummy_id_' + Scheldestromen['peilgebied'].index.astype(str)\n", + "\n", + "Scheldestromen['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Scheldestromen['peilgebied'].index.astype(str)\n", + "\n", + "Scheldestromen['peilgebied']['waterhoogte'] = Scheldestromen['peilgebied']['GPGZP'] \n", + "Scheldestromen['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + Scheldestromen['peilgebied'].index.astype(str)\n", + "\n", + "Scheldestromen['streefpeil'] = gpd.GeoDataFrame()\n", + "Scheldestromen['streefpeil']['waterhoogte'] = Scheldestromen['peilgebied']['waterhoogte']\n", + "Scheldestromen['streefpeil']['globalid'] = Scheldestromen['peilgebied']['globalid']\n", + "Scheldestromen['streefpeil']['geometry'] = np.nan\n", + "\n", + "\n", + "Scheldestromen['peilgebied'] = Scheldestromen['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "0c14883a-873b-44ee-b9d3-57d7da0b67c3", + "metadata": {}, + "outputs": [], + "source": [ + "#convert multiz points to points\n", + "Scheldestromen['stuw'].geometry = Scheldestromen['stuw'].centroid\n", + "Scheldestromen['gemaal'].geometry = Scheldestromen['gemaal'].centroid\n" + ] + }, + { + "cell_type": "markdown", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "metadata": {}, + "source": [ + "# Scheldestromen" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "cbe8f365-8b00-4824-b04c-b976f9a43f05", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_18924\\429676109.py:6: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " Scheldestromen['gemaal'].rename(columns={'KGMNAAM':'code',\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n" + ] + } + ], + "source": [ + "#stuw\n", + "Scheldestromen['stuw'] = Scheldestromen['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "\n", + "#gemaal\n", + "Scheldestromen['gemaal'] = Scheldestromen['gemaal'][['KGMNAAM', 'KGM_GPGIN', 'GLOBALID', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "Scheldestromen['gemaal'].rename(columns={'KGMNAAM':'code',\n", + " 'GLOBALID': 'globalid'}, \n", + " inplace=True)\n", + "\n", + "#hydroobject\n", + "Scheldestromen['hydroobject']['code'] = Scheldestromen['hydroobject']['naam']\n", + "Scheldestromen['hydroobject'] = Scheldestromen['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "\n", + "#are filled in for 99%, but not 100%:\n", + "Scheldestromen['hydroobject']['code'] = 'dummy_code_hydroobject_' + Scheldestromen['hydroobject'].index.astype(str)\n", + "Scheldestromen['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + Scheldestromen['hydroobject'].index.astype(str)\n", + "Scheldestromen['hydroobject']['globalid'] = 'dummy_globalid_hydroobject_' + Scheldestromen['hydroobject'].index.astype(str)\n", + "\n", + "#duikersifonhevel\n", + "Scheldestromen['duikersifonhevel'] = Scheldestromen['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "\n", + "#add the duikersifonhevels to the hydroobjecten\n", + "Scheldestromen['hydroobject'] = pd.concat([Scheldestromen['hydroobject'], Scheldestromen['duikersifonhevel']])\n", + "Scheldestromen['hydroobject'] = gpd.GeoDataFrame(Scheldestromen['hydroobject'], geometry = 'geometry')" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "b3f70ee4-d645-4114-b5e2-2dd573374d6e", + "metadata": {}, + "outputs": [], + "source": [ + "# pd.merge(left = Scheldestromen['peilgebiedpraktijk'],\n", + "# right = Scheldestromen['streefpeil'],\n", + "# left_on = 'globalid',\n", + "# right_on = 'peilgebiedpraktijkid')" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "e58ee099-54b3-415b-8222-9545776a7a61", + "metadata": {}, + "outputs": [], + "source": [ + "Scheldestromen['stuw'] = Scheldestromen['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "# Scheldestromen['gemaal'] = Scheldestromen['gemaal'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Scheldestromen['hydroobject'] = Scheldestromen['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Scheldestromen['duikersifonhevel'] = Scheldestromen['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "023a704c-685e-4fe9-9745-39a5ed461a03", + "metadata": {}, + "outputs": [], + "source": [ + "# Scheldestromen['peilgebiedpraktijk']['geometry'] = Scheldestromen['peilgebiedpraktijk'].buffer(distance = 0)\n", + "# Scheldestromen['peilafwijkinggebied']['geometry'] = Scheldestromen['peilafwijkinggebied'].buffer(distance = 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "4d5d490e-5bba-4d16-95a0-a17880adc0d9", + "metadata": {}, + "outputs": [], + "source": [ + "# peilgebied = pd.merge(left = Scheldestromen['streefpeil'],\n", + "# right = Scheldestromen['peilgebiedpraktijk'],\n", + "# left_on = 'peilgebiedpraktijkid',\n", + "# right_on = 'globalid')" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "cd21bcac-8d25-4d47-ad0a-c7338e6e6653", + "metadata": {}, + "outputs": [], + "source": [ + "# streefpeil = gpd.GeoDataFrame()\n", + "# streefpeil['waterhoogte'] = peilgebied['waterhoogte']\n", + "# streefpeil['globalid'] = peilgebied['peilgebiedpraktijkid']\n", + "# streefpeil['geometry'] = np.nan\n", + "# Scheldestromen['streefpeil'] = gpd.GeoDataFrame(streefpeil)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "88e9543c-2dbe-4ebf-9423-b38daeeaa004", + "metadata": {}, + "outputs": [], + "source": [ + "# Scheldestromen['peilgebied'] = gpd.GeoDataFrame()\n", + "# Scheldestromen['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']] = peilgebied[['code', 'nen3610id_y', 'globalid_y', 'geometry_y']]" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", + "metadata": {}, + "outputs": [], + "source": [ + "#delete irrelvant data\n", + "variables = ['peilgebiedpraktijk', 'peilgebiedvigerend', 'peilafwijkinggebied']\n", + "\n", + "for variable in variables:\n", + " if str(variable) in Scheldestromen:\n", + " del Scheldestromen[variable]" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "de5dc417-260b-4421-a683-1820386e7d4a", + "metadata": {}, + "outputs": [], + "source": [ + "Scheldestromen['streefpeil'].waterhoogte = Scheldestromen['streefpeil'].waterhoogte.round(2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5426a98e-72c5-4e8d-9d7b-2e4e7d8706ae", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "metadata": { + "tags": [] + }, + "source": [ + "### Check for the correct keys and columns" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n", + "gemaal\n", + "['code' 'KGM_GPGIN' 'globalid' 'func_afvoer' 'func_aanvoer'\n", + " 'func_circulatie' 'geometry']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n", + "duikersifonhevel\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n", + "peilgebied\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n", + "hydroobject\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n", + "aggregation_area\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n", + "streefpeil\n", + "['waterhoogte' 'globalid' 'geometry']\n", + "type = \n", + "crs = None\n", + "\n" + ] + } + ], + "source": [ + "show_layers_and_columns(waterschap = Scheldestromen)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "f9d38f6f-42df-45b4-a1d2-b1a779c104d8", + "metadata": {}, + "outputs": [], + "source": [ + "# for i in range(len(Scheldestromen['peilgebied'])): \n", + "# if type(Scheldestromen['peilgebied'].loc[i, 'geometry']) == Polygon:\n", + "# Scheldestromen['peilgebied'].loc[i, 'geometry'].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "45564e81-4fcf-4479-b406-8142b4a64ad1", + "metadata": {}, + "outputs": [], + "source": [ + "# merged = pd.merge(left = Scheldestromen['peilgebied'],\n", + "# right = Scheldestromen['streefpeil'],\n", + "# on = 'globalid')\n", + "\n", + "# merged[merged.waterhoogte.isna()]\n" + ] + }, + { + "cell_type": "markdown", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "metadata": {}, + "source": [ + "### Store data" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "metadata": {}, + "outputs": [], + "source": [ + "# Check if the directory exists\n", + "if not os.path.exists(output_gpkg_path):\n", + " # If it doesn't exist, create it\n", + " os.makedirs(output_gpkg_path)\n", + " \n", + "store_data(waterschap = Scheldestromen, \n", + " output_gpkg_path = output_gpkg_path + '/Scheldestromen')\n" + ] + }, + { + "cell_type": "raw", + "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d226ce01-142d-4bfe-87ab-a58a67c9452a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Routing", + "language": "python", + "name": "routing" + }, + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Wetterskip.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Wetterskip.ipynb new file mode 100644 index 0000000..37554d0 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Wetterskip.ipynb @@ -0,0 +1,1509 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "metadata": {}, + "outputs": [], + "source": [ + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "import shapely\n", + "\n", + "from general_functions import *\n", + "pd.set_option('display.max_columns', None)\n" + ] + }, + { + "cell_type": "markdown", + "id": "48a939f4-8a39-4c24-b466-499eba37172d", + "metadata": {}, + "source": [ + "# Wetterskip Fryslan" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b782b9c9-12b9-461b-8874-a59dad72e4bd", + "metadata": {}, + "outputs": [], + "source": [ + "gpkg_path_Wetterskip = \"..\\..\\Data_preprocessed\\Waterschappen\\Wetterskip\\Wetterskip_gecorrigeerde_geometrie.gpkg\"\n", + "output_gpkg_path_Wetterskip = \"../../Data_postprocessed/Waterschappen/Wetterskip/Wetterskip\"\n", + "\n", + "# peilgebiedpraktijk_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Wetterskip\\Nieuwe_peilgebieden\\MIPWA_20230907WF.gpkg\"\n", + "# streefpeil_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Wetterskip\\Nieuwe_peilgebieden\\MIPWA_20230907WF.gpkg\"\n", + "peilgebieden_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Wetterskip\\Peilenkaart_HKV_20240411\\Peilenkaart.gdb\"" + ] + }, + { + "cell_type": "raw", + "id": "85e699ad-4d02-4c07-be20-523d1088f3fa", + "metadata": {}, + "source": [ + "Aanpassingen n.a.v. de meeting op 10 juni 2024:\n", + "- Toevoegen schouwsloten als deze in de buurt liggen van een gemaal, zie de extra levering van Michiel Bootsma 10 juni 2024. Check\n", + "- Exploden van de aggregatiegebieden \"vrij afwaterend\" EN VAN PARTICULIER, ZIE EMAIL NYNKE!!!!!!!!!!!!!\n", + "- Opvullen gaten peilgebieden" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9e6587d9-1c98-4bfa-a954-df135ba21fa9", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b96e6dab-5341-480d-b077-5b05a2984aa7", + "metadata": {}, + "outputs": [], + "source": [ + "# Duikersifonhevel and hydroobject have a type of multicurvedZ, the peilgebieden a MultiSurfaceZ, which geopandas can not handle. I have manually \n", + "# exported these to single shapes, which automatically converts it to regular MultiStrings. Then these layers have been packed together to a\n", + "# geopackage again. \n", + "\n", + "#retrieve the data\n", + "Wetterskip = read_gpkg_layers(gpkg_path = gpkg_path_Wetterskip, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'afsluitmiddel',\n", + " 'hydroobject',\n", + " 'duikersifonhevel'],\n", + " # 'peilmerk',\n", + " # 'streefpeil',\n", + " # 'peilgebiedpraktijk', \n", + " # 'peilgebiedvigerend',\n", + " # 'peilbesluitgebied'],\n", + " print_var = False)\n", + "\n", + "# #The peilgebieden en streefpeilen have been delivered as additional data\n", + "# peilgebiedpraktijk = gpd.read_file(peilgebiedpraktijk_path,\n", + "# layer = 'DAMO_W_PeilgebiedPraktijk')\n", + "\n", + "# streefpeil = gpd.read_file(streefpeil_path,\n", + "# layer = 'DAMO_W_Streefpeil')\n", + "\n", + "Wetterskip['hydroobject'] = Wetterskip['hydroobject'].loc[Wetterskip['hydroobject'].categorieo == 'primair'] #feedback WS Fryslan: only use primaire hydroobjecten" + ] + }, + { + "cell_type": "markdown", + "id": "a67721b9-9329-44e7-9316-d94ec6b8bee5", + "metadata": {}, + "source": [ + "## Additional schouwsloten near a gemaal" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "48e2ea76-92ce-448e-b4dc-901072c4a3ba", + "metadata": {}, + "outputs": [], + "source": [ + "schouwsloten = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Wetterskip\\20240610_extra_hydroobjecten\\schouwsloten\\schouwsloten_gemaal5m.shp\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "13634014-ad3c-4afa-b948-9de27918266f", + "metadata": {}, + "outputs": [], + "source": [ + "schouwsloten['code'] = schouwsloten['OVKIDENT']\n", + "schouwsloten['nen3610id'] = 'dummy_code_schouwsloot_' + schouwsloten.index.astype(str)\n", + "schouwsloten['globalid'] = 'dummy_code_schouwsloot_' + schouwsloten.index.astype(str)\n", + "schouwsloten = schouwsloten[['code', 'nen3610id', 'globalid', 'geometry']]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "fa01c30f-1f63-4ce7-88a1-c9e7124997d7", + "metadata": {}, + "outputs": [], + "source": [ + "peilgebied = gpd.read_file(peilgebieden_path)\n", + "\n", + "#add an additionally deliverd peilgebied to the peilgebieden\n", + "Willem_jongsma = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Wetterskip\\20240618_Willem_Jongsma_polder\\WF_Willem_Jongsma.shp\")\n", + "\n", + "#in the same format\n", + "Willem_jongsma['GPGIDENT'] = Willem_jongsma.PBHIDENT\n", + "Willem_jongsma['GPGZMRPL'] = Willem_jongsma.LAAGPEIL\n", + "Willem_jongsma['OSMOMSCH'] = Willem_jongsma.WATERSYSTE\n", + "Willem_jongsma['GLOBALID'] = Willem_jongsma.ORDECODE + '_' + Willem_jongsma.index.astype(str)\n", + "\n", + "peilgebied = pd.concat([peilgebied, Willem_jongsma])\n", + "\n", + "peilgebied['waterhoogte'] = np.nan\n", + "peilgebied['waterhoogte'].fillna(value = peilgebied['GPGZMRPL'], inplace = True) #first check the zomerpeil\n", + "peilgebied['waterhoogte'].fillna(value = peilgebied['IWS_GPGVASTP'], inplace = True) #then the vastpeil\n", + "peilgebied['waterhoogte'].fillna(value = peilgebied['GPGWNTPL'], inplace = True) #lastly, the winterpeil" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "37ee8b9d-7534-45bc-a805-7cb14d585d02", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GPGIDENTGPGNAAMGPGSOORTGPGOPPVLGPGZMRPLOPVAFWZPGPGWNTPLOPVAFWWPOSMOMSCHIWS_GPGSTATUIWS_GPGINVOIWS_GPGSCHWPIWS_GPGBEHERIWS_GPGVASTPIWS_GPGAFWVASTPIWS_GPGONDPIWS_GPGBOVPIWS_GPGAFWONDPIWS_GPGAFWBOVPIWS_INUNDATIEPEILIWS_ONDERGRENS_ZOMERPEILIWS_BOVENGRENS_ZOMERPEILRICHTINGIWS_MEMOGEONAUWKEURIGHEIDADMINNAUWKEURIGHEIDBETROUWBAARHEIDINWINNINGSWIJZEINWINNINGSDATUMBRONIDEALISATIEOPMERKINGENGEONAUWKEURIGHEID_ZIWS_KWLTGEOIWS_EIGENAARGLOBALIDWF_INWERKINGTREDING_DATUMShape_LengthShape_AreageometryPBHIDENTTYPEBEHEERHOOGPEILLAAGPEILAFW_PEILBEAFW_HOOGPEAFW_LAAGPEVERGUNNINGWATERSYSTEAANVOER_AFTYPEPEILVAOPMERKINGAFW_EINDAANVOER_MOORDECODELAST_EDITELAST_EDI_1HOOGWATERCSHAPE_AREAwaterhoogte
34PBH0254883NaNNaNNaN-0.75NaNNaNNaNWillem JongsmaNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNWZ.401.001_34NaTNaNNaNPOLYGON Z ((189308.409 540865.901 0.000, 18930...PBH02548833.0-0.55-0.751.00.00.0NoneWillem Jongsma1.03.0NoneNone1.0WZ.401.001MKODDEN2024-03-26None0.389727-0.75
35PBH0254876NaNNaNNaN-0.55NaNNaNNaNWillem JongsmaNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNWZ.401.001_35NaTNaNNaNPOLYGON Z ((191521.683 539320.110 0.000, 19163...PBH02548761.0-0.55-0.551.00.00.0NoneWillem Jongsma1.03.0NoneNone1.0WZ.401.001MKODDEN2024-03-26None79928.585636-0.55
36PBH0254901NaNNaNNaN-1.20NaNNaNNaNWillem JongsmaNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNWZ.401.001_36NaTNaNNaNPOLYGON Z ((190787.267 540064.328 0.000, 19081...PBH02549011.0-1.20-1.201.00.00.0NoneWillem Jongsma3.03.0NoneNone1.0WZ.401.001MKODDEN2024-03-26None131878.257601-1.20
37PBH0254905NaNNaNNaN-1.20NaNNaNNaNWillem JongsmaNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNWZ.401.001_37NaTNaNNaNPOLYGON Z ((190972.562 540027.516 0.000, 19093...PBH02549051.0-1.20-1.201.00.00.0NoneWillem Jongsma2.03.0NoneNone1.0WZ.401.001MKODDEN2024-03-26None3031.453042-1.20
38PBH0254925NaNNaNNaN-1.25NaNNaNNaNWillem JongsmaNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNWZ.401.001_38NaTNaNNaNPOLYGON Z ((189453.748 540955.695 0.000, 18943...PBH02549251.0-1.25-1.251.00.00.0NoneWillem Jongsma3.03.0NoneNone1.0WZ.401.001MKODDEN2024-03-26None11878.916225-1.25
\n", + "
" + ], + "text/plain": [ + " GPGIDENT GPGNAAM GPGSOORT GPGOPPVL GPGZMRPL OPVAFWZP GPGWNTPL \\\n", + "34 PBH0254883 NaN NaN NaN -0.75 NaN NaN \n", + "35 PBH0254876 NaN NaN NaN -0.55 NaN NaN \n", + "36 PBH0254901 NaN NaN NaN -1.20 NaN NaN \n", + "37 PBH0254905 NaN NaN NaN -1.20 NaN NaN \n", + "38 PBH0254925 NaN NaN NaN -1.25 NaN NaN \n", + "\n", + " OPVAFWWP OSMOMSCH IWS_GPGSTATU IWS_GPGINVO IWS_GPGSCHWP \\\n", + "34 NaN Willem Jongsma NaN NaN NaN \n", + "35 NaN Willem Jongsma NaN NaN NaN \n", + "36 NaN Willem Jongsma NaN NaN NaN \n", + "37 NaN Willem Jongsma NaN NaN NaN \n", + "38 NaN Willem Jongsma NaN NaN NaN \n", + "\n", + " IWS_GPGBEHER IWS_GPGVASTP IWS_GPGAFWVASTP IWS_GPGONDP IWS_GPGBOVP \\\n", + "34 NaN NaN NaN NaN NaN \n", + "35 NaN NaN NaN NaN NaN \n", + "36 NaN NaN NaN NaN NaN \n", + "37 NaN NaN NaN NaN NaN \n", + "38 NaN NaN NaN NaN NaN \n", + "\n", + " IWS_GPGAFWONDP IWS_GPGAFWBOVP IWS_INUNDATIEPEIL IWS_ONDERGRENS_ZOMERPEIL \\\n", + "34 NaN NaN NaN NaN \n", + "35 NaN NaN NaN NaN \n", + "36 NaN NaN NaN NaN \n", + "37 NaN NaN NaN NaN \n", + "38 NaN NaN NaN NaN \n", + "\n", + " IWS_BOVENGRENS_ZOMERPEIL RICHTING IWS_MEMO GEONAUWKEURIGHEID \\\n", + "34 NaN NaN NaN NaN \n", + "35 NaN NaN NaN NaN \n", + "36 NaN NaN NaN NaN \n", + "37 NaN NaN NaN NaN \n", + "38 NaN NaN NaN NaN \n", + "\n", + " ADMINNAUWKEURIGHEID BETROUWBAARHEID INWINNINGSWIJZE INWINNINGSDATUM BRON \\\n", + "34 NaN NaN NaN NaT NaN \n", + "35 NaN NaN NaN NaT NaN \n", + "36 NaN NaN NaN NaT NaN \n", + "37 NaN NaN NaN NaT NaN \n", + "38 NaN NaN NaN NaT NaN \n", + "\n", + " IDEALISATIE OPMERKINGEN GEONAUWKEURIGHEID_Z IWS_KWLTGEO IWS_EIGENAAR \\\n", + "34 NaN NaN NaN NaN NaN \n", + "35 NaN NaN NaN NaN NaN \n", + "36 NaN NaN NaN NaN NaN \n", + "37 NaN NaN NaN NaN NaN \n", + "38 NaN NaN NaN NaN NaN \n", + "\n", + " GLOBALID WF_INWERKINGTREDING_DATUM Shape_Length Shape_Area \\\n", + "34 WZ.401.001_34 NaT NaN NaN \n", + "35 WZ.401.001_35 NaT NaN NaN \n", + "36 WZ.401.001_36 NaT NaN NaN \n", + "37 WZ.401.001_37 NaT NaN NaN \n", + "38 WZ.401.001_38 NaT NaN NaN \n", + "\n", + " geometry PBHIDENT TYPEBEHEER \\\n", + "34 POLYGON Z ((189308.409 540865.901 0.000, 18930... PBH0254883 3.0 \n", + "35 POLYGON Z ((191521.683 539320.110 0.000, 19163... PBH0254876 1.0 \n", + "36 POLYGON Z ((190787.267 540064.328 0.000, 19081... PBH0254901 1.0 \n", + "37 POLYGON Z ((190972.562 540027.516 0.000, 19093... PBH0254905 1.0 \n", + "38 POLYGON Z ((189453.748 540955.695 0.000, 18943... PBH0254925 1.0 \n", + "\n", + " HOOGPEIL LAAGPEIL AFW_PEILBE AFW_HOOGPE AFW_LAAGPE VERGUNNING \\\n", + "34 -0.55 -0.75 1.0 0.0 0.0 None \n", + "35 -0.55 -0.55 1.0 0.0 0.0 None \n", + "36 -1.20 -1.20 1.0 0.0 0.0 None \n", + "37 -1.20 -1.20 1.0 0.0 0.0 None \n", + "38 -1.25 -1.25 1.0 0.0 0.0 None \n", + "\n", + " WATERSYSTE AANVOER_AF TYPEPEILVA OPMERKING AFW_EIND AANVOER_MO \\\n", + "34 Willem Jongsma 1.0 3.0 None None 1.0 \n", + "35 Willem Jongsma 1.0 3.0 None None 1.0 \n", + "36 Willem Jongsma 3.0 3.0 None None 1.0 \n", + "37 Willem Jongsma 2.0 3.0 None None 1.0 \n", + "38 Willem Jongsma 3.0 3.0 None None 1.0 \n", + "\n", + " ORDECODE LAST_EDITE LAST_EDI_1 HOOGWATERC SHAPE_AREA waterhoogte \n", + "34 WZ.401.001 MKODDEN 2024-03-26 None 0.389727 -0.75 \n", + "35 WZ.401.001 MKODDEN 2024-03-26 None 79928.585636 -0.55 \n", + "36 WZ.401.001 MKODDEN 2024-03-26 None 131878.257601 -1.20 \n", + "37 WZ.401.001 MKODDEN 2024-03-26 None 3031.453042 -1.20 \n", + "38 WZ.401.001 MKODDEN 2024-03-26 None 11878.916225 -1.25 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "peilgebied.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2595ea5f-0241-4124-8ec9-84a9efec495e", + "metadata": {}, + "outputs": [], + "source": [ + "peilgebied['code'] = peilgebied['GPGIDENT']\n", + "peilgebied['nen3610id'] = peilgebied['OSMOMSCH'] + '_' + peilgebied.index.astype(str)\n", + "peilgebied['globalid'] = peilgebied['GLOBALID'] \n", + "\n", + "peilgebied = peilgebied[['waterhoogte', 'code', 'nen3610id', 'globalid', 'geometry']]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "2dc406d3-2dc6-410e-b69e-bb698a1db06e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# #merge the streefpeil and the peilgebieden\n", + "# peilgebied = pd.merge(left = streefpeil,\n", + "# right = peilgebiedpraktijk,\n", + "# left_on = 'PEILGEBIEDPRAKTIJKID',\n", + "# right_on = 'GLOBALID')\n", + "\n", + "# Wetterskip['peilgebied'] = peilgebied[['WATERHOOGTE', 'nen3610id_y', 'GLOBALID_y', 'geometry_y']]\n", + "# Wetterskip['peilgebied'] = Wetterskip['peilgebied'].rename(columns = {'WATERHOOGTE':'waterhoogte',\n", + "# 'nen3610id_y':'nen3610id',\n", + "# 'GLOBALID_y':'globalid',\n", + "# 'geometry_y':'geometry'})\n", + "\n", + "Wetterskip['peilgebied'] = gpd.GeoDataFrame(peilgebied, geometry = 'geometry')\n", + "Wetterskip['peilgebied'].reset_index(drop=True, inplace = True)\n", + "\n", + "Wetterskip['peilgebied'].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "187615fe-6b5e-4667-b215-8701f5605a56", + "metadata": {}, + "outputs": [], + "source": [ + "aggregation_areas = gpd.read_file(peilgebieden_path)\n", + "aggregation_areas = pd.concat([aggregation_areas, Willem_jongsma])\n", + "\n", + "aggregation_areas = aggregation_areas.dissolve(by='OSMOMSCH', as_index= False, dropna=False)\n", + "\n", + "aggregation_areas['code'] = aggregation_areas.OSMOMSCH\n", + "aggregation_areas['globalid'] = aggregation_areas.GLOBALID\n", + "aggregation_areas['nen3610id'] = aggregation_areas.GPGIDENT\n", + "\n", + "aggregation_areas = aggregation_areas[['code', 'nen3610id', 'globalid', 'geometry']]\n", + "\n", + "Wetterskip['aggregation_area'] = aggregation_areas" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "fd75eca0-bb98-40d6-a888-902648cd2918", + "metadata": {}, + "outputs": [], + "source": [ + "def convert_3D_2D(geometry):\n", + " '''\n", + " Takes a GeoSeries of 3D Multi/Polygons (has_z) and returns a list of 2D Multi/Polygons\n", + " '''\n", + " new_geo = []\n", + " for p in geometry:\n", + " if p.has_z:\n", + " if p.geom_type == 'Polygon':\n", + " lines = [xy[:2] for xy in list(p.exterior.coords)]\n", + " new_p = Polygon(lines)\n", + " new_geo.append(new_p)\n", + " elif p.geom_type == 'MultiPolygon':\n", + " new_multi_p = []\n", + " for ap in p:\n", + " lines = [xy[:2] for xy in list(ap.exterior.coords)]\n", + " new_p = Polygon(lines)\n", + " new_multi_p.append(new_p)\n", + " new_geo.append(MultiPolygon(new_multi_p))\n", + " return new_geo\n", + "\n", + "def convert_to_polygon(line):\n", + " if line.is_ring: # Checks if the LineString is closed\n", + " return Polygon(line)\n", + " else:\n", + " return line # Returns the line string as is if it's not closed\n", + "\n", + "from shapely import Polygon\n", + "from shapely.ops import unary_union,cascaded_union \n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "b6a249d6-adc3-4c89-844b-f68a6bb0cb89", + "metadata": {}, + "outputs": [], + "source": [ + "#select Vrijafstromende gebieden, and exclude it from the aggregation areas\n", + "Vrijafstromend = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code == 'Vrijafstromend'].explode(ignore_index=True)\n", + "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Vrijafstromend']\n", + "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Riolering']\n", + "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Zomerpolder']\n", + "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Vrijafstromend IJsselmeer']\n", + "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Boezem beheerst']\n", + "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Particulier']\n", + "\n", + "\n", + "\n", + "#remove the boezem from the aggregation areas, as these should be handled seperatley to prevent it becoming a single and huge bucket\n", + "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Boezem']\n", + "\n", + "#now identify each boezem peilgebied back in the peilgebieden, as it should still be filtered based on the boezem. Add it to the concat a few lines below\n", + "boezem_peilgebied = Wetterskip['peilgebied'].loc[Wetterskip['peilgebied'].nen3610id.str.contains('Boezem_')]#.plot()\n", + "\n", + "\n", + "#add additional numbers, due to the explosion\n", + "Vrijafstromend['code'] = Vrijafstromend['code'] + Vrijafstromend.index.astype(str)\n", + "Vrijafstromend['globalid'] = Vrijafstromend['globalid'] + Vrijafstromend.index.astype(str)\n", + "Vrijafstromend['nen3610id'] = Vrijafstromend['nen3610id'] + Vrijafstromend.index.astype(str)\n", + "\n", + "#add the Vrijafstromende gebieden to the aggregation areas again\n", + "Wetterskip['aggregation_area'] = pd.concat([Wetterskip['aggregation_area'], Vrijafstromend, boezem_peilgebied])" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "9063e48e-b471-43d6-9c85-48b08c7dd0e9", + "metadata": {}, + "outputs": [], + "source": [ + "Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='code'), 'code'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='code')].code.astype(str) + '_' + Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='code')].index.astype(str)\n", + "Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='nen3610id'), 'nen3610id'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='nen3610id')].nen3610id.astype(str) + '_' + Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='nen3610id')].index.astype(str)\n", + "Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='globalid'), 'globalid'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='globalid')].globalid.astype(str) + '_' + Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='globalid')].index.astype(str)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b6e12aa0-9d9c-4935-9e36-6075befdb42d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "dc860f8a-9186-442c-879d-3bfbc5f703a1", + "metadata": {}, + "outputs": [], + "source": [ + "# Wetterskip['peilgebied'] = Wetterskip['peilgebied'].explode(ignore_index=True)\n", + "# Wetterskip['peilgebied'] = Wetterskip['peilgebied'][Wetterskip['peilgebied'].geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n", + "\n", + "\n", + "# Wetterskip['peilgebied']['area'] = Wetterskip['peilgebied'].area\n", + "# dissolved = Wetterskip['peilgebied'].dissolve()\n", + "# exterior = gpd.GeoDataFrame(geometry=dissolved['geometry'].boundary).to_crs(crs='EPSG:28992')\n", + "# Wetterskip['peilgebied'] = Wetterskip['peilgebied'].to_crs(crs='EPSG:28992')\n", + "# exterior = exterior.explode().reset_index(drop=True)\n", + "# exterior['geometry'] = exterior['geometry'].apply(convert_to_polygon)\n", + "# exterior['area'] = exterior.area\n", + "# exterior = exterior.sort_values(by='area', ascending=False).reset_index(drop=True)\n", + "\n", + "# exterior.to_file('WF_exterior_all.gpkg')\n", + "\n", + "# exterior = exterior.iloc[12::] #take all rows except the first 12. These twelve are Wetterskip + the islands (+some lose peilgebieden)\n", + "# exterior = exterior.reset_index(drop=True)\n", + "# # exterior.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "95f2a930-9098-4fe7-8b65-335c89803539", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "# for i in range(len(exterior)):\n", + "# print(i)\n", + "# # for i in range(10):\n", + "\n", + "# buffered_peilgebied = Wetterskip['peilgebied'].buffer(0.)\n", + "\n", + "# exterior_sample = exterior.iloc[i:i+1] #just pick a single sample\n", + "# exterior_sample.geometry = exterior_sample.buffer(0.0001) #let op! hierdoor komt er alsnog een kleine overlap. Maar anders werkt de code even niet, en vanwege tijdgebrek kan dit nu niet worden opgelost. In het bepalen van de crossings wordt hier echter mee omgegaan.\n", + " \n", + "# intersects_mask = buffered_peilgebied.intersects(exterior_sample.iloc[0].geometry)\n", + "# intersecting_polygons = Wetterskip['peilgebied'][intersects_mask].sort_values(by='area', ascending=False)\n", + "\n", + "# if len(intersecting_polygons) > 0:\n", + "# # print(i)\n", + "# # polygon_to_dissolve = intersecting_polygons.iloc[0:1]#.geometry.unary_union \n", + "# # sample_geometry = exterior_sample.geometry#.unary_union\n", + "# intersecting_polygons = gpd.GeoDataFrame(intersecting_polygons.iloc[0:1], geometry = 'geometry')\n", + " \n", + "# # dissolved_polygon = # dissolve/union them\n", + "# all_geometries = list(intersecting_polygons.geometry) + list(exterior_sample.geometry)\n", + "\n", + "# # Use unary_union to dissolve all polygons in the list\n", + "# dissolved_polygon = unary_union(all_geometries)\n", + " \n", + "# original_index = intersecting_polygons.index[0]\n", + "\n", + "# # Ensure it's a single geometry object.\n", + "# # print(len(Wetterskip['peilgebied'].loc[Wetterskip['peilgebied'].index == original_index, 'geometry']))\n", + "# # print(len(dissolved_polygon))\n", + "# Wetterskip['peilgebied'].loc[Wetterskip['peilgebied'].index == original_index, 'geometry'] = dissolved_polygon#['geometry']\n", + "# # new_gdf = pd.concat([new_gdf, dissolved_polygon])\n", + "# else:\n", + "# print('No intersection found for iteration ', i)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "b1338f43-557f-4210-a8d7-ba63ad0c1d9f", + "metadata": {}, + "outputs": [], + "source": [ + "# Wetterskip['peilgebied'].to_file('WF_peilgebied.gpkg')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "13a17365-c81a-4c10-8c71-2c24f046822e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "Wetterskip['peilgebied'].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "ccc56b93-ad7b-4b80-b197-21c6aa07e07c", + "metadata": {}, + "outputs": [], + "source": [ + "Wetterskip['peilgebied'] = pd.merge(left = Wetterskip['peilgebied'],\n", + " right = peilgebied[['code', 'waterhoogte']],\n", + " on = 'code')\n", + "\n", + "Wetterskip['peilgebied'].rename(columns={'waterhoogte_x':'waterhoogte'}, inplace = True)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "8e3c5720-ff47-40c2-a3f0-e2e635414ed9", + "metadata": {}, + "outputs": [], + "source": [ + "#give new globalids and codes, as the peilgebied.explode() results in non unique values.\n", + "Wetterskip['peilgebied']['code'] = 'dummy_code_peilgebied_' + Wetterskip['peilgebied'].index.astype(str)\n", + "Wetterskip['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Wetterskip['peilgebied'].index.astype(str)\n", + "\n", + "#create the streefpeilen layer\n", + "Wetterskip['streefpeil'] = Wetterskip['peilgebied'][['waterhoogte', 'globalid', 'geometry']]\n", + "Wetterskip['peilgebied'] = Wetterskip['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "\n", + "Wetterskip['streefpeil']['geometry'] = None\n", + "\n", + "Wetterskip['streefpeil'] = gpd.GeoDataFrame(Wetterskip['streefpeil'], geometry='geometry', crs='EPSG:28992')\n", + "Wetterskip['peilgebied'] = gpd.GeoDataFrame(Wetterskip['peilgebied'], geometry='geometry', crs='EPSG:28992')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "7c11c372-524e-4310-b87e-a821f095e625", + "metadata": {}, + "outputs": [], + "source": [ + "gemaal = gpd.read_file(gpkg_path_Wetterskip, layer = 'gemaal')\n", + "gemaal = gemaal[['code', 'nen3610id', 'globalid', 'functiegemaal', 'geometry']]\n", + "Wetterskip['gemaal'] = gemaal" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "21704eb9-844a-483f-b102-53313a08c3e9", + "metadata": {}, + "outputs": [], + "source": [ + "Wetterskip['stuw']['geometry'] = Wetterskip['stuw'].centroid #prevent strange geometries\n", + "Wetterskip['gemaal']['geometry'] = Wetterskip['gemaal'].centroid #prevent strange geometries\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "7eed68de-331a-4829-b78e-ab39db127d71", + "metadata": {}, + "outputs": [], + "source": [ + "#determine aanvoer en afvoer gemalen\n", + "Wetterskip['gemaal']['func_aanvoer'], Wetterskip['gemaal']['func_afvoer'], Wetterskip['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "Wetterskip['gemaal']['functiegemaal'] = Wetterskip['gemaal']['functiegemaal'].astype(str) \n", + "\n", + "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Onbekend|Onderbemaling|Afvoergemaal'), 'func_afvoer'] = True\n", + "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Opmaling|Aanvoer'), 'func_aanvoer'] = True\n", + "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Overig|circulatie'), 'func_circulatie'] = True\n", + "Wetterskip['gemaal'].loc[(Wetterskip['gemaal'].func_afvoer == False) &\n", + " (Wetterskip['gemaal'].func_aanvoer == False) &\n", + " (Wetterskip['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "b17739a1-76d0-4d8e-bbf9-2483cc81abe5", + "metadata": {}, + "outputs": [], + "source": [ + "#points\n", + "Wetterskip['stuw'] = Wetterskip['stuw'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "Wetterskip['gemaal'] = Wetterskip['gemaal'][['code', 'globalid', 'nen3610id', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "Wetterskip['afsluitmiddel'] = Wetterskip['afsluitmiddel'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "\n", + "#lines\n", + "Wetterskip['hydroobject'] = Wetterskip['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "Wetterskip['duikersifonhevel'] = Wetterskip['duikersifonhevel'][['code', 'globalid', 'nen3610id', 'geometry']]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "54ee138a-5c47-414c-a550-68756f739c91", + "metadata": {}, + "outputs": [], + "source": [ + "# #delete irrelvant data\n", + "# variables = ['peilmerk', \n", + "# 'peilgebiedpraktijk', \n", + "# 'peilgebiedvigerend',\n", + "# 'peilbesluitgebied', \n", + "# 'peilgebiedpraktijk']\n", + "\n", + "# for variable in variables:\n", + "# if str(variable) in Wetterskip:\n", + "# del Wetterskip[variable]\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "660832b6-d52f-4c17-9b15-510c265c0bea", + "metadata": {}, + "outputs": [], + "source": [ + "#add duikersifonhevels to the hydroobjecten \n", + "Wetterskip['hydroobject'] = pd.concat([Wetterskip['hydroobject'], Wetterskip['duikersifonhevel'], schouwsloten])\n", + "Wetterskip['hydroobject'] = Wetterskip['hydroobject'].drop_duplicates(subset='globalid') #in case it is run multiple times\n", + "Wetterskip['hydroobject'] = gpd.GeoDataFrame(Wetterskip['hydroobject']).set_crs('epsg:28992')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "48de09a6-1c91-4f61-9042-c43b080c3da5", + "metadata": {}, + "outputs": [], + "source": [ + "Wetterskip['streefpeil'].waterhoogte = Wetterskip['streefpeil'].waterhoogte.round(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "6ce9eaa7-5b21-4f07-bd22-1e60a1bb1181", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
codenen3610idglobalidgeometry
0dummy_code_peilgebied_0Oldelaamsterbrug_0dummy_globalid_peilgebied_0MULTIPOLYGON Z (((189739.053 542314.424 0.000,...
1dummy_code_peilgebied_1Boezem beheerst_1dummy_globalid_peilgebied_1MULTIPOLYGON Z (((187468.939 543147.915 0.000,...
2dummy_code_peilgebied_2Vrijafstromend_2dummy_globalid_peilgebied_2MULTIPOLYGON Z (((201983.478 545854.516 0.000,...
3dummy_code_peilgebied_3Boezem_3dummy_globalid_peilgebied_3MULTIPOLYGON Z (((201757.882 546194.567 0.000,...
4dummy_code_peilgebied_4Fennen, De_4dummy_globalid_peilgebied_4MULTIPOLYGON Z (((197494.555 553316.102 0.000,...
...............
7868dummy_code_peilgebied_7868Willem Jongsma_34dummy_globalid_peilgebied_7868POLYGON Z ((189308.409 540865.901 0.000, 18930...
7869dummy_code_peilgebied_7869Willem Jongsma_35dummy_globalid_peilgebied_7869POLYGON Z ((191521.683 539320.110 0.000, 19163...
7870dummy_code_peilgebied_7870Willem Jongsma_36dummy_globalid_peilgebied_7870POLYGON Z ((190787.267 540064.328 0.000, 19081...
7871dummy_code_peilgebied_7871Willem Jongsma_37dummy_globalid_peilgebied_7871POLYGON Z ((190972.562 540027.516 0.000, 19093...
7872dummy_code_peilgebied_7872Willem Jongsma_38dummy_globalid_peilgebied_7872POLYGON Z ((189453.748 540955.695 0.000, 18943...
\n", + "

7873 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " code nen3610id \\\n", + "0 dummy_code_peilgebied_0 Oldelaamsterbrug_0 \n", + "1 dummy_code_peilgebied_1 Boezem beheerst_1 \n", + "2 dummy_code_peilgebied_2 Vrijafstromend_2 \n", + "3 dummy_code_peilgebied_3 Boezem_3 \n", + "4 dummy_code_peilgebied_4 Fennen, De_4 \n", + "... ... ... \n", + "7868 dummy_code_peilgebied_7868 Willem Jongsma_34 \n", + "7869 dummy_code_peilgebied_7869 Willem Jongsma_35 \n", + "7870 dummy_code_peilgebied_7870 Willem Jongsma_36 \n", + "7871 dummy_code_peilgebied_7871 Willem Jongsma_37 \n", + "7872 dummy_code_peilgebied_7872 Willem Jongsma_38 \n", + "\n", + " globalid \\\n", + "0 dummy_globalid_peilgebied_0 \n", + "1 dummy_globalid_peilgebied_1 \n", + "2 dummy_globalid_peilgebied_2 \n", + "3 dummy_globalid_peilgebied_3 \n", + "4 dummy_globalid_peilgebied_4 \n", + "... ... \n", + "7868 dummy_globalid_peilgebied_7868 \n", + "7869 dummy_globalid_peilgebied_7869 \n", + "7870 dummy_globalid_peilgebied_7870 \n", + "7871 dummy_globalid_peilgebied_7871 \n", + "7872 dummy_globalid_peilgebied_7872 \n", + "\n", + " geometry \n", + "0 MULTIPOLYGON Z (((189739.053 542314.424 0.000,... \n", + "1 MULTIPOLYGON Z (((187468.939 543147.915 0.000,... \n", + "2 MULTIPOLYGON Z (((201983.478 545854.516 0.000,... \n", + "3 MULTIPOLYGON Z (((201757.882 546194.567 0.000,... \n", + "4 MULTIPOLYGON Z (((197494.555 553316.102 0.000,... \n", + "... ... \n", + "7868 POLYGON Z ((189308.409 540865.901 0.000, 18930... \n", + "7869 POLYGON Z ((191521.683 539320.110 0.000, 19163... \n", + "7870 POLYGON Z ((190787.267 540064.328 0.000, 19081... \n", + "7871 POLYGON Z ((190972.562 540027.516 0.000, 19093... \n", + "7872 POLYGON Z ((189453.748 540955.695 0.000, 18943... \n", + "\n", + "[7873 rows x 4 columns]" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Wetterskip['peilgebied']" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "81d3df9b-574a-4bd7-860f-2ac4fda4bd4f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "gemaal\n", + "['code' 'globalid' 'nen3610id' 'func_afvoer' 'func_aanvoer'\n", + " 'func_circulatie' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "afsluitmiddel\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "hydroobject\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "duikersifonhevel\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "peilgebied\n", + "['code' 'nen3610id' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "aggregation_area\n", + "['code' 'nen3610id' 'globalid' 'geometry' 'waterhoogte']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "streefpeil\n", + "['waterhoogte' 'globalid' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n" + ] + } + ], + "source": [ + "show_layers_and_columns(waterschap = Wetterskip)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "ddeaea28-d8ad-484d-880c-965cd4bd8faf", + "metadata": {}, + "outputs": [], + "source": [ + "store_data(waterschap = Wetterskip, \n", + " output_gpkg_path = output_gpkg_path_Wetterskip)\n" + ] + }, + { + "cell_type": "markdown", + "id": "2f83cab3-fb65-4336-a0ed-36339c34c2dc", + "metadata": { + "tags": [] + }, + "source": [ + "# Oud" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "b28774d5-68b1-48ff-99af-ea886ebceeef", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'stop' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_22788\\3957423419.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mstop\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'stop' is not defined" + ] + } + ], + "source": [ + "stop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2982e516-9b1f-4f4e-86cc-5131ff53925a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# layout_path = r\"..\\..\\Data_postprocessed\\QGIS_overzicht\\routing_style_format3.gpkg\"\n", + "# output_layout_path = r\"..\\..\\Data_postprocessed\\QGIS_overzicht\\routing_style_format2_saved\"\n", + "# layout = read_gpkg_layers(gpkg_path = layout_path, \n", + "# variables = ['stuw', \n", + "# 'gemaal', \n", + "# 'afsluitmiddel'])#,\n", + "# # 'hydroobject',\n", + "# # 'duikersifonhevel',\n", + "# # 'streefpeil',\n", + "# # 'peilgebiedpraktijk', \n", + "# # 'peilgebiedvigerend'])\n", + "# store_data(waterschap = layout, \n", + "# output_gpkg_path = output_layout_path)\n" + ] + }, + { + "cell_type": "raw", + "id": "ba602947-7d4c-48b0-9651-683efffd0932", + "metadata": {}, + "source": [ + "There are some peilgebieden without peil. Merge the peilgebied praktijk and the peilgebiedvigerend. Then, take the difference between this merged peilgebied and the peilbesluit gebied. The leftover areas should get a streefpeil based on the layer of peilmerk." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "868691a9-9659-4026-9588-2d9e73f04db5", + "metadata": {}, + "outputs": [], + "source": [ + "# peilgebieden_met_peil = peilgebieden_met_peil.rename(columns = {'code_left':'code',\n", + "# 'globalid_left':'globalid',\n", + "# 'nen3610id_left':'nen3610id',\n", + "# 'geometry_left':'geometry',\n", + "# 'hoogte':'waterhoogte'})\n", + "# peilgebieden_met_peil = peilgebieden_met_peil[['waterhoogte','code', 'globalid', 'nen3610id', 'geometry']].reset_index(drop=True)\n", + "# peilgebieden_met_peil = peilgebieden_met_peil.drop_duplicates(subset='globalid')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "29513621-a948-408e-91cd-9255d55d539b", + "metadata": {}, + "outputs": [], + "source": [ + "# #bring the peilgebied in the correct format\n", + "# extra_peilgebied = peilgebieden_met_peil[['waterhoogte','code','globalid','nen3610id','geometry']].reset_index(drop=True)\n", + "\n", + "# #bring the streefpeil in the correct format\n", + "# extra_peil = peilgebieden_met_peil[['waterhoogte', 'globalid']]\n", + "# extra_peil = extra_peil.rename(columns = {'globalid':'peilgebiedpraktijkid'})\n", + "# extra_peil['peilgebiedvigerendid'] = None\n", + "# extra_peil['geometry'] = None\n", + "\n", + "# #add semi dummy globalid's and nen3610id's\n", + "# extra_peil['globalid'], extra_peil['nen3610id'] = np.arange(0, len(extra_peil)), np.arange(0, len(extra_peil))\n", + "# extra_peil['globalid'] = 'globalid_wetterskip_streefpeil_' + extra_peil['globalid'].astype(str) \n", + "# extra_peil['nen3610id'] = 'nen3610id_wetterskip_' + extra_peil['nen3610id'].astype(str) \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "47072d3d-5d87-40c3-bf57-198d618271ae", + "metadata": {}, + "outputs": [], + "source": [ + "# #add the (geo)dataframes together\n", + "# Wetterskip['peilgebied'] = gpd.GeoDataFrame(pd.concat([peilgebied_PV, extra_peilgebied])).reset_index(drop=True)\n", + "# Wetterskip['streefpeil'] = gpd.GeoDataFrame(pd.concat([Wetterskip['streefpeil'], extra_peil])).reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "794c3ba1-d2ec-4ed7-9f7c-432fe189cc81", + "metadata": {}, + "outputs": [], + "source": [ + "# pd.merge(left=Wetterskip['streefpeil'],\n", + "# right=peilgebied_PV,\n", + "# left_on='peilgebiedid',\n", + "# right_on='globalid')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7484c309-6a03-492b-a27c-fcf3ef837446", + "metadata": {}, + "outputs": [], + "source": [ + "# Wetterskip['streefpeil']['peilgebiedid'] = None\n", + "# Wetterskip['streefpeil']['peilgebiedid'].fillna(Wetterskip['streefpeil']['peilgebiedvigerendid'], inplace = True)\n", + "# Wetterskip['streefpeil']['peilgebiedid'].fillna(Wetterskip['streefpeil']['peilgebiedpraktijkid'], inplace = True)\n", + "\n", + "# #move the peilgebiedid id to both the peilgebiedenas well as the streefpeilen\n", + "# Wetterskip['peilgebied'] = gpd.GeoDataFrame()\n", + "# Wetterskip['peilgebied']['peilgebiedid'] = Wetterskip['streefpeil']['peilgebiedid'] \n", + "\n", + "# Wetterskip['peilgebied'][['code','globalid','nen3610id']] = Wetterskip['streefpeil'][['code','globalid','nen3610id',]] \n", + "\n", + "\n", + "# #the peilgebieden have been merged. Drop the irrelevant columns\n", + "# Wetterskip['streefpeil'] = Wetterskip['streefpeil'][['waterhoogte', 'peilgebiedid']]#.drop(columns=['peilgebiedvigerendid', 'peilgebiedpraktijkid'], inplace = True)\n", + "# # Wetterskip['peilgebied'] = " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "25cfdd50-7216-48aa-a60a-b60710500790", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "57d0bb94-fc26-4299-804e-8c6a17847c77", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Routing", + "language": "python", + "name": "routing" + }, + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Zuiderzeeland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Zuiderzeeland.ipynb new file mode 100644 index 0000000..6099db1 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Zuiderzeeland.ipynb @@ -0,0 +1,4629 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "metadata": {}, + "outputs": [], + "source": [ + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "import shapely\n", + "from shapely.geometry import Polygon, MultiPolygon, shape, Point\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ccb98fec-abb1-4acd-956b-e5ebdb8dd0b4", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "metadata": {}, + "outputs": [], + "source": [ + "from general_functions import *\n", + "\n", + "def convert_3D_2D(geometry):\n", + " '''\n", + " Takes a GeoSeries of 3D Multi/Polygons (has_z) and returns a list of 2D Multi/Polygons\n", + " '''\n", + " new_geo = []\n", + " for p in geometry:\n", + " if p.has_z:\n", + " if p.geom_type == 'Polygon':\n", + " lines = [xy[:2] for xy in list(p.exterior.coords)]\n", + " new_p = Polygon(lines)\n", + " new_geo.append(new_p)\n", + " elif p.geom_type == 'MultiPolygon':\n", + " new_multi_p = []\n", + " for ap in p:\n", + " lines = [xy[:2] for xy in list(ap.exterior.coords)]\n", + " new_p = Polygon(lines)\n", + " new_multi_p.append(new_p)\n", + " new_geo.append(MultiPolygon(new_multi_p))\n", + " return new_geo\n", + "\n", + "def convert_to_polygon(line):\n", + " if line.is_ring: # Checks if the LineString is closed\n", + " return Polygon(line)\n", + " else:\n", + " return line # Returns the line string as is if it's not closed\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", + "metadata": {}, + "outputs": [], + "source": [ + "pd.set_option('display.max_columns', None)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'Zuiderzeeland'\n", + "path_zzl = '..\\..\\Data_preprocessed\\Waterschappen\\Zuiderzeeland'\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Zuiderzeeland\"" + ] + }, + { + "cell_type": "markdown", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "metadata": {}, + "source": [ + "# Zuiderzeeland" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "Zuiderzeeland = {}\n", + "\n", + "Zuiderzeeland['gemaal'] = gpd.read_file(path_zzl + '\\gemalen.gpkg')\n", + "Zuiderzeeland['hevels'] = gpd.read_file(path_zzl + '\\overigekunstwerken.gpkg')\n", + "# Zuiderzeeland['peilgebied'] = gpd.read_file(path_zzl + '\\peilgebieden.gpkg')\n", + "Zuiderzeeland['peilgebied'] = gpd.read_file(path_zzl + '\\peilvakken_nalevering.gpkg')\n", + "\n", + "\n", + "#use fiona for the duikersifonhevels and watergangen due to unexpted geometry types\n", + "with fiona.open(path_zzl + '/Duikers.gpkg', 'r') as file:\n", + " # Read the contents and store them in the GeoDataFrame\n", + " Zuiderzeeland['duikersifonhevel'] = gpd.GeoDataFrame.from_features(file, crs = 'EPSG:28992')\n", + " \n", + "with fiona.open(path_zzl + '/zzl_watergangen_nalevering/zzl_Watergangen.shp', 'r') as file:\n", + " # Read the contents and store them in the GeoDataFrame\n", + " Zuiderzeeland['hydroobject'] = gpd.GeoDataFrame.from_features(file)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "a0d86e2c-d365-4a03-8276-d59f93367128", + "metadata": {}, + "outputs": [], + "source": [ + "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'].set_crs(crs = 'WGS84', allow_override=True)\n", + "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'].to_crs(crs = 'EPSG:28992')" + ] + }, + { + "cell_type": "raw", + "id": "920dff3d-f81f-4e88-a8be-67fa2c60d41b", + "metadata": {}, + "source": [ + "ZZL: stuwen in KWKSOORT in overigekunstwerken.gpkg" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "28a99515-40c8-4a8e-b78f-0781869de8be", + "metadata": {}, + "outputs": [], + "source": [ + "KWKSOORT_stuw = ['Constructie',\n", + " 'inlaat',\n", + " 'uitlaat',\n", + " 'keerwand'] #gebasseerd op de geleverde data van Zuiderzeeland\n", + "\n", + "Zuiderzeeland['stuw'] = Zuiderzeeland['hevels'].loc[Zuiderzeeland['hevels']['KWKSOORT'].isin(KWKSOORT_stuw)].reset_index(drop=True)\n", + "Zuiderzeeland['stuw'].geometry = Zuiderzeeland['stuw'].centroid #prevent pointZ geometries" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e58ee099-54b3-415b-8222-9545776a7a61", + "metadata": {}, + "outputs": [], + "source": [ + "#distinguish multiple parameters from the same gpkg\n", + "Zuiderzeeland['afsluitmiddel'] = Zuiderzeeland['hevels'].loc[Zuiderzeeland['hevels']['KWKSOORT'] == 'Afsluitmiddel (groot)'].reset_index(drop=True)\n", + "Zuiderzeeland['hevels'] = Zuiderzeeland['hevels'].loc[Zuiderzeeland['hevels']['KWKSOORT'] == 'Hevel'].reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a9a814bb-bf6a-4822-9447-c8fb0bbc57ae", + "metadata": {}, + "outputs": [], + "source": [ + "#determine aanvoer en afvoer gemalen\n", + "Zuiderzeeland['gemaal']['func_aanvoer'], Zuiderzeeland['gemaal']['func_afvoer'], Zuiderzeeland['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "Zuiderzeeland['gemaal']['functiegemaal'] = Zuiderzeeland['gemaal']['KGMFUNC'].astype(str) \n", + "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal']['functiegemaal'] == 'onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", + "Zuiderzeeland['gemaal']['functiegemaal'].fillna(Zuiderzeeland['gemaal']['KGMSOORT'], inplace = True) #some additional is given in this column\n", + "\n", + "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('af-|afvoer|onderbemaling'), 'func_afvoer'] = True\n", + "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('aanvoergemaal|opmaling'), 'func_aanvoer'] = True\n", + "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('circulatie'), 'func_circulatie'] = True\n", + "Zuiderzeeland['gemaal'].loc[(Zuiderzeeland['gemaal'].func_afvoer == False) &\n", + " (Zuiderzeeland['gemaal'].func_aanvoer == False) &\n", + " (Zuiderzeeland['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8060f661-8bf1-472c-8022-51933b4f5929", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "413d001e-0c0b-4466-9a10-580b5e0c6c4a", + "metadata": {}, + "outputs": [], + "source": [ + "# Zuiderzeeland['peilgebied']['geometry'] = convert_3D_2D(Zuiderzeeland['peilgebied'].geometry)\n", + "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].explode(ignore_index=True)\n", + "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'][Zuiderzeeland['peilgebied'].geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "ebc58b2f-1699-480a-b0c4-2cd84c199aed", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_12756\\1572867627.py:9: FutureWarning: Currently, index_parts defaults to True, but in the future, it will default to False to be consistent with Pandas. Use `index_parts=True` to keep the current behavior and True/False to silence the warning.\n", + " exterior = exterior.explode().reset_index(drop=True)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n", + "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " super().__setitem__(key, value)\n" + ] + } + ], + "source": [ + "from shapely.ops import unary_union,cascaded_union \n", + "\n", + "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].explode(ignore_index=True)\n", + "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'][Zuiderzeeland['peilgebied'].geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n", + "\n", + "\n", + "Zuiderzeeland['peilgebied']['area'] = Zuiderzeeland['peilgebied'].area\n", + "dissolved = Zuiderzeeland['peilgebied'].dissolve()\n", + "exterior = gpd.GeoDataFrame(geometry=dissolved['geometry'].boundary).to_crs(crs='EPSG:28992')\n", + "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].to_crs(crs='EPSG:28992')\n", + "exterior = exterior.explode().reset_index(drop=True)\n", + "exterior['geometry'] = exterior['geometry'].apply(convert_to_polygon)\n", + "exterior['area'] = exterior.area\n", + "exterior = exterior.sort_values(by='area', ascending=False).reset_index(drop=True)\n", + "exterior = exterior.iloc[2::] #-2 as all rows should be taken into consideration, except the last two. These two polygons represent the flevopolder and the noordoost polder\n", + "exterior = exterior.reset_index(drop=True)\n", + "\n", + "\n", + "# new_gdf = gpd.GeoDataFrame(columns=Zuiderzeeland['peilgebied'].columns())\n", + "\n", + "for i in range(len(exterior)):\n", + "# for i in range(10):\n", + "\n", + " buffered_peilgebied = Zuiderzeeland['peilgebied'].buffer(0.)\n", + "\n", + " exterior_sample = exterior.iloc[i:i+1] #just pick a single sample\n", + " exterior_sample.geometry = exterior_sample.buffer(0.0001) #let op! hierdoor komt er alsnog een kleine overlap. Maar anders werkt de code even niet, en vanwege tijdgebrek kan dit nu niet worden opgelost. In het bepalen van de crossings wordt hier echter mee omgegaan.\n", + " \n", + " intersects_mask = buffered_peilgebied.intersects(exterior_sample.iloc[0].geometry)\n", + " intersecting_polygons = Zuiderzeeland['peilgebied'][intersects_mask].sort_values(by='area', ascending=False)\n", + "\n", + " if len(intersecting_polygons) > 0:\n", + " # print(i)\n", + " # polygon_to_dissolve = intersecting_polygons.iloc[0:1]#.geometry.unary_union \n", + " # sample_geometry = exterior_sample.geometry#.unary_union\n", + " intersecting_polygons = gpd.GeoDataFrame(intersecting_polygons.iloc[0:1], geometry = 'geometry')\n", + " \n", + " # dissolved_polygon = # dissolve/union them\n", + " all_geometries = list(intersecting_polygons.geometry) + list(exterior_sample.geometry)\n", + "\n", + " # Use unary_union to dissolve all polygons in the list\n", + " dissolved_polygon = unary_union(all_geometries)\n", + " \n", + " original_index = intersecting_polygons.index[0]\n", + "\n", + " # Ensure it's a single geometry object.\n", + " # print(len(Zuiderzeeland['peilgebied'].loc[Zuiderzeeland['peilgebied'].index == original_index, 'geometry']))\n", + " # print(len(dissolved_polygon))\n", + " Zuiderzeeland['peilgebied'].loc[Zuiderzeeland['peilgebied'].index == original_index, 'geometry'] = dissolved_polygon#['geometry']\n", + " # new_gdf = pd.concat([new_gdf, dissolved_polygon])\n", + " else:\n", + " print('No intersection found for iteration ', i)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "aec76a19-0893-48a0-b1af-c8c871d0557d", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_12756\\504763384.py:43: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " Zuiderzeeland['streefpeil']['geometry'] = np.nan\n", + "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_12756\\504763384.py:44: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " Zuiderzeeland['streefpeil'].rename(columns = {'streefpeil': 'waterhoogte'}, inplace=True)\n" + ] + } + ], + "source": [ + "#Gemaal\n", + "Zuiderzeeland['gemaal'] = Zuiderzeeland['gemaal'][['KGMIDENT', 'GLOBALID', 'func_aanvoer', 'func_afvoer', 'func_circulatie', 'geometry']]\n", + "Zuiderzeeland['gemaal'] = Zuiderzeeland['gemaal'].rename(columns={'KGMIDENT': 'code', 'GLOBALID': 'globalid'})\n", + "Zuiderzeeland['gemaal']['nen3610id'] = 'dummy_nen3610id_gemaal_' + Zuiderzeeland['gemaal'].index.astype(str)\n", + "\n", + "#Hydroobject\n", + "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'][['OWAIDENT', 'GLOBALID', 'geometry']]\n", + "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'].rename(columns={'OWAIDENT':'code', 'GLOBALID':'globalid'})\n", + "Zuiderzeeland['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + Zuiderzeeland['hydroobject'].index.astype(str)\n", + "\n", + "#duikersifonhevel\n", + "Zuiderzeeland['duikersifonhevel'] = Zuiderzeeland['duikersifonhevel'][['KDUIDENT', 'GLOBALID', 'geometry']]\n", + "Zuiderzeeland['duikersifonhevel'] = Zuiderzeeland['duikersifonhevel'].rename(columns={'KDUIDENT':'code', 'GLOBALID': 'globalid'})\n", + "Zuiderzeeland['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + Zuiderzeeland['duikersifonhevel'].index.astype(str)\n", + "\n", + "#hevels\n", + "Zuiderzeeland['hevels'] = Zuiderzeeland['hevels'][['KWKIDENT', 'GLOBALID', 'geometry']]\n", + "Zuiderzeeland['hevels'] = Zuiderzeeland['hevels'].rename(columns={'KWKIDENT':'code', 'GLOBALID': 'globalid'})\n", + "Zuiderzeeland['hevels']['nen3610id'] = 'dummy_nen3610id_hevels_' + Zuiderzeeland['hevels'].index.astype(str)\n", + "#add to the duikersifonhevel\n", + "Zuiderzeeland['duikersifonhevel'] = gpd.GeoDataFrame(pd.concat((Zuiderzeeland['duikersifonhevel'], Zuiderzeeland['hevels']))) \n", + "\n", + "#stuw\n", + "Zuiderzeeland['stuw'] = Zuiderzeeland['stuw'][['KWKIDENT', 'GLOBALID', 'geometry', 'KWKSOORT']]\n", + "Zuiderzeeland['stuw'] = Zuiderzeeland['stuw'].rename(columns={'KWKIDENT':'code', 'GLOBALID': 'globalid', 'KWKSOORT':'KWKsoort'})\n", + "Zuiderzeeland['stuw'] = Zuiderzeeland['stuw'].set_crs('EPSG:28992')\n", + "Zuiderzeeland['stuw']['nen3610id'] = 'dummy_nen3610id_stuw_' + Zuiderzeeland['stuw'].index.astype(str)\n", + "\n", + "#afsluitmiddel\n", + "Zuiderzeeland['afsluitmiddel'] = Zuiderzeeland['afsluitmiddel'][['KWKIDENT', 'GLOBALID', 'geometry']]\n", + "Zuiderzeeland['afsluitmiddel'] = Zuiderzeeland['afsluitmiddel'].rename(columns={'KWKIDENT':'code', 'GLOBALID': 'globalid'})\n", + "Zuiderzeeland['afsluitmiddel']['nen3610id'] = 'dummy_nen3610id_hevels_' + Zuiderzeeland['afsluitmiddel'].index.astype(str)\n", + "\n", + "#peilgebied\n", + "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'][['DHYDRO_ZMRPL', 'GPGIDENT', 'geometry']]\n", + "Zuiderzeeland['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + Zuiderzeeland['peilgebied'].index.astype(str)\n", + "Zuiderzeeland['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Zuiderzeeland['peilgebied'].index.astype(str)\n", + "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].rename(columns={'DHYDRO_ZMRPL': 'streefpeil', 'GPGIDENT':'code'})\n", + "Zuiderzeeland['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Zuiderzeeland['peilgebied'].index.astype(str)\n", + "\n", + "#streefpeil\n", + "Zuiderzeeland['streefpeil'] = Zuiderzeeland['peilgebied'][['streefpeil', 'globalid']]\n", + "Zuiderzeeland['streefpeil']['geometry'] = np.nan\n", + "Zuiderzeeland['streefpeil'].rename(columns = {'streefpeil': 'waterhoogte'}, inplace=True)\n", + "Zuiderzeeland['streefpeil'] = gpd.GeoDataFrame(Zuiderzeeland['streefpeil'], geometry = 'geometry')\n", + "\n", + "#delete the streefpeil in the peilgebied for consistency\n", + "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'][['code', 'globalid', 'nen3610id', 'geometry']]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "9a0f4172-7e46-4be8-842b-3761a9d0b154", + "metadata": {}, + "outputs": [], + "source": [ + "Zuiderzeeland['aggregation_area'] = Zuiderzeeland['peilgebied'].copy()\n", + "Zuiderzeeland['aggregation_area']['globalid'] = 'dummy_globalid_agg_area_' + Zuiderzeeland['aggregation_area'].index.astype(str)\n", + "Zuiderzeeland['aggregation_area']['code'] = Zuiderzeeland['aggregation_area']['code'].astype(str) + '_dummy_id_' + Zuiderzeeland['aggregation_area'].index.astype(str)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "4dc624d6-6924-426b-bde4-eeee42087999", + "metadata": {}, + "outputs": [], + "source": [ + "Zuiderzeeland['streefpeil'].waterhoogte = Zuiderzeeland['streefpeil'].waterhoogte.astype(float)\n", + "Zuiderzeeland['streefpeil'].waterhoogte = Zuiderzeeland['streefpeil'].waterhoogte.round(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "23196780-1122-4b42-9ddb-5beade351108", + "metadata": {}, + "outputs": [], + "source": [ + "# test = pd.merge(Zuiderzeeland['peilgebied'], \n", + "# Zuiderzeeland['streefpeil'],\n", + "# on = 'globalid',\n", + "# suffixes = ('', '_sp'))\n", + "\n", + "# test.waterhoogte = test.waterhoogte.astype(float)\n", + "# # test.loc[test.waterhoogte.isna()]" + ] + }, + { + "cell_type": "markdown", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "metadata": {}, + "source": [ + "### Check for the correct keys and columns" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "gemaal\n", + "['code' 'globalid' 'func_aanvoer' 'func_afvoer' 'func_circulatie'\n", + " 'geometry' 'nen3610id']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "hevels\n", + "['code' 'globalid' 'geometry' 'nen3610id']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "peilgebied\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "duikersifonhevel\n", + "['code' 'globalid' 'geometry' 'nen3610id']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n", + "hydroobject\n", + "['code' 'globalid' 'geometry' 'nen3610id']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n", + "stuw\n", + "['code' 'globalid' 'geometry' 'KWKsoort' 'nen3610id']\n", + "type = \n", + "crs = EPSG:28992\n", + "\n", + "afsluitmiddel\n", + "['code' 'globalid' 'geometry' 'nen3610id']\n", + "type = \n", + "crs = epsg:28992\n", + "\n", + "streefpeil\n", + "['waterhoogte' 'globalid' 'geometry']\n", + "type = \n", + "crs = None\n", + "\n", + "aggregation_area\n", + "['code' 'globalid' 'nen3610id' 'geometry']\n", + "type = \n", + "crs = epsg:28992\n", + "\n" + ] + } + ], + "source": [ + "show_layers_and_columns(waterschap = Zuiderzeeland)" + ] + }, + { + "cell_type": "markdown", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "metadata": {}, + "source": [ + "### Store data" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "metadata": {}, + "outputs": [], + "source": [ + "# Check if the directory exists. If it doesn't exist, create it\n", + "\n", + "if not os.path.exists(output_gpkg_path):\n", + " os.makedirs(output_gpkg_path)\n", + " \n", + "store_data(waterschap = Zuiderzeeland, \n", + " output_gpkg_path = output_gpkg_path + '/Zuiderzeeland')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "116f9f2a-ad97-44c5-9a2f-ba43c80e4b2d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2cd6b51a-69cb-4bb6-b75d-ee4f8cc0a0db", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Routing", + "language": "python", + "name": "routing" + }, + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/general_functions.py b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/general_functions.py index 0e40153..d9d406d 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/general_functions.py +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/general_functions.py @@ -1,232 +1,217 @@ -# import packages and functions - -import geopandas as gpd +#import packages and functions +import numpy as np import matplotlib.pyplot as plt import pandas as pd +import geopandas as gpd +import os +import fiona +import shapely -def read_gpkg_layers(gpkg_path, variables, engine="fiona", print_var=False): - """ +def read_gpkg_layers(gpkg_path, variables, engine = 'fiona', print_var=False): + ''' Read specified layers from a GeoPackage (GPKG) file and return them as a dictionary. - Parameters - ---------- + Parameters: gpkg_path (str): The file path to the GeoPackage (GPKG) file to read from. variables (list): A list of layer names to read from the GeoPackage. print_var (bool, optional): If True, print the name of each variable as it is read. Default is False. - Returns - ------- + Returns: dict: A dictionary containing the GeoDataFrames, with layer names as keys. This function reads specified layers from a GeoPackage (GPKG) file and returns them as a dictionary. You can choose to print the names of variables as they are read by setting `print_var` to True. - """ + ''' + data = {} for variable in variables: - if print_var: + if print_var == True: print(variable) - data_temp = gpd.read_file(gpkg_path, layer=variable, engine=engine) + data_temp = gpd.read_file(gpkg_path, layer = variable, engine=engine) data[variable] = data_temp - + return data def show_layers_and_columns(waterschap): - """ + ''' Display Information About Layers and Columns in a Geospatial Dataset. - Parameters - ---------- + Parameters: waterschap (dict): A dictionary containing geospatial datasets as GeoDataFrames. - Returns - ------- + Returns: None This function prints the names of all layers and the columns within each layer of a geospatial dataset stored in a dictionary. - """ + ''' + for key in waterschap.keys(): print(key) print(waterschap[str(key)].columns.values) - print("type = ", type(waterschap[str(key)])) - print("crs = ", waterschap[str(key)].crs) + print('type = ', type(waterschap[str(key)])) + print('crs = ', waterschap[str(key)].crs) print() - - + + + def store_data(waterschap, output_gpkg_path): - """ + ''' Store Geospatial Data to a GeoPackage (GPKG) File. - Parameters - ---------- + Parameters: waterschap (dict): A dictionary containing GeoDataFrames to be stored in the GPKG file. output_gpkg_path (str): The file path (including the file name without extension) to save the GPKG file. - Returns - ------- + Returns: None This function stores geospatial data from a dictionary of GeoDataFrames into a GeoPackage (GPKG) file. - - Parameters - ---------- + + Parameters: - waterschap: A dictionary where the keys represent layer names, and the values are GeoDataFrames. - output_gpkg_path: The file path for the output GPKG file. The '.gpkg' extension is added automatically. - """ - for key in waterschap.keys(): - waterschap[str(key)].to_file(output_gpkg_path + ".gpkg", layer=str(key), driver="GPKG") - - + ''' + + for key in waterschap.keys(): + waterschap[str(key)].to_file(output_gpkg_path + '.gpkg', layer = str(key), driver='GPKG') + + + + def overlapping_peilgebieden(waterschap_peilgebieden): - """ + ''' Identify and calculate the percentage of overlapping peilgebieden. - Parameters - ---------- + Parameters: waterschap_peilgebieden (geopandas.GeoDataFrame): A GeoDataFrame containing polygons (the peilgebieden). - Returns - ------- + Returns: geopandas.GeoDataFrame: A GeoDataFrame with overlapping polygons and their overlap percentages. This function analyzes a GeoDataFrame of peilgebied polygons to find overlapping polygons and calculate the percentage of overlap between them. It returns a GeoDataFrame with information about the overlapping polygons, including their overlap percentages. - Parameters - ---------- + Parameters: - waterschap_peilgebieden: A GeoDataFrame containing the peilgebieden polygons. - """ + ''' + peilgebied = waterschap_peilgebieden - peilgebied.geometry = peilgebied.buffer(distance=0) # make invalid geometries valid - peilgebied.set_crs(crs="EPSG:28992", inplace=True) + peilgebied.geometry = peilgebied.buffer(distance=0) #make invalid geometries valid + peilgebied.set_crs(crs='EPSG:28992', inplace=True) # Create an empty GeoDataFrame to store the overlapping polygons and additional information overlapping_polygons = gpd.GeoDataFrame(columns=peilgebied.columns) - # Iterate through each polygon in peilgebied + # Iterate through each polygon in peilgebied for index, row in peilgebied.iterrows(): - current_polygon = peilgebied.iloc[[index]] # select the current polygon - other_polygons = peilgebied.drop(index) # create a GeoDataFrame without the current polygon - overlaps = other_polygons[ - other_polygons.geometry.overlaps(current_polygon.geometry.iloc[0]) - ] # check for overlaps with other polygons + current_polygon = peilgebied.iloc[[index]] #select the current polygon + other_polygons = peilgebied.drop(index) #create a GeoDataFrame without the current polygon + overlaps = other_polygons[other_polygons.geometry.overlaps(current_polygon.geometry.iloc[0])] #check for overlaps with other polygons if not overlaps.empty: - # calculate the percentage of overlap, and add this to the gdf including the overlapping indexes - current_overlap_percentage = ( - overlaps.geometry.intersection(current_polygon.geometry.iloc[0]).area - / current_polygon.geometry.iloc[0].area - * 100 - ) - - overlaps["overlap_percentage"], overlaps["source_globalid"] = pd.NA, pd.NA # create columns - - # fill columns - overlaps["overlap_percentage"] = ( - current_overlap_percentage # multiple peilgebieden will be added to the temporal gdf if there are multiple overlapping polygons - ) - overlaps["source_globalid"] = current_polygon["globalid"].values[ - 0 - ] # add the global id of the current polygon. - - # add to the results + #calculate the percentage of overlap, and add this to the gdf including the overlapping indexes + current_overlap_percentage = overlaps.geometry.intersection(current_polygon.geometry.iloc[0]).area / current_polygon.geometry.iloc[0].area * 100 + + overlaps['overlap_percentage'], overlaps['source_globalid'] = pd.NA, pd.NA #create columns + + #fill columns + overlaps['overlap_percentage'] = current_overlap_percentage #multiple peilgebieden will be added to the temporal gdf if there are multiple overlapping polygons + overlaps['source_globalid'] = current_polygon['globalid'].values[0] #add the global id of the current polygon. + + #add to the results overlapping_polygons = pd.concat([overlapping_polygons, overlaps]) - return overlapping_polygons + return overlapping_polygons + + def plot_histogram_overlap(overlapping_polygons): - """ + + ''' Plots a histogram of the overlapping polygons in a DataFrame. - Parameters - ---------- + Parameters: overlapping_polygons (pd.DataFrame): A DataFrame containing information about overlapping polygons. It should have a 'overlap_percentage' column to represent the percentage of overlap between polygons. - Returns - ------- + Returns: None The function calculates a histogram of overlapping percentages, providing insights into the distribution of overlaps between polygons. It handles potential NaN values in the 'overlap_percentage' column and creates bins ranging from 0% to 100% in 10% increments for the histogram. The number of overlapping polygons is displayed in the title. - """ - overlapping_polygons["overlap_percentage"] = overlapping_polygons["overlap_percentage"].fillna( - 0 - ) # Handle potential NaN values + ''' + overlapping_polygons['overlap_percentage'] = overlapping_polygons['overlap_percentage'].fillna(0) # Handle potential NaN values bins = range(0, 101, 10) # Create bins from 0% to 100% in 10% increments # Create the histogram - plt.hist(overlapping_polygons["overlap_percentage"], bins=bins, color="cornflowerblue", edgecolor="k") + plt.hist(overlapping_polygons['overlap_percentage'], bins=bins, color='cornflowerblue', edgecolor='k') # Set labels and title - plt.xlabel("Overlap [%]") - plt.ylabel("Frequency [#]") # Update the y-axis label + plt.xlabel('Overlap [%]') + plt.ylabel('Frequency [#]') # Update the y-axis label # plt.yscale('log') # Set the y-axis scale to 'log' plt.ylim(0, 15) - plt.suptitle("Histogram of overlapping percentages") - plt.title(f"Number of overlapping polygons = {len(overlapping_polygons)}", fontsize=8) + plt.suptitle('Histogram of overlapping percentages') + plt.title(f'Number of overlapping polygons = {len(overlapping_polygons)}', fontsize = 8) plt.show() - - + + def plot_overlapping_peilgebieden(peilgebied, overlapping_polygons, minimum_percentage): - """ + ''' Plot Overlapping Peilgebieden on a map, including a Minimum Percentage of Overlap to show. - Parameters - ---------- + Parameters: peilgebied (geopandas.GeoDataFrame): A GeoDataFrame representing the peilgebied polygons. overlapping_polygons (geopandas.GeoDataFrame): A GeoDataFrame containing information about overlapping polygons/peilgebieden. minimum_percentage (float or int): The minimum overlap percentage required for polygons to be displayed. - Returns - ------- + Returns: None This function creates a plot to visualize overlapping peilgebieden based on a specified minimum overlap percentage. It displays a subset of overlapping polygons with a percentage greater than the specified minimum. - Parameters - ---------- + Parameters: - peilgebied: The entire peilgebieden GeoDataFrame serving as the background. - overlapping_polygons: GeoDataFrame containing information about overlapping polygons. - minimum_percentage: The minimum overlap percentage required for polygons to be displayed. - """ - # make a subsect of overlapping polygons, based on a percentage - overlap_subset = overlapping_polygons.loc[overlapping_polygons["overlap_percentage"] > minimum_percentage] + ''' + #make a subsect of overlapping polygons, based on a percentage + overlap_subset = overlapping_polygons.loc[overlapping_polygons['overlap_percentage'] > minimum_percentage] - # plot + #plot fig, ax = plt.subplots() - peilgebied.plot(ax=ax, color="lightgray") # background - overlap_subset.plot( - ax=ax, cmap="coolwarm", column=overlap_subset.overlap_percentage, label="Percentage of overlap", legend=True - ) + peilgebied.plot(ax = ax, color='lightgray') #background + overlap_subset.plot(ax = ax, cmap = 'coolwarm', column = overlap_subset.overlap_percentage, label = 'Percentage of overlap', legend = True) plt.show() - - + + + # def intersect_using_spatial_index(peilgebied_praktijk, peilgebied_afwijking, check): # """ # Conduct spatial intersection using spatial index for candidates GeoDataFrame to make queries faster. -# Note, with this function, you can have multiple Polygons in the 'intersecting_gdf' and it will return all the points +# Note, with this function, you can have multiple Polygons in the 'intersecting_gdf' and it will return all the points # intersect with ANY of those geometries. # """ # peilgebied_praktijk_sindex = peilgebied_praktijk.sindex # possible_matches_index = [] - + # # 'itertuples()' function is a faster version of 'iterrows()' # for other in peilgebied_afwijking.itertuples(): # bounds = other.geometry.bounds # c = list(peilgebied_praktijk_sindex.intersection(bounds)) # possible_matches_index += c - + # # Get unique candidates # unique_candidate_matches = list(set(possible_matches_index)) # possible_matches = peilgebied_praktijk.iloc[unique_candidate_matches] @@ -236,24 +221,24 @@ def plot_overlapping_peilgebieden(peilgebied, overlapping_polygons, minimum_perc # # print('un_un =') # # display(un_un) # # print() - + # # print('possible_matches =') # # display(possible_matches) # # print() - + # # print('overlapping_pg_praktijk =') # # display(possible_matches[un_un]) - + # # possible_matches[un_un].to_file('peilgebied_afwijking_unary_union_Rijnland.shp') - - + + # # Conduct the actual intersect # overlapping_pg_praktijk = possible_matches.loc[un_un] #the entire peilgebied praktijk polygons - - + + # #remove the peilgebied afwijking from the peilgebied praktijk # intersection = gpd.overlay(overlapping_pg_praktijk, peilgebied_afwijking, how='intersection') - + # #fix possible invalid geometries # overlapping_pg_praktijk['geometry'] = overlapping_pg_praktijk.buffer(distance = 0) # peilgebied_afwijking['geometry'] = peilgebied_afwijking.buffer(distance = 0) @@ -261,59 +246,47 @@ def plot_overlapping_peilgebieden(peilgebied, overlapping_polygons, minimum_perc # overlapping_updated = gpd.overlay(peilgebied_praktijk, intersection, how='symmetric_difference') ##remove the difference between pg_praktijk and pg_afwijking # peilgebied = overlapping_updated.append(intersection, ignore_index=True) #add the removed difference, but now only the intersected part of pg_afwijking - -# if check: + +# if check == True: # peilgebied_praktijk.to_file('Checks/Rivierenland/peilgebied_praktijk.gpkg', driver='GPKG') # peilgebied_afwijking.to_file('Checks/Rivierenland/peilgebied_afwijking.gpkg', driver='GPKG') # intersection.to_file('Checks/Rivierenland/intersection.gpkg', driver='GPKG') # overlapping_updated.to_file('Checks/Rivierenland/overlapping_updated.gpkg', driver='GPKG') # peilgebied.to_file('Checks/Rivierenland/peilgebied.gpkg', driver='GPKG') - + # return peilgebied - def burn_in_peilgebieden(base_layer, overlay_layer, plot=True): - # remove the overlapping parts from the base_layer - base_layer_without_overlapping = gpd.overlay( - base_layer, overlay_layer, how="symmetric_difference", keep_geom_type=False - ) ##remove the difference between pg_praktijk and pg_afwijking - - # fill each column - base_layer_without_overlapping.code_1.fillna(value=base_layer_without_overlapping.code_2, inplace=True) - base_layer_without_overlapping.nen3610id_1.fillna(value=base_layer_without_overlapping.nen3610id_2, inplace=True) - base_layer_without_overlapping.globalid_1.fillna(value=base_layer_without_overlapping.globalid_2, inplace=True) + #remove the overlapping parts from the base_layer + base_layer_without_overlapping = gpd.overlay(base_layer, overlay_layer, how='symmetric_difference', keep_geom_type=False) ##remove the difference between pg_praktijk and pg_afwijking + + #fill each column + base_layer_without_overlapping.code_1.fillna(value = base_layer_without_overlapping.code_2, inplace=True) + base_layer_without_overlapping.nen3610id_1.fillna(value = base_layer_without_overlapping.nen3610id_2, inplace=True) + base_layer_without_overlapping.globalid_1.fillna(value = base_layer_without_overlapping.globalid_2, inplace=True) # base_layer_without_overlapping.waterhoogte_1.fillna(value = base_layer_without_overlapping.waterhoogte, inplace=True) - - if ( - "waterhoogte_1" in base_layer_without_overlapping.keys() - ): # sometimes a waterhoogte is present in the peilgebieden. Manage this. - base_layer_without_overlapping.rename( - columns={ - "code_1": "code", - "nen3610id_1": "nen3610id", - "globalid_1": "globalid", - "waterhoogte_1": "waterhoogte", - }, - inplace=True, - ) - base_layer_without_overlapping.drop( - columns=["code_2", "nen3610id_2", "globalid_2", "waterhoogte_2"], inplace=True - ) - + + if 'waterhoogte_1' in base_layer_without_overlapping.keys(): #sometimes a waterhoogte is present in the peilgebieden. Manage this. + base_layer_without_overlapping.rename(columns={'code_1': 'code', + 'nen3610id_1': 'nen3610id', + 'globalid_1': 'globalid', + 'waterhoogte_1': 'waterhoogte'}, inplace = True) + base_layer_without_overlapping.drop(columns = ['code_2', 'nen3610id_2', 'globalid_2', 'waterhoogte_2'], inplace=True) + else: - base_layer_without_overlapping.rename( - columns={"code_1": "code", "nen3610id_1": "nen3610id", "globalid_1": "globalid"}, inplace=True - ) - base_layer_without_overlapping.drop(columns=["code_2", "nen3610id_2", "globalid_2"], inplace=True) - - burned_base_layer = pd.concat([pd.DataFrame(base_layer_without_overlapping), pd.DataFrame(overlay_layer)], axis=0) - - burned_base_layer = burned_base_layer.drop_duplicates(subset="globalid", keep="last") - - if plot: + base_layer_without_overlapping.rename(columns={'code_1': 'code', + 'nen3610id_1': 'nen3610id', + 'globalid_1': 'globalid'}, inplace = True) + base_layer_without_overlapping.drop(columns = ['code_2', 'nen3610id_2', 'globalid_2'], inplace=True) + + burned_base_layer = pd.concat([pd.DataFrame(base_layer_without_overlapping), pd.DataFrame(overlay_layer)], axis = 0) + + burned_base_layer = burned_base_layer.drop_duplicates(subset='globalid', keep='last') + + if plot == True: fig, ax = plt.subplots() - base_layer.plot(ax=ax, color="cornflowerblue") - overlay_layer.plot(ax=ax, color="blue") - - return burned_base_layer + base_layer.plot(ax = ax, color='cornflowerblue') + overlay_layer.plot(ax = ax, color='blue') + + return burned_base_layer \ No newline at end of file From 20926ff9668f8953d93f214edcfa2aee6fbef45a Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Wed, 7 Aug 2024 09:08:38 +0200 Subject: [PATCH 06/25] Update processing notebooks --- .../postprocess_data/AmstelGooienVecht.ipynb | 658 --- .../postprocess_data/Delfland.ipynb | 591 --- .../postprocess_data/HHNK.ipynb | 993 ---- .../postprocess_data/HHSK.ipynb | 1360 ----- .../postprocess_data/Hollandse_Delta.ipynb | 622 --- .../postprocess_data/Rijnland.ipynb | 1197 ----- .../postprocess_data/Rivierenland.ipynb | 818 --- .../postprocess_data/Scheldestromen.ipynb | 594 --- .../postprocess_data/Wetterskip.ipynb | 1509 ------ .../postprocess_data/Zuiderzeeland.ipynb | 4629 ----------------- .../postprocess_data/post-process_WSRL.ipynb | 402 ++ .../postprocess_data/post-process_agv.ipynb | 350 ++ .../post-process_delfland.ipynb | 354 ++ .../post-process_rijnland.ipynb | 686 +++ .../post-process_wetterskip.ipynb | 514 ++ .../post-process_zuiderzeeland.ipynb | 377 ++ .../postprocess_data/post-processing_HD.ipynb | 370 ++ .../post-processing_HHNK.ipynb | 363 ++ .../post-processing_HHSK.ipynb | 407 ++ .../post-processing_scheldestromen.ipynb | 374 ++ .../preprocess_data/AmstelGooienVecht.ipynb | 267 +- .../preprocess_data/Delfland.ipynb | 198 +- .../preprocess_data/HHNK.ipynb | 244 +- .../preprocess_data/HHSK.ipynb | 350 +- .../preprocess_data/Hollandse_Delta.ipynb | 228 +- .../preprocess_data/Rijnland.ipynb | 235 +- .../preprocess_data/Rivierenland.ipynb | 282 +- .../preprocess_data/Scheldestromen.ipynb | 189 +- .../preprocess_data/Wetterskip.ipynb | 236 +- .../preprocess_data/Zuiderzeeland.ipynb | 246 +- 30 files changed, 5358 insertions(+), 14285 deletions(-) delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/AmstelGooienVecht.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Delfland.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHNK.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHSK.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Hollandse_Delta.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rijnland.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rivierenland.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Scheldestromen.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Wetterskip.ipynb delete mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Zuiderzeeland.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb create mode 100644 src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/AmstelGooienVecht.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/AmstelGooienVecht.ipynb deleted file mode 100644 index 3b33140..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/AmstelGooienVecht.ipynb +++ /dev/null @@ -1,658 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "d13f9ab1-f6e7-4958-96cc-343f0c2138f6", - "metadata": {}, - "outputs": [], - "source": [ - "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", - "import os\n", - "import fiona\n", - "import shapely\n", - "from shapely import wkt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "ad89ae02-4242-4aca-bd5a-c0c3fd8592ac", - "metadata": {}, - "outputs": [], - "source": [ - "from general_functions import *\n", - "\n", - "%load_ext autoreload\n", - "%autoreload 2\n", - "pd.set_option('display.max_columns', None)\n" - ] - }, - { - "cell_type": "markdown", - "id": "09981d65-c7d2-4802-9fca-2ef490213b2c", - "metadata": {}, - "source": [ - "# Amstel, Gooi en Vecht" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "b5fc0f1d-b2bf-4933-9472-96cb110e6111", - "metadata": {}, - "outputs": [], - "source": [ - "#define relative paths\n", - "waterschap = 'AVG'\n", - "path_AVG = '..\\..\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht'\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/AmstelGooienVecht\"\n", - "DM_path = '..\\..\\Data_overig\\DM_Netwerk\\DM_Netwerk.shp'\n" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "d54f0c7c-93a1-44bd-b0f9-fcf37279dc83", - "metadata": {}, - "outputs": [], - "source": [ - "#AVG has delivered all data in CSV format. Load it in manually with some data mutations\n", - "AVG = {}\n", - "variables = ['stuw', 'gemaal', 'afsluitmiddel', 'duikersifonhevel', 'hydroobject']#, 'peilgebiedpraktijk', 'peilafwijkinggebied']\n", - "for variable in variables:\n", - " path_variable = os.path.join(path_AVG, variable + '.csv')\n", - " df_var = pd.read_csv(path_variable, delimiter=';')\n", - " geom_col = df_var.keys()[-1] #retrieve the column name\n", - " \n", - " if not 'geometrie' in geom_col:\n", - " raise ValueError('No \"geometry\" string found in the last column of the dataframe. Check for existence') \n", - " \n", - " df_var['geometry'] = df_var[geom_col].apply(lambda x: wkt.loads(x.split(';')[-1])) \n", - " AVG[variable] = df_var\n", - " \n", - "#there is one last gpkg which contains the streefpeilen (and peilgebieden)\n", - "# AVG['peilgebied'] = gpd.read_file(os.path.join(path_AVG, 'vigerende_peilgebieden.gpkg'))" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "d8ca7d9a-fcd9-4154-9278-029f2a25b7b7", - "metadata": {}, - "outputs": [], - "source": [ - "# AVG['peilgebied']['streefpeil'] = np.nan\n", - "# AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['GPGZMRPL'])\n", - "# AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['IWS_GPGVASTP'])\n", - "# AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['IWS_GPGONDP'])\n", - "\n", - "\n", - "# print('Number of missing streefpeilen = ', len(AVG['peilgebied']['streefpeil'].loc[AVG['peilgebied']['streefpeil'].isna()]))\n", - "\n", - "# fig, ax = plt.subplots()\n", - "# AVG['peilgebied'].geometry.plot(ax=ax, color='cornflowerblue')\n", - "# AVG['peilgebied'].loc[AVG['peilgebied']['streefpeil'].isna()].geometry.plot(ax=ax, color='red')\n", - "# ax.legend()" - ] - }, - { - "cell_type": "markdown", - "id": "3c3e568b-79b0-4809-8274-a029cc61b534", - "metadata": {}, - "source": [ - "# Nalevering" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "31327447-601e-4f6a-b141-e97162433b37", - "metadata": {}, - "outputs": [], - "source": [ - "#overwrite previous data\n", - "AVG['stuw'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Stuw.shp\")\n", - "# AVG['stuw'] = AVG['stuw'].loc[AVG['stuw'].LHM == 'LHM']\n", - "\n", - "AVG['gemaal'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Gemaal.shp\")\n", - "# AVG['gemaal'] = AVG['gemaal'].loc[AVG['gemaal'].LHM == 'LHM']\n", - "\n", - "AVG['duikersifonhevel'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Duikersifonhevel.shp\")\n", - "AVG['hydroobject'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\LHM_hydrovakken.shp\")\n", - "\n", - "#something went wrong with the new CRS. Take the old gpkg, and apply the crs to the new gpkg\n", - "peilgebied_oud = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\LHM_gebieden.shp\")\n", - "# AVG['peilgebied'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\verbeterde_LHM_gebieden\\LHM_gebieden.shp\")\n", - "AVG['peilgebied'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\verbeterde_LHM_gebieden_geactualiseerd\\LHM_gebieden.shp\")\n", - "AVG['peilgebied'] = AVG['peilgebied'].set_crs(crs = peilgebied_oud.crs, allow_override=True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cd6401ef-673b-474d-bcac-0582bc3a8717", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "fc108c0a-60f0-4b26-9d68-d2b0fac64041", - "metadata": {}, - "outputs": [], - "source": [ - "# AVG['peilgebied'] = AVG['peilgebied'].to_crs(crs='EPSG:28992')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "a1edefc2-1230-49ba-b7e5-8c1346f02046", - "metadata": {}, - "outputs": [], - "source": [ - "# haven = AVG['peilgebied'].loc[AVG['peilgebied'].GAFNAAM == \"Noordzeekanaal/IJ/Amsterdamrijnkanaalboezem\"]\n", - "# haven = haven.explode(index_parts=False)\n", - "\n", - "# AVG['peilgebied'] = AVG['peilgebied'].loc[AVG['peilgebied'].GAFNAAM != \"Noordzeekanaal/IJ/Amsterdamrijnkanaalboezem\"] #remove this from the gdf, to be added later" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "e0384530-d4aa-4ba0-8423-e729b51865b5", - "metadata": {}, - "outputs": [], - "source": [ - "# haven = haven.reset_index(drop=True)\n", - "# haven.GAFIDENT = haven.GAFIDENT + '_' + haven.index.astype(str)\n", - "# haven.GAFNAAM = haven.GAFNAAM + '_' + haven.index.astype(str)\n", - "\n", - "# AVG['peilgebied'] = gpd.GeoDataFrame(pd.concat([AVG['peilgebied'], haven]), geometry = 'geometry')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "adef7ed3-1f50-4576-9aa6-21f439e1e391", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "f68a9597-d088-40c2-88df-931aa281d000", - "metadata": {}, - "outputs": [], - "source": [ - "AVG['peilgebied'].loc[AVG['peilgebied'].zomer == 0, 'zomer'] = np.nan\n", - "AVG['peilgebied'].loc[AVG['peilgebied'].winter == 0, 'winter'] = np.nan\n", - "AVG['peilgebied'].loc[AVG['peilgebied'].vast == 0, 'vast'] = np.nan" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "951b70c4-740a-47db-9abf-7c5770aa24bb", - "metadata": {}, - "outputs": [], - "source": [ - "AVG['peilgebied']['streefpeil'] = AVG['peilgebied'][['vast', 'zomer']].min(axis=1, skipna=True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "320352cd-a10b-48ff-afc0-71023df12cb4", - "metadata": {}, - "outputs": [], - "source": [ - "#determine aanvoer en afvoer gemalen\n", - "AVG['gemaal']['func_aanvoer'], AVG['gemaal']['func_afvoer'], AVG['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "AVG['gemaal']['functiegemaal'] = AVG['gemaal']['naam'].astype(str) # aan AGV gevraagd of alle opmaling informatie in de kolom 'naam' verwerkt is. Antwoord: ja\n", - "\n", - "AVG['gemaal'].loc[AVG['gemaal']['functiegemaal'] == 'onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", - "\n", - "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('fvoer|nderbemaling|f-|oodpomp'), 'func_afvoer'] = True\n", - "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('anvoergemaal|pmaling|an-|p-|pvoer'), 'func_aanvoer'] = True\n", - "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('irculatie'), 'func_circulatie'] = True\n", - "AVG['gemaal'].loc[(AVG['gemaal'].func_afvoer == False) &\n", - " (AVG['gemaal'].func_aanvoer == False) &\n", - " (AVG['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "7fd2e22c-95a0-4877-b160-843b36ea56a3", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_21164\\3966756081.py:47: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " AVG['streefpeil']['code'] = 'dummy_code_streefpeil_' + AVG['streefpeil'].index.astype(str)\n", - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_21164\\3966756081.py:48: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " AVG['streefpeil']['geometry'] = None\n" - ] - } - ], - "source": [ - "#stuw\n", - "AVG['stuw'] = AVG['stuw'][['code', 'geometry']]\n", - "AVG['stuw'].loc[:, 'nen3610id'] = 'dummy_nen3610id_stuw_' + AVG['stuw'].index.astype(str)\n", - "AVG['stuw']['globalid'] = 'dummy_globalid_stuw_' + AVG['stuw'].index.astype(str)\n", - "AVG['stuw'] = gpd.GeoDataFrame(AVG['stuw']).to_crs('epsg:28992')\n", - "\n", - "#gemaal\n", - "AVG['gemaal'] = AVG['gemaal'][['code', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "AVG['gemaal'].loc[:, 'nen3610id'] = 'dummy_nen3610id_gemaal_' + AVG['gemaal'].index.astype(str)\n", - "AVG['gemaal']['globalid'] = 'dummy_globalid_gemaal_' + AVG['gemaal'].index.astype(str)\n", - "AVG['gemaal'] = gpd.GeoDataFrame(AVG['gemaal']).to_crs('epsg:28992')\n", - "\n", - "#afsluitmiddel\n", - "AVG['afsluitmiddel'] = AVG['afsluitmiddel'][['code', 'geometry']]\n", - "AVG['afsluitmiddel'].loc[:, 'nen3610id'] = 'dummy_nen3610id_afsluitmiddel_' + AVG['afsluitmiddel'].index.astype(str)\n", - "AVG['afsluitmiddel']['globalid'] = 'dummy_globalid_afsluitmiddel_' + AVG['afsluitmiddel'].index.astype(str)\n", - "AVG['afsluitmiddel'] = gpd.GeoDataFrame(AVG['afsluitmiddel']).set_crs('epsg:28992')\n", - "\n", - "#duikersifonhevel\n", - "AVG['duikersifonhevel'] = AVG['duikersifonhevel'][['code', 'geometry']]\n", - "AVG['duikersifonhevel'].loc[:, 'nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + AVG['duikersifonhevel'].index.astype(str)\n", - "AVG['duikersifonhevel']['globalid'] = 'dummy_globalid_duikersifonhevel_' + AVG['duikersifonhevel'].index.astype(str)\n", - "AVG['duikersifonhevel'] = gpd.GeoDataFrame(AVG['duikersifonhevel']).to_crs('epsg:28992')\n", - "\n", - "#hydroobject\n", - "AVG['hydroobject'] = AVG['hydroobject'][['geometry']]\n", - "AVG['hydroobject']['code'] = 'dummy_code_hydroobject_' + AVG['hydroobject'].index.astype(str)\n", - "AVG['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + AVG['hydroobject'].index.astype(str)\n", - "AVG['hydroobject']['globalid'] = 'dummy_globalid_hydroobject_' + AVG['hydroobject'].index.astype(str)\n", - "AVG['hydroobject'] = gpd.GeoDataFrame(AVG['hydroobject']).set_crs('epsg:28992')\n", - "\n", - "# #streefpeil\n", - "# AVG['streefpeil'] = pd.DataFrame()\n", - "# AVG['streefpeil']['waterhoogte'] = AVG['peilgebied']['streefpeil']\n", - "# AVG['streefpeil']['globalid'] = 'dummy_globalid_streefpeil_' + AVG['streefpeil'].index.astype(str)\n", - "# AVG['streefpeil']['geometry'] = np.nan\n", - "# AVG['streefpeil'] = gpd.GeoDataFrame(AVG['streefpeil']).set_crs('epsg:28992')\n", - "\n", - "#peilgebied\n", - "AVG['peilgebied']['code'] = AVG['peilgebied']['GAFNAAM']\n", - "AVG['peilgebied']['geometry'] = AVG['peilgebied']['geometry']\n", - "AVG['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + AVG['peilgebied'].index.astype(str)\n", - "AVG['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + AVG['peilgebied'].index.astype(str)\n", - "AVG['peilgebied']['waterhoogte'] = AVG['peilgebied'].streefpeil\n", - "\n", - "AVG['streefpeil'] = AVG['peilgebied'][['waterhoogte', 'globalid']]\n", - "AVG['streefpeil']['code'] = 'dummy_code_streefpeil_' + AVG['streefpeil'].index.astype(str)\n", - "AVG['streefpeil']['geometry'] = None\n", - "AVG['streefpeil'] = gpd.GeoDataFrame(AVG['streefpeil'], geometry = 'geometry')\n", - "\n", - "\n", - "AVG['peilgebied'] = AVG['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "AVG['peilgebied'] = gpd.GeoDataFrame(AVG['peilgebied']).to_crs('epsg:28992')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "3cb1e8f8-fc21-4b03-a6e9-d0c1eecd5701", - "metadata": {}, - "outputs": [], - "source": [ - "#add duikersifonhevels to the hydroobjecten \n", - "AVG['hydroobject'] = pd.concat([AVG['hydroobject'], AVG['duikersifonhevel']])\n", - "AVG['hydroobject'] = AVG['hydroobject'].drop_duplicates(subset='globalid') #in case it is run multiple times\n", - "AVG['hydroobject'] = gpd.GeoDataFrame(AVG['hydroobject']).set_crs('epsg:28992')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "74d6b456-154a-4c13-b53d-4d5e67122485", - "metadata": {}, - "outputs": [], - "source": [ - "AVG['aggregation_area'] = AVG['peilgebied'].copy()\n", - "AVG['aggregation_area']['globalid'] = 'dummy_globalid_agg_area_' + AVG['aggregation_area'].index.astype(str)\n", - "AVG['aggregation_area']['code'] = AVG['aggregation_area']['code'] + '_dummy_id_' + AVG['aggregation_area'].index.astype(str)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "cba95812-69eb-4efe-8ce5-0150d321e090", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe0AAAGdCAYAAAA/lis6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3hc5Zm37zO9N/Uuucq2XOWCaaYYHEIoIVmSxXEgxSn0ALsJbDabZJOQLwGSAEmWkiwJOCEFEkpYYyA04y5b7pZlW71L03s73x8jjTXSSBrJkguc+7p04ZnznjNnRmKe92m/RxBFUURCQkJCQkLirEd2pm9AQkJCQkJCIjMkoy0hISEhIXGOIBltCQkJCQmJcwTJaEtISEhISJwjSEZbQkJCQkLiHEEy2hISEhISEucIktGWkJCQkJA4R5CMtoSEhISExDmC4kzfwNlOPB6nvb0do9GIIAhn+nYkJCQkJM5iRFHE4/FQWFiITDb5frFktMegvb2dkpKSM30bEhISEhLnEC0tLRQXF0/6dU/JaD/44IM88MAD3HXXXfz85z8HoKuri29+85ts2rQJp9PJxRdfzGOPPcbMmTOT511yySW8++67Kdf6zGc+w/PPP5987HA4uPPOO3n55ZcBuPbaa3nsscewWCzJNc3Nzdx2223885//RKvVctNNN/HQQw+hUqmSa/bv38/tt9/Ojh07sNlsfPWrX+U///M/M/aajUYjkPgFmEymcX0+EhISEhIfLdxuNyUlJUnbMdlM2Gjv3LmTJ598kgULFiSfE0WR66+/HqVSyUsvvYTJZOKRRx5h9erVHDp0CL1en1y7fv16vv/97ycfa7XalOvfdNNNtLa2snHjRgC+8pWvsG7dOl555RUAYrEYV199NTk5OWzevJm+vj5uvvlmRFHkscceAxIf3hVXXMGll17Kzp07OXr0KLfccgt6vZ577703o/c5YNxNJpNktCUkJCQkMmLK0qniBPB4POLMmTPFN954Q1y1apV41113iaIoinV1dSIgHjhwILk2Go2KNptNfOqpp5LPDT4nHYcOHRIBcdu2bcnntm7dKgLikSNHRFEUxddee02UyWRiW1tbcs0f//hHUa1Wiy6XSxRFUfzVr34lms1mMRgMJtc8+OCDYmFhoRiPxzN6ry6XSwSS15SQkJCQkBiJqbYZE8qS33bbbVx99dWsXr065flQKASARqNJPieXy1GpVGzevDll7YYNG8jOzmbevHncd999eDye5LGtW7diNptZsWJF8rnzzjsPs9nMli1bkmuqqqooLCxMrlmzZg2hUIiamprkmlWrVqFWq1PWtLe309jYmPa9hUIh3G53yo+EhISEhMTZwLiN9vPPP09NTQ0PPvjgsGOVlZWUlZVx//3343A4CIfD/PjHP6azs5OOjo7kurVr1/LHP/6Rd955h//8z//khRde4IYbbkge7+zsJDc3d9j1c3Nz6ezsTK7Jy8tLOW61WlGpVKOuGXg8sGYoDz74IGazOfkjFaFJSEhISJwtjCun3dLSwl133cWmTZtSvOkBlEolL7zwAl/60pew2WzI5XJWr17NVVddlbJu/fr1yX9XVVUxc+ZMli5dyu7du1myZAmQPh8gimLK8xNZI/aPDx8p33D//fdzzz33JB8PFBVISEhISEicacbladfU1NDd3U11dTUKhQKFQsG7777Lo48+ikKhIBaLUV1dTW1tLU6nk46ODjZu3EhfXx8VFRUjXnfJkiUolUrq6+sByM/Pp6ura9i6np6epKecn58/zFt2OBxEIpFR13R3dwMM88AHUKvVyaIzqfhMQkJCQuJsYlxG+/LLL2f//v3U1tYmf5YuXcratWupra1FLpcn15rNZnJycqivr2fXrl1cd911I1734MGDRCIRCgoKAFi5ciUul4sdO3Yk12zfvh2Xy8X555+fXHPgwIGUsPumTZtQq9VUV1cn17z33nuEw+GUNYWFhZSXl4/nrUtISEhISJxxBHEgXjxBLrnkEhYtWpTs0/7LX/5CTk4OpaWl7N+/n7vuuovq6mpeeOEFAI4fP86GDRv4+Mc/TnZ2NocOHeLee+9Fq9Wyc+fOpOG/6qqraG9v54knngASLV9lZWUpLV+LFi0iLy+Pn/70p9jtdm655Rauv/76ZMuXy+Vi9uzZXHbZZTzwwAPU19dzyy238J3vfCfjli+3243ZbMblcklet4SEhITEqEy5zTjV8vOh7Vu/+MUvxOLiYlGpVIqlpaXit7/9bTEUCiWPNzc3ixdffLFos9lElUolTp8+XbzzzjvFvr6+lOv29fWJa9euFY1Go2g0GsW1a9eKDocjZU1TU5N49dVXi1qtVrTZbOLtt9+e0t4liqK4b98+8aKLLhLVarWYn58vfve7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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "AVG['aggregation_area'].plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "a544e97c-540e-4292-a14c-e1e9b3750fcd", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
codenen3610idglobalidgeometry
0Polder Holland en Sticht westdummy_nen3610id_peilgebied_0dummy_globalid_peilgebied_0POLYGON ((129049.972 471580.425, 129035.352 47...
1Westerparkdummy_nen3610id_peilgebied_1dummy_globalid_peilgebied_1POLYGON ((120537.143 488786.773, 120531.029 48...
2Gansenhoef westdummy_nen3610id_peilgebied_2dummy_globalid_peilgebied_2POLYGON ((130201.406 463780.753, 130215.328 46...
3Breukelen boezempeildummy_nen3610id_peilgebied_3dummy_globalid_peilgebied_3POLYGON ((128821.123 464611.681, 128815.091 46...
4Nieuw-Slotendummy_nen3610id_peilgebied_4dummy_globalid_peilgebied_4POLYGON ((116494.254 484423.981, 116495.397 48...
...............
234Noordzeekanaal/IJ/Amsterdamrijnkanaalboezemdummy_nen3610id_peilgebied_234dummy_globalid_peilgebied_234POLYGON ((130338.556 461734.893, 130209.061 46...
235Noordzeekanaal/IJ/Amsterdamrijnkanaalboezemdummy_nen3610id_peilgebied_235dummy_globalid_peilgebied_235MULTIPOLYGON (((119896.554 493206.407, 119901....
236Eiland Zeeburg (oost)dummy_nen3610id_peilgebied_236dummy_globalid_peilgebied_236POLYGON ((126884.268 486841.136, 126832.862 48...
237IJmeerdummy_nen3610id_peilgebied_237dummy_globalid_peilgebied_237MULTIPOLYGON (((127568.276 485654.942, 127577....
238Noordzeekanaal/IJ/Amsterdamrijnkanaalboezemdummy_nen3610id_peilgebied_238dummy_globalid_peilgebied_238MULTIPOLYGON (((123564.450 488082.567, 123566....
\n", - "

239 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " code \\\n", - "0 Polder Holland en Sticht west \n", - "1 Westerpark \n", - "2 Gansenhoef west \n", - "3 Breukelen boezempeil \n", - "4 Nieuw-Sloten \n", - ".. ... \n", - "234 Noordzeekanaal/IJ/Amsterdamrijnkanaalboezem \n", - "235 Noordzeekanaal/IJ/Amsterdamrijnkanaalboezem \n", - "236 Eiland Zeeburg (oost) \n", - "237 IJmeer \n", - "238 Noordzeekanaal/IJ/Amsterdamrijnkanaalboezem \n", - "\n", - " nen3610id globalid \\\n", - "0 dummy_nen3610id_peilgebied_0 dummy_globalid_peilgebied_0 \n", - "1 dummy_nen3610id_peilgebied_1 dummy_globalid_peilgebied_1 \n", - "2 dummy_nen3610id_peilgebied_2 dummy_globalid_peilgebied_2 \n", - "3 dummy_nen3610id_peilgebied_3 dummy_globalid_peilgebied_3 \n", - "4 dummy_nen3610id_peilgebied_4 dummy_globalid_peilgebied_4 \n", - ".. ... ... \n", - "234 dummy_nen3610id_peilgebied_234 dummy_globalid_peilgebied_234 \n", - "235 dummy_nen3610id_peilgebied_235 dummy_globalid_peilgebied_235 \n", - "236 dummy_nen3610id_peilgebied_236 dummy_globalid_peilgebied_236 \n", - "237 dummy_nen3610id_peilgebied_237 dummy_globalid_peilgebied_237 \n", - "238 dummy_nen3610id_peilgebied_238 dummy_globalid_peilgebied_238 \n", - "\n", - " geometry \n", - "0 POLYGON ((129049.972 471580.425, 129035.352 47... \n", - "1 POLYGON ((120537.143 488786.773, 120531.029 48... \n", - "2 POLYGON ((130201.406 463780.753, 130215.328 46... \n", - "3 POLYGON ((128821.123 464611.681, 128815.091 46... \n", - "4 POLYGON ((116494.254 484423.981, 116495.397 48... \n", - ".. ... \n", - "234 POLYGON ((130338.556 461734.893, 130209.061 46... \n", - "235 MULTIPOLYGON (((119896.554 493206.407, 119901.... \n", - "236 POLYGON ((126884.268 486841.136, 126832.862 48... \n", - "237 MULTIPOLYGON (((127568.276 485654.942, 127577.... \n", - "238 MULTIPOLYGON (((123564.450 488082.567, 123566.... \n", - "\n", - "[239 rows x 4 columns]" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "AVG['peilgebied']" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "f09335f6-d9ad-412d-80e6-594c2b94ced9", - "metadata": {}, - "outputs": [], - "source": [ - "AVG['streefpeil'].waterhoogte = AVG['streefpeil'].waterhoogte.round(2)" - ] - }, - { - "cell_type": "markdown", - "id": "9276888c-0ba2-4f5d-8ecb-a26baa1747f0", - "metadata": {}, - "source": [ - "# Control, store" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "f2554d9e-9957-47bd-8cef-e6bfd4220a61", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "['code' 'geometry' 'nen3610id' 'globalid']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "gemaal\n", - "['code' 'func_afvoer' 'func_aanvoer' 'func_circulatie' 'geometry'\n", - " 'nen3610id' 'globalid']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "afsluitmiddel\n", - "['code' 'geometry' 'nen3610id' 'globalid']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "duikersifonhevel\n", - "['code' 'geometry' 'nen3610id' 'globalid']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "hydroobject\n", - "['geometry' 'code' 'nen3610id' 'globalid']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "peilgebied\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "streefpeil\n", - "['waterhoogte' 'globalid' 'code' 'geometry']\n", - "type = \n", - "crs = None\n", - "\n", - "aggregation_area\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n" - ] - } - ], - "source": [ - "show_layers_and_columns(waterschap = AVG)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "be767e93-6ab9-4a3d-a7ae-247eb3877617", - "metadata": {}, - "outputs": [], - "source": [ - "# Check if the directory exists\n", - "if not os.path.exists(output_gpkg_path):\n", - " # If it doesn't exist, create it\n", - " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = AVG, \n", - " output_gpkg_path = output_gpkg_path + '/AGV')\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "45a1584e-d9e8-41e0-9fb8-8a51cf20c675", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Routing", - "language": "python", - "name": "routing" - }, - "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.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Delfland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Delfland.ipynb deleted file mode 100644 index 0167485..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Delfland.ipynb +++ /dev/null @@ -1,591 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", - "metadata": {}, - "outputs": [], - "source": [ - "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", - "import os\n", - "import fiona\n", - "import shapely" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", - "metadata": {}, - "outputs": [], - "source": [ - "from general_functions import *" - ] - }, - { - "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", - "metadata": {}, - "source": [ - "# Delfland" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "#define relative paths\n", - "waterschap = 'Delfland'\n", - "gdb_path = \"../../Data_preprocessed/Waterschappen/Delfland/Watersysteem.gdb\"\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Delfland\"" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "532b0b83-2139-4d48-8e42-883ed8e88325", - "metadata": {}, - "outputs": [], - "source": [ - "Delfland = read_gpkg_layers(gpkg_path = gdb_path, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'watergang',\n", - " 'duikersifonhevel',\n", - " 'peilgebiedpraktijk',\n", - " 'keerschot']) \n", - " # 'peilafwijkinggebied', \n", - " # 'pomp'])\n", - " # 'streefpeil'])\n", - "#change names\n", - "Delfland['hydroobject'] = Delfland.pop('watergang')\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f6b72904-57d7-45ed-90ac-a89836072faf", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", - "metadata": {}, - "source": [ - "### Adjust column names" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "059f9113-bcd4-470a-abb6-4fd8ec193f4a", - "metadata": {}, - "outputs": [], - "source": [ - "#discard irrelevant data of Delfland Delfland, and create a uniform dataset compared to the other waterschappen\n", - "#Stuw\n", - "Delfland['stuw'] = Delfland['stuw'][['CODE', 'GLOBALID', 'geometry']]\n", - "Delfland['stuw'] = Delfland['stuw'].rename(columns={'CODE': 'code', 'GLOBALID': 'globalid'})\n", - "Delfland['stuw']['nen3610id'] = 'dummy_nen3610id_stuw_' + Delfland['stuw'].index.astype(str)\n", - "\n", - "#Gemaal\n", - "\n", - "#determine aanvoer en afvoer gemalen\n", - "Delfland['gemaal']['func_aanvoer'], Delfland['gemaal']['func_afvoer'], Delfland['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "Delfland['gemaal'].FUNCTIEGEMAAL_resolved.fillna(Delfland['gemaal'].WS_SOORTGEMAAL)#sometimes recircualtie is located in another column, but sometimes they are different. Only fill in for NaN\n", - "Delfland['gemaal']['FUNCTIEGEMAAL_resolved'] = Delfland['gemaal']['FUNCTIEGEMAAL_resolved'].astype(str) \n", - "\n", - "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Onbekend|Onderbemaling|Afvoergemaal|Af-'), 'func_afvoer'] = True\n", - "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Opmaling|Aanvoer'), 'func_aanvoer'] = True\n", - "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Overig|circulatie'), 'func_circulatie'] = True\n", - "Delfland['gemaal'].loc[(Delfland['gemaal'].func_afvoer == False) &\n", - " (Delfland['gemaal'].func_aanvoer == False) &\n", - " (Delfland['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown\n", - "\n", - "Delfland['gemaal'] = Delfland['gemaal'][['GLOBALID', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "Delfland['gemaal'] = Delfland['gemaal'].rename(columns={'GLOBALID': 'globalid'})\n", - "Delfland['gemaal']['code'] = 'dummy_code_gemaal_' + Delfland['gemaal'].index.astype(str)\n", - "Delfland['gemaal']['nen3610id'] = 'dummy_nen3610id_gemaal_' + Delfland['gemaal'].index.astype(str)\n", - "\n", - "#Hydroobject\n", - "Delfland['hydroobject'] = Delfland['hydroobject'][['GLOBALID', 'geometry']]\n", - "Delfland['hydroobject'] = Delfland['hydroobject'].rename(columns={'GLOBALID': 'globalid'})\n", - "Delfland['hydroobject']['code'] = 'dummy_code_hydroobject_' + Delfland['hydroobject'].index.astype(str)\n", - "Delfland['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + Delfland['hydroobject'].index.astype(str)\n", - "\n", - "#Keerschot\n", - "Delfland['keerschot'] = Delfland['keerschot'][['GLOBALID', 'geometry']]\n", - "Delfland['keerschot'] = Delfland['keerschot'].rename(columns={'GLOBALID': 'globalid'})\n", - "Delfland['keerschot']['code'] = 'dummy_code_keerschot_' + Delfland['keerschot'].index.astype(str)\n", - "Delfland['keerschot']['nen3610id'] = 'dummy_nen3610id_keerschot_' + Delfland['keerschot'].index.astype(str)\n", - "\n", - "#duikersifonhevel\n", - "Delfland['duikersifonhevel'] = Delfland['duikersifonhevel'][['CODE', 'GLOBALID', 'geometry']]\n", - "Delfland['duikersifonhevel'] = Delfland['duikersifonhevel'].rename(columns={'CODE':'code', 'GLOBALID': 'globalid'})\n", - "Delfland['duikersifonhevel']['code'] = 'dummy_code_duikersifonhevel_' + Delfland['duikersifonhevel'].index.astype(str)\n", - "Delfland['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + Delfland['duikersifonhevel'].index.astype(str)\n", - "\n", - "#afsluitmiddel\n", - "#niet geleverd\n", - "\n", - "#Peilgebiedpraktijk\n", - "Delfland['peilgebiedpraktijk'] = Delfland['peilgebiedpraktijk'][['WS_HOOGPEIL', 'CODE', 'GLOBALID', 'geometry']]\n", - "Delfland['peilgebiedpraktijk']['nen3610id'] = 'dummy_nen3610id_peilgebiedpraktijk_' + Delfland['peilgebiedpraktijk'].index.astype(str)\n", - "Delfland['peilgebiedpraktijk'] = Delfland['peilgebiedpraktijk'].rename(columns={'WS_HOOGPEIL': 'streefpeil', 'CODE':'code', 'GLOBALID':'globalid'})\n", - "\n", - "#Streefpeil\n", - "Delfland['streefpeil'] = pd.DataFrame()\n", - "Delfland['streefpeil']['waterhoogte'] = Delfland['peilgebiedpraktijk']['streefpeil']\n", - "Delfland['streefpeil']['globalid'] = Delfland['peilgebiedpraktijk']['globalid']\n", - "Delfland['streefpeil']['geometry'] = None\n", - "Delfland['streefpeil'] = gpd.GeoDataFrame(Delfland['streefpeil'], geometry = 'geometry')\n", - "\n", - "Delfland['peilgebied'] = Delfland['peilgebiedpraktijk']" - ] - }, - { - "cell_type": "markdown", - "id": "54a863ea-caab-4be6-bca6-78c2ae91941f", - "metadata": {}, - "source": [ - "### Add column to determine the HWS_BZM" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "fda7f5c9-6949-4044-b04d-ba438d2b37d3", - "metadata": {}, - "outputs": [], - "source": [ - "Delfland['peilgebied']['HWS_BZM'] = False\n", - "Delfland['peilgebied'].loc[Delfland['peilgebied'].code == 'BZM 1', 'HWS_BZM'] = True #looked up manually" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "fd32e28d-d92c-40a6-880c-08ccc76163b4", - "metadata": {}, - "outputs": [], - "source": [ - "Delfland['streefpeil'].waterhoogte = Delfland['streefpeil'].waterhoogte.round(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", - "metadata": {}, - "outputs": [], - "source": [ - "#delete irrelvant data\n", - "variables = ['peilgebiedpraktijk']\n", - "\n", - "for variable in variables:\n", - " if str(variable) in Delfland:\n", - " del Delfland[variable]" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "fedc359d-3b06-41eb-b6bc-0526e04fcc85", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
streefpeilcodeglobalidgeometrynen3610idHWS_BZM
0-5.30DOP 17{2531CB3F-6001-4B96-8199-6C32F2A3F110}MULTIPOLYGON (((90612.823 449598.605, 90683.17...dummy_nen3610id_peilgebiedpraktijk_0False
1-0.92DPP 2{98322829-BD2C-4509-88EB-3020D4F5B7AE}MULTIPOLYGON (((74942.850 449582.666, 74945.04...dummy_nen3610id_peilgebiedpraktijk_1False
2-2.20DPM 1 a{CECA72F6-1CB0-4959-B074-16A25DDFFBCC}MULTIPOLYGON (((77686.692 438546.781, 77761.73...dummy_nen3610id_peilgebiedpraktijk_2False
3-5.40DOP 18{CBD8FADF-568E-4202-A96F-A1B9BD3128D3}MULTIPOLYGON (((90779.645 449399.310, 90774.26...dummy_nen3610id_peilgebiedpraktijk_3False
4-0.25BZM 17{25EC567D-B04A-4D3E-992B-42A752D7C707}MULTIPOLYGON (((71961.494 444699.340, 71824.22...dummy_nen3610id_peilgebiedpraktijk_4False
.....................
1554-2.50KPN 2{89BC3095-7743-419E-A3D5-97EC2E9358AB}MULTIPOLYGON (((82221.600 445680.656, 82222.84...dummy_nen3610id_peilgebiedpraktijk_1554False
1555-3.30KLE 2 r{532BBE4E-DB29-4A9D-8B1D-F82B1AC0E0E3}MULTIPOLYGON (((80955.711 444823.816, 81352.20...dummy_nen3610id_peilgebiedpraktijk_1555False
1556-2.61KLE 2 m{710B38F9-4FF0-43BC-89D4-2F2D2EA55561}MULTIPOLYGON (((81042.188 444624.391, 80822.99...dummy_nen3610id_peilgebiedpraktijk_1556False
1557NaNKLE 2 n{8FE7621C-AC97-4B16-BBF2-6CB0EDB21E19}MULTIPOLYGON (((81312.894 444166.511, 81311.17...dummy_nen3610id_peilgebiedpraktijk_1557False
1558-3.68PVN 1 b{BC677CAC-DF2D-4BEF-A6C5-02E7261CBFFC}MULTIPOLYGON (((86852.957 450810.593, 86865.79...dummy_nen3610id_peilgebiedpraktijk_1558False
\n", - "

1559 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " streefpeil code globalid \\\n", - "0 -5.30 DOP 17 {2531CB3F-6001-4B96-8199-6C32F2A3F110} \n", - "1 -0.92 DPP 2 {98322829-BD2C-4509-88EB-3020D4F5B7AE} \n", - "2 -2.20 DPM 1 a {CECA72F6-1CB0-4959-B074-16A25DDFFBCC} \n", - "3 -5.40 DOP 18 {CBD8FADF-568E-4202-A96F-A1B9BD3128D3} \n", - "4 -0.25 BZM 17 {25EC567D-B04A-4D3E-992B-42A752D7C707} \n", - "... ... ... ... \n", - "1554 -2.50 KPN 2 {89BC3095-7743-419E-A3D5-97EC2E9358AB} \n", - "1555 -3.30 KLE 2 r {532BBE4E-DB29-4A9D-8B1D-F82B1AC0E0E3} \n", - "1556 -2.61 KLE 2 m {710B38F9-4FF0-43BC-89D4-2F2D2EA55561} \n", - "1557 NaN KLE 2 n {8FE7621C-AC97-4B16-BBF2-6CB0EDB21E19} \n", - "1558 -3.68 PVN 1 b {BC677CAC-DF2D-4BEF-A6C5-02E7261CBFFC} \n", - "\n", - " geometry \\\n", - "0 MULTIPOLYGON (((90612.823 449598.605, 90683.17... \n", - "1 MULTIPOLYGON (((74942.850 449582.666, 74945.04... \n", - "2 MULTIPOLYGON (((77686.692 438546.781, 77761.73... \n", - "3 MULTIPOLYGON (((90779.645 449399.310, 90774.26... \n", - "4 MULTIPOLYGON (((71961.494 444699.340, 71824.22... \n", - "... ... \n", - "1554 MULTIPOLYGON (((82221.600 445680.656, 82222.84... \n", - "1555 MULTIPOLYGON (((80955.711 444823.816, 81352.20... \n", - "1556 MULTIPOLYGON (((81042.188 444624.391, 80822.99... \n", - "1557 MULTIPOLYGON (((81312.894 444166.511, 81311.17... \n", - "1558 MULTIPOLYGON (((86852.957 450810.593, 86865.79... \n", - "\n", - " nen3610id HWS_BZM \n", - "0 dummy_nen3610id_peilgebiedpraktijk_0 False \n", - "1 dummy_nen3610id_peilgebiedpraktijk_1 False \n", - "2 dummy_nen3610id_peilgebiedpraktijk_2 False \n", - "3 dummy_nen3610id_peilgebiedpraktijk_3 False \n", - "4 dummy_nen3610id_peilgebiedpraktijk_4 False \n", - "... ... ... \n", - "1554 dummy_nen3610id_peilgebiedpraktijk_1554 False \n", - "1555 dummy_nen3610id_peilgebiedpraktijk_1555 False \n", - "1556 dummy_nen3610id_peilgebiedpraktijk_1556 False \n", - "1557 dummy_nen3610id_peilgebiedpraktijk_1557 False \n", - "1558 dummy_nen3610id_peilgebiedpraktijk_1558 False \n", - "\n", - "[1559 rows x 6 columns]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Delfland['peilgebied']" - ] - }, - { - "cell_type": "markdown", - "id": "87278eea-6c4b-416e-b4b4-f10341e2cb37", - "metadata": {}, - "source": [ - "# Embed the boezems including the KRW-bodies" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "111131dc-d598-41e8-9ba9-1c87d8327475", - "metadata": {}, - "outputs": [], - "source": [ - "KRW = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_overig\\KRW\\Delfland\\Opgedeelde_boezem_Delfland_definitief.shp\")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "b1df81d4-20cc-4c9e-a483-0429d381fa0b", - "metadata": {}, - "outputs": [], - "source": [ - "KRW['code'] = 'dummy_code_BZM 1_' + KRW.index.astype(str)\n", - "KRW['nen3610id'] = 'owmnaam'\n", - "KRW['globalid'] = 'dummy_globalid_BZM_' + KRW.index.astype(str)\n", - "KRW['HWS_BZM'] = True\n", - "KRW['streefpeil'] = -0.43\n", - "KRW = KRW[['code', 'streefpeil', 'nen3610id', 'HWS_BZM', 'globalid', 'geometry']]\n", - "KRW = KRW.reset_index(drop=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "1e4fd09b-4e10-4dfc-8bfd-7a5dbb46c637", - "metadata": {}, - "outputs": [], - "source": [ - "#remove the previous boezem, and replace it for the new boezem which is splitted based on the KRW bodies\n", - "Delfland['peilgebied'] = Delfland['peilgebied'].loc[Delfland['peilgebied'].code != 'BZM 1']\n", - "Delfland['peilgebied'] = gpd.GeoDataFrame(pd.concat([Delfland['peilgebied'], KRW]), geometry='geometry')\n", - "\n", - "Delfland['streefpeil'] = Delfland['peilgebied'][['streefpeil', 'globalid', 'geometry']]\n", - "Delfland['streefpeil'] = Delfland['streefpeil'].rename(columns={'streefpeil':'waterhoogte'})\n", - "Delfland['streefpeil']['geometry'] = np.nan" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "e1bf44e7-401e-4d52-84e3-8ea1323432d7", - "metadata": {}, - "outputs": [], - "source": [ - "#add aggregation areas\n", - "aggregation_areas = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Delfland\\Delfland_aanvoergebiedafvoergebied.gdb\")\n", - "aggregation_areas['code'] = aggregation_areas['CODE']\n", - "aggregation_areas['nen3610id'] = aggregation_areas['NAAM']\n", - "aggregation_areas['globalid'] = 'dummy_globalid_agg_area_' + aggregation_areas.index.astype(str)\n", - "aggregation_areas = aggregation_areas[['code', 'nen3610id', 'globalid', 'geometry']]\n", - "\n", - "#remove old boezem, implement new one\n", - "aggregation_areas = aggregation_areas.loc[aggregation_areas.code != 'BZM']\n", - "aggregation_areas = pd.concat([aggregation_areas, KRW[['code', 'nen3610id', 'globalid', 'geometry']]])\n", - "\n", - "Delfland['aggregation_area'] = gpd.GeoDataFrame(aggregation_areas, geometry='geometry')" - ] - }, - { - "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", - "metadata": {}, - "source": [ - "### Check for the correct keys and columns" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "['code' 'globalid' 'geometry' 'nen3610id']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "gemaal\n", - "['globalid' 'func_afvoer' 'func_aanvoer' 'func_circulatie' 'geometry'\n", - " 'code' 'nen3610id']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "duikersifonhevel\n", - "['code' 'globalid' 'geometry' 'nen3610id']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "keerschot\n", - "['globalid' 'geometry' 'code' 'nen3610id']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "hydroobject\n", - "['globalid' 'geometry' 'code' 'nen3610id']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "streefpeil\n", - "['waterhoogte' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "peilgebied\n", - "['streefpeil' 'code' 'globalid' 'geometry' 'nen3610id' 'HWS_BZM']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "aggregation_area\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n" - ] - } - ], - "source": [ - "show_layers_and_columns(waterschap = Delfland)" - ] - }, - { - "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", - "metadata": {}, - "source": [ - "### Store data" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", - "metadata": {}, - "outputs": [], - "source": [ - "# Check if the directory exists\n", - "if not os.path.exists(output_gpkg_path):\n", - " # If it doesn't exist, create it\n", - " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = Delfland, \n", - " output_gpkg_path = output_gpkg_path + '/Delfland')\n" - ] - }, - { - "cell_type": "raw", - "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fedb4c6e-49c2-44f4-88f0-0e1ce4802bc7", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Routing", - "language": "python", - "name": "routing" - }, - "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.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHNK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHNK.ipynb deleted file mode 100644 index 8e4c031..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHNK.ipynb +++ /dev/null @@ -1,993 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 92, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", - "metadata": {}, - "outputs": [], - "source": [ - "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", - "import os\n", - "import fiona\n", - "import shapely" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], - "source": [ - "%load_ext autoreload\n", - "%autoreload 2\n", - "\n", - "from general_functions import *\n", - "pd.set_option('display.max_columns', None)\n" - ] - }, - { - "cell_type": "raw", - "id": "92904555-a98a-4211-8b13-daf79335a6f8", - "metadata": {}, - "source": [ - "Gebeld met Jeroen Hermans. Conclusie: GAF70 gebieden niet gebruiken, en aggregeren op basis van polders ivm niet overlappende intekeningen. Duingebieden in Texel kunnen er uit gelaten worden, Jeroen geeft later vandaag aan of dat ook overal kan. Het liefst heeft hij de flubbertjes bij de duinen in Texel er wél bij, maar alleen als het niet te veel gedoe is." - ] - }, - { - "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", - "metadata": {}, - "source": [ - "# Hollands Noorderkwartier" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", - "metadata": {}, - "outputs": [], - "source": [ - "#define relative paths\n", - "gpkg_path_HHNK = \"../../Data_preprocessed/Waterschappen/HHNK/Noorderkwartier.gpkg\"\n", - "# gdb_path_HHNK = \"../../Data_preprocessed/Waterschappen/HHNK/Watersysteemanalyse_BWN2.gdb\"\n", - "gdb_path_HHNK_nalevering = \"../../Data_preprocessed/Waterschappen/HHNK/Na_levering_HHNK_gemalen_stuwen_20240321.gdb\"\n", - "output_gpkg_path_HHNK = \"../../Data_postprocessed/Waterschappen/HHNK/Noorderkwartier\"\n", - "interim_results = \"../../Interim_results/Waterschappen/HHNK/Noorderkwartier_IR\"\n", - "peilgebieden_NH_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHNK\\20240618_peilgebieden_en_polders\\NoordHolland.gpkg\"\n", - "Texel_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHNK\\20240618_peilgebieden_en_polders\\Texel.gpkg\"\n", - "polders_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHNK\\20240618_peilgebieden_en_polders\\Polders_export_2024-06-18.shp\"" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "baf1ecdb-36e9-4370-ad9d-28dd4b7b0c6b", - "metadata": {}, - "outputs": [], - "source": [ - "#retrieve the data\n", - "HHNK = read_gpkg_layers(gpkg_path = gpkg_path_HHNK, \n", - " variables = [\n", - " # 'stuw', #nalevering\n", - " # 'gemaal', #nalevering\n", - " 'afsluitmiddel',\n", - " 'hydroobject',\n", - " 'duikersifonhevel']) \n", - " # 'peilafwijkinggebied', \n", - " # 'peilgebiedpraktijk',\n", - " # 'pomp'])\n", - " # 'streefpeil'])\n", - " \n", - "#retrieve data from a gdb, as the gpkg of HHNK does not contain all relevant data\n", - "# data_gdb = gpd.read_file(gdb_path_HHNK, layer='BWN_ruimtekaart')\n", - "HHNK_nalevering = read_gpkg_layers(gpkg_path = gdb_path_HHNK_nalevering, \n", - " variables = ['stuw', 'gemaal']) #nalevering\n", - "\n", - "HHNK['stuw'] = HHNK_nalevering['stuw']\n", - "HHNK['gemaal'] = HHNK_nalevering['gemaal']" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "3dbf5fe0-ac68-4270-b936-51dd5e7e8215", - "metadata": {}, - "outputs": [], - "source": [ - "# HHNK['peilgebied'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHNK\\Na_levering_peilgebieden.gpkg\")" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "314a1a85-e2e3-4014-bc2b-76a748412075", - "metadata": {}, - "outputs": [], - "source": [ - "from shapely.affinity import translate\n", - "\n", - "def translate_point(point, x_offset=0.01, y_offset=0.01):\n", - " return translate(point, xoff=x_offset, yoff=y_offset)\n", - "\n", - "# Apply the translation to each geometry in the GeoDataFrame\n", - "HHNK['gemaal']['geometry'] = HHNK['gemaal']['geometry'].apply(lambda geom: translate_point(geom))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "033468ab-b74c-468a-90b1-eac395ad8d17", - "metadata": {}, - "outputs": [], - "source": [ - "#determine aanvoer en afvoer gemalen\n", - "HHNK['gemaal']['func_aanvoer'], HHNK['gemaal']['func_afvoer'], HHNK['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "HHNK['gemaal']['functiegemaal'] = HHNK['gemaal']['FUNCTIEGEMAAL'].astype(str) \n", - "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] == 'onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", - "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] == '99', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", - "HHNK['gemaal']['functiegemaal'].fillna(HHNK['gemaal']['OPMERKING'], inplace = True) #some additional is given in this column\n", - "HHNK['gemaal'] = HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] != 'niet meer in gebruik'] #filter the gemalen out which are not in use\n", - "HHNK['gemaal'] = HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] != '901'] #filter the gemalen out which are not in use\n", - "\n", - "# HHNK['gemaal'].loc[HHNK['gemaal'].functiegemaal.str.contains('onderbemaling|afvoer|af-'), 'func_afvoer'] = True\n", - "# HHNK['gemaal'].loc[HHNK['gemaal'].functiegemaal.str.contains('trekker|opmaling|op-|wateraanvoer|aanvoer'), 'func_aanvoer'] = True #aannamen: trekkerpompen vooral voor wateraanvoer\n", - "# HHNK['gemaal'].loc[HHNK['gemaal'].functiegemaal.str.contains('doorspoelpomp'), 'func_circulatie'] = True\n", - "\n", - "afvoer_values = ['2', '4', '5', '6', '903']\n", - "aanvoer_values = ['1', '3', '5', '902', '903'] #aannamen: trekkerpompen vooral voor wateraanvoer\n", - "circulatie_values = ['904']\n", - "\n", - "\n", - "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(afvoer_values), 'func_afvoer'] = True\n", - "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(aanvoer_values), 'func_aanvoer'] = True\n", - "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(circulatie_values), 'func_circulatie'] = True\n", - "\n", - "HHNK['gemaal'].loc[(HHNK['gemaal'].func_afvoer == False) &\n", - " (HHNK['gemaal'].func_aanvoer == False) &\n", - " (HHNK['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "id": "805ffd9b-da23-46e3-977f-84575e32f225", - "metadata": {}, - "outputs": [], - "source": [ - "#gemaal\n", - "HHNK['gemaal'].rename(columns={'CODE': 'code',\n", - " 'GLOBALID': 'globalid'}, inplace = True)\n", - "HHNK['gemaal']['nen3610id'] = 'dummy_nen3610id_' + HHNK['gemaal'].index.astype(str) #create a string as the globalid is usually a str as well\n", - "\n", - "#stuw\n", - "HHNK['stuw'].rename(columns={'CODE': 'code',\n", - " 'GLOBALID': 'globalid'}, inplace = True)\n", - "HHNK['stuw']['nen3610id'] = 'dummy_nen3610id_' + HHNK['stuw'].index.astype(str) #create a string as the globalid is usually a str as well\n" - ] - }, - { - "cell_type": "markdown", - "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", - "metadata": {}, - "source": [ - "### GPKG" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "id": "9b86f37d-16de-49db-969a-b233f1531abb", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# discard irrelevant dataHHNK\n", - "HHNK['stuw'] = HHNK['stuw'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "HHNK['gemaal'] = HHNK['gemaal'][['code', 'globalid', 'nen3610id', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "HHNK['hydroobject'] = HHNK['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "HHNK['afsluitmiddel'] = HHNK['afsluitmiddel'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "HHNK['duikersifonhevel'] = HHNK['duikersifonhevel'][['code', 'globalid', 'nen3610id', 'geometry']]" - ] - }, - { - "cell_type": "markdown", - "id": "cdc5db0a-4f5f-464f-aa98-1cc7ea968680", - "metadata": {}, - "source": [ - "### Peilgebieden" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "id": "17825562-4082-42f5-9e39-3d1e30d784e3", - "metadata": {}, - "outputs": [], - "source": [ - "# peilgebieden = gpd.read_file(peilgebieden_NH_path)\n", - "# Texel = gpd.read_file(Texel_path)\n", - "# polders = gpd.read_file(polders_path)\n", - "\n", - "# Texel['centroid'] = Texel.centroid\n", - "\n", - "# Texel = gpd.GeoDataFrame(Texel, geometry='centroid')\n", - "# polders = gpd.GeoDataFrame(polders, geometry = 'geometry')\n", - "\n", - "# Texel['CODE'] = Texel[['centroid']].sjoin(polders[['CODE', 'geometry']],\n", - "# how = 'left',\n", - "# predicate = 'within')['CODE']\n", - "\n", - "# peilgebieden = pd.concat([peilgebieden, Texel]).reset_index(drop=True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "id": "5a51ed80-a0ee-431b-899d-ee5475834e73", - "metadata": {}, - "outputs": [], - "source": [ - "# peilgebieden['waterhoogte'] = np.nan\n", - "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.STREEFPEIL)\n", - "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", - "\n", - "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.VAST)\n", - "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", - "\n", - "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.ZOMER)\n", - "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", - "\n", - "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.WINTER)\n", - "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", - "\n", - "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.ONDERGRENS)\n", - "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", - "\n", - "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.BOVENGRENS)\n", - "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", - "\n", - "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.STREEFPE_1)\n", - "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN\n", - "\n", - "# peilgebieden['waterhoogte'] = peilgebieden['waterhoogte'].fillna(value=peilgebieden.ONDERGRE_1)\n", - "# peilgebieden.loc[peilgebieden['waterhoogte'] == 0, 'waterhoogte'] = np.nan #replace zero values with NaN" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "id": "fb0cccac-68e1-4638-a3bb-492395dde13e", - "metadata": {}, - "outputs": [], - "source": [ - "# peilgebieden['HWS_BZM'] = np.nan\n", - "# peilgebieden.loc[peilgebieden.CODE == '03010-01', 'HWS_BZM'] = True\n", - "# peilgebieden.loc[peilgebieden.CODE == '1000-01', 'HWS_BZM'] = True\n", - "# peilgebieden.loc[peilgebieden.CODE == '1700-01', 'HWS_BZM'] = True\n", - "# peilgebieden.loc[peilgebieden.CODE == '1800-01', 'HWS_BZM'] = True\n", - "\n", - "# peilgebieden['polder'] = peilgebieden.CODE.str.split('-').str[0]\n", - "# peilgebieden['code'] = peilgebieden.CODE + '_' + peilgebieden.index.astype(str)\n", - "# peilgebieden['globalid'] = peilgebieden.OBJECTID\n", - "# peilgebieden['nen3610id'] = 'dummy_nen3610id_' + peilgebieden.index.astype(str)\n", - "# peilgebieden = peilgebieden[['waterhoogte', 'code', 'nen3610id', 'globalid', 'polder', 'HWS_BZM', 'geometry']]" - ] - }, - { - "cell_type": "markdown", - "id": "65b8484f-0fd5-48f8-8f6f-efab55e7ff71", - "metadata": {}, - "source": [ - "### The polders and peilgebieden of Texel are different. Load them in seperatly" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "id": "07f46840-c879-4517-9b86-9c5444f4f19e", - "metadata": {}, - "outputs": [], - "source": [ - "# aggregation_areas = peilgebieden.dissolve(by='polder')" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "id": "4c5d03fd-b7a2-45da-8198-5d65252073b3", - "metadata": {}, - "outputs": [], - "source": [ - "# peilgebieden['polder'] = peilgebieden['NAAM']\n" - ] - }, - { - "cell_type": "code", - "execution_count": 106, - "id": "be8cba4d-9e34-491a-a391-2b77421a548c", - "metadata": {}, - "outputs": [], - "source": [ - "# streefpeil = peilgebieden[['waterhoogte', 'globalid']]\n", - "# peilgebied = peilgebieden[['code', 'nen3610id', 'globalid', 'polder', 'HWS_BZM', 'geometry']]\n", - "\n", - "# peilgebied.globalid = 'peilgebied_' + peilgebied.globalid.astype(str)\n", - "# #add the data to the dictionary\n", - "# HHNK['peilgebied'] = peilgebied\n", - "\n", - "# HHNK['streefpeil'] = streefpeil\n", - "# HHNK['streefpeil']['geometry'] = None\n", - "# HHNK['streefpeil'] = gpd.GeoDataFrame(HHNK['streefpeil'], geometry = 'geometry')\n", - "\n", - "# #fill False for HWS_BZM (needs to be done for the added areas of Texel)\n", - "# HHNK['peilgebied'].HWS_BZM = HHNK['peilgebied'].HWS_BZM.fillna(value=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "id": "cea5c278-e0b1-4952-a174-7c4140395d4a", - "metadata": {}, - "outputs": [], - "source": [ - "# HHNK['aggregation_area'] = HHNK['peilgebied'].dissolve(by='polder', as_index=False, sort=False)\n", - "# HHNK['aggregation_area'].plot()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1477a886-9e47-46f5-b375-7eede24c08d0", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "56fa3a9e-2894-4676-9a47-29fbdadc96c5", - "metadata": { - "tags": [] - }, - "source": [ - "# Add the boezem and hoofdwatersysteem" - ] - }, - { - "cell_type": "markdown", - "id": "064607bb-4c54-4dc2-b913-94dfcd18cfa0", - "metadata": {}, - "source": [ - "Some changes by hand have been made. The resulting shapefile contains the bordering BZM and HWS shapes, including streefpeil" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "id": "ba0652d8-fad6-4ce8-b24f-d6c8c06d9147", - "metadata": {}, - "outputs": [], - "source": [ - "# waterboards = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_30\\20240418_samenwerkdag\\Oorspronkelijk_LHM_versie\\Waterschappen_peilbeheerst.shp\").to_crs('EPSG:28992')\n", - "# HHNK_boundary = waterboards.loc[waterboards.name == 'Hoogheemraadschap Hollands Noorderkwartier']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bcfc3dcc-a777-4db6-9035-16b80d8dd73d", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "8e8c8649-cde9-40db-b155-d8d80ba65f6a", - "metadata": {}, - "outputs": [], - "source": [ - "# path_HWS_BZM = \"..\\..\\Scripts\\Aggregeren\\Hoofdwatersysteem\\BZM_HWS_HHNK.shp\"\n", - "# HWS_BZM = gpd.read_file(path_HWS_BZM)\n", - "# HWS_BZM = HWS_BZM.clip(HHNK_boundary)\n", - "\n", - "# HWS_BZM = HWS_BZM.loc[HWS_BZM.naam != 'IJsselmeer en Randmeren Noord']\n", - "# HWS_BZM = HWS_BZM.loc[HWS_BZM.naam != 'Markermeer & Randmeren Zuid']\n", - "\n", - "# HWS_BZM.plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "0ce64996-c3eb-460d-b252-48b7ec25f44c", - "metadata": {}, - "outputs": [], - "source": [ - "# HWS_BZM.plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "id": "0e4ab064-6b94-46c4-9630-c459b254e83e", - "metadata": {}, - "outputs": [], - "source": [ - "# HWS_BZM = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_overig\\KRW\\HHNK\\Opgedeelde_boezem_HHNK_definitief2.shp\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "id": "9c623cd7-b0ff-4670-977f-1ce2eee859e7", - "metadata": {}, - "outputs": [], - "source": [ - "# HWS_BZM.loc[HWS_BZM.owmnaam.str.contains('Amstel'), 'zomerpeil'] = -0.4\n", - "# HWS_BZM.loc[HWS_BZM.owmnaam.str.contains('Schermer'), 'zomerpeil'] = -0.5\n", - "# HWS_BZM.loc[HWS_BZM.owmnaam.str.contains('Alkmaar'), 'zomerpeil'] = -0.5\n", - "# HWS_BZM.loc[HWS_BZM.owmnaam.str.contains('VRNK'), 'zomerpeil'] = -0.6" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "id": "350baa05-21ab-48af-b4b9-cae7fef089a6", - "metadata": {}, - "outputs": [], - "source": [ - "# HWS_BZM['code'] = 'dummy_code_' + (HWS_BZM.index + max(HHNK['peilgebied'].index) + 1).astype(str)\n", - "# HWS_BZM['globalid'] = 'dummy_globalid_' + (HWS_BZM.index + max(HHNK['peilgebied'].index) + 1).astype(str)\n", - "# HWS_BZM['nen3610id'] = 'dummy_nen3610id_' + (HWS_BZM.index + max(HHNK['peilgebied'].index) + 1).astype(str)\n", - "# HWS_BZM['waterhoogte'] = HWS_BZM['zomerpeil']\n", - "# HWS_BZM['HWS_BZM'] = True\n", - "# HWS_BZM = HWS_BZM[['code', 'globalid', 'nen3610id', 'waterhoogte', 'HWS_BZM', 'geometry']]\n", - "\n", - "# HWS_BZM_peilgebied = HWS_BZM[['code', 'globalid', 'nen3610id', 'HWS_BZM', 'geometry']]\n", - "# HWS_BZM_streefpeil = HWS_BZM[['waterhoogte', 'globalid', 'geometry']]\n", - "\n", - "# HHNK['peilgebied'] = gpd.GeoDataFrame(pd.concat([HHNK['peilgebied'], HWS_BZM_peilgebied])).reset_index(drop=True)\n", - "# HHNK['streefpeil'] = gpd.GeoDataFrame(pd.concat([HHNK['streefpeil'], HWS_BZM_streefpeil])).reset_index(drop=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3c53955a-2d9d-40a0-ab70-d18c914a1721", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "26cfd68d-f60a-4d8b-ac9d-e481b111516f", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 114, - "id": "5ac88d35-0c29-4c7d-95f1-97971746be94", - "metadata": {}, - "outputs": [], - "source": [ - "# HHNK['aggregation_area'] = gpd.GeoDataFrame(pd.concat([HHNK['aggregation_area'][['code', 'nen3610id', 'globalid', 'geometry']], HWS_BZM]), geometry = 'geometry').reset_index(drop=True).to_crs('EPSG:28992')" - ] - }, - { - "cell_type": "code", - "execution_count": 115, - "id": "5f022db2-0902-49cd-b507-e624f9e6efbf", - "metadata": {}, - "outputs": [], - "source": [ - "# #remove the southern part most peilgebieden\n", - "# #ERROR SENSITIVE\n", - "\n", - "# HHNK['peilgebied'] = HHNK['peilgebied'].loc[HHNK['peilgebied'].code != 'dummy_code_5165']\n", - "# HHNK['peilgebied'] = HHNK['peilgebied'].loc[HHNK['peilgebied'].code != 'dummy_code_5207']\n", - "# HHNK['peilgebied'] = HHNK['peilgebied'].loc[HHNK['peilgebied'].code != 'dummy_code_5183']\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "id": "83f2a4df-b327-41e3-ba34-9feddf6ce6c7", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "# from shapely.geometry import Polygon, MultiPolygon, shape, Point\n", - "# from shapely.ops import unary_union,cascaded_union \n", - "\n", - "# def convert_to_polygon(line):\n", - "# if line.is_ring: # Checks if the LineString is closed\n", - "# return Polygon(line)\n", - "# else:\n", - "# return line # Returns the line string as is if it's not closed\n", - " \n", - "# HHNK['peilgebied'] = HHNK['peilgebied'].explode(ignore_index=True)\n", - "# HHNK['peilgebied'] = HHNK['peilgebied'][HHNK['peilgebied'].geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n", - "\n", - "\n", - "# HHNK['peilgebied']['area'] = HHNK['peilgebied'].area\n", - "# dissolved = HHNK['peilgebied'].dissolve()\n", - "# exterior = gpd.GeoDataFrame(geometry=dissolved['geometry'].boundary).to_crs(crs='EPSG:28992')\n", - "# HHNK['peilgebied'] = HHNK['peilgebied'].to_crs(crs='EPSG:28992')\n", - "# exterior = exterior.explode().reset_index(drop=True)\n", - "# exterior['geometry'] = exterior['geometry'].apply(convert_to_polygon)\n", - "# exterior['area'] = exterior.area\n", - "# exterior = exterior.sort_values(by='area', ascending=False).reset_index(drop=True)\n", - "\n", - "# #get rid of some exteriors which should not be filled in\n", - "# exterior.dropna(inplace=True)\n", - "# exterior.iloc[3::] = exterior\n", - "# exterior = exterior.reset_index(drop=True)\n", - "\n", - "# # new_gdf = gpd.GeoDataFrame(columns=HHNK['peilgebied'].columns())\n", - "\n", - "# for i in range(len(exterior)):\n", - "# print(i)\n", - "# # for i in range(10):\n", - "\n", - "# buffered_peilgebied = HHNK['peilgebied'].buffer(0.)\n", - "\n", - "# exterior_sample = exterior.iloc[i:i+1] #just pick a single sample\n", - "# if exterior_sample['geometry'].values[0] is not None:\n", - "# exterior_sample.geometry = exterior_sample.buffer(0.0001) #let op! hierdoor komt er alsnog een kleine overlap. Maar anders werkt de code even niet, en vanwege tijdgebrek kan dit nu niet worden opgelost. In het bepalen van de crossings wordt hier echter mee omgegaan.\n", - "\n", - "# intersects_mask = buffered_peilgebied.intersects(exterior_sample.iloc[0].geometry)\n", - "# intersecting_polygons = HHNK['peilgebied'][intersects_mask].sort_values(by='area', ascending=False)\n", - "\n", - "# if len(intersecting_polygons) > 0:\n", - "# # print(i)\n", - "# # polygon_to_dissolve = intersecting_polygons.iloc[0:1]#.geometry.unary_union \n", - "# # sample_geometry = exterior_sample.geometry#.unary_union\n", - "# intersecting_polygons = gpd.GeoDataFrame(intersecting_polygons.iloc[0:1], geometry = 'geometry')\n", - "\n", - "# # dissolved_polygon = # dissolve/union them\n", - "# all_geometries = list(intersecting_polygons.geometry) + list(exterior_sample.geometry)\n", - "\n", - "# # Use unary_union to dissolve all polygons in the list\n", - "# dissolved_polygon = unary_union(all_geometries)\n", - "\n", - "# original_index = intersecting_polygons.index[0]\n", - "\n", - "# # Ensure it's a single geometry object.\n", - "# # print(len(HHNK['peilgebied'].loc[HHNK['peilgebied'].index == original_index, 'geometry']))\n", - "# # print(len(dissolved_polygon))\n", - "# HHNK['peilgebied'].loc[HHNK['peilgebied'].index == original_index, 'geometry'] = dissolved_polygon#['geometry']\n", - "# # new_gdf = pd.concat([new_gdf, dissolved_polygon])\n", - "# else:\n", - "# print('No intersection found for iteration ', i)" - ] - }, - { - "cell_type": "markdown", - "id": "8ebbe88e-2fc4-4a9e-8925-bdbac19c4254", - "metadata": {}, - "source": [ - "### New peilgebieden and poldergebieden have been deliverd on 04 07 2024" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "id": "7a0eb5d9-b3f1-4db4-b5c7-4fedddd68ee7", - "metadata": {}, - "outputs": [], - "source": [ - "peilgebieden = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHNK\\20240704_nieuwe_peil_aggregatie_gebieden\\Peilgebieden_export_2024-06-18.shp\")\n", - "polders = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHNK\\20240704_nieuwe_peil_aggregatie_gebieden\\Polders_export_2024-06-18.shp\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 150, - "id": "aab8ee8b-8119-4ba1-9863-06c189a898d5", - "metadata": {}, - "outputs": [], - "source": [ - "#Jeroen H asked if the following peilgebieden could be removed from the data (see email 04 07 2024)\n", - "codes_to_remove = ['2040-2020', '2040-2030-02', '2040-2060', '2040-2700', '8071-01', '8071-02']\n", - "peilgebieden = peilgebieden.loc[~peilgebieden.CODE.isin(codes_to_remove)].reset_index(drop=True)\n", - "\n", - "#add waterhoogte column, and fill it with the streefpeilen\n", - "peilgebieden['waterhoogte'] = np.nan\n", - "\n", - "#replace all null values with NaNs\n", - "peilgebieden.loc[peilgebieden['VAST'] == 0.0, 'VAST'] = np.nan\n", - "peilgebieden.loc[peilgebieden['WINTER'] == 0.0, 'WINTER'] = np.nan\n", - "peilgebieden.loc[peilgebieden['ZOMER'] == 0.0, 'ZOMER'] = np.nan\n", - "peilgebieden.loc[peilgebieden['STREEFPEIL'] == 0.0, 'STREEFPEIL'] = np.nan\n", - "peilgebieden.loc[peilgebieden['ONDERGRENS'] == 0.0, 'ONDERGRENS'] = np.nan\n", - "peilgebieden.loc[peilgebieden['BOVENGRENS'] == 0.0, 'BOVENGRENS'] = np.nan\n", - "\n", - "peilgebieden['waterhoogte'].fillna(peilgebieden.VAST, inplace=True)\n", - "peilgebieden['waterhoogte'].fillna(peilgebieden.WINTER, inplace=True)\n", - "peilgebieden['waterhoogte'].fillna(peilgebieden.ZOMER, inplace=True)\n", - "peilgebieden['waterhoogte'].fillna(peilgebieden.STREEFPEIL, inplace=True)\n", - "peilgebieden['waterhoogte'].fillna(peilgebieden.ONDERGRENS, inplace=True)\n", - "peilgebieden['waterhoogte'].fillna(peilgebieden.BOVENGRENS, inplace=True)\n", - "\n", - "#only sselect the relevant columns\n", - "peilgebieden['code'] = peilgebieden['CODE']\n", - "peilgebieden['code'] = 'peilgebied_' + peilgebieden['code']\n", - "peilgebieden['globalid'] = 'globalid_' + peilgebieden['OBJECTID'].astype(str)\n", - "peilgebieden = peilgebieden[['code', 'globalid', 'waterhoogte', 'geometry']]" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "id": "35e6b77f-2799-4a0d-b22b-702e7498d45f", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py:3377: FutureWarning: The `op` parameter is deprecated and will be removed in a future release. Please use the `predicate` parameter instead.\n", - " if (await self.run_code(code, result, async_=asy)):\n" - ] - } - ], - "source": [ - "#add polder ID's to the aggregatiegebieden\n", - "peilgebieden['repr_point'] = peilgebieden.representative_point()\n", - "\n", - "peilgebieden = gpd.sjoin(peilgebieden.set_geometry('repr_point'), polders[['CODE', 'NAAM', 'geometry']], how='left', op='within')\n", - "peilgebieden.rename(columns={'CODE': 'polder_id',\n", - " 'NAAM': 'nen3610id'}, inplace = True)\n", - "peilgebieden['nen3610id'] = peilgebieden['nen3610id'] + '_' + peilgebieden.index.astype(str)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 153, - "id": "5ff4bee5-0551-421a-bf67-6aec37e5d07d", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#collect the aggregatiegebieden and streefpeilen\n", - "aggregatie_gebieden = peilgebieden.copy(deep=True)\n", - "aggregatie_gebieden = gpd.GeoDataFrame(aggregatie_gebieden, geometry = 'geometry')\n", - "aggregatie_gebieden = aggregatie_gebieden.dissolve(by='polder_id')\n", - "aggregatie_gebieden = aggregatie_gebieden[['code', 'nen3610id', 'globalid', 'geometry']]\n", - "aggregatie_gebieden = gpd.GeoDataFrame(aggregatie_gebieden, geometry = 'geometry')\n", - "aggregatie_gebieden = aggregatie_gebieden.set_crs('EPSG:28992')\n", - "\n", - "streefpeilen = peilgebieden[['globalid', 'waterhoogte', 'geometry']]\n", - "streefpeilen['geometry'] = np.nan\n", - "streefpeilen = gpd.GeoDataFrame(streefpeilen, geometry = 'geometry')\n", - "\n", - "peilgebieden = peilgebieden[['code', 'nen3610id', 'globalid', 'geometry']]\n", - "peilgebieden = gpd.GeoDataFrame(peilgebieden, geometry = 'geometry')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 154, - "id": "93f32c70-1341-4ed2-8eda-e5daf937a3ce", - "metadata": {}, - "outputs": [], - "source": [ - "#add the HWS_BZM to the peilgebieden\n", - "HWS_BZM_list = ['peilgebied_1000-01', 'peilgebied_1700-01', 'peilgebied_1800-01', 'peilgebied_03010-01']\n", - "\n", - "peilgebieden['HWS_BZM'] = False\n", - "peilgebieden.loc[peilgebieden.code.isin(HWS_BZM_list), 'HWS_BZM'] = True\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 155, - "id": "ab8cdade-9ecc-4f35-be07-be418a4eb302", - "metadata": {}, - "outputs": [], - "source": [ - "#Add all variables to the dictionary\n", - "HHNK['streefpeil'] = streefpeilen\n", - "HHNK['peilgebied'] = peilgebieden\n", - "HHNK['aggregation_area'] = aggregatie_gebieden" - ] - }, - { - "cell_type": "code", - "execution_count": 157, - "id": "2eaaabf9-517e-420c-bb5a-db7ade053f7d", - "metadata": {}, - "outputs": [], - "source": [ - "HHNK['streefpeil'].waterhoogte = HHNK['streefpeil'].waterhoogte.round(2)\n", - "HHNK['hydroobject'].code = HHNK['hydroobject'].code + '_' + HHNK['hydroobject'].index.astype(str)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 158, - "id": "59a53ca0-f1b1-40e9-80fc-a89565f8aa0d", - "metadata": {}, - "outputs": [], - "source": [ - "# # HHNK['streefpeil'] = HHNK['peilgebied'][['waterhoogte', 'globalid']]\n", - "# HHNK['streefpeil']['geometry'] = None\n", - "# HHNK['streefpeil'] = gpd.GeoDataFrame(HHNK['streefpeil'], geometry = 'geometry')\n", - "\n", - "# HHNK['peilgebied'] = HHNK['peilgebied'][['globalid', 'code', 'nen3610id', 'HWS_BZM', 'geometry']]\n", - "# HHNK['peilgebied'] = gpd.GeoDataFrame(HHNK['peilgebied'], geometry = 'geometry')" - ] - }, - { - "cell_type": "code", - "execution_count": 159, - "id": "0e09445c-def9-4b56-8d48-bca6af7e3eb3", - "metadata": {}, - "outputs": [], - "source": [ - "#there are appareantly some comma's included, which causes erros later on. Replace these\n", - "HHNK['peilgebied']['globalid'] = HHNK['peilgebied']['globalid'].astype(str).str.replace(',', '_')\n", - "HHNK['streefpeil']['globalid'] = HHNK['streefpeil']['globalid'].astype(str).str.replace(',', '_')\n", - "HHNK['aggregation_area']['globalid'] = HHNK['aggregation_area']['globalid'].astype(str).str.replace(',', '_')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 160, - "id": "886a1f73-2a79-44fb-bed0-c6474fba28cc", - "metadata": {}, - "outputs": [], - "source": [ - "HHNK['peilgebied'].globalid.fillna(value='dummy_globalid', inplace=True)\n", - "HHNK['peilgebied'].loc[HHNK['peilgebied'].globalid == 'dummy_globalid', 'globalid'] = HHNK['peilgebied'].globalid + '_' + HHNK['peilgebied'].index.astype(str) \n", - "\n", - "HHNK['streefpeil'].globalid.fillna(value='dummy_globalid', inplace=True)\n", - "HHNK['streefpeil'].loc[HHNK['streefpeil'].globalid == 'dummy_globalid', 'globalid'] = HHNK['streefpeil'].globalid + '_' + HHNK['streefpeil'].index.astype(str) " - ] - }, - { - "cell_type": "code", - "execution_count": 161, - "id": "eff5302e-44a4-4508-b523-17f198acd9f3", - "metadata": {}, - "outputs": [], - "source": [ - "# HHNK['peilgebied']['globalid'] = HHNK['peilgebied']['globalid'].str.replace(',', '_')\n", - "# HHNK['peilgebied'].loc[HHNK['peilgebied'].globalid.str.contains(',')]" - ] - }, - { - "cell_type": "markdown", - "id": "d72f3d5c-20ed-4ca6-a71f-ddca9cf93fee", - "metadata": { - "tags": [] - }, - "source": [ - "### Check for the correct keys and columns" - ] - }, - { - "cell_type": "code", - "execution_count": 162, - "id": "ffd4ea1b-e2a2-4e3b-a5cf-e820a4709c30", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "afsluitmiddel\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "hydroobject\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "duikersifonhevel\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "stuw\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "gemaal\n", - "['code' 'globalid' 'nen3610id' 'func_afvoer' 'func_aanvoer'\n", - " 'func_circulatie' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "streefpeil\n", - "['globalid' 'waterhoogte' 'geometry']\n", - "type = \n", - "crs = None\n", - "\n", - "peilgebied\n", - "['code' 'nen3610id' 'globalid' 'geometry' 'HWS_BZM']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "aggregation_area\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n" - ] - } - ], - "source": [ - "show_layers_and_columns(waterschap = HHNK)" - ] - }, - { - "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", - "metadata": {}, - "source": [ - "### Store data" - ] - }, - { - "cell_type": "code", - "execution_count": 163, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", - "metadata": {}, - "outputs": [], - "source": [ - "store_data(waterschap = HHNK, \n", - " output_gpkg_path = output_gpkg_path_HHNK)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b10b40ec-2aed-4809-b051-613544311ca0", - "metadata": {}, - "outputs": [], - "source": [ - "print(len(HHNK['peilgebied'].code.unique()))\n", - "print(len(HHNK['peilgebied'].globalid.unique()))\n", - "print(len(HHNK['hydroobject'].code.unique()))\n", - "print(len(HHNK['hydroobject'].code))" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "23157b6b-07a8-419b-91a2-f442efda8d7d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "HHNK['peilgebied'].loc[HHNK['peilgebied'].HWS_BZM == True].plot()" - ] - }, - { - "cell_type": "raw", - "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", - "metadata": {}, - "source": [ - "Toevoegen aan notities:\n", - "\n", - "Duikersifonhevel and hydroobject have a type of multicurvedZ, the peilgebieden a MultiSurfaceZ, which geopandas can not handle. I have manually exported these to single shapes, which automatically converts it to regular MultiStrings. Then these layers have been packed together to a geopackage again. \n", - "\n", - "Peilmerk is geometrisch gekoppeld aan peilgebieden, niet administratief. Daarnaast zijn bij een aantal beschikbaar of deze gekoppeld zijn met een gemaal, stuw, duikersifonhevel (wel administratief). Wel is er een streefpeil tabel beschikbaar, die wel administratief gekoppeld is. Ga kijken wat het verschil is.\n", - "\n", - "In de streefpeilen kaart zijn er verschillende soorten peilen:\n", - "- winter\n", - "- zomer\n", - "- vast\n", - "- dynamische bovengrens\n", - "- dynamische ondergrens" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ea0b5636-1b7c-4e13-974a-3a86bcbcb34e", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5ca41d74-0d02-4342-b4a0-917a03db14bb", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Routing", - "language": "python", - "name": "routing" - }, - "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.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHSK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHSK.ipynb deleted file mode 100644 index 1a8ce0e..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/HHSK.ipynb +++ /dev/null @@ -1,1360 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", - "metadata": {}, - "outputs": [], - "source": [ - "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", - "import os\n", - "import fiona\n", - "\n", - "import shapely\n", - "from shapely.validation import make_valid\n", - "from shapely.ops import unary_union,cascaded_union \n", - "from shapely.geometry import Polygon, MultiPolygon, shape, Point\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", - "metadata": { - "tags": [ - "test" - ] - }, - "outputs": [], - "source": [ - "from general_functions import *\n", - "\n", - "def convert_to_polygon(line):\n", - " if line.is_ring: # Checks if the LineString is closed\n", - " return Polygon(line)\n", - " else:\n", - " return line # Returns the line string as is if it's not closed\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", - "metadata": {}, - "outputs": [], - "source": [ - "pd.set_option('display.max_columns', None)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", - "metadata": {}, - "outputs": [], - "source": [ - "#define relative paths\n", - "waterschap = 'HHSK'\n", - "path_HHSK = '..\\..\\Data_preprocessed\\Waterschappen\\HHSK\\HyDamo_metWasverzachter_20230905.gpkg'\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/HHSK\"\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "1f39bd82-2fed-41d6-a4f7-979a9a2120bd", - "metadata": {}, - "outputs": [], - "source": [ - "HHSK = read_gpkg_layers(gpkg_path = path_HHSK, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'afsluitmiddel',\n", - " # 'duikersifonhevel',\n", - " # 'hydroobject',\n", - " # 'peilgebiedvigerend',\n", - " # 'peilafwijkinggebied',\n", - " # 'peilbesluitgebied',\n", - " 'streefpeil'],\n", - " engine = 'pyogrio') \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "279c940f-4290-48d6-bd48-b1e79f8be16e", - "metadata": {}, - "outputs": [], - "source": [ - "# HHSK_nalevering = read_gpkg_layers(gpkg_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\LHM_hhsk_nalevering.gpkg\",\n", - "# variables = ['Persleiding'])" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "6ea5a43d-b2e6-42ef-8002-01c3377ed897", - "metadata": {}, - "outputs": [], - "source": [ - "HHSK_2nalevering = read_gpkg_layers(gpkg_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\hhsklevering_07032024.gpkg\",\n", - " variables = ['PeilgebiedPraktijk',\n", - " 'VigerendPeilgebiedZPP'])" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "287a1b71-b336-4d09-b511-de068096f1be", - "metadata": {}, - "outputs": [], - "source": [ - "HHSK_3nalevering = read_gpkg_layers(gpkg_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\poldergebieden_en_duikersifonhevels_persleidingen\\LHM_06052024_hhsk.gpkg\",\n", - " variables = ['hydroobject',\n", - " 'duikersifonhevel',\n", - " # 'persleiding', #edit: after a phonecall, it became clear that the persleidingen should NOT be used, only the duikersifonhevel and the hydroobjecten\n", - " ])" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "279de659-9206-4dcb-83e3-2b5fde71de35", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([98., 1., nan])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "HHSK_3nalevering['hydroobject'].CATEGORIEOPPWATERLICHAAM.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "c6b46928-96b0-4618-9835-2aebffeacd23", - "metadata": {}, - "outputs": [], - "source": [ - "#there was no categorie oppervlakte water lichaam assigned to the third additional datalevering of the duikersifonhevels within the hydroobjecten. Fill all Nones with 1, so that the \n", - "HHSK_3nalevering['hydroobject'].CATEGORIEOPPWATERLICHAAM = HHSK_3nalevering['hydroobject'].CATEGORIEOPPWATERLICHAAM.fillna(value=1)\n", - "HHSK_3nalevering['duikersifonhevel'].STATUSOBJECT = HHSK_3nalevering['duikersifonhevel'].STATUSOBJECT.fillna(value=3)" - ] - }, - { - "cell_type": "markdown", - "id": "32562573-3c78-4565-85be-1b7c03a023be", - "metadata": {}, - "source": [ - "## Only select status_object == 3" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "10efac14-fd47-4f61-9180-e89e864713c7", - "metadata": {}, - "outputs": [], - "source": [ - "HHSK['stuw'] = HHSK['stuw'].loc[(HHSK['stuw']['statusobject'] == '3') | (HHSK['stuw']['statusobject'] == 3)]\n", - "HHSK['gemaal'] = HHSK['gemaal'].loc[(HHSK['gemaal']['statusobject'] == '3') | (HHSK['gemaal']['statusobject'] == 3)]\n", - "HHSK['afsluitmiddel'] = HHSK['afsluitmiddel'].loc[(HHSK['afsluitmiddel']['statusobject'] == '3') | (HHSK['afsluitmiddel']['statusobject'] == 3)]\n", - "\n", - "# HHSK['peilgebiedvigerend'] = HHSK['peilgebiedvigerend'].loc[(HHSK['peilgebiedvigerend']['statusobject'] == '3') | (HHSK['peilgebiedvigerend']['statusobject'] == 3)]\n", - "# HHSK['peilafwijkinggebied'] = HHSK['peilafwijkinggebied'].loc[(HHSK['peilafwijkinggebied']['statusobject'] == '3') | (HHSK['peilafwijkinggebied']['statusobject'] == 3)]\n", - "\n", - "# HHSK_3nalevering['persleiding'] = HHSK_3nalevering['persleiding'].loc[(HHSK_3nalevering['persleiding']['STATUSOBJECT'] == '3') | (HHSK_3nalevering['persleiding']['STATUSOBJECT'] == 3)]\n", - "HHSK_3nalevering['hydroobject'] = HHSK_3nalevering['hydroobject'].loc[(HHSK_3nalevering['hydroobject']['STATUSOBJECT'] == '3') | (HHSK_3nalevering['hydroobject']['STATUSOBJECT'] == 3)]\n", - "HHSK_3nalevering['duikersifonhevel'] = HHSK_3nalevering['duikersifonhevel'].loc[(HHSK_3nalevering['duikersifonhevel']['STATUSOBJECT'] == '3') | (HHSK_3nalevering['duikersifonhevel']['STATUSOBJECT'] == 3)]" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "d91f9e5b-dab1-4af3-aaa4-18791d568ab3", - "metadata": {}, - "outputs": [], - "source": [ - "dsf = HHSK_3nalevering['hydroobject'].loc[HHSK_3nalevering['hydroobject']['CODE'].str.contains('Duiker|Sifon|Hevel|Gemaal|Inlaat', na=False)]\n", - "HHSK['duikersifonhevel'] = pd.concat([HHSK_3nalevering['duikersifonhevel'], dsf])\n", - "HHSK['duikersifonhevel'] = gpd.GeoDataFrame(HHSK['duikersifonhevel'], geometry='geometry')" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "d91ef127-a46e-4ce7-b4fc-ec13d39b6820", - "metadata": {}, - "outputs": [], - "source": [ - "HHSK_3nalevering['hydroobject']['CATEGORIEOPPWATERLICHAAM'] = HHSK_3nalevering['hydroobject']['CATEGORIEOPPWATERLICHAAM'].astype(float)\n", - "HHSK_3nalevering['hydroobject_original'] = HHSK_3nalevering['hydroobject'].copy()\n", - "HHSK['hydroobject'] = HHSK_3nalevering['hydroobject'].loc[HHSK_3nalevering['hydroobject']['CATEGORIEOPPWATERLICHAAM'] == 1] #only select primaire waterlichamen" - ] - }, - { - "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", - "metadata": {}, - "source": [ - "# HHSK" - ] - }, - { - "cell_type": "markdown", - "id": "62a8afeb-9d69-4df0-8e9a-0aa255543fb1", - "metadata": { - "tags": [] - }, - "source": [ - "### Add the gemalen columns" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "8196e429-c7c1-40f1-9dd3-525699656dc7", - "metadata": {}, - "outputs": [], - "source": [ - "#determine aanvoer en afvoer gemalen\n", - "HHSK['gemaal']['func_aanvoer'], HHSK['gemaal']['func_afvoer'], HHSK['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "HHSK['gemaal']['functiegemaal'] = HHSK['gemaal']['functiegemaal'].astype(str) \n", - "\n", - "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('2|4|5|6|7|99'), 'func_afvoer'] = True\n", - "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('1|3|5'), 'func_aanvoer'] = True\n", - "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('8'), 'func_circulatie'] = True\n", - "HHSK['gemaal'].loc[(HHSK['gemaal'].func_afvoer == False) &\n", - " (HHSK['gemaal'].func_aanvoer == False) &\n", - " (HHSK['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "5f19829d-6116-45d4-92ae-a0e27509afa3", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n" - ] - } - ], - "source": [ - "HHSK['hydroobject']['code'] = HHSK['hydroobject'].CODE\n", - "HHSK['hydroobject']['nen3610id'] = 'dummy_nen3610id_' + HHSK['hydroobject'].index.astype(str)\n", - "HHSK['hydroobject']['globalid'] = HHSK['hydroobject'].GLOBALID\n", - "\n", - "HHSK['duikersifonhevel']['code'] = HHSK['duikersifonhevel'].CODE\n", - "HHSK['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_' + HHSK['duikersifonhevel'].index.astype(str)\n", - "HHSK['duikersifonhevel']['globalid'] = HHSK['duikersifonhevel'].GLOBALID" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "fe221b99-ad03-4688-a656-9cb19e4f1a8b", - "metadata": {}, - "outputs": [], - "source": [ - "HHSK['stuw'] = HHSK['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "HHSK['gemaal'] = HHSK['gemaal'][['code', 'nen3610id', 'globalid', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "HHSK['hydroobject'] = HHSK['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "HHSK['duikersifonhevel'] = HHSK['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "HHSK['afsluitmiddel'] = HHSK['afsluitmiddel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "\n", - "# HHSK['peilgebiedvigerend'] = HHSK['peilgebiedvigerend'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "# HHSK['peilafwijkinggebied'] = HHSK['peilafwijkinggebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "\n", - "# HHSK['streefpeil'] = HHSK['streefpeil'][['code', 'nen3610id', 'globalid']]" - ] - }, - { - "cell_type": "markdown", - "id": "8c3e7f83-1aa8-4714-8ef5-7d0176097d94", - "metadata": { - "tags": [] - }, - "source": [ - "### Add the nageleverde persleidingen to the duikersifonhevels" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "75bbbea1-5ef9-4935-ad8e-4f294eaf1c9f", - "metadata": {}, - "outputs": [], - "source": [ - "# HHSK_3nalevering['persleiding'] = HHSK_3nalevering['persleiding'][['CODE', 'GLOBALID', 'geometry']]\n", - "# HHSK_3nalevering['persleiding']['nen3610id'] = 'dummy_nen3610id_persleiding_' + HHSK_3nalevering['persleiding'].index.astype(str)\n", - "# HHSK_3nalevering['persleiding'] = HHSK_3nalevering['persleiding'].rename(columns = {'CODE': 'code',\n", - "# 'GLOBALID': 'globalid'})\n" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "8495f3ba-98df-4eea-97a5-d09534e36885", - "metadata": {}, - "outputs": [], - "source": [ - "# HHSK['duikersifonhevel'] = gpd.GeoDataFrame(pd.concat([HHSK['duikersifonhevel'], HHSK_3nalevering['persleiding']])).reset_index(drop=True)\n", - "\n", - "#HHSK has apparently non unique values for the global ids in duikersifonhevel\n", - "HHSK['duikersifonhevel'] = HHSK['duikersifonhevel'].reset_index(drop=True)\n", - "HHSK['duikersifonhevel']['globalid'] = 'dummy_globalid_duikersifonhevel_' + HHSK['duikersifonhevel'].index.astype(str)\n", - "\n", - "#remove empty point geomtries from the gemalen\n", - "HHSK['gemaal'] = HHSK['gemaal'][~HHSK['gemaal'].is_empty].reset_index(drop=True)" - ] - }, - { - "cell_type": "markdown", - "id": "31841446-4e06-47b7-98a3-38d389df26df", - "metadata": {}, - "source": [ - "### Add the nageleverde peilgebieden to the original data" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "9bbfde44-60d9-4669-8994-410dc16299b9", - "metadata": {}, - "outputs": [], - "source": [ - "HHSK_2nalevering['PeilgebiedPraktijk'].loc[HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'] == 0, 'ONDERPEIL'] = np.nan\n", - "HHSK_2nalevering['PeilgebiedPraktijk'].loc[HHSK_2nalevering['PeilgebiedPraktijk']['VASTPEIL'] == 0, 'VASTPEIL'] = np.nan\n", - "HHSK_2nalevering['PeilgebiedPraktijk'].loc[HHSK_2nalevering['PeilgebiedPraktijk']['BOVENPEIL'] == 0, 'BOVENPEIL'] = np.nan\n", - "HHSK_2nalevering['PeilgebiedPraktijk'].loc[HHSK_2nalevering['PeilgebiedPraktijk']['SCHOUWPEIL'] == 0, 'SCHOUWPEIL'] = np.nan\n", - "\n", - "HHSK_2nalevering['VigerendPeilgebiedZPP'].loc[HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'] == 0, 'ONDERPEIL'] = np.nan\n", - "HHSK_2nalevering['VigerendPeilgebiedZPP'].loc[HHSK_2nalevering['VigerendPeilgebiedZPP']['VASTPEIL'] == 0, 'VASTPEIL'] = np.nan\n", - "HHSK_2nalevering['VigerendPeilgebiedZPP'].loc[HHSK_2nalevering['VigerendPeilgebiedZPP']['BOVENPEIL'] == 0, 'BOVENPEIL'] = np.nan\n", - "HHSK_2nalevering['VigerendPeilgebiedZPP'].loc[HHSK_2nalevering['VigerendPeilgebiedZPP']['SCHOUWPEIL'] == 0, 'SCHOUWPEIL'] = np.nan" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "9ee954f4-c333-4bb4-8dcc-b1e1cd7c2b57", - "metadata": {}, - "outputs": [], - "source": [ - "#edit the peilgebiedpraktijk\n", - "HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'].fillna(HHSK_2nalevering['PeilgebiedPraktijk']['VASTPEIL'], inplace= True)\n", - "HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'].fillna(HHSK_2nalevering['PeilgebiedPraktijk']['BOVENPEIL'], inplace= True)\n", - "HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'].fillna(HHSK_2nalevering['PeilgebiedPraktijk']['SCHOUWPEIL'], inplace= True)\n", - "\n", - "HHSK['peilgebiedpraktijk'] = HHSK_2nalevering['PeilgebiedPraktijk'][['CODE', 'ONDERPEIL', 'BRONGID', 'geometry']]\n", - "HHSK['peilgebiedpraktijk'] = HHSK_2nalevering['PeilgebiedPraktijk'].rename(columns = {'CODE': 'code',\n", - " 'ONDERPEIL': 'waterhoogte',\n", - " 'BRONGID': 'globalid'})" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "c37cfb5c-3b9e-4e57-b44c-3cbe610da093", - "metadata": {}, - "outputs": [], - "source": [ - "#edit the peilgebiedvigerend\n", - "HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'].fillna(HHSK_2nalevering['VigerendPeilgebiedZPP']['VASTPEIL'], inplace= True)\n", - "HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'].fillna(HHSK_2nalevering['VigerendPeilgebiedZPP']['BOVENPEIL'], inplace= True)\n", - "HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'].fillna(HHSK_2nalevering['VigerendPeilgebiedZPP']['SCHOUWPEIL'], inplace= True)\n", - "\n", - "HHSK['peilgebiedvigerend'] = HHSK_2nalevering['VigerendPeilgebiedZPP'][['CODE', 'ONDERPEIL', 'BRONGID', 'geometry']]\n", - "HHSK['peilgebiedvigerend'] = HHSK_2nalevering['VigerendPeilgebiedZPP'].rename(columns = {'CODE': 'code',\n", - " 'ONDERPEIL': 'waterhoogte',\n", - " 'BRONGID': 'globalid'})" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "fd7bfade-497b-40bd-8345-8dc4fd3d172b", - "metadata": {}, - "outputs": [], - "source": [ - "#select the peilgebiedpraktijk which have a primaire hydroobject\n", - "\n", - "#pgp_pw : PeilGebiedPraktijk Primaire Watergang\n", - "pgp_pw = gpd.sjoin(left_df = HHSK_2nalevering['PeilgebiedPraktijk'], \n", - " right_df = HHSK['hydroobject'],\n", - " how=\"inner\", \n", - " predicate='contains',\n", - " lsuffix = 'pgp',\n", - " rsuffix = 'hydroobject').drop_duplicates(subset='CODE') \n" - ] - }, - { - "cell_type": "markdown", - "id": "8383b5e1-7bfa-4a89-b2a3-dfaf3a3f04d2", - "metadata": {}, - "source": [ - "# Insert the manually created GPKG's" - ] - }, - { - "cell_type": "raw", - "id": "bb343e7a-62e5-426e-b10a-f498fe9aa9e2", - "metadata": {}, - "source": [ - "There are too many zero's in the streefpeilen, both in the vaste peilen as well as the boven- or onderpeilen. Change everything to NaN to prevent wrong data. Consequence may be that streefpeilen which are actually 0 are removed, but its likely that still is just a small percentage of all peilgebieden, if any." - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "58561bba-371e-4d7e-8c62-f670703b407f", - "metadata": {}, - "outputs": [], - "source": [ - "# VASTPEIL\tBOVENPEIL\tONDERPEIL\tSCHOUWPEIL" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "52e7fa05-264e-414b-a149-cf11aa8338c4", - "metadata": {}, - "outputs": [], - "source": [ - "first = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\korte_analyse_nalevering_HHSK.gpkg\", layer = 'peilgebied_praktijk_met_primaire_watergangen')\n", - "second = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\korte_analyse_nalevering_HHSK.gpkg\", layer = 'peilgebied_vigerend_boven_1ha')\n", - "areas = pd.concat([first, second])\n", - "areas = gpd.GeoDataFrame(areas, geometry = 'geometry')\n", - "areas = areas.loc[areas.area > 100] #filter out the smallest areas \n", - "areas.reset_index(drop=True, inplace=True)\n", - "\n", - "areas.loc[areas['ONDERPEIL'] == 0, 'ONDERPEIL'] = np.nan\n", - "areas.loc[areas['VASTPEIL'] == 0, 'VASTPEIL'] = np.nan\n", - "areas.loc[areas['BOVENPEIL'] == 0, 'BOVENPEIL'] = np.nan\n", - "areas.loc[areas['SCHOUWPEIL'] == 0, 'SCHOUWPEIL'] = np.nan\n", - "\n", - "\n", - "areas['ONDERPEIL'].fillna(areas['VASTPEIL'], inplace= True)\n", - "areas['ONDERPEIL'].fillna(areas['BOVENPEIL'], inplace= True)\n", - "areas['ONDERPEIL'].fillna(areas['SCHOUWPEIL'], inplace= True)\n", - "areas['waterhoogte'] = areas['ONDERPEIL']\n", - "HHSK['peilgebied'] = areas\n", - "HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied']['CODE'] !='GPG-1206'] #Not a regular polygon\n", - "HHSK['peilgebied'] = HHSK['peilgebied'].loc[:,['CODE', 'waterhoogte', 'geometry']]\n", - "HHSK['peilgebied'] = HHSK['peilgebied'].rename(columns = {'CODE': 'code'})#,\n", - "# 'ONDERPEIL': 'waterhoogte',\n", - "# 'BRONGID': 'globalid'})\n", - "\n", - "\n", - "# Remove and add the (splitted) boezem, partly manual\n", - "HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied'].code != 'PPG-237']\n", - "HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied'].code != 'PPG-1053']\n", - "HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied'].code != 'PPG-49']\n" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "5631e7ba-f5a0-4eaf-942a-3b6535a4ba8b", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "splitted_boezem = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\boezem\\boezem_split.shp\")\n", - "splitted_boezem['code'] = splitted_boezem['code'].str.split('_').str[0]\n", - "splitted_boezem = splitted_boezem[['code', 'nen3610id', 'globalid', 'geometry']]\n", - "splitted_boezem = pd.merge(left=splitted_boezem,\n", - " right = HHSK['peilgebied'][['code', 'waterhoogte']],\n", - " left_on = 'code',\n", - " right_on = 'code',\n", - " how = 'left')\n", - "splitted_boezem['code'] = splitted_boezem['code'] + '_boezem_' + splitted_boezem['code'].index.astype(str)\n", - "\n", - "HHSK['peilgebied'] = pd.concat([HHSK['peilgebied'], splitted_boezem]).reset_index(drop=True)\n", - "#globalid is not unique, change\n", - "# HHSK['peilgebied']['code'] = 'dummy_code_peilgebied_' + HHSK['peilgebied'].index.astype(str)\n", - "HHSK['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + HHSK['peilgebied'].index.astype(str)\n", - "HHSK['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + HHSK['peilgebied'].index.astype(str)\n", - "\n", - "HHSK['peilgebied'] = gpd.GeoDataFrame(HHSK['peilgebied'], geometry='geometry')" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "dd5ddc6f-6593-451c-8904-ad988d4137c8", - "metadata": {}, - "outputs": [], - "source": [ - "# test = gpd.GeoDataFrame(columns=['test', 'geometry'])\n", - "# test['test'] = np.nan\n", - "# test[0, 'geometry'] = dissolved_polygon\n", - "# test.rename(columns={'(0, geometry)': 'geometry'}, inplace=True)\n", - "# test['geometry'] = test.iloc[:, 2]\n", - "# test = test[['geometry']]\n", - "# test.set_crs('EPSG:28992')\n", - "# test.to_file('snelle_test.gpkg', driver='GPKG') " - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "f0d1d16e-8c2f-4258-b28b-0b509a710d3e", - "metadata": {}, - "outputs": [], - "source": [ - "peilbesluit = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\poldergebieden_en_duikersifonhevels_persleidingen\\peilbesluit_hhsk.gpkg\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9b49add0-6c1c-46e7-9867-cf19bf5ae3f3", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "10009cfa-f240-4f4a-844e-fb4310207167", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py:3377: FutureWarning: The `op` parameter is deprecated and will be removed in a future release. Please use the `predicate` parameter instead.\n", - " if (await self.run_code(code, result, async_=asy)):\n" - ] - } - ], - "source": [ - "joined_gdf = gpd.sjoin(HHSK['peilgebied'], peilbesluit, how='left', op='intersects')\n", - "# joined_gdf.globalid = joined_gdf.globalid.astype(str) + '_' + joined_gdf.globalid.index.astype(str)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "dfca65da-384e-4604-81df-ddc152758f3c", - "metadata": {}, - "outputs": [], - "source": [ - "HHSK['peilgebied']['id'] = HHSK['peilgebied'].index\n", - "HHSK['peilgebied']['area'] = HHSK['peilgebied'].area\n", - "\n", - "# Step 1: Calculate intersections with overlay, ensure to keep the identifier\n", - "intersections = gpd.overlay(HHSK['peilgebied'], peilbesluit, how='intersection', keep_geom_type=False)\n", - "intersections['intersection_area'] = intersections.area\n", - "\n", - "# Step 2: Merge back with HHSK['peilgebied'] to get the original areas using the identifier\n", - "intersections = intersections.merge(HHSK['peilgebied'][['id', 'area']], left_on='id', right_on='id', how='left', suffixes=('', '_original'))\n", - "\n", - "# Step 3: Calculate the percentage of the intersection area relative to the original area\n", - "intersections['overlap_percentage'] = (intersections['intersection_area'] / intersections['area_original']) * 100\n", - "\n", - "# Step 4: Filter out intersections with less than 10% overlap\n", - "significant_intersections = intersections[intersections['overlap_percentage'] >= 10]\n", - "\n", - "# Step 5: Join significant intersections back to the original HHSK['peilgebied']\n", - "joined_gdf = HHSK['peilgebied'].merge(significant_intersections[['id', 'NAAM']], on='id', how='left')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "e04d6710-6ade-47bc-bb3c-3a8e0e64e0ba", - "metadata": {}, - "outputs": [], - "source": [ - "joined_gdf = joined_gdf.reset_index(drop=True)\n", - "joined_gdf.sort_values(by=['globalid', 'area'], inplace=True)\n", - "joined_gdf.drop_duplicates(subset='globalid', keep = 'first', inplace = True)\n", - "joined_gdf = joined_gdf.reset_index(drop=True)\n", - "HHSK['peilgebied'] = joined_gdf" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "69677287-9ba3-417b-bfd9-4c3358ea7c52", - "metadata": {}, - "outputs": [], - "source": [ - "# new_gdf = gpd.GeoDataFrame(columns=Zuiderzeeland['peilgebied'].columns())\n", - "HHSK['peilgebied'] = HHSK['peilgebied'].explode(ignore_index=True).reset_index(drop=True) #explode to prevent multipolygons\n", - "HHSK['peilgebied']['area'] = HHSK['peilgebied'].area\n", - "\n", - "#remove all areas which are smaller than 25 hectares (25*100*100)\n", - "HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied'].area > 25*100*100]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e34ce435-3a9e-45b9-b043-bfa929b762bc", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "6842567f-a669-412b-8616-88975234f1ce", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_17744\\3850806707.py:9: FutureWarning: Currently, index_parts defaults to True, but in the future, it will default to False to be consistent with Pandas. Use `index_parts=True` to keep the current behavior and True/False to silence the warning.\n", - " exterior = exterior.explode().reset_index(drop=True)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "No intersection found for iteration 38\n", - "No intersection found for iteration 60\n", - "No intersection found for iteration 92\n", - "No intersection found for iteration 98\n", - "No intersection found for iteration 103\n", - "No intersection found for iteration 119\n", - "No intersection found for iteration 142\n", - "No intersection found for iteration 245\n", - "No intersection found for iteration 389\n", - "No intersection found for iteration 437\n" - ] - } - ], - "source": [ - "HHSK['peilgebied'] = HHSK['peilgebied'].explode(ignore_index=True)\n", - "HHSK['peilgebied'] = HHSK['peilgebied'][HHSK['peilgebied'].geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n", - "\n", - "\n", - "HHSK['peilgebied']['area'] = HHSK['peilgebied'].area\n", - "dissolved = HHSK['peilgebied'].dissolve()\n", - "exterior = gpd.GeoDataFrame(geometry=dissolved['geometry'].boundary).to_crs(crs='EPSG:28992')\n", - "HHSK['peilgebied'] = HHSK['peilgebied'].to_crs(crs='EPSG:28992')\n", - "exterior = exterior.explode().reset_index(drop=True)\n", - "exterior['geometry'] = exterior['geometry'].apply(convert_to_polygon)\n", - "exterior['area'] = exterior.area\n", - "exterior = exterior.sort_values(by='area', ascending=False).reset_index(drop=True)\n", - "exterior = exterior.iloc[2::] #-2 as all rows should be taken into consideration, except the last two as HHSK consists of \"two islands\"\n", - "exterior = exterior.reset_index(drop=True)\n", - "\n", - "#determine the polder at which each exterior is laying\n", - "exterior['id'] = exterior.index\n", - "exterior['area'] = exterior.area\n", - "\n", - "# intersections = gpd.overlay(exterior, peilbesluit, how='intersection', keep_geom_type=False)\n", - "# intersections['intersection_area'] = intersections.area\n", - "# intersections = intersections.merge(exterior[['id', 'area']], left_on='id', right_on='id', how='left', suffixes=('', '_original'))\n", - "# intersections['overlap_percentage'] = (intersections['intersection_area'] / intersections['area_original']) * 100\n", - "# significant_intersections = intersections[intersections['overlap_percentage'] >= 10]\n", - "# joined_gdf2 = exterior.merge(significant_intersections[['id', 'NAAM']], on='id', how='left')\n", - "\n", - "intersections = gpd.overlay(exterior, peilbesluit, how='intersection', keep_geom_type=False)\n", - "intersections['intersection_area'] = intersections.area\n", - "intersections = intersections.merge(exterior[['id', 'area']], left_on='id', right_on='id', how='left', suffixes=('', '_original'))\n", - "# intersections['overlap_percentage'] = (intersections['intersection_area'] / intersections['area_original']) * 100\n", - "# significant_intersections = intersections[intersections['overlap_percentage'] >= 10]\n", - "joined_gdf2 = exterior.merge(intersections[['id', 'NAAM']], on='id', how='left')\n", - "\n", - "\n", - "joined_gdf2 = joined_gdf2.reset_index(drop=True)\n", - "joined_gdf2.sort_values(by=['id', 'area'], inplace=True)\n", - "joined_gdf2.drop_duplicates(subset='id', keep = 'first', inplace = True)\n", - "exterior = joined_gdf2.reset_index(drop=True)\n", - "\n", - "\n", - "\n", - "for i in range(len(exterior)):\n", - "# for i in range(10):\n", - "\n", - " buffered_peilgebied = HHSK['peilgebied'].buffer(0.)\n", - "\n", - " exterior_sample = exterior.iloc[i:i+1] #just pick a single sample\n", - " exterior_sample.geometry = exterior_sample.buffer(0.0001) #let op! hierdoor komt er alsnog een kleine overlap. Maar anders werkt de code even niet, en vanwege tijdgebrek kan dit nu niet worden opgelost. In het bepalen van de crossings wordt hier echter mee omgegaan.\n", - " exterior_sample_NAAM = exterior_sample.NAAM\n", - " \n", - " intersects_mask = buffered_peilgebied.intersects(exterior_sample.iloc[0].geometry)\n", - " intersecting_polygons = HHSK['peilgebied'][intersects_mask].sort_values(by='area', ascending=False)\n", - "\n", - " intersecting_polygons = intersecting_polygons.loc[intersecting_polygons.NAAM.values == exterior_sample_NAAM.values]\n", - "\n", - " if len(intersecting_polygons) > 0:\n", - " intersecting_polygons = gpd.GeoDataFrame(intersecting_polygons.iloc[0:1], geometry = 'geometry')\n", - " all_geometries = list(intersecting_polygons.geometry) + list(exterior_sample.geometry)\n", - "\n", - " # Use unary_union to dissolve all polygons in the list\n", - " dissolved_polygon = unary_union(all_geometries)\n", - " \n", - " original_index = intersecting_polygons.index[0]\n", - "\n", - " # Ensure it's a single geometry object.\n", - " HHSK['peilgebied'].loc[HHSK['peilgebied'].index == original_index, 'geometry'] = dissolved_polygon\n", - " else:\n", - " print('No intersection found for iteration ', i)" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "273a594e-3888-42ac-a829-3e5e29d0b6d5", - "metadata": {}, - "outputs": [], - "source": [ - "#door niet lekker liggende intekeningen met peilbesluiten, blijven er een aantal gaten inzitten...\n", - "#handmatig gebieden aan andere toegekend. Helaas was dit nodig om zo een betere schematisatie af te leiden\n", - "\n", - "verwerkte_peilgebieden = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\poldergebieden_en_duikersifonhevels_persleidingen\\Opgevulde_peilgebieden_dmv_nalevering_en_handmatige_aggregatie2.shp\")\n", - "verwerkte_peilgebieden = gpd.GeoDataFrame(verwerkte_peilgebieden, geometry = 'geometry')" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "91639ee7-c7cc-4f60-bace-54f7d53b8fc3", - "metadata": {}, - "outputs": [], - "source": [ - "# for i in range(len(verwerkte_peilgebieden.loc[verwerkte_peilgebieden.CODE == 'PPG-1596'])):\n", - "# # display(verwerkte_peilgebieden.iloc[i])\n", - "# verwerkte_peilgebieden.loc[verwerkte_peilgebieden.CODE == 'PPG-1596'].iloc[i::i+1].plot()\n", - "# # plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "14cf1a7e-ecba-471b-8b1b-0a204cd25fbf", - "metadata": {}, - "outputs": [], - "source": [ - "merged = pd.merge(verwerkte_peilgebieden,\n", - " HHSK['peilgebied'],\n", - " on = 'nen3610id')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "17c316c2-5cba-44d6-86a0-1c18ce961fe7", - "metadata": {}, - "outputs": [], - "source": [ - "merged['geometry'] = merged['geometry_x']\n", - "merged['globalid'] = merged['globalid_x']\n", - "\n", - "\n", - "merged = merged[['code', 'waterhoogte', 'nen3610id', 'globalid', 'geometry']]" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "c4803353-c4e8-4f41-8dcd-c82e9f5b2481", - "metadata": {}, - "outputs": [], - "source": [ - "twee_overige_gebieden = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\poldergebieden_en_duikersifonhevels_persleidingen\\2_overige_gebieden.shp\")\n", - "twee_overige_gebieden['code'] = 'code_2_overige_gebieden_' + twee_overige_gebieden.index.astype(str)\n", - "twee_overige_gebieden['nen3610id'] = 'nen3610id_2_overige_gebieden_' + twee_overige_gebieden.index.astype(str)\n", - "twee_overige_gebieden['globalid'] = 'globalid_2_overige_gebieden_' + twee_overige_gebieden.index.astype(str)\n", - "twee_overige_gebieden['waterhoogte'] = -5.95\n", - "\n", - "twee_overige_gebieden = twee_overige_gebieden[['code', 'waterhoogte', 'nen3610id', 'globalid', 'geometry']]\n", - "\n", - "merged = gpd.GeoDataFrame(pd.concat([merged, twee_overige_gebieden]), geometry = 'geometry')\n", - "HHSK['peilgebied'] = merged.reset_index(drop=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "273a404b-5fc6-4c75-a1a9-a14e44b5b86c", - "metadata": {}, - "outputs": [], - "source": [ - "# HHSK['streefpeil']['last_id'] = HHSK['streefpeil']['globalid'].str.split('area_').str[1]\n", - "# HHSK['verwerkte_peilgebieden']['last_id'] = HHSK['streefpeil']['globalid'].str.split('area_').str[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "89e3b294-8100-4631-b2c3-6fc2464e1b94", - "metadata": {}, - "outputs": [], - "source": [ - "# verwerkte_peilgebieden.loc[verwerkte_peilgebieden.VASTPEIL.isna()].plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "7df9baa4-7092-4401-be9a-fd3a451c38b0", - "metadata": {}, - "outputs": [], - "source": [ - "# pgv_diff = gpd.sjoin(left_df = HHSK['peilgebiedvigerend'],\n", - "# right_df = pgp_pw,\n", - "# how = \"left\",\n", - "# predicate = 'intersects')" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "a03b9016-af7d-4c4e-a10b-1f2ea2ee9254", - "metadata": {}, - "outputs": [], - "source": [ - "# pgv_diff.drop_duplicates()#.plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "9736e6e4-0e8f-4396-a1f4-3b4f3e9bf690", - "metadata": {}, - "outputs": [], - "source": [ - "# streefpeilen_PG_v = pd.merge(left = HHSK['peilgebiedvigerend'],\n", - "# right = HHSK['streefpeil'],\n", - "# left_on = 'globalid',\n", - "# right_on = 'peilgebiedvigerendid',\n", - "# suffixes = ('', '_streefpeil'))[['code', 'nen3610id', 'globalid', 'waterhoogte', 'geometry']]\n", - "\n", - "# streefpeilen_PG_a = pd.merge(left = HHSK['peilafwijkinggebied'],\n", - "# right = HHSK['streefpeil'],\n", - "# left_on = 'globalid',\n", - "# right_on = 'peilafwijkinggebiedid',\n", - "# suffixes = ('', '_streefpeil'))[['code', 'nen3610id', 'globalid', 'waterhoogte', 'geometry']]\n", - "\n", - "# fig, ax = plt.subplots()\n", - "# streefpeilen_PG_v.plot(ax = ax, color='cornflowerblue')\n", - "# streefpeilen_PG_a.plot(ax = ax, color='blue')" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "b5d16748-7262-4e43-baa2-f182cb8dd142", - "metadata": {}, - "outputs": [], - "source": [ - "# streefpeilen_PG_v.to_file('vigerend.shp')\n", - "# streefpeilen_PG_a.to_file('afwijking.shp')" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "0292ab77-acfd-4666-9c3b-b9bd8c1f1fec", - "metadata": {}, - "outputs": [], - "source": [ - "# peilgebied = burn_in_peilgebieden(base_layer = streefpeilen_PG_v, \n", - "# overlay_layer = streefpeilen_PG_a,\n", - "# plot = True)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "b9740281-ce51-4146-b05e-ca02a74bde50", - "metadata": {}, - "outputs": [], - "source": [ - "# HHSK['peilgebied'].code = HHSK['peilgebied'].dropna(subset='code')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2a4dfd7e-5542-4922-830b-431ccb04d084", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "d49f52a9-0a9a-4fff-8359-a0b0abb063e6", - "metadata": {}, - "outputs": [], - "source": [ - "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('PPG-49_boezem'), 'waterhoogte'] = -2.15\n", - "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('PPG-237_boezem'), 'waterhoogte'] = -0.9\n", - "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('PPG-1053_boezem'), 'waterhoogte'] = -2.1\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a9839425-5b7e-4acf-b474-7cb0e7c9311e", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "40d3866c-e672-4a20-8989-8e020adf59a5", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "1" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "88e9543c-2dbe-4ebf-9423-b38daeeaa004", - "metadata": {}, - "outputs": [], - "source": [ - "# HHSK['peilgebied'] = gpd.GeoDataFrame(peilgebied[['code', 'nen3610id', 'globalid', 'geometry']])" - ] - }, - { - "cell_type": "markdown", - "id": "51df5dde-d374-4ae3-8d43-1c495581f021", - "metadata": {}, - "source": [ - "### Delete irrelevant data" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", - "metadata": {}, - "outputs": [], - "source": [ - "#retrieve the original hydroobjecten back, where also the secundairy and tertiairy hydroobjects are present\n", - "# HHSK['hydroobject'] = HHSK['hydroobject_original']\n", - "\n", - "#delete irrelvant data\n", - "variables = ['peilgebiedpraktijk', 'peilgebiedvigerend', 'peilafwijkinggebied', 'hydroobject_original']\n", - "\n", - "for variable in variables:\n", - " if str(variable) in HHSK:\n", - " del HHSK[variable]" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "375f1598-03c1-48a1-bb19-54790273dad0", - "metadata": {}, - "outputs": [], - "source": [ - "HHSK['hydroobject'] = HHSK['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "\n", - "#add duikersifonhevels to the hydroobjecten \n", - "HHSK['hydroobject'] = pd.concat([HHSK['hydroobject'], HHSK['duikersifonhevel']])\n", - "HHSK['hydroobject'] = HHSK['hydroobject'].drop_duplicates(subset='globalid') #in case it is run multiple times\n", - "HHSK['hydroobject'] = gpd.GeoDataFrame(HHSK['hydroobject']).set_crs('epsg:28992')\n" - ] - }, - { - "cell_type": "raw", - "id": "02e1dd84-468f-4a36-94fe-6a0e66b61e41", - "metadata": {}, - "source": [ - "Another additional data delivery. In short, the network looked fine, except some peilgebieden were aggregated which should not be aggregated. HHSK did some (handmade) changes to cut them up. So, the majority of the processings steps of above are been part of the aggregation area as loaded in here below, except some changes. " - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "ebca513a-fb19-4f36-807e-b5f2c40e00bf", - "metadata": {}, - "outputs": [], - "source": [ - "aggregation_area = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\20240701_losseshapes\\basin_area_hhsk.shp\")\n", - "HHSK['aggregation_area'] = aggregation_area\n", - "HHSK['aggregation_area']['globalid'] = 'dummy_globalid_' + HHSK['aggregation_area'].index.astype(str)\n", - "HHSK['aggregation_area']['nen3610id'] = 'dummy_nen3610id_' + HHSK['aggregation_area'].index.astype(str)\n", - "HHSK['aggregation_area']['code'] = 'dummy_code_' + HHSK['aggregation_area'].index.astype(str)" - ] - }, - { - "cell_type": "markdown", - "id": "00979679-8879-4453-8765-d26d0251b5be", - "metadata": {}, - "source": [ - "### The streefpeilen are not correct anymore. Load in an old data delivery, and retrieve the streefpeilen by using a spatial join" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "ea265bc0-7947-42f5-9bf5-688ee332a2ac", - "metadata": {}, - "outputs": [], - "source": [ - "#read file with old streefpeilen\n", - "old_SP = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\hhsklevering_07032024.gpkg\"\n", - "old_SP = gpd.read_file(old_SP)\n", - "\n", - "#replace 0 with nan\n", - "old_SP.loc[old_SP['ONDERPEIL'] == 0, 'ONDERPEIL'] = np.nan\n", - "old_SP.loc[old_SP['VASTPEIL'] == 0, 'VASTPEIL'] = np.nan\n", - "old_SP.loc[old_SP['BOVENPEIL'] == 0, 'BOVENPEIL'] = np.nan\n", - "old_SP.loc[old_SP['SCHOUWPEIL'] == 0, 'SCHOUWPEIL'] = np.nan\n", - "\n", - "#fill nan with actual values\n", - "old_SP['ONDERPEIL'].fillna(old_SP['VASTPEIL'], inplace= True)\n", - "old_SP['ONDERPEIL'].fillna(old_SP['BOVENPEIL'], inplace= True)\n", - "old_SP['ONDERPEIL'].fillna(old_SP['SCHOUWPEIL'], inplace= True)\n", - "old_SP['waterhoogte'] = old_SP['ONDERPEIL']\n", - "\n", - "#repeat for the NAAM\n", - "old_SP['NAAM'].replace(to_replace = ' ', value = '', inplace=True)\n", - "old_SP['NAAM'].replace(to_replace = '', value = np.nan, inplace=True)\n", - "old_SP['NAAM'].fillna(old_SP['PEILBESLUI'], inplace= True)\n", - "\n", - "#rename\n", - "old_SP = old_SP[['CODE', 'NAAM', 'PEILBESLUI', 'waterhoogte', 'geometry']]\n", - "old_SP.rename(columns = {'CODE': 'code',\n", - " 'NAAM': 'globalid',\n", - " 'PEILBESLUI' : 'nen3610id'}, inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "016c1dc0-6ff5-416c-8653-2e677ba6065b", - "metadata": {}, - "outputs": [], - "source": [ - "HHSK['aggregation_area']['repr_point'] = HHSK['aggregation_area']['geometry'].representative_point()\n", - "joined_gdf = gpd.sjoin(aggregation_area.set_geometry('repr_point'), old_SP, how='left', predicate='intersects')\n", - "joined_gdf.rename(columns={'code_right':'code',\n", - " 'globalid_right': 'globalid',\n", - " 'nen3610id_right': 'nen3610id'}, inplace=True)\n", - "joined_gdf = joined_gdf[['code', 'globalid', 'nen3610id', 'waterhoogte', 'geometry']]" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "672e16ff-b307-4448-95dd-b0338fbfcb29", - "metadata": {}, - "outputs": [], - "source": [ - "#make unique rows\n", - "joined_gdf['code'] = joined_gdf['code'] + '_' + joined_gdf.index.astype(str)\n", - "joined_gdf['globalid'] = joined_gdf['globalid'] + '_' + joined_gdf.index.astype(str)\n", - "joined_gdf['nen3610id'] = joined_gdf['nen3610id'] + '_' + joined_gdf.index.astype(str)\n", - "\n", - "#change all comma's to underscores\n", - "joined_gdf.code = joined_gdf.code.str.replace(pat = ',', repl = '_')\n", - "joined_gdf.nen3610id = joined_gdf.nen3610id.str.replace(pat = ',', repl = '_')\n", - "joined_gdf.globalid = joined_gdf.globalid.str.replace(pat = ',', repl = '_')\n", - "\n", - "#make floats of the waterhoogte, just to be sure\n", - "joined_gdf.waterhoogte = joined_gdf.waterhoogte.astype(float)" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "8f28c04c-f435-404e-89b8-a64798395c44", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n" - ] - } - ], - "source": [ - "HHSK['aggregation_area'] = gpd.GeoDataFrame(joined_gdf, geometry = 'geometry')\n", - "HHSK['peilgebied'] = HHSK['aggregation_area'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "HHSK['streefpeil'] = HHSK['aggregation_area'][['waterhoogte', 'globalid', 'geometry']]\n", - "HHSK['streefpeil']['geometry'] = np.nan\n", - "\n", - "HHSK['aggregation_area'] = HHSK['aggregation_area'][['code', 'nen3610id', 'globalid', 'geometry']]" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "99cd52fe-923f-4411-bc9a-e9ef1ae56121", - "metadata": {}, - "outputs": [], - "source": [ - "# # HHSK['aggregation_area'] = HHSK['peilgebied']\n", - "# HHSK['aggregation_area'] = aggregation_area\n", - "# HHSK['aggregation_area']['globalid'] = 'dummy_globalid_agg_area_' + HHSK['aggregation_area'].index.astype(str)\n", - "# HHSK['aggregation_area']['code'] = 'dummy_code_' + HHSK['aggregation_area'].index.astype(str)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "cd21bcac-8d25-4d47-ad0a-c7338e6e6653", - "metadata": {}, - "outputs": [], - "source": [ - "# # stop\n", - "# streefpeil = gpd.GeoDataFrame()\n", - "# streefpeil['waterhoogte'] = HHSK['peilgebied']['waterhoogte']\n", - "# streefpeil['globalid'] = HHSK['peilgebied']['globalid']\n", - "# streefpeil['geometry'] = np.nan\n", - "# HHSK['streefpeil'] = streefpeil #gpd.GeoDataFrame(HHSK['peilgebied'])\n", - "# HHSK['streefpeil'].waterhoogte = HHSK['streefpeil'].waterhoogte.round(2)\n", - "# HHSK['peilgebied'] = HHSK['peilgebied'][['geometry', 'code', 'nen3610id', 'globalid']]" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "15800d54-0cfd-481f-9e61-57f50b862e02", - "metadata": {}, - "outputs": [], - "source": [ - "# HHSK['streefpeil'].waterhoogte#.plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "1803b0c0-4f61-416e-a27b-ff4e2050aa46", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "HHSK['peilgebied'].plot()" - ] - }, - { - "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", - "metadata": {}, - "source": [ - "### Check for the correct keys and columns" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n", - "gemaal\n", - "['code' 'nen3610id' 'globalid' 'func_afvoer' 'func_aanvoer'\n", - " 'func_circulatie' 'geometry']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n", - "afsluitmiddel\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n", - "streefpeil\n", - "['waterhoogte' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "duikersifonhevel\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "hydroobject\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "peilgebied\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "aggregation_area\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n" - ] - } - ], - "source": [ - "show_layers_and_columns(waterschap = HHSK)" - ] - }, - { - "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", - "metadata": {}, - "source": [ - "### Store data" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", - "metadata": {}, - "outputs": [], - "source": [ - "# Check if the directory exists\n", - "if not os.path.exists(output_gpkg_path):\n", - " # If it doesn't exist, create it\n", - " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = HHSK, \n", - " output_gpkg_path = output_gpkg_path + '/HHSK')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "f60d7964-db4d-4c9f-9861-356a2a881382", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "12509\n", - "12509\n" - ] - } - ], - "source": [ - "print(len(HHSK['duikersifonhevel'].globalid.unique()))\n", - "print(len(HHSK['duikersifonhevel'].globalid))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0a681bab-0174-4b54-94ac-fac1479612a5", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Routing", - "language": "python", - "name": "routing" - }, - "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.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Hollandse_Delta.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Hollandse_Delta.ipynb deleted file mode 100644 index 9263757..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Hollandse_Delta.ipynb +++ /dev/null @@ -1,622 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 81, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", - "metadata": {}, - "outputs": [], - "source": [ - "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", - "import os\n", - "import fiona\n", - "import shapely" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", - "metadata": {}, - "outputs": [], - "source": [ - "from general_functions import *" - ] - }, - { - "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", - "metadata": {}, - "source": [ - "# HD" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "#define relative paths\n", - "waterschap = 'Hollandse_Delta'\n", - "data_path = \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Hollandse_Delta_aangepast.gpkg\"\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Hollandse_Delta\"" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "532b0b83-2139-4d48-8e42-883ed8e88325", - "metadata": {}, - "outputs": [], - "source": [ - "HD = read_gpkg_layers(gpkg_path = data_path, \n", - " variables = ['stuwen', \n", - " 'gemalen', \n", - " 'afsluitmiddelen',\n", - " 'sluizen',\n", - " 'HydroObjectWatergangtype', #= hydroobject\n", - " 'HydroObjectKunstwerkvakken']) #= duikersifonhevel\n", - "\n", - "#change names\n", - "HD['stuw'] = HD.pop('stuwen')\n", - "HD['gemaal'] = HD.pop('gemalen')\n", - "HD['afsluitmiddel'] = HD.pop('afsluitmiddelen')\n", - "HD['sluis'] = HD.pop('sluizen')\n", - "HD['hydroobject'] = HD.pop('HydroObjectWatergangtype')\n", - "HD['duikersifonhevel'] = HD.pop('HydroObjectKunstwerkvakken')\n", - " \n" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "077f1c26-c738-48f7-b9df-bec5b7356c9a", - "metadata": {}, - "outputs": [], - "source": [ - "#see the readme: peilgebieden have not be delivered properly. This data is retrieved from an external online database.\n", - "# peilgebieden_path = '../../Data_preprocessed/Waterschappen/Hollandse_Delta/WSHD_Peilgebieden_(Vigerend).shp'\n", - "peilgebieden_path_all = \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Nalvering_tweede/Shapefiles/PeilgebiedenPraktijk.shp\"\n", - "peilgebieden_path_geen_AP = \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Nalvering_tweede/Shapefiles/PeilgebiedenGeenAP.shp\"\n", - "\n", - "#load in both the old ones and the new ones, as the new ones do not have the peilgebiedafwijkingen, but they dont have the streefpeilen. These are stored in the old ones.\n", - "peilgebieden_all = gpd.read_file(peilgebieden_path_all)\n", - "peilgebieden_all = peilgebieden_all[~peilgebieden_all['CODE'].str.contains('.AP')]\n", - "\n", - "peilgebieden_geen_AP = gpd.read_file(peilgebieden_path_geen_AP)\n", - "\n", - "peilgebieden = pd.merge(left=peilgebieden_geen_AP,\n", - " right=peilgebieden_all,\n", - " left_on='Dis',\n", - " right_on='Dis',\n", - " suffixes=('', '_all'),\n", - " how='left')\n", - "\n", - "#add the shapefile to the dictionary\n", - "HD['peilgebied'] = peilgebieden.drop_duplicates(subset='Dis')" - ] - }, - { - "cell_type": "markdown", - "id": "1ce54d69-78fd-409d-8705-72c23795bc70", - "metadata": { - "tags": [] - }, - "source": [ - "## Add aggregation areas" - ] - }, - { - "cell_type": "raw", - "id": "bb84b770-ff22-4cab-95d0-90aa99283faf", - "metadata": {}, - "source": [ - "Tijdens het 1 op 1 gesprek met HD is aangegeven dat de wateraanvoergebieden, bemalingsgebieden en de KRW lichamen door elkaar gestanzd moeten worden. De bemalingsgebieden worden achterwegen gelaten, want deze grenzen liggen praktisch perfect op de wateraanvoergebieden. Dit is alleen niet het geval op kleine stukken, wat op foutieve intekeningen lijkt. Als dit wel gebruikt zou worden zouden er veel kleine gebieden ontstaan, dus dit is achterwegen gelaten. Eigenlijk geldt hetzelfde voor de wateraanvoergebieden, dit is vrijwel gelijk aan de peilgebieden zonder afwijkende peilen. Deze peilgebieden worden voor nu aangehouden, met alleen de KRW lichamen eruit gestanzd.\n", - "\n", - "Bij een aantal peilgebieden vormt het KRW lichaam veruit het grootste gedeelte van het gebied, of zouden er hele vreemde stukken komen als dit nog eruit gedrukt zou worden. Ik (Ron Bruijns) heb zelf een selectie gemaakt van de gebieden waarvan ik dacht dat het het beste is om de KRW lichamen als aparte basin te onderscheiden. Dat zijn de gebieden met de volgende codes:\n", - "\n", - "P-G13.004\n", - "P-G12.008\n", - "P-G22.005\n", - "P-G33.008\n", - "P-G42.001\n", - "P-G44.005\n", - "P-H02.001\n", - "P-V03.005\n", - "P-V05.008\n", - "P-V06.010\n", - "P-V06.010\n", - "P-H03.002\n", - "P-H04.002\n", - "P-H17.009\n", - "P-H18.001\n", - "P-H18.002\n", - "P-D21.006\n", - "P-D27.006" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "333d7252-963e-4779-be68-f4a098e4272e", - "metadata": {}, - "outputs": [], - "source": [ - "#Load the additional data\n", - "KRW = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Hollandse_Delta\\Nalvering_tweede\\Shapefiles\\KRW-vlak.shp\")\n", - "# aggregation_area = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Hollandse_Delta\\Nalvering_tweede\\Shapefiles\\Aanvoergebieden.shp\")" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "0f022cf4-2f22-47ee-b368-a7fec647f8ca", - "metadata": {}, - "outputs": [], - "source": [ - "aggregation_area = HD['peilgebied']\n", - "aggregation_area['code'] = aggregation_area['CODE']\n", - "aggregation_area['nen3610id'] = aggregation_area['NAAM_BEMAL']\n", - "aggregation_area['globalid'] = 'dummy_globalid_agg_area_' + aggregation_area.index.astype(str)\n", - "aggregation_area = aggregation_area[['code', 'nen3610id', 'globalid', 'geometry']]" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "ef0831b3-979f-4915-8f73-8a6d9ffce6a0", - "metadata": {}, - "outputs": [], - "source": [ - "KRW['code'] = KRW['OWMIDENT']\n", - "KRW['nen3610id'] = KRW['OWMNAAM']\n", - "KRW['globalid'] = 'dummy_globalid_KRW_' + KRW.index.astype(str)\n", - "KRW = KRW[['code', 'nen3610id', 'globalid', 'geometry']]" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "b8e431e1-fa32-4cac-9ac2-9bcb6e0b7a99", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "codes = \"\"\"P-G13.004\n", - "P-G12.008\n", - "P-G22.005\n", - "P-G33.008\n", - "P-G42.001\n", - "P-G44.005\n", - "P-H02.001\n", - "P-V03.005\n", - "P-V05.008\n", - "P-V06.010\n", - "P-V06.010\n", - "P-H03.002\n", - "P-H04.002\n", - "P-H17.009\n", - "P-H18.001\n", - "P-H18.002\n", - "P-D21.006\n", - "P-D27.006\n", - "P-G43.006\n", - "P-G32.007\n", - "P-V01.010\n", - "P-V01.022\n", - "\"\"\"\n", - "code_list = [code.strip() for code in codes.strip().split(\"\\n\") if code.strip()]\n", - "\n", - "agg_area_dont_split = aggregation_area[~aggregation_area.code.isin(code_list)]\n", - "agg_area_to_split = aggregation_area[aggregation_area.code.isin(code_list)]\n", - "clipped_KRW = gpd.clip(KRW, agg_area_to_split)\n", - "\n", - "burned_in_areas = burn_in_peilgebieden(base_layer=agg_area_to_split,\n", - " overlay_layer=clipped_KRW)\n", - "aggregation_area = aggregation_area.dropna(subset='geometry')" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "0c9cfebb-3aa5-4f44-a437-9ba675c655c5", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_3564\\901116719.py:24: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " KRW_to_add = KRW_to_add.append(new_row, ignore_index=False).reset_index(drop=True)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\array.py:1459: UserWarning: CRS not set for some of the concatenation inputs. Setting output's CRS as Amersfoort / RD New (the single non-null crs provided).\n", - " return GeometryArray(data, crs=_get_common_crs(to_concat))\n" - ] - } - ], - "source": [ - "KRW_to_add = gpd.clip(clipped_KRW, agg_area_to_split).reset_index(drop=True) #these KRW bodies are cut out, so they need to be inserted again\n", - "KRW_to_add = gpd.clip(KRW_to_add, HD['peilgebied'])#.dropna().explode(ignore_index = True) #however, they may cross multiple peilgebieden with different peilen. clip it on the peilgebieden\n", - "KRW_to_add = KRW_to_add.explode(ignore_index=True) #explode\n", - "KRW_to_add = KRW_to_add[KRW_to_add.geometry.type.isin(['Polygon', 'MultiPolygon'])].reset_index(drop=True) #discard points, linestrings, and geometry collections\n", - "KRW_to_add = gpd.GeoDataFrame(data = KRW_to_add, columns=['geometry'])\n", - "KRW_to_add = gpd.sjoin(left_df = KRW_to_add,\n", - " right_df = HD['peilgebied'][['REKENPEIL1', 'geometry']],\n", - " how = 'left',\n", - " predicate = 'within').reset_index(drop=True)\n", - "\n", - "indices_to_dissolve = [18, 19]\n", - "\n", - "# Extract the rows for these indices\n", - "rows_to_dissolve = KRW_to_add.loc[indices_to_dissolve]\n", - "\n", - "# Dissolve the selected polygons into a single polygon\n", - "dissolved_polygon = rows_to_dissolve.unary_union\n", - "\n", - "# Create a new GeoDataFrame for the dissolved polygon\n", - "new_row = gpd.GeoDataFrame({'geometry': [dissolved_polygon]}, index=[min(indices_to_dissolve)])\n", - "\n", - "# Drop the original rows from the GeoDataFrame\n", - "KRW_to_add = KRW_to_add.drop(index=indices_to_dissolve)\n", - "KRW_to_add = KRW_to_add.append(new_row, ignore_index=False).reset_index(drop=True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "92732485-2729-4d5e-9d06-ef86dfa6bd19", - "metadata": {}, - "outputs": [], - "source": [ - "KRW_to_add.loc[0, 'REKENPEIL1'] = -0.9\n", - "KRW_to_add.loc[3, 'REKENPEIL1'] = -1.0\n", - "KRW_to_add.loc[6, 'REKENPEIL1'] = -1.75\n", - "KRW_to_add.loc[7, 'REKENPEIL1'] = -1.00\n", - "KRW_to_add.loc[11, 'REKENPEIL1'] = -1.40\n", - "KRW_to_add.loc[12, 'REKENPEIL1'] = -0.95\n", - "KRW_to_add.loc[15, 'REKENPEIL1'] = -2.65\n", - "KRW_to_add.loc[17, 'REKENPEIL1'] = -2.25\n", - "KRW_to_add.loc[18, 'REKENPEIL1'] = -2.0\n", - "KRW_to_add.loc[22, 'REKENPEIL1'] = -1.2\n", - "KRW_to_add.loc[26, 'REKENPEIL1'] = -2.0\n" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "21529995-1705-4fee-a5d4-1b3f056dc902", - "metadata": {}, - "outputs": [], - "source": [ - "KRW_to_add = KRW_to_add.dropna(subset='REKENPEIL1').reset_index()\n", - "KRW_to_add['REKENPEIL_'] = KRW_to_add['REKENPEIL1']\n", - "KRW_to_add['NAAM_BEMAL'] = 'KRW_body_' + KRW_to_add.index.astype(str)\n", - "HD['peilgebied'] = pd.concat([HD['peilgebied'], KRW_to_add])" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "9105b8ea-ceae-45ec-9703-7199146e7ec9", - "metadata": {}, - "outputs": [], - "source": [ - "aggregation_area = pd.concat([burned_in_areas, agg_area_dont_split])\n", - "aggregation_area = gpd.GeoDataFrame(aggregation_area, geometry = 'geometry')\n", - "aggregation_area = aggregation_area[(aggregation_area.geom_type == 'Polygon') | (aggregation_area.geom_type == 'MultiPolygon')]\n", - "HD['aggregation_area'] = aggregation_area" - ] - }, - { - "cell_type": "markdown", - "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", - "metadata": {}, - "source": [ - "### Adjust column names" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "d54bf05e-f563-44ec-9864-4774e2aecfc6", - "metadata": {}, - "outputs": [], - "source": [ - "#determine aanvoer en afvoer gemalen\n", - "HD['gemaal']['func_aanvoer'], HD['gemaal']['func_afvoer'], HD['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "HD['gemaal']['functiegemaal'] = HD['gemaal']['FUNCTIEGEM'].astype(str) \n", - "HD['gemaal'].loc[HD['gemaal']['functiegemaal'] == 'Onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", - "HD['gemaal']['functiegemaal'].fillna(HD['gemaal']['NAAM'], inplace = True) #some additional information may given in this column\n", - "HD['gemaal']['functiegemaal'] = HD['gemaal']['functiegemaal'].astype(str) #again, otherise issue True False\n", - "\n", - "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('f-|fvoer|nderbemaling'), 'func_afvoer'] = True\n", - "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('anvoergemaal|pmaling'), 'func_aanvoer'] = True\n", - "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('Doorspoel'), 'func_circulatie'] = True\n", - "HD['gemaal'].loc[(HD['gemaal'].func_afvoer == False) &\n", - " (HD['gemaal'].func_aanvoer == False) &\n", - " (HD['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "059f9113-bcd4-470a-abb6-4fd8ec193f4a", - "metadata": {}, - "outputs": [], - "source": [ - "#discard irrelevant data of HD HD, and create a uniform dataset compared to the other waterschappen\n", - "#Stuw\n", - "HD['stuw'] = HD['stuw'][['CODE', 'GLOBALID', 'geometry']]\n", - "HD['stuw'] = HD['stuw'].rename(columns={'CODE': 'code', 'GLOBALID': 'globalid'})\n", - "HD['stuw']['nen3610id'] = 'dummy_nen3610id_stuw_' + HD['stuw'].index.astype(str)\n", - "\n", - "#Gemaal\n", - "HD['gemaal'] = HD['gemaal'][['CODE', 'GLOBALID', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "HD['gemaal'] = HD['gemaal'].rename(columns={'GLOBALID': 'globalid',\n", - " 'CODE': 'code'})\n", - "HD['gemaal']['nen3610id'] = 'dummy_nen3610id_gemaal_' + HD['gemaal'].index.astype(str)\n", - "\n", - "#Hydroobject\n", - "HD['hydroobject'] = HD['hydroobject'][['CODE', 'GLOBALID', 'geometry']]\n", - "HD['hydroobject'] = HD['hydroobject'].rename(columns={'GLOBALID': 'globalid',\n", - " 'CODE': 'code'})\n", - "HD['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + HD['hydroobject'].index.astype(str)\n", - "\n", - "#sluis\n", - "HD['sluis'] = HD['sluis'][['CODE', 'GLOBALID', 'geometry']]\n", - "HD['sluis'] = HD['sluis'].rename(columns={'GLOBALID': 'globalid'})\n", - "HD['sluis']['nen3610id'] = 'dummy_nen3610id_sluis_' + HD['sluis'].index.astype(str)\n", - "\n", - "#duikersifonhevel\n", - "HD['duikersifonhevel'] = HD['duikersifonhevel'][['CODE', 'GLOBALID', 'geometry']]\n", - "HD['duikersifonhevel'] = HD['duikersifonhevel'].rename(columns={'CODE':'code', 'GLOBALID': 'globalid'})\n", - "HD['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + HD['duikersifonhevel'].index.astype(str)\n", - "\n", - "#afsluitmiddel\n", - "HD['afsluitmiddel'] = HD['afsluitmiddel'][['CODE', 'geometry']]\n", - "HD['afsluitmiddel'] = HD['afsluitmiddel'].rename(columns={'CODE':'code'})\n", - "HD['afsluitmiddel']['nen3610id'] = 'dummy_nen3610id_afsluitmiddel_' + HD['afsluitmiddel'].index.astype(str)\n", - "HD['afsluitmiddel']['globalid'] = 'dummy_globalid_afsluitmiddel_' + HD['afsluitmiddel'].index.astype(str)\n", - "\n", - "#Peilgebied\n", - "HD['peilgebied'] = HD['peilgebied'].reset_index(drop=True)\n", - "HD['peilgebied'] = HD['peilgebied'][['REKENPEIL_', 'NAAM_BEMAL', 'geometry']]\n", - "HD['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + HD['peilgebied'].index.astype(str)\n", - "HD['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + HD['peilgebied'].index.astype(str)\n", - "HD['peilgebied'] = HD['peilgebied'].rename(columns={'REKENPEIL_': 'streefpeil', 'NAAM_BEMAL':'code'})\n", - "HD['peilgebied'].code = HD['peilgebied'].code.astype(str) + '_' + HD['peilgebied'].index.astype(str)\n", - "\n", - "#Streefpeil\n", - "HD['streefpeil'] = pd.DataFrame()\n", - "HD['streefpeil']['waterhoogte'] = HD['peilgebied']['streefpeil']\n", - "HD['streefpeil']['globalid'] = HD['peilgebied']['globalid']\n", - "HD['streefpeil']['geometry'] = None\n", - "HD['streefpeil'] = gpd.GeoDataFrame(HD['streefpeil'], geometry = 'geometry')\n", - "\n", - "#Remove the streefpeil from the peilgebied\n", - "HD['peilgebied'] = HD['peilgebied'][['code', 'geometry', 'nen3610id', 'globalid']]\n", - "HD['streefpeil'].waterhoogte = HD['streefpeil'].waterhoogte.round(2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "626e1734-2515-4c0a-8f7f-81ce3d400785", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "121534de-ebf7-418d-8d47-10697b28cb55", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "5ca0372f-48db-47e1-b5c9-2574b17234eb", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "798\n", - "798\n" - ] - } - ], - "source": [ - "print(len(HD['peilgebied'].code.unique()))\n", - "print(len(HD['peilgebied'].globalid.unique()))" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "4be7418b-4d01-415e-a1f2-4fdc33d10ee4", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "798\n", - "798\n" - ] - } - ], - "source": [ - "print(len(HD['peilgebied'].code))\n", - "print(len(HD['peilgebied'].globalid))" - ] - }, - { - "cell_type": "markdown", - "id": "fc6461c9-0c4d-4c37-b6e0-039be24d4f51", - "metadata": {}, - "source": [ - "## Delete irrelevant data" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", - "metadata": {}, - "outputs": [], - "source": [ - "#delete irrelvant data\n", - "variables = ['peilgebiedpraktijk']\n", - "\n", - "for variable in variables:\n", - " if str(variable) in HD:\n", - " del HD[variable]" - ] - }, - { - "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", - "metadata": {}, - "source": [ - "### Check for the correct keys and columns" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "['code' 'globalid' 'geometry' 'nen3610id']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "gemaal\n", - "['code' 'globalid' 'func_afvoer' 'func_aanvoer' 'func_circulatie'\n", - " 'geometry' 'nen3610id']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "afsluitmiddel\n", - "['code' 'geometry' 'nen3610id' 'globalid']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "sluis\n", - "['CODE' 'globalid' 'geometry' 'nen3610id']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "hydroobject\n", - "['code' 'globalid' 'geometry' 'nen3610id']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "duikersifonhevel\n", - "['code' 'globalid' 'geometry' 'nen3610id']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "peilgebied\n", - "['code' 'geometry' 'nen3610id' 'globalid']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "aggregation_area\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "streefpeil\n", - "['waterhoogte' 'globalid' 'geometry']\n", - "type = \n", - "crs = None\n", - "\n" - ] - } - ], - "source": [ - "show_layers_and_columns(waterschap = HD)" - ] - }, - { - "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", - "metadata": {}, - "source": [ - "### Store data" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", - "metadata": {}, - "outputs": [], - "source": [ - "# Check if the directory exists\n", - "if not os.path.exists(output_gpkg_path):\n", - " # If it doesn't exist, create it\n", - " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = HD, \n", - " output_gpkg_path = output_gpkg_path + '/HD')\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "52f17e20-95a7-493f-bff9-6600df570fe0", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Routing", - "language": "python", - "name": "routing" - }, - "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.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rijnland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rijnland.ipynb deleted file mode 100644 index 650be62..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rijnland.ipynb +++ /dev/null @@ -1,1197 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", - "metadata": {}, - "outputs": [], - "source": [ - "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", - "import os\n", - "import fiona\n", - "\n", - "import shapely\n", - "from shapely.validation import make_valid\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", - "metadata": {}, - "outputs": [], - "source": [ - "from general_functions import *" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", - "metadata": {}, - "outputs": [], - "source": [ - "pd.set_option('display.max_columns', None)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", - "metadata": {}, - "outputs": [], - "source": [ - "#define relative paths\n", - "waterschap = 'Rijnland'\n", - "path_Rijnland = '..\\..\\Data_preprocessed\\Waterschappen\\Rijnland\\DataRijnland\\DataRijnland.gpkg'\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Rijnland\"\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "ca6ddcd9-e960-4b5f-ba10-4d222c16a843", - "metadata": {}, - "outputs": [], - "source": [ - "Rijnland = read_gpkg_layers(gpkg_path = path_Rijnland, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'afsluitmiddel',\n", - " 'duikersifonhevel',\n", - " 'hydroobject',\n", - " 'peilgebiedvigerend',\n", - " 'peilgebiedpraktijk',\n", - " 'peilafwijkinggebied',\n", - " 'streefpeil']) \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "c49f0339-19e4-497f-87fe-8b4918aefb5f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['Opmaling', 'Afvoergemaal', 'Onderbemaling', 'Doorspoelgemaal',\n", - " 'Aanvoergemaal', None, 'Overig', 'Noodpomp'], dtype=object)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Rijnland['gemaal'].functiegemaal.unique()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "ec085e98-5791-4829-bc95-35b833c632f1", - "metadata": {}, - "outputs": [], - "source": [ - "#determine aanvoer en afvoer gemalen\n", - "Rijnland['gemaal']['func_aanvoer'], Rijnland['gemaal']['func_afvoer'], Rijnland['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "Rijnland['gemaal']['functiegemaal'] = Rijnland['gemaal']['functiegemaal'].astype(str) \n", - "\n", - "Rijnland['gemaal'].loc[Rijnland['gemaal'].functiegemaal.str.contains('Afvoergemaal|Onderbemaling|Overig'), 'func_afvoer'] = True\n", - "Rijnland['gemaal'].loc[Rijnland['gemaal'].functiegemaal.str.contains('Opmaling|Aanvoergemaal'), 'func_aanvoer'] = True\n", - "Rijnland['gemaal'].loc[Rijnland['gemaal'].functiegemaal.str.contains('Doorspoelgemaal|Noodpomp'), 'func_circulatie'] = True\n", - "Rijnland['gemaal'].loc[(Rijnland['gemaal'].func_afvoer == False) &\n", - " (Rijnland['gemaal'].func_aanvoer == False) &\n", - " (Rijnland['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "39014a74-876e-41f8-b620-913afef1ac06", - "metadata": {}, - "outputs": [], - "source": [ - "path_Rijnland_nalevering = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Rijnland\\20240402_gegevensRL_nalevering.gdb\"\n", - "\n", - "Rijnland_nalevering = read_gpkg_layers(gpkg_path = path_Rijnland_nalevering, \n", - " variables = ['boezemvak', \n", - " 'Inlaat', \n", - " 'Peilgebiedenpraktijk_aggregatie_RL']) " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b956b1d7-bb90-416a-bad3-fcd47131041f", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", - "metadata": {}, - "source": [ - "# Rijnland" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "01dda03c-5a50-4bde-a655-7ed14c85a8d3", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "Rijnland['peilgebiedvigerend'].plot(ax=ax, color='blue')\n", - "Rijnland['peilgebiedpraktijk'].plot(ax=ax, color='orange')\n", - "Rijnland['peilafwijkinggebied'].plot(ax=ax, color='green')" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "e58ee099-54b3-415b-8222-9545776a7a61", - "metadata": {}, - "outputs": [], - "source": [ - "Rijnland['stuw'] = Rijnland['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['gemaal'] = Rijnland['gemaal'][['code', 'nen3610id', 'globalid', 'geometry', 'func_aanvoer', 'func_afvoer', 'func_circulatie']]\n", - "Rijnland['afsluitmiddel'] = Rijnland['afsluitmiddel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['hydroobject'] = Rijnland['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['duikersifonhevel'] = Rijnland['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['peilgebiedpraktijk'] = Rijnland['peilgebiedpraktijk'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['peilafwijkinggebied'] = Rijnland['peilafwijkinggebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['peilgebiedvigerend'] = Rijnland['peilgebiedvigerend'][['code', 'nen3610id', 'globalid', 'geometry']]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "023a704c-685e-4fe9-9745-39a5ed461a03", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n" - ] - } - ], - "source": [ - "#fix geometries\n", - "Rijnland['peilgebiedvigerend']['geometry'] = Rijnland['peilgebiedvigerend'].buffer(distance = 0)\n", - "Rijnland['peilgebiedpraktijk']['geometry'] = Rijnland['peilgebiedpraktijk'].buffer(distance = 0)\n", - "Rijnland['peilafwijkinggebied']['geometry'] = Rijnland['peilafwijkinggebied'].buffer(distance = 0)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "eb236dc1-11b3-42c4-99e9-fecd568bec2b", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# peilgebied = burn_in_peilgebieden(base_layer = Rijnland['peilgebiedpraktijk'], \n", - "# overlay_layer = Rijnland['peilafwijkinggebied'],\n", - "# plot = True)\n", - "# Rijnland['peilgebied'] = gpd.GeoDataFrame(peilgebied)\n", - "\n", - "peilgebied = burn_in_peilgebieden(base_layer = Rijnland['peilgebiedvigerend'], \n", - " overlay_layer = Rijnland['peilgebiedpraktijk'],\n", - " plot = True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "a68eb09d-a30c-4530-960e-4dd0f329039a", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n" - ] - } - ], - "source": [ - "#Add aggregation areas\n", - "peilgebied = peilgebied.loc[peilgebied.code!='RIJNLANDSBOEZEM'] #REMOVE the boezem, as it needs to be split based on the second data delivery\n", - "\n", - "Rijnland['aggregation_area'] = Rijnland_nalevering['Peilgebiedenpraktijk_aggregatie_RL']\n", - "boezem = Rijnland['aggregation_area'][(Rijnland['aggregation_area']['CODE_AFW'].str.startswith('NL13_')) |\n", - " Rijnland['aggregation_area']['RL_aggregatie_id'].str.contains('ouwe')] #only select the boezem to add to the peilgebieden\n", - "Rijnland['aggregation_area'].RL_aggregatie_id.fillna(Rijnland['aggregation_area']['CODE_AFW'], inplace=True)\n", - "Rijnland['aggregation_area'] = Rijnland['aggregation_area'].dissolve(by='RL_aggregatie_id', as_index=False)#.plot()\n", - "Rijnland['aggregation_area'] = Rijnland['aggregation_area'][['code', 'nen3610id', 'CODE_AFW', 'globalid', 'geometry']]\n", - "\n", - "Rijnland['aggregation_area']['code'] = Rijnland['aggregation_area']['code'].astype(str) + '_dummy_id_' + Rijnland['aggregation_area'].index.astype(str)\n", - "\n", - "pg_sp_Gouwe = Rijnland['aggregation_area'].loc[Rijnland['aggregation_area'].CODE_AFW == 'Gouwe']\n", - "pg_sp_Gouwe['naam'] = 'Gouwe'\n", - "boezem = gpd.GeoDataFrame(pd.concat([boezem, pg_sp_Gouwe]), geometry = 'geometry') #add the Gouwe to the boezem" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "05098a9e-9b5a-487e-8b3e-7f3d82bda74e", - "metadata": {}, - "outputs": [], - "source": [ - "peilgebied = gpd.GeoDataFrame(peilgebied)\n", - "peilgebied = peilgebied[peilgebied.geometry.type.isin(['Polygon', 'MultiPolygon'])] #only select polygons\n", - "\n", - "Rijnland['peilgebied'] = gpd.GeoDataFrame(peilgebied)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "9efaf904-e94c-4c87-aeb6-c04d4f183e27", - "metadata": {}, - "outputs": [], - "source": [ - "Rijnland['streefpeil'].peilgebiedpraktijkid.fillna(value=Rijnland['streefpeil']['peilgebiedvigerendid'], inplace=True)\n", - "# Rijnland['streefpeil'].drop_duplicates(subset=['peilgebiedpraktijkid'], inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "1511cf73-aa2b-423f-be87-c95fb0d9bdbb", - "metadata": {}, - "outputs": [], - "source": [ - "#get rid of irrelevant streefpeilen, which otherwise results in too many overlapped peilgebieden\n", - "filter_condition = Rijnland['streefpeil']['soortstreefpeil'].isin(['omer', 'ondergrens']) #'omer' for all rows where something of zomer, Zomer, dynamische zomer, etc, is used\n", - "kept_rows = Rijnland['streefpeil'][filter_condition]\n", - "\n", - "other_rows = Rijnland['streefpeil'][~filter_condition].drop_duplicates(subset=['peilgebiedpraktijkid'])\n", - "Rijnland['streefpeil'] = pd.concat([kept_rows, other_rows])" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "7bdd80ad-650c-4e9f-a3bd-d675c4544830", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_22236\\371328050.py:10: UserWarning: Geometry column does not contain geometry.\n", - " pg_sp['geometry'] = gpd.GeoDataFrame(geometry = pg_sp['geometry']).reset_index(drop=True)\n" - ] - } - ], - "source": [ - "# Rijnland['streefpeil'].peilafwijkinggebiedid.fillna(value=Rijnland['streefpeil']['peilgebiedpraktijkid'], inplace=True)\n", - "# Rijnland['streefpeil'].peilgebiedpraktijkid.fillna(value=Rijnland['streefpeil']['peilgebiedvigerendid'], inplace=True)\n", - "\n", - "pg_sp = pd.merge(left = peilgebied,\n", - " right = Rijnland['streefpeil'],\n", - " left_on = 'globalid',\n", - " right_on = 'peilgebiedpraktijkid',\n", - " suffixes = ('', '_streefpeil'))\n", - "\n", - "pg_sp['geometry'] = gpd.GeoDataFrame(geometry = pg_sp['geometry']).reset_index(drop=True)\n", - "# pg_sp = pg_sp.explode('geometry',ignore_index=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "03a06d24-823f-4c20-908f-23c390b9b4ce", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "dbb4827e-17ad-461f-8101-f97f38b2b31e", - "metadata": {}, - "outputs": [], - "source": [ - "#there are duplicate codes, nen3610ids and globalids due to the exploded function. Rename these.\n", - "# pg_sp['nen3610id'] = 'dummy_nen3610id_peilgebied_' + pg_sp.index.astype(str)\n", - "# pg_sp['code'] = 'dummy_code_peilgebied_' + pg_sp.index.astype(str)\n", - "pg_sp['globalid'] = 'dummy_globalid_peilgebied_' + pg_sp.index.astype(str)\n", - "\n", - "#add the boezem with the peilgebied\n", - "boezem['globalid'] = 'dummy_globalid_boezem_' + boezem.index.astype(str)\n", - "boezem['waterhoogte'] = 0.61\n", - "pg_sp = pd.concat([pg_sp, boezem])\n", - "\n", - "Rijnland['peilgebied'] = pg_sp\n", - "Rijnland['peilgebied'] = Rijnland['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['peilgebied'] = gpd.GeoDataFrame(Rijnland['peilgebied'], geometry = 'geometry')\n", - "Rijnland['peilgebied'] = Rijnland['peilgebied'].set_crs('EPSG:28992')" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "67ba9685-90b6-4389-818f-a003d9d41dc8", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_22236\\1567509723.py:3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " streefpeil['geometry'] = np.nan\n" - ] - } - ], - "source": [ - "streefpeil = pg_sp[['waterhoogte', 'globalid']]\n", - "\n", - "streefpeil['geometry'] = np.nan\n", - "streefpeil = gpd.GeoDataFrame(streefpeil)\n", - "Rijnland['streefpeil'] = streefpeil" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", - "metadata": {}, - "outputs": [], - "source": [ - "#delete irrelvant data\n", - "variables = ['peilgebiedpraktijk', 'peilgebiedvigerend', 'peilafwijkinggebied']\n", - "\n", - "for variable in variables:\n", - " if str(variable) in Rijnland:\n", - " del Rijnland[variable]" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "9ea24ea8-67ae-4cff-ac30-6492dcd80c41", - "metadata": {}, - "outputs": [], - "source": [ - "#Add the duikersifonhevels to the hydroobjecten\n", - "Rijnland['hydroobject'] = pd.concat([Rijnland['hydroobject'], Rijnland['duikersifonhevel']])\n", - "Rijnland['hydroobject'] = gpd.GeoDataFrame(Rijnland['hydroobject'], geometry = 'geometry')" - ] - }, - { - "cell_type": "raw", - "id": "d92489bc-2752-4d36-b428-a29ffd0efac2", - "metadata": {}, - "source": [ - "Retrieve the boezem\n", - "Retrieve all peilgebieden, excep the boezem\n", - "\n", - "Buffer the boezem\n", - "Clip the buffered boezem based on the all_peilgebieden_except_boezem\n", - "\n", - "Add the clipped_buffered_boezem to the all_peilgebieden_except_boezem" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "c68c7da1-488c-4d46-bfa4-cc5445efdaab", - "metadata": {}, - "outputs": [], - "source": [ - "bzm = Rijnland['peilgebied'].loc[Rijnland['peilgebied'].code.str.contains('BOEZEM')].reset_index(drop=True)\n", - "all_others = Rijnland['peilgebied'].loc[~Rijnland['peilgebied'].code.str.contains('BOEZEM')].reset_index(drop=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "b6eabbd1-8c12-4d25-b04a-30fa73f6726b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAGdCAYAAAACKIgZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACqPUlEQVR4nOydd3hT59mH76Nty5a898IMM8w0GwIhECCBkNVmERKahDTNnk3TrzNtQ9pmtVnNbGZD9k4IIxBC2AaDzbCxjfcekizJ2uf7Q1ggLNuyMfvc18WV6Jz3HB3Z8u+853mf5/cIoiiKSEhISEic8chO9QVISEhISPQPkqBLSEhInCVIgi4hISFxliAJuoSEhMRZgiToEhISEmcJkqBLSEhInCVIgi4hISFxliAJuoSEhMRZguJUX8DpjsfjoaamhvDwcARBONWXIyEhcYYgiiJtbW0kJSUhk52cubMk6D1QU1NDamrqqb4MCQmJM5TKykpSUlJOyntJgt4D4eHhgPeXotPpTvHVSEhInCmYTCZSU1N9GnIykAS9BzrCLDqdThJ0CQmJXnMyQ7XSoqiEhITEWYIk6BISEhJnCZKgS0hISJwlSIIuISEhcZYgCbqEhITEWYIk6BISEhJnCZKgS0hISJwlSIIuISEhcZYgCbqEhITEWYIk6BISEhJnCZKgS0hISJwlSIIuISEhcZYgCbqEhITEWYLktighcYppd7jZUd6Cxe5mXFoEcTrNqb4kiTMUSdAlJE4h6wobeOK7QvbWmBAE2Pvneaf6kiTOYKSQi4TEKcTu9GCwOn2vH/1yH5/nVePxiKfwqiTOVARRFKVvTjeYTCb0ej1Go1FqcCFxQnB7RLaXtXDtK1vo+GscnaJn8eR0FoxMRKuWHqTPRE6FdkiC3gOSoEucSIobzKwvbGB7WQvf7a3vtD9EKef8rFjOz4pl0oBoMmK0p+AqJfrCqdAO6dYvIXGKqDPauPz5n2izu7oc0+50821BHd8W1AEwOjWCv12WTXay/mRdpsQZhBRDl5A4RazeX9+tmAdid6WBn/1nE+sONJygq5I4k5EEXULiFFDcYOa1H0v7dKzN6eHWt3ewel/nEI3EuY0k6BISJ5nGNjtXvriJsmZrn8/hdIvcu2IXVkfvZvgSZzdSDF1C4iSxqbiJ138qw+5yY2x39nxAN2iUMt65ZRKhKulPWOII0rdBQuIkkFvewm3v5GKy9c+M+r45QxibFtkv55I4e5BCLhISJ4Gv99T1m5inRIZw49QM32urw0VJo7lfzi1xZiMJuoTECUYUxX6Ndd82cyAapdz3enelkU0lzf12fokzFynkIiFxghEEgegwVb+cSykXWDgq0ffa6fZQb7Lx5KpCNAoZ2cl6hiaEIwhCv7yfxJmFNEOXkDgJXJSd2POgIHC6RX7xxnb21ZqobLHy928PoA9VYrA6eeijPVz0rx959cdD/fJeEmce0gxdQuIkkKDXoFLIcLg8x32uXRUG7n8/jwuGxvHGprJO8fPhSZJFxbmKJOgSEieBn4qb+kXMASJClSjkAi+sLwFgXWGj3/4QlTzQYRLnAJKgS0icYERR5C9f7euXcyXqNYiiSEG1CbkAA2K0hIcokQGHmqykRIUwJiWiX95L4sxDEnQJiRNIWZOF331WQJPZcdznUsoFlHKBihYbuhAFsWFqihstfmMWjUlCJpMWRM9VpEVRCYkTyOs/HWJjcVO/nGtMaiQVLe3IBUjUhVByjJgD7Ksx9ct7SZyZSIIuIXGCyC1v5d2tFf1yrpHJOgqqDQDkZERRWN8WcNxFIxOO630qmq0UNwQ+t8TpjxRykZDoZ9weka/21LBiWyXu42glp5QLjE2LxGJ3kV/tnXnLBdhf2/UsPCs+vM/vB95snGfWFKFVK7hj1qDjOpfEyUcSdAmJfsTjEbn4Xz92OYPuDWNTI9l2qMVvW3JkCBUt7QHHR4Qqyck4Pn8XlULGr+cPpclsp7CujayE47tBSJxcjivksnz5cgRB4N577/Vtq6+vZ+nSpSQlJREaGsr8+fM5ePCg33F2u5277rqLmJgYtFotixYtoqqqym9Ma2srS5YsQa/Xo9frWbJkCQaDwW9MRUUFl1xyCVqtlpiYGO6++24cDv/Fp/z8fGbOnElISAjJyck8+uijSF33JE4UMpnA6NTj7yYklwkUBQh9dOeumJMWiVrRPymLMWFqVAoZNYbANw+J05M+C/r27dt5+eWXGTVqlG+bKIpcdtlllJaW8vnnn7Nr1y7S09OZM2cOFsuRBZx7772XTz/9lBUrVrBx40bMZjMLFy7E7Xb7xlx33XXk5eWxcuVKVq5cSV5eHkuWLPHtd7vdLFiwAIvFwsaNG1mxYgUff/wxDzzwgG+MyWTiwgsvJCkpie3bt/Pss8/yxBNP8NRTT/X1Y0tIdEtZk4XPdtUc93mGJ4ZjsHa22D16LnJsdX9la9/91QMxIEZLq/X4s3MkTh59CrmYzWYWL17MK6+8wl//+lff9oMHD7JlyxYKCgoYMWIEAC+88AJxcXG899573HLLLRiNRl577TXefvtt5syZA8A777xDamoqa9asYd68eezfv5+VK1eyZcsWJk2aBMArr7zClClTKCwsJCsri1WrVrFv3z4qKytJSkoC4Mknn2Tp0qX87W9/Q6fT8e6772Kz2XjjjTdQq9VkZ2dTVFTEU089xf333y/5XUj0O5/n1eBwH38BUUgXM/E2+xGRD1MrmDQgmjX7vZ2LBpyABtJRWhUF1Ua0asUJOb9E/9KnGfodd9zBggULfILcgd1uB0Cj0fi2yeVyVCoVGzduBCA3Nxen08ncuXN9Y5KSksjOzmbTpk0AbN68Gb1e7xNzgMmTJ6PX6/3GZGdn+8QcYN68edjtdnJzc31jZs6ciVqt9htTU1NDWVlZXz66hES3FPeTjW2L2R5we2ObHfnhPPPLxyazpfSIy+LMIXH98t5Hk6gPITtZj06jYENRIw1ttn5/D4n+o9eCvmLFCnJzc1m+fHmnfUOHDiU9PZ1HHnmE1tZWHA4Hjz/+OHV1ddTW1gJQV1eHSqUiMtJ/8SY+Pp66ujrfmLi4zl/OuLg4vzHx8fF++yMjI1GpVN2O6XjdMeZY7HY7JpPJ75+ERLBMzow67nMoZAKHmjrnmIPXnGtAjJbJmVE8PH8oo1KOxOtPZD1RdJiaGUNi2V1pPHFvInHc9ErQKysrueeee3j33Xf9ZuEdKJVKPv74Y4qKioiKiiI0NJT169dz0UUXIZd3v1gjiqJfCCRQOKQ/xnQsiHYVblm+fLlvIVav15OamtrtdUuc3YiiyEe5VUEvpIdrlMf9nvE6De5u3m7u8HheXJyDVq1ApTjyJ3wyTLmGJoRTUC2J+ulKrwQ9NzeXhoYGcnJyUCgUKBQKfvjhB/7973+jUChwu93k5OSQl5eHwWCgtraWlStX0tzczIABAwBISEjA4XDQ2trqd+6Ghgbf7DkhIYH6+s4dzRsbG/3GHDvLbm1txel0djumoaEBoNPMvYNHHnkEo9Ho+1dZWdmbH5HEWcahJgt/+WofPx4MrtpzR1lLz4N6ICK0+5tCfrWRSK3XX93uPBKvjw1Xd3VIv5EaFUqj2S41pz5N6ZWgz549m/z8fPLy8nz/xo8fz+LFi8nLy/Obhev1emJjYzl48CA7duzg0ksvBSAnJwelUsnq1at9Y2traykoKGDq1KkATJkyBaPRyLZt23xjtm7ditFo9BtTUFDgC+UArFq1CrVaTU5Ojm/Mhg0b/FIZV61aRVJSEhkZGQE/o1qtRqfT+f2TODdxuj385uN8BsRoqWjpOYPk49wqvtpT2+O4ngjtwS3xp+Im6ozeWHZ28pHv5+8+LcBzHIVMwXL+kNhO+fG95clVhXy5+/izgST86ZWgh4eHk52d7fdPq9USHR1NdnY2AB9++CHr16/3pS5eeOGFXHbZZb5FUL1ez80338wDDzzA2rVr2bVrF9dffz0jR470LbIOGzaM+fPns2zZMrZs2cKWLVtYtmwZCxcuJCsrC4C5c+cyfPhwlixZwq5du1i7di0PPvggy5Yt84nwddddh1qtZunSpRQUFPDpp5/y2GOPSRkuEkHxwAe7ya828szVY9hS2txl305RFHlrcxmPfbOfFsvxp/nJevhuekT4ZJe3bmNgbJhvRr/2QAM3vbkdk61zumN/IggCnh7a6q070BBwHUAURZZ/s59nvy/uNzthiSP0u5dLbW0tS5YsYejQodx9990sWbKE9957z2/M008/zWWXXcZVV13FtGnTCA0N5csvv/Sb4b/77ruMHDmSuXPnMnfuXEaNGsXbb7/t2y+Xy/n666/RaDRMmzaNq666issuu4wnnnjCN0av17N69WqqqqoYP348t99+O/fffz/3339/f39sibMQjyjy+4XDyYjR8tC8LJ77vhi3RySv0sDW0mY+yq1i7tM/cP8Hu/nD53tp7gcxB4JKe+yI618zMY1V983gDwuH89fLstl2qIW/f3sAu8vN5pJmjO0nRtxrDDYO1HVdDft1fi1hav/US5fbw4Mf7uGlDaXMGxHP5WOTT8i1dUdXi81nC4IolU12i8lkQq/XYzQapfDLOcbHuVVcMS7Z9zRX3GDmnS3lxOs0/H3lgRP2vvHhaurbAqctHs1Ht01hfIZ/Vs1lz/9EXqUBmeCdyS+ZnM5fLss+Ide5oagRuUxg2qAYv+3tDjcX/WsDF49MJDZcTVpUKCEqOe9ureDrPbWoFTLWPXg+SREhJ+S6jsXmdLO3xruQ+/P/bEYhl6E8nBIklwmMSongiZ+PJkHfOdHjeDgV2iF5uUhIdMGVOSl+rwfFhXHP7MHMfWbDCXk/mQA56ZFsL2vtdtzSqRncPH0AqVGhnfY9c/UYHvkkn82H89NjwvpvodTl9uAR8WXWzBgSS2WLlU92VjE4LpzsZB2CIPDP7wqZOCCKX88fSmmjmfn/+pGH5mZx07QB/GJqBuEa5UkTc/A+8Ww91ML+2jY8IjhcHo5+ltIoZchkXuHXKM/sbk+SoEtIBMmuilbu/N8uGoOYPfeW7CQd7U53j2IOXkfEQGIOkBIZ4lf8c8W4voc17C43uWWtVBvaEUXvbNbtEfGIIiEqOZMGRJMaFUpqVCj1Jhuzn/qB4Yk6Vu2t5+u7pwPwTX4tDpeH3VUGrpuUhlZ98iVHp1Fy+/mDKG00893euk6x+22HWrj6pS08eukIzhsce9Kvrz+RBF1CIggMVgc3vLaNNnv/p+uNS4tgZ4Uh6PErtlVw63mZATsTrdhe6Wt8kRmj7VL4AyGKIkX1ZnZXGnCLImqFjPHpUUw9JqQC3tn6TyXNbChqJFQtZ0CMltJGC6WNFjJjtJQ0WthZ0cr7O7xpv1/tqaWwro0H5g5BKZchEwQEgYD/9f7r8KoRUCtkKOUybE63b4zbI6KQC77/7wgce0QRl8dDRYvVt8/qcBOlVWGxu7hweDxquQy5TCBUJUetlKOQCSgOX1NhXZvvvV1HnVcQICJE1e9hmf5GEnQJiR5we0Re3lB6QsQc4GCDmYGx2oAdiDoYlaJHH6JEIRNQK+Ss2lePRilDEAQEvIIjiiL/WnvE2XRYYs9x21aLg62HmjHZXAh4w0pX5qT47AW6QiGXMXOIdzZrsbtYWVDH6NQIdlcaKG2ycNs7ub6xH/9qCiOS9MhlAnJBOCkt8nLSA1fs/nz82V0oKAm6hEQPvL+9khfWl5yw87fZXGREdz+T3lNlRCbA8itGcsnopIA2uk1muy8cdO3EVCZmRHOgzsTQhCPCbnO62Vne6surj9SqmDIwBn1I3ytctWoFV+akcMW4ZD7cUcUfvijAdrjgKVyjYHii/oyPTZ8pSIIuIdEDZnvwqX/xOjVjUyP5bl8dPeWPKWQC49IjaTbbfR2JusMjwsMf59PYZufOCwb77RNFkf/7NB+tSs7DFw3lhikZlDSaefzbA/x6Xha7Kg243CIhqq7DKMeLIAhcNSGV4Uk6bnlzByqFjHdvmURID4VSEv2HJOgSEj0wf0Qij30TXJriQ/OG8rOcFDYVN/HHL/ZysKFr98VEvaZPFZe1xs6Ohy/+UMJ3e+v579IJjM+IZO3+eqoN7Xx/oIERSTrunDUIhfzktBDOTtbz2R3T+Nfaoh5tDCT6F6lJtIRED6RFhzL6KFfDYwtmOhiWqPMVy0wdFMO395zHXy7L7jIeXWVoZ2gfWrwdGxs/1GThh8JG5g6Pp8lsZ0tpC+PTo7hhSga7/nAh984ZctLEvIMEvYac9ChKu1kXkOh/pBm6hEQQXDI6iTqTDZkg8N19M1h3oIF7VuT5jblpWoafeCvkMhJ1mi4bRYsilDSayUmPILfcEPS1jDjGVfHxb/dzZU4KV47rvJip6wf3x75y2Zgk3t1awejUiFN2DecakqBLSATBLedlctWEVPKrjOg0SjaXNHcac+zM2eHy8Ng3+7s9r9MtkltuQC7QrWXu0aRHH+kctLmkmWXnZXaqGD0dONlPBRJSyEVCImh0GqWvzD1R37nSMTXSP1Pl7S3llAbhHZIRHRq0mANUtFg51GSh2WynuKHttBTzDmLD1TR30X1Jov+RBF1Cog8ca3p18cgE9EctALZYHDyzpqjH82hV8qCbZ4A3M2ZEko4BMVq2HmphwoDTV8zBu/AbaBFX4sQghVwkJPrAsZ7lc4b5N0x5enURbbbuC5HGpkYQr1NTVB98H9IorQrl4VCG0+1hYGxY0MeeCuQyAYVcsqo+WUiCLiHRB/IqDb7/V8gEzs860gP3QJ2Jd7eWd3v8mFQ9M4fEcs+cwdicHvZUec/X4TXuEUU2FDUxe1gckaEq5DIBURRRyI48VGuUctqdbp/An46UN1uZmXVm+6OcSUiCLiHRS1osDp+bIcCsoXFEHW4JJ4oif/lyHz01DlLKZUwfHIMgCF6jq8xo376OxhGVLVYS9Zqj/ES8M93yZgutVidlTRbCNQqmDuz/IqH+wmB1nNJMm3MNSdAlJHrJ7kqDXyriJaOTfP+/el89PwXIgDmWsmYrueWtvgXN4oY2Gtrs5FUa+MfKQsAb1rE63J2OXXHrZNKjQ1k6LYPPdlXDwOP9RCcOqdnCyUUSdAmJXuI5ahFTH6Jk1uGQgt3l7jFNsYPGNjs1hnbf649yq/nPD/5+MYHEHLzpkB1ZNs7epMdInPWcvsE3CYnTFPtRftqTM6MIPxxSeOOnMsqae24mDYftWENVvtc2Z2DxDsSxDatP16ZjBqvjuEy/JHqPNEOXkOgluw8vYALYnB42FDXy95UHelXmHh+uIVxz5M+vN/1Iy5uPvE9KZAi1RttJ7QAULAfq2vw+o8SJR/ppS0j0ku1HGWr9UNTID0WNvT6HUiGwv/ZIk+XeFN8c/RQwJjWCLaXNp6WgH2qy8LNj2vhJnFgkQZeQ6AUGq4O9NT1b3fZEVWs7USFHBF3oRap2deuR2HtEqIomc/Cz+5OJRxRP65TKsxHppy0h0QuqWtv9Yuh9RRShrs3G/lrvzSFBF/wMu9XqL+Au9/Ffz4nAJS3YnnQkQZeQCBKrw8XTq3su5w+GiRlR1Jvs/P6zAuwuN4m96FXZZnP5ifj28tYuHR1PFR6P2KunDon+QRJ0CYkg+XBHFWsPNPTLuYoavOGW3IpWDtabSYwIXtDNdpef6df1k9Ipqm/r5oiTj8PtkcItpwDpJy4hEQQOl4dXN5b22/m8rZ29oZcXfyjhy901vTr+aMOrsWkRnVIZTzUapZymNnuv0jEljh9J0CUkguDtLeVUtrT3PDBIMmOOWO1+vaeWLaW9a0XXelSao9XhRhugafSp5oYpGbyyoZT8KuOpvpRzBknQJSSCYO7w+E4Oi8eDWilH28fzpUWFknVU67pth1oYnarv5ohTgz5UyV2zB1NjbOf1jYek2fpJQBJ0CYkgKG40d1mK3xfuv3AIf1w0AoArxwWXqx2mVvB/Fw9j1X0zfN2RWi0OzHaXr1r1dGTeiAQuG5vMKxtKyS3vfVNsieCRBF1CIgiK6vpv0TErPpyc9EiuGp/KeYNjGBIfxstLcrh+clqXx5yfFcv3D85k2YxMNErvzL6wro1vC+p8jalPZ6K0Ku6aPRhTu4t/rTmIyebs+SCJXiMJuoREEBzbfPl40IcofVa42cl6LA43c0ck8JuLhhGvU3canxmj5Q8LhxMX7s2EcXtEPt1VRUObjesmpfXrtZ1oZg2N4xfTM3jjpzI29KHCVqJ7JEGXkDjJ5FcfWSQM1yh8C5xhagW/nNHZC/eVG8eTebgzUVWrlTc3lTFjcCznDT4zG0foNErunj0YmSBIs/V+5vRbGpeQOA3Zeqj/Yr8dzTAAnC4PzZYjPi4jUzovbtYabGTGaFm9rx6PKPKLaRm+Gf6ZzPTBMYxK1fPulgpmDIlhRNLpt7B7piHN0CUkguD+C4dw64xMoO/hF0GAe2YP5o5Zg6hssVLRbMXqdFNvOiLo49Ii+fe1Y/2OW/bWDh7+eA/DEnXMz048K8S8A51Gya/OH0hjm523N5f5ujVJ9A1phi4hEQTDEnXEhKlRyWXsrTGyrrD38V9R9Frf3nfhEERRpLjBTLvdTWPbEUGXywT++9Mh32uVXMZ9Fw7mlumZyM6gWHlvOT8rjmaznee+L2bmkFi/lnwSwSPN0CUkgiQ2XM2dFwwit7y1z+fYWNzMI5/s4fGVB7jw6Q3srzP5FQkBjEjSkRIZwtCEcL64axq3zhh4Vot5B9Fhah6al0V9m53//FCC3eWmzebkQN3xu1ueK0gzdAmJXvDC+hJMtr6HBZrMdt7bVgl4Z+NWh5sVv5zsN+ayMcmMSNJzxbhk1Ir+K2Y6ExAEgUWjk6g32XhqdRERISpuOW/Aqb6sMwZJ0CUkgsTucvP25rJ+O5/bIzJ1YDQjkvQYrA62l7XS0GZjaIKOayd2nZN+LhCv0/Cb+UP5y1f7sbtOjtGXy+1hf20bu6sMHGqykBUfzlUTUk/4+/YnkqBLSPSAw+VBpZCxam89rdbjT7ELVytIjwklJkyNqd3J53nVRIaqmJgRhT709K34PNkIgsAdswby0Ie7eWHxuBO6GNxmczLt8e/9nr5Gp+glQZeQONv42X82UW+yYWw/PjGfOCCKCRlRDI4PY3RKBBnRoWdVxsqJIDpMzfTBMazd38Cc4fEn7H1WFtR1CqWdZhbzQSEJuoREN4iiSGmjBbO973HzQXFhTB8Uw60zMk/L3p+nO9dMSOPhj/cwMyv2hIVeGgP0dD0T77WSoEtIdMOK7ZV9FnN9iJLzBseweFIaUwbG9POVnTvIZQI3TEnn+XXF3DN7cJdPNe0ON29vKcNgdZKVEM7EAVFEa9XIZQJymYAoigGPLW5o461N5Z22n4lPT5KgS0h0w9ubO/+hB8PEjEgWjUnimglpKKTOPcfNqJQIWiwO/vFdIbefP7CTu2Sd0cYv397B7gDe6yqFjCS9ht8tGO4XthFFkaJ6M4tf3UpTgBm6TnPmyeOZd8USEicIh8vDE6sKcRxuAr2/1sS+2t7nQE/MiOKRi4cyNi2yvy/xnOb8rDhGp0Tw7PfFTB0YzflZcQCs3lfPwx/voeWYfP4OHC4PjW12xqZFAN7sotX76nlxfXHAG0AH/el/f7KQBF1C4jBymcCbm8qwuzw9D+4CnUbBhcPjJTE/QURqVTxy0VC+2F3Dqz+WctO0AeRVtnYp5h1YHG4ue+EnZmXFsfFgk19P1rMJSdAlJA4jlwkoZAKdH76DZ8rAaG6Ymt5v1yTRGUEQuHRMMrXGdv7xXSHj0yNJiwrtsa9qZUs7b3UTQovXqak32ZkxJJYLh8czIFrb35d+wpEEXULiMC0WB9bjaJOWoNNw+dhzr7rzVJGoD+HX87L4KLeKW87LYO3+Rn447LE+fVAMi0Yn8VV+LSFKGVaHmx1lrbQf9fv95YxM5o5IoKTBzPAkHcMSdbg8njP69ycJuoTEYdbsq0c8jtzjaYNimDciof8uSKJHZDKBqyakUtxg5ofCJhJ0GupMNm6Yks7cEQl+hUG3vLmdNfsbfK+vn5xOalQoOelHwmNy2Zkr5iAJuoSEj00lTX0+NkytYNKAqDMy1e1sYFBcGM8vHseDH+axvrCJMYcXQI9m0ZhkpgyMYUxqBANjtUSEqjqf6AxHEnQJicPsqe4646EnkiI0ZCdLDRpOJRqlnHvnZDEoLtzXru9oFo1OOgVXdXKRBF1CAqg2tFPaaOGtmybSbLHzRV5NUJ7n/7pmDD8VN7G7yohKIeWbn2oGxYXhcp+BNfv9hCToEuc8j3ySz66KVmZlxTJ9UAwymUBFc3uPgp6drGPByERmDY1jW2kL4vEE4CX6BYfLg8i5+3uQphQS5zT1Jhu1xnYO1LVxqMnCP1cV0my28+qPpT0eOz49ij3VRnQaJUkRIWekmdPZxsGGNoYl6k71ZZwypBm6xDnN2v0NrD88E9co5cwcEsvfVx6grQf/lguHx/Pw/KG02ZxUHs5/9kgz9FPO3hoTkwecu+3rJEGXOGepMbTz1uGGFSOT9Tw0L4v/ba3gi901vjEZ0aEsGpNMY5sNQRDYfqiFv1yWTU56JEq5jBCVHFEU2XaohVCV9Od0qqlubSc159x1tJS+gRLnJD8UNVJvtGE67HG+r9bEDa9v6zTuzgsG87OclG7PJQgC0WEq2h19twyQ6D/O5dRRKYYucU7yrzVF/PrjPdQYbYDXsOkvl2WToNNw9wWDkAlw/4VDmDci2KYKghRyOcXYnO5zeDnUizRDlzjn2FtjpKq13fc6M0bL7GFxXD8pjZ/npKBRyrlmYlqvmlEIghRDP9WUNVtIiTx3wy0gCbrEOYYoirQ73Gx+ZDZbSpsRRZg2KNr3mK5Reku/e9tZyO0RkZ3Dj/qnA1Ut7STqOxcUnUtIIReJc4oDdW1kJ+uRywSmDYph+uCYfom5bjvUwtDE8H64Qom+Uljfhqm9760CzwaOS9CXL1+OIAjce++9vm1ms5k777yTlJQUQkJCGDZsGC+++KLfcXa7nbvuuouYmBi0Wi2LFi2iqqrKb0xraytLlixBr9ej1+tZsmQJBoPBb0xFRQWXXHIJWq2WmJgY7r77bhwOf1/k/Px8Zs6cSUhICMnJyTz66KNSAcg5iiiKOFwe3yy8N7Q73AH/H2BraTNDE8LPaJe+s4HPdlXjdJ/jC9NiH9m2bZuYkZEhjho1Srznnnt822+55RZx4MCB4rp168RDhw6JL730kiiXy8XPPvvMN+a2224Tk5OTxdWrV4s7d+4UZ82aJY4ePVp0uVy+MfPnzxezs7PFTZs2iZs2bRKzs7PFhQsX+va7XC4xOztbnDVrlrhz505x9erVYlJSknjnnXf6xhiNRjE+Pl685pprxPz8fPHjjz8Ww8PDxSeeeCLoz2k0GkVANBqNffxJSZwu7K02inanu0/HmtodYnWrVaxotogH69t82+uN7eIH2yv66xIl+kheRav42a6qU30ZfpwK7eiToLe1tYmDBw8WV69eLc6cOdNP0EeMGCE++uijfuPHjRsn/u53vxNFURQNBoOoVCrFFStW+PZXV1eLMplMXLlypSiKorhv3z4RELds2eIbs3nzZhEQDxw4IIqiKH7zzTeiTCYTq6urfWPee+89Ua1W+36AL7zwgqjX60WbzeYbs3z5cjEpKUn0eDxBfVZJ0M8O3G6PuKfS0C/narXYxdJGs1jWZBZf/qFEdLuD+y5JnBg8Ho/4z5UHgv6bPlmcCu3oU8jljjvuYMGCBcyZM6fTvunTp/PFF19QXV2NKIqsW7eOoqIi5s2bB0Bubi5Op5O5c+f6jklKSiI7O5tNmzYBsHnzZvR6PZMmTfKNmTx5Mnq93m9MdnY2SUlHHNTmzZuH3W4nNzfXN2bmzJmo1Wq/MTU1NZSVlQX8bHa7HZPJ5PdP4vTHbHd1G0o7UNfGsH6KcUeEqhgQo2VHWSs/H5+CTCYthp5K3tlSzqVjks7p/PMOei3oK1asIDc3l+XLlwfc/+9//5vhw4eTkpKCSqVi/vz5vPDCC0yfPh2Auro6VCoVkZH+PRfj4+Opq6vzjYmLi+t07ri4OL8x8fH+OcKRkZGoVKpux3S87hhzLMuXL/fF7fV6PampqQHHSZwe/OeHEqpardz4+jaWvLYNV4AYasc2hbznr7ux3Ykoivzus3zW7KvvclyrxUG4RnFWemqfKXg8Ih/sqCQlKpTB8dKCNPQybbGyspJ77rmHVatWodEETg/697//zZYtW/jiiy9IT09nw4YN3H777SQmJgac0XcgiqLfHTbQ3bY/xnTM4rq6mz/yyCPcf//9vtcmk0kS9dOUHWUt/H3lAVbtrWNnhYF4nZoWq6OTF/aBujaGHzZsEkURg9VJpLazEIuiyMJnfyQiREV+tRG3R2TO8MCFRWsPNHDZmLPfX/t0ZXNJM3mVBuaOiGdgbNipvpzThl4Jem5uLg0NDeTk5Pi2ud1uNmzYwHPPPYfRaOS3v/0tn376KQsWLABg1KhR5OXl8cQTTzBnzhwSEhJwOBy0trb6zdIbGhqYOnUqAAkJCdTXd54dNTY2+mbYCQkJbN261W9/a2srTqfTb8yxM/GGBm8LqmNn7h2o1Wq/EI3E6YnN6ebRr/YxJjWCnRUGANwe0Ico/cY5XB6UcpkvLPLxzmrGpEYEFPQ6k43q1nbumjWYpIgQVIrAN32z3YVKIQtqxi/RvxisDt7ZUs7kzGh+df7AU305px29+kbOnj2b/Px88vLyfP/Gjx/P4sWLycvLw+1243Q6kcn8TyuXy/F4vI+9OTk5KJVKVq9e7dtfW1tLQUGBT9CnTJmC0Whk27Yj3hpbt27FaDT6jSkoKKC2ttY3ZtWqVajVat8NZ8qUKWzYsMEvlXHVqlUkJSWRkZHRm48ucZrx77UHmTkklk9vn8bHv5rCglGJLBqd1Cl1sKi+jSHx3hlcjaGdtfvrGRTnP6Mrb7YgiiL/XFmIPkTJojFJTB8cw4gkPWVNFqwO/9zm1fvqmNvFzF3ixLG5pJkPdlRyy3mZjM+IOtWXc3pyvKuqx2a5zJw5UxwxYoS4bt06sbS0VPzvf/8rajQa8YUXXvCNue2228SUlBRxzZo14s6dO8ULLrggYNriqFGjxM2bN4ubN28WR44cGTBtcfbs2eLOnTvFNWvWiCkpKX5piwaDQYyPjxevvfZaMT8/X/zkk09EnU4npS2e4eyqaBUn/W2NWGds73Zcu8MlFtWZRFH0ZkJc/+oW8aeDjX5jfihsEIf83zfibz7eI6Y//JU47tFV4n/WF/uNqTe2i9WtVlEURdHmdElpiqeAdQfqxW/21Jzqy+gVZ0za4tEcK+i1tbXi0qVLxaSkJFGj0YhZWVnik08+6ZdS1N7eLt55551iVFSUGBISIi5cuFCsqPD/I2lubhYXL14shoeHi+Hh4eLixYvF1tZWvzHl5eXiggULxJCQEDEqKkq88847/VIURVEU9+zZI5533nmiWq0WExISxD/96U+9Sm+SBP30os3mFGf+43vxj58XdPt7dLs94vrCBt+Yd7aUiekPfyWWNZl9Yxwut3jBE+vE9Ie/EjMf+VpMf/grMf3hr8R73tvZ6Xw2p0ssbmgTP9tZJbZa7P3/wSS6pLihTfxwR+Wpvoxecyq0QxBFqWyyO0wmE3q9HqPRiE537nZCOR0QRZG7V+Tx5WG/8j9dMpyl0wYEHGu0OiltMjM2LZJ6k41ZT6zH5nSz6TezSTjs9/HyhhIe++aA33GCAK/fOIHB8WGEqf2zWNwekbe3lLF0auD3lDgxvL25jOsmpSM/w9JDT4V2SKs6EmcM/1p70CfmwxJ1/Hx819lHhfVHWpFFhqr41cyBJOpDWPzqFq8XusnGv9Yc7HTc5WOSmTU0jpTIUARBoKrVSlmThdzyVjaVNHH+kM7ptBInFlHkjBPzU4Xktihx2nOoycJLP5SwYnulb9sTPx+FVh3469tstpMcGeLzbFEpZNw1ezB3zR5Mi8XBda9swWB1YjnGk2VgrJZ//GyU77U+RIk+RInbI3KoycKOshbOmx97Aj6hRFc43R52lLdy1YTUPnnwnGtIgi5xWuHxiPzfZwWMT49kQKwWhUzgmpe3YHW4kcsEfr9gGGXNVkYk6bs8R1VrO6NTIwLui9KqWH7FSG4M0J1oyeT0gKmIcpnArKFxmGzOPn8uib6xtbSFQ01m3t5czrIZmaf6ck57JEGXOK14YX0x722r4L1tFb5tCToNb900kZgwNRkxWmxONyWN5oAFJZUtVpJ7aHIwNi2SNffP5MGP9rCropU2mwu5TGDJlIz+/jgSx8nKvbXUmWyolVJ0OBikn5LEacMnO6t4YlVRp+33XziE8RlRZMRoAW8TCgE6zZhFUaTZ4iAmrOfCsLjDN4lPb5+GQiYQplZwsKGNepMtoCeM0epEIZP+XE4mJY1mShotpEVpWTI5Pahj3B6R0kYz28taTvDVnZ5IM3SJ0wK3R2RDUWOn7RMHRPHz8Z2bNGfGhmF3uWmzOQnXeKtDixvMZPXS02NAjJaLRiYydWA0g+PCyas0IOAV/KNZta+Oy8cm9+rcEn1HFEWeWlVEblkLDrfIl3tqWTS6e6uF0kYzgiCQFBFC5jlqByAJusRpwVd7ajoZLMkEePTSEV367qgVcmwOD26Pd0bd7nQTourdwplcJvDM1WMQRRG5TCAnPRKD1cGeKgMeEYYn6qg32YjXaaRS/5PIiu2VlDaZcbi9v9s/fbGXWVmxvpv30RTVt7HxYBMzhsQw6BwV8g4kQZc45awsqOW+9/PwHBPpmJwZzdCE7vN39aFKGtpsVLZYGZMayXvbKhiRpGNUSkTQ7+9NiTty04gIVaEPUfJNfh3rCxuICFVyoxRfP2l8v7+ez/Oq2V/b5tvWYnHw4voSfj1/qG9bY5udr/bUkBUfzk3TpdoAkARd4hTTbLaz/NsDncQcYOGo4NwM5YJAY5uD4gYzf/i8AIBv7zmPQXHh1JtsvLKhlEcuHtarXGZBEFgwKpHccjVyQZC8tk8SPxU38urGQ2wp7RwDf/2nQ1w/OZ3IUBVf7qmh3eFm8aR0VArpyakDSdAlThntDjeLX91KebO10z6lXOC8wTFBneetzeW8+EMJceFqnIcf0a96aQs3Tx/AKz+WYrA6abO5WH7FyF43o6hsaedSySb3pLD9UDMvrCthU0lzwP02p4c/f7mXy8Ykc9mYZEnIAyD9RCROGX/8ooADdW0B94VrlLy/vZK2HnK/6002Xt5QisPloaq13be9xeLgn98VYrB6j39/RyV/+nIvnmMeBewu/+KiQEiz8xPPropWnllzkJ+6EHOVXMY1E1J55KJhXDQyURLzLpBm6BKnhE93VfHBjqqA+yJDlXzwy8kk6EOoMbTjETv7nHfw5KpC2p09izJ4Z/IKmYzfLxzmE2mFTEZli5UQlbxTuuOBOhPxusCNXCT6B7dH5L1tFXy2q5od5a0Bx/w8J4X75w4hUd99fYGEJOgSp4DdlQZ+92lBwH2TM6N48qoxJEd4/3iHxIdzqMkSUND315r4MDfwTaErXv/pEBqljIfmZSEIAnKZQGpUKEark/JmC2lRXg8XURTZeLCJpVMzev35JIJjf62J574vZldlKzUGW6f9EwdE8bsFw3q1wH2uIwm6xEnni901nXxUOvjljIE+Me9ArZBhc7r9vDxEUeSxb/bTF6/QF9aXoFbIueuCQb6Yuj5USbhGQVG9mbSoUFZsr2DhqCQpVfEE4PGIvL2lnK/31LItQAFQiFLOby4ayg1T0qVwVy+RBF3ipNPRQehYzhscw/lZnc2vkiJCKKzzdh7q+ANfX9TIxuKmPl/D02uKEBG5d84Q3zaZTCAzVsuz3xfzi6kZAdvUSRwfjW12nlpdyJp9DTSa7Z32Xz0+lbtmDyIlMvQUXN2ZjyToEieVNpuTV3881Gl7ZoyW564d1+WMbFBcGCWNZrRqBXHhGuxONxEhSlqtfTfMqjP6P+bbnG7e3VrBL2dkdunkKNE3RFFk1d46VmyvZF1h54rg2UPjuO38gUyQWssdF9K3VuKk8ty6Yg42mP22Jeg0vHXzRPShgRc+wVv8MygunMoWK5tKmrC7PEzIiGLVvs7NxINBKRdYdFQ6orHdyYc7Krl+crpk09qPuNweVu6tY/W+enaUtVJtaPfbPzkziscuH3nOlur3N5KgS5w07C43HwbIbHnq6tFBP2JHh6lYX9jA/OxEUiJD+yzoLo9Ivck7Q68z2thc2sTN0wdIMdt+orHNzup9dfxQ1MjOckPA8MrIZD2v3ThBehrqR6SfpMRJ46PcKlosDr9ts4fGMXVgcAVEAHmVBkYk64kNVxMTpiIjOpSyAIVJXRGuVhCv15ASGcLj3x7AanejlMv4+fgUScyPk80lzXyYW0lTm51Gs53iejPOQCXAeNNQn79unCTm/Yz005Q44XTY0b6+0T92HqZW8KdFI4I+T7WhnWazg4WjEgFvwc/Px6fyz+8Kgzp+XFoEr944AZng9WvZXWlg26FmbjkvUxLz48DmdPO3b/azqqCO+rbOM/FjkcsEXlqSQ1q0tPDZ30iCLnFCMbY7eeCDPFQKGSWNFr99//zZKFKjgvujFkWRbYeamTE41k98fzVzIAXVRr4tqOv2+LtnD+auCwahPJyGWFBtpKLFyrIZA3v5iSSO5bWNh3hvazkuT+D9yREh/HJmJuPSIrntnVyWTs1gcmb0yb3IcwRJ0CVOGCsL6rj3/V3YnJ3/0q+ZkMpFIxODPteeKiOD48KJPqaaUyYTgprpyQXB56dY2WKlrNnCJT34a0v0zEe5lXyyqyqgmA9NCOemaQO4fFyy70b6ye1TMbW7TvJVnjtIgi5xQnh94yH+8vW+Lgt/zhscfLPlNpuTiharL9RyNHmVBl4LkAZ5LCu2V2CyOfnFtAx2lLeyoBc3E4nOGNudvLi+mE92VtNwTJglJkzNKzfkMDYtstNxceEawtVuDtSZyIoPl0Jd/Ywk6BL9zme7qnn0q33djnl+XTHj0iOC8uf4tqCO2UPjOv3xP7+umDc3leHqYuGtg/vmDOGOWQOxuzyEKOVoFEbqTbagwz0SXjwekQ0HG/n+QAN7q03kVbbiPupHH6VV0WJxcNvMzIBi3kGISs7guHAK69tI0GmICJUKuPoLSdAl+g1RFPm2oI5ff7ynx7H7ak38/rO9vHrj+G7HFda10e5wdwq1HGqy8PTqoh7FfHx6JHfPHoQgCL4y/rFpkZQ2mSVB7wVf76nhy921bD3U3KmYKztJh9MjUtliJS0qhKsmpPZ4PrlMYGiCjsoWK0q5TMp26Sekn6JEv3Hr27ms7kVe+NbSwFapHYiiyGd51Tw4N8tvu93l5uGP9/Qo5gAPzM3qNLOP16nZeqj795bwYnO6eXF9Cf/bWtEpl3xsWgRGq5OCGpNvW2pkKOG9EGfpptq/SIIu0S98nlfNDwGaPHfHgFhtt/u/ya/jynEpnToNPf99MdsO9dzVPUGnYXJm51JyQRB8fUglusbl9vCbj/fwbUEtdpf35yUA49IiaWizsavC0OmYn0qaWbWvnnkjEk7uxUoAUoMLiX5AFEUO1ptxdJW31gXXTkzrcl+d0YbF7mJQnH9JeF6lgf/8UBrU+celR3S5KNsXl8ZzjS9217B2fz12l4hMgJz0SBIjNORWtFLZ2t7lccu/2d/r74JE/yAJusRxIwgCD8wdws29bNTbUXp/LDanm7e3lHFlTorfdrvLzf0f5OFwBycW3+TXcc3LW/j7ygPkVxl7dW3nOpUtVj7KraLd6WZCRiRxOg255YF9y4+lrNnKW5vLTvxFSnRCEnSJfqHV6mR9YUOvjlEE6O8piiLPryvmlumZnUIt/1xZSOkxxUk9sa2shU93VqML8Y8uyqRvfpe0Whw88d0B7E7vYvT2stZOzpQ98cqPpUG195PoX6SvtcRx83leNYue29ipErQn3txczud51X59Pv+3rYIpmdEoj+kZuam4if9uKuvT9b1500TSo/3j9QpJ0QOyuaSJ//s0n59KmsmtMFBv6rmUPxD1Jjvvb6/s56uT6AlpUVTiuPhydw0Pfrgbp7v3QenGNjv3rMjj013VvLQkh40Hm9BplEwdFIPJ5qTZbCc6TI3F7uK3n+b3eSFzQ1EjA2K0vsbCDpcHmVTQ4ofV4eK1jYf4ZGcVh5qCNzvrjj1SmOukIwm6xHHx0oaSPon50awvbOSG17YRG66mpNHC1IHRRIepsbvcNLTZeHF9Sa8cFQF+df5AUiJD+Pu3B9hwsJH9dSb+tGgEOo2SWkM7SRFS8+cOPB6RP36+l49yq+jPteK8SkM/nk0iGCRBlzgunr9uHMve2kFRvbnnwV2gVcmZMyyeZTMy+d/WCq5/bRtv3jSBuHANarmHz3ZVB30uQYD3b53CuLQIXB6R5IgQzs+Kw9ju5Dcf7+Hh+UOpNrQzOD68z9d7tvFRbhWbSpr7VcwBKlqseDyir2+rxIlHCiRKHBfp0VoeuWhYn4/PjNHy2R3TuDInBbPdxXWT0vjF1AyueXkL9SYbb28pw9AeXJs5hUxAFOG+9/OoNdqoarVyflYc4PXffuzykVS0WPkqv4aYMKncHKDF4uDr/NpOnYT6A4fLQ5OlbzF4ib4hzdAljotDTRYeDqLUPxAzhsTy7LVj0Ycocbo9FFQbGZao46oJqVQb2pn1xHqsjuAyJTJjtbx98yT++tU+kiNCqDXamJDh7ycSEapi0oBonlxVJJlCHeZfaw6SW95zkVZfKW20EBcuhbdOFpKgS/SZQ00Wrnl5cye3vQ5iwlQ0mR0B9y0ancSTV4322aoCrCts5KnVRfxiWgZWhytoMQe4dHQy+hAlL16fgyiKHGqyBBRtpVxgbFpE0Oc9m9lR1sL+WhNm+4lLL1TKpRvnyUQKuUj0iQ4x7yqtTaWQ8cYvJvLqDeOJOcZY62c5Kfzlsmy/rBWlXMa9swej0yi56Y0dvBKEJW4H4RoFS6dmYGp30GJxIAhCl/Hg7WWthGu6bkZ9ruDxiDz3fTHby07c7HxQXBjjunFdlOh/JEGX6DVF9W1c+/KWbnOUH7hwCOEaBdMHx/DFndPIOrwIOW9EPI9fMRJ9iBKH24PNeWR2KJMJfWo64XR7eGtzGRGhKqK03ti4vIuQyhe7qxmTqu/1e5xtbCxupNFs7/eF0KMpbjCzvaz1BL6DxLFIIReJXlFQbWTxq1sxdrNQecnoJG6dkYkoQlmzhZTIUP77iwn8feUB/n7lKJ+NrU6jxGh1IgigVsipN9n4w+cFvb4mm9PD7iojB+vNRIepsNjdDIgJbPw1b0QCwxJ1vX6Ps4kaQztvbCpj71Euif1NtFbF53dOIykIv3uJ/kMSdImgya8ycv1r3Yu5PkTJHbMGIggCggCZsWEU1bfhcos8emk2jW32TpaprRYnEaGw7K0dXcbjeyJcoyA9OrTHZgmtVmenENC5xKEmC7//rIC8yhM7c75uUhopkZI17slGEnSJoNhU3MQv38mlzRa4H6RKIeOuWYO4afoA1uyvZ2iCdxbscHkw212+WKooijSZ7YSpFbg9Iu1ON/E6Nf/9qazbykK1Qoa9Gwe/eJ2GsCB8uMVzzGaxxeJgzf56dpa30thmx2B1sK/WRHuAPq/9hVIusGRy+gk7v0TXSIIu4WPFtgqM7U6um5Tmt3C4p8rAsrd2YOkm6yRaq2LGkFi0agWXjkkGwO0R2VXRysQBRzzJI0JVNJntlDVbkAsCr208RGmjhRZr4GwYpVzgpukD+OWMgbywrpg3ArScu3ZiGr+5aGiPn+9cEnOrw8Xz3xez9VALVoeLA3VtnCwL+EWjk4nTSamKpwJJ0CV8fJ1fy48Hm3h+XTHXT04nNSqUgmoja/c3kKDXcKjJ0kkUfnPRUFbvq2dksp5RKUcWG0VRZEdZC+MzojqlD8aEqTG1O/nVOzsprG/r9pqWXzGKS0YnolbI+d3C4UwbFMMv3tju269SyLhvzuCgPl+dyXbW50S3O9x8taeGVfvqOFDXRmVL/xcM9cSNU6XZ+alCEnQJAKparWw93AXIZHPxwvoSv/1ymYA+RNmpn6RMgHdvmUSt0YbZ7iJco0QURXZWtDIuPbKTBW4HmbFh/O3ybH717k4aj4mba5QyFo1OIjpMzc9yUrA53RisDkJUcp5fV+w3duaQ2KBng3uqjEwbFBPU2DMNp9vDM2uKyK82UljbRn0f1yKOl3kj4hmVEnFK3ltCEnQJvK3G/vD53m67zLg9op+YXzE2GWO7k8WT0tEo5QyI0dJsttNstlPZ2k52st6vaCjQ+TaXNNN0VJ9KtULGY5ePZEh8OANitdicbqwOF6EqBXaXh40Hm9hR7r+Yd103XY+OxeZ0BxVnPxN5Z0s5H2yv6tT382RzxbiUngdJnDDOzm+3RFB8lFsFeP3MfzzY1KtjI7UqHrtiJBql3LctOkzNjrIWhifpUCvkXR5rbHdyz4pdrC/070E6KC6MK8YlIwgClS1WwjUKnC4RVN7F1Qc+3O0be1F2AvtqTX7x+XMVt0dkfWHjKRfzJL2G2UPjTuk1nOtIgn4O89muajYW907IwSumGqUM9TFNKPbXmhiSEE6oquuvlc3p5pqXt7C/1j8HWhBg2XmZCILAyoI67l6xi3dvmcSEDK9gV7ZaCVMryE7S02Jx8OdFIwB8Huc94Qqybd2ZyLcFtbTZgjMwO5FcPyXdV2MgcWqQBP0c5rzBMb0WdI1SxuNXjEIf6l8+v7fGiFwmdBL5ozHbXfzx870+MR+bFsFdFwxib7WJhaOTGBCjJb/K6O0b6vLw16/28fmd0wFvp/nP75hGWbOVkcl6mg+7+HVVEXo0oijyYW4VFw6P79VnPRMoqm/jwx1V7KwwnPD3So4Ioc5kI1QpZ+KAKKYMjGZyZjQhKjkbDzZx6ZjeV/lK9C+SoJ/D3Dg1gw0HG/mpuDnoY7QqBSVNZj+Pjv21JkTRW1TUVWZgSaOZZW/t8PUEHZcWwWs3TiBS63VADFHKaTLbWfbWDqwON1qVnL9clo3B6kCjlHu9Xt7PY9uhFp6+egzzRiSwv9ZEYjeViDsrWiluMCMA52fFnnUFResONPDqxlI2Bfn706rknD80jouzE8lKCKO82Upli5WKlnbKmi1UtFipaLF2WksJVcmZkhnNS0tyKGu2khEd2mkmPjA2rN8+l0TfkQT9HEajlPPsteOY/eT6TtkrgRAEb873oLgjf7yHmizoQpQ+V71AbeIO1rdxzctbaLZ4c80nZETy9s2TfPF37eGFyi/yarh91kA+2FGJ0yUyPFFHXqWBP36xl7FpEfx4sAmtSs7YtAjkMoFIrarLBgpf7q4hI1rLVeNTe/+DOc0RRZHXfzrEyoK6oLxSFDKB3y8cztUTUv3WPAbFdW7y4faI1BjaqWyxUmeykR4dyqiUCN8C99G/e4nTD0nQz3GitCr+c30OS17bhqOHOPOLi8cxfXCsL1OkssWKXBBIjvDOko3tTkKU/ouhDpeHO/630yfmOo2COcPiabY4fMd18PPxKagVclbtrWdjcRNXvriJonoz7U63z3fE6nSzt9o7M7c53QSKuDSZ7bTZXIxMOftMuDwekd9+mk9+tTEoL5ZQlZwXFo/zNfroCblMIDUqtJM9g8SZgbSCIcGkzGjGZ3Rvc3r95DQa2+x0TIZrje24PCJp0Uf+8PUhyk6z5RfXl/ja080ZFsemR2bzy5kDCdcoqGzx7xMaqlLw0Ee7fXH93VVG2p3+1amiCJ/uqqbOaEOrUiAIAgarg8oWK7XGdprMdh78cDeXjT374rmiKPJ/nxWwYnslNqc3LNUdMWEqVtw6OWgxlzjzkQRdAqBLjxaAwXFh3H9hFovGJNPYZudQk4V9NaZOjoYF1UYa2my+19/treOZtUUA3DglnZeWjPfN7nUaJV/tqSX3cF65KIr89pN8Ps+r8R0fr1Pz2OUjSdBpGJrgDQ+EqxWMz4iktMlMgt5bUNRqdZIaFUqiPoSYMDXzRiR0m2lzpiGKIgfr27jv/Tze21bB6NQIzHZXl3HraK2KrPhwPvnVNKnI5xzj7PnWS/SZBpON/OrAxliCAI9dMdLnM95qcaAPUTIyWc/uSgOjUyMAWLXXm2qYFR/OJ7dPw+Xx8MfP9yKK8LsFw7h5+gA/C4A3fjrEM2uKeObqMdSbbLyyoZT3d1T69seEqXn3lkkMigvn4pEJyGUC+dVGDtS2ccW4FA7Ummg224kOU5MUoaHV4iDy8DWeLT2Jje1OXt5Qwme7anw9P+cOj+fJq0azpbSFW9/ewYSMSLaXtTI0IRyNUo7N6eb3C4czaUCUlEJ4DiIJugTf7avvct+Syem+XHCAjKNm5Qq5jB1lLeRVGvjbN/sRRW+Y5FCTmU92VmOyOXlh8TguHpnod87CujY+2FHFh7dNYVRKBM1mOzsrjizuhakVvHnTBN+iXYcl7tSBMUwdGMO+GhMRoSpkgoAoihisTkKPCj9o1QpaLA7fTehM5PO8av7y1T6sDjeXjU1m8aQ0hibofFYKFw6PZ8NDs2i1OAjTKMiI1gZcHJY4t5AE/RzH5nTz+sbA7d5iwtQ8PL9rF8MorQqBMH798R6/dMXiBjP6EGXAxbjtZS3c934e/7hylC8cEB2m5pUbxjP18e+xuzxcNT6V4Yk6ao3tAdMShyfp2FXRytoDRgbEaBmbGuEnZvNHJPD+jkoWTzrzTKIcLg+PfrWXlQX13DN7MJeOTUbXRcs8afFS4lgkQT9H8Xi8qW//+aGky0bO101K86UUdkVEqJKpA6N9+eV/vSybeSMSAjZo/ja/lt98ks+bN01kzOFQDXitXu9escvnd/76T4fYVNLE4snpXfpqj02LpLzZmzN97MxUIZeREhlKRbPVb9H2dKek0cyDH+4mKz6c1ffN8IWQgkUUxYA/d4lzB0nQz0Ea2mzc935etwVFI5J03H7+wB7PlVdp4J0tFYA3q2Lu8HjcHhHFMd3ePR6RlzaU8uFtUxgSfyT/2en2cOf/dvmuJT06lLhwNdvLWnlxXTGLRiV1qkrt4LLDBmG55a00mGwMTdT5FmozY0L5/kA9N0zJOK1FThRF9te28fnualrMDp69dmyPnX5EUcQjgsXhYkdZC6LovYlVNFuoM9lI1IcQrlEQpVUxNi3yrDUkk+jMca2aLF++HEEQuPfee33bvK3HOv/75z//6Rtjt9u56667iImJQavVsmjRIqqqqvzO3draypIlS9Dr9ej1epYsWYLBYPAbU1FRwSWXXIJWqyUmJoa7774bh8N/tpmfn8/MmTMJCQkhOTmZRx999JxqdHA0dpebT3ZWMf+ZH7sV8xClnBcX5/gVoRyLKIqYbE4Kakw+wWgyO7jqpc1M+NuaTj/jHeWt/Of6HD8xb7E4uPf9PL4/0ADA+PRIXlqSwzu3TCIzRkuN0cZbm8u6/Uz6ECXDEsN5b3slpsOt8XZXGvjTF/tYsb2SV34spaTRHNTvvMbQzpbSZoxBFFn1B2VNFu58bxdPrykiLSqUf/xsVEAxN7Y7+am4iTd+OsQ3+bW8sL6EBz7Io9ZgY/qgWGYPi2fmkFiWTMngoXlDuXxssq8Y6JOdVTy9uohXfyzlYA/e8xJnPn2+dW/fvp2XX36ZUaNG+W2vra31e/3tt99y8803c+WVV/q23XvvvXz55ZesWLGC6OhoHnjgARYuXEhubi5yuVdErrvuOqqqqli5ciUAt956K0uWLOHLL78EwO12s2DBAmJjY9m4cSPNzc3ceOONiKLIs88+C4DJZOLCCy9k1qxZbN++naKiIpYuXYpWq+WBBx7o60c/I1mzr54/f7U3qIYHC0cldhuqEEWRP32xl9SoUFweEbPdRWy4mqvHp7L1UDO1Rhv1JjsJeg2iKPJRbhUx4WpfmiHAu1vL+b9PjzSEvmJsMg9fNJT4w97mseFq7C4Pyh7Mt5xuD2abiz8vGsGL60t4+OPdHKgz+/YfrC9kUFwYj397gHC1gqmDYpg0IIrUqFBEUWRfrYnCujYEARJ0IaRFh7K+qAG700NadCgTM6L6fbHR7nLz5e5aihvMXDE2GYPVyfiMSITDi7w7K1ppNjt8C6BRWhWD48MYlxZJyOHF38/zqslK6FzpCd5F4QFqBQNitEzOjAag2Wznm4I63tpczp8WjejSp17izKZPgm42m1m8eDGvvPIKf/3rX/32JSQk+L3+/PPPmTVrFpmZmQAYjUZee+013n77bebMmQPAO++8Q2pqKmvWrGHevHns37+flStXsmXLFiZNmgTAK6+8wpQpUygsLCQrK4tVq1axb98+KisrSUryFpE8+eSTLF26lL/97W/odDreffddbDYbb7zxBmq1muzsbIqKinjqqae4//77T+tH8f5me3lL0N1r5o1I6HZ/VWs7b24uRyZ4vV1UChkzh8Ty4LwsACqarbhFEY9HxCOKZCWE++VD211uXv3RuxCrkst4/MqRXDEuxc9D5PZZg5gxOKbL35EoijRbHMgEwdfgosVi9xNzgDnD4rlgaDxD4sPZVNLM5MwoypqsbC5pZk+VkZlZsVw2JgkRwSdyyYdb6B1qsvBRbhUymdBvXjDby1o4WG9m0Zgk35PN3hojf/h8L1fmpKCQCQyJDyMnvXtb4N5+d6PD1CyZnE5li5Xff17AleOSGZsaKWXGnGX0KeRyxx13sGDBAp8gd0V9fT1ff/01N998s29bbm4uTqeTuXPn+rYlJSWRnZ3Npk2bANi8eTN6vd4n5gCTJ09Gr9f7jcnOzvaJOcC8efOw2+3k5ub6xsycORO1Wu03pqamhrKysoDXbLfbMZlMfv/ORIobzNy7YhfGdic/Hmzk9vMHEdFFLPpoBsRoueAoT+v8KiMPfribBtORgqFIrYqIUKUvjrvi1skMT9T59qdFh+J0edhbY0Ihl/mJucXuYtlbuRxqshARquTtmyf6miJ0WOG+v72Cp1YV0mR20GJx+L03eG8IjW12orUqX2piVauVNfsbOn2ejkrTlMhQrhqfSkpkKNMHx3DVhFTuvXAw3+TXMufpDXxwVA780T+LqyakcumYJPZUGvjb1/tYd6AhoF9NIMx2F3uqDHy6q4r3tlXw/vYK1AoZ101K84trD4wNQwQWjU7i4pGJAT1WjsbmdBPTx5TM1KhQfrdgGGVNVp79vpjdlYY+nUfi9KTXM/QVK1aQm5vLjh07ehz75ptvEh4ezhVXXOHbVldXh0qlIjLSv9Q8Pj6euro635i4uM7lynFxcX5j4uP97VAjIyNRqVR+YzIyMjq9T8e+AQMGdHqP5cuX8+c//7nHz3a602y281leDd/trUcuE/jk9qksnpTG8+tKuj3u0jFJyGQCxnYnf/lqn68JRnmzhfdvnYIgwG8+3oPhcJz50UuzGZcWiVal8DPKSo8O5Z2tFX5+KqIo8qt3d7KhqJHrJ6fx0Nyhfgue6wobeOK7QsqaLFgcbuY9s4FPb5+KTBBobLMTE6ai3mRHq5Z7UyaPmqV2LMwejVIuMKcby9yYMDW/On8g/1lfwjUTApt47axoZUNRI5Ut7Xy8s4ov8moYmqgjSqsiJTKEtKhQ3B4RmSDgPipOX2u0odMomJwZzYKRSd36tmuUckztTtweMahQSGObnfEZfW/sEapScGWO9ya6sqCObYdKGZ0awfh0acZ+ptMrQa+srOSee+5h1apVaDQ993F8/fXXWbx4cVBjj025CvRI2R9jOhbHunpkfeSRR7j//vt9r00mE6mpZ55j36TMaC4bk8Rnh0vp5z69Iajjdlca2FLazK8/2kPFUV4rO8pbya1oZWxqBA/OzaKqtR25TGDmkFhcbg+pUSFUG9p9edGC4O1BanO60SjluNwefv95ARuKGhmZrOfuCwb7iXmNoZ17V+RhbD+yIHnz9AGkR3uzVgxWBzsrDIxLiwDg87waFo5K9FVDOg8biwkC/Of6HH77ST7DEnVMHRgd0JHR6nBRZ7Sx+NWtzBsRT4vFgUImw+nx+EIrPxU38fTqIh69NJvhSTqK6tvIrzZS39bIBUPjePrqMcH+OnpkRJKO0kYzg+O7n50DlDdbiQ3vHyvg+dkJuNweth5q4dGv9jE2LYKLRyZ22z5Q4vSlV4Kem5tLQ0MDOTk5vm1ut5sNGzbw3HPPYbfbfYuaP/74I4WFhbz//vt+50hISMDhcNDa2uo3S29oaGDq1Km+MfX1nasXGxsbfTPshIQEtm7d6re/tbUVp9PpN6Zjtn70+wCdZvcdqNVqvxDN6YTHI/L37w4wY3BsUM2OkyO79grvinWFjaw7pjUcwE3TBvgqRjNitLy3bDJNZjupUaFUtlhRymWd/GCGxIexo6yV1KgQHvtmP9/treemaQO484JB7K81+WLfbo/II5/kY2x3cuHweKK1Kt7fUcn1R+Wge6tFLVgPd7V/+ON8nltXzJLJ6czKimNHmbfB9f9dPIwxqRG02VxsLG5i9pM/MDJZz5d3Tfe7tn+tPchLP5QC3tl9brmB31w0lES9hr01Jsw2F1/srubvPxvl80z537JJlDdbWb2vnpz07s3MesvQRB27q4xBCXpihKbbDKTeopDLmDYohmmDYjhQZ2LxK1sZkhDGvBEJTB0YIy2gnkH06jY8e/Zs8vPzycvL8/0bP348ixcvJi8vzyfmAK+99ho5OTmMHj3a7xw5OTkolUpWr17t21ZbW0tBQYFP0KdMmYLRaGTbtm2+MVu3bsVoNPqNKSgo8MuqWbVqFWq12nfDmTJlChs2bPBLZVy1ahVJSUmdQjFnAh/mVvLSD6X86p1c6ozeuLKx3cnt7+by3rYKv9iu55imzsfL13tq/dwRQ1Ry32w8NSqUBL0G2THfJq1KwfTBMaRGhtLQZue6SWkMT9Lx6a5qosOOxIBfXF/MD0Xem8hdFwzi8StHsfk3s/3OZXO6SdRr2FzSzJ++2Ad41wn+/OVe5v9rAzOHxPK/ZZOYNTSOJa9t9bMCPrratcXi4F9rDvoWZTtYOCqRmUNiGRIfzswhsSwYlcjfLh/JyoI6vtrjfcoJ1yjJTtZz34VDmDEktq8/yoAMT9QFnVbYXVeo42Vogo4PbpvCdRPTKWkw88Xu6hP2XhL9T6++GeHh4WRnZ/v902q1REdHk52d7RtnMpn48MMPueWWWzqdQ6/Xc/PNN/PAAw+wdu1adu3axfXXX8/IkSN9i6zDhg1j/vz5LFu2jC1btrBlyxaWLVvGwoULycryZlLMnTuX4cOHs2TJEnbt2sXatWt58MEHWbZsGTqdd4HuuuuuQ61Ws3TpUgoKCvj000957LHHzsgMF5PNyd9XFh7+fxdXv7yZbYda+N1nBXyTX8cjn+Qz/5kNfH+gHlH0hhj+dlk27y2bzIJRiT2cvWcWjErs5F/eE7oQJa0WBzKZQFSoCq1KTrxOzU3TMsiMCaPa0E5Jo5l/ry0G4LHLR9LucJNXacDqcKEPORKSMVidRIaq+O+mQ36Wuh7RG664f24WUwfGsGJbhc+uF2BgrJYJA47Mpm94fStPrynyu/mFquQBZ9wxYWpGpej5dOeJF7URSTq2lAbXecjlPvF1FMOTdCydNoC0qNBeLQRLnFpOSAnZihUrEEWRa6+9NuD+p59+GoVCwVVXXUV7ezuzZ8/mjTfe8Jvhv/vuu9x9992+bJhFixbx3HPP+fbL5XK+/vprbr/9dqZNm0ZISAjXXXcdTzzxhG+MXq9n9erV3HHHHYwfP57IyEjuv/9+vxj5mcJLP5TQYjnypFHebOWqlzb7jTnYYOamN3YwOTOKO2YNYvqgGKYMjGbKwGh+OcPAVS9txubsXbNkuUzgX9eMYeGonv3FBfxvkvoQpS8m/tx143w51AAqhUBsmJpFz230zab/vfYgK26djFIhIyLEPyMnQa/h3a3lAQuijn7fS0YnUdZs5YfCRhxuD9FhaiqarXy1p5YwtYKC6s5ZSy8sHsf4AIK+oaiRP32xl2evG9vjZz9eNEo5ISo5VrsLtVKORxRRyISAE4+QHnzQ+5Oc9CgcLg+bSpo4b3D/PpVI9D+CeK6WTQaJyWRCr9djNBp9M/+TTZ3RxvlPrOu1GI9O0fOnRSMYmxbJwfo2Hv1qHz8e7F1T6NvPH8ivuzHoOppqQzs6jYLwLsykjuW1jYf4y1fe8EmiXsM1E9K4dlIqNQYb2Uk6P/vX8mYLN7+5gxunZvBjUSNrDzSgkstod7qRywQmZ0axcFQSP8tJwe0RueH1beRVGBgYF0aDyebrmHQsoSo5W347288Ay+n28NTqIg7UmvjtxcOCimsfLzanm2mPf4/T7UE8/DpBryE+XMN/luT45cCfCo+aDh/8iQP6nl1zrnEqtEMS9B44HQT91x/t5oMdVT0PDIAgwK0zMilrsrB2fwOuXjw6R2tV/PDrWUF7gYiiyMEGs195f1dYHS6mPv69L/0xSa9hWKKOW2dkMixJ5yewPxU3ccf/dnL/hUO4YUoGoihid3kQBPjzl/v439YjKYuD4sJwuj2UN1uZkBHJHbMG8a+1BxHwhm1KmyydruWOWQNZdl6mz6b3i901VDRbuPOCwUF97v7grc1l/OHzvQH3pUSGcOOUDG45z+spX21o73X4qz+oMbSzdn89S6ZknPT3PhM5Fdohufac5uSWt/RZzMHbsu2HwkZKGs29EnOAK8Yl98rYSRAEZEGsTThcHm5/dydzh8djc3oYmhjOBUPjWPzKVrKT9T6Hx4P1bWwra+Hp1QcxWJ288mMp105MQymXoVHKabM5WbXXPxuquOFI/Hx7WSujUyL49PZph/e18dbmcgxWJ9WGdgbFhnHD1HTabC6+21vHmNRIqlqtPLv2IMOTTt7N2+Z088amsi73V7W287dv9lPWbOGPl4zAc4ri2UkRISf15yLReyRBP40RRZG/fLX/uM6hlAvUm2w4e7mQlqDTcPv5g3p1TFWrlQ1FjT12hl+5t471h1Mjs5N1LL9iJG02Vye73rJmq8/vRSWXUdnSzuTH1vLstWMZmqjj1x/tpsls7/J9dBqF38LqoLhwHr00O+DYMakRPPDBbnZVtFJjtGF1uCmqbwvqaeN4ue6VLT774e54d2sF3+2tZ+7wOB67YlSP408EIUoFJpuzS492iVOLJOinMdWG9sOFObJex887cLpFEvUazHZXr0T9qatG99qPOyUylKmDogPua7M5KW+28vrGQ1gdR7JUCqpN3P3eLn49fyjXTUoDvHnpPxU38acvvCGI8emRvP6LCRysN/PulnIWv7YVuSAEfOIYmxZBsj4EfaiS+y4cEnTl4ztbyvnLZdm8trGU1zeWMWVgdKeF2RPF0cVUPeFwubmqi6rWk0FWQji7KlqPq1JV4sQhCfppTEpkKCvvncHKgjpueye3z+fZV9vG+PRIdpS39jz4ML/7vIBHLhrGnGFxvUrx9HgIWMK+Zn89j3ySH/DGtPZAA5mxWq6ZmMZbm8vYVWHA7nKz7LwBjEyJYHSKHoVcRk56JDnpkSjkgl8YKlGv4bKxyYxJjWD20DgUchnPrj0YtJmWxe5iX40JtaKGn+Wkcsv0zF7fzI6H87PiKGkM3DXqWEw2F2v3NTAqOeKUlOnLZQJSBuPpiyToZwDnZ8USF66moa3r8EJP7ChvJSc9ktwgRb200cKyt3bwq/MH+hXmdDRX6Kp6MC06lPJmC5lHdaQ3WB386Yt9AcU8SqticFwYcplAaaOFOcPimTciAX2IMmA1pCiKfHdU3HzeiHievGpMp1j/xaMS2VLazKQBUT3ekLRqBWqljN9/vheZAP/9xURm9nPhUHfcOiOT17poAxgIhUKgvMXqa+ZxspHyKE5fJEE/A9Ao5ax9YCaf7qrmp+ImWi1OPIcbTBQ3mIOeMeWWt6KSC0SHqdGHKNGq5V7/ErcHk81FY5u90+P/i+tLaDq8vazZgsXuTROcOjCav1yW3cnzI0ytoOyokErH9Vsd/rYAAAqZwKBYLW02F9MGxQSV57xmfz1Wh4vzBsfw0LwsRiTpA95cOsr199e2dbmQZ3O6aTlswdvhLe4R4avdNSdV0MM1ChL1GmqNtp4HA98V1HPbzJ67SZ0olAoZDpenW8MxiVODJOhnCOEaJTdMyeCGY1LGzHYXf/pir88VsSccbpFao61L8dCq5CRHhqDTKHF6RPZWG/kwwLnrTTYmZUZx2ZjkHmfA6wsbD2e/+N95xqRFYLa72Vdr4olVRYxKifAZerk9Yqd+pm6PyIvrS7h5+gBmDIn1s+UNhE6jxODxzz9vsTgwtTuRywTUChmJeg2CILB4UjrlTVYSIzQsndrZhfNE4fGI3Pj6tqDFPFyj4Is7p/nl6J9shiaEU1jX5uekKXF6IAn6GU6YWsHOiuBj4z1hcbj9Sufjw9WMTYuguNHilxJod3m47/3drNhWye8XDic7+cgft+eoR/LCujaeWl3oawAN3syb4Uk6qlqt1Bm9YaTdlQae+K6QB+YO4fef72XdgQZmDollRLKOq8enUtJo4cEPd7NsRiYpkSGkHtOqzdju9MtoAW/Xo5JGM0KD2ed/EqlVkREgVKGUy/jjohHsrzWdsJmnw+XhlR9L2VXRit3lweZ0s7+2DbO989NLIOQygQfnZp1SMQev/W6b/eS06ZPoHZKgnwWMSYkIKu2tL4wfEMXz140jr9LA+sIGShrNbC9r9ZmDbT3UwhUvbCL/z3NRK47EvMubLRTWtXH7uzs7ZaOMSo4gt6KV8emRPkEHeHtLOZ/srMJyOGTzdX4tX+fX8s/vCknQaRiVouf6SWlsLG7y2eWCtzdnvclGymGzsA4LZZngFeoBMdqgHANrje18sbuGYYn9n2vtcHn4xRvbuu3l2hNv/GLCaVN+32QOXHkrcWqRgmBnAddPSe+0TSZ4y9qV8uPLhJh4OD1tTGoE984Zws9zUlHIvNa449Mj0Shl6EIUfoZRESEq9CFKXv3xkJ+YCwJMGxTtM9cKJLKWY+Lv4I2H1xpt3DFrEIIg0GJxkHRUpWS9ycbo1AiSI0JIjgghJTKU5IgQEvUhmO2uoO1fo7VqLuymIUZfcbo9/Pw/m45LzGPCVEwb2LNl8tGcqMVLp9uDTiPNBU9HJEE/CxibGsGcYf5CNCY1AqvDzdjUiOM6d91R7d9aLA5uemM7Va02iurN7ChvRSkTOH9ILM1HFfikRoWwqaSZbYc9yjuYOSSWEKWcayamEqZW0GLtfpYnCDBpQBR2p5sXF4/zxcynDYrhtY2HaGizYbG7eP2nQ3yTXxvwHGlRoeyvNVHWZKGovo28SkOXzoEqhYyMaC1ttv4NJyjlsqBj5F2xZHJGwDRFl9uDKIqUN1vILW9l48Emtpe1sLKgjufXFWPo4WfcF7aWtjA9CD9+iZOPdJs9CxAEgeeuG8u/1x7k451V2Jweyg57lhQ3WFDIAhfhBMNF2UcaRn9/oLMXTJvdzUc7q/lkVzUXDI3jqvEpzMqK599rD/qNmz4ohr9cmk1KZAiCIDAsUcfVL21mYKyWkgDhIpkAo1MjGJao4/WlE/wWSGPC1Nw2cyBPriqkqrWd7/bW09Bm9/UmPZpjU/uazXZ2VxkYlxa4QUVkqJKDDeagDcaCZXxGJN/k1/U8sAu2lDZzD0e8ZVotDv705V7yq43MHZ7A8CQdY1MjfB71AB5PPB/lVnH+0FjiwnvuGhYMdUYb0WGqUx7HlwiMJOhnCRqlnF/PH4pWrWDdgQZfEVGL1cGY1Ajy+tAMOCM6lJFHLXaau5m5ekRYs7+BNfsbSIrQkBIZSrhagdXpZlZWLPfOGewnNgNjw7hweDyNXeTWj8+IYtuhFjKitQEXKeUygdtnDeQ/60u5b85gJg4IXKF6LGEaBVZ757CO1eGiwWSn3emmoNrY7yX/F2UnHpegm+1OPt1ZhVwmQ6OU4fKI3D17MAOitV0WGMlkAj8fn8IXu2uYPSy+V748XbG/zsSsrM79fiVODyRBP8vIjNHyxDHFQxUtVj9v8mBZMCrRLyWxsrU9qONqDDZqDDbumjWI0iYzf7t8pM/JELyWBgAvLRnPpuIm/v19MQ1tNt/CriB4fWHAG+ZptTh87eqOps5oY1iirlcNPNodbmSC16gLQC6TIYoiISo56dGhCIJAgk4TMGvmeLgoO4F4nZp6U9+Kw/bXthGqkjMvu3fNSgRB4NIxyfx77UEuG5N8XLa7e6oMjO4hVVTi1CIJ+lnEugMN3PXeLo4NrrRYHIxNjWBXL2fpA2L8TbYMVicZ0aEMiNEG7Dt6NP938TCWzcjk2bUHabY4kMsEXxhDLggk6L0CPXVQDBkxWtYXNtBotvNDYRMy4XAXoguzCNco/NrJHU2z2cGc4b2bLb7+Uxm3nz+w256ckVoVZU2WfhV0hVzGP342mj9/udd349JpFIxKiaCixerXkPtYJg2I4s4LBh1XhsviSWlUtbYTqpYHbYlwNDanG4vdTdRJtESQ6D2SoJ8l/Hiwkdveye0yVr6r0kBWfDiFQfatBIjS+gua3eXm8rEp3DNnMH/8vIA3N5cHPO7aianccp63OMfY7kSjlNPudPsEPV7nLyhJESFcN8mbqTNvRAKLnv2JC4bFoQ/1jtfIAouvyyOyv7aN9KhQVApZp0KkDqparXQkfNw2MzOoBsuRWhVNZnufxK8r9CFKX7jninHJPHpptndx2OLg6pc2c/CoPP8O/npZtl+z7L4SHaYmOkxNUX0bHlHsdUx966EWzpMWQk97pJWNs4DiBjPL3trhV7wTCIvd1as0xqPDJOD15daqvWLYVZVmRKiS31w0DEEQKKg2cvusQSTqNCiP6iDdXWWp1eHt1HPz9J6rNUem6InWqmh3ujHZnByoM/nlpze02ShvthCqUpAaFUpqVCihquDmMPoQJWabq197ab6yoZQ2m5Nl5w3giZ+N9sW0o7QqPrl9Kr+ckembAWuUMv5+5ch+EfOjGRIfTrvD7Vs0D4ZDTRbSo0JPiRmYRO+QBP0Mp93h5r7384Ky160ytDMyWY8iyD/MGsORmPnHuVXsrjIw/HDRzQVD43h5SQ4Pzh2CRnnka2S2ufj32oMUN7TxQ5G3sUa1oR23KGJzdl6MPJZhCTrGpUX4FSl1RXVrO0kRISQdzjkfmqCjxtBOYV0bm0uaERBIj9b2OUyQHh1KdZDrBsFQ3mLh2evG8n8LhncSx3CNkkcuHsbW387m8zum8dPDF3D1hLR+e++jSY/WEqZRsKfK0GOuusXu4oMdlaSf5JZ3En1DEvQzGFEUuXvFLvKrjUEfs7PC4Je50h1Pry7C6nDhcns4eLh8vqOnZKRWxdwRCdx5wWDe+MVEorQqwtQKXB6R1zYe4pqXt/DznBRfKl1MmDqoUEeT2U5OgIbNgdCFKDsVDaVHa8lKCGfKwGiaLX13pwTvk4QuRIHRevx56VaHizqjvccMEaVcxujUCKL7MdQTiJgwNVkJ4eysaO2yA1K1oZ1V++oYEKPlb1/v79WsXuLUIMXQz2C+2lPL6n313Y7JjNV2sgXYVWlAq5IHrMo8mhqDjUuf+4myZouvOUZpk6VTSl9KZAipUaG8ddNEHv5oD9WGduYMiw+YmdITNYZ20qODs4V19BBi6o9c8ohQFftrTb54frCIosieKiNJESG8vaWcsiYLFruLH4oaOf80SftTK+SMTY1kT7WR0Sl6XyhMFEXWFTYQEaryma8ZrA6KG8y02VySKddpjDRDP0MRRZHn1xV3uT9aq+KVG8az/PKRAfcH0xuy3enmYIPZr9PR/R/k+VVSttmc3Pm/XeRXGTBYHbyweBxv3TSR6YP7toCWHBkS9BOHuhsTLbPd1W/l6ZmxWj9jsp4QRZHrX9vKpc//xIJ//0hxQxtzR8Tz+BUjeWdL4IXkU4VMJjAyWU9epTf8UtJoZmWBt7/quLRIn8hHhKoYnxGFIBBU6Ezi1CDN0M9Q3t9eyYG6wBkr0wZF89RVY4jXaXC6PYSpFT5Hv3C1gja7i+1lrYxNi2BXhaFX71tQbeLO/+3itRvH43B7WPLaNvIqDcwZFoep3YVT7yFSq0JotvTJM9vU7iIlMriO9rHhXYclrHZXv4Qt3txURpPZjlatIDOm6yIegJUFdewoa2FXpYHc8laSI0JYdd8MX/aN2yPy301lh9sK9hx+OlnID4v6+qJGrHZ3t3n92UGG6yRODZKgn4EUN7Txx8P9No9GJZfx8EVD+cXUI74fSrmMqQOjsbk83DglnRlDYrnx9W1sKmnmQK2pT52Qfihq5KGP9mCxu8ir9C6U/vvasThdIltLWxibFsHolAhW7a3jopG9LYQhqAXRjs/WFXE6DZUtVr/q1J5YX9jAjMGxfqJ9/eR05DIBu8vr2x5I0FxuD//9qYyn1xQhAOcP9YZUMmO1fqmUcpnAgpGJvPpjKXdeMLjTeU4lHaX8R1s9SJx5SIJ+BvL7z/Z2SlGM0qp4cfE4JmV2LoH//cLhPg8VgN9ePIyFz26k3ekhM7Zvre0+3VUNePt5PnvdWEJVCp5cX8iz3xdzwdA47pg1kD99uZc4ndrv0T0YGtqOz8iqg+gwFXtrjN6sjiDK3qcPimF7WQtD4sN9PUU7Fl3VCnnAFMbdlQb++vU+tpd5q3NnD43j+evGccf5JupNnT/HpWOSuPyFTaedoHdku0ipiWc2kqCfYTjdHjaX+tuwTsiI5Nlrx/mqL4/l2FmqeLgnqNsjsrfG1Kteo0cTrVXxuwXDef77YqwONxuLmwCviZfD5aHeZOfKFzcTplaQGavlsctHopTLkMu8s+tEfYhfSOZPX+zlx4ON/PuasXg8HmQyGW63B5lM6NUNoYNQlcKXfRMMjWY7zRYHdSZbwCbRLo+I3eVGrZBTb7Lx7tYKnv3+IKLovbH9LCeFayZ6Uw2HJYYzKC6s0zkitSoS9BqazfYTnsnSGw42mBma0L/+NRInH0nQzzCUchnXT07jnS0VAPxyRiYPzetdF5v1hQ1+s82K5q7LzgPxzNVj8IgiM4fEEqZR8JtP9tBm8++60yHu4F2g3FNlxOpwM3GAN2ThcHmoaPFmz6gUMlotDiparLx4fQ7hGgXf7a0nSqvip5Jm4nVqbA43i8YkEXtUhWOtsR2dRtllhShAiFKOxe7qdkwHifoQXMlil7H5USl69tWYGBIfzu8+K/BlGCVHhPD9gzP9QkWCIKBSdL4JdYSJdlYYToj3el+pM9oYEn96NM+Q6DuSoJ+BjE6J4B0q+O3FQ7l1Ru+bBV80MpGn1xQBXpfEZoudBJ3Gz/u8O2qM7Zw3KJaGNjtPrynqJOaBmDggijFHebOrFDIGxR2ZERY4jGREaxkcF4YgCCSODPEdJwgCLreH93dUEhmq5KLsROpNdix2N4n67hdQI0JV1JtsQQk6QGWrlcK6Ns7PikUhl+HxiORXG4kOU2GwOnl5QwnrCxt9KZ+Jeg3ZyTp600tifHokW0qbTytB95ygZhgSJxdJ0M9AROAfV45ieJIOp9vT7eJgIJIiNKx94HwMVgeXv7CJsamR5PaiL+k/VhbylKyIm6YP8D0p9MRV41MxtDsIUcpxuUVfSMNgdfDZrmr21pgoajDTaLb7+Yx0hFoUchmLJ6VT0Wzl1R9LGZMWyYTD3ZR6QhS9zZh7ig+LosjGg03IBIG/rzzAPXMGY7a5iNSqMLQ7+d2n+T7HSZVcxn9/MYGJA6J6/fN/YG4W17+2tVfHnEhKGs1B5/5LnN5Ign4GYmp3+rxO9te2BZVTfjShKgUDYhSIYijp0aFYgmxSfDQuj0hBtTGoAiWABz/cDXhn5t42cSHYnR52Vbb65bnXGmzdGkelRYeybMZA3tpcRnaSnhBV4IwYi92Fod2JUiagUshotji6TXOsbLGSW97KL2cORB+i5L4Lh3SqQl3/0CwONZn5w+d7ue/CIUHfUI5FpZARGarsd/OvvlLV2s7MIVK45WxAEvQzBI9HRBCgoc3O0qkZR81cBV9T5N6e7+v8GmLD1URolFQb2mnrpbBvKul9j0yHy8OhJguHuigjD7Zcf8nkdF7eUMot52X6hLfN5sTu8iCKoFXL0WkUvmrRYxtptFoctFodGNqdbC1tYUSS11e9Y7YdqA+pXCYwKC6c15dOCJjB0htGJutZva+eayeeGL+WYLE6XKik7kNnDdJv8gxBELyNKkQRvwXQjGhtl5a55c0Wv16fHWw/1Myd7+3k/g92s6OslXaXu8+Vnf2JQiYEXbgiCAKXj0v2q7wM1yiJCVMTG64mVKXwK/0P1yjYX2ui2Wyn3mSj2WJnQ1EjX+TV8ItpGcwYEht06ESjlAfdeLorZDKBn45aOD4VmO0utpa2MGlA3540JE4/pBn6GYIgCERqVeiO8ScJVIkpiiI7yltJ0Gn8UuOM7Q5e/fEQ/9taQbPlSPPg8wbHEq1V8W1B9y3S4nVqbE4Po1MjGJ6o4/WNh7psPtEXUqNCkffiSSMuXEN2sp4fDzb22PxBo5QTplYQHaZmX42JXZWtXDwqkTZb32aox2urOz49ijc3lfXp6aq/0ChkGNudUu75WYQ0Qz+DOFbMO/B4RIob2iiqb+OTnVX847tCdBql3/iD9W3c+b9dPPt9sZ+YgzefPCc9kqQu8tg7WDwpnbw/XMhbN03E2O7sVzEHr+/2+f9cz5e7a4I+Jic9kjqjjcpuOv50YLA6eXdrOSIiiyelExeuIS0qtEcf+UAIHJ8Ijk7VY2x3UtWP9ry9ZVelgUmZ0uz8bEIS9LMA2eHYblJECGPTInl4/lCyEsIx2ZxUtljJq2zlvg/y+PFg50f85IgQrhyXQmZsGL9dMKzb9/kot4o/f7mPGkM7h5qCN6vqDW12F0+vLsLVi5vFz3JS+GpPrV9zi6MxtnvTDctbLFw3MY0RSUfCOkq5rMuF1Z7oyUu8O9QKOaOSI9hS2vt1iP6kp7RPiTMLSdDPYMx2F9vLWnh+XTF1RhtOl4cBMUfSz1KjQjFYnVS2tJMepSUtgK9Jk9nuy0FeMDKx29zoihYrb2wq44In17OltKX/P9BhJg6I6lWMWhAEfjkjkzUBrISN7U6+ya/lgqHxLByV1G/hjdhwdaeF1t5y0ciEoBtvnwicfXgykTi9kWLoZxhuj8hHuZXkVxv5Iq/G1xBhzrB4so4q3bY53VQb2hkYp2Vkip5LRidhtDp5ZWMp+2tNrN3fAHgXW1usDuLCNXhEeGhuFkX1bZR3Uz0aTHek42HF9kridRrGpkUwISMqqKIgmUwgMSKE3PIWctK9YYSGNhsbipq4ZkIqzRZHn9wfuyJEJT9uQb9weDzvbQsuj/9kIooi1YZ2nG6RUJWc+D742kucGiRBP4PIrzJy7/u7KGm0oFXJ+c3Fw7hyXHKnPpk2p5uSRrNfaAG8KY7XT0onQa9h48Em/retnAfnZhEXrqHd4ebBD3fz3d46YsJV6EOUGNuPv1NPX/nX2oMAxIWr+fhXU4NyTRyTGsGHOypJj9YiirC5pJkrxnobNJyIfO/jra5MjgjB5RZxe8TjzprpC4Guvs3mpN5kJ+1w422JMwtBPJ5A4DmAyWRCr9djNBrR6XpXwNOf7K40cON/t2GwOtGHKPn4V1MYFBeOwepAo5T7/LVdbg+7q4yd2riZ7d5Wcsc2fgavl8utb+/w81cfnapnd2Xwre1OJCFKOZ/cPpWkiBB0GkW3YRO3R+SFdcXIZAJ3zBp0Qq/L6nAF3XS6K255czujUiK4e/bJd1/8qbiJaYOOpKvWGNpxe8ReWQ5LdM2p0A7pFnwaUtJo5tUfS3lmTRH7a038+qPdXPr8TxgO97Ycnx7pW8yqM9n42X82+XKa99WaGJcW4Xe+wro27nlvV0C/kY0Hm5j3zIZOzTJ2VxqZ2MdKyP6m3en2OTEWVJuoNnQdd25sszNhQBS3zsj0NfU4URyvmAOMSNKfkoVRURT9Ui9rDO1olHJJzM9wpJDLaUh6VCgf5VZxoK6NZ78v7pTzvPZAA5MeW8uSKem8v72SFouDZ78/SGSo15q13ekmVKWgtNHM377ez9oD3nj5U6uL+Mtl2X7n2nqomfYuWoptK2th4oAoth06cQugwTBjSCwPzc0iJTKEpf/dxvAkHcuvGIUoiqzd38CIZB2J+hCqDe00mGxMPuwJ31uPlVPB2LSIoMzN+huXR/Q91dUY2gnTKLpMi5U4czj9v/HnIAq5jH9fOxaNUtZlAYvZ7uLF9SW0HM4p31LawortFRTWtfFFXg3//O4AFz69wSfmoSo5I5P1vsfqDn6ek+rXm/ORi4YybdCRJhnbDnlF/VTy4NwhjEzRE6lVcd3ENC4cHo8oel0Qb3lrB499c4C9NUZazA7GpkX2fMLTiLGpkYxOPflt3Yrq28iKD6eyxYouRCmJ+VmCNEM/TRkSH85fLs3moY/2BH3MW5vLeXtLeafQSlZ8OIkRGn73WQG6ECXXT07j1hmZhKoUmGxOkiJCfN4qaVGhvHPzJJb+dzs/FDUCcNnYJPQhSiqarRTWB+5jeiL59Ud7+PKu6VS1tuMBbnpjB9MHxfBTiTfMtHZ/PVeOS+b8rLiTfm3Hiz5UecJDQ4FoNjsIUyuIC9f0OQ9f4vRDEvTTmAuGxqGQCV16tQTiWDGXCeD0ePihqJFwtYLHrxjJzCyvb0m9yUZBtdHPKOtX7+4kQafxmWTdPH0Ao1MiKGuycuW4ZG57Z2e/fDaAJL0GpULWbYpkmFpBRrSW5w63tps9NI4BMVpfA40wtYKXl+QwddCp96LpK31xuzxezHYX8TrNadWsWuL4kQT9NEUURf6xsrBXYh4IjwiljRZeuWE80WEqBsaE0e50Y3W4MdtdXD0hlcHx4dz2Tq4vr7qj0cXEAVE8ctFQFHIZtQabX5778TA+PZLfLRyOUi5w1/92sXRqBpMzo/jjF3u5eGQiX+6u5efjU1i1t46Fo5LITtYzZ1icL7vl7ZsnMuuJ9YQo5bx7y2RGppzZnegtdvdJ9XSpM9rITtJLYn4WIgn6aci6wgYK69p4f0dlv53z1R9LefeWSSjkMqwOF/tr23ypjTnpkSydmsH/tlb4MkjCNQqeuXqMz9mxvMXaa/9vlVzGXy/L5uUfSyluOGIVMHVQDPtrTVS0WGky28lO1jM/O5HZw+JRyAQmZ0ZzqMnCiCQ9t80c6AsJiKK3B+pbm8sIVSl495ZJQbszns5kxmo7NfY4kZQ0mv3SFSXOHiRBP434Jr+WneWtvLWlHEc/l2XvqTJSVG9meJKOsiZrp9TGO2YNIlyj4A+f7wXgdwuGkRRxxOfj5ukDfJ7swVYu3DR9AFdNSOXyccm8uamMf605SJvdxfPrvJk7l4xO4seHLwC8xVBVre18uquKYYk6r+uiCO9vr2DpNG8zjxfWl/B5XjUWu5vXl044K8QcYHJmNCUNlpMm6GqpYOisRfrNnibUm2z86Yu9vLrxUL+LeVpUKG/eNJHhSTqKG8wMjNMGfLy/KDsRgGmDorlqfGqn/XaXh9AgH9OjtCpun+XtdyocvoaH5mdx+dhkX1Xkl7trMLV7C6U2lzbz3d46EnQa/vzlPkYk67j5vAGsK2ykwWSj2Wznu4I6VHIZj12e7def9EwnLlx9UuPo1iA6TEmcmUgz9NMAt0dkX42pk63t8SCXCYxM1nPT9AFcnJ1Ai8VBebOFyFClX3f6oxFFkd9ePJT5IxIDCv66woag2s0B3HLeAJQyGV/tqaHZ7GDhqESiw9QsHOXg9wuH8/rGQ7y6sZTrX9uKXCZw2Riv0L+xqYwPfzmFjMMmY//42Sge/GgPeRWtiCJs/M0FbC5p5qs9NSwa3X9mW/2FKIo43WKvyuYFQSD0BGaatDvceETvNckFgQN1JmZILefOSqTS/x44GeW7B+vbuPDpDf16zr9dns3iSem+101mOwark0FxYQHHWx0ujO3Obu1UawztzPjHui4XapVygXvnDOGf3xUSE6bmnjmDuWJscidzrSaznchQFc1mO49+tY9Wq4NrJ6Tx5uYyXls6oVNOdGWLlXtW7GJnhYFrJqTyTX4tt88axPrCBt66aZKfeLrcHr+OTicTs91FfpURjygyNCHcr7lIdxyoM/HGT2VsO9TC6NQI9CFKJmdGM21QtF/Xpb6wu9KA1eEmUa+h3mTD7vIwOTNa8mk5CZyK0n9J0HvgZPxSNpU0cf2rWznOhBYfs4fG8fIN432hDYfLQ3GDuctm0h6PyP46k8/My+0RkQkEnP3+7MVN7Chv7bR9ZLKev1yWjbHdyb/WFPHQvKFMGRjdaVwHRwtvg8nGsrdzefLnoxgUFziTRhRFPtlZzZ++3Iteo0Qug/KWdhQygaGJ4SydOoC5I+IRRdCHHJ8I9saV0en2cLDejMvjISZMTYJOg0wmUHjYSiFQZpDF7uJQk4XdVQY+z6tBAOZnJzBzSCzxOg0tFge55a3eYimLkz8uGh5U4c9j3+znYH0bT189hohQVSdvls0lzYxNi5CyW04SkqCfhpysX8p3e+t48MPdx10GHhmq5O9XjuK8wbG+7JD8KiPZybouwxP7akwMSwxHEATqTTZcHpHEw8LUQYcj4C/+u411hY2+7SmRIfx6/lAuGZVIncnG/lrvjcHqcJMWFdqji6AoihyoayNBpyFS29k47FjKmy0s//YAS6dmMCQ+nAO1Jj7MreKzvGrGp0fyz5+NJlKrOi5Rb7E4iAriWiqarVS1WhmfERXwBtDQZsNgdRKmVrDxYBOVrVYK69rYW2MiNSqEC4bGYXd6uKsbY65dFa3887tCXl86oVshXr2vnmVv7QDgqatGc8W4FEobzWTGep/IdpS1kJUQftwzfongORWCLsXQTxPmjUggOSKEhc9u7PM55DKBf10zlhlDYmk227E6XJQ1Wxme2LWYlzSayYgJRRAEagztRIQq/UynDta3safKSEy4mplDYn2CEK5WcMcFg1gwMpHoMBXrChtIiQzlgqHxON0e4sIFKlqspEdrA74vQFWrlcY2OyOT9UGHSdKjtby4eBwHG8wo5AJTB8UwdVAMy87L5Hef5XPTm9t595ZJxyXooSp5t06K7Q43dSYbKZEhpEV3bWYVF67B5RaZ94w3nHbXBYP4/cLhpESG4HSLrC9s4MUfSroV9LFpkTSbHZjtroCCXtpoJlqr5rFv9vu2PbmqiBFJOiIPO2vmVRoYGBsmifk5gCTopwlmu4u/fLWvT8cKAjx/3ThsTrdvsStKq+K3n+bzi2kDuiztrja0ExWqIlSloNlsR6WQ+YnYvhoTi1/dQqvVSVpUKG/fPJGCGiMLRiXy6KIRRIepya8yUtZsYUpmjO99OkyxtGoF7Q43JpuTmDC132z9jZ8OEapScNWEztk0PX9egXidBs9RMarhSTpW3DqFu97byeJXtvL7S4YzKlkfdBz7aDRKOc1me0BBb7E4aHe6/TpDdUWLxcHiV7eSHh3KazdO8F3z377ej93lYeaQWBaMTORgfRuD47su2tKq5dSbbAE93d0ekQl/W+PX37Xa0M4bm8pZfsVICqqNJOqDe/qROPORVkZOAzweDw9/vIetfXA1FAS4dUYmF49M5JLRSdQZbbg9InaXh1lZcQzpQiiM7U6cLg8yQcDmdGOyufwEo6i+jesOizl4wwd7a0yUNVkYnqhDIZPxbX4t8Tq1X3jnaGLC1JS3WIg9SszdHpFXfyxlZEpEn8QcvGGaVoujk7e7SiHj2WvHEROu5s53d3bpIhkMEaEqn/EZeBeNa43tmG0ukiM6LxyLoojB6vD1GfV4RO54dye6ECUf/HKKr+uPTCbw4Lws/nJZNnOGe9vifVtQ1+21hGuUXeb+by9rDdis+4u8ag7UmtCHKKWOQ+cQkqCfBry5uZyv99T26ViFTGDZeZmAd2acoNfQ2GZnS2lzl/1B7S43RquTjBgtblGkqrWd2PBjxPyVLT7/9bSoUF5aksO0gTHcMCWDr/bUsrfWyPzsBOJ6EIvkiBAMhzsfGdudPPd9MQtHJXVqwNEbao22gP1RoUPUx6JSyLjjf7soO8qnpjfIZQIKuYDD5aGhzYbd6SFR33WIRRAE9CFKGtrsiKLIiz+UUNxo5uUlOZ1m+keHThL0GvZUGfyeNo5FKe/az2fOsDhCAoRidCFKLHaX5G9+jiEJ+ilm9b76PoVa9CFKLhwez4gkPaWN/qKlUshIiwoNGDd3e0SqW9t9whSlVTEoLozWwz03Ad7ZUk6T2YFc8Pq5NJnt5FcZsThc/PGS4dwzezBTB8YElQMerlFS3drOF7ureWdLObedn0mCvu8zxlpjO3KZ4LdgeywquYy3b55EU5ud59cVY+vjTN3mdPPwx3v4bm99UCELQRCIC1fzQ1EjL28o5eUlOUHNjl+9cUK3nweEgKINEKfTcNnYZL9t+hAlt80cSM5p0qBE4uQhxdBPIUX1bTzwQV6f0hWf+PloJmdGIRMEzHaXz9zJ4fLQYnEEzDf3eETqTbZO8V+3x+uREhGq5K3NZby1uZy4cDVhGgV5lQY+um0KhXVtzH9mAzdMyeAX0zJ6da3JkSHsqzVy+/kDj6sQqKLZij5U2eOCZ6RWRaRWxQe3TeGWN3fwy7dzefa6sb3y/G53uHnu+2I+3VXN6n31FNW1MW1QDBcMjes2pfHHg0387rMC3rppIqP7qZo1IlQZsHq4w9tmfHoE8To1z6zx9mGdNiiGxZPS+uW9Jc4sjmuGvnz5cgRB4N577/Xbvn//fhYtWoReryc8PJzJkydTUXGku7ndbueuu+4iJiYGrVbLokWLqKqq8jtHa2srS5YsQa/Xo9frWbJkCQaDwW9MRUUFl1xyCVqtlpiYGO6++24cDv9qy/z8fGbOnElISAjJyck8+uijnA6ZmlWtVm54bRumPqQpJuo1TB14pOgkIlRJ2WEL2tImMxkBwgJ2l5saYzuJek0nUZXLBIYlhvPHz/fy16/3kxoVgkwmcKjJwr+uHsOQ+HB+Pj6V/1swjNhwtS97IhjKmy00m+1Y7O7jEvNms9cJsjfZK8kRIXx6+1SGJepY+O+N/GvNQWq6aV8H3ll5fpWRy57/CQH44JdTWHHrZMalR7CjrIWl/93Grz/azaq9dbTZnDSYbIiiSHGDmfs/yOOJVYX86ZIR/Sbm4LVAbrM5aWyzU2+yUd5sobLFyqEmC4PiwrgyJ5WFo7y2DZGhSm6ennHKiqskTi19nqFv376dl19+mVGjRvltLykpYfr06dx88838+c9/Rq/Xs3//fjSaI4+e9957L19++SUrVqwgOjqaBx54gIULF5Kbm4tc7n20vO6666iqqmLlypUA3HrrrSxZsoQvv/wSALfbzYIFC4iNjWXjxo00Nzdz4403Iooizz77LODNA73wwguZNWsW27dvp6ioiKVLl6LVannggQf6+tGPm1aLgxte2+azqe0t5w2O8VVfGtudaJRyQpRyGtpsJEWEBPxjbmyzkxwRElBUy5stXPXSZupNdkYm6yhutDAkLowRiTqyk/U+M6eYMDUXDI0LSpg3FDXy6Ff7ePqqMYxM0VNQY2RraTNj0iK6tB7oCpvTTZPZ0Sf7Xo1Szm8uGsriSWk8vbqIG17fRlZCOLOy4pgyMNqXb+9ye9hXa+KdLeW0WJy8euN4v/hzdrKey8d6/7/JbOd/WytYubeO3ZUGctIjiQlTc+OUDEal6Gk4bEPcH7z6Yykf7KjikYuGdRv2GRATxuJJaUSGqshJl0It5yp9Kiwym82MGzeOF154gb/+9a+MGTOGZ555BoBrrrkGpVLJ22+/HfBYo9FIbGwsb7/9NldffTUANTU1pKam8s033zBv3jz279/P8OHD2bJlC5MmTQJgy5YtTJkyhQMHDpCVlcW3337LwoULqaysJCkpCYAVK1awdOlSGhoa0Ol0vPjiizzyyCPU19ejVnsX/R5//HGeffZZqqqqghKm/i4O8HhEbnpzO+uPKs7pLYLgnTl22NlaHS7Km6043R5GpUQEPKbW2E5kqMq3ICeKIr/7rICLshP54xcFiCJEh6nYXWUkWqti1X0zCNcofTF3k83Jn77Yyxs3TSRM3fU8QBRF3tlaQYPJRovFwaOXZiOXCdhdbj7ZWc3PclJ63evz011VLBqd3GORUjCIoojZ7vIV+JQ3W6losVDRYmXhqCQuH5uMWinr0fmw3mQjLlyNyebq9NRgc7pptjgCZsP0lv/8UMK/1hxk36Pzevy+dqQo9iVVU6L/ORWFRX16LrvjjjtYsGABc+bM8dvu8Xj4+uuvGTJkCPPmzSMuLo5Jkybx2Wef+cbk5ubidDqZO3eub1tSUhLZ2dls2rQJgM2bN6PX631iDjB58mT0er3fmOzsbJ+YA8ybNw+73U5ubq5vzMyZM31i3jGmpqaGsrKygJ/NbrdjMpn8/vUXLreHBz/cfVxiPi4tghcX55CdpKfV4uBQk4WmNgcJOg3vbaukrMkSMKQkFwRURwnp21vKeXdrBde/tpV6o402u4vtZa14PCL/vnasL5wjlwkoFQJ/X3mAGUNi0XZjIuXxiDy9uoiRyXoemJvF3y4f6RNhpUzG3OHxfWrcXGPo25NMIARBIFyjZHxGFDdOzeB3C4bx8pLxfHvPDO6ePZjUqNCgbGxlguDLbDkWjVJOYj+lCg5P1JEU0TlMdixWhwurwy2J+TlOr/+6VqxYQW5uLsuXL++0r6GhAbPZzOOPP878+fNZtWoVl19+OVdccQU//PADAHV1dahUKiIj/dPW4uPjqaur842Ji+vcHzIuLs5vTHy8f1peZGQkKpWq2zEdrzvGHMvy5ct9cXu9Xk9qat9ypQPxf58W8Mmu6uM6h9XhZkJGJCEqORUtVsI1CmLD1cx7ZgPvbavgf9u8TSo6Ys7g9Q5RK+S+TIoaQ7tfZeGwJJ2vW9G1E9P8Glm02Zz85at9/HiwiadWFzHqz6t46YeSTtflcnv4LK+aS0YnBbS2Ndmcfa7etDvd2F0nxvJVdjhjpjezf6PViS6k+2hl91krwTNjSCzJkaFdNgvvYHtZKxMyzqwG2RL9T69i6JWVldxzzz2sWrXKLybegcfjXYm/9NJLue+++wAYM2YMmzZt4j//+Q8zZ87s8tzHtuAKNCPpjzEds9euZjyPPPII999/v++1yWTqF1G3u9x8mnd8Yi4IcMt5mbRaHdhdHuJ1Gl8x0Jzh8aRGhvLLGZnIZAImm5PKFiuJeo0vD1wfqqTV4uCqlzZzzYQ0PsurRiWXcaC2jexkHSOT9Vw8MpGGNhtx4RqsDhd//nIf3+Qfufm12Vw8vvIA2cl6X9cbm9PNC+tLuGZCql9TjGPpy0Jds9lOcmRIl2X4pwKr04U+9PjDKcGSGaOlzebsVEjVQUG10efFI3Fu06u/ktzcXBoaGsjJyfFtc7vdbNiwgeeeew6LxYJCoWD48OF+xw0bNoyNG70eJQkJCTgcDlpbW/1m6Q0NDUydOtU3pr6+vtP7NzY2+mbYCQkJbN261W9/a2srTqfTb8yxM/GGhgaATjP3DtRqtV+Ipr8wWJ243B5y0iPZU2XA6Q5+6eLJn49GrZTRYnHws5wURFFkfVEj0wYeaSP210uz/WaFOo0SjULOxuIm1Ao5OemRWB0uln+7n3idhj9eMpxpg6J54rtCFDKB92+d4ltofejD3SwYlciPRU18lFvV6XpE0ZulA97Z/0sbSrlpWkaXggPeG0G4RtnrOPjBBjNzhgX+XZ0rZESH8vKGUn49f2infRa7C5vTfdK6HUmc3vRqyjR79mzy8/PJy8vz/Rs/fjyLFy8mLy8PtVrNhAkTKCws9DuuqKiI9HSvN3dOTg5KpZLVq1f79tfW1lJQUOAT9ClTpmA0Gtm2bZtvzNatWzEajX5jCgoKqK09UmG5atUq1Gq174YzZcoUNmzY4JfKuGrVKpKSksjIyOjNRz9u4nUa3vjFRFbcOpnlV4zq+YCj2FTSzIKRiVwyKonGNjv51UZmDI6l1erAebjsO9AjfqPZznmDYxkcH4ZKISNEKcflFsktb+XBD/fwUW4VdSY7EwdE0Wo98jP65cxMdla08s7W8i6vKSZMjcHq4OUNpfxq5sBuxRy8qZYtfWjgYXO6TztTKYGTOxOel53Axzur2F1p6LQvt7z1uKpuJc4uejVDDw8PJzs722+bVqslOjrat/2hhx7i6quvZsaMGcyaNYuVK1fy5Zdfsn79egD0ej0333wzDzzwANHR0URFRfHggw8ycuRI3yLrsGHDmD9/PsuWLeOll14CvGmLCxcuJCsrC4C5c+cyfPhwlixZwj//+U9aWlp48MEHWbZsmW9F+brrruPPf/4zS5cu5be//S0HDx7kscce4w9/+MMpeTydMSQWUfR6jQfLnGHx/PNno6hsaScpQkNhfRuhKgVOtzfk0mCy+ZXfryyoY3tZC0unZlBnshETpvKFZQRB4KmrxzAzK5Z3t1SwrayFiQOiePzKUbg9IrXGdhL1Ifx0sJnXN5Zh76IV3nmDY8hO0vHmpnJunzUwqDREhVxGm81JZKiyV6GXOqMNpfz0CiWc7K9Ooj6E95ZN5uGP9zBraBw3TslAq1ZQ2mhmYFyYFGqR8NHvgcnLL7+c//znPyxfvpy7776brKwsPv74Y6ZPn+4b8/TTT6NQKLjqqqtob29n9uzZvPHGG74cdIB3332Xu+++25cN8//t3Xl409eZL/DvT6tlWZblVZYXjA2ExdghJqxDzJZAwtbptEmAUtpM06HBSWgyT7c8M6Rp7yX3XpreSVMmk97epG0o0A4kvQ2EYE8IFGww8QIGwm5s433RamvXe/8wVhAWXsC2fhLv53n0PODfkXR0bL366fzOed/Vq1fjrbfe8h+XSqXYv38/nnvuOcyfPx8qlQrr1q3D9u3b/W20Wi2Ki4uxefNmzJw5EzqdDi+99FLAHPlYsjjceGlPNUq+aBtS++wkNV5ZMQUSiYDMhGhcbLEiMUaJlNgoNJnsSIhRQK2UoclkhyFOhTaLAz/adwZSQcBkvQaLJyf3Flu+zcysePzLh2eRlRCN7y3MwbkmCwrG6SCVCDhwphk7jlyB7Q41Lp9fPAGLJyfjo5oWPL94wpAv/l1ttyElNgoWh2dIucb7pATZCBVqodiXlp0Ug13PzsFfqpuwZU811AopkjRKfHNu1th3hokWF7gYxEitJb3casU//aEC14aQLGrtrAwcqGnBbzfORE5SDCQSAXKpgE6bK2CzS31nDzITouH0eNFmceJf/nIWx6904D82FCBZE4XcNG2/xyYibPhtOY5d6UDJS4WYkByDbqfn5tm8Ei/tqcZ/XQj+gZOdpMb/+Op01Hb24OsF6cMKtK0WR+83ipsXXIfC5yNcbLViSurYrOEdqkaTfUTWmN+L41c68F5pLVotvaUFp6drkZP4ZfHv8YlqLJ6SPKx0B2xkcYGLCPVxTTP++c+nh1xgOT89Dk/OzECaTgWdWoEWswMNNme/AJ2iVeJ6Rze0Kjn21zTjxLVObPtqHh7K1AUsc7M5PThzw4R5OYn4S3UTjl3pwIKJiUi9mSRLrZQhXafC9k8u4vQNU9A+qeRS/HrtQyi91oln5mfd/VkzDb3u58VWKx4YIE94KJjt7gE3Vo2Vq+02PJwVj+8+kgOH24sWswMenw9eH9Dt8uB8kwX/sKMUy6bp8b2FOf3qurLIxAkfRpHb68PPPjqP90/W4QfLJyM2auA3VWKMErPGx6P0aidmZOqgVclxvaMbNqc76Nm2UiZFVqIaEkGAjwjfXZCNgnE6GHvcIPRu9ycifO3fS/GN/3MSO0/U4WcfnYdKLsWv1s7w5wvvsDnxzHun8NfTzeiwBb9w+ZMnJuPTi21YPztz2MHc4/X5NxQlaZRD3hovCCO3nnuktFkc91yzdCREyaX+tMlR8t6/gwnJGjyg1+ChTB2+MWccPtw8Hy6vD2t+fRx/OtUAU0//3+2t+xVY+OOP7VFi6nHhe+9XouxaJ/59/UN4fHoqUmKjsOn9ijveZ3W+Aa+smAKgd6t+nEoBq8OD6en9g/mttNFyFE5KglwqwfhENVpv5ohJjFGgrrMHbVYn5FIBbx+5is5uF3697iHERStgtrth7HZhV3k9Om2uO+aWmZGhhdnuwcq81LsqMNzV4/JPswiCAKvDA5+PBgzWPS4PooaZ82UsiKHAsqnHhfhoxaAfrGqlDD95Ygoy4qPR1ePClj3VaDE7UDBOh6cfzsS4xOghF8Nm4YF/m6OgvrMHX91RirJrnQB683E4PV48OjUFyZrga9znZMdjzYMGtFgc/lUwHTbnoMEcAK60WWG2u/3ViYgAtUIGQRCQlajG/yuaj4ezEtBgtGPL0onIz9DC6yMopBL8+vAVfHS6GRduVqm/3bycBHxnQTYeztIhawhl14K5PfVrtEI66Jl3p801rKyOY2Uk8sncq79UNyFKLkXbEJO7bZgzDmseNOC9b8/CnzbNxazx8Xj1r+fwi08uiuIDio0cDuijYPep+oCLn6dvmLF5ZxV+8J9n/NMN0QopJus1eHJmOiQC8N/+fjryM+Jg0EbhQosVEkEYUrUZj9eHRpMDs8cn+H/2t8vteOXDGtTe7EOrxYnjV3vnzV9cMhHpumgcv9KBv55uxKcX2nCxNXgwX/OgAa+tnoYOmwuzsxOCthmMz0f9VoUMVhrO5yM0mezQRod+auN2vhCvISAiaKJkmJEZN2i1qFvJJL1v9dgoOdY8mIb/3DQXqXEqrH7rOCrrjaPVXTbGeMplFHz/0Um42m7DJ+e+3O1a8kXgztftX8/H47l6AMBXZqShxexAhi66NwWuVjXkYCaTSvDIxERc7+zxF674WkE6Wi0OPP5vR/HPyx7An041ICtBjR3rH0JtRzdkEgkcbi8+Ptsy4Kqbx6am4L8utGHW+Hh4fTTss1MiQn1XD8bdlp89bpA56M5u1x1LvYWaL/jS/DFzvbMHE5M1w77ISQj8IBIEAZsKc5CuU2Hjb8vxzN+Nx/OLJ/gvVrtvue7Bwgf/xkaBXNpbrHjhA0n9ji2YmAhBAH5ZfAlA7xtrXk4i8tK1uNJmQ5JGOewz0xtGe0BRi0/OteCtw1cgANhX0YhLrTYAwFufXkFmfDRKvmhB8flWHB4g6+NLj05CXVcPvj1/PPLS43DmDqtfBlLf1RO0FJ6P4N/hGszOk3Wi3Mo+WIKssXCptTfvznDdaTxX5hlw9AeLoFJI8czvPscbxZdwtd3mryc7kIF+hyw0+Ax9lChkErz9jQJ8+91T/rn0aYZYbPvqdJRd7cSMzDh0u7yIUcrQYnbA6fFiqmH4b9Q/fd6Ahq4ePDN/PHRqBT6uaUbRripoomTQRctxvrk3/e8Pl0/GNEMsfllyCRJBwJ+D5Gjp89zCHEwzxCI/I85/0Uwu7T2rH+qca11nN/TaqKBz5XKpAOMtF0pvdb2ju3dDlAjmqm/XanEEFNMOBenNtL0jSadWYFNhDv7pkWyU13bhjyfrYbG7MSNThxV5qUFX9ZxvskCnliNVG9r1+CwQB/RRFCWX4jcbZ+Lrb5fhi2YLJIKABLUSCyYmQRB6l4xZ7G7EqxWIkg//jPRKmxU/2VeDKLkUM7PikZUQjfLrXZAKvUsgr7T1npkbtFGYm50Ak7231ui8nES8d/w6rLftBl2db8CzC7KDXoidZohFeW3XkObSG012JGmUd0wJYHd777gxp6vHhfw7FOkINR8RVAPkgx9t12+WnBstgiBgdnYCZmcngIjw8p9P46d/PYfJeg0KH0hGXpoWbq8PHh+h2+nBEzfL3jHx4IA+ymKUMryzoQBPvPk3ZMZHo7PbibhoxT1tTrE5PTfXmAMvLpmIGzd3Lq759XFY7G48lKnD53W9F7pW5KXiX1dOhdPrxfsn6rB2ViZSYqPw4yem4Ccf1Pgf8+EsHd5cO+OOzykIApKHsNOz1eJAjFI2YLpbr4+CnmXaXV4kqBWiPDsHQrPl/1a1Hd1YNLl/nYDRIAgC/nXlVCybpseOz65iil6DpVPv76yX4YAD+hjIiI/Gzu/MxvQ07Yh8Xe5xeZCsUUKtlGFiigYWhxvf+r/lMPW4MS4+2h/M03UqPDM/C+1WJ6rqjXhx6ST/B8nTD2fgL9WNKL/ehWfmj8f3H5006POOT1Tj8+tddwzo7VYnlDLJgBtv2q3OgGBvcbhxrb0bdpcXMqkQUFxDbEIZ0Imo34XN0RYXrcCyaXrMyorHD/eewdK7rDjFxg7nchlEKPIxDIXF4Ybb4/OXHHvn6FX89wMXMHOcDuebLXhr3QxkJ8bAZHdDAIJWoW/o6oHF4cY0w+Br3ft02pzo6nZh4m1b8s12N2xOz6A5Tk43mJCfEYd2qxMnrnUiMUaJuTkJcLi9sLu8AxZCDrWhpiwYDRV1RmQlRIesxFxlvREnr3XhewtzQvL84Shsaoqy0IuNkkMuk6Dd6sQHVTfwbyWXIZcI+KLZgu8vnYQpqbG41mFDuk4VNJgDvd8chhPMASAhRol2mxO+W1Z8+HwE4yBFkZtMdpxrMsPY48LJa5346+kmrMo3YG5O75x8lFwq6mAO3F3FpZHS1e0Kab3QhzJ1uNJmw7V2W8j6wAbHAT2MuTw+vPzn0/j+nt7EXw9mxmHtrEw8Pl2P0w0mPDIxyZ8LfSQ9lKnDqetd/v/fMNr7rTXv619dZzeutNkQr1ZgmkGLqnoTnnrnBGaNF+/UitiYelyIE8Emq394KA0/3//F4A1ZyPAcepg632TBW4cv4+il3rXk4+KjUd1gQrPZga/MSMPy3NFbgRAll0ImlcDp8aLJ5ECyRhlwbaAv7W20QopxCYHpAl5cMhHxagUm68WVRVHMzjdZUCCCAtDzJiTiP45ew9V2G3KSRm+1Dbt7HNDD1KcXWnGgpgUzx+lwpd0Gj4+QER+N97416652WRIR2qxOeH0EmVSARBBA1Jvx0EcEqSDAR1/uOEzWKFFdb8KMTJ1/rbrD7UWjyQ4iYFKKJuhqFYlEwIq8VFxpt2GyXjzXJMTM46MhVYUaC4WTkvC3S+0c0EWKA3qYsbt6lx/+75LLAIDP64yIkkuQGR+N33xzJlKGkd+jj7HbBYfHC5VcOmht0FvJbikNd7XdhmiFdEhv9MQYJb5otmCyfthdvS+FOn/MraYaYnHwbMvgDVlIcEAPE91ODz4514L/9clFNJu/zLInlwrQRMnx+2dmDSsYA73rwRu6ehAfo0Cqevg7/lK1Klxps8Lh9mFiSsyQzyItDjcvfxsGMQX0tDgVrI7g5QlZ6HFADwOfXWzD5p2V/SoeTUiOwfav5+Nqm23YwdzY7YLT47vrlLh9FFIpEmPuvCv0Vl4f4YtmCzw+Qly0HETBNxixQGIYI6vDDbvbi4QYBfizWLw4oIvc4Qtt+MffnUKwvFB/NyERLWY7/n5G2rAes8XsgFwqQK+99wRYmQnRaOjqgdtLg+Y5OddkxjSDFlKJALfXhzM3zMhN04p2Z6hYKEIcQc12NwThywRfes7fIloc0EXsi2YLiv5Y2S+YS4TejIVfNFvwtYL0IZdpIyI0dPXmWRnJnCQZ8dFwe31ov3lRlUDweAleH8Ht9fkLXauVMn/wlkslmJ6mxdkmMyalaLjQwgBCPeNy+85fq2PwTIwsNDigi1SrxYFn3jvVb5plamos3v/ObPz8o/Mw2YPXGr2TRpMdaTrVqJwRy6WSoGfoPh/hXJMFCTGKfnOvEomAvPQ4XGq1IiU2ShS1Otng5FLJoCUEWWhwQBchh9uL7/7+84CLn30m6zXw+ghfmZGGNN3wvvpKBGHMpzckEgHT07W40mbFAynB155PStGAM1DcmQim0ANMM8TiQov1rtI9s9HFlzdEqN3qhE6twNIpyZiU8uUywOlpWvzPr+WhzepASmzUsNYC97g8IS3QMCFZM+A0jxgu/IUKEaHF7IDV4e73web2+kQX0B/PTcWJmzn+mbjwGboIZcRH471vzwIRwenxYebPS6BWSrHtq9NxtsmCFrMDy3OHtojb5yM0muyQSYdWo5SNPYfbB7PdjWazHd1OL6QSAQqZBESEdqtTdLVVJTc3m51tNA9ryo+NPg7oIiYIApQyCZ5blIMlk1Ogkkux8ld/w77n5g96XyLy79pM16nu6zNgsVMppHjgDqkQaju6IZeK53fn9HjR0GXHdxZkY/+ZZhSfb8W8nIS7LiLORhYHdJETBAHPLZwAoHcq5umHMwb8Cu72+tDV7YLT7Ru1C6Bs7JjtbmQn3dtegZF0scWKvJsVpVbkpeIJ0qPntgv3LHR4Dj2MmO0u/OjxKUjWKNHQ1RNwrC+PypkbJmhVcmQmRHMwjwCmHhfUA1R/Gmt5t5UHFITe5ahMHPg3EUYmJPd+LddEyeHy+NBpc0KtlKHD5oRCJkFanAppcSp4uBp7xIi5Ze0+Y4PhgB6mEmKUaLM6YHN6kK4LvNgZykIMbGRxzhs2HBzQw9hAxZpZZOCzczYc/PHPmIj15ZpnbCj4r4UxkSIimO2cN4UNHQd0xkTK1OMOKMbN2GA4oDMmUmqlDCY+Q2fDwAGdMZEy9biQPEiOecZuxQGdMZG62GrFxDtkqGQsGA7ojIlUu9WJGN6FyYaBAzpjjEUIDuiMiVQo89ez8MQBnTGR4k1FbLh4go4xkWkxO+D2+uD0cJI1Njx8CsCYyOi1UciIj0aMUgaHm3ONs6HjgM6YSC16IBnF51tD3Q0WRjigMyZSKoUUXh+hx+UJdVdYmOCAzpiILZ2agr9d7gh1N1iY4IDOmIjFKGUg4uWLbGg4oDMmcly1iA0V/6UwJmJWhxtx0fJQd4OFCQ7ojIlYTaMZuWnaUHeDhQkO6IyJmNXhgVImDXU3WJjggM6YiMmlXCSaDR0HdMZEiojg5d3/bBg4oDMmUnWdPZiUEhPqbrAwwgGdMZG63tmNtDhVqLvBwggHdMZEqqGrBzJeg86Ggf9aGBMpXt3ChosDOmMiFaviDUVseDigMyZSXIKODdc9BfRt27ZBEARs2bLF/7NvfetbEAQh4DZnzpyA+zmdTjz//PNITEyEWq3G6tWrcePGjYA2RqMRGzZsgFarhVarxYYNG2AymQLa1NfXY9WqVVCr1UhMTMQLL7wAl8sV0KampgaFhYVQqVRIS0vDa6+9xsmOWFjw+HjNIhueuw7op06dwjvvvIO8vLx+x5YvX47m5mb/7cCBAwHHt2zZgg8++AC7d+/GsWPHYLPZsHLlSni9X1ZnWbduHaqrq3Hw4EEcPHgQ1dXV2LBhg/+41+vFihUr0N3djWPHjmH37t3Yu3cvXn75ZX8bi8WCRx99FAaDAadOncKvfvUrbN++HW+88cbdvmzGxoTD7UW0gitEsmGiu2C1WmnixIlUXFxMhYWF9OKLL/qPbdy4kdasWXPH+5pMJpLL5bR7927/zxobG0kikdDBgweJiOj8+fMEgE6cOOFvU1ZWRgDowoULRER04MABkkgk1NjY6G+za9cuUiqVZDabiYhox44dpNVqyeFw+Nts27aNDAYD+Xy+Ib1Ws9lMAPyPydhYMNtd9NnFtlB3g92DUMSOuzpD37x5M1asWIGlS5cGPf7ZZ58hOTkZkyZNwrPPPou2tjb/sYqKCrjdbjz22GP+nxkMBuTm5qK0tBQAUFZWBq1Wi9mzZ/vbzJkzB1qtNqBNbm4uDAaDv82yZcvgdDpRUVHhb1NYWAilUhnQpqmpCdevXw/ad6fTCYvFEnBjbKzd6LLDoI0KdTdYmBl2QN+9ezcqKiqwbdu2oMcff/xx7Ny5E59++il+8Ytf4NSpU1i8eDGcTicAoKWlBQqFAjqdLuB+KSkpaGlp8bdJTk7u99jJyckBbVJSUgKO63Q6KBSKAdv0/b+vze22bdvmn7fXarXIyMgYcDwYGw1eH8Ht5Ws9bHiGFdAbGhrw4osvYufOnYiKCn728NRTT2HFihXIzc3FqlWr8PHHH+PSpUvYv3//gI9NRBCELxMR3frvkWxDNy+IBrsvAPz4xz+G2Wz23xoaGgbsN2OjITtJjdqO7lB3g4WZYQX0iooKtLW1oaCgADKZDDKZDEeOHMGbb74JmUwWcFGzT2pqKsaNG4fLly8DAPR6PVwuF4xGY0C7trY2/9mzXq9Ha2v/auft7e0BbW4/yzYajXC73QO26Zv+uf3MvY9SqURsbGzAjbGxplbK4OPVWGyYhhXQlyxZgpqaGlRXV/tvM2fOxPr161FdXQ2ptP/Ots7OTjQ0NCA1NRUAUFBQALlcjuLiYn+b5uZmnD17FvPmzQMAzJ07F2azGeXl5f42J0+ehNlsDmhz9uxZNDc3+9scOnQISqUSBQUF/jZHjx4NWMp46NAhGAwGZGVlDeelMzbmZBJOncuG6V6vqt66ysVqtdLLL79MpaWlVFtbS4cPH6a5c+dSWloaWSwW/302bdpE6enpVFJSQpWVlbR48WLKz88nj8fjb7N8+XLKy8ujsrIyKisro+nTp9PKlSv9xz0eD+Xm5tKSJUuosrKSSkpKKD09nYqKivxtTCYTpaSk0Nq1a6mmpob27dtHsbGxtH379iG/Pl7lwkLlXKOZzjXy3124CkXsGNGA3tPTQ4899hglJSWRXC6nzMxM2rhxI9XX1wfcx263U1FREcXHx5NKpaKVK1f2a9PZ2Unr168njUZDGo2G1q9fT0ajMaBNXV0drVixglQqFcXHx1NRUVHAEkUiojNnztCCBQtIqVSSXq+nV199dchLFok4oLPQ+l1pLTnd3lB3g92FUMQOgYgn6gZisVig1WphNpt5Pp2NuWvtNnxY3YTvPpKNGCVvNAonoYgdnMuFMRHLTorBswvG47mdlZzbhQ2KAzpjIqeJkqNo0QQcv9IR6q4wkeOAzlgYmDU+HpfbbGi3OkPdFSZiPCnHWJhYPzsTbxRfwvkmCx7MiMOmhTk8r84C8EXRQfBFUSZGhy+04Wq7DUqZBPMnJCI7iYtJi00oYgd/vDMWhm4Ye/CPfzcegiDg3eO1SI6N4rN1xnPojIWjRZOTIQgCWi0OdNicKK/tDHWXmAhwQGcsDKXrogEAbx+5ionJGnx+3TjIPdj9gAM6Y2Fs66pp+MqMNLSYHfB4uWTd/Y4n3RiLAEq5BJv/WIklU27m+zc7EK2QYkJyDBZMTIKUE33dFzigMxYB1s7KRIfNibnZiYiSS7CrvAFrZ2XgYqsV7x6vxcIHkjEhmVfCRDqecmEsAkxNjUVlnQlRcgl6XF6MT1RDEARM1sfiOwuyca7JjFaLI9TdZKOMAzpjEUAmlWDJlGT8ueIG1EoZiAjnm76sh7vmwTSkxHKN0kjHAZ2xCDEjUweVXIoPqxqRplPhAb0m1F1iY4wDOmMRZFW+AQ63F+ebLHwh9D7EAZ2xCPP0rEx8eqENRy+1h7orbIxxQGcsAj2/eCI276xEXWd3qLvCxhAHdMYiUGZCNLKT1Phl8aVQd4WNIQ7ojEUobbQCn/G0y32FAzpjEUopk8DU44aPS9fdNzigMxahCsbpoIuWQ8KrXe4bHNAZi1B5aVrotapQd4ONIQ7ojEWoXaca8N1Hxoe6G2wMcUBnLELNHKfDo1P1oe4GG0OcbZGxCLVxXlaou8DGGJ+hM8ZYhOCAzhhjEYIDOmOMRQgO6IwxFiE4oDPGWITggM4YYxGCAzpjjEUIDuiMMRYhOKAzxliE4IDOGGMRggM6Y4xFCA7ojDEWITigM8ZYhOCAzhhjEYLT5w6CqLceo8ViCXFPGGPhpC9m9MWQscABfRBWqxUAkJGREeKeMMbCkdVqhVarHZPnEmgsPz7CkM/nQ1NTEzQaDQQhcortWiwWZGRkoKGhAbGxsaHujijwmATH49LfUMaEiGC1WmEwGCCRjM3sNp+hD0IikSA9PT3U3Rg1sbGx/Ca9DY9JcDwu/Q02JmN1Zt6HL4oyxliE4IDOGGMRggP6fUqpVGLr1q1QKpWh7opo8JgEx+PSn1jHhC+KMsZYhOAzdMYYixAc0BljLEJwQGeMsQjBAZ0xxiIEB/QwYbVasWXLFowbNw4qlQrz5s3DqVOn/MeJCK+++ioMBgNUKhUWLlyIc+fOBTyG0+nE888/j8TERKjVaqxevRo3btwIaGM0GrFhwwZotVpotVps2LABJpMpoE19fT1WrVoFtVqNxMREvPDCC3C5XKP22vscPXoUq1atgsFggCAI+PDDDwOOi20MampqUFhYCJVKhbS0NLz22mujktdjsHHZt28fli1bhsTERAiCgOrq6n6PEWnjMtCYuN1u/PCHP8T06dOhVqthMBjwzW9+E01NTeE/JsTCwpNPPklTp06lI0eO0OXLl2nr1q0UGxtLN27cICKi119/nTQaDe3du5dqamroqaeeotTUVLJYLP7H2LRpE6WlpVFxcTFVVlbSokWLKD8/nzwej7/N8uXLKTc3l0pLS6m0tJRyc3Np5cqV/uMej4dyc3Np0aJFVFlZScXFxWQwGKioqGjUx+DAgQP0yiuv0N69ewkAffDBBwHHxTQGZrOZUlJS6Omnn6aamhrau3cvaTQa2r59+5iPy+9//3v66U9/Sr/5zW8IAFVVVfV7jEgbl4HGxGQy0dKlS2nPnj104cIFKisro9mzZ1NBQUHYjwkH9DDQ09NDUqmUPvroo4Cf5+fn0yuvvEI+n4/0ej29/vrr/mMOh4O0Wi29/fbbRNT7RyyXy2n37t3+No2NjSSRSOjgwYNERHT+/HkCQCdOnPC3KSsrIwB04cIFIup9o0gkEmpsbPS32bVrFymVSjKbzSP/4u/g9jep2MZgx44dpNVqyeFw+Nts27aNDAYD+Xy+ERyJQMECep/a2tqgAT3Sx2WgMelTXl5OAKiuro6IwndMeMolDHg8Hni9XkRFRQX8XKVS4dixY6itrUVLSwsee+wx/zGlUonCwkKUlpYCACoqKuB2uwPaGAwG5Obm+tuUlZVBq9Vi9uzZ/jZz5syBVqsNaJObmwuDweBvs2zZMjidTlRUVIz8ix8isY1BWVkZCgsLAzaeLFu2DE1NTbh+/frID8A94HEBzGYzBEFAXFwcgPAdEw7oYUCj0WDu3Ln42c9+hqamJni9Xrz//vs4efIkmpub0dLSAgBISUkJuF9KSor/WEtLCxQKBXQ63YBtkpOT+z1/cnJyQJvbn0en00GhUPjbhILYxiBYm77/h3Kcgrnfx8XhcOBHP/oR1q1b50+0Fa5jwgE9TPzhD38AESEtLQ1KpRJvvvkm1q1bB6lU6m9ze3pfIho05e/tbYK1v5s2oSKmMQjWlzvdV4zuh3Fxu914+umn4fP5sGPHjkHbi31MOKCHiZycHBw5cgQ2mw0NDQ0oLy+H2+3G+PHjodfrAfT/NG9ra/N/0uv1erhcLhiNxgHbtLa29nvu9vb2gDa3P4/RaITb7e53ljGWxDYGwdq0tbUB6P8tItTu13Fxu9148sknUVtbi+Li4oA0uOE6JhzQw4xarUZqaiqMRiM++eQTrFmzxh/Ui4uL/e1cLheOHDmCefPmAQAKCgogl8sD2jQ3N+Ps2bP+NnPnzoXZbEZ5ebm/zcmTJ2E2mwPanD17Fs3Nzf42hw4dglKpREFBwai+9oGIbQzmzp2Lo0ePBixPO3ToEAwGA7KyskZ+AO7B/TgufcH88uXLKCkpQUJCQsDxsB2TYV1CZSFz8OBB+vjjj+natWt06NAhys/Pp1mzZpHL5SKi3iV7Wq2W9u3bRzU1NbR27dqgS/bS09OppKSEKisrafHixUGXYeXl5VFZWRmVlZXR9OnTgy7DWrJkCVVWVlJJSQmlp6ePybJFq9VKVVVVVFVVRQDojTfeoKqqKv/KBDGNgclkopSUFFq7di3V1NTQvn37KDY2dlSWLQ42Lp2dnVRVVUX79+8nALR7926qqqqi5ubmiB2XgcbE7XbT6tWrKT09naqrq6m5udl/czqdYT0mHNDDxJ49eyg7O5sUCgXp9XravHkzmUwm/3Gfz0dbt24lvV5PSqWSHnnkEaqpqQl4DLvdTkVFRRQfH08qlYpWrlxJ9fX1AW06Oztp/fr1pNFoSKPR0Pr168loNAa0qauroxUrVpBKpaL4+HgqKioKWHI1Wg4fPkwA+t02btxIROIbgzNnztCCBQtIqVSSXq+nV199dVSW5g02Lu+++27Q41u3bo3YcRloTPqWbwa7HT58OKzHhNPnMsZYhOA5dMYYixAc0BljLEJwQGeMsQjBAZ0xxiIEB3TGGIsQHNAZYyxCcEBnjLEIwQGdMcYiBAd0xhiLEBzQGWMsQnBAZ4yxCMEBnTHGIsT/B7ZDgy8akQN0AAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "bzm.plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "f7e252b2-0aac-4f81-b1a8-0b8699ff7e1d", - "metadata": {}, - "outputs": [], - "source": [ - "# bzm.to_file('bzm_Rijnland.shp')\n", - "# all_others.to_file('all_others_Rijnland.shp')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b3940975-92e4-4e2b-841e-2502b3776cb6", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "374d9b69-5770-48e8-9de6-f20b8e2b4d15", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_22236\\761390022.py:6: UserWarning: The indices of the two GeoSeries are different.\n", - " bzm.geometry = bzm.symmetric_difference(all_others)\n" - ] - } - ], - "source": [ - "bzm = bzm.set_crs(crs='EPSG:28992').reset_index(drop=True)\n", - "all_others = all_others.set_crs(crs='EPSG:28992').reset_index(drop=True)\n", - "\n", - "bzm.geometry = bzm.buffer(1)\n", - "bzm = bzm.dropna(subset='geometry')\n", - "bzm.geometry = bzm.symmetric_difference(all_others)\n", - "bzm = bzm.dropna(subset='geometry')\n", - "\n", - "total = pd.concat([bzm, all_others])\n", - "total = gpd.GeoDataFrame(total, geometry='geometry').reset_index(drop=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5af48a5b-fcd2-4318-b52f-c8f23817d757", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "6732df48-89b5-4351-9a45-d529cc7697f9", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_22236\\2749980879.py:21: FutureWarning: Currently, index_parts defaults to True, but in the future, it will default to False to be consistent with Pandas. Use `index_parts=True` to keep the current behavior and True/False to silence the warning.\n", - " exterior = exterior.explode().reset_index(drop=True)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n" - ] - } - ], - "source": [ - "from shapely.geometry import Polygon, MultiPolygon, shape, Point\n", - "from shapely.ops import unary_union,cascaded_union \n", - "\n", - "def convert_to_polygon(line):\n", - " if line.is_ring: # Checks if the LineString is closed\n", - " return Polygon(line)\n", - " else:\n", - " return line # Returns the line string as is if it's not closed\n", - " \n", - "total = total.explode(ignore_index=True)\n", - "total = total[total.geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n", - " \n", - "# total = total.explode(ignore_index=True)\n", - "total = total[total.geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n", - "\n", - "\n", - "total['area'] = total.area\n", - "dissolved = total.dissolve()\n", - "exterior = gpd.GeoDataFrame(geometry=dissolved['geometry'].boundary).to_crs(crs='EPSG:28992')\n", - "total = total.to_crs(crs='EPSG:28992')\n", - "exterior = exterior.explode().reset_index(drop=True)\n", - "exterior['geometry'] = exterior['geometry'].apply(convert_to_polygon)\n", - "exterior['area'] = exterior.area\n", - "exterior = exterior.sort_values(by='area', ascending=False).reset_index(drop=True)\n", - "\n", - "#get rid of some exteriors which should not be filled in\n", - "exterior.loc[exterior.area != 67444.410779918616754]\n", - "exterior = exterior.iloc[8::]\n", - "exterior = exterior.reset_index(drop=True)\n", - "\n", - "exterior = exterior.reset_index(drop=True)\n", - "\n", - "# new_gdf = gpd.GeoDataFrame(columns=total.columns())\n", - "\n", - "for i in range(len(exterior)):\n", - "# for i in range(10):\n", - "\n", - " buffered_peilgebied = total.buffer(0.)\n", - "\n", - " exterior_sample = exterior.iloc[i:i+1] #just pick a single sample\n", - " exterior_sample.geometry = exterior_sample.buffer(0.0001) #let op! hierdoor komt er alsnog een kleine overlap. Maar anders werkt de code even niet, en vanwege tijdgebrek kan dit nu niet worden opgelost. In het bepalen van de crossings wordt hier echter mee omgegaan.\n", - " \n", - " intersects_mask = buffered_peilgebied.intersects(exterior_sample.iloc[0].geometry)\n", - " intersecting_polygons = total[intersects_mask].sort_values(by='area', ascending=False)\n", - "\n", - " if len(intersecting_polygons) > 0:\n", - " # print(i)\n", - " # polygon_to_dissolve = intersecting_polygons.iloc[0:1]#.geometry.unary_union \n", - " # sample_geometry = exterior_sample.geometry#.unary_union\n", - " intersecting_polygons = gpd.GeoDataFrame(intersecting_polygons.iloc[0:1], geometry = 'geometry')\n", - " \n", - " # dissolved_polygon = # dissolve/union them\n", - " all_geometries = list(intersecting_polygons.geometry) + list(exterior_sample.geometry)\n", - "\n", - " # Use unary_union to dissolve all polygons in the list\n", - " dissolved_polygon = unary_union(all_geometries)\n", - " \n", - " original_index = intersecting_polygons.index[0]\n", - "\n", - " # Ensure it's a single geometry object.\n", - " # print(len(total.loc[total.index == original_index, 'geometry']))\n", - " # print(len(dissolved_polygon))\n", - " total.loc[total.index == original_index, 'geometry'] = dissolved_polygon#['geometry']\n", - " # new_gdf = pd.concat([new_gdf, dissolved_polygon])\n", - " else:\n", - " print('No intersection found for iteration ', i)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "109088b3-6593-49a5-a800-51154d1b458e", - "metadata": {}, - "outputs": [], - "source": [ - "exterior.to_file('exterior_Rijnland.shp')" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "b9ab4a14-30af-4a7c-a3a4-f08d4f3d081d", - "metadata": {}, - "outputs": [], - "source": [ - "Rijnland['peilgebied'] = total\n" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "794f58c9-5a41-4b08-96d4-c2c40d632d2f", - "metadata": {}, - "outputs": [], - "source": [ - "Rijnland['streefpeil'].waterhoogte = Rijnland['streefpeil'].waterhoogte.round(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "ef631fb5-bf60-40f1-b7d5-da6c3d239751", - "metadata": {}, - "outputs": [], - "source": [ - "#reload the boezem. It has been buffered and then clipped on the other peilgebieden, to make sure all gaps are filled\n" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "28675925-8e85-42a9-ae0e-2c39bad15c86", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
codenen3610idglobalidgeometryarea
0PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363NL.WBHCODE.13.Peilgebiedvigerend.7682dummy_globalid_peilgebied_6POLYGON ((100416.597 479665.902, 100416.596 47...8.872630e+00
1PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363NL.WBHCODE.13.Peilgebiedvigerend.7682dummy_globalid_peilgebied_6POLYGON ((100265.398 479731.704, 100265.394 47...3.606838e+02
2PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363NL.WBHCODE.13.Peilgebiedvigerend.7682dummy_globalid_peilgebied_6POLYGON ((100256.025 479865.950, 100264.082 47...1.081529e+02
3PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363NL.WBHCODE.13.Peilgebiedvigerend.7682dummy_globalid_peilgebied_6POLYGON ((100053.575 478917.651, 100053.648 47...8.758138e+00
4PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363NL.WBHCODE.13.Peilgebiedvigerend.7682dummy_globalid_peilgebied_6POLYGON ((116604.646 464224.245, 116607.555 46...7.272443e-05
..................
8804WW-09KNL.WBHCODE.13.Peilgebiedpraktijk.1707dummy_globalid_peilgebied_1357POLYGON ((97104.931 460639.993, 97105.856 4606...1.404138e+06
8805RL-010-3.1NL.WBHCODE.13.Peilgebiedpraktijk.1708dummy_globalid_peilgebied_1358POLYGON ((94163.596 465298.477, 94165.318 4652...4.345614e+05
8806WW-09ANL.WBHCODE.13.Peilgebiedpraktijk.1709dummy_globalid_peilgebied_1359POLYGON ((98639.002 459871.114, 98639.002 4598...2.268386e+06
8807WW-25AHNL.WBHCODE.13.Peilgebiedpraktijk.1998dummy_globalid_peilgebied_1360POLYGON ((101455.305 456467.297, 101403.881 45...3.520037e+06
8808RL-029-01.1NL.WBHCODE.13.Peilgebiedpraktijk.2003dummy_globalid_peilgebied_1361POLYGON ((104401.424 493474.238, 104409.770 49...3.294050e+04
\n", - "

8809 rows × 5 columns

\n", - "
" - ], - "text/plain": [ - " code \\\n", - "0 PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363 \n", - "1 PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363 \n", - "2 PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363 \n", - "3 PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363 \n", - "4 PBS_RIJNLANDSBOEZEM - Aanvulling PBS-00363 \n", - "... ... \n", - "8804 WW-09K \n", - "8805 RL-010-3.1 \n", - "8806 WW-09A \n", - "8807 WW-25AH \n", - "8808 RL-029-01.1 \n", - "\n", - " nen3610id globalid \\\n", - "0 NL.WBHCODE.13.Peilgebiedvigerend.7682 dummy_globalid_peilgebied_6 \n", - "1 NL.WBHCODE.13.Peilgebiedvigerend.7682 dummy_globalid_peilgebied_6 \n", - "2 NL.WBHCODE.13.Peilgebiedvigerend.7682 dummy_globalid_peilgebied_6 \n", - "3 NL.WBHCODE.13.Peilgebiedvigerend.7682 dummy_globalid_peilgebied_6 \n", - "4 NL.WBHCODE.13.Peilgebiedvigerend.7682 dummy_globalid_peilgebied_6 \n", - "... ... ... \n", - "8804 NL.WBHCODE.13.Peilgebiedpraktijk.1707 dummy_globalid_peilgebied_1357 \n", - "8805 NL.WBHCODE.13.Peilgebiedpraktijk.1708 dummy_globalid_peilgebied_1358 \n", - "8806 NL.WBHCODE.13.Peilgebiedpraktijk.1709 dummy_globalid_peilgebied_1359 \n", - "8807 NL.WBHCODE.13.Peilgebiedpraktijk.1998 dummy_globalid_peilgebied_1360 \n", - "8808 NL.WBHCODE.13.Peilgebiedpraktijk.2003 dummy_globalid_peilgebied_1361 \n", - "\n", - " geometry area \n", - "0 POLYGON ((100416.597 479665.902, 100416.596 47... 8.872630e+00 \n", - "1 POLYGON ((100265.398 479731.704, 100265.394 47... 3.606838e+02 \n", - "2 POLYGON ((100256.025 479865.950, 100264.082 47... 1.081529e+02 \n", - "3 POLYGON ((100053.575 478917.651, 100053.648 47... 8.758138e+00 \n", - "4 POLYGON ((116604.646 464224.245, 116607.555 46... 7.272443e-05 \n", - "... ... ... \n", - "8804 POLYGON ((97104.931 460639.993, 97105.856 4606... 1.404138e+06 \n", - "8805 POLYGON ((94163.596 465298.477, 94165.318 4652... 4.345614e+05 \n", - "8806 POLYGON ((98639.002 459871.114, 98639.002 4598... 2.268386e+06 \n", - "8807 POLYGON ((101455.305 456467.297, 101403.881 45... 3.520037e+06 \n", - "8808 POLYGON ((104401.424 493474.238, 104409.770 49... 3.294050e+04 \n", - "\n", - "[8809 rows x 5 columns]" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Rijnland['peilgebied']" - ] - }, - { - "cell_type": "raw", - "id": "b423b998-bf46-446a-8144-959ac58f994f", - "metadata": {}, - "source": [ - "The globalids and codes are not unique anymore, due to the additional code. This leads to uncoupled streefpeilen. Add the peilgebieden and streefpeilen together, change the codes and globalids, and then split them again" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "9649bce0-3bd2-4290-b722-f486386cd08e", - "metadata": {}, - "outputs": [], - "source": [ - "combined = pd.merge(left = Rijnland['peilgebied'],\n", - " right = Rijnland['streefpeil'],\n", - " on = 'globalid',\n", - " how = 'left',\n", - " suffixes = ('', '_sp')).reset_index(drop=True)\n", - "\n", - "combined = gpd.GeoDataFrame(combined, geometry='geometry')\n", - "combined.code = combined.code + '_' + combined.index.astype(str)\n", - "combined.globalid = combined.globalid + '_' + combined.index.astype(str)\n", - "\n", - "Rijnland['peilgebied'] = combined[['code', 'nen3610id', 'globalid', 'geometry']]\n", - "\n", - "Rijnland['streefpeil']['geometry'] = None\n", - "Rijnland['streefpeil'] = gpd.GeoDataFrame(combined[['waterhoogte', 'globalid', 'geometry']], geometry='geometry')" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "ab75c0ae-3675-446d-b3bf-a2209dc3f6ad", - "metadata": {}, - "outputs": [], - "source": [ - "Rijnland['hydroobject'].code = Rijnland['hydroobject'].code + '_' + Rijnland['hydroobject'].index.astype(str) \n", - "# Rijnland['peilgebied'].code = Rijnland['peilgebied'].code + '_' + Rijnland['peilgebied'].index.astype(str) \n", - "# Rijnland['peilgebied'].globalid = Rijnland['peilgebied'].globalid + '_' + Rijnland['peilgebied'].index.astype(str) " - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "a155f289-27f9-4726-84db-f813ce1cc25b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
codenen3610idglobalidgeometry
0174-058-00080-04_0NL.WBHCODE.13.Hydroobject.789716{FEB49A57-8C9D-48CB-A895-8777D12CB9D9}LINESTRING (97388.109 468171.303, 97385.257 46...
1077-058-00326-01_1NL.WBHCODE.13.Hydroobject.49229{C0DC5E47-14DC-41B9-ADFF-D0ED9FA2DC5B}LINESTRING (103968.757 456387.807, 103975.602 ...
2077-058-00336-02_2NL.WBHCODE.13.Hydroobject.49249{9D984A0E-AB4E-4EDA-B199-B9E567CBF455}LINESTRING (104940.751 455095.857, 104940.812 ...
3077-058-00342-02_3NL.WBHCODE.13.Hydroobject.49263{090E19AD-C548-4AE9-AEBA-50F03D10A375}LINESTRING (103817.911 456698.921, 103818.571 ...
4077-058-00342-04_4NL.WBHCODE.13.Hydroobject.49265{9FA9FC47-B2B8-4D75-9F9E-0953A337E3F6}LINESTRING (103893.043 456453.097, 103893.701 ...
...............
35957107-033-00333_35957NL.WBHCODE.13.Duikersifonhevel.476989{34F1AB6A-C46D-446E-9486-CD57207C726A}LINESTRING (91159.591 469326.780, 91148.178 46...
35958078-033-00082_35958NL.WBHCODE.13.Duikersifonhevel.360366{DEFA63AE-0702-4963-9BAF-213F07945CFF}LINESTRING (99934.878 463132.555, 99936.654 46...
35959016-033-00187_35959NL.WBHCODE.13.Duikersifonhevel.476991{9E75C497-43F4-449D-A6A9-AADF1466C3E8}LINESTRING (96179.051 465624.809, 96180.499 46...
35960162-033-00066_35960NL.WBHCODE.13.Duikersifonhevel.176321{48A5C8C9-C806-4F2E-B409-5E9A3D56CEF4}LINESTRING (99593.400 468415.310, 99587.290 46...
35961111-033-00208_35961NL.WBHCODE.13.Duikersifonhevel.5999{943D3470-654F-4CF4-A3BC-DE4D3951A37E}LINESTRING (103012.597 464630.046, 103014.255 ...
\n", - "

221060 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " code nen3610id \\\n", - "0 174-058-00080-04_0 NL.WBHCODE.13.Hydroobject.789716 \n", - "1 077-058-00326-01_1 NL.WBHCODE.13.Hydroobject.49229 \n", - "2 077-058-00336-02_2 NL.WBHCODE.13.Hydroobject.49249 \n", - "3 077-058-00342-02_3 NL.WBHCODE.13.Hydroobject.49263 \n", - "4 077-058-00342-04_4 NL.WBHCODE.13.Hydroobject.49265 \n", - "... ... ... \n", - "35957 107-033-00333_35957 NL.WBHCODE.13.Duikersifonhevel.476989 \n", - "35958 078-033-00082_35958 NL.WBHCODE.13.Duikersifonhevel.360366 \n", - "35959 016-033-00187_35959 NL.WBHCODE.13.Duikersifonhevel.476991 \n", - "35960 162-033-00066_35960 NL.WBHCODE.13.Duikersifonhevel.176321 \n", - "35961 111-033-00208_35961 NL.WBHCODE.13.Duikersifonhevel.5999 \n", - "\n", - " globalid \\\n", - "0 {FEB49A57-8C9D-48CB-A895-8777D12CB9D9} \n", - "1 {C0DC5E47-14DC-41B9-ADFF-D0ED9FA2DC5B} \n", - "2 {9D984A0E-AB4E-4EDA-B199-B9E567CBF455} \n", - "3 {090E19AD-C548-4AE9-AEBA-50F03D10A375} \n", - "4 {9FA9FC47-B2B8-4D75-9F9E-0953A337E3F6} \n", - "... ... \n", - "35957 {34F1AB6A-C46D-446E-9486-CD57207C726A} \n", - "35958 {DEFA63AE-0702-4963-9BAF-213F07945CFF} \n", - "35959 {9E75C497-43F4-449D-A6A9-AADF1466C3E8} \n", - "35960 {48A5C8C9-C806-4F2E-B409-5E9A3D56CEF4} \n", - "35961 {943D3470-654F-4CF4-A3BC-DE4D3951A37E} \n", - "\n", - " geometry \n", - "0 LINESTRING (97388.109 468171.303, 97385.257 46... \n", - "1 LINESTRING (103968.757 456387.807, 103975.602 ... \n", - "2 LINESTRING (104940.751 455095.857, 104940.812 ... \n", - "3 LINESTRING (103817.911 456698.921, 103818.571 ... \n", - "4 LINESTRING (103893.043 456453.097, 103893.701 ... \n", - "... ... \n", - "35957 LINESTRING (91159.591 469326.780, 91148.178 46... \n", - "35958 LINESTRING (99934.878 463132.555, 99936.654 46... \n", - "35959 LINESTRING (96179.051 465624.809, 96180.499 46... \n", - "35960 LINESTRING (99593.400 468415.310, 99587.290 46... \n", - "35961 LINESTRING (103012.597 464630.046, 103014.255 ... \n", - "\n", - "[221060 rows x 4 columns]" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Rijnland['hydroobject']" - ] - }, - { - "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", - "metadata": {}, - "source": [ - "### Check for the correct keys and columns" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "gemaal\n", - "['code' 'nen3610id' 'globalid' 'geometry' 'func_aanvoer' 'func_afvoer'\n", - " 'func_circulatie']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "afsluitmiddel\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "duikersifonhevel\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "hydroobject\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "streefpeil\n", - "['waterhoogte' 'globalid' 'geometry']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n", - "aggregation_area\n", - "['code' 'nen3610id' 'CODE_AFW' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "peilgebied\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n" - ] - } - ], - "source": [ - "show_layers_and_columns(waterschap = Rijnland)" - ] - }, - { - "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", - "metadata": {}, - "source": [ - "### Store data" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", - "metadata": {}, - "outputs": [], - "source": [ - "# Check if the directory exists\n", - "if not os.path.exists(output_gpkg_path):\n", - " # If it doesn't exist, create it\n", - " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = Rijnland, \n", - " output_gpkg_path = output_gpkg_path + '/Rijnland')\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0090fd91-40eb-48e1-aa99-2360a13a708e", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Routing", - "language": "python", - "name": "routing" - }, - "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.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rivierenland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rivierenland.ipynb deleted file mode 100644 index 8eff3bf..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Rivierenland.ipynb +++ /dev/null @@ -1,818 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", - "metadata": {}, - "outputs": [], - "source": [ - "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", - "import os\n", - "import fiona\n", - "import shapely" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", - "metadata": {}, - "outputs": [], - "source": [ - "from general_functions import *" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "4c2a1a6e-1255-4481-9d94-b0206f40e94d", - "metadata": {}, - "outputs": [], - "source": [ - "pd.set_option('display.max_columns', None)\n" - ] - }, - { - "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", - "metadata": {}, - "source": [ - "# WSRL" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "#define relative paths\n", - "waterschap = 'WSRL'\n", - "data_path = \"../../Data_preprocessed/Waterschappen/WSRL\"\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/WSRL\"" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "c0f66000-73e6-4b06-b5a2-8308213c2461", - "metadata": {}, - "outputs": [], - "source": [ - "#WSRL has delivered the data per catchment. Loop through each catchment, and concat all data to a single dictionary\n", - "WSRL = {}\n", - "\n", - "for root, dirs, files in os.walk(data_path):\n", - " for file in files:\n", - " if file.endswith('.gpkg'):\n", - " gpkg_path = os.path.join(root, file)\n", - " \n", - " if WSRL == {}:\n", - " WSRL = read_gpkg_layers(gpkg_path = gpkg_path,\n", - " variables = ['Stuw',\n", - " 'Gemaal',\n", - " 'Hydroobject',\n", - " 'Duikersifonhevel']) \n", - " else:\n", - " temp_WSRL = read_gpkg_layers(gpkg_path = gpkg_path,\n", - " variables = ['Stuw',\n", - " 'Gemaal',\n", - " 'Hydroobject',\n", - " 'Duikersifonhevel']) \n", - " for variable in WSRL.keys():\n", - " WSRL[variable] = pd.concat([WSRL[variable], temp_WSRL[variable]]).reset_index(drop=True)\n" - ] - }, - { - "cell_type": "markdown", - "id": "7469bb6f-dc28-43b3-b9cb-2d4505b5d5fd", - "metadata": {}, - "source": [ - "Additional data is given in another gpkg, which includes the peilgebieden" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "5018d1e6-f7ba-4e02-b01a-6d83a3a5e9a3", - "metadata": {}, - "outputs": [], - "source": [ - "gdb_path = r\"..\\..\\Data_preprocessed\\Waterschappen\\WSRL\\OverigeGegevens.gdb\"\n", - "WSRL_gdb = read_gpkg_layers(gpkg_path = gdb_path,\n", - " variables = ['PeilgebiedenPraktijk'])\n", - "\n", - "#add the gdb to the dict\n", - "# WSRL['peilgebiedafwijking'] = WSRL_gdb['Peilafwijkingen']\n", - "WSRL['peilgebiedpraktijk'] = WSRL_gdb['PeilgebiedenPraktijk']" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "fc85db32-bb81-4f7f-9a38-2bd89b3fc658", - "metadata": {}, - "outputs": [], - "source": [ - "#change names\n", - "WSRL['stuw'] = WSRL.pop('Stuw')\n", - "WSRL['gemaal'] = WSRL.pop('Gemaal')\n", - "WSRL['hydroobject'] = WSRL.pop('Hydroobject')\n", - "WSRL['duikersifonhevel'] = WSRL.pop('Duikersifonhevel')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "773fed7a-3d4c-4106-8826-96b5bb9c0307", - "metadata": {}, - "outputs": [], - "source": [ - "aggregation_area = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Aangeleverd\\Aanvoergebieden_detail\\Aanvoergebieden_detail.shp\")\n", - "# aggregation_area = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Aangeleverd\\Aanvoergebieden_detail\\Aanvoergebieden_detail2.shp\")\n", - "aggregation_area['code'] = aggregation_area['GAFNAAM']" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "6b5ecbfe-fcad-4982-80a6-db7d4fb71787", - "metadata": {}, - "outputs": [], - "source": [ - "#add aggregation areas\n", - "aggregation_area = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Aangeleverd\\Aanvoergebieden_detail\\Aanvoergebieden_detail.shp\")\n", - "# aggregation_area = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Aangeleverd\\Aanvoergebieden_detail\\Aanvoergebieden_detail2.shp\")\n", - "aggregation_area['code'] = aggregation_area['GAFNAAM']\n", - "\n", - "#not all peilgebieden should be aggregated. The Linge and other boezems should remain as single peilgebieden. \n", - "#For now, remove these aggregation areas and check the result\n", - "\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'pannerling']\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'kuijkgemaal']\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Aftakking']\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'van beuningengemaal']\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Linge Tiel_Buren']\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Linge']\n", - "\n", - "aggregation_area = aggregation_area.loc[aggregation_area['GAFIDENT'] != 'AANV_D_352']\n", - "aggregation_area = aggregation_area.loc[aggregation_area['GAFIDENT'] != 'AANV_D_459']\n", - "\n", - "#due to some non logical overlap, remove the aggregation area in Oostkil as well\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Oostkil']\n", - "\n", - "#there are two aggregation areas in one peilgebied, which makes the two aggregation areas redundant. Remove it\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'bonte morgen']\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'de waaij']\n", - "\n", - "#the peilgebied and aggregation area do not overlap at all. Try to see if this works properly\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'z20']\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'z16']\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'duisterestraat gemaal']\n", - "# aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Hedel/ Stuvers']\n", - "\n", - "#add some dissolved aggregation areas.\n", - "#Elst\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'eind a15 stuw']\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Weeneb']\n", - "\n", - "elst = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Uitprobeersel\\aggregatiegebieden\\elst.shp\")\n", - "aggregation_area = pd.concat([aggregation_area, elst])\n", - "\n", - "#Overwaard\n", - "aggregation_area = aggregation_area.loc[aggregation_area['code'] != 'Overwaard']\n", - "\n", - "overwaard = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Uitprobeersel\\aggregatiegebieden\\overwaard.shp\")\n", - "aggregation_area = pd.concat([aggregation_area, overwaard])\n", - "\n", - "\n", - "aggregation_area.reset_index(drop=True, inplace=True)\n", - "aggregation_area = gpd.GeoDataFrame(aggregation_area, geometry='geometry')" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "e905074a-ad4b-4234-9946-4b8de446d9ab", - "metadata": {}, - "outputs": [], - "source": [ - "#some peilgebieden are not connected through hydroobjecten. \n", - "#For schematisation purposes its more convenient to aggregatie the peilgebieden upfront\n", - "#Delete the peilgebieden first from the loaded peilgebieden, and add the dissolved peilgebieden afterwards\n", - "\n", - "#Werkendam\n", - "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'LHA201-P']\n", - "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'LHA202-P']\n", - "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'LHA203-P']\n", - "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'LHA204-P']\n", - "\n", - "werkendam = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Uitprobeersel\\peilgebieden\\werkendam.shp\")\n", - "WSRL['peilgebiedpraktijk'] = pd.concat([WSRL['peilgebiedpraktijk'], werkendam])\n", - "\n", - "#Asperen\n", - "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'TLW635-P']\n", - "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'TLW636-P']\n", - "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk'].CODE != 'TLW637-P']\n", - "\n", - "asperen = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\WSRL\\!Uitprobeersel\\peilgebieden\\asperen.shp\")\n", - "WSRL['peilgebiedpraktijk'] = pd.concat([WSRL['peilgebiedpraktijk'], asperen])\n", - "\n", - "WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'].reset_index(drop=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d50cf6f5-1785-4765-804e-4d669440c189", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "76f6a7a2-c71e-4137-8f48-bc2364933816", - "metadata": { - "tags": [] - }, - "source": [ - "# WSRL, goed leggen boezem" - ] - }, - { - "cell_type": "raw", - "id": "1778c025-f5aa-47b6-9423-416da12114a9", - "metadata": {}, - "source": [ - "Doel: de boezem (Overwaard) goed in de schematisatie krijgen. PvA:\n", - "- Inladen aggregtatiegebieden en hydroobjecten\n", - "- Selectie overwaard\n", - "- symmetrical difference van de aggregatie gebieden en boezem\n", - "- mogelijk nog uit elkaar trekken van bepaalde gebieden" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "4c0f36cf-593a-4e6a-a08a-41b8d1cca128", - "metadata": {}, - "outputs": [], - "source": [ - "# select the praktijkpeilgebieden of OVerwaard\n", - "overwaard = ['OVW202-P', 'NDW102-P', 'OVW200-P', 'NDW100-P']\n", - "overwaard = WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['CODE'].isin(overwaard)]\n", - "overwaard = overwaard.reset_index(drop=True)\n", - "\n", - "# create an unary union, and then take the difference of those with the aggregation area\n", - "overwaard_union = overwaard.unary_union\n", - "aggregation_area['geometry'] = aggregation_area.geometry.difference(overwaard_union)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "3ac3f810-7ab7-4708-a7e2-912c5cae4fb9", - "metadata": {}, - "outputs": [], - "source": [ - "# aggregation_area.to_file('agg_area_WSRL_kan_weg.gpkg')" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "8f723908-098d-4cff-bf9f-ec07a4d122c6", - "metadata": {}, - "outputs": [], - "source": [ - "# there are now some disconnected parts in the aggregation areas. Explode these to maintain logical units, and dissolve them back\n", - "to_explode = ['AANV_D_414', 'AANV_D_413']\n", - "to_explode = aggregation_area.loc[aggregation_area.GAFIDENT.isin(to_explode)]\n", - "aggregation_area = aggregation_area.loc[aggregation_area.GAFIDENT != 'AANV_D_414']\n", - "aggregation_area = aggregation_area.loc[aggregation_area.GAFIDENT != 'AANV_D_413']\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "6b4e1b07-7ad0-42ea-b24e-02a2a1ee564a", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "test = to_explode.explode(index_parts=False).reset_index(drop=True)\n", - "test['kleur'] = test.index\n", - "\n", - "test['area'] = test.area\n", - "test.sort_values(by='area', inplace=True)\n", - "test = test.loc[test.area > 1000] #only select the areas which are larger than 1000 m2, as many small parts are created\n", - "test.plot(column=test.kleur)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "7810693a-ca71-4721-bfa1-3ae9c6976239", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAADRCAYAAADopjcSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACzXklEQVR4nOydd5hcdfX/X3d6b9t7yW42vWeTkEDovUlTUKSJqAjSbPjVn1hQREUFUVAEBAQbvfcWSNv0utkk23ub3uf+/pjdyc7uzO7MlhS8r+fJAztz586ddu/5nPM+7yOIoigiISEhISEhISExLmRH+gAkJCQkJCQkJI5lpGBKQkJCQkJCQmICSMGUhISEhISEhMQEkIIpCQkJCQkJCYkJIAVTEhISEhISEhITQAqmJCQkJCQkJCQmgBRMSUhISEhISEhMAMWRPoCjnUgkQmtrK0ajEUEQjvThSEhISEhISKSAKIo4nU7y8/ORyaY2dyQFU2PQ2tpKUVHRkT4MCQkJCQkJiXHQ1NREYWHhlD6HFEyNgdFoBKIfhslkOsJHIyEhISEhIZEKDoeDoqKi2HV8KpGCqTEYLO2ZTCYpmJKQkJCQkDjGOBwSHUmALiEhISEhISExAaRgSkJCQkJCQkJiAkjBlISEhISEhITEBJCCKQkJCQkJCQmJCSAJ0CUk/gfodvn5aF8XOUYNxRk6CixayTdNQkJCYpKQgikJic8gv35jLzta7dTU93HD6nJ++1YtEfHQ/dNzDJRk6Ll2ZRnLy21SYCUhISExAaRgSkLiM4Qoiry7p5O/rTmIJxAGYGauKS6QAqjtcFHb4eKtXR3MyjPxvbNmcHxlphRUSUhISIwDKZiSkPiMUNvh5Kcv7+Kjfd1xt8vlowdIu9ocfPlv61lWZuPhLy/BrFVO5WFKSEhIfOaQBOgSEsc4Tb0eXtnWhkYhZ0N974j7Oxy+lPaz7mAvtzyzmWA4MtmHKCEhIfGZRspMSUgcw7y3p5Pv/ncbFdkGim06wsPreYDHH6Yy28C+Tteo+7p2ZRmXLC7kl6/t4YfnzpqqQ5aQkJD4zCEFUxISxyidDh83P7MZpy9Ep9PPJ/t7YvdplXK8wahmamtzPwe73aPu66w5uXzjpGlkGtT8/dPQlB63hISExGcNKZiSkDhGeWNXB07focBnRq4Ro0aBgIBaKSMYCrOhoZ9+T5BQgozVIAuLLPz+CwtRKWT4gmGmZekPx+FLSEhIfGaQNFMSEscoHn+I2fnR4dvVZTb2tDvZUN/H+vpePtrXTY87yP+dXcUnBw5lrHTKkT95dyBE3UAJsK7TxZ8/OMBX/76RNrv38LwQCQkJiWMcKTMlIXGM8t7eTna2Oji+MoOP63pG3J9n1vCvjS3kmzXU93gwquXMzDOxvr4vto1Ro8CqU3Hhg2swaZR0u/wAvLmrg4YeD6/cvAqFXFpzHU28t6cTdyDESVXZ6NXRU7goRjOPkrWFhMSRQQqmJCSOMURRZFNjP+sORjv3fMEI8wstbGnqj20zM89IS5+X/d1ubHoV1aU2drc7GFrsm5alp9cdiO1nMJAaZG+Hk6c3NHHl8pKpfkkSY9DnDlDf4+b1ne089MEBAFQKGQsKLfR6AhzsdqNRyLhwYQHXrCxjWpZeCqwkJA4jgji4pJFIiMPhwGw2Y7fbMZlMR/pwJP6H2dvu5Gev7OLjum5EEeYXmlHIZTT1euhx+ZmVb2Z7i518i4Yiqy4WJA2lutRGbaeTaVkG6jpd2L3BUZ9zfpGFF25cOVUvSSIFRFHk2sc28N7erpQfU5Kh49SZOczINbKw2MK0LIMUXEn8z3E4r99SZkpCYooJhSP4QhH0Kvm4LmjhiMjPXtnFo2vqY7cVWrRsbbbHbXew28W8QjNFVi2vbG9PuK/1Az5UNQ19Ce8fTm27k0AogkohlfqOBKFwhO/8Z1tagRRAQ4+HRz4+GPvbqlOyvDyDuy6YTbZRM9mHKSHxP48UTElITCHrD/byjadq6HYFUMoFLFolFy8u4ntnzUh5H//vxR08ubYRiGqcnL4Q+VYtzf3xAnG1Qs6CQhN72ke3QUgHbzDMrjYHC4osk7ZPidQQRZF739jLs5tbJryvPk+Q13a0s7Ghjz9/aRGLS2yTcIQSxyL13W6e3tDIqopMso0a/KEw4YhIVa4RnUoKCcaL9M5JSEwRe9od3P7vLXS7AgAEwyJdrgBPrWvg0iWFTMsyjLmPln4v/1gXDaSqy2y09Hvx+EMc6Io34FxaaqUi28Df1zYBUJFtwB8K09SbWkdeVa4RAfCHwhzs9sTd99ym5sMeTPmCYWo7nKgVcnJNGpr6PPR7gqysyPifKFdFIiI/eXkXj31SP6n77XL6ufhPn7K4xMo5c/O4aFEBFp1qUp9DYvLwBEI09Hho6PHQ5fJjUMtZWmqj0Kob9z5//eZeXt7WFtPeDaJSyLh2ZRnfOqUSrUo+0UP/n0PSTI2BpJmSGA++YJjV975Hh8M/4r4lJVZKM/X8+tL5o+4jEIpw4R/XsKfdwaISKxsHuvBOrMri/b1dWHVKCqxa5uSbeWdPJ13O+OcyqORU5ZrY3NQ3YtDxUKrLbKwf0FctKbGycVgJUKOU8ejV1ayYlpHKS58Qoiiyo8XB/e/u481dHSPuf+1bxzMz77P9O4xERH780k7+/mnDlD+XWavkulVlXHVcqTST8Sji7V0dPPLxQT4dYmtSaNHS0u9FBKpyjMwrNDMz30R5pp5soxqVQkZth4uGHg/HTcsgGI5Qlqknw6CO7aO2w8np93046nPnmjRcsriQ+UUWjq/MRKM8dgOrw3n9loKpMZCCKYl0cftDfO3JmhEDhwepLrWyoaGPK5eX8MNzZ6FMYj3w3OZm7nx2OxXZBra3OGK355s1OHwhXP4QVx1XwktbWsm3atGpFARDEba32ONMOgssWiw6JX3uAO5AOE50XpVrZG+7M/b39BwDFq0SBCEWYGUb1eSaNdx22nROrMqe0HszGqIocv4Da9jeYk+6zZXLS/jphXOm7BiONKIo8sMXDpV1DxdapZz3v30iOSZJT3WkeXtXB9c/sZHhV+Y8swaZTKDAoiUYjhAKR7BoVXxU102GXkWPOzBiX8U2LXMLLCjkAjPzTIQj0dJxqpRn6fn3DSviArJjCUmALiFxDPPwhweSBlIATn8IUYwGKV97oobZBWb8wTDtDh9LSm18aVkxDm+IR9fUk2vWxAVSAK12HydOzyLXrObJtY2EIyK9nkMB0ux8E1qVPJbJUitk7G5zEBGjWaahmDXxp4DaDhfLy23UtjtZUmpFjIjsbXeyrdnO9X/fSFWukeVlGSwts3HyjOykgeB4ONjtHjWQAnhibQNnzM5lVWXmpD3vZBMMR2jo8VCRPXYZdyit/V7ueX0PL2xpnaIjS443GObrT9bw2LXVmDRShupI8dS6Bh764MCIQAqg3xPEGwzT0neodL+gyIRGISPTqE4YTLXbfTh93fR5grywpRWtUsaSEiv7UujkLbBoyTSo+dvHB/n2malrPP9XkTJTYyBlpiTS4T81zXz/2W0Ew8l/VrPzjexsdSa9f/X0LILhMDtbnQlPeCqFjIsWFvDMhqZRj0UpE6gut9Ha70s6m6+61EZdpzMuGKvMMWDVqWKZqWRk6FVcu6qMfIuG8+blT9jc87XtbXz9qU1jbqdTybnn4nmcOy/vqNNPhSMi33pmMy9va+OyJYV8/6yZWPVRTVIoHEEmCMhk0WP2BcP4gmGMGiXv7O7g7ld3U9/jGW33U87ychvPfHXFET2G/0X2dTh5YUsrD7xXl/D+GblG9rSPPGdUZOtp7PUSCEUSPm5J6SF5wFByTWr6PEH8SR4H0ZK/fOC7+suL51KWmd7i4GhAykxJSBwF7O9y8aMXduALRvjVJfNGFYyLoshDHx7gl6/tSWHPowcAH9Qmb4NXyWV8cVlxnE1CMoIRkW5XYNQhx+vrexGE6Hy+NruXdoeffR0u5heZ0avkuAPhpI/tcQdiJYPSDD0Li61jHtNo7GpzsKzMltAfayieQJibnt7MXS/t4qoVJdx0SuWEnnciOH1Bupx+HL4Qbn+Ihz48wIcDn9+/Njbz4tZWTpyeTYFVy+s72rF7g8wrNOP2h9jZ6mB2volgWGRXm2OMZzo8bGu24w2EJQHyGLy1q4NNjX30e4Io5QKz8kzMKTBTmWNArUjvvXttexu3/HNL0sBmcYk1Nu5pOKGwmDSQApAlWGyo5AK5Zi3tCfScQznQ7cIbjOANhPm4rueYDKYOJ1IwJSGRgAffr+N3b+0jEI6eqD7/0FoeunIxi4otiCKx7MIg3/nPNv5d0zzmfpeWWtnd5qAy24BVr6K130tzX+oz8M5fkJdSIAWwsNjC5sb+MbcTRdjc1I9SLpBjVNPh9LO1yU5ltoFul58+z+jlAIBn1jfyl48O4PCG+OKyYuYWmlPuOOp0+PjxSzvZ1tyPy588eBtOt8vPb96qZUGxheMrs1J+3ER5f28n/6lppqnXQ22HC28w+TH7ghFe3xnv+fXJ/kOi4uFeYUcauSCMKAVLRIl2urp5Zn0Tj39an7AUZ9Io+POXFnNcxdhl6H5PgF++tocPajsJhpMHRG12b9KSnHqMbPD6g72xBYpWKceqV6JTKeKmJSSj1z32717iEFIwJSExjA31vfzq9XiRZrfLz8V/+gSlXGD19GwuXVLI9BwjOSY1OpWCIls0cJAJcP78fF7Y2jriZFuVY2BjQx+iCPuGrDQLLVryrVoc3iANvR68SbJBSrmQUmAD0dVnSxpBGkStG5QKGTNyDexpd7Gv00WmQcXSUitbm+1JV8BZRjXPbW4hMFDa/LguqheryDagU8kptGpZVGzl2pVlI4JQgL+tqefV7e0YVHLMOhX9Kb7GQW55ZguPXL30sNg3bKzv5ZrHNiS8kH4WmF9kod3hI8+sPdKHcsRw+0NsberHHQizv8vF27s6qO1wxrSOo+Hwhbjir+uoLrNxxuxcCq1aRBEWFVvIMKiRCVHN4/f+u41P9/cQiojYdEqMGmXSgCnPpKW135fwPmUKge+6g73MLzTT6fSTb9EmLPuNhUEtZSrHQgqmJCSGIIoiD32wP+n9wbDI27s7eHt3B0Z11HpAp5LzpeUlfPfMGfzmzb1sbOjj8urimD8URAOhZCfj5n4vBo0Cg1qOMMrZ+uQZ2by9uzOl17Gg2Dqm5mmQFeUZtPR7aez10NznpSxTH7uv2xWg2xVgfqE5aRal2KajxjmyZDBYmtjWbOfjum7a7D5uPqWS9Qd7cXiD7O9y4fKF2DlQ4nIFwszM19DSn14Q2OMOcNGDazhnXj7XrSo7NJewy02GQcXCIsuEtVVrD/QQCEU4YXoWz31jJf+paeI/Nc34gskzCkeK0gwdWUY1dZ2ulIPvQSKiyKaGfs6Z99kLpkLhCA5fCIVciIns+z0BZDKBbqef5ze3sL3FzrqDvXhGKW+nwvqDvWP+/uRC1JZkW3P/qN8jkeTnBFWKOsXB3+54bA7MWiXuNDLG/6tMKJj6xS9+wZ133sm3vvUtfve73424/4YbbuDhhx/mvvvu45Zbbond7vf7ueOOO3j66afxer2ccsopPPjggxQWFsa26evr4+abb+bFF18E4Pzzz+f+++/HYrHEtmlsbOTGG2/k3XffRavVcsUVV/DrX/8aleqQCd327dv55je/yfr167HZbNxwww388Ic/POqEqxJHnlA4wi9f25NywDIjz8SGgVXehvo+Tp6ZzS2nVvLrN2sxqON/WouKrUm1QMU2LRatgk1Ndmw6FSatmFDPkGlQER7NMGoIu1rsLCyyIAK72xxJ9RilGTo+PdDDvAIzmhwDWpWCrQlKAMnE5QUWbUqjabyBMI98fDBuxMkg84vMsf8f70UsIsJLW1t5aWsrgkBc0Jpv1jCnwMzKikzmFZoxa5Vsbe7ncwsLk+9wAKcvyC9f28NTA4HxRYsKuPtzc/nZhXM5qSqbO5/bntBLbCyyjWqKbDrkMgGlTKDL5cflC+ELhSnLNKCQCTT2emizJ85IDMegllOZbUQhF9hQ30d9jycl/dlwNtT3YtEqOWdeXuw2URSP2fOl2x/iibUNuHwhntnQFBvmXZ6pxxsMx72/M/OM9LoCEw6kUmVxqS2lBU+ibO4g6XbTHux2c3xFJp8e6ImzTxkNpy/IO7s7+JI08HxUxh1MbdiwgYcffph58+YlvP/5559n3bp15Ofnj7jvlltu4aWXXuKZZ54hIyOD22+/nXPPPZeamhrk8mjkfMUVV9Dc3Mzrr78OwFe/+lWuvPJKXnrpJQDC4TDnnHMOWVlZfPzxx/T09HDVVVchiiL3338/EFXyn3baaZx00kls2LCB2tparr76avR6Pbfffvt4X7rEZ5THPqnnrwku9oMMjnKBaBltZ+sh0bA3GGZrUz+/+NxcAqEI4SFXc5VcGLXlv7HXi1GjJBCK0O7wkWlQUWjVxmmpZuebONCZ+pgYVyDM5oGgSKOQsazMRm2Hc0SmYjDo29ZiRy7A0lIbSrkQ141oUMnZk0QgnW9JLZNk06noSJC9Amjv96FWyPCHItg9gYTGoekwPLnXavfRavfFTECry6xsqO8j16RlxbQMwhGRRz4+wAe1XXgDYeQyAZ1KgcMXpKHHQ++QlvNnN7VQ2+HkB2fP4pSZObxZYuP/vbiD59O0M5idb4rN21tYZKG241DZt9cdfe0yIdpRtbfDGfveDSXHqKYkQ4c7EGZPuzP2eQ+ysaGP0gxdWh2CwbDIzjYHvmAYjVLOrlYHP35xJ7ecWpmSDuhoIRiO8ObODn795t6EDRgHEty2u83JnAITCrlAS5Ky2mSyv9OFXCZg1SkpHgisQxFxhM7RP0rWSjlKoJWMrc39LCu3saauJ+k2ghDt1rXqVCjlsgF5wrEbVB8OxmWN4HK5WLRoEQ8++CA/+9nPWLBgQVxmqqWlhWXLlvHGG29wzjnncMstt8QyU3a7naysLJ544gk+//nPA9Da2kpRURGvvvoqZ5xxBrt372bWrFmsXbuWZcuWAbB27VpWrFjBnj17qKqq4rXXXuPcc8+lqakpFrA988wzXH311XR2dmIymfjTn/7E97//fTo6OlCro6Zjv/zlL7n//vtpbm5O6YshWSP873D5w2vjHIcHseqUTM8xsqG+lyWlNgRgX4eLadn6WGZqkDNn5/KnLy3ie//dzj83Rq0LZueb4gKv4SQSitv0Ktz+IP5Q9Od5eXUx7+/tIBwBhVzA6Q3iTDP1rpDB/EILB3vc9LqDzMozJewiW1Zmo6nXQ583iDcQprrUFhuQPBSjRkEgFI4d43BMWgUzc6NGgYLAiPdq+HPGRLI6JWqlnE6Hb9RuwvGiVckJBMOERZhfaKbXE0h57M5QLlyQz3fPmkGeWcvrO9r4wXM7Enr9DEchE/jFxXP59r+3AYld54di1CjINWlQK2SoldHAVq9W0JkkOB3KaOXZZGQb1dxz8Vw+ruvh0TUHiYjR7+Pr3zqe7GPA1DMQinDe/R+ztyO5/choLCyyjAhMp4rhwa5WKcM7LHjSquRJdZTHV2aO6mmXjAy9kpIMPZuGnXeMGgXZRjX13W6Gu7u8fNMq5hSYOZY4nNfvcbVt3HjjjZxzzjmceuqpI+6LRCJceeWVfPvb32b27Nkj7q+pqSEYDHL66afHbsvPz2fOnDl88sknAHz66aeYzeZYIAWwfPlyzGZz3DZz5syJy3ydccYZ+P1+ampqYtusXr06FkgNbtPa2kp9fX3C1+b3+3E4HHH/JD7biKLIL17djd078kJYXWrDHQiz7mAvETGqhWjs9TAtW5+wI+b1ne389aOD/Pj82VSXRYfJakfRKdh0yoQr54psfSxIyTKqsXsD5Jq1FNt0lGbomVNoZmmJlbKBURKpEIpATWM/WqWc8iw9yRa1+zpdCIKASi5wfGUGGxsSlyJm5pmSBlIAM3KMrDvYy8aGvlEDKYBNjX3kmjV4g9HMUL8nwOwhJ269KjqjbzLwBsLkmKP72tpsH1cgBfD8llZW/+p9fvj8DuYVWnjj1hM4Z27eqI/5zplVbP/xGZwxOzd221jlFqcvxL5OFztaHdQ09OEOhFMKpCB5eXY09GoFf/7gAI98fDA2hqjXHWBrsx3fKJ2Lg3gCIXa22tnRYic0SpfaVNDt8vPTl3eiUshQytPLosiEaLdtw2H0+hqeNfQGI9j0h0xTbTpV0kBqIvS4g2iUcmbkGplbYEKvkmNQK5iWqSfToB4RSAE8PslzIj9rpF3me+aZZ6ipqWHjxo0J77/nnntQKBTcfPPNCe9vb29HpVJhtcZ70uTk5NDe3h7bJjt75NiK7OzsuG1ycnLi7rdarahUqrhtSktLRzzP4H1lZWUjnuMXv/gFd911V8Jjl/hs8vt39vHQhwdYUnroO6lVyphbYEmYkel2+cnQq9Ao5ATDI8svv3x9D/OLLDxy1RKu+Mu6mPFdIkoy9CNWwYuKLaw/eCj4WFWRyQtbWkbM18sxqbHpVWTodeSaNHQ6fWN6x0C0lNNhdzO3yMKyMhsRUYwLdnrdAfLMGkJhkU5nIOFcP6NaQd0oK3+5AI1pdBMGwyI5JjWRiEhTn5ciqxa3P8iMXCPdLj8KuYz2FPVDqZCsOypdAuEIT6xt4J8bmrhmVSn3XjKP8xfkc+s/t+AJhEeUTGfkGulx+7nzuR2x2xTjKNWkQmW2ISU9G0QbJKpyjHQ5/dg9QfQqOXKZEKfR+7/nt2PUKLn/8oWjzkd8fnMrdz63HYh+R81aJQuLLFj1ar62unzKBiv3ewJc+cg6VAoZJRm6Md30h7MkRQ3TVJNt1MRsCXo9AWbmGTFqFBzoctPtClCepae+201EjC4Ex4NBJY91LA5qDBcXW9nS1MeCJH5x/9nUzJdXlDK38NjKTh0u0lq2NDU18a1vfYunnnoKjWbkKrGmpobf//73PPbYY2nXVofXYxM9fjK2GfzyJTu+73//+9jt9ti/pqbRXaYljm3e39vJ797eB0C300+RTUt1qQ25TJYwkILohV+jlDMz35QwuxOOiNz4j014A2Eev7Yaqz7xeA6rTsm2YSf8skw9O4bcJhPA5Q8mDGg6HH52tzmRywQcviA2vYrFJRaqSxOfDAfpdPoJibC5sZ8N9dHOpWVlNiqyDnXxmbVKDBpF3Ny+oVTlGuNc04czv8iSdvCztcnOrIGLdFOfl5Z+H3kmDRrF5AZSU0EgHOGhDw5w7gMfU2zT8dRXlnHe/HxuOrmSQquWH5w9k4++cxInz8jhXxuaYsaeENWnTAVtdh+6gdZ5hSxqFauUC+SZ1QjA4mIL8wrMzM43YdGp2NHqoMPpR6kQaHf4WFxsidtfh8NPXaeLC/64hr6BcmYwHImdU52+ID0uP38c4uLd4fBzsNtNXaebP3+wn2+k4HCfDr5gGFEU+deGJk75zQfIZQJbm+y8tas9lhlOBaNGwc40g68cY3Qxo5QLKGTE3uuJYhw24ml3m5P1B/vINWmYV2jmQJcbvUrOwmILAlFvuHRxBcKUZOjjmj92t9lZUGzFoJaTlWAWnyjCXS/tHHcA91knrcxUTU0NnZ2dLF68OHZbOBzmww8/5IEHHuCee+6hs7OT4uLiuPtvv/12fve731FfX09ubi6BQIC+vr647FRnZyfHHXccALm5uXR0jJwY39XVFcss5ebmsm7durj7+/r6CAaDcdsMZqmGPg8wIqs1iFqtjisLSnw2iUREXt7exvf/uy12W0OvB61CllLZZ2ebg8osAwuKLCN0BwBdTj+3/3srf7+2mtl5Zl7fMfL7XGjVjpi7l2lQxZX9TpiexXt7kjuiQ9RHRhDAqlPR6w6QoVexotyGTCbQ5/azq82FXCBh6j4iws5WB6UZOpr7vMwrMLOtxY4nEE7apVaZbRhTIG73Bqkus9Hl9HGwO/WyiScYorrMRigcHdj8Xm0Xi0usKOUyDk5i+WVBkZktTZNvmHmgy83Ff/qEB65YyP2XL6TL6ef648vjHMX7h/kJbajvY16hmW2TbODp8odiWrTKHCP+YIRMo5r1B3tRygVqkhi6Dn7u3a5AQv2QKIrc/Mxmim063tzVgcsXQhCinZgquSxmdAvRDKZBI6emMfp9+WR/Dztb7czOn1h2IxiO8OTaBu55fQ/BUIRFJVZUChk7Bn5P/pCIRilDp5Kn1J2nVylod6QXsGcYVOxqiy42LDolJTYdO1vtjGJInhLJJhbsGKK7dPrDcTrLkgwdZRl6PMEQ4UjU6HOs7OugXjLToKIkQ49Ro+D9vYfONdNzDJi0SvZ1OLF7oxn4PW0OXtzaygULCsb78j6zpBVMnXLKKWzfvj3utmuuuYYZM2bw3e9+l7y8PM4444y4+8844wyuvPJKrrnmGgAWL16MUqnkrbfe4rLLLgOgra2NHTt28Ktf/QqAFStWYLfbWb9+PdXV1QCsW7cOu90eC7hWrFjBz3/+c9ra2sjLi+oU3nzzTdRqdSzYW7FiBXfeeSeBQCBml/Dmm2+Sn58/ovwncXTiC0Y7lWbkGsflkQLRFfPG+j7W1HXTavfS0uflQJcbpz++RCeKUJqpj50gk7GgyEKf20+7w0efJ7ng+KN93Wxq7EOeRLuhU438+e3vcqNTyvAMiFBtelVKLcyiSKzrrMcd4NMD0axaaYaO5WU2wsNKedWlNrY09cWMNut7PMzINdLU56E8S8+BruSdg5EUVqb7u9zs73IzO980olyUjKWl1rjy5iA1DX2snp5JY583ZWuIsRGYV2gmHImMOidxPHgCYa57fCP3XDSPy5YWjbj/jNm5VGQb+O1btTGD0uFGpUqZwPRcI3qVHIcvlHAuWyqsO9jLCZWZfDggUh7sYhttduRQWvu9yATiMqPBsMhH+7oxqOUUWnWUZepj5bHAMI1UVa6RHS12KrL19LmD5Fs0/O7tWoxqJb+5bP64usPa7V6+/tQmtjT2M7/QQq8nkFCT92FtNxctLODZzS1AtMQqiiQUprc7fEzPMcR1VY7F0GPv9wTp90RfZ10aXbeJ6HYFqMg2JB0hk4iGHg8quSzODLgiW48oRn+LYz1ftytAjlFNpkFFtyt6Hhl8LxQygSUlVnrcAXzBMPe+sZeTZ2RjlAZix5FWMGU0GpkzZ07cbXq9noyMjNjtGRkZcfcrlUpyc3OpqqoCwGw2c91113H77beTkZGBzWbjjjvuYO7cuTFB+8yZMznzzDO5/vrreeihh4CoNcK5554b28/pp5/OrFmzuPLKK7n33nvp7e3ljjvu4Prrr4+p9q+44gruuusurr76au6880727dvH3XffzY9+9COpxfMopLnPw2Nr6tnWYqffE+BAlzsWSMzMM/HXq5ZQYEnNTHBrUz9/en8/PW4/NQ19CctkiUjlBKGQCTT3eZmWbUAkmoVKxuBJLhHrDvaO6OTqdQdYVmZjY0MfFy0s4JXtbakdeBLqezzU93ioLrVSXWalodtDcYaO9fW9VJdaWT/kIjR4wa7MNiYNptK1LdjZ6kjpMUtKraOK1DfW97FyWga1na5xl/xMGgXlmQbqOp2x5gG9Ss6sPOOYAXS6iCJsa+nn5JnZZA4rmaysyGRlRSZv7uyIucV3Of1Ul9kQxeistdoOV6wDdCLO7jIBPMFw2hfnQTqc/qSfn8sfXegsTVJWPm6ajUAogkYljwUYPe5ALBsbjIjkDzQCfOOkCszasX97+zqc3P3qblRyGSatki3N/aNuv6PVzheWFnHZ0iIWFlm4/9069r6V+LM2pfD8Qxke2J9YlYVaLptwMAVRW4LEI48Tk21UxwVSAHWdbjL0qevTOpxRLejsfBP7u1wxI9FQRBzx+T/84QFuP70qjSP87HNEHNDvu+8+FAoFl112Wcy087HHHot5TAE89dRT3HzzzbGuv/PPP58HHnggdr9cLueVV17hG9/4BitXrowz7RzEbDbz1ltvceONN7JkyRKsViu33XYbt9122+F7sRIp4fKHOPv3H+FI4KcDUePJ8+7/mN9/YQH5Fi3/rWnm0iVFMbfuPneA5j4vu9rsvLunkzd2jiyrpYI7kPj5h9LvDZJn1mLSKMdcybr9IVSK5FqKjQ19LCyy0Gr3xsor7kCI/9ywnPve2cfCYgsddj91XelfCIeyvr4Pq07J/CILmxv70KrkCf2HFDLocScODnUqeUJ/nrHY2NCX0EAyz6yhyKZjX4dzzBEX7kCYNft7WFxsIRIRU+5mg2hGorYjmt1cP+x53IEwu9qcLCy2sLPFHsvUTZTbT5vOsnIbJ/36fWblmbjjjCqWlsZreKxDLnTeYHiE+Lk0Q0eOSUNDz/gvzhExGogOBjyz800Y1Apa0pgJWdvppMimTVj+XlhkocPhR62QMSPPiEYhxxsMY1Ar2NPuGHW+20tbD3lzvbCllXsvnZd0xmJdp5NXt7fz4Pt1abnO13a4ePCLi6jINgLR0pVMiC4YBCGaqRsck+TwBpk2RDcoEwQEYSADNfC1iIjiwL+R7uM/OHsm7+/t4o1d4zv3DKU1xSkAKoWM+YVmIhES/ibS1Tf1uAP0uAMY1XLmldpo7vckLBe+v7dLCqaGMS6fqf8lJJ+pw8MTn9bzwxd2jrmdTIC5hRa2NvWTa9Iwt9BMXacrqc4gXbRKOQJirMyWiFyzZsAZUhhTZ3HH6dOx6lX8YEj3ViIWFlnQq+VsauznrDm5vL6jPeaxJAgwPcdIrkmDUi7Q7Qywo9WesoPxcGblGbHqVHyyv2fEoIrqsuQdTaPdlwpLSqzsaXdQlWvC7R9f6arAosWqV8a0MaNh1iopzdCxtdmOWaugwKLFqFEmdQU3qBVUZOtRyGXsbLGP8PtJh/fuOJHXd7Rzz+t7AJDLBG47bTpfXz0NmUzA7g3y90/q+c1btQkfn2NS4w2GcQxoVeYWmOh2+Wmzp++2rlHI0KkV6NVy3L5QrHFgSak15TltChksKLJyoNsVFyCtqshgV6sDhy+IViknw6Am26ROWK4dC0GAEyqzyDGpkctk+IJhwpEIu9ucI7Iu6XDWnFy+d/YMNAo5XU4fOpWC8ixD7P7Wfi+hsEiBRcPxv3qP1hQznzedXEFFtoHfv72PA91u3rl9NVadioseXJOWUWoy8s2aMY9leAl2OGWZ+gmfGxcVW9jf5Y6bHTgj18jrt5wwof0eDg7n9VuazSdxxIlERP62pj61bUVi407aHT7ad01ul5c3GKbQqsXT5yXPrE548QqEwggITMvWk2fWsLW5P+kJzekLkW0c2x+p3xtkc1M/s3KN7O1wxplViiLsbXfGddbNKzSTa9Kwu81BU5oDjXe1OdEq5RxfmUm308+ugf3mmdVsbkx8EZydb6Kpd3wnZZteRWW2gQ6HD08gnHK7/nBkQnQO4KcHephfaEYUYXe7I6H+Z16BmeY+b8yw0u4NYfc6EYR4J/uhuPyhmCg9x6RmboE+OjdtHIpihzdIY++hC2o4InLvG3vZUN/Lby6dz85WB79/Z1/Sx3c4/FGzV6+DEpsOnUpBOJJ+IAXgC0WozNWwt80Zl3kLh0Vm5hmp7XCNqUULRaIZRo1CxsIiC6FIBLlMoNvlZ1q2AZkgsKvVESsrjwdRhA9q45stlDIhzm8sXWbmGZHLBD7/0Fra7VGn/S8tL0EmwKvb27l4cSEnz8gm36JBLpdx3oJ8HvrgQEr7vv/dOs6Zm8cL31zJGzs70KujhrPpzkNMhk4tj1lUXLyokMocI/u7XCjlMgQBmno9fFzXTSAYTrr4m4wBxZsa+7HqlHHmw6n4jf2vIWWmxkDKTE097+7p4NrHEvuWHQmWlFjZ1txPcYYeo1rO7jZn3AVVIROoyNZj0igJhsVR3ZKvP76MWfkmbv3n1qTbDNWzrKrIjOloUiFDr2JpmZV3dnUSHEemKt+ioSLLQLfLj1IuS+iWrVHK8Acjo4xbjUevklOcocOkUdLvDbKvw5myZm00Er03RrWcAqsWuUxGliE63NfuDSR1h1fIBIpsupRX68U2HS5fcFQbiOEsLrHS0udNmrU0a5X89rL52PQqbnp686jltmVlNlz+4IRE8uWZehy+YExYPIhJo8DhC1GaoUOlkCUsWVflGDHrlAgMlowEXP4gTl+IHvfhmWP31FeqUcrlXPnIuqQzJociDIzhsehUfLSvK6Wy4K8umcdlS4po7PGw+tfvJRxInozvnzWDG1ZP48Z/bOKEykx2tNh5bUdHbA7gRDhumo1ck5bNTf0c7HZz9+fmcsWyId3yEZGnNzTw/p4uDna7R4jNJzqaaShqhUChVcf+LjcKmcDen501qofe0YCUmZL4n6G+280vXt1zpA8jjkAoQkW2MdY6PHwcTCgiUtfpTqnM5vSFUMlHXx1adVHhqyBAniU9l+8ed4DXd3SwsNiCwxscs3NnOK39Plr7fczMMyYdO+ILRiiwaEadV6aUCywosuAJhNnb7mT3JAu6kwWZTn+YPe0ulpXZeL92dAsJtULG9BwD21scLCq20OMK0NA7ehalsdeDTa/ColOO6Lgbjl4lxx0Ik2NUj5p9s3uDXPf4Rr5+4jRe+OZKvvff7byVQGdjUCtot/vGPMbRmFdoZlerY8R3Nd+s4bVbTqCmoZdfvb6XPe1OFhVbkMsEPIEwDT0eXP4QJq0iYWnXplcdtoHA/6lp4b7PL2BZeUacPxdEfzMLiyysqsyiItuAXinnd+/sG9Nxfzj/WNfI796q5arjSjm+MmvE84zGA+/WceqsHFaUZ/Dd/0a73TMMKqrLbFi0SkRRxOEL0dTrSVi2M2oUWLRK9GoFRo0CnUqBUiYgk0VlBIPdiABPr2+MC6bkMgGvP8LbuztRyAQWFVvIMqjp8wbZ2tQ3qcGOPySikEV1YpU5Rlr6vBRn6CZt/8c6UjAlcUR4bM1B/vBuXdwQ2aOF4Uaag8OAh5KqXqmu08VJVYlFtRAVde9udWBQyzlnXj7PbmpO72AHCIQiHOhyU2TTEg6LeILhMS/+Qxkt+EkkHh9OOCLSavfRkmbJMRWOm5bBmv2Js3V6lZxp2YYxjw/AH4qgUcrjXs+cAtNASS75cfe6A8zINcS9n4qBobRD8QTD3HrqdPZ2pDaC6k/v72dzYx+/u2wBi0us3PvG3rhymzcYxqpXjTuYmp0fLQsl+q5esqQIs1bJyTNyWD09m5e3tfL0+kYaejx0OHxU5RrZ3eZM6lV0OBMSr25v48fnz2ZVRTSYkssEFpdYOWduHmfOySVnyJih2g5n2s7nRTYtvmCYVruPX7y2h1VpDnR2+kN84eG1PHr10pjjfY8rQI8r/jupUsioyjGSbVIjE6Ijk+y+IH3uYMql+u0t0TE9Q2fkDX6+oYgY53mXb9aQZ9Zw2sxs6rrcE9ZOrarMoMcVwKJTcvfn5kiB1DCkMt8YSGW+yefJtQ383/OjC7KPJqpyjUmdwMdidr6JW06t5Pq/1yS8f0W5Db1aQTAsjtCLCAJoFHKyjOqoSDZJAKeQCeSaNXHlomS6oHRZVJzYlHSQEpuOxl4P+RYt2Sb1iIHNE8GqUzIrz8TaAz0JDUdh8soYxTYdJo0izhhxKMPfzwy9il5PAFGE8iw9587N49IlRTT0ePjakzW4/Km/95kGNfdfvhCFXOCWZ7bQMqSTK9pwYUaGwPaW/pQNIQ1qOf+6YQV5Zi3/3dTMMxuaYqVko1rByzevoiRDn/Cxbl+I6rvfHnWYco5JndTUdbJQyQUqso3MKzRzfGUWJRk6Op0+qnJNSS1SDnS5+OnLuzBrlTy/pTXhNgDzi8y0232UZuipaeidsNEmRI07s43qtLyqxkNltoEXv7kqZgT7lcc38PbuzoTbVpdaOdDtps8TZE6eiWyzmnUHepN2TScjQ6/ijVtPINOgxhsIo1bIkB3lJT6QynwSn1HCEZEN9b04fSE0SllaLc5HkoPdbpQyYVyaJKNGgTXJLLKyDB0ZBjWvbG+LaTSMagXTc40xo8vBDIhFp0QuExIGK4tKrCNKMZMRSBVatXGjbRIRCEfIMWlo6ffGBQETZVmZjYZuN2v294y6XTLbhXRp7PWQaVAl/Zw9w4KjngE/MI1SzjXHlbJ8WgYPvlfHH9/fn7axaLfLzxf/upbbT6/ilZtX8YPndsT8xaINF9HPwKZTxrRbNr0KnUqGVaei3xuk2xnAO0QU/I0TK5g14DL+lePL+fKKUv65oZEn1zZy5zkzkwZSEM20uAPRRoxkwVS/J0h5pn5cVhmJyDNryDaqyTNrKc3UsaPFzu52J7vaHOxqc/DMhuhYL6NGQWW2gcpsI5U5BuYXWeIsJ8qzDDx6TTWhcIQ97c6EHaMWnZKGHg8ef2hSA8J+T5DKbMPYG06QfZ0u3tjZzoULoy7k6lHMjHUqRUwrt7XFDi2wvMzG/i43XSlqurKMav5+bXXML22om7/EIaRgSmJK6fcE+Lium73tTp7f0sKsPBPfOmU6tR0OntucfOV4NBEIRZiRaxxXK380cJSToVdh0Cho7fcSDIucMTuHlj4vL2+LN+V0+kN0u/z0uAJx2Y08s4ZCq5alpVacQxyxlyQIpCYLk0Y5phdRm93HsjJb2qM4hqNVyZmebUApl9HS76Gl30t7il5S6w72UpGlpy5Nvdhwul0BFhdbY6NPBhk6rDjPrGFZmQ27N8iG+j5c/hB6lYLvPrttxIW5KseIWatMOuNxKBER7n1jL3ZvkAeuWMiytTZ+8tKuuGykSatkVWUWl1cXIQgC7+3tZE1dN2qFnOoyGwqZQG2HE4Vc4Nz5eXH7VylkXLmilEKrjpr6Xu55bQ/nzMvjokUF5JnjszwapYyFxRYQo8H98EkBmQYVSrmMTKNqwsGUXiVnfpEFm16Fyx8i06hiU0N/0vfM6QuxqbE/li1dVGzh2W+sjNumrtPJGzs7yLdoUSlk9LoD9LkDsQ7ZkgxdLECdbPQJJAFTwVPrGrhgQT6CIGAc5Tm9wZGLqrUDZsEKuUBbCjYQN59cMepga4koUjAlMenUdbp4dM1B1h3sHeG63NTr5Y2dHSwqtpBjVNORhvnikSQVd+ZENPV6EBHJMalx+cN8bmEBMkGgoceTtKTUkKC1vM3uw+4NEgxHmJNvZkauEZVcxt721PQ56bK4xJqyhcHG+l6KB8p96ZBr0lBk0+IJhKltd8YJ4FdOy0jZVBJIudNwLBKNytEo5UzL0nLD6nLOnZfPh7VdXPf4oe7TV3e0saTEGgumDGoFs/IOGYQuHcPdfSjnzM1DEAS+vKKUVRWZPP5JfaxrrixDh06t4GtPborz/AFivzOFTODH58+m2DYy8xQKR7j71d0xz6aSDB0t/V6UMoGGXs+Ar1PUkFImCGQYVBxfmUmPO8C8QgtzC8zY9Cq+9+w2NjX2jctLapBck5rKbCM72xx8Mkb2cTTyEpT7KrKNMZPOofhDYTrsPup7PAgC9HmC9Lr89HmC9HmiZpV97gC97gDtDl9amsNBFJNY+rLpVRRatWiUcnyBMJ1OP95gOBbIP7e5hYsWFY4YjDwUmSCQoVfR7wnElcobez089ZVlXPnI+jEXQulq0P5XkYIpiUlDFEWe2dDEj17YMebsr02N/Zw3P49XtrVNStv8VDNW2UwQoqv44VoEdyDM42vqY+NKrDpl0q65sRjsntrcFPV9ybdok1oATAStUs7+NBzXwyKYtGOfSpRygcpsIwaNnNZ+H82j2AfsaOmPK2uNxf4u94RNRSH63hZatDQPKVlWl9n465eXIAgCe9ud3PvG3hGP29TYx9wCM1qVnNoOZ5zT+sb6vtgA6bHINKjY2+5EpZAREUW+tLyErz+1KeVRMKGIyD2v72FLUz/BcIRpWQbOnptHllHN45/Ux5lfvrajfZQ9RXlzoMvwqXWNsdtOm5VNgVmLXhVMKbMR9ewyo1bI6XD6kAsCvmCYj9KwAElGOuNS1Ao5xRl6ikcpcQ7y7p4OfvDcDl771vH0e4LYvUG6Xf5olssToNcdpNftp9cdDcT6BpzDx2ukm4iKbEPiTkqdEpNWye/eruVzCwvIMWlQKwT8ofjnVsqE2IxOgFl5JgLhMHWdbm46pZLKHCP/+foKvvzI+qQZRkGA61aVj3qcdm+Q2/+1lW3N/VTmGPj1pfNHZDv/F5CCKYm02dvupLbDiVmrZMW0DBQygR0tDn75+m7W1KW+ynxpa1vcINKjmahZnjAiSJyRa8SoUVDX6cLtD7G01Mq+TldsVRuOiHFCza3NduYXmSdcZugbOMFXl9liGh1fMER9tyfO8HM8eINhQpH09Gw7WhyUZeo42B2fnco0qCjN0BMIR9jX4YzZTYyF3Rfm+AprWhfcLU39lNi0NIzSmTcW1WU2Ngy5gKnkMr51ciW/fnMvO1ocfHqgJzZ+ZCgRMfkKXiQ6DmlhsWVUgf6Xlhfz0b4uvvfsoeaMK5YV88KNK/nOf7alPKfR6Qvxn5pDXaG/TeKyPl5a+nz852vH8cvX97Cz1Y5WKSMUib5X5y/Ix6xVEhFFrDoVxRk6coxqFv/s7UkzsxxKqgOb0yXbqOGM2bn4ghFKM8cOvgbZ0+bg/b2p2yqMhsOb+P3q9RzyPXt/bxdqpZxQJGqDsW3IQs2mV8Vl/gd/e0tLrZw5OweAQquOf31tBV/9+8YRjSZGtYL7Pr+AqtyRWb5BdrTYueGJmphestPpZ2+7UwqmJCTGYlerg/Me+Dh2ATeoFYiiOO4L+Lt7OhPqVNJlqruL/KEIv71sPve9XUtTr5elpVYaejwjdFT7O12xLJZcJpBlUI8QJCuE5LP60iEiMmLlqlfJqS61srvdOWo2bXqOAbc/PEI0Xp6lx6xVUj/QAZQOVp2KZrmXymwDBrWSdoeXxl7vCLPIVKntdMaMJVMhEIogCMK4mwUyDaoR76dMFhX4/vG9/WnvbyjBiMjmxv6E2jujWsG0bAMquWzE7MA8kwa9WsH9ly/EqFHEhNhHkrpOFxc+uIYD3W7CEZEsg5oul58rl5dw6ZKiEdvbvcEJB1JKuUCBRYtOFZ0raNQoUCtkTFU/2ZwCc5z9QKqUZuqRywREUWRGrond7Y6kBqBZRvWoQ9JTmRP6x/fq+OLyYsIRkVA4EufAbtIqE8ooNtT3saG+j7PnRnV1mQY1/7xhBXe/uptHByZRVJfauPfSeaM2KuxosXP5w2tHaOqeXNvAiVXZYx77Zw0pmJJImTa7l288VRMXHKTTAp6Ifm+QkkwdbQ5vUk+bVPjcwkL+tuZgwqzBZLG7zUmmXo1Vp0qqganINrK+vpfyTD2hSITKHCPvDVupNvZ60KnkI0wPzVoldm90xtnsfBM9bv+ITM9YuANhDnS7qcw2IJMJSWeveYNhCqxaMgyquNWsSi5L294gz6ymyKrDGwwjF4RYSXOidDj8HFeRwSdpZDvrezxUl9pSEn0PRymXjZh1NivPNGZHYzqYhuhbMvQqvrS8hJtOriAYFrnoT5+we0jm7vbTpvPV1dESi0wmcNcFs9nS1D+uRohU0Srl5JjU6NXRYEUuE4iI0RK+CGxu7I9mGYeUCwd1ZsnkQga1gqevX84r21t5cm1j4o3GIBgWyTAcMkMd1IwtKbGOa39ThUYp56mvLEMpF1hcYqOp18Md/94a121q0Sm54/QqLq8upq7TxcMfHuCFLS0jSoTtdh/5ZjV5Fh2hSCSWzV5UbGF7s51gRGRbcz/6zdHv1K42J9VlNlr7vDT3e9ElGSVjVCs4vjLeS0spl/H/zptNnlnDy9vaePza6qRde05fkLd3d/DzV3aPCKQA3t7dyQtbWrhgQUHqb9xnACmYkhgVfyjMC5tbeW5zC+sO9ky6vmnwxDC3wIzdExx3huvT/d2sqsjk3T2J/VYmg/puF9ua+hntCB2+6Ek+wxANuE6ekcM7wzxgulx+FhRaQIi+v1qlnPpuN72eINWlNvyhMBsb+piTbyLToEo7s9PrDuAPRXD6QszON6GUy9jZao+VRJaWWomI4A2E4jQvqXYs5ls05Jk0yGUyOp1RQe94BvCmQpfDjyCQ1niP9fW9VGYb0h6O2+7wkWfWxL6Hq6dn8ejVS9nV5uB7Z81gTV03a+q6J/QbaOn3csniQrpdfh64YlHMEFYhhweuWMgpv/kgtm1Jph614tAFTa2Q8+PzZ/OFh9eO/wDGIN+iSeqir1PKKLJqcflD+AcMRXNMmpgZpFaV+HIilwmsmJaBSasgIkKH3UeHM2rwmmlQ09jrSWlMTCJxt149vsaQqWR5eUbs/4tsOp756nLuf7eOB96t49pVZdxwQjnWAa1XVa6R31w2n9tPn86jaw7y9PomXP4QRTYtWQY1W5vttNr9VJdGg0atUsbOVgdzC80o5DLc/lCcP91gZtWoUWBM8t7kWTS8sq2Nzy0qiPt+AVx/fDmfX1ocF0j9+MWd/KemGYFo4JzKOfpbz2xhf6eLb506/agfOTNZSMGURFLCEZELHlgzZSvhZWU2Opw+6rs97Ot0ccniAv5TMz791NZmO7eeOn3KgimlPJpxGe00olYIMaGwcyCoSpa529Lcn/D2uk5nTA8hkwnY9CpyTZqknX+JiIiHBPODY3CyjWqKbFq8gQg1DX2xgGB+kZmyTD09rkDKrtZ5Zu24hxWny75OFzPzjCmNpxmqabOmIUweRBThxpMquKK6mE/29/DEp/X86o29ZOhVKGQC58/Pp8CinVCpraXfx74OJ3dfNHeEs355pj7Ou+mRjw9y3rxod98gy8pszC80j7uJYTSyjGp0o3gIeYIRPEM6LD39vrgRQ3PHKIvNzjdz9+fmjrh9a1M/NzxRE9eMIAhg1SoRgWAoQkQUE3qJZRjS/5ynElEUqet0UZlzSGckCALXrCzlC9VFSYee51u0/OCcWRxfmcXv366lprGfpiHavy6Xn+oyG90uPwe63KMa6UL09x8MJw5QaztcfO/Z7Ty9oYkfnjMTQYDFJbbYsQ7vXFbKhXFVIP7wbh0Hut38/gsL/ycCKimYkkjKp/t7piyQyjaqCYQj1A8pY72zu5OTZ2Tx7p7xCziHl2kmgwVFFgQYdaAxwLSs6Dw/s1ZJS78Ps1ZJbZrv39DuNa1SzvZmO0q5QHWZjZqGvrQNIQfpdPqjF2q7O/b+yISoIaRcJrCqInOEA3syglNYSk1ERhLT06FoVXIyDSryzFo6Hb5xdfXJZQJLS20IgoBBreD1nR3AyJl5E2Vrs50Oh4/Z+fHBhyAI3HhSBbf/OzoUe2tTP7f8cws2vYpLFhcyO9+MIAhcXl3M1ubtEz4OuUzAolWSZVQDIrUdrlE1PKORaVBzzry8sTdMwPwiC09+ZRmff+hTegbGS4kiY3ZyKuXCwLEfPfzlowP8+o1abjt9OlcfV4pmwFDTqFFi1IyeRWvq9XD1o+sTnr8OdnvSLvmPda7Y2tTPJX/+lC8uK44FU8Pxh8Kxjs7x8PK2NgKhCLeeNp3/1jRz++lVn1nTTymYkkiIKIo8ubZhSva9tNSKWascMQKhzxNkV6tj3CNCahr7KMvUpz3sNxHVZTYyDSo6HX52tdrxpODWrlbIWFJiZWtzP8GwyElVWQmH86bK4Eo8EBZZf7B3QhmJbKMaEeKEwCatEo1STp5ZQ48rdb3annYH1aU2PIFQWhmz8dLrGbvM6Q2EyTdrJ+SEftWKUqYPZBRm5BnJNWkmbEaaiLkFZk6cnligu2VYwP7CwEiUp9Y18n/nzOS0WTmcNz+fn768a8Jdm+GIyLQswwh9mSBAWYaeXLOGhcUWyjINaJQyupx+SjP0/G3NQbY09ePyh7jxxAoC4QjPbppYR25FtoEXb1rFz17eNaplw4xcI2WZevLMWq5YVpTQT+pI8UFtF798bQ8REX752h4e/6SeW0+bzsWLClPKzBTZdFy0qDCuE3Mi+IKpfT/+tbGJiCjytdXTRgjONzX0J/S9S4c3d3XEArKdrQ7CokgwHEEuRMdgnTYrh/Pm5R8T42lGQwqmJGJEIiJr9nezpq6Hj/Z1xUpEk4FZq+TUmdmEIhHe2d2VNG3c7vBj06uZnmNIe8bVtuZ+VpRnTDiYWlRswR8K8+r2sX14hjI8c2VUK8fdup1n1pBj1BBBRKuUE5X/jv9kMyPXEOc5A9HPRK2QYVAp+CgN0XkgLHKg25XQ4HIqaOrzpBTYrK/vZU6BiR0t6X9vzVolN51cEfu7pqGPvhSCuPHwo/NmJb1w5JoTl4ECoQg/emEnP3phJ7+6eB6rq7LS/n4mQhxmd7qyIoNvnFjBylGG/R5fmUlYFFHIZLEg4caTKpJunyoFFi0/uWAOOpWCHpef9wcypbPyTKyqzOTsuXksKLJM+Hmmgh0tdm76x6a4rFKb3cd3/rONRz46yHfPquKkquy4km0ivnlSBf+paSbfrGF1VRbLyzP47Vu1ZBnUnD47h7tf3ZPS8cgEUh6eHAyLPL2+if1dbv51w4q4+15N0Y4jVT49MLKZZE1dN+fMzWPqejMPD1IwJUFLv5fv/Xcbn+7vmVTTOYgKWk+dkcPONgf/TWH1atIo+O5ZMyjP1PO5B9ckFF/rVHIsWiWtQ8TTMgHuPGsmEVFMyYwwGXlmDdNzjGxs6KPYpqPd4Rt3h6BCIaCSywgk0S4MR6OQYdQoKcnUISN6knP7QsgEgS1N/QhEO8AGSyGpMiffxIf7Rp7EOhw+so2amGg+HbpdAfLMGmDyvYOG4/SFWVhkHTOYEsWow/54AvFvn1GFVa/CGwizq83OVx7fmJIoOl3KM/UJO9BEUaS5z0trCvMNf/XGHk6ZMXrruUohY1mZDVEkaXZUKRdi4vECi5bFJVbuOL2K4gzdqPtWyGUjLhzjnRAwnCyjmt9cNp9wROSFLS2sqevhR+fOwqw7+oTmg+xosfPFv65LauGxt8PJtY9tpLrMxi2nVrKiPCNpUFWaqeeFG1cyp8AcC1QXFlkpsmmp63SlHEwtLErfbibRMPc7z55JvzfIS1ujGdJso5qyTD1ZRjVGjRK9So4/FGFPu4OdrY4RHcqpoFbIUcgnxy7mSCIFU//j1DT08rUnN41bK5GMQquW46ZlsKvNwd9TLBdOzzHw0JVLKBswyfvLl5dwyz+3UGjVMjPXxJwCM3MLzZRm6AmGIyz52du4/CG0Sjm/vHguFywooCnNkSaD6FRybHoVJ07P4sl142vfHs6eNifFGbqU3at9oQg+l58ulz+h9ksEpmUb6EmzlGVJojnKHfAwGm/pcHaeKSUH7Mmgxx1IOCduOOGIGNOppMK8QjP/d84sZuWbaOr1cP3fN9LS5x3XRWEsZALcc8m82IU0EIrw9PpGul1+3t3Tyc5WB3qVnFl5xlHtJbpdAVZVZrGhoY8DQ7KwMgFOqspmdVUWFy4swDSg0fl0fw9X/W09gXCEXJOG5eW2qB+SILCiIoMSm/6o0x7JZQIXLSrkokWFR/pQRmUwkBo+3icR6w/2csVf1lFdauPmUypZWZE4qJo/LPtWaNXi8IXiFo9j0elM/3dp9wbxBsJxmiatSs5vLp2PUi7Q3Ovl79dVJ/192T1Brvjr2rQrGu0OH7vbHMf8/D8pmPqM09znwahRjlg5bmrs46m1jTy3uXlSBdtnzcnFqFGwpq6bf21MvfYvF+CH58yKBVIAC4utfPDtkxJvL5NzyeJC1AoZXz9xWixgKLRqxzUnrmRgNT5ZgRREV6SrKjJTDqaGkuwzaUshczEceZLsuUWnoql3/CVRnUqOUaMYc9ROOshlAjecUE5Zpp4Partig6AFAUJDyorzi8woZLK4rkKlXKDYpo3zzUqGVadkcYmNey6eS4ZBjS8Y5ocv7JhSD6cTq7JZWhoV+oqiyFf+vpEPh4n+3YEwuiQWA0Np6vNw+dJifv7qbiCaWfrBOTNjRoxDWTEtgzdvPWFApK/+n+ismmpC4QiPfHyQ+96uxZeCnnIo6+t7+dIj61hYbOHmUyo5cXpWLKjyBsL84d191DT00drvxRcME4qI9HuCKc/9W1hkGbNZJhn93gBaVbx7uUoh47eXLRjzsWadkh+cM5Mr/rIu7naLTsnZc/Nw+kK8sq11xLltebmN7KMsmB8PUjD1GaW+281t/9rCpsZ+imxa5hVYmJ5jZEaekRe3tKY8miIVdCo5i0usVGQZeG5Ly7gGhM4uMPP/XtzJKzcfn3K3x4/Pnz3iNkEQWFmRQeP69IIpUWRcQc9oqBWyUYeQpkuRTYtRrUjZ7V0mgEGjwBsMk2NSY1Ar0KnkqBRy5IKAXDZ2x08i5haY+cPlCynL1BMIRfjJyzvHbcY4lEyDij9cvpA3drTz3t5O7r1kHlqlnH/XNGPRKhGHBFMahZwN9b1xI2wWFFnGHCgslwk8fOViTqrKjumWvIEwT6ytn7QxIIk4d14e3ztrRuxvuzdIOMnInl2tUd+1ln4v07L0CV/TPzc08d+vreDVHW385Pw5zM43jSrgTWckylRT3+1m/cFeWu1ePr+06JgbPbKhvpcfPj/xwHtzYz/XPLqB2fkmTp6RzeISK5sa+/nT+4nd9lOVYKTSsJGMR9fUc+fZM8f9+OOmZXLtyjL+tuZgbGF008mVsXP6badNx+0PoVPJCYZFNEoZSrmMDIMUTEkcRdR1uvhoXxcvbW2ltsMVE3k39Xpp6vVOagAF0RLJ3AIzte1OtjT289G+9DrX5ALMK7TgC4Vj2YR7Xt+TMEhKhxXTMnl6fXpeQDJBoMCimdBct+EU23TU96Sf+Rla4lPKBRYVR+f9NaV4bDIByrMM1HW6cHhDiETdxDuID8DkMoFImsHUxYsK+cE5M6L7FUVUChk/vWAOK8ozuePfW/Gm2EGUiHmFFvzBCI9/Gi0LRyJw3+fn4w2G2dfhQqWQMTPXRCgSYX+Xi4hIXLv5/s7R3+vjKzP5+uppHDdMXN3vDfDL11LTooyXLU39sWN9b08nB7rdfHlFKZ5AmNp2Z1xnnicYQaOUoVHK2FDfl1AD1tLnRS6T8ezXjxtT1Hyk+aC2C6tOyb1v7EUhE3i/titmwvrk2gbOmZvH9FwjV1QXH/WvZV+Hkyv+snZSZwLubHVMWrPPROd+fljbNaFgCuCH587ki8uLydSrR2jdyo6ioH6ykYKpowBRFHH6QoQjYtpmg90uP/e8todP9veMmLM2lWQaou7HT42jLDYoYtzX6RqRjn7sk3pOn5Uz4oKXDqsrs9J2zd7V5uDiRQU09E7e0GWlXDYuYW55pp4Mg5rIgCh5eLu/SaMgx6RJ6vAdEcEy5HmT6X+KrFrq02x7/ubJFTzy8UH++N5+NEoZVbkmbj9tOivKbRMKpCDaq7hmiFj69Z3tXNVUygNXLOLrT9awt8M54vuyu82BSiFjcbE1YafQID86dxbXripLeF+eWcuZc3InpTsuGX+8YlHsu7CpsY/7363jrDm51He7E1ocDM1GDTX3zDGpuW5VGZ9fUnxUirKbej28u6eTxl4PGqWMXneQp9cnP0d0uwKx4PntXR188+SKpJ5Ho/Hi1la2N/eTbdRQ3+NGrZDzzZMrsI3DvHU0fvLyrikbrjwZOLwTK7kr5ALhiDihUrAgCEzLMkzoOI5FpGDqCBLtztiNSavk0sWF/Or1Pdi9QeYXWZhbYKY8S0+X008wLLKgyEJFtoHmPi+BUIRed4CGXjcPvrf/sAZRg1ywoIBHPj6Y1mNKM3SYtUq2t9jpHEXwfse/t/LaLSeMu0PIrFMyryB9T6bJPkmGIyLLymxpeU3lGNVoVPKkfknVpTa2NvfR1OuhyKpN2v7sDoQ4sSqLLywtRq2QsbfDSVOvhzV13dT3eAaGsab3enJNGsoy9ewZEEf7ghG2NvXz5b+t5z9fW8GpM7NHeIcNxaBWkGdOHgReuqSQxz+Jb1Z4dlMzK6ZlcOfZM2np947QQwXDIja9kkBo9EDuxKqs2P+7/SE2NfaxrCwDlSLaRXTbadN5c2fHpHezQtQbaaioeLC7M9Wu08Hy5qWLC/nFRXOPqs4nXzDM27s7eHlrGzta7TSn2I6fiPf2dvFxXTffP2smy8szmJlnTClT9cn+bm5+evOI2/9T08TNp1RyxuxcimyjdyimQq87EBuyPJk6wcliXoGZbROYIzkzz8QLN66SNHXjRAqmjiB5Zg37OpwEwhGyDCouXVLE/z2/g/oeT8ys72hkZUUGL25JLYOjkgtRp2chWupI5QLeavdx10s7UxI9Jj/GzLSDKZN2cn8OB7vdKdsiAFRmG2jt99LR4h9xu16tQCETEBHxh0QgunpUK2QjWvjVChk3n1zBsrIMfKEI+RYtJw200ouiyAe1XRzsdvPAu3VpvZ7wwIeXKOB4eVsbd5xRxfqDvQlbxE+qyuJPX1qMWiHjk/09/HtjEx/u66Z3wObh2pVlzC+ysL4+/qK4qbEPURQpsul44caV/OGdOu57uzZumzkFZr6yqhSrTs09r++JC171Kjk/vXAO5QMr5T53gJ++sotnN7WgVsi4Ylkx3z9rJhXZRr5+4jTuT/M9SYWbT6mM+7srBb3bUCw6FXecPp2vrZ52WAMpURRx+aMZ8+0tdpy+UCzj2eXys/5gL2/u6pjUTuBgWOQnL+8C4JLFhXzjxGkEwhEOdrl5eXsb9d0uTpmRw00nVyAIAk+vb4xtPxyHL8TPXtnNz17Zzcw8E4FQmFNn5XDdqrKkY11Gw6RR8Patq/GHIjz4fh1/+ehATHw+PcdAVa6Jt3a1py1IP1rwBkJSIDUBBFE8TM57xygOhwOz2YzdbsdkmtzWTVEUeeiDA/zy9T2oFDJevXkVVz+6YUKru6lErZBRYNFSXWZLaT7ZgiIL7Q4f7eNsn//b1Us4eUbOuB776f4eLv9LegNhn/nqcv5b08zeDmdKHWGpsKoig11tzljQMBqLS6yx7jSZAPMLLXgCIfaO4pm0pNTKxoGSULZRTafTT2mGjj9cvpBL//wp/lCE+YVmvnPmjBFGjGsP9HD94xvHtBsYytb/dzr/WNfIPa/Ha4zUChnP37gSXzDM5x78ZMTjHr16KSfNyMYXDMdaq/2hMHvanOhUMtz+MD94fkdC7chfv7yEU2dFvwfBcIRFP30rlhm4+ZRKbjttemzbSERkc1Mfj3x8kI31fdxz8bxYIBmOiHzl8Q28N0xo/vJNq5hTYOaJtQ388PkdKb8XqTAtS887t58Yd9tFD64Zc7baUE6bmc1frlo64WPZ1+Fkd7uTd3d38O6eTrJNGgqtWgxqBRadku+eOYOGHg8vbWvljR3ttNl9U+K1NV4qsvR0OPw4/SFOmJ5JKCyyqaEPX5rHqFLIuHhRAefNy6cq1zhu8bPTF+SJtQ3Ud7v5yQVz0CjlvL6jjSfXNlJo1WL3Bnlr1+RnO3UqecLSvVYlx5uipcdvL5vPjFwT7oFh56IoctKM7JidxmeFqbx+D0cKpsZgKj+Mg91uPvfgmlj320ULCzh+eia3/nPrpD7PeFErolPiZ+WbMWoU1Pe4aer1IhMg26RhT7tjRI1eINrtFUEclxP1IDIBbjq5gltPqxrX433BMPPvejPli8GliwvZ1+lid5uD8iwDZZk6upz+MbvDxkIuEzipKpu3d48936piIDM1J99EQ4+HjhRX/PMLzbj8IdrtPrJNavzBCNcdX85Ph6zYj6/M5PtnzUSjlMWyNAB/fK+Oe9/Ym/Lruf/yhVTmGDjzdx+NuK/AouVfNyznhy/sHDFw+vdfWMAFCwr45Wt7KM3Q8YXqYoLhCLN/9AZymTCq3kqlkPHzC+dw6ZIiINoJ1+X0oVUpKLAc6gTbWN/Lz17Zzf2XL0xY1vntW7X84Z19I25//44TKc3U4wmEuPCPa9I2/Bw6nHg4ZZl63rvjxLjbLvnTJymPS5LLBN6+bXXawt1OZ9SQ9UCXizd2dvDe3s5xzSs8GlDKBURRpCRDjzsQJsugYvsEzi1DEQT4xonTuOXU6SinIOu3qbGPbz2zOeXmkbGoLrVR1+lCJiPO0Did0mO2Uc1r3zr+M9FBNxaHM5iSynxHkA0He+NsBN7Y2c6tp01nRq5xwm23KoUsbeduhUzgksUFNPV5cfvDuP0hWvu91CUYz1Lf40EpFyjN0CGK0DDg67R4SKZkPBTbdFRm62ns9fLs5hZuOXX6uDp8NEo5S0tT0ytdtqSQGbkm/j0wE2t3m4PdbQ6yjWoyDSrCETFupl06zC8005BCR9/KigyCYZH2fi/r03z/9ne60KjkuANhgiGRuYXmERPjP9rXzUf7PkImwIvfjGZiAL60vGREMFVki471qO9288q2trgLf12nixm5ieehtfR7ue7xjVxzXCmNvR72d7liZd3XtrdzwYIC3t/bSW2Hk20tdmrq+6Jl0DEW04FQhG//Zxv7Op18cVkJJRn6EXq6dQd6uPrRDXiDYc69/2O+tLwYly/E0jIbmQY1D76/n4/2jbQ+mJ1vIs8SLfnoVAp+9/mF/OWjA2yo7x2RIVYrZChkQkwwblQrOHNO7qhdrN5AmEhEjNkWtNm9bErDmXplRWZKgdTuNgfbmvu5aFEhP315Fy9ubcWqU8Uczo9lZuaa2N3uoL7HgwAUW7XMyjPRbvfS6wlSYNHQ7fIPlL/TQxThj+/t58PabrQqOcvLbJw6K4d5hZZJOfZFxVZe/9YJ/PTlXfynpnlCWaolJdbYHMUiqxaNUnaopJhGTuQPly/8nwikDjdSMHUEOXVWDsXvHTKYPL4yiyv+upbvnFFFU6+XV3e0pZzdKbbpqC61YtAo8ATCOL1BzDoVs/JMrDvYG7NFMKgVzMwzMi3LQJFNRzgisrfdSWmmjksWF3HhH9ek5OYLUX2DXq2IK82MZ76SUiawpMyGAGxs6Isz3KzrdFGZM75hpsvLxw6myjP1rJ6exY3/GClgHU0knyonTM/id2+PzIYM5bhpGfgCkbTHPwziCoRxDVzgm/u9/PTC2UmF6RER/vTBfv54xSIg8TDUeQUWTqrKhiq4ZmUZX3l8I2/v7sCgVvDVE8rZUJ88w7Gn3ckjaw7yr68u541dHfzmzb30ugOcPCObQCiC3RskIsI/xtEF+mFtN498XM/0HCM5JjUmjZJMg5p2h5e3d3XG9Gl2b5A/vhf16hnsFEvGmbNzUSsO+ZrNyjdx3+cXIIrR4dJfe7KGPk+QU2dm89vPL0CvUuAJhGjqjQqR//TBfkoydJRk6Gju845oBml3+PjH+ka+tLwEiGYCU72emjQKfjBKm7ooiry3t5NH19THArr7362LBYHj8Xs72lArBALhSFxzyNDFhkWnpKXfR3mmPtq5J0A4HGFzmvYA2weE2+sP9nL/e3Xc/bm5fH5JEU5/iF53gE/2d5Nj1FCepY/L7KaCXq3glxfP45ZTp/PClhae3dTC3o70FssWnZK6rkMZ06Y+L8vKbLFGlVR1WrkmDcvK0u+WlBgbqcw3BlOdJqztcHL+Ax/jC0bi/IUyDWouW1LI3EIzNfW9PLu5NaHuptCqZeW0THa1OWInBIDqUisbG/r46LsnY9Yq+fqTNZxQmcXVK0uTprNFUWTVPe+l3B1YmqEb0Vo/9Ac+FiUZOiqzDOzrdMUyW8P5wdkzuf6E8pT2N5xNjX1clEC/M5Rvn1HFQx/sTzpXayLMLTBR3+0ZU5N0wvRMPqxNz6MrGV9bPY3vnTWDP3+wP6l3kkIGD1+5hJNn5vDa9ja+/tSmEdvcc/FcPr+0GIB+T4DnNrdwyeJCIiJc8MDHY1oqlGTouPtzc6kutRFBpNPh5xtPbYr7jqaDXCagVcpw+Sd3zIteJeealWXcdtr0hKaXnU4f3kCYYptuzAxpp8NHTUMfGpWcug4XLf1eTpuVw/QcI1lGNS39Xk7/7QcJrRCGkmvSML8oqnNL1mLu9of4wXPbef4oblSZCEtLrYTCIqEB8Xs6KOUCs/JM+ILhUfWGY1Fg0dLl9Mc1kRTbdPzqknkUWLQEwhHyzJqUHOuHMhiov7Stlf/WtKRkKbK4xMqmhr64sdQ2nZLeIQGzQiaMmfk6sSqLx66pTut4j2UkzdRRxOH4MH71+h4eTOJ6C1CepecbJ05DpYjmfQZPEm5/iN1tTrYM895RyMCqV9Pl9FNg0fL4tUupyDYSiYjs73JFDRwdPmSyqL6p0KrjqXWNBEKREcLi0agutcXSzoOMFUwJA9vo1NGRM2Npmo6vzOSJ65aNuD0SEXnk44NoVfLYqn84wXCEBXe9mfTipZAJfH5JIU+lafCZKqfPzuHNnWNrpVaU2/j0QOp6FkGIZtQUMhm1nU5EMTrP69unV1FdZmNbcz9fe7KGbleApaVWWvq9mDTKWOl4Zp6Rlj4vPzpvNhkGFdc8uiFu/xqljCevW8aSgdEnO1rs/G3NQfZ3umjq844qph/0ENvT7sTuDTKnwMTMXBNv7upIOeOZiMpsQ1JLhcnglBnZ/OTCOXEarMlkUJi/uy2axVUrZBTbtOSao672KoWMUEQkGBa59bRKZuQmP9f89aMD3PvG3qjViE7J+oMT0/UdaWx61YjvVFmmfsIlykXFFvYOM0SdCmx6FdOy9Fy7soyKbANtdt9AtnLs8mw4InLvG3t56MP9sUpdsU1HVa6RXa2O2MJWPXjuH3a+zDSoYtops1YZ+42ZtUqqco0gEjtHZxrUPH/jcRRaJ24TcawgBVNHEYfjw9jebOe8Bz5O6zHnzM1L6mi+pMQap3ORCdGTU+dAJ8xwsoxq7J5gWm38CpmAQaMYUUpIFGBBdBW1sNhKq93L7lGGuA5HpZCx9Uenx42Yabf7uPWfW/j0QA/VZTb+dcOKpI//yuMbknofnTk7l4ZeT+wCN9ksL7Oxual/1IAxx6jGqlelrJG7/bTpXLuqDP2AkWO/J0C7w0dltpFP9ndz31u1cZ1ihVYtfe4AEaDQosWsVca+G0q5wDu3r+akX38QN1bm8uoifnHRPMIRkXd2d/D1pzalPHZm8OSuU8qYlW9GJhOo73YRCIsTKjuZtUoKLJpRBwBPFJ1Kzm2nTeeUmTlYtEosOuWIbFQkIvLajnaeWFtPXacLo0ZJWaaeRcUWTpqRzaw804jH2D0B/vj+fnrdAWQItNi9dNh9NPZ54nSNGXoVj19bHdOzJWL9wV6ufGQdC4osrDvYS5FNGxM3ZxpUFFi1dNh9tKdpv3AkWVBkprHXS9nA8OVwRBx3yXsoyc5Fh4vyTD1LSq386LzZccaridjf5eLFLa0sL89gebkt9h1q7ova5Ly/tzNhM0y+RUNrvw+DWk62UUOmQU1YFNndasczUPobHD/160vnc8nio3tw9GQjCdD/xyiwarHolGldbMJJYmABaB1WpouIsD+BiHyQ8fjEzMgzxum5sozq6EV74LgGBfCz8kzkWzRsauznnT3JDR2TEQhF+PRANyfPyEEURZ7f0sKPX9wVW4FtbuzD7Q/FgovhrKrITBhMzcg1cuKMLL733+1pH1Oq1DT2cfKMHN7YGTVnXFxsQZAJqOUytrf04/CFyTaq8acYxP7swjmcPjuHX762h8ZeD55AiPmFFhYWW3lmfROPfVIft/20LH3c5143RBAOUc1bXaeL206bHhOhr6zI4IfnziIYjvC9/27jv5uS+4kpZAL5Fi2D1TGZICAI0QDPE4zEBfQFFu2Egim7N4jLH0qrjJwunkA45ksEkG/W8N2zZlBg0bKmrgdBgJe3tlI7JEPW7QpwsNvNu3s6+fWbtVh10YxAkVVHaaaeve1O3tvbSXmmnm0tdqy6kVkYiH4ff3PZ/KgnWxI+3tfN9X/fSJFNGxOxN/V6qcoxEopEMGmVbB4IpPPNGgqsWkLhCHWdLpyTXB6dTFQKOb3uQML3RaOUYVAr4jrXUqEy28DmSQjIJsKBbjcHut3sbHXwkwvmsLjEmnTbaVkGbh1i8TFIoVXHjSdVMCvfyNee2DRiYZahV6NVyjFrlWxq7E/YVVqSEbWUaEpz+LtEekjB1FGATa/ijVtO4OanN6d8oUim3lhUbJ2UVV0iFDIBs1bJgqJoaXBGjgmlQsDpi3qVVGQZyDGpCUVEcs1q1HI5L21rZdcEMz8f1nazsMjKnc9tH+EaHQyLrDvYk9SPKtFYmltPnU6xTcet/9oyoeMai2BYJNNwaJzFniElh1KbjvlFOkRRTClTd9HCAr60vIQ+d4B/1zTFBKfR1WpiJ/rhHW+J4u/7363jieuqKbbpmF9owWZQsavVwW/erMXlPxT8yIRoSVitlCOKIp5AmANdrrhmgdHodI70GivL1BEKi0nF8sMJR0TWHexlSamVHc32tP2F0qXV7uNbz2yJu02rHL19vs8TZO2BXtYS/zseNJDNNqpHBA0qhYzHrqkm15zcSPKd3R1846lNsczfUEH2gW7XCPf+VruP1gF/N0GISgUyDWpC4QgymYA/GJ40e4GJMlgcseqUFFi16FUKAqEInU4fLf0+5hbo0wqmzFolve4AwSlwsx8PO1sdXPrnT7hkcSFXLCthwRA3/FQ5qSqHJ65bxvNbWuiw+9jY0IfdG2Rfh3PM34E3EK1GLClNHsxJTBwpmDpKyDFpePzaaq7/+8aUBgYrZAJKuRD7YTp9IfLMmkk1/PzC0iJ6XH4EmUCRNSrG3N3m5J09I1vMR9AUbR1XK+QTntn2zIZG/rmhKel+1tQlD6YqsgxcubyEdkfUmG5ZWQbXn1B+2FZpqyoyeGpdI/oB64JB6ns9tDt8zC0005OCoed58/MBsOpVrJyWOWaWz6ZTpSTc3dzYz3ObWphXaOHnr+7ijSEar+k5BhYWmREEgTa7L21H+aHIBAGIv7gZNUoQSTmYGmRjfR95ZjVt9sNfyvIGI3E6lXTRDSlXD3LxosJRA6mvPVHD6wPZTaVcRr8nPjAdawySKMKBLjcHhmQpFw6cN9QKYVyWApOBXiUn3xI1txx8TxNZkLjTzKp5AiGm50Q7lne12mOdrkeSiAj/2tjMuoO9vHXr6tgYo3SoLrNRPdCJN6izTWVBoRpoOJIEPVOLFEwdRWiUch66cjGXP7x2zAvX/CILRTZdTLj+j+uX8bu39nHuvDz++P7+tD2mhqKQCZw/P58tTf0T8rty+kNkGdUTDqbGavv9eJTgUyYT+OmFc0bcnmPSxHVPTgWZBhX/qWnhuGkZtPR5cA8z7vOFIjT1elHKhTEviEbNoZ9qgfWQSHpegRmFXIjppBYWWaKaiTZHyrMGf/jCzoS313a4Jk13kmfWjOgAVMiixz0rzxjTQi0qtlDX6RrRXVlk06JRyNnX6WJOgWlChrATpdsVYH5h+rMfgYTjYN7a1cHPLpyTdJRHjzsaNFZk6RN6vo2HPe3OWICfjnP2ZFGVY2BvhyvWVKBXyZmVZ8KgUeD2h/CHwkQi0fBbIReQy4SUdXvBsBiza9Gr5Cwrs7G1qX/KM5mp0NDj4ZTfvs+Xl5dy2dKicc8fXVWZOWrTUhxCdOE9ngBOInWkYOooQ6dS8NerlrKmrpv/bmpOmKU6vjKTL6+IGiM++P5+FhVbeHJtA+vre9neYue8eXmjal1GY0aukXPn5fHQBwfSGjOSjG7X1GcP9nY4Y47PqaJSyJieM3Fz1GRMy9KzrCyDf6xv5OJFBXj8IRoSuCC3O3xUl1rHNOp8en1TrLsuQx813Bt8nEImsKzMhtsfYvOwzs6Jsr3VHhO5ToTWfi8V2QYEomUnAIUsenLf1+ki26hGrZSxqbEfpUxgUbGFUEREMTB/cLDbMUOvouEoMKKUjcNIFiCcIMDtdvk50JXcT+3hK5ew5Odvk2FQT1owNXSB4w2EyTWpp0y0PjPPiEGtoKHHg0yAdod/RBDhDoQnLAdIhDsQZt3BXjL0KuYU6KkZZi9wJGjq9fLzV3fz3OYWfnXJPCBa/s02pX7+WlRsTTiXMxF6tZyHv7yE5eUZ4z5mibGZUKj6i1/8AkEQuOWWW2K3/fjHP2bGjBno9XqsViunnnoq69ati3uc3+/npptuIjMzE71ez/nnn09zc3PcNn19fVx55ZWYzWbMZjNXXnkl/f39cds0NjZy3nnnodfryczM5OabbyYQiE+/b9++ndWrV6PVaikoKOAnP/kJR3sDY5ZRzYULC/j7tdV8eUUJVp2S5eU2yrP03HX+LL5QXcTf1hyk2+Uj36zhpKpsXt0eLQMU27RprdoLLFrOmpPL6bNyuPtzczhpRjZ/eKduUgIpOHyp5fH4NBVaJ78NXiETuGZlKd5gmJe3tfK5hQW8ubMdgyb5umV9fR9VOaMbAb6165BWbFm5jepSW2xCfGhAS7QjwVy7ieINhMfsREqFwIDYfV+ni9qO6L/BjFcsgzbwn2BEZFNjP9ua7Wxq7I/LUvW4A4ddTK0ZWNEvKrYwd6DTzu4NkiSRNCquBL+rM2fnUpGd/PP/68cHCEfEWHPHVDBRR2y5AAUWDbPzTSwqtjCv8JCQfl+Hiw31fXQ6/bQ7/EzL0k/I/2k89LgDbGzoo8imY94o3ZKHk11tDs69/2POvf9jznvgY3ak4aelUcq5OIXOPK1SzheWFEVNeCWmlHGfJTds2MDDDz/MvHnz4m6fPn06DzzwAOXl5Xi9Xu677z5OP/106urqyMrKAuCWW27hpZde4plnniEjI4Pbb7+dc889l5qaGuTyqKbgiiuuoLm5mddffx2Ar371q1x55ZW89NJLAITDYc455xyysrL4+OOP6enp4aqrrkIURe6//34g2hZ52mmncdJJJ7FhwwZqa2u5+uqr0ev13H777eN96YcNQRD4yQVzuHhxIa9ua0Mpl/HsppZYeeHrJ07j/TtO5EuPrI895vjpWfz1o0OC5MGuuuk5BlaUZ/D0hiayDGqOm2bj5Jk59Lj8vL+3m2A4zI9f3JWWPcLRxMf7utJu+y3PMkAS24TxctbcXP7+aQPhiMirNx+PVa/kw9quMedmKeQjr8zZRjX3XDKPax7dgAixsSSDDsaHazp9bYeLRcWWtIbzpstobvOHY5L9aCXfAqsWhy8Ue/3VZTY2NfSNq0ScqGPtR+fNSmgIuqWpn+c3t/DE2gYUMhIOt50sEmm5EjEj14BRE7WMCIYiOP0helx++r1BWvqjgnGAhcWWWBnRpFXQ6z6khRqts3iqaez10AhU5RqJiCL7DnNQl4wOh59v/mMTb9+2OmEpOBE/OncWbn+IF0Yxbr3ttOmcPS9/sg5TYhTGFUy5XC6++MUv8pe//IWf/exncfddccUVcX//9re/5ZFHHmHbtm2ccsop2O12HnnkEZ544glOPfVUAJ588kmKiop4++23OeOMM9i9ezevv/46a9euZdmyqGHjX/7yF1asWMHevXupqqrizTffZNeuXTQ1NZGfH/2y/OY3v+Hqq6/m5z//OSaTiaeeegqfz8djjz2GWq1mzpw51NbW8tvf/pbbbrttXDPfjgRKmYw3drbT0OuJy/T86f397Gp1oFQInDUnN5ZBKLJpuemkSpQKgTV1PfR7AuzvcvP0+ia+trqcHneAf25o4t81LSwttbKhvo/5heZjNpACWLO/B1EU0/pMEw3DnSgCxLQdvlCYPLOJdd8/hRe3tfLPDU0c6Hbzm0vn80FtF4FQhDyLhhKbHl8wzKbGPlr6vbh8IY6ryOSLy4rJMqjRKGUsL8+Ic+jWq1O7+B3rFFq0U+YDNkhltoEed4BgKII3GCYUETFpFehVCsxaBWatKi4AGO/A4DyzhjZ7fLm0MttAfgKj0JqGXi7986exgG0qPJNm55swqBWIokibI3kZV6+SM6fATH2Pmz3tqQUfg8FpvkUz7rmWU8ne9kMavU6Hn+YUpz5MJfU9Hk789fuUZujp8wS47/MLmD7KKC2NUs5vL1vA8vIMfvDc9hHB/YryDL5yfNkUH7XEIOMKpm688UbOOeccTj311BHB1FACgQAPP/wwZrOZ+fPnA1BTU0MwGOT000+PbZefn8+cOXP45JNPOOOMM/j0008xm82xQApg+fLlmM1mPvnkE6qqqvj000+ZM2dOLJACOOOMM/D7/dTU1HDSSSfx6aefsnr1atRqddw23//+96mvr6esbOQXze/34/cfWiU7HEe+fVirktPS78WoVowQ5n5Qe6izTqWQcfGiQmblmfjpK7sSZkP+8G5d3N+Dq92jvPI5Jl1OP3s7nKM6Rw+nZJKDqRKblrVDnMz//P5+Hv7yEhQKGQuLrSwstlJi09HtjmpGfMEwPe4A+zpc9HkCFFi1rKrIZFGJlWyjOhYYfvq9U1ArZbj9ITY19vHomnre25tCR+UkcjiyQ4NkGlTkmNSoFHJkgkC+VUswFCEQjhCOiKgGBg57AuEJad6MGgUzco1sqO9jWpYeq15Ft9OPwxuk1xPE4Q3RNv4GxhE4faERwvWZeSO/r5GIyPf+e+jiOCvPNCXmkwqZMKoVi0yAJaU2drU60vL2Wlxs4UCXG28wjLf/yHfSjcamxn4UMiE2KWCi2sCJ0tznjXVkv7WrY9RgCqK/y8uri9nRYueV7W3MLYgOOV9VkcnVK8uOmYTBZ4G0g6lnnnmGmpoaNm7cmHSbl19+mS984Qt4PB7y8vJ46623yMyM+v20t7ejUqmwWuM9L3Jycmhvb49tk509ssabnZ0dt01OTnw7vNVqRaVSxW1TWlo64nkG70sUTP3iF7/grrvuGu0tOOxkGFQEwyLB8OilokAowtPr0xsgOziuQPkZ6PT4eF93esFUxuQGU7MLLLw6xJW+a0B8X9PQx/V/3zjqGJbhVGQb+PYZVRxfkcEbO9t5cWsr6w/2Tmjq/EQYr+A6Vaw6JdNzjDT1emi1+8ZtPZAOTl8ImSBQPjC6ZGj2abzdeskoydCRbVSPcLE+ecbI89z6g71x+ijZFP00tzbbmZVnSij8zjWpMWmVaWfh5hWY2dXmwHuYStCTQSgixj6XeYVmlHIZB7vc9Hqm/juYDKNaweXVxSlv//PPzeUnFyTvCJWYetIKppqamvjWt77Fm2++iUaTvPPgpJNOYsuWLXR3d/OXv/yFyy67jHXr1iUMkAYZXqJJFFFPxjaD4vNkEfv3v/99brvtttjfDoeDoqKipMd9ODCqFZRn6eN8YiaLfk+Qimz9sZ+aAtYe6OUrx6c+FHnQvXuy4hPDsNLbYObr1n9uSSuQAqjrdHHDEzXMLTBT3+2etIaA8TJV3w6tUsbMPBNymYAoJnf2nyrWHexFJRcotGoxaZT0egI4vcGUuqRSJd+sodvpp2GYNUSBRctZc3NHbP/K9jasOhVqhYcimy7W5j8VtPR7mZ5joLbDxeISC7UdTqpyTOxsc6Td3VeVa6Su03lMBVLD2TYkgD6+MhN/MIIvGKau0xkbz3I4uGF1OTa9auwNhyAFUkeWtNY8NTU1dHZ2snjxYhQKBQqFgg8++IA//OEPKBQKwuFoSlev11NRUcHy5ct55JFHUCgUPPLIIwDk5uYSCATo64tfoXV2dsayRrm5uXR0jBwQ29XVFbfNYAZqkL6+PoLB4KjbdHZGBcfDs1qDqNVqTCZT3L8jjSAI/P7zC7lwQT7TsvRoxnBhTpcMvfqwWBhMFUq5wM8unMMDVyxM83EyctJoRx4NQYg3F1TIBK5eGc18TsRnKxCOjNrpdbiY7A5YmQBz8k1MyzKwqbGfDfV9rK/vJRwRMY3S+TjZzM43YdIqaez1sqPVQWu/D7lclrKz+1gsKbHi8AUTDtu9+6K5qBXxAfir29v4x0B2eVaembpO95Suc+zeIPU9HpaUWPEFI8wrsLCxoS9t36lCq5aWXg+eYITiKdAiHm4KLVrWHuhhfX0v21rs+MMi03MMLCuzUZ459gDjiWBQK7jquNIpfQ6JySets9Ypp5zC9u3xs8yuueYaZsyYwXe/+91YJ95wRFGM6ZAWL16MUqnkrbfe4rLLLgOgra2NHTt28Ktf/QqAFStWYLfbWb9+PdXV1QCsW7cOu93OcccdF9vm5z//OW1tbeTl5QHw5ptvolarWbx4cWybO++8k0AggEqlim2Tn58/ovx3tDO30MzvvhANFp5a18APntsxafsOhCK02n1TbmI5FcgE+Pi7J487KMpNIAoejlmrwKhWolTI0ChlqBXygUyKiFIuwxcMY9Yq43Qlp8/OibnTKyewYrRolQSPcGOAXCZMaqamMtuASiFjb4dzhLGoyxciw6AeoQ2cChYVW9jabB9hBjmRGYKDmLVKCq2auPmEQ7lwQT6rp2eNuH39wWhAafcGcfgOj3A7EDo0R3G8gVCBRUOeWUOn0z9pgeiRQikTUCtlcd/NcESkdkjn3+x805RlDM+YnRudDiBxTJFWMGU0GpkzJ95NWq/Xk5GRwZw5c3C73fz85z/n/PPPJy8vj56eHh588EGam5u59NJLATCbzVx33XXcfvvtZGRkYLPZuOOOO5g7d26su2/mzJmceeaZXH/99Tz00ENA1Brh3HPPpaqqCoDTTz+dWbNmceWVV3LvvffS29vLHXfcwfXXXx/LJl1xxRXcddddXH311dx5553s27ePu+++mx/96EfHtDDvksWFbGro57+bmsfeOAWU8uiJo8CijWmojhUiIqw90MMFCwrG9fjcJEHY0lIrtR0u7N4gdm8Iu3f0i/s583LjsnvHTTs0E3B1VTb/2thEsU2HAEREkWBYJBCO0O8JjOpUHhHFlFulp4pwREzZfToV9nUm7ggTgFn5pim1YBiKPxSZ1Nc1lGKbdtTZdycl0Eq9t7eTv39aDyR/j6aajlG6+pKxpNRKtytwRC0PxkOyxeOCYssIbdtQMvSqKe0wvVrKSh2TTGo+XS6Xs2fPHh5//HG6u7vJyMhg6dKlfPTRR8yePTu23X333YdCoeCyyy7D6/Vyyimn8Nhjj8Vltp566iluvvnmWNff+eefzwMPPBD3XK+88grf+MY3WLlyJVqtliuuuIJf//rXsW3MZjNvvfUWN954I0uWLMFqtXLbbbfFaaKORdQKOb+5bD5XHVfCD57bkdIMtmRUZBtiRoIZBtWIYEopF8gxHZr5l2NSk2vSIJcJKOUyWvu9dLv8zM430+cJ4PSFEATQqxVkGdSEI2LS1flEUcllXHd8GedNwEel2KZDJRfIM2vJNKhp6HXj9IVGPZkmQqc69FP68ooSvrD0kM5Oq5SzuMSaVMw72pw5mSAkNHo83IQjIsvKbGl1daWDTa8i06A6bIHUVL6WGbnGUY1zc02ahMHUeL2rJhN/KIJSJqQ8JHh+oZmNaf5WJkq+RYMogtMbHHXunkElx6BRxDKrQ5sack1q5DIZZq0yToBv1SnHtHIwaRWUZupo7vXSMYo/2ng4bloGc4cYnkocOwji0W4HfoRxOByYzWbsdvtRoZ8aTqfDR/Xd76T1mEyDimlZBlr6vXGDkUszdLFyWUSMZk7qOly4A+G0TrBDKbZpaUwwRmUiXLK4kCyjmhMqs1gxbWIjEn7/9j7ue7t2wsd0+qwc3tzVwfnz8/nD5dFy7H9qmrn/3X0093lHzYAIRMdD9Hr8tPT74uYqVmTpUSpkBEMRej2BOPPDw828QnOcQHeymJlnpMPhT1ukP15m5BpS9ksaDwqZwKJhwbMgRD/j648vY2VFZsIyzh/fq+PeN/ZO2XGlyqD33Fgo5QIZBjXtY5TJJ4uKbD06pSLm/A/RLFGhVYtCJrClqZ+hSd6h3lxD5z9CfJluYbGF5l5vrPsWol59eSYtEUSc3hD1Pe6Epe5pWXqsOhUHu90pDSwfiyevW8aqysyxN5RIicN5/ZZm8x3jpNPlVZltQKeWs73ZTrdr5Kq8vsczYhjtIOMJpIApaeVXyAS+e+aMSdmXcRLEzga1IpY9mj+gk3p5Wyt3/HtrSo8XgZrGQxcvs1aBTa/GoJbHSkWprJinGuUUlBsXl1jZ1Nh3WJtJ97S7pjQzFYqIrD/Yy1UrSrj+hHJUchlymTDqyJYdLfZYie9IM5ob/VAWFI1eDpsMCiwaCq06mvu91HWOLCP2uAOxIKbQqsWsVdLvDaJTyun3HgpuHL5Q7De0uNga93vb3NiPSiGLyxA39XppGrIIlAlQnqknw6AiFBHpdQfodPgHSpvR46rKNWJQy9nU0D+u7tdTZ2azskKan3esIgVTxzCdDh9XP7p+7A0HsOqUYw7UnWwCUzCpPVFn1Hix6JRYdEpUclnKF5HhVJda2TYQ9MzINdLp8PH9Z7eP8ajkDNdoVZfZ2Nx4eD+3RMgnUWeolAksLLZOiRllKrTbfWiUsikbyfOFpUX8+PzZKWkzf/d2LX/96OARL+cW2bTkm7XUpzBIWi4Tpsx7zKRVMCPHRJ8nwL5OV2xEzVgMNbxMdB9ES+6bm0b+luYXmkcNDCMiHOh2c2DIezM8gzfoql5k1ZJpVLN1YOj4rHwzwVCEui7XqBnqCxcWHNNa3v91pGDqGKXX5eeLf10Xt3oai/UDY2NCEXFKvWuGYvcGU55unirnzM2btH2dOiuHfZ0udrTYKc+Kmjd2pOmvU5al5929XRxfmcn8IjPXP14z5iy+dAiGI6OK1A8bk3ieD4si7eMQO08GJTYt/d7glM42vOq40pQujGvquvnd2/um7DhSwaxVUpGlp6axf8zzSZFNy8WLCvncwgJa+r3oVQra7F5e2NLKazvaR33s2MehYEauiW0t9ikLspPZlGyo78OmV5FlUGMc0FkNdlXu73Il1LIly7o39Xlp6vOSa9Lw1RPKuHBhITa9CqcvyJq6btYf7GNHi539XS7MOiWdDj/ZJjVnzZm885rE4UcKpo5R9ne7x9XxM+jqnG1UU5app77bPekiyqEIMKmBFES7hyYLk0YZVzIURZH9XS7ufWMvb+wc6XU2nNn5Rj7Z38NJVVn86YuL+L8XdvLpgZ5JOz6IliGmZekPS7fU7HwTSrlARIy+F9H/RjV0vknMCEZEMGoO73zBAosGi05Fh8OH3Tt1JdPqUlvCMTGJKLLqYgOBjxTFNi01KQj/q8ts/P3aajTK6OdWkhH1W5pfZOHEqmy2NX8wrm5gpUxgYYmVnS32KSu9pkKvO5BQt2fRKZmWZSASEdnX6cTlD1Ns07J5jPcsz6Lh2lWHTISNGiVnzsnjzCFB06Bk2ekPSaabxzhSMHUM4guGueulnRPaR6fTT6fTj1ohw6CW4/KPPJkbNQryzBq8gTAt/d5xdRoFJjmjUmzTYdOl5wycDoIgUJFt5M9fWsxL29r48Ys7kwqj880avnPGDGo7XFx1XCmPfXKQ/9RMjl3FUNQK4bCJs/s9wcNmj7Gz1cnCIgubB8ohU0GRVUueRUOnw099jyflktFESEdAXJyh45Wbj+ecP3w0pQFVrknDd86sYnqOkec2t/DvjU1kGdVYtMqUAqlFxRaeuK56hMnoIBqlnH9cv4zQQDbn5qc3Jy25QfQ7PT3HiEYp52C3e9zDow8H/Z4gNQMdyTIBqnKMhCJjLxBTGQczmL00Sb5SxzxSMHUMsqvNMWrrdTrMyjONuJipFTLmFpjZ3NgXM6rLNqopydDh9IXY2+FMSzCslAtplankMgGNQsaDX1rM3AIzf/5gP4tLrBTbdGQZ1cgOwwpOEATOn5/PymkZ/OjFnbyyrS3u/hOrsvi/c2by6Jp6zpmXx/YWO3e/umdSj6HQqqW138v8wolpi2blmQCRg92eMd3Y+w/zPLKGXk+cgH+iVOUYEQSRA11uFhRZWF/fR9MoF/WpYHZ+el1DeRbNlI3rkQnw3TNncM3KMlQD8zfnFJi5YXU5t/1zKx/Xdae0n2+fMSNpIDXIYKYKYPX0LJ5aN3JOqFYpY26hhc2NfaP6cB2tRETY25HacO0TKkeaskp8dpGCqWOQ2vbUfszDufXU6by6vZV2h5/KbANalRyrTjUimKrKNY7whhrMZMGhtHcoHGFvh3NM7YlaIR9zSDNEu+JevmkVxTYdwUgkdvK+8+yZabzKySXDoOaPVyziooUdPLOhiY/2dbG01MavL5nPJX/+hPoeD4IAP71gDredNp3fvjVxmwWI+i612X1olPKEg2jTQRCiWSCFLNoiblAr6HT6aej1xIJilULG7DwTW5v7J37wadDrDsS1sI8HlUIGYnT0jkmrYFergzyzlgKrjpUKGWvqJrfsOhb5Fm1a2/sCkQmNHEqGUa3g5lMquf6EkfMqs40aHrl6CVc+sn7MrJBVp2R5uS3l541ERD7df+g916nknDYrh73tTtodvqM6CzVZqBUyckzJuzclPntIwdQxyI7W9L1+yjL1fO3Ecm5YXY4oglZ1aJV5wYJ8rnt8IxC92I7lJTQ07a2SC8wpMKFXKRARQRQQhEM6m7Ao0tA99niJlRUZ3HfZArIHfK7UssOrpxmLU2bmcMrMHAKhCEq5wGs72mM2EmWZBgRBYHrO5M3QyzKo6fME8KRQ+qnINvDV48tZVZlJnydAu92HPxTBGwjz7p5ONg4EKqEIcV47epWc0kwdenW0xHCkLnI1Db1pu++btUquPq6U8xfkU5ahJxQRefD9Oj7Y24VJq+SRq5dSkW2g0+nj1N98cFjG0wyyrbk/Zc0UgFmn5Jy5ebw8LPs5EU6blcOvL5mPWZe8fKRWyPnNpfNZfe97o5bw8y3atLrMQhGR20+vQkQkFBY5ZWZ2zFerw+Hj/nf38Y91jUfcoHQqUciElN+zpt7oQGuJYxspmDoGWVhk5cm1I1PoiRAEOHN2Lr+8eF7SNP3q6VmcPTeXV7e3pz0TKhAWxyw5ZhtHX6HlmzUY1YpYIHU0M1gqOW5aBhctKuDV7W0cP6CROWN2Lh98+0S2t9jZ3mzn3T2dmLXKcTnA7+1wUmzTjTrnrCLbwC2nVnLO3LzYiTvfomV2/iEH5YsXF9LS7+WBd/fx7KYW/KEI5Vl6iqw6tjX3s7N1fFnOycSsVaU1f/Dsubl8/6yZcRcglUzgllOnc/PJFYAQKwVnGzVcu6osrmNuRq6RlRWZWLRKQhERjVLOxYsK2NTYx01Pb55w56RZm76m7/bTq3hrV8ekNGtolDLuPHvmqIHUIEU2HdNzjOwZJdud7tBjlULGOfMSd6blmDT87MK5fPv0GTyxtp6/rak/bHrAw4k7EMbpC6Z0Pv1kfzefMxXGzi0SxyaSA/oYHI0O6E5fkJN/8wFdA2W3AouWfk8AdyBMpkHF8ZVZ+IJhBAGuWVnG0tKxU/TBcITjfvku5Zn6uI6aU2dmY1Ar0KkVlNh07G138sLW1rRmmhVYtIhEZ//5gxFUClmsc6Wlz0tzv5d5hWb++dUVcRmzw0EkEnV6V8gE3P5wShegoYQj4phdOOsP9vL0+kZeHOV9U8oF5hdaCA3MwQuEIzT2JNY4VeUY+ft11WkPd/aHwnj8YSw6JYIgsK/DyWn3fZjWPlJBIROIiCJfqC7miupi9GoFL21tTVoCTdVxG2BmnonnvnFcrKMsFULhCF/5+0YMagVzCsx8ZVVZ0nmH+zqcPPLxQdYe6CEUEelw+NIOrl765qpxjQR5+MP9k6K7u/q4Un58/uyxNxzg9R1tfO3JTUnvz9CrqPnhaRM+rkR4AiHe2tWBRinnqXWNfFLXPSVGv0eCP39pUVznnsMX5GCnm20t/by6vR1fKEwgFMGkUfK7LywY97B2ieQczuu3FEyNwdEYTAE09Lj58wcHcPiCfPX4cgLhCFadimlZ+nEbv9V1urDplBg0SjocPsIRkdJM/YjtPt3fw9WPrk95Ff29s6p44J26UedoQXTWXmWOgXsunsecgqmbT+X0BfnDO/vY0tTPnjYnTn8IhUwgFBE5vjKTu86fTXnW5JXsBuly+vnd27VMyzLw6CcHR3j6nDA9E6VMhkYlJxSO8O6ezrgLuSDARQsL+e5ZVWQbE594u5x+mvo8LCoe2z4iEhGpvvsdul1+vnpCOWfNyWVmngmnL8S+Didbm+28t6czZT1TgUXLs984jgy9ivoeNxXZxrj7z/nDRwn9zVIdU1OZbeDfX1uBZQq7OYfjC4b55Wt7eOyT+pS2/8aJ0/jOON35wxGRG57YyNu7O8f1+EH++uUlnDorJ63nvfaxDXxQ25V0m3dvXz0lv4nh2D1BntnQyDt7OmNlZ6Vc4IvLSrDolDy5tjFuoPjRjFYp54vLinEHQuxqdbC12Y5MgCtXlLC4xMaCQgtFtvRKqBLpIQVTRxFHazB1pPnnhka++9/UXL5fuXkVBRYtH9R2sb/TRSAsYlDLMWqUmLVKrHoVc/JNvLWrA5teRUQUOa4ic9LbhT+o7eKtXe18vK876dgciFpCfP3EaVxzXBkaZTSDMdknvE6Hj1e3t5Fl1NDu8LG7zUGJTcdNp1TGtmnocfPq9nb+8tEB5haY+f7ZM5iRO/I7GI6I/P7tWv67qYVWuxeDWsGDX1zEwmIrepV81GP/7Zt7cfnD/Oi8WUm3WXegh+89u52DozhjF1i0/O3qpVTlGpNuU9/t5qpH19Mw7L2XywSWllpZe2Bk0KaSyzh5RjZnzsll9fQsrPrDF0gN5cH36/jV66PPzZudb+L5G1dOaOyOKIr85OVdPLqmftz7ePmmVWkvRjyBEJ/74ydJO9Vm5Bp56aZVUzJSKBmr7nmXy6uLOX9+fqykGwhF+ON7dfz+nak3Ov3qCeU09njodQew6JTU97hj3c3jwaZXcfKMbL62unzEQkNiapCCqaMIKZhKzv97YQePf9oQd5taIeNLy0u4dEkhobDI+3s7uby6eNS5ZIeDl7e1csszW9IqIQwK6ZVygRXTMqnMNnDradMxqCdfajj4M0wU+HgD4VHLn394Z1/SEppFp+TzS4v4/lmJOyJ7XH7qe9wsLhm9FNzp8PH5h9cmDKiOr8zkvs8vIDOFz/ilra3c9PTm2N/lWXr+dtVS7N4Ar+3oYEN9L2atklyzhoVFFk6fnYtZe+Q9eJp6PZx+34dJu+6UcoEXblzFrDRtERIhiiI/fGFHyrrIochlAjvvOiOtMuggnkCIl7e18f7eTrY12wmF413qv37itEmbiZkKXU4/Jq0iodbzxa3R2ZfpjKsSBDCoFCnNM60utfGvr62Iu+2Z9Y18b5xjor5+4jRuP2160vKyxNQgDTqWOCa464I5nDwzh7te2smBLjfVpTbuuWQeZUNKg1NZrksFURT525p6fv7KrrS7hwaXGcGwyIe1XXxY20VJho4vryid9OMcLXs0WiAViYg8PkoJqt8T5OEPo5mtc+flj7g/w6BOKdDNNmn429VL+ctHB9jX4WRhsZVTZmRTlqkn05C691e+Jb48ec3KsoFSsp75RRNzth8tIJ0oRTYds/JNsS7W4ayenjUpgRREj/8n58/h7Dl5/PCFHWk53+cY1eMKpAB0KgWXLSnisiVFsdta+r3UdjgxqBVUHIYy31CyRmlcOX9+Pm/ubB+zA3JlRQaV2UZEUSTLqGZeoYWbnt6c0AE/06BiXqGFIquWzy0qHHH/yTOz0ankCTtsjWoFp87K4ey5eTy/uZkuV4DGXg85JjVKuYzGXo8USH3GkYIpiQmxenoWb9+6Gpc/iGkcXUxTSY/Lz+3/3sr7e5NrQdLl1e1tLCq2UmTTYdYqCYQiuPwhdrTY6Xb56fMEcfqCeINhHN4Qbn+IbKOaq44rnZL25/X1vfSM0Q0livDNf2zmrx8dZFm5jdtPqxpX51BZpp67Pzd3vIcKQDhCbO4ZwMIiS5qPF/EEQrEuqZ2tdh756CB2b5DdbQ76PEGWl9v485WLxzSZTIdOp489o/h9lSXQFk4EmUzguIpMnvnqCr7y+IbYGKhBVlZkcO3KMt7f28UTaxtQyAROmZnNxQmCgIlQYNFSkKZv1uHiggUFowZTZ8/N5RefmzeiqWTTD09jT7uDTQ19bGzo4+1dHayuyuK3ly0YNRDNNmq4cnkJD314AIj64p02EECdMD0z9n1r6HHzs1d2A9GB2gDlmXp8wfC4A12Jox8pmJKYMDKZcNQFUgDPbmqZ1EAKYO2BXs69/2O0SjlzCkxsaepPqdvr2c0tvHPb6knV/HQ5/Tz4/v6Ut9/S1M+Wpn4+qevhxpOmccbs3MMufq0us/Hkdcu4/C9rAVJ6P9z+EE+ta2BWnpm7X93N2XNzmV9k4dP9PTzy8cERjRAbG/pQpZEF+O2be3lzVwenz87lttOmJ9zm/57bMeq4lzOnaEhtllHNY9dUc/lf1rKn3YlKIePH583msiWFKOQyTpmZw7nz8qjINhzxUvrh5tSZ2SwosrAlwTgio1rBTy6Yk7A7Vy4TmJ1vZna+mStXlLKr1UFVrjGl2XirKjNp6fdy7rx8TqzKGhEc2T1B/vhe3YjHDfqOBcORw6o7kzh8SJqpMZA0U8cuwXCEE371Hm32qZ/Hlgo3n1zBbadXpbRta3906rxMJhCJiLTavfS5g7j8IcIRkee3tPDi1ta0NCMjjueUSm49tXLSAqped4APBzrCLlxYMOq2Z/3+I4LhCG/desKYz/+Vxzfy9u5DQ6crsw0c6HYntZkwqBVs//HpY+5XFEWeXt/Enc9FdTBapZy3b189IhPj9oc4+w8fjRDOZxnVVJfZ+OKyYo6blvo8vvGwv8vFH9+t46uryxM2Ifyvsq/DySV//jSubJdn1vC9s2ZwwYLRv4NTQTgiUvV/r43QZsoEUMplnDE7lz9cvvCwH9f/KpIA/ShCCqaObd7d08Hv36lje3P/EXdcVitkfPWEcm49dfqYGqOzfv8Rzb0eSjJ1NHR7UhLNjocbVpfzvTNnxAIPtz/EXS/tZN3BXq5cXkKBRYtVr2J5ecao+3libQM/e3lXLEv0g7NnJhxjMkib3YtZq0Snik+O+4JhtjXb2dVqR6OU09jrGZF9G8tK4aJFBfz2sgWjHq8oinz3v9v418b4wdQryjN44rrqhPqW9/Z0css/t2DTq1haauX206skb6CjgLpOF2/t6qCu00WuWc3XT6yYkiaRVBBFken/91rSbLVCJvDeHSdKjueHCSmYOoqQgqljH1EUmXfXmzgP40iR0Xj82mpWTx99COqJ9743qn3DZHLctAy+sqoMlULO45/W89aujhHbGNUKtCo5K6ZlEBGjNgclGf+/vTuPb7JM9wb+y540TdKkW5qmG2spLS2UUkC0bFIclsFlWEQcfI+vK6LjMq6jjmdewRFXHFzmOM4ZnSPOHEAREQvKIrIUWiotW1lK94XSNGm6ZL3fP0ofSZs2bZYucH0/Hz5KcjV5uCl9rtzLdQVheHgwTG02fHqwtMun8dsn6PHigqRen8bLK23A6s8LemwrEx8a5NJT0J37s4Z1e3qxwwd7z2Ptt+4LZC6eqMef70h1+xwt0xBPFv3lJ7dLjx1uHR+Nt5ak9dv1XM8omRpEKJkavKqNrYhS9W5z7M6TtXh047Fe9boLtNGRCmy8b3KP+4WmrvkeVf20PKlTSXG52QKL3f8/CnqztGl3OPHRjxfwZk5xr0pXTIpXI7eHiukiAQ9bHrqh25OkZ2ubMO/d/bD20MLmg7vSMTdZ6/FaCOns6f89ji+Olnf7vIDPwx6aneoX/Xn/po9YZEjaV3wJc97ahxNVRrTZHDhX14SiSiOOVzSi2tiKzp8Rbk6KxP6nZ+KN36TiVykDe5M8U9uE336S22PPs55u9P6mkIoCkkgBwN8PXMQXR8pQYWiBs1Oi5HQy/Hj2Eha89xP+vONMrxIpIR+obeq5ArbNwfD8lkK0uakJda6uCXf/Ldfj+L6RcwZNbV2PzxPSE8YY973V3ZY9h5P16eAIGRpoZsoDmpkaXJxOhjd3FuMve87h9TtScUe6HgXljVj0l59c4mYmRmBUpAL33BDvdl/Lff84iromC2wOB87UNMEP/WX7bG6yFqMiFViSEdNl03PyS9/BHKB9Ulfr7jRUIASJBdCqpJCLhWhstcJqd6LW1LfWIH3p45ccrcTyzDhMGxGGc5fM2Jhbhn3F9d0W3uwsPjQIv7t5FBam6qjlB+mVWlMb/ra/BCMigjE3WYuiShM+3HceP52rR7BEiMZWGxijvVP9hZb5BhFKpgaXWlMbMl/9HgCw96np0IXIMOuNvShr6Lq/aFKCGmC8LpWMSy83I+v1PdzvNXIRRkQouF5g/WlSvAa5FxswMzECC1N1GKdXYVh4MHYUVeO5LUVo8FBDyhciAQ+RSikqDN3vURosVDIhEsLkKCj33MPP3yIUEixM1eHpWxJpvxTxirHVBqVUiOe2FOLz3PYlwFmJEfh4ZYZLXJvNgfd+OIepw0MxdURgT4heD2iZj5BuRCqlWDVjBG4cGYbQYAmcjLlNpADg6EUDLtSbu1Q7/qbQtdBfQ7MNHfMOkxJ6bqvib7kXG5CZoMEPV06KzXxjL25//wAyE0Jx4JmZeGHeGMgCVOhvQqx6SCRS7X8nvH5PpFQyEbLHRuKmUeHIKzPA1o9Lr+TaopKJwOPx8NKCsRAJ2n/a7Dt7CefqXHshvvTVCby3+xwe/Gc+Si/3vvI9GXhUtJMMOU9m/7Kh+eqTX/oQGSqu+r2TAcPDg7vcBHcU1XR5TbPFjnHRqi77evrD4ZIGpEQrUVzbBIudIa/UgC+OluOBrOG498ZhSI0Jwd0f5/Z6eaonmQkazEiMwI0jw/BMLxtVDzgGt+0/AiUjXo0n54zGxHhNrwo5EtJbUpEA00aEYfeZS7A5GJZ+dBgblk/ApAQN/n20nNu4bmy14b5/5GHTQ1MHrMwD6RuamSJDWvGVLvcJYXLYGeM+9XUwW2wuFbK3F1a7rVF0osqE45VGXBygT4OFlSZEhwRBE9R+wu9/DpdxBTkz4jV4Y7H7o/p9kR6nxscrM/BA1nCM1anw3p3joR0CdZLyyxowJkrRL+8VoZBg/bIJyBwWSokUCYhnfzUGC1J1EAv4qDdbcM8nufj0UCn+8FWRS9yZ2iY8/kXBgHzAI31HyRQZ0g6evwyg/SZYY2xDolaJtBgVt6G7rKEVf95xmvuBtDm/ssfXqzdbMTzcv33WeutCfTNGRLY3ky1raMHbu4q5524aFY6IHhq/9sb0UeEun3LjQuWYNSbCp9fsD3YnUN9khdpNaxB/mpMUiW2rp0GrGvwJJhm6RkUqsH7ZeBx5YTaCJUI0Wx34w5dFaLN1XUbOOVmLd74/OwBXSfqKkikypEWHyDAiIhjn6swAgMJKI1qsDlQ2tkIi5CNEJsJXBVVY+tdDeHX7Sfx0rt7jawaJB64Zacf+L7GQD5GAz5V4CJYI8f5dEzBlWChGXUm4ekMjF+PuKXG4dXy027pJwdKhsYRwyWzBaG3gZqf0ahnW3zkeEQpKpEj/UMlEuDkp0mPcO9+fdbs1gQwuQ+MnKSHdyBymwUtbT7g8ppS2z2BY7E6UX9lgnVvSAJvD2at9R2KhAOOiVXAwJ87VmQNWg8kdi82BUZFyKCQipMWGuBzJT4/T4PP7JoMxhr/+eAGvbndfwRtob13z4oIk/Dotusc9F5GDNHlQyUSQSwSoamwvXDoxTo0TlUZolVLUmPxfzDRVHwKJsHdJNGMMFruzS5NbQvpq6vBQbDnW82w5ADzxrwKMjJyG4eG9/yBF+hfNTJEhzV2j3+72uvT2WHteqQHHK404UdUEgIeJcWpfLtGt7pasxAI+ak1W5JU14p5PjuD//uMo/rL7nMupHx6Ph/tuGo5J8d2fPPzjwrFYnhnncfPqqMj+2YvUV3q1DNWNbUiPVSMzQYOjpQY0WRzQhQQm+Xt4xgi3j3+07zy2Ha9C85WaX8ZWG57bUoiZ6/bgs0OlAbkWcv1YND4aP784B7+f23OXgGarA7vctHkigwclU2RI+/5UXZfH/NkyxmJ34lh5I0b3YWnNE32IDAxAkptN1dFqmcvJtZ0na/H6d2cw7939eG3HadivOpm44a4JXfre6dUyzB4TgV+nRffqWkZpB+cn3RNVJkyMVyOvzIDDV9X/yi9rDMietjXfnnL7+KK0aPxp2ymkvZKDWW/swfTXd+Pz3HJUGdtgogrpxEciAR+qIBEemj4C99wQ7zYmSCzAO0vTcH/W8P69ONIntMxHhrTNxypcfp8QJkdRVTf1iLxcrXM4GS6ZrQiVi3G5F0U0JUJej0uDOrUMuSUNMLXaMDIiGGev7PdKjVGhrskCTZAIDS2uN2qL3Yn395yH3eHE8/OSAABhwRIsmxSLD/aeh0wkwD/+YxIyepitcidCIYVKJurX0gPemBSvgRMMDgdDQ4v/C5keOH8Z9WYLwoJdN/lHKKX49wNTcMcHB3D+kutJz4lx/VuTjFzbfp+diAmxapTUN+OtXcVgDBgZEYz375qAERGDcwaZ/IKSKTJkWewOl6KTYcFiWB1OdFfTn3mbTQFoaLZiREQw9//dvdKE2BAUVZmQmaB2mVG5WkdtLCcDlDIRMuLVaLbYUd3YhromC/RqGcRCPmrctFr5648liA6RYeUNCQCAp7JHIyxYjMnDQrtt7AsAXxVUQiEVIiNeA4XUdTYrOVqJn85d9jQE/UImEkAuESBULuHaxmTEq5F7MbDV6R1Ohq8KqvAf0xK6PBejCcK3j96El7aewNc/VwForx6f0sN4E9JXMrEAC1J1AICsUeH4tqgGq2eNQJCYbtNDAf0tkSGrvKGFS5zS49Qwtdq4WR53nD52Tuo4MaiQCqGUilwKhgLA8HA58ssaAbQX4hyrU4KH9noxNscv762UCtGx5TSv1IAgER/DIoJRd6WBb4WhFcESIcbHqHDMTdXvV7adRKRSiltSoiDg83DvjcO6veavf67Cv46W48ez7acYJUI+XlowFndmxnIxKybHDWgylZmgQb3ZgvOXmpGiV+LoRQOuLq3TX23xNudX4J6p8eC72XOnkYvxzpI0hAdL8LefSpAWEwLZAJ76JNe21JgQpMaEDPRlkD6gZIoMWR/vvwig/Wbc3SzQ1fzVhbKpzQ53LS1DgyUuS0EnqkwAgPExIThfb4ap1Q65WIDGTkt4OnUQiipNLo+ZLXYcKzciPVaNysYWl1kqJwOe/7IIxlYblk6KRWffn6rFvuJLaGixcTMpHSx2J57bUgipiI/bJugBANljtTj+8hzUmSx44LM8LmnsDynRKhwuaYAmSIxRkcE4U9MEJ4NLT8LcEgMStQqU1De7FGD1txNVJuwprsPMRPfH1fl8Hv4wfwyaLXZMjPf/oQRCyNBFjY49oEbHgw9jDH/ZfQ7rcooxKUHTpwbFvU28PMmIV6OgvJGbcUrVq/Czm8rqHUQCHsbHhMDYZseZGtd+XDIRHynRId0uZUUoJNys1dXkYgFGaxWoMbYhJEgMPr89YexI4noSLBHi+yeyENmpAvrpGhNu23DAr5v4e9KXv4+r95cFSliwBA/PGI5FadFQy8UBfS9CSGD15/2bkikPKJkaXOwOJ5763+PYcqwSMRoZKgytfZ5xmhSvRu6V/Ti+UEiEGKVVQMjn+ZygDQ+Xd9ng3CE9To28Ut+vt7PbJ+jdtqn58lglHvuiwO/v1yFaLUOloRUp0UrUmSyodZMoXi0+NAiXmiwYHhHsthVQICRqFVBKRahrasNjs0dh0fjenY4khAwe/Xn/9qk0wpo1a8Dj8fDYY48BAGw2G55++mmkpKRALpdDp9Ph7rvvRlVVp6UGiwWPPPIIwsLCIJfLsXDhQlRUuJ7KMhgMWLFiBVQqFVQqFVasWIHGxkaXmLKyMixYsAByuRxhYWFYvXo1rFbXkz6FhYXIysqCTCZDdHQ0XnnlFbdLNGRoeHX7aa7InU4l82rp7kipAeNjvN88LBLwMClejdBgMcobWnxOpBK1im4TKQBoszkwLloFoZ8Lmew8WdNllgwAfp2mw8sLkqBXy/z7hleIBXzo1TIIeHyPiRQAmNrsSNIpIeLzoJGLkRGvdltWwp9O1zQh92IDLl5uwR+/PtGlWTYhhFzN6x/PR44cwUcffYRx48Zxj7W0tCA/Px9/+MMfkJ+fj82bN6O4uBgLFy50+drHHnsMW7ZswcaNG7F//36YzWbMnz8fDscvSwt33nknCgoKsGPHDuzYsQMFBQVYsWIF97zD4cC8efPQ3NyM/fv3Y+PGjdi0aROeeOIJLsZkMuHmm2+GTqfDkSNHsH79eqxbtw5vvvmmt39sMsAOnP+lHYzDywagjAFFVSYkRbn/pOKpB15aTAhK6ltgdTjdLr/1VbWxlTsp6E5HE2apSIiUaBUmJWgwMU6NpCglIn3o12dqs2Otm/pKPB4PK29IwJ4np+PlBUnQ+blXndPJUGFoRUFFY6/iG5qtaLM5cKG+GQ3NVhy5aMBlsxUKDwVJ/aXZ6gC/v3bBE0KGJK+W+cxmMyZMmIANGzbgT3/6E9LS0vD222+7jT1y5AgmTZqE0tJSxMbGwmg0Ijw8HJ9++imWLFkCAKiqqkJMTAy2b9+O7OxsnDp1CklJSTh06BAyMzMBAIcOHcKUKVNw+vRpjB49Gt9++y3mz5+P8vJy6HTtx0k3btyIlStXoq6uDkqlEu+//z6effZZ1NbWQiJpv+msXbsW69evR0VFhUurjg4WiwUWyy83SJPJhJiYGFrmGyQyX92FWpMFPABRKimqjN61FpEI+UjVq1BYaURrpwajfB6gVUphdTghFvBRZWyDTiVFsFQIJwM0QSKcqTX7rTZTsFgAsw97lIT89mbA3hDwebgrMxYvzE/qtkL8ubom/PZvR7qcXvRGWLAYGrkYxbW+731KilLi/CVzQDelA8DkYRpsvG9KQN+DEOJ/g36Z7+GHH8a8efMwe/Zsj7FGoxE8Hg8hISEAgLy8PNhsNsyZM4eL0el0SE5OxoEDBwAABw8ehEql4hIpAJg8eTJUKpVLTHJyMpdIAUB2djYsFgvy8vK4mKysLC6R6oipqqrCxYsX3V7vmjVruKVFlUqFmJiY3g0K6Rd8Hg9CPpAWG+J1IgUAyzNjsWxSLIRuEggnA6qMbag3W2F1OJGoVUAk4KG41oxzdWbkXjT4tcilL4kUAITKvZ+dcjgZ/vtgKV786kS3MSMiFBjTh2W1GLUMSVEKpMWEYGKcGhnxaqTpQ6CQCFBvtvolkYpQSOBkTsSHyhEfGoSMeDXG6gLzw7KxxUZbAwghPerzPPnGjRuRl5eHo0ePeoxta2vDM888gzvvvJPLCmtqaiAWi6FWux4tjoyMRE1NDRcTERHR5fUiIiJcYiIjXY8wq9VqiMVil5j4+Pgu79PxXEJC1wJ9zz77LB5//HHu9x0zU2RwWD1rBL48VuV1EUcBn4ffpOuhlInwu3/97DG+3mxFvdnabS89f5GLBWj2MqnSa4J6tfeoJ5/nlqHFasd/LkrmGkVfrbfLXCIBj2su3Z1giQBxoUG4bLa6LUzamT5EhqgQKfg8HuwOhsrGVtSY2gucpupVuFBvRnlDC9LjNEjUKuBkDM1WByo9XEdvna5pwoX6ZmoySwjpVp+SqfLycjz66KPIycmBVNrzPgqbzYalS5fC6XRiw4YNHl+bMeay7OZuCc4fMR2fMN19LQBIJBKXmSwyeJyra8IbOcVosTog5PNcCmH21qu3JmP2mEhMf31Pn77O0BLYdisKqcjrZMrup83RXxVU4a7JcW5b0jw6eyR2naqFp21q42PVbktVTErQwNBsRautvWr9iaomTIxTI1odBLvDCavDCblYCIb2hNdqd6K6sRV6tQzHK42o6GaJUSTgc98HF+rNMLXaYHUwRIf4d/N859pghBBytT4lU3l5eairq0N6ejr3mMPhwL59+/Dee+/BYrFAIBDAZrNh8eLFKCkpwQ8//OCyVqnVamG1WmEwGFxmp+rq6jB16lQupra2a4fsS5cucTNLWq0Whw8fdnneYDDAZrO5xHTMUl39PgC6zGqRwc3ucOKBz/JRb/a+L9u8cVGYOjwM/7ntJJosdj9ene/kEu+raVf7sNzZ2c/ljW6TqbE6FWYmRmDXVY2lFVIhFqbqMDdZC5VMhNLLzTh4vgH5pQbY3WRdnWtEHe1FuQdPM25XVyu/+nvD2Oq//n2RSkmfljkJIdefPu2ZmjVrFgoLC1FQUMD9mjhxIpYvX46CggKXROrs2bPYtWsXQkNDXV4jPT0dIpEIO3fu5B6rrq5GUVERl0xNmTIFRqMRubm5XMzhw4dhNBpdYoqKilBdXc3F5OTkQCKRcMnelClTsG/fPpdyCTk5OdDpdF2W/8jgxRjDH78+6XVl7lS9CuuXjccfF4zFc1sK8WVBlecv6mcykffJlM6PszAHznffVuaZWxKxbFIMxkQpse43qTjy/Gz8v1tTcOPIcIzTh2BBajRevS0Fmx6cioz+qhDuZi/TOL0KbTb/bUqfNiKc+qMRQnrkc9HO6dOnc6f57HY7br/9duTn52Pbtm0usz8ajQZicXtF4QcffBDbtm3D3//+d2g0Gjz55JO4fPky8vLyIBC031RuueUWVFVV4cMPPwQA3HfffYiLi8PXX38NoH1GLC0tDZGRkXj99dfR0NCAlStXYtGiRVi/fj2A9s3vo0ePxsyZM/Hcc8/h7NmzWLlyJV588UWXEgo9oaKdA4sxhjXfnsZH+y549fU8HnDk+dlwMobffHAQpZdb/HyF/jEhNoTr69dXEiEfY6KUKCj37uuvpg4SIe+Fm932p+sLU5sNM17fg8tX2sL4q/J8Z1ePm0zER3K0CufqzH5dlv3kngzMGN11DychZHAb9Kf5ulNRUYGtW7eioqICaWlpiIqK4n51nMIDgLfeeguLFi3C4sWLccMNNyAoKAhff/01l0gBwD//+U+kpKRgzpw5mDNnDsaNG4dPP/2Ue14gEOCbb76BVCrFDTfcgMWLF2PRokVYt24dF6NSqbBz505UVFRg4sSJeOihh/D444+7bDAng9uB85e9TqQA4JZkLcKCJThSYhhUidTIiGAEX9Uot8LQijiNDOO9aG6qkAohFPAg8EMpJEOLDcV1XQt59pVSKsKzv0rEOL0KyTplQBIpANwMlIjPw1idCierTH5NpO6dloDpo8L99nqEkGuTz3PXe/bs4f4/Pj6+V0eIpVIp1q9fz80guaPRaPDZZ5/1+DqxsbHYtm1bjzEpKSnYt2+fx2sig5PYx7LfyzPjAACnqj33q+tPGrkYjS02rixCR/HPCGXfC2RKhAIc9UN7nA4Hz19GotbzpzizxY4XvyoCY8CSjBhMHua6pH/+UnPA27/UNbXvF5sQF4LDJf4bg9GRCjw8cwQWpuo8BxNCrnu0EYAMauNjQjAsXI4LPbRb6UlHIcrBkkyJBTyIhXw0NFshFvKgkAjAGKAKEkEXIvOqflVlYysStQqcdtMaxhuFvUiAjC023P7BAW4f25ZjlXj2lkTcnzWci4nyc+V0d+rNVkQqJWix+meP1JgoJR6dNRJzkiJ9XuokhFw/KJkig5pQwEd0iMyrZEojFyPtyrKZvxINXyTrlCiqMsHqcHQ52Wa2OlDZ6P2pPKXMP3WwRAIeZo7xvD9o7Y5TXQ4EvP7dGUwdHoYUfXvfw1R9iF+uyZNakwUqmQgp0SqcrWvyevP5/TcNw+9uHgWpD4cBCCHXJ0qmyKBWXNuEH8/Wew50Y1K8BmIhH6Y2m19aofSFgAcESYQYE6WA3cFgtTt9XrLsicXmWxV1AAgJEuHPt4/DnLFaj7H33jgM2wtrXGbS7E6Gx744hm9W3wipSIDEKIXbGTMBnwc+D17VCetOm82BZ381BkqpCPmlBqToVSiqNOLbohoUlDf22McxRiPDa7eNw9QRYX67HkLI9YWSKTKoKaUijIlS9nmZLiRIhCezRwMAztb236xUZoIGDO2nEAvKG3G6ugmhwRKEB4uR68d9TZ35uul6ZmIEXrt9HMJ72Th5eHgwHpk5AqdrmiAS8GCxOdHQYsXF+mbsK76EOWO1kAgF+NcDU7D8r4dRWPnL0uHzvxqDSKUUD/9Pvk/X3CFILMCjs0ZxJ+7S49rLMkweFop7bxyGqsZWfHeiBscrjNh2vMoliVs5NR6/nzuaSh8QQnzic2mEax2VRhh45+qaMPvN3h8iSIsJwfpl4xGjCQJjDH/4qgifHSoL4BW2UweJECQWdpkFS9QqoJCKcMTLFjieSIR8pMWEeH1iLiVahU0PTvXbzFnnLgS1pjbc+ddDOH+pGXwesP3RGzEqQoETVSY4GIOh2YrjFUbUNbVhREQw/uvHkj7NJG57ZBqSo1W9iq0ztcFsscPQYoVMJERSgPr5EUIGXn/ev+njGBn0vuplkU11kAgLUnV4cX4S18D4rV1n+yWRAoBRkQq3CU21sQ31Zt9653UnLFgMAY/nU+mBh2eM8OsSZOdWTZFKKf51/xT8/n+PY3FGDHdSsGNvFQDMSPxln9aySbH499FyfFNYDbFQgNLLzV3KWvB4AA/tbWrkkt7/GItQSkEVowgh/kbJFBnUmtps+O8DFz3GJYTJsXXVDQiWCLmb+ft7zuPd788G+Arb8QC0drNvyZsTer1Vb7YiUavoc6NjPq+9cro6SIzR2sC3SgkNluDjlRm9ipWKBFgxJR4rpsRzj124ZMbab08j52R7m6nbxuvxzC2J0MjFENCpO0LIAKNkigxqG3PLYWrruY8enwe8sTgVCukvJ9r+tr8Er+04HejLA9C+T+pktSngNZW602J1ICxY3Ou+hTwecPsEPV7/TWqAr8x/hoUH4893jEPC3vOwOxgenT0SSql/TjASQoivKJkig1qKXgWxkA+r3f1xdyGfh3eWjseE2F96weWcqMEr20721yWisrEVcrEQTR6SvkApa2hBZoIG9eYG6NUyaORi2B0MMrEAeVc1E5YI+ViaEYP/My0BcaHyAblWX4QEifHsLWMG+jIIIaQLSqbIoDZ5WCi+uG8yHvn8GCoM7ZuSRQIedyJr9phIZI+NdPma7pbbAiVMLkFBRSM0QSJIRAJUG72vF+WtvFIDdCopKgyt3DgBQEa8GsW1TbgjPQb33zTMqwrrhBBCekbJFBn0xseq8fd7JuGhf+YhPU6DpRkxiNUEoanNjtjQoC7xSVH9e0KroKIRANDQYkO4InC1pHpidzJUuUniIpRSvLM0DbqQruNECCHEPyiZIkPCiIhgfPfYTS4nxdRysdvYuFA5BHxej4UaA2Ww7IWO1QThT4uScRM16SWEkICjZIoMGZ2P3HdHLOQjIUzepd1JfwiRiRGraZ8FMrbaUFzb/9ewPDMWL8xLgkxMbVEIIaQ/UDJFrknxoUEDkkypgkTI9aHmky+kIj7+fEcqFqbqBuT9CSHkekXJFLnm1DW1ed3Pz1eBKs7piVTEx9/vmYTJw0IH5P0JIeR6RskUueZsLaiCzeG+lEJnAj4PiVoFUmNCMCZKieFhcmhVUmjkYgSJhXAyhqY2O2pNbbA7GXafrkN+mQHHyhphtriWQhALeF0qdfcHHg94/650SqQIIWSAUDJFrjkSkQD/838n43hFI17dfhoqmQjTRoahoqEF9WYrkqOVmBCrxsR4NcbqVJCKet5bJBUJuAbAaTEhAAC7w4lj5Y3YXliNbwtrUGNqQ7BEBJvDiSZL/9abWj1zJNfklxBCSP+jRsceUKPjoYsxhpL6Zu50n9Xu9GsPuqvfp6C8EfvP1uO7EzUoqW9Gs7W91hWfB4yMVKC6sdVjJXdvTB8djv+6eyLXi5AQQki7/rx/UzLlASVTpC9qTW3499FyFJQ1orHVhvOXzDC02DApXoPci/7dmD4rMQJ/WT7B48waIYRcj/rz/k3LfIT4UaRSilUzR8LhZPjpXD2+/rkKu07VIq+0AbGaINSbLWix+lahXSLkY/WskXggazg1+SWEkEGAkilCAkDA5+GmUeG4aVQ4HE6G8oYW5JyowflLzfimsLrL5vXeiNHIsDg9BksyYqgtDCGEDCK0zOcBLfMRf2OM4XKz9UofvRZcarLA0GKDqdUGY2v7f0UCPpQyIUZrlRirUyI+VI5IpaTXhUsJIeR6R8t8hFzDeDwewoIlCAuWcKcDCSGEDF10BIgQQgghxAeUTBFCCCGE+ICSKUIIIYQQH1AyRQghhBDiA0qmCCGEEEJ8QKf5POioHGEymQb4SgghhBDSWx337f6oAEXJlAdNTU0AgJiYmAG+EkIIIYT0VVNTE1QqVUDfg4p2euB0OlFVVQWFQtFtwUSTyYSYmBiUl5dTYc8BQOM/cGjsBw6N/cChsR9YvR1/xhiampqg0+nA5wd2VxPNTHnA5/Oh1+t7FatUKukf1gCi8R84NPYDh8Z+4NDYD6zejH+gZ6Q60AZ0QgghhBAfUDJFCCGEEOIDSqb8QCKR4KWXXoJEIhnoS7ku0fgPHBr7gUNjP3Bo7AfWYBx/2oBOCCGEEOIDmpkihBBCCPEBJVOEEEIIIT6gZIoQQgghxAeUTBFCCCGE+ICSKUIIIYQQH1wXydS+ffuwYMEC6HQ68Hg8fPnlly7PM8bw8ssvQ6fTQSaTYfr06Thx4oRLjMViwSOPPIKwsDDI5XIsXLgQFRUVLjEGgwErVqyASqWCSqXCihUr0NjY6BJTVlaGBQsWQC6XIywsDKtXr4bVanWJKSwsRFZWFmQyGaKjo/HKK6/0S6PGQOlp/G02G55++mmkpKRALpdDp9Ph7rvvRlVVlctr0Ph7x9P3/tXuv/9+8Hg8vP322y6P09h7pzdjf+rUKSxcuBAqlQoKhQKTJ09GWVkZ9zyNvXc8jb3ZbMaqVaug1+shk8kwZswYvP/++y4xNPbeWbNmDTIyMqBQKBAREYFFixbhzJkzLjHX5D2XXQe2b9/Onn/+ebZp0yYGgG3ZssXl+bVr1zKFQsE2bdrECgsL2ZIlS1hUVBQzmUxczAMPPMCio6PZzp07WX5+PpsxYwZLTU1ldrudi5k7dy5LTk5mBw4cYAcOHGDJycls/vz53PN2u50lJyezGTNmsPz8fLZz506m0+nYqlWruBij0cgiIyPZ0qVLWWFhIdu0aRNTKBRs3bp1gRugAOtp/BsbG9ns2bPZF198wU6fPs0OHjzIMjMzWXp6ustr0Ph7x9P3foctW7aw1NRUptPp2FtvveXyHI29dzyN/blz55hGo2FPPfUUy8/PZ+fPn2fbtm1jtbW1XAyNvXc8jf29997Lhg8fznbv3s1KSkrYhx9+yAQCAfvyyy+5GBp772RnZ7NPPvmEFRUVsYKCAjZv3jwWGxvLzGYzF3Mt3nOvi2Tqap3/YTmdTqbVatnatWu5x9ra2phKpWIffPABY6z9hi8SidjGjRu5mMrKSsbn89mOHTsYY4ydPHmSAWCHDh3iYg4ePMgAsNOnTzPG2v+B8/l8VllZycV8/vnnTCKRMKPRyBhjbMOGDUylUrG2tjYuZs2aNUyn0zGn0+nHkRgYPd3QO+Tm5jIArLS0lDFG4+8v3Y19RUUFi46OZkVFRSwuLs4lmaKx9w93Y79kyRJ21113dfs1NPb+4W7sx44dy1555RWXxyZMmMBeeOEFxhiNvT/V1dUxAGzv3r2MsWv3nntdLPP1pKSkBDU1NZgzZw73mEQiQVZWFg4cOAAAyMvLg81mc4nR6XRITk7mYg4ePAiVSoXMzEwuZvLkyVCpVC4xycnJ0Ol0XEx2djYsFgvy8vK4mKysLJfKrtnZ2aiqqsLFixf9PwCDkNFoBI/HQ0hICAAa/0ByOp1YsWIFnnrqKYwdO7bL8zT2geF0OvHNN99g1KhRyM7ORkREBDIzM12Wo2jsA2fatGnYunUrKisrwRjD7t27UVxcjOzsbAA09v5kNBoBABqNBsC1e8+97pOpmpoaAEBkZKTL45GRkdxzNTU1EIvFUKvVPcZERER0ef2IiAiXmM7vo1arIRaLe4zp+H1HzLWsra0NzzzzDO68806uGziNf+C89tprEAqFWL16tdvnaewDo66uDmazGWvXrsXcuXORk5ODW2+9Fbfddhv27t0LgMY+kN59910kJSVBr9dDLBZj7ty52LBhA6ZNmwaAxt5fGGN4/PHHMW3aNCQnJwO4du+5wl5HXuN4PJ7L7xljXR7rrHOMu3h/xLArG+E8Xc9QZ7PZsHTpUjidTmzYsMFjPI2/b/Ly8vDOO+8gPz+/z382GnvfOJ1OAMCvf/1r/O53vwMApKWl4cCBA/jggw+QlZXV7dfS2Pvu3XffxaFDh7B161bExcVh3759eOihhxAVFYXZs2d3+3U09n2zatUqHD9+HPv37+/y3LV2z73uZ6a0Wi2ArhloXV0dl51qtVpYrVYYDIYeY2pra7u8/qVLl1xiOr+PwWCAzWbrMaaurg5A10z+WmKz2bB48WKUlJRg586d3KwUQOMfKD/++CPq6uoQGxsLoVAIoVCI0tJSPPHEE4iPjwdAYx8oYWFhEAqFSEpKcnl8zJgx3Gk+GvvAaG1txXPPPYc333wTCxYswLhx47Bq1SosWbIE69atA0Bj7w+PPPIItm7dit27d0Ov13OPX6v33Os+mUpISIBWq8XOnTu5x6xWK/bu3YupU6cCANLT0yESiVxiqqurUVRUxMVMmTIFRqMRubm5XMzhw4dhNBpdYoqKilBdXc3F5OTkQCKRID09nYvZt2+fy9HNnJwc6HQ67gZ3relIpM6ePYtdu3YhNDTU5Xka/8BYsWIFjh8/joKCAu6XTqfDU089he+++w4AjX2giMViZGRkdDkyXlxcjLi4OAA09oFis9lgs9nA57ve/gQCATdjSGPvPcYYVq1ahc2bN+OHH35AQkKCy/PX7D2311vVh7CmpiZ27NgxduzYMQaAvfnmm+zYsWPcabG1a9cylUrFNm/ezAoLC9myZcvcHtPU6/Vs165dLD8/n82cOdPtMc1x48axgwcPsoMHD7KUlBS3xzRnzZrF8vPz2a5du5her3c5ptnY2MgiIyPZsmXLWGFhIdu8eTNTKpVD9pgsYz2Pv81mYwsXLmR6vZ4VFBSw6upq7pfFYuFeg8bfO56+9zvrfJqPMRp7b3ka+82bNzORSMQ++ugjdvbsWbZ+/XomEAjYjz/+yL0Gjb13PI19VlYWGzt2LNu9eze7cOEC++STT5hUKmUbNmzgXoPG3jsPPvggU6lUbM+ePS4/z1taWriYa/Gee10kU7t372YAuvz67W9/yxhrP6r50ksvMa1WyyQSCbvppptYYWGhy2u0trayVatWMY1Gw2QyGZs/fz4rKytzibl8+TJbvnw5UygUTKFQsOXLlzODweASU1payubNm8dkMhnTaDRs1apVLkcyGWPs+PHj7MYbb2QSiYRptVr28ssvD+kjsj2Nf0lJidvnALDdu3dzr0Hj7x1P3/uduUumaOy905ux//jjj9mIESOYVCplqampLnWOGKOx95ansa+urmYrV65kOp2OSaVSNnr0aPbGG2+4/Hlp7L3T3c/zTz75hIu5Fu+5vCt/eEIIIYQQ4oXrfs8UIYQQQogvKJkihBBCCPEBJVOEEEIIIT6gZIoQQgghxAeUTBFCCCGE+ICSKUIIIYQQH1AyRQghhBDiA0qmCCGEEEJ8QMkUIYQQQogPKJkihBBCCPEBJVOEEEIIIT74/5orUhtO7UZfAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#result look good. Add it to the aggregation areas again\n", - "aggregation_area = pd.concat([aggregation_area, test])\n", - "aggregation_area = gpd.GeoDataFrame(aggregation_area, geometry = 'geometry')\n", - "aggregation_area.plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "a3330861-0d96-4aa1-a9c8-4c44b99315c6", - "metadata": {}, - "outputs": [], - "source": [ - "aggregation_area['code'] = aggregation_area['code'].astype(str) + '_dummy_id_' + aggregation_area.index.astype(str)\n", - "\n", - "aggregation_area['nen3610id'] = 'dummy_nen3610id_agg_area_' + aggregation_area.index.astype(str)\n", - "aggregation_area['globalid'] = 'dummy_globalid_agg_area_' + aggregation_area.index.astype(str)\n", - "aggregation_area = aggregation_area[['code', 'nen3610id', 'globalid', 'geometry']]\n", - "WSRL['aggregation_area'] = aggregation_area" - ] - }, - { - "cell_type": "markdown", - "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", - "metadata": {}, - "source": [ - "### Adjust column names" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "c0302db0-e7f0-4dd2-88b7-3dc9aadd581f", - "metadata": {}, - "outputs": [], - "source": [ - "#add gemaal information\n", - "WSRL['peilgebiedpraktijk']['waterhoogte'] = np.nan\n", - "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'seizoensgebonden', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'flexibel', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'natuurlijk', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'vast', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['VASTPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'streef', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['STREEFPEIL'], inplace=True)\n", - "\n", - "#niet elke kolom is ingevuld met de paren die je zou verwachten. Vul voor de ontbrekende waarden de volgende waarden in:\n", - "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['STREEFPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['VASTPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['MIN_PEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['WINTERPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['MAX_PEIL'], inplace=True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "6f56f578-aca0-4957-89df-b6a3a08278a3", - "metadata": {}, - "outputs": [], - "source": [ - "#Add gemaal information\n", - "#determine aanvoer en afvoer gemalen\n", - "WSRL['gemaal']['func_aanvoer'], WSRL['gemaal']['func_afvoer'], WSRL['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "WSRL['gemaal']['functiegemaal'] = WSRL['gemaal']['naam'].astype(str) \n", - "\n", - "\n", - "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Afvoer|Onbekend|Af-|Onderbemaling'), 'func_afvoer'] = True\n", - "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Aanvoer|Opmaling'), 'func_aanvoer'] = True\n", - "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Doorspoelgemaal'), 'func_circulatie'] = True\n", - "WSRL['gemaal'].loc[(WSRL['gemaal'].func_afvoer == False) &\n", - " (WSRL['gemaal'].func_aanvoer == False) &\n", - " (WSRL['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "6dce84db-36f3-4a1c-9f10-7c14d9e4a6ed", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "#discard irrelevant data of WSRL, and create a uniform dataset compared to the other waterschappen\n", - "WSRL['stuw'] = WSRL['stuw'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "WSRL['gemaal'] = WSRL['gemaal'][['code', 'globalid', 'nen3610id', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "WSRL['hydroobject'] = WSRL['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "WSRL['duikersifonhevel'] = WSRL['duikersifonhevel'][['code', 'globalid', 'nen3610id', 'geometry']]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "059f9113-bcd4-470a-abb6-4fd8ec193f4a", - "metadata": {}, - "outputs": [], - "source": [ - "# gpd.overlay(WSRL['peilgebiedpraktijk'], WSRL['peilgebiedafwijking'], how='union', keep_geom_type=False).to_file('WSRL_kan_weg.gpkg')" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "0181e016-5103-4d66-b0fa-27ef59282f51", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "WSRL['peilgebiedpraktijk'].plot(ax=ax, color='cornflowerblue', label = 'Peilgebiedpraktijk')\n", - "# WSRL['peilgebiedafwijking'].plot(ax=ax, color='blue', label = 'Peilgebiedafwijking')\n", - "ax.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "96f0e8bf-89e3-4743-b047-d23791bdc5b4", - "metadata": {}, - "outputs": [], - "source": [ - "def intersect_using_spatial_index(peilgebied_praktijk, peilgebied_afwijking, check):\n", - " \"\"\"\n", - " Conduct spatial intersection using spatial index for candidates GeoDataFrame to make queries faster.\n", - " Note, with this function, you can have multiple Polygons in the 'intersecting_gdf' and it will return all the points \n", - " intersect with ANY of those geometries.\n", - " \"\"\"\n", - " peilgebied_praktijk_sindex = peilgebied_praktijk.sindex\n", - " possible_matches_index = []\n", - " \n", - " # 'itertuples()' function is a faster version of 'iterrows()'\n", - " for other in peilgebied_afwijking.itertuples():\n", - " bounds = other.geometry.bounds\n", - " c = list(peilgebied_praktijk_sindex.intersection(bounds))\n", - " possible_matches_index += c\n", - " \n", - " # Get unique candidates\n", - " unique_candidate_matches = list(set(possible_matches_index))\n", - " possible_matches = peilgebied_praktijk.iloc[unique_candidate_matches]\n", - "\n", - " # Conduct the actual intersect\n", - " overlapping_pg_praktijk = possible_matches.loc[possible_matches.intersects(peilgebied_afwijking.unary_union)] #the entire peilgebied praktijk polygons\n", - " \n", - " #remove the peilgebied afwijking from the peilgebied praktijk\n", - " intersection = gpd.overlay(overlapping_pg_praktijk, peilgebied_afwijking, how='intersection')\n", - " overlapping_updated = gpd.overlay(peilgebied_praktijk, intersection, how='symmetric_difference') #check of het difference of symmetrical difference moet zijn!#remove the difference between pg_praktijk and pg_afwijking\n", - " peilgebied = overlapping_updated.append(intersection, ignore_index=True) #add the removed difference, but now only the intersected part of pg_afwijking\n", - "\n", - " \n", - " if check == True:\n", - " peilgebied_praktijk.to_file('Checks/Rivierenland/peilgebied_praktijk.gpkg', driver='GPKG')\n", - " peilgebied_afwijking.to_file('Checks/Rivierenland/peilgebied_afwijking.gpkg', driver='GPKG')\n", - "\n", - " intersection.to_file('Checks/Rivierenland/intersection.gpkg', driver='GPKG')\n", - " overlapping_updated.to_file('Checks/Rivierenland/overlapping_updated.gpkg', driver='GPKG')\n", - " peilgebied.to_file('Checks/Rivierenland/peilgebied.gpkg', driver='GPKG')\n", - " \n", - " return peilgebied" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "500d4d64-c65b-4426-9f89-7f10e12a0514", - "metadata": {}, - "outputs": [], - "source": [ - "# peilgebied = intersect_using_spatial_index(peilgebied_praktijk = WSRL['peilgebiedpraktijk'], \n", - "# peilgebied_afwijking = WSRL['peilgebiedafwijking'],\n", - "# check = False)\n", - "peilgebied = WSRL['peilgebiedpraktijk']" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "363a8b04-a132-469a-b5c8-cde2e911a9c0", - "metadata": {}, - "outputs": [], - "source": [ - "# WSRL['peilgebiedpraktijk'] = WSRL['peilgebiedpraktijk'][['ZOMERPEIL', 'WINTERPEIL', 'MIN_PEIL', 'MAX_PEIL', 'STREEFPEIL', 'VASTPEIL', 'TYPE_PEILBEHEER', 'geometry']]\n", - "# peilgebied['waterhoogte'] = np.nan\n", - "\n", - "# for fill_column in ['ZOMERPEIL', 'STREEFPEIL', 'VASTPEIL', 'MAX_PEIL', 'MIN_PEIL', 'WINTERPEIL']:\n", - "# peilgebied.waterhoogte.fillna(value = peilgebied[fill_column], inplace=True)\n", - " \n", - "# WSRL['peilgebiedpraktijk'].waterhoogte.fillna(value=WSRL['peilgebiedpraktijk'][['ZOMERPEIL', 'STREEFPEIL', 'VASTPEIL', 'MAX_PEIL', 'MIN_PEIL']])" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "cfbf8612-93a9-4357-a3c9-cd3dd9d9bf71", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#store the ontbrekende_streefpeilen to a gpkg, check validity\n", - "ontbrekende_streefpeilen = peilgebied[peilgebied.waterhoogte.isna()]\n", - "# ontbrekende_streefpeilen.to_file('Checks/Rivierenland/peilgebieden_zonder_streefpeil.gpkg', driver='GPKG')\n", - "peilgebied.plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "74734b29-5c4a-4e63-a873-88d8f6ebbd14", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_16448\\1047803125.py:15: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " WSRL['streefpeil']['geometry'] = np.nan\n" - ] - } - ], - "source": [ - "peilgebied['CODE_0'] = peilgebied.CODE #change names for later purposes\n", - "peilgebied.CODE = np.nan\n", - "\n", - "#add and fill the final columns\n", - "columns_to_check = ['CODE_0']\n", - "\n", - "for fill_column in ['CODE_0']:\n", - " peilgebied.CODE.fillna(value = peilgebied[fill_column], inplace=True)\n", - "\n", - "peilgebied['globalid'] = peilgebied.index.astype(str)\n", - "peilgebied['nen3610id'] = 'dummy_nen3610id_peilgebied_' + peilgebied.index.astype(str)\n", - "\n", - "#create streefpeil key\n", - "WSRL['streefpeil'] = peilgebied[['waterhoogte', 'globalid']]\n", - "WSRL['streefpeil']['geometry'] = np.nan\n", - "WSRL['streefpeil'] = gpd.GeoDataFrame(WSRL['streefpeil'])\n", - "\n", - "#only select the relevant columns\n", - "peilgebied = peilgebied[['CODE', 'globalid', 'nen3610id', 'geometry']]\n", - "WSRL['peilgebied'] = peilgebied #add to the dict" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "9cd5297c-5d23-4e27-a55a-efb95a6cbb43", - "metadata": {}, - "outputs": [], - "source": [ - "WSRL['streefpeil'].waterhoogte = WSRL['streefpeil'].waterhoogte.round(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", - "metadata": {}, - "outputs": [], - "source": [ - "#discard irrelvant data\n", - "variables = ['peilgebiedpraktijk','peilgebiedafwijking']\n", - "\n", - "for variable in variables:\n", - " if str(variable) in WSRL:\n", - " del WSRL[variable]" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "0499733f-4dee-4d0a-a995-c64e718ab2c4", - "metadata": {}, - "outputs": [], - "source": [ - "#I have splitted a peilgebied manually. Make sure that the peilgebied has an unique code\n", - "WSRL['peilgebied'].loc[(WSRL['peilgebied'].CODE == 'LNG014-P') & (WSRL['peilgebied'].nen3610id == 'dummy_nen3610id_peilgebied_1133'), 'CODE'] = 'LNG014-P_extra'" - ] - }, - { - "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", - "metadata": {}, - "source": [ - "### Check for the correct keys and columns" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "gemaal\n", - "['code' 'globalid' 'nen3610id' 'func_afvoer' 'func_aanvoer'\n", - " 'func_circulatie' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "hydroobject\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "duikersifonhevel\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "aggregation_area\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "streefpeil\n", - "['waterhoogte' 'globalid' 'geometry']\n", - "type = \n", - "crs = None\n", - "\n", - "peilgebied\n", - "['CODE' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n" - ] - } - ], - "source": [ - "show_layers_and_columns(waterschap = WSRL)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d81fa34f-69aa-4d0e-9612-8ae36b959e0b", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", - "metadata": {}, - "source": [ - "### Store data" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", - "metadata": {}, - "outputs": [], - "source": [ - "# Check if the directory exists\n", - "if not os.path.exists(output_gpkg_path):\n", - " # If it doesn't exist, create it\n", - " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = WSRL, \n", - " output_gpkg_path = output_gpkg_path + '/WSRL')\n" - ] - }, - { - "cell_type": "raw", - "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fedb4c6e-49c2-44f4-88f0-0e1ce4802bc7", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Routing", - "language": "python", - "name": "routing" - }, - "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.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Scheldestromen.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Scheldestromen.ipynb deleted file mode 100644 index 5ba46d7..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Scheldestromen.ipynb +++ /dev/null @@ -1,594 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 39, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", - "metadata": {}, - "outputs": [], - "source": [ - "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", - "import os\n", - "import fiona\n", - "\n", - "import shapely\n", - "from shapely.validation import make_valid\n" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", - "metadata": {}, - "outputs": [], - "source": [ - "from general_functions import *" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", - "metadata": {}, - "outputs": [], - "source": [ - "pd.set_option('display.max_columns', None)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", - "metadata": {}, - "outputs": [], - "source": [ - "#define relative paths\n", - "waterschap = 'Scheldestromen'\n", - "path_Scheldestromen = '..\\..\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Scheldestromen.gpkg'\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Scheldestromen\"\n" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "1f39bd82-2fed-41d6-a4f7-979a9a2120bd", - "metadata": {}, - "outputs": [], - "source": [ - "Scheldestromen = read_gpkg_layers(gpkg_path = path_Scheldestromen, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " # 'afsluitmiddel',\n", - " 'duikersifonhevel',\n", - " # 'hydroobject',\n", - " # 'peilgebiedvigerend',\n", - " # 'peilgebiedpraktijk',\n", - " # 'peilafwijkinggebied',\n", - " # 'streefpeil',\n", - " ],\n", - " engine = 'pyogrio') \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "08cc74ef-4286-4114-bb1b-6e88f4f3c656", - "metadata": {}, - "outputs": [], - "source": [ - "# #the peilgebieden and streefpeilen do not contain overlapping values. Scheldestromen has delivered additional files as shapes\n", - "Scheldestromen['peilgebied'] = gpd.read_file('..\\..\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Praktijkpeilgebieden_20231204.shp')" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "066b2c9f-be0e-41c2-9ec1-9c9d310d2ee6", - "metadata": {}, - "outputs": [], - "source": [ - "#Third nalevering\n", - "Scheldestromen_nalevering = read_gpkg_layers(gpkg_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Oplevering_Scheldestromen_20240328\\Oplevering_20240328.gdb\", \n", - " variables = ['Gemalen', \n", - " 'main_Hydroobject_regionaal', \n", - " 'main_Peilgebiedpraktijk_regionaal'],\n", - " engine = 'pyogrio') " - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "2a3c46b8-d446-43aa-a0d8-5c510abc2978", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['Ja', 'Koppeling afvoer (energiebesparing)',\n", - " 'Ja (+ aanvoertraject)', 'Koppeling aanvoer',\n", - " 'Koppeling afvoer (zomer)'], dtype=object)" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Scheldestromen_nalevering['main_Hydroobject_regionaal'] = Scheldestromen_nalevering['main_Hydroobject_regionaal'].loc[Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal != ('None')]\n", - "Scheldestromen_nalevering['main_Hydroobject_regionaal'] = Scheldestromen_nalevering['main_Hydroobject_regionaal'].loc[Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal != ('')]\n", - "Scheldestromen_nalevering['main_Hydroobject_regionaal'] = Scheldestromen_nalevering['main_Hydroobject_regionaal'].loc[Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal != ('Koppeling afvoer (extremen)')]\n", - "Scheldestromen_nalevering['main_Hydroobject_regionaal'] = Scheldestromen_nalevering['main_Hydroobject_regionaal'].loc[Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal != ('Koppeling afvoer (winter)')]\n", - "Scheldestromen_nalevering['main_Hydroobject_regionaal'] = Scheldestromen_nalevering['main_Hydroobject_regionaal'].dropna(subset='regionaal')\n", - "Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal.unique()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "1362afea-8b85-4aec-8085-e854dfaa71cc", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_18924\\103704338.py:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", - " test =[Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal.str.contains('Ja|Koppeling afvoer (zomer)|Koppeling aanvoer|Koppeling afvoer (energiebesparing)')]\n" - ] - } - ], - "source": [ - "test =[Scheldestromen_nalevering['main_Hydroobject_regionaal'].regionaal.str.contains('Ja|Koppeling afvoer (zomer)|Koppeling aanvoer|Koppeling afvoer (energiebesparing)')]" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "2295a8a2-8307-4a66-9743-d06fd5a85666", - "metadata": {}, - "outputs": [], - "source": [ - "Scheldestromen['gemaal'] = Scheldestromen_nalevering['Gemalen']\n", - "Scheldestromen['hydroobject'] = Scheldestromen_nalevering['main_Hydroobject_regionaal']\n", - "Scheldestromen['peilgebied'] = pd.merge(left = Scheldestromen_nalevering['main_Peilgebiedpraktijk_regionaal'],\n", - " right = Scheldestromen['peilgebied'],\n", - " left_on = 'naam',\n", - " right_on = 'GPGIDENT',\n", - " how = 'left',\n", - " suffixes = ('', '_merged_oudelevering'))" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "1fbd3407-e961-4dae-b4c1-645acd5e8f36", - "metadata": {}, - "outputs": [], - "source": [ - "Scheldestromen['aggregation_area'] = Scheldestromen['peilgebied'].dissolve(by='RWE_ID')#.plot()\n", - "Scheldestromen['aggregation_area'] = Scheldestromen['aggregation_area'][['GPGIDENT', 'nen3610id', 'GLOBALID', 'geometry']]\n", - "Scheldestromen['aggregation_area'].rename(columns={'GPGIDENT':'code',\n", - " 'GLOBALID': 'globalid'}, \n", - " inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "28df20d6-5061-4aae-ad22-cccda14133de", - "metadata": {}, - "outputs": [], - "source": [ - "#determine aanvoer en afvoer gemalen\n", - "Scheldestromen['gemaal']['func_aanvoer'], Scheldestromen['gemaal']['func_afvoer'], Scheldestromen['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "Scheldestromen['gemaal']['functiegemaal'] = Scheldestromen['gemaal']['KGMFUNCT'].astype(str) \n", - "\n", - "Scheldestromen['gemaal'].loc[Scheldestromen['gemaal'].functiegemaal.astype(str).str.contains('8'), 'func_circulatie'] = True\n", - "Scheldestromen['gemaal'].loc[Scheldestromen['gemaal'].functiegemaal.astype(str).str.contains('2|4|6|7|98|99'), 'func_afvoer'] = True\n", - "Scheldestromen['gemaal'].loc[Scheldestromen['gemaal'].functiegemaal.astype(str).str.contains('1|3'), 'func_aanvoer'] = True\n", - "# Scheldestromen['gemaal'].loc[(Scheldestromen['gemaal'].func_afvoer == False) &\n", - "# (Scheldestromen['gemaal'].func_aanvoer == False) &\n", - "# (Scheldestromen['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "8856eb4f-c3ef-4f75-9d1c-89740bbdbbf7", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1\n", - "852\n" - ] - } - ], - "source": [ - "print(len(Scheldestromen['peilgebied'].code.unique()))\n", - "print(len(Scheldestromen['peilgebied'].code))" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "4a7d78f8-7605-4aba-b4c6-b17b81d4f5df", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_18924\\3963481977.py:13: FutureWarning: You are adding a column named 'geometry' to a GeoDataFrame constructed without an active geometry column. Currently, this automatically sets the active geometry column to 'geometry' but in the future that will no longer happen. Instead, either provide geometry to the GeoDataFrame constructor (GeoDataFrame(... geometry=GeoSeries()) or use `set_geometry('geometry')` to explicitly set the active geometry column.\n", - " Scheldestromen['streefpeil']['geometry'] = np.nan\n" - ] - } - ], - "source": [ - "Scheldestromen['peilgebied']['code'] = Scheldestromen['peilgebied']['GPGIDENT']\n", - "Scheldestromen['peilgebied'] = Scheldestromen['peilgebied'].reset_index(drop=True)\n", - "Scheldestromen['peilgebied']['code'] = Scheldestromen['peilgebied']['code'].astype(str) + '_dummy_id_' + Scheldestromen['peilgebied'].index.astype(str)\n", - "\n", - "Scheldestromen['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Scheldestromen['peilgebied'].index.astype(str)\n", - "\n", - "Scheldestromen['peilgebied']['waterhoogte'] = Scheldestromen['peilgebied']['GPGZP'] \n", - "Scheldestromen['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + Scheldestromen['peilgebied'].index.astype(str)\n", - "\n", - "Scheldestromen['streefpeil'] = gpd.GeoDataFrame()\n", - "Scheldestromen['streefpeil']['waterhoogte'] = Scheldestromen['peilgebied']['waterhoogte']\n", - "Scheldestromen['streefpeil']['globalid'] = Scheldestromen['peilgebied']['globalid']\n", - "Scheldestromen['streefpeil']['geometry'] = np.nan\n", - "\n", - "\n", - "Scheldestromen['peilgebied'] = Scheldestromen['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "0c14883a-873b-44ee-b9d3-57d7da0b67c3", - "metadata": {}, - "outputs": [], - "source": [ - "#convert multiz points to points\n", - "Scheldestromen['stuw'].geometry = Scheldestromen['stuw'].centroid\n", - "Scheldestromen['gemaal'].geometry = Scheldestromen['gemaal'].centroid\n" - ] - }, - { - "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", - "metadata": {}, - "source": [ - "# Scheldestromen" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "cbe8f365-8b00-4824-b04c-b976f9a43f05", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_18924\\429676109.py:6: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " Scheldestromen['gemaal'].rename(columns={'KGMNAAM':'code',\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n" - ] - } - ], - "source": [ - "#stuw\n", - "Scheldestromen['stuw'] = Scheldestromen['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "\n", - "#gemaal\n", - "Scheldestromen['gemaal'] = Scheldestromen['gemaal'][['KGMNAAM', 'KGM_GPGIN', 'GLOBALID', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "Scheldestromen['gemaal'].rename(columns={'KGMNAAM':'code',\n", - " 'GLOBALID': 'globalid'}, \n", - " inplace=True)\n", - "\n", - "#hydroobject\n", - "Scheldestromen['hydroobject']['code'] = Scheldestromen['hydroobject']['naam']\n", - "Scheldestromen['hydroobject'] = Scheldestromen['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "\n", - "#are filled in for 99%, but not 100%:\n", - "Scheldestromen['hydroobject']['code'] = 'dummy_code_hydroobject_' + Scheldestromen['hydroobject'].index.astype(str)\n", - "Scheldestromen['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + Scheldestromen['hydroobject'].index.astype(str)\n", - "Scheldestromen['hydroobject']['globalid'] = 'dummy_globalid_hydroobject_' + Scheldestromen['hydroobject'].index.astype(str)\n", - "\n", - "#duikersifonhevel\n", - "Scheldestromen['duikersifonhevel'] = Scheldestromen['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "\n", - "#add the duikersifonhevels to the hydroobjecten\n", - "Scheldestromen['hydroobject'] = pd.concat([Scheldestromen['hydroobject'], Scheldestromen['duikersifonhevel']])\n", - "Scheldestromen['hydroobject'] = gpd.GeoDataFrame(Scheldestromen['hydroobject'], geometry = 'geometry')" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "b3f70ee4-d645-4114-b5e2-2dd573374d6e", - "metadata": {}, - "outputs": [], - "source": [ - "# pd.merge(left = Scheldestromen['peilgebiedpraktijk'],\n", - "# right = Scheldestromen['streefpeil'],\n", - "# left_on = 'globalid',\n", - "# right_on = 'peilgebiedpraktijkid')" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "e58ee099-54b3-415b-8222-9545776a7a61", - "metadata": {}, - "outputs": [], - "source": [ - "Scheldestromen['stuw'] = Scheldestromen['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "# Scheldestromen['gemaal'] = Scheldestromen['gemaal'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Scheldestromen['hydroobject'] = Scheldestromen['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Scheldestromen['duikersifonhevel'] = Scheldestromen['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "023a704c-685e-4fe9-9745-39a5ed461a03", - "metadata": {}, - "outputs": [], - "source": [ - "# Scheldestromen['peilgebiedpraktijk']['geometry'] = Scheldestromen['peilgebiedpraktijk'].buffer(distance = 0)\n", - "# Scheldestromen['peilafwijkinggebied']['geometry'] = Scheldestromen['peilafwijkinggebied'].buffer(distance = 0)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "4d5d490e-5bba-4d16-95a0-a17880adc0d9", - "metadata": {}, - "outputs": [], - "source": [ - "# peilgebied = pd.merge(left = Scheldestromen['streefpeil'],\n", - "# right = Scheldestromen['peilgebiedpraktijk'],\n", - "# left_on = 'peilgebiedpraktijkid',\n", - "# right_on = 'globalid')" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "cd21bcac-8d25-4d47-ad0a-c7338e6e6653", - "metadata": {}, - "outputs": [], - "source": [ - "# streefpeil = gpd.GeoDataFrame()\n", - "# streefpeil['waterhoogte'] = peilgebied['waterhoogte']\n", - "# streefpeil['globalid'] = peilgebied['peilgebiedpraktijkid']\n", - "# streefpeil['geometry'] = np.nan\n", - "# Scheldestromen['streefpeil'] = gpd.GeoDataFrame(streefpeil)" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "88e9543c-2dbe-4ebf-9423-b38daeeaa004", - "metadata": {}, - "outputs": [], - "source": [ - "# Scheldestromen['peilgebied'] = gpd.GeoDataFrame()\n", - "# Scheldestromen['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']] = peilgebied[['code', 'nen3610id_y', 'globalid_y', 'geometry_y']]" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", - "metadata": {}, - "outputs": [], - "source": [ - "#delete irrelvant data\n", - "variables = ['peilgebiedpraktijk', 'peilgebiedvigerend', 'peilafwijkinggebied']\n", - "\n", - "for variable in variables:\n", - " if str(variable) in Scheldestromen:\n", - " del Scheldestromen[variable]" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "de5dc417-260b-4421-a683-1820386e7d4a", - "metadata": {}, - "outputs": [], - "source": [ - "Scheldestromen['streefpeil'].waterhoogte = Scheldestromen['streefpeil'].waterhoogte.round(2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5426a98e-72c5-4e8d-9d7b-2e4e7d8706ae", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", - "metadata": { - "tags": [] - }, - "source": [ - "### Check for the correct keys and columns" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n", - "gemaal\n", - "['code' 'KGM_GPGIN' 'globalid' 'func_afvoer' 'func_aanvoer'\n", - " 'func_circulatie' 'geometry']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n", - "duikersifonhevel\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n", - "peilgebied\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n", - "hydroobject\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n", - "aggregation_area\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n", - "streefpeil\n", - "['waterhoogte' 'globalid' 'geometry']\n", - "type = \n", - "crs = None\n", - "\n" - ] - } - ], - "source": [ - "show_layers_and_columns(waterschap = Scheldestromen)" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "f9d38f6f-42df-45b4-a1d2-b1a779c104d8", - "metadata": {}, - "outputs": [], - "source": [ - "# for i in range(len(Scheldestromen['peilgebied'])): \n", - "# if type(Scheldestromen['peilgebied'].loc[i, 'geometry']) == Polygon:\n", - "# Scheldestromen['peilgebied'].loc[i, 'geometry'].plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "45564e81-4fcf-4479-b406-8142b4a64ad1", - "metadata": {}, - "outputs": [], - "source": [ - "# merged = pd.merge(left = Scheldestromen['peilgebied'],\n", - "# right = Scheldestromen['streefpeil'],\n", - "# on = 'globalid')\n", - "\n", - "# merged[merged.waterhoogte.isna()]\n" - ] - }, - { - "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", - "metadata": {}, - "source": [ - "### Store data" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", - "metadata": {}, - "outputs": [], - "source": [ - "# Check if the directory exists\n", - "if not os.path.exists(output_gpkg_path):\n", - " # If it doesn't exist, create it\n", - " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = Scheldestromen, \n", - " output_gpkg_path = output_gpkg_path + '/Scheldestromen')\n" - ] - }, - { - "cell_type": "raw", - "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d226ce01-142d-4bfe-87ab-a58a67c9452a", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Routing", - "language": "python", - "name": "routing" - }, - "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.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Wetterskip.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Wetterskip.ipynb deleted file mode 100644 index 37554d0..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Wetterskip.ipynb +++ /dev/null @@ -1,1509 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", - "metadata": {}, - "outputs": [], - "source": [ - "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", - "import os\n", - "import fiona\n", - "import shapely\n", - "\n", - "from general_functions import *\n", - "pd.set_option('display.max_columns', None)\n" - ] - }, - { - "cell_type": "markdown", - "id": "48a939f4-8a39-4c24-b466-499eba37172d", - "metadata": {}, - "source": [ - "# Wetterskip Fryslan" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "b782b9c9-12b9-461b-8874-a59dad72e4bd", - "metadata": {}, - "outputs": [], - "source": [ - "gpkg_path_Wetterskip = \"..\\..\\Data_preprocessed\\Waterschappen\\Wetterskip\\Wetterskip_gecorrigeerde_geometrie.gpkg\"\n", - "output_gpkg_path_Wetterskip = \"../../Data_postprocessed/Waterschappen/Wetterskip/Wetterskip\"\n", - "\n", - "# peilgebiedpraktijk_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Wetterskip\\Nieuwe_peilgebieden\\MIPWA_20230907WF.gpkg\"\n", - "# streefpeil_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Wetterskip\\Nieuwe_peilgebieden\\MIPWA_20230907WF.gpkg\"\n", - "peilgebieden_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Wetterskip\\Peilenkaart_HKV_20240411\\Peilenkaart.gdb\"" - ] - }, - { - "cell_type": "raw", - "id": "85e699ad-4d02-4c07-be20-523d1088f3fa", - "metadata": {}, - "source": [ - "Aanpassingen n.a.v. de meeting op 10 juni 2024:\n", - "- Toevoegen schouwsloten als deze in de buurt liggen van een gemaal, zie de extra levering van Michiel Bootsma 10 juni 2024. Check\n", - "- Exploden van de aggregatiegebieden \"vrij afwaterend\" EN VAN PARTICULIER, ZIE EMAIL NYNKE!!!!!!!!!!!!!\n", - "- Opvullen gaten peilgebieden" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9e6587d9-1c98-4bfa-a954-df135ba21fa9", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "b96e6dab-5341-480d-b077-5b05a2984aa7", - "metadata": {}, - "outputs": [], - "source": [ - "# Duikersifonhevel and hydroobject have a type of multicurvedZ, the peilgebieden a MultiSurfaceZ, which geopandas can not handle. I have manually \n", - "# exported these to single shapes, which automatically converts it to regular MultiStrings. Then these layers have been packed together to a\n", - "# geopackage again. \n", - "\n", - "#retrieve the data\n", - "Wetterskip = read_gpkg_layers(gpkg_path = gpkg_path_Wetterskip, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'afsluitmiddel',\n", - " 'hydroobject',\n", - " 'duikersifonhevel'],\n", - " # 'peilmerk',\n", - " # 'streefpeil',\n", - " # 'peilgebiedpraktijk', \n", - " # 'peilgebiedvigerend',\n", - " # 'peilbesluitgebied'],\n", - " print_var = False)\n", - "\n", - "# #The peilgebieden en streefpeilen have been delivered as additional data\n", - "# peilgebiedpraktijk = gpd.read_file(peilgebiedpraktijk_path,\n", - "# layer = 'DAMO_W_PeilgebiedPraktijk')\n", - "\n", - "# streefpeil = gpd.read_file(streefpeil_path,\n", - "# layer = 'DAMO_W_Streefpeil')\n", - "\n", - "Wetterskip['hydroobject'] = Wetterskip['hydroobject'].loc[Wetterskip['hydroobject'].categorieo == 'primair'] #feedback WS Fryslan: only use primaire hydroobjecten" - ] - }, - { - "cell_type": "markdown", - "id": "a67721b9-9329-44e7-9316-d94ec6b8bee5", - "metadata": {}, - "source": [ - "## Additional schouwsloten near a gemaal" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "48e2ea76-92ce-448e-b4dc-901072c4a3ba", - "metadata": {}, - "outputs": [], - "source": [ - "schouwsloten = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Wetterskip\\20240610_extra_hydroobjecten\\schouwsloten\\schouwsloten_gemaal5m.shp\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "13634014-ad3c-4afa-b948-9de27918266f", - "metadata": {}, - "outputs": [], - "source": [ - "schouwsloten['code'] = schouwsloten['OVKIDENT']\n", - "schouwsloten['nen3610id'] = 'dummy_code_schouwsloot_' + schouwsloten.index.astype(str)\n", - "schouwsloten['globalid'] = 'dummy_code_schouwsloot_' + schouwsloten.index.astype(str)\n", - "schouwsloten = schouwsloten[['code', 'nen3610id', 'globalid', 'geometry']]" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "fa01c30f-1f63-4ce7-88a1-c9e7124997d7", - "metadata": {}, - "outputs": [], - "source": [ - "peilgebied = gpd.read_file(peilgebieden_path)\n", - "\n", - "#add an additionally deliverd peilgebied to the peilgebieden\n", - "Willem_jongsma = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\Wetterskip\\20240618_Willem_Jongsma_polder\\WF_Willem_Jongsma.shp\")\n", - "\n", - "#in the same format\n", - "Willem_jongsma['GPGIDENT'] = Willem_jongsma.PBHIDENT\n", - "Willem_jongsma['GPGZMRPL'] = Willem_jongsma.LAAGPEIL\n", - "Willem_jongsma['OSMOMSCH'] = Willem_jongsma.WATERSYSTE\n", - "Willem_jongsma['GLOBALID'] = Willem_jongsma.ORDECODE + '_' + Willem_jongsma.index.astype(str)\n", - "\n", - "peilgebied = pd.concat([peilgebied, Willem_jongsma])\n", - "\n", - "peilgebied['waterhoogte'] = np.nan\n", - "peilgebied['waterhoogte'].fillna(value = peilgebied['GPGZMRPL'], inplace = True) #first check the zomerpeil\n", - "peilgebied['waterhoogte'].fillna(value = peilgebied['IWS_GPGVASTP'], inplace = True) #then the vastpeil\n", - "peilgebied['waterhoogte'].fillna(value = peilgebied['GPGWNTPL'], inplace = True) #lastly, the winterpeil" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "37ee8b9d-7534-45bc-a805-7cb14d585d02", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
GPGIDENTGPGNAAMGPGSOORTGPGOPPVLGPGZMRPLOPVAFWZPGPGWNTPLOPVAFWWPOSMOMSCHIWS_GPGSTATUIWS_GPGINVOIWS_GPGSCHWPIWS_GPGBEHERIWS_GPGVASTPIWS_GPGAFWVASTPIWS_GPGONDPIWS_GPGBOVPIWS_GPGAFWONDPIWS_GPGAFWBOVPIWS_INUNDATIEPEILIWS_ONDERGRENS_ZOMERPEILIWS_BOVENGRENS_ZOMERPEILRICHTINGIWS_MEMOGEONAUWKEURIGHEIDADMINNAUWKEURIGHEIDBETROUWBAARHEIDINWINNINGSWIJZEINWINNINGSDATUMBRONIDEALISATIEOPMERKINGENGEONAUWKEURIGHEID_ZIWS_KWLTGEOIWS_EIGENAARGLOBALIDWF_INWERKINGTREDING_DATUMShape_LengthShape_AreageometryPBHIDENTTYPEBEHEERHOOGPEILLAAGPEILAFW_PEILBEAFW_HOOGPEAFW_LAAGPEVERGUNNINGWATERSYSTEAANVOER_AFTYPEPEILVAOPMERKINGAFW_EINDAANVOER_MOORDECODELAST_EDITELAST_EDI_1HOOGWATERCSHAPE_AREAwaterhoogte
34PBH0254883NaNNaNNaN-0.75NaNNaNNaNWillem JongsmaNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNWZ.401.001_34NaTNaNNaNPOLYGON Z ((189308.409 540865.901 0.000, 18930...PBH02548833.0-0.55-0.751.00.00.0NoneWillem Jongsma1.03.0NoneNone1.0WZ.401.001MKODDEN2024-03-26None0.389727-0.75
35PBH0254876NaNNaNNaN-0.55NaNNaNNaNWillem JongsmaNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNWZ.401.001_35NaTNaNNaNPOLYGON Z ((191521.683 539320.110 0.000, 19163...PBH02548761.0-0.55-0.551.00.00.0NoneWillem Jongsma1.03.0NoneNone1.0WZ.401.001MKODDEN2024-03-26None79928.585636-0.55
36PBH0254901NaNNaNNaN-1.20NaNNaNNaNWillem JongsmaNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNWZ.401.001_36NaTNaNNaNPOLYGON Z ((190787.267 540064.328 0.000, 19081...PBH02549011.0-1.20-1.201.00.00.0NoneWillem Jongsma3.03.0NoneNone1.0WZ.401.001MKODDEN2024-03-26None131878.257601-1.20
37PBH0254905NaNNaNNaN-1.20NaNNaNNaNWillem JongsmaNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNWZ.401.001_37NaTNaNNaNPOLYGON Z ((190972.562 540027.516 0.000, 19093...PBH02549051.0-1.20-1.201.00.00.0NoneWillem Jongsma2.03.0NoneNone1.0WZ.401.001MKODDEN2024-03-26None3031.453042-1.20
38PBH0254925NaNNaNNaN-1.25NaNNaNNaNWillem JongsmaNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNWZ.401.001_38NaTNaNNaNPOLYGON Z ((189453.748 540955.695 0.000, 18943...PBH02549251.0-1.25-1.251.00.00.0NoneWillem Jongsma3.03.0NoneNone1.0WZ.401.001MKODDEN2024-03-26None11878.916225-1.25
\n", - "
" - ], - "text/plain": [ - " GPGIDENT GPGNAAM GPGSOORT GPGOPPVL GPGZMRPL OPVAFWZP GPGWNTPL \\\n", - "34 PBH0254883 NaN NaN NaN -0.75 NaN NaN \n", - "35 PBH0254876 NaN NaN NaN -0.55 NaN NaN \n", - "36 PBH0254901 NaN NaN NaN -1.20 NaN NaN \n", - "37 PBH0254905 NaN NaN NaN -1.20 NaN NaN \n", - "38 PBH0254925 NaN NaN NaN -1.25 NaN NaN \n", - "\n", - " OPVAFWWP OSMOMSCH IWS_GPGSTATU IWS_GPGINVO IWS_GPGSCHWP \\\n", - "34 NaN Willem Jongsma NaN NaN NaN \n", - "35 NaN Willem Jongsma NaN NaN NaN \n", - "36 NaN Willem Jongsma NaN NaN NaN \n", - "37 NaN Willem Jongsma NaN NaN NaN \n", - "38 NaN Willem Jongsma NaN NaN NaN \n", - "\n", - " IWS_GPGBEHER IWS_GPGVASTP IWS_GPGAFWVASTP IWS_GPGONDP IWS_GPGBOVP \\\n", - "34 NaN NaN NaN NaN NaN \n", - "35 NaN NaN NaN NaN NaN \n", - "36 NaN NaN NaN NaN NaN \n", - "37 NaN NaN NaN NaN NaN \n", - "38 NaN NaN NaN NaN NaN \n", - "\n", - " IWS_GPGAFWONDP IWS_GPGAFWBOVP IWS_INUNDATIEPEIL IWS_ONDERGRENS_ZOMERPEIL \\\n", - "34 NaN NaN NaN NaN \n", - "35 NaN NaN NaN NaN \n", - "36 NaN NaN NaN NaN \n", - "37 NaN NaN NaN NaN \n", - "38 NaN NaN NaN NaN \n", - "\n", - " IWS_BOVENGRENS_ZOMERPEIL RICHTING IWS_MEMO GEONAUWKEURIGHEID \\\n", - "34 NaN NaN NaN NaN \n", - "35 NaN NaN NaN NaN \n", - "36 NaN NaN NaN NaN \n", - "37 NaN NaN NaN NaN \n", - "38 NaN NaN NaN NaN \n", - "\n", - " ADMINNAUWKEURIGHEID BETROUWBAARHEID INWINNINGSWIJZE INWINNINGSDATUM BRON \\\n", - "34 NaN NaN NaN NaT NaN \n", - "35 NaN NaN NaN NaT NaN \n", - "36 NaN NaN NaN NaT NaN \n", - "37 NaN NaN NaN NaT NaN \n", - "38 NaN NaN NaN NaT NaN \n", - "\n", - " IDEALISATIE OPMERKINGEN GEONAUWKEURIGHEID_Z IWS_KWLTGEO IWS_EIGENAAR \\\n", - "34 NaN NaN NaN NaN NaN \n", - "35 NaN NaN NaN NaN NaN \n", - "36 NaN NaN NaN NaN NaN \n", - "37 NaN NaN NaN NaN NaN \n", - "38 NaN NaN NaN NaN NaN \n", - "\n", - " GLOBALID WF_INWERKINGTREDING_DATUM Shape_Length Shape_Area \\\n", - "34 WZ.401.001_34 NaT NaN NaN \n", - "35 WZ.401.001_35 NaT NaN NaN \n", - "36 WZ.401.001_36 NaT NaN NaN \n", - "37 WZ.401.001_37 NaT NaN NaN \n", - "38 WZ.401.001_38 NaT NaN NaN \n", - "\n", - " geometry PBHIDENT TYPEBEHEER \\\n", - "34 POLYGON Z ((189308.409 540865.901 0.000, 18930... PBH0254883 3.0 \n", - "35 POLYGON Z ((191521.683 539320.110 0.000, 19163... PBH0254876 1.0 \n", - "36 POLYGON Z ((190787.267 540064.328 0.000, 19081... PBH0254901 1.0 \n", - "37 POLYGON Z ((190972.562 540027.516 0.000, 19093... PBH0254905 1.0 \n", - "38 POLYGON Z ((189453.748 540955.695 0.000, 18943... PBH0254925 1.0 \n", - "\n", - " HOOGPEIL LAAGPEIL AFW_PEILBE AFW_HOOGPE AFW_LAAGPE VERGUNNING \\\n", - "34 -0.55 -0.75 1.0 0.0 0.0 None \n", - "35 -0.55 -0.55 1.0 0.0 0.0 None \n", - "36 -1.20 -1.20 1.0 0.0 0.0 None \n", - "37 -1.20 -1.20 1.0 0.0 0.0 None \n", - "38 -1.25 -1.25 1.0 0.0 0.0 None \n", - "\n", - " WATERSYSTE AANVOER_AF TYPEPEILVA OPMERKING AFW_EIND AANVOER_MO \\\n", - "34 Willem Jongsma 1.0 3.0 None None 1.0 \n", - "35 Willem Jongsma 1.0 3.0 None None 1.0 \n", - "36 Willem Jongsma 3.0 3.0 None None 1.0 \n", - "37 Willem Jongsma 2.0 3.0 None None 1.0 \n", - "38 Willem Jongsma 3.0 3.0 None None 1.0 \n", - "\n", - " ORDECODE LAST_EDITE LAST_EDI_1 HOOGWATERC SHAPE_AREA waterhoogte \n", - "34 WZ.401.001 MKODDEN 2024-03-26 None 0.389727 -0.75 \n", - "35 WZ.401.001 MKODDEN 2024-03-26 None 79928.585636 -0.55 \n", - "36 WZ.401.001 MKODDEN 2024-03-26 None 131878.257601 -1.20 \n", - "37 WZ.401.001 MKODDEN 2024-03-26 None 3031.453042 -1.20 \n", - "38 WZ.401.001 MKODDEN 2024-03-26 None 11878.916225 -1.25 " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "peilgebied.tail()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "2595ea5f-0241-4124-8ec9-84a9efec495e", - "metadata": {}, - "outputs": [], - "source": [ - "peilgebied['code'] = peilgebied['GPGIDENT']\n", - "peilgebied['nen3610id'] = peilgebied['OSMOMSCH'] + '_' + peilgebied.index.astype(str)\n", - "peilgebied['globalid'] = peilgebied['GLOBALID'] \n", - "\n", - "peilgebied = peilgebied[['waterhoogte', 'code', 'nen3610id', 'globalid', 'geometry']]" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "2dc406d3-2dc6-410e-b69e-bb698a1db06e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# #merge the streefpeil and the peilgebieden\n", - "# peilgebied = pd.merge(left = streefpeil,\n", - "# right = peilgebiedpraktijk,\n", - "# left_on = 'PEILGEBIEDPRAKTIJKID',\n", - "# right_on = 'GLOBALID')\n", - "\n", - "# Wetterskip['peilgebied'] = peilgebied[['WATERHOOGTE', 'nen3610id_y', 'GLOBALID_y', 'geometry_y']]\n", - "# Wetterskip['peilgebied'] = Wetterskip['peilgebied'].rename(columns = {'WATERHOOGTE':'waterhoogte',\n", - "# 'nen3610id_y':'nen3610id',\n", - "# 'GLOBALID_y':'globalid',\n", - "# 'geometry_y':'geometry'})\n", - "\n", - "Wetterskip['peilgebied'] = gpd.GeoDataFrame(peilgebied, geometry = 'geometry')\n", - "Wetterskip['peilgebied'].reset_index(drop=True, inplace = True)\n", - "\n", - "Wetterskip['peilgebied'].plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "187615fe-6b5e-4667-b215-8701f5605a56", - "metadata": {}, - "outputs": [], - "source": [ - "aggregation_areas = gpd.read_file(peilgebieden_path)\n", - "aggregation_areas = pd.concat([aggregation_areas, Willem_jongsma])\n", - "\n", - "aggregation_areas = aggregation_areas.dissolve(by='OSMOMSCH', as_index= False, dropna=False)\n", - "\n", - "aggregation_areas['code'] = aggregation_areas.OSMOMSCH\n", - "aggregation_areas['globalid'] = aggregation_areas.GLOBALID\n", - "aggregation_areas['nen3610id'] = aggregation_areas.GPGIDENT\n", - "\n", - "aggregation_areas = aggregation_areas[['code', 'nen3610id', 'globalid', 'geometry']]\n", - "\n", - "Wetterskip['aggregation_area'] = aggregation_areas" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "fd75eca0-bb98-40d6-a888-902648cd2918", - "metadata": {}, - "outputs": [], - "source": [ - "def convert_3D_2D(geometry):\n", - " '''\n", - " Takes a GeoSeries of 3D Multi/Polygons (has_z) and returns a list of 2D Multi/Polygons\n", - " '''\n", - " new_geo = []\n", - " for p in geometry:\n", - " if p.has_z:\n", - " if p.geom_type == 'Polygon':\n", - " lines = [xy[:2] for xy in list(p.exterior.coords)]\n", - " new_p = Polygon(lines)\n", - " new_geo.append(new_p)\n", - " elif p.geom_type == 'MultiPolygon':\n", - " new_multi_p = []\n", - " for ap in p:\n", - " lines = [xy[:2] for xy in list(ap.exterior.coords)]\n", - " new_p = Polygon(lines)\n", - " new_multi_p.append(new_p)\n", - " new_geo.append(MultiPolygon(new_multi_p))\n", - " return new_geo\n", - "\n", - "def convert_to_polygon(line):\n", - " if line.is_ring: # Checks if the LineString is closed\n", - " return Polygon(line)\n", - " else:\n", - " return line # Returns the line string as is if it's not closed\n", - "\n", - "from shapely import Polygon\n", - "from shapely.ops import unary_union,cascaded_union \n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "b6a249d6-adc3-4c89-844b-f68a6bb0cb89", - "metadata": {}, - "outputs": [], - "source": [ - "#select Vrijafstromende gebieden, and exclude it from the aggregation areas\n", - "Vrijafstromend = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code == 'Vrijafstromend'].explode(ignore_index=True)\n", - "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Vrijafstromend']\n", - "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Riolering']\n", - "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Zomerpolder']\n", - "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Vrijafstromend IJsselmeer']\n", - "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Boezem beheerst']\n", - "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Particulier']\n", - "\n", - "\n", - "\n", - "#remove the boezem from the aggregation areas, as these should be handled seperatley to prevent it becoming a single and huge bucket\n", - "Wetterskip['aggregation_area'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].code != 'Boezem']\n", - "\n", - "#now identify each boezem peilgebied back in the peilgebieden, as it should still be filtered based on the boezem. Add it to the concat a few lines below\n", - "boezem_peilgebied = Wetterskip['peilgebied'].loc[Wetterskip['peilgebied'].nen3610id.str.contains('Boezem_')]#.plot()\n", - "\n", - "\n", - "#add additional numbers, due to the explosion\n", - "Vrijafstromend['code'] = Vrijafstromend['code'] + Vrijafstromend.index.astype(str)\n", - "Vrijafstromend['globalid'] = Vrijafstromend['globalid'] + Vrijafstromend.index.astype(str)\n", - "Vrijafstromend['nen3610id'] = Vrijafstromend['nen3610id'] + Vrijafstromend.index.astype(str)\n", - "\n", - "#add the Vrijafstromende gebieden to the aggregation areas again\n", - "Wetterskip['aggregation_area'] = pd.concat([Wetterskip['aggregation_area'], Vrijafstromend, boezem_peilgebied])" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "9063e48e-b471-43d6-9c85-48b08c7dd0e9", - "metadata": {}, - "outputs": [], - "source": [ - "Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='code'), 'code'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='code')].code.astype(str) + '_' + Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='code')].index.astype(str)\n", - "Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='nen3610id'), 'nen3610id'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='nen3610id')].nen3610id.astype(str) + '_' + Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='nen3610id')].index.astype(str)\n", - "Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='globalid'), 'globalid'] = Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='globalid')].globalid.astype(str) + '_' + Wetterskip['aggregation_area'].loc[Wetterskip['aggregation_area'].duplicated(subset='globalid')].index.astype(str)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b6e12aa0-9d9c-4935-9e36-6075befdb42d", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "dc860f8a-9186-442c-879d-3bfbc5f703a1", - "metadata": {}, - "outputs": [], - "source": [ - "# Wetterskip['peilgebied'] = Wetterskip['peilgebied'].explode(ignore_index=True)\n", - "# Wetterskip['peilgebied'] = Wetterskip['peilgebied'][Wetterskip['peilgebied'].geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n", - "\n", - "\n", - "# Wetterskip['peilgebied']['area'] = Wetterskip['peilgebied'].area\n", - "# dissolved = Wetterskip['peilgebied'].dissolve()\n", - "# exterior = gpd.GeoDataFrame(geometry=dissolved['geometry'].boundary).to_crs(crs='EPSG:28992')\n", - "# Wetterskip['peilgebied'] = Wetterskip['peilgebied'].to_crs(crs='EPSG:28992')\n", - "# exterior = exterior.explode().reset_index(drop=True)\n", - "# exterior['geometry'] = exterior['geometry'].apply(convert_to_polygon)\n", - "# exterior['area'] = exterior.area\n", - "# exterior = exterior.sort_values(by='area', ascending=False).reset_index(drop=True)\n", - "\n", - "# exterior.to_file('WF_exterior_all.gpkg')\n", - "\n", - "# exterior = exterior.iloc[12::] #take all rows except the first 12. These twelve are Wetterskip + the islands (+some lose peilgebieden)\n", - "# exterior = exterior.reset_index(drop=True)\n", - "# # exterior.plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "95f2a930-9098-4fe7-8b65-335c89803539", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [], - "source": [ - "# for i in range(len(exterior)):\n", - "# print(i)\n", - "# # for i in range(10):\n", - "\n", - "# buffered_peilgebied = Wetterskip['peilgebied'].buffer(0.)\n", - "\n", - "# exterior_sample = exterior.iloc[i:i+1] #just pick a single sample\n", - "# exterior_sample.geometry = exterior_sample.buffer(0.0001) #let op! hierdoor komt er alsnog een kleine overlap. Maar anders werkt de code even niet, en vanwege tijdgebrek kan dit nu niet worden opgelost. In het bepalen van de crossings wordt hier echter mee omgegaan.\n", - " \n", - "# intersects_mask = buffered_peilgebied.intersects(exterior_sample.iloc[0].geometry)\n", - "# intersecting_polygons = Wetterskip['peilgebied'][intersects_mask].sort_values(by='area', ascending=False)\n", - "\n", - "# if len(intersecting_polygons) > 0:\n", - "# # print(i)\n", - "# # polygon_to_dissolve = intersecting_polygons.iloc[0:1]#.geometry.unary_union \n", - "# # sample_geometry = exterior_sample.geometry#.unary_union\n", - "# intersecting_polygons = gpd.GeoDataFrame(intersecting_polygons.iloc[0:1], geometry = 'geometry')\n", - " \n", - "# # dissolved_polygon = # dissolve/union them\n", - "# all_geometries = list(intersecting_polygons.geometry) + list(exterior_sample.geometry)\n", - "\n", - "# # Use unary_union to dissolve all polygons in the list\n", - "# dissolved_polygon = unary_union(all_geometries)\n", - " \n", - "# original_index = intersecting_polygons.index[0]\n", - "\n", - "# # Ensure it's a single geometry object.\n", - "# # print(len(Wetterskip['peilgebied'].loc[Wetterskip['peilgebied'].index == original_index, 'geometry']))\n", - "# # print(len(dissolved_polygon))\n", - "# Wetterskip['peilgebied'].loc[Wetterskip['peilgebied'].index == original_index, 'geometry'] = dissolved_polygon#['geometry']\n", - "# # new_gdf = pd.concat([new_gdf, dissolved_polygon])\n", - "# else:\n", - "# print('No intersection found for iteration ', i)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "b1338f43-557f-4210-a8d7-ba63ad0c1d9f", - "metadata": {}, - "outputs": [], - "source": [ - "# Wetterskip['peilgebied'].to_file('WF_peilgebied.gpkg')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "13a17365-c81a-4c10-8c71-2c24f046822e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "Wetterskip['peilgebied'].plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "ccc56b93-ad7b-4b80-b197-21c6aa07e07c", - "metadata": {}, - "outputs": [], - "source": [ - "Wetterskip['peilgebied'] = pd.merge(left = Wetterskip['peilgebied'],\n", - " right = peilgebied[['code', 'waterhoogte']],\n", - " on = 'code')\n", - "\n", - "Wetterskip['peilgebied'].rename(columns={'waterhoogte_x':'waterhoogte'}, inplace = True)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "8e3c5720-ff47-40c2-a3f0-e2e635414ed9", - "metadata": {}, - "outputs": [], - "source": [ - "#give new globalids and codes, as the peilgebied.explode() results in non unique values.\n", - "Wetterskip['peilgebied']['code'] = 'dummy_code_peilgebied_' + Wetterskip['peilgebied'].index.astype(str)\n", - "Wetterskip['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Wetterskip['peilgebied'].index.astype(str)\n", - "\n", - "#create the streefpeilen layer\n", - "Wetterskip['streefpeil'] = Wetterskip['peilgebied'][['waterhoogte', 'globalid', 'geometry']]\n", - "Wetterskip['peilgebied'] = Wetterskip['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "\n", - "Wetterskip['streefpeil']['geometry'] = None\n", - "\n", - "Wetterskip['streefpeil'] = gpd.GeoDataFrame(Wetterskip['streefpeil'], geometry='geometry', crs='EPSG:28992')\n", - "Wetterskip['peilgebied'] = gpd.GeoDataFrame(Wetterskip['peilgebied'], geometry='geometry', crs='EPSG:28992')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "7c11c372-524e-4310-b87e-a821f095e625", - "metadata": {}, - "outputs": [], - "source": [ - "gemaal = gpd.read_file(gpkg_path_Wetterskip, layer = 'gemaal')\n", - "gemaal = gemaal[['code', 'nen3610id', 'globalid', 'functiegemaal', 'geometry']]\n", - "Wetterskip['gemaal'] = gemaal" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "21704eb9-844a-483f-b102-53313a08c3e9", - "metadata": {}, - "outputs": [], - "source": [ - "Wetterskip['stuw']['geometry'] = Wetterskip['stuw'].centroid #prevent strange geometries\n", - "Wetterskip['gemaal']['geometry'] = Wetterskip['gemaal'].centroid #prevent strange geometries\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "7eed68de-331a-4829-b78e-ab39db127d71", - "metadata": {}, - "outputs": [], - "source": [ - "#determine aanvoer en afvoer gemalen\n", - "Wetterskip['gemaal']['func_aanvoer'], Wetterskip['gemaal']['func_afvoer'], Wetterskip['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "Wetterskip['gemaal']['functiegemaal'] = Wetterskip['gemaal']['functiegemaal'].astype(str) \n", - "\n", - "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Onbekend|Onderbemaling|Afvoergemaal'), 'func_afvoer'] = True\n", - "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Opmaling|Aanvoer'), 'func_aanvoer'] = True\n", - "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Overig|circulatie'), 'func_circulatie'] = True\n", - "Wetterskip['gemaal'].loc[(Wetterskip['gemaal'].func_afvoer == False) &\n", - " (Wetterskip['gemaal'].func_aanvoer == False) &\n", - " (Wetterskip['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown\n" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "b17739a1-76d0-4d8e-bbf9-2483cc81abe5", - "metadata": {}, - "outputs": [], - "source": [ - "#points\n", - "Wetterskip['stuw'] = Wetterskip['stuw'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "Wetterskip['gemaal'] = Wetterskip['gemaal'][['code', 'globalid', 'nen3610id', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "Wetterskip['afsluitmiddel'] = Wetterskip['afsluitmiddel'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "\n", - "#lines\n", - "Wetterskip['hydroobject'] = Wetterskip['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "Wetterskip['duikersifonhevel'] = Wetterskip['duikersifonhevel'][['code', 'globalid', 'nen3610id', 'geometry']]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "54ee138a-5c47-414c-a550-68756f739c91", - "metadata": {}, - "outputs": [], - "source": [ - "# #delete irrelvant data\n", - "# variables = ['peilmerk', \n", - "# 'peilgebiedpraktijk', \n", - "# 'peilgebiedvigerend',\n", - "# 'peilbesluitgebied', \n", - "# 'peilgebiedpraktijk']\n", - "\n", - "# for variable in variables:\n", - "# if str(variable) in Wetterskip:\n", - "# del Wetterskip[variable]\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "660832b6-d52f-4c17-9b15-510c265c0bea", - "metadata": {}, - "outputs": [], - "source": [ - "#add duikersifonhevels to the hydroobjecten \n", - "Wetterskip['hydroobject'] = pd.concat([Wetterskip['hydroobject'], Wetterskip['duikersifonhevel'], schouwsloten])\n", - "Wetterskip['hydroobject'] = Wetterskip['hydroobject'].drop_duplicates(subset='globalid') #in case it is run multiple times\n", - "Wetterskip['hydroobject'] = gpd.GeoDataFrame(Wetterskip['hydroobject']).set_crs('epsg:28992')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "48de09a6-1c91-4f61-9042-c43b080c3da5", - "metadata": {}, - "outputs": [], - "source": [ - "Wetterskip['streefpeil'].waterhoogte = Wetterskip['streefpeil'].waterhoogte.round(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "6ce9eaa7-5b21-4f07-bd22-1e60a1bb1181", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
codenen3610idglobalidgeometry
0dummy_code_peilgebied_0Oldelaamsterbrug_0dummy_globalid_peilgebied_0MULTIPOLYGON Z (((189739.053 542314.424 0.000,...
1dummy_code_peilgebied_1Boezem beheerst_1dummy_globalid_peilgebied_1MULTIPOLYGON Z (((187468.939 543147.915 0.000,...
2dummy_code_peilgebied_2Vrijafstromend_2dummy_globalid_peilgebied_2MULTIPOLYGON Z (((201983.478 545854.516 0.000,...
3dummy_code_peilgebied_3Boezem_3dummy_globalid_peilgebied_3MULTIPOLYGON Z (((201757.882 546194.567 0.000,...
4dummy_code_peilgebied_4Fennen, De_4dummy_globalid_peilgebied_4MULTIPOLYGON Z (((197494.555 553316.102 0.000,...
...............
7868dummy_code_peilgebied_7868Willem Jongsma_34dummy_globalid_peilgebied_7868POLYGON Z ((189308.409 540865.901 0.000, 18930...
7869dummy_code_peilgebied_7869Willem Jongsma_35dummy_globalid_peilgebied_7869POLYGON Z ((191521.683 539320.110 0.000, 19163...
7870dummy_code_peilgebied_7870Willem Jongsma_36dummy_globalid_peilgebied_7870POLYGON Z ((190787.267 540064.328 0.000, 19081...
7871dummy_code_peilgebied_7871Willem Jongsma_37dummy_globalid_peilgebied_7871POLYGON Z ((190972.562 540027.516 0.000, 19093...
7872dummy_code_peilgebied_7872Willem Jongsma_38dummy_globalid_peilgebied_7872POLYGON Z ((189453.748 540955.695 0.000, 18943...
\n", - "

7873 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " code nen3610id \\\n", - "0 dummy_code_peilgebied_0 Oldelaamsterbrug_0 \n", - "1 dummy_code_peilgebied_1 Boezem beheerst_1 \n", - "2 dummy_code_peilgebied_2 Vrijafstromend_2 \n", - "3 dummy_code_peilgebied_3 Boezem_3 \n", - "4 dummy_code_peilgebied_4 Fennen, De_4 \n", - "... ... ... \n", - "7868 dummy_code_peilgebied_7868 Willem Jongsma_34 \n", - "7869 dummy_code_peilgebied_7869 Willem Jongsma_35 \n", - "7870 dummy_code_peilgebied_7870 Willem Jongsma_36 \n", - "7871 dummy_code_peilgebied_7871 Willem Jongsma_37 \n", - "7872 dummy_code_peilgebied_7872 Willem Jongsma_38 \n", - "\n", - " globalid \\\n", - "0 dummy_globalid_peilgebied_0 \n", - "1 dummy_globalid_peilgebied_1 \n", - "2 dummy_globalid_peilgebied_2 \n", - "3 dummy_globalid_peilgebied_3 \n", - "4 dummy_globalid_peilgebied_4 \n", - "... ... \n", - "7868 dummy_globalid_peilgebied_7868 \n", - "7869 dummy_globalid_peilgebied_7869 \n", - "7870 dummy_globalid_peilgebied_7870 \n", - "7871 dummy_globalid_peilgebied_7871 \n", - "7872 dummy_globalid_peilgebied_7872 \n", - "\n", - " geometry \n", - "0 MULTIPOLYGON Z (((189739.053 542314.424 0.000,... \n", - "1 MULTIPOLYGON Z (((187468.939 543147.915 0.000,... \n", - "2 MULTIPOLYGON Z (((201983.478 545854.516 0.000,... \n", - "3 MULTIPOLYGON Z (((201757.882 546194.567 0.000,... \n", - "4 MULTIPOLYGON Z (((197494.555 553316.102 0.000,... \n", - "... ... \n", - "7868 POLYGON Z ((189308.409 540865.901 0.000, 18930... \n", - "7869 POLYGON Z ((191521.683 539320.110 0.000, 19163... \n", - "7870 POLYGON Z ((190787.267 540064.328 0.000, 19081... \n", - "7871 POLYGON Z ((190972.562 540027.516 0.000, 19093... \n", - "7872 POLYGON Z ((189453.748 540955.695 0.000, 18943... \n", - "\n", - "[7873 rows x 4 columns]" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Wetterskip['peilgebied']" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "81d3df9b-574a-4bd7-860f-2ac4fda4bd4f", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "gemaal\n", - "['code' 'globalid' 'nen3610id' 'func_afvoer' 'func_aanvoer'\n", - " 'func_circulatie' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "afsluitmiddel\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "hydroobject\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "duikersifonhevel\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "peilgebied\n", - "['code' 'nen3610id' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "aggregation_area\n", - "['code' 'nen3610id' 'globalid' 'geometry' 'waterhoogte']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "streefpeil\n", - "['waterhoogte' 'globalid' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n" - ] - } - ], - "source": [ - "show_layers_and_columns(waterschap = Wetterskip)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "ddeaea28-d8ad-484d-880c-965cd4bd8faf", - "metadata": {}, - "outputs": [], - "source": [ - "store_data(waterschap = Wetterskip, \n", - " output_gpkg_path = output_gpkg_path_Wetterskip)\n" - ] - }, - { - "cell_type": "markdown", - "id": "2f83cab3-fb65-4336-a0ed-36339c34c2dc", - "metadata": { - "tags": [] - }, - "source": [ - "# Oud" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "b28774d5-68b1-48ff-99af-ea886ebceeef", - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'stop' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_22788\\3957423419.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mstop\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[1;31mNameError\u001b[0m: name 'stop' is not defined" - ] - } - ], - "source": [ - "stop" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2982e516-9b1f-4f4e-86cc-5131ff53925a", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# layout_path = r\"..\\..\\Data_postprocessed\\QGIS_overzicht\\routing_style_format3.gpkg\"\n", - "# output_layout_path = r\"..\\..\\Data_postprocessed\\QGIS_overzicht\\routing_style_format2_saved\"\n", - "# layout = read_gpkg_layers(gpkg_path = layout_path, \n", - "# variables = ['stuw', \n", - "# 'gemaal', \n", - "# 'afsluitmiddel'])#,\n", - "# # 'hydroobject',\n", - "# # 'duikersifonhevel',\n", - "# # 'streefpeil',\n", - "# # 'peilgebiedpraktijk', \n", - "# # 'peilgebiedvigerend'])\n", - "# store_data(waterschap = layout, \n", - "# output_gpkg_path = output_layout_path)\n" - ] - }, - { - "cell_type": "raw", - "id": "ba602947-7d4c-48b0-9651-683efffd0932", - "metadata": {}, - "source": [ - "There are some peilgebieden without peil. Merge the peilgebied praktijk and the peilgebiedvigerend. Then, take the difference between this merged peilgebied and the peilbesluit gebied. The leftover areas should get a streefpeil based on the layer of peilmerk." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "868691a9-9659-4026-9588-2d9e73f04db5", - "metadata": {}, - "outputs": [], - "source": [ - "# peilgebieden_met_peil = peilgebieden_met_peil.rename(columns = {'code_left':'code',\n", - "# 'globalid_left':'globalid',\n", - "# 'nen3610id_left':'nen3610id',\n", - "# 'geometry_left':'geometry',\n", - "# 'hoogte':'waterhoogte'})\n", - "# peilgebieden_met_peil = peilgebieden_met_peil[['waterhoogte','code', 'globalid', 'nen3610id', 'geometry']].reset_index(drop=True)\n", - "# peilgebieden_met_peil = peilgebieden_met_peil.drop_duplicates(subset='globalid')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "29513621-a948-408e-91cd-9255d55d539b", - "metadata": {}, - "outputs": [], - "source": [ - "# #bring the peilgebied in the correct format\n", - "# extra_peilgebied = peilgebieden_met_peil[['waterhoogte','code','globalid','nen3610id','geometry']].reset_index(drop=True)\n", - "\n", - "# #bring the streefpeil in the correct format\n", - "# extra_peil = peilgebieden_met_peil[['waterhoogte', 'globalid']]\n", - "# extra_peil = extra_peil.rename(columns = {'globalid':'peilgebiedpraktijkid'})\n", - "# extra_peil['peilgebiedvigerendid'] = None\n", - "# extra_peil['geometry'] = None\n", - "\n", - "# #add semi dummy globalid's and nen3610id's\n", - "# extra_peil['globalid'], extra_peil['nen3610id'] = np.arange(0, len(extra_peil)), np.arange(0, len(extra_peil))\n", - "# extra_peil['globalid'] = 'globalid_wetterskip_streefpeil_' + extra_peil['globalid'].astype(str) \n", - "# extra_peil['nen3610id'] = 'nen3610id_wetterskip_' + extra_peil['nen3610id'].astype(str) \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "47072d3d-5d87-40c3-bf57-198d618271ae", - "metadata": {}, - "outputs": [], - "source": [ - "# #add the (geo)dataframes together\n", - "# Wetterskip['peilgebied'] = gpd.GeoDataFrame(pd.concat([peilgebied_PV, extra_peilgebied])).reset_index(drop=True)\n", - "# Wetterskip['streefpeil'] = gpd.GeoDataFrame(pd.concat([Wetterskip['streefpeil'], extra_peil])).reset_index(drop=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "794c3ba1-d2ec-4ed7-9f7c-432fe189cc81", - "metadata": {}, - "outputs": [], - "source": [ - "# pd.merge(left=Wetterskip['streefpeil'],\n", - "# right=peilgebied_PV,\n", - "# left_on='peilgebiedid',\n", - "# right_on='globalid')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7484c309-6a03-492b-a27c-fcf3ef837446", - "metadata": {}, - "outputs": [], - "source": [ - "# Wetterskip['streefpeil']['peilgebiedid'] = None\n", - "# Wetterskip['streefpeil']['peilgebiedid'].fillna(Wetterskip['streefpeil']['peilgebiedvigerendid'], inplace = True)\n", - "# Wetterskip['streefpeil']['peilgebiedid'].fillna(Wetterskip['streefpeil']['peilgebiedpraktijkid'], inplace = True)\n", - "\n", - "# #move the peilgebiedid id to both the peilgebiedenas well as the streefpeilen\n", - "# Wetterskip['peilgebied'] = gpd.GeoDataFrame()\n", - "# Wetterskip['peilgebied']['peilgebiedid'] = Wetterskip['streefpeil']['peilgebiedid'] \n", - "\n", - "# Wetterskip['peilgebied'][['code','globalid','nen3610id']] = Wetterskip['streefpeil'][['code','globalid','nen3610id',]] \n", - "\n", - "\n", - "# #the peilgebieden have been merged. Drop the irrelevant columns\n", - "# Wetterskip['streefpeil'] = Wetterskip['streefpeil'][['waterhoogte', 'peilgebiedid']]#.drop(columns=['peilgebiedvigerendid', 'peilgebiedpraktijkid'], inplace = True)\n", - "# # Wetterskip['peilgebied'] = " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "25cfdd50-7216-48aa-a60a-b60710500790", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "57d0bb94-fc26-4299-804e-8c6a17847c77", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Routing", - "language": "python", - "name": "routing" - }, - "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.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Zuiderzeeland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Zuiderzeeland.ipynb deleted file mode 100644 index 6099db1..0000000 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/Zuiderzeeland.ipynb +++ /dev/null @@ -1,4629 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", - "metadata": {}, - "outputs": [], - "source": [ - "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", - "import os\n", - "import fiona\n", - "import shapely\n", - "from shapely.geometry import Polygon, MultiPolygon, shape, Point\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ccb98fec-abb1-4acd-956b-e5ebdb8dd0b4", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", - "metadata": {}, - "outputs": [], - "source": [ - "from general_functions import *\n", - "\n", - "def convert_3D_2D(geometry):\n", - " '''\n", - " Takes a GeoSeries of 3D Multi/Polygons (has_z) and returns a list of 2D Multi/Polygons\n", - " '''\n", - " new_geo = []\n", - " for p in geometry:\n", - " if p.has_z:\n", - " if p.geom_type == 'Polygon':\n", - " lines = [xy[:2] for xy in list(p.exterior.coords)]\n", - " new_p = Polygon(lines)\n", - " new_geo.append(new_p)\n", - " elif p.geom_type == 'MultiPolygon':\n", - " new_multi_p = []\n", - " for ap in p:\n", - " lines = [xy[:2] for xy in list(ap.exterior.coords)]\n", - " new_p = Polygon(lines)\n", - " new_multi_p.append(new_p)\n", - " new_geo.append(MultiPolygon(new_multi_p))\n", - " return new_geo\n", - "\n", - "def convert_to_polygon(line):\n", - " if line.is_ring: # Checks if the LineString is closed\n", - " return Polygon(line)\n", - " else:\n", - " return line # Returns the line string as is if it's not closed\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", - "metadata": {}, - "outputs": [], - "source": [ - "pd.set_option('display.max_columns', None)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", - "metadata": {}, - "outputs": [], - "source": [ - "#define relative paths\n", - "waterschap = 'Zuiderzeeland'\n", - "path_zzl = '..\\..\\Data_preprocessed\\Waterschappen\\Zuiderzeeland'\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Zuiderzeeland\"" - ] - }, - { - "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", - "metadata": {}, - "source": [ - "# Zuiderzeeland" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "Zuiderzeeland = {}\n", - "\n", - "Zuiderzeeland['gemaal'] = gpd.read_file(path_zzl + '\\gemalen.gpkg')\n", - "Zuiderzeeland['hevels'] = gpd.read_file(path_zzl + '\\overigekunstwerken.gpkg')\n", - "# Zuiderzeeland['peilgebied'] = gpd.read_file(path_zzl + '\\peilgebieden.gpkg')\n", - "Zuiderzeeland['peilgebied'] = gpd.read_file(path_zzl + '\\peilvakken_nalevering.gpkg')\n", - "\n", - "\n", - "#use fiona for the duikersifonhevels and watergangen due to unexpted geometry types\n", - "with fiona.open(path_zzl + '/Duikers.gpkg', 'r') as file:\n", - " # Read the contents and store them in the GeoDataFrame\n", - " Zuiderzeeland['duikersifonhevel'] = gpd.GeoDataFrame.from_features(file, crs = 'EPSG:28992')\n", - " \n", - "with fiona.open(path_zzl + '/zzl_watergangen_nalevering/zzl_Watergangen.shp', 'r') as file:\n", - " # Read the contents and store them in the GeoDataFrame\n", - " Zuiderzeeland['hydroobject'] = gpd.GeoDataFrame.from_features(file)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "a0d86e2c-d365-4a03-8276-d59f93367128", - "metadata": {}, - "outputs": [], - "source": [ - "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'].set_crs(crs = 'WGS84', allow_override=True)\n", - "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'].to_crs(crs = 'EPSG:28992')" - ] - }, - { - "cell_type": "raw", - "id": "920dff3d-f81f-4e88-a8be-67fa2c60d41b", - "metadata": {}, - "source": [ - "ZZL: stuwen in KWKSOORT in overigekunstwerken.gpkg" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "28a99515-40c8-4a8e-b78f-0781869de8be", - "metadata": {}, - "outputs": [], - "source": [ - "KWKSOORT_stuw = ['Constructie',\n", - " 'inlaat',\n", - " 'uitlaat',\n", - " 'keerwand'] #gebasseerd op de geleverde data van Zuiderzeeland\n", - "\n", - "Zuiderzeeland['stuw'] = Zuiderzeeland['hevels'].loc[Zuiderzeeland['hevels']['KWKSOORT'].isin(KWKSOORT_stuw)].reset_index(drop=True)\n", - "Zuiderzeeland['stuw'].geometry = Zuiderzeeland['stuw'].centroid #prevent pointZ geometries" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "e58ee099-54b3-415b-8222-9545776a7a61", - "metadata": {}, - "outputs": [], - "source": [ - "#distinguish multiple parameters from the same gpkg\n", - "Zuiderzeeland['afsluitmiddel'] = Zuiderzeeland['hevels'].loc[Zuiderzeeland['hevels']['KWKSOORT'] == 'Afsluitmiddel (groot)'].reset_index(drop=True)\n", - "Zuiderzeeland['hevels'] = Zuiderzeeland['hevels'].loc[Zuiderzeeland['hevels']['KWKSOORT'] == 'Hevel'].reset_index(drop=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "a9a814bb-bf6a-4822-9447-c8fb0bbc57ae", - "metadata": {}, - "outputs": [], - "source": [ - "#determine aanvoer en afvoer gemalen\n", - "Zuiderzeeland['gemaal']['func_aanvoer'], Zuiderzeeland['gemaal']['func_afvoer'], Zuiderzeeland['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "Zuiderzeeland['gemaal']['functiegemaal'] = Zuiderzeeland['gemaal']['KGMFUNC'].astype(str) \n", - "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal']['functiegemaal'] == 'onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", - "Zuiderzeeland['gemaal']['functiegemaal'].fillna(Zuiderzeeland['gemaal']['KGMSOORT'], inplace = True) #some additional is given in this column\n", - "\n", - "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('af-|afvoer|onderbemaling'), 'func_afvoer'] = True\n", - "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('aanvoergemaal|opmaling'), 'func_aanvoer'] = True\n", - "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('circulatie'), 'func_circulatie'] = True\n", - "Zuiderzeeland['gemaal'].loc[(Zuiderzeeland['gemaal'].func_afvoer == False) &\n", - " (Zuiderzeeland['gemaal'].func_aanvoer == False) &\n", - " (Zuiderzeeland['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8060f661-8bf1-472c-8022-51933b4f5929", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "413d001e-0c0b-4466-9a10-580b5e0c6c4a", - "metadata": {}, - "outputs": [], - "source": [ - "# Zuiderzeeland['peilgebied']['geometry'] = convert_3D_2D(Zuiderzeeland['peilgebied'].geometry)\n", - "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].explode(ignore_index=True)\n", - "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'][Zuiderzeeland['peilgebied'].geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "ebc58b2f-1699-480a-b0c4-2cd84c199aed", - "metadata": { - "scrolled": true, - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_12756\\1572867627.py:9: FutureWarning: Currently, index_parts defaults to True, but in the future, it will default to False to be consistent with Pandas. Use `index_parts=True` to keep the current behavior and True/False to silence the warning.\n", - " exterior = exterior.explode().reset_index(drop=True)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n", - "C:\\Users\\Bruijns\\AppData\\Roaming\\Python\\Python39\\site-packages\\geopandas\\geodataframe.py:1543: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " super().__setitem__(key, value)\n" - ] - } - ], - "source": [ - "from shapely.ops import unary_union,cascaded_union \n", - "\n", - "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].explode(ignore_index=True)\n", - "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'][Zuiderzeeland['peilgebied'].geometry.type.isin(['Polygon', 'MultiPolygon'])] #also only select polygons\n", - "\n", - "\n", - "Zuiderzeeland['peilgebied']['area'] = Zuiderzeeland['peilgebied'].area\n", - "dissolved = Zuiderzeeland['peilgebied'].dissolve()\n", - "exterior = gpd.GeoDataFrame(geometry=dissolved['geometry'].boundary).to_crs(crs='EPSG:28992')\n", - "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].to_crs(crs='EPSG:28992')\n", - "exterior = exterior.explode().reset_index(drop=True)\n", - "exterior['geometry'] = exterior['geometry'].apply(convert_to_polygon)\n", - "exterior['area'] = exterior.area\n", - "exterior = exterior.sort_values(by='area', ascending=False).reset_index(drop=True)\n", - "exterior = exterior.iloc[2::] #-2 as all rows should be taken into consideration, except the last two. These two polygons represent the flevopolder and the noordoost polder\n", - "exterior = exterior.reset_index(drop=True)\n", - "\n", - "\n", - "# new_gdf = gpd.GeoDataFrame(columns=Zuiderzeeland['peilgebied'].columns())\n", - "\n", - "for i in range(len(exterior)):\n", - "# for i in range(10):\n", - "\n", - " buffered_peilgebied = Zuiderzeeland['peilgebied'].buffer(0.)\n", - "\n", - " exterior_sample = exterior.iloc[i:i+1] #just pick a single sample\n", - " exterior_sample.geometry = exterior_sample.buffer(0.0001) #let op! hierdoor komt er alsnog een kleine overlap. Maar anders werkt de code even niet, en vanwege tijdgebrek kan dit nu niet worden opgelost. In het bepalen van de crossings wordt hier echter mee omgegaan.\n", - " \n", - " intersects_mask = buffered_peilgebied.intersects(exterior_sample.iloc[0].geometry)\n", - " intersecting_polygons = Zuiderzeeland['peilgebied'][intersects_mask].sort_values(by='area', ascending=False)\n", - "\n", - " if len(intersecting_polygons) > 0:\n", - " # print(i)\n", - " # polygon_to_dissolve = intersecting_polygons.iloc[0:1]#.geometry.unary_union \n", - " # sample_geometry = exterior_sample.geometry#.unary_union\n", - " intersecting_polygons = gpd.GeoDataFrame(intersecting_polygons.iloc[0:1], geometry = 'geometry')\n", - " \n", - " # dissolved_polygon = # dissolve/union them\n", - " all_geometries = list(intersecting_polygons.geometry) + list(exterior_sample.geometry)\n", - "\n", - " # Use unary_union to dissolve all polygons in the list\n", - " dissolved_polygon = unary_union(all_geometries)\n", - " \n", - " original_index = intersecting_polygons.index[0]\n", - "\n", - " # Ensure it's a single geometry object.\n", - " # print(len(Zuiderzeeland['peilgebied'].loc[Zuiderzeeland['peilgebied'].index == original_index, 'geometry']))\n", - " # print(len(dissolved_polygon))\n", - " Zuiderzeeland['peilgebied'].loc[Zuiderzeeland['peilgebied'].index == original_index, 'geometry'] = dissolved_polygon#['geometry']\n", - " # new_gdf = pd.concat([new_gdf, dissolved_polygon])\n", - " else:\n", - " print('No intersection found for iteration ', i)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "aec76a19-0893-48a0-b1af-c8c871d0557d", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_12756\\504763384.py:43: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " Zuiderzeeland['streefpeil']['geometry'] = np.nan\n", - "C:\\Users\\Bruijns\\AppData\\Local\\Temp\\ipykernel_12756\\504763384.py:44: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " Zuiderzeeland['streefpeil'].rename(columns = {'streefpeil': 'waterhoogte'}, inplace=True)\n" - ] - } - ], - "source": [ - "#Gemaal\n", - "Zuiderzeeland['gemaal'] = Zuiderzeeland['gemaal'][['KGMIDENT', 'GLOBALID', 'func_aanvoer', 'func_afvoer', 'func_circulatie', 'geometry']]\n", - "Zuiderzeeland['gemaal'] = Zuiderzeeland['gemaal'].rename(columns={'KGMIDENT': 'code', 'GLOBALID': 'globalid'})\n", - "Zuiderzeeland['gemaal']['nen3610id'] = 'dummy_nen3610id_gemaal_' + Zuiderzeeland['gemaal'].index.astype(str)\n", - "\n", - "#Hydroobject\n", - "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'][['OWAIDENT', 'GLOBALID', 'geometry']]\n", - "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'].rename(columns={'OWAIDENT':'code', 'GLOBALID':'globalid'})\n", - "Zuiderzeeland['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + Zuiderzeeland['hydroobject'].index.astype(str)\n", - "\n", - "#duikersifonhevel\n", - "Zuiderzeeland['duikersifonhevel'] = Zuiderzeeland['duikersifonhevel'][['KDUIDENT', 'GLOBALID', 'geometry']]\n", - "Zuiderzeeland['duikersifonhevel'] = Zuiderzeeland['duikersifonhevel'].rename(columns={'KDUIDENT':'code', 'GLOBALID': 'globalid'})\n", - "Zuiderzeeland['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + Zuiderzeeland['duikersifonhevel'].index.astype(str)\n", - "\n", - "#hevels\n", - "Zuiderzeeland['hevels'] = Zuiderzeeland['hevels'][['KWKIDENT', 'GLOBALID', 'geometry']]\n", - "Zuiderzeeland['hevels'] = Zuiderzeeland['hevels'].rename(columns={'KWKIDENT':'code', 'GLOBALID': 'globalid'})\n", - "Zuiderzeeland['hevels']['nen3610id'] = 'dummy_nen3610id_hevels_' + Zuiderzeeland['hevels'].index.astype(str)\n", - "#add to the duikersifonhevel\n", - "Zuiderzeeland['duikersifonhevel'] = gpd.GeoDataFrame(pd.concat((Zuiderzeeland['duikersifonhevel'], Zuiderzeeland['hevels']))) \n", - "\n", - "#stuw\n", - "Zuiderzeeland['stuw'] = Zuiderzeeland['stuw'][['KWKIDENT', 'GLOBALID', 'geometry', 'KWKSOORT']]\n", - "Zuiderzeeland['stuw'] = Zuiderzeeland['stuw'].rename(columns={'KWKIDENT':'code', 'GLOBALID': 'globalid', 'KWKSOORT':'KWKsoort'})\n", - "Zuiderzeeland['stuw'] = Zuiderzeeland['stuw'].set_crs('EPSG:28992')\n", - "Zuiderzeeland['stuw']['nen3610id'] = 'dummy_nen3610id_stuw_' + Zuiderzeeland['stuw'].index.astype(str)\n", - "\n", - "#afsluitmiddel\n", - "Zuiderzeeland['afsluitmiddel'] = Zuiderzeeland['afsluitmiddel'][['KWKIDENT', 'GLOBALID', 'geometry']]\n", - "Zuiderzeeland['afsluitmiddel'] = Zuiderzeeland['afsluitmiddel'].rename(columns={'KWKIDENT':'code', 'GLOBALID': 'globalid'})\n", - "Zuiderzeeland['afsluitmiddel']['nen3610id'] = 'dummy_nen3610id_hevels_' + Zuiderzeeland['afsluitmiddel'].index.astype(str)\n", - "\n", - "#peilgebied\n", - "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'][['DHYDRO_ZMRPL', 'GPGIDENT', 'geometry']]\n", - "Zuiderzeeland['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + Zuiderzeeland['peilgebied'].index.astype(str)\n", - "Zuiderzeeland['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Zuiderzeeland['peilgebied'].index.astype(str)\n", - "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].rename(columns={'DHYDRO_ZMRPL': 'streefpeil', 'GPGIDENT':'code'})\n", - "Zuiderzeeland['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Zuiderzeeland['peilgebied'].index.astype(str)\n", - "\n", - "#streefpeil\n", - "Zuiderzeeland['streefpeil'] = Zuiderzeeland['peilgebied'][['streefpeil', 'globalid']]\n", - "Zuiderzeeland['streefpeil']['geometry'] = np.nan\n", - "Zuiderzeeland['streefpeil'].rename(columns = {'streefpeil': 'waterhoogte'}, inplace=True)\n", - "Zuiderzeeland['streefpeil'] = gpd.GeoDataFrame(Zuiderzeeland['streefpeil'], geometry = 'geometry')\n", - "\n", - "#delete the streefpeil in the peilgebied for consistency\n", - "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'][['code', 'globalid', 'nen3610id', 'geometry']]" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "9a0f4172-7e46-4be8-842b-3761a9d0b154", - "metadata": {}, - "outputs": [], - "source": [ - "Zuiderzeeland['aggregation_area'] = Zuiderzeeland['peilgebied'].copy()\n", - "Zuiderzeeland['aggregation_area']['globalid'] = 'dummy_globalid_agg_area_' + Zuiderzeeland['aggregation_area'].index.astype(str)\n", - "Zuiderzeeland['aggregation_area']['code'] = Zuiderzeeland['aggregation_area']['code'].astype(str) + '_dummy_id_' + Zuiderzeeland['aggregation_area'].index.astype(str)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "4dc624d6-6924-426b-bde4-eeee42087999", - "metadata": {}, - "outputs": [], - "source": [ - "Zuiderzeeland['streefpeil'].waterhoogte = Zuiderzeeland['streefpeil'].waterhoogte.astype(float)\n", - "Zuiderzeeland['streefpeil'].waterhoogte = Zuiderzeeland['streefpeil'].waterhoogte.round(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "23196780-1122-4b42-9ddb-5beade351108", - "metadata": {}, - "outputs": [], - "source": [ - "# test = pd.merge(Zuiderzeeland['peilgebied'], \n", - "# Zuiderzeeland['streefpeil'],\n", - "# on = 'globalid',\n", - "# suffixes = ('', '_sp'))\n", - "\n", - "# test.waterhoogte = test.waterhoogte.astype(float)\n", - "# # test.loc[test.waterhoogte.isna()]" - ] - }, - { - "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", - "metadata": {}, - "source": [ - "### Check for the correct keys and columns" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "gemaal\n", - "['code' 'globalid' 'func_aanvoer' 'func_afvoer' 'func_circulatie'\n", - " 'geometry' 'nen3610id']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "hevels\n", - "['code' 'globalid' 'geometry' 'nen3610id']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "peilgebied\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "duikersifonhevel\n", - "['code' 'globalid' 'geometry' 'nen3610id']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n", - "hydroobject\n", - "['code' 'globalid' 'geometry' 'nen3610id']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n", - "stuw\n", - "['code' 'globalid' 'geometry' 'KWKsoort' 'nen3610id']\n", - "type = \n", - "crs = EPSG:28992\n", - "\n", - "afsluitmiddel\n", - "['code' 'globalid' 'geometry' 'nen3610id']\n", - "type = \n", - "crs = epsg:28992\n", - "\n", - "streefpeil\n", - "['waterhoogte' 'globalid' 'geometry']\n", - "type = \n", - "crs = None\n", - "\n", - "aggregation_area\n", - "['code' 'globalid' 'nen3610id' 'geometry']\n", - "type = \n", - "crs = epsg:28992\n", - "\n" - ] - } - ], - "source": [ - "show_layers_and_columns(waterschap = Zuiderzeeland)" - ] - }, - { - "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", - "metadata": {}, - "source": [ - "### Store data" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", - "metadata": {}, - "outputs": [], - "source": [ - "# Check if the directory exists. If it doesn't exist, create it\n", - "\n", - "if not os.path.exists(output_gpkg_path):\n", - " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = Zuiderzeeland, \n", - " output_gpkg_path = output_gpkg_path + '/Zuiderzeeland')\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "116f9f2a-ad97-44c5-9a2f-ba43c80e4b2d", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2cd6b51a-69cb-4bb6-b75d-ee4f8cc0a0db", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Routing", - "language": "python", - "name": "routing" - }, - "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.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb new file mode 100644 index 0000000..844b7c5 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb @@ -0,0 +1,402 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "690952c5-5037-476a-a660-d54fec614748", + "metadata": {}, + "source": [ + "# WSRL" + ] + }, + { + "cell_type": "markdown", + "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "metadata": {}, + "source": [ + "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", + "- peilgebied_cat = 0 -> peilgebied\n", + "- peigelbied_cat = 1 -> RHWS (boezem)\n", + "- peilgebied_cat = 2 -> NHWS " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import numpy as np\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from general_functions import *" + ] + }, + { + "cell_type": "markdown", + "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "metadata": {}, + "source": [ + "## WSRL" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'WSRL'\n", + "\n", + "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", + "\n", + "# Waterschaps boundaries\n", + "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "# Hoofdwatersysteem boundaries\n", + "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "# Buffer boundaries\n", + "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_wsrl.gpkg\"\n", + "# Output folder\n", + "output_folder = f\"./Waterschappen/{waterschap}\"" + ] + }, + { + "cell_type": "markdown", + "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "metadata": {}, + "source": [ + "### Load Files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "metadata": {}, + "outputs": [], + "source": [ + "# Load HHNK files\n", + "WSRL = read_gpkg_layers(gpkg_path = data_path, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'hydroobject',\n", + " 'duikersifonhevel',\n", + " 'peilgebied', \n", + " 'streefpeil',\n", + " ])\n", + "WSRL['peilgebied'] = WSRL['peilgebied'].to_crs('EPSG:28992')\n", + "\n", + "# Load waterschap boundaries\n", + "gdf_grens = gpd.read_file(grens_path)\n", + "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", + "gdf_grens = gdf_grens.set_index('waterschap')\n", + "\n", + "# Load hws\n", + "gdf_hws = gpd.read_file(hws_path)\n", + "\n", + "# Load buffer\n", + "gdf_buffer = gpd.read_file(buffer_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1c0d88a9-1141-4f86-8345-0eb4678eadc1", + "metadata": {}, + "outputs": [], + "source": [ + "# check primary key\n", + "WSRL['peilgebied']['globalid'].is_unique" + ] + }, + { + "cell_type": "markdown", + "id": "ed0d59f7-011b-4114-94ff-791d9c8ba514", + "metadata": {}, + "source": [ + "## Select waterschap boundaries and clip hws layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5f40630a-2a94-42f7-8ee6-7b74bcde912e", + "metadata": {}, + "outputs": [], + "source": [ + "# Select boundaries HH Amstel, Gooi en Vecht\n", + "gdf_grens = gdf_grens.loc[['Waterschap Rivierenland']]\n", + "\n", + "# Use waterschap boudnaries to clip HWS layer\n", + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "06e7be9e-6154-457e-b0ee-3c1c83a5d9f4", + "metadata": {}, + "outputs": [], + "source": [ + "# Step 1: Identify the Overlapping Areas and clip\n", + "overlaps = gpd.overlay(WSRL['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "\n", + "# # # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", + "# non_overlapping_peilgebied = gpd.overlay(WSRL['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", + "# overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", + " \n", + "# Step 3: Calculate Area Percentages\n", + "# Calculate the area of overlaps\n", + "overlaps['overlap_area'] = overlaps.area\n", + "\n", + "# Step 4: Filter based on area Area Percentages\n", + "minimum_area = 20000\n", + "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", + "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "overlap_ids = overlap_ids.globalid.to_list()\n", + "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + ] + }, + { + "cell_type": "markdown", + "id": "b2044eb8-c047-4830-8816-2e4af251020a", + "metadata": {}, + "source": [ + "## Create peilgebied_cat column" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a2c9f5ef-364a-47b6-ae0c-ffc4e7072108", + "metadata": {}, + "outputs": [], + "source": [ + "# Add occurence to geodataframe\n", + "peilgebieden_cat = []\n", + "\n", + "for index, row in WSRL['peilgebied'].iterrows():\n", + " \n", + " if row.CODE == 'LNG014-P':\n", + " peilgebieden_cat.append(1)\n", + " else:\n", + " peilgebieden_cat.append(0)\n", + " \n", + "# Add new column and drop old HWS_BZM column\n", + "WSRL['peilgebied']['peilgebied_cat'] = peilgebieden_cat\n", + "# WSRL['peilgebied'] = WSRL['peilgebied'].drop(columns=['HWS_BZM'])\n", + "WSRL['peilgebied'] = WSRL['peilgebied'].rename(columns={'CODE':'code'})" + ] + }, + { + "cell_type": "markdown", + "id": "ad5df059-48f2-4a5d-a911-e924b6e44116", + "metadata": {}, + "source": [ + "## Adjust globalid, code, nen3610id ['streefpeil'], ['peilgebied']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9a9719a8-9003-42bf-88d8-dc0e14a6235c", + "metadata": {}, + "outputs": [], + "source": [ + "codes = []\n", + "globalids = []\n", + "nen3610ids = []\n", + "\n", + "for index, row in WSRL['peilgebied'].iterrows():\n", + " codes.append(f'dummy_code_peilgebied_{row.globalid}')\n", + " globalids.append(f'dummy_globalid_peilgebied_{row.globalid}')\n", + " nen3610ids.append(f'dummy_nen3610id_peilgebied_{row.globalid}')\n", + "\n", + "WSRL['peilgebied']['code'] = codes\n", + "WSRL['peilgebied']['globalid'] = globalids \n", + "WSRL['peilgebied']['nen3610id'] = nen3610ids\n", + "\n", + "WSRL['streefpeil']['globalid'] = globalids" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7099292c-fbe8-448b-bcb9-d512852168ba", + "metadata": {}, + "outputs": [], + "source": [ + "WSRL['peilgebied']['globalid'].is_unique" + ] + }, + { + "cell_type": "markdown", + "id": "517f54ec-74da-4247-9984-f3dbe770a508", + "metadata": {}, + "source": [ + "## Add nhws to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "37606d1c-0408-4dc7-a4cc-72147b35aabd", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['peilgebied_cat'] = 2\n", + "\n", + "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "WSRL['peilgebied'] = pd.concat([gdf_hws, WSRL['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e56bed85-30fb-4aaa-bf2c-55a0432857f2", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_hws = pd.DataFrame()\n", + "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "\n", + "WSRL['streefpeil'] = pd.concat([streefpeil_hws, WSRL['streefpeil']])\n", + "WSRL['streefpeil'] = gpd.GeoDataFrame(WSRL['streefpeil'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e0480ec4-0826-47b9-9e57-88a35d4ebd6f", + "metadata": {}, + "outputs": [], + "source": [ + "WSRL['peilgebied']['globalid'].is_unique" + ] + }, + { + "cell_type": "markdown", + "id": "9dbe4b9a-b7b2-429f-ae0c-408cc61134d8", + "metadata": {}, + "source": [ + "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e44043cf-0ea3-47ab-85ab-3af1c85dd3a7", + "metadata": {}, + "outputs": [], + "source": [ + "buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", + "buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", + "buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(WSRL['peilgebied'].geometry.tolist()))\n", + "\n", + "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "buffer_polygon = buffer_polygon.set_geometry(0)\n", + "buffer_polygon = buffer_polygon.dissolve()\n", + "buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "buffer_polygon = buffer_polygon.set_geometry('geometry')\n", + "buffer_polygon = buffer_polygon.set_crs('EPSG:28992')" + ] + }, + { + "cell_type": "markdown", + "id": "b9628396-f882-419e-a265-424cfcb15b24", + "metadata": {}, + "source": [ + "## Add buffer to ['peilgebied']" + ] + }, + { + "cell_type": "markdown", + "id": "bd9a7f41-d404-4512-9639-777d8ac73bed", + "metadata": {}, + "source": [ + "## Add buffer to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ac737828-1f7e-42ab-9f37-45e0fd1e189c", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_buffer = pd.DataFrame()\n", + "streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", + "streefpeil_buffer['geometry'] = [None]\n", + "\n", + "WSRL['streefpeil'] = pd.concat([streefpeil_buffer, WSRL['streefpeil']])\n", + "WSRL['streefpeil'] = gpd.GeoDataFrame(WSRL['streefpeil'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f48bd18b-8f73-46fb-90be-2bb629cd7e00", + "metadata": {}, + "outputs": [], + "source": [ + "WSRL['peilgebied'].globalid.is_unique\n" + ] + }, + { + "cell_type": "markdown", + "id": "997ba837-686c-4a6d-81a4-a92682428196", + "metadata": {}, + "source": [ + "## Store output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4b7ca695-ba56-46a4-bd0f-ced939947deb", + "metadata": {}, + "outputs": [], + "source": [ + "for key in WSRL.keys(): \n", + " print(key)\n", + " WSRL[str(key)].to_file(f'{output_folder}/{waterschap}.gpkg', layer = str(key), driver='GPKG')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:stable]", + "language": "python", + "name": "conda-env-stable-py" + }, + "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.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb new file mode 100644 index 0000000..875f39e --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb @@ -0,0 +1,350 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "690952c5-5037-476a-a660-d54fec614748", + "metadata": {}, + "source": [ + "# Amstel Gooi en Vecht" + ] + }, + { + "cell_type": "markdown", + "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "metadata": {}, + "source": [ + "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", + "- peilgebied_cat = 0 -> peilgebied\n", + "- peigelbied_cat = 1 -> RHWS (boezem)\n", + "- peilgebied_cat = 2 -> NHWS Notes:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import numpy as np\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from general_functions import *" + ] + }, + { + "cell_type": "markdown", + "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "metadata": {}, + "source": [ + "## Amstel Gooi en Vecht" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'AmstelGooienVecht'\n", + "waterschap2 = 'AGV'\n", + "\n", + "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", + "\n", + "# Waterschaps boundaries\n", + "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "\n", + "# Hoofdwatersysteem boundaries\n", + "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "\n", + "# Buffer boundaries\n", + "buffer_path = f\"../projects/4750_30/Data_overig/HWS/hws_buffer_agv.gpkg\"\n", + "\n", + "# Buffer RWHS\n", + "rhws_path = f\"../projects/4750_30/Data_overig/HWS/agv_rhws_buffer.gpkg\"\n", + "\n", + "# Output folder\n", + "output_folder = f\"./Waterschappen/{waterschap}\"" + ] + }, + { + "cell_type": "markdown", + "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "metadata": {}, + "source": [ + "### Load Files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "metadata": {}, + "outputs": [], + "source": [ + "# Load HHNK files\n", + "AVG = read_gpkg_layers(gpkg_path = data_path, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'hydroobject',\n", + " 'duikersifonhevel',\n", + " 'peilgebied', \n", + " 'streefpeil',\n", + " ])\n", + "AVG['peilgebied'] = AVG['peilgebied'].to_crs('EPSG:28992')\n", + "\n", + "# Load waterschap boundaries\n", + "gdf_grens = gpd.read_file(grens_path)\n", + "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", + "gdf_grens = gdf_grens.set_index('waterschap')\n", + "\n", + "# Load hws\n", + "gdf_hws = gpd.read_file(hws_path)\n", + "\n", + "# Load buffer\n", + "gdf_buffer = gpd.read_file(buffer_path)\n", + "gdf_buffer = gdf_buffer.to_crs('EPSG:28992')\n", + "gdf_buffer = gdf_buffer.dissolve()\n", + "\n", + "# Load rhws\n", + "gdf_rhws = gpd.read_file(rhws_path)\n", + "gdf_rhws = gdf_rhws.to_crs('EPSG:28992')\n", + "gdf_rhws = gdf_rhws.dissolve()" + ] + }, + { + "cell_type": "markdown", + "id": "a1d63576-29bb-4157-b3fa-d6c7404e3ccf", + "metadata": {}, + "source": [ + "## Select waterschap boundaries and clip hws layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b89385dd-5d81-4bea-9627-7750b1842e9c", + "metadata": {}, + "outputs": [], + "source": [ + "# Select boundaries HH Amstel, Gooi en Vecht\n", + "gdf_grens = gdf_grens.loc[['HH Amstel, Gooi en Vecht']]\n", + "\n", + "# Use waterschap boudnaries to clip HWS layer\n", + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')\n", + "\n", + "# Use waterschap boudnaries to clip HWS layer\n", + "gdf_rhws = gpd.overlay(gdf_grens, gdf_rhws, how='intersection')" + ] + }, + { + "cell_type": "markdown", + "id": "20c9cd68-0b21-4a6e-8945-fadd79c7d2d7", + "metadata": {}, + "source": [ + "## RHWS is not included in AGV bron data, therefore create inverse difference layer to extract" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "86d6751e-068d-4563-ba7f-30b1b363db71", + "metadata": {}, + "outputs": [], + "source": [ + "# Select inverse of peilgebied\n", + "gdf_rhws = gpd.overlay(gdf_rhws, AVG['peilgebied'], how='difference')\n", + "gdf_rhws = gpd.overlay(gdf_rhws, gdf_hws, how='difference')\n", + "gdf_rhws.plot()" + ] + }, + { + "cell_type": "markdown", + "id": "09d49cea-cfba-454a-b29a-b22f93064617", + "metadata": {}, + "source": [ + "## Peilgebied and HWS layer overlap:\n", + "1. Identify the overlapping areas\n", + "2. Clip\n", + "3. Calculate overlapping area percentage\n", + "4. Filter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f6edfd80-f81c-4659-9d8d-1dec3f91a23c", + "metadata": {}, + "outputs": [], + "source": [ + "# Step 1: Identify the Overlapping Areas and clip\n", + "overlaps = gpd.overlay(AVG['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "\n", + "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", + "non_overlapping_peilgebied = gpd.overlay(AVG['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", + " \n", + "# Step 3: Calculate Area Percentages\n", + "# Calculate the area of overlaps\n", + "overlaps['overlap_area'] = overlaps.area\n", + "\n", + "# Step 4: Filter based on area Area Percentages\n", + "minimum_area = 500\n", + "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", + "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "overlap_ids = overlap_ids.globalid.to_list()\n", + "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fa787842-0a11-4d0f-ba5e-04566370a9fb", + "metadata": {}, + "outputs": [], + "source": [ + "# Add occurence to geodataframe\n", + "peilgebieden_cat = []\n", + "\n", + "for index, row in AVG['peilgebied'].iterrows():\n", + " peilgebieden_cat.append(0)\n", + " \n", + "# Add new column and drop old HWS_BZM column\n", + "AVG['peilgebied']['peilgebied_cat'] = peilgebieden_cat\n", + "# HD['peilgebied'] = HD['peilgebied'].drop(columns=['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "361025ff-51b6-4a45-9fa5-d3d3698611dc", + "metadata": {}, + "source": [ + "## Add rhws to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3164fa66-d75f-498e-bc88-56532faee31b", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "gdf_rhws['globalid'] = 'dummy_globalid_rhws_' + gdf_rhws.index.astype(str)\n", + "gdf_rhws['code'] = 'dummy_code_nhws_' + gdf_rhws.index.astype(str)\n", + "gdf_rhws['nen3610id'] = 'dummy_nen3610id_rhws_' + gdf_rhws.index.astype(str)\n", + "gdf_rhws['peilgebied_cat'] = 1\n", + "\n", + "gdf_rhws = gdf_rhws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "AVG['peilgebied'] = pd.concat([gdf_rhws, AVG['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89ba7b08-3b2a-4058-9946-e82e19bfe4e3", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_hws = pd.DataFrame()\n", + "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_rhws)\n", + "streefpeil_hws['globalid'] = 'dummy_globalid_rhws_' + gdf_rhws.index.astype(str)\n", + "streefpeil_hws['geometry'] = [None]* len(gdf_rhws)\n", + "\n", + "AVG['streefpeil'] = pd.concat([streefpeil_hws, AVG['streefpeil']])\n", + "AVG['streefpeil'] = gpd.GeoDataFrame(AVG['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "afef1983-b814-4d0d-bc07-ad88539a5459", + "metadata": {}, + "source": [ + "## Add nhws to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6f005124-3aa6-4b04-baa1-6e38736cd2c6", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['peilgebied_cat'] = 2\n", + "\n", + "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "AVG['peilgebied'] = pd.concat([gdf_hws, AVG['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b735a861-3ef3-4db4-b9eb-fd89dc47aca7", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_hws = pd.DataFrame()\n", + "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "\n", + "AVG['streefpeil'] = pd.concat([streefpeil_hws, AVG['streefpeil']])\n", + "AVG['streefpeil'] = gpd.GeoDataFrame(AVG['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "81991696-fd4d-490d-9129-98f091d64f91", + "metadata": {}, + "source": [ + "## Store output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b70f5533-bc4f-4554-a3f1-e0d4085fea90", + "metadata": {}, + "outputs": [], + "source": [ + "for key in AVG.keys(): \n", + " print(key)\n", + " AVG[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:stable]", + "language": "python", + "name": "conda-env-stable-py" + }, + "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.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb new file mode 100644 index 0000000..227d76a --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb @@ -0,0 +1,354 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "690952c5-5037-476a-a660-d54fec614748", + "metadata": {}, + "source": [ + "# Delfland" + ] + }, + { + "cell_type": "markdown", + "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "metadata": {}, + "source": [ + "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", + "- peilgebied_cat = 0 -> peilgebied\n", + "- peigelbied_cat = 1 -> boezem\n", + "- peilgebied_cat = 2 -> HWSNotes:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import numpy as np\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from general_functions import *" + ] + }, + { + "cell_type": "markdown", + "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "metadata": {}, + "source": [ + "## Set Paths" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'Delfland'\n", + "\n", + "data_path = f\"../projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", + "\n", + "# Waterschaps boundaries\n", + "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "# Hoofdwatersysteem boundaries\n", + "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "# Buffer boundaries\n", + "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_delfland.gpkg\"\n", + "# Output folder\n", + "output_folder = f\"./Waterschappen/{waterschap}\"" + ] + }, + { + "cell_type": "markdown", + "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "metadata": {}, + "source": [ + "## Load files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "metadata": {}, + "outputs": [], + "source": [ + "# Load HHNK files\n", + "delfland = read_gpkg_layers(gpkg_path = data_path, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'hydroobject',\n", + " 'duikersifonhevel',\n", + " 'peilgebied', \n", + " 'streefpeil',\n", + " ])\n", + "delfland['peilgebied'] = delfland['peilgebied'].to_crs('EPSG:28992')\n", + "\n", + "# Load waterschap boundaries\n", + "gdf_grens = gpd.read_file(grens_path)\n", + "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", + "gdf_grens = gdf_grens.set_index('waterschap')\n", + "\n", + "# Load hws\n", + "gdf_hws = gpd.read_file(hws_path)\n", + "\n", + "# Load buffer\n", + "gdf_buffer = gpd.read_file(buffer_path)" + ] + }, + { + "cell_type": "markdown", + "id": "5556d211-e92e-4ba3-85c2-4ff9bd33fbeb", + "metadata": {}, + "source": [ + "## Select waterschap boundaries and clip hws layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", + "metadata": {}, + "outputs": [], + "source": [ + "# Select boundaries HH Amstel, Gooi en Vecht\n", + "gdf_grens = gdf_grens.loc[['HHS van Delfland']]\n", + "\n", + "# Use waterschap boudnaries to clip HWS layer\n", + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + ] + }, + { + "cell_type": "markdown", + "id": "fbca5734-774b-4327-bb0a-1c2a68afe982", + "metadata": {}, + "source": [ + "## Peilgebied and HWS layer overlap:\n", + "1. Identify the overlapping areas\n", + "2. Clip\n", + "3. Calculate overlapping area percentage\n", + "4. Filter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d28b061b-117d-4e71-b737-f759953951d9", + "metadata": {}, + "outputs": [], + "source": [ + "# Step 1: Identify the Overlapping Areas and clip\n", + "overlaps = gpd.overlay(delfland['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "\n", + "# Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", + "non_overlapping_peilgebied = gpd.overlay(delfland['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", + " \n", + "# Step 3: Calculate Area Percentages\n", + "# Calculate the area of overlaps\n", + "overlaps['overlap_area'] = overlaps.area\n", + "\n", + "# Step 4: Filter based on area Area Percentages\n", + "minimum_area = 20000\n", + "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", + "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "overlap_ids = overlap_ids.globalid.to_list()\n", + "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + ] + }, + { + "cell_type": "markdown", + "id": "fada8dca-0d9d-4619-b03e-403d3d19009a", + "metadata": {}, + "source": [ + "## Create peilgebied_cat column" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "16fe0d25-7dd4-410a-9bec-5a69aced0614", + "metadata": {}, + "outputs": [], + "source": [ + "# Add occurence to geodataframe\n", + "peilgebieden_cat = []\n", + "\n", + "for index, row in delfland['peilgebied'].iterrows():\n", + " \n", + " if row.globalid in overlap_ids:\n", + " peilgebieden_cat.append(2)\n", + " \n", + " elif row.HWS_BZM is True:\n", + " peilgebieden_cat.append(1)\n", + " \n", + " elif row.HWS_BZM is False:\n", + " peilgebieden_cat.append(0)\n", + " \n", + "# Add new column and drop old HWS_BZM column\n", + "delfland['peilgebied']['peilgebied_cat'] = peilgebieden_cat\n", + "delfland['peilgebied'] = delfland['peilgebied'].drop(columns=['HWS_BZM'])" + ] + }, + { + "cell_type": "markdown", + "id": "8061cb15-b0ba-47b7-afa0-caed45438ae4", + "metadata": {}, + "source": [ + "## Add HWS to ['peilgebied', 'streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c12f62cb-60b3-4a43-b26c-6ea1f36f4606", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "gdf_hws['globalid'] = 'dummy_globalid__hws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['code'] = 'dummy_code_hws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['nen3610id'] = 'dummy_nen3610id_hws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['peilgebied_cat'] = 2\n", + "\n", + "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "delfland['peilgebied'] = pd.concat([gdf_hws, delfland['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "68dad130-b22b-47f2-bb20-dc88f33d4614", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_hws = pd.DataFrame()\n", + "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws['globalid'] = 'dummy_globalid_hws_' + gdf_hws.index.astype(str)\n", + "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "\n", + "delfland['streefpeil'] = pd.concat([streefpeil_hws, delfland['streefpeil']])\n", + "delfland['streefpeil'] = gpd.GeoDataFrame(delfland['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "3634cbd6-d698-460b-95c3-0737d2d12388", + "metadata": {}, + "source": [ + "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d8a24a33-7382-4fea-b45e-950dffb59f2c", + "metadata": {}, + "outputs": [], + "source": [ + "# Create buffer polygon\n", + "buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how='intersection', keep_geom_type=True)\n", + "buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how='difference', keep_geom_type=True)\n", + "buffer_polygon = gpd.overlay(buffer_polygon, delfland['peilgebied'], how='difference', keep_geom_type=True)" + ] + }, + { + "cell_type": "markdown", + "id": "5a7d781e-3fe5-4239-b8c1-5f61d4b87460", + "metadata": {}, + "source": [ + "## Add buffer to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e22637f0-8fdd-4971-b602-7cf4bed8584a", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "buffer_polygon['globalid'] = 'dummy_globalid_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['code'] = 'dummy_code_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['nen3610id'] = 'dummy_nen3610id_buffer_1' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['peilgebied_cat'] = 2\n", + "\n", + "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "delfland['peilgebied'] = pd.concat([buffer_polygon, delfland['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a40dac33-9a57-4a17-8303-89836afbc8ed", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_buffer = pd.DataFrame()\n", + "streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "streefpeil_buffer['globalid'] = ['dummy_globalid_buffer_1']\n", + "streefpeil_buffer['geometry'] = [None]\n", + "\n", + "\n", + "delfland['streefpeil'] = pd.concat([streefpeil_buffer, delfland['streefpeil']])\n", + "delfland['streefpeil'] = gpd.GeoDataFrame(delfland['streefpeil'])\n", + "\n", + "# Fix\n", + "delfland['streefpeil']['waterhoogte'] = delfland['streefpeil']['waterhoogte'].replace('N/A', np.nan)\n", + "delfland['streefpeil']['waterhoogte'] = pd.to_numeric(delfland['streefpeil']['waterhoogte'])" + ] + }, + { + "cell_type": "markdown", + "id": "52f756f2-cf33-408a-9104-4f7d95a5d4eb", + "metadata": {}, + "source": [ + "## Write output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "38b5a11a-bf29-4958-af68-baab619e5e51", + "metadata": {}, + "outputs": [], + "source": [ + "for key in delfland.keys(): \n", + " print(key)\n", + " delfland[str(key)].to_file(f'{output_folder}/{waterschap}.gpkg', layer = str(key), driver='GPKG')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:stable]", + "language": "python", + "name": "conda-env-stable-py" + }, + "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.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb new file mode 100644 index 0000000..b46fd0c --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb @@ -0,0 +1,686 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "690952c5-5037-476a-a660-d54fec614748", + "metadata": {}, + "source": [ + "# Rijnland" + ] + }, + { + "cell_type": "markdown", + "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "metadata": {}, + "source": [ + "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", + "- peilgebied_cat = 0 -> peilgebied\n", + "- peigelbied_cat = 1 -> RHWS (boezem)\n", + "- peilgebied_cat = 2 -> NHWS " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import numpy as np\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from general_functions import *" + ] + }, + { + "cell_type": "markdown", + "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "metadata": {}, + "source": [ + "## Rijnland" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'Rijnland'\n", + "\n", + "data_path = f\"../projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", + "\n", + "# Waterschaps boundaries\n", + "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "# Hoofdwatersysteem boundaries\n", + "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "# Buffer boundaries\n", + "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_rijnland.gpkg\"\n", + "# Output folder\n", + "output_folder = f\"./Waterschappen/{waterschap}\"" + ] + }, + { + "cell_type": "markdown", + "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "metadata": {}, + "source": [ + "### Load Files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "metadata": {}, + "outputs": [], + "source": [ + "# Load HHNK files\n", + "Rijnland = read_gpkg_layers(gpkg_path = data_path, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'hydroobject',\n", + " 'duikersifonhevel',\n", + " 'peilgebied', \n", + " 'streefpeil',\n", + " ])\n", + "Rijnland['peilgebied'] = Rijnland['peilgebied'].to_crs('EPSG:28992')\n", + "\n", + "# Load waterschap boundaries\n", + "gdf_grens = gpd.read_file(grens_path)\n", + "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", + "gdf_grens = gdf_grens.set_index('waterschap')\n", + "\n", + "# Load hws\n", + "gdf_hws = gpd.read_file(hws_path)\n", + "\n", + "# Load buffer\n", + "gdf_buffer = gpd.read_file(buffer_path)" + ] + }, + { + "cell_type": "markdown", + "id": "623a0316-463e-444e-af95-d409c962fd21", + "metadata": {}, + "source": [ + "## Select waterschap boundaries and clip hws layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "98c82db0-4036-4ffa-ae1b-4400f5c28a58", + "metadata": {}, + "outputs": [], + "source": [ + "# Select boundaries HH Amstel, Gooi en Vecht\n", + "gdf_grens = gdf_grens.loc[['HH van Rijnland']]\n", + "\n", + "# Use waterschap boudnaries to clip HWS layer\n", + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + ] + }, + { + "cell_type": "markdown", + "id": "240d4f27-3149-49db-82c2-aeb208b8bdb8", + "metadata": {}, + "source": [ + "## Peilgebied and HWS layer overlap:\n", + "1. Identify the overlapping areas\n", + "2. Clip\n", + "3. Calculate overlapping area percentage\n", + "4. Filter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "08cf410b-78c1-47ab-b32c-e0ed60ebd7ec", + "metadata": {}, + "outputs": [], + "source": [ + "# Step 1: Identify the Overlapping Areas and clip\n", + "overlaps = gpd.overlay(Rijnland['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "\n", + "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", + "non_overlapping_peilgebied = gpd.overlay(Rijnland['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", + " \n", + "# Step 3: Calculate Area Percentages\n", + "# Calculate the area of overlaps\n", + "overlaps['overlap_area'] = overlaps.area\n", + "\n", + "# Step 4: Filter based on area Area Percentages\n", + "minimum_area = 20000\n", + "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", + "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "overlap_ids = overlap_ids.globalid.to_list()\n", + "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + ] + }, + { + "cell_type": "markdown", + "id": "c9739ed5-7eaa-4255-bf5d-04d419530de8", + "metadata": {}, + "source": [ + "## Create peilgebied_cat column" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "73f6c0f2-8f3c-4b63-a36a-508bd0c0f1ce", + "metadata": {}, + "outputs": [], + "source": [ + "# Add occurence to geodataframe\n", + "peilgebieden_cat = []\n", + "\n", + "for index, row in Rijnland['peilgebied'].iterrows():\n", + " \n", + " if row.code == 'dummy_code_peilgebied_18207':\n", + " peilgebieden_cat.append(1)\n", + " print('yes')\n", + " elif row.code == 'dummy_code_peilgebied_18322':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'dummy_code_peilgebied_18155':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'dummy_code_peilgebied_18161':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'dummy_code_peilgebied_19451':\n", + " peilgebieden_cat.append(2)\n", + " else:\n", + " peilgebieden_cat.append(0)\n", + " \n", + "# Add new column and drop old HWS_BZM column\n", + "Rijnland['peilgebied']['peilgebied_cat'] = peilgebieden_cat" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4d46f98a-f363-4b88-8c48-1e3ec421f9f7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "ca30ba30-617e-4263-9c3c-ebd93b42ac08", + "metadata": {}, + "source": [ + "## Add rhws to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3315f190-afef-4ed5-ae4b-3f7aa3ec6df2", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "gdf_rhws['globalid'] = 'dummy_globalid_rhws_' + gdf_rhws.index.astype(str)\n", + "gdf_rhws['code'] = 'dummy_code_nhws_' + gdf_rhws.index.astype(str)\n", + "gdf_rhws['nen3610id'] = 'dummy_nen3610id_rhws_' + gdf_rhws.index.astype(str)\n", + "gdf_rhws['peilgebied_cat'] = 1\n", + "\n", + "gdf_rhws = gdf_rhws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "Rijnland['peilgebied'] = pd.concat([gdf_rhws, AVG['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dd6ea3c8-c159-43b9-bd28-b8cd54d790b1", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_hws = pd.DataFrame()\n", + "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_rhws)\n", + "streefpeil_hws['globalid'] = 'dummy_globalid_rhws_' + gdf_rhws.index.astype(str)\n", + "streefpeil_hws['geometry'] = [None]* len(gdf_rhws)\n", + "\n", + "Rijnland['streefpeil'] = pd.concat([streefpeil_hws, Rijnland['streefpeil']])\n", + "Rijnland['streefpeil'] = gpd.GeoDataFrame(Rijnland['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "a23b8673-850f-4c3a-a1d2-d2a3aa148a7d", + "metadata": {}, + "source": [ + "## Add nhws to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8661eed7-0552-4f93-acad-62f1af2482d9", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['peilgebied_cat'] = 2\n", + "\n", + "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "Rijnland['peilgebied'] = pd.concat([gdf_hws, Rijnland['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7dd6604c-fe9e-4414-a477-d68978cf4c22", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_hws = pd.DataFrame()\n", + "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "\n", + "Rijnland['streefpeil'] = pd.concat([streefpeil_hws, Rijnland['streefpeil']])\n", + "Rijnland['streefpeil'] = gpd.GeoDataFrame(Rijnland['streefpeil'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bef23083-aaaa-409c-8527-46b5db303076", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0ce0e159-be7d-477e-8b4a-211698dd0693", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "be3fcd61-67eb-418b-8723-28738d034f9d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "931f83ff-36e4-47e4-a7df-281e375e6c51", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3dafe764-dc08-4444-9902-4c3b118ee4c7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "16c0af56-69e1-4e4a-b74a-9fe80faacecc", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4b37a5f6-f2ba-40c7-9111-082a2afd2ed2", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f7ec3300-8d06-403c-bb5e-41a6de329b2d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e0f978d1-4d00-4595-a62d-5503f320b6d7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2f09ef95-f0ff-4216-ac2e-a5b6a05b1ac0", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5fdfe9a6-21f8-41e7-8e5e-f1a9a91147d3", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "5556d211-e92e-4ba3-85c2-4ff9bd33fbeb", + "metadata": {}, + "source": [ + "### Select waterschap boundaries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", + "metadata": {}, + "outputs": [], + "source": [ + "# Select boundaries HH Amstel, Gooi en Vecht\n", + "gdf_grens = gdf_grens.loc[['HH van Rijnland']]" + ] + }, + { + "cell_type": "markdown", + "id": "3634cbd6-d698-460b-95c3-0737d2d12388", + "metadata": {}, + "source": [ + "### Create inverse layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e183a1dd-c4dc-4518-8b1b-6052b55b547d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Remove mixed geomtypes (lines)\n", + "data = []\n", + "\n", + "for index, row in Rijnland['peilgebied'].iterrows():\n", + "# print(row.geometry.geom_type)\n", + " if row.geometry.geom_type != 'LineString':\n", + " data.append(row)\n", + " \n", + "Rijnland['peilgebied'] = gpd.GeoDataFrame(pd.concat(data, axis=1, ignore_index=True)).transpose()\n", + "Rijnland['peilgebied'] = Rijnland['peilgebied'].set_geometry(\"geometry\")\n", + "Rijnland['peilgebied'] = Rijnland['peilgebied'].set_crs('EPSG:28992')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d8a24a33-7382-4fea-b45e-950dffb59f2c", + "metadata": {}, + "outputs": [], + "source": [ + "# Select inverse of peilgebied\n", + "gdf_boezem_out = gpd.overlay(gdf_grens, Rijnland['peilgebied'].dissolve(), how='symmetric_difference')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9a19deee-0ce2-4928-abd7-462f5e218796", + "metadata": {}, + "outputs": [], + "source": [ + "# Store unfiltered layer\n", + "gdf_boezem_out.to_file(f'{output_folder}/boezem_unfiltered_{waterschap}.gpkg')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e22637f0-8fdd-4971-b602-7cf4bed8584a", + "metadata": {}, + "outputs": [], + "source": [ + "# Create separate polygons\n", + "gdf_boezem_out = gdf_boezem_out.explode()" + ] + }, + { + "cell_type": "markdown", + "id": "c37b2c7b-8123-4dfb-a4c5-5d2ba817ba68", + "metadata": {}, + "source": [ + "### Calculate area of polygons and filter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a85b50f7-bc55-4442-8564-102b227b855a", + "metadata": {}, + "outputs": [], + "source": [ + "# Calculate area of polygons\n", + "areas = []\n", + "\n", + "for index, row in gdf_boezem_out.iterrows():\n", + " areas.append(row.geometry.area)\n", + " \n", + "gdf_boezem_out['area'] = areas " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e9a0fb83-cd34-402f-85c7-5cc88970ddbe", + "metadata": {}, + "outputs": [], + "source": [ + "# filter based on area of polygons\n", + "gdf_boezem_out.sort_values(by='area').iloc[[-1]].to_file(f'{output_folder}/boezem_filter_lvl_1_{waterschap}.gpkg')\n", + "gdf_boezem_out.sort_values(by='area').iloc[[-2]].to_file(f'{output_folder}/boezem_filter_lvl_2_{waterschap}.gpkg')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "59084cce-306c-42d7-942a-57c680c99172", + "metadata": {}, + "outputs": [], + "source": [ + "# Store peilgebieden that do not connect properly\n", + "gdf_boezem_out.sort_values(by='area').iloc[:-1].to_file(f'{output_folder}/niet_goed_aansluitend_{waterschap}.gpkg')" + ] + }, + { + "cell_type": "markdown", + "id": "aaea472b-8336-4b94-899a-5fbcf9117b92", + "metadata": {}, + "source": [ + "### Add boezem when peilgebied is part of dm_netwerk" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "49bd0a1d-9b4b-4831-befd-050a288022ca", + "metadata": {}, + "outputs": [], + "source": [ + "# Load Boezem network file (DM_netwerk)\n", + "gdf_dm_netwerk = gpd.read_file(dm_netwerk_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "00f7a36e-416c-46f6-8656-b5f2aea6e3ef", + "metadata": {}, + "outputs": [], + "source": [ + "# Select the peilgebieden that intersect with DM-netwerk\n", + "gdf = gpd.overlay(Rijnland['peilgebied'], gdf_dm_netwerk, how='intersection')" + ] + }, + { + "cell_type": "markdown", + "id": "78286e27-fa00-4cb6-83fe-d8f3b8eee453", + "metadata": {}, + "source": [ + "### Add HWS_BZM flag to boezem polygons" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f90fe14-6bc8-46a3-aecf-72f5edee5c3e", + "metadata": {}, + "outputs": [], + "source": [ + "# Add occurence to geodataframe\n", + "boezems = []\n", + "\n", + "for index, row in Rijnland['peilgebied'].iterrows():\n", + " if row.nen3610id in gdf.nen3610id.values:\n", + " boezems.append(True)\n", + " else:\n", + " boezems.append(False) \n", + " \n", + "Rijnland['peilgebied']['HWS_BZM'] = boezems" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5ab078c0-cca9-43f1-b9e3-2d86aec2a65c", + "metadata": {}, + "outputs": [], + "source": [ + "for key in Rijnland.keys(): \n", + " print(key)\n", + " Rijnland[str(key)].to_file(f'{output_folder}/{waterschap}_bzm.gpkg', layer = str(key), driver='GPKG')" + ] + }, + { + "cell_type": "markdown", + "id": "c9ece8fc-5ed3-4c6e-810e-ce5ce35dc6b6", + "metadata": {}, + "source": [ + "### Merge boezem and peilgebied layers" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2184f2b9-7383-41d8-a994-1986465076c8", + "metadata": {}, + "outputs": [], + "source": [ + "# Select globalids of boezem polygons\n", + "bzm_id = Rijnland['peilgebied'].loc[Rijnland['peilgebied']['HWS_BZM'] == True].globalid\n", + "\n", + "# Match globalids with streefpeil layer globalids\n", + "bzm_waterhoogte = Rijnland['streefpeil'].loc[Rijnland['streefpeil']['globalid'].isin(bzm_id)]\n", + "\n", + "print(len(bzm_id))\n", + "print(len(bzm_waterhoogte))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "024410a5-e3a9-4992-8c58-f63d78559a05", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem layer\n", + "boezem = gdf_boezem_out.sort_values(by='area').iloc[[-1]]\n", + "\n", + "boezem['code'] = 'dummy_code_999999'\n", + "boezem['globalid'] = 'dummy_globalid_999999'\n", + "boezem['nen3610id'] = 'dummy_nen3610id_peilgebied_999999'\n", + "boezem['HWS_BZM'] = True\n", + "boezem = boezem[['code', 'globalid', 'nen3610id', 'HWS_BZM', 'geometry']]\n", + "\n", + "# Create boezem streefpeil layer\n", + "streefpeil_bzm = pd.DataFrame()\n", + "streefpeil_bzm['waterhoogte'] = [None]\n", + "streefpeil_bzm['globalid'] = ['dummy_globalid_999999']\n", + "streefpeil_bzm['geometry'] = [None]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fc055918-71f0-48b2-923a-addb9541fff9", + "metadata": {}, + "outputs": [], + "source": [ + "# Merge boezem layer with peilgebieden\n", + "Rijnland['peilgebied'] = gpd.GeoDataFrame(pd.concat([boezem, Rijnland['peilgebied']], ignore_index=True) )\n", + "Rijnland['streefpeil'] = gpd.GeoDataFrame(pd.concat([streefpeil_bzm, Rijnland['streefpeil']], ignore_index=True) )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a83e59e4-4333-485d-906c-ba95793c19bc", + "metadata": {}, + "outputs": [], + "source": [ + "for key in Rijnland.keys(): \n", + " print(key)\n", + " Rijnland[str(key)].to_file(f'{output_folder}/{waterschap}.gpkg', layer = str(key), driver='GPKG')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ba2624c6-10a1-4bec-a9ca-d287306f223d", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:stable]", + "language": "python", + "name": "conda-env-stable-py" + }, + "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.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb new file mode 100644 index 0000000..6bb03c2 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb @@ -0,0 +1,514 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "690952c5-5037-476a-a660-d54fec614748", + "metadata": {}, + "source": [ + "# Wetterskip" + ] + }, + { + "cell_type": "markdown", + "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "metadata": {}, + "source": [ + "This script adds a new column \"peilgebied_cat\" and make sure the peilgebieden neatly match the HWS layer (Daniel):\n", + "- peilgebied_cat = 0 -> peilgebied\n", + "- peigelbied_cat = 1 -> boezem\n", + "- peilgebied_cat = 2 -> HWS" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import numpy as np\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from general_functions import *" + ] + }, + { + "cell_type": "markdown", + "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "metadata": {}, + "source": [ + "## Set Paths" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'Wetterskip'\n", + "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", + "\n", + "# Waterschaps boundaries\n", + "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "# Hoofdwatersysteem boundaries\n", + "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "# Buffer boundaries\n", + "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_wetterskip.gpkg\"\n", + "# Output folder\n", + "output_folder = f\"./Waterschappen/{waterschap}\"\n", + "# Dm netwerk\n", + "boezem_path = \"../projects/4750_30/Data_overig/DM_netwerk/waterschapsgrenzen_boezem_netwerk.shp\"" + ] + }, + { + "cell_type": "markdown", + "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "metadata": {}, + "source": [ + "## Load Files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "metadata": {}, + "outputs": [], + "source": [ + "# Load HHNK files\n", + "Wetterskip = read_gpkg_layers(gpkg_path = data_path, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'hydroobject',\n", + " 'duikersifonhevel',\n", + " 'peilgebied', \n", + " 'streefpeil',\n", + " ])\n", + "Wetterskip['peilgebied'] = Wetterskip['peilgebied'].to_crs('EPSG:28992')\n", + "\n", + "# Load waterschap boundaries\n", + "gdf_grens = gpd.read_file(grens_path)\n", + "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", + "gdf_grens = gdf_grens.set_index('waterschap')\n", + "\n", + "# Load hws\n", + "gdf_hws = gpd.read_file(hws_path)\n", + "\n", + "# Load buffer\n", + "gdf_buffer = gpd.read_file(buffer_path)\n", + "\n", + "gdf_rhws= gpd.read_file(boezem_path)" + ] + }, + { + "cell_type": "markdown", + "id": "bc4a7b18-311d-4a29-ba13-df3d587e60b2", + "metadata": {}, + "source": [ + "## Select waterschap boundaries and clip hws layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b5eae4c4-2d5a-4678-a5af-56e3626d29ec", + "metadata": {}, + "outputs": [], + "source": [ + "# Select boundaries HH Amstel, Gooi en Vecht\n", + "gdf_grens = gdf_grens.loc[['Wetterskip Fryslân']]\n", + "\n", + "# Use waterschap boudnaries to clip HWS layer\n", + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + ] + }, + { + "cell_type": "markdown", + "id": "f141d0fe-6f1f-471f-acf1-4f11522bd15d", + "metadata": {}, + "source": [ + "## Check Peilgebied and HWS layer overlap:\n", + "1. Identify the overlapping areas\n", + "2. Clip\n", + "3. Calculate overlapping area percentage\n", + "4. Filter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "56faab44-3fda-43c4-8426-197fbb6c63a8", + "metadata": {}, + "outputs": [], + "source": [ + "# Step 1: Identify the Overlapping Areas and clip\n", + "overlaps = gpd.overlay(Wetterskip['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "\n", + "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", + "non_overlapping_peilgebied = gpd.overlay(Wetterskip['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", + " \n", + "# Step 3: Calculate Area Percentages\n", + "# Calculate the area of overlaps\n", + "overlaps['overlap_area'] = overlaps.area\n", + "\n", + "# Step 4: Filter based on area Area Percentages\n", + "minimum_area = 500\n", + "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", + "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "overlap_ids = overlap_ids.globalid.to_list()\n", + "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + ] + }, + { + "cell_type": "markdown", + "id": "9d4b936d-e24d-46b0-9c04-429290c39ade", + "metadata": {}, + "source": [ + "## Create peilgebied_cat column" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6ad958c4-01ce-4fcb-9170-fa8bf0f7c7f0", + "metadata": {}, + "outputs": [], + "source": [ + "# Add to geodataframe\n", + "peilgebieden_cat = []\n", + "\n", + "for index, row in Wetterskip['streefpeil'].iterrows():\n", + " \n", + " if row.waterhoogte == -0.52:\n", + " peilgebieden_cat.append(1)\n", + " else:\n", + " peilgebieden_cat.append(0)\n", + " \n", + "Wetterskip['peilgebied']['peilgebied_cat'] = peilgebieden_cat" + ] + }, + { + "cell_type": "markdown", + "id": "2187ad3d-4399-42b1-9d50-5183ff374326", + "metadata": {}, + "source": [ + "## Add nhws to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "28509a06-79c9-4e68-9be7-dcf654494c90", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['peilgebied_cat'] = 2\n", + "\n", + "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "Wetterskip['peilgebied'] = pd.concat([gdf_hws, Wetterskip['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "37bec5bb-70dd-4789-9f92-bcfcd571d790", + "metadata": {}, + "outputs": [], + "source": [ + "# update streefpeil dict key\n", + "streefpeil_hws = pd.DataFrame()\n", + "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "\n", + "Wetterskip['streefpeil'] = pd.concat([streefpeil_hws, Wetterskip['streefpeil']])\n", + "Wetterskip['streefpeil'] = gpd.GeoDataFrame(Wetterskip['streefpeil'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "535a4c9b-0393-499f-8db2-fbde84459a85", + "metadata": {}, + "outputs": [], + "source": [ + "Wetterskip.keys()" + ] + }, + { + "cell_type": "markdown", + "id": "c2499b90-db91-49b7-9dc5-f43d2de46e3f", + "metadata": {}, + "source": [ + "### Create buffer polygon between NHWS and peilgebied/RHWS" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f3ee584a-4ac9-47fd-8006-4be11e9d02a4", + "metadata": {}, + "outputs": [], + "source": [ + "buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", + "buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", + "buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(Wetterskip['peilgebied'].geometry.tolist()))\n", + "\n", + "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "buffer_polygon = buffer_polygon.set_geometry(0)\n", + "buffer_polygon = buffer_polygon.dissolve()\n", + "buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "buffer_polygon = buffer_polygon.set_geometry('geometry')\n", + "buffer_polygon = buffer_polygon.set_crs('EPSG:28992')" + ] + }, + { + "cell_type": "markdown", + "id": "a796dae1-e578-45c2-abc4-bd0f660f2175", + "metadata": {}, + "source": [ + "### Add buffer to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "42af7580-3cdf-4d7c-9204-50bec3dc088d", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + '1'\n", + "buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['peilgebied_cat'] = 2\n", + "buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "Wetterskip['peilgebied'] = pd.concat([buffer_polygon, Wetterskip['peilgebied']])\n", + "Wetterskip['peilgebied'] = gpd.GeoDataFrame(Wetterskip['peilgebied'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bc785a36-81a6-4c79-affc-a0938d78beb5", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_buffer = pd.DataFrame()\n", + "streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", + "streefpeil_buffer['geometry'] = [None]\n", + "\n", + "\n", + "Wetterskip['streefpeil'] = pd.concat([streefpeil_buffer, Wetterskip['streefpeil']])\n", + "Wetterskip['streefpeil'] = gpd.GeoDataFrame(Wetterskip['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "ffb583ff-6707-48af-b3db-b35465eb949e", + "metadata": {}, + "source": [ + "## Wetterskip data contains many duplicate peilgebieden" + ] + }, + { + "cell_type": "markdown", + "id": "6ca97726-e159-4cae-be86-b99232a80d56", + "metadata": {}, + "source": [ + "### Calculate polygons that overlap with more than 90 % of their area" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c234dbaf-5345-442e-9fe4-d458a8ed225c", + "metadata": { + "jupyter": { + "outputs_hidden": true + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from itertools import combinations\n", + "gdf = Wetterskip['peilgebied']\n", + "gdf = test\n", + "gdf = gdf[6:]\n", + "# Initialize a list to store index pairs with more than 90% overlap\n", + "overlapping_pairs = []\n", + "\n", + "# Iterate through each unique pair of geometries\n", + "for idx1, idx2 in combinations(gdf.index, 2):\n", + " print(f'Processing {idx1} out of {len(gdf)}...', end='\\r')\n", + " geom1 = gdf.at[idx1, 'geometry']\n", + " geom2 = gdf.at[idx2, 'geometry']\n", + "\n", + " # Calculate intersection\n", + " intersection = geom1.intersection(geom2)\n", + " intersection_area = intersection.area\n", + "\n", + " # Calculate original areas\n", + " area1 = geom1.area\n", + " area2 = geom2.area\n", + "\n", + " # Calculate intersection percentage for each geometry\n", + " intersection_percentage1 = (intersection_area / area1) * 100\n", + " intersection_percentage2 = (intersection_area / area2) * 100\n", + "\n", + " # Check if both geometries overlap more than 90%\n", + " if intersection_percentage1 > 90 and intersection_percentage2 > 90:\n", + " print((idx1, idx2))\n", + " overlapping_pairs.append((idx1, idx2))\n", + "\n", + "idx1s = []\n", + "idx2s = []\n", + "\n", + "glob_1s = []\n", + "glob_2s = []\n", + "\n", + "\n", + "for idx1, idx2 in overlapping_pairs:\n", + " \n", + " idx1s.append(idx1)\n", + " idx2s.append(idx2)\n", + " \n", + " glob_1s.append(gdf.iloc[idx1].globalid)\n", + " glob_2s.append(gdf.iloc[idx2].globalid)\n", + " \n", + " \n", + "df = pd.DataFrame()\n", + "df['idx1'] = idx1s\n", + "df['idx2'] = idx2s\n", + "df['globalid_1'] = glob_1s\n", + "df['globalid_2'] = glob_2s\n", + "\n", + "df.to_csv('overlapping_wetterskip.csv')" + ] + }, + { + "cell_type": "markdown", + "id": "3e377aaf-adcd-4a0d-b225-48705f0a7f97", + "metadata": {}, + "source": [ + "### Create list of duplicates for removal" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1d8b87a6-2e74-4b0e-9a2e-40734e38ec77", + "metadata": {}, + "outputs": [], + "source": [ + "numbers_to_remove = []\n", + "\n", + "# Go loop unique index values\n", + "for number in df['idx1'].unique():\n", + " if number in numbers_to_remove:\n", + " continue\n", + " \n", + " # Find all combinations\n", + " associated_idx2 = df[df['idx1'] == number]['idx2'].tolist()\n", + " # Append combinations\n", + " numbers_to_remove.extend(associated_idx2)\n", + "\n", + "# Remove duplicates using set operation\n", + "numbers_to_remove = list(set(numbers_to_remove))" + ] + }, + { + "cell_type": "markdown", + "id": "0f8737e0-aea1-49fb-8a48-8a8afc52f3f8", + "metadata": {}, + "source": [ + "### Remove duplicates" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "41cc52dc-a5ab-4879-ba6d-95edc7130479", + "metadata": {}, + "outputs": [], + "source": [ + "Wetterskip['peilgebied'] = Wetterskip['peilgebied'][~Wetterskip['peilgebied'].index.isin(numbers_to_remove)]\n", + "Wetterskip['streefpeil'] = Wetterskip['streefpeil'][~Wetterskip['streefpeil'].index.isin(numbers_to_remove)]" + ] + }, + { + "cell_type": "markdown", + "id": "ed9019dc-6278-4761-b30b-2a7f9b3757b9", + "metadata": {}, + "source": [ + "## Store data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "65bafa4a-7c96-4fae-870d-821aa638d322", + "metadata": {}, + "outputs": [], + "source": [ + "for key in Wetterskip.keys(): \n", + " print(key)\n", + " Wetterskip[str(key)].to_file(f'{output_folder}/{waterschap}.gpkg', layer = str(key), driver='GPKG')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d305c771-459d-4240-b727-0a7f5ee2b409", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e0b6031e-e572-48b6-aff4-ffb474ddc045", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:stable]", + "language": "python", + "name": "conda-env-stable-py" + }, + "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.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb new file mode 100644 index 0000000..7f07e32 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb @@ -0,0 +1,377 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "690952c5-5037-476a-a660-d54fec614748", + "metadata": { + "tags": [] + }, + "source": [ + "# Zuiderzeeland" + ] + }, + { + "cell_type": "markdown", + "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "metadata": {}, + "source": [ + "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer:\n", + "- peilgebied_cat = 0 -> peilgebied\n", + "- peigelbied_cat = 1 -> RHWS (boezem)\n", + "- peilgebied_cat = 2 -> NHWS " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import numpy as np\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from general_functions import *" + ] + }, + { + "cell_type": "markdown", + "id": "b2434b6d-2898-45f8-a5cb-fbb9c2c2e77b", + "metadata": {}, + "source": [ + "## Zuiderzeeland" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'Zuiderzeeland'\n", + "\n", + "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", + "\n", + "# Waterschaps boundaries\n", + "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "# Hoofdwatersysteem boundaries\n", + "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "# Buffer boundaries\n", + "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_zuiderzeeland.gpkg\"\n", + "# Output folder\n", + "output_folder = f\"./Waterschappen/{waterschap}\"" + ] + }, + { + "cell_type": "markdown", + "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "metadata": {}, + "source": [ + "### Load Files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "metadata": {}, + "outputs": [], + "source": [ + "# Load HHNK files\n", + "Zuiderzeeland = read_gpkg_layers(gpkg_path = data_path, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'hydroobject',\n", + " 'duikersifonhevel',\n", + " 'peilgebied', \n", + " 'streefpeil',\n", + " ])\n", + "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].to_crs('EPSG:28992')\n", + "\n", + "# Load waterschap boundaries\n", + "gdf_grens = gpd.read_file(grens_path)\n", + "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", + "gdf_grens = gdf_grens.set_index('waterschap')\n", + "\n", + "# Load hws\n", + "gdf_hws = gpd.read_file(hws_path)\n", + "\n", + "# Load buffer\n", + "gdf_buffer = gpd.read_file(buffer_path)" + ] + }, + { + "cell_type": "markdown", + "id": "b37e2158-618d-4dd0-a576-7cb32e41c0d2", + "metadata": {}, + "source": [ + "## Select waterschap boundaries and clip hws layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c5e7495b-8517-4729-b586-7e1913dbbd83", + "metadata": {}, + "outputs": [], + "source": [ + "# Select boundaries HH Amstel, Gooi en Vecht\n", + "gdf_grens = gdf_grens.loc[['Waterschap Zuiderzeeland']]\n", + "\n", + "# Use waterschap boudnaries to clip HWS layer\n", + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + ] + }, + { + "cell_type": "markdown", + "id": "b93b71dd-7176-42ae-bf4e-f31a429b229a", + "metadata": {}, + "source": [ + "## Peilgebied and HWS layer overlap:\n", + "1. Identify the overlapping areas\n", + "2. Clip\n", + "3. Calculate overlapping area percentage\n", + "4. Filter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76cd16f7-c2cd-4ef7-b478-42359e0f8735", + "metadata": {}, + "outputs": [], + "source": [ + "# Step 1: Identify the Overlapping Areas and clip\n", + "overlaps = gpd.overlay(Zuiderzeeland['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "\n", + "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", + "non_overlapping_peilgebied = gpd.overlay(Zuiderzeeland['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", + " \n", + "# Step 3: Calculate Area Percentages\n", + "# Calculate the area of overlaps\n", + "overlaps['overlap_area'] = overlaps.area\n", + "\n", + "# Step 4: Filter based on area Area Percentages\n", + "minimum_area = 100\n", + "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", + "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "overlap_ids = overlap_ids.globalid.to_list()\n", + "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7f16af4-fc46-4533-93b6-ee52d6d7687c", + "metadata": {}, + "outputs": [], + "source": [ + "# Add occurence to geodataframe\n", + "peilgebieden_cat = []\n", + "\n", + "for index, row in Zuiderzeeland['peilgebied'].iterrows():\n", + " \n", + " if row.code == 'dummy_code_peilgebied_18207':\n", + " peilgebieden_cat.append(1)\n", + " print('yes')\n", + " elif row.code == 'dummy_code_peilgebied_18322':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'dummy_code_peilgebied_18155':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'dummy_code_peilgebied_18161':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'dummy_code_peilgebied_19451':\n", + " peilgebieden_cat.append(2)\n", + " else:\n", + " peilgebieden_cat.append(0)\n", + " \n", + "\n", + " \n", + "# Add new column and drop old HWS_BZM column\n", + "Zuiderzeeland['peilgebied']['peilgebied_cat'] = peilgebieden_cat\n", + "# Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].drop(columns=['HWS_BZM'])" + ] + }, + { + "cell_type": "markdown", + "id": "5dcaab7b-5abe-431a-b890-9d19be3254f2", + "metadata": {}, + "source": [ + "## Add nhws to ['peilgebied']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ec5c9dde-2698-4a73-9fce-266a3c5e96d7", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['peilgebied_cat'] = 2\n", + "\n", + "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "Zuiderzeeland['peilgebied'] = pd.concat([gdf_hws, Zuiderzeeland['peilgebied']])" + ] + }, + { + "cell_type": "markdown", + "id": "51415106-fb75-4dad-97ba-4b046cb1f545", + "metadata": {}, + "source": [ + "## Add HWS to ['streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9e61effa-42ae-46d7-879e-d7fa928ebd8d", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_hws = pd.DataFrame()\n", + "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "\n", + "Zuiderzeeland['streefpeil'] = pd.concat([streefpeil_hws, Zuiderzeeland['streefpeil']])\n", + "Zuiderzeeland['streefpeil'] = gpd.GeoDataFrame(Zuiderzeeland['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "a1c16adb-759d-41ae-b864-513aaafff8ac", + "metadata": {}, + "source": [ + "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1317fbfd-b713-4172-b1b0-c678c4e8d986", + "metadata": {}, + "outputs": [], + "source": [ + "buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", + "buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", + "buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(Zuiderzeeland['peilgebied'].geometry.tolist()))\n", + "\n", + "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "buffer_polygon = buffer_polygon.set_geometry(0)\n", + "buffer_polygon = buffer_polygon.dissolve()\n", + "buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "buffer_polygon = buffer_polygon.set_geometry('geometry')\n", + "buffer_polygon = buffer_polygon.set_crs('EPSG:28992')" + ] + }, + { + "cell_type": "markdown", + "id": "d7ca89cf-c74c-4c88-9c69-4dfdca718e54", + "metadata": { + "tags": [] + }, + "source": [ + "## Add buffer to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f5033a40-2967-4cc1-9772-fef2be4169b0", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['peilgebied_cat'] = 2\n", + "\n", + "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "Zuiderzeeland['peilgebied'] = pd.concat([buffer_polygon, Zuiderzeeland['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "970ab69a-6f3a-46ce-9882-aded5f98a39f", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_buffer = pd.DataFrame()\n", + "streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", + "streefpeil_buffer['geometry'] = [None]\n", + "\n", + "\n", + "Zuiderzeeland['streefpeil'] = pd.concat([streefpeil_buffer, Zuiderzeeland['streefpeil']])\n", + "Zuiderzeeland['streefpeil'] = gpd.GeoDataFrame(Zuiderzeeland['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "31b4ba32-7f34-49a6-b256-966c24faf68a", + "metadata": {}, + "source": [ + "## Store output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9e589e19-a137-418b-b2a7-5b0c778766a6", + "metadata": {}, + "outputs": [], + "source": [ + "Zuiderzeeland['peilgebied'].globalid.is_unique" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eb0ed312-2aef-41f6-83c7-ead0e630aa39", + "metadata": {}, + "outputs": [], + "source": [ + "for key in Zuiderzeeland.keys(): \n", + " print(key)\n", + " Zuiderzeeland[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:stable]", + "language": "python", + "name": "conda-env-stable-py" + }, + "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.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb new file mode 100644 index 0000000..ce740f2 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb @@ -0,0 +1,370 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "690952c5-5037-476a-a660-d54fec614748", + "metadata": {}, + "source": [ + "# Hollandse Delta" + ] + }, + { + "cell_type": "markdown", + "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "metadata": {}, + "source": [ + "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", + "- peilgebied_cat = 0 -> peilgebied\n", + "- peigelbied_cat = 1 -> RHWS (boezem)\n", + "- peilgebied_cat = 2 -> NHWS " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import numpy as np\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from general_functions import *" + ] + }, + { + "cell_type": "markdown", + "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "metadata": {}, + "source": [ + "## Delfland" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'Hollandse_Delta'\n", + "waterschap2 = 'HD'\n", + "\n", + "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", + "\n", + "# Waterschaps boundaries\n", + "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "# Hoofdwatersysteem boundaries\n", + "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "# Buffer boundaries\n", + "buffer_path = f\"../projects/4750_30/Data_overig/HWS/hws_buffer_hd.gpkg\"\n", + "# Output folder\n", + "output_folder = f\"./Waterschappen/{waterschap}\"" + ] + }, + { + "cell_type": "markdown", + "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "metadata": {}, + "source": [ + "### Load Files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "metadata": {}, + "outputs": [], + "source": [ + "# Load HHNK files\n", + "HD = read_gpkg_layers(gpkg_path = data_path, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'hydroobject',\n", + " 'duikersifonhevel',\n", + " 'peilgebied', \n", + " 'streefpeil',\n", + " ])\n", + "HD['peilgebied'] = HD['peilgebied'].to_crs('EPSG:28992')\n", + "\n", + "# Load waterschap boundaries\n", + "gdf_grens = gpd.read_file(grens_path)\n", + "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", + "gdf_grens = gdf_grens.set_index('waterschap')\n", + "\n", + "# Load hws\n", + "gdf_hws = gpd.read_file(hws_path)\n", + "\n", + "# Load buffer\n", + "gdf_buffer = gpd.read_file(buffer_path)\n", + "gdf_buffer = gdf_buffer.to_crs('EPSG:28992')\n", + "gdf_buffer = gdf_buffer.dissolve()" + ] + }, + { + "cell_type": "markdown", + "id": "5556d211-e92e-4ba3-85c2-4ff9bd33fbeb", + "metadata": {}, + "source": [ + "## Select waterschap boundaries and clip hws layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Select boundaries HH Amstel, Gooi en Vecht\n", + "gdf_grens = gdf_grens.loc[['Waterschap Hollandse Delta']]\n", + "\n", + "# Use waterschap boudnaries to clip HWS layer\n", + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + ] + }, + { + "cell_type": "markdown", + "id": "d0ed9e9b-258b-4f16-8bcb-b9d412a8c8c3", + "metadata": {}, + "source": [ + "## Peilgebied and HWS layer overlap:\n", + "1. Identify the overlapping areas\n", + "2. Clip\n", + "3. Calculate overlapping area percentage\n", + "4. Filter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "05757b4b-2f8e-48a6-a76c-9e06e23f20da", + "metadata": {}, + "outputs": [], + "source": [ + "# Step 1: Identify the Overlapping Areas and clip\n", + "overlaps = gpd.overlay(HD['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "\n", + "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", + "non_overlapping_peilgebied = gpd.overlay(HD['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", + " \n", + "# Step 3: Calculate Area Percentages\n", + "# Calculate the area of overlaps\n", + "overlaps['overlap_area'] = overlaps.area\n", + "\n", + "# Step 4: Filter based on area Area Percentages\n", + "minimum_area = 500\n", + "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", + "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "overlap_ids = overlap_ids.globalid.to_list()\n", + "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + ] + }, + { + "cell_type": "markdown", + "id": "942d281a-aa46-4b57-af3a-f4e2df811b26", + "metadata": {}, + "source": [ + "## Create peilgebied_cat column" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5793dd3d-766d-46bd-811e-4c8b6e118d3a", + "metadata": {}, + "outputs": [], + "source": [ + "# Add occurence to geodataframe\n", + "peilgebieden_cat = []\n", + "\n", + "for index, row in HD['peilgebied'].iterrows():\n", + " \n", + " if row.code == 'Zuiderdiepboezem en havenkanaal Dirksland':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'Havenkanaal van Goedereede':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'Zoetwaterboezem':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'Kanaal door Voorne':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'Binnenbedijkte Maas':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'Boezemloozende door Strijensas':\n", + " peilgebieden_cat.append(1)\n", + " else:\n", + " peilgebieden_cat.append(0)\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d0e88867-184b-48b5-a10f-ba8816f10dcc", + "metadata": {}, + "outputs": [], + "source": [ + "# Add new column\n", + "HD['peilgebied']['peilgebied_cat'] = peilgebieden_cat" + ] + }, + { + "cell_type": "markdown", + "id": "8ab1e249-a9cc-4728-bfce-d9c965da18df", + "metadata": {}, + "source": [ + "## Add nhws to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e60dbbe9-1f27-4a71-b10b-1ecf3c53b060", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['peilgebied_cat'] = 2\n", + "\n", + "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "HD['peilgebied'] = pd.concat([gdf_hws, HD['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "03ff37c8-16cc-4cdc-9a1b-ea10f06ea630", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_hws = pd.DataFrame()\n", + "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "\n", + "HD['streefpeil'] = pd.concat([streefpeil_hws, HD['streefpeil']])\n", + "HD['streefpeil'] = gpd.GeoDataFrame(HD['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "9e2ea1a8-4a26-4515-9613-11cbd828c0d5", + "metadata": {}, + "source": [ + "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c4c448fb-3cb3-451c-aa17-d336f02deb6b", + "metadata": {}, + "outputs": [], + "source": [ + "# Create buffer polygon\n", + "buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how='intersection', keep_geom_type=True)\n", + "buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how='difference', keep_geom_type=True)\n", + "buffer_polygon = gpd.overlay(buffer_polygon, HD['peilgebied'], how='difference', keep_geom_type=True)" + ] + }, + { + "cell_type": "markdown", + "id": "eb233361-1e89-4bfa-b2f4-22d66155db58", + "metadata": {}, + "source": [ + "## Add buffer to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "75fc528f-5902-4a5d-bc7c-d0b700875832", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['peilgebied_cat'] = 2\n", + "\n", + "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "HD['peilgebied'] = pd.concat([buffer_polygon, HD['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b345f335-bc12-4e99-8272-9e47cc325021", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_buffer = pd.DataFrame()\n", + "streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", + "streefpeil_buffer['geometry'] = [None]\n", + "\n", + "\n", + "HD['streefpeil'] = pd.concat([streefpeil_buffer, HD['streefpeil']])\n", + "HD['streefpeil'] = gpd.GeoDataFrame(HD['streefpeil'])\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "dfea55d4-0bc9-485b-ac90-68b1dd8455b6", + "metadata": {}, + "source": [ + "## Store output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "70b4b337-44a9-4ef4-aee2-f7431aae720c", + "metadata": {}, + "outputs": [], + "source": [ + "for key in HD.keys(): \n", + " print(key)\n", + " HD[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:stable]", + "language": "python", + "name": "conda-env-stable-py" + }, + "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.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb new file mode 100644 index 0000000..6fddb55 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb @@ -0,0 +1,363 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "690952c5-5037-476a-a660-d54fec614748", + "metadata": {}, + "source": [ + "# HHNK" + ] + }, + { + "cell_type": "markdown", + "id": "2799e766-bbe4-4f8d-a780-051b36f773ae", + "metadata": {}, + "source": [ + "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", + "- peilgebied_cat = 0 -> peilgebied\n", + "- peigelbied_cat = 1 -> RHWS (boezem)\n", + "- peilgebied_cat = 2 -> NHWS " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import numpy as np\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from general_functions import *" + ] + }, + { + "cell_type": "markdown", + "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "metadata": {}, + "source": [ + "## Set Paths" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'HHNK'\n", + "waterschap2 = 'Noorderkwartier'\n", + "\n", + "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", + "\n", + "# Waterschaps boundaries\n", + "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "# Hoofdwatersysteem boundaries\n", + "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "# Buffer boundaries\n", + "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_hhnk.gpkg\"\n", + "# Output folder\n", + "output_folder = f\"./Waterschappen/{waterschap}\"" + ] + }, + { + "cell_type": "markdown", + "id": "25e2a7de-cb4b-4f6b-b2db-c675f481b939", + "metadata": {}, + "source": [ + "## Load files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "metadata": {}, + "outputs": [], + "source": [ + "# Load HHNK files\n", + "HHNK = read_gpkg_layers(gpkg_path = data_path, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'hydroobject',\n", + " 'duikersifonhevel',\n", + " 'peilgebied', \n", + " 'streefpeil',\n", + " ])\n", + "HHNK['peilgebied'] = HHNK['peilgebied'].to_crs('EPSG:28992')\n", + "\n", + "# Load waterschap boundaries\n", + "gdf_grens = gpd.read_file(grens_path)\n", + "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", + "gdf_grens = gdf_grens.set_index('waterschap')\n", + "\n", + "# Load hws\n", + "gdf_hws = gpd.read_file(hws_path)\n", + "\n", + "# Load buffer\n", + "gdf_buffer = gpd.read_file(buffer_path)" + ] + }, + { + "cell_type": "markdown", + "id": "1e7e929e-e302-4791-b4d2-3808d48cbb56", + "metadata": {}, + "source": [ + "## Select waterschap boundaries and clip hws layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", + "metadata": {}, + "outputs": [], + "source": [ + "# Select boundaries HH Amstel, Gooi en Vecht\n", + "gdf_grens = gdf_grens.loc[['HH Hollands Noorderkwartier']]\n", + "\n", + "# Use waterschap boudnaries to clip HWS layer\n", + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')\n", + "gdf_hws.plot()" + ] + }, + { + "cell_type": "markdown", + "id": "ab931fb8-1011-49e9-88c0-e4b1cb09b217", + "metadata": {}, + "source": [ + "## Peilgebied and HWS layer overlap:\n", + "1. Identify the overlapping areas\n", + "2. Clip\n", + "3. Calculate overlapping area percentage\n", + "4. Filter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f2740959-7a85-4947-950e-d8a64cb8ece2", + "metadata": {}, + "outputs": [], + "source": [ + "# Step 1: Identify the Overlapping Areas and clip\n", + "overlaps = gpd.overlay(HHNK['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "\n", + "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", + "non_overlapping_peilgebied = gpd.overlay(HHNK['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", + " \n", + "# Step 3: Calculate Area Percentages\n", + "# Calculate the area of overlaps\n", + "overlaps['overlap_area'] = overlaps.area\n", + "\n", + "# Step 4: Filter based on area Area Percentages\n", + "minimum_area = 20000\n", + "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", + "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "overlap_ids = overlap_ids.globalid.to_list()\n", + "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + ] + }, + { + "cell_type": "markdown", + "id": "37f2ee9b-d819-4d7b-92a1-49fe681b4380", + "metadata": {}, + "source": [ + "## Create peilgebied_cat column" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c5c819f1-dfae-4bf4-b14e-63902e433b1a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Add occurence to geodataframe\n", + "peilgebieden_cat = []\n", + "\n", + "for index, row in HHNK['peilgebied'].iterrows():\n", + " \n", + " if row.globalid in overlap_ids:\n", + " peilgebieden_cat.append(2)\n", + " \n", + " elif row.HWS_BZM is True:\n", + " peilgebieden_cat.append(1)\n", + " \n", + " elif row.HWS_BZM is False:\n", + " peilgebieden_cat.append(0)\n", + " \n", + "# Add new column and drop old HWS_BZM column\n", + "HHNK['peilgebied']['peilgebied_cat'] = peilgebieden_cat\n", + "HHNK['peilgebied'] = HHNK['peilgebied'].drop(columns=['HWS_BZM'])" + ] + }, + { + "cell_type": "markdown", + "id": "0c470216-2a8b-4a0a-9e0a-7877203df9dd", + "metadata": {}, + "source": [ + "## Add nhws to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7dfdcfaf-4b9a-443f-b40c-65460af8352d", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['peilgebied_cat'] = 2\n", + "\n", + "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "HHNK['peilgebied'] = pd.concat([gdf_hws, HHNK['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a744a7e5-9ac9-4e47-8cf2-791206581786", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_hws = pd.DataFrame()\n", + "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "\n", + "HHNK['streefpeil'] = pd.concat([streefpeil_hws, HHNK['streefpeil']])\n", + "HHNK['streefpeil'] = gpd.GeoDataFrame(HHNK['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "161bb7c7-0ba5-4eb6-bab1-b513cfd330f7", + "metadata": {}, + "source": [ + "### Create layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e9d64a75-240f-4583-9b38-3e3b22a578a3", + "metadata": {}, + "outputs": [], + "source": [ + "# Create buffer polygon\n", + "buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how='intersection', keep_geom_type=True)\n", + "buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how='difference', keep_geom_type=True)\n", + "buffer_polygon = gpd.overlay(buffer_polygon, HHNK['peilgebied'], how='difference', keep_geom_type=True)" + ] + }, + { + "cell_type": "markdown", + "id": "7fc8e8ea-4f94-4d3e-8820-46a442903ee6", + "metadata": {}, + "source": [ + "## Add buffer to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ac1121dc-342e-4960-9294-308b619de9d8", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['peilgebied_cat'] = 2\n", + "\n", + "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "HHNK['peilgebied'] = pd.concat([buffer_polygon, HHNK['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "746d2ebd-7307-4745-8e0e-35c047126c27", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_buffer = pd.DataFrame()\n", + "streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", + "streefpeil_buffer['geometry'] = [None]\n", + "\n", + "\n", + "HHNK['streefpeil'] = pd.concat([streefpeil_buffer, HHNK['streefpeil']])\n", + "HHNK['streefpeil'] = gpd.GeoDataFrame(HHNK['streefpeil'])\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "f0d2cab6-6529-4f4a-972a-533de967e85a", + "metadata": {}, + "source": [ + "## Write output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "02fcfb58-7054-4517-97f3-224c9acb4d1f", + "metadata": {}, + "outputs": [], + "source": [ + "for key in HHNK.keys(): \n", + " print(key)\n", + " HHNK[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fb843192-82da-4b4f-bb64-f475a4b52162", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:stable]", + "language": "python", + "name": "conda-env-stable-py" + }, + "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.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb new file mode 100644 index 0000000..06bd718 --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb @@ -0,0 +1,407 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "690952c5-5037-476a-a660-d54fec614748", + "metadata": {}, + "source": [ + "# HHSK" + ] + }, + { + "cell_type": "markdown", + "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "metadata": {}, + "source": [ + "This script adds a new column \"peilgebied_cat\" and make sure the peilgebieden allign witgh the HWS layer (Daniel):\n", + "- peilgebied_cat = 0 -> peilgebied\n", + "- peigelbied_cat = 1 -> RHWS (boezem)\n", + "- peilgebied_cat = 2 -> NHWS Notes:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import numpy as np\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from general_functions import *" + ] + }, + { + "cell_type": "markdown", + "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "metadata": {}, + "source": [ + "## HHSK" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'HHSK'\n", + "\n", + "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", + "\n", + "# Waterschaps boundaries\n", + "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "# Hoofdwatersysteem boundaries\n", + "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "# Buffer boundaries\n", + "buffer_path = f\"../projects/4750_30/Data_overig/HWS/hws_buffer_HHSK.gpkg\"\n", + "# Output folder\n", + "output_folder = f\"./Waterschappen/{waterschap}\"" + ] + }, + { + "cell_type": "markdown", + "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "metadata": {}, + "source": [ + "## Load Files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "metadata": {}, + "outputs": [], + "source": [ + "# Load HHNK files\n", + "HHSK = read_gpkg_layers(gpkg_path = data_path, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'hydroobject',\n", + " 'duikersifonhevel',\n", + " 'peilgebied', \n", + " 'streefpeil',\n", + " ])\n", + "HHSK['peilgebied'] = HHSK['peilgebied'].to_crs('EPSG:28992')\n", + "\n", + "# Load waterschap boundaries\n", + "gdf_grens = gpd.read_file(grens_path)\n", + "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", + "gdf_grens = gdf_grens.set_index('waterschap')\n", + "\n", + "# Load hws\n", + "gdf_hws = gpd.read_file(hws_path)\n", + "\n", + "# Load buffer\n", + "gdf_buffer = gpd.read_file(buffer_path)\n", + "gdf_buffer = gdf_buffer.to_crs('EPSG:28992')\n", + "gdf_buffer = gdf_buffer.dissolve()" + ] + }, + { + "cell_type": "markdown", + "id": "5556d211-e92e-4ba3-85c2-4ff9bd33fbeb", + "metadata": {}, + "source": [ + "## Select waterschap boundaries and clip hws layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", + "metadata": {}, + "outputs": [], + "source": [ + "# Select boundaries HH Amstel, Gooi en Vecht\n", + "gdf_grens = gdf_grens.loc[['Schieland en de Krimpenerwaard']]\n", + "\n", + "# Use waterschap boudnaries to clip HWS layer\n", + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + ] + }, + { + "cell_type": "markdown", + "id": "caba0e5d-0c01-4ff9-9d83-8790125ff85d", + "metadata": {}, + "source": [ + "## Check Peilgebied and HWS layer overlap:\n", + "1. Identify the overlapping areas\n", + "2. Clip\n", + "3. Calculate overlapping area percentage\n", + "4. Filter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b3fd731a-1dc8-46cb-b4a3-f052eca43400", + "metadata": {}, + "outputs": [], + "source": [ + "# Step 1: Identify the Overlapping Areas and clip\n", + "overlaps = gpd.overlay(HHSK['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "gdf_hws = gpd.overlay(gdf_hws, HHSK['peilgebied'], how='difference')\n", + "\n", + "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", + "non_overlapping_peilgebied = gpd.overlay(HHSK['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", + " \n", + "# Step 3: Calculate Area Percentages\n", + "# Calculate the area of overlaps\n", + "overlaps['overlap_area'] = overlaps.area\n", + "\n", + "# Step 4: Filter based on area Area Percentages\n", + "minimum_area = 50\n", + "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", + "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "overlap_ids = overlap_ids.globalid.to_list()\n", + "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')\n", + "\n", + "# gdf_hws = gdf_hws_clipped" + ] + }, + { + "cell_type": "markdown", + "id": "8c84ed19-d0a7-4a27-8e3d-03b132a502ac", + "metadata": {}, + "source": [ + "## Create peilgebied_cat column" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9bae7259-c4fd-4f2a-beb4-ec92a924f210", + "metadata": {}, + "outputs": [], + "source": [ + "# Add to geodataframe\n", + "peilgebieden_cat = []\n", + "\n", + "for index, row in HHSK['peilgebied'].iterrows():\n", + " \n", + " if row.code == 'GPG-399':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'GPG-403':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'GPG-144_RV1':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'GPG-144_RV2':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'GPG-144_RV3':\n", + " peilgebieden_cat.append(1)\n", + "\n", + " else:\n", + " peilgebieden_cat.append(0)\n", + " \n", + "HHSK['peilgebied']['peilgebied_cat'] = peilgebieden_cat" + ] + }, + { + "cell_type": "markdown", + "id": "037faf79-c747-405e-b2e5-a73acfed0aba", + "metadata": { + "tags": [] + }, + "source": [ + "## Add nhws to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0cdb36b6-9c4a-42fd-95f6-17c6b4e5803f", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['peilgebied_cat'] = 2\n", + "\n", + "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "HHSK['peilgebied'] = pd.concat([gdf_hws, HHSK['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3ed63b03-009a-4cde-8e64-e7f59bb8ca21", + "metadata": {}, + "outputs": [], + "source": [ + "# update streefpeil dict key\n", + "streefpeil_hws = pd.DataFrame()\n", + "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "\n", + "HHSK['streefpeil'] = pd.concat([streefpeil_hws, HHSK['streefpeil']])\n", + "HHSK['streefpeil'] = gpd.GeoDataFrame(HHSK['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "49d80d89-6676-48cc-a1b3-33771f1a9250", + "metadata": {}, + "source": [ + "### Create buffer polygon between NHWS and peilgebied/RHWS" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d415acda-966c-4847-a4b6-a06b23f87218", + "metadata": {}, + "outputs": [], + "source": [ + "buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", + "buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", + "buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(HHSK['peilgebied'].geometry.tolist()))\n", + "\n", + "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "buffer_polygon = buffer_polygon.set_geometry(0)\n", + "buffer_polygon = buffer_polygon.dissolve()\n", + "buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "buffer_polygon = buffer_polygon.set_geometry('geometry')\n", + "buffer_polygon = buffer_polygon.set_crs('EPSG:28992')" + ] + }, + { + "cell_type": "markdown", + "id": "eaeccbcb-b0d6-4caa-9fb9-dc8a44016298", + "metadata": {}, + "source": [ + "### Add buffer to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "852a9639-cdc4-4709-abb0-fded2aed5970", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + '1'\n", + "buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['peilgebied_cat'] = 2\n", + "buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "HHSK['peilgebied'] = pd.concat([buffer_polygon, HHSK['peilgebied']])\n", + "HHSK['peilgebied'] = gpd.GeoDataFrame(HHSK['peilgebied'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7fb401c1-3291-4bff-896e-1fc1478fe830", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_buffer = pd.DataFrame()\n", + "streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", + "streefpeil_buffer['geometry'] = [None]\n", + "\n", + "\n", + "HHSK['streefpeil'] = pd.concat([streefpeil_buffer, HHSK['streefpeil']])\n", + "HHSK['streefpeil'] = gpd.GeoDataFrame(HHSK['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "f13c5886-7349-4396-87a2-6d400ce57953", + "metadata": {}, + "source": [ + "### Fix duplicates hydroobjects" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "803b640d-ec91-469d-b7aa-29b8b8576234", + "metadata": {}, + "outputs": [], + "source": [ + "# Rename duplicates\n", + "# identify duplicates\n", + "HHSK['hydroobject']['temp_globalid'] = HHSK['hydroobject'].groupby('globalid').cumcount() + 1\n", + "HHSK['hydroobject']['temp_code'] = HHSK['hydroobject'].groupby('code').cumcount() + 1\n", + "HHSK['hydroobject']['temp_nen3610id'] = HHSK['hydroobject'].groupby('nen3610id').cumcount() + 1\n", + "\n", + "# AAdd _1 etc\n", + "HHSK['hydroobject']['globalid_new'] = HHSK['hydroobject'].apply(lambda x: f\"{x['globalid']}_{x['temp_globalid']}\" if x['temp_globalid'] > 1 else x['globalid'], axis=1)\n", + "HHSK['hydroobject']['code_new'] = HHSK['hydroobject'].apply(lambda x: f\"{x['code']}_{x['temp_code']}\" if x['temp_code'] > 1 else x['code'], axis=1)\n", + "HHSK['hydroobject']['nen3610id_new'] = HHSK['hydroobject'].apply(lambda x: f\"{x['nen3610id']}_{x['temp_nen3610id']}\" if x['temp_nen3610id'] > 1 else x['nen3610id'], axis=1)\n", + "\n", + "# drop columns\n", + "HHSK['hydroobject'] = HHSK['hydroobject'].drop(columns=['temp_globalid','temp_code','temp_nen3610id',\n", + " 'globalid', 'nen3610id', 'code'])\n", + "# rename columns\n", + "HHSK['hydroobject'] = HHSK['hydroobject'].rename(columns={'globalid_new':'globalid',\n", + " 'code_new':'code',\n", + " 'nen3610id_new':'nen3610id'})\n", + "# check\n", + "print(HHSK['hydroobject'].globalid.is_unique)\n", + "print(HHSK['hydroobject'].code.is_unique)\n", + "print(HHSK['hydroobject'].nen3610id.is_unique)" + ] + }, + { + "cell_type": "markdown", + "id": "05a65661-9821-4657-9351-22502ee9a58c", + "metadata": {}, + "source": [ + "### Store post-processed data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3425a4bd-f8b1-4dd3-b11b-4bb420c8a5bb", + "metadata": {}, + "outputs": [], + "source": [ + "for key in HHSK.keys(): \n", + " print(key)\n", + " HHSK[str(key)].to_file(f'{output_folder}/{waterschap}.gpkg', layer = str(key), driver='GPKG')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:stable]", + "language": "python", + "name": "conda-env-stable-py" + }, + "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.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb new file mode 100644 index 0000000..f4cd0fe --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb @@ -0,0 +1,374 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "690952c5-5037-476a-a660-d54fec614748", + "metadata": {}, + "source": [ + "# Scheldestromen" + ] + }, + { + "cell_type": "markdown", + "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "metadata": {}, + "source": [ + "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", + "- peilgebied_cat = 0 -> peilgebied\n", + "- peigelbied_cat = 1 -> RHWS (boezem)\n", + "- peilgebied_cat = 2 -> NHWS " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import numpy as np\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from general_functions import *" + ] + }, + { + "cell_type": "markdown", + "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "metadata": {}, + "source": [ + "## Scheldestromen" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "metadata": {}, + "outputs": [], + "source": [ + "#define relative paths\n", + "waterschap = 'Scheldestromen'\n", + "waterschap2 = 'Scheldestromen'\n", + "\n", + "data_path = f\"../projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", + "\n", + "# Waterschaps boundaries\n", + "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "# Hoofdwatersysteem boundaries\n", + "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "# Buffer boundaries\n", + "buffer_path = f\"../projects/4750_30/Data_overig/HWS/hws_buffer_Scheldestromen.gpkg\"\n", + "# Output folder\n", + "output_folder = f\"./Waterschappen/{waterschap}\"" + ] + }, + { + "cell_type": "markdown", + "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "metadata": {}, + "source": [ + "### Load Files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "metadata": {}, + "outputs": [], + "source": [ + "# Load HHNK files\n", + "Scheldestromen = read_gpkg_layers(gpkg_path = data_path, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'hydroobject',\n", + " 'duikersifonhevel',\n", + " 'peilgebied', \n", + " 'streefpeil',\n", + " ])\n", + "Scheldestromen['peilgebied'] = Scheldestromen['peilgebied'].to_crs('EPSG:28992')\n", + "\n", + "# Load waterschap boundaries\n", + "gdf_grens = gpd.read_file(grens_path)\n", + "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", + "gdf_grens = gdf_grens.set_index('waterschap')\n", + "\n", + "# Load hws\n", + "gdf_hws = gpd.read_file(hws_path)\n", + "\n", + "# Load buffer\n", + "gdf_buffer = gpd.read_file(buffer_path)\n", + "gdf_buffer = gdf_buffer.to_crs('EPSG:28992')\n", + "gdf_buffer = gdf_buffer.dissolve()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5fcd4cc6-3c75-462f-af3e-7693c9c5265f", + "metadata": {}, + "outputs": [], + "source": [ + "Scheldestromen['peilgebied'].globalid.is_unique" + ] + }, + { + "cell_type": "markdown", + "id": "3e2faf6a-d645-44c7-8882-f6e613e73410", + "metadata": {}, + "source": [ + "## Select waterschap boundaries and clip hws layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0d804374-1484-42d0-88a2-f6bec404349b", + "metadata": {}, + "outputs": [], + "source": [ + "# Select boundaries HH Amstel, Gooi en Vecht\n", + "gdf_grens = gdf_grens.loc[['Waterschap Scheldestromen']]\n", + "\n", + "# Use waterschap boudnaries to clip HWS layer\n", + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + ] + }, + { + "cell_type": "markdown", + "id": "0cc62e79-0fc4-48d3-b3b6-e4ded29c2e35", + "metadata": {}, + "source": [ + "## Peilgebied and HWS layer overlap:\n", + "1. Identify the overlapping areas\n", + "2. Clip\n", + "3. Calculate overlapping area percentage\n", + "4. Filter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a15df030-9a47-47bb-a09c-dd4b5dda65e2", + "metadata": {}, + "outputs": [], + "source": [ + "# Step 1: Identify the Overlapping Areas and clip\n", + "overlaps = gpd.overlay(Scheldestromen['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "\n", + "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", + "non_overlapping_peilgebied = gpd.overlay(Scheldestromen['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", + " \n", + "# Step 3: Calculate Area Percentages\n", + "# Calculate the area of overlaps\n", + "overlaps['overlap_area'] = overlaps.area\n", + "\n", + "# Step 4: Filter based on area Area Percentages\n", + "minimum_area = 500\n", + "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", + "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "overlap_ids = overlap_ids.globalid.to_list()\n", + "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + ] + }, + { + "cell_type": "markdown", + "id": "87df5559-330b-41e1-8355-cbcc5c33d0a5", + "metadata": {}, + "source": [ + "## Create peilgebied_cat columnm" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bfc95c53-1282-479b-8348-ad54085a49f6", + "metadata": {}, + "outputs": [], + "source": [ + "# Add occurence to geodataframe\n", + "peilgebieden_cat = []\n", + "\n", + "for index, row in Scheldestromen['peilgebied'].iterrows():\n", + " \n", + " if row.nen3610id == 'dummy_nen3610id_peilgebied_549':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'GPG437':\n", + " print('yes')\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'dummy_code_nhws_3': \n", + " peilgebieden_cat.append(1)\n", + " print('yes')\n", + " else:\n", + " peilgebieden_cat.append(0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cc35d69e-9ce6-423b-abda-0b8314a5ec22", + "metadata": {}, + "outputs": [], + "source": [ + "# Add new column\n", + "Scheldestromen['peilgebied']['peilgebied_cat'] = peilgebieden_cat" + ] + }, + { + "cell_type": "markdown", + "id": "43ed5595-4741-4dc9-9c37-4ba790190281", + "metadata": {}, + "source": [ + "## Add nhws to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b666fddd-e1b8-4e66-9a88-d87fb0df8749", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", + "gdf_hws['peilgebied_cat'] = 2\n", + "\n", + "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "Scheldestromen['peilgebied'] = pd.concat([gdf_hws, Scheldestromen['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "55368969-6fce-4597-a6a8-128f5a54bcb8", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_hws = pd.DataFrame()\n", + "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "\n", + "Scheldestromen['streefpeil'] = pd.concat([streefpeil_hws, Scheldestromen['streefpeil']])\n", + "Scheldestromen['streefpeil'] = gpd.GeoDataFrame(Scheldestromen['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "9d3ed0b2-0f05-4c51-b24f-4032059b1bc9", + "metadata": {}, + "source": [ + "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6c6a1883-1647-493a-acad-411404f1daec", + "metadata": {}, + "outputs": [], + "source": [ + "# Create buffer polygon\n", + "buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how='intersection', keep_geom_type=True)\n", + "buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how='difference', keep_geom_type=True)\n", + "buffer_polygon = gpd.overlay(buffer_polygon, Scheldestromen['peilgebied'], how='difference', keep_geom_type=True)" + ] + }, + { + "cell_type": "markdown", + "id": "8c27471d-9fb3-4d38-bd63-b841cc41cbee", + "metadata": { + "tags": [] + }, + "source": [ + "## Add buffer to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "39a1211a-bb76-4c4f-ac7e-2405d2729705", + "metadata": {}, + "outputs": [], + "source": [ + "# update peilgebied dict key\n", + "buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "buffer_polygon['peilgebied_cat'] = 2\n", + "\n", + "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "Scheldestromen['peilgebied'] = pd.concat([buffer_polygon, Scheldestromen['peilgebied']])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "77237ffe-7099-4872-8f1f-4ccc0cd84b6c", + "metadata": {}, + "outputs": [], + "source": [ + "# Create boezem streefpeil layer\n", + "streefpeil_buffer = pd.DataFrame()\n", + "streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", + "streefpeil_buffer['geometry'] = [None]\n", + "\n", + "Scheldestromen['streefpeil'] = pd.concat([streefpeil_buffer, Scheldestromen['streefpeil']])\n", + "Scheldestromen['streefpeil'] = gpd.GeoDataFrame(Scheldestromen['streefpeil'])" + ] + }, + { + "cell_type": "markdown", + "id": "cf892c2f-bf67-4e5e-a2f1-20699fedcf88", + "metadata": {}, + "source": [ + "## Store output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "17796202-2f3c-4175-8409-7c2294b76703", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "for key in Scheldestromen.keys(): \n", + " print(key)\n", + " Scheldestromen[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:stable]", + "language": "python", + "name": "conda-env-stable-py" + }, + "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.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb index 8e478a8..b1ffeb6 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb @@ -3,34 +3,38 @@ { "cell_type": "code", "execution_count": null, - "id": "0", + "id": "d13f9ab1-f6e7-4958-96cc-343f0c2138f6", "metadata": {}, "outputs": [], "source": [ - "import os\n", - "\n", - "import geopandas as gpd\n", - "import matplotlib.pyplot as plt\n", + "#import packages and functions\n", "import numpy as np\n", + "import matplotlib.pyplot as plt\n", "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "import shapely\n", "from shapely import wkt" ] }, { "cell_type": "code", "execution_count": null, - "id": "1", + "id": "ad89ae02-4242-4aca-bd5a-c0c3fd8592ac", "metadata": {}, "outputs": [], "source": [ - "from general_functions import show_layers_and_columns, store_data\n", + "from general_functions import *\n", "\n", - "pd.set_option(\"display.max_columns\", None)" + "%load_ext autoreload\n", + "%autoreload 2\n", + "pd.set_option('display.max_columns', None)\n" ] }, { "cell_type": "markdown", - "id": "2", + "id": "09981d65-c7d2-4802-9fca-2ef490213b2c", "metadata": {}, "source": [ "# Amstel, Gooi en Vecht" @@ -39,75 +43,66 @@ { "cell_type": "code", "execution_count": null, - "id": "3", + "id": "b5fc0f1d-b2bf-4933-9472-96cb110e6111", "metadata": {}, "outputs": [], "source": [ - "# define relative paths\n", - "waterschap = \"AVG\"\n", - "path_AVG = \"..\\..\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\"\n", + "#define relative paths\n", + "waterschap = 'AVG'\n", + "path_AVG = '..\\..\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht'\n", "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/AmstelGooienVecht\"\n", - "DM_path = \"..\\..\\Data_overig\\DM_Netwerk\\DM_Netwerk.shp\"" + "DM_path = '..\\..\\Data_overig\\DM_Netwerk\\DM_Netwerk.shp'\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "4", + "id": "d54f0c7c-93a1-44bd-b0f9-fcf37279dc83", "metadata": {}, "outputs": [], "source": [ - "# AVG has delivered all data in CSV format. Load it in manually with some data mutations\n", + "#AVG has delivered all data in CSV format. Load it in manually with some data mutations\n", "AVG = {}\n", - "variables = [\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " \"afsluitmiddel\",\n", - " \"duikersifonhevel\",\n", - " \"hydroobject\",\n", - "] # , 'peilgebiedpraktijk', 'peilafwijkinggebied']\n", + "variables = ['stuw', 'gemaal', 'afsluitmiddel', 'duikersifonhevel', 'hydroobject']#, 'peilgebiedpraktijk', 'peilafwijkinggebied']\n", "for variable in variables:\n", - " path_variable = os.path.join(path_AVG, variable + \".csv\")\n", - " df_var = pd.read_csv(path_variable, delimiter=\";\")\n", - " geom_col = df_var.keys()[-1] # retrieve the column name\n", - "\n", - " if \"geometrie\" not in geom_col:\n", - " raise ValueError('No \"geometry\" string found in the last column of the dataframe. Check for existence')\n", - "\n", - " df_var[\"geometry\"] = df_var[geom_col].apply(lambda x: wkt.loads(x.split(\";\")[-1]))\n", + " path_variable = os.path.join(path_AVG, variable + '.csv')\n", + " df_var = pd.read_csv(path_variable, delimiter=';')\n", + " geom_col = df_var.keys()[-1] #retrieve the column name\n", + " \n", + " if not 'geometrie' in geom_col:\n", + " raise ValueError('No \"geometry\" string found in the last column of the dataframe. Check for existence') \n", + " \n", + " df_var['geometry'] = df_var[geom_col].apply(lambda x: wkt.loads(x.split(';')[-1])) \n", " AVG[variable] = df_var\n", - "\n", - "# there is one last gpkg which contains the streefpeilen (and peilgebieden)\n", - "AVG[\"peilgebied\"] = gpd.read_file(os.path.join(path_AVG, \"vigerende_peilgebieden.gpkg\"))" + " \n", + "#there is one last gpkg which contains the streefpeilen (and peilgebieden)\n", + "AVG['peilgebied'] = gpd.read_file(os.path.join(path_AVG, 'vigerende_peilgebieden.gpkg'))" ] }, { "cell_type": "code", "execution_count": null, - "id": "5", + "id": "d8ca7d9a-fcd9-4154-9278-029f2a25b7b7", "metadata": {}, "outputs": [], "source": [ - "AVG[\"peilgebied\"][\"streefpeil\"] = np.nan\n", - "AVG[\"peilgebied\"][\"streefpeil\"] = AVG[\"peilgebied\"][\"streefpeil\"].fillna(value=AVG[\"peilgebied\"][\"GPGZMRPL\"])\n", - "AVG[\"peilgebied\"][\"streefpeil\"] = AVG[\"peilgebied\"][\"streefpeil\"].fillna(value=AVG[\"peilgebied\"][\"IWS_GPGVASTP\"])\n", - "AVG[\"peilgebied\"][\"streefpeil\"] = AVG[\"peilgebied\"][\"streefpeil\"].fillna(value=AVG[\"peilgebied\"][\"IWS_GPGONDP\"])\n", + "AVG['peilgebied']['streefpeil'] = np.nan\n", + "AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['GPGZMRPL'])\n", + "AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['IWS_GPGVASTP'])\n", + "AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['IWS_GPGONDP'])\n", "\n", "\n", - "print(\n", - " \"Number of missing streefpeilen = \",\n", - " len(AVG[\"peilgebied\"][\"streefpeil\"].loc[AVG[\"peilgebied\"][\"streefpeil\"].isna()]),\n", - ")\n", + "print('Number of missing streefpeilen = ', len(AVG['peilgebied']['streefpeil'].loc[AVG['peilgebied']['streefpeil'].isna()]))\n", "\n", "fig, ax = plt.subplots()\n", - "AVG[\"peilgebied\"].geometry.plot(ax=ax, color=\"cornflowerblue\")\n", - "AVG[\"peilgebied\"].loc[AVG[\"peilgebied\"][\"streefpeil\"].isna()].geometry.plot(ax=ax, color=\"red\")\n", + "AVG['peilgebied'].geometry.plot(ax=ax, color='cornflowerblue')\n", + "AVG['peilgebied'].loc[AVG['peilgebied']['streefpeil'].isna()].geometry.plot(ax=ax, color='red')\n", "ax.legend()" ] }, { "cell_type": "markdown", - "id": "6", + "id": "3c3e568b-79b0-4809-8274-a029cc61b534", "metadata": {}, "source": [ "# Nalevering" @@ -116,167 +111,146 @@ { "cell_type": "code", "execution_count": null, - "id": "7", + "id": "31327447-601e-4f6a-b141-e97162433b37", "metadata": {}, "outputs": [], "source": [ - "# overwrite previous data\n", - "AVG[\"stuw\"] = gpd.read_file(\n", - " r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Stuw.shp\"\n", - ")\n", - "AVG[\"stuw\"] = AVG[\"stuw\"].loc[AVG[\"stuw\"].LHM == \"LHM\"]\n", + "#overwrite previous data\n", + "AVG['stuw'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Stuw.shp\")\n", + "AVG['stuw'] = AVG['stuw'].loc[AVG['stuw'].LHM == 'LHM']\n", "\n", - "AVG[\"gemaal\"] = gpd.read_file(\n", - " r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Gemaal.shp\"\n", - ")\n", - "AVG[\"gemaal\"] = AVG[\"gemaal\"].loc[AVG[\"gemaal\"].LHM == \"LHM\"]\n", + "AVG['gemaal'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Gemaal.shp\")\n", + "AVG['gemaal'] = AVG['gemaal'].loc[AVG['gemaal'].LHM == 'LHM']\n", "\n", - "AVG[\"duikersifonhevel\"] = gpd.read_file(\n", - " r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Duikersifonhevel.shp\"\n", - ")\n", - "AVG[\"hydroobject\"] = gpd.read_file(\n", - " r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\LHM_hydrovakken.shp\"\n", - ")\n", + "AVG['duikersifonhevel'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Duikersifonhevel.shp\")\n", + "AVG['hydroobject'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\LHM_hydrovakken.shp\")\n", "\n", - "AVG[\"peilgebied\"] = gpd.read_file(\n", - " r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\LHM_gebieden.shp\"\n", - ")" + "AVG['peilgebied'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\LHM_gebieden.shp\")\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "8", + "id": "f68a9597-d088-40c2-88df-931aa281d000", "metadata": {}, "outputs": [], "source": [ - "AVG[\"peilgebied\"].loc[AVG[\"peilgebied\"].zomer == 0, \"zomer\"] = np.nan\n", - "AVG[\"peilgebied\"].loc[AVG[\"peilgebied\"].winter == 0, \"winter\"] = np.nan\n", - "AVG[\"peilgebied\"].loc[AVG[\"peilgebied\"].vast == 0, \"vast\"] = np.nan" + "AVG['peilgebied'].loc[AVG['peilgebied'].zomer == 0, 'zomer'] = np.nan\n", + "AVG['peilgebied'].loc[AVG['peilgebied'].winter == 0, 'winter'] = np.nan\n", + "AVG['peilgebied'].loc[AVG['peilgebied'].vast == 0, 'vast'] = np.nan" ] }, { "cell_type": "code", "execution_count": null, - "id": "9", + "id": "951b70c4-740a-47db-9abf-7c5770aa24bb", "metadata": {}, "outputs": [], "source": [ - "AVG[\"peilgebied\"][\"streefpeil\"] = AVG[\"peilgebied\"][[\"vast\", \"zomer\"]].min(axis=1, skipna=True)" + "AVG['peilgebied']['streefpeil'] = AVG['peilgebied'][['vast', 'zomer']].min(axis=1, skipna=True)\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "10", + "id": "320352cd-a10b-48ff-afc0-71023df12cb4", "metadata": {}, "outputs": [], "source": [ - "# determine aanvoer en afvoer gemalen\n", - "AVG[\"gemaal\"][\"func_aanvoer\"], AVG[\"gemaal\"][\"func_afvoer\"], AVG[\"gemaal\"][\"func_circulatie\"] = (\n", - " False,\n", - " False,\n", - " False,\n", - ") # default is False\n", - "AVG[\"gemaal\"][\"functiegemaal\"] = AVG[\"gemaal\"][\"naam\"].astype(\n", - " str\n", - ") # aan AGV gevraagd of alle opmaling informatie in de kolom 'naam' verwerkt is. Antwoord: ja\n", + "#determine aanvoer en afvoer gemalen\n", + "AVG['gemaal']['func_aanvoer'], AVG['gemaal']['func_afvoer'], AVG['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "AVG['gemaal']['functiegemaal'] = AVG['gemaal']['naam'].astype(str) # aan AGV gevraagd of alle opmaling informatie in de kolom 'naam' verwerkt is. Antwoord: ja\n", "\n", - "AVG[\"gemaal\"].loc[AVG[\"gemaal\"][\"functiegemaal\"] == \"onbekend\", \"functiegemaal\"] = (\n", - " np.nan\n", - ") # replace onbekend with nan, will be filled up later see one line below\n", + "AVG['gemaal'].loc[AVG['gemaal']['functiegemaal'] == 'onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", "\n", - "AVG[\"gemaal\"].loc[AVG[\"gemaal\"].functiegemaal.str.contains(\"fvoer|nderbemaling|f-|oodpomp\"), \"func_afvoer\"] = True\n", - "AVG[\"gemaal\"].loc[AVG[\"gemaal\"].functiegemaal.str.contains(\"anvoergemaal|pmaling|an-|p-|pvoer\"), \"func_aanvoer\"] = True\n", - "AVG[\"gemaal\"].loc[AVG[\"gemaal\"].functiegemaal.str.contains(\"irculatie\"), \"func_circulatie\"] = True\n", - "AVG[\"gemaal\"].loc[\n", - " ~AVG[\"gemaal\"].func_afvoer & ~AVG[\"gemaal\"].func_aanvoer & ~AVG[\"gemaal\"].func_circulatie,\n", - " \"func_afvoer\",\n", - "] = True # set to afvoergemaal is there the function is unknown" + "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('fvoer|nderbemaling|f-|oodpomp'), 'func_afvoer'] = True\n", + "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('anvoergemaal|pmaling|an-|p-|pvoer'), 'func_aanvoer'] = True\n", + "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('irculatie'), 'func_circulatie'] = True\n", + "AVG['gemaal'].loc[(AVG['gemaal'].func_afvoer == False) &\n", + " (AVG['gemaal'].func_aanvoer == False) &\n", + " (AVG['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" ] }, { "cell_type": "code", "execution_count": null, - "id": "11", + "id": "7fd2e22c-95a0-4877-b160-843b36ea56a3", "metadata": {}, "outputs": [], "source": [ - "# stuw\n", - "AVG[\"stuw\"] = AVG[\"stuw\"][[\"code\", \"geometry\"]]\n", - "AVG[\"stuw\"].loc[:, \"nen3610id\"] = \"dummy_nen3610id_stuw_\" + AVG[\"stuw\"].index.astype(str)\n", - "AVG[\"stuw\"][\"globalid\"] = \"dummy_globalid_stuw_\" + AVG[\"stuw\"].index.astype(str)\n", - "AVG[\"stuw\"] = gpd.GeoDataFrame(AVG[\"stuw\"]).to_crs(\"epsg:28992\")\n", + "#stuw\n", + "AVG['stuw'] = AVG['stuw'][['code', 'geometry']]\n", + "AVG['stuw'].loc[:, 'nen3610id'] = 'dummy_nen3610id_stuw_' + AVG['stuw'].index.astype(str)\n", + "AVG['stuw']['globalid'] = 'dummy_globalid_stuw_' + AVG['stuw'].index.astype(str)\n", + "AVG['stuw'] = gpd.GeoDataFrame(AVG['stuw']).to_crs('epsg:28992')\n", "\n", - "# gemaal\n", - "AVG[\"gemaal\"] = AVG[\"gemaal\"][[\"code\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]]\n", - "AVG[\"gemaal\"].loc[:, \"nen3610id\"] = \"dummy_nen3610id_gemaal_\" + AVG[\"gemaal\"].index.astype(str)\n", - "AVG[\"gemaal\"][\"globalid\"] = \"dummy_globalid_gemaal_\" + AVG[\"gemaal\"].index.astype(str)\n", - "AVG[\"gemaal\"] = gpd.GeoDataFrame(AVG[\"gemaal\"]).to_crs(\"epsg:28992\")\n", + "#gemaal\n", + "AVG['gemaal'] = AVG['gemaal'][['code', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "AVG['gemaal'].loc[:, 'nen3610id'] = 'dummy_nen3610id_gemaal_' + AVG['gemaal'].index.astype(str)\n", + "AVG['gemaal']['globalid'] = 'dummy_globalid_gemaal_' + AVG['gemaal'].index.astype(str)\n", + "AVG['gemaal'] = gpd.GeoDataFrame(AVG['gemaal']).to_crs('epsg:28992')\n", "\n", - "# afsluitmiddel\n", - "AVG[\"afsluitmiddel\"] = AVG[\"afsluitmiddel\"][[\"code\", \"geometry\"]]\n", - "AVG[\"afsluitmiddel\"].loc[:, \"nen3610id\"] = \"dummy_nen3610id_afsluitmiddel_\" + AVG[\"afsluitmiddel\"].index.astype(str)\n", - "AVG[\"afsluitmiddel\"][\"globalid\"] = \"dummy_globalid_afsluitmiddel_\" + AVG[\"afsluitmiddel\"].index.astype(str)\n", - "AVG[\"afsluitmiddel\"] = gpd.GeoDataFrame(AVG[\"afsluitmiddel\"]).set_crs(\"epsg:28992\")\n", + "#afsluitmiddel\n", + "AVG['afsluitmiddel'] = AVG['afsluitmiddel'][['code', 'geometry']]\n", + "AVG['afsluitmiddel'].loc[:, 'nen3610id'] = 'dummy_nen3610id_afsluitmiddel_' + AVG['afsluitmiddel'].index.astype(str)\n", + "AVG['afsluitmiddel']['globalid'] = 'dummy_globalid_afsluitmiddel_' + AVG['afsluitmiddel'].index.astype(str)\n", + "AVG['afsluitmiddel'] = gpd.GeoDataFrame(AVG['afsluitmiddel']).set_crs('epsg:28992')\n", "\n", - "# duikersifonhevel\n", - "AVG[\"duikersifonhevel\"] = AVG[\"duikersifonhevel\"][[\"code\", \"geometry\"]]\n", - "AVG[\"duikersifonhevel\"].loc[:, \"nen3610id\"] = \"dummy_nen3610id_duikersifonhevel_\" + AVG[\n", - " \"duikersifonhevel\"\n", - "].index.astype(str)\n", - "AVG[\"duikersifonhevel\"][\"globalid\"] = \"dummy_globalid_duikersifonhevel_\" + AVG[\"duikersifonhevel\"].index.astype(str)\n", - "AVG[\"duikersifonhevel\"] = gpd.GeoDataFrame(AVG[\"duikersifonhevel\"]).to_crs(\"epsg:28992\")\n", + "#duikersifonhevel\n", + "AVG['duikersifonhevel'] = AVG['duikersifonhevel'][['code', 'geometry']]\n", + "AVG['duikersifonhevel'].loc[:, 'nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + AVG['duikersifonhevel'].index.astype(str)\n", + "AVG['duikersifonhevel']['globalid'] = 'dummy_globalid_duikersifonhevel_' + AVG['duikersifonhevel'].index.astype(str)\n", + "AVG['duikersifonhevel'] = gpd.GeoDataFrame(AVG['duikersifonhevel']).to_crs('epsg:28992')\n", "\n", - "# hydroobject\n", - "AVG[\"hydroobject\"] = AVG[\"hydroobject\"][[\"geometry\"]]\n", - "AVG[\"hydroobject\"][\"code\"] = \"dummy_code_hydroobject_\" + AVG[\"hydroobject\"].index.astype(str)\n", - "AVG[\"hydroobject\"][\"nen3610id\"] = \"dummy_nen3610id_hydroobject_\" + AVG[\"hydroobject\"].index.astype(str)\n", - "AVG[\"hydroobject\"][\"globalid\"] = \"dummy_globalid_hydroobject_\" + AVG[\"hydroobject\"].index.astype(str)\n", - "AVG[\"hydroobject\"] = gpd.GeoDataFrame(AVG[\"hydroobject\"]).set_crs(\"epsg:28992\")\n", + "#hydroobject\n", + "AVG['hydroobject'] = AVG['hydroobject'][['geometry']]\n", + "AVG['hydroobject']['code'] = 'dummy_code_hydroobject_' + AVG['hydroobject'].index.astype(str)\n", + "AVG['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + AVG['hydroobject'].index.astype(str)\n", + "AVG['hydroobject']['globalid'] = 'dummy_globalid_hydroobject_' + AVG['hydroobject'].index.astype(str)\n", + "AVG['hydroobject'] = gpd.GeoDataFrame(AVG['hydroobject']).set_crs('epsg:28992')\n", "\n", - "# streefpeil\n", - "AVG[\"streefpeil\"] = pd.DataFrame()\n", - "AVG[\"streefpeil\"][\"waterhoogte\"] = AVG[\"peilgebied\"][\"streefpeil\"]\n", - "AVG[\"streefpeil\"][\"globalid\"] = \"dummy_globalid_streefpeil_\" + AVG[\"streefpeil\"].index.astype(str)\n", - "AVG[\"streefpeil\"][\"geometry\"] = np.nan\n", - "AVG[\"streefpeil\"] = gpd.GeoDataFrame(AVG[\"streefpeil\"]).set_crs(\"epsg:28992\")\n", + "#streefpeil\n", + "AVG['streefpeil'] = pd.DataFrame()\n", + "AVG['streefpeil']['waterhoogte'] = AVG['peilgebied']['streefpeil']\n", + "AVG['streefpeil']['globalid'] = 'dummy_globalid_streefpeil_' + AVG['streefpeil'].index.astype(str)\n", + "AVG['streefpeil']['geometry'] = np.nan\n", + "AVG['streefpeil'] = gpd.GeoDataFrame(AVG['streefpeil']).set_crs('epsg:28992')\n", "\n", - "# peilgebied\n", - "AVG[\"peilgebied\"][\"code\"] = AVG[\"peilgebied\"][\"GAFNAAM\"]\n", - "AVG[\"peilgebied\"][\"geometry\"] = AVG[\"peilgebied\"][\"geometry\"]\n", - "AVG[\"peilgebied\"][\"nen3610id\"] = \"dummy_nen3610id_peilgebied_\" + AVG[\"peilgebied\"].index.astype(str)\n", - "AVG[\"peilgebied\"][\"globalid\"] = \"dummy_globalid_peilgebied_\" + AVG[\"peilgebied\"].index.astype(str)\n", + "#peilgebied\n", + "AVG['peilgebied']['code'] = AVG['peilgebied']['GAFNAAM']\n", + "AVG['peilgebied']['geometry'] = AVG['peilgebied']['geometry']\n", + "AVG['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + AVG['peilgebied'].index.astype(str)\n", + "AVG['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + AVG['peilgebied'].index.astype(str)\n", "\n", "\n", - "AVG[\"peilgebied\"] = AVG[\"peilgebied\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "AVG[\"peilgebied\"] = gpd.GeoDataFrame(AVG[\"peilgebied\"]).to_crs(\"epsg:28992\")" + "AVG['peilgebied'] = AVG['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "AVG['peilgebied'] = gpd.GeoDataFrame(AVG['peilgebied']).to_crs('epsg:28992')\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "3cb1e8f8-fc21-4b03-a6e9-d0c1eecd5701", "metadata": {}, "outputs": [], "source": [ - "# add duikersifonhevels to the hydroobjecten\n", - "AVG[\"hydroobject\"] = pd.concat([AVG[\"hydroobject\"], AVG[\"duikersifonhevel\"]])\n", - "AVG[\"hydroobject\"] = AVG[\"hydroobject\"].drop_duplicates(subset=\"globalid\") # in case it is run multiple times\n", - "AVG[\"hydroobject\"] = gpd.GeoDataFrame(AVG[\"hydroobject\"]).set_crs(\"epsg:28992\")" + "#add duikersifonhevels to the hydroobjecten \n", + "AVG['hydroobject'] = pd.concat([AVG['hydroobject'], AVG['duikersifonhevel']])\n", + "AVG['hydroobject'] = AVG['hydroobject'].drop_duplicates(subset='globalid') #in case it is run multiple times\n", + "AVG['hydroobject'] = gpd.GeoDataFrame(AVG['hydroobject']).set_crs('epsg:28992')\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "13", + "id": "74d6b456-154a-4c13-b53d-4d5e67122485", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "14", + "id": "9276888c-0ba2-4f5d-8ecb-a26baa1747f0", "metadata": {}, "source": [ "# Control, store" @@ -285,17 +259,17 @@ { "cell_type": "code", "execution_count": null, - "id": "15", + "id": "f2554d9e-9957-47bd-8cef-e6bfd4220a61", "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap=AVG)" + "show_layers_and_columns(waterschap = AVG)" ] }, { "cell_type": "code", "execution_count": null, - "id": "16", + "id": "be767e93-6ab9-4a3d-a7ae-247eb3877617", "metadata": {}, "outputs": [], "source": [ @@ -303,14 +277,15 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - "\n", - "store_data(waterschap=AVG, output_gpkg_path=output_gpkg_path + \"/AGV\")" + " \n", + "store_data(waterschap = AVG, \n", + " output_gpkg_path = output_gpkg_path + '/AGV')\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "17", + "id": "09e3e8eb-f52b-497b-a0ef-b8613d7771c1", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb index 6de7b81..49b7a6c 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb @@ -3,29 +3,33 @@ { "cell_type": "code", "execution_count": null, - "id": "0", + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", "metadata": {}, "outputs": [], "source": [ - "import os\n", - "\n", + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", "import geopandas as gpd\n", - "import pandas as pd" + "import os\n", + "import fiona\n", + "import shapely" ] }, { "cell_type": "code", "execution_count": null, - "id": "1", + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", "metadata": {}, "outputs": [], "source": [ - "from general_functions import read_gpkg_layers, show_layers_and_columns, store_data" + "from general_functions import *" ] }, { "cell_type": "markdown", - "id": "2", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", "metadata": {}, "source": [ "# Delfland" @@ -34,14 +38,14 @@ { "cell_type": "code", "execution_count": null, - "id": "3", + "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# define relative paths\n", - "waterschap = \"Delfland\"\n", + "#define relative paths\n", + "waterschap = 'Delfland'\n", "gdb_path = \"../../Data_preprocessed/Waterschappen/Delfland/Watersysteem.gdb\"\n", "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Delfland\"" ] @@ -49,23 +53,27 @@ { "cell_type": "code", "execution_count": null, - "id": "4", + "id": "532b0b83-2139-4d48-8e42-883ed8e88325", "metadata": {}, "outputs": [], "source": [ - "Delfland = read_gpkg_layers(\n", - " gpkg_path=gdb_path, variables=[\"stuw\", \"gemaal\", \"watergang\", \"duikersifonhevel\", \"peilgebiedpraktijk\", \"keerschot\"]\n", - ")\n", - "# 'peilafwijkinggebied',\n", - "# 'pomp'])\n", - "# 'streefpeil'])\n", - "# change names\n", - "Delfland[\"hydroobject\"] = Delfland.pop(\"watergang\")" + "Delfland = read_gpkg_layers(gpkg_path = gdb_path, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'watergang',\n", + " 'duikersifonhevel',\n", + " 'peilgebiedpraktijk',\n", + " 'keerschot']) \n", + " # 'peilafwijkinggebied', \n", + " # 'pomp'])\n", + " # 'streefpeil'])\n", + "#change names\n", + "Delfland['hydroobject'] = Delfland.pop('watergang')\n" ] }, { "cell_type": "markdown", - "id": "5", + "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", "metadata": {}, "source": [ "### Adjust column names" @@ -74,93 +82,74 @@ { "cell_type": "code", "execution_count": null, - "id": "6", + "id": "059f9113-bcd4-470a-abb6-4fd8ec193f4a", "metadata": {}, "outputs": [], "source": [ - "# discard irrelevant data of Delfland Delfland, and create a uniform dataset compared to the other waterschappen\n", - "# Stuw\n", - "Delfland[\"stuw\"] = Delfland[\"stuw\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", - "Delfland[\"stuw\"] = Delfland[\"stuw\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"})\n", - "Delfland[\"stuw\"][\"nen3610id\"] = \"dummy_nen3610id_stuw_\" + Delfland[\"stuw\"].index.astype(str)\n", + "#discard irrelevant data of Delfland Delfland, and create a uniform dataset compared to the other waterschappen\n", + "#Stuw\n", + "Delfland['stuw'] = Delfland['stuw'][['CODE', 'GLOBALID', 'geometry']]\n", + "Delfland['stuw'] = Delfland['stuw'].rename(columns={'CODE': 'code', 'GLOBALID': 'globalid'})\n", + "Delfland['stuw']['nen3610id'] = 'dummy_nen3610id_stuw_' + Delfland['stuw'].index.astype(str)\n", "\n", - "# Gemaal\n", + "#Gemaal\n", "\n", - "# determine aanvoer en afvoer gemalen\n", - "Delfland[\"gemaal\"][\"func_aanvoer\"], Delfland[\"gemaal\"][\"func_afvoer\"], Delfland[\"gemaal\"][\"func_circulatie\"] = (\n", - " False,\n", - " False,\n", - " False,\n", - ") # default is False\n", - "Delfland[\"gemaal\"].FUNCTIEGEMAAL_resolved.fillna(\n", - " Delfland[\"gemaal\"].WS_SOORTGEMAAL\n", - ") # sometimes recircualtie is located in another column, but sometimes they are different. Only fill in for NaN\n", - "Delfland[\"gemaal\"][\"FUNCTIEGEMAAL_resolved\"] = Delfland[\"gemaal\"][\"FUNCTIEGEMAAL_resolved\"].astype(str)\n", + "#determine aanvoer en afvoer gemalen\n", + "Delfland['gemaal']['func_aanvoer'], Delfland['gemaal']['func_afvoer'], Delfland['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "Delfland['gemaal'].FUNCTIEGEMAAL_resolved.fillna(Delfland['gemaal'].WS_SOORTGEMAAL)#sometimes recircualtie is located in another column, but sometimes they are different. Only fill in for NaN\n", + "Delfland['gemaal']['FUNCTIEGEMAAL_resolved'] = Delfland['gemaal']['FUNCTIEGEMAAL_resolved'].astype(str) \n", "\n", - "Delfland[\"gemaal\"].loc[\n", - " Delfland[\"gemaal\"].FUNCTIEGEMAAL_resolved.str.contains(\"Onbekend|Onderbemaling|Afvoergemaal|Af-\"), \"func_afvoer\"\n", - "] = True\n", - "Delfland[\"gemaal\"].loc[Delfland[\"gemaal\"].FUNCTIEGEMAAL_resolved.str.contains(\"Opmaling|Aanvoer\"), \"func_aanvoer\"] = (\n", - " True\n", - ")\n", - "Delfland[\"gemaal\"].loc[\n", - " Delfland[\"gemaal\"].FUNCTIEGEMAAL_resolved.str.contains(\"Overig|circulatie\"), \"func_circulatie\"\n", - "] = True\n", - "Delfland[\"gemaal\"].loc[\n", - " ~Delfland[\"gemaal\"].func_afvoer & ~Delfland[\"gemaal\"].func_aanvoer & ~Delfland[\"gemaal\"].func_circulatie,\n", - " \"func_afvoer\",\n", - "] = True # set to afvoergemaal is there the function is unknown\n", + "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Onbekend|Onderbemaling|Afvoergemaal|Af-'), 'func_afvoer'] = True\n", + "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Opmaling|Aanvoer'), 'func_aanvoer'] = True\n", + "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Overig|circulatie'), 'func_circulatie'] = True\n", + "Delfland['gemaal'].loc[(Delfland['gemaal'].func_afvoer == False) &\n", + " (Delfland['gemaal'].func_aanvoer == False) &\n", + " (Delfland['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown\n", "\n", - "Delfland[\"gemaal\"] = Delfland[\"gemaal\"][[\"GLOBALID\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]]\n", - "Delfland[\"gemaal\"] = Delfland[\"gemaal\"].rename(columns={\"GLOBALID\": \"globalid\"})\n", - "Delfland[\"gemaal\"][\"code\"] = \"dummy_code_gemaal_\" + Delfland[\"gemaal\"].index.astype(str)\n", - "Delfland[\"gemaal\"][\"nen3610id\"] = \"dummy_nen3610id_gemaal_\" + Delfland[\"gemaal\"].index.astype(str)\n", + "Delfland['gemaal'] = Delfland['gemaal'][['GLOBALID', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "Delfland['gemaal'] = Delfland['gemaal'].rename(columns={'GLOBALID': 'globalid'})\n", + "Delfland['gemaal']['code'] = 'dummy_code_gemaal_' + Delfland['gemaal'].index.astype(str)\n", + "Delfland['gemaal']['nen3610id'] = 'dummy_nen3610id_gemaal_' + Delfland['gemaal'].index.astype(str)\n", "\n", - "# Hydroobject\n", - "Delfland[\"hydroobject\"] = Delfland[\"hydroobject\"][[\"GLOBALID\", \"geometry\"]]\n", - "Delfland[\"hydroobject\"] = Delfland[\"hydroobject\"].rename(columns={\"GLOBALID\": \"globalid\"})\n", - "Delfland[\"hydroobject\"][\"code\"] = \"dummy_code_hydroobject_\" + Delfland[\"hydroobject\"].index.astype(str)\n", - "Delfland[\"hydroobject\"][\"nen3610id\"] = \"dummy_nen3610id_hydroobject_\" + Delfland[\"hydroobject\"].index.astype(str)\n", + "#Hydroobject\n", + "Delfland['hydroobject'] = Delfland['hydroobject'][['GLOBALID', 'geometry']]\n", + "Delfland['hydroobject'] = Delfland['hydroobject'].rename(columns={'GLOBALID': 'globalid'})\n", + "Delfland['hydroobject']['code'] = 'dummy_code_hydroobject_' + Delfland['hydroobject'].index.astype(str)\n", + "Delfland['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + Delfland['hydroobject'].index.astype(str)\n", "\n", - "# Keerschot\n", - "Delfland[\"keerschot\"] = Delfland[\"keerschot\"][[\"GLOBALID\", \"geometry\"]]\n", - "Delfland[\"keerschot\"] = Delfland[\"keerschot\"].rename(columns={\"GLOBALID\": \"globalid\"})\n", - "Delfland[\"keerschot\"][\"code\"] = \"dummy_code_keerschot_\" + Delfland[\"keerschot\"].index.astype(str)\n", - "Delfland[\"keerschot\"][\"nen3610id\"] = \"dummy_nen3610id_keerschot_\" + Delfland[\"keerschot\"].index.astype(str)\n", + "#Keerschot\n", + "Delfland['keerschot'] = Delfland['keerschot'][['GLOBALID', 'geometry']]\n", + "Delfland['keerschot'] = Delfland['keerschot'].rename(columns={'GLOBALID': 'globalid'})\n", + "Delfland['keerschot']['code'] = 'dummy_code_keerschot_' + Delfland['keerschot'].index.astype(str)\n", + "Delfland['keerschot']['nen3610id'] = 'dummy_nen3610id_keerschot_' + Delfland['keerschot'].index.astype(str)\n", "\n", - "# duikersifonhevel\n", - "Delfland[\"duikersifonhevel\"] = Delfland[\"duikersifonhevel\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", - "Delfland[\"duikersifonhevel\"] = Delfland[\"duikersifonhevel\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"})\n", - "Delfland[\"duikersifonhevel\"][\"code\"] = \"dummy_code_duikersifonhevel_\" + Delfland[\"duikersifonhevel\"].index.astype(str)\n", - "Delfland[\"duikersifonhevel\"][\"nen3610id\"] = \"dummy_nen3610id_duikersifonhevel_\" + Delfland[\n", - " \"duikersifonhevel\"\n", - "].index.astype(str)\n", + "#duikersifonhevel\n", + "Delfland['duikersifonhevel'] = Delfland['duikersifonhevel'][['CODE', 'GLOBALID', 'geometry']]\n", + "Delfland['duikersifonhevel'] = Delfland['duikersifonhevel'].rename(columns={'CODE':'code', 'GLOBALID': 'globalid'})\n", + "Delfland['duikersifonhevel']['code'] = 'dummy_code_duikersifonhevel_' + Delfland['duikersifonhevel'].index.astype(str)\n", + "Delfland['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + Delfland['duikersifonhevel'].index.astype(str)\n", "\n", - "# afsluitmiddel\n", - "# niet geleverd\n", + "#afsluitmiddel\n", + "#niet geleverd\n", "\n", - "# Peilgebiedpraktijk\n", - "Delfland[\"peilgebiedpraktijk\"] = Delfland[\"peilgebiedpraktijk\"][[\"WS_HOOGPEIL\", \"CODE\", \"GLOBALID\", \"geometry\"]]\n", - "Delfland[\"peilgebiedpraktijk\"][\"nen3610id\"] = \"dummy_nen3610id_peilgebiedpraktijk_\" + Delfland[\n", - " \"peilgebiedpraktijk\"\n", - "].index.astype(str)\n", - "Delfland[\"peilgebiedpraktijk\"] = Delfland[\"peilgebiedpraktijk\"].rename(\n", - " columns={\"WS_HOOGPEIL\": \"streefpeil\", \"CODE\": \"code\", \"GLOBALID\": \"globalid\"}\n", - ")\n", + "#Peilgebiedpraktijk\n", + "Delfland['peilgebiedpraktijk'] = Delfland['peilgebiedpraktijk'][['WS_HOOGPEIL', 'CODE', 'GLOBALID', 'geometry']]\n", + "Delfland['peilgebiedpraktijk']['nen3610id'] = 'dummy_nen3610id_peilgebiedpraktijk_' + Delfland['peilgebiedpraktijk'].index.astype(str)\n", + "Delfland['peilgebiedpraktijk'] = Delfland['peilgebiedpraktijk'].rename(columns={'WS_HOOGPEIL': 'streefpeil', 'CODE':'code', 'GLOBALID':'globalid'})\n", "\n", - "# Streefpeil\n", - "Delfland[\"streefpeil\"] = pd.DataFrame()\n", - "Delfland[\"streefpeil\"][\"waterhoogte\"] = Delfland[\"peilgebiedpraktijk\"][\"streefpeil\"]\n", - "Delfland[\"streefpeil\"][\"globalid\"] = Delfland[\"peilgebiedpraktijk\"][\"globalid\"]\n", - "Delfland[\"streefpeil\"][\"geometry\"] = None\n", - "Delfland[\"streefpeil\"] = gpd.GeoDataFrame(Delfland[\"streefpeil\"], geometry=\"geometry\")\n", + "#Streefpeil\n", + "Delfland['streefpeil'] = pd.DataFrame()\n", + "Delfland['streefpeil']['waterhoogte'] = Delfland['peilgebiedpraktijk']['streefpeil']\n", + "Delfland['streefpeil']['globalid'] = Delfland['peilgebiedpraktijk']['globalid']\n", + "Delfland['streefpeil']['geometry'] = None\n", + "Delfland['streefpeil'] = gpd.GeoDataFrame(Delfland['streefpeil'], geometry = 'geometry')\n", "\n", - "Delfland[\"peilgebied\"] = Delfland[\"peilgebiedpraktijk\"]" + "Delfland['peilgebied'] = Delfland['peilgebiedpraktijk']" ] }, { "cell_type": "markdown", - "id": "7", + "id": "54a863ea-caab-4be6-bca6-78c2ae91941f", "metadata": {}, "source": [ "### Add column to determine the HWS_BZM" @@ -169,23 +158,23 @@ { "cell_type": "code", "execution_count": null, - "id": "8", + "id": "fda7f5c9-6949-4044-b04d-ba438d2b37d3", "metadata": {}, "outputs": [], "source": [ - "Delfland[\"peilgebied\"][\"HWS_BZM\"] = False\n", - "Delfland[\"peilgebied\"].loc[Delfland[\"peilgebied\"].code == \"BZM 1\", \"HWS_BZM\"] = True # looked up manually" + "Delfland['peilgebied']['HWS_BZM'] = False\n", + "Delfland['peilgebied'].loc[Delfland['peilgebied'].code == 'BZM 1', 'HWS_BZM'] = True #looked up manually" ] }, { "cell_type": "code", "execution_count": null, - "id": "9", + "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", "metadata": {}, "outputs": [], "source": [ - "# delete irrelvant data\n", - "variables = [\"peilgebiedpraktijk\"]\n", + "#delete irrelvant data\n", + "variables = ['peilgebiedpraktijk']\n", "\n", "for variable in variables:\n", " if str(variable) in Delfland:\n", @@ -194,7 +183,7 @@ }, { "cell_type": "markdown", - "id": "10", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -203,16 +192,16 @@ { "cell_type": "code", "execution_count": null, - "id": "11", + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap=Delfland)" + "show_layers_and_columns(waterschap = Delfland)" ] }, { "cell_type": "markdown", - "id": "12", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", "metadata": {}, "source": [ "### Store data" @@ -221,7 +210,7 @@ { "cell_type": "code", "execution_count": null, - "id": "13", + "id": "556aea48-a819-4f70-8e22-6c843354a46d", "metadata": {}, "outputs": [], "source": [ @@ -229,20 +218,21 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - "\n", - "store_data(waterschap=Delfland, output_gpkg_path=output_gpkg_path + \"/Delfland\")" + " \n", + "store_data(waterschap = Delfland, \n", + " output_gpkg_path = output_gpkg_path + '/Delfland')\n" ] }, { "cell_type": "raw", - "id": "14", + "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": null, - "id": "15", + "id": "fedb4c6e-49c2-44f4-88f0-0e1ce4802bc7", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb index 5a77de3..4f15f04 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb @@ -3,30 +3,36 @@ { "cell_type": "code", "execution_count": null, - "id": "0", + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", "metadata": {}, "outputs": [], "source": [ - "# import packages and functions\n", - "\n", - "import geopandas as gpd\n", + "#import packages and functions\n", "import numpy as np\n", - "import pandas as pd" + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "import shapely" ] }, { "cell_type": "code", "execution_count": null, - "id": "1", + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", "metadata": {}, "outputs": [], "source": [ - "from general_functions import read_gpkg_layers, show_layers_and_columns, store_data" + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "from general_functions import *" ] }, { "cell_type": "markdown", - "id": "2", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", "metadata": {}, "source": [ "# Hollands Noorderkwartier" @@ -35,11 +41,11 @@ { "cell_type": "code", "execution_count": null, - "id": "3", + "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", "metadata": {}, "outputs": [], "source": [ - "# define relative paths\n", + "#define relative paths\n", "gpkg_path_HHNK = \"../../Data_preprocessed/Waterschappen/HHNK/Noorderkwartier.gpkg\"\n", "gdb_path_HHNK = \"../../Data_preprocessed/Waterschappen/HHNK/Watersysteemanalyse_BWN2.gdb\"\n", "gdb_path_HHNK_nalevering = \"../../Data_preprocessed/Waterschappen/HHNK/Na_levering_HHNK_gemalen_stuwen_20240321.gdb\"\n", @@ -50,38 +56,36 @@ { "cell_type": "code", "execution_count": null, - "id": "4", + "id": "baf1ecdb-36e9-4370-ad9d-28dd4b7b0c6b", "metadata": {}, "outputs": [], "source": [ - "# retrieve the data\n", - "HHNK = read_gpkg_layers(\n", - " gpkg_path=gpkg_path_HHNK,\n", - " variables=[\n", - " # 'stuw', #nalevering\n", - " # 'gemaal', #nalevering\n", - " \"afsluitmiddel\",\n", - " \"hydroobject\",\n", - " \"duikersifonhevel\",\n", - " ],\n", - ")\n", - "# 'peilafwijkinggebied',\n", - "# 'peilgebiedpraktijk',\n", - "# 'pomp'])\n", - "# 'streefpeil'])\n", - "\n", - "# retrieve data from a gdb, as the gpkg of HHNK does not contain all relevant data\n", - "data_gdb = gpd.read_file(gdb_path_HHNK, layer=\"BWN_ruimtekaart\")\n", - "HHNK_nalevering = read_gpkg_layers(gpkg_path=gdb_path_HHNK_nalevering, variables=[\"stuw\", \"gemaal\"]) # nalevering\n", + "#retrieve the data\n", + "HHNK = read_gpkg_layers(gpkg_path = gpkg_path_HHNK, \n", + " variables = [\n", + " # 'stuw', #nalevering\n", + " # 'gemaal', #nalevering\n", + " 'afsluitmiddel',\n", + " 'hydroobject',\n", + " 'duikersifonhevel']) \n", + " # 'peilafwijkinggebied', \n", + " # 'peilgebiedpraktijk',\n", + " # 'pomp'])\n", + " # 'streefpeil'])\n", + " \n", + "#retrieve data from a gdb, as the gpkg of HHNK does not contain all relevant data\n", + "data_gdb = gpd.read_file(gdb_path_HHNK, layer='BWN_ruimtekaart')\n", + "HHNK_nalevering = read_gpkg_layers(gpkg_path = gdb_path_HHNK_nalevering, \n", + " variables = ['stuw', 'gemaal']) #nalevering\n", "\n", - "HHNK[\"stuw\"] = HHNK_nalevering[\"stuw\"]\n", - "HHNK[\"gemaal\"] = HHNK_nalevering[\"gemaal\"]" + "HHNK['stuw'] = HHNK_nalevering['stuw']\n", + "HHNK['gemaal'] = HHNK_nalevering['gemaal']" ] }, { "cell_type": "code", "execution_count": null, - "id": "5", + "id": "3dbf5fe0-ac68-4270-b936-51dd5e7e8215", "metadata": {}, "outputs": [], "source": [] @@ -89,75 +93,58 @@ { "cell_type": "code", "execution_count": null, - "id": "6", + "id": "033468ab-b74c-468a-90b1-eac395ad8d17", "metadata": {}, "outputs": [], "source": [ - "# determine aanvoer en afvoer gemalen\n", - "HHNK[\"gemaal\"][\"func_aanvoer\"], HHNK[\"gemaal\"][\"func_afvoer\"], HHNK[\"gemaal\"][\"func_circulatie\"] = (\n", - " False,\n", - " False,\n", - " False,\n", - ") # default is False\n", - "HHNK[\"gemaal\"][\"functiegemaal\"] = HHNK[\"gemaal\"][\"FUNCTIEGEMAAL\"].astype(str)\n", - "HHNK[\"gemaal\"].loc[HHNK[\"gemaal\"][\"functiegemaal\"] == \"onbekend\", \"functiegemaal\"] = (\n", - " np.nan\n", - ") # replace onbekend with nan, will be filled up later see one line below\n", - "HHNK[\"gemaal\"].loc[HHNK[\"gemaal\"][\"functiegemaal\"] == \"99\", \"functiegemaal\"] = (\n", - " np.nan\n", - ") # replace onbekend with nan, will be filled up later see one line below\n", - "HHNK[\"gemaal\"][\"functiegemaal\"].fillna(\n", - " HHNK[\"gemaal\"][\"OPMERKING\"], inplace=True\n", - ") # some additional is given in this column\n", - "HHNK[\"gemaal\"] = HHNK[\"gemaal\"].loc[\n", - " HHNK[\"gemaal\"][\"functiegemaal\"] != \"niet meer in gebruik\"\n", - "] # filter the gemalen out which are not in use\n", - "HHNK[\"gemaal\"] = HHNK[\"gemaal\"].loc[\n", - " HHNK[\"gemaal\"][\"functiegemaal\"] != \"901\"\n", - "] # filter the gemalen out which are not in use\n", + "#determine aanvoer en afvoer gemalen\n", + "HHNK['gemaal']['func_aanvoer'], HHNK['gemaal']['func_afvoer'], HHNK['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "HHNK['gemaal']['functiegemaal'] = HHNK['gemaal']['FUNCTIEGEMAAL'].astype(str) \n", + "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] == 'onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", + "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] == '99', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", + "HHNK['gemaal']['functiegemaal'].fillna(HHNK['gemaal']['OPMERKING'], inplace = True) #some additional is given in this column\n", + "HHNK['gemaal'] = HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] != 'niet meer in gebruik'] #filter the gemalen out which are not in use\n", + "HHNK['gemaal'] = HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] != '901'] #filter the gemalen out which are not in use\n", "\n", "# HHNK['gemaal'].loc[HHNK['gemaal'].functiegemaal.str.contains('onderbemaling|afvoer|af-'), 'func_afvoer'] = True\n", "# HHNK['gemaal'].loc[HHNK['gemaal'].functiegemaal.str.contains('trekker|opmaling|op-|wateraanvoer|aanvoer'), 'func_aanvoer'] = True #aannamen: trekkerpompen vooral voor wateraanvoer\n", "# HHNK['gemaal'].loc[HHNK['gemaal'].functiegemaal.str.contains('doorspoelpomp'), 'func_circulatie'] = True\n", "\n", - "afvoer_values = [\"2\", \"4\", \"5\", \"6\", \"903\"]\n", - "aanvoer_values = [\"1\", \"3\", \"5\", \"902\", \"903\"] # aannamen: trekkerpompen vooral voor wateraanvoer\n", - "circulatie_values = [\"904\"]\n", + "afvoer_values = ['2', '4', '5', '6', '903']\n", + "aanvoer_values = ['1', '3', '5', '902', '903'] #aannamen: trekkerpompen vooral voor wateraanvoer\n", + "circulatie_values = ['904']\n", "\n", "\n", - "HHNK[\"gemaal\"].loc[HHNK[\"gemaal\"][\"functiegemaal\"].isin(afvoer_values), \"func_afvoer\"] = True\n", - "HHNK[\"gemaal\"].loc[HHNK[\"gemaal\"][\"functiegemaal\"].isin(aanvoer_values), \"func_aanvoer\"] = True\n", - "HHNK[\"gemaal\"].loc[HHNK[\"gemaal\"][\"functiegemaal\"].isin(circulatie_values), \"func_circulatie\"] = True\n", + "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(afvoer_values), 'func_afvoer'] = True\n", + "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(aanvoer_values), 'func_aanvoer'] = True\n", + "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(circulatie_values), 'func_circulatie'] = True\n", "\n", - "HHNK[\"gemaal\"].loc[\n", - " ~HHNK[\"gemaal\"].func_afvoer & ~HHNK[\"gemaal\"].func_aanvoer & ~HHNK[\"gemaal\"].func_circulatie,\n", - " \"func_afvoer\",\n", - "] = True # set to afvoergemaal is there the function is unknown" + "HHNK['gemaal'].loc[(HHNK['gemaal'].func_afvoer == False) &\n", + " (HHNK['gemaal'].func_aanvoer == False) &\n", + " (HHNK['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" ] }, { "cell_type": "code", "execution_count": null, - "id": "7", + "id": "805ffd9b-da23-46e3-977f-84575e32f225", "metadata": {}, "outputs": [], "source": [ - "# gemaal\n", - "HHNK[\"gemaal\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"}, inplace=True)\n", - "HHNK[\"gemaal\"][\"nen3610id\"] = \"dummy_nen3610id_\" + HHNK[\"gemaal\"].index.astype(\n", - " str\n", - ") # create a string as the globalid is usually a str as well\n", + "#gemaal\n", + "HHNK['gemaal'].rename(columns={'CODE': 'code',\n", + " 'GLOBALID': 'globalid'}, inplace = True)\n", + "HHNK['gemaal']['nen3610id'] = 'dummy_nen3610id_' + HHNK['gemaal'].index.astype(str) #create a string as the globalid is usually a str as well\n", "\n", - "# stuw\n", - "HHNK[\"stuw\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"}, inplace=True)\n", - "HHNK[\"stuw\"][\"nen3610id\"] = \"dummy_nen3610id_\" + HHNK[\"stuw\"].index.astype(\n", - " str\n", - ") # create a string as the globalid is usually a str as well" + "#stuw\n", + "HHNK['stuw'].rename(columns={'CODE': 'code',\n", + " 'GLOBALID': 'globalid'}, inplace = True)\n", + "HHNK['stuw']['nen3610id'] = 'dummy_nen3610id_' + HHNK['stuw'].index.astype(str) #create a string as the globalid is usually a str as well\n" ] }, { "cell_type": "markdown", - "id": "8", + "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", "metadata": {}, "source": [ "### GPKG" @@ -166,25 +153,23 @@ { "cell_type": "code", "execution_count": null, - "id": "9", + "id": "9b86f37d-16de-49db-969a-b233f1531abb", "metadata": { "tags": [] }, "outputs": [], "source": [ "# discard irrelevant dataHHNK\n", - "HHNK[\"stuw\"] = HHNK[\"stuw\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", - "HHNK[\"gemaal\"] = HHNK[\"gemaal\"][\n", - " [\"code\", \"globalid\", \"nen3610id\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]\n", - "]\n", - "HHNK[\"hydroobject\"] = HHNK[\"hydroobject\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", - "HHNK[\"afsluitmiddel\"] = HHNK[\"afsluitmiddel\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", - "HHNK[\"duikersifonhevel\"] = HHNK[\"duikersifonhevel\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]" + "HHNK['stuw'] = HHNK['stuw'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "HHNK['gemaal'] = HHNK['gemaal'][['code', 'globalid', 'nen3610id', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "HHNK['hydroobject'] = HHNK['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "HHNK['afsluitmiddel'] = HHNK['afsluitmiddel'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "HHNK['duikersifonhevel'] = HHNK['duikersifonhevel'][['code', 'globalid', 'nen3610id', 'geometry']]" ] }, { "cell_type": "markdown", - "id": "10", + "id": "cdc5db0a-4f5f-464f-aa98-1cc7ea968680", "metadata": {}, "source": [ "### .GDB" @@ -193,57 +178,53 @@ { "cell_type": "code", "execution_count": null, - "id": "11", + "id": "fe5e6309-4370-4da7-bd2c-9c7f7f727545", "metadata": {}, "outputs": [], "source": [ - "data_gdb = data_gdb[[\"streefpeil\", \"geometry\"]]\n", - "data_gdb[\"globalid\"] = \"dummy_globalid_\" + data_gdb.index.astype(\n", - " str\n", - ") # create a string as the globalid is usually a str as well\n", - "streefpeil = data_gdb[[\"streefpeil\", \"globalid\"]]\n", - "peilgebied = data_gdb[[\"globalid\", \"geometry\"]]\n", + "data_gdb = data_gdb[['streefpeil', 'geometry']]\n", + "data_gdb['globalid'] = 'dummy_globalid_' + data_gdb.index.astype(str) #create a string as the globalid is usually a str as well\n", + "streefpeil = data_gdb[['streefpeil', 'globalid']]\n", + "peilgebied = data_gdb[['globalid', 'geometry']]\n", "\n", - "# add the data to the dictionary\n", - "HHNK[\"streefpeil\"] = streefpeil\n", - "HHNK[\"peilgebied\"] = peilgebied\n", + "#add the data to the dictionary\n", + "HHNK['streefpeil'] = streefpeil\n", + "HHNK['peilgebied'] = peilgebied\n", "\n", - "# hand made changes\n", - "HHNK[\"peilgebied\"] = HHNK[\"peilgebied\"][\n", - " HHNK[\"peilgebied\"][\"globalid\"] != 1725\n", - "] # not a correct shape. Basically only lines, with 36 seperate segments" + "#hand made changes\n", + "HHNK['peilgebied'] = HHNK['peilgebied'][HHNK['peilgebied']['globalid'] != 1725] #not a correct shape. Basically only lines, with 36 seperate segments\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "ebd41c6f-24dc-4a56-b24c-65c33b707707", "metadata": {}, "outputs": [], "source": [ - "HHNK[\"streefpeil\"] = HHNK[\"streefpeil\"].rename(columns={\"streefpeil\": \"waterhoogte\"})\n", - "HHNK[\"streefpeil\"][\"geometry\"] = None\n", - "HHNK[\"streefpeil\"] = gpd.GeoDataFrame(HHNK[\"streefpeil\"], geometry=\"geometry\")" + "HHNK['streefpeil'] = HHNK['streefpeil'].rename(columns={'streefpeil': 'waterhoogte'})\n", + "HHNK['streefpeil']['geometry'] = None\n", + "HHNK['streefpeil'] = gpd.GeoDataFrame(HHNK['streefpeil'], geometry = 'geometry')" ] }, { "cell_type": "code", "execution_count": null, - "id": "13", + "id": "e6164c27-8292-4943-bc6e-83445ed956a9", "metadata": {}, "outputs": [], "source": [ "# HHNK['streefpeil']['code'] = 'dummy_code_streefpeil_' + HHNK['streefpeil'].index.astype(str)\n", "# HHNK['streefpeil']['nen3610id'] = 'dummy_nen3610id_streefpeil_' + HHNK['streefpeil'].index.astype(str)\n", "\n", - "HHNK[\"peilgebied\"][\"code\"] = \"dummy_code_\" + HHNK[\"peilgebied\"].index.astype(str)\n", - "HHNK[\"peilgebied\"][\"nen3610id\"] = \"dummy_nen3610id_\" + HHNK[\"peilgebied\"].index.astype(str)\n", - "HHNK[\"peilgebied\"][\"HWS_BZM\"] = False" + "HHNK['peilgebied']['code'] = 'dummy_code_' + HHNK['peilgebied'].index.astype(str)\n", + "HHNK['peilgebied']['nen3610id'] = 'dummy_nen3610id_' + HHNK['peilgebied'].index.astype(str)\n", + "HHNK['peilgebied']['HWS_BZM'] = False" ] }, { "cell_type": "markdown", - "id": "14", + "id": "d72f3d5c-20ed-4ca6-a71f-ddca9cf93fee", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -252,16 +233,16 @@ { "cell_type": "code", "execution_count": null, - "id": "15", + "id": "ffd4ea1b-e2a2-4e3b-a5cf-e820a4709c30", "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap=HHNK)" + "show_layers_and_columns(waterschap = HHNK)" ] }, { "cell_type": "markdown", - "id": "16", + "id": "56fa3a9e-2894-4676-9a47-29fbdadc96c5", "metadata": { "tags": [] }, @@ -271,7 +252,7 @@ }, { "cell_type": "markdown", - "id": "17", + "id": "064607bb-4c54-4dc2-b913-94dfcd18cfa0", "metadata": {}, "source": [ "Some changes by hand have been made. The resulting shapefile contains the bordering BZM and HWS shapes, including streefpeil" @@ -280,38 +261,38 @@ { "cell_type": "code", "execution_count": null, - "id": "18", + "id": "8e8c8649-cde9-40db-b155-d8d80ba65f6a", "metadata": {}, "outputs": [], "source": [ "path_HWS_BZM = \"..\\..\\Scripts\\Aggregeren\\Hoofdwatersysteem\\BZM_HWS_HHNK.shp\"\n", - "HWS_BZM = gpd.read_file(path_HWS_BZM)" + "HWS_BZM = gpd.read_file(path_HWS_BZM)\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "19", + "id": "350baa05-21ab-48af-b4b9-cae7fef089a6", "metadata": {}, "outputs": [], "source": [ - "HWS_BZM[\"code\"] = \"dummy_code_\" + (HWS_BZM.index + max(HHNK[\"peilgebied\"].index) + 1).astype(str)\n", - "HWS_BZM[\"globalid\"] = \"dummy_globalid_\" + (HWS_BZM.index + max(HHNK[\"peilgebied\"].index) + 1).astype(str)\n", - "HWS_BZM[\"nen3610id\"] = \"dummy_nen3610id_\" + (HWS_BZM.index + max(HHNK[\"peilgebied\"].index) + 1).astype(str)\n", - "HWS_BZM[\"waterhoogte\"] = HWS_BZM[\"zomerpeil\"]\n", - "HWS_BZM[\"HWS_BZM\"] = True\n", - "HWS_BZM = HWS_BZM[[\"code\", \"globalid\", \"nen3610id\", \"waterhoogte\", \"HWS_BZM\", \"geometry\"]]\n", + "HWS_BZM['code'] = 'dummy_code_' + (HWS_BZM.index + max(HHNK['peilgebied'].index) + 1).astype(str)\n", + "HWS_BZM['globalid'] = 'dummy_globalid_' + (HWS_BZM.index + max(HHNK['peilgebied'].index) + 1).astype(str)\n", + "HWS_BZM['nen3610id'] = 'dummy_nen3610id_' + (HWS_BZM.index + max(HHNK['peilgebied'].index) + 1).astype(str)\n", + "HWS_BZM['waterhoogte'] = HWS_BZM['zomerpeil']\n", + "HWS_BZM['HWS_BZM'] = True\n", + "HWS_BZM = HWS_BZM[['code', 'globalid', 'nen3610id', 'waterhoogte', 'HWS_BZM', 'geometry']]\n", "\n", - "HWS_BZM_peilgebied = HWS_BZM[[\"code\", \"globalid\", \"nen3610id\", \"HWS_BZM\", \"geometry\"]]\n", - "HWS_BZM_streefpeil = HWS_BZM[[\"waterhoogte\", \"globalid\", \"geometry\"]]\n", + "HWS_BZM_peilgebied = HWS_BZM[['code', 'globalid', 'nen3610id', 'HWS_BZM', 'geometry']]\n", + "HWS_BZM_streefpeil = HWS_BZM[['waterhoogte', 'globalid', 'geometry']]\n", "\n", - "HHNK[\"peilgebied\"] = gpd.GeoDataFrame(pd.concat([HHNK[\"peilgebied\"], HWS_BZM_peilgebied])).reset_index(drop=True)\n", - "HHNK[\"streefpeil\"] = gpd.GeoDataFrame(pd.concat([HHNK[\"streefpeil\"], HWS_BZM_streefpeil])).reset_index(drop=True)" + "HHNK['peilgebied'] = gpd.GeoDataFrame(pd.concat([HHNK['peilgebied'], HWS_BZM_peilgebied])).reset_index(drop=True)\n", + "HHNK['streefpeil'] = gpd.GeoDataFrame(pd.concat([HHNK['streefpeil'], HWS_BZM_streefpeil])).reset_index(drop=True)" ] }, { "cell_type": "markdown", - "id": "20", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", "metadata": {}, "source": [ "### Store data" @@ -320,16 +301,17 @@ { "cell_type": "code", "execution_count": null, - "id": "21", + "id": "556aea48-a819-4f70-8e22-6c843354a46d", "metadata": {}, "outputs": [], "source": [ - "store_data(waterschap=HHNK, output_gpkg_path=output_gpkg_path_HHNK)" + "store_data(waterschap = HHNK, \n", + " output_gpkg_path = output_gpkg_path_HHNK)\n" ] }, { "cell_type": "raw", - "id": "22", + "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", "metadata": {}, "source": [ "Toevoegen aan notities:\n", diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb index 5c8aa26..1c814c3 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb @@ -3,22 +3,26 @@ { "cell_type": "code", "execution_count": null, - "id": "0", + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", "metadata": {}, "outputs": [], "source": [ - "# import packages and functions\n", + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", "import os\n", + "import fiona\n", "\n", - "import geopandas as gpd\n", - "import numpy as np\n", - "import pandas as pd" + "import shapely\n", + "from shapely.validation import make_valid\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "1", + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", "metadata": { "tags": [ "test" @@ -26,85 +30,79 @@ }, "outputs": [], "source": [ - "from general_functions import burn_in_peilgebieden, read_gpkg_layers, show_layers_and_columns, store_data" + "from general_functions import *" ] }, { "cell_type": "code", "execution_count": null, - "id": "2", + "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", "metadata": {}, "outputs": [], "source": [ - "pd.set_option(\"display.max_columns\", None)" + "pd.set_option('display.max_columns', None)" ] }, { "cell_type": "code", "execution_count": null, - "id": "3", + "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", "metadata": {}, "outputs": [], "source": [ - "# define relative paths\n", - "waterschap = \"HHSK\"\n", - "path_HHSK = \"..\\..\\Data_preprocessed\\Waterschappen\\HHSK\\HyDamo_metWasverzachter_20230905.gpkg\"\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/HHSK\"" + "#define relative paths\n", + "waterschap = 'HHSK'\n", + "path_HHSK = '..\\..\\Data_preprocessed\\Waterschappen\\HHSK\\HyDamo_metWasverzachter_20230905.gpkg'\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/HHSK\"\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "4", + "id": "1f39bd82-2fed-41d6-a4f7-979a9a2120bd", "metadata": {}, "outputs": [], "source": [ - "HHSK = read_gpkg_layers(\n", - " gpkg_path=path_HHSK,\n", - " variables=[\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " \"afsluitmiddel\",\n", - " \"duikersifonhevel\",\n", - " \"hydroobject\",\n", - " # 'peilgebiedvigerend',\n", - " # 'peilafwijkinggebied',\n", - " # 'peilbesluitgebied',\n", - " \"streefpeil\",\n", - " ],\n", - " engine=\"pyogrio\",\n", - ")" + "HHSK = read_gpkg_layers(gpkg_path = path_HHSK, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'afsluitmiddel',\n", + " 'duikersifonhevel',\n", + " 'hydroobject',\n", + " # 'peilgebiedvigerend',\n", + " # 'peilafwijkinggebied',\n", + " # 'peilbesluitgebied',\n", + " 'streefpeil'],\n", + " engine = 'pyogrio') \n", + " " ] }, { "cell_type": "code", "execution_count": null, - "id": "5", + "id": "279c940f-4290-48d6-bd48-b1e79f8be16e", "metadata": {}, "outputs": [], "source": [ - "HHSK_nalevering = read_gpkg_layers(\n", - " gpkg_path=r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\LHM_hhsk_nalevering.gpkg\",\n", - " variables=[\"Persleiding\"],\n", - ")" + "HHSK_nalevering = read_gpkg_layers(gpkg_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\LHM_hhsk_nalevering.gpkg\",\n", + " variables = ['Persleiding'])" ] }, { "cell_type": "code", "execution_count": null, - "id": "6", + "id": "6ea5a43d-b2e6-42ef-8002-01c3377ed897", "metadata": {}, "outputs": [], "source": [ - "HHSK_2nalevering = read_gpkg_layers(\n", - " gpkg_path=r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\hhsklevering_07032024.gpkg\",\n", - " variables=[\"PeilgebiedPraktijk\", \"VigerendPeilgebiedZPP\"],\n", - ")" + "HHSK_2nalevering = read_gpkg_layers(gpkg_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\hhsklevering_07032024.gpkg\",\n", + " variables = ['PeilgebiedPraktijk',\n", + " 'VigerendPeilgebiedZPP'])" ] }, { "cell_type": "markdown", - "id": "7", + "id": "32562573-3c78-4565-85be-1b7c03a023be", "metadata": {}, "source": [ "## Only select status_object == 3" @@ -113,46 +111,36 @@ { "cell_type": "code", "execution_count": null, - "id": "8", + "id": "10efac14-fd47-4f61-9180-e89e864713c7", "metadata": {}, "outputs": [], "source": [ - "HHSK[\"stuw\"] = HHSK[\"stuw\"].loc[(HHSK[\"stuw\"][\"statusobject\"] == \"3\") | (HHSK[\"stuw\"][\"statusobject\"] == 3)]\n", - "HHSK[\"gemaal\"] = HHSK[\"gemaal\"].loc[(HHSK[\"gemaal\"][\"statusobject\"] == \"3\") | (HHSK[\"gemaal\"][\"statusobject\"] == 3)]\n", - "HHSK[\"hydroobject\"] = HHSK[\"hydroobject\"].loc[\n", - " (HHSK[\"hydroobject\"][\"statusobject\"] == \"3\") | (HHSK[\"hydroobject\"][\"statusobject\"] == 3)\n", - "]\n", - "HHSK[\"duikersifonhevel\"] = HHSK[\"duikersifonhevel\"].loc[\n", - " (HHSK[\"duikersifonhevel\"][\"statusobject\"] == \"3\") | (HHSK[\"duikersifonhevel\"][\"statusobject\"] == 3)\n", - "]\n", - "HHSK[\"afsluitmiddel\"] = HHSK[\"afsluitmiddel\"].loc[\n", - " (HHSK[\"afsluitmiddel\"][\"statusobject\"] == \"3\") | (HHSK[\"afsluitmiddel\"][\"statusobject\"] == 3)\n", - "]\n", + "HHSK['stuw'] = HHSK['stuw'].loc[(HHSK['stuw']['statusobject'] == '3') | (HHSK['stuw']['statusobject'] == 3)]\n", + "HHSK['gemaal'] = HHSK['gemaal'].loc[(HHSK['gemaal']['statusobject'] == '3') | (HHSK['gemaal']['statusobject'] == 3)]\n", + "HHSK['hydroobject'] = HHSK['hydroobject'].loc[(HHSK['hydroobject']['statusobject'] == '3') | (HHSK['hydroobject']['statusobject'] == 3)]\n", + "HHSK['duikersifonhevel'] = HHSK['duikersifonhevel'].loc[(HHSK['duikersifonhevel']['statusobject'] == '3') | (HHSK['duikersifonhevel']['statusobject'] == 3)]\n", + "HHSK['afsluitmiddel'] = HHSK['afsluitmiddel'].loc[(HHSK['afsluitmiddel']['statusobject'] == '3') | (HHSK['afsluitmiddel']['statusobject'] == 3)]\n", "\n", "# HHSK['peilgebiedvigerend'] = HHSK['peilgebiedvigerend'].loc[(HHSK['peilgebiedvigerend']['statusobject'] == '3') | (HHSK['peilgebiedvigerend']['statusobject'] == 3)]\n", "# HHSK['peilafwijkinggebied'] = HHSK['peilafwijkinggebied'].loc[(HHSK['peilafwijkinggebied']['statusobject'] == '3') | (HHSK['peilafwijkinggebied']['statusobject'] == 3)]\n", "\n", - "HHSK_nalevering[\"Persleiding\"] = HHSK_nalevering[\"Persleiding\"].loc[\n", - " (HHSK_nalevering[\"Persleiding\"][\"STATUSOBJECT\"] == \"3\") | (HHSK_nalevering[\"Persleiding\"][\"STATUSOBJECT\"] == 3)\n", - "]" + "HHSK_nalevering['Persleiding'] = HHSK_nalevering['Persleiding'].loc[(HHSK_nalevering['Persleiding']['STATUSOBJECT'] == '3') | (HHSK_nalevering['Persleiding']['STATUSOBJECT'] == 3)]" ] }, { "cell_type": "code", "execution_count": null, - "id": "9", + "id": "d91ef127-a46e-4ce7-b4fc-ec13d39b6820", "metadata": {}, "outputs": [], "source": [ - "HHSK[\"hydroobject\"][\"categorieoppwaterlichaam\"] = HHSK[\"hydroobject\"][\"categorieoppwaterlichaam\"].astype(float)\n", - "HHSK[\"hydroobject\"] = HHSK[\"hydroobject\"].loc[\n", - " HHSK[\"hydroobject\"][\"categorieoppwaterlichaam\"] == 1\n", - "] # only select primaire waterlichamen" + "HHSK['hydroobject']['categorieoppwaterlichaam'] = HHSK['hydroobject']['categorieoppwaterlichaam'].astype(float)\n", + "HHSK['hydroobject'] = HHSK['hydroobject'].loc[HHSK['hydroobject']['categorieoppwaterlichaam'] == 1] #only select primaire waterlichamen" ] }, { "cell_type": "markdown", - "id": "10", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", "metadata": {}, "source": [ "# HHSK" @@ -160,7 +148,7 @@ }, { "cell_type": "markdown", - "id": "11", + "id": "62a8afeb-9d69-4df0-8e9a-0aa255543fb1", "metadata": { "tags": [] }, @@ -171,31 +159,26 @@ { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "8196e429-c7c1-40f1-9dd3-525699656dc7", "metadata": {}, "outputs": [], "source": [ - "# determine aanvoer en afvoer gemalen\n", - "HHSK[\"gemaal\"][\"func_aanvoer\"], HHSK[\"gemaal\"][\"func_afvoer\"], HHSK[\"gemaal\"][\"func_circulatie\"] = (\n", - " False,\n", - " False,\n", - " False,\n", - ") # default is False\n", - "HHSK[\"gemaal\"][\"functiegemaal\"] = HHSK[\"gemaal\"][\"functiegemaal\"].astype(str)\n", + "#determine aanvoer en afvoer gemalen\n", + "HHSK['gemaal']['func_aanvoer'], HHSK['gemaal']['func_afvoer'], HHSK['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "HHSK['gemaal']['functiegemaal'] = HHSK['gemaal']['functiegemaal'].astype(str) \n", "\n", - "HHSK[\"gemaal\"].loc[HHSK[\"gemaal\"].functiegemaal.str.contains(\"2|4|5|6|7|99\"), \"func_afvoer\"] = True\n", - "HHSK[\"gemaal\"].loc[HHSK[\"gemaal\"].functiegemaal.str.contains(\"1|3|5|\"), \"func_aanvoer\"] = True\n", - "HHSK[\"gemaal\"].loc[HHSK[\"gemaal\"].functiegemaal.str.contains(\"8\"), \"func_circulatie\"] = True\n", - "HHSK[\"gemaal\"].loc[\n", - " ~HHSK[\"gemaal\"].func_afvoer & ~HHSK[\"gemaal\"].func_aanvoer & ~HHSK[\"gemaal\"].func_circulatie,\n", - " \"func_afvoer\",\n", - "] = True # set to afvoergemaal is there the function is unknown" + "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('2|4|5|6|7|99'), 'func_afvoer'] = True\n", + "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('1|3|5|'), 'func_aanvoer'] = True\n", + "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('8'), 'func_circulatie'] = True\n", + "HHSK['gemaal'].loc[(HHSK['gemaal'].func_afvoer == False) &\n", + " (HHSK['gemaal'].func_aanvoer == False) &\n", + " (HHSK['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" ] }, { "cell_type": "code", "execution_count": null, - "id": "13", + "id": "5f19829d-6116-45d4-92ae-a0e27509afa3", "metadata": {}, "outputs": [], "source": [] @@ -203,17 +186,15 @@ { "cell_type": "code", "execution_count": null, - "id": "14", + "id": "fe221b99-ad03-4688-a656-9cb19e4f1a8b", "metadata": {}, "outputs": [], "source": [ - "HHSK[\"stuw\"] = HHSK[\"stuw\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "HHSK[\"gemaal\"] = HHSK[\"gemaal\"][\n", - " [\"code\", \"nen3610id\", \"globalid\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]\n", - "]\n", - "HHSK[\"hydroobject\"] = HHSK[\"hydroobject\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "HHSK[\"duikersifonhevel\"] = HHSK[\"duikersifonhevel\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "HHSK[\"afsluitmiddel\"] = HHSK[\"afsluitmiddel\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "HHSK['stuw'] = HHSK['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "HHSK['gemaal'] = HHSK['gemaal'][['code', 'nen3610id', 'globalid', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "HHSK['hydroobject'] = HHSK['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "HHSK['duikersifonhevel'] = HHSK['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "HHSK['afsluitmiddel'] = HHSK['afsluitmiddel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", "\n", "# HHSK['peilgebiedvigerend'] = HHSK['peilgebiedvigerend'][['code', 'nen3610id', 'globalid', 'geometry']]\n", "# HHSK['peilafwijkinggebied'] = HHSK['peilafwijkinggebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", @@ -223,7 +204,7 @@ }, { "cell_type": "markdown", - "id": "15", + "id": "8c3e7f83-1aa8-4714-8ef5-7d0176097d94", "metadata": { "tags": [] }, @@ -234,38 +215,35 @@ { "cell_type": "code", "execution_count": null, - "id": "16", + "id": "75bbbea1-5ef9-4935-ad8e-4f294eaf1c9f", "metadata": {}, "outputs": [], "source": [ - "HHSK_nalevering[\"Persleiding\"] = HHSK_nalevering[\"Persleiding\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", - "HHSK_nalevering[\"Persleiding\"][\"nen3610id\"] = \"dummy_nen3610id_persleiding_\" + HHSK_nalevering[\n", - " \"Persleiding\"\n", - "].index.astype(str)\n", - "HHSK_nalevering[\"Persleiding\"] = HHSK_nalevering[\"Persleiding\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"})" + "HHSK_nalevering['Persleiding'] = HHSK_nalevering['Persleiding'][['CODE', 'GLOBALID', 'geometry']]\n", + "HHSK_nalevering['Persleiding']['nen3610id'] = 'dummy_nen3610id_persleiding_' + HHSK_nalevering['Persleiding'].index.astype(str)\n", + "HHSK_nalevering['Persleiding'] = HHSK_nalevering['Persleiding'].rename(columns = {'CODE': 'code',\n", + " 'GLOBALID': 'globalid'})\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "17", + "id": "8495f3ba-98df-4eea-97a5-d09534e36885", "metadata": {}, "outputs": [], "source": [ - "HHSK[\"duikersifonhevel\"] = gpd.GeoDataFrame(\n", - " pd.concat([HHSK[\"duikersifonhevel\"], HHSK_nalevering[\"Persleiding\"]])\n", - ").reset_index(drop=True)\n", + "HHSK['duikersifonhevel'] = gpd.GeoDataFrame(pd.concat([HHSK['duikersifonhevel'], HHSK_nalevering['Persleiding']])).reset_index(drop=True)\n", "\n", - "# HHSK has apparently non unique values for the global ids in duikersifonhevel\n", - "HHSK[\"duikersifonhevel\"][\"globalid\"] = \"dummy_globalid_duikersifonhevel_\" + HHSK[\"duikersifonhevel\"].index.astype(str)\n", + "#HHSK has apparently non unique values for the global ids in duikersifonhevel\n", + "HHSK['duikersifonhevel']['globalid'] = 'dummy_globalid_duikersifonhevel_' + HHSK['duikersifonhevel'].index.astype(str)\n", "\n", - "# remove empty point geomtries from the gemalen\n", - "HHSK[\"gemaal\"] = HHSK[\"gemaal\"][~HHSK[\"gemaal\"].is_empty].reset_index(drop=True)" + "#remove empty point geomtries from the gemalen\n", + "HHSK['gemaal'] = HHSK['gemaal'][~HHSK['gemaal'].is_empty].reset_index(drop=True)" ] }, { "cell_type": "markdown", - "id": "18", + "id": "31841446-4e06-47b7-98a3-38d389df26df", "metadata": {}, "source": [ "### Add the nageleverde peilgebieden to the original data" @@ -274,75 +252,61 @@ { "cell_type": "code", "execution_count": null, - "id": "19", + "id": "9ee954f4-c333-4bb4-8dcc-b1e1cd7c2b57", "metadata": {}, "outputs": [], "source": [ - "# edit the peilgebiedpraktijk\n", - "HHSK_2nalevering[\"PeilgebiedPraktijk\"][\"ONDERPEIL\"].fillna(\n", - " HHSK_2nalevering[\"PeilgebiedPraktijk\"][\"VASTPEIL\"], inplace=True\n", - ")\n", - "HHSK_2nalevering[\"PeilgebiedPraktijk\"][\"ONDERPEIL\"].fillna(\n", - " HHSK_2nalevering[\"PeilgebiedPraktijk\"][\"BOVENPEIL\"], inplace=True\n", - ")\n", - "HHSK_2nalevering[\"PeilgebiedPraktijk\"][\"ONDERPEIL\"].fillna(\n", - " HHSK_2nalevering[\"PeilgebiedPraktijk\"][\"SCHOUWPEIL\"], inplace=True\n", - ")\n", + "#edit the peilgebiedpraktijk\n", + "HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'].fillna(HHSK_2nalevering['PeilgebiedPraktijk']['VASTPEIL'], inplace= True)\n", + "HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'].fillna(HHSK_2nalevering['PeilgebiedPraktijk']['BOVENPEIL'], inplace= True)\n", + "HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'].fillna(HHSK_2nalevering['PeilgebiedPraktijk']['SCHOUWPEIL'], inplace= True)\n", "\n", - "HHSK[\"peilgebiedpraktijk\"] = HHSK_2nalevering[\"PeilgebiedPraktijk\"][[\"CODE\", \"ONDERPEIL\", \"BRONGID\", \"geometry\"]]\n", - "HHSK[\"peilgebiedpraktijk\"] = HHSK_2nalevering[\"PeilgebiedPraktijk\"].rename(\n", - " columns={\"CODE\": \"code\", \"ONDERPEIL\": \"waterhoogte\", \"BRONGID\": \"globalid\"}\n", - ")" + "HHSK['peilgebiedpraktijk'] = HHSK_2nalevering['PeilgebiedPraktijk'][['CODE', 'ONDERPEIL', 'BRONGID', 'geometry']]\n", + "HHSK['peilgebiedpraktijk'] = HHSK_2nalevering['PeilgebiedPraktijk'].rename(columns = {'CODE': 'code',\n", + " 'ONDERPEIL': 'waterhoogte',\n", + " 'BRONGID': 'globalid'})" ] }, { "cell_type": "code", "execution_count": null, - "id": "20", + "id": "c37cfb5c-3b9e-4e57-b44c-3cbe610da093", "metadata": {}, "outputs": [], "source": [ - "# edit the peilgebiedvigerend\n", - "HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][\"ONDERPEIL\"].fillna(\n", - " HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][\"VASTPEIL\"], inplace=True\n", - ")\n", - "HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][\"ONDERPEIL\"].fillna(\n", - " HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][\"BOVENPEIL\"], inplace=True\n", - ")\n", - "HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][\"ONDERPEIL\"].fillna(\n", - " HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][\"SCHOUWPEIL\"], inplace=True\n", - ")\n", + "#edit the peilgebiedvigerend\n", + "HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'].fillna(HHSK_2nalevering['VigerendPeilgebiedZPP']['VASTPEIL'], inplace= True)\n", + "HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'].fillna(HHSK_2nalevering['VigerendPeilgebiedZPP']['BOVENPEIL'], inplace= True)\n", + "HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'].fillna(HHSK_2nalevering['VigerendPeilgebiedZPP']['SCHOUWPEIL'], inplace= True)\n", "\n", - "HHSK[\"peilgebiedvigerend\"] = HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][[\"CODE\", \"ONDERPEIL\", \"BRONGID\", \"geometry\"]]\n", - "HHSK[\"peilgebiedvigerend\"] = HHSK_2nalevering[\"VigerendPeilgebiedZPP\"].rename(\n", - " columns={\"CODE\": \"code\", \"ONDERPEIL\": \"waterhoogte\", \"BRONGID\": \"globalid\"}\n", - ")" + "HHSK['peilgebiedvigerend'] = HHSK_2nalevering['VigerendPeilgebiedZPP'][['CODE', 'ONDERPEIL', 'BRONGID', 'geometry']]\n", + "HHSK['peilgebiedvigerend'] = HHSK_2nalevering['VigerendPeilgebiedZPP'].rename(columns = {'CODE': 'code',\n", + " 'ONDERPEIL': 'waterhoogte',\n", + " 'BRONGID': 'globalid'})" ] }, { "cell_type": "code", "execution_count": null, - "id": "21", + "id": "fd7bfade-497b-40bd-8345-8dc4fd3d172b", "metadata": {}, "outputs": [], "source": [ - "# select the peilgebiedpraktijk which have a primaire hydroobject\n", + "#select the peilgebiedpraktijk which have a primaire hydroobject\n", "\n", - "# pgp_pw : PeilGebiedPraktijk Primaire Watergang\n", - "pgp_pw = gpd.sjoin(\n", - " left_df=HHSK_2nalevering[\"PeilgebiedPraktijk\"],\n", - " right_df=HHSK[\"hydroobject\"],\n", - " how=\"inner\",\n", - " predicate=\"contains\",\n", - " lsuffix=\"pgp\",\n", - " rsuffix=\"hydroobject\",\n", - ").drop_duplicates(subset=\"CODE\")" + "#pgp_pw : PeilGebiedPraktijk Primaire Watergang\n", + "pgp_pw = gpd.sjoin(left_df = HHSK_2nalevering['PeilgebiedPraktijk'], \n", + " right_df = HHSK['hydroobject'],\n", + " how=\"inner\", \n", + " predicate='contains',\n", + " lsuffix = 'pgp',\n", + " rsuffix = 'hydroobject').drop_duplicates(subset='CODE') \n" ] }, { "cell_type": "code", "execution_count": null, - "id": "22", + "id": "5631e7ba-f5a0-4eaf-942a-3b6535a4ba8b", "metadata": {}, "outputs": [], "source": [ @@ -352,17 +316,20 @@ { "cell_type": "code", "execution_count": null, - "id": "23", + "id": "7df9baa4-7092-4401-be9a-fd3a451c38b0", "metadata": {}, "outputs": [], "source": [ - "pgv_diff = gpd.sjoin(left_df=HHSK[\"peilgebiedvigerend\"], right_df=pgp_pw, how=\"inner\", predicate=\"intersects\")" + "pgv_diff = gpd.sjoin(left_df = HHSK['peilgebiedvigerend'],\n", + " right_df = pgp_pw,\n", + " how = \"inner\",\n", + " predicate = 'intersects')" ] }, { "cell_type": "code", "execution_count": null, - "id": "24", + "id": "a03b9016-af7d-4c4e-a10b-1f2ea2ee9254", "metadata": {}, "outputs": [], "source": [ @@ -372,25 +339,21 @@ { "cell_type": "code", "execution_count": null, - "id": "25", + "id": "9736e6e4-0e8f-4396-a1f4-3b4f3e9bf690", "metadata": {}, "outputs": [], "source": [ - "streefpeilen_PG_v = pd.merge(\n", - " left=HHSK[\"peilgebiedvigerend\"],\n", - " right=HHSK[\"streefpeil\"],\n", - " left_on=\"globalid\",\n", - " right_on=\"peilgebiedvigerendid\",\n", - " suffixes=(\"\", \"_streefpeil\"),\n", - ")[[\"code\", \"nen3610id\", \"globalid\", \"waterhoogte\", \"geometry\"]]\n", + "# streefpeilen_PG_v = pd.merge(left = HHSK['peilgebiedvigerend'],\n", + "# right = HHSK['streefpeil'],\n", + "# left_on = 'globalid',\n", + "# right_on = 'peilgebiedvigerendid',\n", + "# suffixes = ('', '_streefpeil'))[['code', 'nen3610id', 'globalid', 'waterhoogte', 'geometry']]\n", "\n", - "streefpeilen_PG_a = pd.merge(\n", - " left=HHSK[\"peilafwijkinggebied\"],\n", - " right=HHSK[\"streefpeil\"],\n", - " left_on=\"globalid\",\n", - " right_on=\"peilafwijkinggebiedid\",\n", - " suffixes=(\"\", \"_streefpeil\"),\n", - ")[[\"code\", \"nen3610id\", \"globalid\", \"waterhoogte\", \"geometry\"]]\n", + "# streefpeilen_PG_a = pd.merge(left = HHSK['peilafwijkinggebied'],\n", + "# right = HHSK['streefpeil'],\n", + "# left_on = 'globalid',\n", + "# right_on = 'peilafwijkinggebiedid',\n", + "# suffixes = ('', '_streefpeil'))[['code', 'nen3610id', 'globalid', 'waterhoogte', 'geometry']]\n", "\n", "# fig, ax = plt.subplots()\n", "# streefpeilen_PG_v.plot(ax = ax, color='cornflowerblue')\n", @@ -400,7 +363,7 @@ { "cell_type": "code", "execution_count": null, - "id": "26", + "id": "b5d16748-7262-4e43-baa2-f182cb8dd142", "metadata": {}, "outputs": [], "source": [ @@ -411,50 +374,52 @@ { "cell_type": "code", "execution_count": null, - "id": "27", + "id": "0292ab77-acfd-4666-9c3b-b9bd8c1f1fec", "metadata": {}, "outputs": [], "source": [ - "peilgebied = burn_in_peilgebieden(base_layer=streefpeilen_PG_v, overlay_layer=streefpeilen_PG_a, plot=True)" + "# peilgebied = burn_in_peilgebieden(base_layer = streefpeilen_PG_v, \n", + "# overlay_layer = streefpeilen_PG_a,\n", + "# plot = True)" ] }, { "cell_type": "code", "execution_count": null, - "id": "28", + "id": "cd21bcac-8d25-4d47-ad0a-c7338e6e6653", "metadata": {}, "outputs": [], "source": [ "streefpeil = gpd.GeoDataFrame()\n", - "streefpeil[\"waterhoogte\"] = peilgebied[\"waterhoogte\"]\n", - "streefpeil[\"globalid\"] = peilgebied[\"globalid\"]\n", - "streefpeil[\"geometry\"] = np.nan\n", - "HHSK[\"streefpeil\"] = gpd.GeoDataFrame(streefpeil)" + "streefpeil['waterhoogte'] = peilgebied['waterhoogte']\n", + "streefpeil['globalid'] = peilgebied['globalid']\n", + "streefpeil['geometry'] = np.nan\n", + "HHSK['streefpeil'] = gpd.GeoDataFrame(streefpeil)" ] }, { "cell_type": "code", "execution_count": null, - "id": "29", + "id": "88e9543c-2dbe-4ebf-9423-b38daeeaa004", "metadata": {}, "outputs": [], "source": [ - "HHSK[\"peilgebied\"] = gpd.GeoDataFrame(peilgebied[[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]])" + "HHSK['peilgebied'] = gpd.GeoDataFrame(peilgebied[['code', 'nen3610id', 'globalid', 'geometry']])" ] }, { "cell_type": "code", "execution_count": null, - "id": "30", + "id": "6cdf901e-c4b4-4fb8-9f40-4731ff3c2d1d", "metadata": {}, "outputs": [], "source": [ - "HHSK[\"peilgebied\"] = HHSK[\"peilgebied\"].loc[HHSK[\"peilgebied\"][\"code\"] != \"GPG-1206\"] # Not a regular polygon" + "HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied']['code'] !='GPG-1206'] #Not a regular polygon" ] }, { "cell_type": "markdown", - "id": "31", + "id": "51df5dde-d374-4ae3-8d43-1c495581f021", "metadata": {}, "source": [ "### Delete irrelevant data" @@ -463,12 +428,12 @@ { "cell_type": "code", "execution_count": null, - "id": "32", + "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", "metadata": {}, "outputs": [], "source": [ - "# delete irrelvant data\n", - "variables = [\"peilgebiedpraktijk\", \"peilgebiedvigerend\", \"peilafwijkinggebied\"]\n", + "#delete irrelvant data\n", + "variables = ['peilgebiedpraktijk', 'peilgebiedvigerend', 'peilafwijkinggebied']\n", "\n", "for variable in variables:\n", " if str(variable) in HHSK:\n", @@ -478,19 +443,19 @@ { "cell_type": "code", "execution_count": null, - "id": "33", + "id": "375f1598-03c1-48a1-bb19-54790273dad0", "metadata": {}, "outputs": [], "source": [ - "# add duikersifonhevels to the hydroobjecten\n", - "HHSK[\"hydroobject\"] = pd.concat([HHSK[\"hydroobject\"], HHSK[\"duikersifonhevel\"]])\n", - "HHSK[\"hydroobject\"] = HHSK[\"hydroobject\"].drop_duplicates(subset=\"globalid\") # in case it is run multiple times\n", - "HHSK[\"hydroobject\"] = gpd.GeoDataFrame(HHSK[\"hydroobject\"]).set_crs(\"epsg:28992\")" + "#add duikersifonhevels to the hydroobjecten \n", + "HHSK['hydroobject'] = pd.concat([HHSK['hydroobject'], HHSK['duikersifonhevel']])\n", + "HHSK['hydroobject'] = HHSK['hydroobject'].drop_duplicates(subset='globalid') #in case it is run multiple times\n", + "HHSK['hydroobject'] = gpd.GeoDataFrame(HHSK['hydroobject']).set_crs('epsg:28992')\n" ] }, { "cell_type": "markdown", - "id": "34", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -499,16 +464,16 @@ { "cell_type": "code", "execution_count": null, - "id": "35", + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap=HHSK)" + "show_layers_and_columns(waterschap = HHSK)" ] }, { "cell_type": "markdown", - "id": "36", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", "metadata": {}, "source": [ "### Store data" @@ -517,7 +482,7 @@ { "cell_type": "code", "execution_count": null, - "id": "37", + "id": "556aea48-a819-4f70-8e22-6c843354a46d", "metadata": {}, "outputs": [], "source": [ @@ -525,14 +490,15 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - "\n", - "store_data(waterschap=HHSK, output_gpkg_path=output_gpkg_path + \"/HHSK\")" + " \n", + "store_data(waterschap = HHSK, \n", + " output_gpkg_path = output_gpkg_path + '/HHSK')\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "38", + "id": "69cbb333-f66e-4ca8-880f-3242846c6a9b", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb index 213ab49..1f20b6e 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb @@ -3,31 +3,33 @@ { "cell_type": "code", "execution_count": null, - "id": "0", + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", "metadata": {}, "outputs": [], "source": [ - "# import packages and functions\n", - "import os\n", - "\n", - "import geopandas as gpd\n", + "#import packages and functions\n", "import numpy as np\n", - "import pandas as pd" + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "import shapely" ] }, { "cell_type": "code", "execution_count": null, - "id": "1", + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", "metadata": {}, "outputs": [], "source": [ - "from general_functions import read_gpkg_layers, show_layers_and_columns, store_data" + "from general_functions import *" ] }, { "cell_type": "markdown", - "id": "2", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", "metadata": {}, "source": [ "# HD" @@ -36,14 +38,14 @@ { "cell_type": "code", "execution_count": null, - "id": "3", + "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# define relative paths\n", - "waterschap = \"Hollandse_Delta\"\n", + "#define relative paths\n", + "waterschap = 'Hollandse_Delta'\n", "data_path = \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Hollandse_Delta_aangepast.gpkg\"\n", "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Hollandse_Delta\"" ] @@ -51,60 +53,56 @@ { "cell_type": "code", "execution_count": null, - "id": "4", + "id": "532b0b83-2139-4d48-8e42-883ed8e88325", "metadata": {}, "outputs": [], "source": [ - "HD = read_gpkg_layers(\n", - " gpkg_path=data_path,\n", - " variables=[\n", - " \"stuwen\",\n", - " \"gemalen\",\n", - " \"afsluitmiddelen\",\n", - " \"sluizen\",\n", - " \"HydroObjectWatergangtype\", # = hydroobject\n", - " \"HydroObjectKunstwerkvakken\",\n", - " ],\n", - ") # = duikersifonhevel\n", + "HD = read_gpkg_layers(gpkg_path = data_path, \n", + " variables = ['stuwen', \n", + " 'gemalen', \n", + " 'afsluitmiddelen',\n", + " 'sluizen',\n", + " 'HydroObjectWatergangtype', #= hydroobject\n", + " 'HydroObjectKunstwerkvakken']) #= duikersifonhevel\n", "\n", - "# change names\n", - "HD[\"stuw\"] = HD.pop(\"stuwen\")\n", - "HD[\"gemaal\"] = HD.pop(\"gemalen\")\n", - "HD[\"afsluitmiddel\"] = HD.pop(\"afsluitmiddelen\")\n", - "HD[\"sluis\"] = HD.pop(\"sluizen\")\n", - "HD[\"hydroobject\"] = HD.pop(\"HydroObjectWatergangtype\")\n", - "HD[\"duikersifonhevel\"] = HD.pop(\"HydroObjectKunstwerkvakken\")" + "#change names\n", + "HD['stuw'] = HD.pop('stuwen')\n", + "HD['gemaal'] = HD.pop('gemalen')\n", + "HD['afsluitmiddel'] = HD.pop('afsluitmiddelen')\n", + "HD['sluis'] = HD.pop('sluizen')\n", + "HD['hydroobject'] = HD.pop('HydroObjectWatergangtype')\n", + "HD['duikersifonhevel'] = HD.pop('HydroObjectKunstwerkvakken')\n", + " \n" ] }, { "cell_type": "code", "execution_count": null, - "id": "5", + "id": "077f1c26-c738-48f7-b9df-bec5b7356c9a", "metadata": {}, "outputs": [], "source": [ - "# see the readme: peilgebieden have not be delivered properly. This data is retrieved from an external online database.\n", + "#see the readme: peilgebieden have not be delivered properly. This data is retrieved from an external online database.\n", "# peilgebieden_path = '../../Data_preprocessed/Waterschappen/Hollandse_Delta/WSHD_Peilgebieden_(Vigerend).shp'\n", - "peilgebieden_path_all = (\n", - " \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Nalvering_tweede/Shapefiles/PeilgebiedenPraktijk.shp\"\n", - ")\n", - "peilgebieden_path_geen_AP = (\n", - " \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Nalvering_tweede/Shapefiles/PeilgebiedenGeenAP.shp\"\n", - ")\n", + "peilgebieden_path_all = \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Nalvering_tweede/Shapefiles/PeilgebiedenPraktijk.shp\"\n", + "peilgebieden_path_geen_AP = \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Nalvering_tweede/Shapefiles/PeilgebiedenGeenAP.shp\"\n", "\n", - "# load in both the old ones and the new ones, as the new ones do not have the peilgebiedafwijkingen, but they dont have the streefpeilen. These are stored in the old ones.\n", + "#load in both the old ones and the new ones, as the new ones do not have the peilgebiedafwijkingen, but they dont have the streefpeilen. These are stored in the old ones.\n", "peilgebieden_all = gpd.read_file(peilgebieden_path_all)\n", "peilgebieden_geen_AP = gpd.read_file(peilgebieden_path_geen_AP)\n", "\n", - "peilgebieden = pd.merge(left=peilgebieden_all, right=peilgebieden_geen_AP, on=\"Dis\", suffixes=(\"_all\", \"\"))\n", + "peilgebieden = pd.merge(left=peilgebieden_all,\n", + " right=peilgebieden_geen_AP,\n", + " on='Dis',\n", + " suffixes=('_all', ''))\n", "\n", - "# add the shapefile to the dictionary\n", - "HD[\"peilgebied\"] = peilgebieden" + "#add the shapefile to the dictionary\n", + "HD['peilgebied'] = peilgebieden" ] }, { "cell_type": "markdown", - "id": "6", + "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", "metadata": {}, "source": [ "### Adjust column names" @@ -113,99 +111,92 @@ { "cell_type": "code", "execution_count": null, - "id": "7", + "id": "d54bf05e-f563-44ec-9864-4774e2aecfc6", "metadata": {}, "outputs": [], "source": [ - "# determine aanvoer en afvoer gemalen\n", - "HD[\"gemaal\"][\"func_aanvoer\"], HD[\"gemaal\"][\"func_afvoer\"], HD[\"gemaal\"][\"func_circulatie\"] = (\n", - " False,\n", - " False,\n", - " False,\n", - ") # default is False\n", - "HD[\"gemaal\"][\"functiegemaal\"] = HD[\"gemaal\"][\"FUNCTIEGEM\"].astype(str)\n", - "HD[\"gemaal\"].loc[HD[\"gemaal\"][\"functiegemaal\"] == \"Onbekend\", \"functiegemaal\"] = (\n", - " np.nan\n", - ") # replace onbekend with nan, will be filled up later see one line below\n", - "HD[\"gemaal\"][\"functiegemaal\"].fillna(\n", - " HD[\"gemaal\"][\"NAAM\"], inplace=True\n", - ") # some additional information may given in this column\n", - "HD[\"gemaal\"][\"functiegemaal\"] = HD[\"gemaal\"][\"functiegemaal\"].astype(str) # again, otherise issue True False\n", + "#determine aanvoer en afvoer gemalen\n", + "HD['gemaal']['func_aanvoer'], HD['gemaal']['func_afvoer'], HD['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "HD['gemaal']['functiegemaal'] = HD['gemaal']['FUNCTIEGEM'].astype(str) \n", + "HD['gemaal'].loc[HD['gemaal']['functiegemaal'] == 'Onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", + "HD['gemaal']['functiegemaal'].fillna(HD['gemaal']['NAAM'], inplace = True) #some additional information may given in this column\n", + "HD['gemaal']['functiegemaal'] = HD['gemaal']['functiegemaal'].astype(str) #again, otherise issue True False\n", "\n", - "HD[\"gemaal\"].loc[HD[\"gemaal\"].functiegemaal.str.contains(\"f-|fvoer|nderbemaling\"), \"func_afvoer\"] = True\n", - "HD[\"gemaal\"].loc[HD[\"gemaal\"].functiegemaal.str.contains(\"anvoergemaal|pmaling\"), \"func_aanvoer\"] = True\n", - "HD[\"gemaal\"].loc[HD[\"gemaal\"].functiegemaal.str.contains(\"Doorspoel\"), \"func_circulatie\"] = True\n", - "HD[\"gemaal\"].loc[\n", - " ~HD[\"gemaal\"].func_afvoer & ~HD[\"gemaal\"].func_aanvoer & ~HD[\"gemaal\"].func_circulatie,\n", - " \"func_afvoer\",\n", - "] = True # set to afvoergemaal is there the function is unknown" + "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('f-|fvoer|nderbemaling'), 'func_afvoer'] = True\n", + "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('anvoergemaal|pmaling'), 'func_aanvoer'] = True\n", + "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('Doorspoel'), 'func_circulatie'] = True\n", + "HD['gemaal'].loc[(HD['gemaal'].func_afvoer == False) &\n", + " (HD['gemaal'].func_aanvoer == False) &\n", + " (HD['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" ] }, { "cell_type": "code", "execution_count": null, - "id": "8", + "id": "059f9113-bcd4-470a-abb6-4fd8ec193f4a", "metadata": {}, "outputs": [], "source": [ - "# discard irrelevant data of HD HD, and create a uniform dataset compared to the other waterschappen\n", - "# Stuw\n", - "HD[\"stuw\"] = HD[\"stuw\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", - "HD[\"stuw\"] = HD[\"stuw\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"})\n", - "HD[\"stuw\"][\"nen3610id\"] = \"dummy_nen3610id_stuw_\" + HD[\"stuw\"].index.astype(str)\n", + "#discard irrelevant data of HD HD, and create a uniform dataset compared to the other waterschappen\n", + "#Stuw\n", + "HD['stuw'] = HD['stuw'][['CODE', 'GLOBALID', 'geometry']]\n", + "HD['stuw'] = HD['stuw'].rename(columns={'CODE': 'code', 'GLOBALID': 'globalid'})\n", + "HD['stuw']['nen3610id'] = 'dummy_nen3610id_stuw_' + HD['stuw'].index.astype(str)\n", "\n", - "# Gemaal\n", - "HD[\"gemaal\"] = HD[\"gemaal\"][[\"CODE\", \"GLOBALID\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]]\n", - "HD[\"gemaal\"] = HD[\"gemaal\"].rename(columns={\"GLOBALID\": \"globalid\", \"CODE\": \"code\"})\n", - "HD[\"gemaal\"][\"nen3610id\"] = \"dummy_nen3610id_gemaal_\" + HD[\"gemaal\"].index.astype(str)\n", + "#Gemaal\n", + "HD['gemaal'] = HD['gemaal'][['CODE', 'GLOBALID', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "HD['gemaal'] = HD['gemaal'].rename(columns={'GLOBALID': 'globalid',\n", + " 'CODE': 'code'})\n", + "HD['gemaal']['nen3610id'] = 'dummy_nen3610id_gemaal_' + HD['gemaal'].index.astype(str)\n", "\n", - "# Hydroobject\n", - "HD[\"hydroobject\"] = HD[\"hydroobject\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", - "HD[\"hydroobject\"] = HD[\"hydroobject\"].rename(columns={\"GLOBALID\": \"globalid\", \"CODE\": \"code\"})\n", - "HD[\"hydroobject\"][\"nen3610id\"] = \"dummy_nen3610id_hydroobject_\" + HD[\"hydroobject\"].index.astype(str)\n", + "#Hydroobject\n", + "HD['hydroobject'] = HD['hydroobject'][['CODE', 'GLOBALID', 'geometry']]\n", + "HD['hydroobject'] = HD['hydroobject'].rename(columns={'GLOBALID': 'globalid',\n", + " 'CODE': 'code'})\n", + "HD['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + HD['hydroobject'].index.astype(str)\n", "\n", - "# sluis\n", - "HD[\"sluis\"] = HD[\"sluis\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", - "HD[\"sluis\"] = HD[\"sluis\"].rename(columns={\"GLOBALID\": \"globalid\"})\n", - "HD[\"sluis\"][\"nen3610id\"] = \"dummy_nen3610id_sluis_\" + HD[\"sluis\"].index.astype(str)\n", + "#sluis\n", + "HD['sluis'] = HD['sluis'][['CODE', 'GLOBALID', 'geometry']]\n", + "HD['sluis'] = HD['sluis'].rename(columns={'GLOBALID': 'globalid'})\n", + "HD['sluis']['nen3610id'] = 'dummy_nen3610id_sluis_' + HD['sluis'].index.astype(str)\n", "\n", - "# duikersifonhevel\n", - "HD[\"duikersifonhevel\"] = HD[\"duikersifonhevel\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", - "HD[\"duikersifonhevel\"] = HD[\"duikersifonhevel\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"})\n", - "HD[\"duikersifonhevel\"][\"nen3610id\"] = \"dummy_nen3610id_duikersifonhevel_\" + HD[\"duikersifonhevel\"].index.astype(str)\n", + "#duikersifonhevel\n", + "HD['duikersifonhevel'] = HD['duikersifonhevel'][['CODE', 'GLOBALID', 'geometry']]\n", + "HD['duikersifonhevel'] = HD['duikersifonhevel'].rename(columns={'CODE':'code', 'GLOBALID': 'globalid'})\n", + "HD['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + HD['duikersifonhevel'].index.astype(str)\n", "\n", - "# afsluitmiddel\n", - "HD[\"afsluitmiddel\"] = HD[\"afsluitmiddel\"][[\"CODE\", \"geometry\"]]\n", - "HD[\"afsluitmiddel\"] = HD[\"afsluitmiddel\"].rename(columns={\"CODE\": \"code\"})\n", - "HD[\"afsluitmiddel\"][\"nen3610id\"] = \"dummy_nen3610id_afsluitmiddel_\" + HD[\"afsluitmiddel\"].index.astype(str)\n", - "HD[\"afsluitmiddel\"][\"globalid\"] = \"dummy_globalid_afsluitmiddel_\" + HD[\"afsluitmiddel\"].index.astype(str)\n", + "#afsluitmiddel\n", + "HD['afsluitmiddel'] = HD['afsluitmiddel'][['CODE', 'geometry']]\n", + "HD['afsluitmiddel'] = HD['afsluitmiddel'].rename(columns={'CODE':'code'})\n", + "HD['afsluitmiddel']['nen3610id'] = 'dummy_nen3610id_afsluitmiddel_' + HD['afsluitmiddel'].index.astype(str)\n", + "HD['afsluitmiddel']['globalid'] = 'dummy_globalid_afsluitmiddel_' + HD['afsluitmiddel'].index.astype(str)\n", "\n", - "# Peilgebied\n", - "HD[\"peilgebied\"] = HD[\"peilgebied\"][[\"REKENPEIL_\", \"NAAM_BEMAL\", \"geometry\"]]\n", - "HD[\"peilgebied\"][\"nen3610id\"] = \"dummy_nen3610id_peilgebied_\" + HD[\"peilgebied\"].index.astype(str)\n", - "HD[\"peilgebied\"][\"globalid\"] = \"dummy_globalid_peilgebied_\" + HD[\"peilgebied\"].index.astype(str)\n", - "HD[\"peilgebied\"] = HD[\"peilgebied\"].rename(columns={\"REKENPEIL_\": \"streefpeil\", \"NAAM_BEMAL\": \"code\"})\n", + "#Peilgebied\n", + "HD['peilgebied'] = HD['peilgebied'][['REKENPEIL_', 'NAAM_BEMAL', 'geometry']]\n", + "HD['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + HD['peilgebied'].index.astype(str)\n", + "HD['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + HD['peilgebied'].index.astype(str)\n", + "HD['peilgebied'] = HD['peilgebied'].rename(columns={'REKENPEIL_': 'streefpeil', 'NAAM_BEMAL':'code'})\n", "\n", - "# Streefpeil\n", - "HD[\"streefpeil\"] = pd.DataFrame()\n", - "HD[\"streefpeil\"][\"waterhoogte\"] = HD[\"peilgebied\"][\"streefpeil\"]\n", - "HD[\"streefpeil\"][\"globalid\"] = HD[\"peilgebied\"][\"globalid\"]\n", - "HD[\"streefpeil\"][\"geometry\"] = None\n", - "HD[\"streefpeil\"] = gpd.GeoDataFrame(HD[\"streefpeil\"], geometry=\"geometry\")\n", + "#Streefpeil\n", + "HD['streefpeil'] = pd.DataFrame()\n", + "HD['streefpeil']['waterhoogte'] = HD['peilgebied']['streefpeil']\n", + "HD['streefpeil']['globalid'] = HD['peilgebied']['globalid']\n", + "HD['streefpeil']['geometry'] = None\n", + "HD['streefpeil'] = gpd.GeoDataFrame(HD['streefpeil'], geometry = 'geometry')\n", "\n", - "# Remove the streefpeil from the peilgebied\n", - "HD[\"peilgebied\"] = HD[\"peilgebied\"][[\"code\", \"geometry\", \"nen3610id\", \"globalid\"]]" + "#Remove the streefpeil from the peilgebied\n", + "HD['peilgebied'] = HD['peilgebied'][['code', 'geometry', 'nen3610id', 'globalid']]" ] }, { "cell_type": "code", "execution_count": null, - "id": "9", + "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", "metadata": {}, "outputs": [], "source": [ - "# delete irrelvant data\n", - "variables = [\"peilgebiedpraktijk\"]\n", + "#delete irrelvant data\n", + "variables = ['peilgebiedpraktijk']\n", "\n", "for variable in variables:\n", " if str(variable) in HD:\n", @@ -214,7 +205,7 @@ }, { "cell_type": "markdown", - "id": "10", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -223,17 +214,17 @@ { "cell_type": "code", "execution_count": null, - "id": "11", + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap=HD)" + "show_layers_and_columns(waterschap = HD)" ] }, { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "2809cf79-d381-432b-8ddd-3497556f5d82", "metadata": {}, "outputs": [], "source": [ @@ -242,7 +233,7 @@ }, { "cell_type": "markdown", - "id": "13", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", "metadata": {}, "source": [ "### Store data" @@ -251,7 +242,7 @@ { "cell_type": "code", "execution_count": null, - "id": "14", + "id": "556aea48-a819-4f70-8e22-6c843354a46d", "metadata": {}, "outputs": [], "source": [ @@ -259,14 +250,15 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - "\n", - "store_data(waterschap=HD, output_gpkg_path=output_gpkg_path + \"/HD\")" + " \n", + "store_data(waterschap = HD, \n", + " output_gpkg_path = output_gpkg_path + '/HD')\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "15", + "id": "52f17e20-95a7-493f-bff9-6600df570fe0", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb index 164d8ff..e4dacd0 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb @@ -3,78 +3,78 @@ { "cell_type": "code", "execution_count": null, - "id": "0", + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", "metadata": {}, "outputs": [], "source": [ - "# import packages and functions\n", + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", "import os\n", + "import fiona\n", "\n", - "import geopandas as gpd\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import pandas as pd" + "import shapely\n", + "from shapely.validation import make_valid\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "1", + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", "metadata": {}, "outputs": [], "source": [ - "from general_functions import burn_in_peilgebieden, read_gpkg_layers, show_layers_and_columns, store_data" + "from general_functions import *" ] }, { "cell_type": "code", "execution_count": null, - "id": "2", + "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", "metadata": {}, "outputs": [], "source": [ - "pd.set_option(\"display.max_columns\", None)" + "pd.set_option('display.max_columns', None)" ] }, { "cell_type": "code", "execution_count": null, - "id": "3", + "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", "metadata": {}, "outputs": [], "source": [ - "# define relative paths\n", - "waterschap = \"Rijnland\"\n", - "path_Rijnland = \"..\\..\\Data_preprocessed\\Waterschappen\\Rijnland\\DataRijnland\\DataRijnland.gpkg\"\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Rijnland\"" + "#define relative paths\n", + "waterschap = 'Rijnland'\n", + "path_Rijnland = '..\\..\\Data_preprocessed\\Waterschappen\\Rijnland\\DataRijnland\\DataRijnland.gpkg'\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Rijnland\"\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "4", + "id": "ca6ddcd9-e960-4b5f-ba10-4d222c16a843", "metadata": {}, "outputs": [], "source": [ - "Rijnland = read_gpkg_layers(\n", - " gpkg_path=path_Rijnland,\n", - " variables=[\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " \"afsluitmiddel\",\n", - " \"duikersifonhevel\",\n", - " \"hydroobject\",\n", - " \"peilgebiedvigerend\",\n", - " \"peilgebiedpraktijk\",\n", - " \"peilafwijkinggebied\",\n", - " \"streefpeil\",\n", - " ],\n", - ")" + "Rijnland = read_gpkg_layers(gpkg_path = path_Rijnland, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'afsluitmiddel',\n", + " 'duikersifonhevel',\n", + " 'hydroobject',\n", + " 'peilgebiedvigerend',\n", + " 'peilgebiedpraktijk',\n", + " 'peilafwijkinggebied',\n", + " 'streefpeil']) \n", + " " ] }, { "cell_type": "markdown", - "id": "5", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", "metadata": {}, "source": [ "# Rijnland" @@ -83,91 +83,91 @@ { "cell_type": "code", "execution_count": null, - "id": "6", + "id": "01dda03c-5a50-4bde-a655-7ed14c85a8d3", "metadata": {}, "outputs": [], "source": [ "fig, ax = plt.subplots()\n", - "Rijnland[\"peilgebiedvigerend\"].plot(ax=ax, color=\"blue\")\n", - "Rijnland[\"peilgebiedpraktijk\"].plot(ax=ax, color=\"orange\")\n", - "Rijnland[\"peilafwijkinggebied\"].plot(ax=ax, color=\"green\")" + "Rijnland['peilgebiedvigerend'].plot(ax=ax, color='blue')\n", + "Rijnland['peilgebiedpraktijk'].plot(ax=ax, color='orange')\n", + "Rijnland['peilafwijkinggebied'].plot(ax=ax, color='green')" ] }, { "cell_type": "code", "execution_count": null, - "id": "7", + "id": "e58ee099-54b3-415b-8222-9545776a7a61", "metadata": {}, "outputs": [], "source": [ - "Rijnland[\"stuw\"] = Rijnland[\"stuw\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "Rijnland[\"gemaal\"] = Rijnland[\"gemaal\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "Rijnland[\"afsluitmiddel\"] = Rijnland[\"afsluitmiddel\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "Rijnland[\"hydroobject\"] = Rijnland[\"hydroobject\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "Rijnland[\"duikersifonhevel\"] = Rijnland[\"duikersifonhevel\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "Rijnland[\"peilgebiedpraktijk\"] = Rijnland[\"peilgebiedpraktijk\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "Rijnland[\"peilafwijkinggebied\"] = Rijnland[\"peilafwijkinggebied\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "Rijnland[\"peilgebiedvigerend\"] = Rijnland[\"peilgebiedvigerend\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]" + "Rijnland['stuw'] = Rijnland['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['gemaal'] = Rijnland['gemaal'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['afsluitmiddel'] = Rijnland['afsluitmiddel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['hydroobject'] = Rijnland['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['duikersifonhevel'] = Rijnland['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['peilgebiedpraktijk'] = Rijnland['peilgebiedpraktijk'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['peilafwijkinggebied'] = Rijnland['peilafwijkinggebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['peilgebiedvigerend'] = Rijnland['peilgebiedvigerend'][['code', 'nen3610id', 'globalid', 'geometry']]\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "8", + "id": "023a704c-685e-4fe9-9745-39a5ed461a03", "metadata": {}, "outputs": [], "source": [ - "# fix geometries\n", - "Rijnland[\"peilgebiedvigerend\"][\"geometry\"] = Rijnland[\"peilgebiedvigerend\"].buffer(distance=0)\n", - "Rijnland[\"peilgebiedpraktijk\"][\"geometry\"] = Rijnland[\"peilgebiedpraktijk\"].buffer(distance=0)\n", - "Rijnland[\"peilafwijkinggebied\"][\"geometry\"] = Rijnland[\"peilafwijkinggebied\"].buffer(distance=0)" + "#fix geometries\n", + "Rijnland['peilgebiedvigerend']['geometry'] = Rijnland['peilgebiedvigerend'].buffer(distance = 0)\n", + "Rijnland['peilgebiedpraktijk']['geometry'] = Rijnland['peilgebiedpraktijk'].buffer(distance = 0)\n", + "Rijnland['peilafwijkinggebied']['geometry'] = Rijnland['peilafwijkinggebied'].buffer(distance = 0)" ] }, { "cell_type": "code", "execution_count": null, - "id": "9", + "id": "eb236dc1-11b3-42c4-99e9-fecd568bec2b", "metadata": {}, "outputs": [], "source": [ - "# peilgebied = burn_in_peilgebieden(base_layer = Rijnland['peilgebiedpraktijk'],\n", + "# peilgebied = burn_in_peilgebieden(base_layer = Rijnland['peilgebiedpraktijk'], \n", "# overlay_layer = Rijnland['peilafwijkinggebied'],\n", "# plot = True)\n", "# Rijnland['peilgebied'] = gpd.GeoDataFrame(peilgebied)\n", "\n", - "peilgebied = burn_in_peilgebieden(\n", - " base_layer=Rijnland[\"peilgebiedvigerend\"], overlay_layer=Rijnland[\"peilgebiedpraktijk\"], plot=True\n", - ")" + "peilgebied = burn_in_peilgebieden(base_layer = Rijnland['peilgebiedvigerend'], \n", + " overlay_layer = Rijnland['peilgebiedpraktijk'],\n", + " plot = True)\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "10", + "id": "05098a9e-9b5a-487e-8b3e-7f3d82bda74e", "metadata": {}, "outputs": [], "source": [ "peilgebied = gpd.GeoDataFrame(peilgebied)\n", - "peilgebied = peilgebied[peilgebied.geometry.type.isin([\"Polygon\", \"MultiPolygon\"])] # only select polygons\n", + "peilgebied = peilgebied[peilgebied.geometry.type.isin(['Polygon', 'MultiPolygon'])] #only select polygons\n", "\n", - "Rijnland[\"peilgebied\"] = gpd.GeoDataFrame(peilgebied)" + "Rijnland['peilgebied'] = gpd.GeoDataFrame(peilgebied)" ] }, { "cell_type": "code", "execution_count": null, - "id": "11", + "id": "5339a8c5-8c43-4ccd-9008-103fc7e7058e", "metadata": {}, "outputs": [], "source": [ - "gpd.GeoDataFrame(peilgebied).to_file(\"Rijnland_test_kan_weg.shp\")\n", + "gpd.GeoDataFrame(peilgebied).to_file('Rijnland_test_kan_weg.shp')\n", "# peilgebied" ] }, { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "096a2293-cd78-4c8d-b0e8-bbbe559a8155", "metadata": {}, "outputs": [], "source": [ @@ -185,7 +185,7 @@ { "cell_type": "code", "execution_count": null, - "id": "13", + "id": "6bea1764-0459-4d49-9d48-c5b85a6c3480", "metadata": {}, "outputs": [], "source": [ @@ -197,57 +197,53 @@ { "cell_type": "code", "execution_count": null, - "id": "14", + "id": "9efaf904-e94c-4c87-aeb6-c04d4f183e27", "metadata": {}, "outputs": [], "source": [ - "Rijnland[\"streefpeil\"].peilgebiedpraktijkid.fillna(value=Rijnland[\"streefpeil\"][\"peilgebiedvigerendid\"], inplace=True)\n", + "Rijnland['streefpeil'].peilgebiedpraktijkid.fillna(value=Rijnland['streefpeil']['peilgebiedvigerendid'], inplace=True)\n", "# Rijnland['streefpeil'].drop_duplicates(subset=['peilgebiedpraktijkid'], inplace=True)" ] }, { "cell_type": "code", "execution_count": null, - "id": "15", + "id": "1511cf73-aa2b-423f-be87-c95fb0d9bdbb", "metadata": {}, "outputs": [], "source": [ - "# get rid of irrelevant streefpeilen, which otherwise results in too many overlapped peilgebieden\n", - "filter_condition = Rijnland[\"streefpeil\"][\"soortstreefpeil\"].isin(\n", - " [\"omer\", \"ondergrens\"]\n", - ") #'omer' for all rows where something of zomer, Zomer, dynamische zomer, etc, is used\n", - "kept_rows = Rijnland[\"streefpeil\"][filter_condition]\n", + "#get rid of irrelevant streefpeilen, which otherwise results in too many overlapped peilgebieden\n", + "filter_condition = Rijnland['streefpeil']['soortstreefpeil'].isin(['omer', 'ondergrens']) #'omer' for all rows where something of zomer, Zomer, dynamische zomer, etc, is used\n", + "kept_rows = Rijnland['streefpeil'][filter_condition]\n", "\n", - "other_rows = Rijnland[\"streefpeil\"][~filter_condition].drop_duplicates(subset=[\"peilgebiedpraktijkid\"])\n", - "Rijnland[\"streefpeil\"] = pd.concat([kept_rows, other_rows])" + "other_rows = Rijnland['streefpeil'][~filter_condition].drop_duplicates(subset=['peilgebiedpraktijkid'])\n", + "Rijnland['streefpeil'] = pd.concat([kept_rows, other_rows])" ] }, { "cell_type": "code", "execution_count": null, - "id": "16", + "id": "7bdd80ad-650c-4e9f-a3bd-d675c4544830", "metadata": {}, "outputs": [], "source": [ "# Rijnland['streefpeil'].peilafwijkinggebiedid.fillna(value=Rijnland['streefpeil']['peilgebiedpraktijkid'], inplace=True)\n", "# Rijnland['streefpeil'].peilgebiedpraktijkid.fillna(value=Rijnland['streefpeil']['peilgebiedvigerendid'], inplace=True)\n", "\n", - "pg_sp = pd.merge(\n", - " left=peilgebied,\n", - " right=Rijnland[\"streefpeil\"],\n", - " left_on=\"globalid\",\n", - " right_on=\"peilgebiedpraktijkid\",\n", - " suffixes=(\"\", \"_streefpeil\"),\n", - ")\n", + "pg_sp = pd.merge(left = peilgebied,\n", + " right = Rijnland['streefpeil'],\n", + " left_on = 'globalid',\n", + " right_on = 'peilgebiedpraktijkid',\n", + " suffixes = ('', '_streefpeil'))\n", "\n", - "pg_sp[\"geometry\"] = gpd.GeoDataFrame(geometry=pg_sp[\"geometry\"]).reset_index(drop=True)\n", + "pg_sp['geometry'] = gpd.GeoDataFrame(geometry = pg_sp['geometry']).reset_index(drop=True)\n", "# pg_sp = pg_sp.explode('geometry',ignore_index=True)" ] }, { "cell_type": "code", "execution_count": null, - "id": "17", + "id": "fb1f6f57-60e7-4122-9648-5a0883933dd1", "metadata": {}, "outputs": [], "source": [ @@ -257,44 +253,44 @@ { "cell_type": "code", "execution_count": null, - "id": "18", + "id": "dbb4827e-17ad-461f-8101-f97f38b2b31e", "metadata": {}, "outputs": [], "source": [ - "# there are duplicate codes, nen3610ids and globalids due to the exploded function. Rename these.\n", - "pg_sp[\"nen3610id\"] = \"dummy_nen3610id_peilgebied_\" + pg_sp.index.astype(str)\n", - "pg_sp[\"code\"] = \"dummy_code_peilgebied_\" + pg_sp.index.astype(str)\n", - "pg_sp[\"globalid\"] = \"dummy_globalid_peilgebied_\" + pg_sp.index.astype(str)\n", + "#there are duplicate codes, nen3610ids and globalids due to the exploded function. Rename these.\n", + "pg_sp['nen3610id'] = 'dummy_nen3610id_peilgebied_' + pg_sp.index.astype(str)\n", + "pg_sp['code'] = 'dummy_code_peilgebied_' + pg_sp.index.astype(str)\n", + "pg_sp['globalid'] = 'dummy_globalid_peilgebied_' + pg_sp.index.astype(str)\n", "\n", - "Rijnland[\"peilgebied\"] = pg_sp\n", - "Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "Rijnland[\"peilgebied\"] = gpd.GeoDataFrame(Rijnland[\"peilgebied\"], geometry=\"geometry\")\n", - "Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"].set_crs(\"EPSG:28992\")" + "Rijnland['peilgebied'] = pg_sp\n", + "Rijnland['peilgebied'] = Rijnland['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Rijnland['peilgebied'] = gpd.GeoDataFrame(Rijnland['peilgebied'], geometry = 'geometry')\n", + "Rijnland['peilgebied'] = Rijnland['peilgebied'].set_crs('EPSG:28992')" ] }, { "cell_type": "code", "execution_count": null, - "id": "19", + "id": "67ba9685-90b6-4389-818f-a003d9d41dc8", "metadata": {}, "outputs": [], "source": [ - "streefpeil = pg_sp[[\"waterhoogte\", \"globalid\"]]\n", + "streefpeil = pg_sp[['waterhoogte', 'globalid']]\n", "\n", - "streefpeil[\"geometry\"] = np.nan\n", + "streefpeil['geometry'] = np.nan\n", "streefpeil = gpd.GeoDataFrame(streefpeil)\n", - "Rijnland[\"streefpeil\"] = streefpeil" + "Rijnland['streefpeil'] = streefpeil" ] }, { "cell_type": "code", "execution_count": null, - "id": "20", + "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", "metadata": {}, "outputs": [], "source": [ - "# delete irrelvant data\n", - "variables = [\"peilgebiedpraktijk\", \"peilgebiedvigerend\", \"peilafwijkinggebied\"]\n", + "#delete irrelvant data\n", + "variables = ['peilgebiedpraktijk', 'peilgebiedvigerend', 'peilafwijkinggebied']\n", "\n", "for variable in variables:\n", " if str(variable) in Rijnland:\n", @@ -304,16 +300,16 @@ { "cell_type": "code", "execution_count": null, - "id": "21", + "id": "9ea24ea8-67ae-4cff-ac30-6492dcd80c41", "metadata": {}, "outputs": [], "source": [ - "Rijnland[\"peilgebied\"].plot()" + "Rijnland['peilgebied'].plot()" ] }, { "cell_type": "markdown", - "id": "22", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -322,16 +318,16 @@ { "cell_type": "code", "execution_count": null, - "id": "23", + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap=Rijnland)" + "show_layers_and_columns(waterschap = Rijnland)" ] }, { "cell_type": "markdown", - "id": "24", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", "metadata": {}, "source": [ "### Store data" @@ -340,7 +336,7 @@ { "cell_type": "code", "execution_count": null, - "id": "25", + "id": "f198edc5-7466-4668-b980-adabdf7c7c94", "metadata": {}, "outputs": [], "source": [] @@ -348,7 +344,7 @@ { "cell_type": "code", "execution_count": null, - "id": "26", + "id": "556aea48-a819-4f70-8e22-6c843354a46d", "metadata": {}, "outputs": [], "source": [ @@ -356,14 +352,15 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - "\n", - "store_data(waterschap=Rijnland, output_gpkg_path=output_gpkg_path + \"/Rijnland\")" + " \n", + "store_data(waterschap = Rijnland, \n", + " output_gpkg_path = output_gpkg_path + '/Rijnland')\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "27", + "id": "48b0320b-258c-44c8-aff2-83153db1a512", "metadata": {}, "outputs": [], "source": [] @@ -371,7 +368,7 @@ { "cell_type": "code", "execution_count": null, - "id": "28", + "id": "311db7da-e645-47f2-af06-0bdf23a5589b", "metadata": {}, "outputs": [], "source": [] @@ -379,7 +376,7 @@ { "cell_type": "code", "execution_count": null, - "id": "29", + "id": "0b93668e-c539-426a-9af2-99d36af00334", "metadata": {}, "outputs": [], "source": [] @@ -387,7 +384,7 @@ { "cell_type": "code", "execution_count": null, - "id": "30", + "id": "5a09e840-7204-4aac-b825-c66394c60775", "metadata": {}, "outputs": [], "source": [] @@ -395,7 +392,7 @@ { "cell_type": "code", "execution_count": null, - "id": "31", + "id": "622a1518-d12d-4b70-ac03-0d251ee09861", "metadata": {}, "outputs": [], "source": [] @@ -403,7 +400,7 @@ { "cell_type": "code", "execution_count": null, - "id": "32", + "id": "c0cf20d1-b76c-4e07-ab7b-9976313f8dad", "metadata": {}, "outputs": [], "source": [] @@ -411,7 +408,7 @@ { "cell_type": "code", "execution_count": null, - "id": "33", + "id": "ace74b96-2316-4b02-b3ca-9e2b9d3c18aa", "metadata": {}, "outputs": [], "source": [] @@ -419,7 +416,7 @@ { "cell_type": "code", "execution_count": null, - "id": "34", + "id": "92551bfe-2672-4c85-988e-e19a320b8cee", "metadata": {}, "outputs": [], "source": [] @@ -427,7 +424,7 @@ { "cell_type": "code", "execution_count": null, - "id": "35", + "id": "70c906ed-d0b1-4ccb-b527-775d1c7e1e48", "metadata": {}, "outputs": [], "source": [] @@ -435,7 +432,7 @@ { "cell_type": "code", "execution_count": null, - "id": "36", + "id": "ed6d57c1-3127-43a2-9de0-29cbf5846bd1", "metadata": {}, "outputs": [], "source": [] @@ -443,7 +440,7 @@ { "cell_type": "code", "execution_count": null, - "id": "37", + "id": "c562c790-2afa-493d-a86d-c438deae6470", "metadata": {}, "outputs": [], "source": [] @@ -451,7 +448,7 @@ { "cell_type": "code", "execution_count": null, - "id": "38", + "id": "0090fd91-40eb-48e1-aa99-2360a13a708e", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb index 8de4cf1..764cdbc 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb @@ -3,42 +3,43 @@ { "cell_type": "code", "execution_count": null, - "id": "0", + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", "metadata": {}, "outputs": [], "source": [ - "# import packages and functions\n", - "import os\n", - "\n", - "import geopandas as gpd\n", - "import matplotlib.pyplot as plt\n", + "#import packages and functions\n", "import numpy as np\n", - "import pandas as pd" + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "import shapely" ] }, { "cell_type": "code", "execution_count": null, - "id": "1", + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", "metadata": {}, "outputs": [], "source": [ - "from general_functions import read_gpkg_layers, show_layers_and_columns, store_data" + "from general_functions import *" ] }, { "cell_type": "code", "execution_count": null, - "id": "2", + "id": "4c2a1a6e-1255-4481-9d94-b0206f40e94d", "metadata": {}, "outputs": [], "source": [ - "pd.set_option(\"display.max_columns\", None)" + "pd.set_option('display.max_columns', None)\n" ] }, { "cell_type": "markdown", - "id": "3", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", "metadata": {}, "source": [ "# WSRL" @@ -47,14 +48,14 @@ { "cell_type": "code", "execution_count": null, - "id": "4", + "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# define relative paths\n", - "waterschap = \"WSRL\"\n", + "#define relative paths\n", + "waterschap = 'WSRL'\n", "data_path = \"../../Data_preprocessed/Waterschappen/WSRL\"\n", "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/WSRL\"" ] @@ -62,33 +63,37 @@ { "cell_type": "code", "execution_count": null, - "id": "5", + "id": "c0f66000-73e6-4b06-b5a2-8308213c2461", "metadata": {}, "outputs": [], "source": [ - "# WSRL has delivered the data per catchment. Loop through each catchment, and concat all data to a single dictionary\n", + "#WSRL has delivered the data per catchment. Loop through each catchment, and concat all data to a single dictionary\n", "WSRL = {}\n", "\n", "for root, dirs, files in os.walk(data_path):\n", " for file in files:\n", - " if file.endswith(\".gpkg\"):\n", + " if file.endswith('.gpkg'):\n", " gpkg_path = os.path.join(root, file)\n", - "\n", + " \n", " if WSRL == {}:\n", - " WSRL = read_gpkg_layers(\n", - " gpkg_path=gpkg_path, variables=[\"Stuw\", \"Gemaal\", \"Hydroobject\", \"Duikersifonhevel\"]\n", - " )\n", + " WSRL = read_gpkg_layers(gpkg_path = gpkg_path,\n", + " variables = ['Stuw',\n", + " 'Gemaal',\n", + " 'Hydroobject',\n", + " 'Duikersifonhevel']) \n", " else:\n", - " temp_WSRL = read_gpkg_layers(\n", - " gpkg_path=gpkg_path, variables=[\"Stuw\", \"Gemaal\", \"Hydroobject\", \"Duikersifonhevel\"]\n", - " )\n", + " temp_WSRL = read_gpkg_layers(gpkg_path = gpkg_path,\n", + " variables = ['Stuw',\n", + " 'Gemaal',\n", + " 'Hydroobject',\n", + " 'Duikersifonhevel']) \n", " for variable in WSRL.keys():\n", - " WSRL[variable] = pd.concat([WSRL[variable], temp_WSRL[variable]]).reset_index(drop=True)" + " WSRL[variable] = pd.concat([WSRL[variable], temp_WSRL[variable]]).reset_index(drop=True)\n" ] }, { "cell_type": "markdown", - "id": "6", + "id": "7469bb6f-dc28-43b3-b9cb-2d4505b5d5fd", "metadata": {}, "source": [ "Additional data is given in another gpkg, which includes the peilgebieden" @@ -97,35 +102,36 @@ { "cell_type": "code", "execution_count": null, - "id": "7", + "id": "5018d1e6-f7ba-4e02-b01a-6d83a3a5e9a3", "metadata": {}, "outputs": [], "source": [ "gdb_path = r\"..\\..\\Data_preprocessed\\Waterschappen\\WSRL\\OverigeGegevens.gdb\"\n", - "WSRL_gdb = read_gpkg_layers(gpkg_path=gdb_path, variables=[\"PeilgebiedenPraktijk\"])\n", + "WSRL_gdb = read_gpkg_layers(gpkg_path = gdb_path,\n", + " variables = ['PeilgebiedenPraktijk'])\n", "\n", - "# add the gdb to the dict\n", + "#add the gdb to the dict\n", "# WSRL['peilgebiedafwijking'] = WSRL_gdb['Peilafwijkingen']\n", - "WSRL[\"peilgebiedpraktijk\"] = WSRL_gdb[\"PeilgebiedenPraktijk\"]" + "WSRL['peilgebiedpraktijk'] = WSRL_gdb['PeilgebiedenPraktijk']" ] }, { "cell_type": "code", "execution_count": null, - "id": "8", + "id": "fc85db32-bb81-4f7f-9a38-2bd89b3fc658", "metadata": {}, "outputs": [], "source": [ - "# change names\n", - "WSRL[\"stuw\"] = WSRL.pop(\"Stuw\")\n", - "WSRL[\"gemaal\"] = WSRL.pop(\"Gemaal\")\n", - "WSRL[\"hydroobject\"] = WSRL.pop(\"Hydroobject\")\n", - "WSRL[\"duikersifonhevel\"] = WSRL.pop(\"Duikersifonhevel\")" + "#change names\n", + "WSRL['stuw'] = WSRL.pop('Stuw')\n", + "WSRL['gemaal'] = WSRL.pop('Gemaal')\n", + "WSRL['hydroobject'] = WSRL.pop('Hydroobject')\n", + "WSRL['duikersifonhevel'] = WSRL.pop('Duikersifonhevel')" ] }, { "cell_type": "markdown", - "id": "9", + "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", "metadata": {}, "source": [ "### Adjust column names" @@ -134,85 +140,68 @@ { "cell_type": "code", "execution_count": null, - "id": "10", + "id": "c0302db0-e7f0-4dd2-88b7-3dc9aadd581f", "metadata": {}, "outputs": [], "source": [ - "# add gemaal information\n", - "WSRL[\"peilgebiedpraktijk\"][\"waterhoogte\"] = np.nan\n", - "WSRL[\"peilgebiedpraktijk\"].loc[\n", - " WSRL[\"peilgebiedpraktijk\"][\"TYPE_PEILBEHEER\"] == \"seizoensgebonden\", \"waterhoogte\"\n", - "].fillna(WSRL[\"peilgebiedpraktijk\"][\"ZOMERPEIL\"], inplace=True)\n", - "WSRL[\"peilgebiedpraktijk\"].loc[WSRL[\"peilgebiedpraktijk\"][\"TYPE_PEILBEHEER\"] == \"flexibel\", \"waterhoogte\"].fillna(\n", - " WSRL[\"peilgebiedpraktijk\"][\"ZOMERPEIL\"], inplace=True\n", - ")\n", - "WSRL[\"peilgebiedpraktijk\"].loc[WSRL[\"peilgebiedpraktijk\"][\"TYPE_PEILBEHEER\"] == \"natuurlijk\", \"waterhoogte\"].fillna(\n", - " WSRL[\"peilgebiedpraktijk\"][\"ZOMERPEIL\"], inplace=True\n", - ")\n", - "WSRL[\"peilgebiedpraktijk\"].loc[WSRL[\"peilgebiedpraktijk\"][\"TYPE_PEILBEHEER\"] == \"vast\", \"waterhoogte\"].fillna(\n", - " WSRL[\"peilgebiedpraktijk\"][\"VASTPEIL\"], inplace=True\n", - ")\n", - "WSRL[\"peilgebiedpraktijk\"].loc[WSRL[\"peilgebiedpraktijk\"][\"TYPE_PEILBEHEER\"] == \"streef\", \"waterhoogte\"].fillna(\n", - " WSRL[\"peilgebiedpraktijk\"][\"STREEFPEIL\"], inplace=True\n", - ")\n", + "#add gemaal information\n", + "WSRL['peilgebiedpraktijk']['waterhoogte'] = np.nan\n", + "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'seizoensgebonden', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'flexibel', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'natuurlijk', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'vast', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['VASTPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'streef', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['STREEFPEIL'], inplace=True)\n", "\n", - "# niet elke kolom is ingevuld met de paren die je zou verwachten. Vul voor de ontbrekende waarden de volgende waarden in:\n", - "WSRL[\"peilgebiedpraktijk\"].loc[:, \"waterhoogte\"].fillna(WSRL[\"peilgebiedpraktijk\"][\"STREEFPEIL\"], inplace=True)\n", - "WSRL[\"peilgebiedpraktijk\"].loc[:, \"waterhoogte\"].fillna(WSRL[\"peilgebiedpraktijk\"][\"VASTPEIL\"], inplace=True)\n", - "WSRL[\"peilgebiedpraktijk\"].loc[:, \"waterhoogte\"].fillna(WSRL[\"peilgebiedpraktijk\"][\"ZOMERPEIL\"], inplace=True)\n", - "WSRL[\"peilgebiedpraktijk\"].loc[:, \"waterhoogte\"].fillna(WSRL[\"peilgebiedpraktijk\"][\"MIN_PEIL\"], inplace=True)\n", - "WSRL[\"peilgebiedpraktijk\"].loc[:, \"waterhoogte\"].fillna(WSRL[\"peilgebiedpraktijk\"][\"WINTERPEIL\"], inplace=True)\n", - "WSRL[\"peilgebiedpraktijk\"].loc[:, \"waterhoogte\"].fillna(WSRL[\"peilgebiedpraktijk\"][\"MAX_PEIL\"], inplace=True)" + "#niet elke kolom is ingevuld met de paren die je zou verwachten. Vul voor de ontbrekende waarden de volgende waarden in:\n", + "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['STREEFPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['VASTPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['MIN_PEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['WINTERPEIL'], inplace=True)\n", + "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['MAX_PEIL'], inplace=True)\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "11", + "id": "6f56f578-aca0-4957-89df-b6a3a08278a3", "metadata": {}, "outputs": [], "source": [ - "# Add gemaal information\n", - "# determine aanvoer en afvoer gemalen\n", - "WSRL[\"gemaal\"][\"func_aanvoer\"], WSRL[\"gemaal\"][\"func_afvoer\"], WSRL[\"gemaal\"][\"func_circulatie\"] = (\n", - " False,\n", - " False,\n", - " False,\n", - ") # default is False\n", - "WSRL[\"gemaal\"][\"functiegemaal\"] = WSRL[\"gemaal\"][\"naam\"].astype(str)\n", + "#Add gemaal information\n", + "#determine aanvoer en afvoer gemalen\n", + "WSRL['gemaal']['func_aanvoer'], WSRL['gemaal']['func_afvoer'], WSRL['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "WSRL['gemaal']['functiegemaal'] = WSRL['gemaal']['naam'].astype(str) \n", "\n", "\n", - "WSRL[\"gemaal\"].loc[WSRL[\"gemaal\"].functiegemaal.str.contains(\"Afvoer|Onbekend|Af-|Onderbemaling\"), \"func_afvoer\"] = True\n", - "WSRL[\"gemaal\"].loc[WSRL[\"gemaal\"].functiegemaal.str.contains(\"Aanvoer|Opmaling\"), \"func_aanvoer\"] = True\n", - "WSRL[\"gemaal\"].loc[WSRL[\"gemaal\"].functiegemaal.str.contains(\"Doorspoelgemaal\"), \"func_circulatie\"] = True\n", - "WSRL[\"gemaal\"].loc[\n", - " ~WSRL[\"gemaal\"].func_afvoer & ~WSRL[\"gemaal\"].func_aanvoer & ~WSRL[\"gemaal\"].func_circulatie,\n", - " \"func_afvoer\",\n", - "] = True # set to afvoergemaal is there the function is unknown" + "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Afvoer|Onbekend|Af-|Onderbemaling'), 'func_afvoer'] = True\n", + "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Aanvoer|Opmaling'), 'func_aanvoer'] = True\n", + "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Doorspoelgemaal'), 'func_circulatie'] = True\n", + "WSRL['gemaal'].loc[(WSRL['gemaal'].func_afvoer == False) &\n", + " (WSRL['gemaal'].func_aanvoer == False) &\n", + " (WSRL['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" ] }, { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "6dce84db-36f3-4a1c-9f10-7c14d9e4a6ed", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# discard irrelevant data of WSRL, and create a uniform dataset compared to the other waterschappen\n", - "WSRL[\"stuw\"] = WSRL[\"stuw\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", - "WSRL[\"gemaal\"] = WSRL[\"gemaal\"][\n", - " [\"code\", \"globalid\", \"nen3610id\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]\n", - "]\n", - "WSRL[\"hydroobject\"] = WSRL[\"hydroobject\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", - "WSRL[\"duikersifonhevel\"] = WSRL[\"duikersifonhevel\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]" + "#discard irrelevant data of WSRL, and create a uniform dataset compared to the other waterschappen\n", + "WSRL['stuw'] = WSRL['stuw'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "WSRL['gemaal'] = WSRL['gemaal'][['code', 'globalid', 'nen3610id', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "WSRL['hydroobject'] = WSRL['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "WSRL['duikersifonhevel'] = WSRL['duikersifonhevel'][['code', 'globalid', 'nen3610id', 'geometry']]\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "13", + "id": "059f9113-bcd4-470a-abb6-4fd8ec193f4a", "metadata": {}, "outputs": [], "source": [ @@ -222,12 +211,12 @@ { "cell_type": "code", "execution_count": null, - "id": "14", + "id": "0181e016-5103-4d66-b0fa-27ef59282f51", "metadata": {}, "outputs": [], "source": [ "fig, ax = plt.subplots()\n", - "WSRL[\"peilgebiedpraktijk\"].plot(ax=ax, color=\"cornflowerblue\", label=\"Peilgebiedpraktijk\")\n", + "WSRL['peilgebiedpraktijk'].plot(ax=ax, color='cornflowerblue', label = 'Peilgebiedpraktijk')\n", "# WSRL['peilgebiedafwijking'].plot(ax=ax, color='blue', label = 'Peilgebiedafwijking')\n", "ax.legend()\n", "plt.show()" @@ -236,72 +225,66 @@ { "cell_type": "code", "execution_count": null, - "id": "15", + "id": "96f0e8bf-89e3-4743-b047-d23791bdc5b4", "metadata": {}, "outputs": [], "source": [ "def intersect_using_spatial_index(peilgebied_praktijk, peilgebied_afwijking, check):\n", " \"\"\"\n", " Conduct spatial intersection using spatial index for candidates GeoDataFrame to make queries faster.\n", - "\n", - " Note, with this function, you can have multiple Polygons in the 'intersecting_gdf' and it will return all the points\n", + " Note, with this function, you can have multiple Polygons in the 'intersecting_gdf' and it will return all the points \n", " intersect with ANY of those geometries.\n", " \"\"\"\n", " peilgebied_praktijk_sindex = peilgebied_praktijk.sindex\n", " possible_matches_index = []\n", - "\n", + " \n", " # 'itertuples()' function is a faster version of 'iterrows()'\n", " for other in peilgebied_afwijking.itertuples():\n", " bounds = other.geometry.bounds\n", " c = list(peilgebied_praktijk_sindex.intersection(bounds))\n", " possible_matches_index += c\n", - "\n", + " \n", " # Get unique candidates\n", " unique_candidate_matches = list(set(possible_matches_index))\n", " possible_matches = peilgebied_praktijk.iloc[unique_candidate_matches]\n", "\n", " # Conduct the actual intersect\n", - " overlapping_pg_praktijk = possible_matches.loc[\n", - " possible_matches.intersects(peilgebied_afwijking.unary_union)\n", - " ] # the entire peilgebied praktijk polygons\n", - "\n", - " # remove the peilgebied afwijking from the peilgebied praktijk\n", - " intersection = gpd.overlay(overlapping_pg_praktijk, peilgebied_afwijking, how=\"intersection\")\n", - " overlapping_updated = gpd.overlay(\n", - " peilgebied_praktijk, intersection, how=\"symmetric_difference\"\n", - " ) # check of het difference of symmetrical difference moet zijn!#remove the difference between pg_praktijk and pg_afwijking\n", - " peilgebied = overlapping_updated.append(\n", - " intersection, ignore_index=True\n", - " ) # add the removed difference, but now only the intersected part of pg_afwijking\n", + " overlapping_pg_praktijk = possible_matches.loc[possible_matches.intersects(peilgebied_afwijking.unary_union)] #the entire peilgebied praktijk polygons\n", + " \n", + " #remove the peilgebied afwijking from the peilgebied praktijk\n", + " intersection = gpd.overlay(overlapping_pg_praktijk, peilgebied_afwijking, how='intersection')\n", + " overlapping_updated = gpd.overlay(peilgebied_praktijk, intersection, how='symmetric_difference') #check of het difference of symmetrical difference moet zijn!#remove the difference between pg_praktijk and pg_afwijking\n", + " peilgebied = overlapping_updated.append(intersection, ignore_index=True) #add the removed difference, but now only the intersected part of pg_afwijking\n", "\n", - " if check:\n", - " peilgebied_praktijk.to_file(\"Checks/Rivierenland/peilgebied_praktijk.gpkg\", driver=\"GPKG\")\n", - " peilgebied_afwijking.to_file(\"Checks/Rivierenland/peilgebied_afwijking.gpkg\", driver=\"GPKG\")\n", - "\n", - " intersection.to_file(\"Checks/Rivierenland/intersection.gpkg\", driver=\"GPKG\")\n", - " overlapping_updated.to_file(\"Checks/Rivierenland/overlapping_updated.gpkg\", driver=\"GPKG\")\n", - " peilgebied.to_file(\"Checks/Rivierenland/peilgebied.gpkg\", driver=\"GPKG\")\n", + " \n", + " if check == True:\n", + " peilgebied_praktijk.to_file('Checks/Rivierenland/peilgebied_praktijk.gpkg', driver='GPKG')\n", + " peilgebied_afwijking.to_file('Checks/Rivierenland/peilgebied_afwijking.gpkg', driver='GPKG')\n", "\n", + " intersection.to_file('Checks/Rivierenland/intersection.gpkg', driver='GPKG')\n", + " overlapping_updated.to_file('Checks/Rivierenland/overlapping_updated.gpkg', driver='GPKG')\n", + " peilgebied.to_file('Checks/Rivierenland/peilgebied.gpkg', driver='GPKG')\n", + " \n", " return peilgebied" ] }, { "cell_type": "code", "execution_count": null, - "id": "16", + "id": "500d4d64-c65b-4426-9f89-7f10e12a0514", "metadata": {}, "outputs": [], "source": [ - "# peilgebied = intersect_using_spatial_index(peilgebied_praktijk = WSRL['peilgebiedpraktijk'],\n", + "# peilgebied = intersect_using_spatial_index(peilgebied_praktijk = WSRL['peilgebiedpraktijk'], \n", "# peilgebied_afwijking = WSRL['peilgebiedafwijking'],\n", "# check = False)\n", - "peilgebied = WSRL[\"peilgebiedpraktijk\"]" + "peilgebied = WSRL['peilgebiedpraktijk']" ] }, { "cell_type": "code", "execution_count": null, - "id": "17", + "id": "363a8b04-a132-469a-b5c8-cde2e911a9c0", "metadata": {}, "outputs": [], "source": [ @@ -310,18 +293,18 @@ "\n", "# for fill_column in ['ZOMERPEIL', 'STREEFPEIL', 'VASTPEIL', 'MAX_PEIL', 'MIN_PEIL', 'WINTERPEIL']:\n", "# peilgebied.waterhoogte.fillna(value = peilgebied[fill_column], inplace=True)\n", - "\n", + " \n", "# WSRL['peilgebiedpraktijk'].waterhoogte.fillna(value=WSRL['peilgebiedpraktijk'][['ZOMERPEIL', 'STREEFPEIL', 'VASTPEIL', 'MAX_PEIL', 'MIN_PEIL']])" ] }, { "cell_type": "code", "execution_count": null, - "id": "18", + "id": "cfbf8612-93a9-4357-a3c9-cd3dd9d9bf71", "metadata": {}, "outputs": [], "source": [ - "# store the ontbrekende_streefpeilen to a gpkg, check validity\n", + "#store the ontbrekende_streefpeilen to a gpkg, check validity\n", "ontbrekende_streefpeilen = peilgebied[peilgebied.waterhoogte.isna()]\n", "# ontbrekende_streefpeilen.to_file('Checks/Rivierenland/peilgebieden_zonder_streefpeil.gpkg', driver='GPKG')\n", "peilgebied.plot()" @@ -330,41 +313,41 @@ { "cell_type": "code", "execution_count": null, - "id": "19", + "id": "74734b29-5c4a-4e63-a873-88d8f6ebbd14", "metadata": {}, "outputs": [], "source": [ - "peilgebied[\"CODE_0\"] = peilgebied.CODE # change names for later purposes\n", + "peilgebied['CODE_0'] = peilgebied.CODE #change names for later purposes\n", "peilgebied.CODE = np.nan\n", "\n", - "# add and fill the final columns\n", - "columns_to_check = [\"CODE_0\"]\n", + "#add and fill the final columns\n", + "columns_to_check = ['CODE_0']\n", "\n", - "for fill_column in [\"CODE_0\"]:\n", - " peilgebied.CODE.fillna(value=peilgebied[fill_column], inplace=True)\n", + "for fill_column in ['CODE_0']:\n", + " peilgebied.CODE.fillna(value = peilgebied[fill_column], inplace=True)\n", "\n", - "peilgebied[\"globalid\"] = peilgebied.index.astype(str)\n", - "peilgebied[\"nen3610id\"] = \"dummy_nen3610id_peilgebied_\" + peilgebied.index.astype(str)\n", + "peilgebied['globalid'] = peilgebied.index.astype(str)\n", + "peilgebied['nen3610id'] = 'dummy_nen3610id_peilgebied_' + peilgebied.index.astype(str)\n", "\n", - "# create streefpeil key\n", - "WSRL[\"streefpeil\"] = peilgebied[[\"waterhoogte\", \"globalid\"]]\n", - "WSRL[\"streefpeil\"][\"geometry\"] = np.nan\n", - "WSRL[\"streefpeil\"] = gpd.GeoDataFrame(WSRL[\"streefpeil\"])\n", + "#create streefpeil key\n", + "WSRL['streefpeil'] = peilgebied[['waterhoogte', 'globalid']]\n", + "WSRL['streefpeil']['geometry'] = np.nan\n", + "WSRL['streefpeil'] = gpd.GeoDataFrame(WSRL['streefpeil'])\n", "\n", - "# only select the relevant columns\n", - "peilgebied = peilgebied[[\"CODE\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", - "WSRL[\"peilgebied\"] = peilgebied # add to the dict" + "#only select the relevant columns\n", + "peilgebied = peilgebied[['CODE', 'globalid', 'nen3610id', 'geometry']]\n", + "WSRL['peilgebied'] = peilgebied #add to the dict" ] }, { "cell_type": "code", "execution_count": null, - "id": "20", + "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", "metadata": {}, "outputs": [], "source": [ - "# discard irrelvant data\n", - "variables = [\"peilgebiedpraktijk\", \"peilgebiedafwijking\"]\n", + "#discard irrelvant data\n", + "variables = ['peilgebiedpraktijk','peilgebiedafwijking']\n", "\n", "for variable in variables:\n", " if str(variable) in WSRL:\n", @@ -373,7 +356,7 @@ }, { "cell_type": "markdown", - "id": "21", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -382,24 +365,24 @@ { "cell_type": "code", "execution_count": null, - "id": "22", + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap=WSRL)" + "show_layers_and_columns(waterschap = WSRL)" ] }, { "cell_type": "code", "execution_count": null, - "id": "23", + "id": "d81fa34f-69aa-4d0e-9612-8ae36b959e0b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "24", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", "metadata": {}, "source": [ "### Store data" @@ -408,7 +391,7 @@ { "cell_type": "code", "execution_count": null, - "id": "25", + "id": "556aea48-a819-4f70-8e22-6c843354a46d", "metadata": {}, "outputs": [], "source": [ @@ -416,20 +399,21 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - "\n", - "store_data(waterschap=WSRL, output_gpkg_path=output_gpkg_path + \"/WSRL\")" + " \n", + "store_data(waterschap = WSRL, \n", + " output_gpkg_path = output_gpkg_path + '/WSRL')\n" ] }, { "cell_type": "raw", - "id": "26", + "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": null, - "id": "27", + "id": "fedb4c6e-49c2-44f4-88f0-0e1ce4802bc7", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb index 63c2ab8..8d348f9 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb @@ -3,119 +3,115 @@ { "cell_type": "code", "execution_count": null, - "id": "0", + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", "metadata": {}, "outputs": [], "source": [ - "# import packages and functions\n", - "import os\n", - "\n", - "import geopandas as gpd\n", + "#import packages and functions\n", "import numpy as np\n", + "import matplotlib.pyplot as plt\n", "import pandas as pd\n", - "from shapely.geometry import Polygon" + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "\n", + "import shapely\n", + "from shapely.validation import make_valid\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "1", + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", "metadata": {}, "outputs": [], "source": [ - "from general_functions import read_gpkg_layers, show_layers_and_columns, store_data" + "from general_functions import *" ] }, { "cell_type": "code", "execution_count": null, - "id": "2", + "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", "metadata": {}, "outputs": [], "source": [ - "pd.set_option(\"display.max_columns\", None)" + "pd.set_option('display.max_columns', None)" ] }, { "cell_type": "code", "execution_count": null, - "id": "3", + "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", "metadata": {}, "outputs": [], "source": [ - "# define relative paths\n", - "waterschap = \"Scheldestromen\"\n", - "path_Scheldestromen = \"..\\..\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Scheldestromen.gpkg\"\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Scheldestromen\"" + "#define relative paths\n", + "waterschap = 'Scheldestromen'\n", + "path_Scheldestromen = '..\\..\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Scheldestromen.gpkg'\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Scheldestromen\"\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "4", + "id": "1f39bd82-2fed-41d6-a4f7-979a9a2120bd", "metadata": {}, "outputs": [], "source": [ - "Scheldestromen = read_gpkg_layers(\n", - " gpkg_path=path_Scheldestromen,\n", - " variables=[\n", - " \"stuw\",\n", - " \"gemaal\",\n", - " # 'afsluitmiddel',\n", - " \"duikersifonhevel\",\n", - " \"hydroobject\",\n", - " # 'peilgebiedvigerend',\n", - " # 'peilgebiedpraktijk',\n", - " # 'peilafwijkinggebied',\n", - " # 'streefpeil',\n", - " ],\n", - " engine=\"pyogrio\",\n", - ")\n", - "\n", - "# the peilgebieden and streefpeilen do not contain overlapping values. Scheldestromen has delivered additional files as shapes\n", - "Scheldestromen[\"peilgebied\"] = gpd.read_file(\n", - " \"..\\..\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Praktijkpeilgebieden_20231204.shp\"\n", - ")" + "Scheldestromen = read_gpkg_layers(gpkg_path = path_Scheldestromen, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " # 'afsluitmiddel',\n", + " 'duikersifonhevel',\n", + " 'hydroobject',\n", + " # 'peilgebiedvigerend',\n", + " # 'peilgebiedpraktijk',\n", + " # 'peilafwijkinggebied',\n", + " # 'streefpeil',\n", + " ],\n", + " engine = 'pyogrio') \n", + " \n", + "#the peilgebieden and streefpeilen do not contain overlapping values. Scheldestromen has delivered additional files as shapes\n", + "Scheldestromen['peilgebied'] = gpd.read_file('..\\..\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Praktijkpeilgebieden_20231204.shp')" ] }, { "cell_type": "code", "execution_count": null, - "id": "5", + "id": "4a7d78f8-7605-4aba-b4c6-b17b81d4f5df", "metadata": {}, "outputs": [], "source": [ - "Scheldestromen[\"peilgebied\"][\"code\"] = Scheldestromen[\"peilgebied\"][\"GPGIDENT\"]\n", - "Scheldestromen[\"peilgebied\"][\"globalid\"] = Scheldestromen[\"peilgebied\"][\"GLOBALID\"]\n", - "Scheldestromen[\"peilgebied\"][\"waterhoogte\"] = Scheldestromen[\"peilgebied\"][\"GPGZP\"]\n", - "Scheldestromen[\"peilgebied\"][\"nen3610id\"] = \"dummy_nen3610id_peilgebied_\" + Scheldestromen[\"peilgebied\"].index.astype(\n", - " str\n", - ")\n", + "Scheldestromen['peilgebied']['code'] = Scheldestromen['peilgebied']['GPGIDENT']\n", + "Scheldestromen['peilgebied']['globalid'] = Scheldestromen['peilgebied']['GLOBALID'] \n", + "Scheldestromen['peilgebied']['waterhoogte'] = Scheldestromen['peilgebied']['GPGZP'] \n", + "Scheldestromen['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + Scheldestromen['peilgebied'].index.astype(str)\n", "\n", - "Scheldestromen[\"streefpeil\"] = gpd.GeoDataFrame()\n", - "Scheldestromen[\"streefpeil\"][\"waterhoogte\"] = Scheldestromen[\"peilgebied\"][\"waterhoogte\"]\n", - "Scheldestromen[\"streefpeil\"][\"globalid\"] = Scheldestromen[\"peilgebied\"][\"globalid\"]\n", - "Scheldestromen[\"streefpeil\"][\"geometry\"] = np.nan\n", + "Scheldestromen['streefpeil'] = gpd.GeoDataFrame()\n", + "Scheldestromen['streefpeil']['waterhoogte'] = Scheldestromen['peilgebied']['waterhoogte']\n", + "Scheldestromen['streefpeil']['globalid'] = Scheldestromen['peilgebied']['globalid']\n", + "Scheldestromen['streefpeil']['geometry'] = np.nan\n", "\n", "\n", - "Scheldestromen[\"peilgebied\"] = Scheldestromen[\"peilgebied\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]" + "Scheldestromen['peilgebied'] = Scheldestromen['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]" ] }, { "cell_type": "code", "execution_count": null, - "id": "6", + "id": "0c14883a-873b-44ee-b9d3-57d7da0b67c3", "metadata": {}, "outputs": [], "source": [ - "# convert multiz points to points\n", - "Scheldestromen[\"stuw\"].geometry = Scheldestromen[\"stuw\"].centroid\n", - "Scheldestromen[\"gemaal\"].geometry = Scheldestromen[\"gemaal\"].centroid" + "#convert multiz points to points\n", + "Scheldestromen['stuw'].geometry = Scheldestromen['stuw'].centroid\n", + "Scheldestromen['gemaal'].geometry = Scheldestromen['gemaal'].centroid\n" ] }, { "cell_type": "markdown", - "id": "7", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", "metadata": {}, "source": [ "# Scheldestromen" @@ -124,29 +120,29 @@ { "cell_type": "code", "execution_count": null, - "id": "8", + "id": "cbe8f365-8b00-4824-b04c-b976f9a43f05", "metadata": {}, "outputs": [], "source": [ - "# stuw\n", - "Scheldestromen[\"stuw\"] = Scheldestromen[\"stuw\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "#stuw\n", + "Scheldestromen['stuw'] = Scheldestromen['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", "\n", - "# gemaal\n", - "Scheldestromen[\"gemaal\"] = Scheldestromen[\"gemaal\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "Scheldestromen[\"gemaal\"][\"code\"] = \"dummy_code_gemaal_\" + Scheldestromen[\"gemaal\"].index.astype(str)\n", + "#gemaal\n", + "Scheldestromen['gemaal'] = Scheldestromen['gemaal'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Scheldestromen['gemaal']['code'] = 'dummy_code_gemaal_' + Scheldestromen['gemaal'].index.astype(str)\n", "\n", - "# hydroobject\n", - "Scheldestromen[\"hydroobject\"][\"code\"] = Scheldestromen[\"hydroobject\"][\"naam\"]\n", - "Scheldestromen[\"hydroobject\"] = Scheldestromen[\"hydroobject\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "#hydroobject\n", + "Scheldestromen['hydroobject']['code'] = Scheldestromen['hydroobject']['naam']\n", + "Scheldestromen['hydroobject'] = Scheldestromen['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", "\n", - "# duikersifonhevel\n", - "Scheldestromen[\"duikersifonhevel\"] = Scheldestromen[\"duikersifonhevel\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]" + "#duikersifonhevel\n", + "Scheldestromen['duikersifonhevel'] = Scheldestromen['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "9", + "id": "b3f70ee4-d645-4114-b5e2-2dd573374d6e", "metadata": {}, "outputs": [], "source": [ @@ -159,20 +155,20 @@ { "cell_type": "code", "execution_count": null, - "id": "10", + "id": "e58ee099-54b3-415b-8222-9545776a7a61", "metadata": {}, "outputs": [], "source": [ - "Scheldestromen[\"stuw\"] = Scheldestromen[\"stuw\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "Scheldestromen[\"gemaal\"] = Scheldestromen[\"gemaal\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "Scheldestromen[\"hydroobject\"] = Scheldestromen[\"hydroobject\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", - "Scheldestromen[\"duikersifonhevel\"] = Scheldestromen[\"duikersifonhevel\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]" + "Scheldestromen['stuw'] = Scheldestromen['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Scheldestromen['gemaal'] = Scheldestromen['gemaal'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Scheldestromen['hydroobject'] = Scheldestromen['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "Scheldestromen['duikersifonhevel'] = Scheldestromen['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "11", + "id": "023a704c-685e-4fe9-9745-39a5ed461a03", "metadata": {}, "outputs": [], "source": [ @@ -183,7 +179,7 @@ { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "4d5d490e-5bba-4d16-95a0-a17880adc0d9", "metadata": {}, "outputs": [], "source": [ @@ -196,7 +192,7 @@ { "cell_type": "code", "execution_count": null, - "id": "13", + "id": "cd21bcac-8d25-4d47-ad0a-c7338e6e6653", "metadata": {}, "outputs": [], "source": [ @@ -210,7 +206,7 @@ { "cell_type": "code", "execution_count": null, - "id": "14", + "id": "88e9543c-2dbe-4ebf-9423-b38daeeaa004", "metadata": {}, "outputs": [], "source": [ @@ -221,12 +217,12 @@ { "cell_type": "code", "execution_count": null, - "id": "15", + "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", "metadata": {}, "outputs": [], "source": [ - "# delete irrelvant data\n", - "variables = [\"peilgebiedpraktijk\", \"peilgebiedvigerend\", \"peilafwijkinggebied\"]\n", + "#delete irrelvant data\n", + "variables = ['peilgebiedpraktijk', 'peilgebiedvigerend', 'peilafwijkinggebied']\n", "\n", "for variable in variables:\n", " if str(variable) in Scheldestromen:\n", @@ -235,7 +231,7 @@ }, { "cell_type": "markdown", - "id": "16", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -244,40 +240,42 @@ { "cell_type": "code", "execution_count": null, - "id": "17", + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap=Scheldestromen)" + "show_layers_and_columns(waterschap = Scheldestromen)" ] }, { "cell_type": "code", "execution_count": null, - "id": "18", + "id": "f9d38f6f-42df-45b4-a1d2-b1a779c104d8", "metadata": {}, "outputs": [], "source": [ - "for i in range(len(Scheldestromen[\"peilgebied\"])):\n", - " if isinstance(Scheldestromen[\"peilgebied\"].loc[i, \"geometry\"], Polygon):\n", - " Scheldestromen[\"peilgebied\"].loc[i, \"geometry\"].plot()" + "for i in range(len(Scheldestromen['peilgebied'])): \n", + " if type(Scheldestromen['peilgebied'].loc[i, 'geometry']) == Polygon:\n", + " Scheldestromen['peilgebied'].loc[i, 'geometry'].plot()" ] }, { "cell_type": "code", "execution_count": null, - "id": "19", + "id": "45564e81-4fcf-4479-b406-8142b4a64ad1", "metadata": {}, "outputs": [], "source": [ - "merged = pd.merge(left=Scheldestromen[\"peilgebied\"], right=Scheldestromen[\"streefpeil\"], on=\"globalid\")\n", + "merged = pd.merge(left = Scheldestromen['peilgebied'],\n", + " right = Scheldestromen['streefpeil'],\n", + " on = 'globalid')\n", "\n", - "merged[merged.waterhoogte.isna()]" + "merged[merged.waterhoogte.isna()]\n" ] }, { "cell_type": "markdown", - "id": "20", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", "metadata": {}, "source": [ "### Store data" @@ -286,7 +284,7 @@ { "cell_type": "code", "execution_count": null, - "id": "21", + "id": "556aea48-a819-4f70-8e22-6c843354a46d", "metadata": {}, "outputs": [], "source": [ @@ -294,30 +292,31 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - "\n", - "store_data(waterschap=Scheldestromen, output_gpkg_path=output_gpkg_path + \"/Scheldestromen\")" + " \n", + "store_data(waterschap = Scheldestromen, \n", + " output_gpkg_path = output_gpkg_path + '/Scheldestromen')\n" ] }, { "cell_type": "raw", - "id": "22", + "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": null, - "id": "23", + "id": "fedb4c6e-49c2-44f4-88f0-0e1ce4802bc7", "metadata": {}, "outputs": [], "source": [ - "Scheldestromen[\"hydroobject\"]" + "Scheldestromen['hydroobject']" ] }, { "cell_type": "code", "execution_count": null, - "id": "24", + "id": "af637fd1-1d33-4eb2-92c7-51c29e477404", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb index 2fbe295..c925755 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb @@ -3,22 +3,26 @@ { "cell_type": "code", "execution_count": null, - "id": "0", + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", "metadata": {}, "outputs": [], "source": [ - "# import packages and functions\n", - "\n", - "import geopandas as gpd\n", + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", "import pandas as pd\n", - "from general_functions import read_gpkg_layers, show_layers_and_columns, store_data\n", + "import geopandas as gpd\n", + "import os\n", + "import fiona\n", + "import shapely\n", "\n", - "pd.set_option(\"display.max_columns\", None)" + "from general_functions import *\n", + "pd.set_option('display.max_columns', None)\n" ] }, { "cell_type": "markdown", - "id": "1", + "id": "48a939f4-8a39-4c24-b466-499eba37172d", "metadata": {}, "source": [ "# Wetterskip Fryslan" @@ -27,7 +31,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2", + "id": "b782b9c9-12b9-461b-8874-a59dad72e4bd", "metadata": {}, "outputs": [], "source": [ @@ -41,206 +45,198 @@ { "cell_type": "code", "execution_count": null, - "id": "3", + "id": "b96e6dab-5341-480d-b077-5b05a2984aa7", "metadata": {}, "outputs": [], "source": [ - "# Duikersifonhevel and hydroobject have a type of multicurvedZ, the peilgebieden a MultiSurfaceZ, which geopandas can not handle. I have manually\n", + "# Duikersifonhevel and hydroobject have a type of multicurvedZ, the peilgebieden a MultiSurfaceZ, which geopandas can not handle. I have manually \n", "# exported these to single shapes, which automatically converts it to regular MultiStrings. Then these layers have been packed together to a\n", - "# geopackage again.\n", + "# geopackage again. \n", "\n", - "# retrieve the data\n", - "Wetterskip = read_gpkg_layers(\n", - " gpkg_path=gpkg_path_Wetterskip,\n", - " variables=[\"stuw\", \"gemaal\", \"afsluitmiddel\", \"hydroobject\", \"duikersifonhevel\"],\n", - " # 'peilmerk',\n", - " # 'streefpeil',\n", - " # 'peilgebiedpraktijk',\n", - " # 'peilgebiedvigerend',\n", - " # 'peilbesluitgebied'],\n", - " print_var=False,\n", - ")\n", + "#retrieve the data\n", + "Wetterskip = read_gpkg_layers(gpkg_path = gpkg_path_Wetterskip, \n", + " variables = ['stuw', \n", + " 'gemaal', \n", + " 'afsluitmiddel',\n", + " 'hydroobject',\n", + " 'duikersifonhevel'],\n", + " # 'peilmerk',\n", + " # 'streefpeil',\n", + " # 'peilgebiedpraktijk', \n", + " # 'peilgebiedvigerend',\n", + " # 'peilbesluitgebied'],\n", + " print_var = False)\n", "\n", - "# The peilgebieden en streefpeilen have been delivered as additional data\n", - "peilgebiedpraktijk = gpd.read_file(peilgebiedpraktijk_path, layer=\"DAMO_W_PeilgebiedPraktijk\")\n", + "#The peilgebieden en streefpeilen have been delivered as additional data\n", + "peilgebiedpraktijk = gpd.read_file(peilgebiedpraktijk_path,\n", + " layer = 'DAMO_W_PeilgebiedPraktijk')\n", "\n", - "streefpeil = gpd.read_file(streefpeil_path, layer=\"DAMO_W_Streefpeil\")" + "streefpeil = gpd.read_file(streefpeil_path,\n", + " layer = 'DAMO_W_Streefpeil')\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "4", + "id": "05d63407-5f32-41a9-afbb-ade51a17b7a4", "metadata": {}, "outputs": [], "source": [ - "# merge the streefpeil and the peilgebieden\n", - "peilgebied = pd.merge(left=streefpeil, right=peilgebiedpraktijk, left_on=\"PEILGEBIEDPRAKTIJKID\", right_on=\"GLOBALID\")\n", + "#merge the streefpeil and the peilgebieden\n", + "peilgebied = pd.merge(left = streefpeil,\n", + " right = peilgebiedpraktijk,\n", + " left_on = 'PEILGEBIEDPRAKTIJKID',\n", + " right_on = 'GLOBALID')\n", "\n", - "peilgebied = gpd.GeoDataFrame(peilgebied, geometry=\"geometry_y\", crs=\"EPSG:28992\")\n", - "peilgebied.reset_index(drop=True, inplace=True)\n", + "peilgebied = gpd.GeoDataFrame(peilgebied, geometry = 'geometry_y', crs='EPSG:28992')\n", + "peilgebied.reset_index(drop=True, inplace = True)\n", "peilgebied.plot()" ] }, { "cell_type": "code", "execution_count": null, - "id": "5", + "id": "ccc56b93-ad7b-4b80-b197-21c6aa07e07c", "metadata": {}, "outputs": [], "source": [ - "peilgebied = peilgebied.explode(ignore_index=True, index_parts=False)\n", + "peilgebied = peilgebied.explode(ignore_index = True, index_parts=False)\n", "# peilgebied" ] }, { "cell_type": "code", "execution_count": null, - "id": "6", + "id": "8e3c5720-ff47-40c2-a3f0-e2e635414ed9", "metadata": {}, "outputs": [], "source": [ - "Wetterskip[\"peilgebied\"] = peilgebied[[\"WATERHOOGTE\", \"nen3610id_y\", \"GLOBALID_y\", \"geometry_y\"]]\n", - "Wetterskip[\"peilgebied\"] = Wetterskip[\"peilgebied\"].rename(\n", - " columns={\n", - " \"WATERHOOGTE\": \"waterhoogte\",\n", - " \"nen3610id_y\": \"nen3610id\",\n", - " \"GLOBALID_y\": \"globalid\",\n", - " \"geometry_y\": \"geometry\",\n", - " }\n", - ")\n", + "Wetterskip['peilgebied'] = peilgebied[['WATERHOOGTE', 'nen3610id_y', 'GLOBALID_y', 'geometry_y']]\n", + "Wetterskip['peilgebied'] = Wetterskip['peilgebied'].rename(columns = {'WATERHOOGTE':'waterhoogte',\n", + " 'nen3610id_y':'nen3610id',\n", + " 'GLOBALID_y':'globalid',\n", + " 'geometry_y':'geometry'})\n", "\n", - "# give new globalids and codes, as the peilgebied.explode() results in non unique values.\n", - "Wetterskip[\"peilgebied\"][\"code\"] = \"dummy_code_peilgebied_\" + Wetterskip[\"peilgebied\"].index.astype(str)\n", - "Wetterskip[\"peilgebied\"][\"globalid\"] = \"dummy_globalid_peilgebied_\" + Wetterskip[\"peilgebied\"].index.astype(str)\n", + "#give new globalids and codes, as the peilgebied.explode() results in non unique values.\n", + "Wetterskip['peilgebied']['code'] = 'dummy_code_peilgebied_' + Wetterskip['peilgebied'].index.astype(str)\n", + "Wetterskip['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Wetterskip['peilgebied'].index.astype(str)\n", "\n", - "# create the streefpeilen layer\n", - "Wetterskip[\"streefpeil\"] = Wetterskip[\"peilgebied\"][[\"waterhoogte\", \"globalid\", \"geometry\"]]\n", - "Wetterskip[\"peilgebied\"] = Wetterskip[\"peilgebied\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "#create the streefpeilen layer\n", + "Wetterskip['streefpeil'] = Wetterskip['peilgebied'][['waterhoogte', 'globalid', 'geometry']]\n", + "Wetterskip['peilgebied'] = Wetterskip['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", "\n", - "Wetterskip[\"streefpeil\"][\"geometry\"] = None\n", + "Wetterskip['streefpeil']['geometry'] = None\n", "\n", - "Wetterskip[\"streefpeil\"] = gpd.GeoDataFrame(Wetterskip[\"streefpeil\"], geometry=\"geometry\", crs=\"EPSG:28992\")\n", - "Wetterskip[\"peilgebied\"] = gpd.GeoDataFrame(Wetterskip[\"peilgebied\"], geometry=\"geometry\", crs=\"EPSG:28992\")" + "Wetterskip['streefpeil'] = gpd.GeoDataFrame(Wetterskip['streefpeil'], geometry='geometry', crs='EPSG:28992')\n", + "Wetterskip['peilgebied'] = gpd.GeoDataFrame(Wetterskip['peilgebied'], geometry='geometry', crs='EPSG:28992')\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "7", + "id": "21704eb9-844a-483f-b102-53313a08c3e9", "metadata": {}, "outputs": [], "source": [ - "Wetterskip[\"stuw\"][\"geometry\"] = Wetterskip[\"stuw\"].centroid # prevent strange geometries\n", - "Wetterskip[\"gemaal\"][\"geometry\"] = Wetterskip[\"gemaal\"].centroid # prevent strange geometries\n", + "Wetterskip['stuw']['geometry'] = Wetterskip['stuw'].centroid #prevent strange geometries\n", + "Wetterskip['gemaal']['geometry'] = Wetterskip['gemaal'].centroid #prevent strange geometries\n", "\n", - "Wetterskip[\"hydroobject\"] = Wetterskip[\"hydroobject\"].loc[\n", - " Wetterskip[\"hydroobject\"].categorieo == \"primair\"\n", - "] # feedback WS Fryslan: only use primaire hydroobjecten" + "Wetterskip['hydroobject'] = Wetterskip['hydroobject'].loc[Wetterskip['hydroobject'].categorieo == 'primair'] #feedback WS Fryslan: only use primaire hydroobjecten" ] }, { "cell_type": "code", "execution_count": null, - "id": "8", + "id": "7eed68de-331a-4829-b78e-ab39db127d71", "metadata": {}, "outputs": [], "source": [ - "# determine aanvoer en afvoer gemalen\n", - "Wetterskip[\"gemaal\"][\"func_aanvoer\"], Wetterskip[\"gemaal\"][\"func_afvoer\"], Wetterskip[\"gemaal\"][\"func_circulatie\"] = (\n", - " False,\n", - " False,\n", - " False,\n", - ") # default is False\n", - "Wetterskip[\"gemaal\"][\"functiegemaal\"] = Wetterskip[\"gemaal\"][\"functiegemaal\"].astype(str)\n", + "#determine aanvoer en afvoer gemalen\n", + "Wetterskip['gemaal']['func_aanvoer'], Wetterskip['gemaal']['func_afvoer'], Wetterskip['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "Wetterskip['gemaal']['functiegemaal'] = Wetterskip['gemaal']['functiegemaal'].astype(str) \n", "\n", - "Wetterskip[\"gemaal\"].loc[\n", - " Wetterskip[\"gemaal\"].functiegemaal.str.contains(\"Onbekend|Onderbemaling|Afvoergemaal\"), \"func_afvoer\"\n", - "] = True\n", - "Wetterskip[\"gemaal\"].loc[Wetterskip[\"gemaal\"].functiegemaal.str.contains(\"Opmaling|Aanvoer\"), \"func_aanvoer\"] = True\n", - "Wetterskip[\"gemaal\"].loc[Wetterskip[\"gemaal\"].functiegemaal.str.contains(\"Overig|circulatie\"), \"func_circulatie\"] = True\n", - "Wetterskip[\"gemaal\"].loc[\n", - " ~Wetterskip[\"gemaal\"].func_afvoer & ~Wetterskip[\"gemaal\"].func_aanvoer & ~Wetterskip[\"gemaal\"].func_circulatie,\n", - " \"func_afvoer\",\n", - "] = True # set to afvoergemaal is there the function is unknown" + "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Onbekend|Onderbemaling|Afvoergemaal'), 'func_afvoer'] = True\n", + "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Opmaling|Aanvoer'), 'func_aanvoer'] = True\n", + "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Overig|circulatie'), 'func_circulatie'] = True\n", + "Wetterskip['gemaal'].loc[(Wetterskip['gemaal'].func_afvoer == False) &\n", + " (Wetterskip['gemaal'].func_aanvoer == False) &\n", + " (Wetterskip['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "9", + "id": "b17739a1-76d0-4d8e-bbf9-2483cc81abe5", "metadata": {}, "outputs": [], "source": [ - "# points\n", - "Wetterskip[\"stuw\"] = Wetterskip[\"stuw\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", - "Wetterskip[\"gemaal\"] = Wetterskip[\"gemaal\"][\n", - " [\"code\", \"globalid\", \"nen3610id\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]\n", - "]\n", - "Wetterskip[\"afsluitmiddel\"] = Wetterskip[\"afsluitmiddel\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", + "#points\n", + "Wetterskip['stuw'] = Wetterskip['stuw'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "Wetterskip['gemaal'] = Wetterskip['gemaal'][['code', 'globalid', 'nen3610id', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", + "Wetterskip['afsluitmiddel'] = Wetterskip['afsluitmiddel'][['code', 'globalid', 'nen3610id', 'geometry']]\n", "\n", - "# lines\n", - "Wetterskip[\"hydroobject\"] = Wetterskip[\"hydroobject\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", - "Wetterskip[\"duikersifonhevel\"] = Wetterskip[\"duikersifonhevel\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]" + "#lines\n", + "Wetterskip['hydroobject'] = Wetterskip['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "Wetterskip['duikersifonhevel'] = Wetterskip['duikersifonhevel'][['code', 'globalid', 'nen3610id', 'geometry']]\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "10", + "id": "54ee138a-5c47-414c-a550-68756f739c91", "metadata": {}, "outputs": [], "source": [ "# #delete irrelvant data\n", - "# variables = ['peilmerk',\n", - "# 'peilgebiedpraktijk',\n", + "# variables = ['peilmerk', \n", + "# 'peilgebiedpraktijk', \n", "# 'peilgebiedvigerend',\n", - "# 'peilbesluitgebied',\n", + "# 'peilbesluitgebied', \n", "# 'peilgebiedpraktijk']\n", "\n", "# for variable in variables:\n", "# if str(variable) in Wetterskip:\n", - "# del Wetterskip[variable]\n" + "# del Wetterskip[variable]\n", + " " ] }, { "cell_type": "code", "execution_count": null, - "id": "11", + "id": "660832b6-d52f-4c17-9b15-510c265c0bea", "metadata": {}, "outputs": [], "source": [ - "# add duikersifonhevels to the hydroobjecten\n", - "Wetterskip[\"hydroobject\"] = pd.concat([Wetterskip[\"hydroobject\"], Wetterskip[\"duikersifonhevel\"]])\n", - "Wetterskip[\"hydroobject\"] = Wetterskip[\"hydroobject\"].drop_duplicates(\n", - " subset=\"globalid\"\n", - ") # in case it is run multiple times\n", - "Wetterskip[\"hydroobject\"] = gpd.GeoDataFrame(Wetterskip[\"hydroobject\"]).set_crs(\"epsg:28992\")" + "#add duikersifonhevels to the hydroobjecten \n", + "Wetterskip['hydroobject'] = pd.concat([Wetterskip['hydroobject'], Wetterskip['duikersifonhevel']])\n", + "Wetterskip['hydroobject'] = Wetterskip['hydroobject'].drop_duplicates(subset='globalid') #in case it is run multiple times\n", + "Wetterskip['hydroobject'] = gpd.GeoDataFrame(Wetterskip['hydroobject']).set_crs('epsg:28992')\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "81d3df9b-574a-4bd7-860f-2ac4fda4bd4f", "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap=Wetterskip)" + "show_layers_and_columns(waterschap = Wetterskip)" ] }, { "cell_type": "code", "execution_count": null, - "id": "13", + "id": "ddeaea28-d8ad-484d-880c-965cd4bd8faf", "metadata": {}, "outputs": [], "source": [ - "store_data(waterschap=Wetterskip, output_gpkg_path=output_gpkg_path_Wetterskip)" + "store_data(waterschap = Wetterskip, \n", + " output_gpkg_path = output_gpkg_path_Wetterskip)\n" ] }, { "cell_type": "markdown", - "id": "14", + "id": "2f83cab3-fb65-4336-a0ed-36339c34c2dc", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] @@ -252,7 +248,7 @@ { "cell_type": "code", "execution_count": null, - "id": "15", + "id": "2982e516-9b1f-4f4e-86cc-5131ff53925a", "metadata": { "tags": [] }, @@ -260,22 +256,22 @@ "source": [ "# layout_path = r\"..\\..\\Data_postprocessed\\QGIS_overzicht\\routing_style_format3.gpkg\"\n", "# output_layout_path = r\"..\\..\\Data_postprocessed\\QGIS_overzicht\\routing_style_format2_saved\"\n", - "# layout = read_gpkg_layers(gpkg_path = layout_path,\n", - "# variables = ['stuw',\n", - "# 'gemaal',\n", + "# layout = read_gpkg_layers(gpkg_path = layout_path, \n", + "# variables = ['stuw', \n", + "# 'gemaal', \n", "# 'afsluitmiddel'])#,\n", "# # 'hydroobject',\n", "# # 'duikersifonhevel',\n", "# # 'streefpeil',\n", - "# # 'peilgebiedpraktijk',\n", + "# # 'peilgebiedpraktijk', \n", "# # 'peilgebiedvigerend'])\n", - "# store_data(waterschap = layout,\n", + "# store_data(waterschap = layout, \n", "# output_gpkg_path = output_layout_path)\n" ] }, { "cell_type": "raw", - "id": "16", + "id": "ba602947-7d4c-48b0-9651-683efffd0932", "metadata": {}, "source": [ "There are some peilgebieden without peil. Merge the peilgebied praktijk and the peilgebiedvigerend. Then, take the difference between this merged peilgebied and the peilbesluit gebied. The leftover areas should get a streefpeil based on the layer of peilmerk." @@ -284,7 +280,7 @@ { "cell_type": "code", "execution_count": null, - "id": "17", + "id": "868691a9-9659-4026-9588-2d9e73f04db5", "metadata": {}, "outputs": [], "source": [ @@ -300,7 +296,7 @@ { "cell_type": "code", "execution_count": null, - "id": "18", + "id": "29513621-a948-408e-91cd-9255d55d539b", "metadata": {}, "outputs": [], "source": [ @@ -315,14 +311,14 @@ "\n", "# #add semi dummy globalid's and nen3610id's\n", "# extra_peil['globalid'], extra_peil['nen3610id'] = np.arange(0, len(extra_peil)), np.arange(0, len(extra_peil))\n", - "# extra_peil['globalid'] = 'globalid_wetterskip_streefpeil_' + extra_peil['globalid'].astype(str)\n", - "# extra_peil['nen3610id'] = 'nen3610id_wetterskip_' + extra_peil['nen3610id'].astype(str)\n" + "# extra_peil['globalid'] = 'globalid_wetterskip_streefpeil_' + extra_peil['globalid'].astype(str) \n", + "# extra_peil['nen3610id'] = 'nen3610id_wetterskip_' + extra_peil['nen3610id'].astype(str) \n" ] }, { "cell_type": "code", "execution_count": null, - "id": "19", + "id": "47072d3d-5d87-40c3-bf57-198d618271ae", "metadata": {}, "outputs": [], "source": [ @@ -334,7 +330,7 @@ { "cell_type": "code", "execution_count": null, - "id": "20", + "id": "794c3ba1-d2ec-4ed7-9f7c-432fe189cc81", "metadata": {}, "outputs": [], "source": [ @@ -347,7 +343,7 @@ { "cell_type": "code", "execution_count": null, - "id": "21", + "id": "7484c309-6a03-492b-a27c-fcf3ef837446", "metadata": {}, "outputs": [], "source": [ @@ -357,20 +353,20 @@ "\n", "# #move the peilgebiedid id to both the peilgebiedenas well as the streefpeilen\n", "# Wetterskip['peilgebied'] = gpd.GeoDataFrame()\n", - "# Wetterskip['peilgebied']['peilgebiedid'] = Wetterskip['streefpeil']['peilgebiedid']\n", + "# Wetterskip['peilgebied']['peilgebiedid'] = Wetterskip['streefpeil']['peilgebiedid'] \n", "\n", - "# Wetterskip['peilgebied'][['code','globalid','nen3610id']] = Wetterskip['streefpeil'][['code','globalid','nen3610id',]]\n", + "# Wetterskip['peilgebied'][['code','globalid','nen3610id']] = Wetterskip['streefpeil'][['code','globalid','nen3610id',]] \n", "\n", "\n", "# #the peilgebieden have been merged. Drop the irrelevant columns\n", "# Wetterskip['streefpeil'] = Wetterskip['streefpeil'][['waterhoogte', 'peilgebiedid']]#.drop(columns=['peilgebiedvigerendid', 'peilgebiedpraktijkid'], inplace = True)\n", - "# # Wetterskip['peilgebied'] =" + "# # Wetterskip['peilgebied'] = " ] }, { "cell_type": "code", "execution_count": null, - "id": "22", + "id": "25cfdd50-7216-48aa-a60a-b60710500790", "metadata": {}, "outputs": [], "source": [] @@ -378,7 +374,7 @@ { "cell_type": "code", "execution_count": null, - "id": "23", + "id": "57d0bb94-fc26-4299-804e-8c6a17847c77", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb index 92722a7..aa4b1b7 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb @@ -3,55 +3,56 @@ { "cell_type": "code", "execution_count": null, - "id": "0", + "id": "065338fd-62d6-480e-8c80-8bc4b101846b", "metadata": {}, "outputs": [], "source": [ - "# import packages and functions\n", + "#import packages and functions\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import geopandas as gpd\n", "import os\n", - "\n", "import fiona\n", - "import geopandas as gpd\n", - "import numpy as np\n", - "import pandas as pd" + "import shapely" ] }, { "cell_type": "code", "execution_count": null, - "id": "1", + "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", "metadata": {}, "outputs": [], "source": [ - "from general_functions import show_layers_and_columns, store_data" + "from general_functions import *" ] }, { "cell_type": "code", "execution_count": null, - "id": "2", + "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", "metadata": {}, "outputs": [], "source": [ - "pd.set_option(\"display.max_columns\", None)" + "pd.set_option('display.max_columns', None)" ] }, { "cell_type": "code", "execution_count": null, - "id": "3", + "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", "metadata": {}, "outputs": [], "source": [ - "# define relative paths\n", - "waterschap = \"Zuiderzeeland\"\n", - "path_zzl = \"..\\..\\Data_preprocessed\\Waterschappen\\Zuiderzeeland\"\n", + "#define relative paths\n", + "waterschap = 'Zuiderzeeland'\n", + "path_zzl = '..\\..\\Data_preprocessed\\Waterschappen\\Zuiderzeeland'\n", "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Zuiderzeeland\"" ] }, { "cell_type": "markdown", - "id": "4", + "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", "metadata": {}, "source": [ "# Zuiderzeeland" @@ -60,7 +61,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5", + "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", "metadata": { "tags": [] }, @@ -68,36 +69,36 @@ "source": [ "Zuiderzeeland = {}\n", "\n", - "Zuiderzeeland[\"gemaal\"] = gpd.read_file(path_zzl + \"\\gemalen.gpkg\")\n", - "Zuiderzeeland[\"hevels\"] = gpd.read_file(path_zzl + \"\\overigekunstwerken.gpkg\")\n", + "Zuiderzeeland['gemaal'] = gpd.read_file(path_zzl + '\\gemalen.gpkg')\n", + "Zuiderzeeland['hevels'] = gpd.read_file(path_zzl + '\\overigekunstwerken.gpkg')\n", "# Zuiderzeeland['peilgebied'] = gpd.read_file(path_zzl + '\\peilgebieden.gpkg')\n", - "Zuiderzeeland[\"peilgebied\"] = gpd.read_file(path_zzl + \"\\peilvakken_nalevering.gpkg\")\n", + "Zuiderzeeland['peilgebied'] = gpd.read_file(path_zzl + '\\peilvakken_nalevering.gpkg')\n", "\n", "\n", - "# use fiona for the duikersifonhevels and watergangen due to unexpted geometry types\n", - "with fiona.open(path_zzl + \"/Duikers.gpkg\", \"r\") as file:\n", + "#use fiona for the duikersifonhevels and watergangen due to unexpted geometry types\n", + "with fiona.open(path_zzl + '/Duikers.gpkg', 'r') as file:\n", " # Read the contents and store them in the GeoDataFrame\n", - " Zuiderzeeland[\"duikersifonhevel\"] = gpd.GeoDataFrame.from_features(file, crs=\"EPSG:28992\")\n", - "\n", - "with fiona.open(path_zzl + \"/zzl_watergangen_nalevering/zzl_Watergangen.shp\", \"r\") as file:\n", + " Zuiderzeeland['duikersifonhevel'] = gpd.GeoDataFrame.from_features(file, crs = 'EPSG:28992')\n", + " \n", + "with fiona.open(path_zzl + '/zzl_watergangen_nalevering/zzl_Watergangen.shp', 'r') as file:\n", " # Read the contents and store them in the GeoDataFrame\n", - " Zuiderzeeland[\"hydroobject\"] = gpd.GeoDataFrame.from_features(file)" + " Zuiderzeeland['hydroobject'] = gpd.GeoDataFrame.from_features(file)" ] }, { "cell_type": "code", "execution_count": null, - "id": "6", + "id": "a0d86e2c-d365-4a03-8276-d59f93367128", "metadata": {}, "outputs": [], "source": [ - "Zuiderzeeland[\"hydroobject\"] = Zuiderzeeland[\"hydroobject\"].set_crs(crs=\"WGS84\", allow_override=True)\n", - "Zuiderzeeland[\"hydroobject\"] = Zuiderzeeland[\"hydroobject\"].to_crs(crs=\"EPSG:28992\")" + "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'].set_crs(crs = 'WGS84', allow_override=True)\n", + "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'].to_crs(crs = 'EPSG:28992')" ] }, { "cell_type": "raw", - "id": "7", + "id": "920dff3d-f81f-4e88-a8be-67fa2c60d41b", "metadata": {}, "source": [ "ZZL: stuwen in KWKSOORT in overigekunstwerken.gpkg" @@ -106,74 +107,56 @@ { "cell_type": "code", "execution_count": null, - "id": "8", + "id": "28a99515-40c8-4a8e-b78f-0781869de8be", "metadata": {}, "outputs": [], "source": [ - "KWKSOORT_stuw = [\"Constructie\", \"inlaat\", \"uitlaat\", \"keerwand\"] # gebasseerd op de geleverde data van Zuiderzeeland\n", + "KWKSOORT_stuw = ['Constructie',\n", + " 'inlaat',\n", + " 'uitlaat',\n", + " 'keerwand'] #gebasseerd op de geleverde data van Zuiderzeeland\n", "\n", - "Zuiderzeeland[\"stuw\"] = (\n", - " Zuiderzeeland[\"hevels\"].loc[Zuiderzeeland[\"hevels\"][\"KWKSOORT\"].isin(KWKSOORT_stuw)].reset_index(drop=True)\n", - ")\n", - "Zuiderzeeland[\"stuw\"].geometry = Zuiderzeeland[\"stuw\"].centroid # prevent pointZ geometries" + "Zuiderzeeland['stuw'] = Zuiderzeeland['hevels'].loc[Zuiderzeeland['hevels']['KWKSOORT'].isin(KWKSOORT_stuw)].reset_index(drop=True)\n", + "Zuiderzeeland['stuw'].geometry = Zuiderzeeland['stuw'].centroid #prevent pointZ geometries" ] }, { "cell_type": "code", "execution_count": null, - "id": "9", + "id": "e58ee099-54b3-415b-8222-9545776a7a61", "metadata": {}, "outputs": [], "source": [ - "# distinguish multiple parameters from the same gpkg\n", - "Zuiderzeeland[\"afsluitmiddel\"] = (\n", - " Zuiderzeeland[\"hevels\"].loc[Zuiderzeeland[\"hevels\"][\"KWKSOORT\"] == \"Afsluitmiddel (groot)\"].reset_index(drop=True)\n", - ")\n", - "Zuiderzeeland[\"hevels\"] = (\n", - " Zuiderzeeland[\"hevels\"].loc[Zuiderzeeland[\"hevels\"][\"KWKSOORT\"] == \"Hevel\"].reset_index(drop=True)\n", - ")" + "#distinguish multiple parameters from the same gpkg\n", + "Zuiderzeeland['afsluitmiddel'] = Zuiderzeeland['hevels'].loc[Zuiderzeeland['hevels']['KWKSOORT'] == 'Afsluitmiddel (groot)'].reset_index(drop=True)\n", + "Zuiderzeeland['hevels'] = Zuiderzeeland['hevels'].loc[Zuiderzeeland['hevels']['KWKSOORT'] == 'Hevel'].reset_index(drop=True)" ] }, { "cell_type": "code", "execution_count": null, - "id": "10", + "id": "a9a814bb-bf6a-4822-9447-c8fb0bbc57ae", "metadata": {}, "outputs": [], "source": [ - "# determine aanvoer en afvoer gemalen\n", - "(\n", - " Zuiderzeeland[\"gemaal\"][\"func_aanvoer\"],\n", - " Zuiderzeeland[\"gemaal\"][\"func_afvoer\"],\n", - " Zuiderzeeland[\"gemaal\"][\"func_circulatie\"],\n", - ") = False, False, False # default is False\n", - "Zuiderzeeland[\"gemaal\"][\"functiegemaal\"] = Zuiderzeeland[\"gemaal\"][\"KGMFUNC\"].astype(str)\n", - "Zuiderzeeland[\"gemaal\"].loc[Zuiderzeeland[\"gemaal\"][\"functiegemaal\"] == \"onbekend\", \"functiegemaal\"] = (\n", - " np.nan\n", - ") # replace onbekend with nan, will be filled up later see one line below\n", - "Zuiderzeeland[\"gemaal\"][\"functiegemaal\"].fillna(\n", - " Zuiderzeeland[\"gemaal\"][\"KGMSOORT\"], inplace=True\n", - ") # some additional is given in this column\n", + "#determine aanvoer en afvoer gemalen\n", + "Zuiderzeeland['gemaal']['func_aanvoer'], Zuiderzeeland['gemaal']['func_afvoer'], Zuiderzeeland['gemaal']['func_circulatie'] = False, False, False #default is False\n", + "Zuiderzeeland['gemaal']['functiegemaal'] = Zuiderzeeland['gemaal']['KGMFUNC'].astype(str) \n", + "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal']['functiegemaal'] == 'onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", + "Zuiderzeeland['gemaal']['functiegemaal'].fillna(Zuiderzeeland['gemaal']['KGMSOORT'], inplace = True) #some additional is given in this column\n", "\n", - "Zuiderzeeland[\"gemaal\"].loc[\n", - " Zuiderzeeland[\"gemaal\"].functiegemaal.str.contains(\"af-|afvoer|onderbemaling\"), \"func_afvoer\"\n", - "] = True\n", - "Zuiderzeeland[\"gemaal\"].loc[\n", - " Zuiderzeeland[\"gemaal\"].functiegemaal.str.contains(\"aanvoergemaal|opmaling\"), \"func_aanvoer\"\n", - "] = True\n", - "Zuiderzeeland[\"gemaal\"].loc[Zuiderzeeland[\"gemaal\"].functiegemaal.str.contains(\"circulatie\"), \"func_circulatie\"] = True\n", - "Zuiderzeeland[\"gemaal\"].loc[\n", - " ~Zuiderzeeland[\"gemaal\"].func_afvoer\n", - " & ~Zuiderzeeland[\"gemaal\"].func_aanvoer\n", - " & ~Zuiderzeeland[\"gemaal\"].func_circulatie,\n", - " \"func_afvoer\",\n", - "] = True # set to afvoergemaal is there the function is unknown" + "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('af-|afvoer|onderbemaling'), 'func_afvoer'] = True\n", + "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('aanvoergemaal|opmaling'), 'func_aanvoer'] = True\n", + "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('circulatie'), 'func_circulatie'] = True\n", + "Zuiderzeeland['gemaal'].loc[(Zuiderzeeland['gemaal'].func_afvoer == False) &\n", + " (Zuiderzeeland['gemaal'].func_aanvoer == False) &\n", + " (Zuiderzeeland['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" ] }, { "cell_type": "code", "execution_count": null, - "id": "11", + "id": "5a55866b-ece5-45ce-836d-c8b1fc737c2b", "metadata": {}, "outputs": [], "source": [] @@ -181,81 +164,63 @@ { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "aec76a19-0893-48a0-b1af-c8c871d0557d", "metadata": {}, "outputs": [], "source": [ - "# Gemaal\n", - "Zuiderzeeland[\"gemaal\"] = Zuiderzeeland[\"gemaal\"][\n", - " [\"KGMIDENT\", \"GLOBALID\", \"func_aanvoer\", \"func_afvoer\", \"func_circulatie\", \"geometry\"]\n", - "]\n", - "Zuiderzeeland[\"gemaal\"] = Zuiderzeeland[\"gemaal\"].rename(columns={\"KGMIDENT\": \"code\", \"GLOBALID\": \"globalid\"})\n", - "Zuiderzeeland[\"gemaal\"][\"nen3610id\"] = \"dummy_nen3610id_gemaal_\" + Zuiderzeeland[\"gemaal\"].index.astype(str)\n", + "#Gemaal\n", + "Zuiderzeeland['gemaal'] = Zuiderzeeland['gemaal'][['KGMIDENT', 'GLOBALID', 'func_aanvoer', 'func_afvoer', 'func_circulatie', 'geometry']]\n", + "Zuiderzeeland['gemaal'] = Zuiderzeeland['gemaal'].rename(columns={'KGMIDENT': 'code', 'GLOBALID': 'globalid'})\n", + "Zuiderzeeland['gemaal']['nen3610id'] = 'dummy_nen3610id_gemaal_' + Zuiderzeeland['gemaal'].index.astype(str)\n", "\n", - "# Hydroobject\n", - "Zuiderzeeland[\"hydroobject\"] = Zuiderzeeland[\"hydroobject\"][[\"OWAIDENT\", \"GLOBALID\", \"geometry\"]]\n", - "Zuiderzeeland[\"hydroobject\"] = Zuiderzeeland[\"hydroobject\"].rename(columns={\"OWAIDENT\": \"code\", \"GLOBALID\": \"globalid\"})\n", - "Zuiderzeeland[\"hydroobject\"][\"nen3610id\"] = \"dummy_nen3610id_hydroobject_\" + Zuiderzeeland[\"hydroobject\"].index.astype(\n", - " str\n", - ")\n", + "#Hydroobject\n", + "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'][['OWAIDENT', 'GLOBALID', 'geometry']]\n", + "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'].rename(columns={'OWAIDENT':'code', 'GLOBALID':'globalid'})\n", + "Zuiderzeeland['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + Zuiderzeeland['hydroobject'].index.astype(str)\n", "\n", - "# duikersifonhevel\n", - "Zuiderzeeland[\"duikersifonhevel\"] = Zuiderzeeland[\"duikersifonhevel\"][[\"KDUIDENT\", \"GLOBALID\", \"geometry\"]]\n", - "Zuiderzeeland[\"duikersifonhevel\"] = Zuiderzeeland[\"duikersifonhevel\"].rename(\n", - " columns={\"KDUIDENT\": \"code\", \"GLOBALID\": \"globalid\"}\n", - ")\n", - "Zuiderzeeland[\"duikersifonhevel\"][\"nen3610id\"] = \"dummy_nen3610id_duikersifonhevel_\" + Zuiderzeeland[\n", - " \"duikersifonhevel\"\n", - "].index.astype(str)\n", + "#duikersifonhevel\n", + "Zuiderzeeland['duikersifonhevel'] = Zuiderzeeland['duikersifonhevel'][['KDUIDENT', 'GLOBALID', 'geometry']]\n", + "Zuiderzeeland['duikersifonhevel'] = Zuiderzeeland['duikersifonhevel'].rename(columns={'KDUIDENT':'code', 'GLOBALID': 'globalid'})\n", + "Zuiderzeeland['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + Zuiderzeeland['duikersifonhevel'].index.astype(str)\n", "\n", - "# hevels\n", - "Zuiderzeeland[\"hevels\"] = Zuiderzeeland[\"hevels\"][[\"KWKIDENT\", \"GLOBALID\", \"geometry\"]]\n", - "Zuiderzeeland[\"hevels\"] = Zuiderzeeland[\"hevels\"].rename(columns={\"KWKIDENT\": \"code\", \"GLOBALID\": \"globalid\"})\n", - "Zuiderzeeland[\"hevels\"][\"nen3610id\"] = \"dummy_nen3610id_hevels_\" + Zuiderzeeland[\"hevels\"].index.astype(str)\n", - "# add to the duikersifonhevel\n", - "Zuiderzeeland[\"duikersifonhevel\"] = gpd.GeoDataFrame(\n", - " pd.concat((Zuiderzeeland[\"duikersifonhevel\"], Zuiderzeeland[\"hevels\"]))\n", - ")\n", + "#hevels\n", + "Zuiderzeeland['hevels'] = Zuiderzeeland['hevels'][['KWKIDENT', 'GLOBALID', 'geometry']]\n", + "Zuiderzeeland['hevels'] = Zuiderzeeland['hevels'].rename(columns={'KWKIDENT':'code', 'GLOBALID': 'globalid'})\n", + "Zuiderzeeland['hevels']['nen3610id'] = 'dummy_nen3610id_hevels_' + Zuiderzeeland['hevels'].index.astype(str)\n", + "#add to the duikersifonhevel\n", + "Zuiderzeeland['duikersifonhevel'] = gpd.GeoDataFrame(pd.concat((Zuiderzeeland['duikersifonhevel'], Zuiderzeeland['hevels']))) \n", "\n", - "# stuw\n", - "Zuiderzeeland[\"stuw\"] = Zuiderzeeland[\"stuw\"][[\"KWKIDENT\", \"GLOBALID\", \"geometry\", \"KWKSOORT\"]]\n", - "Zuiderzeeland[\"stuw\"] = Zuiderzeeland[\"stuw\"].rename(\n", - " columns={\"KWKIDENT\": \"code\", \"GLOBALID\": \"globalid\", \"KWKSOORT\": \"KWKsoort\"}\n", - ")\n", - "Zuiderzeeland[\"stuw\"] = Zuiderzeeland[\"stuw\"].set_crs(\"EPSG:28992\")\n", - "Zuiderzeeland[\"stuw\"][\"nen3610id\"] = \"dummy_nen3610id_stuw_\" + Zuiderzeeland[\"stuw\"].index.astype(str)\n", + "#stuw\n", + "Zuiderzeeland['stuw'] = Zuiderzeeland['stuw'][['KWKIDENT', 'GLOBALID', 'geometry', 'KWKSOORT']]\n", + "Zuiderzeeland['stuw'] = Zuiderzeeland['stuw'].rename(columns={'KWKIDENT':'code', 'GLOBALID': 'globalid', 'KWKSOORT':'KWKsoort'})\n", + "Zuiderzeeland['stuw'] = Zuiderzeeland['stuw'].set_crs('EPSG:28992')\n", + "Zuiderzeeland['stuw']['nen3610id'] = 'dummy_nen3610id_stuw_' + Zuiderzeeland['stuw'].index.astype(str)\n", "\n", - "# afsluitmiddel\n", - "Zuiderzeeland[\"afsluitmiddel\"] = Zuiderzeeland[\"afsluitmiddel\"][[\"KWKIDENT\", \"GLOBALID\", \"geometry\"]]\n", - "Zuiderzeeland[\"afsluitmiddel\"] = Zuiderzeeland[\"afsluitmiddel\"].rename(\n", - " columns={\"KWKIDENT\": \"code\", \"GLOBALID\": \"globalid\"}\n", - ")\n", - "Zuiderzeeland[\"afsluitmiddel\"][\"nen3610id\"] = \"dummy_nen3610id_hevels_\" + Zuiderzeeland[\"afsluitmiddel\"].index.astype(\n", - " str\n", - ")\n", + "#afsluitmiddel\n", + "Zuiderzeeland['afsluitmiddel'] = Zuiderzeeland['afsluitmiddel'][['KWKIDENT', 'GLOBALID', 'geometry']]\n", + "Zuiderzeeland['afsluitmiddel'] = Zuiderzeeland['afsluitmiddel'].rename(columns={'KWKIDENT':'code', 'GLOBALID': 'globalid'})\n", + "Zuiderzeeland['afsluitmiddel']['nen3610id'] = 'dummy_nen3610id_hevels_' + Zuiderzeeland['afsluitmiddel'].index.astype(str)\n", "\n", - "# peilgebied\n", - "Zuiderzeeland[\"peilgebied\"] = Zuiderzeeland[\"peilgebied\"][[\"DHYDRO_ZMRPL\", \"GPGIDENT\", \"geometry\"]]\n", - "Zuiderzeeland[\"peilgebied\"][\"nen3610id\"] = \"dummy_nen3610id_peilgebied_\" + Zuiderzeeland[\"peilgebied\"].index.astype(str)\n", - "Zuiderzeeland[\"peilgebied\"][\"globalid\"] = \"dummy_globalid_peilgebied_\" + Zuiderzeeland[\"peilgebied\"].index.astype(str)\n", - "Zuiderzeeland[\"peilgebied\"] = Zuiderzeeland[\"peilgebied\"].rename(\n", - " columns={\"DHYDRO_ZMRPL\": \"streefpeil\", \"GPGIDENT\": \"code\"}\n", - ")\n", - "Zuiderzeeland[\"peilgebied\"][\"globalid\"] = \"dummy_globalid_peilgebied_\" + Zuiderzeeland[\"peilgebied\"].index.astype(str)\n", + "#peilgebied\n", + "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'][['DHYDRO_ZMRPL', 'GPGIDENT', 'geometry']]\n", + "Zuiderzeeland['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + Zuiderzeeland['peilgebied'].index.astype(str)\n", + "Zuiderzeeland['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Zuiderzeeland['peilgebied'].index.astype(str)\n", + "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].rename(columns={'DHYDRO_ZMRPL': 'streefpeil', 'GPGIDENT':'code'})\n", + "Zuiderzeeland['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Zuiderzeeland['peilgebied'].index.astype(str)\n", "\n", - "# streefpeil\n", - "Zuiderzeeland[\"streefpeil\"] = Zuiderzeeland[\"peilgebied\"][[\"streefpeil\", \"globalid\"]]\n", - "Zuiderzeeland[\"streefpeil\"][\"geometry\"] = np.nan\n", - "Zuiderzeeland[\"streefpeil\"].rename(columns={\"streefpeil\": \"waterhoogte\"}, inplace=True)\n", - "Zuiderzeeland[\"streefpeil\"] = gpd.GeoDataFrame(Zuiderzeeland[\"streefpeil\"], geometry=\"geometry\")\n", + "#streefpeil\n", + "Zuiderzeeland['streefpeil'] = Zuiderzeeland['peilgebied'][['streefpeil', 'globalid']]\n", + "Zuiderzeeland['streefpeil']['geometry'] = np.nan\n", + "Zuiderzeeland['streefpeil'].rename(columns = {'streefpeil': 'waterhoogte'}, inplace=True)\n", + "Zuiderzeeland['streefpeil'] = gpd.GeoDataFrame(Zuiderzeeland['streefpeil'], geometry = 'geometry')\n", "\n", - "# delete the streefpeil in the peilgebied for consistency\n", - "Zuiderzeeland[\"peilgebied\"] = Zuiderzeeland[\"peilgebied\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]" + "#delete the streefpeil in the peilgebied for consistency\n", + "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'][['code', 'globalid', 'nen3610id', 'geometry']]" ] }, { "cell_type": "markdown", - "id": "13", + "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -264,16 +229,16 @@ { "cell_type": "code", "execution_count": null, - "id": "14", + "id": "b064a376-0396-4c93-a2ad-eca3eea54598", "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap=Zuiderzeeland)" + "show_layers_and_columns(waterschap = Zuiderzeeland)" ] }, { "cell_type": "markdown", - "id": "15", + "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", "metadata": {}, "source": [ "### Store data" @@ -282,7 +247,7 @@ { "cell_type": "code", "execution_count": null, - "id": "16", + "id": "556aea48-a819-4f70-8e22-6c843354a46d", "metadata": {}, "outputs": [], "source": [ @@ -290,14 +255,15 @@ "\n", "if not os.path.exists(output_gpkg_path):\n", " os.makedirs(output_gpkg_path)\n", - "\n", - "store_data(waterschap=Zuiderzeeland, output_gpkg_path=output_gpkg_path + \"/Zuiderzeeland\")" + " \n", + "store_data(waterschap = Zuiderzeeland, \n", + " output_gpkg_path = output_gpkg_path + '/Zuiderzeeland')\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "17", + "id": "116f9f2a-ad97-44c5-9a2f-ba43c80e4b2d", "metadata": {}, "outputs": [], "source": [] @@ -305,7 +271,7 @@ { "cell_type": "code", "execution_count": null, - "id": "18", + "id": "01a06379-58e7-4621-b998-4f95b947bd63", "metadata": {}, "outputs": [], "source": [] @@ -313,7 +279,7 @@ { "cell_type": "code", "execution_count": null, - "id": "19", + "id": "f48ffb3f-11d0-41d7-9254-61b2c7873436", "metadata": {}, "outputs": [], "source": [] From a2aa37eff0b5d6551fd98ba4a23707d3473b2997 Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Wed, 7 Aug 2024 09:50:22 +0200 Subject: [PATCH 07/25] Remove outdated parametrize notebooks which are not used atm In this period, we focused on coupling the AGV model to the national network while ensuring the AGV model implements functionalities for water supply and drainage situations. Initially, we achieved this using a single notebook. Next, we will scale up and implement it across other waterschappen. In the near future, we plan to streamline this by calling a single Python file instead of ten similar notebooks, which should reduce maintenance time. Hence, the other other notebooks have been deleted. --- .../Parametrize/Delfland_parametrize.ipynb | 446 --------------- .../HollandsNoorderkwartier_parametrize.ipynb | 435 --------------- .../HollandseDelta_parametrize.ipynb | 492 ----------------- .../Parametrize/Rijnland_nieuw.ipynb | 444 --------------- .../Parametrize/Rijnland_parametrize.ipynb | 452 --------------- .../Rivierenland_parametrize.ipynb | 448 --------------- .../Scheldestromen_parametrize.ipynb | 485 ---------------- .../WetterskipFryslan_parametrize.ipynb | 519 ------------------ .../Zuiderzeeland_parametrize.ipynb | 451 --------------- 9 files changed, 4172 deletions(-) delete mode 100644 src/peilbeheerst_model/Parametrize/Delfland_parametrize.ipynb delete mode 100644 src/peilbeheerst_model/Parametrize/HollandsNoorderkwartier_parametrize.ipynb delete mode 100644 src/peilbeheerst_model/Parametrize/HollandseDelta_parametrize.ipynb delete mode 100644 src/peilbeheerst_model/Parametrize/Rijnland_nieuw.ipynb delete mode 100644 src/peilbeheerst_model/Parametrize/Rijnland_parametrize.ipynb delete mode 100644 src/peilbeheerst_model/Parametrize/Rivierenland_parametrize.ipynb delete mode 100644 src/peilbeheerst_model/Parametrize/Scheldestromen_parametrize.ipynb delete mode 100644 src/peilbeheerst_model/Parametrize/WetterskipFryslan_parametrize.ipynb delete mode 100644 src/peilbeheerst_model/Parametrize/Zuiderzeeland_parametrize.ipynb diff --git a/src/peilbeheerst_model/Parametrize/Delfland_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/Delfland_parametrize.ipynb deleted file mode 100644 index 80a7cc4..0000000 --- a/src/peilbeheerst_model/Parametrize/Delfland_parametrize.ipynb +++ /dev/null @@ -1,446 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import datetime\n", - "import logging\n", - "import os\n", - "import pathlib\n", - "import warnings\n", - "\n", - "import pandas as pd\n", - "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", - "import ribasim\n", - "import ribasim.nodes\n", - "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", - "from peilbeheerst_model.ribasim_feedback_processor import RibasimFeedbackProcessor\n", - "\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\"\"\"\n", - "Model Aannamens:\n", - "- Max area van hydroobjecten is 10% van basin area, 90% bij boezem\n", - "- Initial state op streefpeil\n", - "- \n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Define variables and model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Set Config" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set paths\n", - "waterschap = \"Delfland\"\n", - "versie = \"2024_6_1\"\n", - "\n", - "work_dir = pathlib.Path(r\"../../../../../Ribasim_updated_models\", waterschap)\n", - "ribasim_gpkg = work_dir.joinpath(\"database.gpkg\")\n", - "path_ribasim_toml = work_dir.joinpath(\"ribasim.toml\")\n", - "output_dir = work_dir.joinpath(\"results\")\n", - "\n", - "# Basin area percentage\n", - "regular_percentage = 10\n", - "boezem_percentage = 90\n", - "unknown_streefpeil = (\n", - " 0.00012345 # we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", - ")\n", - "\n", - "# Forcing settings\n", - "start_time = \"2024-01-01\"\n", - "timestep_size = \"d\"\n", - "timesteps = 2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Process the feedback form" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "name = \"Ron Bruijns (HKV)\"\n", - "\n", - "feedback_excel = pathlib.Path(\n", - " r\"../../../../../Ribasim_feedback/V1_formulieren/feedback_formulier_\" + waterschap + \".xlsx\"\n", - ")\n", - "feedback_excel_processed = (\n", - " r\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_\" + waterschap + \"_RB_processed.xlsx\"\n", - ")\n", - "\n", - "ribasim_toml = pathlib.Path(\n", - " r\"../../../../../Ribasim_base_models\", waterschap + \"_boezemmodel_\" + versie, \"ribasim.toml\"\n", - ")\n", - "output_folder = work_dir # r\"../../../../../Ribasim_updated_models/AmstelGooienVecht\"\n", - "\n", - "processor = RibasimFeedbackProcessor(\n", - " name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed\n", - ")\n", - "processor.run()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Load model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load Ribasim model\n", - "with warnings.catch_warnings():\n", - " warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", - " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model specific tweaks" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# assert not pd.isnull(ribasim_model.basin.area.df.meta_streefpeil).any()\n", - "\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", - "] = unknown_streefpeil\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"meta_streefpeil\"].isna(), \"meta_streefpeil\"] = (\n", - " unknown_streefpeil\n", - ")\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"meta_streefpeil\"] == 9.999, \"meta_streefpeil\"] = (\n", - " unknown_streefpeil\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Parameterization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Nodes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (characteristics)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the initial state of each basin. Is set equal to the streefpeil\n", - "# ribasim_param.set_initial_basin_state(ribasim_model) #the initial states of the basins are by default already set to the streefpeil!\n", - "\n", - "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", - "ribasim_param.insert_standard_profile(\n", - " ribasim_model, regular_percentage=regular_percentage, boezem_percentage=boezem_percentage, depth_profile=2\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add storage basins\n", - "model_name = \"AmstelGooienVecht_StorageBasins\"\n", - "# node_ids = [1, 2, 3] # Specify node IDs to process or include_hoofdwater Boolean\n", - "processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", - "ribasim_model = processor.run()\n", - "\n", - "# Check basin area\n", - "ribasim_param.validate_basin_area(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (forcing)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set static forcing\n", - "forcing_dict = {\n", - " \"precipitation\": ribasim_param.convert_mm_day_to_m_sec(5),\n", - " \"potential_evaporation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"drainage\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"infiltration\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"urban_runoff\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - "}\n", - "\n", - "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pumps" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set pump capacity for each pump\n", - "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### FlowBoundary" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set FlowBoundary rate for each pump\n", - "ribasim_model.flow_boundary.static.df[\"flow_rate\"] = 0 #" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Add Discrete Control" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add discrete control nodes and control edges\n", - "ribasim_param.add_discrete_control_nodes(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### TabulatedRatingCurve" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# First, set the Q(h)-relationship to a relationship which is at each TRC node the same\n", - "ribasim_param.set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=1)\n", - "\n", - "# The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", - "# Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", - "ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set numerical settings" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Write model output\n", - "ribasim_param.index_reset(ribasim_model)\n", - "ribasim_model.starttime = datetime.datetime(2024, 1, 1)\n", - "ribasim_model.endtime = datetime.datetime(2024, 1, 1, 0, 0, 1)\n", - "ribasim_model.solver.saveat = 3600\n", - "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Iterate over tabulated rating curves" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "try:\n", - " ribasim_param.iterate_TRC(\n", - " ribasim_param=ribasim_param,\n", - " allowed_tolerance=0.02,\n", - " max_iter=1,\n", - " expected_difference=0.1,\n", - " max_adjustment=0.25,\n", - " cmd=[\"ribasim\", path_ribasim_toml],\n", - " output_dir=output_dir,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " )\n", - "\n", - "except Exception:\n", - " logging.error(\"The model was not able to run. Log file:\")\n", - " log_file_path = os.path.join(output_dir, \"ribasim.log\")\n", - " try:\n", - " with open(log_file_path) as log_file:\n", - " log_content = log_file.read()\n", - " print(log_content)\n", - " except Exception as log_exception:\n", - " logging.error(f\"Could not read the log file: {log_exception}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Write model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# control_dict = Control(work_dir = work_dir).run_all()\n", - "ribasim_param.write_ribasim_model_GoodCloud(\n", - " ribasim_model=ribasim_model,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " waterschap=waterschap,\n", - " modeltype=\"boezemmodel\",\n", - " include_results=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Open Output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df_basin = pd.read_feather(os.path.join(output_dir, \"basin.arrow\"))\n", - "df_basin" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:ribasim]", - "language": "python", - "name": "conda-env-ribasim-py" - }, - "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.13" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/src/peilbeheerst_model/Parametrize/HollandsNoorderkwartier_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/HollandsNoorderkwartier_parametrize.ipynb deleted file mode 100644 index c18b5d1..0000000 --- a/src/peilbeheerst_model/Parametrize/HollandsNoorderkwartier_parametrize.ipynb +++ /dev/null @@ -1,435 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import datetime\n", - "import logging\n", - "import os\n", - "import pathlib\n", - "import warnings\n", - "\n", - "import pandas as pd\n", - "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", - "import ribasim\n", - "import ribasim.nodes\n", - "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", - "\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\"\"\"\n", - "Model Aannamens:\n", - "- Max area van hydroobjecten is 10% van basin area, 90% bij boezem\n", - "- Initial state op streefpeil\n", - "- \n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Define variables and model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Set Config" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set paths\n", - "waterschap = \"HollandsNoorderkwartier\"\n", - "versie = \"2024_6_4\"\n", - "\n", - "work_dir = pathlib.Path(r\"../../../../../Ribasim_updated_models\", waterschap)\n", - "ribasim_gpkg = work_dir.joinpath(\"database.gpkg\")\n", - "path_ribasim_toml = work_dir.joinpath(\"ribasim.toml\")\n", - "output_dir = work_dir.joinpath(\"results\")\n", - "\n", - "# Basin area percentage\n", - "regular_percentage = 10\n", - "boezem_percentage = 90\n", - "unknown_streefpeil = (\n", - " 0.00012345 # we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", - ")\n", - "\n", - "# Forcing settings\n", - "start_time = \"2024-01-01\"\n", - "timestep_size = \"d\"\n", - "timesteps = 2" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Process the feedback form" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# name = \"Ron Bruijns (HKV)\"\n", - "\n", - "# feedback_excel = pathlib.Path(r\"../../../../../Ribasim_feedback/V1_formulieren/feedback_formulier_\" + waterschap + \".xlsx\")\n", - "# feedback_excel_processed = r\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_\" + waterschap + \"_JA_processed.xlsx\"\n", - "\n", - "# ribasim_toml = pathlib.Path(r\"../../../../../Ribasim_base_models\", waterschap + '_boezemmodel_' + versie, 'ribasim.toml')\n", - "# output_folder = work_dir #r\"../../../../../Ribasim_updated_models/AmstelGooienVecht\"\n", - "\n", - "# processor = RibasimFeedbackProcessor(name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed)\n", - "# processor.run()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Load model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load Ribasim model\n", - "with warnings.catch_warnings():\n", - " warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", - " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model specific tweaks" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "assert not pd.isnull(ribasim_model.basin.area.df.meta_streefpeil).any()\n", - "\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", - "] = unknown_streefpeil\n", - "\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"meta_streefpeil\"] == 9.999, \"meta_streefpeil\"] = (\n", - " unknown_streefpeil\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Parameterization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Nodes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (characteristics)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the initial state of each basin. Is set equal to the streefpeil\n", - "# ribasim_param.set_initial_basin_state(ribasim_model) #the initial states of the basins are by default already set to the streefpeil!\n", - "\n", - "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", - "ribasim_param.insert_standard_profile(\n", - " ribasim_model, regular_percentage=regular_percentage, boezem_percentage=boezem_percentage, depth_profile=2\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add storage basins\n", - "# model_name = 'AmstelGooienVecht_StorageBasins'\n", - "# node_ids = [1, 2, 3] # Specify node IDs to process or include_hoofdwater Boolean\n", - "processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", - "ribasim_model = processor.run()\n", - "\n", - "# Check basin area\n", - "ribasim_param.validate_basin_area(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (forcing)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set static forcing\n", - "forcing_dict = {\n", - " \"precipitation\": ribasim_param.convert_mm_day_to_m_sec(5),\n", - " \"potential_evaporation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"drainage\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"infiltration\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"urban_runoff\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - "}\n", - "\n", - "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pumps" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set pump capacity for each pump\n", - "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### FlowBoundary" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set FlowBoundary rate for each pump\n", - "ribasim_model.flow_boundary.static.df[\"flow_rate\"] = 0 #" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Add Discrete Control" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add discrete control nodes and control edges\n", - "ribasim_param.add_discrete_control_nodes(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### TabulatedRatingCurve" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# First, set the Q(h)-relationship to a relationship which is at each TRC node the same\n", - "ribasim_param.set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=1)\n", - "\n", - "# The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", - "# Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", - "ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set numerical settings" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Write model output\n", - "ribasim_param.index_reset(ribasim_model)\n", - "ribasim_model.starttime = datetime.datetime(2024, 1, 1)\n", - "ribasim_model.endtime = datetime.datetime(2024, 1, 5)\n", - "ribasim_model.solver.saveat = 3600\n", - "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Iterate over tabulated rating curves" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "try:\n", - " ribasim_param.iterate_TRC(\n", - " ribasim_param=ribasim_param,\n", - " allowed_tolerance=0.02,\n", - " max_iter=1,\n", - " expected_difference=0.1,\n", - " max_adjustment=0.25,\n", - " cmd=[\"ribasim\", path_ribasim_toml],\n", - " output_dir=output_dir,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " )\n", - "\n", - "except Exception:\n", - " logging.error(\"The model was not able to run. Log file:\")\n", - " log_file_path = os.path.join(output_dir, \"ribasim.log\")\n", - " try:\n", - " with open(log_file_path) as log_file:\n", - " log_content = log_file.read()\n", - " print(log_content)\n", - " except Exception as log_exception:\n", - " logging.error(f\"Could not read the log file: {log_exception}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Write model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# control_dict = Control(work_dir = work_dir).run_all()\n", - "ribasim_param.write_ribasim_model_GoodCloud(\n", - " ribasim_model=ribasim_model,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " waterschap=waterschap,\n", - " modeltype=\"boezemmodel\",\n", - " include_results=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Open Output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df_basin = pd.read_feather(os.path.join(output_dir, \"basin.arrow\"))\n", - "df_basin" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:ribasim]", - "language": "python", - "name": "conda-env-ribasim-py" - }, - "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.13" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/src/peilbeheerst_model/Parametrize/HollandseDelta_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/HollandseDelta_parametrize.ipynb deleted file mode 100644 index 6435ca2..0000000 --- a/src/peilbeheerst_model/Parametrize/HollandseDelta_parametrize.ipynb +++ /dev/null @@ -1,492 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import datetime\n", - "import logging\n", - "import os\n", - "import pathlib\n", - "import warnings\n", - "\n", - "import pandas as pd\n", - "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", - "import ribasim\n", - "import ribasim.nodes\n", - "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", - "from peilbeheerst_model.ribasim_feedback_processor import RibasimFeedbackProcessor\n", - "from ribasim import Node\n", - "from ribasim.nodes import (\n", - " tabulated_rating_curve,\n", - ")\n", - "from shapely.geometry import Point\n", - "\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\"\"\"\n", - "Model Aannamens:\n", - "- Max area van hydroobjecten is 10% van basin area, 90% bij boezem\n", - "- Initial state op streefpeil\n", - "- \n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Define variables and model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Set Config" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set paths\n", - "waterschap = \"HollandseDelta\"\n", - "versie = \"2024_6_1\"\n", - "\n", - "work_dir = pathlib.Path(r\"../../../../../Ribasim_updated_models\", waterschap)\n", - "ribasim_gpkg = work_dir.joinpath(\"database.gpkg\")\n", - "path_ribasim_toml = work_dir.joinpath(\"ribasim.toml\")\n", - "output_dir = work_dir.joinpath(\"results\")\n", - "\n", - "# Basin area percentage\n", - "regular_percentage = 10\n", - "boezem_percentage = 90\n", - "unknown_streefpeil = (\n", - " 0.00012345 # we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", - ")\n", - "\n", - "# Forcing settings\n", - "start_time = \"2024-01-01\"\n", - "timestep_size = \"d\"\n", - "timesteps = 2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Process the feedback form" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "name = \"Ron Bruijns (HKV)\"\n", - "\n", - "feedback_excel = pathlib.Path(\n", - " r\"../../../../../Ribasim_feedback/V1_formulieren/feedback_formulier_\" + waterschap + \".xlsx\"\n", - ")\n", - "feedback_excel_processed = (\n", - " r\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_\" + waterschap + \"_JA_processed.xlsx\"\n", - ")\n", - "\n", - "ribasim_toml = pathlib.Path(\n", - " r\"../../../../../Ribasim_base_models\", waterschap + \"_boezemmodel_\" + versie, \"ribasim.toml\"\n", - ")\n", - "output_folder = work_dir # r\"../../../../../Ribasim_updated_models/AmstelGooienVecht\"\n", - "\n", - "processor = RibasimFeedbackProcessor(\n", - " name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed\n", - ")\n", - "processor.run()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Load model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load Ribasim model\n", - "with warnings.catch_warnings():\n", - " warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", - " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model specific tweaks" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "assert not pd.isnull(ribasim_model.basin.area.df.meta_streefpeil).any()\n", - "\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", - "] = unknown_streefpeil\n", - "\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"meta_streefpeil\"] == 9.999, \"meta_streefpeil\"] = (\n", - " unknown_streefpeil\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Remove the TRC's without geometries" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# sometimes the geometries are POINT EMPTY\n", - "ribasim_model.tabulated_rating_curve.node.df = ribasim_model.tabulated_rating_curve.node.df[\n", - " ~ribasim_model.tabulated_rating_curve.node.df[\"geometry\"].is_empty\n", - "]\n", - "\n", - "# sometimes the geometries are None\n", - "ribasim_model.tabulated_rating_curve.node.df.dropna(subset=\"geometry\", inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "new_node_id = max(ribasim_model.edge.df.from_node_id.max(), ribasim_model.edge.df.to_node_id.max()) + 1\n", - "\n", - "### First manual adjustment: insert Terminal with TRC\n", - "ribasim_model.terminal.add(Node(new_node_id, Point(98200, 426447)))\n", - "\n", - "new_node_id += 1\n", - "ribasim_model.tabulated_rating_curve.add(\n", - " Node(new_node_id, Point(98200, 426447)), [tabulated_rating_curve.Static(level=[0.1, 1.1], flow_rate=[0.0, 10])]\n", - ")\n", - "\n", - "ribasim_model.edge.add(ribasim_model.basin[389], ribasim_model.tabulated_rating_curve[new_node_id])\n", - "\n", - "ribasim_model.edge.add(ribasim_model.tabulated_rating_curve[new_node_id], ribasim_model.terminal[new_node_id - 1])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Parameterization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Nodes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (characteristics)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the initial state of each basin. Is set equal to the streefpeil\n", - "# ribasim_param.set_initial_basin_state(ribasim_model) #the initial states of the basins are by default already set to the streefpeil!\n", - "\n", - "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", - "ribasim_param.insert_standard_profile(\n", - " ribasim_model, regular_percentage=regular_percentage, boezem_percentage=boezem_percentage, depth_profile=2\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add storage basins\n", - "# model_name = 'AmstelGooienVecht_StorageBasins'\n", - "# node_ids = [1, 2, 3] # Specify node IDs to process or include_hoofdwater Boolean\n", - "processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", - "ribasim_model = processor.run()\n", - "\n", - "# Check basin area\n", - "ribasim_param.validate_basin_area(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (forcing)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set static forcing\n", - "forcing_dict = {\n", - " \"precipitation\": ribasim_param.convert_mm_day_to_m_sec(5),\n", - " \"potential_evaporation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"drainage\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"infiltration\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"urban_runoff\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - "}\n", - "\n", - "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pumps" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set pump capacity for each pump\n", - "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### FlowBoundary" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set FlowBoundary rate for each pump\n", - "ribasim_model.flow_boundary.static.df[\"flow_rate\"] = 0 #" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Add Discrete Control" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add discrete control nodes and control edges\n", - "ribasim_param.add_discrete_control_nodes(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### TabulatedRatingCurve" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# First, set the Q(h)-relationship to a relationship which is at each TRC node the same\n", - "ribasim_param.set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=1)\n", - "\n", - "# The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", - "# Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", - "ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set numerical settings" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Write model output\n", - "ribasim_param.index_reset(ribasim_model)\n", - "ribasim_model.starttime = datetime.datetime(2024, 1, 1)\n", - "ribasim_model.endtime = datetime.datetime(2024, 1, 5)\n", - "ribasim_model.solver.saveat = 3600\n", - "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Iterate over tabulated rating curves" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "try:\n", - " ribasim_param.iterate_TRC(\n", - " ribasim_param=ribasim_param,\n", - " allowed_tolerance=0.02,\n", - " max_iter=1,\n", - " expected_difference=0.1,\n", - " max_adjustment=0.25,\n", - " cmd=[\"ribasim\", path_ribasim_toml],\n", - " output_dir=output_dir,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " )\n", - "\n", - "except Exception:\n", - " logging.error(\"The model was not able to run. Log file:\")\n", - " log_file_path = os.path.join(output_dir, \"ribasim.log\")\n", - " try:\n", - " with open(log_file_path) as log_file:\n", - " log_content = log_file.read()\n", - " print(log_content)\n", - " except Exception as log_exception:\n", - " logging.error(f\"Could not read the log file: {log_exception}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Write model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# control_dict = Control(work_dir = work_dir).run_all()\n", - "ribasim_param.write_ribasim_model_GoodCloud(\n", - " ribasim_model=ribasim_model,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " waterschap=waterschap,\n", - " modeltype=\"boezemmodel\",\n", - " include_results=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Open Output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df_basin = pd.read_feather(os.path.join(output_dir, \"basin.arrow\"))\n", - "df_basin" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:ribasim]", - "language": "python", - "name": "conda-env-ribasim-py" - }, - "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.13" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/src/peilbeheerst_model/Parametrize/Rijnland_nieuw.ipynb b/src/peilbeheerst_model/Parametrize/Rijnland_nieuw.ipynb deleted file mode 100644 index 0c294f3..0000000 --- a/src/peilbeheerst_model/Parametrize/Rijnland_nieuw.ipynb +++ /dev/null @@ -1,444 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import datetime\n", - "import logging\n", - "import os\n", - "import pathlib\n", - "import warnings\n", - "\n", - "import pandas as pd\n", - "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", - "import ribasim\n", - "import ribasim.nodes\n", - "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", - "from peilbeheerst_model.ribasim_feedback_processor import RibasimFeedbackProcessor\n", - "\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\"\"\"\n", - "Model Aannamens:\n", - "- Max area van hydroobjecten is 10% van basin area, 90% bij boezem\n", - "- Initial state op streefpeil\n", - "- \n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Define variables and model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Set Config" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set paths\n", - "waterschap = \"Rijnland\"\n", - "versie = \"2024_6_2\"\n", - "\n", - "work_dir = pathlib.Path(r\"../../../../../Ribasim_updated_models\", waterschap)\n", - "ribasim_gpkg = work_dir.joinpath(\"database.gpkg\")\n", - "path_ribasim_toml = work_dir.joinpath(\"ribasim.toml\")\n", - "output_dir = work_dir.joinpath(\"results\")\n", - "\n", - "# Basin area percentage\n", - "regular_percentage = 10\n", - "boezem_percentage = 90\n", - "unknown_streefpeil = (\n", - " 0.00012345 # we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", - ")\n", - "\n", - "# Forcing settings\n", - "start_time = \"2024-01-01\"\n", - "timestep_size = \"d\"\n", - "timesteps = 2" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Process the feedback form" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "name = \"Ron Bruijns (HKV)\"\n", - "\n", - "feedback_excel = pathlib.Path(\n", - " r\"../../../../../Ribasim_feedback/V1_formulieren/feedback_formulier_\" + waterschap + \".xlsx\"\n", - ")\n", - "feedback_excel_processed = (\n", - " r\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_\" + waterschap + \"_JA_processed.xlsx\"\n", - ")\n", - "\n", - "ribasim_toml = pathlib.Path(\n", - " r\"../../../../../Ribasim_base_models\", waterschap + \"_boezemmodel_\" + versie, \"ribasim.toml\"\n", - ")\n", - "output_folder = work_dir # r\"../../../../../Ribasim_updated_models/AmstelGooienVecht\"\n", - "\n", - "processor = RibasimFeedbackProcessor(\n", - " name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed\n", - ")\n", - "processor.run()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Load model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load Ribasim model\n", - "with warnings.catch_warnings():\n", - " warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", - " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model specific tweaks" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "assert not pd.isnull(ribasim_model.basin.area.df.meta_streefpeil).any()\n", - "\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", - "] = unknown_streefpeil\n", - "\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"meta_streefpeil\"] == 9.999, \"meta_streefpeil\"] = (\n", - " unknown_streefpeil\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Parameterization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Nodes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (characteristics)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the initial state of each basin. Is set equal to the streefpeil\n", - "# ribasim_param.set_initial_basin_state(ribasim_model) #the initial states of the basins are by default already set to the streefpeil!\n", - "\n", - "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", - "ribasim_param.insert_standard_profile(\n", - " ribasim_model, regular_percentage=regular_percentage, boezem_percentage=boezem_percentage, depth_profile=2\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add storage basins\n", - "# model_name = 'AmstelGooienVecht_StorageBasins'\n", - "# node_ids = [1, 2, 3] # Specify node IDs to process or include_hoofdwater Boolean\n", - "processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", - "ribasim_model = processor.run()\n", - "\n", - "# Check basin area\n", - "ribasim_param.validate_basin_area(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (forcing)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set static forcing\n", - "forcing_dict = {\n", - " \"precipitation\": ribasim_param.convert_mm_day_to_m_sec(5),\n", - " \"potential_evaporation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"drainage\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"infiltration\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"urban_runoff\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - "}\n", - "\n", - "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pumps" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set pump capacity for each pump\n", - "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### FlowBoundary" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set FlowBoundary rate for each pump\n", - "ribasim_model.flow_boundary.static.df[\"flow_rate\"] = 0 #" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Add Discrete Control" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add discrete control nodes and control edges\n", - "ribasim_param.add_discrete_control_nodes(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### TabulatedRatingCurve" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# First, set the Q(h)-relationship to a relationship which is at each TRC node the same\n", - "ribasim_param.set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=1)\n", - "\n", - "# The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", - "# Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", - "ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set numerical settings" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Write model output\n", - "ribasim_param.index_reset(ribasim_model)\n", - "ribasim_model.starttime = datetime.datetime(2024, 1, 1)\n", - "ribasim_model.endtime = datetime.datetime(2024, 1, 5)\n", - "ribasim_model.solver.saveat = 3600\n", - "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Iterate over tabulated rating curves" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "try:\n", - " ribasim_param.iterate_TRC(\n", - " ribasim_param=ribasim_param,\n", - " allowed_tolerance=0.02,\n", - " max_iter=1,\n", - " expected_difference=0.1,\n", - " max_adjustment=0.25,\n", - " cmd=[\"ribasim\", path_ribasim_toml],\n", - " output_dir=output_dir,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " )\n", - "\n", - "except Exception:\n", - " logging.error(\"The model was not able to run. Log file:\")\n", - " log_file_path = os.path.join(output_dir, \"ribasim.log\")\n", - " try:\n", - " with open(log_file_path) as log_file:\n", - " log_content = log_file.read()\n", - " print(log_content)\n", - " except Exception as log_exception:\n", - " logging.error(f\"Could not read the log file: {log_exception}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Write model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# control_dict = Control(work_dir = work_dir).run_all()\n", - "ribasim_param.write_ribasim_model_GoodCloud(\n", - " ribasim_model=ribasim_model,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " waterschap=waterschap,\n", - " modeltype=\"boezemmodel\",\n", - " include_results=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Open Output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df_basin = pd.read_feather(os.path.join(output_dir, \"basin.arrow\"))\n", - "df_basin" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:ribasim]", - "language": "python", - "name": "conda-env-ribasim-py" - }, - "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.13" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/src/peilbeheerst_model/Parametrize/Rijnland_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/Rijnland_parametrize.ipynb deleted file mode 100644 index 276f8d7..0000000 --- a/src/peilbeheerst_model/Parametrize/Rijnland_parametrize.ipynb +++ /dev/null @@ -1,452 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import datetime\n", - "import os\n", - "import pathlib\n", - "import warnings\n", - "\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", - "import ribasim\n", - "import ribasim.nodes\n", - "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", - "\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\"\"\"\n", - "Model Aannamens:\n", - "- Max area van hydroobjecten is 10% van basin area, 90% bij boezem\n", - "- Initial state op streefpeil\n", - "- \n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Define variables and model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Set Config" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set paths\n", - "waterschap = \"Rijnland\"\n", - "\n", - "# work_dir = pathlib.Path(\"Rekenend_Model_Test/Model_instanties/20240523\")\n", - "work_dir = pathlib.Path(f\"../../../../../Ribasim_networks/Waterschappen/{waterschap}/modellen/{waterschap}_boezemmodel\")\n", - "ribasim_gpkg = work_dir.joinpath(\"database.gpkg\")\n", - "path_ribasim_toml = work_dir.joinpath(\"ribasim.toml\")\n", - "output_dir = work_dir.joinpath(\"results\")\n", - "\n", - "# Basin area percentage\n", - "regular_percentage = 10\n", - "boezem_percentage = 90\n", - "unknown_streefpeil = (\n", - " 0.00012345 # we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", - ")\n", - "\n", - "# Forcing settings\n", - "start_time = \"2024-01-01\"\n", - "timestep_size = \"d\"\n", - "timesteps = 2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Load model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load Ribasim model\n", - "with warnings.catch_warnings():\n", - " warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", - " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model specific tweaks" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "assert not pd.isnull(ribasim_model.basin.area.df.meta_streefpeil).any()\n", - "\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", - "] = unknown_streefpeil\n", - "\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"meta_streefpeil\"] == 9.999, \"meta_streefpeil\"] = (\n", - " unknown_streefpeil\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Parameterization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Nodes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (characteristics)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", - "ribasim_param.insert_standard_profile(\n", - " ribasim_model, regular_percentage=regular_percentage, boezem_percentage=boezem_percentage, depth_profile=2\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add storage basins\n", - "# model_name = 'AmstelGooienVecht_StorageBasins'\n", - "# node_ids = [1, 2, 3] # Specify node IDs to process or include_hoofdwater Boolean\n", - "processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", - "ribasim_model = processor.run()\n", - "\n", - "# Check basin area\n", - "ribasim_param.validate_basin_area(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (forcing)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set static forcing\n", - "forcing_dict = {\n", - " \"precipitation\": ribasim_param.convert_mm_day_to_m_sec(5),\n", - " \"potential_evaporation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"drainage\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"infiltration\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"urban_runoff\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - "}\n", - "\n", - "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pumps" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set pump capacity for each pump\n", - "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### FlowBoundary" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set FlowBoundary rate for each pump\n", - "ribasim_model.flow_boundary.static.df[\"flow_rate\"] = 0 #" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Add Discrete Control" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add discrete control nodes and control edges\n", - "ribasim_param.add_discrete_control_nodes(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### TabulatedRatingCurve" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# First, set the Q(h)-relationship to a relationship which is at each TRC node the same\n", - "ribasim_param.set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=1)\n", - "\n", - "# The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", - "# Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", - "ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set numerical settings" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Write model output\n", - "ribasim_param.index_reset(ribasim_model)\n", - "ribasim_model.starttime = datetime.datetime(2024, 1, 1)\n", - "ribasim_model.endtime = datetime.datetime(2024, 1, 1, 0, 0, 10)\n", - "ribasim_model.solver.saveat = 3600\n", - "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Iterate over tabulated rating curves" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ribasim_param.iterate_TRC(\n", - " ribasim_param=ribasim_param,\n", - " allowed_tolerance=0.02,\n", - " max_iter=1,\n", - " expected_difference=0.1,\n", - " max_adjustment=0.25,\n", - " cmd=[\"ribasim\", path_ribasim_toml],\n", - " output_dir=output_dir,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Write model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# control_dict = Control(work_dir = work_dir).run_all()\n", - "ribasim_param.write_ribasim_model_GoodCloud(\n", - " ribasim_model=ribasim_model,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " waterschap=waterschap,\n", - " modeltype=\"boezemmodel\",\n", - " include_results=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Open Output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "NoI = 230 # Node_id of Interest\n", - "fig, ax = plt.subplots()\n", - "\n", - "for i in range(len(stored_trc)):\n", - " trc = stored_trc[str(i + 1)] # select the correct trc frame\n", - " trc = trc.loc[trc.node_id == NoI][[\"level\", \"flow_rate\"]] # select the level and flow_rate of the NoI\n", - "\n", - " # plot the Q(h) relation in the figure\n", - " ax.scatter(x=trc[\"level\"], y=trc[\"flow_rate\"], linewidths=1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df_basin = pd.read_feather(os.path.join(output_dir, \"basin.arrow\"))\n", - "df_basin" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Oud" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define numerical settings in the .toml file" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# # Load the just created .toml file\n", - "# with open(path_ribasim_toml, 'r') as file:\n", - "# data = toml.load(file)\n", - "\n", - "# # Update the general section\n", - "# data.update({\n", - "# # \"starttime\": \"2024-01-01T00:00:00\",\n", - "# # \"endtime\": \"2024-01-02T00:00:00\",\n", - "# \"crs\": \"EPSG:28992\",\n", - "# \"input_dir\": \".\",\n", - "# \"results_dir\": \"results\",\n", - "# \"ribasim_version\": \"2024.8.0\"\n", - "# })\n", - "# # Update the solver section\n", - "# data['solver'] = {\n", - "# \"algorithm\": \"RK4\",\n", - "# \"saveat\": 86400.0,\n", - "# \"dt\": 60.0,\n", - "# \"dtmin\": 0.0,\n", - "# \"dtmax\": 1.0,\n", - "# \"force_dtmin\": False,\n", - "# \"abstol\": 1e-06,\n", - "# \"reltol\": 1e-05,\n", - "# \"maxiters\": 10000000,\n", - "# \"sparse\": True,\n", - "# \"autodiff\": True\n", - "# }\n", - "\n", - "# # Save the updated .toml file\n", - "# with open(path_ribasim_toml, 'w') as file:\n", - "# toml.dump(data, file)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:ribasim]", - "language": "python", - "name": "conda-env-ribasim-py" - }, - "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.13" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/src/peilbeheerst_model/Parametrize/Rivierenland_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/Rivierenland_parametrize.ipynb deleted file mode 100644 index fc28c53..0000000 --- a/src/peilbeheerst_model/Parametrize/Rivierenland_parametrize.ipynb +++ /dev/null @@ -1,448 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import datetime\n", - "import os\n", - "import pathlib\n", - "import warnings\n", - "\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", - "import ribasim\n", - "import ribasim.nodes\n", - "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", - "\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\"\"\"\n", - "Model Aannamens:\n", - "- Max area van hydroobjecten is 10% van basin area, 90% bij boezem\n", - "- Initial state op streefpeil\n", - "- \n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Define variables and model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Set Config" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set paths\n", - "waterschap = \"Rivierenland\"\n", - "\n", - "# work_dir = pathlib.Path(\"Rekenend_Model_Test/Model_instanties/20240523\")\n", - "work_dir = pathlib.Path(f\"../../../../../Ribasim_networks/Waterschappen/{waterschap}/modellen/{waterschap}_boezemmodel\")\n", - "ribasim_gpkg = work_dir.joinpath(\"database.gpkg\")\n", - "path_ribasim_toml = work_dir.joinpath(\"ribasim.toml\")\n", - "output_dir = work_dir.joinpath(\"results\")\n", - "\n", - "# Basin area percentage\n", - "regular_percentage = 10\n", - "boezem_percentage = 90\n", - "unknown_streefpeil = (\n", - " 0.00012345 # we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", - ")\n", - "\n", - "# Forcing settings\n", - "start_time = \"2024-01-01\"\n", - "timestep_size = \"d\"\n", - "timesteps = 2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Load model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load Ribasim model\n", - "with warnings.catch_warnings():\n", - " warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", - " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model specific tweaks" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "assert not pd.isnull(ribasim_model.basin.area.df.meta_streefpeil).any()\n", - "\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", - "] = unknown_streefpeil" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Parameterization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Nodes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (characteristics)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", - "ribasim_param.insert_standard_profile(\n", - " ribasim_model, regular_percentage=regular_percentage, boezem_percentage=boezem_percentage, depth_profile=2\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add storage basins\n", - "# model_name = 'AmstelGooienVecht_StorageBasins'\n", - "# node_ids = [1, 2, 3] # Specify node IDs to process or include_hoofdwater Boolean\n", - "processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", - "ribasim_model = processor.run()\n", - "\n", - "# Check basin area\n", - "ribasim_param.validate_basin_area(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (forcing)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set static forcing\n", - "forcing_dict = {\n", - " \"precipitation\": ribasim_param.convert_mm_day_to_m_sec(5),\n", - " \"potential_evaporation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"drainage\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"infiltration\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"urban_runoff\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - "}\n", - "\n", - "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pumps" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set pump capacity for each pump\n", - "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### FlowBoundary" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set FlowBoundary rate for each pump\n", - "ribasim_model.flow_boundary.static.df[\"flow_rate\"] = 0 #" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Add Discrete Control" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add discrete control nodes and control edges\n", - "ribasim_param.add_discrete_control_nodes(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### TabulatedRatingCurve" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# First, set the Q(h)-relationship to a relationship which is at each TRC node the same\n", - "ribasim_param.set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=1)\n", - "\n", - "# The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", - "# Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", - "ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set numerical settings" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Write model output\n", - "ribasim_param.index_reset(ribasim_model)\n", - "ribasim_model.starttime = datetime.datetime(2024, 1, 1)\n", - "ribasim_model.endtime = datetime.datetime(2024, 1, 1, 0, 0, 10)\n", - "ribasim_model.solver.saveat = 3600\n", - "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Iterate over tabulated rating curves" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ribasim_param.iterate_TRC(\n", - " ribasim_param=ribasim_param,\n", - " allowed_tolerance=0.02,\n", - " max_iter=1,\n", - " expected_difference=0.1,\n", - " max_adjustment=0.25,\n", - " cmd=[\"ribasim\", path_ribasim_toml],\n", - " output_dir=output_dir,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Write model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# control_dict = Control(work_dir = work_dir).run_all()\n", - "ribasim_param.write_ribasim_model_GoodCloud(\n", - " ribasim_model=ribasim_model,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " waterschap=waterschap,\n", - " modeltype=\"boezemmodel\",\n", - " include_results=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Open Output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "NoI = 230 # Node_id of Interest\n", - "fig, ax = plt.subplots()\n", - "\n", - "for i in range(len(stored_trc)):\n", - " trc = stored_trc[str(i + 1)] # select the correct trc frame\n", - " trc = trc.loc[trc.node_id == NoI][[\"level\", \"flow_rate\"]] # select the level and flow_rate of the NoI\n", - "\n", - " # plot the Q(h) relation in the figure\n", - " ax.scatter(x=trc[\"level\"], y=trc[\"flow_rate\"], linewidths=1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df_basin = pd.read_feather(os.path.join(output_dir, \"basin.arrow\"))\n", - "df_basin" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Oud" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define numerical settings in the .toml file" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# # Load the just created .toml file\n", - "# with open(path_ribasim_toml, 'r') as file:\n", - "# data = toml.load(file)\n", - "\n", - "# # Update the general section\n", - "# data.update({\n", - "# # \"starttime\": \"2024-01-01T00:00:00\",\n", - "# # \"endtime\": \"2024-01-02T00:00:00\",\n", - "# \"crs\": \"EPSG:28992\",\n", - "# \"input_dir\": \".\",\n", - "# \"results_dir\": \"results\",\n", - "# \"ribasim_version\": \"2024.8.0\"\n", - "# })\n", - "# # Update the solver section\n", - "# data['solver'] = {\n", - "# \"algorithm\": \"RK4\",\n", - "# \"saveat\": 86400.0,\n", - "# \"dt\": 60.0,\n", - "# \"dtmin\": 0.0,\n", - "# \"dtmax\": 1.0,\n", - "# \"force_dtmin\": False,\n", - "# \"abstol\": 1e-06,\n", - "# \"reltol\": 1e-05,\n", - "# \"maxiters\": 10000000,\n", - "# \"sparse\": True,\n", - "# \"autodiff\": True\n", - "# }\n", - "\n", - "# # Save the updated .toml file\n", - "# with open(path_ribasim_toml, 'w') as file:\n", - "# toml.dump(data, file)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:ribasim]", - "language": "python", - "name": "conda-env-ribasim-py" - }, - "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.13" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/src/peilbeheerst_model/Parametrize/Scheldestromen_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/Scheldestromen_parametrize.ipynb deleted file mode 100644 index f7f49cc..0000000 --- a/src/peilbeheerst_model/Parametrize/Scheldestromen_parametrize.ipynb +++ /dev/null @@ -1,485 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import datetime\n", - "import logging\n", - "import os\n", - "import pathlib\n", - "import warnings\n", - "\n", - "import pandas as pd\n", - "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", - "import ribasim\n", - "import ribasim.nodes\n", - "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", - "from peilbeheerst_model.ribasim_feedback_processor import RibasimFeedbackProcessor\n", - "\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\"\"\"\n", - "Model Aannamens:\n", - "- Max area van hydroobjecten is 10% van basin area, 90% bij boezem\n", - "- Initial state op streefpeil\n", - "- \n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Define variables and model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Set Config" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set paths\n", - "waterschap = \"Scheldestromen\"\n", - "versie = \"2024_6_1\"\n", - "\n", - "work_dir = pathlib.Path(r\"../../../../../Ribasim_updated_models\", waterschap)\n", - "ribasim_gpkg = work_dir.joinpath(\"database.gpkg\")\n", - "path_ribasim_toml = work_dir.joinpath(\"ribasim.toml\")\n", - "output_dir = work_dir.joinpath(\"results\")\n", - "\n", - "# Basin area percentage\n", - "regular_percentage = 10\n", - "boezem_percentage = 90\n", - "unknown_streefpeil = (\n", - " 0.00012345 # we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", - ")\n", - "\n", - "# Forcing settings\n", - "start_time = \"2024-01-01\"\n", - "timestep_size = \"d\"\n", - "timesteps = 2\n", - "\n", - "default_boundary_level = 0" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Process the feedback form" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "name = \"Ron Bruijns (HKV)\"\n", - "\n", - "feedback_excel = pathlib.Path(\n", - " r\"../../../../../Ribasim_feedback/V1_formulieren/feedback_formulier_\" + waterschap + \".xlsx\"\n", - ")\n", - "feedback_excel_processed = (\n", - " r\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_\" + waterschap + \"_JA_processed.xlsx\"\n", - ")\n", - "\n", - "ribasim_toml = pathlib.Path(\n", - " r\"../../../../../Ribasim_base_models\", waterschap + \"_boezemmodel_\" + versie, \"ribasim.toml\"\n", - ")\n", - "\n", - "# r\"../../../../../Ribasim_base_models/AmstelGooienVecht_boezemmodel_2024_6_8/ribasim.toml\"\n", - "output_folder = work_dir # r\"../../../../../Ribasim_updated_models/AmstelGooienVecht\"\n", - "\n", - "processor = RibasimFeedbackProcessor(\n", - " name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed\n", - ")\n", - "processor.run()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Load model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load Ribasim model\n", - "with warnings.catch_warnings():\n", - " warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", - " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model specific tweaks" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "assert not pd.isnull(ribasim_model.basin.area.df.meta_streefpeil).any()\n", - "\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", - "] = unknown_streefpeil\n", - "\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"meta_streefpeil\"] == 9.999, \"meta_streefpeil\"] = (\n", - " unknown_streefpeil\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Parameterization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Nodes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (characteristics)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the initial state of each basin. Is set equal to the streefpeil\n", - "# ribasim_param.set_initial_basin_state(ribasim_model) #the initial states of the basins are by default already set to the streefpeil!\n", - "# ribasim_model.basin.area\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add storage basins\n", - "model_name = \"Scheldestromen_StorageBasins\"\n", - "# node_ids = [1, 2, 3] # Specify node IDs to process or include_hoofdwater Boolean\n", - "processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", - "ribasim_model = processor.run()\n", - "\n", - "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", - "ribasim_param.insert_standard_profile(\n", - " ribasim_model, regular_percentage=regular_percentage, boezem_percentage=boezem_percentage, depth_profile=2\n", - ")\n", - "\n", - "# Check basin area\n", - "ribasim_param.validate_basin_area(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (forcing)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set static forcing\n", - "forcing_dict = {\n", - " \"precipitation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"potential_evaporation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"drainage\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"infiltration\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"urban_runoff\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - "}\n", - "\n", - "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pumps" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set pump capacity for each pump\n", - "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Convert all boundary nodes to LevelBoundaries" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ribasim_param.Terminals_to_LevelBoundaries(ribasim_model=ribasim_model, default_level=default_boundary_level)\n", - "\n", - "ribasim_param.FlowBoundaries_to_LevelBoundaries(ribasim_model=ribasim_model, default_level=default_boundary_level)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### FlowBoundary" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set FlowBoundary rate for each pump\n", - "# ribasim_model.flow_boundary.static.df['flow_rate'] = 0 #" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Add Discrete Control" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add discrete control nodes and control edges\n", - "ribasim_param.add_discrete_control_nodes(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### TabulatedRatingCurve" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# First, set the Q(h)-relationship to a relationship which is at each TRC node the same\n", - "ribasim_param.set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=1)\n", - "\n", - "# The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", - "# Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", - "ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set numerical settings" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Write model output\n", - "ribasim_param.index_reset(ribasim_model)\n", - "ribasim_model.starttime = datetime.datetime(2024, 1, 1)\n", - "ribasim_model.endtime = datetime.datetime(2024, 1, 5)\n", - "ribasim_model.solver.saveat = 3600\n", - "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Iterate over tabulated rating curves" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# !ribasim '../../../../../Ribasim_updated_models/Scheldestromen/ribasim.toml'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ribasim_model.plot()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "try:\n", - " ribasim_param.iterate_TRC(\n", - " ribasim_param=ribasim_param,\n", - " allowed_tolerance=0.02,\n", - " max_iter=1,\n", - " expected_difference=0.1,\n", - " max_adjustment=0.25,\n", - " cmd=[\"ribasim\", path_ribasim_toml],\n", - " output_dir=output_dir,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " )\n", - "\n", - "except Exception:\n", - " logging.error(\"The model was not able to run. Log file:\")\n", - " log_file_path = os.path.join(output_dir, \"ribasim.log\")\n", - " try:\n", - " with open(log_file_path) as log_file:\n", - " log_content = log_file.read()\n", - " print(log_content)\n", - " except Exception as log_exception:\n", - " logging.error(f\"Could not read the log file: {log_exception}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Write model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# control_dict = Control(work_dir = work_dir).run_all()\n", - "ribasim_param.write_ribasim_model_GoodCloud(\n", - " ribasim_model=ribasim_model,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " waterschap=waterschap,\n", - " modeltype=\"boezemmodel\",\n", - " include_results=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Open Output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df_basin = pd.read_feather(os.path.join(output_dir, \"basin.arrow\"))\n", - "df_basin" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:ribasim]", - "language": "python", - "name": "conda-env-ribasim-py" - }, - "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.13" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/src/peilbeheerst_model/Parametrize/WetterskipFryslan_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/WetterskipFryslan_parametrize.ipynb deleted file mode 100644 index 9bac655..0000000 --- a/src/peilbeheerst_model/Parametrize/WetterskipFryslan_parametrize.ipynb +++ /dev/null @@ -1,519 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import datetime\n", - "import logging\n", - "import os\n", - "import pathlib\n", - "import warnings\n", - "\n", - "import pandas as pd\n", - "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", - "import ribasim\n", - "import ribasim.nodes\n", - "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", - "from ribasim import Node\n", - "from ribasim.nodes import (\n", - " pump,\n", - ")\n", - "from shapely.geometry import Point\n", - "\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Model Aannamens:\n", - "- Max area van hydroobjecten is 10% van basin area, 90% bij boezem\n", - "- Initial state op streefpeil" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Define variables and model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Set Config" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set paths\n", - "waterschap = \"WetterskipFryslan\"\n", - "versie = \"2024_6_17\"\n", - "\n", - "work_dir = pathlib.Path(r\"../../../../../Ribasim_base_models\", waterschap)\n", - "ribasim_gpkg = work_dir.joinpath(\"database.gpkg\")\n", - "path_ribasim_toml = work_dir.joinpath(\"ribasim.toml\")\n", - "output_dir = work_dir.joinpath(\"results\")\n", - "\n", - "# Basin area percentage\n", - "regular_percentage = 10\n", - "boezem_percentage = 90\n", - "unknown_streefpeil = (\n", - " 0.00012345 # we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", - ")\n", - "\n", - "# Forcing settings\n", - "start_time = \"2024-01-01\"\n", - "timestep_size = \"d\"\n", - "timesteps = 2" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Process the feedback form" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The form of Wetterskip has not been added, as there was only one line of feedback. This line included some operations which is not possible by making use of the feedback form. This has been added some code blocks belows." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# name = \"Ron Bruijns (HKV)\"\n", - "\n", - "# feedback_excel = pathlib.Path(r\"../../../../../Ribasim_feedback/V1_formulieren/feedback_formulier_\" + waterschap + \".xlsx\")\n", - "# feedback_excel_processed = r\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_\" + waterschap + \"_JA_processed.xlsx\"\n", - "\n", - "# ribasim_toml = pathlib.Path(r\"../../../../../Ribasim_base_models\", waterschap + '_boezemmodel_' + versie, 'ribasim.toml')\n", - "# output_folder = work_dir #r\"../../../../../Ribasim_updated_models/AmstelGooienVecht\"\n", - "\n", - "# processor = RibasimFeedbackProcessor(name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed)\n", - "# processor.run()\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# path_ribasim_toml = os.path.join(work_dir, waterschap + '_boezemmodel_' + versie, 'ribasim.toml')\n", - "path_ribasim_toml = \"../../../../../Ribasim_base_models/WetterskipFryslan_boezemmodel_2024_6_17/ribasim.toml\"\n", - "output_folder = work_dir # r\"../../../../../Ribasim_updated_models/AmstelGooienVecht\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "let op! verwijder bovenstaand toml file als er meer feedback komt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Load model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load Ribasim model\n", - "with warnings.catch_warnings():\n", - " warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", - " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model specific tweaks" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "assert not pd.isnull(ribasim_model.basin.area.df.meta_streefpeil).any()\n", - "\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", - "] = unknown_streefpeil\n", - "\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"meta_streefpeil\"] == 9.999, \"meta_streefpeil\"] = (\n", - " unknown_streefpeil\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Add a Terminal and a gemaal at the northernmost Zeepolder" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# First, add the gemaal\n", - "node_id_gemaal = ribasim_param.get_current_max_nodeid(ribasim_model) + 1 # define new node_id number\n", - "ribasim_model.pump.add(Node(node_id_gemaal, Point(170900, 591437)), [pump.Static(flow_rate=[700 / 60])]) # add pump\n", - "ribasim_model.edge.add(\n", - " ribasim_model.basin[328], ribasim_model.pump[node_id_gemaal]\n", - ") # add the egde from the basin to the pump\n", - "\n", - "node_id_terminal = ribasim_param.get_current_max_nodeid(ribasim_model) + 1 # define new node_id number\n", - "ribasim_model.terminal.add(Node(node_id_terminal, Point(170898, 591445))) # add Terminal\n", - "ribasim_model.edge.add(\n", - " ribasim_model.pump[node_id_gemaal], ribasim_model.terminal[node_id_terminal]\n", - ") # add the edge from the pump to the terminal\n", - "\n", - "# add the edges between the two nodes above" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# These nodes have suddenly been added, without apparent reason. Delete these nodes\n", - "ribasim_model.pump.node.df = ribasim_model.pump.node.df.loc[ribasim_model.pump.node.df.node_id != 94374]\n", - "ribasim_model.pump.node.df = ribasim_model.pump.node.df.loc[ribasim_model.pump.node.df.node_id != 94376]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Parameterization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Nodes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (characteristics)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the initial state of each basin. Is set equal to the streefpeil\n", - "# ribasim_param.set_initial_basin_state(ribasim_model) #the initial states of the basins are by default already set to the streefpeil!\n", - "\n", - "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", - "ribasim_param.insert_standard_profile(\n", - " ribasim_model, regular_percentage=regular_percentage, boezem_percentage=boezem_percentage, depth_profile=2\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add storage basins\n", - "# model_name = 'AmstelGooienVecht_StorageBasins'\n", - "# node_ids = [1, 2, 3] # Specify node IDs to process or include_hoofdwater Boolean\n", - "processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", - "ribasim_model = processor.run()\n", - "\n", - "# Check basin area\n", - "ribasim_param.validate_basin_area(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (forcing)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set static forcing\n", - "forcing_dict = {\n", - " \"precipitation\": ribasim_param.convert_mm_day_to_m_sec(5),\n", - " \"potential_evaporation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"drainage\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"infiltration\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"urban_runoff\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - "}\n", - "\n", - "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pumps" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set pump capacity for each pump\n", - "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### FlowBoundary" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set FlowBoundary rate for each pump\n", - "ribasim_model.flow_boundary.static.df[\"flow_rate\"] = 0 #" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Add Discrete Control" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add discrete control nodes and control edges\n", - "ribasim_param.add_discrete_control_nodes(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### TabulatedRatingCurve" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# First, set the Q(h)-relationship to a relationship which is at each TRC node the same\n", - "ribasim_param.set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=1)\n", - "\n", - "# The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", - "# Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", - "ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set numerical settings" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Write model output\n", - "ribasim_param.index_reset(ribasim_model)\n", - "ribasim_model.starttime = datetime.datetime(2024, 1, 1)\n", - "ribasim_model.endtime = datetime.datetime(2024, 1, 1, 0, 0, 1)\n", - "ribasim_model.solver.saveat = 3600\n", - "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Iterate over tabulated rating curves" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "try:\n", - " ribasim_param.iterate_TRC(\n", - " ribasim_param=ribasim_param,\n", - " allowed_tolerance=0.02,\n", - " max_iter=1,\n", - " expected_difference=0.1,\n", - " max_adjustment=0.25,\n", - " cmd=[\"ribasim\", path_ribasim_toml],\n", - " output_dir=output_dir,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " )\n", - "\n", - "except Exception:\n", - " logging.error(\"The model was not able to run. Log file:\")\n", - " log_file_path = os.path.join(output_dir, \"ribasim.log\")\n", - " try:\n", - " with open(log_file_path) as log_file:\n", - " log_content = log_file.read()\n", - " print(log_content)\n", - " except Exception as log_exception:\n", - " logging.error(f\"Could not read the log file: {log_exception}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Write model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "path_ribasim_toml = \"../../../../../Ribasim_updated_models/WetterskipFryslan/ribasim.toml\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "pas wederom het pad hierboven aan" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# control_dict = Control(work_dir = work_dir).run_all()\n", - "ribasim_param.write_ribasim_model_GoodCloud(\n", - " ribasim_model=ribasim_model,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " waterschap=waterschap,\n", - " modeltype=\"boezemmodel\",\n", - " include_results=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Open Output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df_basin = pd.read_feather(os.path.join(output_dir, \"basin.arrow\"))\n", - "df_basin" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:ribasim]", - "language": "python", - "name": "conda-env-ribasim-py" - }, - "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.13" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/src/peilbeheerst_model/Parametrize/Zuiderzeeland_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/Zuiderzeeland_parametrize.ipynb deleted file mode 100644 index 62f0146..0000000 --- a/src/peilbeheerst_model/Parametrize/Zuiderzeeland_parametrize.ipynb +++ /dev/null @@ -1,451 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import datetime\n", - "import logging\n", - "import os\n", - "import pathlib\n", - "import warnings\n", - "\n", - "import pandas as pd\n", - "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", - "import ribasim\n", - "import ribasim.nodes\n", - "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", - "\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\"\"\"\n", - "Model Aannamens:\n", - "- Max area van hydroobjecten is 10% van basin area, 90% bij boezem\n", - "- Initial state op streefpeil\n", - "- \n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Define variables and model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Set Config" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set paths\n", - "waterschap = \"Zuiderzeeland\"\n", - "versie = \"2024_6_1\"\n", - "\n", - "work_dir = pathlib.Path(r\"../../../../../Ribasim_updated_models\", waterschap)\n", - "ribasim_gpkg = work_dir.joinpath(\"database.gpkg\")\n", - "path_ribasim_toml = work_dir.joinpath(\"ribasim.toml\")\n", - "output_dir = work_dir.joinpath(\"results\")\n", - "\n", - "# Basin area percentage\n", - "regular_percentage = 10\n", - "boezem_percentage = 90\n", - "unknown_streefpeil = (\n", - " 0.00012345 # we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", - ")\n", - "\n", - "# Forcing settings\n", - "start_time = \"2024-01-01\"\n", - "timestep_size = \"d\"\n", - "timesteps = 2" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "path_ribasim_toml = r\"../../../../../Ribasim_base_models/Zuiderzeeland_boezemmodel_2024_6_1/ribasim.toml\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Let op: pas toml pad aan!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "zie hierboven!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Process the feedback form" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# name = \"Ron Bruijns (HKV)\"\n", - "\n", - "# feedback_excel = pathlib.Path(r\"../../../../../Ribasim_feedback/V1_formulieren/feedback_formulier_\" + waterschap + \".xlsx\")\n", - "# feedback_excel_processed = r\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_\" + waterschap + \"_JA_processed.xlsx\"\n", - "\n", - "# ribasim_toml = pathlib.Path(r\"../../../../../Ribasim_base_models\", waterschap + '_boezemmodel_' + versie, 'ribasim.toml')\n", - "# output_folder = work_dir #r\"../../../../../Ribasim_updated_models/AmstelGooienVecht\"\n", - "\n", - "# processor = RibasimFeedbackProcessor(name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed)\n", - "# processor.run()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Load model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load Ribasim model\n", - "with warnings.catch_warnings():\n", - " warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", - " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model specific tweaks" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "assert not pd.isnull(ribasim_model.basin.area.df.meta_streefpeil).any()\n", - "\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", - "] = unknown_streefpeil\n", - "\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"meta_streefpeil\"] == 9.999, \"meta_streefpeil\"] = (\n", - " unknown_streefpeil\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Parameterization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Nodes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (characteristics)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the initial state of each basin. Is set equal to the streefpeil\n", - "# ribasim_param.set_initial_basin_state(ribasim_model) #the initial states of the basins are by default already set to the streefpeil!\n", - "\n", - "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", - "ribasim_param.insert_standard_profile(\n", - " ribasim_model, regular_percentage=regular_percentage, boezem_percentage=boezem_percentage, depth_profile=2\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add storage basins\n", - "# model_name = 'AmstelGooienVecht_StorageBasins'\n", - "# node_ids = [1, 2, 3] # Specify node IDs to process or include_hoofdwater Boolean\n", - "processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", - "ribasim_model = processor.run()\n", - "\n", - "# Check basin area\n", - "ribasim_param.validate_basin_area(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (forcing)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set static forcing\n", - "forcing_dict = {\n", - " \"precipitation\": ribasim_param.convert_mm_day_to_m_sec(5),\n", - " \"potential_evaporation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"drainage\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"infiltration\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"urban_runoff\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - "}\n", - "\n", - "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pumps" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set pump capacity for each pump\n", - "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### FlowBoundary" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set FlowBoundary rate for each pump\n", - "ribasim_model.flow_boundary.static.df[\"flow_rate\"] = 0 #" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Add Discrete Control" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add discrete control nodes and control edges\n", - "ribasim_param.add_discrete_control_nodes(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### TabulatedRatingCurve" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# First, set the Q(h)-relationship to a relationship which is at each TRC node the same\n", - "ribasim_param.set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=1)\n", - "\n", - "# The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", - "# Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", - "ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set numerical settings" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Write model output\n", - "ribasim_param.index_reset(ribasim_model)\n", - "ribasim_model.starttime = datetime.datetime(2024, 1, 1)\n", - "ribasim_model.endtime = datetime.datetime(2024, 1, 5)\n", - "ribasim_model.solver.saveat = 3600\n", - "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Iterate over tabulated rating curves" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "try:\n", - " ribasim_param.iterate_TRC(\n", - " ribasim_param=ribasim_param,\n", - " allowed_tolerance=0.02,\n", - " max_iter=1,\n", - " expected_difference=0.1,\n", - " max_adjustment=0.25,\n", - " cmd=[\"ribasim\", path_ribasim_toml],\n", - " output_dir=output_dir,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " )\n", - "\n", - "except Exception:\n", - " logging.error(\"The model was not able to run. Log file:\")\n", - " log_file_path = os.path.join(output_dir, \"ribasim.log\")\n", - " try:\n", - " with open(log_file_path) as log_file:\n", - " log_content = log_file.read()\n", - " print(log_content)\n", - " except Exception as log_exception:\n", - " logging.error(f\"Could not read the log file: {log_exception}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Write model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# control_dict = Control(work_dir = work_dir).run_all()\n", - "ribasim_param.write_ribasim_model_GoodCloud(\n", - " ribasim_model=ribasim_model,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " waterschap=waterschap,\n", - " modeltype=\"boezemmodel\",\n", - " include_results=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Open Output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df_basin = pd.read_feather(os.path.join(output_dir, \"basin.arrow\"))\n", - "df_basin" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:ribasim]", - "language": "python", - "name": "conda-env-ribasim-py" - }, - "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.13" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} From a33aa209440b8450e4778d6328cde849045e35d8 Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Wed, 7 Aug 2024 11:49:07 +0200 Subject: [PATCH 08/25] Fix remain ruff issues in the post_processing folder --- .../postprocess_data/post-process_WSRL.ipynb | 249 ++++- .../postprocess_data/post-process_agv.ipynb | 303 ++++-- .../post-process_delfland.ipynb | 250 ++++- .../post-process_rijnland.ipynb | 941 +++++++++++------- .../post-process_wetterskip.ipynb | 331 +++--- .../post-process_zuiderzeeland.ipynb | 557 ++++++++++- .../postprocess_data/post-processing_HD.ipynb | 223 ++++- .../post-processing_HHNK.ipynb | 278 +++++- .../post-processing_HHSK.ipynb | 402 +++++--- .../post-processing_scheldestromen.ipynb | 385 ++++++- 10 files changed, 2926 insertions(+), 993 deletions(-) diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb index 844b7c5..1e80bc9 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb @@ -21,18 +21,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", "metadata": {}, "outputs": [], "source": [ "import geopandas as gpd\n", "import numpy as np\n", + "from general_functions import *\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", - "from general_functions import *" + "remove_cat_2 = True" ] }, { @@ -45,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "e15206a7-6639-40bb-9942-f920085f53b4", "metadata": {}, "outputs": [], @@ -53,16 +54,16 @@ "#define relative paths\n", "waterschap = 'WSRL'\n", "\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", + "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", "\n", "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "grens_path = \"/DATAFOLDER/projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_wsrl.gpkg\"\n", + "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_wsrl.gpkg\"\n", "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" + "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] }, { @@ -75,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", "metadata": {}, "outputs": [], @@ -88,6 +89,7 @@ " 'duikersifonhevel',\n", " 'peilgebied', \n", " 'streefpeil',\n", + " 'aggregation_area',\n", " ])\n", "WSRL['peilgebied'] = WSRL['peilgebied'].to_crs('EPSG:28992')\n", "\n", @@ -105,10 +107,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "1c0d88a9-1141-4f86-8345-0eb4678eadc1", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# check primary key\n", "WSRL['peilgebied']['globalid'].is_unique" @@ -124,7 +137,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "5f40630a-2a94-42f7-8ee6-7b74bcde912e", "metadata": {}, "outputs": [], @@ -138,10 +151,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "06e7be9e-6154-457e-b0ee-3c1c83a5d9f4", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of overlapping shapes without filter: 378\n", + "Number of overlapping shapes with filter: 54\n" + ] + } + ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(WSRL['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", @@ -162,20 +184,21 @@ "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" ] }, - { - "cell_type": "markdown", - "id": "b2044eb8-c047-4830-8816-2e4af251020a", - "metadata": {}, - "source": [ - "## Create peilgebied_cat column" - ] - }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "a2c9f5ef-364a-47b6-ae0c-ffc4e7072108", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "yes\n", + "yes\n" + ] + } + ], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", @@ -183,7 +206,9 @@ "for index, row in WSRL['peilgebied'].iterrows():\n", " \n", " if row.CODE == 'LNG014-P':\n", + " print('yes')\n", " peilgebieden_cat.append(1)\n", + " \n", " else:\n", " peilgebieden_cat.append(0)\n", " \n", @@ -193,6 +218,32 @@ "WSRL['peilgebied'] = WSRL['peilgebied'].rename(columns={'CODE':'code'})" ] }, + { + "cell_type": "code", + "execution_count": 8, + "id": "528cd71d-848f-4ba7-a2af-965bdbd16888", + "metadata": {}, + "outputs": [], + "source": [ + "# list(WSRL['peilgebied'].code.unique())" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "b2d4a069-9ff4-4996-9e04-fd05db9e2573", + "metadata": {}, + "outputs": [], + "source": [ + "#add boezems\n", + "codes_to_update = [\n", + " \"NDB004-P\", \"LNG013-P\", \"LNG012-P\", \"LNG011-P\", \"LNG010-P\",\n", + " \"LNG009-P\", \"LNG008-P\", \"LNG007-P\", \"LNG006-P\", \"LNG005-P\",\n", + " \"LNG304-P\", \"LNG002-P\", \"LNG001-P\", 'LNG014-P_extra', 'NDW100-P', 'OVW200-P'\n", + "]\n", + "WSRL['peilgebied'].loc[WSRL['peilgebied']['code'].isin(codes_to_update), 'peilgebied_cat'] = 1\n" + ] + }, { "cell_type": "markdown", "id": "ad5df059-48f2-4a5d-a911-e924b6e44116", @@ -203,7 +254,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "9a9719a8-9003-42bf-88d8-dc0e14a6235c", "metadata": {}, "outputs": [], @@ -226,10 +277,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "7099292c-fbe8-448b-bcb9-d512852168ba", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "WSRL['peilgebied']['globalid'].is_unique" ] @@ -244,7 +306,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "37606d1c-0408-4dc7-a4cc-72147b35aabd", "metadata": {}, "outputs": [], @@ -262,7 +324,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "e56bed85-30fb-4aaa-bf2c-55a0432857f2", "metadata": {}, "outputs": [], @@ -279,10 +341,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "e0480ec4-0826-47b9-9e57-88a35d4ebd6f", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "WSRL['peilgebied']['globalid'].is_unique" ] @@ -297,21 +370,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "e44043cf-0ea3-47ab-85ab-3af1c85dd3a7", "metadata": {}, "outputs": [], "source": [ - "buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", - "buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", - "buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(WSRL['peilgebied'].geometry.tolist()))\n", + "# buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", + "# buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", + "# buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(WSRL['peilgebied'].geometry.tolist()))\n", "\n", - "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", - "buffer_polygon = buffer_polygon.set_geometry(0)\n", - "buffer_polygon = buffer_polygon.dissolve()\n", - "buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", - "buffer_polygon = buffer_polygon.set_geometry('geometry')\n", - "buffer_polygon = buffer_polygon.set_crs('EPSG:28992')" + "# buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "# buffer_polygon = buffer_polygon.set_geometry(0)\n", + "# buffer_polygon = buffer_polygon.dissolve()\n", + "# buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "# buffer_polygon = buffer_polygon.set_geometry('geometry')\n", + "# buffer_polygon = buffer_polygon.set_crs('EPSG:28992')" ] }, { @@ -332,29 +405,51 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "ac737828-1f7e-42ab-9f37-45e0fd1e189c", "metadata": {}, "outputs": [], "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer['waterhoogte'] = [np.nan]\n", - "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", - "streefpeil_buffer['geometry'] = [None]\n", + "# # Create boezem streefpeil layer\n", + "# streefpeil_buffer = pd.DataFrame()\n", + "# streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "# streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", + "# streefpeil_buffer['geometry'] = [None]\n", "\n", - "WSRL['streefpeil'] = pd.concat([streefpeil_buffer, WSRL['streefpeil']])\n", - "WSRL['streefpeil'] = gpd.GeoDataFrame(WSRL['streefpeil'])" + "# WSRL['streefpeil'] = pd.concat([streefpeil_buffer, WSRL['streefpeil']])\n", + "# WSRL['streefpeil'] = gpd.GeoDataFrame(WSRL['streefpeil'])" ] }, { "cell_type": "code", - "execution_count": null, - "id": "f48bd18b-8f73-46fb-90be-2bb629cd7e00", + "execution_count": 17, + "id": "f8133133-67d8-4b9c-9150-071c81079d3b", "metadata": {}, "outputs": [], "source": [ - "WSRL['peilgebied'].globalid.is_unique\n" + "if remove_cat_2:\n", + " WSRL['peilgebied'] = WSRL['peilgebied'].loc[WSRL['peilgebied'].peilgebied_cat !=2]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "f48bd18b-8f73-46fb-90be-2bb629cd7e00", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "WSRL['peilgebied']['peilgebied_cat'].unique()\n" ] }, { @@ -367,15 +462,61 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "4b7ca695-ba56-46a4-bd0f-ced939947deb", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "gemaal\n", + "hydroobject\n", + "duikersifonhevel\n", + "peilgebied\n", + "streefpeil\n", + "aggregation_area\n" + ] + } + ], "source": [ "for key in WSRL.keys(): \n", " print(key)\n", " WSRL[str(key)].to_file(f'{output_folder}/{waterschap}.gpkg', layer = str(key), driver='GPKG')" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b9833c7e-20f4-4d9c-8dec-fa49c3298e0a", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "333debe3-dcf1-4fe1-b18c-968224ec2122", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5ca711a0-ade5-4edc-8eb5-abab9e33971a", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a4869ac1-b67c-4979-8155-8da665072655", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb index 875f39e..2f95ce5 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb @@ -21,18 +21,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", "metadata": {}, "outputs": [], "source": [ + "# from itertools import combinations\n", + "\n", "import geopandas as gpd\n", "import numpy as np\n", + "from general_functions import *\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", - "from general_functions import *" + "remove_cat_2 = True" ] }, { @@ -45,7 +48,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "e15206a7-6639-40bb-9942-f920085f53b4", "metadata": {}, "outputs": [], @@ -54,22 +57,22 @@ "waterschap = 'AmstelGooienVecht'\n", "waterschap2 = 'AGV'\n", "\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", - "\n", + "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", + "# \"Z:\\projects\\4750_20\\Data_postprocessed\\Waterschappen\\AmstelGooienVecht\\AGV.gpkg\"\n", "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "grens_path = \"/DATAFOLDER/projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", "\n", "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "hws_path = \"/DATAFOLDER//projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "\n", "# Buffer boundaries\n", - "buffer_path = f\"../projects/4750_30/Data_overig/HWS/hws_buffer_agv.gpkg\"\n", + "buffer_path = r\"/DATAFOLDER//projects/4750_30/Data_overig/HWS/hws_buffer_agv.gpkg\"\n", "\n", - "# Buffer RWHS\n", - "rhws_path = f\"../projects/4750_30/Data_overig/HWS/agv_rhws_buffer.gpkg\"\n", + "# # Buffer RWHS\n", + "# rhws_path = f\"/DATAFOLDER//projects/4750_30/Data_overig/HWS/agv_rhws_buffer.gpkg\"\n", "\n", "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" + "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] }, { @@ -82,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", "metadata": {}, "outputs": [], @@ -95,6 +98,7 @@ " 'duikersifonhevel',\n", " 'peilgebied', \n", " 'streefpeil',\n", + " 'aggregation_area',\n", " ])\n", "AVG['peilgebied'] = AVG['peilgebied'].to_crs('EPSG:28992')\n", "\n", @@ -111,10 +115,31 @@ "gdf_buffer = gdf_buffer.to_crs('EPSG:28992')\n", "gdf_buffer = gdf_buffer.dissolve()\n", "\n", - "# Load rhws\n", - "gdf_rhws = gpd.read_file(rhws_path)\n", - "gdf_rhws = gdf_rhws.to_crs('EPSG:28992')\n", - "gdf_rhws = gdf_rhws.dissolve()" + "# # Load rhws\n", + "# gdf_rhws = gpd.read_file(rhws_path)\n", + "# gdf_rhws = gdf_rhws.to_crs('EPSG:28992')\n", + "# gdf_rhws = gdf_rhws.dissolve()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "dd29abc2-65fa-4b54-95e5-98a4878eb620", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "AVG['peilgebied'].globalid.is_unique" ] }, { @@ -127,7 +152,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "b89385dd-5d81-4bea-9627-7750b1842e9c", "metadata": {}, "outputs": [], @@ -138,29 +163,8 @@ "# Use waterschap boudnaries to clip HWS layer\n", "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')\n", "\n", - "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_rhws = gpd.overlay(gdf_grens, gdf_rhws, how='intersection')" - ] - }, - { - "cell_type": "markdown", - "id": "20c9cd68-0b21-4a6e-8945-fadd79c7d2d7", - "metadata": {}, - "source": [ - "## RHWS is not included in AGV bron data, therefore create inverse difference layer to extract" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "86d6751e-068d-4563-ba7f-30b1b363db71", - "metadata": {}, - "outputs": [], - "source": [ - "# Select inverse of peilgebied\n", - "gdf_rhws = gpd.overlay(gdf_rhws, AVG['peilgebied'], how='difference')\n", - "gdf_rhws = gpd.overlay(gdf_rhws, gdf_hws, how='difference')\n", - "gdf_rhws.plot()" + "# # Use waterschap boudnaries to clip HWS layer\n", + "# gdf_rhws = gpd.overlay(gdf_grens, gdf_rhws, how='intersection')" ] }, { @@ -177,10 +181,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "f6edfd80-f81c-4659-9d8d-1dec3f91a23c", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of overlapping shapes without filter: 28\n", + "Number of overlapping shapes with filter: 0\n" + ] + } + ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(AVG['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", @@ -203,20 +216,45 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "fa787842-0a11-4d0f-ba5e-04566370a9fb", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n" + ] + } + ], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", "\n", "for index, row in AVG['peilgebied'].iterrows():\n", - " peilgebieden_cat.append(0)\n", + " # if row.code == \"Oosterpark\" or row.code == \"Vechtboezem\":\n", + " if \"Oosterpark\" in row.code or \"Vechtboezem\" in row.code or \"Stadsboezem Amsterdam\" in row.code:\n", + " print(\"true\")\n", + " \n", + " peilgebieden_cat.append(1)\n", + " else:\n", + " peilgebieden_cat.append(0)\n", " \n", "# Add new column and drop old HWS_BZM column\n", - "AVG['peilgebied']['peilgebied_cat'] = peilgebieden_cat\n", - "# HD['peilgebied'] = HD['peilgebied'].drop(columns=['streefpeil'])" + "AVG['peilgebied']['peilgebied_cat'] = peilgebieden_cat" ] }, { @@ -229,37 +267,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "3164fa66-d75f-498e-bc88-56532faee31b", "metadata": {}, "outputs": [], "source": [ - "# update peilgebied dict key\n", - "gdf_rhws['globalid'] = 'dummy_globalid_rhws_' + gdf_rhws.index.astype(str)\n", - "gdf_rhws['code'] = 'dummy_code_nhws_' + gdf_rhws.index.astype(str)\n", - "gdf_rhws['nen3610id'] = 'dummy_nen3610id_rhws_' + gdf_rhws.index.astype(str)\n", - "gdf_rhws['peilgebied_cat'] = 1\n", + "# # update peilgebied dict key\n", + "# gdf_rhws['globalid'] = 'dummy_globalid_rhws_' + gdf_rhws.index.astype(str)\n", + "# gdf_rhws['code'] = 'dummy_code_nhws_' + gdf_rhws.index.astype(str)\n", + "# gdf_rhws['nen3610id'] = 'dummy_nen3610id_rhws_' + gdf_rhws.index.astype(str)\n", + "# gdf_rhws['peilgebied_cat'] = 1\n", "\n", - "gdf_rhws = gdf_rhws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "# gdf_rhws = gdf_rhws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", "\n", - "AVG['peilgebied'] = pd.concat([gdf_rhws, AVG['peilgebied']])" + "# AVG['peilgebied'] = pd.concat([gdf_rhws, AVG['peilgebied']])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "89ba7b08-3b2a-4058-9946-e82e19bfe4e3", "metadata": {}, "outputs": [], "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_rhws)\n", - "streefpeil_hws['globalid'] = 'dummy_globalid_rhws_' + gdf_rhws.index.astype(str)\n", - "streefpeil_hws['geometry'] = [None]* len(gdf_rhws)\n", + "# # Create boezem streefpeil layer\n", + "# streefpeil_hws = pd.DataFrame()\n", + "# streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_rhws)\n", + "# streefpeil_hws['globalid'] = 'dummy_globalid_rhws_' + gdf_rhws.index.astype(str)\n", + "# streefpeil_hws['geometry'] = [None]* len(gdf_rhws)\n", "\n", - "AVG['streefpeil'] = pd.concat([streefpeil_hws, AVG['streefpeil']])\n", - "AVG['streefpeil'] = gpd.GeoDataFrame(AVG['streefpeil'])" + "# AVG['streefpeil'] = pd.concat([streefpeil_hws, AVG['streefpeil']])\n", + "# AVG['streefpeil'] = gpd.GeoDataFrame(AVG['streefpeil'])" ] }, { @@ -272,7 +310,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "6f005124-3aa6-4b04-baa1-6e38736cd2c6", "metadata": {}, "outputs": [], @@ -290,7 +328,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "b735a861-3ef3-4db4-b9eb-fd89dc47aca7", "metadata": {}, "outputs": [], @@ -305,6 +343,90 @@ "AVG['streefpeil'] = gpd.GeoDataFrame(AVG['streefpeil'])" ] }, + { + "cell_type": "markdown", + "id": "9177014f-707b-4b32-9a6b-fb5da9e61546", + "metadata": {}, + "source": [ + "### Create buffer polygon between NHWS and peilgebied/RHWS" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "494db515-aebe-4d94-854e-0c2c939a8214", + "metadata": {}, + "outputs": [], + "source": [ + "# buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", + "# buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", + "# buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(AVG['peilgebied'].geometry.tolist()))\n", + "\n", + "# buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "# buffer_polygon = buffer_polygon.set_geometry(0)\n", + "# buffer_polygon = buffer_polygon.dissolve()\n", + "# buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "# buffer_polygon = buffer_polygon.set_geometry('geometry')\n", + "# buffer_polygon = buffer_polygon.set_crs('EPSG:28992')" + ] + }, + { + "cell_type": "markdown", + "id": "003fc773-c705-42f6-925a-2ae67eef83c0", + "metadata": {}, + "source": [ + "### Add buffer to ['peilgebied','streefpeil']" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "03d96d05-9819-4811-891c-d645406c7027", + "metadata": {}, + "outputs": [], + "source": [ + "# # update peilgebied dict key\n", + "# buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "# buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['peilgebied_cat'] = 2\n", + "# buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "# buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "# AVG['peilgebied'] = pd.concat([buffer_polygon, AVG['peilgebied']])\n", + "# AVG['peilgebied'] = gpd.GeoDataFrame(AVG['peilgebied'])" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "c0fa7650-eb05-4b93-9a49-dda6ac49b31b", + "metadata": {}, + "outputs": [], + "source": [ + "# # Create boezem streefpeil layer\n", + "# streefpeil_buffer = pd.DataFrame()\n", + "# streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "# streefpeil_buffer['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# streefpeil_buffer['geometry'] = [None]\n", + "\n", + "\n", + "# AVG['streefpeil'] = pd.concat([streefpeil_buffer, AVG['streefpeil']])\n", + "# AVG['streefpeil'] = gpd.GeoDataFrame(AVG['streefpeil'])" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "8d5771f9-fdce-44b0-bea8-1cf0023e7e66", + "metadata": {}, + "outputs": [], + "source": [ + "if remove_cat_2:\n", + " AVG['peilgebied'] = AVG['peilgebied'].loc[AVG['peilgebied'].peilgebied_cat !=2]" + ] + }, { "cell_type": "markdown", "id": "81991696-fd4d-490d-9129-98f091d64f91", @@ -315,15 +437,60 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "b70f5533-bc4f-4554-a3f1-e0d4085fea90", - "metadata": {}, - "outputs": [], + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "gemaal\n", + "hydroobject\n", + "duikersifonhevel\n", + "peilgebied\n", + "streefpeil\n", + "aggregation_area\n" + ] + } + ], "source": [ "for key in AVG.keys(): \n", " print(key)\n", " AVG[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "db877f10-5557-46ed-8c1f-0c25103663ed", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "AVG['peilgebied']['peilgebied_cat'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f4008e4c-ab26-4e6d-86cb-6e449d167ad8", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb index 227d76a..378e111 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb @@ -21,10 +21,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 46, "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], "source": [ "import geopandas as gpd\n", "import numpy as np\n", @@ -32,7 +41,8 @@ "%load_ext autoreload\n", "%autoreload 2\n", "\n", - "from general_functions import *" + "from general_functions import *\n", + "remove_cat_2 = True" ] }, { @@ -45,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 47, "id": "e15206a7-6639-40bb-9942-f920085f53b4", "metadata": {}, "outputs": [], @@ -53,16 +63,16 @@ "#define relative paths\n", "waterschap = 'Delfland'\n", "\n", - "data_path = f\"../projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", + "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", "\n", "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "grens_path = \"/DATAFOLDER/projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_delfland.gpkg\"\n", + "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_delfland.gpkg\"\n", "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" + "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/\"\n" ] }, { @@ -75,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 48, "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", "metadata": {}, "outputs": [], @@ -88,7 +98,9 @@ " 'duikersifonhevel',\n", " 'peilgebied', \n", " 'streefpeil',\n", + " 'aggregation_area',\n", " ])\n", + "\n", "delfland['peilgebied'] = delfland['peilgebied'].to_crs('EPSG:28992')\n", "\n", "# Load waterschap boundaries\n", @@ -113,7 +125,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", "metadata": {}, "outputs": [], @@ -139,10 +151,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 50, "id": "d28b061b-117d-4e71-b737-f759953951d9", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of overlapping shapes without filter: 26\n", + "Number of overlapping shapes with filter: 0\n" + ] + } + ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(delfland['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", @@ -156,7 +177,7 @@ "overlaps['overlap_area'] = overlaps.area\n", "\n", "# Step 4: Filter based on area Area Percentages\n", - "minimum_area = 20000\n", + "minimum_area = 200\n", "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", "overlap_ids = overlap_ids.globalid.to_list()\n", @@ -173,23 +194,88 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 51, "id": "16fe0d25-7dd4-410a-9bec-5a69aced0614", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n" + ] + } + ], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", + "ids = []\n", "\n", "for index, row in delfland['peilgebied'].iterrows():\n", - " \n", - " if row.globalid in overlap_ids:\n", + "\n", + " if row.code.startswith('BZM') or row.HWS_BZM:\n", + " print('yes')\n", + " peilgebieden_cat.append(1)\n", + " \n", + " # Check if the row's globalid is in overlap_ids\n", + " elif row.globalid in overlap_ids:\n", " peilgebieden_cat.append(2)\n", " \n", - " elif row.HWS_BZM is True:\n", - " peilgebieden_cat.append(1)\n", - " \n", - " elif row.HWS_BZM is False:\n", + " # If none of the above conditions are met, append 0\n", + " else:\n", " peilgebieden_cat.append(0)\n", " \n", "# Add new column and drop old HWS_BZM column\n", @@ -207,7 +293,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 52, "id": "c12f62cb-60b3-4a43-b26c-6ea1f36f4606", "metadata": {}, "outputs": [], @@ -225,7 +311,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 53, "id": "68dad130-b22b-47f2-bb20-dc88f33d4614", "metadata": {}, "outputs": [], @@ -250,15 +336,15 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 54, "id": "d8a24a33-7382-4fea-b45e-950dffb59f2c", "metadata": {}, "outputs": [], "source": [ - "# Create buffer polygon\n", - "buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how='intersection', keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how='difference', keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, delfland['peilgebied'], how='difference', keep_geom_type=True)" + "# # Create buffer polygon\n", + "# buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how='intersection', keep_geom_type=True)\n", + "# buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how='difference', keep_geom_type=True)\n", + "# buffer_polygon = gpd.overlay(buffer_polygon, delfland['peilgebied'], how='difference', keep_geom_type=True)" ] }, { @@ -271,42 +357,84 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 55, "id": "e22637f0-8fdd-4971-b602-7cf4bed8584a", "metadata": {}, "outputs": [], "source": [ - "# update peilgebied dict key\n", - "buffer_polygon['globalid'] = 'dummy_globalid_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['code'] = 'dummy_code_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['nen3610id'] = 'dummy_nen3610id_buffer_1' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['peilgebied_cat'] = 2\n", + "# # update peilgebied dict key\n", + "# buffer_polygon['globalid'] = 'dummy_globalid_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['code'] = 'dummy_code_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['nen3610id'] = 'dummy_nen3610id_buffer_1' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['peilgebied_cat'] = 2\n", "\n", - "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "# buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", "\n", - "delfland['peilgebied'] = pd.concat([buffer_polygon, delfland['peilgebied']])" + "# delfland['peilgebied'] = pd.concat([buffer_polygon, delfland['peilgebied']])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 56, "id": "a40dac33-9a57-4a17-8303-89836afbc8ed", "metadata": {}, "outputs": [], "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer['waterhoogte'] = [np.nan]\n", - "streefpeil_buffer['globalid'] = ['dummy_globalid_buffer_1']\n", - "streefpeil_buffer['geometry'] = [None]\n", + "# # Create boezem streefpeil layer\n", + "# streefpeil_buffer = pd.DataFrame()\n", + "# streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "# streefpeil_buffer['globalid'] = ['dummy_globalid_buffer_1']\n", + "# streefpeil_buffer['geometry'] = [None]\n", "\n", "\n", - "delfland['streefpeil'] = pd.concat([streefpeil_buffer, delfland['streefpeil']])\n", - "delfland['streefpeil'] = gpd.GeoDataFrame(delfland['streefpeil'])\n", + "# delfland['streefpeil'] = pd.concat([streefpeil_buffer, delfland['streefpeil']])\n", + "# delfland['streefpeil'] = gpd.GeoDataFrame(delfland['streefpeil'])\n", "\n", - "# Fix\n", - "delfland['streefpeil']['waterhoogte'] = delfland['streefpeil']['waterhoogte'].replace('N/A', np.nan)\n", - "delfland['streefpeil']['waterhoogte'] = pd.to_numeric(delfland['streefpeil']['waterhoogte'])" + "# # Fix\n", + "# delfland['streefpeil']['waterhoogte'] = delfland['streefpeil']['waterhoogte'].replace('N/A', np.nan)\n", + "# delfland['streefpeil']['waterhoogte'] = pd.to_numeric(delfland['streefpeil']['waterhoogte'])" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "47b761f3-7fcb-420f-be20-9dd5ac3568ad", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2, 0, 1])" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "delfland['peilgebied'].peilgebied_cat.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "bf287dbf-a0e8-4fb6-b054-b7ce79d3de20", + "metadata": {}, + "outputs": [], + "source": [ + "delfland['peilgebied'] = delfland['peilgebied'][['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "2cd05359-00b9-435e-8e7c-2cc1f110c560", + "metadata": {}, + "outputs": [], + "source": [ + "if remove_cat_2 == True:\n", + " delfland['peilgebied'] = delfland['peilgebied'].loc[delfland['peilgebied'].peilgebied_cat !=2]" ] }, { @@ -319,15 +447,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 60, "id": "38b5a11a-bf29-4958-af68-baab619e5e51", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "gemaal\n", + "hydroobject\n", + "duikersifonhevel\n", + "peilgebied\n", + "streefpeil\n", + "aggregation_area\n" + ] + } + ], "source": [ "for key in delfland.keys(): \n", " print(key)\n", " delfland[str(key)].to_file(f'{output_folder}/{waterschap}.gpkg', layer = str(key), driver='GPKG')" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9cf38b1b-92d9-4b2c-b5eb-09d2333bd5ef", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb index b46fd0c..498ebdf 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb @@ -21,18 +21,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", "metadata": {}, "outputs": [], "source": [ + "from itertools import combinations\n", + "\n", "import geopandas as gpd\n", "import numpy as np\n", + "from general_functions import *\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", - "from general_functions import *" + "remove_cat_2 = True\n" ] }, { @@ -45,24 +48,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "e15206a7-6639-40bb-9942-f920085f53b4", "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'Rijnland'\n", + "# HD['peilgebied'].globalid.is_unique#define relative paths\n", + "waterschap = \"Rijnland\"\n", "\n", - "data_path = f\"../projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", + "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", "\n", "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "grens_path = \"/DATAFOLDER/projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_rijnland.gpkg\"\n", + "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_rijnland.gpkg\"\n", "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" + "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"\n" ] }, { @@ -75,32 +78,60 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", "metadata": {}, "outputs": [], "source": [ "# Load HHNK files\n", - "Rijnland = read_gpkg_layers(gpkg_path = data_path, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'hydroobject',\n", - " 'duikersifonhevel',\n", - " 'peilgebied', \n", - " 'streefpeil',\n", - " ])\n", - "Rijnland['peilgebied'] = Rijnland['peilgebied'].to_crs('EPSG:28992')\n", + "Rijnland = read_gpkg_layers(\n", + " gpkg_path=data_path,\n", + " variables=[\n", + " \"stuw\",\n", + " \"gemaal\",\n", + " \"hydroobject\",\n", + " \"duikersifonhevel\",\n", + " \"peilgebied\",\n", + " \"streefpeil\",\n", + " \"aggregation_area\",\n", + " ],\n", + ")\n", + "Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", "\n", "# Load waterschap boundaries\n", "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", - "gdf_grens = gdf_grens.set_index('waterschap')\n", + "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", + "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", "\n", "# Load hws\n", "gdf_hws = gpd.read_file(hws_path)\n", "\n", "# Load buffer\n", - "gdf_buffer = gpd.read_file(buffer_path)" + "gdf_buffer = gpd.read_file(buffer_path)\n", + "\n", + "# temp\n", + "Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"].drop(index=2, axis=1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "613a849a-f873-402f-a33f-acb2b60bea4e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Rijnland[\"peilgebied\"].globalid.is_unique\n" ] }, { @@ -113,16 +144,16 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "98c82db0-4036-4ffa-ae1b-4400f5c28a58", "metadata": {}, "outputs": [], "source": [ "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[['HH van Rijnland']]\n", + "gdf_grens = gdf_grens.loc[[\"HH van Rijnland\"]]\n", "\n", "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")\n" ] }, { @@ -139,28 +170,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "08cf410b-78c1-47ab-b32c-e0ed60ebd7ec", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of overlapping shapes without filter: 9\n", + "Number of overlapping shapes with filter: 0\n" + ] + } + ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(Rijnland['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "overlaps = gpd.overlay(Rijnland[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", "\n", "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(Rijnland['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", - " \n", + "non_overlapping_peilgebied = gpd.overlay(Rijnland[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", + "\n", "# Step 3: Calculate Area Percentages\n", "# Calculate the area of overlaps\n", - "overlaps['overlap_area'] = overlaps.area\n", + "overlaps[\"overlap_area\"] = overlaps.area\n", "\n", "# Step 4: Filter based on area Area Percentages\n", - "minimum_area = 20000\n", - "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", - "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "minimum_area = 200\n", + "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", + "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")\n" ] }, { @@ -173,83 +213,285 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "73f6c0f2-8f3c-4b63-a36a-508bd0c0f1ce", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n" + ] + } + ], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", "\n", - "for index, row in Rijnland['peilgebied'].iterrows():\n", - " \n", - " if row.code == 'dummy_code_peilgebied_18207':\n", - " peilgebieden_cat.append(1)\n", - " print('yes')\n", - " elif row.code == 'dummy_code_peilgebied_18322':\n", + "for index, row in Rijnland[\"peilgebied\"].iterrows():\n", + " if \"RIJNLANDSBOEZEM\" in row.code:\n", + " print(\"true\")\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'dummy_code_peilgebied_18155':\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == 'dummy_code_peilgebied_18161':\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == 'dummy_code_peilgebied_19451':\n", - " peilgebieden_cat.append(2)\n", " else:\n", " peilgebieden_cat.append(0)\n", - " \n", - "# Add new column and drop old HWS_BZM column\n", - "Rijnland['peilgebied']['peilgebied_cat'] = peilgebieden_cat" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4d46f98a-f363-4b88-8c48-1e3ec421f9f7", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "ca30ba30-617e-4263-9c3c-ebd93b42ac08", - "metadata": {}, - "source": [ - "## Add rhws to ['peilgebied','streefpeil']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3315f190-afef-4ed5-ae4b-3f7aa3ec6df2", - "metadata": {}, - "outputs": [], - "source": [ - "# update peilgebied dict key\n", - "gdf_rhws['globalid'] = 'dummy_globalid_rhws_' + gdf_rhws.index.astype(str)\n", - "gdf_rhws['code'] = 'dummy_code_nhws_' + gdf_rhws.index.astype(str)\n", - "gdf_rhws['nen3610id'] = 'dummy_nen3610id_rhws_' + gdf_rhws.index.astype(str)\n", - "gdf_rhws['peilgebied_cat'] = 1\n", "\n", - "gdf_rhws = gdf_rhws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", - "\n", - "Rijnland['peilgebied'] = pd.concat([gdf_rhws, AVG['peilgebied']])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dd6ea3c8-c159-43b9-bd28-b8cd54d790b1", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_rhws)\n", - "streefpeil_hws['globalid'] = 'dummy_globalid_rhws_' + gdf_rhws.index.astype(str)\n", - "streefpeil_hws['geometry'] = [None]* len(gdf_rhws)\n", - "\n", - "Rijnland['streefpeil'] = pd.concat([streefpeil_hws, Rijnland['streefpeil']])\n", - "Rijnland['streefpeil'] = gpd.GeoDataFrame(Rijnland['streefpeil'])" + "# Add new column and drop old HWS_BZM column\n", + "Rijnland[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat\n" ] }, { @@ -262,404 +504,365 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "8661eed7-0552-4f93-acad-62f1af2482d9", "metadata": {}, "outputs": [], "source": [ "# update peilgebied dict key\n", - "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['peilgebied_cat'] = 2\n", + "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"peilgebied_cat\"] = 2\n", "\n", - "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", "\n", - "Rijnland['peilgebied'] = pd.concat([gdf_hws, Rijnland['peilgebied']])" + "Rijnland[\"peilgebied\"] = pd.concat([gdf_hws, Rijnland[\"peilgebied\"]])\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "7dd6604c-fe9e-4414-a477-d68978cf4c22", "metadata": {}, "outputs": [], "source": [ "# Create boezem streefpeil layer\n", "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", "\n", - "Rijnland['streefpeil'] = pd.concat([streefpeil_hws, Rijnland['streefpeil']])\n", - "Rijnland['streefpeil'] = gpd.GeoDataFrame(Rijnland['streefpeil'])" + "Rijnland[\"streefpeil\"] = pd.concat([streefpeil_hws, Rijnland[\"streefpeil\"]])\n", + "Rijnland[\"streefpeil\"] = gpd.GeoDataFrame(Rijnland[\"streefpeil\"])\n" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "bef23083-aaaa-409c-8527-46b5db303076", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0ce0e159-be7d-477e-8b4a-211698dd0693", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "be3fcd61-67eb-418b-8723-28738d034f9d", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "931f83ff-36e4-47e4-a7df-281e375e6c51", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3dafe764-dc08-4444-9902-4c3b118ee4c7", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "16c0af56-69e1-4e4a-b74a-9fe80faacecc", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4b37a5f6-f2ba-40c7-9111-082a2afd2ed2", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f7ec3300-8d06-403c-bb5e-41a6de329b2d", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e0f978d1-4d00-4595-a62d-5503f320b6d7", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2f09ef95-f0ff-4216-ac2e-a5b6a05b1ac0", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5fdfe9a6-21f8-41e7-8e5e-f1a9a91147d3", - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", - "id": "5556d211-e92e-4ba3-85c2-4ff9bd33fbeb", + "id": "8bba7dd4-ce87-4ba9-9004-f986d597f7be", "metadata": {}, "source": [ - "### Select waterschap boundaries" + "### Create buffer polygon between NHWS and peilgebied/RHWS" ] }, { "cell_type": "code", - "execution_count": null, - "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", + "execution_count": 10, + "id": "8c7a3dd5-3e21-4116-9dbb-eda621bbb7ec", "metadata": {}, "outputs": [], "source": [ - "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[['HH van Rijnland']]" - ] - }, - { - "cell_type": "markdown", - "id": "3634cbd6-d698-460b-95c3-0737d2d12388", - "metadata": {}, - "source": [ - "### Create inverse layer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e183a1dd-c4dc-4518-8b1b-6052b55b547d", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# Remove mixed geomtypes (lines)\n", - "data = []\n", + "# buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", + "\n", + "# polygons = []\n", + "# for geom in gdf_hws.geometry:\n", + "# if isinstance(geom, MultiPolygon):\n", + "# for poly in geom:\n", + "# polygons.append(poly)\n", + "# elif isinstance(geom, Polygon):\n", + "# polygons.append(geom)\n", "\n", - "for index, row in Rijnland['peilgebied'].iterrows():\n", - "# print(row.geometry.geom_type)\n", - " if row.geometry.geom_type != 'LineString':\n", - " data.append(row)\n", - " \n", - "Rijnland['peilgebied'] = gpd.GeoDataFrame(pd.concat(data, axis=1, ignore_index=True)).transpose()\n", - "Rijnland['peilgebied'] = Rijnland['peilgebied'].set_geometry(\"geometry\")\n", - "Rijnland['peilgebied'] = Rijnland['peilgebied'].set_crs('EPSG:28992')" + "# buffer_polygon = buffer_polygon.difference(MultiPolygon(polygons))\n", + "# buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(Rijnland['peilgebied'].geometry.tolist()))\n", + "# buffer_polygon_gdf = gpd.GeoDataFrame([{'geometry': geom} for geom in buffer_polygon], geometry='geometry', crs='EPSG:28992')\n", + "\n", + "# buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "# buffer_polygon = buffer_polygon.set_geometry(0)\n", + "# buffer_polygon = buffer_polygon.dissolve()\n", + "# buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "# buffer_polygon = buffer_polygon.set_geometry('geometry')\n", + "# buffer_polygon = buffer_polygon.set_crs('EPSG:28992')\n" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "d8a24a33-7382-4fea-b45e-950dffb59f2c", + "cell_type": "markdown", + "id": "de6ebf83-cc20-4e63-89b5-a74c03a57b54", "metadata": {}, - "outputs": [], "source": [ - "# Select inverse of peilgebied\n", - "gdf_boezem_out = gpd.overlay(gdf_grens, Rijnland['peilgebied'].dissolve(), how='symmetric_difference')" + "### Add buffer to ['peilgebied','streefpeil']" ] }, { "cell_type": "code", - "execution_count": null, - "id": "9a19deee-0ce2-4928-abd7-462f5e218796", + "execution_count": 11, + "id": "c936a691-7ded-4e63-a344-83f27387cf0d", "metadata": {}, "outputs": [], "source": [ - "# Store unfiltered layer\n", - "gdf_boezem_out.to_file(f'{output_folder}/boezem_unfiltered_{waterschap}.gpkg')" + "# # update peilgebied dict key\n", + "# buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "# buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['peilgebied_cat'] = 2\n", + "# buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "# buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "\n", + "# Rijnland['peilgebied'] = pd.concat([buffer_polygon, Rijnland['peilgebied']])\n", + "# Rijnland['peilgebied'] = gpd.GeoDataFrame(Rijnland['peilgebied'])\n" ] }, { "cell_type": "code", - "execution_count": null, - "id": "e22637f0-8fdd-4971-b602-7cf4bed8584a", + "execution_count": 12, + "id": "4d53d1fe-774d-402d-bf40-af0dc62aef4a", "metadata": {}, "outputs": [], "source": [ - "# Create separate polygons\n", - "gdf_boezem_out = gdf_boezem_out.explode()" + "# # Create boezem streefpeil layer\n", + "# streefpeil_buffer = pd.DataFrame()\n", + "# streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "# streefpeil_buffer['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# streefpeil_buffer['geometry'] = [None]\n", + "\n", + "\n", + "# Rijnland['streefpeil'] = pd.concat([streefpeil_buffer, Rijnland['streefpeil']])\n", + "# Rijnland['streefpeil'] = gpd.GeoDataFrame(Rijnland['streefpeil'])\n" ] }, { "cell_type": "markdown", - "id": "c37b2c7b-8123-4dfb-a4c5-5d2ba817ba68", + "id": "7f8b16ac-76dc-4958-8479-bd99ce3ebd66", "metadata": {}, "source": [ - "### Calculate area of polygons and filter" + "## Rijnland data contains many duplicate peilgebieden\n", + "### Calculate polygons that overlap with more than 90 % of their area" ] }, { "cell_type": "code", "execution_count": null, - "id": "a85b50f7-bc55-4442-8564-102b227b855a", + "id": "77d4a830-e70e-4242-bd29-d04483ec3c02", "metadata": {}, "outputs": [], "source": [ - "# Calculate area of polygons\n", - "areas = []\n", - "\n", - "for index, row in gdf_boezem_out.iterrows():\n", - " areas.append(row.geometry.area)\n", - " \n", - "gdf_boezem_out['area'] = areas " + "\n" ] }, { "cell_type": "code", - "execution_count": null, - "id": "e9a0fb83-cd34-402f-85c7-5cc88970ddbe", + "execution_count": 13, + "id": "dae75f8d-f919-4690-b0cc-a04112c32b6a", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Processing 8807 out of 8807...\r" + ] + } + ], "source": [ - "# filter based on area of polygons\n", - "gdf_boezem_out.sort_values(by='area').iloc[[-1]].to_file(f'{output_folder}/boezem_filter_lvl_1_{waterschap}.gpkg')\n", - "gdf_boezem_out.sort_values(by='area').iloc[[-2]].to_file(f'{output_folder}/boezem_filter_lvl_2_{waterschap}.gpkg')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "59084cce-306c-42d7-942a-57c680c99172", - "metadata": {}, - "outputs": [], - "source": [ - "# Store peilgebieden that do not connect properly\n", - "gdf_boezem_out.sort_values(by='area').iloc[:-1].to_file(f'{output_folder}/niet_goed_aansluitend_{waterschap}.gpkg')" + "gdf = Rijnland[\"peilgebied\"][3:]\n", + "\n", + "# Initialize a list to store index pairs with more than 90% overlap\n", + "overlapping_pairs = []\n", + "\n", + "# Iterate through each unique pair of geometries\n", + "for idx1, idx2 in combinations(gdf.index, 2):\n", + " print(f\"Processing {idx1} out of {len(gdf)}...\", end=\"\\r\")\n", + " geom1 = gdf.at[idx1, \"geometry\"]\n", + " geom2 = gdf.at[idx2, \"geometry\"]\n", + "\n", + " # Calculate intersection\n", + " intersection = geom1.intersection(geom2)\n", + " intersection_area = intersection.area\n", + "\n", + " # Calculate original areas\n", + " area1 = geom1.area\n", + " area2 = geom2.area\n", + "\n", + " # Calculate intersection percentage for each geometry\n", + " intersection_percentage1 = (intersection_area / area1) * 100\n", + " intersection_percentage2 = (intersection_area / area2) * 100\n", + "\n", + " # Check if both geometries overlap more than 90%\n", + " if intersection_percentage1 > 90 and intersection_percentage2 > 90:\n", + " overlapping_pairs.append((idx1, idx2))\n", + "\n", + "idx1s = []\n", + "idx2s = []\n", + "\n", + "glob_1s = []\n", + "glob_2s = []\n", + "\n", + "\n", + "for idx1, idx2 in overlapping_pairs:\n", + " idx1s.append(idx1)\n", + " idx2s.append(idx2)\n", + "\n", + " glob_1s.append(gdf.iloc[idx1].globalid)\n", + " glob_2s.append(gdf.iloc[idx2].globalid)\n", + "\n", + "\n", + "df = pd.DataFrame()\n", + "df[\"idx1\"] = idx1s\n", + "df[\"idx2\"] = idx2s\n", + "df[\"globalid_1\"] = glob_1s\n", + "df[\"globalid_2\"] = glob_2s\n", + "\n", + "df.to_csv(\"../overlapping_Rijnland.csv\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "9df31513-a055-4185-aadb-6bf0d59914ae", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " idx1 idx2 globalid_1 \\\n", + "0 4 256 dummy_globalid_peilgebied_6_6 \n", + "1 5 257 dummy_globalid_peilgebied_6_7 \n", + "2 6 258 dummy_globalid_peilgebied_6_8 \n", + "3 7 259 dummy_globalid_peilgebied_6_9 \n", + "4 8 260 dummy_globalid_peilgebied_6_10 \n", + ".. ... ... ... \n", + "215 6861 6895 dummy_globalid_peilgebied_446_6863 \n", + "216 6862 6896 dummy_globalid_peilgebied_446_6864 \n", + "217 6863 6897 dummy_globalid_peilgebied_446_6865 \n", + "218 6864 6898 dummy_globalid_peilgebied_446_6866 \n", + "219 6865 6899 dummy_globalid_peilgebied_446_6867 \n", + "\n", + " globalid_2 \n", + "0 dummy_globalid_peilgebied_0_258 \n", + "1 dummy_globalid_peilgebied_0_259 \n", + "2 dummy_globalid_peilgebied_0_260 \n", + "3 dummy_globalid_peilgebied_0_261 \n", + "4 dummy_globalid_peilgebied_0_262 \n", + ".. ... \n", + "215 dummy_globalid_peilgebied_447_6897 \n", + "216 dummy_globalid_peilgebied_447_6898 \n", + "217 dummy_globalid_peilgebied_447_6899 \n", + "218 dummy_globalid_peilgebied_448_6900 \n", + "219 dummy_globalid_peilgebied_448_6901 \n", + "\n", + "[220 rows x 4 columns]\n" + ] + } + ], + "source": [ + "print(df)\n" ] }, { "cell_type": "markdown", - "id": "aaea472b-8336-4b94-899a-5fbcf9117b92", + "id": "e4928043-eded-4a45-a6ea-986e516d3a28", "metadata": {}, "source": [ - "### Add boezem when peilgebied is part of dm_netwerk" + "### Create list of duplicates for removal" ] }, { "cell_type": "code", - "execution_count": null, - "id": "49bd0a1d-9b4b-4831-befd-050a288022ca", + "execution_count": 15, + "id": "3ba5af40-ac04-4997-a890-34987e8cfabe", "metadata": {}, "outputs": [], "source": [ - "# Load Boezem network file (DM_netwerk)\n", - "gdf_dm_netwerk = gpd.read_file(dm_netwerk_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "00f7a36e-416c-46f6-8656-b5f2aea6e3ef", - "metadata": {}, - "outputs": [], - "source": [ - "# Select the peilgebieden that intersect with DM-netwerk\n", - "gdf = gpd.overlay(Rijnland['peilgebied'], gdf_dm_netwerk, how='intersection')" + "numbers_to_remove = []\n", + "\n", + "# Go loop unique index values\n", + "for number in df[\"idx1\"].unique():\n", + " if number in numbers_to_remove:\n", + " continue\n", + "\n", + " # Find all combinations\n", + " associated_idx2 = df[df[\"idx1\"] == number][\"idx2\"].tolist()\n", + " # Append combinations\n", + " numbers_to_remove.extend(associated_idx2)\n", + "\n", + "# Remove duplicates using set operation\n", + "numbers_to_remove = list(set(numbers_to_remove))\n" ] }, { "cell_type": "markdown", - "id": "78286e27-fa00-4cb6-83fe-d8f3b8eee453", + "id": "54028e80-ab1a-40cf-a0f6-808f4f1af1a5", "metadata": {}, "source": [ - "### Add HWS_BZM flag to boezem polygons" + "### Remove duplicates" ] }, { "cell_type": "code", - "execution_count": null, - "id": "8f90fe14-6bc8-46a3-aecf-72f5edee5c3e", + "execution_count": 16, + "id": "2f09ef95-f0ff-4216-ac2e-a5b6a05b1ac0", "metadata": {}, "outputs": [], "source": [ - "# Add occurence to geodataframe\n", - "boezems = []\n", - "\n", - "for index, row in Rijnland['peilgebied'].iterrows():\n", - " if row.nen3610id in gdf.nen3610id.values:\n", - " boezems.append(True)\n", - " else:\n", - " boezems.append(False) \n", - " \n", - "Rijnland['peilgebied']['HWS_BZM'] = boezems" + "Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"][~Rijnland[\"peilgebied\"].index.isin(numbers_to_remove)]\n", + "Rijnland[\"streefpeil\"] = Rijnland[\"streefpeil\"][~Rijnland[\"streefpeil\"].index.isin(numbers_to_remove)]\n" ] }, { "cell_type": "code", - "execution_count": null, - "id": "5ab078c0-cca9-43f1-b9e3-2d86aec2a65c", + "execution_count": 17, + "id": "1c7da63d-37de-4bc7-a234-d9bec8cc0c55", "metadata": {}, "outputs": [], "source": [ - "for key in Rijnland.keys(): \n", - " print(key)\n", - " Rijnland[str(key)].to_file(f'{output_folder}/{waterschap}_bzm.gpkg', layer = str(key), driver='GPKG')" + "if remove_cat_2:\n", + " Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"].loc[Rijnland[\"peilgebied\"].peilgebied_cat != 2]\n" ] }, { "cell_type": "markdown", - "id": "c9ece8fc-5ed3-4c6e-810e-ce5ce35dc6b6", + "id": "fec7d831-127b-438f-8fdb-9e2cda4707ff", "metadata": {}, "source": [ - "### Merge boezem and peilgebied layers" + "### Store data" ] }, { "cell_type": "code", - "execution_count": null, - "id": "2184f2b9-7383-41d8-a994-1986465076c8", + "execution_count": 18, + "id": "59127d3b-ce3b-42ee-915d-62f0f720ec08", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "gemaal\n", + "hydroobject\n", + "duikersifonhevel\n", + "peilgebied\n", + "streefpeil\n", + "aggregation_area\n" + ] + } + ], "source": [ - "# Select globalids of boezem polygons\n", - "bzm_id = Rijnland['peilgebied'].loc[Rijnland['peilgebied']['HWS_BZM'] == True].globalid\n", - "\n", - "# Match globalids with streefpeil layer globalids\n", - "bzm_waterhoogte = Rijnland['streefpeil'].loc[Rijnland['streefpeil']['globalid'].isin(bzm_id)]\n", - "\n", - "print(len(bzm_id))\n", - "print(len(bzm_waterhoogte))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "024410a5-e3a9-4992-8c58-f63d78559a05", - "metadata": {}, - "outputs": [], - "source": [ - "# Create boezem layer\n", - "boezem = gdf_boezem_out.sort_values(by='area').iloc[[-1]]\n", - "\n", - "boezem['code'] = 'dummy_code_999999'\n", - "boezem['globalid'] = 'dummy_globalid_999999'\n", - "boezem['nen3610id'] = 'dummy_nen3610id_peilgebied_999999'\n", - "boezem['HWS_BZM'] = True\n", - "boezem = boezem[['code', 'globalid', 'nen3610id', 'HWS_BZM', 'geometry']]\n", - "\n", - "# Create boezem streefpeil layer\n", - "streefpeil_bzm = pd.DataFrame()\n", - "streefpeil_bzm['waterhoogte'] = [None]\n", - "streefpeil_bzm['globalid'] = ['dummy_globalid_999999']\n", - "streefpeil_bzm['geometry'] = [None]" + "for key in Rijnland.keys():\n", + " print(key)\n", + " Rijnland[str(key)].to_file(f\"{output_folder}/{waterschap}.gpkg\", layer=str(key), driver=\"GPKG\")\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "fc055918-71f0-48b2-923a-addb9541fff9", + "id": "c4473cbe-38bd-4c89-9ac6-839470451f26", "metadata": {}, "outputs": [], "source": [ - "# Merge boezem layer with peilgebieden\n", - "Rijnland['peilgebied'] = gpd.GeoDataFrame(pd.concat([boezem, Rijnland['peilgebied']], ignore_index=True) )\n", - "Rijnland['streefpeil'] = gpd.GeoDataFrame(pd.concat([streefpeil_bzm, Rijnland['streefpeil']], ignore_index=True) )" + "\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "a83e59e4-4333-485d-906c-ba95793c19bc", + "id": "f18b37ff-f12a-47d4-b406-233ef5008454", "metadata": {}, "outputs": [], "source": [ - "for key in Rijnland.keys(): \n", - " print(key)\n", - " Rijnland[str(key)].to_file(f'{output_folder}/{waterschap}.gpkg', layer = str(key), driver='GPKG')" + "\n" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ba2624c6-10a1-4bec-a9ca-d287306f223d", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb index 6bb03c2..2760aa0 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb @@ -21,18 +21,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", "metadata": {}, "outputs": [], "source": [ "import geopandas as gpd\n", "import numpy as np\n", + "from general_functions import *\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", - "from general_functions import *" + "remove_cat_2 = True" ] }, { @@ -45,25 +46,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "e15206a7-6639-40bb-9942-f920085f53b4", "metadata": {}, "outputs": [], "source": [ "#define relative paths\n", "waterschap = 'Wetterskip'\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", + "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", "\n", "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "grens_path = \"/DATAFOLDER/projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_wetterskip.gpkg\"\n", + "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_wetterskip.gpkg\"\n", "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"\n", + "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/\"\n", "# Dm netwerk\n", - "boezem_path = \"../projects/4750_30/Data_overig/DM_netwerk/waterschapsgrenzen_boezem_netwerk.shp\"" + "boezem_path = \"/DATAFOLDER/projects/4750_30/Data_overig/DM_netwerk/waterschapsgrenzen_boezem_netwerk.shp\"" ] }, { @@ -76,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", "metadata": {}, "outputs": [], @@ -89,6 +90,7 @@ " 'duikersifonhevel',\n", " 'peilgebied', \n", " 'streefpeil',\n", + " 'aggregation_area',\n", " ])\n", "Wetterskip['peilgebied'] = Wetterskip['peilgebied'].to_crs('EPSG:28992')\n", "\n", @@ -116,16 +118,16 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "b5eae4c4-2d5a-4678-a5af-56e3626d29ec", "metadata": {}, "outputs": [], "source": [ - "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[['Wetterskip Fryslân']]\n", + "# # Select boundaries HH Amstel, Gooi en Vecht\n", + "# gdf_grens = gdf_grens.loc[['Wetterskip Fryslân']]\n", "\n", - "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + "# # Use waterschap boudnaries to clip HWS layer\n", + "# gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" ] }, { @@ -142,28 +144,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "56faab44-3fda-43c4-8426-197fbb6c63a8", "metadata": {}, "outputs": [], "source": [ - "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(Wetterskip['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "# # Step 1: Identify the Overlapping Areas and clip\n", + "# overlaps = gpd.overlay(Wetterskip['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", "\n", - "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(Wetterskip['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", + "# # # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", + "# non_overlapping_peilgebied = gpd.overlay(Wetterskip['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", + "# overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", " \n", - "# Step 3: Calculate Area Percentages\n", - "# Calculate the area of overlaps\n", - "overlaps['overlap_area'] = overlaps.area\n", + "# # Step 3: Calculate Area Percentages\n", + "# # Calculate the area of overlaps\n", + "# overlaps['overlap_area'] = overlaps.area\n", "\n", - "# Step 4: Filter based on area Area Percentages\n", - "minimum_area = 500\n", - "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", - "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", - "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + "# # Step 4: Filter based on area Area Percentages\n", + "# minimum_area = 500\n", + "# print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", + "# overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "# overlap_ids = overlap_ids.globalid.to_list()\n", + "# print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" ] }, { @@ -176,7 +178,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "6ad958c4-01ce-4fcb-9170-fa8bf0f7c7f0", "metadata": {}, "outputs": [], @@ -186,7 +188,7 @@ "\n", "for index, row in Wetterskip['streefpeil'].iterrows():\n", " \n", - " if row.waterhoogte == -0.52:\n", + " if round(row.waterhoogte, 2) == -0.52:\n", " peilgebieden_cat.append(1)\n", " else:\n", " peilgebieden_cat.append(0)\n", @@ -194,6 +196,14 @@ "Wetterskip['peilgebied']['peilgebied_cat'] = peilgebieden_cat" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "c9be301b-1577-4516-a5a2-70e02769e343", + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "id": "2187ad3d-4399-42b1-9d50-5183ff374326", @@ -204,7 +214,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "28509a06-79c9-4e68-9be7-dcf654494c90", "metadata": {}, "outputs": [], @@ -222,7 +232,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "37bec5bb-70dd-4789-9f92-bcfcd571d790", "metadata": {}, "outputs": [], @@ -237,16 +247,6 @@ "Wetterskip['streefpeil'] = gpd.GeoDataFrame(Wetterskip['streefpeil'])" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "535a4c9b-0393-499f-8db2-fbde84459a85", - "metadata": {}, - "outputs": [], - "source": [ - "Wetterskip.keys()" - ] - }, { "cell_type": "markdown", "id": "c2499b90-db91-49b7-9dc5-f43d2de46e3f", @@ -257,21 +257,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "f3ee584a-4ac9-47fd-8006-4be11e9d02a4", "metadata": {}, "outputs": [], "source": [ - "buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", - "buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", - "buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(Wetterskip['peilgebied'].geometry.tolist()))\n", + "# buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", + "# buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", + "# buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(Wetterskip['peilgebied'].geometry.tolist()))\n", "\n", - "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", - "buffer_polygon = buffer_polygon.set_geometry(0)\n", - "buffer_polygon = buffer_polygon.dissolve()\n", - "buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", - "buffer_polygon = buffer_polygon.set_geometry('geometry')\n", - "buffer_polygon = buffer_polygon.set_crs('EPSG:28992')" + "# buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "# buffer_polygon = buffer_polygon.set_geometry(0)\n", + "# buffer_polygon = buffer_polygon.dissolve()\n", + "# buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "# buffer_polygon = buffer_polygon.set_geometry('geometry')\n", + "# buffer_polygon = buffer_polygon.set_crs('EPSG:28992')" ] }, { @@ -284,40 +284,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "42af7580-3cdf-4d7c-9204-50bec3dc088d", "metadata": {}, "outputs": [], "source": [ - "# update peilgebied dict key\n", - "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", - "buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + '1'\n", - "buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['peilgebied_cat'] = 2\n", - "buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", - "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "# # update peilgebied dict key\n", + "# buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "# buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['peilgebied_cat'] = 2\n", + "# buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "# buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", "\n", - "Wetterskip['peilgebied'] = pd.concat([buffer_polygon, Wetterskip['peilgebied']])\n", - "Wetterskip['peilgebied'] = gpd.GeoDataFrame(Wetterskip['peilgebied'])" + "# Wetterskip['peilgebied'] = pd.concat([buffer_polygon, Wetterskip['peilgebied']])\n", + "# Wetterskip['peilgebied'] = gpd.GeoDataFrame(Wetterskip['peilgebied'])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "bc785a36-81a6-4c79-affc-a0938d78beb5", "metadata": {}, "outputs": [], "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer['waterhoogte'] = [np.nan]\n", - "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", - "streefpeil_buffer['geometry'] = [None]\n", + "# # Create boezem streefpeil layer\n", + "# streefpeil_buffer = pd.DataFrame()\n", + "# streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "# streefpeil_buffer['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# streefpeil_buffer['geometry'] = [None]\n", "\n", "\n", - "Wetterskip['streefpeil'] = pd.concat([streefpeil_buffer, Wetterskip['streefpeil']])\n", - "Wetterskip['streefpeil'] = gpd.GeoDataFrame(Wetterskip['streefpeil'])" + "# Wetterskip['streefpeil'] = pd.concat([streefpeil_buffer, Wetterskip['streefpeil']])\n", + "# Wetterskip['streefpeil'] = gpd.GeoDataFrame(Wetterskip['streefpeil'])" ] }, { @@ -338,69 +338,76 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "c234dbaf-5345-442e-9fe4-d458a8ed225c", "metadata": { - "jupyter": { - "outputs_hidden": true - }, "tags": [] }, "outputs": [], "source": [ - "from itertools import combinations\n", - "gdf = Wetterskip['peilgebied']\n", - "gdf = test\n", - "gdf = gdf[6:]\n", - "# Initialize a list to store index pairs with more than 90% overlap\n", - "overlapping_pairs = []\n", + "# from itertools import combinations\n", + "# gdf = Wetterskip['peilgebied']\n", + "# # gdf = test\n", + "# gdf = gdf[6:]\n", "\n", - "# Iterate through each unique pair of geometries\n", - "for idx1, idx2 in combinations(gdf.index, 2):\n", - " print(f'Processing {idx1} out of {len(gdf)}...', end='\\r')\n", - " geom1 = gdf.at[idx1, 'geometry']\n", - " geom2 = gdf.at[idx2, 'geometry']\n", + "# # Initialize a list to store index pairs with more than 90% overlap\n", + "# overlapping_pairs = []\n", "\n", - " # Calculate intersection\n", - " intersection = geom1.intersection(geom2)\n", - " intersection_area = intersection.area\n", + "# # Iterate through each unique pair of geometries\n", + "# for idx1, idx2 in combinations(gdf.index, 2):\n", + "# print(f'Processing {idx1} out of {len(gdf)}...', end='\\r')\n", + "# geom1 = gdf.at[idx1, 'geometry']\n", + "# geom2 = gdf.at[idx2, 'geometry']\n", "\n", - " # Calculate original areas\n", - " area1 = geom1.area\n", - " area2 = geom2.area\n", + "# # Calculate intersection\n", + "# intersection = geom1.intersection(geom2)\n", + "# intersection_area = intersection.area\n", "\n", - " # Calculate intersection percentage for each geometry\n", - " intersection_percentage1 = (intersection_area / area1) * 100\n", - " intersection_percentage2 = (intersection_area / area2) * 100\n", + "# # Calculate original areas\n", + "# area1 = geom1.area\n", + "# area2 = geom2.area\n", "\n", - " # Check if both geometries overlap more than 90%\n", - " if intersection_percentage1 > 90 and intersection_percentage2 > 90:\n", - " print((idx1, idx2))\n", - " overlapping_pairs.append((idx1, idx2))\n", + "# # Calculate intersection percentage for each geometry\n", + "# intersection_percentage1 = (intersection_area / area1) * 100\n", + "# intersection_percentage2 = (intersection_area / area2) * 100\n", "\n", - "idx1s = []\n", - "idx2s = []\n", + "# # Check if both geometries overlap more than 90%\n", + "# if intersection_percentage1 > 90 and intersection_percentage2 > 90:\n", + "# # print((idx1, idx2))\n", + "# overlapping_pairs.append((idx1, idx2))\n", "\n", - "glob_1s = []\n", - "glob_2s = []\n", + "# idx1s = []\n", + "# idx2s = []\n", "\n", + "# glob_1s = []\n", + "# glob_2s = []\n", "\n", - "for idx1, idx2 in overlapping_pairs:\n", - " \n", - " idx1s.append(idx1)\n", - " idx2s.append(idx2)\n", + "\n", + "# for idx1, idx2 in overlapping_pairs:\n", " \n", - " glob_1s.append(gdf.iloc[idx1].globalid)\n", - " glob_2s.append(gdf.iloc[idx2].globalid)\n", + "# idx1s.append(idx1)\n", + "# idx2s.append(idx2)\n", " \n", + "# glob_1s.append(gdf.iloc[idx1].globalid)\n", + "# glob_2s.append(gdf.iloc[idx2].globalid)\n", " \n", - "df = pd.DataFrame()\n", - "df['idx1'] = idx1s\n", - "df['idx2'] = idx2s\n", - "df['globalid_1'] = glob_1s\n", - "df['globalid_2'] = glob_2s\n", + "# df = pd.DataFrame()\n", + "# df['idx1'] = idx1s\n", + "# df['idx2'] = idx2s\n", + "# df['globalid_1'] = glob_1s\n", + "# df['globalid_2'] = glob_2s\n", "\n", - "df.to_csv('overlapping_wetterskip.csv')" + "# df.to_csv('./overlapping_wetterskip.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "22074ae1-cc01-4212-b877-a190122a152d", + "metadata": {}, + "outputs": [], + "source": [ + "# df = pd.read_csv('./overlapping_wetterskip.csv')" ] }, { @@ -413,25 +420,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "1d8b87a6-2e74-4b0e-9a2e-40734e38ec77", "metadata": {}, "outputs": [], "source": [ - "numbers_to_remove = []\n", + "# numbers_to_remove = []\n", "\n", - "# Go loop unique index values\n", - "for number in df['idx1'].unique():\n", - " if number in numbers_to_remove:\n", - " continue\n", + "# # Go loop unique index values\n", + "# for number in df['idx1'].unique():\n", + "# if number in numbers_to_remove:\n", + "# continue\n", " \n", - " # Find all combinations\n", - " associated_idx2 = df[df['idx1'] == number]['idx2'].tolist()\n", - " # Append combinations\n", - " numbers_to_remove.extend(associated_idx2)\n", + "# # Find all combinations\n", + "# associated_idx2 = df[df['idx1'] == number]['idx2'].tolist()\n", + "# # Append combinations\n", + "# numbers_to_remove.extend(associated_idx2)\n", "\n", - "# Remove duplicates using set operation\n", - "numbers_to_remove = list(set(numbers_to_remove))" + "# # Remove duplicates using set operation\n", + "# numbers_to_remove = list(set(numbers_to_remove))" ] }, { @@ -444,13 +451,45 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "41cc52dc-a5ab-4879-ba6d-95edc7130479", "metadata": {}, "outputs": [], "source": [ - "Wetterskip['peilgebied'] = Wetterskip['peilgebied'][~Wetterskip['peilgebied'].index.isin(numbers_to_remove)]\n", - "Wetterskip['streefpeil'] = Wetterskip['streefpeil'][~Wetterskip['streefpeil'].index.isin(numbers_to_remove)]" + "# Wetterskip['peilgebied'] = Wetterskip['peilgebied'][~Wetterskip['peilgebied'].index.isin(numbers_to_remove)]\n", + "# Wetterskip['streefpeil'] = Wetterskip['streefpeil'][~Wetterskip['streefpeil'].index.isin(numbers_to_remove)]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "f180bb58-0cdc-4bd4-9b24-eb5deb446e82", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Wetterskip['streefpeil']['globalid'].is_unique" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "59fd83a7-da5b-43ff-a4ee-f97fb9389a1a", + "metadata": {}, + "outputs": [], + "source": [ + "if remove_cat_2:\n", + " Wetterskip['peilgebied'] = Wetterskip['peilgebied'].loc[Wetterskip['peilgebied'].peilgebied_cat !=2]" ] }, { @@ -463,10 +502,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "id": "65bafa4a-7c96-4fae-870d-821aa638d322", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "gemaal\n", + "hydroobject\n", + "duikersifonhevel\n", + "peilgebied\n", + "streefpeil\n", + "aggregation_area\n" + ] + } + ], "source": [ "for key in Wetterskip.keys(): \n", " print(key)\n", @@ -476,15 +529,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d305c771-459d-4240-b727-0a7f5ee2b409", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e0b6031e-e572-48b6-aff4-ffb474ddc045", + "id": "97db8354-a89a-4f58-bab8-f722f123fcec", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb index 7f07e32..74d39bc 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb @@ -23,18 +23,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 81, "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], "source": [ "import geopandas as gpd\n", "import numpy as np\n", + "from general_functions import *\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", - "from general_functions import *" + "remove_cat_2 = True" ] }, { @@ -47,24 +57,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 82, "id": "e15206a7-6639-40bb-9942-f920085f53b4", "metadata": {}, "outputs": [], "source": [ "#define relative paths\n", "waterschap = 'Zuiderzeeland'\n", - "\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", + "waterschap2 = 'Zuiderzeeland'\n", + "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", "\n", "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "grens_path = \"/DATAFOLDER/projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_zuiderzeeland.gpkg\"\n", + "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_zuiderzeeland.gpkg\"\n", "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" + "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] }, { @@ -77,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 83, "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", "metadata": {}, "outputs": [], @@ -90,6 +100,7 @@ " 'duikersifonhevel',\n", " 'peilgebied', \n", " 'streefpeil',\n", + " 'aggregation_area',\n", " ])\n", "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].to_crs('EPSG:28992')\n", "\n", @@ -105,6 +116,27 @@ "gdf_buffer = gpd.read_file(buffer_path)" ] }, + { + "cell_type": "code", + "execution_count": 84, + "id": "51af6c3a-7b5d-447c-8757-5dd2f4694958", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Zuiderzeeland['peilgebied'].globalid.is_unique" + ] + }, { "cell_type": "markdown", "id": "b37e2158-618d-4dd0-a576-7cb32e41c0d2", @@ -115,7 +147,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 85, "id": "c5e7495b-8517-4729-b586-7e1913dbbd83", "metadata": {}, "outputs": [], @@ -127,6 +159,174 @@ "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" ] }, + { + "cell_type": "code", + "execution_count": 86, + "id": "51e6de19-8bb2-47f9-860c-45d30d72972d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
codeglobalidnen3610idgeometry
0OR 56dummy_globalid_peilgebied_0dummy_nen3610id_peilgebied_0POLYGON Z ((167444.972 487009.101 0.000, 16762...
1OR 13dummy_globalid_peilgebied_1dummy_nen3610id_peilgebied_1POLYGON Z ((182383.808 509903.577 0.000, 18241...
2HT 6dummy_globalid_peilgebied_2dummy_nen3610id_peilgebied_2POLYGON Z ((158728.408 504422.232 0.000, 15873...
3SCHOTERPAD-D-TOCHTdummy_globalid_peilgebied_3dummy_nen3610id_peilgebied_3POLYGON Z ((179970.587 533631.593 0.000, 17996...
4ZWARTEMEERTOCHTdummy_globalid_peilgebied_4dummy_nen3610id_peilgebied_4POLYGON Z ((192476.653 518448.383 0.000, 19250...
...............
290TA.02dummy_globalid_peilgebied_290dummy_nen3610id_peilgebied_290POLYGON Z ((189642.837 527330.192 0.000, 18985...
291URK 2dummy_globalid_peilgebied_291dummy_nen3610id_peilgebied_291POLYGON Z ((169418.497 519698.470 0.000, 16937...
292TA.13dummy_globalid_peilgebied_292dummy_nen3610id_peilgebied_292POLYGON Z ((187294.201 529202.794 0.000, 18747...
2933.11dummy_globalid_peilgebied_293dummy_nen3610id_peilgebied_293POLYGON Z ((160519.614 477230.775 0.000, 16016...
294TA.04dummy_globalid_peilgebied_294dummy_nen3610id_peilgebied_294POLYGON Z ((188319.932 529257.440 0.000, 18832...
\n", + "

295 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " code globalid \\\n", + "0 OR 56 dummy_globalid_peilgebied_0 \n", + "1 OR 13 dummy_globalid_peilgebied_1 \n", + "2 HT 6 dummy_globalid_peilgebied_2 \n", + "3 SCHOTERPAD-D-TOCHT dummy_globalid_peilgebied_3 \n", + "4 ZWARTEMEERTOCHT dummy_globalid_peilgebied_4 \n", + ".. ... ... \n", + "290 TA.02 dummy_globalid_peilgebied_290 \n", + "291 URK 2 dummy_globalid_peilgebied_291 \n", + "292 TA.13 dummy_globalid_peilgebied_292 \n", + "293 3.11 dummy_globalid_peilgebied_293 \n", + "294 TA.04 dummy_globalid_peilgebied_294 \n", + "\n", + " nen3610id \\\n", + "0 dummy_nen3610id_peilgebied_0 \n", + "1 dummy_nen3610id_peilgebied_1 \n", + "2 dummy_nen3610id_peilgebied_2 \n", + "3 dummy_nen3610id_peilgebied_3 \n", + "4 dummy_nen3610id_peilgebied_4 \n", + ".. ... \n", + "290 dummy_nen3610id_peilgebied_290 \n", + "291 dummy_nen3610id_peilgebied_291 \n", + "292 dummy_nen3610id_peilgebied_292 \n", + "293 dummy_nen3610id_peilgebied_293 \n", + "294 dummy_nen3610id_peilgebied_294 \n", + "\n", + " geometry \n", + "0 POLYGON Z ((167444.972 487009.101 0.000, 16762... \n", + "1 POLYGON Z ((182383.808 509903.577 0.000, 18241... \n", + "2 POLYGON Z ((158728.408 504422.232 0.000, 15873... \n", + "3 POLYGON Z ((179970.587 533631.593 0.000, 17996... \n", + "4 POLYGON Z ((192476.653 518448.383 0.000, 19250... \n", + ".. ... \n", + "290 POLYGON Z ((189642.837 527330.192 0.000, 18985... \n", + "291 POLYGON Z ((169418.497 519698.470 0.000, 16937... \n", + "292 POLYGON Z ((187294.201 529202.794 0.000, 18747... \n", + "293 POLYGON Z ((160519.614 477230.775 0.000, 16016... \n", + "294 POLYGON Z ((188319.932 529257.440 0.000, 18832... \n", + "\n", + "[295 rows x 4 columns]" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Zuiderzeeland['peilgebied']" + ] + }, { "cell_type": "markdown", "id": "b93b71dd-7176-42ae-bf4e-f31a429b229a", @@ -141,10 +341,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 87, "id": "76cd16f7-c2cd-4ef7-b478-42359e0f8735", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of overlapping shapes without filter: 23\n", + "Number of overlapping shapes with filter: 0\n" + ] + } + ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(Zuiderzeeland['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", @@ -167,32 +376,220 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 88, + "id": "3fca7d17-e4a3-445e-92ef-74e60e661e1e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
codeglobalidnen3610idgeometry
0OR 56dummy_globalid_peilgebied_0dummy_nen3610id_peilgebied_0POLYGON Z ((167444.972 487009.101 0.000, 16762...
1OR 13dummy_globalid_peilgebied_1dummy_nen3610id_peilgebied_1POLYGON Z ((182383.808 509903.577 0.000, 18241...
2HT 6dummy_globalid_peilgebied_2dummy_nen3610id_peilgebied_2POLYGON Z ((158728.408 504422.232 0.000, 15873...
3SCHOTERPAD-D-TOCHTdummy_globalid_peilgebied_3dummy_nen3610id_peilgebied_3POLYGON Z ((179970.587 533631.593 0.000, 17996...
4ZWARTEMEERTOCHTdummy_globalid_peilgebied_4dummy_nen3610id_peilgebied_4POLYGON Z ((192476.653 518448.383 0.000, 19250...
...............
290TA.02dummy_globalid_peilgebied_290dummy_nen3610id_peilgebied_290POLYGON Z ((189642.837 527330.192 0.000, 18985...
291URK 2dummy_globalid_peilgebied_291dummy_nen3610id_peilgebied_291POLYGON Z ((169418.497 519698.470 0.000, 16937...
292TA.13dummy_globalid_peilgebied_292dummy_nen3610id_peilgebied_292POLYGON Z ((187294.201 529202.794 0.000, 18747...
2933.11dummy_globalid_peilgebied_293dummy_nen3610id_peilgebied_293POLYGON Z ((160519.614 477230.775 0.000, 16016...
294TA.04dummy_globalid_peilgebied_294dummy_nen3610id_peilgebied_294POLYGON Z ((188319.932 529257.440 0.000, 18832...
\n", + "

295 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " code globalid \\\n", + "0 OR 56 dummy_globalid_peilgebied_0 \n", + "1 OR 13 dummy_globalid_peilgebied_1 \n", + "2 HT 6 dummy_globalid_peilgebied_2 \n", + "3 SCHOTERPAD-D-TOCHT dummy_globalid_peilgebied_3 \n", + "4 ZWARTEMEERTOCHT dummy_globalid_peilgebied_4 \n", + ".. ... ... \n", + "290 TA.02 dummy_globalid_peilgebied_290 \n", + "291 URK 2 dummy_globalid_peilgebied_291 \n", + "292 TA.13 dummy_globalid_peilgebied_292 \n", + "293 3.11 dummy_globalid_peilgebied_293 \n", + "294 TA.04 dummy_globalid_peilgebied_294 \n", + "\n", + " nen3610id \\\n", + "0 dummy_nen3610id_peilgebied_0 \n", + "1 dummy_nen3610id_peilgebied_1 \n", + "2 dummy_nen3610id_peilgebied_2 \n", + "3 dummy_nen3610id_peilgebied_3 \n", + "4 dummy_nen3610id_peilgebied_4 \n", + ".. ... \n", + "290 dummy_nen3610id_peilgebied_290 \n", + "291 dummy_nen3610id_peilgebied_291 \n", + "292 dummy_nen3610id_peilgebied_292 \n", + "293 dummy_nen3610id_peilgebied_293 \n", + "294 dummy_nen3610id_peilgebied_294 \n", + "\n", + " geometry \n", + "0 POLYGON Z ((167444.972 487009.101 0.000, 16762... \n", + "1 POLYGON Z ((182383.808 509903.577 0.000, 18241... \n", + "2 POLYGON Z ((158728.408 504422.232 0.000, 15873... \n", + "3 POLYGON Z ((179970.587 533631.593 0.000, 17996... \n", + "4 POLYGON Z ((192476.653 518448.383 0.000, 19250... \n", + ".. ... \n", + "290 POLYGON Z ((189642.837 527330.192 0.000, 18985... \n", + "291 POLYGON Z ((169418.497 519698.470 0.000, 16937... \n", + "292 POLYGON Z ((187294.201 529202.794 0.000, 18747... \n", + "293 POLYGON Z ((160519.614 477230.775 0.000, 16016... \n", + "294 POLYGON Z ((188319.932 529257.440 0.000, 18832... \n", + "\n", + "[295 rows x 4 columns]" + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Zuiderzeeland['peilgebied']" + ] + }, + { + "cell_type": "code", + "execution_count": 89, "id": "a7f16af4-fc46-4533-93b6-ee52d6d7687c", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n", + "yes\n" + ] + } + ], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", "\n", "for index, row in Zuiderzeeland['peilgebied'].iterrows():\n", " \n", - " if row.code == 'dummy_code_peilgebied_18207':\n", + " if 'LVA.01' in row.code:\n", " peilgebieden_cat.append(1)\n", " print('yes')\n", - " elif row.code == 'dummy_code_peilgebied_18322':\n", + " elif '3.01' in row.code:\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'dummy_code_peilgebied_18155':\n", + " print('yes')\n", + " elif 'LAGE AFDELING' in row.code:\n", + " print('yes')\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'dummy_code_peilgebied_18161':\n", + "\n", + " elif 'HOGE AFDELING' in row.code:\n", + " print('yes')\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'dummy_code_peilgebied_19451':\n", - " peilgebieden_cat.append(2)\n", + "\n", " else:\n", " peilgebieden_cat.append(0)\n", " \n", "\n", " \n", + "\n", + "\n", + "\n", + "\n", "# Add new column and drop old HWS_BZM column\n", "Zuiderzeeland['peilgebied']['peilgebied_cat'] = peilgebieden_cat\n", "# Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].drop(columns=['HWS_BZM'])" @@ -208,7 +605,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 90, "id": "ec5c9dde-2698-4a73-9fce-266a3c5e96d7", "metadata": {}, "outputs": [], @@ -234,7 +631,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 91, "id": "9e61effa-42ae-46d7-879e-d7fa928ebd8d", "metadata": {}, "outputs": [], @@ -259,21 +656,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 92, "id": "1317fbfd-b713-4172-b1b0-c678c4e8d986", "metadata": {}, "outputs": [], "source": [ - "buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", - "buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", - "buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(Zuiderzeeland['peilgebied'].geometry.tolist()))\n", + "# buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", + "# buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", + "# buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(Zuiderzeeland['peilgebied'].geometry.tolist()))\n", "\n", - "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", - "buffer_polygon = buffer_polygon.set_geometry(0)\n", - "buffer_polygon = buffer_polygon.dissolve()\n", - "buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", - "buffer_polygon = buffer_polygon.set_geometry('geometry')\n", - "buffer_polygon = buffer_polygon.set_crs('EPSG:28992')" + "# buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "# buffer_polygon = buffer_polygon.set_geometry(0)\n", + "# buffer_polygon = buffer_polygon.dissolve()\n", + "# buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "# buffer_polygon = buffer_polygon.set_geometry('geometry')\n", + "# buffer_polygon = buffer_polygon.set_crs('EPSG:28992')" ] }, { @@ -288,38 +685,49 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 93, "id": "f5033a40-2967-4cc1-9772-fef2be4169b0", "metadata": {}, "outputs": [], "source": [ - "# update peilgebied dict key\n", - "buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['peilgebied_cat'] = 2\n", + "# # update peilgebied dict key\n", + "# buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['peilgebied_cat'] = 2\n", "\n", - "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "# buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", "\n", - "Zuiderzeeland['peilgebied'] = pd.concat([buffer_polygon, Zuiderzeeland['peilgebied']])" + "# Zuiderzeeland['peilgebied'] = pd.concat([buffer_polygon, Zuiderzeeland['peilgebied']])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 94, "id": "970ab69a-6f3a-46ce-9882-aded5f98a39f", "metadata": {}, "outputs": [], "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer['waterhoogte'] = [np.nan]\n", - "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", - "streefpeil_buffer['geometry'] = [None]\n", + "# # Create boezem streefpeil layer\n", + "# streefpeil_buffer = pd.DataFrame()\n", + "# streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "# streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", + "# streefpeil_buffer['geometry'] = [None]\n", "\n", "\n", - "Zuiderzeeland['streefpeil'] = pd.concat([streefpeil_buffer, Zuiderzeeland['streefpeil']])\n", - "Zuiderzeeland['streefpeil'] = gpd.GeoDataFrame(Zuiderzeeland['streefpeil'])" + "# Zuiderzeeland['streefpeil'] = pd.concat([streefpeil_buffer, Zuiderzeeland['streefpeil']])\n", + "# Zuiderzeeland['streefpeil'] = gpd.GeoDataFrame(Zuiderzeeland['streefpeil'])" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "51d36d36-9420-4be9-8d6b-8ac0263a7129", + "metadata": {}, + "outputs": [], + "source": [ + "if remove_cat_2:\n", + " Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].loc[Zuiderzeeland['peilgebied'].peilgebied_cat !=2]" ] }, { @@ -332,25 +740,66 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 96, "id": "9e589e19-a137-418b-b2a7-5b0c778766a6", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "Zuiderzeeland['peilgebied'].globalid.is_unique" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 97, "id": "eb0ed312-2aef-41f6-83c7-ead0e630aa39", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "gemaal\n", + "hydroobject\n", + "duikersifonhevel\n", + "peilgebied\n", + "streefpeil\n", + "aggregation_area\n" + ] + } + ], "source": [ "for key in Zuiderzeeland.keys(): \n", " print(key)\n", " Zuiderzeeland[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "888995e9-8b43-48d3-88ea-2aeea2caa311", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d90929e5-6345-4ccf-8d32-ddfcc20510d4", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb index ce740f2..a1ee298 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb @@ -21,18 +21,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 103, "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], "source": [ "import geopandas as gpd\n", "import numpy as np\n", + "from general_functions import *\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", - "from general_functions import *" + "remove_cat_2 = True" ] }, { @@ -45,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 104, "id": "e15206a7-6639-40bb-9942-f920085f53b4", "metadata": {}, "outputs": [], @@ -54,16 +64,16 @@ "waterschap = 'Hollandse_Delta'\n", "waterschap2 = 'HD'\n", "\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", + "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", "\n", "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "grens_path = \"/DATAFOLDER/projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = f\"../projects/4750_30/Data_overig/HWS/hws_buffer_hd.gpkg\"\n", + "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_hd.gpkg\"\n", "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" + "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] }, { @@ -76,7 +86,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 105, "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", "metadata": {}, "outputs": [], @@ -89,6 +99,7 @@ " 'duikersifonhevel',\n", " 'peilgebied', \n", " 'streefpeil',\n", + " 'aggregation_area',\n", " ])\n", "HD['peilgebied'] = HD['peilgebied'].to_crs('EPSG:28992')\n", "\n", @@ -106,6 +117,27 @@ "gdf_buffer = gdf_buffer.dissolve()" ] }, + { + "cell_type": "code", + "execution_count": 106, + "id": "a7b8f366-9c57-440f-bf48-7908612465d5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 106, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "HD['peilgebied'].globalid.is_unique" + ] + }, { "cell_type": "markdown", "id": "5556d211-e92e-4ba3-85c2-4ff9bd33fbeb", @@ -116,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 107, "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", "metadata": { "tags": [] @@ -144,10 +176,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 108, "id": "05757b4b-2f8e-48a6-a76c-9e06e23f20da", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of overlapping shapes without filter: 174\n", + "Number of overlapping shapes with filter: 0\n" + ] + } + ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(HD['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", @@ -178,7 +219,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 109, "id": "5793dd3d-766d-46bd-811e-4c8b6e118d3a", "metadata": {}, "outputs": [], @@ -188,26 +229,54 @@ "\n", "for index, row in HD['peilgebied'].iterrows():\n", " \n", - " if row.code == 'Zuiderdiepboezem en havenkanaal Dirksland':\n", + " if row.code == 'Zuiderdiepboezem_164':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'Zuiderdiepboezem_163':\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'Havenkanaal van Goedereede':\n", + " elif row.code == 'Zoetwaterboezem_571':\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'Zoetwaterboezem':\n", + " elif row.code == 'Kanaal door Voorne_570':\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'Kanaal door Voorne':\n", + " elif row.code == 'Binnenbedijkte Maas_290':\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'Binnenbedijkte Maas':\n", + " elif row.code == 'Boezemloozende door Strijensas_333':\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'Boezemloozende door Strijensas':\n", + " # elif row.code == 'Zuiderdiepboezem':\n", + " # peilgebieden_cat.append(1)\n", + " elif row.code == 'Kreekkade_660':\n", + " peilgebieden_cat.append(1)\n", + " elif row.code == 'Zwijndrechtse Waard_703':\n", " peilgebieden_cat.append(1)\n", " else:\n", " peilgebieden_cat.append(0)\n", + " \n", + "\n", + " # if row.code == 'Zuiderdiepboezem en havenkanaal Dirksland':\n", + " # peilgebieden_cat.append(1)\n", + " # elif row.code == 'Havenkanaal van Goedereede':\n", + " # peilgebieden_cat.append(1)\n", + " # elif row.code == 'Zoetwaterboezem':\n", + " # peilgebieden_cat.append(1)\n", + " # elif row.code == 'Kanaal door Voorne':\n", + " # peilgebieden_cat.append(1)\n", + " # elif row.code == 'Binnenbedijkte Maas':\n", + " # peilgebieden_cat.append(1)\n", + " # elif row.code == 'Boezemloozende door Strijensas':\n", + " # peilgebieden_cat.append(1)\n", + " # elif row.code == 'Zuiderdiepboezem':\n", + " # peilgebieden_cat.append(1)\n", + " # elif row.code == 'Kreekkade':\n", + " # peilgebieden_cat.append(1)\n", + " # elif row.code == 'Zwijndrechtse Waard':\n", + " # peilgebieden_cat.append(1)\n", + " # else:\n", + " # peilgebieden_cat.append(0)\n", " \n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 110, "id": "d0e88867-184b-48b5-a10f-ba8816f10dcc", "metadata": {}, "outputs": [], @@ -216,6 +285,27 @@ "HD['peilgebied']['peilgebied_cat'] = peilgebieden_cat" ] }, + { + "cell_type": "code", + "execution_count": 111, + "id": "68fd5607-5ed5-4b4e-8c13-9159e175aaae", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1])" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "HD['peilgebied']['peilgebied_cat'].unique()" + ] + }, { "cell_type": "markdown", "id": "8ab1e249-a9cc-4728-bfce-d9c965da18df", @@ -226,7 +316,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 112, "id": "e60dbbe9-1f27-4a71-b10b-1ecf3c53b060", "metadata": {}, "outputs": [], @@ -244,7 +334,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 113, "id": "03ff37c8-16cc-4cdc-9a1b-ea10f06ea630", "metadata": {}, "outputs": [], @@ -269,15 +359,15 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 114, "id": "c4c448fb-3cb3-451c-aa17-d336f02deb6b", "metadata": {}, "outputs": [], "source": [ - "# Create buffer polygon\n", - "buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how='intersection', keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how='difference', keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, HD['peilgebied'], how='difference', keep_geom_type=True)" + "# # Create buffer polygon\n", + "# buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how='intersection', keep_geom_type=True)\n", + "# buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how='difference', keep_geom_type=True)\n", + "# buffer_polygon = gpd.overlay(buffer_polygon, HD['peilgebied'], how='difference', keep_geom_type=True)" ] }, { @@ -290,41 +380,52 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 115, "id": "75fc528f-5902-4a5d-bc7c-d0b700875832", "metadata": {}, "outputs": [], "source": [ - "# update peilgebied dict key\n", - "buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['peilgebied_cat'] = 2\n", + "# # update peilgebied dict key\n", + "# buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['peilgebied_cat'] = 2\n", "\n", - "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "# buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", "\n", - "HD['peilgebied'] = pd.concat([buffer_polygon, HD['peilgebied']])" + "# HD['peilgebied'] = pd.concat([buffer_polygon, HD['peilgebied']])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 116, "id": "b345f335-bc12-4e99-8272-9e47cc325021", "metadata": {}, "outputs": [], "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer['waterhoogte'] = [np.nan]\n", - "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", - "streefpeil_buffer['geometry'] = [None]\n", + "# # Create boezem streefpeil layer\n", + "# streefpeil_buffer = pd.DataFrame()\n", + "# streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "# streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", + "# streefpeil_buffer['geometry'] = [None]\n", "\n", "\n", - "HD['streefpeil'] = pd.concat([streefpeil_buffer, HD['streefpeil']])\n", - "HD['streefpeil'] = gpd.GeoDataFrame(HD['streefpeil'])\n", + "# HD['streefpeil'] = pd.concat([streefpeil_buffer, HD['streefpeil']])\n", + "# HD['streefpeil'] = gpd.GeoDataFrame(HD['streefpeil'])\n", "\n" ] }, + { + "cell_type": "code", + "execution_count": 117, + "id": "a8852930-5bbe-41b3-886e-b73ffa70177d", + "metadata": {}, + "outputs": [], + "source": [ + "if remove_cat_2:\n", + " HD['peilgebied'] = HD['peilgebied'].loc[HD['peilgebied'].peilgebied_cat !=2]" + ] + }, { "cell_type": "markdown", "id": "dfea55d4-0bc9-485b-ac90-68b1dd8455b6", @@ -335,15 +436,45 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 118, "id": "70b4b337-44a9-4ef4-aee2-f7431aae720c", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "gemaal\n", + "hydroobject\n", + "duikersifonhevel\n", + "peilgebied\n", + "streefpeil\n", + "aggregation_area\n" + ] + } + ], "source": [ "for key in HD.keys(): \n", " print(key)\n", " HD[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fccf3cfa-991c-42d3-b9f9-3869230a3fcf", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fc6075a8-8575-442d-a9f5-925dc3614f79", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb index 6fddb55..f7a5a7c 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb @@ -21,18 +21,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 69, "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], "source": [ "import geopandas as gpd\n", "import numpy as np\n", + "from general_functions import *\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", - "from general_functions import *" + "remove_cat_2 = True" ] }, { @@ -45,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 70, "id": "e15206a7-6639-40bb-9942-f920085f53b4", "metadata": {}, "outputs": [], @@ -54,16 +64,16 @@ "waterschap = 'HHNK'\n", "waterschap2 = 'Noorderkwartier'\n", "\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", + "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", "\n", "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "grens_path = \"/DATAFOLDER/projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = \"../projects/4750_30/Data_overig/HWS/hws_buffer_hhnk.gpkg\"\n", + "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_hhnk.gpkg\"\n", "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" + "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] }, { @@ -76,7 +86,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 71, "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", "metadata": {}, "outputs": [], @@ -89,6 +99,7 @@ " 'duikersifonhevel',\n", " 'peilgebied', \n", " 'streefpeil',\n", + " 'aggregation_area',\n", " ])\n", "HHNK['peilgebied'] = HHNK['peilgebied'].to_crs('EPSG:28992')\n", "\n", @@ -114,7 +125,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 72, "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", "metadata": {}, "outputs": [], @@ -123,8 +134,7 @@ "gdf_grens = gdf_grens.loc[['HH Hollands Noorderkwartier']]\n", "\n", "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')\n", - "gdf_hws.plot()" + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" ] }, { @@ -141,12 +151,89 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "f2740959-7a85-4947-950e-d8a64cb8ece2", + "execution_count": 73, + "id": "2f96be55-a022-430c-baad-6a8a90bdcc2f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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DbnfKJQoAldfDdxyC2UrJJwzJEUt4fzkwguBf/7Pce1ffwPjBQMTxRX9mSAI+IVrxvHskUqvjZCi0MrshhuSYnaOkphEbkBiErnNabWAH/4Q2L8fCHtzRmMGBoA9e4B3vjNpAJwlEpPIhITNkEoBH/wgcPvtwJEjQKVCxS2VogP/dJpWZEkE3VuGpKglJACAYQCXX362X0XCKeAkzaASEhISzi2SopaQkLCtSIpaQkLCtiIpagkJCduKpKglJCRsK5KilpCQsK1IilpCQsK2IilqCQkJ24qkqCUkJGwrkqKWkJCwrUiKWkJCwrYiKWoJCQnbiqSoJSQkbCuSopaQkLCtSKyHNiDy0KzX62f5lSQknN9En8GNfG2TorYBjUYDADAxMXGWX0lCQgJAn8lcbu0M1sTOewPCMMT09DQymczmch+3QL1ex8TEBI4fP55Yha8iuTdrc77eG8YYGo0GyuUyRHHtk7NkpbYBoihifHztsNxTQTabPa/+cG6F5N6szfl4b9ZboUUkjYKEhIRtRVLUEhISthVJUTuLaJqGz33uc9A07Wy/lHOO5N6sTXJv1idpFCQkJGwrkpVaQkLCtiIpagkJCduKpKglJCRsK5KilpCQsK1Iito6/OhHP8Ldd9+NcrkMQRDw3e9+t+vnjDE8+OCDKJfLMAwDt956K1566aWuaxzHwa//+q9jYGAAqVQK99xzDyYnJ7uuqVQquP/++5HL5ZDL5XD//fejWq12XXPs2DHcfffdSKVSGBgYwCc/+Um4rtt1zYEDB7B3714YhoGxsTH83u/93oZzcifKevfG8zz863/9r3HllVcilUqhXC7jV37lVzA9Pd31GOfjvVnNxz72MQiCgK985Std39+u9+aMwBLW5B//8R/ZZz/7WfbQQw8xAOw73/lO18+/8IUvsEwmwx566CF24MAB9ku/9EtsdHSU1ev1+JqPf/zjbGxsjO3bt48999xz7LbbbmNXXXUV830/vub9738/27NnD3viiSfYE088wfbs2cPuuuuu+Oe+77M9e/aw2267jT333HNs3759rFwuswceeCC+plarseHhYXbvvfeyAwcOsIceeohlMhn2pS996Yzfm2q1yu644w72X//rf2Wvvvoqe/LJJ9l1113Hrrnmmq7HOB/vTSff+c532FVXXcXK5TL7oz/6o66fbdd7cyZIitomWf2HMwxDNjIywr7whS/E37Ntm+VyOfZnf/ZnjDH6cCuKwr71rW/F10xNTTFRFNnDDz/MGGPs5ZdfZgDYj3/84/iaJ598kgFgr776KmOMPiSiKLKpqan4mv/yX/4L0zSN1Wo1xhhjf/qnf8pyuRyzbTu+5vOf/zwrl8ssDMNTeCd6We+DG/H0008zAOzo0aOMseTeTE5OsrGxMXbw4EG2c+fOrqJ2vtyb00Wy/TxBDh8+jNnZWbzvfe+Lv6dpGvbu3YsnnngCALB//354ntd1Tblcxp49e+JrnnzySeRyOVx33XXxNddffz1yuVzXNXv27EG5XI6vufPOO+E4Dvbv3x9fs3fv3i5B5p133onp6WkcOXLk1N+ALVKr1SAIAvL5PIDz+96EYYj7778fv/Vbv4Urrrii5+fn8705FSRF7QSZnZ0FAAwPD3d9f3h4OP7Z7OwsVFVFoVBY95qhoaGexx8aGuq6ZvXzFAoFqKq67jXRf0fXnC1s28a/+Tf/Bh/5yEfiAezz+d588YtfhCzL+OQnP9n35+fzvTkVJC4dJ8lqOyLG2IYWRauv6Xf9qbiG8cPeU22ZtBU8z8O9996LMAzxp3/6pxtev93vzf79+/HHf/zHeO6557b83Nv93pwqkpXaCTIyMgKg92+z+fn5+G+6kZERuK6LSqWy7jVzc3M9j7+wsNB1zernqVQq8Dxv3Wvm5+cB9K4mzxSe5+HDH/4wDh8+jH379nXZ5Jyv9+Z//+//jfn5eezYsQOyLEOWZRw9ehSf/vSnsWvXrvj1no/35lSRFLUTZPfu3RgZGcG+ffvi77mui8ceeww33ngjAOCaa66Boihd18zMzODgwYPxNTfccANqtRqefvrp+JqnnnoKtVqt65qDBw9iZmYmvuaRRx6Bpmm45ppr4mt+9KMfdbXrH3nkEZTL5fjDciaJCtqhQ4fw6KOPolQqdf38fL03999/P1588UW88MIL8Ve5XMZv/dZv4Xvf+x6A8/fenDLOSnviLUKj0WDPP/88e/755xkA9uUvf5k9//zzcQfvC1/4Asvlcuzb3/42O3DgALvvvvv6SjrGx8fZo48+yp577jl2++23923Nv/3tb2dPPvkke/LJJ9mVV17ZtzX/nve8hz333HPs0UcfZePj412t+Wq1yoaHh9l9993HDhw4wL797W+zbDZ72lrz690bz/PYPffcw8bHx9kLL7zAZmZm4i/Hcc7re9OP1d1PxrbvvTkTJEVtHX7wgx8wAD1fv/qrv8oYI1nH5z73OTYyMsI0TWO33HILO3DgQNdjWJbFHnjgAVYsFplhGOyuu+5ix44d67pmaWmJ/fIv/zLLZDIsk8mwX/7lX2aVSqXrmqNHj7IPfvCDzDAMViwW2QMPPNDVhmeMsRdffJHdfPPNTNM0NjIywh588MHT1pZf794cPny4788AsB/84Afn9b3pR7+itl3vzZkgsR5KSEjYViRnagkJCduKpKglJCRsK5KilpCQsK1IilpCQsK2IilqCQkJ24qkqCUkJGwrkqKWkJCwrUiKWkJCwrYiKWoJCQnbiqSoJSQkbCuSopaQkLCtSIpaQkLCtuL/B9b38LJpQp1PAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot\n", + "fig,ax = plt.subplots()\n", + "\n", + "HHNK['peilgebied'].plot(ax=ax)\n", + "gdf_grens.plot(ax=ax, color='red', alpha=0.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "31892560-b870-4f06-8e58-acdf13489c62", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Polygon', 'MultiPolygon'], dtype=object)" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "HHNK['peilgebied'].geometry.type.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "552d46b7-24c5-4dc5-a818-885bac461e36", "metadata": {}, "outputs": [], "source": [ - "# Step 1: Identify the Overlapping Areas and clip\n", + "HHNK['peilgebied'].geometry = HHNK['peilgebied'].buffer(0)\n", + "gdf_grens.geometry = gdf_grens.buffer(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "f2740959-7a85-4947-950e-d8a64cb8ece2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of overlapping shapes without filter: 61\n", + "Number of overlapping shapes with filter: 0\n" + ] + } + ], + "source": [ + "# Step 1: Identify the Overlapping Areas and clip.\n", + "HHNK['peilgebied'] = gpd.overlay(HHNK['peilgebied'], gdf_grens, how='intersection', keep_geom_type=True)\n", "overlaps = gpd.overlay(HHNK['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", "\n", "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", @@ -175,30 +262,45 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 77, "id": "c5c819f1-dfae-4bf4-b14e-63902e433b1a", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "yes\n", + "yes\n", + "yes\n", + "yes\n" + ] + } + ], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", "\n", + "# code_list = [\"dummy_code_5188\",\"dummy_code_5161\",\"dummy_code_5210\",\"dummy_code_4352\",\"dummy_code_5164\",\"dummy_code_5200\",\"dummy_code_5167\",\"dummy_code_37\"]\n", + "\n", + "\n", "for index, row in HHNK['peilgebied'].iterrows():\n", " \n", - " if row.globalid in overlap_ids:\n", - " peilgebieden_cat.append(2)\n", - " \n", - " elif row.HWS_BZM is True:\n", + " if row.HWS_BZM:\n", + " print('yes')\n", " peilgebieden_cat.append(1)\n", + " \n", + " # elif row.HWS_BZM is True:\n", + " # peilgebieden_cat.append(1)\n", " \n", - " elif row.HWS_BZM is False:\n", + " else:\n", " peilgebieden_cat.append(0)\n", " \n", "# Add new column and drop old HWS_BZM column\n", "HHNK['peilgebied']['peilgebied_cat'] = peilgebieden_cat\n", - "HHNK['peilgebied'] = HHNK['peilgebied'].drop(columns=['HWS_BZM'])" + "# HHNK['peilgebied'] = HHNK['peilgebied'].drop(columns=['HWS_BZM'])" ] }, { @@ -211,7 +313,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 78, "id": "7dfdcfaf-4b9a-443f-b40c-65460af8352d", "metadata": {}, "outputs": [], @@ -229,7 +331,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 79, "id": "a744a7e5-9ac9-4e47-8cf2-791206581786", "metadata": {}, "outputs": [], @@ -254,15 +356,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 80, "id": "e9d64a75-240f-4583-9b38-3e3b22a578a3", "metadata": {}, "outputs": [], "source": [ - "# Create buffer polygon\n", - "buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how='intersection', keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how='difference', keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, HHNK['peilgebied'], how='difference', keep_geom_type=True)" + "# # Create buffer polygon\n", + "# buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how='intersection', keep_geom_type=True)\n", + "# buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how='difference', keep_geom_type=True)\n", + "\n", + "\n", + "\n", + "# # Apply a small buffer to both GeoDataFrames to \"clean\" the geometries\n", + "# buffer_polygon.geometry = buffer_polygon.buffer(0.001).buffer(-0.001)\n", + "# HHNK['peilgebied'].geometry = HHNK['peilgebied'].buffer(0.001).buffer(-0.001)\n", + "\n", + "# # Try the overlay operation again\n", + "# try:\n", + "# buffer_polygon = gpd.overlay(buffer_polygon, HHNK['peilgebied'], how='difference', keep_geom_type=True)\n", + "# print(\"Overlay operation successful.\")\n", + "# except Exception as e:\n", + "# print(f\"Overlay operation failed: {e}\")" ] }, { @@ -275,41 +389,62 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 81, "id": "ac1121dc-342e-4960-9294-308b619de9d8", "metadata": {}, "outputs": [], "source": [ - "# update peilgebied dict key\n", - "buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['peilgebied_cat'] = 2\n", + "# # update peilgebied dict key\n", + "# buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['peilgebied_cat'] = 2\n", "\n", - "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "# buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", "\n", - "HHNK['peilgebied'] = pd.concat([buffer_polygon, HHNK['peilgebied']])" + "# HHNK['peilgebied'] = pd.concat([buffer_polygon, HHNK['peilgebied']])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 82, "id": "746d2ebd-7307-4745-8e0e-35c047126c27", "metadata": {}, "outputs": [], "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer['waterhoogte'] = [np.nan]\n", - "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", - "streefpeil_buffer['geometry'] = [None]\n", + "# # Create boezem streefpeil layer\n", + "# streefpeil_buffer = pd.DataFrame()\n", + "# streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "# streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", + "# streefpeil_buffer['geometry'] = [None]\n", "\n", "\n", - "HHNK['streefpeil'] = pd.concat([streefpeil_buffer, HHNK['streefpeil']])\n", - "HHNK['streefpeil'] = gpd.GeoDataFrame(HHNK['streefpeil'])\n", + "# HHNK['streefpeil'] = pd.concat([streefpeil_buffer, HHNK['streefpeil']])\n", + "# HHNK['streefpeil'] = gpd.GeoDataFrame(HHNK['streefpeil'])\n", "\n" ] }, + { + "cell_type": "code", + "execution_count": 83, + "id": "f3a71ec5-0feb-4c23-a0c2-f3b83f6a5c04", + "metadata": {}, + "outputs": [], + "source": [ + "HHNK['peilgebied'] = HHNK['peilgebied'][['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "aec2c426-e962-4ff3-a015-a11695708c52", + "metadata": {}, + "outputs": [], + "source": [ + "if remove_cat_2:\n", + " HHNK['peilgebied'] = HHNK['peilgebied'].loc[HHNK['peilgebied'].peilgebied_cat !=2]" + ] + }, { "cell_type": "markdown", "id": "f0d2cab6-6529-4f4a-972a-533de967e85a", @@ -320,10 +455,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 85, "id": "02fcfb58-7054-4517-97f3-224c9acb4d1f", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "gemaal\n", + "hydroobject\n", + "duikersifonhevel\n", + "peilgebied\n", + "streefpeil\n", + "aggregation_area\n" + ] + } + ], "source": [ "for key in HHNK.keys(): \n", " print(key)\n", @@ -332,9 +481,38 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 86, "id": "fb843192-82da-4b4f-bb64-f475a4b52162", "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1])" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "HHNK['peilgebied']['peilgebied_cat'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0660f4a6-e3f6-4125-9fde-9d66eda1c644", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1680c820-f362-4c07-bef0-359a7fa94d36", + "metadata": {}, "outputs": [], "source": [] } diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb index 06bd718..b610663 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb @@ -21,18 +21,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", "metadata": {}, "outputs": [], "source": [ "import geopandas as gpd\n", - "import numpy as np\n", + "import shapely\n", + "from general_functions import *\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", - "from general_functions import *" + "remove_cat_2 = True" ] }, { @@ -45,24 +46,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "e15206a7-6639-40bb-9942-f920085f53b4", "metadata": {}, "outputs": [], "source": [ "#define relative paths\n", "waterschap = 'HHSK'\n", - "\n", - "data_path = f\"../projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", + "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", "\n", "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "grens_path = \"/DATAFOLDER/projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = f\"../projects/4750_30/Data_overig/HWS/hws_buffer_HHSK.gpkg\"\n", + "buffer_path = r\"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_HHSK.gpkg\"\n", "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" + "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] }, { @@ -75,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", "metadata": {}, "outputs": [], @@ -88,6 +88,7 @@ " 'duikersifonhevel',\n", " 'peilgebied', \n", " 'streefpeil',\n", + " 'aggregation_area',\n", " ])\n", "HHSK['peilgebied'] = HHSK['peilgebied'].to_crs('EPSG:28992')\n", "\n", @@ -105,6 +106,112 @@ "gdf_buffer = gdf_buffer.dissolve()" ] }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0d23e578-c217-4aa4-b5f4-41e01e32a503", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "12509\n", + "12509\n" + ] + } + ], + "source": [ + "print(len(HHSK['duikersifonhevel'].globalid.unique()))\n", + "print(len(HHSK['duikersifonhevel'].globalid))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "5dccf386-5dd3-4d48-8ba9-13e563be96c0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "HHSK['peilgebied'].globalid.is_unique" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "2cc1dcf0-84a3-4be0-a20f-e685ceec58ab", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "25622" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(HHSK['hydroobject'])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "6b749ccd-55e8-4305-857e-994ed1e77725", + "metadata": {}, + "outputs": [], + "source": [ + "# HHSK['hydroobject'] = HHSK['hydroobject'].explode(ignore_index=False, index_parts=True)\n", + "HHSK['hydroobject'][\"geometry\"] = HHSK['hydroobject'].make_valid()\n", + "HHSK['hydroobject'][\"geometry\"] = HHSK['hydroobject'].geometry.apply(shapely.force_2d)\n", + "HHSK['hydroobject'] = HHSK['hydroobject'][~HHSK['hydroobject'].is_empty].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "8f314b82-55e7-4b45-879f-40b6b7ef84b6", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK['hydroobject'] = HHSK['hydroobject'].drop_duplicates(subset=\"geometry\",keep=\"first\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "9330239f-a3cd-47e2-a6d0-89e6df252c9c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "21838" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(HHSK['hydroobject'])" + ] + }, { "cell_type": "markdown", "id": "5556d211-e92e-4ba3-85c2-4ff9bd33fbeb", @@ -115,7 +222,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", "metadata": {}, "outputs": [], @@ -141,10 +248,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "b3fd731a-1dc8-46cb-b4a3-f052eca43400", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of overlapping shapes without filter: 26\n", + "Number of overlapping shapes with filter: 0\n" + ] + } + ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(HHSK['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", @@ -178,31 +294,66 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, + "id": "3702811b-f3c3-4745-a863-73329e22c5cd", + "metadata": {}, + "outputs": [], + "source": [ + "# list(HHSK['peilgebied'][HHSK['peilgebied'].code.str.contains('boezem')].code.unique())" + ] + }, + { + "cell_type": "code", + "execution_count": 13, "id": "9bae7259-c4fd-4f2a-beb4-ec92a924f210", "metadata": {}, "outputs": [], "source": [ - "# Add to geodataframe\n", - "peilgebieden_cat = []\n", + "# # Add to geodataframe\n", + "# peilgebieden_cat = []\n", + "\n", + "\n", + "# # code_list = [\"dummy_id_78_dummy_id_78\",\"PPG-48_dummy_id_196_dummy_id_196\",\"PPG-49_dummy_id_85_dummy_id_85\",\"PPG-237_dummy_id_148_dummy_id_148\",\"PPG-1040_dummy_id_125_dummy_id_125\"]\n", + "# # code_list = [\"dummy_code_peilgebied_486\",\"dummy_code_peilgebied_450\",\"dummy_code_peilgebied_906\",\"dummy_code_peilgebied_1060\",\"dummy_code_peilgebied_552\",\"dummy_code_peilgebied_953\",\n", + "# # \"dummy_code_peilgebied_216\",\"dummy_code_peilgebied_544\",\"dummy_code_peilgebied_5\",\"dummy_code_peilgebied_480\",\"dummy_code_peilgebied_308\",\"dummy_code_peilgebied_677\",\n", + "# # \"dummy_code_peilgebied_1053\"]\n", + "\n", + "# code_list = list(HHSK['peilgebied'][HHSK['peilgebied'].code.str.contains('boezem')].code.unique())\n", "\n", - "for index, row in HHSK['peilgebied'].iterrows():\n", - " \n", - " if row.code == 'GPG-399':\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == 'GPG-403':\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == 'GPG-144_RV1':\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == 'GPG-144_RV2':\n", - " peilgebieden_cat.append(1)\n", - " elif row.code == 'GPG-144_RV3':\n", - " peilgebieden_cat.append(1)\n", + "# for index, row in HHSK['peilgebied'].iterrows():\n", + "# # print(row.code)\n", + "# # if row.code in code_list:\n", + "# if 'boezem' in row.code:\n", + "# print('appending_boezem')\n", + "# peilgebieden_cat.append(1)\n", "\n", - " else:\n", - " peilgebieden_cat.append(0)\n", + "# else:\n", + "# peilgebieden_cat.append(0)\n", " \n", - "HHSK['peilgebied']['peilgebied_cat'] = peilgebieden_cat" + "# HHSK['peilgebied']['peilgebied_cat'] = peilgebieden_cat" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "1c1c34e4-4fb2-4921-850b-7a48112da28f", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK['peilgebied']['peilgebied_cat'] = 0" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "2a3b05ad-eb78-4e3d-bfb8-23ec469d1ed1", + "metadata": {}, + "outputs": [], + "source": [ + "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('GPG-399'), 'peilgebied_cat'] = 1\n", + "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('GPG-1005'), 'peilgebied_cat'] = 1\n", + "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('GPG-1360'), 'peilgebied_cat'] = 1\n", + "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('GPG-1012'), 'peilgebied_cat'] = 1\n" ] }, { @@ -217,37 +368,58 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "0cdb36b6-9c4a-42fd-95f6-17c6b4e5803f", "metadata": {}, "outputs": [], "source": [ - "# update peilgebied dict key\n", - "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['peilgebied_cat'] = 2\n", + "# # update peilgebied dict key\n", + "# gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "# gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", + "# gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", + "# gdf_hws['peilgebied_cat'] = 2\n", "\n", - "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "# gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", "\n", - "HHSK['peilgebied'] = pd.concat([gdf_hws, HHSK['peilgebied']])" + "# HHSK['peilgebied'] = pd.concat([gdf_hws, HHSK['peilgebied']])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "3ed63b03-009a-4cde-8e64-e7f59bb8ca21", "metadata": {}, "outputs": [], "source": [ - "# update streefpeil dict key\n", - "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "# # update streefpeil dict key\n", + "# streefpeil_hws = pd.DataFrame()\n", + "# streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", + "# streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", + "# streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", "\n", - "HHSK['streefpeil'] = pd.concat([streefpeil_hws, HHSK['streefpeil']])\n", - "HHSK['streefpeil'] = gpd.GeoDataFrame(HHSK['streefpeil'])" + "# HHSK['streefpeil'] = pd.concat([streefpeil_hws, HHSK['streefpeil']])\n", + "# HHSK['streefpeil'] = gpd.GeoDataFrame(HHSK['streefpeil'])" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "eb5bc143-8a45-4a77-af37-5b190c2fe9f2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "HHSK['peilgebied']['peilgebied_cat'].unique()" ] }, { @@ -260,21 +432,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "d415acda-966c-4847-a4b6-a06b23f87218", "metadata": {}, "outputs": [], "source": [ - "buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", - "buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", - "buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(HHSK['peilgebied'].geometry.tolist()))\n", + "# buffer_polygon = gdf_buffer.geometry.iat[0].intersection(gdf_grens.geometry.iat[0])\n", + "# buffer_polygon = buffer_polygon.difference(shapely.geometry.MultiPolygon(gdf_hws.geometry.tolist()))\n", + "# buffer_polygon = buffer_polygon.difference(shapely.ops.unary_union(HHSK['peilgebied'].geometry.tolist()))\n", "\n", - "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", - "buffer_polygon = buffer_polygon.set_geometry(0)\n", - "buffer_polygon = buffer_polygon.dissolve()\n", - "buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", - "buffer_polygon = buffer_polygon.set_geometry('geometry')\n", - "buffer_polygon = buffer_polygon.set_crs('EPSG:28992')" + "# buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "# buffer_polygon = buffer_polygon.set_geometry(0)\n", + "# buffer_polygon = buffer_polygon.dissolve()\n", + "# buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "# buffer_polygon = buffer_polygon.set_geometry('geometry')\n", + "# buffer_polygon = buffer_polygon.set_crs('EPSG:28992')" ] }, { @@ -287,79 +459,51 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "852a9639-cdc4-4709-abb0-fded2aed5970", "metadata": {}, "outputs": [], "source": [ - "# update peilgebied dict key\n", - "buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", - "buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + '1'\n", - "buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['peilgebied_cat'] = 2\n", - "buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", - "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "# # update peilgebied dict key\n", + "# buffer_polygon = gpd.GeoDataFrame(buffer_polygon)\n", + "# buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + '1'\n", + "# buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['peilgebied_cat'] = 2\n", + "# buffer_polygon = buffer_polygon.rename(columns={0:'geometry'})\n", + "# buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", "\n", - "HHSK['peilgebied'] = pd.concat([buffer_polygon, HHSK['peilgebied']])\n", - "HHSK['peilgebied'] = gpd.GeoDataFrame(HHSK['peilgebied'])" + "# HHSK['peilgebied'] = pd.concat([buffer_polygon, HHSK['peilgebied']])\n", + "# HHSK['peilgebied'] = gpd.GeoDataFrame(HHSK['peilgebied'])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "7fb401c1-3291-4bff-896e-1fc1478fe830", "metadata": {}, "outputs": [], "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer['waterhoogte'] = [np.nan]\n", - "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", - "streefpeil_buffer['geometry'] = [None]\n", + "# # Create boezem streefpeil layer\n", + "# streefpeil_buffer = pd.DataFrame()\n", + "# streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "# streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", + "# streefpeil_buffer['geometry'] = [None]\n", "\n", "\n", - "HHSK['streefpeil'] = pd.concat([streefpeil_buffer, HHSK['streefpeil']])\n", - "HHSK['streefpeil'] = gpd.GeoDataFrame(HHSK['streefpeil'])" - ] - }, - { - "cell_type": "markdown", - "id": "f13c5886-7349-4396-87a2-6d400ce57953", - "metadata": {}, - "source": [ - "### Fix duplicates hydroobjects" + "# HHSK['streefpeil'] = pd.concat([streefpeil_buffer, HHSK['streefpeil']])\n", + "# HHSK['streefpeil'] = gpd.GeoDataFrame(HHSK['streefpeil'])" ] }, { "cell_type": "code", - "execution_count": null, - "id": "803b640d-ec91-469d-b7aa-29b8b8576234", + "execution_count": 22, + "id": "3e9caf33-e3d2-4f01-a281-3557e171720e", "metadata": {}, "outputs": [], "source": [ - "# Rename duplicates\n", - "# identify duplicates\n", - "HHSK['hydroobject']['temp_globalid'] = HHSK['hydroobject'].groupby('globalid').cumcount() + 1\n", - "HHSK['hydroobject']['temp_code'] = HHSK['hydroobject'].groupby('code').cumcount() + 1\n", - "HHSK['hydroobject']['temp_nen3610id'] = HHSK['hydroobject'].groupby('nen3610id').cumcount() + 1\n", - "\n", - "# AAdd _1 etc\n", - "HHSK['hydroobject']['globalid_new'] = HHSK['hydroobject'].apply(lambda x: f\"{x['globalid']}_{x['temp_globalid']}\" if x['temp_globalid'] > 1 else x['globalid'], axis=1)\n", - "HHSK['hydroobject']['code_new'] = HHSK['hydroobject'].apply(lambda x: f\"{x['code']}_{x['temp_code']}\" if x['temp_code'] > 1 else x['code'], axis=1)\n", - "HHSK['hydroobject']['nen3610id_new'] = HHSK['hydroobject'].apply(lambda x: f\"{x['nen3610id']}_{x['temp_nen3610id']}\" if x['temp_nen3610id'] > 1 else x['nen3610id'], axis=1)\n", - "\n", - "# drop columns\n", - "HHSK['hydroobject'] = HHSK['hydroobject'].drop(columns=['temp_globalid','temp_code','temp_nen3610id',\n", - " 'globalid', 'nen3610id', 'code'])\n", - "# rename columns\n", - "HHSK['hydroobject'] = HHSK['hydroobject'].rename(columns={'globalid_new':'globalid',\n", - " 'code_new':'code',\n", - " 'nen3610id_new':'nen3610id'})\n", - "# check\n", - "print(HHSK['hydroobject'].globalid.is_unique)\n", - "print(HHSK['hydroobject'].code.is_unique)\n", - "print(HHSK['hydroobject'].nen3610id.is_unique)" + "if remove_cat_2:\n", + " HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied'].peilgebied_cat !=2]" ] }, { @@ -372,22 +516,52 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "id": "3425a4bd-f8b1-4dd3-b11b-4bb420c8a5bb", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "gemaal\n", + "hydroobject\n", + "duikersifonhevel\n", + "peilgebied\n", + "streefpeil\n", + "aggregation_area\n" + ] + } + ], "source": [ "for key in HHSK.keys(): \n", " print(key)\n", " HHSK[str(key)].to_file(f'{output_folder}/{waterschap}.gpkg', layer = str(key), driver='GPKG')" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f2b2da20-38a8-4308-908a-c4282bf407a7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "77a8d3f4-775a-4484-b0b8-cd23bb1fbd1d", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python [conda env:stable]", + "display_name": "Python [conda env:ribasim]", "language": "python", - "name": "conda-env-stable-py" + "name": "conda-env-ribasim-py" }, "language_info": { "codemirror_mode": { @@ -399,7 +573,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.15" + "version": "3.10.13" } }, "nbformat": 4, diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb index f4cd0fe..71d325e 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb @@ -21,17 +21,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", "metadata": {}, "outputs": [], "source": [ "import geopandas as gpd\n", "import numpy as np\n", + "from general_functions import *\n", + "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", - "from general_functions import *" + "remove_cat_2 = True" ] }, { @@ -44,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "e15206a7-6639-40bb-9942-f920085f53b4", "metadata": {}, "outputs": [], @@ -53,16 +55,16 @@ "waterschap = 'Scheldestromen'\n", "waterschap2 = 'Scheldestromen'\n", "\n", - "data_path = f\"../projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", + "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", "\n", "# Waterschaps boundaries\n", - "grens_path = \"../projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", + "grens_path = \"/DATAFOLDER/projects/4750_30/Data_overig/Waterschapsgrenzen/Waterschapsgrenzen.geojson\"\n", "# Hoofdwatersysteem boundaries\n", - "hws_path = \"../projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", + "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = f\"../projects/4750_30/Data_overig/HWS/hws_buffer_Scheldestromen.gpkg\"\n", + "buffer_path = r\"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_Scheldestromen.gpkg\"\n", "# Output folder\n", - "output_folder = f\"./Waterschappen/{waterschap}\"" + "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] }, { @@ -75,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", "metadata": {}, "outputs": [], @@ -88,6 +90,7 @@ " 'duikersifonhevel',\n", " 'peilgebied', \n", " 'streefpeil',\n", + " 'aggregation_area',\n", " ])\n", "Scheldestromen['peilgebied'] = Scheldestromen['peilgebied'].to_crs('EPSG:28992')\n", "\n", @@ -107,14 +110,193 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "5fcd4cc6-3c75-462f-af3e-7693c9c5265f", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "Scheldestromen['peilgebied'].globalid.is_unique" ] }, + { + "cell_type": "code", + "execution_count": 5, + "id": "afc99001-f0fd-4433-9799-72bb34966673", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
codenen3610idglobalidgeometry
0GPG1398_dummy_id_0dummy_nen3610id_peilgebied_0dummy_globalid_peilgebied_0MULTIPOLYGON Z (((39197.262 373523.013 -100000...
1GPG1007_dummy_id_1dummy_nen3610id_peilgebied_1dummy_globalid_peilgebied_1MULTIPOLYGON Z (((15595.339 368349.545 0.000, ...
2GPG803_dummy_id_2dummy_nen3610id_peilgebied_2dummy_globalid_peilgebied_2MULTIPOLYGON Z (((36391.858 373284.887 0.000, ...
3GPG911_dummy_id_3dummy_nen3610id_peilgebied_3dummy_globalid_peilgebied_3MULTIPOLYGON Z (((40712.442 373620.190 0.000, ...
4GPG842_dummy_id_4dummy_nen3610id_peilgebied_4dummy_globalid_peilgebied_4MULTIPOLYGON Z (((33494.859 370960.048 0.000, ...
...............
847GPG1333_dummy_id_847dummy_nen3610id_peilgebied_847dummy_globalid_peilgebied_847MULTIPOLYGON Z (((56639.793 391068.875 0.000, ...
848GPG1335_dummy_id_848dummy_nen3610id_peilgebied_848dummy_globalid_peilgebied_848MULTIPOLYGON Z (((57784.953 391743.719 0.000, ...
849GPG457_dummy_id_849dummy_nen3610id_peilgebied_849dummy_globalid_peilgebied_849MULTIPOLYGON Z (((22309.586 393311.125 0.000, ...
850GPG808_dummy_id_850dummy_nen3610id_peilgebied_850dummy_globalid_peilgebied_850MULTIPOLYGON Z (((58756.058 366653.895 0.000, ...
851GPG1004_dummy_id_851dummy_nen3610id_peilgebied_851dummy_globalid_peilgebied_851MULTIPOLYGON Z (((56100.529 364330.493 0.000, ...
\n", + "

852 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " code nen3610id \\\n", + "0 GPG1398_dummy_id_0 dummy_nen3610id_peilgebied_0 \n", + "1 GPG1007_dummy_id_1 dummy_nen3610id_peilgebied_1 \n", + "2 GPG803_dummy_id_2 dummy_nen3610id_peilgebied_2 \n", + "3 GPG911_dummy_id_3 dummy_nen3610id_peilgebied_3 \n", + "4 GPG842_dummy_id_4 dummy_nen3610id_peilgebied_4 \n", + ".. ... ... \n", + "847 GPG1333_dummy_id_847 dummy_nen3610id_peilgebied_847 \n", + "848 GPG1335_dummy_id_848 dummy_nen3610id_peilgebied_848 \n", + "849 GPG457_dummy_id_849 dummy_nen3610id_peilgebied_849 \n", + "850 GPG808_dummy_id_850 dummy_nen3610id_peilgebied_850 \n", + "851 GPG1004_dummy_id_851 dummy_nen3610id_peilgebied_851 \n", + "\n", + " globalid \\\n", + "0 dummy_globalid_peilgebied_0 \n", + "1 dummy_globalid_peilgebied_1 \n", + "2 dummy_globalid_peilgebied_2 \n", + "3 dummy_globalid_peilgebied_3 \n", + "4 dummy_globalid_peilgebied_4 \n", + ".. ... \n", + "847 dummy_globalid_peilgebied_847 \n", + "848 dummy_globalid_peilgebied_848 \n", + "849 dummy_globalid_peilgebied_849 \n", + "850 dummy_globalid_peilgebied_850 \n", + "851 dummy_globalid_peilgebied_851 \n", + "\n", + " geometry \n", + "0 MULTIPOLYGON Z (((39197.262 373523.013 -100000... \n", + "1 MULTIPOLYGON Z (((15595.339 368349.545 0.000, ... \n", + "2 MULTIPOLYGON Z (((36391.858 373284.887 0.000, ... \n", + "3 MULTIPOLYGON Z (((40712.442 373620.190 0.000, ... \n", + "4 MULTIPOLYGON Z (((33494.859 370960.048 0.000, ... \n", + ".. ... \n", + "847 MULTIPOLYGON Z (((56639.793 391068.875 0.000, ... \n", + "848 MULTIPOLYGON Z (((57784.953 391743.719 0.000, ... \n", + "849 MULTIPOLYGON Z (((22309.586 393311.125 0.000, ... \n", + "850 MULTIPOLYGON Z (((58756.058 366653.895 0.000, ... \n", + "851 MULTIPOLYGON Z (((56100.529 364330.493 0.000, ... \n", + "\n", + "[852 rows x 4 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Scheldestromen['peilgebied']" + ] + }, { "cell_type": "markdown", "id": "3e2faf6a-d645-44c7-8882-f6e613e73410", @@ -125,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "0d804374-1484-42d0-88a2-f6bec404349b", "metadata": {}, "outputs": [], @@ -151,10 +333,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "a15df030-9a47-47bb-a09c-dd4b5dda65e2", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of overlapping shapes without filter: 203\n", + "Number of overlapping shapes with filter: 0\n" + ] + } + ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(Scheldestromen['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", @@ -185,10 +376,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "bfc95c53-1282-479b-8348-ad54085a49f6", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n", + "yes\n" + ] + } + ], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", @@ -196,20 +396,21 @@ "for index, row in Scheldestromen['peilgebied'].iterrows():\n", " \n", " if row.nen3610id == 'dummy_nen3610id_peilgebied_549':\n", + " print(True)\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'GPG437':\n", + " elif 'GPG437' in row.code:\n", " print('yes')\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'dummy_code_nhws_3': \n", + " elif 'dummy_code_nhws_3'in row.code: \n", " peilgebieden_cat.append(1)\n", - " print('yes')\n", + " print('yes2')\n", " else:\n", " peilgebieden_cat.append(0)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "cc35d69e-9ce6-423b-abda-0b8314a5ec22", "metadata": {}, "outputs": [], @@ -218,6 +419,27 @@ "Scheldestromen['peilgebied']['peilgebied_cat'] = peilgebieden_cat" ] }, + { + "cell_type": "code", + "execution_count": 10, + "id": "4cfae028-3cac-4eaf-bb0e-282de2469448", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Scheldestromen['peilgebied']['peilgebied_cat'].unique()" + ] + }, { "cell_type": "markdown", "id": "43ed5595-4741-4dc9-9c37-4ba790190281", @@ -228,7 +450,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "b666fddd-e1b8-4e66-9a88-d87fb0df8749", "metadata": {}, "outputs": [], @@ -246,7 +468,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "55368969-6fce-4597-a6a8-128f5a54bcb8", "metadata": {}, "outputs": [], @@ -271,15 +493,15 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "6c6a1883-1647-493a-acad-411404f1daec", "metadata": {}, "outputs": [], "source": [ - "# Create buffer polygon\n", - "buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how='intersection', keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how='difference', keep_geom_type=True)\n", - "buffer_polygon = gpd.overlay(buffer_polygon, Scheldestromen['peilgebied'], how='difference', keep_geom_type=True)" + "# # Create buffer polygon\n", + "# buffer_polygon = gpd.overlay(gdf_buffer, gdf_grens, how='intersection', keep_geom_type=True)\n", + "# buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how='difference', keep_geom_type=True)\n", + "# buffer_polygon = gpd.overlay(buffer_polygon, Scheldestromen['peilgebied'], how='difference', keep_geom_type=True)" ] }, { @@ -294,37 +516,48 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "39a1211a-bb76-4c4f-ac7e-2405d2729705", "metadata": {}, "outputs": [], "source": [ - "# update peilgebied dict key\n", - "buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", - "buffer_polygon['peilgebied_cat'] = 2\n", + "# # update peilgebied dict key\n", + "# buffer_polygon['globalid'] = 'dummy_globalid_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['code'] = 'dummy_code_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['nen3610id'] = 'dummy_nen3610id_nhws_buffer_' + buffer_polygon.index.astype(str)\n", + "# buffer_polygon['peilgebied_cat'] = 2\n", "\n", - "buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "# buffer_polygon = buffer_polygon[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", "\n", - "Scheldestromen['peilgebied'] = pd.concat([buffer_polygon, Scheldestromen['peilgebied']])" + "# Scheldestromen['peilgebied'] = pd.concat([buffer_polygon, Scheldestromen['peilgebied']])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "77237ffe-7099-4872-8f1f-4ccc0cd84b6c", "metadata": {}, "outputs": [], "source": [ - "# Create boezem streefpeil layer\n", - "streefpeil_buffer = pd.DataFrame()\n", - "streefpeil_buffer['waterhoogte'] = [np.nan]\n", - "streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", - "streefpeil_buffer['geometry'] = [None]\n", + "# # Create boezem streefpeil layer\n", + "# streefpeil_buffer = pd.DataFrame()\n", + "# streefpeil_buffer['waterhoogte'] = [np.nan]\n", + "# streefpeil_buffer['globalid'] = ['dummy_globalid_nhws_buffer_1']\n", + "# streefpeil_buffer['geometry'] = [None]\n", "\n", - "Scheldestromen['streefpeil'] = pd.concat([streefpeil_buffer, Scheldestromen['streefpeil']])\n", - "Scheldestromen['streefpeil'] = gpd.GeoDataFrame(Scheldestromen['streefpeil'])" + "# Scheldestromen['streefpeil'] = pd.concat([streefpeil_buffer, Scheldestromen['streefpeil']])\n", + "# Scheldestromen['streefpeil'] = gpd.GeoDataFrame(Scheldestromen['streefpeil'])" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "4eba78fb-2f12-4ea8-9558-d0f97f94f654", + "metadata": {}, + "outputs": [], + "source": [ + "if remove_cat_2:\n", + " Scheldestromen['peilgebied'] = Scheldestromen['peilgebied'].loc[Scheldestromen['peilgebied'].peilgebied_cat !=2]" ] }, { @@ -337,17 +570,79 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "17796202-2f3c-4175-8409-7c2294b76703", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stuw\n", + "gemaal\n", + "hydroobject\n", + "duikersifonhevel\n", + "peilgebied\n", + "streefpeil\n", + "aggregation_area\n" + ] + } + ], "source": [ "for key in Scheldestromen.keys(): \n", " print(key)\n", " Scheldestromen[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c3c9d9ed-1be2-49f8-a0fa-0b8804a37de2", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7e07fd19-28ae-47f6-b71e-a4c0c49e6b8b", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8d0cfb75-8c87-40f7-b15b-47e4efdbc5db", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4957fa79-db9d-4de6-a416-6f94052e98db", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "88882c7e-be83-499f-b1a9-12c9d8eb65ce", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "065612a7-7d42-4d19-9a26-264811713efd", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { From 256b933b9b947b95dc05d2063e46c68a14d153aa Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Wed, 7 Aug 2024 13:14:03 +0200 Subject: [PATCH 09/25] Update post-process_rijnland.ipynb --- .../postprocess_data/post-process_rijnland.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb index 498ebdf..645d9f3 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb @@ -35,7 +35,7 @@ "%load_ext autoreload\n", "%autoreload 2\n", "\n", - "remove_cat_2 = True\n" + "remove_cat_2 = True" ] }, { From 765752381b6307c9dd71179b3d313e7044788615 Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Wed, 7 Aug 2024 13:14:57 +0200 Subject: [PATCH 10/25] Fix ruff issues in the preprocessing --- .../preprocess_data/AmstelGooienVecht.ipynb | 71 ++++++++++--------- .../preprocess_data/Delfland.ipynb | 15 ++-- .../preprocess_data/HHNK.ipynb | 23 +++--- .../preprocess_data/HHSK.ipynb | 22 +++--- .../preprocess_data/Hollandse_Delta.ipynb | 16 ++--- .../preprocess_data/Rijnland.ipynb | 11 ++- .../preprocess_data/Rivierenland.ipynb | 20 +++--- .../preprocess_data/Scheldestromen.ipynb | 10 +-- .../preprocess_data/Wetterskip.ipynb | 15 ++-- .../preprocess_data/Zuiderzeeland.ipynb | 26 +++---- 10 files changed, 100 insertions(+), 129 deletions(-) diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb index b1ffeb6..e2d11ac 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb @@ -8,14 +8,11 @@ "outputs": [], "source": [ "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", "import os\n", - "import fiona\n", - "import shapely\n", - "from shapely import wkt" + "\n", + "import geopandas as gpd\n", + "import numpy as np\n", + "import pandas as pd\n" ] }, { @@ -61,22 +58,22 @@ "metadata": {}, "outputs": [], "source": [ - "#AVG has delivered all data in CSV format. Load it in manually with some data mutations\n", - "AVG = {}\n", - "variables = ['stuw', 'gemaal', 'afsluitmiddel', 'duikersifonhevel', 'hydroobject']#, 'peilgebiedpraktijk', 'peilafwijkinggebied']\n", - "for variable in variables:\n", - " path_variable = os.path.join(path_AVG, variable + '.csv')\n", - " df_var = pd.read_csv(path_variable, delimiter=';')\n", - " geom_col = df_var.keys()[-1] #retrieve the column name\n", + "# #AVG has delivered all data in CSV format. Load it in manually with some data mutations\n", + "# AVG = {}\n", + "# variables = ['stuw', 'gemaal', 'afsluitmiddel', 'duikersifonhevel', 'hydroobject']#, 'peilgebiedpraktijk', 'peilafwijkinggebied']\n", + "# for variable in variables:\n", + "# path_variable = os.path.join(path_AVG, variable + '.csv')\n", + "# df_var = pd.read_csv(path_variable, delimiter=';')\n", + "# geom_col = df_var.keys()[-1] #retrieve the column name\n", " \n", - " if not 'geometrie' in geom_col:\n", - " raise ValueError('No \"geometry\" string found in the last column of the dataframe. Check for existence') \n", + "# if not 'geometrie' in geom_col:\n", + "# raise ValueError('No \"geometry\" string found in the last column of the dataframe. Check for existence') \n", " \n", - " df_var['geometry'] = df_var[geom_col].apply(lambda x: wkt.loads(x.split(';')[-1])) \n", - " AVG[variable] = df_var\n", + "# df_var['geometry'] = df_var[geom_col].apply(lambda x: wkt.loads(x.split(';')[-1])) \n", + "# AVG[variable] = df_var\n", " \n", - "#there is one last gpkg which contains the streefpeilen (and peilgebieden)\n", - "AVG['peilgebied'] = gpd.read_file(os.path.join(path_AVG, 'vigerende_peilgebieden.gpkg'))" + "# #there is one last gpkg which contains the streefpeilen (and peilgebieden)\n", + "# AVG['peilgebied'] = gpd.read_file(os.path.join(path_AVG, 'vigerende_peilgebieden.gpkg'))" ] }, { @@ -86,18 +83,28 @@ "metadata": {}, "outputs": [], "source": [ - "AVG['peilgebied']['streefpeil'] = np.nan\n", - "AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['GPGZMRPL'])\n", - "AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['IWS_GPGVASTP'])\n", - "AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['IWS_GPGONDP'])\n", + "# AVG['peilgebied']['streefpeil'] = np.nan\n", + "# AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['GPGZMRPL'])\n", + "# AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['IWS_GPGVASTP'])\n", + "# AVG['peilgebied']['streefpeil'] = AVG['peilgebied']['streefpeil'].fillna(value=AVG['peilgebied']['IWS_GPGONDP'])\n", "\n", "\n", - "print('Number of missing streefpeilen = ', len(AVG['peilgebied']['streefpeil'].loc[AVG['peilgebied']['streefpeil'].isna()]))\n", + "# print('Number of missing streefpeilen = ', len(AVG['peilgebied']['streefpeil'].loc[AVG['peilgebied']['streefpeil'].isna()]))\n", "\n", - "fig, ax = plt.subplots()\n", - "AVG['peilgebied'].geometry.plot(ax=ax, color='cornflowerblue')\n", - "AVG['peilgebied'].loc[AVG['peilgebied']['streefpeil'].isna()].geometry.plot(ax=ax, color='red')\n", - "ax.legend()" + "# fig, ax = plt.subplots()\n", + "# AVG['peilgebied'].geometry.plot(ax=ax, color='cornflowerblue')\n", + "# AVG['peilgebied'].loc[AVG['peilgebied']['streefpeil'].isna()].geometry.plot(ax=ax, color='red')\n", + "# ax.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6a63463e", + "metadata": {}, + "outputs": [], + "source": [ + "AVG = {}" ] }, { @@ -166,9 +173,9 @@ "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('fvoer|nderbemaling|f-|oodpomp'), 'func_afvoer'] = True\n", "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('anvoergemaal|pmaling|an-|p-|pvoer'), 'func_aanvoer'] = True\n", "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('irculatie'), 'func_circulatie'] = True\n", - "AVG['gemaal'].loc[(AVG['gemaal'].func_afvoer == False) &\n", - " (AVG['gemaal'].func_aanvoer == False) &\n", - " (AVG['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + "AVG['gemaal'].loc[(AVG['gemaal'].func_afvoer is False) &\n", + " (AVG['gemaal'].func_aanvoer is False) &\n", + " (AVG['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb index 49b7a6c..e0e3977 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb @@ -8,13 +8,10 @@ "outputs": [], "source": [ "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", "import os\n", - "import fiona\n", - "import shapely" + "\n", + "import geopandas as gpd\n", + "import pandas as pd" ] }, { @@ -102,9 +99,9 @@ "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Onbekend|Onderbemaling|Afvoergemaal|Af-'), 'func_afvoer'] = True\n", "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Opmaling|Aanvoer'), 'func_aanvoer'] = True\n", "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Overig|circulatie'), 'func_circulatie'] = True\n", - "Delfland['gemaal'].loc[(Delfland['gemaal'].func_afvoer == False) &\n", - " (Delfland['gemaal'].func_aanvoer == False) &\n", - " (Delfland['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown\n", + "Delfland['gemaal'].loc[(Delfland['gemaal'].func_afvoer is False) &\n", + " (Delfland['gemaal'].func_aanvoer is False) &\n", + " (Delfland['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown\n", "\n", "Delfland['gemaal'] = Delfland['gemaal'][['GLOBALID', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", "Delfland['gemaal'] = Delfland['gemaal'].rename(columns={'GLOBALID': 'globalid'})\n", diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb index 4f15f04..cc20f06 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb @@ -8,13 +8,13 @@ "outputs": [], "source": [ "#import packages and functions\n", + "import geopandas as gpd\n", "import numpy as np\n", - "import matplotlib.pyplot as plt\n", "import pandas as pd\n", - "import geopandas as gpd\n", - "import os\n", - "import fiona\n", - "import shapely" + "from general_functions import *\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2" ] }, { @@ -23,12 +23,7 @@ "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", "metadata": {}, "outputs": [], - "source": [ - "%load_ext autoreload\n", - "%autoreload 2\n", - "\n", - "from general_functions import *" - ] + "source": [] }, { "cell_type": "markdown", @@ -119,9 +114,9 @@ "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(aanvoer_values), 'func_aanvoer'] = True\n", "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(circulatie_values), 'func_circulatie'] = True\n", "\n", - "HHNK['gemaal'].loc[(HHNK['gemaal'].func_afvoer == False) &\n", - " (HHNK['gemaal'].func_aanvoer == False) &\n", - " (HHNK['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + "HHNK['gemaal'].loc[(HHNK['gemaal'].func_afvoer is False) &\n", + " (HHNK['gemaal'].func_aanvoer is False) &\n", + " (HHNK['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb index 1c814c3..d97c360 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb @@ -8,15 +8,11 @@ "outputs": [], "source": [ "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", "import os\n", - "import fiona\n", "\n", - "import shapely\n", - "from shapely.validation import make_valid\n" + "import geopandas as gpd\n", + "import numpy as np\n", + "import pandas as pd\n" ] }, { @@ -170,9 +166,9 @@ "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('2|4|5|6|7|99'), 'func_afvoer'] = True\n", "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('1|3|5|'), 'func_aanvoer'] = True\n", "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('8'), 'func_circulatie'] = True\n", - "HHSK['gemaal'].loc[(HHSK['gemaal'].func_afvoer == False) &\n", - " (HHSK['gemaal'].func_aanvoer == False) &\n", - " (HHSK['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + "HHSK['gemaal'].loc[(HHSK['gemaal'].func_afvoer is False) &\n", + " (HHSK['gemaal'].func_aanvoer is False) &\n", + " (HHSK['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" ] }, { @@ -378,9 +374,9 @@ "metadata": {}, "outputs": [], "source": [ - "# peilgebied = burn_in_peilgebieden(base_layer = streefpeilen_PG_v, \n", - "# overlay_layer = streefpeilen_PG_a,\n", - "# plot = True)" + "peilgebied = burn_in_peilgebieden(base_layer = streefpeilen_PG_v, \n", + " overlay_layer = streefpeilen_PG_a,\n", + " plot = True)" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb index 1f20b6e..c869d40 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb @@ -8,13 +8,11 @@ "outputs": [], "source": [ "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", "import os\n", - "import fiona\n", - "import shapely" + "\n", + "import geopandas as gpd\n", + "import numpy as np\n", + "import pandas as pd\n" ] }, { @@ -125,9 +123,9 @@ "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('f-|fvoer|nderbemaling'), 'func_afvoer'] = True\n", "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('anvoergemaal|pmaling'), 'func_aanvoer'] = True\n", "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('Doorspoel'), 'func_circulatie'] = True\n", - "HD['gemaal'].loc[(HD['gemaal'].func_afvoer == False) &\n", - " (HD['gemaal'].func_aanvoer == False) &\n", - " (HD['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + "HD['gemaal'].loc[(HD['gemaal'].func_afvoer is False) &\n", + " (HD['gemaal'].func_aanvoer is False) &\n", + " (HD['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb index e4dacd0..1230e05 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb @@ -8,15 +8,12 @@ "outputs": [], "source": [ "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", "import os\n", - "import fiona\n", "\n", - "import shapely\n", - "from shapely.validation import make_valid\n" + "import geopandas as gpd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb index 764cdbc..a181363 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb @@ -8,13 +8,12 @@ "outputs": [], "source": [ "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", "import os\n", - "import fiona\n", - "import shapely" + "\n", + "import geopandas as gpd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n" ] }, { @@ -177,9 +176,9 @@ "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Afvoer|Onbekend|Af-|Onderbemaling'), 'func_afvoer'] = True\n", "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Aanvoer|Opmaling'), 'func_aanvoer'] = True\n", "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Doorspoelgemaal'), 'func_circulatie'] = True\n", - "WSRL['gemaal'].loc[(WSRL['gemaal'].func_afvoer == False) &\n", - " (WSRL['gemaal'].func_aanvoer == False) &\n", - " (WSRL['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + "WSRL['gemaal'].loc[(WSRL['gemaal'].func_afvoer is False) &\n", + " (WSRL['gemaal'].func_aanvoer is False) &\n", + " (WSRL['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" ] }, { @@ -232,6 +231,7 @@ "def intersect_using_spatial_index(peilgebied_praktijk, peilgebied_afwijking, check):\n", " \"\"\"\n", " Conduct spatial intersection using spatial index for candidates GeoDataFrame to make queries faster.\n", + "\n", " Note, with this function, you can have multiple Polygons in the 'intersecting_gdf' and it will return all the points \n", " intersect with ANY of those geometries.\n", " \"\"\"\n", @@ -257,7 +257,7 @@ " peilgebied = overlapping_updated.append(intersection, ignore_index=True) #add the removed difference, but now only the intersected part of pg_afwijking\n", "\n", " \n", - " if check == True:\n", + " if check:\n", " peilgebied_praktijk.to_file('Checks/Rivierenland/peilgebied_praktijk.gpkg', driver='GPKG')\n", " peilgebied_afwijking.to_file('Checks/Rivierenland/peilgebied_afwijking.gpkg', driver='GPKG')\n", "\n", diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb index 8d348f9..7f170a8 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb @@ -8,15 +8,11 @@ "outputs": [], "source": [ "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", "import os\n", - "import fiona\n", "\n", - "import shapely\n", - "from shapely.validation import make_valid\n" + "import geopandas as gpd\n", + "import numpy as np\n", + "import pandas as pd" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb index c925755..6467fb2 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb @@ -8,15 +8,10 @@ "outputs": [], "source": [ "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", "import geopandas as gpd\n", - "import os\n", - "import fiona\n", - "import shapely\n", - "\n", + "import pandas as pd\n", "from general_functions import *\n", + "\n", "pd.set_option('display.max_columns', None)\n" ] }, @@ -158,9 +153,9 @@ "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Onbekend|Onderbemaling|Afvoergemaal'), 'func_afvoer'] = True\n", "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Opmaling|Aanvoer'), 'func_aanvoer'] = True\n", "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Overig|circulatie'), 'func_circulatie'] = True\n", - "Wetterskip['gemaal'].loc[(Wetterskip['gemaal'].func_afvoer == False) &\n", - " (Wetterskip['gemaal'].func_aanvoer == False) &\n", - " (Wetterskip['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown\n" + "Wetterskip['gemaal'].loc[(Wetterskip['gemaal'].func_afvoer is False) &\n", + " (Wetterskip['gemaal'].func_aanvoer is False) &\n", + " (Wetterskip['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown\n" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb index aa4b1b7..8867c9e 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb @@ -8,23 +8,13 @@ "outputs": [], "source": [ "#import packages and functions\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "import geopandas as gpd\n", "import os\n", + "\n", "import fiona\n", - "import shapely" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", - "metadata": {}, - "outputs": [], - "source": [ - "from general_functions import *" + "import geopandas as gpd\n", + "import numpy as np\n", + "import pandas as pd\n", + "from general_functions import *\n" ] }, { @@ -148,9 +138,9 @@ "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('af-|afvoer|onderbemaling'), 'func_afvoer'] = True\n", "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('aanvoergemaal|opmaling'), 'func_aanvoer'] = True\n", "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('circulatie'), 'func_circulatie'] = True\n", - "Zuiderzeeland['gemaal'].loc[(Zuiderzeeland['gemaal'].func_afvoer == False) &\n", - " (Zuiderzeeland['gemaal'].func_aanvoer == False) &\n", - " (Zuiderzeeland['gemaal'].func_circulatie == False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + "Zuiderzeeland['gemaal'].loc[(Zuiderzeeland['gemaal'].func_afvoer is False) &\n", + " (Zuiderzeeland['gemaal'].func_aanvoer is False) &\n", + " (Zuiderzeeland['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" ] }, { From 0cf903d2581dccae538c4b02390cb735e5cd15ba Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Wed, 7 Aug 2024 13:39:16 +0200 Subject: [PATCH 11/25] Notebooks added by removed them from the gitignore Fixed ruff simultaneously --- .gitignore | 2 +- .../01_parse_crossings.ipynb | 1675 +++++++++++ .../01_test_parse_crossings.ipynb | 550 ++++ .../01b_ad_krw_to_peilgebieden.ipynb | 104 + .../02_crossings_to_ribasim_notebook.ipynb | 1512 ++++++++++ src/peilbeheerst_model/03_test_outlets.ipynb | 2666 +++++++++++++++++ src/peilbeheerst_model/compute_voronoi.ipynb | 355 +++ 7 files changed, 6863 insertions(+), 1 deletion(-) create mode 100644 src/peilbeheerst_model/01_parse_crossings.ipynb create mode 100644 src/peilbeheerst_model/01_test_parse_crossings.ipynb create mode 100644 src/peilbeheerst_model/01b_ad_krw_to_peilgebieden.ipynb create mode 100644 src/peilbeheerst_model/02_crossings_to_ribasim_notebook.ipynb create mode 100644 src/peilbeheerst_model/03_test_outlets.ipynb create mode 100644 src/peilbeheerst_model/compute_voronoi.ipynb diff --git a/.gitignore b/.gitignore index e5d1047..2d43fec 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,7 @@ src/ribasim_nl/tests/temp/ src/peilbeheerst_model/tests/temp/ src/peilbeheerst_model/*.html -src/peilbeheerst_model/*.ipynb +# src/peilbeheerst_model/*.ipynb src/peilbeheerst_model/*.code-workspace src/peilbeheerst_model/.vscode diff --git a/src/peilbeheerst_model/01_parse_crossings.ipynb b/src/peilbeheerst_model/01_parse_crossings.ipynb new file mode 100644 index 0000000..2e52420 --- /dev/null +++ b/src/peilbeheerst_model/01_parse_crossings.ipynb @@ -0,0 +1,1675 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 14, + "id": "bd2ec4f5-5df5-4c1e-a010-00e47c676d17", + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import pathlib\n", + "\n", + "import geopandas as gpd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "from IPython.core.display import HTML\n", + "from peilbeheerst_model import ParseCrossings\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "9340d65c-0872-43ae-ada8-4a4e3ab21a9a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Function init:

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
gpkg_pathoutput_pathsearch_radius_structureagg_peilgebieden_layeragg_peilgebieden_columnkrw_pathkrw_column_idkrw_column_namekrw_min_overlap
HHNK../../../../Data_postprocessed/Waterschappen/H...../../../../Data_crossings/HHNK/hhnk_crossings...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
Delfland../../../../Data_postprocessed/Waterschappen/D...../../../../Data_crossings/Delfland/delfland_c...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
Hollandse Delta../../../../Data_postprocessed/Waterschappen/H...../../../../Data_crossings/Hollandse_Delta/hd_...300aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
AmstelGooienVecht../../../../Data_postprocessed/Waterschappen/A...../../../../Data_crossings/AmstelGooienVecht/a...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
HHSK../../../../Data_postprocessed/Waterschappen/H...../../../../Data_crossings/HHSK/hhsk_crossings...300aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
Rijnland../../../../Data_postprocessed/Waterschappen/R...../../../../Data_crossings/Rijnland/rijnland_c...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
Scheldestromen../../../../Data_postprocessed/Waterschappen/S...../../../../Data_crossings/Scheldestromen/sche...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
Wetterskip../../../../Data_postprocessed/Waterschappen/W...../../../../Data_crossings/Wetterskip/wettersk...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
WSRL../../../../Data_postprocessed/Waterschappen/W...../../../../Data_crossings/WSRL/wsrl_crossings...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
Zuiderzeeland../../../../Data_postprocessed/Waterschappen/Z...../../../../Data_crossings/Zuiderzeeland/zzl_c...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
\n", + "
" + ], + "text/plain": [ + " gpkg_path \\\n", + "HHNK ../../../../Data_postprocessed/Waterschappen/H... \n", + "Delfland ../../../../Data_postprocessed/Waterschappen/D... \n", + "Hollandse Delta ../../../../Data_postprocessed/Waterschappen/H... \n", + "AmstelGooienVecht ../../../../Data_postprocessed/Waterschappen/A... \n", + "HHSK ../../../../Data_postprocessed/Waterschappen/H... \n", + "Rijnland ../../../../Data_postprocessed/Waterschappen/R... \n", + "Scheldestromen ../../../../Data_postprocessed/Waterschappen/S... \n", + "Wetterskip ../../../../Data_postprocessed/Waterschappen/W... \n", + "WSRL ../../../../Data_postprocessed/Waterschappen/W... \n", + "Zuiderzeeland ../../../../Data_postprocessed/Waterschappen/Z... \n", + "\n", + " output_path \\\n", + "HHNK ../../../../Data_crossings/HHNK/hhnk_crossings... \n", + "Delfland ../../../../Data_crossings/Delfland/delfland_c... \n", + "Hollandse Delta ../../../../Data_crossings/Hollandse_Delta/hd_... \n", + "AmstelGooienVecht ../../../../Data_crossings/AmstelGooienVecht/a... \n", + "HHSK ../../../../Data_crossings/HHSK/hhsk_crossings... \n", + "Rijnland ../../../../Data_crossings/Rijnland/rijnland_c... \n", + "Scheldestromen ../../../../Data_crossings/Scheldestromen/sche... \n", + "Wetterskip ../../../../Data_crossings/Wetterskip/wettersk... \n", + "WSRL ../../../../Data_crossings/WSRL/wsrl_crossings... \n", + "Zuiderzeeland ../../../../Data_crossings/Zuiderzeeland/zzl_c... \n", + "\n", + " search_radius_structure agg_peilgebieden_layer \\\n", + "HHNK 60 aggregation_area \n", + "Delfland 60 aggregation_area \n", + "Hollandse Delta 300 aggregation_area \n", + "AmstelGooienVecht 60 aggregation_area \n", + "HHSK 300 aggregation_area \n", + "Rijnland 60 aggregation_area \n", + "Scheldestromen 60 aggregation_area \n", + "Wetterskip 60 aggregation_area \n", + "WSRL 60 aggregation_area \n", + "Zuiderzeeland 60 aggregation_area \n", + "\n", + " agg_peilgebieden_column \\\n", + "HHNK code \n", + "Delfland code \n", + "Hollandse Delta code \n", + "AmstelGooienVecht code \n", + "HHSK code \n", + "Rijnland code \n", + "Scheldestromen code \n", + "Wetterskip code \n", + "WSRL code \n", + "Zuiderzeeland code \n", + "\n", + " krw_path \\\n", + "HHNK ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", + "Delfland ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", + "Hollandse Delta ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", + "AmstelGooienVecht ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", + "HHSK ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", + "Rijnland ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", + "Scheldestromen ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", + "Wetterskip ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", + "WSRL ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", + "Zuiderzeeland ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", + "\n", + " krw_column_id krw_column_name krw_min_overlap \n", + "HHNK owmident owmnaam 0.025 \n", + "Delfland owmident owmnaam 0.025 \n", + "Hollandse Delta owmident owmnaam 0.025 \n", + "AmstelGooienVecht owmident owmnaam 0.025 \n", + "HHSK owmident owmnaam 0.025 \n", + "Rijnland owmident owmnaam 0.025 \n", + "Scheldestromen owmident owmnaam 0.025 \n", + "Wetterskip owmident owmnaam 0.025 \n", + "WSRL owmident owmnaam 0.025 \n", + "Zuiderzeeland owmident owmnaam 0.025 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "

Function find_crossings_with_peilgebieden:

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filterlayergroup_stacked
HHNKduikersifonhevelTrue
DelflandduikersifonhevelTrue
Hollandse DeltaduikersifonhevelTrue
AmstelGooienVechtduikersifonhevelTrue
HHSKduikersifonhevelTrue
RijnlandduikersifonhevelTrue
ScheldestromenduikersifonhevelTrue
WetterskipduikersifonhevelTrue
WSRLduikersifonhevelTrue
ZuiderzeelandduikersifonhevelTrue
\n", + "
" + ], + "text/plain": [ + " filterlayer group_stacked\n", + "HHNK duikersifonhevel True\n", + "Delfland duikersifonhevel True\n", + "Hollandse Delta duikersifonhevel True\n", + "AmstelGooienVecht duikersifonhevel True\n", + "HHSK duikersifonhevel True\n", + "Rijnland duikersifonhevel True\n", + "Scheldestromen duikersifonhevel True\n", + "Wetterskip duikersifonhevel True\n", + "WSRL duikersifonhevel True\n", + "Zuiderzeeland duikersifonhevel True" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "with open(\"waterschappen.json\") as f:\n", + " waterschap_data = json.load(f)\n", + "\n", + "print_df = {}\n", + "for waterschap, waterschap_struct in waterschap_data.items():\n", + " for funcname, func_args in waterschap_struct.items():\n", + " if funcname not in print_df:\n", + " print_df[funcname] = []\n", + " print_df[funcname].append(pd.Series(func_args, name=waterschap))\n", + "\n", + "for funcname, df in print_df.items():\n", + " display(HTML(f\"

Function {funcname}:

\"))\n", + " display(pd.DataFrame(df))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "816b0266-4eb7-4465-8439-316d44efd5db", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "HHNK...\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "02183bcd33bd4c9185d763aeb620c302", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Snap geometries in 'hydroobject': 0%| | 0/190044 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
in_useagg_links_in_useagg_areas_in_use
HHNK854653265326
Delfland40802916410
Hollandse Delta313917891789
AmstelGooienVecht1476676670
HHSK1247492453
Rijnland540528331005
Scheldestromen17131172372
Wetterskip12912100612671
WSRL21211611657
Zuiderzeeland1892554527
\n", + "" + ], + "text/plain": [ + " in_use agg_links_in_use agg_areas_in_use\n", + "HHNK 8546 5326 5326\n", + "Delfland 4080 2916 410\n", + "Hollandse Delta 3139 1789 1789\n", + "AmstelGooienVecht 1476 676 670\n", + "HHSK 1247 492 453\n", + "Rijnland 5405 2833 1005\n", + "Scheldestromen 1713 1172 372\n", + "Wetterskip 12912 10061 2671\n", + "WSRL 2121 1611 657\n", + "Zuiderzeeland 1892 554 527" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
BasinsEdgesPeilgebieden
HHNK223106522649
Delfland105820283
Hollandse Delta7833578785
AmstelGooienVecht2281340228
HHSK156906157
Rijnland2852010542
Scheldestromen190744294
Wetterskip94853422158
WSRL1291314446
Zuiderzeeland2891054289
\n", + "
" + ], + "text/plain": [ + " Basins Edges Peilgebieden\n", + "HHNK 223 10652 2649\n", + "Delfland 105 820 283\n", + "Hollandse Delta 783 3578 785\n", + "AmstelGooienVecht 228 1340 228\n", + "HHSK 156 906 157\n", + "Rijnland 285 2010 542\n", + "Scheldestromen 190 744 294\n", + "Wetterskip 948 5342 2158\n", + "WSRL 129 1314 446\n", + "Zuiderzeeland 289 1054 289" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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UAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuS/NQ6vz583r66adVqFAhBQQEqHDhwnruueeUnJzslDEzjRgxQhEREQoICFCdOnW0Y8cOr+UkJCSob9++yp07t7Jly6YWLVro0KFDXmViYmIUGRmpoKAgBQUFKTIyUidPnkzrTQIAAAAAAEAaS/NQasyYMXrzzTc1ZcoU7dy5U2PHjtXLL7+syZMnO2XGjh2r8ePHa8qUKdq0aZPCwsJUv359xcXFOWX69++vhQsXat68eVq9erVOnTqlZs2aKSkpySnTsWNHbd26VUuXLtXSpUu1detWRUZGpvUmAQAAAAAAII15zMzScoHNmjVTaGio3nrrLWdamzZtlDVrVr3zzjsyM0VERKh///4aPHiwpAutokJDQzVmzBj16tVLsbGxypMnj9555x21b99ekvTHH38of/78WrJkiRo2bKidO3eqZMmSWr9+vapWrSpJWr9+vapVq6Zdu3apWLFil1XfNN78m0Kdb793ZT0r7irvynoAAAAAAEDa8ng8/1rGP61XWrNmTb355pvas2ePihYtqm3btmn16tWaOHGiJGnfvn2KiopSgwYNnNdkzpxZtWvX1tq1a9WrVy9t2bJF586d8yoTERGhUqVKae3atWrYsKHWrVunoKAgJ5CSpDvvvFNBQUFau3btZYdSPO53/WLfAAAAAACQPuXIkeNfy6R5KDV48GDFxsaqePHi8vPzU1JSkl544QV16NBBkhQVFSVJCg0N9XpdaGio9u/f75TJlCnTRRsQGhrqvD4qKkohISEXrT8kJMQpczmCg4Mvuyzcxb4BAAAAAODGleah1Pvvv693331X7733nu64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w4YN0yOPPKJNmzbp5ZdfVu/evTVs2DBJBFNpwcy0du1ajR07Vv3795dEMHWz8Pf3l3ShT6nGjRvrt99+0+jRozV//nydOXPGx7W7PhBKwXUnT57Ufffdp06dOkmS8uTJoxw5cih79uySLlwscYC+fvn5+emjjz5SgwYNFBsbqwceeEBly5ZVZGSkFixY4OvqIQ3t379fzz//vMaOHatBgwapXLly+vTTT1WgQAG9/fbbBFPXuXPnzsnMFBoaqscee0xBQUHq16+fdu3apQwZMtyUwVRUVJRKlSqlpUuXSrrQ31bWrFmdE8bUF11cgF1fUgKpwYMHq3379jpx4oTq16+vt99+W4888giP8t1gPB6Pli9frk2bNumhhx5Snz591LZtW02bNk3du3dX27ZttXjxYl9XM11LHUjt2rVL3377rb766istWbJEO3bsULNmzbRs2TKNHj1akmhN+h95PB61aNFCM2bM0Hvvvae+fftKunQwdTP+Pt/IPB6PFi1apAoVKui3337TI488otDQUA0bNkwffPABwZQkGeCyEydO2KhRo6xcuXLWt29f++abb6x69er266+/mpnZuXPn7MyZM075ffv2+aimuJTY2FirWbOmPf300860HTt22MMPP2yBgYH2ySefmJlZcnKyr6qIK5SUlHTJ6YmJifbss8/azz//bH/88YcVLVrUevfubYcPH7YmTZrYLbfcYk8++aTLtcWlpHzfzp075/w7MTHRq8xbb71ltWvXtjZt2tiuXbuc6T/88IPFx8e7V1kfSkpKsubNm1vu3Lnt66+/tgkTJli1atUuKpfyHp44ccLtKuIfrFmzxoKDg2358uVmduEz/vnnn9stt9xinTp1spMnT/q2gkgzCQkJ1rJlS/N4PNa4cWOvefHx8da7d28LDAy0jz76yEc1TL+++uorr9+H0aNHW506daxBgwYWExPjTD9y5Ij17dvXateubX/++acPanpjiomJsWnTplmePHns0UcfdaannIslJiZanz59vM6zkX4lJydbXFycVa9e3QYOHOg1r02bNhYeHm4zZ860U6dO+aiG1wdCKbjm0KFDTvB0/PhxGz9+vFWqVMmKFCliHo/HihQpYgUKFLD8+fNbRESEFSxY0CIiIqx48eJcGFxHTpw4Yfnz57eXX37Za/qPP/5o5cuXt8DAQPvwww99VDtc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uXJl69atm61bt85GjBhhbdq0sZYtWzrNFrkTc32IjY214OBg83g89thjj3nNSwmm7rrrLi7g0rGUE/vY2FgbPHiwValSxQYPHuwVTNWqVcsqVapkDRs2NH9/f/rduY6knPzOnz/fcuTIYc8995zzfTx69Ki9+OKLFhQUdFEwdaOLi4tzPsPjxo2zTJky2eTJk+3hhx+20NBQe/jhh+2LL76wo0ePWrt27axhw4Z28uRJH9caqc2fP99CQkKsYMGC9u2333rNe/zxx+2OO+6wsWPH2uHDh73mcf6QvqQcw86fP29xcXFWt25d69u3r912223WvXt3Z/6xY8esc+fONn36dPbxFdi5c6d5PB7r0qWLHTp0yJlerlw5W7hwoZn9X4iblJRkLVq0sPLly9tbb71lZ86cMbMLj/l7PB7r27cvYeC/2Ldvn40fP96rn8ZVq1ZZnjx5zOPx2KeffupVPjk52eLj423GjBnOUyNI344cOWKNGjWyXLlyWa9evbzmpQRTNWrUsPnz5/uohtc3Qimkqbi4OOdxvZUrV1rBggWtb9++tmLFCtu/f7+NHTvW7rnnHitRooSFhYVZrly5zOPxWKdOnezcuXM0u7+ObNy40YoUKWI1a9a0o0ePmpl3533BwcHWqFGjf+yrBdef1N+xlBP82NhYGzp0qFWuXNkrmPr2229t1KhR1rNnT9uxY4dP6ou/t3btWgsODrYZM2Zc1FIxpY+pXLly2fDhw31UQ3cdPHjQ6tata3PmzLHExEQ7ceKEPfbYY1a8eHErU6aMffLJJxYVFeWUHzNmjJUsWdLphBTXjy5dulimTJls9OjRFw2RPXDgQMuTJ4+9++67Pqod/ouU36ATJ06YmTnnEB999JH5+/tblSpVvMoPGzbMbr/9dlrRX4GU93j16tWWJUsW69y5s/MYXpkyZbwCkpSwKSkpyWrWrGmRkZGWlJTkLGPVqlX2008/ubwF6cv27dutaNGi1qBBA/vwww+95q1bt85y5sxpXbp0cVp4pn5/cWP56KOPrFatWlawYEFbv36917y1a9da48aNrV69ehf9roFQCmko9QVBSnPEL7/80goWLGj333+/152A77//3hYtWmQdOnSwu+66i04rfezvfhw3bdpkuXLlsjZt2jitCVLKRkVFcXcnnUnZd8uXL7chQ4ZY+/btbebMmXbmzBmL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nSUnJ1v9+vWtUqVK9sknnzhBPK1tfGP8+PHOv8+fP2+///67tW7d2mbPnm1mF/oZCgoKsgcffNDy589v7du3t02bNjmvSdl/BBXpz8KFCy0gIMCKFi1q4eHhFh4e7gygkuKjjz6ycuXK2b333kt/Yf/Ba6+9ZmFhYc75eYqUVu4rVqywgIAAa9q0qdfAD7h8v//+uxUsWNAiIyNt8eLFVqRIEQsPD7fg4GCbNm2a102Pe+65x1q3bu3D2uK/GjdunH355Zde01566SXr1q2bmZn99ttvVrhwYevYsaP179/f8uTJ49ViKqWDe/wzQilctcu9IEi5U50SaPy1w1K4Y8eOHdakSROnBVuKdevW2fbt2y0uLs7uuusu6969u5ldCKiyZMli2bJlu2goW1yfUi7ajh8/bps2bbJJkybZrFmz7JdffnFO8lu1amX+/v523333eb126NChVq1aNU5SfSxlH6YOgFeuXGnZs2e3qVOnWkJCgi1atMg8Ho+99tprZnZhFKv33nvPhg8fblOmTLnhR6nat2+fnTx50uLj4y0yMtKyZctmP//8s02ePNly5MhhX3zxhVP2zJkz1rhxYytcuLAtWrTIh7W+ua1evdr8/f2tY8eOzrRTp07Z119/bcePH7fNmzdb/vz5bdKkSWZ24XiUI0cOa968uVfLah7nSj9SwsPTp0/bE088YTNnzrT4+Hj74osvrGrVqlayZMmLWut8+umnXi178O/++p3o2bOnMxz97t27bdasWVajRg0rX768rVq1yszMli1bZrVr1+b7dBVSOpEfN26cVaxY0RYuXGhHjx611atXe32ek5KSLDEx0e6//34bPnw4YXo6lZycbE2aNLHAwECnRa/ZhXOL9evXW3x8vN1111320EMPmZnZrl27LHfu3JY5c2Z79tlnnWXg3xFK4YpdzQXBbbfdZp988omZ8eX0hb59+9orr7xiq1evtg4dOljNmjVt3rx5XmW+++47K1eunPPIxA8//GAPPfSQde7c2Xbu3OmLauMKpJxc/vTTT1avXj2rVKmS5cqVyzJnzmy33XabjRw50s6fP29Lly51Rj1avXq1ffHFFzZgwAC75ZZbbNu2bT7eCphdeDSgSJEizt3Wl19+2fr06WNmZgcOHLBbb73V+dvs5nrkIjEx0erUqWMREREWExNjZ8+etfbt21uGDBksS5YsXq0DUj8u0apVK/v11199Ve2b3unTp23evHlWoEABu//++53pKXeQn332WWvVqpXTiu2FF16wGjVqWJ8+fbhwTsfWr19v4eHhVqdOHWfEN7MLIWXNmjWtZMmSF7WYwtUZP368ffHFFzZ8+HArW7asPf3001atWjW799577dFHH7W2bdtaeHi4nThxwut1fL8uz/Hjx73+PnnypJUrV84aNGhwyfLnz5+3p59+2vLly2d79uxxo4q4Rs6fP2+dOnWyHDly2IoVK7zmff/991a6dGnn5snPP/9sLVq0sJdeeumG70IhrRFK4YpwQZD+vPvuu5Y5c2anM+QdO3bYfffdd1Ew9cknn1j27Nlt/fr1dvr0aRs+fLi1adOGZvTpQMpJ5datWy1Xrlz22GOP2bp16+zEiRP2888/W4MGDSxv3rz21FNPmdmFu9EtW7a0TJkyWalSpaxmzZq2detWX24CUtm5c6cVLlzYJk6caGZmDz30kPXo0cN+//13y5cvn/Xs2dMJ9z/88EN75ZVXbqoLix9++MEqVapkpUqVshMnTtjp06etT58+ljFjRudxr5T352YK7K53Z86csblz5zqP5qX2xBNPWN26dZ1WMq1atbL33nvP2Y830+f7RvLzzz9bvXr1LEOGDF6tDJKTk23NmjVWp04dCw8Pt2PHjvmwlulT6u/E1KlTLSIiwrZv324rV660Pn36WNGiRe3ll192bjZ98MEHVq9ePTt16pSvqpxu/fLLL5YzZ05r3ry5HT582HkPt2zZYgEBAV6PapmZzZ4923r37m158uS5KR6lvxmcP3/e7r///ouCqW3btlmePHns9ddfN7MLrXybN29+UYiJf0cohSvGBUH6MmzYMLvnnnvM7EKHe99++6399NNP1q5dO7vrrrvs/fffd8rWqVPHMmfObGXKlLHg4GB+TNOBlO/aDz/8YAEBATZy5MiLysTExFiHDh0sNDTUFi5c6EzftWuXnThxwk6ePOlWdXGZ2rZtaxUrVjQzs7feesvuvvtuy5s3r9OHQXJysiUmJlrv3r3tscceuyn6e0sdUOzcudOqVatmlSpVspiYGDtz5ozdf//9li1bNluzZo1TDr7115bRp06dsrlz51q+fPm8WkzNnDnTChcubJUrV7aSJUta8eLFnfMHWlenX8nJybZ3716rXbu23XrrrXbo0CGv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dnbw4EGvst9++6317NnTChYsaA0aNLCHHnqIGxnAZfjrNVRCQoLVqFHDvvjiCzt16pRFRER4BVKzZ8+mZZSLMgi4SpkyZfJ1FW4qycnJ8ng8OnPmjI4dO6bly5fr999/V2xsrJKSkvT7779rw4YNaty4sRo3bqw333xTkrR9+3a9+uqr+v7775U9e3blyJHDx1uCK+XxeBQQEKA//vhDFStW1MGDB3XHHXeoWbNmmjhxoiRp0aJF2rhxo28rin+UMWNGDR06VJ07d1ZUVJSeeeYZZ162bNnUp08fNWzYUL///ruOHj3qw5oCl/bll19q0KBB6tWrl+bOnStJ2rt3r8LDw9WlSxdt3LhRiYmJql69ur755hstWLBAQ4YM0cGDByVJfn5+Sk5O9uUm4AqNGTNGRYoU0Zw5c9SyZUt17drVmZcrVy69/PLLat++vZo3b66vvvpKGTJwaXGl4uLi5O/vL0n6/PPPFRwcrAkTJmjdunV64YUXtGvXLkmSmalmzZp644039MMPP2jRokX63//+J39/f50/f95ZBoC/t2PHDkkXrmNvvfVWjR8/XiVLllTLli01efJkSVJ8fLwWLlyozz77TGbmy+reNPjlANKB5ORkZciQQXv27NEjjzyiu+66S02aNNEdd9yh3r17688//1RkZKTq1q2r8uXLa/r06c6J4bx58/TLL78oIiLCx1uBK5HyI5hyARcbGyt/f3+tWrVKd999txo3bqypU6dKko4cOaL58+fr559/5sfzOpKyL37//Xf9/vvv+u233xQWFqannnpKkZGRWrZsmZ5//nmnfLZs2TRo0CB98MEHCgsL81W1gUuaPn26OnXqpL1792rTpk3q3Lmzpk2bJklat26dcufOrQcffNArmPr666/10Ucf6bnnnnOWQ2iR/gQGBqpBgwY6ePCgXnzxRcXFxUm6cIzLlSuXXnnlFdWvX1+dO3dWfHy8j2ubvqxcuVLFixfX6dOnNWDAAD355JN66qmn9Nhjj+mVV17RZ599pldffVV79uyRx+ORJC1fvlzZs2d3bg6bGYEU8DfswpNh8ng8Wrx4sUqXLq3HHntMknTfffdp3759uuWWWzR58mTnOzVq1Cht27ZNrVu3dr53uLY8xhUMcF1LCaS2b9+uRo0a6d5779Wdd96pqlWratasWZo/f74yZsyojh07ateuXdq4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2srNmzfJnj07ycnJlCpViq1btzJv3jwaN25Mx44dKVGiBDY2NixYsIDnz58bHVtE5E8JCgoiOjqatWvXsnPnThWkRETkraCRUiIiv3Lr1i0gbVqfpB+bN29m9OjRmEwmatWqRZ8+fahYseIrvb8ARo8ezYoVK4iMjKRw4cIGJhYR+eNiY2Pp1asXOXPmZOLEibi4uBgdSURE5LVQUUpERNK12NhY6taty7Bhw7hz5w4nTpzgzp07+Pn5Ub16dQC2bNnC2rVr2b9/Pzt37qRSpUoGpxYR+XNu375NhgwZ1ANPRETeKpq+JyIi6c6vV5p6+fIln332GQMHDgQgLCwMPz8/+vbty9y5c6lWrRq2trZkzZqV77//XiMMROSNlDdvXqMjiIiIvHYaKSUiIumKpSC1f/9+Dh48yMOHD7l58yarV6+27mMpTF27dg0/Pz+qVavGixcvyJAhg4HJRURERETkz1BRSkRE0p2tW7fSokULypUrR0JCAlevXiUiIoKqVata9zl48CBjx44lJSWFXbt2kSFDBi2bLiIiIiLyBlFRSkRE0pWHDx+ycOFCcubMSbdu3YiOjmbKlClERESwbdu2VwpTERERFClShIIFCxqYWERERERE/hM2RgcQERGxOHXqFHnz5iUoKIh3330XgKpVqzJu3Dg8PDzw9vbm6NGj1v1r166tgpSIiIiIyBtKRSkREXntUlNTf/fnvHnz0q5dO06fPk1CQoL1dVdXV3x8fKhfvz7VqlXj+PHjrzWviIiIiIj89bT6noiIvHY2NjacO3eOgIAAunfvTuHChbGxscHJyYmJEyeSnJxMjx49KFq0KDVr1gTSClMjRowgY8aMZM6c2eAjEBERERGR/y/1lBIRkdcuKSmJ2rVr8+OPP1K8eHG8vb2pVq0arVq1AuDp06d069aNkJAQdu/eTa1atV55r4ODg1HRRURERETkL6KilIiIGGLatGnY2dlRvnx5IiIi+Pbbb/Hy8sLd3Z1evXrx6NEjhg0bxpo1awgJCcHT09PoyCIiIiIi8hdSUUpERAwRFhZG06ZN2bt3L25ubty4cYOFCxcyadIkKleuTIcOHShXrhyLFi1i//79/PTTT2TMmNHo2CIiIiIi8hdRo3MRETGEp6cn3bt359tvv+X58+fkz5+fmJgYihUrRpkyZdiwYQN169bFycmJH374QQUpEREREZF/GDU6FxERw1SrVo2ZM2dib29Pt27dCAsLY9++fbi6uhIXF8fevXvx8PCgYMGCRkcVEREREZG/mKbviYiIoTw8PIiIiMDJyYkdO3ZQsWJFoyOJiIiIiMhroOl7IiJiCMszkeHDh1OiRAnmzJlDxYoV0bMSEREREZG3g4pSIiJiCJPJBECVKlVITU3l6NGjr2wXEREREZF/NhWlRETEUPny5cPHx4dZs2Zx5MgRo+OIiIiIiMhroqKUiIgYrm7dulStWpV3333X6CgiIiIiIvKaqNG5iIikC8+fPydjxoxGxxARERERkddERSkREREREREREXntNH1PREREREREREReOxWlRERERERERETktVNRSkREREREREREXjsVpURERERERERE5LVTUUpERERERERERF47FaVEREREREREROS1U1FKREREREREREReOxWlRERERERERETktVNRSkREREREREREXrv/AuuTNZM2se2OAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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ezVgwABt2bJFkydP1tSpU/X888//42UDAADg6sTje1eBli1bqm/fvpKkIUOGaNy4cVq8eLHKly//j99779696tChgypXrixJKlOmjDPvtddeU40aNRQXF+dM++9//6sSJUpox44duvHGG//x8q80HTp08Pr7rbfeUnh4uLZs2aL4+Hh5PB698cYbKlCggCpWrKhff/1VvXr1csq//vrrKleunF566SVJUrly5bRp06ZsvWgMCQnRpEmT5Ofnp/Lly6tVq1b65ptvvOohSU888YSmTZumxYsXO/vH/v37dfr0abVv314lS5aUJGfepahSpYqefvppSVLZsmU1adIkffPNN04Ll39i7969ql69umrWrClJXiHCzJkzlSdPHr355pvOBfvbb7+t4OBgLV68WE2bNv3Hy7/S+HrfLl68uAYNGuT83b9/f82bN08fffSRateu7Uy/4YYbNHr0aOfvESNGXPB37O/WrVKlStq7d6/Kli2r+vXry+PxOPv+pRo0aJBatWolSRo1apRuuukm7dq16x//pv/+++9KSkpS69atdf3110uSKlSo4Mx//vnnNXToUPXo0UPSmd/7Z599VoMHD3a+hwAAAMDFoKXUVaBKlSrOvz0ejyIjI3Xw4MFsee8BAwboueeeU7169fT0009r48aNzrz169dr0aJFTr9EhQsXdi6azn60Bf/np59+UteuXVWmTBldc801Kl26tKQzAcn27dtVpUoVFShQwCl/8803e71++/btqlWrlte0c8v8UzfddJP8/Pycv4sVK3be/jRmzBhNnjxZ8fHxXqFT1apV1ahRI1WuXFkdO3bUG2+8ocTExEuuy9n79l/V5VI9/PDDmjlzpqpVq6bBgwdrxYoVzrz169dr165dCgwMdPbt0NBQ/fHHH+zbf8HX+3Z6erqef/55ValSRWFhYSpcuLAWLFigvXv3epXLDCEzZeV37O/WTTrz6OmGDRtUrlw5DRgwQAsWLMhyvf/M2ft9sWLFJClb9vvQ0FD17NlTzZo1U5s2bfSf//xH+/fvd+avX79ezzzzjNe26NWrl/bv36+TJ0/+4+UDAADg6kModRU4dyQ+j8fjPFbyd/LkObN7nP1o1bl9Bz344IP63//+p5iYGP3444+qWbOmJk6cKEnKyMhQmzZttGHDBq//du7cqdtuu+2frtYVqU2bNjpy5IjeeOMNrV692nm0KC0tTWbmtMrJdO5jb1kp809lZX+69dZblZ6erg8//NBrup+fnxYuXKivvvpKFStW1MSJE1WuXDnt3r37stXlz2Rl327RooX27Nmj2NhY/fbbb2rUqJHT0iYjI0PR0dHn7ds7duxQ165dL2ldrnS+3rfHjBmjcePGafDgwfr222+1YcMGNWvW7LzHLQsVKuT1d1Z+x/5u3SSpRo0a2r17t5599lmlpKSoU6dOuvvuu7Nc93Odvd9nbpOs7vfnbrNz9/u3335bK1euVN26dfXBBx/oxhtv1KpVq5xljBo1yms7/Pjjj9q5c6dXoAgAAABkFaEU/lLRokUlyetO+dmdDmcqUaKEHnroIc2aNUsDBw7UG2+8IenMhdjmzZtVqlQp3XDDDV7/nXvhhzMdMW/dulVPPvmkGjVqpAoVKni1Iipfvrw2btyo1NRUZ9q6deu83qN8+fJau3at17Rzy7jh5ptv1rx58xQXF+c8bpXJ4/GoXr16GjVqlL7//nvly5dPs2fPdrV+Wd23ixYtqp49e+rdd9/V+PHjnUECatSooZ07dyo8PPy8fZtRAs+XE/btZcuW6c4779S9996rqlWrqkyZMtq5c+cFX3eh37ELrVuma665Rp07d9Ybb7yhDz74QJ988omOHj2a5fpnh6JFiyohIcErmPqz/b569ep64okntGLFClWqVEnvv/++pDPbYvv27edthxtuuMEJegEAAICLwVkk/tINN9ygEiVKaOTIkdqxY4e++OILjRkzxqtMbGys5s+fr927d+u7777Tt99+6/RB0q9fPx09elRdunTRmjVr9L///U8LFizQ/fffr/T0dF+sUo6WOYrblClTtGvXLn377bd67LHHnPldu3ZVRkaGevfura1bt2r+/Pl6+eWXJf1fa4k+ffpo27ZtGjJkiHbs2KEPP/zQ6YT83FYml1udOnX01Vdf6ZlnntG4ceMkSatXr1ZcXJzWrVunvXv3atasWTp06JBXvzVuCAgI0C233KJ///vf2rJli5YuXaonn3zSq8yIESP02WefadeuXdq8ebM+//xzp57dunVTkSJFdOedd2rZsmXavXu3lixZokcffVT79u1zdV1yg5ywb99www1auHChVqxYoa1bt6pPnz5KSEi44Osu9Dt2oXWTpHHjxmnmzJnatm2bduzYoY8++kiRkZEK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Th9//LFOnjzp49rlDIRScN2xY8d09913q1u3bpKkokWLKiQkRIULF5Z05mKJH+icy8/PT7NmzVLTpk2VlJSke++9V1WrVlVMTIw++eQTX1cP2WjPnj169tlnNXr0aD3++OOqVq2a5syZo5IlS2ratGkEUzncqVOnZGaKiIjQo48+qqCgIA0YMEDbtm1Tnjx5rspgKiEhQZUqVdK8efMknelvq2DBgs4J49kXXVyA5SyZgdSQIUPUuXNnHT16VE2aNNG0adP08MMP8yjfFcbj8WjRokVau3at7rvvPvXr108dO3bUlClT9OCDD6pjx4764osvfF3NXO3sQGrbtm1atmyZvv76a3355ZfavHmzWrdurYULFyouLk6SaE36D3k8HrVt21Zvvvmm3n//ffXv31/SnwdTV+Px+Urm8Xg0d+5c1ahRQz///LMefvhhRUREaPjw4frwww8JpiTJAJcdPXrUnnvuOatWrZr179/fvv32W6tbt67973//MzOzU6dO2cmTJ53yu3fv9lFN8WeSkpKsfv369uSTTzrTNm/ebA899JAFBgbaZ599ZmZmGRkZvqoiLlJ6evqfTk9LS7Onn37adu7cab/99pvdeOON1rdvX9u/f7+1bNnSrrnmGhs8eLDLtcWfyfy+nTp1yvl3WlqaV5m33nrLGjRoYB06dLBt27Y503/88UdLSUlxr7I+lJ6ebm3atLEiRYrYN998Y+PGjbM6deqcVy5zGx49etTtKuJvLF++3IKDg23RokVmdmYf/+qrr+yaa66xbt262bFjx3xbQWSb1NRUa9eunXk8HmvRooXXvJSUFOvbt68FBgbarFmzfFTD3Ovrr7/2Oj7ExcVZw4YNrWnTppaYmOhMP3DggPXv398aNGhgv//+uw9qemVKTEy0KVOmWNGiRe2RRx5xpmeei6WlpVm/fv28zrORe2VkZFhycrLVrVvXBg0a5DWvQ4cOVqxYMXv77bft+PHjPqphzkAoBdfs27fPCZ6OHDliY8eOtZo1a1rZsmXN4/FY2bJlrWTJklaiRAmLioqyUqVKWVRUlJUvX54Lgxzk6NGjVqJECXvppZe8pm/atMmqV69ugYGB9tFHH/modrhUv/76q8XHx5uZ2YwZM2z06NFm9n/BxtNPP23t27d3votPPvmklStXzho0aGAHDhzwTaXhWLFihdffX331lbVr1866d+9uEydOdKa/9dZbdvvtt9tdd91lq1evtpEjR1pUVNQV/xt7duiWkZFh3bp1s6JFi1rnzp0tPDzcatWqZfXq1bMWLVpY/fr17eabb7Z69erZXXfdZSdOnPBhzXG2hQsXWvHixZ3fnMzw8KOPPrI8efLYgAEDrvh9+WqyZ88eu++++6xw4cK2bt06M/u/z/yPP/6w7t27W2Rk5FV/MXcxHn/8cevYsaPXjcMvv/zSPB6PBQQE2OrVq73Kf/fdd+bxeGzJkiVuV/WKsHfvXvvggw/s1VdftZ9++slOnz5tZmbHjh3702DqxIkT9sgjj1hAQICtX7/eV9VGNktPT7e6devaqFGjzOzM71emm2++2W666SZ75ZVXrurfMn9ft9TC1SE5OVn9+vXTkSNHNHXqVF1//fXq3r27zEzTpk1T0aJF9dRTTykjI0OnTp1SgQIFlJqaqjx58qhevXoKCQnx9Srg/wsJCdHtt9+utWvX6sCBA4qIiJAk3XTTTapRo4b27t2rQYMGqWnTpgoMDKS5dy6QlJSk+++/XwEBAVq0aJFGjBihN998U5KUN29eSdKWLVuUlpbmfBeTk5N1//33q3fv3goODvZV1SFp5cqVqlevnp577jkNGzZMixYt0p133ql77rlHR44c0ahRo7R9+3ZNnDhR999/v/Lmzatp06bprrvuUr58+TR79uwr+jd2586diouLU5s2bdS2bVv5+/tr+vTpeuihh/Tmm2+qXr16qlu3rtLS0hQYGKjU1FSZmQoXLqy77rpLBQsW9PUqXJXsrEeLMpUuXVqHDx/WokWL1LlzZ2d+tWrVFB4erokTJyo4OFijRo3yRZXxD2R+3r///rv++OMPFSlSRNddd53Gjh2rQ4cOqUmTJlq8eLGqVKkiM1P+/Pk1ZcoUJSYmqlChQr6ufq7x73//W+np6fJ4PNq8ebNKlSqlFi1aaOnSpbr99ts1fvx4xcXFqVSpUpKkwMBA3XDDDc4jzsi6jRs3ql27dipSpIjWrVunG2+8US+88ILuuusuBQUFqXPnzpLk9Ns1ceJEDR8+XP/9738VHx+vGjVq+LL6yCb2/wcSCA4Ods6x8+fPr9TUVOXPn1/Vq1fX9OnTNWPGDKdrm6uSLxMxXF3++9//WpMmTaxVq1a2a9cuMzvTYmrMmDFWo0aN85o0wvcy76QlJSV5NemePHmyVahQwV566SWvVjIPP/ywvfLKK3bkyBG3q4pLsHjxYueu3dKlS61ChQrm8Xhs+PDhTpnM+Znf00cffdT69u1rISEh9tNPP/mk3vB24MABe/755y00NNRefPFF++STT2zChAlmdqZl49SpUy1//vzWr18/5zXbt2+3lStX2i+//OKrarvihx9+sOLFi1uXLl3s7bff9pqXmppqffr0saCgIFuzZo1vKog/dfYjxcnJyV7Te/XqZbfccot98cUXzvRDhw5Zr169bMWKFc5vFnKPzHONzz77zBo1amTXXnut3X333fb888+bmdnhw4etXbt2Fhoaahs3bvR6DbLu1KlTzr8/+OADu/baa+29995zWoMuXLjQ/P39rVWrVjZ9+nRbvHixtWrVyipXrsz36iL98MMPFhAQYE899ZQdPHjQfvnlFwsPD7d27dp5lctsMRUVFWXFihWzggUL0kIql8v8bdq/f78dO3bMkpKSzOzMPhESEmL33XefV/nHHnvMPv30U/v1119dr2tOQiiFy+7sE4d3333Xbr/9dq9g6vDhwzZ27FirXLmyPfzww3/6OvjOp59+atHR0ValShXr0aOH07T0ySeftAoVKljbtm3tqaeesp49e1p4eLjzuSJnW7Rokd144432+OOP26lTpywlJcUqVqxoZcqUsS5dutjixYu9yu/YscMGDhxoNWvWtPr169v333/vm4rjTx08eNBeeOEFCwkJsWuvvdYrgDl58qQTTA0YMMB3lXTZrl27rHjx4jZ06NDz+tc6W8eOHS0oKMi+/vprr+kcg3zj7O3+wgsvWOvWra1Ro0Y2f/58S0tLs40bN1rHjh2tXLlyNmrUKHvnnXescePGVrduXa++1ZC7fPnllxYQEGAvv/yyrVq1yh566CHLly+fzZ8/38zMfvvtN2vfvr15PB7btGmTj2ub+5z7e3b69Glr0aKF1ahRw95//30nmPr6668tb9685vF47P7777f77rvPCaQIprLmp59+Mo/HY48//riZ/d+2r1+/vl133XVeN3nNztygnzBhglWpUoVzqyvErFmzrGrVqla6dGl78MEHnXPqmTNnWnBwsNWvX99iY2OtW7duVqBAAad7m6sZoRQum4SEBNu3b5+lpqZ6TX/33Xfttttus1atWtnOnTvN7MwP8vjx4+3aa6+1xx57zBfVxZ9YtWqV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atWqZbVr17bZs2c72+LQoUN/egLYt29fu+eee3j02If+7relS5cuVr58eZs+fbrzSFGmCRMm0HIjF/vss8+sVq1adtttt9mwYcPst99+MzOz0aNHm8fjsZiYGHvwwQete/fuFhQUZN99952Pa5y7nH3cXrp0qeXLl8+6dOli27dvt1tvvdVWrlxpZme+f3/88YedPn3aK5zK/D/H/gvbunWrhYWF2eDBg+3w4cN/Wmbp0qV2zTXXWNeuXb1GE0Xu9lfnVHPmzLFGjRpZq1atzgumVq9e7dVyEf/HY2YmIBv88ccfuu222+Tn56dBgwapdevWyp8/v7755hs9+OCDqlu3rv71r3+pZs2azmtSU1MlSfnz5/dVta96ZiaPx6M1a9Zoy5YtOnjwoO6//34VKVJEkrRmzRq1aNFCt99+u9566y0FBQU5r0HuM3v2bN1///1q3bq1ihUrpnHjxqlz586aPHmyMjIy9MILL2jJkiWKjo7WuHHj5Ofn5+sq4xwZGRnKkyePHnjgAe3bt0/z589X5qE883v5ww8/qGzZsjp16pROnz6tsLAwX1b5sktPT5efn5+OHz+u9u3b68iRIxo2bJjatGmjfPnyOdtMkk6cOKHnn39eb775phYtWqSbbrrJx7W/Op39mcTHx+vgwYMqXbq0SpYsqdDQUElSp06dtGnTJj3xxBPq0KGDChYs6PUemZ87co8ffvhBd9xxh/71r39p165d2r17twoUKKCpU6eqWLFimjt3rqZNm6bU1FTdeOONevDBB1WhQgVfVzvXOPt7lZKSooCAAC1btkyNGjVSs2bNtG7dOiUmJqp69epKSUnR77//rnz58qlFixYaN27cee+Bv5aamqp7771XISEhmjJlijP91KlTOnjwoDIyMlSoUCGFhoZq6dKlat++verWrasZM2aoUKFCPqw5/qnM66DVq1dr+fLl8ng8qlKliho1aiRJ+uSTTzRlyhT5+/vr6aef1s033+zjGucCvkzEcOXIvMOSnJxsTZo0sejoaPvoo4+cFlNff/21lSpVyrp168YIbTlIZsr/ySefWHh4uNWpU8cqV65sUVFR9uWXXzr9CqxevdoiIiKsSZMmPOqSi+3evdvKly9vr7/+ujOtUKFCNmTIEK/OzwcMGGCNGze2gwcP+qqqyIJJkyZZQECArV+/3sz+7/uclJRkgwYN8uok+kqWud5ndxhasmRJq1Onjn3yySdenV+PGzfOOnfubCVLlqT1hQ+dfYd56NChVrx4cStfvrxFRETYgAEDbN26dc78Tp06WeXKle21116jU9hc6uzPOz4+3msE0I8//tgaNGhgjRo1cjrUzmwZR0udi3P29nrzzTdt3Lhxzohuy5cvt4IFC9qNN95oL7/8ss2fP98+//xze+edd2z27NkMEnCRUlJS7NSpU1arVi2bOnWqM/2rr76yvn37WmBgoEVGRlq7du2cxx+//fZbK1mypPMoJXKns6+dQkJCrGXLllazZk2rU6eOVz+en3zyibVs2dLq1avndUzDnyOUwj/2dxcE5wZTZcuWtbZt29rGjRt9Ulf8n8yTlyVLlljRokXtrbfeMrMzfdF4PB677rrr7OOPP3YebVm+fLmVKVPGqxNH5C67du1y+uvYuXOnFS9e3Hr16uXMzwyMf//9dwKpHCTzN3bXrl22atUqW7FihaWmplpKSoo1b97cKleu7JzwnDx50p588kmLioqy3bt3+7DWl9+OHTts9erVZmZefdtNmDDBgoODrWrVqhYdHW2ffPKJpaWl2ZEjR2zMmDH22GOP8eixD5198fviiy9a8eLFbcmSJWZmNnDgQAsMDLR7773Xa2CFRo0aWbdu3a74R1CvRGf3TfT6669bbGys9e3b16tMZjDVpEkTr9Hi+LwvzeOPP25RUVH21ltv2c8//+xMX758ueXLl88efPDBPz3GE0xlzb59+6xixYq2Z88ea968uTVq1MgSEhJs1KhRVrZsWbv77rtt6tSp9tprr1l0dLQ9//zzzs37zJu9yN2WLVtmxYsXd27yrl692oKCgqx48eJeI++9//771r59e0awzAJCKVyyrF4QfPzxx04w9eWXX1rVqlW5S+Aj77zzjk2bNs35++TJkzZ27Fh78sknzexMS5qSJUvagAEDrGPHjlakSBGbPXu2c9eSvldyvr87iV+xYoVFRkba4sWL7frrr7devXo5J0rr1q2zu+66y3788Ue3qoosOPuOXPny5a1s2bJWu3Ztq1Gjhh09etRWrVplnTp1snz58tktt9xitWvXtvDw8KuiFVDv3r3N4/F4jdD2wgsvWEhIiK1cudIyMjKsSZMmVrNmTfvss8+cIJ7WNr4xduxY59+nT5+2X3/91dq3b2/Tp083szP9DAUFBVnPnj2tRIkS1rlzZ1u7dq3zmszPj6Ai95k9e7YFBATYjTfeaMWKFbNixYo5A6hkmjVrllWrVs3uvPNO+gv7B1555RWLjIx0zs8zZbZyX7x4sQUEBFirVq28Bn5A1v36669WqlQpi4mJsS+++MLKli1rxYoVs+DgYJsyZYrXTY877rjD2rdv78Pa4p8aM2aMLViwwGvav//9b3vggQfMzOznn3+2MmXKWNeuXS02NtaKFi3q1WIqs4N7/D1CKVyyrF4QZN6pzgw0zu2wFO7YvHmztWzZ0mnBlmnlypW2ceNGS05OtltvvdUefPBBMzsTUBUoUMAKFSp03lC2yJkyL9qOHDlia9eutQkTJtjUqVPtp59+ck7y77rrLvP397e7777b67XDhg2zOnXqcJLqY5mf4dkB8JIlS6xw4cI2efJkS01Ntblz55rH47FXXnnFzM6MYvX+++/biBEjbNKkSVf8KFW7d++2Y8eOWUpKisXExFihQoVs586dNnHiRAsJCbH58+c7ZU+ePGktWrSwMmXK2Ny5c31Y66tbfHy8+fv7W9euXZ1px48ft2+++caOHDli69atsxIlStiECRPM7MzvUUhIiLVp08arZTWPc+UemeHhiRMn7LHHHrO3337bUlJSbP78+Va7dm2rWLHiea115syZ49WyBxd27neid+/eznD027dvt6lTp1q9evWsevXqtnTpUjMzW7hwoTVo0IDv0yXI7ER+zJgxFh0dbbNnz7ZDhw5ZfHy81/6cnp5uaWlpds8999iIESMI03OpjIwMa9mypQUGBjotes3OnFusWrXKUlJS7NZbb7X77rvPzMy2bdtmRYoUsfz589vTTz/tvAcujFAKF+1SLgiuv/56++yzz8yML6cv9O/f315++WWLj4+3Ll26WP369W3mzJleZb777jurVq2a88jEjz/+aPfdd591797dtm7d6otq4yJknlxu2bLFGjdubDVr1rSwsDDLnz+/XX/99TZq1Cg7ffq0zZs3zxn1KD4+3ubPn28DBw60a665xn744QcfrwXMzjwaULZsWedu60svvWT9+vUzM7O9e/fadddd5/xtdnU9cpGWlmYNGza0qKgoS0xMtD/++MM6d+5sefLksQIFCni1Djj7cYm77rrL/ve///mq2le9EydO2MyZM61kyZJ2zz33ONMz7yA//fTTdtdddzmt2J5//nmrV6+e9evXjwvnXGzVqlVWrFgxa9iwoTPim9mZkLJ+/fpWsWLF81pM4dKMHTvW5s+fbyNGjLCqVavak08+aXXq1LE777zTHnnkEevYsaMVK1bMjh496vU6vl9Zc+TIEa+/jx07ZtWqVbOmTZv+afnTp0/bk08+addee63t2LHDjSriMjl9+rR169bNQkJCbPHixV7zvv/+e6tcubJz82Tnzp3Wtm1b+/e//33Fd6GQ3QilcFG4IMh93n33XcufP7/TGfLmzZvt7rvvPi+Y+uyzz6xw4cK2atUqO3HihI0YMcI6dOhAM/pcIPOkcsOGDRYWFmaPPvqorVy50o4ePWo7d+60pk2bWvHixe2JJ54wszN3o9u1a2f58uWzSpUqWf369W3Dhg2+XAWcZevWrVamTBkbP368mZndd9991qtXL/v111/t2muvtd69ezvh/kcffWQvv/zyVXVh8eOPP1rNmjWtUqVKdvToUTtx4oT169fP8ubN6zzulbl9rqbALqc7efKkzZgxw3k072yPPfaYNWrUyGklc9ddd9n777/vfI5X0/59Jdm5c6c1btzY8uTJ49XKICMjw5YvX24NGza0YsWK2eHDh31Yy9zp7O/E5MmTLSoqyjZu3GhLliyxfv362Y033mgvvfSSc7Ppww8/tMaNG9vx48d9VeVc66effrLQ0FBr06aN7d+/39mG69evt4CAAK9HtczMpk+fbn379rWiRYteFY/SXw1Onz5t99xzz3nB1A8//GBFixa1V1991czOtPJt06bNeSEmLoxQCheNC4LcZfjw4XbHHXeY2ZkO95YtW2ZbtmyxTp062a233moffPCBU7Zhw4aWP39+q1KligUHB3MwzQUyv2s//vijBQQE2KhRo84rk5iYaF26dLGIiAibPXu2M33btm129OhRO3bsmFvVRRZ17NjRoqOjzczsrbfesttvv92KFy/u9GGQkZFhaWlp1rdvX3v00Ueviv7ezg4otm7danXq1LGaNWtaYmKinTx50u655x4rVKiQLV++3CkH3zq3ZfTx48dtxowZdu2113q1mHr77betTJkyVqtWLatYsaKVL1/eOX+gdXXulZGRYbt27bIGDRrYddddZ/v27fOat3jxYmvRooXt2rXLh7XM3b777jvr37+/V3+hp0+f9hopOT093Vq0aGEdOnTg+3QJduzYYcHBwebxeKxp06b28ssvO2Hf448/btWrV3eOO+vWrbOePXva3Xff7Yy6hytDenq6dezY0SuYOnTokPXp08ciIyOtXLlyFhISwrXTJSKUQpZxQZA7LVq0yDwej917773m8Xjsv//9r5mdOXBmBlPvvfeeU37ChAn2xhtv0Nw4Fzl48KCVLl3aateu7UzL/P5l/j85OdlKly5tbdu29UkdkTWZn1fmSfD06dPt0KFDVqFCBQsNDXV+X5OTk23YsGFWrFixK/7x2rMDt7MH1Rg4cKB5PB6rXr26HT161P744w/r0qWLBQcHn9fEHu47+xzg1KlTlpqaambewVSnTp2cMtOmTbPnnnvOnnrqKSeQoqVu7pF5jrh9+3ZbtWqVrVy50nkcc+/evVa3bl0rVaqUVzBlxmhk/8TSpUstICDAAgMD7e233z5vfnJysn3xxRfWuHFjq1KlivP7STB1YefeXP/Pf/5j//rXv+zJJ5+0hx56yKpXr25z58611atX20033WQjRowwszOPKickJHiFgsh9Mj//Q4cO2W+//eb1mHGHDh0sJCTEFi1aZGZme/bssS+++MJee+21K75Pz8uJUAoXxAVB7vPFF194/d2jRw/zeDzWoUMHr+lnB1MzZsxws4rIRqdPn7aePXtavXr1bPTo0ZacnGxm/3dQzbwYHDNmjN1www124MABTkpzgHNHEzv772PHjlnbtm2tY8eOZnbm8YFSpUpZjRo1rGzZsta8eXMrVqzYFX9Hbt++fdaxY0f79ttvvaa/+OKLFhYWZm+++aZFR0c7LXf/+OMPa9WqlRUvXpyL3Rzi3//+t3Xo0MHuuOMOp6PlP/74w2bOnHleMHU2WlrnHpm/YR9//LFFRkZa+fLlzePxWKtWrezDDz80szPBVL169axs2bIMj36J/uy4PXr0aCtYsKDde++9523XH374wWJjY61nz57O94nvVdZknkdlWrx4sTVv3ty+/PJLS0lJsUmTJllwcLC99NJL1qxZMwsODrbvv//eN5VFtsr8nn366ad222232XXXXWetWrWygQMHOmXuuecernezGaEU/hYXBLnP2rVrrUSJEs5IEMePH7e6deta165dzc/Pz0aOHOlVft26ddalSxerXLmyzZo1yxdVxj+QGWScOnXKHnroIatVq5aNHj3aGeXy7NYK/fr182pNBd/btWuXPfPMM15DSGeaNWuWeTwe+/rrr83M7LfffrMZM2bYsGHD7L333rsq+un76aefrE6dOtayZUuLj483szOjvIaGhtrChQvN7Ezn/tWrV7dq1arZkSNHLDU19bzWGHDP2b85cXFxVrRoUXv00UetWbNmli9fPnvjjTfM7Eww9cEHH1jJkiWtcePGvqoussmqVassKCjIJk+ebL/88outXr3a2rRpY3fccYdzbvG///3PKleubFWrVqUV3EU6+3uVmprqdcP4+eeft2LFitmzzz5rv/32m9fr9u/f71xks82zZv/+/VaiRAkbNmyY7dmzx5n+7LPPWpEiRZzjS3x8vPXq1ctatWplHo/HWrZsaadPn+am3xXgq6++sgIFCtj48eNt/fr19vTTT5vH43EG7Tp9+rR17drVPB6Pc26Cf4ZQCn+LC4LcJykpycaPH2/R0dHWq1cvZ9qpU6ds4sSJ5ufn5wxTmmnVqlV23333MRRzLvVXwVRmZ5yZ/Ut07drVnn76acvIyOCkKYd47LHH7Nprr7WAgAAbOHDgea0cmzdvbjExMVf1owA7duyw5s2b25133mm9evWyokWLeo3yanamc/hSpUpZ3bp1eXQ8h9izZ48NHjzY607yU089Zf7+/jZlyhQzOxNMvf3229auXTs+t1xu4sSJVrt2ba/PcdOmTdasWTO76667zOxMC4Tdu3dzrnGRzt6m//nPf6xdu3bWtGlT5xzPzOy5556za6+91p577jnbv3//ee/BMT/rEhMTbdSoURYcHGyNGjWycePGOfN69OhhPXr0cPriPHDggC1ZssRat27NCMZXgMz+Oh988EGnj9aDBw/atddea/379z+v/P3332/btm1zu5pXJEIpXBAXBLlH5klHcnKyTZgwwSpVquR10pKYmPiXwVRm3w/InTLvgJ4dTL344otOMDV8+HArU6YMHcrmQL/++quNHz/eatSoYeHh4Xb33XfbZ599ZhkZGfb6669biRIlLCEhwcyu3jvd27dvtyZNmlhAQIC9/PLLzvSzjzfbt2+/KlqP5UQjR4509lGzMyN8ejweK1GihNeoa2Zngqm8efM6LabO7haA84fcI/N847vvvrOjR4/apEmTrHLlyk6AnvlbtXjxYvN4PFywZ4OhQ4daZGSkjR492mbMmGEej8dat27tfIeee+45K1mypA0ZMoQRDbNB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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.close(\"all\")\n", + "fig1, ax1 = plt.subplots(figsize=(12, 7.4), dpi=100)\n", + "fig2, ax2 = plt.subplots(figsize=(12, 7.4), dpi=100)\n", + "\n", + "for ax in [ax1, ax2]:\n", + " ax.spines[\"top\"].set_visible(False)\n", + " ax.spines[\"right\"].set_visible(False)\n", + " ax.spines[\"left\"].set_visible(False)\n", + " ax.spines[\"bottom\"].set_color(\"#dddddd\")\n", + " ax.tick_params(bottom=False, left=False)\n", + " ax.yaxis.grid(True, color=\"#eeeeee\")\n", + " ax.xaxis.grid(False)\n", + "\n", + "waterschappen = []\n", + "network_results = {\"Basins\": [], \"Edges\": [], \"Peilgebieden\": []}\n", + "# reduction_results = {\"initial\": [], \"in_use\": [], \"agg_links_in_use\": [], \"agg_areas_in_use\": []}\n", + "reduction_results = {\"in_use\": [], \"agg_links_in_use\": [], \"agg_areas_in_use\": []}\n", + "for waterschap, waterschap_struct in waterschap_data.items():\n", + " init_settings, crossing_settings = waterschap_struct.values()\n", + " df = gpd.read_file(init_settings[\"output_path\"], layer=\"crossings_hydroobject_filtered\")\n", + "\n", + " basins, edges, peilgebieden = None, None, None\n", + " init_cross, cross_inuse, cross_agglinks, cross_aggareas = None, None, None, None\n", + " try:\n", + " sub_df = df[df.agg_areas_in_use].copy()\n", + " all_nodes = np.hstack([sub_df.agg_area_from.to_numpy(), sub_df.agg_area_to.to_numpy()])\n", + " basins = len(np.unique(all_nodes[~pd.isna(all_nodes)]))\n", + " edges = len(sub_df) * 2\n", + " all_peilgebieden = np.hstack([sub_df.peilgebied_from.to_numpy(), sub_df.peilgebied_to.to_numpy()])\n", + " peilgebieden = len(np.unique(all_peilgebieden[~pd.isna(all_peilgebieden)]))\n", + "\n", + " init_cross = len(df)\n", + " cross_inuse = len(df[df.in_use])\n", + " cross_agglinks = len(df[df.agg_links_in_use])\n", + " cross_aggareas = len(df[df.agg_areas_in_use])\n", + " except Exception as e:\n", + " print(f\"{waterschap=}, {e=}\")\n", + "\n", + " # reduction_results[\"initial\"].append(init_cross)\n", + " reduction_results[\"in_use\"].append(cross_inuse)\n", + " reduction_results[\"agg_links_in_use\"].append(cross_agglinks)\n", + " reduction_results[\"agg_areas_in_use\"].append(cross_aggareas)\n", + " \n", + " network_results[\"Basins\"].append(basins)\n", + " network_results[\"Edges\"].append(edges)\n", + " network_results[\"Peilgebieden\"].append(peilgebieden)\n", + " waterschappen.append(waterschap)\n", + "\n", + "colours = ['#0C3B5D', '#3EC1CD', '#EF3A4C', '#FCB94D']\n", + "\n", + "x1 = np.arange(len(waterschappen))\n", + "width = 1 / (1 + len(network_results))\n", + "multiplier = 0\n", + "for multiplier, (attribute, measurement) in enumerate(network_results.items()):\n", + " offset = width * multiplier\n", + " rects = ax1.bar(x1 + offset, measurement, width, label=attribute, color=colours[multiplier])\n", + " # ax1.bar_label(rects, padding=3)\n", + "ax1.set_axisbelow(True)\n", + "ax1.set_xticks(x1 + width, waterschappen, rotation=45)\n", + "ax1.legend(loc=\"upper left\", ncols=len(network_results))\n", + "\n", + "\n", + "x2 = np.arange(len(waterschappen))\n", + "width = 1 / (1 + len(reduction_results))\n", + "for multiplier, (attribute, measurement) in enumerate(reduction_results.items()):\n", + " offset = width * multiplier\n", + " rects = ax2.bar(x2 + offset, measurement, width, label=attribute, color=colours[multiplier])\n", + " # ax2.bar_label(rects, padding=3)\n", + "ax2.set_axisbelow(True)\n", + "ax2.set_xticks(x2 + width, waterschappen, rotation=45)\n", + "ax2.legend(loc=\"upper left\", ncols=len(reduction_results))\n", + "\n", + "fig1.tight_layout()\n", + "fig2.tight_layout()\n", + "\n", + "fig1.savefig(\"network_results.jpeg\", bbox_inches=\"tight\")\n", + "fig2.savefig(\"reduction_results.jpeg\", bbox_inches=\"tight\")\n", + "\n", + "display(pd.DataFrame(reduction_results, index=waterschappen))\n", + "display(pd.DataFrame(network_results, index=waterschappen))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8980f137-8176-4156-8319-5039e61a11c5", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ba8a41fb-5e6d-41e0-b0c1-2ba7bf113908", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:ribasim]", + "language": "python", + "name": "conda-env-ribasim-py" + }, + "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.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/01_test_parse_crossings.ipynb b/src/peilbeheerst_model/01_test_parse_crossings.ipynb new file mode 100644 index 0000000..082a210 --- /dev/null +++ b/src/peilbeheerst_model/01_test_parse_crossings.ipynb @@ -0,0 +1,550 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "4bf1ab0f-3ade-41c7-ac67-5ccd41930481", + "metadata": {}, + "outputs": [], + "source": [ + "import pathlib\n", + "import warnings\n", + "\n", + "import geopandas as gpd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import shapely.geometry\n", + "import shapely.validation\n", + "import tqdm.auto as tqdm\n", + "from IPython.core.display import HTML\n", + "from matplotlib.patches import Polygon\n", + "from peilbeheerst_model import ParseCrossings\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2122bf39-a6e1-4f80-a9dd-4782abe7d351", + "metadata": {}, + "outputs": [], + "source": [ + "polygons = {\n", + " \"perfect fit\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(2, 0), (4, 0), (4, 2), (2, 2)]),\n", + " ]\n", + " },\n", + " \"perfect fit star 1\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (1, 0), (2, 1.5), (1.5, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(3, 0), (4, 0), (4, 2), (2.5, 2), (2, 1.5)]),\n", + " shapely.geometry.Polygon([(1, 0), (3, 0), (2, 1.5)]),\n", + " shapely.geometry.Polygon([(1.5, 2), (2.5, 2), (2, 1.5)]),\n", + " ]\n", + " },\n", + " \"perfect fit star 2\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (1, 0), (2, 0.5), (1.5, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(3, 0), (4, 0), (4, 2), (2.5, 2), (2, 0.5)]),\n", + " shapely.geometry.Polygon([(1, 0), (3, 0), (2, 0.5)]),\n", + " shapely.geometry.Polygon([(1.5, 2), (2.5, 2), (2, 0.5)]),\n", + " ]\n", + " },\n", + " \"perfect fit on edge\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 1.5), (0, 1.5)]),\n", + " shapely.geometry.Polygon([(2, 0), (4, 0), (4, 2), (2, 2)]),\n", + " ]\n", + " },\n", + " \"narrow gap\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(2.1, 0), (4, 0), (4, 2), (2.1, 2)]),\n", + " ]\n", + " },\n", + " \"wide gap\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(3, 0), (4, 0), (4, 2), (3, 2)]),\n", + " ]\n", + " },\n", + " \"narrow overlap\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(1.9, 0), (4, 0), (4, 2), (1.9, 2)]),\n", + " ]\n", + " },\n", + " \"wide overlap\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(1, 0), (4, 0), (4, 2), (1, 2)]),\n", + " ]\n", + " },\n", + " \"single cross wide\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " ]\n", + " },\n", + " \"single cross narrow\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (3.4, 0), (3.4, 2), (0, 2)]),\n", + " ]\n", + " },\n", + " \"single cross at edge\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (3.5, 0), (3.5, 2), (0, 2)]),\n", + " ]\n", + " },\n", + " \"single cross on edge\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 1.5), (0, 1.5)]),\n", + " ]\n", + " },\n", + " \"perfect fit with complete overlap\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(2, 0), (4, 0), (4, 2), (2, 2)]),\n", + " ]\n", + " },\n", + " \"single cross wide with complete overlap\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " ]\n", + " },\n", + " \"single cross at edge with complete overlap\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (3.5, 0), (3.5, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(0, 0), (3.5, 0), (3.5, 2), (0, 2)]),\n", + " ]\n", + " },\n", + " \"polygon within polygon 1\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (3.0, 0), (3.0, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(0.1, 0.1), (2.8, 0.1), (2.8, 1.9), (0.1, 1.9)]),\n", + " ]\n", + " },\n", + " \"polygon within polygon 2\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (3.4, 0), (3.4, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(0.1, 0.1), (2.8, 0.1), (2.8, 1.9), (0.1, 1.9)]),\n", + " ]\n", + " },\n", + " \"polygon within polygon 3\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (4.0, 0), (4.0, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(0.1, 0.1), (2.8, 0.1), (2.8, 1.9), (0.1, 1.9)]),\n", + " ]\n", + " },\n", + " \"polygon butterfly 1a\": {\n", + " \"peilgebieden\": [\n", + " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.5), (4.0, 0.0), (4.0, 2.0), (2.0, 0.5), (0.0, 2.0)])),\n", + " ]\n", + " },\n", + " \"polygon butterfly 1b\": {\n", + " \"peilgebieden\": [\n", + " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.5), (4.0, 0.0), (4.0, 2.0), (2.0, 0.5), (0.0, 2.0)])),\n", + " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.5), (4.0, 0.0)]),\n", + " ]\n", + " },\n", + " \"polygon butterfly 2a\": {\n", + " \"peilgebieden\": [\n", + " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.4), (4.0, 0.0), (4.0, 2.0), (2.0, 0.4), (0.0, 2.0)])),\n", + " ]\n", + " },\n", + " \"polygon butterfly 2b\": {\n", + " \"peilgebieden\": [\n", + " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.4), (4.0, 0.0), (4.0, 2.0), (2.0, 0.4), (0.0, 2.0)])),\n", + " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.4), (4.0, 0.0)]),\n", + " ]\n", + " },\n", + " \"polygon butterfly 2c\": {\n", + " \"peilgebieden\": [\n", + " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.6), (4.0, 0.0), (4.0, 2.0), (2.0, 0.6), (0.0, 2.0)])),\n", + " ]\n", + " },\n", + " \"polygon butterfly 2d\": {\n", + " \"peilgebieden\": [\n", + " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.6), (4.0, 0.0), (4.0, 2.0), (2.0, 0.6), (0.0, 2.0)])),\n", + " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.6), (4.0, 0.0)]),\n", + " ]\n", + " },\n", + " \"polygon butterfly 2e\": {\n", + " \"peilgebieden\": [\n", + " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.55), (4.0, 0.0), (4.0, 2.0), (2.0, 0.55), (0.0, 2.0)])),\n", + " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.55), (4.0, 0.0)]),\n", + " ]\n", + " },\n", + " \"polygon butterfly 3a\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.5), (0.0, 2.0)]),\n", + " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (4.0, 0.0), (2.0, 0.5), (4.0, 2.0), (0.0, 2.0), (2.0, 0.5)])),\n", + " ]\n", + " },\n", + " \"polygon butterfly 3b\": {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.4), (0.0, 2.0)]),\n", + " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (4.0, 0.0), (2.0, 0.4), (4.0, 2.0), (0.0, 2.0), (2.0, 0.4)])),\n", + " ]\n", + " },\n", + "}\n", + "\n", + "linelist = [\n", + " shapely.geometry.LineString([(0.5, 0.5), (3.5, 0.5)]),\n", + " shapely.geometry.LineString([(0.5, 0.7), (2.0, 0.7)]),\n", + " shapely.geometry.LineString([(2.0, 0.7), (3.5, 0.7)]),\n", + " shapely.geometry.LineString([(0.5, 0.9), (2.0, 0.9)]),\n", + " shapely.geometry.LineString([(3.5, 0.9), (2.0, 0.9)]),\n", + " shapely.geometry.LineString([(3.8, 0.9), (3.5, 0.9)]),\n", + " shapely.geometry.LineString([(3.5, 1.5), (0.5, 1.5)])\n", + "]\n", + "\n", + "filterlist = [\n", + " shapely.geometry.LineString([(1.0, 0.7), (2.0, 0.7)]),\n", + " shapely.geometry.LineString([(2.0, 0.7), (3.0, 0.7)]),\n", + " shapely.geometry.LineString([(1.0, 0.9), (3.0, 0.9)]),\n", + "]\n", + "\n", + "\n", + "nofilter = polygons.copy()\n", + "withfilter = polygons.copy()\n", + "for testname, options in nofilter.items():\n", + " options[\"hydroobjecten\"] = linelist.copy()\n", + " nofilter[testname] = options.copy()\n", + " \n", + " options[\"duikersifonhevel\"] = filterlist.copy()\n", + " withfilter[testname] = options.copy()\n", + " \n", + "\n", + "nofilter[\"driehoek 1a\"] = {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(2, 0), (4, 0), (4, 2), (2, 2)]),\n", + " ],\n", + " \"hydroobjecten\": [\n", + " shapely.geometry.LineString([(0.5, 0.5), (2, 1)]),\n", + " shapely.geometry.LineString([(0.5, 1.5), (2, 1)]),\n", + " shapely.geometry.LineString([(2, 1), (3.5, 0.5)]),\n", + " ],\n", + "}\n", + "nofilter[\"driehoek 1b\"] = {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(2, 0), (4, 0), (4, 2), (2, 2)]),\n", + " ],\n", + " \"hydroobjecten\": [\n", + " shapely.geometry.LineString([(0.5, 0.5), (2.1, 1)]),\n", + " shapely.geometry.LineString([(0.5, 1.5), (2.1, 1)]),\n", + " shapely.geometry.LineString([(2.1, 1), (3.5, 0.5)]),\n", + " ],\n", + "}\n", + "nofilter[\"driehoek 1c\"] = {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(2, 0), (4, 0), (4, 2), (2, 2)]),\n", + " ],\n", + " \"hydroobjecten\": [\n", + " shapely.geometry.LineString([(0.5, 0.5), (1.9, 1)]),\n", + " shapely.geometry.LineString([(0.5, 1.5), (1.9, 1)]),\n", + " shapely.geometry.LineString([(1.9, 1), (3.5, 0.5)]),\n", + " ],\n", + "}\n", + "nofilter[\"driehoek 2\"] = {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(2, 0), (4, 0), (4, 2), (2, 2)]),\n", + " ],\n", + " \"hydroobjecten\": [\n", + " shapely.geometry.LineString([(3.5, 1.5), (2, 1)]),\n", + " shapely.geometry.LineString([(3.5, 0.5), (2, 1)]),\n", + " shapely.geometry.LineString([(2, 1), (0.5, 0.5)]),\n", + " ],\n", + "}\n", + "nofilter[\"driehoek 3\"] = {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(2, 0), (4, 0), (4, 2), (2, 2)]),\n", + " ],\n", + " \"hydroobjecten\": [\n", + " shapely.geometry.LineString([(3.5, 1.5), (2, 1)]),\n", + " shapely.geometry.LineString([(3.5, 0.5), (2, 1)]),\n", + " shapely.geometry.LineString([(0.5, 0.5), (2, 1)]),\n", + " ],\n", + "}\n", + "nofilter[\"volgorde groep 1\"] = {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(2, 0), (2.2, 0), (2.2, 2), (2, 2)]),\n", + " shapely.geometry.Polygon([(2.2, 0), (4, 0), (4, 2), (2.2, 2)]),\n", + " ],\n", + " \"hydroobjecten\": [\n", + " shapely.geometry.LineString([(0.5, 0.5), (2.1, 0.5)]),\n", + " shapely.geometry.LineString([(2.1, 0.5), (3.5, 0.5)]),\n", + " ],\n", + "}\n", + "nofilter[\"volgorde groep 2\"] = {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(2, 0), (2.2, 0), (2.2, 2), (2, 2)]),\n", + " shapely.geometry.Polygon([(2.2, 0), (4, 0), (4, 2), (2.2, 2)]),\n", + " ],\n", + " \"hydroobjecten\": [\n", + " shapely.geometry.LineString([(2.1, 0.5), (0.5, 0.5)]),\n", + " shapely.geometry.LineString([(3.5, 0.5), (2.1, 0.5)]),\n", + " ],\n", + "}\n", + "nofilter[\"volgorde groep 3\"] = {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(2, 0), (2.2, 0), (2.2, 2), (2, 2)]),\n", + " shapely.geometry.Polygon([(2.2, 0), (4, 0), (4, 2), (2.2, 2)]),\n", + " ],\n", + " \"hydroobjecten\": [\n", + " shapely.geometry.LineString([(0.5, 0.5), (2.1, 0.5)]),\n", + " shapely.geometry.LineString([(3.5, 0.5), (2.1, 0.5)]),\n", + " ],\n", + "}\n", + "nofilter[\"volgorde groep 4\"] = {\n", + " \"peilgebieden\": [\n", + " shapely.geometry.Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]),\n", + " shapely.geometry.Polygon([(2, 0), (2.2, 0), (2.2, 2), (2, 2)]),\n", + " shapely.geometry.Polygon([(2.2, 0), (4, 0), (4, 2), (2.2, 2)]),\n", + " ],\n", + " \"hydroobjecten\": [\n", + " shapely.geometry.LineString([(2.1, 0.5), (0.5, 0.5)]),\n", + " shapely.geometry.LineString([(2.1, 0.5), (3.5, 0.5)]),\n", + " ],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8a965c64-38f9-4955-ba7e-680d52c151de", + "metadata": {}, + "outputs": [], + "source": [ + "testdir = pathlib.Path(\"tests/data\")\n", + "if not testdir.exists():\n", + " testdir.mkdir()\n", + "\n", + "for testlist in tqdm.tqdm([nofilter, withfilter]):\n", + " for test_name, options in testlist.items():\n", + " polyid = [f\"poly_{i+1}\" for i in range(len(options[\"peilgebieden\"]))]\n", + " polywl = [float(i + 1) for i in range(len(options[\"peilgebieden\"]))]\n", + " # df_peil = gpd.GeoDataFrame(dict(globalid=polyid, geometry=options[\"peilgebieden\"]), crs=\"epsg:28992\")\n", + " # df_streef = gpd.GeoDataFrame(dict(globalid=polyid, waterhoogte=polywl, geometry=len(options[\"peilgebieden\"]) * [None]), crs=\"epsg:28992\")\n", + " # lineid = [f\"line_{i+1}\" for i in range(len(options[\"hydroobjecten\"]))]\n", + " # df_hydro = gpd.GeoDataFrame(dict(globalid=lineid, geometry=options[\"hydroobjecten\"]), crs=\"epsg:28992\")\n", + "\n", + " df_peil = gpd.GeoDataFrame({\"globalid\": polyid, \"geometry\": options[\"peilgebieden\"]}, crs=\"epsg:28992\")\n", + " df_streef = gpd.GeoDataFrame({\"globalid\": polyid, \"waterhoogte\": polywl, \"geometry\": len(options[\"peilgebieden\"]) * [None]}, crs=\"epsg:28992\")\n", + " \n", + " lineid = [f\"line_{i+1}\" for i in range(len(options[\"hydroobjecten\"]))]\n", + " df_hydro = gpd.GeoDataFrame({\"globalid\": lineid, \"geometry\": options[\"hydroobjecten\"]}, crs=\"epsg:28992\")\n", + " \n", + " if \"duikersifonhevel\" not in options:\n", + " # Empty filter\n", + " gpkg_path1 = testdir.joinpath(f\"nofilter_{test_name}.gpkg\")\n", + " df_hydro.to_file(gpkg_path1, layer=\"hydroobject\")\n", + " df_peil.to_file(gpkg_path1, layer=\"peilgebied\")\n", + " df_streef.to_file(gpkg_path1, layer=\"streefpeil\")\n", + " with warnings.catch_warnings():\n", + " warnings.simplefilter(action=\"ignore\", category=UserWarning)\n", + " gpd.GeoDataFrame(columns=[\"globalid\", \"geometry\"]).to_file(gpkg_path1, layer=\"stuw\")\n", + " gpd.GeoDataFrame(columns=[\"globalid\", \"geometry\"]).to_file(gpkg_path1, layer=\"gemaal\")\n", + " gpd.GeoDataFrame(columns=[\"globalid\", \"geometry\"]).to_file(gpkg_path1, layer=\"duikersifonhevel\")\n", + " else:\n", + " # With filter\n", + " gpkg_path2 = testdir.joinpath(f\"withfilter_{test_name}.gpkg\")\n", + " df_hydro.to_file(gpkg_path2, layer=\"hydroobject\")\n", + " df_peil.to_file(gpkg_path2, layer=\"peilgebied\")\n", + " df_streef.to_file(gpkg_path2, layer=\"streefpeil\")\n", + " polyfl = [f\"dsh_{i+1}\" for i in range(len(options[\"duikersifonhevel\"]))]\n", + " # df_filter = gpd.GeoDataFrame(dict(globalid=polyfl, geometry=options[\"duikersifonhevel\"]), crs=\"epsg:28992\")\n", + " df_filter = gpd.GeoDataFrame({\"globalid\": polyfl, \"geometry\": options[\"duikersifonhevel\"]}, crs=\"epsg:28992\")\n", + "\n", + " df_filter.to_file(gpkg_path2, layer=\"duikersifonhevel\")\n", + " with warnings.catch_warnings():\n", + " warnings.simplefilter(action=\"ignore\", category=UserWarning)\n", + " gpd.GeoDataFrame(columns=[\"globalid\", \"geometry\"]).to_file(gpkg_path2, layer=\"stuw\")\n", + " gpd.GeoDataFrame(columns=[\"globalid\", \"geometry\"]).to_file(gpkg_path2, layer=\"gemaal\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "633f4754-9354-4f3b-8bb5-087d9de1d5a5", + "metadata": {}, + "outputs": [], + "source": [ + "def make_plot(df_peil, df_hydro, df_streef, df_filter, df_crossings):\n", + " plt.close(\"all\")\n", + " fig, ax = plt.subplots(figsize=(8, 5), dpi=100)\n", + "\n", + " # old_len = len(df_peil)\n", + " dfp = df_peil.copy().explode(index_parts=True)\n", + " dfs = df_streef.set_index(\"globalid\", inplace=False)\n", + " for i, row in enumerate(dfp.itertuples()):\n", + " coords = row.geometry.exterior.coords\n", + "# if old_len == len(dfp):\n", + " xtext = row.geometry.centroid.x - 0.5\n", + " ytext = row.geometry.centroid.y\n", + "# else:\n", + "# xtext = coords[0][0] + 0.05\n", + "# ytext = coords[0][1]\n", + " if (i % 2) == 0:\n", + " ytext += 0.05\n", + " else:\n", + " ytext -= 0.05\n", + "\n", + " ax.text(xtext, ytext, f\"{row.globalid}, wl={dfs.waterhoogte.at[row.globalid]}m\", alpha=0.5)\n", + " ax.add_patch(Polygon(coords, alpha=0.5, lw=1, facecolor=\"powderblue\", edgecolor=\"skyblue\"))\n", + "\n", + " dfh = df_hydro.explode(index_parts=True)\n", + " for row in dfh.itertuples():\n", + " coords = np.array(row.geometry.coords)\n", + " x, y = coords[:,0], coords[:,1]\n", + " offset = row.geometry.interpolate(0.1, normalized=True)\n", + " ax.arrow(x[0], y[0], offset.x - x[0], offset.y - y[0], shape=\"full\", lw=0, length_includes_head=True, head_width=.05, color=\"steelblue\")\n", + " ax.text(offset.x, offset.y+0.05, row.globalid)\n", + " ax.plot(x, y, marker=\".\", markersize=5, lw=1, color=\"steelblue\")\n", + "\n", + " for row in df_crossings.itertuples():\n", + " if row.crossing_type == \"-10\":\n", + " ax.plot(row.geometry.x, row.geometry.y, marker=\"s\", markersize=5, color=\"olivedrab\")\n", + " elif row.crossing_type == \"00\":\n", + " ax.plot(row.geometry.x, row.geometry.y, marker=\"s\", markersize=5, color=\"indianred\")\n", + " else:\n", + " print(f\"{row.crossing_type=} not implemented\")\n", + " ax.plot(row.geometry.x, row.geometry.y, marker=\"s\", markersize=5, color=\"yellow\")\n", + "\n", + " dff = df_filter.explode(index_parts=True)\n", + " for row in dff.itertuples():\n", + " coords = np.array(row.geometry.coords)\n", + " x, y = coords[:,0], coords[:,1]\n", + " ax.plot(x, y, marker=\".\", markersize=5, lw=2, alpha=0.3, color=\"purple\")\n", + " \n", + " ax.set_xlim([-0.1, 4.1])\n", + " ax.set_ylim([-0.1, 2.1])\n", + " ax.set_aspect(\"equal\")\n", + " fig.tight_layout()\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7833bb4e-0c62-40df-a820-e5621bd924cd", + "metadata": {}, + "outputs": [], + "source": [ + "for i, gpkg_path in enumerate(sorted(testdir.glob(\"nofilter_*.gpkg\"))):\n", + " if gpkg_path.is_file() and gpkg_path.suffix == \".gpkg\":\n", + "# if \"butterfly 3b\" not in gpkg_path.stem and \"polygon within polygon 1\" not in gpkg_path.stem:\n", + "# continue\n", + "# if \"perfect fit on edge\" not in gpkg_path.stem:\n", + "# continue\n", + "# if \"polygon within polygon 1\" not in gpkg_path.stem:\n", + "# continue\n", + " # if \"narrow gap\" not in gpkg_path.stem:\n", + " # continue\n", + "# if \"driehoek\" not in gpkg_path.stem:\n", + "# continue\n", + "# if \"nofilter_narrow gap\" not in gpkg_path.stem:\n", + "# continue\n", + "# if \"volgorde groep\" not in gpkg_path.stem and \"nofilter_polygon butterfly 2e\" not in gpkg_path.stem and \"nofilter_perfect fit star 2\" not in gpkg_path.stem:\n", + "# continue\n", + "# if \"nofilter_polygon butterfly 2e\" not in gpkg_path.stem and \"nofilter_perfect fit star 2\" not in gpkg_path.stem:\n", + "# continue\n", + "\n", + " display(HTML(f\"

Test {i+1:02d}: {gpkg_path.stem}

\"))\n", + " cross = ParseCrossings(gpkg_path, disable_progress=True, show_log=True)\n", + " df_crossings = cross.find_crossings_with_peilgebieden(\"hydroobject\", group_stacked=True, filterlayer=None, agg_links=False)\n", + " df_crossings_valid = df_crossings[df_crossings.in_use].copy()\n", + "\n", + " test_output = df_crossings_valid.copy()\n", + " test_output[\"geom_x\"] = np.round(test_output.geometry.x, 8)\n", + " test_output[\"geom_y\"] = np.round(test_output.geometry.y, 8)\n", + " test_output = test_output.drop(columns=\"geometry\", inplace=False)\n", + " \n", + " # Make static test output\n", + " test_output.to_csv(testdir.joinpath(f\"output_{gpkg_path.stem}.csv\"), index=False)\n", + "\n", + " display(df_crossings)\n", + " display(df_crossings_valid)\n", + " make_plot(cross.df_gpkg[\"peilgebied\"], cross.df_gpkg[\"hydroobject\"], cross.df_gpkg[\"streefpeil\"], cross.df_gpkg[\"duikersifonhevel\"], df_crossings_valid)\n", + " display(HTML(\"
\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b2630053-7e0b-4040-abbf-c1993f1b1732", + "metadata": {}, + "outputs": [], + "source": [ + "for i, gpkg_path in enumerate(sorted(testdir.glob(\"withfilter_*.gpkg\"))):\n", + " if gpkg_path.is_file() and gpkg_path.suffix == \".gpkg\":\n", + "# if \"withfilter_polygon butterfly 1a\" not in gpkg_path.stem:\n", + "# continue\n", + " # if \"withfilter_narrow gap\" not in gpkg_path.stem:\n", + " # continue\n", + "# if \"scheldestromen\" not in gpkg_path.stem:\n", + "# continue\n", + "\n", + " display(HTML(f\"

Test {i+1:02d}: {gpkg_path.stem}

\"))\n", + "\n", + " cross = ParseCrossings(gpkg_path, disable_progress=True, show_log=True)\n", + " _, df_filter, df_crossings = cross.find_crossings_with_peilgebieden(\"hydroobject\", group_stacked=True, filterlayer=\"duikersifonhevel\", agg_links=False)\n", + " df_crossings_valid = df_crossings[df_crossings.in_use].copy()\n", + "\n", + " test_output = df_crossings_valid.copy()\n", + " test_output[\"geom_x\"] = np.round(test_output.geometry.x, 8)\n", + " test_output[\"geom_y\"] = np.round(test_output.geometry.y, 8)\n", + " test_output = test_output.drop(columns=\"geometry\", inplace=False)\n", + "\n", + " # Make static test output\n", + " test_output.to_csv(testdir.joinpath(f\"output_{gpkg_path.stem}.csv\"), index=False)\n", + "\n", + " display(df_crossings)\n", + " display(df_filter)\n", + " display(df_crossings_valid)\n", + " if \"scheldestromen\" not in gpkg_path.stem:\n", + " make_plot(cross.df_gpkg[\"peilgebied\"], cross.df_gpkg[\"hydroobject\"], cross.df_gpkg[\"streefpeil\"], cross.df_gpkg[\"duikersifonhevel\"], df_crossings_valid)\n", + " display(HTML(\"
\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4f834db9-ddfd-4ebd-8e6e-7232dd99a7cf", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:ribasim]", + "language": "python", + "name": "conda-env-ribasim-py" + }, + "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.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/01b_ad_krw_to_peilgebieden.ipynb b/src/peilbeheerst_model/01b_ad_krw_to_peilgebieden.ipynb new file mode 100644 index 0000000..0d2a4bc --- /dev/null +++ b/src/peilbeheerst_model/01b_ad_krw_to_peilgebieden.ipynb @@ -0,0 +1,104 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "8e3aee81-bf33-4516-8850-26b5765669e2", + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import pathlib\n", + "\n", + "import geopandas as gpd\n", + "import pandas as pd\n", + "from IPython.core.display import HTML\n", + "from peilbeheerst_model import ParseCrossings\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d037c21b-381a-4910-a801-f1d83924c555", + "metadata": {}, + "outputs": [], + "source": [ + "with open(\"waterschappen.json\") as f:\n", + " waterschap_data = json.load(f)\n", + "\n", + "print_df = {}\n", + "for waterschap, waterschap_struct in waterschap_data.items():\n", + " for funcname, func_args in waterschap_struct.items():\n", + " if funcname not in print_df:\n", + " print_df[funcname] = []\n", + " print_df[funcname].append(pd.Series(func_args, name=waterschap))\n", + "\n", + "for funcname, df in print_df.items():\n", + " display(HTML(f\"

Function {funcname}:

\"))\n", + " display(pd.DataFrame(df))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a797396c-2f6a-4c59-983f-2f195de9bf87", + "metadata": {}, + "outputs": [], + "source": [ + "for waterschap, waterschap_struct in waterschap_data.items():\n", + " print(f\"\\n{waterschap}...\")\n", + " \n", + " init_settings, crossing_settings = waterschap_struct.values()\n", + " gpkg = pathlib.Path(init_settings[\"output_path\"])\n", + " if not gpkg.exists():\n", + " raise ValueError(gpkg)\n", + "\n", + " df_peilgebieden = gpd.read_file(gpkg, layer=\"peilgebied\")\n", + " org_shape = df_peilgebieden.shape\n", + " df_peilgebieden = ParseCrossings._make_valid_2dgeom(df_peilgebieden)\n", + "\n", + " df_peilgebieden = ParseCrossings.add_krw_to_peilgebieden(\n", + " df_peilgebieden, \n", + " init_settings[\"krw_path\"],\n", + " init_settings[\"krw_column_id\"],\n", + " init_settings[\"krw_column_name\"],\n", + " init_settings[\"krw_min_overlap\"],\n", + " \",\",\n", + " )\n", + "\n", + " assert df_peilgebieden.shape[0] == org_shape[0]\n", + " df_peilgebieden.to_file(gpkg, layer=\"peilgebied\")\n", + " print(gpkg)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5225ced2-77c6-4cfb-b7c5-50a4e86fb95b", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:ribasim]", + "language": "python", + "name": "conda-env-ribasim-py" + }, + "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.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/02_crossings_to_ribasim_notebook.ipynb b/src/peilbeheerst_model/02_crossings_to_ribasim_notebook.ipynb new file mode 100644 index 0000000..b58b8d6 --- /dev/null +++ b/src/peilbeheerst_model/02_crossings_to_ribasim_notebook.ipynb @@ -0,0 +1,1512 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 6, + "id": "698d0fb7-f655-4ef4-8f2c-4007711a6f97", + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "import warnings\n", + "from pathlib import Path\n", + "\n", + "import pandas as pd\n", + "import ribasim\n", + "from crossings_to_ribasim import *\n", + "from ribasim import Model\n", + "\n", + "pd.set_option('display.max_columns', None)\n", + "warnings.filterwarnings('ignore') #Let op!!!!!!!!!!!!!! Waarschuwingen worden genegeerd\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "ribasim.__version__\n", + "\n", + "\n", + "#load ribasim_nl\n", + "module_path = Path.cwd() / '../ribasim_nl/'\n", + "sys.path.append(str(module_path))\n", + "\n", + "#load crossings_to_ribasim.py\n", + "sys.path.append('peilbeheerst_model')" + ] + }, + { + "cell_type": "markdown", + "id": "1727b840-0c96-4801-976f-44638063e2ef", + "metadata": {}, + "source": [ + "# Amstel, Gooi en Vecht" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "894a203e-0681-407e-83c9-f30cff83287c", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done\n" + ] + } + ], + "source": [ + " \n", + "model_characteristics = { \n", + " #model description\n", + " 'waterschap': 'AmstelGooienVecht',\n", + " 'modelname': '20240417_samenwerkdag',\n", + " 'modeltype': 'boezemmodel',\n", + "\n", + " #define paths\n", + " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/AmstelGooienVecht/AGV.gpkg\",\n", + " 'path_crossings' : \"../../../../Data_crossings/AmstelGooienVecht/agv_crossings_v05.gpkg\",\n", + " 'path_boezem': \"../../../../Data_shortest_path/AGV/AGV_shortest_path.gpkg\", \n", + " 'path_Pdrive' : None,\n", + " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", + "\n", + " #apply filters\n", + " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", + " 'in_use' : True,\n", + " 'agg_links_in_use' : True,\n", + " 'agg_areas_in_use': True,\n", + " 'aggregation': True,\n", + "\n", + " #data storage settings\n", + " 'write_Pdrive' : False,\n", + " 'write_Zdrive' : True,\n", + " 'write_goodcloud' : True, \n", + " 'write_checks' : True,\n", + " 'write_symbology' : True,\n", + "\n", + "\n", + " #numerical settings\n", + " 'solver': None,\n", + " 'logging': None,\n", + " 'starttime': '2024-01-01 00:00:00',\n", + " 'endtime': '2024-01-02 00:00:00',\n", + " }\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "\n", + "post_processed_data, crossings = waterboard.read_files()\n", + "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", + "crossings = waterboard.assign_node_ids(crossings)\n", + "edges = waterboard.create_edges(crossings)\n", + "nodes, edges = waterboard.create_nodes(crossings, edges)\n", + "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", + "\n", + "#create individual model parts of the network\n", + "network = RibasimNetwork(nodes = nodes, \n", + " edges = edges, \n", + " model_characteristics = model_characteristics)\n", + "\n", + "edge = network.edge()\n", + "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", + "pump_node, pump_static = network.pump()\n", + "tabulated_rating_curve_node, tabulated_rating_curve_static = network.tabulated_rating_curve()\n", + "level_boundary_node, level_boundary_static = network.level_boundary()\n", + "flow_boundary_node, flow_boundary_static = network.flow_boundary()\n", + "manning_resistance_node, manning_resistance_static = network.manning_resistance()\n", + "terminal_node = network.terminal()\n", + "\n", + "# linear_resistance = network.linear_resistance()\n", + "# fractional_flow = network.fractional_flow()\n", + "# outlet = network.outlet()\n", + "# discrete_control = network.discrete_control()\n", + "# pid_control = network.pid_control()\n", + "\n", + "#insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics['starttime'], \n", + " endtime=model_characteristics['endtime'], \n", + " crs=\"EPSG:28992\")\n", + "\n", + "model.edge = edge\n", + "\n", + "model.basin.node = basin_node\n", + "model.basin.profile = basin_profile\n", + "model.basin.static = basin_static\n", + "model.basin.state = basin_state\n", + "model.basin.area = basin_area\n", + "\n", + "model.pump.node = pump_node\n", + "model.pump.static = pump_static\n", + "\n", + "model.tabulated_rating_curve.node = tabulated_rating_curve_node\n", + "model.tabulated_rating_curve.static = tabulated_rating_curve_static\n", + "\n", + "model.manning_resistance.node = manning_resistance_node\n", + "model.manning_resistance.static = manning_resistance_static\n", + "\n", + "model.level_boundary.node = level_boundary_node\n", + "model.level_boundary.static = level_boundary_static\n", + "\n", + "model.flow_boundary.node = flow_boundary_node\n", + "model.flow_boundary.static = flow_boundary_static\n", + "\n", + "model.terminal.node = terminal_node\n", + "\n", + "#add checks and metadata\n", + "checks = network.check(model, post_processed_data = post_processed_data, crossings = crossings)\n", + "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", + "\n", + "#write the result\n", + "network.WriteResults(model = model, checks = checks)\n" + ] + }, + { + "cell_type": "markdown", + "id": "00b919b6-92ba-4d8e-b6aa-6818ae84a9e2", + "metadata": {}, + "source": [ + "# Delfland" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5fc9b8a4-0ce0-46dd-9103-a10123e5bb3c", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + " \n", + "model_characteristics = { \n", + " #model description\n", + " 'waterschap': 'Delfland',\n", + " 'modelname': '20240423_omgedraaid',\n", + " 'modeltype': 'boezemmodel',\n", + "\n", + " #define paths\n", + " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/Delfland/Delfland.gpkg\",\n", + " 'path_crossings' : \"../../../../Data_crossings/Delfland/delfland_crossings_v08.gpkg\",\n", + " 'path_boezem': \"../../../../Data_shortest_path/Delfland/Delfland_shortest_path.gpkg\",\n", + " 'path_Pdrive' : None,\n", + " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", + "\n", + " #apply filters\n", + " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", + " 'in_use' : True,\n", + " 'agg_links_in_use' : True,\n", + " 'agg_areas_in_use': True,\n", + " 'aggregation': True,\n", + "\n", + " #data storage settings\n", + " 'write_Pdrive' : False,\n", + " 'write_Zdrive' : True,\n", + " 'write_goodcloud' : True,\n", + " 'write_checks' : True,\n", + " 'write_symbology' : True,\n", + "\n", + "\n", + " #numerical settings\n", + " 'solver': None,\n", + " 'logging': None,\n", + " 'starttime': '2024-01-01 00:00:00',\n", + " 'endtime': '2024-01-02 00:00:00',\n", + " }\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "\n", + "post_processed_data, crossings = waterboard.read_files()\n", + "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", + "crossings = waterboard.assign_node_ids(crossings)\n", + "edges = waterboard.create_edges(crossings)\n", + "nodes, edges = waterboard.create_nodes(crossings, edges)\n", + "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", + "\n", + "\n", + "#create individual model parts of the network\n", + "network = RibasimNetwork(nodes = nodes, \n", + " edges = edges, \n", + " model_characteristics = model_characteristics)\n", + "\n", + "edge = network.edge()\n", + "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", + "pump_node, pump_static = network.pump()\n", + "tabulated_rating_curve_node, tabulated_rating_curve_static = network.tabulated_rating_curve()\n", + "level_boundary_node, level_boundary_static = network.level_boundary()\n", + "flow_boundary_node, flow_boundary_static = network.flow_boundary()\n", + "manning_resistance_node, manning_resistance_static = network.manning_resistance()\n", + "terminal_node = network.terminal()\n", + "\n", + "# linear_resistance = network.linear_resistance()\n", + "# fractional_flow = network.fractional_flow()\n", + "# outlet = network.outlet()\n", + "# discrete_control = network.discrete_control()\n", + "# pid_control = network.pid_control()\n", + "#insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics['starttime'], \n", + " endtime=model_characteristics['endtime'], \n", + " crs=\"EPSG:28992\")\n", + "\n", + "model.edge = edge\n", + "\n", + "model.basin.node = basin_node\n", + "model.basin.profile = basin_profile\n", + "model.basin.static = basin_static\n", + "model.basin.state = basin_state\n", + "model.basin.area = basin_area\n", + "\n", + "model.pump.node = pump_node\n", + "model.pump.static = pump_static\n", + "\n", + "model.tabulated_rating_curve.node = tabulated_rating_curve_node\n", + "model.tabulated_rating_curve.static = tabulated_rating_curve_static\n", + "\n", + "model.level_boundary.node = level_boundary_node\n", + "model.level_boundary.static = level_boundary_static\n", + "\n", + "model.flow_boundary.node = flow_boundary_node\n", + "model.flow_boundary.static = flow_boundary_static\n", + "\n", + "model.manning_resistance.node = manning_resistance_node\n", + "model.manning_resistance.static = manning_resistance_static\n", + "\n", + "model.terminal.node = terminal_node\n", + "\n", + "\n", + "#add checks and metadata\n", + "checks = network.check(post_processed_data = post_processed_data, crossings = crossings)\n", + "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", + "\n", + "#write the result\n", + "network.WriteResults(model = model, checks = checks)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5b309773-f18f-4d93-9986-f8a88d4c118f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "3d1ef23c-590a-467d-a855-7c122d7b2950", + "metadata": {}, + "source": [ + "# Hollandse Delta" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b093ce38-a5e7-4c89-a5c8-0715a0262f32", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + " \n", + "model_characteristics = { \n", + " #model description\n", + " 'waterschap': 'HollandseDelta',\n", + " 'modelname': '20240417_samenwerkdag',\n", + " 'modeltype': 'boezemmodel',\n", + "\n", + " #define paths\n", + " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/Hollandse_Delta/HD.gpkg\",\n", + " 'path_crossings' : \"../../../../Data_crossings/Hollandse_Delta/hd_crossings_v06.gpkg\",\n", + " 'path_Pdrive' : None,\n", + " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", + " 'path_boezem': \"../../../../Data_shortest_path/Hollandse_Delta/HD_shortest_path.gpkg\",\n", + "\n", + " #apply filters\n", + " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", + " 'in_use' : True,\n", + " 'agg_links_in_use' : True,\n", + " 'agg_areas_in_use': True,\n", + " 'aggregation': True,\n", + "\n", + " #data storage settings\n", + " 'write_Pdrive' : False,\n", + " 'write_Zdrive' : True,\n", + " 'write_goodcloud' : True,\n", + " 'write_checks' : True,\n", + " 'write_symbology' : True,\n", + "\n", + "\n", + " #numerical settings\n", + " 'solver': None,\n", + " 'logging': None,\n", + " 'starttime': '2024-01-01 00:00:00',\n", + " 'endtime': '2024-01-02 00:00:00',\n", + " }\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "\n", + "post_processed_data, crossings = waterboard.read_files()\n", + "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", + "crossings = waterboard.assign_node_ids(crossings)\n", + "edges = waterboard.create_edges(crossings)\n", + "nodes, edges = waterboard.create_nodes(crossings, edges)\n", + "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", + "\n", + "\n", + "\n", + "#create individual model parts of the network\n", + "network = RibasimNetwork(nodes = nodes, \n", + " edges = edges, \n", + " model_characteristics = model_characteristics)\n", + "\n", + "edge = network.edge()\n", + "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", + "pump_node, pump_static = network.pump()\n", + "tabulated_rating_curve_node, tabulated_rating_curve_static = network.tabulated_rating_curve()\n", + "level_boundary_node, level_boundary_static = network.level_boundary()\n", + "flow_boundary_node, flow_boundary_static = network.flow_boundary()\n", + "manning_resistance_node, manning_resistance_static = network.manning_resistance()\n", + "terminal_node = network.terminal()\n", + "\n", + "# linear_resistance = network.linear_resistance()\n", + "# fractional_flow = network.fractional_flow()\n", + "# outlet = network.outlet()\n", + "# discrete_control = network.discrete_control()\n", + "# pid_control = network.pid_control()\n", + "\n", + "#insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics['starttime'], \n", + " endtime=model_characteristics['endtime'], \n", + " crs=\"EPSG:28992\")\n", + "\n", + "model.edge = edge\n", + "\n", + "model.basin.node = basin_node\n", + "model.basin.profile = basin_profile\n", + "model.basin.static = basin_static\n", + "model.basin.state = basin_state\n", + "model.basin.area = basin_area\n", + "\n", + "model.pump.node = pump_node\n", + "model.pump.static = pump_static\n", + "\n", + "model.tabulated_rating_curve.node = tabulated_rating_curve_node\n", + "model.tabulated_rating_curve.static = tabulated_rating_curve_static\n", + "\n", + "model.level_boundary.node = level_boundary_node\n", + "model.level_boundary.static = level_boundary_static\n", + "\n", + "model.flow_boundary.node = flow_boundary_node\n", + "model.flow_boundary.static = flow_boundary_static\n", + "\n", + "model.manning_resistance.node = manning_resistance_node\n", + "model.manning_resistance.static = manning_resistance_static\n", + "\n", + "model.terminal.node = terminal_node\n", + "\n", + "#add checks and metadata\n", + "checks = network.check(post_processed_data = post_processed_data, crossings = crossings)\n", + "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", + "\n", + "#write the result\n", + "network.WriteResults(model = model, checks = checks)\n" + ] + }, + { + "cell_type": "markdown", + "id": "164a32d0-1bfa-458e-96fe-ce3e39b4f896", + "metadata": {}, + "source": [ + "# Hollands Noorderkwartier" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "dacfbfbf-c8de-486f-a1e3-3ae0ab5084c2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done\n" + ] + } + ], + "source": [ + " \n", + "model_characteristics = { \n", + " #model description\n", + " 'waterschap': 'HollandsNoorderkwartier',\n", + " 'modelname': '20240502',\n", + " 'modeltype': 'boezemmodel',\n", + "\n", + " #define paths\n", + " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/HHNK/Noorderkwartier.gpkg\",\n", + " 'path_crossings' : \"../../../../Data_crossings/HHNK/hhnk_crossings_v26.gpkg\",\n", + " 'path_Pdrive' : None,\n", + " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", + " 'path_boezem': \"../../../../Data_shortest_path/HHNK/HHNK_shortest_path.gpkg\",\n", + "\n", + " #apply filters\n", + " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", + " 'in_use' : True,\n", + " 'agg_links_in_use' : True,\n", + " 'agg_areas_in_use': True,\n", + " 'aggregation': True,\n", + "\n", + " #data storage settings\n", + " 'write_Pdrive' : False,\n", + " 'write_Zdrive' : True,\n", + " 'write_goodcloud' : True,\n", + " 'write_checks' : True,\n", + " 'write_symbology' : True,\n", + "\n", + "\n", + " #numerical settings\n", + " 'solver': None,\n", + " 'logging': None,\n", + " 'starttime': '2024-01-01 00:00:00',\n", + " 'endtime': '2024-01-02 00:00:00',\n", + " }\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "\n", + "post_processed_data, crossings = waterboard.read_files()\n", + "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", + "crossings = waterboard.assign_node_ids(crossings)\n", + "edges = waterboard.create_edges(crossings)\n", + "nodes, edges = waterboard.create_nodes(crossings, edges)\n", + "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", + "edges = waterboard.change_boezems_manually(edges)\n", + "\n", + "\n", + "#create individual model parts of the network\n", + "network = RibasimNetwork(nodes = nodes, \n", + " edges = edges, \n", + " model_characteristics = model_characteristics)\n", + "\n", + "edge = network.edge()\n", + "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", + "pump_node, pump_static = network.pump()\n", + "tabulated_rating_curve_node, tabulated_rating_curve_static = network.tabulated_rating_curve()\n", + "level_boundary_node, level_boundary_static = network.level_boundary()\n", + "flow_boundary_node, flow_boundary_static = network.flow_boundary()\n", + "manning_resistance_node, manning_resistance_static = network.manning_resistance()\n", + "terminal_node = network.terminal()\n", + "\n", + "# linear_resistance = network.linear_resistance()\n", + "# fractional_flow = network.fractional_flow()\n", + "# outlet = network.outlet()\n", + "# discrete_control = network.discrete_control()\n", + "# pid_control = network.pid_control()\n", + "\n", + "#insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics['starttime'], \n", + " endtime=model_characteristics['endtime'], \n", + " crs=\"EPSG:28992\")\n", + "\n", + "model.edge = edge\n", + "\n", + "model.basin.node = basin_node\n", + "model.basin.profile = basin_profile\n", + "model.basin.static = basin_static\n", + "model.basin.state = basin_state\n", + "model.basin.area = basin_area\n", + "\n", + "model.pump.node = pump_node\n", + "model.pump.static = pump_static\n", + "\n", + "model.tabulated_rating_curve.node = tabulated_rating_curve_node\n", + "model.tabulated_rating_curve.static = tabulated_rating_curve_static\n", + "\n", + "model.level_boundary.node = level_boundary_node\n", + "model.level_boundary.static = level_boundary_static\n", + "\n", + "model.flow_boundary.node = flow_boundary_node\n", + "model.flow_boundary.static = flow_boundary_static\n", + "\n", + "model.terminal.node = terminal_node\n", + "\n", + "#add checks and metadata\n", + "checks = network.check(model = model, post_processed_data = post_processed_data, crossings = crossings)\n", + "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", + "\n", + "#write the result\n", + "network.WriteResults(model = model, checks = checks)\n" + ] + }, + { + "cell_type": "markdown", + "id": "1584b072-7343-45f9-931f-c47b5e017919", + "metadata": {}, + "source": [ + "# Rijnland" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "4d849e83-6a82-4e0e-ba71-455a3ac70f1b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done\n" + ] + } + ], + "source": [ + "model_characteristics = { \n", + " #model description\n", + " 'waterschap': 'Rijnland',\n", + " 'modelname': '20240414_aggregated',\n", + " 'modeltype': 'boezemmodel',\n", + "\n", + " #define paths\n", + " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/Rijnland/Rijnland.gpkg\",\n", + " 'path_crossings' : \"../../../../Data_crossings/Rijnland/rijnland_crossings_v04.gpkg\",\n", + " 'path_Pdrive' : None,\n", + " 'path_boezem': \"../../../../Data_shortest_path/Rijnland/Rijnland_shortest_path.gpkg\",\n", + " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", + "\n", + " #apply filters\n", + " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", + " 'in_use' : True,\n", + " 'agg_links_in_use' : True,\n", + " 'agg_areas_in_use': True,\n", + " 'aggregation': True,\n", + "\n", + " #data storage settings\n", + " 'write_Pdrive' : False,\n", + " 'write_Zdrive' : True,\n", + " 'write_goodcloud' : True,\n", + " 'write_checks' : True,\n", + " 'write_symbology' : True,\n", + "\n", + "\n", + " #numerical settings\n", + " 'solver': None,\n", + " 'logging': None,\n", + " 'starttime': '2024-01-01 00:00:00',\n", + " 'endtime': '2024-01-02 00:00:00',\n", + " }\n", + "\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "\n", + "post_processed_data, crossings = waterboard.read_files()\n", + "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", + "crossings = waterboard.assign_node_ids(crossings)\n", + "edges = waterboard.create_edges(crossings)\n", + "nodes, edges = waterboard.create_nodes(crossings, edges)\n", + "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", + "\n", + "\n", + "\n", + "#create individual model parts of the network\n", + "network = RibasimNetwork(nodes = nodes, \n", + " edges = edges, \n", + " model_characteristics = model_characteristics)\n", + "\n", + "edge = network.edge()\n", + "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", + "pump_node, pump_static = network.pump()\n", + "tabulated_rating_curve_node, tabulated_rating_curve_static = network.tabulated_rating_curve()\n", + "level_boundary_node, level_boundary_static = network.level_boundary()\n", + "flow_boundary_node, flow_boundary_static = network.flow_boundary()\n", + "manning_resistance_node, manning_resistance_static = network.manning_resistance()\n", + "terminal_node = network.terminal()\n", + "\n", + "# linear_resistance = network.linear_resistance()\n", + "# fractional_flow = network.fractional_flow()\n", + "# outlet = network.outlet()\n", + "# discrete_control = network.discrete_control()\n", + "# pid_control = network.pid_control()\n", + "\n", + "#insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics['starttime'], \n", + " endtime=model_characteristics['endtime'], \n", + " crs=\"EPSG:28992\")\n", + "\n", + "model.edge = edge\n", + "\n", + "model.basin.node = basin_node\n", + "model.basin.profile = basin_profile\n", + "model.basin.static = basin_static\n", + "model.basin.state = basin_state\n", + "model.basin.area = basin_area\n", + "\n", + "\n", + "model.pump.node = pump_node\n", + "model.pump.static = pump_static\n", + "\n", + "model.tabulated_rating_curve.node = tabulated_rating_curve_node\n", + "model.tabulated_rating_curve.static = tabulated_rating_curve_static\n", + "\n", + "model.level_boundary.node = level_boundary_node\n", + "model.level_boundary.static = level_boundary_static\n", + "\n", + "model.flow_boundary.node = flow_boundary_node\n", + "model.flow_boundary.static = flow_boundary_static\n", + "\n", + "model.manning_resistance.node = manning_resistance_node\n", + "model.manning_resistance.static = manning_resistance_static\n", + "\n", + "model.terminal.node = terminal_node\n", + "\n", + "#add checks and metadata\n", + "checks = network.check(post_processed_data = post_processed_data, \n", + " crossings = crossings,\n", + " model = model)\n", + "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", + "\n", + "#write the result\n", + "network.WriteResults(model = model, checks = checks)\n" + ] + }, + { + "cell_type": "markdown", + "id": "6bf50e62-98ed-415c-a79e-7819d010c8d5", + "metadata": {}, + "source": [ + "# Rivierenland" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d1a952bc-f7d4-41da-98c1-8600f6c5b11c", + "metadata": {}, + "outputs": [], + "source": [ + " \n", + "model_characteristics = { \n", + " #model description\n", + " 'waterschap': 'Rivierenland',\n", + " 'modelname': '20240402_bug_fix',\n", + " 'modeltype': 'boezemmodel',\n", + "\n", + " #define paths\n", + " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/WSRL/WSRL.gpkg\",\n", + " 'path_crossings' : \"../../../../Data_crossings/WSRL/wsrl_crossings_v06.gpkg\",\n", + " 'path_Pdrive' : None,\n", + " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", + " 'path_boezem': \"../../../../Data_shortest_path/WSRL/WSRL_shortest_path.gpkg\",\n", + "\n", + " #apply filters\n", + " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", + " 'in_use' : True,\n", + " 'agg_links_in_use' : True,\n", + " 'agg_areas_in_use': True,\n", + " 'aggregation': True,\n", + "\n", + " #data storage settings\n", + " 'write_Pdrive' : False,\n", + " 'write_Zdrive' : True,\n", + " 'write_goodcloud' : True,\n", + " 'write_checks' : True,\n", + " 'write_symbology' : True,\n", + "\n", + "\n", + " #numerical settings\n", + " 'solver': None,\n", + " 'logging': None,\n", + " 'starttime': '2024-01-01 00:00:00',\n", + " 'endtime': '2024-01-02 00:00:00',\n", + " }\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "\n", + "post_processed_data, crossings = waterboard.read_files()\n", + "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", + "crossings = waterboard.assign_node_ids(crossings)\n", + "edges = waterboard.create_edges(crossings)\n", + "nodes, edges = waterboard.create_nodes(crossings, edges)\n", + "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", + "\n", + "\n", + "\n", + "#create individual model parts of the network\n", + "network = RibasimNetwork(nodes = nodes, \n", + " edges = edges, \n", + " model_characteristics = model_characteristics)\n", + "\n", + "edge = network.edge()\n", + "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", + "pump_node, pump_static = network.pump()\n", + "tabulated_rating_curve_node, tabulated_rating_curve_static = network.tabulated_rating_curve()\n", + "level_boundary_node, level_boundary_static = network.level_boundary()\n", + "flow_boundary_node, flow_boundary_static = network.flow_boundary()\n", + "manning_resistance_node, manning_resistance_static = network.manning_resistance()\n", + "terminal_node = network.terminal()\n", + "\n", + "# linear_resistance = network.linear_resistance()\n", + "# fractional_flow = network.fractional_flow()\n", + "# outlet = network.outlet()\n", + "# discrete_control = network.discrete_control()\n", + "# pid_control = network.pid_control()\n", + "\n", + "#insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics['starttime'], \n", + " endtime=model_characteristics['endtime'], \n", + " crs=\"EPSG:28992\")\n", + "\n", + "model.edge = edge\n", + "\n", + "model.basin.node = basin_node\n", + "model.basin.profile = basin_profile\n", + "model.basin.static = basin_static\n", + "model.basin.state = basin_state\n", + "model.basin.area = basin_area\n", + "\n", + "model.pump.node = pump_node\n", + "model.pump.static = pump_static\n", + "\n", + "model.tabulated_rating_curve.node = tabulated_rating_curve_node\n", + "model.tabulated_rating_curve.static = tabulated_rating_curve_static\n", + "\n", + "model.level_boundary.node = level_boundary_node\n", + "model.level_boundary.static = level_boundary_static\n", + "\n", + "model.flow_boundary.node = flow_boundary_node\n", + "model.flow_boundary.static = flow_boundary_static\n", + "\n", + "model.terminal.node = terminal_node\n", + "\n", + "#add checks and metadata\n", + "checks = network.check(post_processed_data = post_processed_data, crossings = crossings)\n", + "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", + "\n", + "#write the result\n", + "network.WriteResults(model = model, checks = checks)\n", + "\n", + "model.tabulated_rating_curve.node = tabulated_rating_curve_node\n", + "model.tabulated_rating_curve.static = tabulated_rating_curve_static\n", + "\n", + "model.level_boundary.node = level_boundary_node\n", + "model.level_boundary.static = level_boundary_static\n", + "\n", + "model.flow_boundary.node = flow_boundary_node\n", + "model.flow_boundary.static = flow_boundary_static\n", + "\n", + "model.manning_resistance.node = manning_resistance_node\n", + "model.manning_resistance.static = manning_resistance_static\n", + "\n", + "model.terminal.node = terminal_node\n", + "\n", + "#add checks and metadata\n", + "checks = network.check(post_processed_data = post_processed_data, crossings = crossings)\n", + "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", + "\n", + "#write the result\n", + "network.WriteResults(model = model, checks = checks)\n" + ] + }, + { + "cell_type": "markdown", + "id": "6c079f11-7f01-44e6-8794-0eb8209b7110", + "metadata": {}, + "source": [ + "# Scheldestromen" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5ac210c0-151c-4490-9cd0-e708659bbe4c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done\n" + ] + } + ], + "source": [ + " \n", + "model_characteristics = { \n", + " #model description\n", + " 'waterschap': 'Scheldestromen',\n", + " 'modelname': '20240417_samenwerkdag',\n", + " 'modeltype': 'boezemmodel',\n", + "\n", + " #define paths\n", + " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/Scheldestromen/Scheldestromen.gpkg\",\n", + " 'path_crossings' : \"../../../../Data_crossings/Scheldestromen/scheldestromen_crossings_v02.gpkg\",\n", + " 'path_Pdrive' : None,\n", + " 'path_boezem': \"../../../../Data_shortest_path/Scheldestromen/Scheldestromen_shortest_path.gpkg\",\n", + " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", + "\n", + " #apply filters\n", + " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", + " 'in_use' : True,\n", + " 'agg_links_in_use' : True,\n", + " 'agg_areas_in_use': True,\n", + " 'aggregation': True,\n", + "\n", + " #data storage settings\n", + " 'write_Pdrive' : False,\n", + " 'write_Zdrive' : True,\n", + " 'write_goodcloud' : True,\n", + " 'write_checks' : True,\n", + " 'write_symbology' : True,\n", + "\n", + "\n", + " #numerical settings\n", + " 'solver': None,\n", + " 'logging': None,\n", + " 'starttime': '2024-01-01 00:00:00',\n", + " 'endtime': '2024-01-02 00:00:00',\n", + " }\n", + "\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "\n", + "post_processed_data, crossings = waterboard.read_files()\n", + "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", + "crossings = waterboard.assign_node_ids(crossings)\n", + "edges = waterboard.create_edges(crossings)\n", + "nodes, edges = waterboard.create_nodes(crossings, edges)\n", + "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", + "\n", + "\n", + "\n", + "#create individual model parts of the network\n", + "network = RibasimNetwork(nodes = nodes, \n", + " edges = edges, \n", + " model_characteristics = model_characteristics)\n", + "\n", + "edge = network.edge()\n", + "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", + "pump_node, pump_static = network.pump()\n", + "tabulated_rating_curve_node, tabulated_rating_curve_static = network.tabulated_rating_curve()\n", + "level_boundary_node, level_boundary_static = network.level_boundary()\n", + "flow_boundary_node, flow_boundary_static = network.flow_boundary()\n", + "manning_resistance_node, manning_resistance_static = network.manning_resistance()\n", + "terminal_node = network.terminal()\n", + "\n", + "# linear_resistance = network.linear_resistance()\n", + "# fractional_flow = network.fractional_flow()\n", + "# outlet = network.outlet()\n", + "# discrete_control = network.discrete_control()\n", + "# pid_control = network.pid_control()\n", + "\n", + "#insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics['starttime'], \n", + " endtime=model_characteristics['endtime'], \n", + " crs=\"EPSG:28992\")\n", + "\n", + "model.edge = edge\n", + "\n", + "model.basin.node = basin_node\n", + "model.basin.profile = basin_profile\n", + "model.basin.static = basin_static\n", + "model.basin.state = basin_state\n", + "model.basin.area = basin_area\n", + "\n", + "model.pump.node = pump_node\n", + "model.pump.static = pump_static\n", + "\n", + "model.tabulated_rating_curve.node = tabulated_rating_curve_node\n", + "model.tabulated_rating_curve.static = tabulated_rating_curve_static\n", + "\n", + "model.level_boundary.node = level_boundary_node\n", + "model.level_boundary.static = level_boundary_static\n", + "\n", + "model.flow_boundary.node = flow_boundary_node\n", + "model.flow_boundary.static = flow_boundary_static\n", + "\n", + "model.manning_resistance.node = manning_resistance_node\n", + "model.manning_resistance.static = manning_resistance_static\n", + "\n", + "model.terminal.node = terminal_node\n", + "\n", + "#add checks and metadata\n", + "checks = network.check(post_processed_data = post_processed_data, crossings = crossings, model = model)\n", + "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", + "\n", + "#write the result\n", + "# stop\n", + "network.WriteResults(model = model, checks = checks)\n" + ] + }, + { + "cell_type": "markdown", + "id": "0e9a9726-a95c-4f59-9d2c-cf1d1a7d557b", + "metadata": {}, + "source": [ + "# Schieland en de Krimpenerwaard" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "44f18817-06c8-40c0-8918-750587a6f599", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done\n" + ] + } + ], + "source": [ + " \n", + "model_characteristics = { \n", + " #model description\n", + " 'waterschap': 'SchielandendeKrimpenerwaard',\n", + " 'modelname': '20240429_check',\n", + " 'modeltype': 'boezemmodel',\n", + "\n", + " #define paths\n", + " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/HHSK/HHSK.gpkg\",\n", + " 'path_crossings' : \"../../../../Data_crossings/HHSK/hhsk_crossings_v04.gpkg\",\n", + " 'path_Pdrive' : None,\n", + " 'path_boezem': \"../../../../Data_shortest_path/HHSK/HHSK_shortest_path.gpkg\",\n", + " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", + "\n", + " #apply filters\n", + " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", + " 'in_use' : True,\n", + " 'agg_links_in_use' : True,\n", + " 'agg_areas_in_use': True,\n", + " 'aggregation': True,\n", + "\n", + " #data storage settings\n", + " 'write_Pdrive' : False,\n", + " 'write_Zdrive' : True,\n", + " 'write_goodcloud' : True,\n", + " 'write_checks' : True,\n", + " 'write_symbology' : True,\n", + "\n", + "\n", + " #numerical settings\n", + " 'solver': None,\n", + " 'logging': None,\n", + " 'starttime': '2024-01-01 00:00:00',\n", + " 'endtime': '2024-01-02 00:00:00',\n", + " }\n", + "\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "\n", + "post_processed_data, crossings = waterboard.read_files()\n", + "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", + "crossings = waterboard.assign_node_ids(crossings)\n", + "edges = waterboard.create_edges(crossings)\n", + "nodes, edges = waterboard.create_nodes(crossings, edges)\n", + "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", + "\n", + "#create individual model parts of the network\n", + "network = RibasimNetwork(nodes = nodes, \n", + " edges = edges, \n", + " model_characteristics = model_characteristics)\n", + "\n", + "edge = network.edge()\n", + "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", + "\n", + "pump_node, pump_static = network.pump()\n", + "tabulated_rating_curve_node, tabulated_rating_curve_static = network.tabulated_rating_curve()\n", + "level_boundary_node, level_boundary_static = network.level_boundary()\n", + "flow_boundary_node, flow_boundary_static = network.flow_boundary()\n", + "manning_resistance_node, manning_resistance_static = network.manning_resistance()\n", + "terminal_node = network.terminal()\n", + "\n", + "# linear_resistance = network.linear_resistance()\n", + "# fractional_flow = network.fractional_flow()\n", + "# outlet = network.outlet()\n", + "# discrete_control = network.discrete_control()\n", + "# pid_control = network.pid_control()\n", + "\n", + "#insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics['starttime'], \n", + " endtime=model_characteristics['endtime'], \n", + " crs=\"EPSG:28992\")\n", + "\n", + "model.edge = edge\n", + "\n", + "model.basin.node = basin_node\n", + "model.basin.profile = basin_profile\n", + "model.basin.static = basin_static\n", + "model.basin.state = basin_state\n", + "model.basin.area = basin_area\n", + "\n", + "model.pump.node = pump_node\n", + "model.pump.static = pump_static\n", + "\n", + "model.tabulated_rating_curve.node = tabulated_rating_curve_node\n", + "model.tabulated_rating_curve.static = tabulated_rating_curve_static\n", + "\n", + "model.level_boundary.node = level_boundary_node\n", + "model.level_boundary.static = level_boundary_static\n", + "\n", + "model.flow_boundary.node = flow_boundary_node\n", + "model.flow_boundary.static = flow_boundary_static\n", + "\n", + "model.manning_resistance.node = manning_resistance_node\n", + "model.manning_resistance.static = manning_resistance_static\n", + "\n", + "model.terminal.node = terminal_node\n", + "\n", + "#add checks and metadata\n", + "checks = network.check(model = model, post_processed_data = post_processed_data, crossings = crossings)\n", + "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", + "\n", + "#write the result\n", + "network.WriteResults(model = model, checks = checks)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "f96e0c9e-cf29-4eb2-abf0-6ab07873d2bb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
TabulatedRatingCurve / static
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
node_idactivecontrol_statelevelflow_ratemeta_type_verbinding
0161<NA>NaN0.00.0Inlaat
1161<NA>NaN1.01.0Inlaat
2162<NA>NaN0.00.0NaN
3162<NA>NaN1.01.0NaN
4163<NA>NaN0.00.0Uitlaat
.....................
529607<NA>NaN1.01.0NaN
530608<NA>NaN0.00.0Inlaat
531608<NA>NaN1.01.0Inlaat
532612<NA>NaN0.00.0NaN
533612<NA>NaN1.01.0NaN
\n", + "

534 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + "TabulatedRatingCurve / static\n", + " node_id active control_state level flow_rate meta_type_verbinding\n", + "0 161 NaN 0.0 0.0 Inlaat\n", + "1 161 NaN 1.0 1.0 Inlaat\n", + "2 162 NaN 0.0 0.0 NaN\n", + "3 162 NaN 1.0 1.0 NaN\n", + "4 163 NaN 0.0 0.0 Uitlaat\n", + ".. ... ... ... ... ... ...\n", + "529 607 NaN 1.0 1.0 NaN\n", + "530 608 NaN 0.0 0.0 Inlaat\n", + "531 608 NaN 1.0 1.0 Inlaat\n", + "532 612 NaN 0.0 0.0 NaN\n", + "533 612 NaN 1.0 1.0 NaN\n", + "\n", + "[534 rows x 6 columns]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.tabulated_rating_curve.static" + ] + }, + { + "cell_type": "markdown", + "id": "f8176275-f42d-4ab4-923d-3b739613ea2f", + "metadata": {}, + "source": [ + "# Wetterskip" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2ad4796a-a184-4be9-8106-cd9bd62fa369", + "metadata": {}, + "outputs": [], + "source": [ + " \n", + "model_characteristics = { \n", + " #model description\n", + " 'waterschap': 'WetterskipFryslan',\n", + " 'modelname': '20240417_samenwerkdag',\n", + " 'modeltype': 'boezemmodel',\n", + "\n", + " #define paths\n", + " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/Wetterskip/Wetterskip.gpkg\",\n", + " 'path_crossings' : \"../../../../Data_crossings/Wetterskip/wetterskip_crossings_v06.gpkg\",\n", + " 'path_Pdrive' : None,\n", + " 'path_boezem': \"../../../../Data_shortest_path/Wetterskip/Wetterskip_shortest_path.gpkg\",\n", + " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", + "\n", + " #apply filters\n", + " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", + " 'in_use' : True,\n", + " 'agg_links_in_use' : True,\n", + " 'agg_areas_in_use': True,\n", + " 'aggregation': True, ############################ LET OP\n", + "\n", + " #data storage settings\n", + " 'write_Pdrive' : False,\n", + " 'write_Zdrive' : True,\n", + " 'write_goodcloud' : True,\n", + " 'write_checks' : True,\n", + " 'write_symbology' : True,\n", + "\n", + "\n", + " #numerical settings\n", + " 'solver': None,\n", + " 'logging': None,\n", + " 'starttime': '2024-01-01 00:00:00',\n", + " 'endtime': '2024-01-02 00:00:00',\n", + " }\n", + "\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "\n", + "post_processed_data, crossings = waterboard.read_files()\n", + "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", + "crossings = waterboard.assign_node_ids(crossings)\n", + "edges = waterboard.create_edges(crossings)\n", + "nodes, edges = waterboard.create_nodes(crossings, edges)\n", + "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", + "\n", + "\n", + "#create individual model parts of the network\n", + "network = RibasimNetwork(nodes = nodes, \n", + " edges = edges, \n", + " model_characteristics = model_characteristics)\n", + "\n", + "edge = network.edge()\n", + "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", + "pump_node, pump_static = network.pump()\n", + "tabulated_rating_curve_node, tabulated_rating_curve_static = network.tabulated_rating_curve()\n", + "level_boundary_node, level_boundary_static = network.level_boundary()\n", + "flow_boundary_node, flow_boundary_static = network.flow_boundary()\n", + "manning_resistance_node, manning_resistance_static = network.manning_resistance()\n", + "terminal_node = network.terminal()\n", + "\n", + "# linear_resistance = network.linear_resistance()\n", + "# fractional_flow = network.fractional_flow()\n", + "# outlet = network.outlet()\n", + "# discrete_control = network.discrete_control()\n", + "# pid_control = network.pid_control()\n", + "\n", + "#insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics['starttime'], \n", + " endtime=model_characteristics['endtime'], \n", + " crs=\"EPSG:28992\")\n", + "\n", + "model.edge = edge\n", + "\n", + "model.basin.node = basin_node\n", + "model.basin.profile = basin_profile\n", + "model.basin.static = basin_static\n", + "model.basin.state = basin_state\n", + "model.basin.area = basin_area\n", + "\n", + "model.pump.node = pump_node\n", + "model.pump.static = pump_static\n", + "\n", + "model.tabulated_rating_curve.node = tabulated_rating_curve_node\n", + "model.tabulated_rating_curve.static = tabulated_rating_curve_static\n", + "\n", + "model.level_boundary.node = level_boundary_node\n", + "model.level_boundary.static = level_boundary_static\n", + "\n", + "model.flow_boundary.node = flow_boundary_node\n", + "model.flow_boundary.static = flow_boundary_static\n", + "\n", + "model.manning_resistance.node = manning_resistance_node\n", + "model.manning_resistance.static = manning_resistance_static\n", + "\n", + "model.terminal.node = terminal_node\n", + "\n", + "#add checks and metadata\n", + "checks = network.check(model = model, post_processed_data = post_processed_data, crossings = crossings)\n", + "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", + "\n", + "#write the result\n", + "network.WriteResults(model = model, checks = checks)\n" + ] + }, + { + "cell_type": "markdown", + "id": "5455f6bc-88e3-43cd-922b-467b5c58a917", + "metadata": {}, + "source": [ + "# Zuiderzeeland" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "c261b5e9-8c1f-44c8-9076-28003b203611", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done\n" + ] + } + ], + "source": [ + " \n", + "model_characteristics = { \n", + " #model description\n", + " 'waterschap': 'Zuiderzeeland',\n", + " 'modelname': '20240417_samenwerkdag',\n", + " 'modeltype': 'boezemmodel',\n", + "\n", + " #define paths\n", + " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/Zuiderzeeland/Zuiderzeeland.gpkg\",\n", + " 'path_crossings' : \"../../../../Data_crossings/Zuiderzeeland/zzl_crossings_v05.gpkg\",\n", + " 'path_Pdrive' : None,\n", + " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", + " 'path_boezem': \"../../../../Data_shortest_path/Zuiderzeeland/Zuiderzeeland_shortest_path.gpkg\",\n", + "\n", + "\n", + " #apply filters\n", + " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", + " 'in_use' : True,\n", + " 'agg_links_in_use' : True,\n", + " 'agg_areas_in_use': True,\n", + " 'aggregation': True,\n", + "\n", + " #data storage settings\n", + " 'write_Pdrive' : False,\n", + " 'write_Zdrive' : True,\n", + " 'write_goodcloud' : True,\n", + " 'write_checks' : True,\n", + " 'write_symbology' : True,\n", + "\n", + "\n", + " #numerical settings\n", + " 'solver': None,\n", + " 'logging': None,\n", + " 'starttime': '2024-01-01 00:00:00',\n", + " 'endtime': '2024-01-02 00:00:00',\n", + " }\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "\n", + "post_processed_data, crossings = waterboard.read_files()\n", + "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", + "crossings = waterboard.assign_node_ids(crossings)\n", + "edges = waterboard.create_edges(crossings)\n", + "nodes, edges = waterboard.create_nodes(crossings, edges)\n", + "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", + "\n", + "\n", + "#create individual model parts of the network\n", + "network = RibasimNetwork(nodes = nodes, \n", + " edges = edges, \n", + " model_characteristics = model_characteristics)\n", + "\n", + "edge = network.edge()\n", + "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", + "pump_node, pump_static = network.pump()\n", + "tabulated_rating_curve_node, tabulated_rating_curve_static = network.tabulated_rating_curve()\n", + "level_boundary_node, level_boundary_static = network.level_boundary()\n", + "flow_boundary_node, flow_boundary_static = network.flow_boundary()\n", + "manning_resistance_node, manning_resistance_static = network.manning_resistance()\n", + "terminal_node = network.terminal()\n", + "\n", + "# linear_resistance = network.linear_resistance()\n", + "# fractional_flow = network.fractional_flow()\n", + "# outlet = network.outlet()\n", + "# discrete_control = network.discrete_control()\n", + "# pid_control = network.pid_control()\n", + "\n", + "#insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics['starttime'], \n", + " endtime=model_characteristics['endtime'], \n", + " crs=\"EPSG:28992\")\n", + "\n", + "model.edge = edge\n", + "\n", + "model.basin.node = basin_node\n", + "model.basin.profile = basin_profile\n", + "model.basin.static = basin_static\n", + "model.basin.state = basin_state\n", + "model.basin.area = basin_area\n", + "\n", + "model.pump.node = pump_node\n", + "model.pump.static = pump_static\n", + "\n", + "model.tabulated_rating_curve.node = tabulated_rating_curve_node\n", + "model.tabulated_rating_curve.static = tabulated_rating_curve_static\n", + "\n", + "model.level_boundary.node = level_boundary_node\n", + "model.level_boundary.static = level_boundary_static\n", + "\n", + "model.flow_boundary.node = flow_boundary_node\n", + "model.flow_boundary.static = flow_boundary_static\n", + "\n", + "model.manning_resistance.node = manning_resistance_node\n", + "model.manning_resistance.static = manning_resistance_static\n", + "\n", + "model.terminal.node = terminal_node\n", + "\n", + "#add checks and metadata\n", + "checks = network.check(model = model, post_processed_data = post_processed_data, crossings = crossings)\n", + "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", + "\n", + "#write the result\n", + "network.WriteResults(model = model, checks = checks)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "03982b8e-1288-48b1-9279-eadb47d9952a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:ribasim]", + "language": "python", + "name": "conda-env-ribasim-py" + }, + "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.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/03_test_outlets.ipynb b/src/peilbeheerst_model/03_test_outlets.ipynb new file mode 100644 index 0000000..c3d124d --- /dev/null +++ b/src/peilbeheerst_model/03_test_outlets.ipynb @@ -0,0 +1,2666 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 7, + "id": "90f0b71e-aba0-4772-8931-1a22240566d8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "import sys\n", + "\n", + "from outlets import case1, case2\n", + "\n", + "sys.path.append('peilbeheerst_model')\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "markdown", + "id": "0eb85747-970f-4c98-a335-25e500d54863", + "metadata": {}, + "source": [ + "# Case 1" + ] + }, + { + "cell_type": "markdown", + "id": "7315c3e5-66a9-4b4d-a7e1-e396ec8084cf", + "metadata": {}, + "source": [ + "### Example 1: boundary and basin levels on target " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "7c117602-860f-4b79-85f0-4baeb2b571e2", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0031250.0087502.0000000.0055500.004450-0.0000110.00.0001450.00.00.0009660.190740
12024-01-01 00:00:0041000.0090001.0000000.0044500.005304-0.0005800.00.0001160.00.0-0.000390-0.083897
22024-01-01 00:01:0031250.0080692.0000000.0047380.005262-0.0003670.00.0001450.00.0-0.000302-0.061862
32024-01-01 00:01:004999.9741960.9999830.0052620.0038040.0009480.00.0001160.00.00.0003940.095823
42024-01-01 00:02:0031249.9860761.9999910.0055170.0044830.0010210.00.0001450.00.0-0.000131-0.028820
..........................................
892752024-01-31 23:57:004999.9928100.9999920.0046960.0041460.0004120.00.0001160.00.00.0000220.005092
892762024-01-31 23:58:0031250.0052251.9999990.0050700.004930-0.0001390.00.0001450.00.00.0001350.026956
892772024-01-31 23:58:0041000.0175381.0000040.0049300.005271-0.0002690.00.0001160.00.0-0.000189-0.037547
892782024-01-31 23:59:0031249.9968611.9999950.0054070.0045930.0000830.00.0001450.00.00.0005860.116452
892792024-01-31 23:59:0041000.0014280.9999960.0045930.004688-0.0004240.00.0001160.00.00.0002130.047562
\n", + "

89280 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " time node_id storage level inflow_rate \\\n", + "0 2024-01-01 00:00:00 3 1250.008750 2.000000 0.005550 \n", + "1 2024-01-01 00:00:00 4 1000.009000 1.000000 0.004450 \n", + "2 2024-01-01 00:01:00 3 1250.008069 2.000000 0.004738 \n", + "3 2024-01-01 00:01:00 4 999.974196 0.999983 0.005262 \n", + "4 2024-01-01 00:02:00 3 1249.986076 1.999991 0.005517 \n", + "... ... ... ... ... ... \n", + "89275 2024-01-31 23:57:00 4 999.992810 0.999992 0.004696 \n", + "89276 2024-01-31 23:58:00 3 1250.005225 1.999999 0.005070 \n", + "89277 2024-01-31 23:58:00 4 1000.017538 1.000004 0.004930 \n", + "89278 2024-01-31 23:59:00 3 1249.996861 1.999995 0.005407 \n", + "89279 2024-01-31 23:59:00 4 1000.001428 0.999996 0.004593 \n", + "\n", + " outflow_rate storage_rate precipitation evaporation drainage \\\n", + "0 0.004450 -0.000011 0.0 0.000145 0.0 \n", + "1 0.005304 -0.000580 0.0 0.000116 0.0 \n", + "2 0.005262 -0.000367 0.0 0.000145 0.0 \n", + "3 0.003804 0.000948 0.0 0.000116 0.0 \n", + "4 0.004483 0.001021 0.0 0.000145 0.0 \n", + "... ... ... ... ... ... \n", + "89275 0.004146 0.000412 0.0 0.000116 0.0 \n", + "89276 0.004930 -0.000139 0.0 0.000145 0.0 \n", + "89277 0.005271 -0.000269 0.0 0.000116 0.0 \n", + "89278 0.004593 0.000083 0.0 0.000145 0.0 \n", + "89279 0.004688 -0.000424 0.0 0.000116 0.0 \n", + "\n", + " infiltration balance_error relative_error \n", + "0 0.0 0.000966 0.190740 \n", + "1 0.0 -0.000390 -0.083897 \n", + "2 0.0 -0.000302 -0.061862 \n", + "3 0.0 0.000394 0.095823 \n", + "4 0.0 -0.000131 -0.028820 \n", + "... ... ... ... \n", + "89275 0.0 0.000022 0.005092 \n", + "89276 0.0 0.000135 0.026956 \n", + "89277 0.0 -0.000189 -0.037547 \n", + "89278 0.0 0.000586 0.116452 \n", + "89279 0.0 0.000213 0.047562 \n", + "\n", + "[89280 rows x 13 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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X6Z9ZSZ5mZqaPnPfoobGHXOSFBEREVWJubk5zp8/j44dOwJ4Mqu95PeOHTsiNja21sPpoUOHEBcXhzfffLPc9RYWFhgyZAjWrFmDn3/+GVu3bsWjR4/g5eWF27dv4+rVq5U+lq+vLxQKBVJTU+Hu7q7y5eDgAODJVdfic1KV7YYOHYqrV69i586dZY4rhEB6ejosLCzQqFEj/P777yrrT5w4gZYtW1b6fZRXY0VatWpV7vFatGhRrVdPAV5BJSIioufg7OyMw4cPw9raGtnZ2fJyExMTREdHq1y1qwn5+fm4e/cuFAoF7t27h71792LBggXo27cvRowYUab9t99+C0dHR/j4+EBHRwf//e9/4eDgACsrKwQEBKBr165488038c0338Dd3R1XrlyBJEkICgoq9/gtWrTAsGHDMGLECCxZsgS+vr548OABDh06hNatW6NPnz5wdXVFVlYWDh48CG9vb5iYmFRqu8GDB2P79u14++23MWPGDPTs2RN2dnaIi4vDt99+i/HjxyMkJARTpkzBrFmz0KxZM/j4+CA8PByxsbGIjIys9Hksr0YTE5Ny23766ado164d5s6diyFDhuCPP/7A999/j+XLl1f6eJX21BGqREREpJWqY5LUsWPHBIAyX7///ns1VlpWaGiofCw9PT1hZ2cnevToIdauXSsUCoXcDiUmSa1evVr4+PgIU1NTYWFhIV599VVx7tw5ue3Dhw/FyJEjhY2NjTAyMhIvv/yyiIqKEkJUPJGooKBAzJw5U7i6ugp9fX3h4OAg3njjDXHhwgW5zdixY4WNjY0AIGbNmlXp7RQKhVixYoVo166dMDExERYWFqJt27Zi2bJlIicnR24zZ84c0bhxY6Gvry+8vb1VnqRQPEnq/Pnz8rK0tDQBQBw+fPipNVY02WnLli2iVatWQl9fXzg7O4vFixerrK+uSVKSELX40DIiIiLSCHl5eUhKSoKbmxuMjIyeax9Tp07FokWLEBISgq+//hqffvopdu7cic8++wxfffVVNVdM2qCy/Y63+ImIiOi59O/fH97e3nj77bchSRK2b9+OjRs3wsXFRd2lUR3HK6hERET1UHVcQSWqqsr2O87iJyIiIiKNwoBKRERERBqFAZWIiIiINAoDKhERERFpFAZUIiIiItIoDKhEREREpFEYUImIiIhIozCgEhEREVWBJEnY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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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IowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKM8DiNZWVlKTU1VfHy8LMvSmjVrmuxTVlamhx9+WF27dlVwcLAuvfRSvfbaa82pFwAAnGcCPO1QUlKiQYMG6bbbbtOECRPc6jNx4kQdPnxYy5YtU48ePVRUVKSKigqPiwUAAOcfj8NISkqKUlJS3G6/fv16ZWZmav/+/YqOjpYkdevWzdPNAgCA85THYcRTa9euVVJSkp599lm9+eabateunW688UY98cQTCg0NrbdPWVmZysrKnNMOh8PbZQIA0GyVlZUqLy83XYbPBQYGyt/fv8Xr8XoY2b9/vzZv3qyQkBCtXr1a33//ve666y4dPXq0wetGFi5cqMcee8zbpQEA0CK2bauwsFA//PCD6VKMiYqKUqdOnWRZVrPXYdm2bTe7s2Vp9erVGj9+fINtkpOT9cknn6iwsFCRkZGSpFWrVumWW25RSUlJvaMj9Y2MJCQkqLi4WBEREc0tFwCAVlVQUKAffvhBMTExCgsLa9EHcltj27ZKS0tVVFSkqKgoxcXF1WnjcDgUGRnZ5Oe310dG4uLidMkllziDiCT17dtXtm3rm2++Uc+ePev0CQ4OVnBwsLdLAwCg2SorK51BpEOHDqbLMaJmQKGoqEgxMTHNPmXj9e8Zueqqq3To0CGdOHHCOe+LL76Qn5+fOnfu7O3NAwDgFTXXiISFhRmuxKya/W/JNTMeh5ETJ04oNzdXubm5kqS8vDzl5uYqPz9fkpSenq4pU6Y420+ePFkdOnTQbbfdpt27dysrK0v333+/br/99gYvYAUAoK24kE7N1Kc19t/jMJKTk6MhQ4ZoyJAhkqS0tDQNGTJEjzzyiKTq82c1wUSS2rdvr4yMDP3www9KSkrSrbfeqtTUVC1evLjFxQMAgLbP42tGRo4cqcaueV2xYkWdeX369FFGRoanmwIAAGeZP3++1qxZ4zw70RIHDhxQYmKitm/frsGDB9fbZtOmTRo1apSOHTumqKioFm+zIV6/gBUAAJx7EhISVFBQoIsvvth0KYQRAAAuRP7+/urUqZPpMiRx114AALxi5MiRmjNnjh544AFFR0erU6dOmj9/vnN5fn6+xo0bp/bt2ysiIsJ5H7ezPf3004qNjVV4eLimT5+uU6dO1dnO8uXL1bdvX4WEhKhPnz568cUX3arvwIEDsizL5ZTPunXr1KtXL4WGhmrUqFE6cOBAc3bdY4QRAAC85PXXX1e7du30+eef69lnn9Xjjz+ujIwM2bat8ePH6+jRo8rMzFRGRob27dunSZMmOfv+4Q9/0KOPPqqnnnpKOTk5iouLqxM0Xn31VT388MN66qmntGfPHi1YsEC/+c1v9Prrr3tc68GDB3XzzTfrhhtuUG5uru644w499NBDLX4O3MFpGgAAvGTgwIF69NFHJUk9e/bUkiVL9Le//U2StGPHDuXl5SkhIUGS9Oabb6p///7Kzs7WZZddphdeeEG333677rjjDknSk08+qY8//thldOSJJ57Q888/r5tvvlmSlJiYqN27d+vll1/W1KlTPap16dKl6t69u/77v/9blmWpd+/e2rlzp5555pkWPw9NYWQEAAAvGThwoMt0XFycioqKtGfPHiUkJDiDiCT169dPUVFR2rNnjyRpz549GjZsmEv/s6e/++47HTx4UNOnT1f79u2djyeffFL79u3zuNY9e/boiiuucPnekNrb9xZGRgAA8JLAwECXacuyVFVVJdu26/2ysIbm16eqqkpS9amayy+/3GVZc76WvQW3qmsxRkYAAPCxfv36KT8/XwcPHnTO2717t4qLi9W3b19J1fdx27Jli0u/s6djY2N1ySWXaP/+/erRo4fLIzExsVk1NbY9b2JkBAAAHxs9erQGDhyoW2+9VS+88IIqKip011136ZprrlFSUpIk6e6779bUqVOVlJSk4cOH6+2339auXbvUvXt353rmz5+vOXPmKCIiQikpKSorK1NOTo6OHTumtLQ0j2qaMWOGnn/+eaWlpenO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BAAAGEUYAQAARhFGAACAUYQRAABgFGEEAAAYRRgBAABGEUYAAIBRhBEAAGAUYQQAABhFGAEAAEYRRgAAgFEeh5GsrCylpqYqPj5elmVpzZo1jbZftWqVrrvuOnXs2FEREREaNmyY/vrXvza3XgAAcJ7xOIyUlJRo0KBBWrJkiVvts7KydN1112ndunXaunWrRo0apdTUVG3fvt3jYgEAwPnHsm3bbnZny9Lq1as1fvx4j/r1799fkyZN0iOPPOJWe4fDocjISBUXFysiIqIZlQIAAF9z9/M7wIc1SZKqqqp0/PhxRUdHN9imrKxMZWVlzmmHw+GL0gAAgAE+v4D1+eefV0lJiSZOnNhgm4ULFyoyMtL5SEhI8GGFAADAl3waRt59913Nnz9fK1euVExMTIPt0tPTVVxc7HwcPHjQh1UCAABf8tlpmpUrV2r69Ol6//33NXr06EbbBgcHKzg42EeVAQAAk3wyMvLuu+9q2rRpeueddzR27FhfbBIAALQRHo+MnDhxQl999ZVzOi8vT7m5uYqOjlaXLl2Unp6ub7/9Vm+88Yak6iAyZcoULVq0SFdccYUKCwslSaGhoYqMjGyl3QAAAG2VxyMjOTk5GjJkiIYMGSJJSktL05AhQ5x/pltQUKD8/Hxn+5dfflkVFRWaOXOm4uLinI+77767lXYBAAC0ZS36nhFf4XtGAABoe9z9/ObeNAAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjPA4jWVlZSk1NVXx8vCzL0po1a5rsk5mZqaFDhyokJETdu3fXSy+91JxaAQDA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T9MAAIALm/ELWAEAwIWNMAIAAIzySRhZuHChLrvsMoWHhysmJkbjx4/X3r17XdrYtq358+crPj5eoaGhGjlypHbt2uVcfvToUc2ePVu9e/dWWFiYunTpojlz5qi4uLjebZaVlWnw4MGyLEu5ubne3D0AANACPgkjmZmZmjlzprZs2aKMjAxVVFQoOTlZJSUlzjbPPvusfvvb32rJkiXKzs5Wp06ddN111+n48eOSpEOHDunQoUN67rnntHPnTq1YsULr16/X9OnT693mAw88oPj4eF/sHgAAaAEjF7B+9913iomJUWZmpq6++mrZtq34+Hjdc889evDBByVVj2zExsbqmWee0Z133lnvet5//33953/+p0pKShQQcOYPg/7yl78oLS1NH3zwgfr376/t27dr8ODBvtg1AADgISPXjNScWomOjpYk5eXlqbCwUMnJyc42wcHBuuaaa/Tpp582up6IiAiXIHL48GH98pe/1JtvvqmwsDAv7QEAAGgtPg8jtm0rLS1Nw4cP14ABAyRJhYWFkqTY2FiXtrGxsc5ltR05ckRPPPGEy6iJbduaNm2aZsyYoaSkJC/tAQAAaE0+/9KzWbNmaceOHfXekdeyLJdp27brzJMkh8OhsWPHql+/fnr00Ued83/3u9/J4XAoPT299QsHAABe4dORkdmzZ2vt2rXauHGjOnfu7JzfqVMnSaozClJUVFRntOT48eMaM2aM2rdvr9WrVyswMNC5bMOGDdqyZYuCg4MVEBCgHj16SJKSkpI0depUb+0WAABoAZ+EEdu2NWvWLK1atUobNmxQYmKiy/LExER16tRJGRkZznmnT59WZmamrrzySuc8h8Oh5ORkBQUFae3atQoJCXFZz+LFi/WPf/xDubm5ys3N1bp16yRJK1eu1FNPPeXFPQQAAM3lk9M0M2fO1DvvvKMPP/xQ4eHhzhGQyMhIhYaGyrIs3XPPPVqwYIF69uypnj17asGCBQoLC9PkyZMlVY+IJCcnq7S0VG+99ZYcDoccDockqWPHjvL391eXLl1cttu+fXtJ0qWXXuoyEgMAAM4dPgkjS5culSSNHDnSZf7y5cs1bdo0SdXfC3Ly5EndddddOnbsmC6//HJ99NFHCg8PlyRt3bpVn3/+uSQ5T7/UyMvLU7du3by6DwAAwDu4UR4AADCKe9MAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAsBrNm3aJMuy9MMPP5guBcA5jC89A9BqRo4cqcGDB+uFF16QVH2PqaNHjyo2NrbeO3ADgOSjr4MHcGEKCgpy3pUbABrCaRoArWLatGnKzMzUokWLZFmWLMvSihUrXE7TrFixQlFRUfrTn/6k3r17KywsTLfccotKSkr0+uuvq1u3brrooos0e/ZsVVZWOtd9+vRpPfDAA7rkkkvUrl07XX755dq0aZOZHQXQ6hgZAdAqFi1apC+++EIDBgzQ448/LknatWtXnXalpaVavHix3nvvPR0/flw333yzbr75ZkVFRWndunXav3+/JkyYoOHDh2vSpEmSpNtuu00HDhzQe++9p/j4eK1evVpjxozRzp071bNnT5/uJ4DWRxgB0CoiIyMVFBSksLAw56mZf/3rX3XalZeXa+nSpbr00kslSbfccovefPNNHT58WO3bt1e/fv00atQobdy4UZMmTdK+ffv07rvv6ptvvlF8fLwkae7cuVq/fr2WL1+uBQsW+G4nAXgFYQSAT4WFhTmDiCTFxsaqW7duat++vcu8oqIiSdK2bdtk27Z69erlsp6ysjJ16NDBN0UD8CrCCACfCgwMdJm2LKveeVVVVZKkqqoq+fv7a+vWrfL393dpd3aAAdB2EUYAtJqgoCCXC09bw5AhQ1RZWamioiKNGDGiVdcN4NzAX9MAaDXdunXT559/rgMHDuj77793jm60RK9evXTrrbdqypQpWrVqlfLy8pSdna1nnnlG69ata4WqAZhGGAHQaubOnSt/f3/169dPHTt2VH5+fqusd/ny5ZoyZYruu+8+9e7dWzfeeKM+//xzJSQktMr6AZjFN7ACAACjGBkBAABGEUYAAIBRhBEAAGAUYQQAABhFGAEAAEYRRgAAgFGEEQAAYBRhBAAAGEUYAQAARhFGAACAUYQRAABgFGEEAAAY9f8OK3i7XPBPFgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "case1_example1 = case1(\"case1_example1\")\n", + "case1_example1.create_model()" + ] + }, + { + "cell_type": "markdown", + "id": "7e86db4e-2425-483d-9a64-380c6b69a023", + "metadata": {}, + "source": [ + "### Example 2: boundary levels below target" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "a49607e1-2214-4b0b-953a-552a600d0f3a", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0031250.0087502.0000000.00.000000-0.0001450.00.0001450.00.0-1.268499e-08-2.0
12024-01-01 00:00:0041000.0090001.0000000.00.000014-0.0001940.00.0001160.00.06.448805e-05-2.0
22024-01-01 00:01:0031250.0000701.9999970.00.000000-0.0001450.00.0001450.00.0-3.257827e-10-2.0
32024-01-01 00:01:004999.9973380.9999940.00.000000-0.0001170.00.0001160.00.09.985815e-07-2.0
42024-01-01 00:02:0031249.9913901.9999930.00.000000-0.0001450.00.0001450.00.0-1.843947e-10-2.0
..........................................
892752024-01-31 23:57:004714.0466050.8450080.00.000000-0.0000980.00.0000980.00.0-1.265895e-10-2.0
892762024-01-31 23:58:003892.5538671.8450070.00.000000-0.0001220.00.0001220.00.0-1.582412e-10-2.0
892772024-01-31 23:58:004714.0407370.8450050.00.000000-0.0000980.00.0000980.00.0-1.265901e-10-2.0
892782024-01-31 23:59:003892.5465321.8450040.00.000000-0.0001220.00.0001220.00.0-1.582377e-10-2.0
892792024-01-31 23:59:004714.0348690.8450010.00.000000-0.0000980.00.0000980.00.0-1.265908e-10-2.0
\n", + "

89280 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " time node_id storage level inflow_rate \\\n", + "0 2024-01-01 00:00:00 3 1250.008750 2.000000 0.0 \n", + "1 2024-01-01 00:00:00 4 1000.009000 1.000000 0.0 \n", + "2 2024-01-01 00:01:00 3 1250.000070 1.999997 0.0 \n", + "3 2024-01-01 00:01:00 4 999.997338 0.999994 0.0 \n", + "4 2024-01-01 00:02:00 3 1249.991390 1.999993 0.0 \n", + "... ... ... ... ... ... \n", + "89275 2024-01-31 23:57:00 4 714.046605 0.845008 0.0 \n", + "89276 2024-01-31 23:58:00 3 892.553867 1.845007 0.0 \n", + "89277 2024-01-31 23:58:00 4 714.040737 0.845005 0.0 \n", + "89278 2024-01-31 23:59:00 3 892.546532 1.845004 0.0 \n", + "89279 2024-01-31 23:59:00 4 714.034869 0.845001 0.0 \n", + "\n", + " outflow_rate storage_rate precipitation evaporation drainage \\\n", + "0 0.000000 -0.000145 0.0 0.000145 0.0 \n", + "1 0.000014 -0.000194 0.0 0.000116 0.0 \n", + "2 0.000000 -0.000145 0.0 0.000145 0.0 \n", + "3 0.000000 -0.000117 0.0 0.000116 0.0 \n", + "4 0.000000 -0.000145 0.0 0.000145 0.0 \n", + "... ... ... ... ... ... \n", + "89275 0.000000 -0.000098 0.0 0.000098 0.0 \n", + "89276 0.000000 -0.000122 0.0 0.000122 0.0 \n", + "89277 0.000000 -0.000098 0.0 0.000098 0.0 \n", + "89278 0.000000 -0.000122 0.0 0.000122 0.0 \n", + "89279 0.000000 -0.000098 0.0 0.000098 0.0 \n", + "\n", + " infiltration balance_error relative_error \n", + "0 0.0 -1.268499e-08 -2.0 \n", + "1 0.0 6.448805e-05 -2.0 \n", + "2 0.0 -3.257827e-10 -2.0 \n", + "3 0.0 9.985815e-07 -2.0 \n", + "4 0.0 -1.843947e-10 -2.0 \n", + "... ... ... ... \n", + "89275 0.0 -1.265895e-10 -2.0 \n", + "89276 0.0 -1.582412e-10 -2.0 \n", + "89277 0.0 -1.265901e-10 -2.0 \n", + "89278 0.0 -1.582377e-10 -2.0 \n", + "89279 0.0 -1.265908e-10 -2.0 \n", + "\n", + "[89280 rows x 13 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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X6Z9ZSZ5mZqaPnPfoobGHXOSFBEREVWJubk5zp8/j44dOwJ4Mqu95PeOHTsiNja21sPpoUOHEBcXhzfffLPc9RYWFhgyZAjWrFmDn3/+GVu3bsWjR4/g5eWF27dv4+rVq5U+lq+vLxQKBVJTU+Hu7q7y5eDgAODJVdfic1KV7YYOHYqrV69i586dZY4rhEB6ejosLCzQqFEj/P777yrrT5w4gZYtW1b6fZRXY0VatWpV7vFatGhRrVdPAV5BJSIioufg7OyMw4cPw9raGtnZ2fJyExMTREdHq1y1qwn5+fm4e/cuFAoF7t27h71792LBggXo27cvRowYUab9t99+C0dHR/j4+EBHRwf//e9/4eDgACsrKwQEBKBr165488038c0338Dd3R1XrlyBJEkICgoq9/gtWrTAsGHDMGLECCxZsgS+vr548OABDh06hNatW6NPnz5wdXVFVlYWDh48CG9vb5iYmFRqu8GDB2P79u14++23MWPGDPTs2RN2dnaIi4vDt99+i/HjxyMkJARTpkzBrFmz0KxZM/j4+CA8PByxsbGIjIys9Hksr0YTE5Ny23766ado164d5s6diyFDhuCPP/7A999/j+XLl1f6eJX21BGqREREpJWqY5LUsWPHBIAyX7///ns1VlpWaGiofCw9PT1hZ2cnevToIdauXSsUCoXcDiUmSa1evVr4+PgIU1NTYWFhIV599VVx7tw5ue3Dhw/FyJEjhY2NjTAyMhIvv/yyiIqKEkJUPJGooKBAzJw5U7i6ugp9fX3h4OAg3njjDXHhwgW5zdixY4WNjY0AIGbNmlXp7RQKhVixYoVo166dMDExERYWFqJt27Zi2bJlIicnR24zZ84c0bhxY6Gvry+8vb1VnqRQPEnq/Pnz8rK0tDQBQBw+fPipNVY02WnLli2iVatWQl9fXzg7O4vFixerrK+uSVKSELX40DIiIiLSCHl5eUhKSoKbmxuMjIyeax9Tp07FokWLEBISgq+//hqffvopdu7cic8++wxfffVVNVdM2qCy/Y63+ImIiOi59O/fH97e3nj77bchSRK2b9+OjRs3wsXFRd2lUR3HK6hERET1UHVcQSWqqsr2O87iJyIiIiKNwoBKRERERBqFAZWIiIiINAoDKhERERFpFAZUIiIiItIoDKhEREREpFEYUImIiIhIozCgEhEREVWBJEnY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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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hYVp/fr1Gjx4sBcndMc1IwAAdHEDBw5UcXGxduzYoV/84heaNm2a9u7d67Pjc2YEAAAvCAnw095HbjB2bE8EBgbqwgsvlCQlJyersLBQzz33nF588UVvjNcAMQIAgBfYbDaP3ippTyzLktPp9NnxPH6bpqCgQGlpaYqPj5fNZtOGDRuave9f/vIX+fv765JLLvH0sAAAwAseeOABffDBBzp48KB2796txYsXa+vWrbrtttt8NoPHMVJdXa1hw4YpJyfHo/0qKys1depUXXfddZ4eEgAAeMmRI0d0++23a+DAgbruuuv00UcfafPmzbr++ut9NoPH549SU1OVmprq8YFmzZqlKVOmyM/Pz6OzKQAAwHtWrlxpegTffJpm1apV2r9/vx566KFmbe90OuVwONwWAADQOXk9Rj7//HMtWrRIq1evlr9/807EZGdny263u5aEhAQvTwkAAEzxaozU1dVpypQpevjhhzVgwIBm75eVlaXKykrXcujQIS9OCQAATPLqZ46OHz+uoqIi7dq1S3PnzpUk1dfXy7Is+fv767333tO1117bYL+goCAFBQV5czQAANBOeDVGIiIitHv3brd1y5cv15YtW/TWW28pMTHRm4cHAAAdgMcxUlVVpS+++MJ1u6SkRMXFxYqKilKfPn2UlZWlr776Sq+++qq6deumpKQkt/2jo6MVHBzcYD0AAOiaPI6RoqIijRkzxnU7MzNTkjRt2jTl5uaqrKxMpaWlbTchAADo1GyWZVmmhzgXh8Mhu92uyspKRUREmB4HAACdPHlSJSUlSkxMVHBwsOlxjDnbv0NzX7/51V4AAGAUMQIAAIwiRgAAgEt2drZsNpsWLFjgs2MSIwAAQJJUWFiol156SUOHDvXpcb36PSMAAHRZliXVnDBz7IBQyWbzaJeqqirddtttevnll/Xoo496abDGESMAAHhDzQlpabyZYz9wWArs7tEuc+bM0fjx4zV27FhiBAAA+Nabb76pjz/+WIWFhUaOT4wAAOANAaGnz1CYOnYzHTp0SHfddZfee+89Y9+XQowAAOANNpvHb5WYsHPnTlVUVGjEiBGudXV1dSooKFBOTo6cTqf8/Py8OgMxAgBAF3bdddc1+FHb6dOn6+KLL9bChQu9HiISMQIAQJcWHh7e4Mdru3fvrh49evjsR235nhEAAGAUZ0YAAICbrVu3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GEWMAAAAo4gRAABgFDECAACMIkYAAIBRxAgAADCKGAEAAEYRIwAAwChiBAAAGEWMAAAAo4gRAABgFDECAACMIkYAAIBRxAgAADCKGAEAAEYRIwAAwChiBAAAGEWMAAAAo4gRAABgFDECAACMIkYAAIBRxAgAADCKGAEAAEYRIwAAwCjjMZKenq6JEyeaHgMAABhiPEYAAEDX1q5iZPPmzRo1apQiIyPVo0cP/cu//Iv279/vuv/gwYOy2Wxat26dxowZo9DQUA0bNkzbt283ODUAAGiNdhUj1dXVyszMVGFhof785z+rW7duuummm1RfX++23eLFi3XvvfequLhYAwYM0L/927+ptrbW0NQAAKA1/E0P8EOTJk1yu71y5UpFR0dr7969SkpKcq2/9957NX78eEnSww8/rCFDhuiLL77QxRdf7NN5AQBA67WrMyP79+/XlClT1L9/f0VERCgxMVGSVFpa6rbd0KFDXf8dFxcnSaqoqPDdoAAAoM20qzMjaWlpSkhI0Msvv6z4+HjV19crKSlJp06dctsuICDA9d82m02SGryVAwAAOoZ2EyPHjh3Tvn379OKLL2r06NGSpG3bthmeCgAAeFu7iZHzzjtPPXr00EsvvaS4uDiVlpZq0aJFpscCAABeZvyakfr6evn7+6tbt2568803tXPnTiUlJenuu+/Wf/zHf5geDwAAeJnNsizL5ADjxo3ThRdeqJycHJNjAAAAQ4ydGfn222/1+9//Xlu3btXYsWNNjQEAAAwzds3IHXfcocLCQt1zzz2aMGGCqTEAAIBhxt+mAQAAXZvxC1gBAEDXRowAAACjfBIj2dnZuvTSSxUeHq7o6GhNnDhRn376qds2lmVpyZIlio+PV0hIiK655hrt2bPHdf8333yjefPmaeDAgQoNDVWfPn00f/58VVZWNnpMp9OpSy65RDabTcXFxd58egAAoBV8EiP5+fmaM2eOduzYoby8PNXW1iolJUXV1dWubZ588kk988wzysnJUWFhoWJjY3X99dfr+PHjkqTDhw/r8OHDeuqpp7R7927l5uZq8+bNmjFjRqPHvP/++xUfH++LpwcAAFrByAWsX3/9taKjo5Wfn6+rrrpKlmUpPj5eCxYs0MKFCyWdPrMRExOjJ554QrNmzWr0cdauXat///d/V3V1tfz9//nBoD/84Q/KzMzU22+/rSFDhmjXrl265JJLfPHUAACAh4xcM3LmrZWoqChJUklJicrLy5WSkuLaJigoSFdffbU+/PDDsz5ORESEW4gcOXJEd955p1577TWFhoZ66RkAAIC24vMYsSxLmZmZGjVqlJKSkiRJ5eXlkqSYmBi3bWNiYlz3/dixY8f061//2u2siWVZSk9PV0ZGhpKTk730DAAAQFvy+ZeezZ07V5988kmjv8hrs9ncbluW1WCdJDkcDo0fP16DBw/WQw895Fr//PPPy+FwKCsrq+0HBwAAXuHTMyPz5s3Txo0b9f7776t3796u9bGxsZLU4CxIRUVFg7Mlx48f17hx4xQWFqb169crICDAdd+WLVu0Y8cOBQUFyd/fXxdeeKEkKTk5WdOmTfPW0wIAAK3gkxixLEtz587VunXrtGXLFiUmJrrdn5iYqNjYWOXl5bnWnTp1Svn5+bryyitd6xwOh1JSUhQYGKiNGzcqODjY7XGWLVumv/3tbyouLlZxcbE2bdokSVqzZo0ee+wxLz5DAADQUj55m2bOnDl6/fXX9c477yg8PNx1BsRutyskJEQ2m00LFizQ0qVLddFFF+miiy7S0qVLFRoaqilTpkg6fUYkJSVFJ06c0G9/+1s5HA45HA5JUq9eveTn56c+ffq4HTcsLEySdMEFF7idiQEAAO2HT2JkxYoVkqRrrrnGbf2qVauUnp4u6fT3gnz//feaPXu2vv32W11++eV67733FB4eLknauXOnPvroI0lyvf1yRklJifr16+fV5wAAALyDH8oDAABG8ds0AADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIwiRgAAgFHECAAAMIoYAeA1W7dulc1m03fffWd6FADtGF96BqDNXHPNNbrkkkv07LPPSjr9G1PffPONYmJiGv0FbgCQfPR18AC6psDAQNevcgNAU3ibBkCbSE9PV35+vp577jnZbDbZbDbl5ua6vU2Tm5uryMhI/e53v9PAgQMVGhqqW265RdXV1XrllVfUr18/nXfeeZo3b57q6upcj33q1Cndf//9Ov/889W9e3ddfvnl2rp1q5knCqDNcWYEQJt47rnn9NlnnykpKUmPPPKIJGnPnj0Ntjtx4oSWLVumN998U8ePH9fNN9+sm2++WZGRkdq0aZMOHDigSZMmadSoUZo8ebIkafr06Tp48KDefPNNxcfHa/369Ro3bpx2796tiy66yKfPE0DbI0YAtAm73a7AwECFhoa63pr5v//7vwbb1dTUaMWKFbrgggskSbfccotee+01HTlyRGFhYRo8eLDGjBmj999/X5MnT9b+/fv1xhtv6Msvv1R8fLwk6d5779XmzZu1atUqLV261HdPEoBXECMAfCo0NNQVIpIUExOjfv36KSwszG1dRUWFJOnjjz+WZVkaMGCA2+M4nU716NHDN0MD8CpiBIBPBQQEuN222WyNrquvr5ck1dfXy8/PTzt37pSfn5/bdj8MGAAdFzECoM0EBga6XXjaFoYPH666ujpVVFRo9OjRbfrYANoHPk0DoM3069dPH330kQ4ePKijR4+6zm60xoABA3Tbbbdp6tSpWrdunUpKSlRYWKgnnnhCmzZtaoOpAZhGjABoM/fee6/8/Pw0ePBg9erVS6WlpW3yuKtWrdLUqVN1zz33aODAgfr5z3+ujz76SAkJCW3y+ADM4htYAQCAUZwZAQAARhEjAADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIwiRgAAgFHECAAAMIoYAQAARhEjAADAKGIEAAAYRYwAAACj/j91BYVeCrm7BgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "case1_example2 = case1(\"case1_example2\")\n", + "case1_example2.create_model()" + ] + }, + { + "cell_type": "markdown", + "id": "f65cb535-55c1-4a83-b97c-224b8b1aceb7", + "metadata": {}, + "source": [ + "### Example 3: boundary levels on target, initial state below target" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "88d99768-cab2-4bdf-943a-d6ce6975cde0", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0030.0000001.0000000.0100000.0000000.0105780.0005791.840109e-070.00.06.906490e-080.316024
12024-01-01 00:00:0040.0000000.0000000.0000000.0000000.0005790.0005792.925180e-090.00.01.169242e-090.333136
22024-01-01 00:01:0030.6347071.0225300.0100000.0000000.0105780.0005797.583603e-070.00.01.609514e-070.191875
32024-01-01 00:01:0040.0347220.0058880.0000000.0000000.0005790.0005791.274586e-080.00.02.839159e-090.200429
42024-01-01 00:02:0031.2693741.0318630.0100000.0000000.0105770.0005791.507221e-060.00.02.753056e-070.167372
..........................................
892752024-01-31 23:57:0041000.0096721.0000000.0052050.006290-0.0003510.0005791.157395e-040.00.0-2.707639e-04-0.045742
892762024-01-31 23:58:0031249.9874281.9999910.0055190.0044810.0002310.0005791.446765e-040.00.01.241401e-030.236630
892772024-01-31 23:58:004999.9886400.9999900.0044810.0052030.0002310.0005791.157402e-040.00.0-4.899401e-04-0.096563
892782024-01-31 23:59:0031250.0012901.9999970.0053360.0046640.0002070.0005791.446766e-040.00.08.995734e-040.171079
892792024-01-31 23:59:0041000.0024810.9999970.0046640.005471-0.0000630.0005791.157402e-040.00.0-2.811831e-04-0.052235
\n", + "

89280 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " time node_id storage level inflow_rate \\\n", + "0 2024-01-01 00:00:00 3 0.000000 1.000000 0.010000 \n", + "1 2024-01-01 00:00:00 4 0.000000 0.000000 0.000000 \n", + "2 2024-01-01 00:01:00 3 0.634707 1.022530 0.010000 \n", + "3 2024-01-01 00:01:00 4 0.034722 0.005888 0.000000 \n", + "4 2024-01-01 00:02:00 3 1.269374 1.031863 0.010000 \n", + "... ... ... ... ... ... \n", + "89275 2024-01-31 23:57:00 4 1000.009672 1.000000 0.005205 \n", + "89276 2024-01-31 23:58:00 3 1249.987428 1.999991 0.005519 \n", + "89277 2024-01-31 23:58:00 4 999.988640 0.999990 0.004481 \n", + "89278 2024-01-31 23:59:00 3 1250.001290 1.999997 0.005336 \n", + "89279 2024-01-31 23:59:00 4 1000.002481 0.999997 0.004664 \n", + "\n", + " outflow_rate storage_rate precipitation evaporation drainage \\\n", + "0 0.000000 0.010578 0.000579 1.840109e-07 0.0 \n", + "1 0.000000 0.000579 0.000579 2.925180e-09 0.0 \n", + "2 0.000000 0.010578 0.000579 7.583603e-07 0.0 \n", + "3 0.000000 0.000579 0.000579 1.274586e-08 0.0 \n", + "4 0.000000 0.010577 0.000579 1.507221e-06 0.0 \n", + "... ... ... ... ... ... \n", + "89275 0.006290 -0.000351 0.000579 1.157395e-04 0.0 \n", + "89276 0.004481 0.000231 0.000579 1.446765e-04 0.0 \n", + "89277 0.005203 0.000231 0.000579 1.157402e-04 0.0 \n", + "89278 0.004664 0.000207 0.000579 1.446766e-04 0.0 \n", + "89279 0.005471 -0.000063 0.000579 1.157402e-04 0.0 \n", + "\n", + " infiltration balance_error relative_error \n", + "0 0.0 6.906490e-08 0.316024 \n", + "1 0.0 1.169242e-09 0.333136 \n", + "2 0.0 1.609514e-07 0.191875 \n", + "3 0.0 2.839159e-09 0.200429 \n", + "4 0.0 2.753056e-07 0.167372 \n", + "... ... ... ... \n", + "89275 0.0 -2.707639e-04 -0.045742 \n", + "89276 0.0 1.241401e-03 0.236630 \n", + "89277 0.0 -4.899401e-04 -0.096563 \n", + "89278 0.0 8.995734e-04 0.171079 \n", + "89279 0.0 -2.811831e-04 -0.052235 \n", + "\n", + "[89280 rows x 13 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqgAAADwCAYAAADM+pbvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABTXElEQVR4nO3deVwVZd8G8GvYd5BNUNkUBS1ZFFPcQNNEUyFzKU1BzbLMpdJ8fcwtNU2z9KnHtVdQI83HPXLJDTXNBZVERURDXEJxQfb1nPv9w5eJw6KgwDkcru/nwwfPzD0zvzPdwcXMfc+RhBACREREREQaQkfdBRARERERlcSASkREREQahQGViIiIiDQKAyoRERERaRQGVCIiIiLSKAyoRERERKRRGFCJiIiISKMwoBIRERGRRtFTdwFERESkXgqFAoWFheoug7Scvr4+dHV1K9WWAZWIiKieEkLg7t27ePz4sbpLoXrCysoKDg4OkCTpqe0YUImIiOqp4nBqb28PExOTZ4YGouclhEBOTg5SU1MBAI6Ojk9tz4BKRERUDykUCjmc2tjYqLscqgeMjY0BAKmpqbC3t3/q7X5OkiIiIqqHisecmpiYqLkSqk+K+9uzxjwzoBIREdVjvK1Ptamy/Y0BlYiIiIg0CgMqERERaY3AwEBMmjRJ3WU81Y0bNyBJEmJjY9VdisZiQCUiIqI6IywsDJIklfm6du2aukujasRZ/ERERFSnBAUFITw8XGWZnZ2dmqqhmsArqERERFSnGBoawsHBQeWrokcWpaWlYcSIEWjQoAFMTEzQu3dvJCYmAnjybE47Ozts3bpVbu/j4wN7e3v59R9//AF9fX1kZWVVWE94eDhatmwJIyMjeHp6Yvny5SrrT58+DV9fXxgZGcHPzw/nz58vs49du3ahefPmMDY2Rrdu3bBu3TpIkqTyIQonTpxA165dYWxsDCcnJ0yYMAHZ2dmVOmd1DQMqERERqcgtVNTaV00LCwtDTEwMdu3ahT/++ANCCPTp0weFhYWQJAldu3ZFdHQ0gCdh9vLlyygsLMTly5cBANHR0Wjbti3MzMzK3f+aNWswffp0zJ8/H/Hx8fjyyy8xY8YMrFu3DgCQnZ2Nvn37wsPDA2fPnsXs2bMxefJklX3cuHEDAwcOREhICGJjY/H+++9j+vTpKm3i4uLQq1cvDBgwABcuXMDPP/+M33//HR999FE1nzHNwFv8REREpCJw+e+1dqxTEwOqvE1UVJRKYOzduzf++9//lmmXmJiIXbt24fjx4+jYsSMAIDIyEk5OTtixYwcGDRqEwMBArF69GgBw9OhReHt7w9nZGdHR0WjVqhWio6MRGBhYYS1z587FkiVLMGDAAACAm5sbLl++jFWrViE0NBSRkZFQKBRYu3YtTExM8NJLL+H27dv44IMP5H2sXLkSHh4eWLx4MQDAw8MDFy9exPz58+U2ixcvxtChQ+UJYM2bN8e///1vBAQEYMWKFTAyMqryedRkDKhERERUp3Tr1g0rVqyQX5uampbbLj4+Hnp6emjfvr28zMbGBh4eHoiPjwfwZNb/xIkT8eDBAxw5cgSBgYFwdnbGkSNH8N577+HEiRMVPhXg/v37uHXrFkaPHo0xY8bIy4uKimBpaSnX4O3trfKBCP7+/ir7SUhIQLt27VSWvfLKKyqvz549i2vXriEyMlJeJoSAUqlEUlISWrZsWW6NdRUDKhEREamI/rCzukt4KlNTU7i7uz+znRCiwuXFD4x/+eWXYWNjgyNHjuDIkSP44osv4OTkhPnz5+PMmTPIzc1F587lnw+lUgngyW3+kiEYgDwmtqIaKqqnotqVSiXef/99TJgwocz2zs7OzzxGXcOASkRERCqM9Sv+jPS6pFWrVigqKsKpU6fkW/wPHz7E1atX5SuOxeNQd+7ciYsXL6JLly4wNzdHYWEhVq5ciTZt2sDc3Lzc/Tds2BCNGzfGX3/9hWHDhlVYw4YNG5Cbmyt/Fv3JkydV2nh6emL37t0qy2JiYlRet2nTBpcuXapUMNcGnCRFREREWql58+YIDg7GmDFj8Pvvv+PPP//EO++8g8aNGyM4OFhuFxgYiJ9++gleXl6wsLCQQ2tkZORTx58CwOzZs7FgwQIsW7YMV69eRVxcHMLDw/HNN98AAIYOHQodHR2MHj0aly9fxu7du/H111+r7OP999/HlStXMHXqVFy9ehWbN29GREQEgH8+GnTq1Kn4448/MG7cOMTGxsrja8ePH199J0yDMKASERGR1goPD0fbtm3Rt29f+Pv7QwiB3bt3Q19fX27TrVs3KBQKlTAaEBAAhUKBgICnT+J699138cMPPyAiIgKtW7dGQEAAIiIi4ObmBgAwMzPDL7/8gsuXL8PX1xfTp0/HV199pbIPNzc3bNmyBdu2bYOXlxdWrFghz+I3NDQEAHh5eeHIkSNITExEly5d4OvrixkzZsDR0bE6TpPGkURlBkcQERGRVsnLy0NSUhLc3Ny0bga4Npg/fz5WrlyJW7duqbuUalXZfscxqERERERqtnz5crRr1w42NjY4fvw4Fi9erLXPOK0MBlQiIiIiNUtMTMS8efPw6NEjODs749NPP8W0adPUXZba8BY/ERFRPcRb/KQOle13nCRFRERERBqFAZWIiIiINAoDKhERERFpFAZUIiIiItIoDKhEREREpFEYUImIiIhqWHR0NCRJwuPHj6t1v7Nnz4aPj0+17lMTMKASERFRnXL37l2MHz8eTZs2haGhIZycnNCvXz8cPHiwWo8TGBiISZMmVes+qXL4oH4iIiKqM27cuIFOnTrBysoKixYtgpeXFwoLC7Fv3z6MGzcOV65cqdV6hBBQKBTQ02Okqk68gkpERER1xocffghJknD69GkMHDgQLVq0wEsvvYRPPvkEJ0+elNvdvHkTwcHBMDMzg4WFBQYPHox79+7J64tvjW/YsAGurq6wtLTEW2+9hczMTABAWFgYjhw5gmXLlkGSJEiShBs3bsi36vft2wc/Pz8YGhri2LFjyM/Px4QJE2Bvbw8jIyN07twZZ86cqdJ7S09Px3vvvQd7e3tYWFige/fu+PPPP1XaLFy4EA0bNoS5uTlGjx6NvLw8lfVFRUWYMGECrKysYGNjg6lTpyI0NBQhISFyGyEEFi1ahKZNm8LY2Bje3t7YsmVLlWqtaQyoREREVCc8evQIe/fuxbhx42BqalpmvZWVFYAnASwkJASPHj3CkSNHsH//fly/fh1DhgxRaX/9+nXs2LEDUVFRiIqKwpEjR7Bw4UIAwLJly+Dv748xY8YgJSUFKSkpcHJykrf97LPPsGDBAsTHx8PLywufffYZtm7dinXr1uHcuXNwd3dHr1698OjRo0q9NyEEXn/9ddy9exe7d+/G2bNn0aZNG7z66qvyPjZv3oxZs2Zh/vz5iImJgaOjI5YvX66yn6+++gqRkZEIDw/H8ePHkZGRgR07dqi0+fzzzxEeHo4VK1bg0qVL+Pjjj/HOO+/gyJEjlaq1VggiIiKqd3Jzc8Xly5dFbm5umXX5+fm19lUVp06dEgDEtm3bntrut99+E7q6uuLmzZvyskuXLgkA4vTp00IIIWbNmiVMTExERkaG3GbKlCmiffv28uuAgAAxceJElX0fPnxYABA7duyQl2VlZQl9fX0RGRkpLysoKBCNGjUSixYtUtkuLS2t3JoPHjwoLCwsRF5ensryZs2aiVWrVgkhhPD39xdjx45VWd++fXvh7e0tv27YsKFYvHix/LqoqEg4OzuL4OBguVYjIyNx4sQJlf2MHj1avP322+XWVp2e1u9K4oAJIiIiUrFgwYJaO9asWbMq3VYIAQCQJOmp7eLj4+Hk5KRyxbNVq1awsrJCfHw82rVrBwBwdXWFubm53MbR0RGpqamVqsXPz0/+9/Xr11FYWIhOnTrJy/T19fHKK68gPj6+Uvs7e/YssrKyYGNjo7I8NzcX169fl9/X2LFjVdb7+/vj8OHDAJ4MEbh37x5eeeUVeb2uri7atm0LpVIJALh8+TLy8vLQs2dPlf0UFBTA19e3UrXWBgZUIiIiqhOaN28OSZIQHx+vMqayNCFEuSG29HJ9fX2V9ZIkyUHuWUoOMagoOFdUR3mUSiUcHR0RHR1dZl3x0IXKKq+OkscBgF9//RWNGzdWaWdoaFil49QkBlQiIiJSMW3aNHWXUC5ra2v06tUL//nPfzBhwoQy41AfP34MKysrtGrVCjdv3sStW7fkq6iXL19Geno6WrZsWenjGRgYQKFQPLOdu7s7DAwM8Pvvv2Po0KEAgMLCQsTExFT6MVVt2rTB3bt3oaenB1dX13LbtGzZEidPnsSIESPkZSUnhllaWqJhw4Y4ffo0unTpAgBQKBQ4f/68/KzUVq1awdDQEDdv3kRAQEClalMHBlQiIiJSYWBgoO4SKrR8+XJ07NgRr7zyCr744gt4eXmhqKgI+/fvx4oVKxAfH48ePXrAy8sLw4YNw9KlS1FUVIQPP/wQAQEBKrfmn8XV1RWnTp3CjRs3YGZmBmtr63LbmZqa4oMPPsCUKVNgbW0NZ2dnLFq0CDk5ORg9enSljtWjRw/4+/sjJCQEX331FTw8PPD3339j9+7dCAkJgZ+fHyZOnIjQ0FD4+fmhc+fOiIyMxKVLl9C0aVN5P+PHj8eCBQvg7u4OT09PfPfdd0hLS5Ovqpqbm2Py5Mn4+OOPoVQq0blzZ2RkZODEiRMwMzNDaGhopc9PTWJAJSIiojrDzc0N586dw/z58/Hpp58iJSUFdnZ2aNu2LVasWAHgyS3uHTt2YPz48ejatSt0dHQQFBSE7777rkrHmjx5MkJDQ9GqVSvk5uYiKSmpwrYLFy6EUqnE8OHDkZmZCT8/P+zbtw8NGjSo1LEkScLu3bsxffp0jBo1Cvfv34eDgwO6du2Khg0bAgCGDBmC69evY+rUqcjLy8Obb76JDz74APv27ZP3M3XqVNy9excjRoyArq4u3nvvPfTq1Qu6urpym7lz58Le3h4LFizAX3/9BSsrK7Rp0wb/+te/qnR+apIkSg5MICIionohLy8PSUlJcHNzg5GRkbrLoRqiVCrRsmVLDB48GHPnzlV3OZXud7yCSkRERKQlkpOT8dtvvyEgIAD5+fn4/vvvkZSUJI+NrSv4oH4iIiIiLaGjo4OIiAi0a9cOnTp1QlxcHA4cOFClyWGagFdQiYiIiLSEk5MTjh8/ru4yXhivoBIRERGRRmFAJSIiIiKNwoBKRERERBqFAZWIiIiINAoDKhERERFpFAZUIiIiItIoDKhERESkNYo/5lQbREREwMrKSt1lqAUDKhEREdUZYWFhCAkJqXB9SkoKevfuXal9aVOY1TZ8UD8RERFpDQcHB3WXQNWAV1CJiIhIa5S8KlpQUICPPvoIjo6OMDIygqurKxYsWAAAcHV1BQC88cYbkCRJfg0Av/zyC9q2bQsjIyM0bdoUc+bMQVFRkcoxfvjhB7zxxhswMTFB8+bNsWvXrqfWVVBQgM8++wyNGzeGqakp2rdvj+joaJU2ERERcHZ2homJCd544w08fPiwzH7mzZsHe3t7mJub491338X//M//wMfHR6VNeHg4WrZsCSMjI3h6emL58uWVO3kahAGViIiItNK///1v7Nq1C5s3b0ZCQgJ+/PFHOYieOXMGwJMwl5KSIr/et28f3nnnHUyYMAGXL1/GqlWrEBERgfnz56vse86cORg8eDAuXLiAPn36YNiwYXj06FGFtYwcORLHjx/Hpk2bcOHCBQwaNAhBQUFITEwEAJw6dQqjRo3Chx9+iNjYWHTr1g3z5s1T2UdkZCTmz5+Pr776CmfPnoWzszNWrFih0mbNmjWYPn065s+fj/j4eHz55ZeYMWMG1q1b90LnstYJIiIiqndyc3PF5cuXRW5ubpl1+fn5FX4VFhZWum1BQcEz21ZVaGioCA4OrnA9ALF9+3YhhBDjx48X3bt3F0ql8plti3Xp0kV8+eWXKss2bNggHB0dVbb7/PPP5ddZWVlCkiSxZ8+eco9z7do1IUmSuHPnjsryV199VUybNk0IIcTbb78tgoKCVNYPGTJEWFpayq/bt28vxo0bp9KmU6dOwtvbW37t5OQkfvrpJ5U2c+fOFf7+/uXWVtue1u9K4hhUIiIiUlF8G7w8zZs3x9ChQ+XXX3/9NQoLC8tt6+LigrCwMPn1smXLkJOTo9Jm1qxZL1bsU4SFhaFnz57w8PBAUFAQ+vbti9dee+2p25w9exZnzpxRuWKqUCiQl5eHnJwcmJiYAAC8vLzk9aampjA3N0dqamq5+zx37hyEEGjRooXK8vz8fNjY2AAA4uPj8cYbb6is9/f3x969e+XXCQkJ+PDDD1XavPLKKzh06BAA4P79+7h16xZGjx6NMWPGyG2KiopgaWn51PetaRhQiYiISCu1adMGSUlJ2LNnDw4cOIDBgwejR48e2LJlS4XbKJVKzJkzBwMGDCizzsjISP63vr6+yjpJkqBUKivcp66uLs6ePQtdXV2VdWZmZgAAIUSl3pMkSSqvS25XfPw1a9agffv2Ku1KH1fTMaASERGRimnTplW4TkdHdfrK5MmTK2xbOkxNnDjxxQp7DhYWFhgyZAiGDBmCgQMHIigoCI8ePYK1tTX09fWhUChU2rdp0wYJCQlwd3evthp8fX2hUCiQmpqKLl26lNumVatWOHnypMqy0q89PDxw+vRpDB8+XF4WExMj/7thw4Zo3Lgx/vrrLwwbNqza6lcHBlQiIiJSYWBgoPa2T5Oeno7Y2FiVZdbW1nB2dlZZ9u2338LR0RE+Pj7Q0dHBf//7Xzg4OMgPv3d1dcXBgwfRqVMnGBoaokGDBpg5cyb69u0LJycnDBo0CDo6Orhw4QLi4uLKTFqqrBYtWmDYsGEYMWIElixZAl9fXzx48ACHDh1C69at0adPH0yYMAEdO3bEokWLEBISgt9++03l9j4AjB8/HmPGjIGfnx86duyIn3/+GRcuXEDTpk3lNrNnz8aECRNgYWGB3r17Iz8/HzExMUhLS8Mnn3zyXPWrA2fxExERUZ0SHR0NX19fla+ZM2eWaWdmZoavvvoKfn5+aNeuHW7cuIHdu3fLV4GXLFmC/fv3w8nJCb6+vgCAXr16ISoqCvv370e7du3QoUMHfPPNN3BxcXmhmsPDwzFixAh8+umn8PDwQP/+/XHq1Ck4OTkBADp06IAffvgB3333HXx8fPDbb7/h888/V9nHsGHDMG3aNEyePFkevhAWFqYy9ODdd9/FDz/8gIiICLRu3RoBAQGIiIiAm5vbC9Vf2yRR2UEPREREpDXy8vKQlJQENzc3lYBDdUvPnj3h4OCADRs2qLuUSqlsv+MtfiIiIqI6ICcnBytXrkSvXr2gq6uLjRs34sCBA9i/f7+6S6t2DKhEREREdYAkSdi9ezfmzZuH/Px8eHh4YOvWrejRo4e6S6t2DKhEREREdYCxsTEOHDig7jJqBSdJEREREZFGYUAlIiIiIo3CgEpEREREGoUBlYiIiIg0CgMqEREREWkUBlQiIiIi0igMqEREREQlREREwMrKSt1l1GsMqERERFSnhIWFQZIk+cvGxgZBQUG4cOFCtex/yJAhuHr1arXsi54PAyoRERHVOUFBQUhJSUFKSgoOHjwIPT099O3bt1r2bWxsDHt7+2rZFz0fBlQiIiJ6bgoFEB0NbNz45LtCUTvHNTQ0hIODAxwcHODj44OpU6fi1q1buH//PgBg6tSpaNGiBUxMTNC0aVPMmDEDhYWF8vZ//vknunXrBnNzc1hYWKBt27aIiYkBUPYW/+zZs+Hj44MNGzbA1dUVlpaWeOutt5CZmVk7b7Ye4kedEhER0XPZtg2YOBG4ffufZU2aAMuWAQMG1F4dWVlZiIyMhLu7O2xsbAAA5ubmiIiIQKNGjRAXF4cxY8bA3Nwcn332GQBg2LBh8PX1xYoVK6Crq4vY2Fjo6+tXeIzr169jx44diIqKQlpaGgYPHoyFCxdi/vz5tfIe6xsGVCIiIqqybduAgQMBIVSX37nzZPmWLTUbUqOiomBmZgYAyM7OhqOjI6KioqCj8+Tm8Oeffy63dXV1xaeffoqff/5ZDqg3b97ElClT4OnpCQBo3rz5U4+nVCoREREBc3NzAMDw4cNx8OBBBtQawlv8REREVCUKxZMrp6XDKfDPskmTavZ2f7du3RAbG4vY2FicOnUKr732Gnr37o3k5GQAwJYtW9C5c2c4ODjAzMwMM2bMwM2bN+XtP/nkE7z77rvo0aMHFi5ciOvXrz/1eK6urnI4BQBHR0ekpqbWzJsjBlQiIiKqmmPHVG/rlyYEcOvWk3Y1xdTUFO7u7nB3d8crr7yC//3f/0V2djbWrFmDkydP4q233kLv3r0RFRWF8+fPY/r06SgoKJC3nz17Ni5duoTXX38dhw4dQqtWrbB9+/YKj1f69r8kSVAqlTX2/uo73uInIiKiKklJqd521UGSJOjo6CA3NxfHjx+Hi4sLpk+fLq8vvrJaUosWLdCiRQt8/PHHePvttxEeHo433nij9oqmCjGgEhERUZU4OlZvu+eRn5+Pu3fvAgDS0tLw/fffIysrC/369UN6ejpu3ryJTZs2oV27dvj1119Vro7m5uZiypQpGDhwINzc3HD79m2cOXMGb775Zs0VTFXCgEpERERV0qXLk9n6d+6UPw5Vkp6s79Kl5mrYu3cvHP8/AZubm8PT0xP//e9/ERgYCAD4+OOP8dFHHyE/Px+vv/46ZsyYgdmzZwMAdHV18fDhQ4wYMQL37t2Dra0tBgwYgDlz5tRcwVQlkhDldS0iIiLSZnl5eUhKSoKbmxuMjIyqvH3xLH5ANaRK0pPvNT2Ln+qmyvY7TpIiIiKiKhsw4EkIbdxYdXmTJgyn9OJ4i5+IiIiey4ABQHDwk9n6KSlPxpx26QLo6qq7MqrrGFCJiIjouenqAv8/7JOo2vAWPxERERFpFAZUIiIiItIoDKhEREREpFEYUImIiIhIozCgEhEREZFGYUAlIiIiIo3CgEpERERaSZIk7NixQ91l1Cuurq5YunTpC++HAZWIiIjqlLCwMEiSBEmSoK+vj4YNG6Jnz55Yu3YtlEql3C4lJQW9e/dWW50RERGwsrJ6rm2FEFi9ejXat28PMzMzWFlZwc/PD0uXLkVOTo5G1FiTGFCJiIiozgkKCkJKSgpu3LiBPXv2oFu3bpg4cSL69u2LoqIiAICDgwMMDQ2r/dgKhUIlCNeE4cOHY9KkSQgODsbhw4cRGxuLGTNmYOfOnfjtt99q9NjlKSgoqNXjMaASERHRCxFCIDo6GkKIWjumoaEhHBwc0LhxY7Rp0wb/+te/sHPnTuzZswcREREAVG/xFxQU4KOPPoKjoyOMjIzg6uqKBQsWyPt7/Pgx3nvvPTRs2BBGRkZ4+eWXERUVBeCfq4xRUVFo1aoVDA0NkZycjIKCAnz22Wdo3LgxTE1N0b59e0RHRwMAoqOjMXLkSKSnp8tXe2fPni3XUtF2ALB582ZERkZi48aN+Ne//oV27drB1dUVwcHBOHToELp16wYAUCqV+OKLL9CkSRMYGhrCx8cHe/fulfdz48YNSJKEbdu2oVu3bjAxMYG3tzf++OOPZ9bo6uqKefPmISwsDJaWlhgzZgwAYOvWrXjppZdgaGgIV1dXLFmypDr/s/5DEBERUb2Tm5srLl++LHJzc194X7t37xYAxJ49e6qhsmcLDQ0VwcHB5a7z9vYWvXv3FkIIAUBs375dCCHE4sWLhZOTkzh69Ki4ceOGOHbsmPjpp5+EEEIoFArRoUMH8dJLL4nffvtNXL9+Xfzyyy9i9+7dQgghwsPDhb6+vujYsaM4fvy4uHLlisjKyhJDhw4VHTt2FEePHhXXrl0TixcvFoaGhuLq1asiPz9fLF26VFhYWIiUlBSRkpIiMjMzhRDiqdsJIUT//v2Fh4fHM8/DN998IywsLMTGjRvFlStXxGeffSb09fXl/SQlJQkAwtPTU0RFRYmEhAQxcOBA4eLiIgoLC59ao4uLi7CwsBCLFy8WiYmJIjExUcTExAgdHR3xxRdfiISEBBEeHi6MjY1FeHi4XJOLi4v49ttvK6y5sv2OAZWIiKgeqs6AOmrUKAFAjB49uhoqe7anBdQhQ4aIli1bCiFUA+r48eNF9+7dhVKpLLPNvn37hI6OjkhISCh3n+Hh4QKAiI2NlZddu3ZNSJIk7ty5o9L21VdfFdOmTZO3s7S0VFlfme1atmwp+vfvX/6bL6FRo0Zi/vz5KsvatWsnPvzwQyHEPwH1hx9+kNdfunRJABDx8fEV1ijEk6AZEhKismzo0KGiZ8+eKsumTJkiWrVqpbJddQRUvZq5LktERETaSqlUYsWKFXj8+DEAYMuWLfJ3Nzc3AICVlRU++OAD6OjU7mhCIQQkSSqzPCwsDD179oSHhweCgoLQt29fvPbaawCA2NhYNGnSBC1atKhwvwYGBvDy8pJfnzt3DkKIMtvk5+fDxsamwv1UZruK3kNJGRkZ+Pvvv9GpUyeV5Z06dcKff/6psqxk3Y6OjgCA1NRUeHp6PvUYfn5+Kq/j4+MRHBxc5nhLly6FQqGArq7uU/dXFQyoREREVCXZ2dmYOXMmHj16BEmS5BCalZWFGTNmQAgBa2trjBgxAubm5rVaW3x8vBySS2rTpg2SkpKwZ88eHDhwAIMHD0aPHj2wZcsWGBsbP3O/xsbGKqFRqVRCV1cXZ8+eLRPMzMzMKtxPZbZr0aIF4uPjn1kTgDJBtrxwq6+vX6Z9ZSZ5mZqaPnPfoobGHXOSFBEREVWJubk5zp8/j44dOwJ4Mqu95PeOHTsiNja21sPpoUOHEBcXhzfffLPc9RYWFhgyZAjWrFmDn3/+GVu3bsWjR4/g5eWF27dv4+rVq5U+lq+vLxQKBVJTU+Hu7q7y5eDgAODJVdfic1KV7YYOHYqrV69i586dZY4rhEB6ejosLCzQqFEj/P777yrrT5w4gZYtW1b6fZRXY0VatWpV7vFatGhRrVdPAV5BJSIioufg7OyMw4cPw9raGtnZ2fJyExMTREdHq1y1qwn5+fm4e/cuFAoF7t27h71792LBggXo27cvRowYUab9t99+C0dHR/j4+EBHRwf//e9/4eDgACsrKwQEBKBr165488038c0338Dd3R1XrlyBJEkICgoq9/gtWrTAsGHDMGLECCxZsgS+vr548OABDh06hNatW6NPnz5wdXVFVlYWDh48CG9vb5iYmFRqu8GDB2P79u14++23MWPGDPTs2RN2dnaIi4vDt99+i/HjxyMkJARTpkzBrFmz0KxZM/j4+CA8PByxsbGIjIys9Hksr0YTE5Ny23766ado164d5s6diyFDhuCPP/7A999/j+XLl1f6eJX21BGqREREpJWqY5LUsWPHBIAyX7///ns1VlpWaGiofCw9PT1hZ2cnevToIdauXSsUCoXcDiUmSa1evVr4+PgIU1NTYWFhIV599VVx7tw5ue3Dhw/FyJEjhY2NjTAyMhIvv/yyiIqKEkJUPJGooKBAzJw5U7i6ugp9fX3h4OAg3njjDXHhwgW5zdixY4WNjY0AIGbNmlXp7RQKhVixYoVo166dMDExERYWFqJt27Zi2bJlIicnR24zZ84c0bhxY6Gvry+8vb1VnqRQPEnq/Pnz8rK0tDQBQBw+fPipNVY02WnLli2iVatWQl9fXzg7O4vFixerrK+uSVKSELX40DIiIiLSCHl5eUhKSoKbmxuMjIyeax9Tp07FokWLEBISgq+//hqffvopdu7cic8++wxfffVVNVdM2qCy/Y63+ImIiOi59O/fH97e3nj77bchSRK2b9+OjRs3wsXFRd2lUR3HK6hERET1UHVcQSWqqsr2O87iJyIiIiKNwoBKRERERBqFAZWIiIiINAoDKhERERFpFAZUIiIiItIoDKhEREREpFEYUImIiIhIozCgEhEREVWBJEnY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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "case1_example3 = case1(\"case1_example3\")\n", + "case1_example3.create_model()" + ] + }, + { + "cell_type": "markdown", + "id": "67bf3197-b08b-43b2-977c-c49b16b4741d", + "metadata": {}, + "source": [ + "### Example 4: boundary levels on target, initial state above target" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "3fbb8789-ac5e-492a-be94-add01dcf779a", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:003101249.98875010.0000000.000000e+003.209287e-07-0.0007230.0005790.0013020.00.0-9.478442e-07-1.636535e-03
12024-01-01 00:00:004100000.00000010.0000003.209287e-071.666667e-01-0.1669770.0005790.0011570.00.0-2.679622e-04-3.758205e-01
22024-01-01 00:01:003101249.9453859.9999980.000000e+001.856004e-06-0.0007250.0005790.0013020.00.01.486129e-072.568361e-04
32024-01-01 00:01:00499989.9813779.9994991.856004e-061.666667e-01-0.1672080.0005790.0011570.00.0-3.493134e-05-5.841113e-02
42024-01-01 00:02:003101249.9018629.9999960.000000e+004.820334e-06-0.0007280.0005790.0013020.00.02.231118e-073.856115e-04
..........................................
892752024-01-31 23:57:004999.9898400.9999901.000000e-029.348269e-03-0.0000080.0005790.0001160.00.01.123059e-031.121133e-01
892762024-01-31 23:58:00372849.1470478.6340890.000000e+001.000000e-02-0.0105260.0005790.0011040.00.0-8.461456e-11-1.462140e-07
892772024-01-31 23:58:004999.9893380.9999901.000000e-028.271165e-030.0008540.0005790.0001160.00.01.338075e-031.477566e-01
892782024-01-31 23:59:00372848.5155028.6340560.000000e+001.000000e-02-0.0105260.0005790.0011040.00.0-7.554613e-11-1.305437e-07
892792024-01-31 23:59:0041000.0405621.0000161.000000e-021.033537e-02-0.0006860.0005790.0001160.00.08.132637e-047.995064e-02
\n", + "

89280 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " time node_id storage level inflow_rate \\\n", + "0 2024-01-01 00:00:00 3 101249.988750 10.000000 0.000000e+00 \n", + "1 2024-01-01 00:00:00 4 100000.000000 10.000000 3.209287e-07 \n", + "2 2024-01-01 00:01:00 3 101249.945385 9.999998 0.000000e+00 \n", + "3 2024-01-01 00:01:00 4 99989.981377 9.999499 1.856004e-06 \n", + "4 2024-01-01 00:02:00 3 101249.901862 9.999996 0.000000e+00 \n", + "... ... ... ... ... ... \n", + "89275 2024-01-31 23:57:00 4 999.989840 0.999990 1.000000e-02 \n", + "89276 2024-01-31 23:58:00 3 72849.147047 8.634089 0.000000e+00 \n", + "89277 2024-01-31 23:58:00 4 999.989338 0.999990 1.000000e-02 \n", + "89278 2024-01-31 23:59:00 3 72848.515502 8.634056 0.000000e+00 \n", + "89279 2024-01-31 23:59:00 4 1000.040562 1.000016 1.000000e-02 \n", + "\n", + " outflow_rate storage_rate precipitation evaporation drainage \\\n", + "0 3.209287e-07 -0.000723 0.000579 0.001302 0.0 \n", + "1 1.666667e-01 -0.166977 0.000579 0.001157 0.0 \n", + "2 1.856004e-06 -0.000725 0.000579 0.001302 0.0 \n", + "3 1.666667e-01 -0.167208 0.000579 0.001157 0.0 \n", + "4 4.820334e-06 -0.000728 0.000579 0.001302 0.0 \n", + "... ... ... ... ... ... \n", + "89275 9.348269e-03 -0.000008 0.000579 0.000116 0.0 \n", + "89276 1.000000e-02 -0.010526 0.000579 0.001104 0.0 \n", + "89277 8.271165e-03 0.000854 0.000579 0.000116 0.0 \n", + "89278 1.000000e-02 -0.010526 0.000579 0.001104 0.0 \n", + "89279 1.033537e-02 -0.000686 0.000579 0.000116 0.0 \n", + "\n", + " infiltration balance_error relative_error \n", + "0 0.0 -9.478442e-07 -1.636535e-03 \n", + "1 0.0 -2.679622e-04 -3.758205e-01 \n", + "2 0.0 1.486129e-07 2.568361e-04 \n", + "3 0.0 -3.493134e-05 -5.841113e-02 \n", + "4 0.0 2.231118e-07 3.856115e-04 \n", + "... ... ... ... \n", + "89275 0.0 1.123059e-03 1.121133e-01 \n", + "89276 0.0 -8.461456e-11 -1.462140e-07 \n", + "89277 0.0 1.338075e-03 1.477566e-01 \n", + "89278 0.0 -7.554613e-11 -1.305437e-07 \n", + "89279 0.0 8.132637e-04 7.995064e-02 \n", + "\n", + "[89280 rows x 13 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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X6Z9ZSZ5mZqaPnPfoobGHXOSFBEREVWJubk5zp8/j44dOwJ4Mqu95PeOHTsiNja21sPpoUOHEBcXhzfffLPc9RYWFhgyZAjWrFmDn3/+GVu3bsWjR4/g5eWF27dv4+rVq5U+lq+vLxQKBVJTU+Hu7q7y5eDgAODJVdfic1KV7YYOHYqrV69i586dZY4rhEB6ejosLCzQqFEj/P777yrrT5w4gZYtW1b6fZRXY0VatWpV7vFatGhRrVdPAV5BJSIioufg7OyMw4cPw9raGtnZ2fJyExMTREdHq1y1qwn5+fm4e/cuFAoF7t27h71792LBggXo27cvRowYUab9t99+C0dHR/j4+EBHRwf//e9/4eDgACsrKwQEBKBr165488038c0338Dd3R1XrlyBJEkICgoq9/gtWrTAsGHDMGLECCxZsgS+vr548OABDh06hNatW6NPnz5wdXVFVlYWDh48CG9vb5iYmFRqu8GDB2P79u14++23MWPGDPTs2RN2dnaIi4vDt99+i/HjxyMkJARTpkzBrFmz0KxZM/j4+CA8PByxsbGIjIys9Hksr0YTE5Ny23766ado164d5s6diyFDhuCPP/7A999/j+XLl1f6eJX21BGqREREpJWqY5LUsWPHBIAyX7///ns1VlpWaGiofCw9PT1hZ2cnevToIdauXSsUCoXcDiUmSa1evVr4+PgIU1NTYWFhIV599VVx7tw5ue3Dhw/FyJEjhY2NjTAyMhIvv/yyiIqKEkJUPJGooKBAzJw5U7i6ugp9fX3h4OAg3njjDXHhwgW5zdixY4WNjY0AIGbNmlXp7RQKhVixYoVo166dMDExERYWFqJt27Zi2bJlIicnR24zZ84c0bhxY6Gvry+8vb1VnqRQPEnq/Pnz8rK0tDQBQBw+fPipNVY02WnLli2iVatWQl9fXzg7O4vFixerrK+uSVKSELX40DIiIiLSCHl5eUhKSoKbmxuMjIyeax9Tp07FokWLEBISgq+//hqffvopdu7cic8++wxfffVVNVdM2qCy/Y63+ImIiOi59O/fH97e3nj77bchSRK2b9+OjRs3wsXFRd2lUR3HK6hERET1UHVcQSWqqsr2O87iJyIiIiKNwoBKRERERBqFAZWIiIiINAoDKhERERFpFAZUIiIiItIoDKhEREREpFEYUImIiIhIozCgEhEREVWBJEnY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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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u7i4WEOGDFHXrl313nvv6cILL7SwMhxqypQp+vrrr1v9F3F9fb0uu+wyud1uvfjiiyGuDkfT0t8vISFBb731lq699lplZ2fLbrdr1KhRGjt2rIWVBhbhA23WsWNH2e12by+HR3l5ufLy8nTgwAHdc889mj9/vsaNGydJGjBggFavXq2nnnqK8BGBCgoK1LVr16iabR8Npk6dqgULFmjZsmXq3LnzYe/X19frkksu0ZYtW7R48WJ6PcLMkf5+gwcP1urVq1VRUaG6ujp16tRJw4YN05AhQyyqNrAYdkGbJSYmavDgwVq0aJHP64sWLdLpp5+u+vp61dfXH3ZnQ7vdLrfbHcpSESB79uzRtm3bVFBQYHUpkNnLOGXKFL399ttavHixunfvftg+nuDx3Xff6cMPP1ROTo4FlaIl/vz9PDIzM9WpUyd99913WrFihcaPHx/CSoOHng+0y/Tp03XVVVdpyJAhOu200/Tyyy+rtLRUN9xwgxwOh0aMGKH//M//VEpKirp27aqlS5fqT3/6k5555hmrS4fMdVg2bdrkfb5lyxatXr1a2dnZys7O1oMPPqiLLrpIBQUF2rp1q+655x517NhRF1xwgYVVw2Py5Ml67bXX9O677yojI8PbC5mZmamUlBQ1NDTo4osv1qpVq/T3v/9djY2N3n2ys7OVmJhoZfkx72h/P0l688031alTJ3Xp0kVr1qzRLbfcogkTJhw20T9iWXmpDSLbCy+8YHTt2tVITEw0Tj75ZJ/L/Hbs2GFMmjTJKCwsNJKTk40+ffoYTz/9tOF2uy2sGB4ff/yxIemwx8SJE42amhpj9OjRRqdOnYyEhASjS5cuxsSJE43S0lKry0aTlv52kow5c+YYhmEYW7ZsaXWfjz/+2NLacfS/n2EYxnPPPWd07tzZ+//B3/72t4bL5bKu6ADjxnIAACCkmPMBAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCKuThY9KkSZowYUKoTwsAAMIEPR8AACCkLA0fCxcu1PDhw5WVlaWcnBz94he/0ObN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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "case1_example1 = case1(\"case1_example4\")\n", + "case1_example1.create_model()" + ] + }, + { + "cell_type": "markdown", + "id": "e907351e-2d44-4031-8201-5effcb6a232b", + "metadata": {}, + "source": [ + "# Case 2" + ] + }, + { + "cell_type": "markdown", + "id": "64862d6c-7da0-41a4-9285-105749b91ef6", + "metadata": {}, + "source": [ + "### Example 1: boundary and basin levels on target " + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "029f65b0-0158-46b1-be23-79564bc49f20", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0031250.0087502.0000000.0055500.004450-0.0000110.00.0001450.00.00.0009660.190740
12024-01-01 00:00:0041000.0090001.0000000.0044500.005304-0.0005800.00.0001160.00.0-0.000390-0.083897
22024-01-01 00:01:0031250.0080692.0000000.0047380.005262-0.0003670.00.0001450.00.0-0.000302-0.061862
32024-01-01 00:01:004999.9741960.9999830.0052620.0038040.0009480.00.0001160.00.00.0003940.095823
42024-01-01 00:02:0031249.9860761.9999910.0055170.0044830.0010210.00.0001450.00.0-0.000131-0.028820
..........................................
28752024-01-01 23:57:0041000.0077360.9999990.0056270.005870-0.0001500.00.0001160.00.0-0.000209-0.036459
28762024-01-01 23:58:0031249.9969351.9999950.0050940.0049060.0002990.00.0001450.00.0-0.000256-0.052041
28772024-01-01 23:58:004999.9987530.9999950.0049060.004242-0.0000020.00.0001160.00.00.0005500.118730
28782024-01-01 23:59:0031250.0148712.0000020.0057830.0042170.0000060.00.0001450.00.00.0014160.279322
28792024-01-01 23:59:004999.9986590.9999950.0042170.004927-0.0004760.00.0001160.00.0-0.000350-0.079689
\n", + "

2880 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " time node_id storage level inflow_rate \\\n", + "0 2024-01-01 00:00:00 3 1250.008750 2.000000 0.005550 \n", + "1 2024-01-01 00:00:00 4 1000.009000 1.000000 0.004450 \n", + "2 2024-01-01 00:01:00 3 1250.008069 2.000000 0.004738 \n", + "3 2024-01-01 00:01:00 4 999.974196 0.999983 0.005262 \n", + "4 2024-01-01 00:02:00 3 1249.986076 1.999991 0.005517 \n", + "... ... ... ... ... ... \n", + "2875 2024-01-01 23:57:00 4 1000.007736 0.999999 0.005627 \n", + "2876 2024-01-01 23:58:00 3 1249.996935 1.999995 0.005094 \n", + "2877 2024-01-01 23:58:00 4 999.998753 0.999995 0.004906 \n", + "2878 2024-01-01 23:59:00 3 1250.014871 2.000002 0.005783 \n", + "2879 2024-01-01 23:59:00 4 999.998659 0.999995 0.004217 \n", + "\n", + " outflow_rate storage_rate precipitation evaporation drainage \\\n", + "0 0.004450 -0.000011 0.0 0.000145 0.0 \n", + "1 0.005304 -0.000580 0.0 0.000116 0.0 \n", + "2 0.005262 -0.000367 0.0 0.000145 0.0 \n", + "3 0.003804 0.000948 0.0 0.000116 0.0 \n", + "4 0.004483 0.001021 0.0 0.000145 0.0 \n", + "... ... ... ... ... ... \n", + "2875 0.005870 -0.000150 0.0 0.000116 0.0 \n", + "2876 0.004906 0.000299 0.0 0.000145 0.0 \n", + "2877 0.004242 -0.000002 0.0 0.000116 0.0 \n", + "2878 0.004217 0.000006 0.0 0.000145 0.0 \n", + "2879 0.004927 -0.000476 0.0 0.000116 0.0 \n", + "\n", + " infiltration balance_error relative_error \n", + "0 0.0 0.000966 0.190740 \n", + "1 0.0 -0.000390 -0.083897 \n", + "2 0.0 -0.000302 -0.061862 \n", + "3 0.0 0.000394 0.095823 \n", + "4 0.0 -0.000131 -0.028820 \n", + "... ... ... ... \n", + "2875 0.0 -0.000209 -0.036459 \n", + "2876 0.0 -0.000256 -0.052041 \n", + "2877 0.0 0.000550 0.118730 \n", + "2878 0.0 0.001416 0.279322 \n", + "2879 0.0 -0.000350 -0.079689 \n", + "\n", + "[2880 rows x 13 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHRCAYAAAC4mLk+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAzh0lEQVR4nO3deXRV1f3//9c1IwkZDJgJAgRRAZFBokALAhaC0cVQ7BInBgutKIOYWiXSymAFZClFRED5UFCLQpXhQ5XyIa2QaBFKMKko1AGCoZIQQcklQS6B7N8f/LhfrxCSG3Lv5obnY62ses7ZZ5/9TlLuK/tMDmOMEQAAgCVX2B4AAAC4vBFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFgVbHsAtVFVVaWDBw8qKipKDofD9nAAAEAtGGN07NgxJScn64orqp//CIgwcvDgQaWkpNgeBgAAqIMDBw6oefPm1W4PiDASFRUl6Uwx0dHRlkcDAABqw+l0KiUlxf05Xp2ACCNnT81ER0cTRgAACDA1XWLBBawAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKq/CyKxZs3TTTTcpKipK8fHxGjJkiD777LMa98vJyVHXrl0VHh6u1q1ba/HixXUeMAAAaFi8CiM5OTkaN26ctm3bpuzsbJ06dUrp6emqqKiodp/CwkLdfvvt6tWrl/Lz8/Xkk09q4sSJWr169UUPHgAABD6HMcbUdedvvvlG8fHxysnJ0S233HLeNk888YTWr1+vPXv2uNeNHTtW//73v/Xhhx/W6jhOp1MxMTEqKyvj3TQAAASI2n5+X9SL8srKyiRJcXFx1bb58MMPlZ6e7rFuwIABWrp0qSorKxUSElLr4y1470uFRzau22ABAP5V9791A0cNL4C73J2oKK9VuzqHEWOMMjMz1bNnT3Xo0KHadiUlJUpISPBYl5CQoFOnTunw4cNKSko6Zx+XyyWXy+VedjqdkqTFOXt1RVhEXYcMAAD8qMp1vFbt6hxGxo8fr48//lgffPBBjW1//Orgs2eGqnul8KxZszR9+vRz1t9zc4rCIpgZAYBAUdt5g0t5DqW6Gn445tpOAl1uEymu4+WaU4t2dQojEyZM0Pr165Wbm6vmzZtfsG1iYqJKSko81pWWlio4OFhNmjQ57z5ZWVnKzMx0LzudTqWkpGjKHe25ZgQAgADhdDrrP4wYYzRhwgStXbtWW7ZsUWpqao379OjRQ3/961891m3atElpaWnVXi8SFhamsLAwb4YGAAAClFe39o4bN05//vOf9cYbbygqKkolJSUqKSnR999/726TlZWlESNGuJfHjh2rr776SpmZmdqzZ4/+9Kc/aenSpXrsscfqrwoAABCwvAojixYtUllZmfr06aOkpCT316pVq9xtiouLVVRU5F5OTU3Vhg0btGXLFnXu3FlPP/205s+frzvvvLP+qgAAAAHrop4z4i88ZwQAgMBT289v3k0DAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsMrrMJKbm6uBAwcqOTlZDodD69atq3GfFStWqFOnToqIiFBSUpIeeOABHTlypC7jBQAADYzXYaSiokKdOnXSggULatX+gw8+0IgRIzR69Gh9+umneuutt7Rjxw6NGTPG68ECAICGJ9jbHTIyMpSRkVHr9tu2bVOrVq00ceJESVJqaqoefPBBzZkzx9tDAwCABsjn14z85Cc/0X//+19t2LBBxhgdOnRIb7/9tu644w5fHxoAAAQAv4SRFStWaNiwYQoNDVViYqJiY2P14osvVruPy+WS0+n0+AIAAA2Tz8PI7t27NXHiRD311FPauXOnNm7cqMLCQo0dO7bafWbNmqWYmBj3V0pKiq+HCQAALHEYY0ydd3Y4tHbtWg0ZMqTaNsOHD9eJEyf01ltvudd98MEH6tWrlw4ePKikpKRz9nG5XHK5XO5lp9OplJQUlZWVKTo6uq7DBQAAfuR0OhUTE1Pj57fXF7B66/jx4woO9jxMUFCQJKm6HBQWFqawsDBfDw0AAFwCvD5NU15eroKCAhUUFEiSCgsLVVBQoKKiIklSVlaWRowY4W4/cOBArVmzRosWLdK+ffv0z3/+UxMnTtTNN9+s5OTk+qkCAAAELK9nRvLy8tS3b1/3cmZmpiRp5MiRWr58uYqLi93BRJJGjRqlY8eOacGCBfrNb36j2NhY3XrrrXr22WfrYfgAACDQXdQ1I/5S23NOAADg0lHbz2/eTQMAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACs8jqM5ObmauDAgUpOTpbD4dC6detq3MflcmnKlClq2bKlwsLCdPXVV+tPf/pTXcYLAAAamGBvd6ioqFCnTp30wAMP6M4776zVPnfddZcOHTqkpUuXqk2bNiotLdWpU6e8HiwAAGh4vA4jGRkZysjIqHX7jRs3KicnR/v27VNcXJwkqVWrVt4eFgAANFBehxFvrV+/XmlpaZozZ45ef/11RUZGatCgQXr66afVqFGj8+7jcrnkcrncy06n09fDBACgzk6fPq3Kykrbw/C7kJAQBQUFXXQ/Pg8j+/bt0wcffKDw8HCtXbtWhw8f1sMPP6xvv/222utGZs2apenTp/t6aAAAXBRjjEpKSnT06FHbQ7EmNjZWiYmJcjgcde7DYYwxdd7Z4dDatWs1ZMiQatukp6fr/fffV0lJiWJiYiRJa9as0S9+8QtVVFScd3bkfDMjKSkpKisrU3R0dF2HCwBAvSou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wCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsMrrMJKbm6uBAwcqOTlZDodD69atq3GfnJwcde3aVeHh4WrdurUWL15cl7ECAIAGyOswUlFRoU6dOmnBggW1al9YWKjbb79dvXr1Un5+vp588klNnDhRq1ev9nqwAACg4Qn2doeMjAxlZGTUuv3ixYvVokULzZs3T5LUrl075eXl6bnnntOdd97p7eEBAEAD43UY8daHH36o9PR0j3UDBgzQ0qVLVVlZqZCQkHP2cblccrlc7mWn03nmP/6nv9TI50P2A4fH/8jU1L6GBqbGDn5waMcPF+p2zBqPdwnuW+P+DXHfC2++JH9OjiukmBSpUax0rFiqOl1D3xc6luNHv+9oeALt5+vFv9VWne/7Wsexf3+qVs18/sleUlKihIQEj3UJCQk6deqUDh8+rKSkpHP2mTVrlqZPn35uZ9/skcIC7ZcPgFecX9seAYD64qpdiPHLNIPjR3+dmP//r5sfrz8rKytLmZmZ7mWn06mUlBRp2AopKtJ3A62ViwlD5gd/2f34B1RDvzX+hefNuH5wbGMu0PcF+ryY8djat8b9G+K+F958yf2cvs6Tyr6WYppJUclScGjN+1Z3LGN05nedP2AaJnPhn7G3s2K1mtGrh98lf87WVfvvuxez4hf8jKiFYxXS7EE1NvN5GElMTFRJSYnHutLSUgUHB6tJkybn3ScsLExhYWHnbmjdW4qO9sUwAVwKkjraHgGA+nT2Mosa+Pw5Iz169FB2drbHuk2bNiktLe2814sAAIDLi9dhpLy8XAUFBSooKJB05tbdgoICFRUVSTpzimXEiBHu9mPHjtVXX32lzMxM7dmzR3/605+0dOlSPfbYY/VTAQAACGhen6bJy8tT37593ctnr+0YOXKkli9fruLiYncwkaTU1FRt2LBBjz76qF566SUlJydr/vz53NYLAAAkSQ5jvLkv1A6n06mYmBiVlZUpmmtGAAAICLX9/ObdNAAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqn7+1tz6cfUiss5Zv/wMAAPad/dyu6WHvARFGjhw5IklKSUmxPBIAAOCtI0eOKCYmptrtARFG4uLiJElFRUUXLKYhuummm7Rjxw7bw/A76r68UPflhbovH2VlZWrRooX7c7w6ARFGrrjizKUtMTExl92L8oKCgi67miXqvtxQ9+WFui8/Zz/Hq93up3GgjsaNG2d7CFZQ9+WFui8v1I0fc5iariq5BNT2FcQAAODSUdvP74CYGQkLC9PUqVMVFhZmeygAAKCWavv5HRAzIwAAoOEKiJkRAADQcBFGAACAVYQRH1q4cKFSU1MVHh6url276v3333dvmzZtmtq2bavIyEhdeeWV6tevn7Zv315jn7t27VLv3r3VqFEjNWvWTDNmzDjnyXY5OTnq2rWrwsPD1bp1ay1evLjea7uQC9UtSXv27NGgQYMUExOjqKgode/eXUVFRRfsM9DrPnTokEaNGqXk5GRFRETotttu0xdffFFjn5d63bm5uRo4cKCSk5PlcDi0bt0697bKyko98cQTuuGGGxQZGank5GSNGDFCBw8erLHfQK5bkkaNGiWHw+Hx1b179xr7DfS6y8vLNX78eDVv3lyNGjVSu3bttGjRohr7vZTrnjVrlm666SZFRUUpPj5eQ4YM0WeffebRZs2aNRowYICaNm0qh8OhgoKCWvV9KdftdwY+sXLlShMSEmKWLFlidu/ebR555BETGRlpvvrqK2OMMStWrDDZ2dlm79695pNPPjGjR4820dHRprS0tNo+y8rKTEJCgrn77rvNrl27zOrVq01UVJR57rnn3G327dtnIiIizCOPPGJ2795tlixZYkJCQszbb7/t85qNqbnuL7/80sTFxZnf/va35qOPPjJ79+4177zzjjl06FC1fQZ63VVVVaZ79+6mV69e5l//+pf5z3/+Y37961+bFi1amPLy8mr7DIS6N2zYYKZMmWJWr15tJJm1a9e6tx09etT069fPrFq1yvznP/8xH374oenWrZvp2rXrBfsM9LqNMWbkyJHmtttuM8XFxe6vI0eOXLDPhlD3mDFjzNVXX202b95sCgsLzcsv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0HARRgAAgFV+CSOzZs3STTfdpKioKMXHx2vIkCHuZ4ucZYzRtGnTlJycrEaNGqlPnz769NNP3du//fZbTZgwQdddd50iIiLUokULTZw4sdrbeF0ulzp37iyHw6GCggJflgcAAC6CX8JITk6Oxo0bp23btik7O1unTp1Senq6Kioq3G3mzJmjuXPnasGCBdqxY4cSExPVv39/HTt2TJJ08OBBHTx4UM8995x27dql5cuXa+PGjRo9evR5j/n4448rOTnZH+UBAICLYOUC1m+++Ubx8fHKycnRLbfcImOMkpOTNWnSJD3xxBOSzsxsJCQk6Nlnn9WDDz543n7eeust3X///aqoqHA/CE06c/dNZmamVq9ereuvv175+fnq3LmzP0oDAABesnLNyNlTK3FxcZKkwsJClZSUKD093d0mLCxMvXv31tatWy/YT3R0tEcQOXTokH71q1/p9ddfV0REhI8qAAAA9cXvYcQYo8zMTPXs2VMdOnSQJPcbfn/8Vt+EhIRz3v571pEjR/T00097zJoYYzRq1CiNHTtWaWlpPqoAAADUJ78/gXX8+PH6+OOP9cEHH5yzzeFweCwbY85ZJ0lOp1N33HGH2rdvr6lTp7rXv/jii3I6ncrKyqr/gQMAAJ/w68zIhAkTtH79em3evFnNmzd3rz/7pt4fz4KUlpaeM1ty7Ngx3XbbbWrcuLHWrl2rkJAQ97b33ntP27ZtU1hYmIKDg9WmTRtJUlpamkaOHOmrsgAAwEXwSxgxxmj8+PFas2aN3nvvPaWmpnpsT01NVWJiorKzs93rTp48qZycHP3kJz9xr3M6nUpPT1doaKjWr1+v8PBwj37mz5+vf//73yooKFBBQYE2bNggSVq1apWeeeYZH1YIAADqyi+nacaNG6c33nhD//u//6uoqCj3DEhMTIwaNWokh8OhSZMmaebMmbrmmmt0zTXXaObMmYqIiNC9994r6cyMSHp6uo4fP64///nPcjqdcjqdkqSrrrpKQUFBatGihcdxGzduLEm6+uqrPWZiAADApcMvYWTRokWSpD59+nisX7ZsmUaNGiXpzHNBvv/+ez388MP67rvv1K1bN23atElRUVGSpJ07d2r79u2S5D79clZhYaFatWrl0xoAAIBv8KI8AABgFe+mAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQSAz2zZskUOh0NHjx61PRQAlzAeegag3vTp00edO3fWvHnzJJ15x9S3336rhISE876BGwAkPz0OHsDlKTQ01P1WbgCoDqdpANSLUaNGKScnRy+88IIcDoccDoeWL1/ucZpm+fLlio2N1TvvvKPrrrtOERER+sUvfqGKigq9+uqratWqla688kpNmDBBp0+fdvd98uRJPf7442rWrJkiIyPVrVs3bdmyxU6hAOodMyMA6sULL7ygzz//XB06dNCMGTMkSZ9++uk57Y4fP6758+dr5cqVOnbsmIYOHaqhQ4cqNjZWGzZs0L59+3TnnXeqZ8+eGjZsmCTpgQce0P79+7Vy5UolJydr7dq1uu2227Rr1y5dc801fq0TQP0jjACoFzExMQoNDVVERIT71Mx//vOfc9pVVlZq0aJFuvrqqyVJv/jFL/T666/r0KFDaty4sdq3b6++fftq8+bNGjZsmPbu3as333xT//3vf5WcnCxJeuyxx7Rx40YtW7ZMM2fO9F+RAHyCMALAryIiItxBRJISEhLUqlUrNW7c2GNdaWmpJOmjjz6SMUbXXnutRz8ul0tNmjTxz6AB+BRhBIBfhYSEeCw7HI7zrquqqpIkVVVVKSgoSDt37lRQUJBHux8GGACBizACoN6EhoZ6XHhaH7p06aLTp0+rtLRUvXr1qte+AVwauJsGQL1p1aqVtm/frv379+vw4cPu2Y2Lce211+q+++7TiBEjtGbNGhUWFmrHjh169tlntWHDhnoYNQDbCCMA6s1jjz2moKAgtW/fXldddZWKiorqpd9ly5ZpxIgR+s1vfqPrrrtOgwYN0vbt25WSklIv/QOwiyewAgAAq5gZAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWPX/AVAA2DjCsx/ZAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#first, load in the simple model of case 1. Copy it.\n", + "case2_example1 = case1(\"case2_example1\")\n", + "case2_base_model = case2_example1.create_model(copy = True)\n", + "\n", + "#then, change it to a case 2 category\n", + "case2_example1 = case2(\"case2_example1\", model = case2_base_model)\n", + "case2_example1.create_model()" + ] + }, + { + "cell_type": "markdown", + "id": "5c22f340-c381-4992-91db-f6186c4e3c80", + "metadata": {}, + "source": [ + "### Example 2: boundary and basins below target, third basin above\n", + "The third basins should fill up the others, or else be pumped to target level by the second pump." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "a37e627d-2f8a-4d19-9ee6-f535420d277c", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0030.0000001.0000000.010.0000000.0100000.01.679887e-070.00.06.045863e-080.305011
12024-01-01 00:00:0040.0000000.0000000.010.0000000.0100000.01.845589e-070.00.06.611968e-080.303833
22024-01-01 00:00:008100000.00000010.0000000.000.186667-0.1878240.01.157374e-030.00.0-3.483442e-08-2.000000
32024-01-01 00:01:0030.5999861.0219050.010.0000000.0099990.07.009689e-070.00.01.399768e-070.181562
42024-01-01 00:01:0040.5999850.0244900.010.0000000.0099990.07.624346e-070.00.01.508812e-070.180076
..........................................
1339152024-01-31 23:58:004763.8048150.8739550.000.000000-0.0001010.01.011524e-040.00.0-1.265898e-10-2.000000
1339162024-01-31 23:58:0085635.4363652.3739040.000.000000-0.0002750.02.747575e-040.00.0-1.265873e-10-2.000000
1339172024-01-31 23:59:003953.2532341.8732680.000.000000-0.0001260.01.263410e-040.00.0-1.582402e-10-2.000000
1339182024-01-31 23:59:004763.7987450.8739510.000.000000-0.0001010.01.011520e-040.00.0-1.265904e-10-2.000000
1339192024-01-31 23:59:0085635.4198792.3739000.000.000000-0.0002750.02.747571e-040.00.0-1.265705e-10-2.000000
\n", + "

133920 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " time node_id storage level inflow_rate \\\n", + "0 2024-01-01 00:00:00 3 0.000000 1.000000 0.01 \n", + "1 2024-01-01 00:00:00 4 0.000000 0.000000 0.01 \n", + "2 2024-01-01 00:00:00 8 100000.000000 10.000000 0.00 \n", + "3 2024-01-01 00:01:00 3 0.599986 1.021905 0.01 \n", + "4 2024-01-01 00:01:00 4 0.599985 0.024490 0.01 \n", + "... ... ... ... ... ... \n", + "133915 2024-01-31 23:58:00 4 763.804815 0.873955 0.00 \n", + "133916 2024-01-31 23:58:00 8 5635.436365 2.373904 0.00 \n", + "133917 2024-01-31 23:59:00 3 953.253234 1.873268 0.00 \n", + "133918 2024-01-31 23:59:00 4 763.798745 0.873951 0.00 \n", + "133919 2024-01-31 23:59:00 8 5635.419879 2.373900 0.00 \n", + "\n", + " outflow_rate storage_rate precipitation evaporation drainage \\\n", + "0 0.000000 0.010000 0.0 1.679887e-07 0.0 \n", + "1 0.000000 0.010000 0.0 1.845589e-07 0.0 \n", + "2 0.186667 -0.187824 0.0 1.157374e-03 0.0 \n", + "3 0.000000 0.009999 0.0 7.009689e-07 0.0 \n", + "4 0.000000 0.009999 0.0 7.624346e-07 0.0 \n", + "... ... ... ... ... ... \n", + "133915 0.000000 -0.000101 0.0 1.011524e-04 0.0 \n", + "133916 0.000000 -0.000275 0.0 2.747575e-04 0.0 \n", + "133917 0.000000 -0.000126 0.0 1.263410e-04 0.0 \n", + "133918 0.000000 -0.000101 0.0 1.011520e-04 0.0 \n", + "133919 0.000000 -0.000275 0.0 2.747571e-04 0.0 \n", + "\n", + " infiltration balance_error relative_error \n", + "0 0.0 6.045863e-08 0.305011 \n", + "1 0.0 6.611968e-08 0.303833 \n", + "2 0.0 -3.483442e-08 -2.000000 \n", + "3 0.0 1.399768e-07 0.181562 \n", + "4 0.0 1.508812e-07 0.180076 \n", + "... ... ... ... \n", + "133915 0.0 -1.265898e-10 -2.000000 \n", + "133916 0.0 -1.265873e-10 -2.000000 \n", + "133917 0.0 -1.582402e-10 -2.000000 \n", + "133918 0.0 -1.265904e-10 -2.000000 \n", + "133919 0.0 -1.265705e-10 -2.000000 \n", + "\n", + "[133920 rows x 13 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAHhCAYAAADOLdwlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCnUlEQVR4nO3dd3zU9eHH8fc3lw0ZhBESCRD2iAwJdRQVFCkUFUQrCio4+pOKKFLrbqUOUm21oFQUf4pURak/QbHioLKkCLIiCMhMSGRFVsLMuPv+/gg5s8m4+37vcq/n43EP7773He+7CHnz+S7DNE1TAAAAFgmyOwAAAAgslA8AAGApygcAALAU5QMAAFiK8gEAACxF+QAAAJaifAAAAEtRPgAAgKWC7Q5Qnsvl0r59+xQVFSXDMOyOAwAAasA0TR0/flyJiYkKCqp+bMPnyse+ffuUlJRkdwwAAFAH2dnZatWqVbXz+Fz5iIqKklQcPjo62uY0AACgJvLy8pSUlOT+PV4dnysfJbtaoqOjKR8AAPiZmhwywQGnAADAUpQPAABgKZ/b7QIAgK9zOp0qLCy0O4blQkJC5HA46r0eygcAADVkmqYOHDigY8eO2R3FNrGxsWrZsmW9LodB+QAAoIZKikeLFi0UGRkZUNejMk1Tp06dUk5OjiQpISGhzuuifAAAUANOp9NdPJo2bWp3HFtERERIknJyctSiRYs674LhgFMAAGqg5BiPyMhIm5PYq+Tz1+eYF8oHAAC1EEi7Wirjic9P+QAAAJaqdflYvny5rrnmGiUmJsowDH300Udl3jdNU5MnT1ZiYqIiIiLUv39/bd682VN5AQCAn6t1+Th58qR69uyp6dOnV/r+888/rxdffFHTp0/XmjVr1LJlS1111VU6fvx4vcMCABBIJk+erF69enlkXZmZmTIMQ+np6VXOs3TpUhmG4fVTiWt9tsuQIUM0ZMiQSt8zTVNTp07V448/rhEjRkiSZs+erfj4eM2ZM0d33313/dICAIA6SUpK0v79+9WsWTO7o3j2mI+MjAwdOHBAgwYNck8LCwvT5ZdfrpUrV1a6TH5+vvLy8so8JGnL4S2ejAYAQEBzOBxq2bKlgoPtv8qGR8vHgQMHJEnx8fFlpsfHx7vfKy8tLU0xMTHuR1JSkiTp7+v+LtM0PRkPAACv6d+/v+677z499NBDiouLU8uWLTV58mT3+1lZWRo2bJgaN26s6Oho3XjjjTp48GCZdfzlL39RfHy8oqKidOedd+rMmTMVtjNr1ix17dpV4eHh6tKli1555ZUa5atst8vChQvVqVMnRUREaMCAAcrMzKzLR681r5ztUv40HNM0qzw159FHH1Vubq77kZ2dLUnadGiTFmYs9EY8AAC8Yvbs2WrUqJFWr16t559/Xk899ZQWLVok0zQ1fPhwHTlyRMuWLdOiRYu0a9cujRw50r3sv/71Lz355JN69tlntXbtWiUkJFQoFq+//roef/xxPfvss9q6daumTJmiP/7xj5o9e3ats2ZnZ2vEiBH69a9/rfT0dN1111165JFH6v0d1IRHx15atmwpqXgEpPRlV3NyciqMhpQICwtTWFhYpe+9uO5FDUgaoMiQwL6gCwDAP/To0UNPPvmkJKljx46aPn26vvrqK0nSxo0blZGR4R7hf/vtt9W9e3etWbNGffv21dSpU3XHHXforrvukiQ988wz+s9//lNm9OPpp5/WCy+84D6uMjk5WVu2bNFrr72mMWPG1CrrjBkz1K5dO/3973+XYRjq3LmzNm3apOeee67e38O5eHTkIzk5WS1bttSiRYvc0woKCrRs2TJdcskltVpXYqNE5ZzK0Zvfv+nJiAAAeE2PHj3KvE5ISFBOTo62bt2qpKQkd/GQpG7duik2NlZbt26VJG3dulUXX3xxmeVLv/7pp5+UnZ2tO++8U40bN3Y/nnnmGe3atavWWbdu3aqLLrqozJ6J8tv3llqPfJw4cUI7d+50v87IyFB6erri4uLUunVrTZw4UVOmTFHHjh3VsWNHTZkyRZGRkRo1alSttnNv73v1x3V/1Fub39KIjiOU2DixtlEBALBUSEhImdeGYcjlclV5+EF1hyWU53K5JBXvernwwgvLvFeXe6zYeVxlrUc+1q5dq969e6t3796SpEmTJql3797605/+JEl66KGHNHHiRN1zzz1KTU3V3r179eWXXyoqKqpW2xmQNECp8anKd+brxXUv1jYmAAA+o1u3bsrKynIf1yhJW7ZsUW5urrp27SpJ6tq1q1atWlVmudKv4+Pjdd5552n37t3q0KFDmUdycnKdMlW3PW+qdfno37+/TNOs8HjrrbckFbe8yZMna//+/Tpz5oyWLVumlJSUWgczDEMP/+JhBRlB+iLzC607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uugie8KigrS0NPXt21dRUVFq0aKFhg8frm3btrnfLyws1MMPP6zzzz9fjRo1UmJiom677Tbt27fPxtQoca6fnyQdPHhQY8eOVWJioiIjIzV48GDt2LHDpsSeR/lAncydO1cTJ07U448/rg0bNujSSy/VkCFDlJWVJUl64IEH9Pnnn+udd97R1q1b9cADD2jChAn6+OOPbU4OSTp58qR69uyp6dOnVznP4MGDtX//fvdj4cKFFiZEdZYtW6bx48dr1apVWrRokYqKijRo0CCdPHlSknTq1CmtX79ef/zjH7V+/XrNmzdP27dv17XXXmtzckjn/vmZpqnhw4dr9+7d+vjjj7Vhwwa1adNGAwcOdM/j90ygDn7xi1+Y48aNKzOtS5cu5iOPPGKapml2797dfOqpp8q8f8EFF5hPPPGEZRlRM5LM+fPnl5k2ZswYc9iwYbbkQe3l5OSYksxly5ZVOc+3335rSjL37NljYTLURPmf37Zt20xJ5vfff++ep6ioyIyLizNff/11u2J6FCMfqLWCggKtW7dOgwYNKjN90KBBWrlypSSpX79+WrBggfbu3SvTNLVkyRJt375dv/rVr+yIjDpYunSpWrRooU6dOum3v/2tcnJy7I6EKuTm5kpStZe1zs3NlWEYio2NtSgVaqr8zy8/P1+SFB4e7p7H4XAoNDRUK1assD6gF1A+UGuHDh2S0+lUfHx8menx8fE6cOCAJOmll15St27d1KpVK4WGhmrw4MF65ZVX1K9fPzsio5aGDBmid999V4sXL9YLL7ygNWvW6IorrnD/pQjfYZqmJk2apH79+iklJaXSec6cOaNHHnlEo0aN4uKNPqayn1+XLl3Upk0bPfroozp69KgKCgr0l7/8RQcOHND+/fttTuwZPndvF/gPwzDKvDZN0z3tpZde0qpVq7RgwQK1adNGy5cv1z333KOEhAQNHDjQjriohZEjR7qfp6SkKDU1VW3atNGnn36qESNG2JgM5d17773auHFjlf8iLiws1E033SSXy6VXXnnF4nQ4l8p+fiEhIfrwww915513Ki4uTg6HQwMHDtSQIUNsTOpZlA/UWrNmzeRwONyjHCVycnIUHx+v06dP67HHHtP8+fM1dOhQSVKPHj2Unp6uv/3tb5QPP5SQkKA2bdo0qKPtG4IJEyZowYIFWr58uVq1alXh/cLCQt14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FB4eXmY9L730kr777julp6crPT1dCxculCTNnTtXzz77rDc+GgAAqCev7HYZP3685syZo48//lhRUVHuEY6YmBhFRETIMAxNnDhRU6ZMUceOHdWxY0dNmTJFkZGRGjVqlKTiEY9Bgwbp1KlTeuedd5SXl6e8vDxJUvPmzeVwONS6desy223cuLEkqX379mVGWgAAgO/wSvmYMWOGJKl///5lps+aNUtjx46VVHxdjtOnT+uee+7R0aNHdeGFF+rLL79UVFSUJGndunVavXq1JLl3p5TIyMhQ27ZtvREdAAB4GTeWAwAAluLeLgAAwFKUDwAAYCnKBwAAsBTlAwAAWIryAQAALEX5AAAAlqJ8AAAAS1E+AHjE0qVLZRiGjh07ZncUAD6Oi4wBqJP+/furV69emjp1qqTi+zMdOXJE8fHxld6dGgBKeOXy6gACT2hoqPuO1QBQHXa7AKi1sWPHatmyZZo2bZoMw5BhGHrrrbfK7HZ56623FBsbq3//+9/q3LmzIiMjdcMNN+jkyZOaPXu22rZtqyZNmmjChAlyOp3udRcUFOihhx7Seeedp0aNGunCCy/U0qVL7fmgALyCkQ8AtTZt2jRt375dKSkpeuqppyRJmzdvrjDfqVOn9NJLL+n999/X8ePHNWLECI0YMUKxsbFauHChdu/ereuvv179+vXTyJEjJUm33367MjMz9f777ysxMVHz58/X4MGDtWnTJnXs2NHSzwnAOygfAGotJiZGoaGhioyMdO9q+eGHHyrMV1hYqBkzZqh9+/aSpBtuuEFvv/22Dh48qMaNG6tbt24aMGCAlixZopEjR2rXrl1677339OOPPyoxMVGS9OCDD+rzzz/XrFmzNGXKFOs+JACvoXwA8JrIyEh38ZCk+Ph4tW3bVo0bNy4zLScnR5K0fv16maapTp06lVlPfn6+mjZtak1oAF5H+QDgNSEhIWVeG4ZR6TSXyyVJcrlccjgcWrdunRwOR5n5ShcWAP6N8gGgTkJDQ8scKOoJvXv3ltPpVE5Oji699FKPrhuA7+BsFwB10rZtW61evVqZmZk6dOiQe/SiPjp16qTRo0frtttu07x585SRkaE1a9boueee08KFCz2QGoAvoHwAqJMHH3xQDodD3bp1U/PmzZWVleWR9c6aNUu33Xabfv/736tz58669tprtXr1aiUlJXlk/QDsxxVOAQCApRj5AAAAlqJ8AAAAS1E+AACApSgfAADAUpQPAABgKcoHAACwFOUDAABYivIBAAAsRfkAAACWonwAAABLUT4AAIClKB8AAMBS/w+gqeq/DEDLBgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#first, load in the simple model of case 1. Copy it.\n", + "case2_example1 = case1(\"case2_example2\")\n", + "case2_base_model = case2_example1.create_model(copy = True)\n", + "\n", + "case2_example2 = case2(\"case2_example2\", model = case2_base_model)\n", + "case2_example2.create_model()" + ] + }, + { + "cell_type": "markdown", + "id": "8239f609-2cc3-473c-8608-65837df994e0", + "metadata": {}, + "source": [ + "### Example 3: boundary and basins below target, third basin above, pump rate of third peilgebied set to 0. \n", + "Quite similair to case 2 example 2, exvept that the pump rate of first pump set to a low rate, so a rising water level is expected in the other basins. The third basins should fill up the others." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "4b4404cb-233a-485d-a9b0-ec1d841f3a7a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0030.0000001.0000001.000000e-020.0000000.0100000.01.679887e-070.00.06.045863e-083.050107e-01
12024-01-01 00:00:0040.0000000.0000001.000000e-020.0000000.0100000.01.845589e-070.00.06.611968e-083.038326e-01
22024-01-01 00:00:008100000.00000010.0000000.000000e+000.020000-0.0211570.01.157403e-030.00.0-3.912639e-09-2.000000e+00
32024-01-01 00:01:0030.5999861.0219051.000000e-020.0000000.0099990.07.009689e-070.00.01.399768e-071.815624e-01
42024-01-01 00:01:0040.5999850.0244901.000000e-020.0000000.0099990.07.624346e-070.00.01.508812e-071.800760e-01
..........................................
2591952024-02-29 23:58:00431693.7004405.6297141.743486e-070.000000-0.0006510.06.515870e-040.00.0-1.002416e-13-5.749492e-07
2591962024-02-29 23:58:00831696.4171055.6299550.000000e+000.000002-0.0006540.06.516149e-040.00.0-8.542787e-14-2.000000e+00
2591972024-02-29 23:59:00326785.5142965.6290822.257008e-060.000000-0.0006670.06.697163e-040.00.0-2.457064e-14-1.088638e-08
2591982024-02-29 23:59:00431693.6613555.6297101.743285e-070.000000-0.0006510.06.515866e-040.00.0-1.875781e-13-1.076003e-06
2591992024-02-29 23:59:00831696.3778625.6299510.000000e+000.000002-0.0006540.06.516145e-040.00.0-1.678335e-13-2.000000e+00
\n", + "

259200 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " time node_id storage level inflow_rate \\\n", + "0 2024-01-01 00:00:00 3 0.000000 1.000000 1.000000e-02 \n", + "1 2024-01-01 00:00:00 4 0.000000 0.000000 1.000000e-02 \n", + "2 2024-01-01 00:00:00 8 100000.000000 10.000000 0.000000e+00 \n", + "3 2024-01-01 00:01:00 3 0.599986 1.021905 1.000000e-02 \n", + "4 2024-01-01 00:01:00 4 0.599985 0.024490 1.000000e-02 \n", + "... ... ... ... ... ... \n", + "259195 2024-02-29 23:58:00 4 31693.700440 5.629714 1.743486e-07 \n", + "259196 2024-02-29 23:58:00 8 31696.417105 5.629955 0.000000e+00 \n", + "259197 2024-02-29 23:59:00 3 26785.514296 5.629082 2.257008e-06 \n", + "259198 2024-02-29 23:59:00 4 31693.661355 5.629710 1.743285e-07 \n", + "259199 2024-02-29 23:59:00 8 31696.377862 5.629951 0.000000e+00 \n", + "\n", + " outflow_rate storage_rate precipitation evaporation drainage \\\n", + "0 0.000000 0.010000 0.0 1.679887e-07 0.0 \n", + "1 0.000000 0.010000 0.0 1.845589e-07 0.0 \n", + "2 0.020000 -0.021157 0.0 1.157403e-03 0.0 \n", + "3 0.000000 0.009999 0.0 7.009689e-07 0.0 \n", + "4 0.000000 0.009999 0.0 7.624346e-07 0.0 \n", + "... ... ... ... ... ... \n", + "259195 0.000000 -0.000651 0.0 6.515870e-04 0.0 \n", + "259196 0.000002 -0.000654 0.0 6.516149e-04 0.0 \n", + "259197 0.000000 -0.000667 0.0 6.697163e-04 0.0 \n", + "259198 0.000000 -0.000651 0.0 6.515866e-04 0.0 \n", + "259199 0.000002 -0.000654 0.0 6.516145e-04 0.0 \n", + "\n", + " infiltration balance_error relative_error \n", + "0 0.0 6.045863e-08 3.050107e-01 \n", + "1 0.0 6.611968e-08 3.038326e-01 \n", + "2 0.0 -3.912639e-09 -2.000000e+00 \n", + "3 0.0 1.399768e-07 1.815624e-01 \n", + "4 0.0 1.508812e-07 1.800760e-01 \n", + "... ... ... ... \n", + "259195 0.0 -1.002416e-13 -5.749492e-07 \n", + "259196 0.0 -8.542787e-14 -2.000000e+00 \n", + "259197 0.0 -2.457064e-14 -1.088638e-08 \n", + "259198 0.0 -1.875781e-13 -1.076003e-06 \n", + "259199 0.0 -1.678335e-13 -2.000000e+00 \n", + "\n", + "[259200 rows x 13 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqgAAAFCCAYAAAA9jy8lAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAACIaklEQVR4nO3dd1wT9/8H8NcR9paNMhUE3AO14gA3Wq17W8X1tXZIW7XWX2sdrau2VlurbW0L1oV71D3B2YoKioIoCoIC4mAjK7nfHzQngQABktwlvJ+PBw8ludy9c37MvfO+z2BYlmVBCCGEEEKIQOjwHQAhhBBCCCHlUYJKCCGEEEIEhRJUQgghhBAiKJSgEkIIIYQQQaEElRBCCCGECAolqIQQQgghRFAoQSWEEEIIIYKiy3cAhBBCCOGXWCxGSUkJ32EQLaenpweRSKTQtpSgEkIIIQ0Uy7JIT09HVlYW36GQBsLS0hIODg5gGKba7ShBJYQQQhooaXJqZ2cHY2PjGpMGQuqKZVkUFBQgIyMDAODo6Fjt9pSgEkIIIQ2QWCzmklNra2u+wyENgJGREQAgIyMDdnZ21d7up0FShBBCSAMk7XNqbGzMcySkIZG2t5r6PFOCSgghhDRgdFufqJOi7Y0SVEIIIYQQIiiUoBJCCCGEEEGhBJUQQgghWiMgIAAff/wx32FUKykpCQzDIDo6mu9QBIsSVEIIIYRojKCgIDAMU+knISGB79CIEtE0U4QQQgjRKIGBgQgJCZF5zNbWlqdoiCpQBZUQQgghMl6XiNX2UxcGBgZwcHCQ+alqTs3MzExMnjwZjRo1grGxMQYOHIgHDx4AKJs83tbWFvv27eO2b9euHezs7Ljfr169Cj09PeTl5VUZT0hICHx8fGBoaAhvb29s3LhR5vlr166hffv2MDQ0hK+vL6Kioirt4/Dhw/D09ISRkRF69eqFLVu2gGEYmVW+rly5gp49e8LIyAjOzs6YM2cO8vPzFTpnmoYqqIQQQgiREbDxktqO9W+wv0r3HxQUhAcPHuDw4cMwNzfHggULMGjQIMTGxkJPTw89e/ZEeHg4Ro4ciczMTMTGxsLExASxsbFo0aIFwsPD0bFjR5iamsrd/+bNm7F48WJs2LAB7du3R1RUFGbOnAkTExNMmTIF+fn5GDx4MHr37o1t27YhMTERwcHBMvtISkrCqFGjEBwcjBkzZiAqKgrz5s2T2SYmJgYDBgzA119/jT/++APPnz/Hhx9+iA8//LBSNVkbUIJKCCGEEI1y5MgRmYRx4MCB2LNnT6XtpInp5cuX4efnBwDYvn07nJ2dcfDgQYwePRoBAQH47bffAAAXLlxA27Zt4eLigvDwcC5BDQgIqDKWr7/+Gt9//z1GjBgBAHB3d0dsbCx+/fVXTJkyBdu3b4dYLMaff/4JY2NjtGzZEk+ePMHs2bO5ffzyyy/w8vLCmjVrAABeXl64c+cOli9fzm2zZs0aTJgwgRsA5unpiR9//BH+/v7YtGkTDA0N63YyBYoSVEIIIYTICH+/O98hVKtXr17YtGkT97uJiYnc7eLi4qCrq4suXbpwj1lbW8PLywtxcXEAykb9BwcH48WLF4iIiEBAQABcXFwQERGB//3vf7hy5UqVswI8f/4cKSkpmD59OmbOnMk9XlpaCgsLCy6Gtm3byqzY1bVrV5n9xMfHo1OnTjKPde7cWeb3GzduICEhAdu3b+ceY1kWEokEiYmJ8PHxkRujpqIElRBCCCEyjPSqXiNdCExMTODh4VHjdizLVvm4dEWjVq1awdraGhEREYiIiMCyZcvg7OyM5cuXIzIyEq9fv0b37vITdolEAqDsNn/5JBgA1ye2qhiqiqeq2CUSCWbNmoU5c+ZUer2Li0uNx9A0lKASQgghRCu1aNECpaWl+Pfff7lb/C9fvsT9+/e5iiPDMOjZsycOHTqEO3fuoEePHjAzM0NJSQl++eUXdOjQAWZmZnL3b29vjyZNmuDRo0eYOHFilTFs3boVr1+/hpGREQDgn3/+kdnG29sbx44dk3ns+vXrMr936NABd+/eVSgx1wY0ip8QQgghWsnT0xNDhw7FzJkzcenSJdy6dQuTJk1CkyZNMHToUG67gIAA7NixA23atIG5uTmXtG7fvr3a/qcAsGTJEqxcuRLr16/H/fv3ERMTg5CQEKxduxYAMGHCBOjo6GD69OmIjY3FsWPH8N1338nsY9asWbh37x4WLFiA+/fvY/fu3QgNDQXwZu36BQsW4OrVq/jggw8QHR3N9a/96KOPlHfCBIQSVEIIIYRorZCQEHTs2BGDBw9G165dwbIsjh07Bj09PW6bXr16QSwWyySj/v7+EIvF8PevfpaBGTNm4Pfff0doaChat24Nf39/hIaGwt3dHQBgamqKv//+G7GxsWjfvj2++OILrF69WmYf7u7u2Lt3L/bv3482bdpg06ZN+OKLLwCUTakFAG3atEFERAQePHiAHj16oH379li0aBEcHR2VcZoEh2EV6RxBCCGEEK1SWFiIxMREuLu7a90IcG2wfPly/PLLL0hJSeE7FKVStN1RH1RCCCGEEJ5t3LgRnTp1grW1NS5fvow1a9bgww8/5Dss3lCCSgghhBDCswcPHuCbb77Bq1ev4OLigrlz52LhwoV8h8UbusVPCCGENEB0i5/wQdF2R4OkCCGEEEKIoFCCSgghhBBCBIUSVEIIIYQQIiiUoBJCCCGEEEGhBJUQQgghhAgKJaiEEEIIISoWHh4OhmGQlZWl1P0uWbIE7dq1U+o+hYASVEIIIYRolPT0dHz00Udo2rQpDAwM4OzsjCFDhuDs2bNKPU5AQAA+/vhjpe6TKIYm6ieEEEKIxkhKSkK3bt1gaWmJb7/9Fm3atEFJSQlOnjyJDz74APfu3VNrPCzLQiwWQ1eXUiplogoqIYQQQjTG+++/D4ZhcO3aNYwaNQrNmzdHy5Yt8emnn+Kff/7htktOTsbQoUNhamoKc3NzjBkzBs+ePeOel94a37p1K9zc3GBhYYFx48YhNzcXABAUFISIiAisX78eDMOAYRgkJSVxt+pPnjwJX19fGBgY4OLFiygqKsKcOXNgZ2cHQ0NDdO/eHZGRkbV6b9nZ2fjf//4HOzs7mJubo3fv3rh165bMNqtWrYK9vT3MzMwwffp0FBYWyjxfWlqKOXPmwNLSEtbW1liwYAGmTJmCYcOGcduwLItvv/0WTZs2hZGREdq2bYu9e/fWKlZVowSVEEIIITKKi4vV9lMbr169wokTJ/DBBx/AxMSk0vOWlpYAyhKwYcOG4dWrV4iIiMDp06fx8OFDjB07Vmb7hw8f4uDBgzhy5AiOHDmCiIgIrFq1CgCwfv16dO3aFTNnzkRaWhrS0tLg7OzMvfazzz7DypUrERcXhzZt2uCzzz7Dvn37sGXLFty8eRMeHh4YMGAAXr16pdB7Y1kWb7/9NtLT03Hs2DHcuHEDHTp0QJ8+fbh97N69G4sXL8by5ctx/fp1ODo6YuPGjTL7Wb16NbZv346QkBBcvnwZOTk5OHjwoMw2X375JUJCQrBp0ybcvXsXn3zyCSZNmoSIiAiFYlUHqkcTQgghRMbKlSvVdqzFixcrvG1CQgJYloW3t3e12505cwa3b99GYmIil1Ru3boVLVu2RGRkJDp16gQAkEgkCA0NhZmZGQDg3XffxdmzZ7F8+XJYWFhAX18fxsbGcHBwqHSMZcuWoV+/fgCA/Px8bNq0CaGhoRg4cCAAYPPmzTh9+jT++OMPzJ8/v8b3dv78ecTExCAjIwMGBgYAgO+++w4HDx7E3r178b///Q/r1q3DtGnTMGPGDADAN998gzNnzshUUX/66ScsXLgQw4cPBwBs2LABx44d457Pz8/H2rVrce7cOXTt2hUA0LRpU1y6dAm//vor/P39a4xVHShBJYQQQohGYFkWAMAwTLXbxcXFwdnZWabi2aJFC1haWiIuLo5LUN3c3LjkFAAcHR2RkZGhUCy+vr7c3x8+fIiSkhJ069aNe0xPTw+dO3dGXFycQvu7ceMG8vLyYG1tLfP469ev8fDhQ+59vffeezLPd+3aFefPnwdQ1kXg2bNn6Ny5M/e8SCRCx44dIZFIAACxsbEoLCzkkmup4uJitG/fXqFY1YESVEIIIYTIWLhwId8hyOXp6QmGYRAXFyfTp7IilmXlJrEVH9fT05N5nmEYLpGrSfkuBlUlzlXFIY9EIoGjoyPCw8MrPSftuqAoeXGUPw4AHD16FE2aNJHZTlq5FQLqg0oIIYQQGfr6+mr7qQ0rKysMGDAAP//8M/Lz8ys9L51jtEWLFkhOTkZKSgr3XGxsLLKzs+Hj41Or8yAWi2vczsPDA/r6+rh06RL3WElJCa5fv67w8Tp06ID09HTo6urCw8ND5sfGxgYA4OPjIzMQDIDM7xYWFrC3t8e1a9e4x8RiMaKiorjfW7RoAQMDAyQnJ1c6TvmKM9+ogkoIIYQQjbFx40b4+fmhc+fOWLZsGdq0aYPS0lKcPn0amzZtQlxcHPr27Ys2bdpg4sSJWLduHUpLS/H+++/D399f5tZ8Tdzc3PDvv/8iKSkJpqamsLKykrudiYkJZs+ejfnz58PKygouLi749ttvUVBQgOnTpyt0rL59+6Jr164YNmwYVq9eDS8vL6SmpuLYsWMYNmwYfH19ERwcjClTpsDX1xfdu3fH9u3bcffuXTRt2pTbz0cffYSVK1fCw8MD3t7e+Omnn5CZmclVVc3MzDBv3jx88sknkEgk6N69O3JycnDlyhWYmppiypQpCp8fVaIElRBCCCEaw93dHTdv3sTy5csxd+5cpKWlwdbWFh07dsSmTZsAlN3iPnjwID766CP07NkTOjo6CAwMxE8//VSrY82bNw9TpkxBixYt8Pr1ayQmJla57apVqyCRSPDuu+8iNzcXvr6+OHnyJBo1aqTQsRiGwbFjx/DFF19g2rRpeP78ORwcHNCzZ0/Y29sDAMaOHYuHDx9iwYIFKCwsxMiRIzF79mycPHmS28+CBQuQnp6OyZMnQyQS4X//+x8GDBgAkUjEbfP111/Dzs4OK1euxKNHj2BpaYkOHTrg//7v/2p1flSJYct3TCCEEEJIg1BYWIjExES4u7vD0NCQ73CIikgkEvj4+GDMmDH4+uuv+Q5H4XZHFVRCCCGEEC3x+PFjnDp1Cv7+/igqKsKGDRuQmJiICRMm8B1ardAgKUIIIYQQLaGjo4PQ0FB06tQJ3bp1Q0xMDM6cOVOrwWFCQBVUQgghhBAt4ezsjMuXL/MdRr1RBZUQQgghhAgKJaiEEEIIIURQKEElhBBCCCGCQgkqIYQQQggRFEpQCSGEEEKIoFCCSgghhBBCBIUSVEIIIYRoDekyp9ogNDQUlpaWfIfBC0pQCSGEEKIxgoKCMGzYsCqfT0tLw8CBAxXalzYls9qGJuonhBBCiNZwcHDgOwSiBFRBJYQQQojWKF8VLS4uxocffghHR0cYGhrCzc0NK1euBAC4ubkBAIYPHw6GYbjfAeDvv/9Gx44dYWhoiKZNm2Lp0qUoLS2VOcbvv/+O4cOHw9jYGJ6enjh8+HC1cRUXF+Ozzz5DkyZNYGJigi5duiA8PFxmm9DQULi4uMDY2BjDhw/Hy5cvK+3nm2++gZ2dHczMzDBjxgx8/vnnaNeuncw2ISEh8PHxgaGhIby9vbFx40bFTp6AUIJKCCGEEBnFxcVV/pRP1GratqSkpMZtVenHH3/E4cOHsXv3bsTHx2Pbtm1cIhoZGQmgLJlLS0vjfj958iQmTZqEOXPmIDY2Fr/++itCQ0OxfPlymX0vXboUY8aMwe3btzFo0CBMnDgRr169qjKWqVOn4vLlywgLC8Pt27cxevRoBAYG4sGDBwCAf//9F9OmTcP777+P6Oho9OrVC998843MPrZv347ly5dj9erVuHHjBlxcXLBp0yaZbTZv3owvvvgCy5cvR1xcHFasWIFFixZhy5Yt9TqX6sawLMvyHQQhhBBC1KuwsBCJiYlwd3eHoaGhzHNLly6t8nWenp6YMGEC9/uKFSsqJaJSrq6uCAoK4n5fs2YNCgoKZLZZvHhxreIOCgpCVlZWlX1HGYbBgQMHMGzYMMyZMwd3797FmTNnwDBMtdtK9ezZEwMHDsTChQu5x7Zt24bPPvsMqamp3Ou+/PJLfP311wCA/Px8mJmZ4dixYwgMDKx0nIcPH8LT0xNPnjxB48aNucf79u2Lzp07Y8WKFZgwYQIyMzNx/Phx7vlx48bhxIkTyMrKAgC89dZb8PX1xYYNG7htunfvjry8PERHRwMAXFxcsHr1aowfP57b5ptvvsGxY8dw5cqVKs6q+lTX7sqjCqqGu3DhAoYMGYLGjRvL7ezNsiyWLFmCxo0bw8jICAEBAbh7967MNkVFRfjoo49gY2MDExMTvPPOO3jy5Ika3wURGmW0q99++w0BAQEwNzcHwzDcByxp2Orbtl69eoWPPvoIXl5eMDY2houLC+bMmYPs7Gw1vxOiCYKCghAdHQ0vLy/MmTMHp06dqvE1N27cwLJly2Bqasr9zJw5E2lpaTLJdZs2bbi/m5iYwMzMDBkZGXL3efPmTbAsi+bNm8vsNyIiAg8fPgQAxMXFoWvXrjKvq/h7fHw8OnfuLPNY+d+fP3+OlJQUTJ8+XeY433zzDXccTUGDpDRcfn4+2rZti6lTp2LkyJGVnv/222+xdu1ahIaGonnz5vjmm2/Qr18/xMfHw8zMDADw8ccf4++//0ZYWBisra0xd+5cDB48GDdu3IBIJFL3WyICoIx2VVBQgMDAQAQGBspUIkjDVt+2lZqaitTUVHz33Xdo0aIFHj9+jPfeew+pqanYu3cvD+9IO1X3f1ZHR7a2NW/evCq3rVi1DA4Orl9gtdShQwckJibi+PHjOHPmDMaMGYO+fftW21YkEgmWLl2KESNGVHqufMVPT09P5jmGYSCRSKrcp0gkkntdNTU1BVD25UwRFc9p+ddJj79582Z06dJFZjuNu56zRGsAYA8cOMD9LpFIWAcHB3bVqlXcY4WFhayFhQX7yy+/sCzLsllZWayenh4bFhbGbfP06VNWR0eHPXHihNpiJ8JVl3ZV3vnz51kAbGZmphqiJZqkvm1Lavfu3ay+vj5bUlKiynC1zuvXr9nY2Fj29evXfIdSK1OmTGGHDh1a5fMV21V5J06cYAGwL1++ZFmWZfX09Ni9e/fKbOPn58dOmzat2hjkHcPCwoINCQmRu318fDwLgL1w4UKV+xw/fjw7cOBAmcfGjRvHWlhYcL936dKF/fDDD2W26d69O9u2bVvu9yZNmrDLli2rNn4+KdruqIKqxRITE5Geno7+/ftzjxkYGMDf3x9XrlzBrFmzcOPGDZSUlMhs07hxY7Rq1QpXrlzBgAED+AidCJgi7YqQuqhr28rOzoa5uTl0demS1lBkZ2dzfS6lrKys4OLiIvPYDz/8AEdHR7Rr1w46OjrYs2cPHBwcuMnv3dzccPbsWXTr1g0GBgZo1KgRvvrqKwwePBjOzs4YPXo0dHR0cPv2bcTExFQatKSo5s2bY+LEiZg8eTK+//57tG/fHi9evMC5c+fQunVrDBo0CHPmzIGfnx++/fZbDBs2DKdOncKJEydk9vPRRx9h5syZ8PX1hZ+fH3bt2oXbt2+jadOm3DZLlizBnDlzYG5ujoEDB6KoqAjXr19HZmYmPv300zrFzwfqg6rF0tPTAQD29vYyj9vb23PPpaenQ19fH40aNapyG0LKU6RdEVIXdWlbL1++xNdff01fjBqY8PBwtG/fXubnq6++qrSdqakpVq9eDV9fX3Tq1AlJSUk4duwY103h+++/x+nTp+Hs7Iz27dsDAAYMGIAjR47g9OnT6NSpE9566y2sXbsWrq6u9Yo5JCQEkydPxty5c+Hl5YV33nkH//77L5ydnQGUDYD6/fff8dNPP6Fdu3Y4deoUvvzyS5l9TJw4EQsXLsS8efO47gtBQUEyXQ9mzJiB33//HaGhoWjdujX8/f0RGhoKd3f3esWvbvR1swGQ119F3mjG2m5DGra6tCtCFKFo28rJycHbb7+NFi1a1HokONFcoaGhCA0NrfJ5tlyfzJkzZ2LmzJlVbjtkyBAMGTKk0uMDBgyo9g4iK6e/aE0DQfX09LB06dJqZ0iYNm0apk2bJvPY3LlzZX5ftGgRFi1axP3er18/eHh4yGwzYcIEmZkWNBFVULWYdDWNipWHjIwMrkLh4OCA4uJiZGZmVrkNIeUp0q4IqYvatK3c3FwEBgbC1NQUBw4cqDRghRBtVFBQgLVr1+Lu3bu4d+8eFi9ejDNnzmDKlCl8h6Z0lKBqEJZlER4ervBIP3d3dzg4OOD06dPcY8XFxYiIiICfnx8AoGPHjtDT05PZJi0tDXfu3OG2IdpNFe2KkNq2K0DxtpWTk4P+/ftDX18fhw8frnYuRUK0CcMwOHbsGHr06IGOHTvi77//xr59+9C3b1++Q1M6usWvQU6cOIFBgwbh+PHj3ETAeXl5SEhI4LZJTExEdHQ011n8448/xooVK+Dp6QlPT0+sWLECxsbGXOnfwsIC06dPx9y5c2FtbQ0rKyvMmzcPrVu31soGTypTRbsCyqpg6enp3H5iYmJgZmYGFxcXWFlZqfdNErWT166A+ret3Nxc9O/fHwUFBdi2bRtycnKQk5MDALC1tdW8qXQIqQUjIyOcOXOG7zDUQ4UzCRAlmzZtGguAnT59OveYdAqfij9TpkxhWbZs2pbFixezDg4OrIGBAduzZ082JiZGZr+vX79mP/zwQ9bKyoo1MjJiBw8ezCYnJ6vzrREeqapdLV68WO4+qpqGhWgXee2KZevftqp6PQA2MTFRje9Q82nqNFNEsyna7mipUwGTSCTYtGkT1/H622+/RU5ODiwsLDB//nwAgKWlJWbPnl1p4mRCqkLtiqgCtSvNo+iSk4Qok6LtjhJUAcvNzYWbmxtevXoFhmGgo6MDsVgMkUgEiUQClmVhZWWFpKQkbvUeQmpC7YqoArUrzUMJKuGDou2OvsYKmJmZGaKiotC5c2ewLAuxWAwA3J9+fn6Ijo6mD3tSK9J21bVrV2pXRGmk7crPz4/aFSGk3ihBFTgzMzOMGjWq0hQqhoaGCA8P5yb4JaQ2mjRpgvfff79Su9LX18fZs2epXZE6cXFxwZo1ayq1K2NjY/q8IoTUCiWoApaZmYnQ0FDExcWhpKRE5rnXr19jy5YtPEVGNJlYLMaePXtw7ty5Su2qqKgIq1ev5qpehNRGZGQkfv/990rtKj8/H9euXeMpKkKIJqIEVaCkyWlOTg5SUlIAAN7e3pgzZw66du0KoGw1jcjISD7DJBpGmpzGx8dzU/1I21WfPn0AAKdPn8aePXsoSSW1EhkZiWPHjuH+/fsA3rQr6So9hw8f5jM8QmolNDQUlpaWfIfRoFGCKlBnzpxBTk4ObGxs8Nlnn2HLli0YO3YsrKyscO7cOXz++efw8vLCqVOnkJuby3e4REPcuXMH8fHx0NXVxYcffijTro4ePYq1a9fCx8cH8fHxuHPnDt/hEg2Rm5uLU6dOAQBGjRqF0NBQrl3t2bMH27dvxzvvvMNzlESbBAUFgWEY7sfa2hqBgYG4ffu2UvY/duxY7ssW4QdN1C9QQ4YMga6uLvr27QszMzMUFxdj5cqVAAAdHR2sWLEC58+fh5ubGw06IApr06YNXr58CVdXVzRr1kymXTEMg08++QQPHz7E48eP0aZNG56jJZrCzMwM48ePR1JSEnr16oWSkhKZdqXpa4KT6onFwMWLQFoa4OgI9OgBqGO9hMDAQISEhAAoWxjkyy+/xODBg5GcnFzvfRsZGcHIyKje+yF1RxVUASkqKuL+bmhoiOHDh1eZfDIMg969e6Np06ZyX0+IlFgs5voESttNs2bNqty+WbNm6N27NxiGAQCUlJTQ7X4iV/nPnKZNm8q0G9Iw7N8PuLkBvXoBEyaU/enmVva4qhkYGMDBwQEODg5o164dFixYgJSUFDx//hwAsGDBAjRv3hzGxsZo2rQpFi1aJNM/+tatW+jVqxfMzMxgbm6Ojh074vr16wAq3+JfsmQJ2rVrh61bt8LNzQ0WFhYYN24c3cFUIUpQBSIzMxMbN27ElStX6vT6Fy9eYMOGDdQnlciQ9jndtWtXpYEriigpKcGuXbuoTyqpJDIyEhs2bMCLFy/4DoXwZP9+YNQo4MkT2cefPi17XB1JqlReXh62b98ODw8PWFtbAyir7IeGhiI2Nhbr16/H5s2b8cMPP3CvmThxIpycnBAZGYkbN27g888/rzQDRXkPHz7EwYMHceTIERw5cgQRERFYtWqVyt9bQ0UJqgCUHxAVFRVVp0QiNjYWeXl5OHbsGCWpBIDsgKikpCQ8e/as1vt49uwZkpKSEB8fT0kq4UgHROXl5SE2NpbvcAgPxGIgOBiQt9SP9LGPPy7bTlWOHDkCU1NTmJqawszMDIcPH8auXbu4lcq+/PJL+Pn5wc3NDUOGDMHcuXOxe/du7vXJycno27cvvL294enpidGjR6Nt27ZVHk8ikSA0NBStWrVCjx498O677+Ls2bOqe4MNHCWoPCufnNrY2GDy5MnVfoOrSo8ePeDn5wcAlKQSmeRUJBJh/PjxcHJyqvV+nJycMH78eIhEIkpSCYA3ySlQNvl+jx49eI6I8OHixcqV0/JYFkhJKdtOVXr16oXo6GhER0fj33//Rf/+/TFw4EA8fvwYALB37150794dDg4OMDU1xaJFi2T6p3766aeYMWMG+vbti1WrVuHhw4fVHq/imA9HR0dkZGSo5s0RSlD5JC85reuAJ4Zh0LdvX0pSidzktLo+pzVp1qwZJakEQOXktG/fvtTntIFKS1PudnVhYmICDw8PeHh4oHPnzvjjjz+Qn5+PzZs3459//sG4ceMwcOBAHDlyBFFRUfjiiy9QXFzMvX7JkiW4e/cu3n77bZw7dw4tWrTAgQMHqjxexeIRwzCQSCQqe38NHSWoPFFmcipFSSpRdnIqRUkqoeSUlOfoqNztlIFhGOjo6OD169e4fPkyXF1d8cUXX8DX1xeenp5cZbW85s2b45NPPsGpU6cwYsQIblYAwj9KUHny8OFDpSanUhWT1Fu3btE3vAbk1atXSEpKUmpyKlU+SU1KSsKrV6+Utm8ibBKJBLdu3QJAySkp06MH4OQEVNUMGAZwdi7bTlWKioqQnp6O9PR0xMXF4aOPPkJeXh6GDBkCDw8PJCcnIywsDA8fPsSPP/4oUx19/fo1PvzwQ4SHh+Px48e4fPkyIiMj4ePjo7qASa3QPKg88fX1hY6ODjw9PZU+j6k0SbWwsECbNm24DuNE+9na2uLdd99FYWGhUpNTKWmSamhoCFtbW6XvnwiTjo4OJk2ahNu3b6NTp06UnBKIRMD69WWj9RlGdrCUtHmsW6fa+VBPnDgBx/9KtGZmZvD29saePXsQEBAAAPjkk0/w4YcfoqioCG+//TYWLVqEJUuW/Be/CC9fvsTkyZPx7Nkz2NjYYMSIEVi6dKnqAia1wrCsvDF4RBWysrJgaGgIQ0PDWr+2/ITqCxcuhL6+fq338ezZM9jb29f6dUTYxGIxXr16VaeEURnt6vnz57CysoJIHTNzE7Wq62eGMtoVUb3CwkIkJibC3d29TtcloGwqqeBg2QFTzs5lyemIEcqJk2gXRdsdldbUJDMzEyEhIdi+fTsKCwvVfvyrV6/il19+oT6pWkba5/SPP/5Aamqq2o+fmpqKP/74g/qkaqHIyEj88ssvuHr1Kt+hEAEbMQJISgLOnwd27Cj7MzGRklNSf3SLXw3KD4jS19dHaWmp2mOQrnYhHeTQqVMntcdAlKvigKjXr1+rPYbXr1+jtLSUGzg1evRoqqRqgfIDovLy8niOhgidSAT8d1edEKWhCqqKyRutb2pqqvY4+vXrh65duwKg0f3aQFWj9WuLRvdrH3mj9QkhRN0oQVUhVUwlVVcMw1CSqiWEkpxKUZKqPWgqKUKIUFCCqiJCSk6lKEnVfEJLTqUoSdV8lJwSQoSEElQVKS0thVgsFkxyKlUxSS2/qgYRPolEgpKSEkElp1Llk9SSkhKaf1fDFBUVAaDklBAiDDRISkVsbW0RFBQEAwMDwSSnUtIktXnz5nBzc+M7HFILenp6GDduHJ49ewYnJye+w6mkWbNmCAoKgr29faVlAYmwde/eHU5OTnB1daXklBDCO6qgKlFmZiaSkpK4321sbASXnEoxDCOTnBYVFSE2Npa/gEiVxGIxbt++DemUxXp6eoJMTqWcnJy45JRlWdy+fZtu9wtUbGwsVzkFADc3N0pOCSGCQAmqkkj7nG7fvl3uer9CVlJSgm3btmHPnj3UJ1VgpH1ODxw4gPDwcL7DqbXw8HAcOHCA+qQKUGRkJPbs2YNt27ahpKSE73AIIUQGJahKUH5AlKWlJaysrPgOqVZ0dXXh7OwMgAZOCUn5AVG6urpwcXHhO6Rac3FxoYFTAlR+QJSLiwt0dam3F9FODMPg4MGDfIfRoLi5uWHdunX13g8lqPUkxNH6tUWj+4WnYnI6btw4QQ2IUhSN7hceGq1PtEFQUBAYhgHDMNDT04O9vT369euHP//8U2aAZlpaGgYOHMhbnKGhobC0tKzTa1mWxW+//YYuXbrA1NQUlpaW8PX1xbp161BQUCCIGFWJEtR60IbkVIqSVOHQluRUipJU4aDklKgKy7IIDw/n+sqrQ2BgINLS0pCUlITjx4+jV69eCA4OxuDBg7kVGx0cHGBgYKD0Y4vFYpXPVPLuu+/i448/xtChQ3H+/HlER0dj0aJFOHToEE6dOqXSY8uj7ll/KEGto5ycHK1JTqXkJalRUVE8R9WwsCyLvXv3ak1yKlUxSd27d69aL2QEiIqKouSUqMyJEyfQq1cvnDx5Um3HNDAwgIODA5o0aYIOHTrg//7v/3Do0CEcP34coaGhAGRv8RcXF+PDDz+Eo6MjDA0N4ebmhpUrV3L7y8rKwv/+9z/Y29vD0NAQrVq1wpEjRwC8qTIeOXIELVq0gIGBAR4/fozi4mJ89tlnaNKkCUxMTNClSxduvEB4eDimTp2K7Oxsrtq7ZMkSLpaqXgcAu3fvxvbt27Fz50783//9Hzp16gQ3NzcMHToU586dQ69evQCUTT24bNkyODk5wcDAAO3atcOJEye4/SQlJYFhGOzfvx+9evWCsbEx2rZti6tXr9YYo5ubG7755hsEBQXBwsICM2fOBADs27cPLVu2hIGBAdzc3PD9998r85+VQwlqHZmYmMDJyUlrklOp8kmqiYkJmjRpwndIDQrDMPD09NSq5FRKmqTq6urC09OTkiM1k14IKTklqrB3716ZP/nSu3dvtG3bFvv376/03I8//ojDhw9j9+7diI+Px7Zt27jZbCQSCQYOHIgrV65g27ZtiI2NxapVqyASibjXFxQUYOXKlfj9999x9+5d2NnZYerUqbh8+TLCwsJw+/ZtjB49GoGBgXjw4AH8/Pywbt06mJubIy0tDWlpaZg3bx4AVPs6ANi+fTu8vLwwdOjQSu+DYRhYWFgAANavX4/vv/8e3333HW7fvo0BAwbgnXfe4fYj9cUXX2DevHmIjo5G8+bNMX78eJSWllYbIwCsWbMGrVq1wo0bN7Bo0SLcuHEDY8aMwbhx4xATE4MlS5Zg0aJF3BcCZaKe8XUkEokwYsQIFBYWwsTEhO9wlKp8kqotibcm6dChAzw9PbXy3Ddr1gxz5szRyvcmdHZ2dpg1axZMTU0pOSX1JpFIsGnTJmRlZQGQTVDd3d0BAJaWlpg9ezZ0dNRbC/P29sbt27crPZ6cnAxPT090794dDMPA1dWVe+7MmTO4du0a4uLi0Lx5cwBA06ZNZV5fUlKCjRs3om3btgCAhw8fYufOnXjy5AkaN24MAJg3bx5OnDiBkJAQrFixAhYWFmAYBg4ODtx+FHndgwcP4OXlVeN7/e6777BgwQKMGzcOALB69WqcP38e69atw88//8xtN2/ePLz99tsAgKVLl6Jly5ZISEiAt7e33BilevfuLZOwTpw4EX369MGiRYsAAM2bN0dsbCzWrFmDoKCgGuOtDUpQayEzMxM3b95E7969wTAMRCKR1iWnUgzDyCQRiYmJePnyJXx9fXmMSjuJxWKcOXMG3bt359qTNidw5d9bfn4+Ll26hL59+8pUKohyXL9+HdbW1lzCoM3tiqhXfn4+vvrqK7x69QoMw3BJaF5eHhYtWgSWZWFlZcXLHUaWZeV+CQsKCkK/fv3g5eWFwMBADB48GP379wcAREdHw8nJiUtO5dHX10ebNm2432/evAmWZSu9pqioCNbW1lXuR5HXVfUeysvJyUFqaiq6desm83i3bt1w69YtmcfKx+3o6AgAyMjIgLe3d7XHqHjNj4uLq1TV7datG9atWwexWKzUz3FKUBVUfkCUSCRCQEAA3yGpzatXr7Bjxw6UlpaCZVl06tSJ75C0RvkBUcnJyZgxY0aDqW6xLIsdO3YgNTUVmZmZGD16NCWpSiQdEKWrq4vZs2dr3PR3RNjMzMwQFRWF8ePH4+rVq9zAR7FYDIZh4Ofnh7CwMF6+FMXFxXFfysrr0KEDEhMTcfz4cZw5cwZjxoxB3759sXfvXhgZGdW4XyMjI5nPZ4lEApFIhBs3blT67DI1Na1yP4q8rnnz5oiLi6sxJgCVrhnyktvyK/tJn1NkkFfFIpy8fatqPAH1QVVAxdH6HTt25DsktWrUqBGXlNLofuUpn5yKRCKuMt9QMAyD3r170+h+FSg/Wr9z585o1KgRzxERbeTi4oLz58/D2NhY5nFjY2OEh4dz82ur07lz5xATE4ORI0fKfd7c3Bxjx47F5s2bsWvXLuzbtw+vXr1CmzZt8OTJE9y/f1/hY7Vv3x5isRgZGRnw8PCQ+ZHeLtfX16/0uabI6yZMmID79+/j0KFDlY7Lsiyys7Nhbm6Oxo0b49KlSzLPX7lyBT4+Pgq/D3kxVqVFixZyj9e8eXOlFxgoQa2BNk0lVVc0BZXyVUxOx48fr1UDohRFU1ApH00lRdTp2rVryM/Pl3ksPz8f165dU/mxi4qKkJ6ejqdPn+LmzZtYsWIFhg4disGDB2Py5MmVtv/hhx8QFhaGe/fu4f79+9izZw8cHBxgaWkJf39/9OzZEyNHjsTp06e5Smv5EfEVNW/eHBMnTsTkyZOxf/9+JCYmIjIyEqtXr+b+D7q5uSEvLw9nz57FixcvUFBQoNDrxowZg7Fjx2L8+PFYuXIlrl+/jsePH+PIkSPo27cvzp8/DwCYP38+Vq9ejV27diE+Ph6ff/45oqOjERwcrPB5lBdjVebOnYuzZ8/i66+/xv3797FlyxZs2LBBpp+qslCCWg1KTt+gJFV5KDmVRUmq8lByStTt77//BgAMGzYMCQkJXP/Ew4cPq/zYJ06cgKOjI9zc3BAYGIjz58/jxx9/xKFDh+RW80xNTbF69Wr4+vqiU6dOSEpKwrFjx7j+s/v27UOnTp0wfvx4tGjRAp999lmNn0UhISGYPHky5s6dCy8vL7zzzjv4999/ueqxn58f3nvvPYwdOxa2trb49ttvFXodwzDYsWMH1q5diwMHDsDf3x9t2rTBkiVLMHToUAwYMAAAMGfOHMydOxdz585F69atceLECRw+fBienp4Kn8eqYpSnQ4cO2L17N8LCwtCqVSt89dVXWLZsmdIHSAEAw9JkhHKVlpZi48aNyMzMFERyWlxczM3XtnDhQujr6/MSB8uyOH36NDeH2sSJE+Hh4cFLLJrq6NGjuH79uiCSU6G0K+DNyFaxWAxfX19uxClRzIMHD7Bjxw4A/CenQmpXpGqFhYVITEyEu7s7DA0N67SPy5cv4/Hjxxg/fjwYhgHLsti5cydcXV0rDd4hBFC83VGCWo24uDiEh4dj0qRJvCWnLMtiy5YtSEtL41ZxkH7YOzo6YsqUKWq/CEmT1KysLIwcOZIGttRSVlYWtm/fjsDAQN6SUyG2K6AsST1x4gQmTpwoyKX3hEwsFmPfvn1o1KgRb8mpUNsVkU8ZCSohtaVou6NR/NXw8fGBl5eX2udwK08ikSArK0tmiTHp37OysrjRgOokvd3Psiyv50ZT8TU3YHlCbFdA2e1+vs+NphKJRBg1ahS3GgwfhNquCCGah64C5Uj7nEonHgbA+4VSJBIhMDBQ7nMDBw7k7cO+/Lx3LMviyJEj1Ce1CtI+p+WnDKF2VbXy5yYuLo76pFYjMjISR48e5aZ50dHR4bVCKeR2RQjRLJSg/keanD5+/BhHjx7lOxwZXl5eMite6OjowN3dvdoJhdXp3r17uHHjBg2ckkOanMbGxuLgwYPVjo5UN6G3q4KCAhw8eBCxsbGUpMohHRB1/fp13Lt3j+9wOEJvV4QQzUAJKiqP1n/nnXf4DkmG9Ja6FMuyCAwMFExfLm9vbxrdL0fF0fpjxoypNF8gn4TeroyNjTFmzBga3S9HxdH6Na0Go05Cb1eEEM3Q4BNUTZlKytbWlvt7hw4dYGdnx2M0smgKqso0ZSopIbcrgKagkkcTppISersihAhfg05QNSU5rahnz558h1AJJalvaEpyWpEQ2xVASWp5mpCcViTUdkUIEbYGnaAeO3ZM45JTAIKdDqRiknrixAlkZmbyHJX6RUVFaVxyCgi3XQGVk9SoqCi+Q1K7zMxMblUbTUlOAWG3K0KIcDXoaaaGDRuGo0ePYuDAgRqTnAqdNEnV0dFB48aNG+Qa4B07dkRGRga8vLw0JjnVBNIkNT4+Hh07duQ7HLVr1KgRRo4cidTUVPTp00cjklNCCKmrBldBLSkp4f5uYmKCMWPGUHKqZAzDoG/fvmjRogX3WPnzro3EYjEkEgmAsvc/aNAgSk5VoFmzZhg0aBCXnEkkEq2/3V/+/06LFi00pnJKiDZjGAYHDx7kOwyFLVmyBO3ateM7jFppUAlqZmYmfv755wZ5e5BP2dnZ2LRpk9b2SZX2Od23bx+XpBLVk0gk2Ldvn1b3SY2MjMSmTZuQnZ3NdyiECEpQUBCGDRvGdxgc6QIZDMNAV1cXLi4u+PTTT1FUVMR3aBqrwSSo0gFR2dnZuHr1KkpLS/kOqcGIiYlBZmamVg6cKj8gKj4+Hs+ePeM7pAbj2bNn3HnXxiRVOiAqMzMTMTExfIdDSJXEEjHCk8KxM2YnwpPCIZZo1/9FRYWEhCAtLQ2JiYnYuHEjtm7dim+++YbvsJRG3XdCG0SCWnG0/rvvvgtd3Qbd/VatunXrppWj++WN1nd0dOQ7rAbD0dFRa0f3lx+t37VrV3Tr1o3niAiRb3/cfritd0OvLb0wYf8E9NrSC27r3bA/bj9vMcXGxmLQoEEwNTWFvb093n33Xbx48QIA8Ouvv6JJkyaV7na98847mDJlCvf733//jY4dO8LQ0BBNmzbF0qVLayxsWVpawsHBAc7Ozhg8eDDeeecd3Lx5U2abTZs2oVmzZtDX14eXlxe2bt3KPZeUlASGYRAdHc09lpWVBYZhEB4eDgAIDw8HwzA4e/YsfH19YWxsDD8/P8THx8scZ9WqVbC3t4eZmRmmT5+OwsJCmecjIyPRr18/2NjYwMLCAv7+/pViZRgGv/zyC4YOHQoTExN888038PDwwHfffSez3Z07d6Cjo4OHDx9We35qS+sTVE2dSkqbaOMUVJo6lZS20cYpqComp/369aM+p0SQ9sftx6jdo/Ak54nM409znmLU7lG8JKlpaWnw9/dHu3btcP36dZw4cQLPnj3DmDFjAACjR4/GixcvcP78ee41mZmZOHnyJCZOnAgAOHnyJCZNmoQ5c+YgNjYWv/76K0JDQ7F8+XKF47h//z7Onz+PLl26cI8dOHAAwcHBmDt3Lu7cuYNZs2Zh6tSpMrEo6osvvsD333+P69evQ1dXF9OmTeOe2717NxYvXozly5fj+vXrcHR0xMaNG2Ven5ubiylTpuDixYv4559/4OnpiUGDBiE3N1dmu8WLF2Po0KGIiYnBtGnTMG3aNISEhMhs8+eff6JHjx5KvwZqdYJKyalwaFOSSsmpsGhTkkrJKdEUYokYwSeCwYKt9Jz0sY9PfKz22/2bNm1Chw4dsGLFCnh7e6N9+/b4888/cf78edy/fx9WVlYIDAzEjh07uNfs2bMHVlZW6NOnDwBg+fLl+PzzzzFlyhQ0bdoU/fr1w9dff41ff/212mOPHz8epqamMDQ0hJeXF1q2bImFCxdyz3/33XcICgrC+++/j+bNm+PTTz/FiBEjKlUkFbF8+XL4+/ujRYsW+Pzzz3HlyhWuSrpu3TpMmzYNM2bMgJeXF7755huZQcsA0Lt3b0yaNAk+Pj7w8fHBr7/+ioKCAkRERMhsN2HCBEybNg1NmzaFq6srpk6divj4eFy7dg1A2W3/bdu2ySTIyqLVCWpsbCwlpwJSMUmNjIzUyL7AGRkZePjwISWnAlI+SX348CEyMjL4DqnWSktLuS9tlJwSobuYfLFS5bQ8FixSclJwMfmiGqMCbty4gfPnz8PU1JT7kS4FLL0FPXHiROzbt48bwLR9+3aMGzcOIpGI28eyZctk9jFz5kykpaWhoKCgymP/8MMPiI6Oxq1bt3DkyBHcv38f7777Lvd8XFxcpe463bp1Q1xcXK3fZ5s2bbi/S7uWST/34uLiuOusVMXfMzIy8N5776F58+awsLCAhYUF8vLykJycLLOdr6+vzO+Ojo54++238eeffwIAjhw5gsLCQowePbrW76EmWt0R08/PDzo6OmjVqhUlpwIhTVLNzMzQunVrjewLLO37yLIsJacCIk1SGYbRyL7Aurq6mDx5MmJiYvDWW29RckoELS03TanbKYtEIsGQIUOwevXqSs9JPxeGDBkCiUSCo0ePolOnTrh48SLWrl0rs4+lS5dixIgRlfZR3cITDg4O8PDwAAB4eXkhNzcX48eP5/puAqj0/5plWe4xHR0d7jGpqgYm6enpcX8vP+2eooKCgvD8+XOsW7cOrq6uMDAwQNeuXVFcXCyznYmJSaXXzpgxA++++y5++OEHhISEYOzYsTA2Nlb42IrSvOygBtnZ2TA2Noaenh4Yhqn0rYHwT96/y8uXL2Ftbc1TRDUTi8XIycnhFh5o2rQpzxEReSp+YcjMzIS5uTlXGRGi8m3f1NSUPrOIRnA0U+xLoKLbKUuHDh2wb98+uLm5VVkAMTIywogRI7B9+3YkJCSgefPmMot/dOjQAfHx8VxSWVfSz53Xr18DAHx8fHDp0iVMnjyZ2+bKlSvw8fEBANja2gIo60fbvn17AJAZMKUoHx8f/PPPPzLH+eeff2S2uXjxIjZu3IhBgwYBAFJSUriBZDUZNGgQTExMsGnTJhw/fhwXLlyodYyK0KoENTMzE1u2bIG1tTXGjRsn8w2DCFd0dDQOHz6MgQMHolOnTnyHU4m0z+mTJ08QFBQEGxsbvkMiCnj+/Dm2bNkCJycnjB49WpBJamRkJI4fP4533nlH4ybRJg1bD5cecDJ3wtOcp3L7oTJg4GTuhB4uPVQWQ3Z2dqUEbtasWdi8eTPGjx+P+fPnw8bGBgkJCQgLC8PmzZu5z4GJEydiyJAhuHv3LiZNmiSzj6+++gqDBw+Gs7MzRo8eDR0dHdy+fRsxMTHVThuVlZWF9PR0SCQSPHjwAMuWLUPz5s25BHT+/PkYM2YMOnTogD59+uDvv//G/v37cebMGQBlifNbb72FVatWwc3NDS9evMCXX35Z6/MSHByMKVOmwNfXF927d8f27dtx9+5dmcKKh4cHtm7dCl9fX+Tk5GD+/PkwMjJSaP8ikQhBQUFYuHAhPDw8VPalWmv6oEqT0+zsbGRnZ9PkuBrk+fPnYFlWkAOnyg+IKiwspAnTNUhOTg4KCwsFO3BKOiCKZVk8f/6c73AIqRWRjgjrA9cDKEtGy5P+vi5wHUQ6qvtiGB4ejvbt28v8fPXVV7h8+TLEYjEGDBiAVq1aITg4GBYWFtwtdKBskJCVlRXi4+MxYcIEmf0OGDAAR44cwenTp9GpUye89dZbWLt2LVxdXauNZ+rUqXB0dISTkxPGjx+Pli1b4vjx41wld9iwYVi/fj3WrFmDli1b4tdff0VISAgCAgK4ffz5558oKSmBr68vgoOD6zSP6tixY/HVV19hwYIF6NixIx4/fozZs2fLbPPnn38iMzMT7du3x7vvvos5c+bAzs5O4WNMnz4dxcXFKhkcJcWw5Ts7aKjyyam1tTWmTJmidX1Oi4uLsXLlSgDAwoULoa+vz3NEysOyLE6fPo2rV68CKLt9IIRKakMYra/N7QoAVzkRi8Xw8vISTCVV20fra3u70haFhYVITEyEu7t7tX0rq7M/bj+CTwTLDJhyNnfGusB1GOFTuQ8n0Q6XL19GQEAAnjx5Ant7+1q9VtF2p/G3+BtCcqrtpAOnAODq1avchZvPJLUhJKcNgYeHB8aNG4ewsDCuksp3kqrtySlpWEb4jMBQr6G4mHwRablpcDRzRA+XHiqtnBL+FBUVISUlBYsWLcKYMWNqnZzWhkbf4qfkVHsIaZ5USk61izRJFcI8qZScEm0k0hEhwC0A41uPR4BbACWnWmznzp3w8vJCdnY2vv32W5UeS6MT1NevX6OwsJCSUy1RMUnlq79naWkp8vLyKDnVIuWT1Ly8PN7m35W2aUpOCSGaKCgoCGKxGDdu3ECTJk1UeiyNvsXfuHFjTJkyBaamppScaglpkuru7l7vKT7qysDAAJMmTUJGRgZcXFx4iYEon4eHByZPngw7OzsYGBjwEkOfPn3g6uoKDw8PSk4JIaQaGldBzczMxNOnT7nfHR0dKTnVMgzDwNPTk7uAl5aWIj4+XqXHFIvFMqt5GBoaUnKqhVxcXGQ65cfFxan8dn98fDxXsa3YtgkhhMinUQlqZmYmQkNDsXXrVqSmpvIdDlEDsViMsLAwhIWFqaxPqrTP6e7du7mZBIj2u3r1Knbv3q3SPqmRkZFc+xXaNFeEECJkgkxQL1y4gCFDhqBx48ZgGAYHDx7kktOcnByYmZlR1fQ/S5YsAcMwMj8ODg58h6U0Ojo63Nxs9R04tWnTJrRp0wbm5uYwNzdH165dceTIEZkBUbWZB07bPX36FJMmTYK1tTWMjY3Rrl073Lhxg++wlMbOzk4lA6dWrlwJhmEwfvx4bkCUvb29zByMDZWbm1ulzyuGYfDBBx/wHZrgrFy5Ep06dYKZmRns7OwwbNgwld9JIkRIBPmJmZ+fj7Zt22LDhg0AgLy8PC45tbGxweTJkylBLadly5ZIS0vjfmJiYvgOSWmUObrfyckJq1atwvXr13H9+nUEBARg2LBhuHjxIg2IqiAzMxPdunWDnp4ejh8/jtjYWHz//fewtLTkOzSladasGcaPH6/UJDUyMhK//fYbPDw8kJiYCADw8/ND37596bY+ys5P+c+q06dPAwBGjx7Nc2TCExERgQ8++AD//PMPTp8+jdLSUvTv3x/5+fl8h0aIWghykNTAgQMxcOBA7vdz587B1dWVktMq6OrqalXVtCJlzZM6ZMgQ7u9isRht27aFnp4eUlNT8emnn1JyWs7q1avh7OyMkJAQ7jE3Nzf+AlIRaZK6c+fOes+TmpeXh4kTJ2LevHlYs2YNAEpOK5KuNS61atUqNGvWDP7+/jxFJFwnTpyQ+T0kJAR2dna4ceMGevbsyVNUhKiPICuoUtIpWQoKCig5rcaDBw/QuHFjuLu7Y9y4cXj06BHfISmdvEpqXW83syyLXbt2Ye/evSgpKcGsWbMoOa3g8OHD8PX1xejRo2FnZ4f27dtj8+bNfIelEvIqqXVZYO+DDz6Ar68vXrx4AaBslhFKTqtWXFyMbdu2Ydq0aXSOFCC9HlpZWfEcScMQFBSEYcOG8R1GgyboBNXY2BgAYG5uTslpFbp06YK//voLJ0+exObNm5Geng4/Pz+8fPmS79CUrnySamBgUKcVLGJiYmBmZobJkyfj6NGj+PXXXxEYGKiCaDXbo0ePsGnTJnh6euLkyZN47733MGfOHPz11198h6YS0iRVV1cXzs7OtU6YwsLCcPPmTSxbtgwGBgawsLCo034akoMHDyIrKwtBQUF8hyJ4LMvi008/Rffu3dGqVSu+wxGMlJQUTJ8+HY0bN4a+vj5cXV0RHBxcq+tfUlISGIZBdHR0vWIJDw8HwzDIysqq137IG4K8xS+lp6cHAOjVqxclp1Uo3xWidevW6Nq1K5o1a4YtW7bg008/5TEy1ZAmqZ07d65Tf0gvLy9ER0cjKysL27dvx+eff46uXbuiRYsWyg9Wg0kkEvj6+mLFihUAgPbt2+Pu3bvYtGkTJk+ezHN0qtGsWTN88MEHtW5XKSkpCA4OxqlTp+Dh4YH33nsPJ06coOS0Bn/88QcGDhyIxo0b8x2K4H344Ye4ffs2Ll26xHcoVSosLcSVlCvwc/aDoW7V66sry6NHj9C1a1c0b94cO3fuhLu7O+7evYv58+fj+PHj+Oeff6jarOEEV0HNzMzE5cuXZW6xGRkZ8RiRZjExMUHr1q3x4MEDvkNRGYZhZJKI1NRU3Lx5s9rXiMVinDt3DhKJBB4eHvD19cUPP/yAtm3bYv369SqOWPM4OjpWStp9fHyQnJzMU0TqUb5dFRYW4ty5czUOnNq9ezcyMjLQsWNH6OrqwsbGBhEREfjxxx+hq6tL00vJ8fjxY5w5cwYzZszgOxTB++ijj3D48GGcP38eTk5OfIdTCcuyOBB3AM1/ao4+f/VB85+a40DcgTp1k6mNDz74APr6+jh16hT8/f3h4uKCgQMH4syZM3j69Cm++OILAOBmAirP0tISoaGhAAB3d3cAZV/CGYZBQECA3OOxLItvv/0WTZs2hZGREdq2bYu9e/cCKKvC9urVCwDQqFEjMAxDdwaUgNcKqlgixsXki0jLTYOjmSNambXC1r+2IicnBzo6Olx/Q1KmBCVIQQoKSwuhr68vd5uioiLExcWhR48eao6OH9nZ2fjrr79QVFQEsViMTp06QSwGLl4E0tIAR0fAz0+M/fvLppJKSUnB5MmTueoWy7IoKiri+V3wS1676tatW6Upbe7fvw9XV1c+QlQ7aT/lpKQkZGRk/DfKXCTTrnr0AG7ejMTLly8RHByMsWPHcnd6pk6dCm9vbyxYsKBOA660SWlpaaXPK+mAn7fffpunqISj4nWwh0sPiHREYFkWH330EQ4cOIDw8HAukRKSey/u4b0j7yHicQR0mLJ619PcpxixewT8Xf3xy+Bf4G3jrfTjvnr1CidPnsTy5csrFbAcHBwwceJE7Nq1Cxs3bqxxX9euXUPnzp1x5swZtGzZsspr65dffon9+/dzXZ8uXLiASZMmwdbWFt27d8e+ffswcuRIxMfHw9zcnAprSsBbgro/bj+CTwTjSc4T7jELxgID2AHobNoZEomE6xOSmJiI6OhoWFlZqXx1H5ZlIZaw0BUJp7jMsiwOxR/CT/gJOcjBuV/P4cfAHzHMexjmz5+PIUOGwMXFBRkZGfjmm2+Qk5ODKVOmqCUuvs+Vubk5OnTowI3uP3++EX76yQNP3jQrWFkVoW9fBunp5zB79mw8fvwYubm5CAsLQ3h4eKXRsqoghHNVUXXt6pNPPoGfnx9WrFiBMWPG4Nq1a/jtt9/w22+/qS02Ps8XwzDo1q0bUlJSEB8fj/nzr2LPnm548uTNbXs7uyIEBDxCixYGCAgIwFtvvcV98TExMYG1tbVa+gvyfa4qYllW5suNtJ+3t7c3GIaBRCJBSEgIpkyZAl1d9V6ChHau5F0HncydsD5wPc78dAY7duzAoUOHYGZmhvT0dACAhYWFYJKfaYem4drTawAACSuR+fNS8iVMOzQNV6ZfUfpxHzx4AJZl4ePjI/d5Hx8fZGZm4vnz5zXuSzqzhLW1dZWz4eTn52Pt2rU4d+4cVzhr2rQpLl26hF9//RX+/v5cdwI7Ozutmo6PT7wkqPvj9mPU7lFgIXsLIJvNxm7shoeZB7p37849Lu1LOWXKFK4sryqz991CWk4hPvX3QM+m1rz3Iyv/DZVBWSypuancN1Tjh8bYMX4HXrx4AVtbW7z11lv4559/1FLpEsK5Kj8F1R9/ZGL37mYAWABvYnn1ygi7d49B166H8PnnnyMtLQ0WFhZo06YNTpw4wb1elYRwrsqrqV39MvgXHDhwAAsXLsSyZcvg7u6OdevWYeLEiWqJTwjny8PDA+PGjcOiRVEIC+tW6fmMDH3s3j0GixbdQr9+bXn7NxXCuZJ68eIFjhw5gsePH3OP5ebmYvfu3XB1dcXgwYNx8+ZNJCcnY9q0aWqPT0jnqqrr4NOcp2WPbyp7vOIt55CQEMHcPs4tzoWYld+FRcyKkVucq+aIyki7Fyjr3zc2NhaFhYWVrhXFxcVo3769Uo5BKlN7giqWiBF8IrjSf0opBgz+yv8LuYVFEOlUvjX2ukTF62Zn5KGgRIzPjtxF+yYW+Kh7UzS1NlHpMasTdHAqrqeWTUwvPWflv6H6vt0JD3enVHqdqs8TIKxz1bVHb0ycWPrfbxU/lBgwDIuUlO2IeyBBxTuuDe1cATW3q6CDU3F+yiVcGzBQ5nXqOFeAcM6Xg5M7zodLv+xVblcAi5CQtvjs/2Tb1fHTZwE0vLZ14OBBpFVYhlqaLCQnJ+PAwYOYNGUqCorL/q+qqz1JCeVciSVizDku/zrIggUDBs5rnZEYnCj3OtjQeXh4gGEYxMbGyp0K6t69e2jUqBFsbGzAMEyl/rAlJSW1Op5EUvbZePToUTRp0kTmOQMDg9oFTxSm9gT1YvJFmdsZFbFg8STnCTr9tBHmevx+M4l6mo1pu6J4jSEm51m131Bvpz1DwEb+R3byfa5yHljgxYt2VT7PsgyePAE6zYuBuWe2+gKTg+9zBWhOuwL4PV85DyzwLL1dNVsIp10B/LetHjmZMKticAzLsohPy6R2BSCnJApP86u/DqbkpOBi8kUEuAWoLzANYW1tjX79+mHjxo345JNPZLo8pKenY/v27dxYA1tbW6SlpXHPP3jwAAUFBdzv0j6n1Q1mbNGiBQwMDJCcnFzlohKK7IfUjto74qTlptW8EYAS9pWKIyHapCRHfsf2um5HCEDtiqiGotc3Ra+XfDHTN4OIkV/hFTEimOmrbnrIDRs2oKioCAMGDMCFCxeQkpLCddlq0qQJli9fDgDo3bs3NmzYgJs3b+L69et47733uCksgbI+o0ZGRjhx4gSePXvGLYhQnpmZGebNm4dPPvkEW7ZswcOHDxEVFYWff/4ZW7ZsAQC4urqCYRgcOXIEz58/R15ensree0Oh9gqqo5mjQtv9PNwfPV2717yhkg3afBUF/912EjEMJGAxrJUjpnV2hZmB+rvs+m42Rmw1/bzdrY0RPlP95wkQ1rm6EAEEbq15u58ne6Gnv5fqA6pASOcKEHa7AoRzvoTergDhnCsA+HPzXbx4XlDl8+7WJvia2hUuPC5F4Pava9xO0eslX/4c+qfMKH4JK+H+7O7SHb8M/kVlx/b09MT169exZMkSjB07Fi9fvoSDgwOGDRuGxYsXc4OWvv/+e0ydOhU9e/ZE48aNsX79eplVCHV1dfHjjz9i2bJl+Oqrr9CjRw+Eh4dXOt7XX38NOzs7rFy5Eo8ePYKlpSU6dOiA//u//wMANGnSBEuXLsXnn3+OqVOnYvLkySofM6Pt1H5l7OHSA07mTnia87TKfqiWBo7o4dITRnr89r1p18QC8wI8eO0raGFgDhEjkns7VsSIYGFgzvt5Avg/V317AU5OwNOngLw7jAxT9nzfXqJKfVDVje9zBWhOuwL4PV9v2hULlq084EJI7Qrgv20ZGhjI7fMHlA1YMTQwaPDtqqhUgvg0F+gztihm5X9LZMDAydwJPVyEPV2gt403zk85j0PxhzDn+Byk5KRwsxAM9Rqq8kForq6uCAkJqXabxo0b4+TJkzKPVVztacaMGZXm5K2YXDIMgzlz5mDOnDlVHmvRokVYtGhRzYEThaj9Fr9IR4T1gWUTozNyBx0ANqLZmLorGnfSc9QcHeBlZwoHMwOsGdISP49ow2sSAZR9Q+3uUlZxkM4zJ/2zu0t3/Dn0T95iE9K5EokA6Xz7DFPx4lj2+7p14C2JENK5AoTdrgDhnC9puyrLt2TblfTay2e7AoRzrgBg6NCh3FSA0uRE+qeLiwuGDh3KW2wA/+fqTnoOJu+4ge03U+Fi9BHKroKy10Hp7+sC12nEACmGYTDMexjuf3QfZyefRfyH8RjmPYz3mUqI5mNYVS/3UIX9cfsx5/gcPM19yj3mbO6Mme2W4UpCc7wqKIEOA0zs4IyZb7nBQFc9ubTQ5skD3sxXKf2G6mLhorZvqDXFJbRztX8/MGcOi6dP35wXA8tC/PqzCFMm6FXzStUS4rkSaruSxiaU8/Uyvxg9ghPwcG9TFGe/WcLR2bksOR0xgr/YAGGdK+DNPKjHjx9HTk4OLCwsEBgYCC8vrwbbropKJdj8TxK230yBhAWsjfXxeR9PvCi6IPc6uC5wHUb4qL5hFRYWIjExEe7u7jA0VP3ypIQAirc73hJUAHhd+BqzV89GHvIwa8Is9G7WGyIdEbILS7A2PAEn4jMAAG5WxljUzwutHMz5ClUQ1L3WsaZ6/boYs2fvQF6eGV77tMBzqwxM7OiE4J7N+A5NkKhdVW/dhQTsjHqKVrbGEJ+6i7w8M8ya9Q5699YTxG19oSotLUVKSgqcnZ3VPiG/kNxJz8HXp+KRlFnWNzfQ2w6f+nvAwrDsC3NV10F1oASV8EHRdsfrp4ZIRwR3lC3f5u/qz/2ntDDUw9JAH/T2tMWqc/eR9KoAM3dHqb2aKjSGuobo7d6b7zAETyQC3N3LJgrvM7E75h7NwL6YVEzq6AxrExptXRG1q6q9zC/G/ttlI6mndnbB2QfHAAD+/kMoOa2Brq6uIJfnVJeqqqY9m9rIbFfVdZCQho7XBFVHRweenp7c3yvyb2aDdk0suGrq1hspuJj4kqqppFrl21UXVyu0cjDDnfRcbLuRQlVUUitbbySjSCxBa0dzdHG1QnI1n1eESNVUNS2vpusgIQ0Vr7f4ayPi4QusOneft76pRHP98/gVgg/GwEBXBweCulAVlSjkZX4xhof8iyKxBOuHtcZbrlZ8h0QETtGqqVDQLX7CB0XbncZkd/7NbBD2bicEetlBwgJbb6Rg8s4bvIz0J5qli0sjtHIwQ1GpBNtuVF4WlhB5ZKqnLo34DocInHSE/tYbZclpoLcddr7rK9jklBCh05gEFXjTN/XbwS1hZazH9U3dcOkRikolfIdHBIphGMx8yw0AsC8mFS/zi/kNiAhe+b6nM7q48j76nAhXUakEGy49wszdUUjKLIC1sT7WDGmJpQN85N7SJ4QohtcEtbi4GCtWrMCKFStQXKx40kDVVFIdee2KqqikNuRVT+v6eUW0lzKqptSuCJGP9wpqSUkJSkpKav06qqaS6lRsV1RFJYqqrnpa188rol2UXTWldkVIZbwnqPVF1VSiKKqiEkVQ31NSHeprKgxBQUFgGAYMw0BPTw9NmzbFvHnzkJ+fz3doREk0PkEFqJpKFENVVFIT6ntKqkJ9TatXWlqKxMRElJaWqu2YgYGBSEtLw6NHj/DNN99g48aNmDdvntqOT1RLKxJUKaqmkppQFZVUh6qnRB6qmlaNZVnExcXhp59+wl9//YWffvoJcXFxUMcMlgYGBnBwcICzszMmTJiAiRMn4uDBgwgKCsKwYcNktv34448REBDA/R4QEICPPvoIH3/8MRo1agR7e3v89ttvyM/Px9SpU2FmZoZmzZrh+PHj3GvCw8PBMAyOHj2Ktm3bwtDQEF26dEFMTIzK32tDpFUJKkDVVFI9qqKSqlD1lFREVdPqvXjxAlu2bMHu3buRm5sLAMjNzcXu3buxZcsWvHjxQq3xGBkZ1aov75YtW2BjY4Nr167ho48+wuzZszF69Gj4+fnh5s2bGDBgAN59910UFBTIvG7+/Pn47rvvEBkZCTs7O7zzzjvUh1gFtC5BlaJqKqkKVVGJPFQ9JeVR1bRmhw4dQnJyMgBwFVPpn8nJyTh06JDaYrl27Rp27NiBPn36KPyatm3b4ssvv4SnpycWLlwIIyMj2NjYYObMmfD09MRXX32Fly9f4vbt2zKvW7x4Mfr164fWrVtjy5YtePbsGQ4cOKDst9Tg8ZqgMgwDV1dXuLqqplpB1dSGqaZ2RVVUUpEi1VNVf14RYVB31VST21VxcXGVt/JZllX5tFlHjhyBqakpDA0N0bVrV/Ts2RM//fSTwq9v06YN93eRSARra2u0bt2ae8ze3h4AkJGRIfO6rl27cn+3srKCl5cX4uLi6vo2SBV0+Ty4np4egoKCVH4c/2Y2aNfEAmvDE3AiPgNbb6TgYuJLfNXPCy0dzFV+fKJeirQraRX1Tnoutt1IQXDPZuoJjgiSItVTdX1eEf7cSc/B16fjkfSq7JZuoLcdPvX3UOntfGpXdderVy9s2rQJenp6aNy4MfT0yv6ddHR0KiXO8m7BS7eXks4IUP53AJBIai5oadqXC02gtbf4K5JXTZ2xOwo/UzW1QaIqKpGivqdEpmr6ivqaagoTExN4eHjA1dVVJrG0tbVFWlqazLbR0dFKO+4///zD/T0zMxP379+Ht7e30vZPyjSYBFWqYt/Uv/7rm3qX+qY2ONQXlQDU97Shu5Oeg8k7qa9pXejr61f5hY5hGOjr66s5ojK9e/fG9evX8ddff+HBgwdYvHgx7ty5o7T9L1u2DGfPnsWdO3cQFBQEGxubSrMGkPrjfanTNWvWYM2aNWpd4o2qqdpN0XZFVVRSm+opX59XRDWEUjXV5HY1dOhQuLi4AHhzi1v6p4uLC4YOHcpLXAMGDMCiRYvw2WefoVOnTsjNzcXkyZOVtv9Vq1YhODgYHTt2RFpaGg4fPsxbMq7NeO2DCqDS9A3qVLFv6l83UnCB+qZqBUXbFfVFbdhqWz3l8/OKKA8ffU2ro6ntysbGBlOmTEF8fDyOHz+OnJwcmJubIzAwEF5eXirtLhMaGlrt80uXLsXSpUurfD48PLzSY0lJSZUekzcIrHv37kqtyBL5eE9Q+Satpvb2tMWqc/e5auqkDs6Y8ZYbDHQbXC+IBkVaRQ0+GIN9MamY1NEZ1ib0TbghoL6nDU9RqQSb/0nC9ptlt/OtjfXxeR9Pup1fDwzDwNvbGx4eHkhJSYGzszN0dRt8akGUgLKv/1Df1IaL+qI2TNT3tGGhvqaqpaurC3d3d0pOidJQgloO9U1tmKgvasND1dOGQyh9TYnmCwgIAMuysLS05DuUBoESVDmomtrwUBW1YaHqacNAVVNCNBclqFWgamrDQlXUhoOqp9qPqqa1U9VqUISogqLtjdfOIgzDoHHjxtzfhYhG+mueurYrGtHfMNS1eqoJn1dEeCP0a8Jnu5JObl9QUAAjIyO1Hps0XNJZKyqu5FURw9JXJ4VFPHyBVefu41VBCXQY0Eh/LfTP41cIPhgDA10dHAjqQiP6tczL/GIMD/kXRWIJ1g9rjbdcrfgOiSgJjdCvm7S0NGRlZcHOzg7Gxsb05YuoDMuyKCgoQEZGBiwtLeHo6Fjt9pSg1lJ2YQlXTQUANytjqqZqEZZlMWN3FO6k52JCeyeqomqZdRcSsDPqKVo7mmPz6HZ0MdYSmlY1FRKWZZGeno6srCy+QyENhKWlJRwcHGr8/KUEtY6omqq9qIqqnah6qn2oaqo8YrEYJSUlfIdBtJyenh5EIpFC2/KaoJaUlODnn38GAHzwwQc19kcQGqqmClN92xVVUbVTfaunmv55pW20pWpK7YoQ+Xgt97Esi+zsbGRnZ2vkKEJFRvpLWBbhCS+QllPIc7QNR33bVfkR/XtvP8XjV5q5DCF542V+MfbdSgVQ95H7mv55pS20bYQ+tStC5KP70UpQ3bype2+lYsHRu/j6dDzfYZJakI7oLxazGL/tOvbeegoJXTw0koRlsehELIolLCwMdWneUw12Oy0bE7dfp3lNCWkAaE0yJZFWU3t72mLVuftIelWA6buiIC3U3HiShdup2WjT2ILfQIlCpFXU4IMxELMs1oQn4PT951jUzwtOljQdi6Z4kvUaX52Iw91nuQAAQz0RDYzSECzLYvHJe7j/PA+5RaXIel2CUknZl0QRw2Dl2z7wb2bLc5SEEFWhCqqSSaupA5rbggXw3+cpdBhg879JfIZGaqmLSyPo6rxJZmLScjB+WyTCop5QNVXgJCyLsKgnGLctErH/JacAIJbQv5umyC0qxfmE50h8VYAX+cVccgoA7ZtYUHJKiJajBFUFLAz10MpRtlIqYYFryVmIepLFT1Ck1hiGgU65apuYZVEsZvHDhYe4+Oglj5GRmlx4+BI/XHiIEjGL8ilpQbGYt5hI7RjoitC2ijtOs7u5qzkaQoi6UYKqAjmFJfjp0kO5z318KAZ303PUHBGpCwnLokT8Zllbaara2aURvO1M+QmKKMTH3hSd5fQ1fV0ipuq3BriTnoPJO28gMiULwJv/eyKGQWcXS7SimVII0Xq8JqgMw8DW1ha2trZa1S/MzEAXvT1t0dTaGLam+jDWezPnV2GpBNN3yY70J8qlrHZVUCxGxVRm7Tut8NPwNrA3M6xfkESl7M0MsaS/N/TKddFgALCoexVVWz+vhETeCP0FvT2hJyo732KWxf/+m2FDW1C7IkQ+mqhfTSQsi7ScQmy8nIgzD54DoHlTha6wRIwP9t+Csb4IL/KK8ehVAc2LqkHKz3s6p3tTbP43CQXFYvw8oi0M9RSbKJqoT3Xzmu6OforvIxLQ0ckSG0e25TlSQog6UILKA1qFSnOwLAuGYWh1KQ1T1apR0n9PIhyKrAYlYVlcfPQSXramcDCnuxeENASUEfGgunlTibBIkxnpvKhFpRJsu5HCc1SkJltvJKNILEFrR3OZeU8pORUWaV/TmuY11WEY+DezoeSUkAaE96VON2/eDACYOXNmg1zijaqpyqeqdkVVVM1QVfW0vujzSnkUqZo2FNSuCJGP14n6WZbF8+fPub83RP7NbNCuiQXWhifgRHwG/rqRgguJL6lvaj2oql1Jq6h30nOx7UYK9UUVqKqqp/VFn1fKUV1f04aI2hUh8lGZTgCkq1B9O7glrIz1kPSqADN200h/oZGuLgUA+2JS8TK/mN+ASCUv84ux/3YaAGBGF1e6pS8g8kborxnSEksH+DTY5JQQUjVKUAWE+qYKH/VFFTZVVU9J/Sja15QQQqQoQRUYqqYKG1VRhYuqp8JDVVNCSF1RgipQVE0VLqqiChNVT4WFqqaEkPqgBFXAqJoqTFRFFR6qngoHVU0JIcrA+1KnFhYWsLCwoAtKNaiaWjvqaFdURRUWdVRP6fOqZlQ1rT1qV4TIRytJaRiaN1U4aF5UYVDVvKdEcTSvKSFE2Sir0TBUTRUOqqIKA/U95RdVTQkhqkAVVA1G1VT+URWVX1Q95Q9VTQkhqsRrJiNd4m3z5s0oKSnhMxSNRNVU+dTZrqiKyi91Vk/p8+qNu1Q1VRpqV4TIx2uCyrIsUlNTkZqaSku81VGVI/0vN9yR/upsVzSinz/qHrlPn1dlVdOfLz3CDBqhrzTUrgiRj+4Fa4lK1dTrKZhC1VS1oCoqP6jvqXpJq6Z/UdWUEKIGlKBqkYrV1ESqpqoFVVHVj+Y9VR+qmhJC+EAJqhaiaqr6URVVvah6qh5UNSWE8IUSVC1F1VT1oiqq+lD1VPWoakoI4RslqFqOqqnqQ1VU9aDqqWpR1ZQQIgS8J6jGxsYwNjbmOwyt1hCrqXy0K6qiqh7f1VNt/ryiqil/tLldEVJnLGlQsl4Xs18dj2U7rwtnO68LZ8f+dY29k5at9OPk5OSwwcHBrIuLC2toaMh27dqVvXbtmtKPUxsRERHs4MGDWUdHRxYAe+DAAZnnJRIJu3jxYtbR0ZE1NDRk/f392Tt37sjdl0QiYQMDAyvtRyKRsNPCbrCd14Wz6yIS1B6Xtvvwx+2sZcuurHEjG7nnat++fWz//v1Za2trFgAbFRWl8piU8e/n7+/PApD5GTt2rMriKi4uZj/77DO2VatWrLGxMWtr78C6dhvItlu6l+28Lpz96kQsm/W6uF7HJ4SQ+uC9gkrUS13V1BkzZuD06dPYunUrYmJi0L9/f/Tt2xdPnz5V2jFqKz8/H23btsWGDRvkPv/tt99i7dq12LBhAyIjI+Hg4IB+/fohNze30rbr1q2TW72rSxVVmXFps5f5xTgf+xTGjZth0crv5G6Tn5+Pbt26YdWqVWqLS1n/fjNnzkRaWhr38+uvv6osroKCAty8eROf/98XmLv5EOwmLMKLJ0l49OeXVDUlhAgD3xky4Y+qqqkFBQWsSCRijxw5IvN427Zt2S+++KLe+1cGyKl8Ojg4sKtWreIeKywsZC0sLNhffvlF5rXR0dGsk5MTm5aWVmXFrLZVVGXEpe1+iHjAdl4Xzk7fdZOVSCRyz71UYmKi2iqo5dX138/f358NDg5WW1wsy7J30rLZMX9d4/7/T1+/iwXAPn78WGVxEEKIonhf6jQ0NBShoaG0xBsPVFVNLS0thVgshqGhoczjRkZGuHTpUn3DrlFd2lViYiLS09PRv39/7jEDAwP4+/vjypUr3GMFBQUYP348NmzYAAcHB7n7UmZfVEXj0nZ89z0FVNuuAGD79u2wsbFBy5YtMW/ePJVVyKvqazquhRUYhoGlpaVKjkvko+sgIfLp8nlwlmXx+PFj7u+EH/7NbNCuiQXWhifgRHwG/rqegouPXmJRPy+0dDCv9f7MzMzQtWtXfP311/Dx8YG9vT127tyJf//9F56enip4B7Lq0q7S09MBAPb29jKP29vbc/sCgE8++QR+fn4YOnRotfuTjui/k56LbTdSENyzWW3eQq3j0nZCGLmvynY1ceJEuLu7w8HBAXfu3MHChQtx69YtnD59WknRl7mbnoNlp+OR9KoAQNkI/U/9PWAAMbqP+RwTJkyAuXnt/8+TuqPrICHy8ZqgEuGQVlN7e9pi1bn7XDV1UkdnzOjiBgPd2hXbt27dimnTpqFJkyYQiUTo0KEDJkyYgJs3b6roHShHxcocy7LcY4cPH8a5c+cQFRWl0H5mvuWG4IMx2BeTikkdnWFtoq+SuLSdEKqn9VXTv9/MmTO5v7dq1Qqenp7w9fXFzZs30aFDB6XEcCw2HTHJUZCwgLWxPj7v44meTW1QUlKC0aPHQSKRYOPGjUo5FiGE1BcNkiIylDVvarNmzRAREYG8vDykpKTg2rVrKCkpgbu7u4oirx/p7XppxUsqIyODq36dO3cODx8+hKWlJXR1daGrW/b9buTIkQgICKi0T2XMi6pIXNpOCNXTuqrrv1+HDh2gp6eHBw8e1DsG6f/d8IcvKs1rWlJSgjFjxiAxMRGnT5+m6ikhRDAoQSWVKLNvqomJCRwdHZGZmYmTJ0/WeGucL9Lbq+VvqRYXFyMiIgJ+fn4AgM8//xy3b99GdHQ09wMAP/zwA0JCQirtUxl9URWJS5tpevW0rv9+d+/eRUlJCRwdHet87PJ9TQHAzEBXZoS+NDl98OABzpw5A2tr6zofixBClI1u8ZMqKdI3tbC0EFdSrsDP2Q+Gum8GRZ08eRIsy8LLywsJCQmYP38+vLy8MHXqVLXEzrIskpKSZPp05eXlISEhgfs9MTER0dHRsLKygouLCz7++GOsWLECnp6e8PT0xIoVK2BsbIwJEyYAKKuGyRsY5eLiUmVluHxf1JBrCejgll7pXNU3Lm1VWFqIr87swetSe7RtbIsuLo1qPFevXr1CcnIyUlNTAQDx8fEAqv63qy1VtKuHDx9i+/btGDRoEGxsbBAbG4u5c+eiffv26Natm0JxlZaWIiUlBc7OztDV1cXd9Bws+jsK9++/qcCOdNOFec4TJCcXoHHjxhg1ahRu3ryJI0eOQCwWc1VeKysr6OvXvTsKIYQohfonDnijqKiIXbJkCbtkyRK2qKiIz1BIDcITnrOBv11mO68LZ99aH87+dDGB3RWzl3Ve68xiCVjntc7s/tj9rEQiYVmWZXft2sU2bdqU1dfXZx0cHNgPPviAzcrKUkusRUVF7MSJE1kA7OHDh7nHz58/X2kydADslClTWJZ9M6G6g4MDa2BgwPbs2ZO9ffs2W1paWuWxUM1UR1JXEl+wHt9+zRoss5N7ruoSV0xMTL3OkZBJJBJ2f+x+tsn3TiyWgNVfaseujNjCSiSSGs9VSEiI3OcXL17MlpaWcue8LpTZrsr/+yUnJ7M9e/ZkraysWH19fbZZs2bsnDlz2JcvXyp0rmJjY9m1a9eyS5YsYb9fu5b9ft959q1151nvD36oMi7pNFzyfs6fP1/nc0Rqj66DhMjHsCx/wwaLi4vx3XdlE27PmzePvrULXHZhCdaGJ+BAbCSSCtYiV3wLOtCBBBLoMDqQsBL4u/rjl8G/wNvGm7c4i4uL4efnhxs3bmDq1Kn4888/67yv0NBQZGVlITAwEF5eXrW+xXzvxT28d+Q9RDyOAMAAYAV1roSm/PlioAMWEkjPW13PF8uyiI+Px4kTJ2BpaYmgoKA6xabMdqUML168wJEjR/D48WMwDAOWZcGi7Gy9FFmgUauu+DSwA024L3B0HSREPl4TVKKZWv3cCXdf3ARQuT+qiBGhc5POuDJdvXN0SiQSbNq0CVlZWQDKVu/JycmBubk55s6dCwCwsLDArFmzoKOjeNfr77//HsXFZX1HXV1d0a9fP9ja2ir8ev+//BGZGgkxK670HF/nSsj8/vDDtafXqjxfnRp3QsTkCIX39/z5c5w6dQrJyckAAH19fa49KEIikeDXX39FdnY2AOC7775Dbm4uLCwsMH/+fACApaUlZs+eXat2pQx//PEHnj59Kn9qIoaBU5MmmD59ulpjIoQQZaE+qKTWGJ1CyEtOAUDMipFbrP4lOPPz8/HVV1/h1atXYBiGSxZyc3OxePFiAGULBTx79gwGBgZ1Osbjx4/x+++/1+o1j/AIYlROtgD+zpWQ5Rbnyk1OgbLz9ejpI6xcubLO+y8uLq7V64uKirBu3Tq8fv0awJvpovLy8rBo0SKwLAsrKytMnjwZZmZmdY6rLoqLi6ueN5NluS9WhBCiiWgUP6m1mlY7kfBQlDczM0NUVBQ3MlosLktypBdwZ2dnvPfee3VOTknDZGBggFmzZsHZ2RnAm/YkbV9+fn6Ijo5We3JaVCrBy/witR6TEELUidcKamlpKXbv3g0AGDNmDDevJBEmsViMixcvIjMzs9rtnmS9xt30nDqtQlUfLi4uOH/+PKysrJCfn889rqenhyNHjsDbu/Z9Pcvf4tfR0QHLsujQoQN69uxZaSlXefZs3oOMFxm1Pi6Rz9bGFgtnLqxxu8LCQly4cIFbGEKaWNb2Fj9QNsrewsICK1askPlyZmxsjPDwcOjpqbePp3Q1KOfXJaguLc7Ly4NYLIZIJFJbbKT26DpIiHy8/k+QSCTcRNQSSd3Xfieql56ejoMHD+LZs2fQhz43OKoyHUgkRvVahao+rl27JpOcAmUV359++gkLFiyAh4dHnfft4uKCgQMHws7OTuHXmBuaQ8SIquxTaaav3sqb0BnpmqLsxo78/s3mhuYKDSLR19fH4MGD0blzZxw/fhxJSUkyzykqISEB+/btQ3JycqU7B/n5+bh27ZrCU0HVV1GpBL//k4RtN1MgYQFnkR7AMkAVdywKCgqwefNmDBs2TClTbBHVoOsgIfLRLX5SLbFYjPDwcGzevBnPnj2DkZERfu73M3q49gAA6DA6Mn92d+6Od1uurtcqVPXx999/AwCGDRuGhIQEvPPOOwCAuLg4hIWFcfNjKsrR0REWFhYYN24cJk+eXKvkFAD+HPonurt0B/DmHJWNswbcLXzx51B+R4ILTR+nJTATtQYgp225dK/1+bKzs8PkyZMxduxYWFhY1Gri+9TUVISFhUEsFuPFixcA3rQr6YIThw8frlU8dXU3PQeTd97AXzfKktNALzt8MGUsXF1cALzpGyv908bGBgYGBnj27Bk2b96M8PBwrlsCIYRoAt6nmZIOWFi4cCFNryEw5aumAODj44O3334bJiYmYFkWh+IPYc7xOUjJSYGLhQvWB67HUK+hYBgGEQ9fYNW5+3hVUAIdBmqrpl6+fBmPHz/G+PHjual3tm/fjkePHsHb2xsjR46s1S1PlmUhkUjqdZu04rmyN3GCOTsL9kY9cXDqW7A2oXYPlK0aNTzkXxSWijGyQwp+vvGF3LZVV2KxGDo6OgrvQywWY9++fWBZFo6Ojnjy5IlMu9q5cydcXV1VWkGtWDW1MtbD572bw7+ZDYA3U2gdP34cOTk5sLCw4KZEy8/Px7FjxxAXFwcAsLe3p2qqANF1kBD5KEEllUj7ml68eBESiQRGRkYYNGgQWrZsWeniXtVKUgCQ/boE30ck4GR8WR9MdytjmVWo1ElaPeKzP570XHV16ooP9sfhbnouJrR3QnDPZrzFJCTrLiRgZ9RTtHIww+9j2qNIXFRl21IXPtuNtK9p0qsCAGVV008DPOTOa1pxJSkplmVx9+5dHDt2DK9fv4aOjg569OiBHj16UN9UgaDrICHy0S1+IiM9PR2bN29GREQEJBIJfHx88MEHH6BVq1ZyK0+Guobo7d5bbgJhYaSHZYE++HZwS1gZ6yHxVQFm7I7Cz5cfoahUvX2tRCIRd0FmWRbHjx+XWZ5SHaTnykjPCDO7uAEA9sWk4mU+TQf0Mr8Y+2+nAQBmvuUGhmGqbVuqkpCQgOPHj3ODqsq3G3UpKpXg50uPMGN3FJJeFcDKWA/fDm6JpYE+VU66r6urC3d390oDbBiGQatWrfD+++/Dx8cHEokEERER2Lx5M7e0KSGECBElqASA/L6mI0eOxOjRo2FiYlKvffs3s0HYpE4Y4GXHW9/U8m7evIlr164hLCxM7Umq1FuujdDSwQxFpRJsu5HCSwxCsvVGMorEErRyMEMXl0a8xJCQkICwsDBcu3aNG/2vbvL6moa924m7pV9XpqamGD16NEaOHMnNB0x9UwkhQkYJKql11bQuhFRNbdeuHby9vSEWi3lLUhmGoSrqf+RVT9VNmpyKxWJ4e3ujXbt2aj1+XaqmtUXVVEKIJqGlThuw2vQ1VSYh9E0Vi8XYu3cv7t27B5FIhHHjxtVrCqq6YFkW03dHNfi+qBX7nqo7Qa2YnI4aNUqtt/Vr09dUWahvKiFE6ChBbaCqG6GvLnyN9JcSQpJ6NekVPj4UAwNdHRwI6tLgRvRLR+4XiSVYP6w13nK1Uuvx+UxOaxqhrw55eXk00p8QIkiUoDYwfFVNq8J3NbV8kqqvr4/g4GAYGxur5dgAVVH5rJ4WFBRg3bp1KCkpUXtyykfVtCpUTSWECBGvCWppaSkOHDgAABg+fDgt8aZiQqiaVoXPaqpYLMaBAwfQokULtGjRQuXHq6ihVlH5rp4CQGxsLGJjYzF8+HC1JGNCqJpWhaqp/KDrICHy0TyoDYDQqqZV4buaWp5EIoGOjnq6GjTUKipf1VN1/tuWJ6SqaVWomqp+dB0kRD4axa/l1DFCX1mEMtI/OzsbmzZtUtvo/oY4op+vkfsJCQnYtGkTsrOz1XI8QD0j9JWFRvoTQoSCElQtpcp5TVWN73lTr1y5ghcvXqh1CqqGNi8qH/OeSgdEvXjxAleuXFHLMVU1r6mq0byphBC+UYKqhTSpaloVPqup/fv3V/s8qQ2pispH9bTiaP3+/fur9HiaVDWtClVTCSF8ogRVi2hy1bQqfFRTRSIRRo0apfYktaFUUdVdPVX3VFKaWjWtClVTCSF8oARVS2hD1bQqfFRT+UhSG0IVVd3VU3Ump9pQNa0KVVMJIepGCaqG08aqaVXUXU2tmKSeO3cOqp70QturqOqsnrIsi7Nnz6olOdW2qmlVqJpKCFEXXqeZYlkWJSUlAAA9PT2Nr/Spm5DnNVU1dc6bKhaLcfbsWfj5+cHU1FTp+69IW+dF5WPe07y8PFy5cgV9+vRRSXIq5HlNVY3mTVUOug4SIh+tJKWBNGVeU1Xjc97U3NxcmJmZqWTf2jovqrrmPVXlv015mjCvqarRvKmEEFWhBFXDNOSqaVXUvQpVVFQUjh07hrFjx8LDw0Mlx9C2Kqq6qqcJCQnYtWsXBg0ahPbt26vkGA25aloVqqYSQpSN96VOjxw5AgAYPHgwLfFWDaqaVk9d1VSWZbFnzx7ExcVBJBJh3LhxKklSta2Kqo7qafkBUS1atMCoUaOUfhyqmlaNqql1Q9dBQuTjdZCURCLBrVu3cOvWLUgk6lspSNNo8wh9ZVHXSH+GYTBy5EiVj+7XphH96hi5X3G0/ogRI5R6HG0eoa8sNNK/bug6SIh8NIpfwBrSCH1lUcdIf3VNQaUtI/pVPXJf1VNJNZQR+spCI/0JIcpACapAUdW07tRRTVVHkqoNVVRVV09VmZxS1bTuqJpKCKkvSlAFhqqmyqPqamrFJDU5OVkp+y1P06uoqq6eJicnqyQ5paqpclA1lRBSV9QbW0BohL7ySaupfTxtsercfa6aqqyR/tIk9c6dO2jTpo2Son5DWkX9+FAM9sWkYlJHZ40Z0a+Ovqe9evWCtbU1WrVqpZTklEboK5+0murm5saN9I+IiMC9e/dopD8hpEpUQRUAqpqqniqrqSKRCG3btuUSsNLSUjx58qTe+5XS1CqqqqqnT548QWlpKYCy5Kdt27ZKSU6paqpaVE0lhNQGJag8o76m6qOOvqmlpaUICwtDaGio0vqkamJfVFVVTxMSEhAaGoqwsDAuSa0v6muqPtQ3lRCiKN6XOi0oKJtP0NjYuEElZDSvKb9UNW+qWCzG3r17ce/ePaXOk6pp86KqYt5TVQyIonlN+UPzppZpyNdBQqpDK0nxgPqaCocqVqFSVZKqKatLqWLVKGUnp9TXVDhoFSpCiDyUoKoRVU2FqaZqqoRlceHhS3jZmcLR3FChfaoiSS1fRR3VujHm9/as1/5URVo9bWlvij/Gdqh321Z2ckpVU+GhaiohpCLelzo9efIkAGDAgAFavcRbWloaDhw4gOfPnwOgqqkQVVVNPXQnDd9HJKCjkyU2jmyr8P5UkaRKq6gA8L6fO971dYaOgL7cPM8rwrA//0Upy6JDEwtsGtWuXvtTZnL6ukSMTZcTsfvWU7CgqqkQVaym2tnZYdCgQXBxcdHaL/EN6TpISG3w+j9BIpHg+vXrAIB+/frxGYpSsSyLAwcOID09HYWFhcjPz+eWsGMYBsOHD6dBUALk38wG7RpbcNXUv66n4NyD53iWWwQAuPEkC7dTs9GmsYVC+5NOQbV3714kJibC0FCx6mt13nJtBH2RDorFEmy8kogrSa+wqJ8XnCyN6r3v+nqS9Rqz9kaj9L/vvK9el9R7n4aGhtDV1YWnp2etklOWZbH45D3cf56HvKJS5BSVygyEG9DcFnN7eVLVVGCkI/3v3r2Lo0ePIiMjA6GhoQAAPT09GBoawtDQEA4ODhg+fLhWfIZq63WQkPqir2oqUFhYiLi4OLmjjF1dXdG6dWseoiKKKD9v6sqz8XiSXcg9J2KAzf8m4afhildRpUnqq1evYGtrW+/4GIaBoW5ZggoAt9OyMX5bJD7o1hRj2jXhpZoqYVnsjn6KDZceoUTy5oZMXlH9R9k7OTlh+vTpsLKyqlXlNLeoFOcTnqNYXPkGUXNbEywb2KLesRHVKD9v6i+//IL8/HwAQElJCUpKSpCbm4vMzEwMHDgQRkb8fzEjhKgGTTOlAvr6+nBzc5P7XJ8+fdQbDKkT/2Y2GN/eWeYxMQtcS87CnVrOnSoSiWSS09TU1HpNQVUieVMJlLBAsZjFDxce4uKjl3XeZ31cePgSP1x4KJOcAkBBcd3mtkxISEBqair3u62tba1v65sb6mFUmyZyn1vQu3md4iLqZWpqirFjx8p9rk+fPpScEqLlKEFVMum8phUTEB0dHTRt2hROTk48RUZqI6ewBL//myT3uUXH4+o8b+qLFy/w119/ISwsrE5JqoRlUVhS+didXRrB2860TjHVl4+9Kdo3qdzt4XWJGJJadnGX9jn966+/8OLFizrFI53XdGeU7GIJIoZBZxdLtKrnVGJEfZydneHu7l7pVn5UVBTNm0qIlqMEVUnkrQY1YMAArvIjkUgQEBDAb5BEYWYGuujtaYum1sawNdWHkd6b/yqpOYWYvON6nVahatSoEdzd3SEWi+uUpBYUi8ECKH+57t/cFj8NbwN7s/r3ca0LezNDLjk20S9r7wwAFrWropYfEOXu7o5GjWq/+lT51aBYAD3craAnKjtbYpbF/95yq/U+Cb969eoF6VheHR0dGBgYICMjg1ahIkTLUR9UJZA3r+mgQYNgamoKhmFw4sQJuLm5wdnZuYY9EaFgGAZLB/jIPCZhWZyKz8C6CwlIynyNGbujaj1vavmBU/fu3UNYWFitRvfr6jBo5WAGY31d+LlaYd3Fh4h49BIv84t5mxe1/KpRKwa1gIm+CL/9k4SCYjF0dRTrE1vf0frVzWu6O/opNwtDa0fFBrgR4XB2doabmxuSkpIwYMAAtGjRAkePHsW9e/cQERGBe/fu0byphGghXqeZKi4uxsqVKwEACxcuhL6+MCcer4oi85qyLIv4+Hg4OjrCwoIujtpAGatQ1WcKKpZlwTCMYFaXqmrVKGmcNalvclpxXtMBXnaY6+8BC6OyEfoSlsXFRy/hZWsKBwXnsSXCkp2djbS0NHh5eXFtX1vmTdX06yAhqsL7UqfZ2dkAAAsLC42aMqS6qilpGOq7ClXFJHXKlCm1rrLzvbpUfVeNSklJwZYtW+qUnNJqUCQvL4+rpgKauQqVJl8HCVElWkmqlmg1KFJefaup0iS1uLgY48aNg55e7ebl5LuKWlX1VFElJSUICwuDvr5+rZLTmqqmpOHQpmoqIeQNSlBrgaqmpCr1qaaKxWJIJJJaJ6dSfFVR61s9lSopKYGOjo5CyQRVTUlVtKGaSgh5g9cEVSwW4+zZswDK5rUT6rddqpoSRSijbyrLsggPD4ezs3Ot+qTyUUWta/U0ISEBKSkpCAgIqNX/H6qakppoYjVVU66DhKgbr6P4xWIxrl69CgAICAgQ5H9MqpoSRZVfhWrVuftIfFVQ65H+d+7cwYULF2o1cIphGMzs4oaPD8VgX0wqJnV0VnkVtfzI/ZlvudUqOZUOiLKxsVFoVTWqmhJFlV+FSlNG+mvCdZAQPtA8qFWQN6/pyJEjMXr0aEpOSbX8m9kgbFInDPCyg4QF/rqegik7byg0b2qLFi3g7e1d63lS33JthJYOZigqlWDbjZT6voUabb2RjCKxBK0czNDFRbH5SiuO1m/RoublRsvPayphy6qmYZM6UXJKqmVqaooxY8Zg5MiRMDIywrNnz2jeVEI0DCWockhXg4qIiIBEIoGPjw/ef/99tGrVim7pE4VIq6nfDm4JK2M9rpr68+VH1a5CJZ0ntbZJqrSKCgD7YlLxMr9YWW+lkrpUT2s7lZR0NagZu6OQ9KoAVsZ6+HZwSywL9KFb+kQh0mrq+++/D29vb0gkEkRERGDz5s20ChUhGoAS1HKoakqUrS7V1Lomqeqqota2elrb5JSqpkSZqJpKiGaiBPU/VDUlqlKXamrFJHXXrl3Izc2t9jjqqKLWtnqam5uLXbt2KZScUtWUqApVUwnRPA0+QaWqKVGX2lZTpUmqj48PBg4cCDMzsxqPoeoqam2rp2ZmZhg4cCB8fHyqTU6pakrUgaqphGgOXkfx841G6BN1q+1If5FIhNGjR8tUKqtbQlSVI/prUz0tH2OHDh3Qvr38aahohD5RN00c6U9IQ8T7UqfPnz8HANja2qrtVjrNa0qEoC7zpubn52PHjh3o1atXlVNQqWpeVEXnPU1ISMD58+cxYcIEmJiYVLk/mteU8E0I86bydR0kROga3EpSVDUlQlObVahOnTqFq1ev1jhPqrJXl1J01ajyA6K6du2K/v37V9qGqqZEaGgVKkKEp8EkqFQ1JUKmaDVVLBZj7969uHfvXrVJqrKrqIpUTxUZrU9VUyJUQqimEkLe4H2p04sXLwKASj8EqGpKNIUi1VRFk1RlVVEVqZ7WlJxS1ZRoCnVXU9V1HSRE0/A6il8sFiMiIgIREREqGUFJI/SJplFkpL+i86Qqa0R/TSP3a0pOaYQ+0STqHumv6usgIZpKa6eZonlNiaZSZN7UiknqiRMnIJHIzqmqjHlRaxq5L5FIcOLECbnJKc1rSjQVzZtKCP+0LkGlqinRFjVVU6VJaqdOnTBp0iTo6FT+71zfKmpN1VMdHR1MmjQJnTp1kklOqWpKtAHNm0oIf7QqQaWqKdE2NVVTRSIRBg0aBEtLS+41BQUF3N/rU0Wtrnpa/hiWlpYYNGgQRCIRVU2J1qFqKiH80IoElaqmRNspugpVXFwc1q9fL9Mnta5V1KqqpwkJCVi/fj03iESKqqZEm1E1lRD10vgElaqmpKFQpG/q3bt3UVxcLDNwqi5V1Kqqp9IBUcXFxbhz5w4A6mtKGg6qphKiPoJMUC9cuIAhQ4agcePGYBgGBw8elHmeZVl89dVXsLGxgbOzM1atWoXs7GyZqumsWbPQrFkzGBkZwdbWFkOHDq1U8SFEE1VXTR0+fLjc0f21raKG/vsIDw//htjlE9DLuwmaNm2K4OBg7NixgxsQNXz4cKqakgZJXdVURa6FS5YsQePGjWFkZISAgADcvXu30n6uXr2K3r17w8TEBJaWlggICMDr16+VFichqsBrgqqrq4sZM2ZgxowZ0NXV5R7Pz89H27ZtsWHDBrmvW7RoEdasWYM+ffpg5syZaNy4MXbu3AlXV1eu0tOxY0eEhIQgLi4OJ0+eBMuy6N+/P92KIVqhqmrqL/88xpBhIyolqbWpor7ML8ZPP3yPjCuHsWT194iLi8Mnn3yCX375BVevXoW3tzeGDBuBX64+pqopabCUVU2t6joI1Hwt/Pbbb7F27Vps2LABkZGRcHBwQL9+/ZCbm8ttc/XqVQQGBqJ///64du0aIiMj8eGHH8odVEmIkAh+JSmGYXDgwAEMGzYMYrEYFy5cwDvvvIO33noL/fr1w6BBg+Dh4QEHBwesXr0as2bNkruf27dvo23btkhISECzZspZm5wQIZC3CtUXvT0Qe+mUzGT+zZo1U2h1qXUXErBk9ruws7NH/LkDePjwIcLCwrBjxw5YW1tjY9hhfHMugVaDIuQ/6liFqvy1UHrMxo0b4+OPP8aCBQsAAEVFRbC3t5e5FkqvlV9//bVS4iBEXTTmK5S0r+nBgweRl5eHvn37cn1NDQ0N4e/vjytXrsh9bX5+PkJCQuDu7g5nZ2c1R06Iasmrpv5v3208b9wBzb28IBaLER8fr1AVVdr31Kxpa+Q+uIkHDx4gPj4eT58+xdOnT9Gs1wj8b99tqpoSUg4ffVMTExORnp6O/v37c48ZGBjIXAszMjLw77//ws7ODn5+frC3t4e/vz8uXbqkkpgIUSbdmjdRHbFYjH/++QdA2be8qr5p3rlzBzExMZBIJCgpKQEATJo0SWaEvr29PR4/fizzuo0bN+Kzzz5Dfn4+vL29cfr0aejr1225R0KEzr+ZDdo1tuCqqVtvpsK9kTsm9GiCQb26A3jTF/Vuei623UipVEWVjtzvN3EW7FpawdvbGyKRCGKxGK1Gvoc46w4AS1VTQuSR9k2VVlOlfVOrq6Yqeh2sSJr42tvbyzxe/lr46NEjAMCSJUvw3XffoV27dvjrr7/Qp08f3LlzB56ennV+r4SoGu9LnZ45cwZnzpyR2zdU+h/wzp073Aj9ESNGAECl/jMsy1YatT9x4kRERUUhIiICnp6eGDNmDAoLC1X0bgjhX6VqamYhVt6RYOOVRBSVSsCyLMZ6GAOoXEUtP3Lf/lE4tm/fji1bt2H+74fRdOJCxB7bjtfRp6lqSkg1altNrek6qMjxyit/LZSuLjdr1ixMnToV7du3xw8//AAvLy/8+eefdXh3hKiPIG/xl5/XFCi7bSEdod+0aVMAqPQfPSMjo9I3SQsLC3h6eqJnz57Yu3cv7t27hwMHDqjnTRDCI7kj/XdEImR7GCKP70VH09eVRvRLq6e+pq+xcfUy9OzdB0fEzXA2yxjWvv3RY1QQCq/soRH6hChA1SP9HRwcAFR/LXR0dAQAtGjRQmYbHx8fJCcn1zsGQlSJ9wSVZVkkJiZCOlar4rymABAYGMjNa+ru7g4HBwecPn2a20dxcTEiIiLg5+dX47GKiopU92YIEZCK1dSkVwW4kZIJsVgMx9TrsCl5ib23UnHoeAl+CynFn/sKYF30Eg6p11FSUoKUrEI8LtfXtL+3AyDsMZWECIqi1dSK10FFKHItdHNzQ+PGjREfHy/z2vv378PV1bWe744Q1eK1DypQNvH39u3bMXz4cFhYWODixYt4/fo1CgoK0L17Wb+59PR0REdHw8rKCi4uLvj444+xYsUKeHp6wtPTEytWrICxsTEmTJgAoKzfza5du9C/f3/Y2tri6dOnWL16NYyMjDBo0CA+3y4hale+b+qpe0D7glg4lLyAyXUxzp3oiGHZ0lv1bfDY3BVmgSVw9m6DfyLOYmTHACwM7IOHty9i7dq1mDZtGq/vhRBNVF3f1C5dunDXwZEjR2LIkCHc6/Ly8mRWhUtMTKzVtZBhGMyfPx+LFy9G27Zt0a5dO2zZsgX37t3D3r171X4eCKkVlkdFRUVs+/btWQCsn58fu2TJEnbJkiXsV199xQKo9DNlyhSWZVlWIpGwixcvZh0cHFgDAwO2Z8+ebExMDLffp0+fsgMHDmTt7OxYPT091snJiZ0wYQJ77949nt4pIcIQnvCcHfjrRbb/hGMsIPnvhy33U/ZYm6mR7Mig/7EuLi6soaEh27RpU/aLL75gi4qK+H4LhGi03NxcNiwsjLvebdy4kbsOTp06VWbb8+fP1+taKLVy5UrWycmJNTY2Zrt27cpevHhRHW+VkHpR+zyoEokEmzZtQlZWFkpLS7Fy5UoUFRVx02N4enrC29sb77//PnR0dCAWi6vtr6Orq8sNmBLCthKJBKWlpVVuKxKJuFGaQtiWZVluZoT6bqujo8NNNK2qbYGy21jK2JZhGOjp6dVp25KSkipvx6lqWwAys1DUZtvS0lKuy0xmXgk8m+sh96UeAHnLAbNo0oTFgwelEInonFa1bflzWt9t9fT0uIEtqtq2ps+x2mxLn7v127a0tBSLFi3CzZs3UVpaisuXL6OoqAjm5ub47LPPAACWlpaYPXs2TahPGiy1J6i5ublwc3PDq1evuA9D9r9Rh9JQLC0tkZycDDMzM4SHhyMiIqLK/c2YMQNNmjQBAFy+fBlnzpypctspU6bAzc0NAHDt2jUcP368ym3Hjx+P5s2bAwCio6Nx6NChKrcdNWoUWrZsCaBsLfTqbp0MHToU7dq1A1DWD2jnzp1Vbjtw4EB07twZAJCUlIQtW7ZUuW3fvn3RrVs3AMDTp0/x+++/V7mtv78/AgICAJR1qN+0aVOV23bt2pWbZy8rKwvr16+vcltfX1+8/fbbAMrmnv3uu++q3LZt27bchNPFxcVYuXJlldu2aNECo0eP5n5funRpldt6enpyt7cAYMWKFVUmv66urggKCuJ+X7NmDQoKCuRu27hxY8ycOZP7fd26dcjOzpa7ra2tLd5//33u940bN+L58+dyt7WwsMDHH3/M/b5582akpqbK3dbY2Bjz58/nfg8NDa00tZqUnp4e/u///o/7fceOHXjw4AEAIDHRFVu2BMl9XXlTpoTC3f0xndP/VHdO5Vm8eDH39z179iA2NrbKbRcuXMgltAcPHsStW7eq3HbevHkwMTEBABw9ehTXr1+vctvg4GBYWloCAE6dOoWrV69Wue3s2bNhZ2cHAPS5q+LP3UePHqFVq1bccqPS659IJIJEUjbbhpWVFZKSkmBmZlblPgnRZmr/amZmZoaoqCiuE7c0KZX+6ezsjHPnztF/SkJUJC9Psf9bim5HCKkdU1NTzJo1i1s4Rnr9k1aM/fz8EB0dTddB0qDxttRpcXExrKyskJ+fzz1mYmKCZ8+ewdjYmG41qWlbusXf8G5HR0Qw6N+/5jlMT50qgb8/S+e0im3pFj997tb3c7e4uBgODg6VroOZmZkybZiQhoi3BPXSpUvo0aOH3Melt0wIIconFgNubsDTp/JnjWIYwMkJSEwElLSMOCFEDroOElI13npf//333wCAYcOGISEhAUOHDgUAHD58mK+QCGkQRCJA2pW4wiI03O/r1lFySoiq0XWQkKrxVkG9fPkyHj9+jPHjx3MdxHfu3AlXV1f65kiIGuzfDwQHA0+evHnM2bksOf1vRWFCiArRdZCQqvGWoBJC+CcWAxcvAmlpgKMj0KMHVU4JIYTwjxJUQgghhBAiKDQDMCGEEEIIERRKUAkhhBBCiKBQgkoIIYQQQgSFElRCCCGEECIolKASQgghhBBBoQSVEEIIIYQICiWohBBCCCFEUChBJYQQQgghgkIJKiGEEEIIERRKUAkhhBBCiKBQgkoIIYQQQgSFElRCCCGEECIolKASQgghhBBBoQSVEEIIIYQIyv8Dm6GYWLHOA9YAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAHhCAYAAADOLdwlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABZ0ElEQVR4nO3dd3wUdeLG8c/sZtMgCTUJgQABQpeOCIKAAoJKFcGCwlnuPMHGedbTU0/FcvpTzxMFPUAF6b2oKF0EI0V6b5EWahJSt8zvj4VoBCGBzc4med6v1142M7M7z3q72YfvNMM0TRMRERERP7FZHUBERERKF5UPERER8SuVDxEREfErlQ8RERHxK5UPERER8SuVDxEREfErlQ8RERHxK5UPERER8asgqwP8nsfj4dChQ0RERGAYhtVxREREpABM0yQ9PZ24uDhstouPbQRc+Th06BDx8fFWxxAREZHLkJycTLVq1S66TMCVj4iICMAbPjIy0uI0IiIiUhBpaWnEx8fnfY9fTMCVj3ObWiIjI1U+REREipmC7DKhHU5FRETEr1Q+RERExK8CbrOLiIhIoHO73TidTqtj+J3D4cBut1/x86h8iIiIFJBpmhw5coTTp09bHcUy5cqVIzY29opOh6HyISIiUkDnikd0dDTh4eGl6nxUpmmSmZlJSkoKAFWqVLns51L5EBERKQC3251XPCpWrGh1HEuEhYUBkJKSQnR09GVvgtEOpyIiIgVwbh+P8PBwi5NY69zrv5J9XlQ+RERECqE0bWq5EF+8fpUPERER8atCl49ly5bRs2dP4uLiMAyDmTNn5ptvmiYvvvgicXFxhIWF0alTJzZv3uyrvCIiIlLMFbp8ZGRk0LRpUz744IMLzn/zzTd55513+OCDD0hKSiI2NpauXbuSnp5+xWFFRERKkxdffJFmzZr55Ln27duHYRisX7/+D5dZsmQJhmEU+aHEhT7apUePHvTo0eOC80zT5N133+W5556jX79+AIwbN46YmBgmTJjAX/7ylytLKyIiIpclPj6ew4cPU6lSJauj+Hafj71793LkyBG6deuWNy0kJISOHTuycuXKCz4mJyeHtLS0fDeA6Tunk5ab5st4IiIipZbdbic2NpagIOvPsuHT8nHkyBEAYmJi8k2PiYnJm/d7I0aMICoqKu8WHx8PwJtJb9J5UmeeXPok3x/8HrfH7cuoIiIiPtWpUyceeeQRnnzySSpUqEBsbCwvvvhi3vwDBw7Qu3dvypYtS2RkJAMGDODo0aP5nuP1118nJiaGiIgI7rvvPrKzs89bz5gxY2jQoAGhoaHUr1+fDz/8sED5LrTZZf78+dStW5ewsDA6d+7Mvn37LuelF1qRHO3y+8NwTNP8w0NznnnmGVJTU/NuycnJANSKqkWuJ5cF+xbw4LcP0m1aN95b+x57U/cWRWQREZErNm7cOMqUKcPq1at58803efnll1m4cCGmadKnTx9OnjzJ0qVLWbhwIbt372bgwIF5j508eTL//Oc/efXVV/npp5+oUqXKecVi9OjRPPfcc7z66qts3bqV1157jeeff55x48YVOmtycjL9+vXjpptuYv369dx///08/fTTV/zfoCB8OvYSGxsLeEdAfnva1ZSUlPNGQ84JCQkhJCTkvOnjbxrPL65fmLVrFvP3ziclM4VPNn7CJxs/oWnlpvSp04cba95IRHCEL1+CiIjIZWvSpAn//Oc/AUhMTOSDDz7gu+++A2DDhg3s3bs3b4T/888/p1GjRiQlJdG6dWveffdd7r33Xu6//34AXnnlFb799tt8ox//+te/ePvtt/P2q0xISGDLli18/PHHDB48uFBZR44cSa1atfi///s/DMOgXr16bNy4kTfeeOOK/ztcik9HPhISEoiNjWXhwoV503Jzc1m6dCnt2rUr1HMZhkGjio14ts2zLLptEW93fJvrql2HzbDx87GfeemHl7h+8vU8vfxpfjj0Ax7T48uXIiIiUmhNmjTJ93uVKlVISUlh69atxMfH5xUPgIYNG1KuXDm2bt0KwNatW2nbtm2+x//292PHjpGcnMx9991H2bJl826vvPIKu3fvLnTWrVu3cs011+TbMvH79ReVQo98nDlzhl27duX9vnfvXtavX0+FChWoXr06jz32GK+99hqJiYkkJiby2muvER4ezp133nnZIYPtwXSr2Y1uNbtxLPMYc/fMZeaumexJ3cO8PfOYt2cesWVi6VW7F71r96Z6ZPXLXpeIiMjlcjgc+X43DAOPx/OHux9cbLeE3/N4vP/IHj16NG3atMk373KusWKaZqEf4yuFLh8//fQTnTt3zvt9+PDhAAwePJixY8fy5JNPkpWVxUMPPcSpU6do06YN33zzDRERvtk8Ujm8Mn9q/CeG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RVI+li5dytChQ1m1ahULFy7E5XLRrVs3MjIy8pZ58803eeedd/jggw9ISkoiNjaWrl27kp6eDsChQ4c4dOgQ//73v9m4cSNjx47lq6++yrvA3O89+eSTxMXFFcXLERERER/yyw6n565Wu3TpUq677jpM0yQuLo7HHnuMp556CvCOXMTExPDGG2/wl7/85YLPM2XKFAYNGkRGRgZBQb8eqLNgwQKGDx/OtGnTaNSoEevWraNZs2ZF/bJERETkMvhln49zm0oqVKgAwN69ezly5AjdunXLWyYkJISOHTuycuXKiz5PZGRkvuJx9OhRHnjgAT7//PO8q1+KiIhI4Cry8mGaJsOHD6d9+/Y0btwYgCNHjgAQExOTb9mYmJi8eb934sQJ/vWvf+UbFTFNkyFDhvDggw/SqlWrInoFIiIi4ktFfpKxYcOGsWHDhgtesfb3l8M2TfOCl8hOS0vj5ptvpmHDhvzzn//Mm/6f//yHtLQ0nnnmGd8HFxERkSJRpCMfDz/8MLNnz2bx4sVUq1Ytb3psbCzAeaMcKSkp542GpKen0717d8qWLcuMGTNwOBx58xYtWsSqVasICQkhKCgo75LcrVq1YvDgwUX1skREROQKFEn5ME2TYcOGMX36dBYtWkRCQkK++QkJCcTGxrJw4cK8abm5uSxdupR27drlTUtLS6Nbt24EBwcze/ZsQkND8z3P+++/z88//8z69etZv3498+fPB2DSpEm8+uqrRfHSRERE5AoVyWaXoUOHMmHCBGbNmkVERETeCEdUVBRhYWEYhsFjjz3Ga6+9RmJiIomJibz22muEh4dz5513At4Rj27dupGZmckXX3xBWloaaWlpAFSuXBm73U716tXzrbds2bIA1K5dO99Ii4iIiASOIikfI0eOBKBTp075po8ZM4YhQ4YA3vNyZGVl8dBDD3Hq1CnatGnDN998Q0REBABr1qxh9erVAHmbU87Zu3cvNWvWLIroIiIiUsR0YTkRERHxK13bRURERPxK5UNERET8SuVDRERE/ErlQ0RERPxK5UNERET8SuVDRERE/ErlQ0RERPxK5UNEfGLJkiUYhsHp06etjiIiAU4nGRORy9KpUyeaNWvGu+++C3ivz3Ty5EliYmIueHVqEZFziuT06iJS+gQHB+ddsVpE5GK02UVECm3IkCEsXbqU9957D8MwMAyDsWPH5tvsMnbsWMqVK8fcuXOpV68e4eHh9O/fn4yMDMaNG0fNmjUpX748Dz/8MG63O++5c3NzefLJJ6latSplypShTZs2LFmyxJoXKiJFQiMfIlJo7733Hjt27KBx48a8/PLLAGzevPm85TIzM3n//feZOHEi6enp9OvXj379+lGuXDnmz5/Pnj17uPXWW2nfvj0DBw4E4E9/+hP79u1j4sSJxMXFMWPGDLp3787GjRtJTEz06+sUkaKh8iEihRYVFUVwcDDh4eF5m1q2bdt23nJOp5ORI0dSu3ZtAPr378/nn3/O0aNHKVu2LA0bNqRz584sXryYgQMHsnv3br788kt++eUX4uLiAHjiiSf46quvGDNmDK+99pr/XqSIFBmVDxEpMuHh4XnFAyAmJoaaNWtStmzZfNNSUlIAWLt2LaZpUrdu3XzPk5OTQ8WKFf0TWkSKnMqHiBQZh8OR73fDMC44zePxAODxeLDb7axZswa73Z5vud8WFhEp3lQ+ROSyBAcH59tR1BeaN2+O2+0mJSWFDh06+PS5RSRw6GgXEbksNWvWZPXq1ezbt4/jx4/njV5cibp163LXXXdxzz33MH36dPbu3UtSUhJvvPEG8+fP90FqEQkEKh8iclmeeOIJ7HY7DRs2pHLlyhw4cMAnzztmzBjuuece/va3v1GvXj169erF6tWriY+P98nzi4j1dIZTERER8SuNfIiIiIhfqXyIiIiIX6l8iIiIiF+pfIiIiIhfqXyIiIiIX6l8iIiIiF+pfIiIiIhfqXyIiIiIX6l8iIiIiF+pfIiIiIhfqXyIiIiIX6l8iIiIiF/9PxPCqQTKfxPPAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#first, load in the simple model of case 1. Copy it.\n", + "case2_example1 = case1(\"case2_example3\")\n", + "case2_base_model = case2_example1.create_model(copy = True)\n", + "\n", + "#implement the second model\n", + "case2_example3 = case2(\"case2_example3\", model = case2_base_model)\n", + "case2_example3.create_model()" + ] + }, + { + "cell_type": "markdown", + "id": "c2a05bd1-bb84-4221-9b79-87a02066de8e", + "metadata": {}, + "source": [ + "### Example 4: low target level in third basin, results in incorrect flow direction\n", + "\n", + "The water level in each basin, including the boundaries, are too low. No water should be flowing. However, only the initial level is higher than the target level of the third basin. Water should only flow from the third basin to the last level boundary." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "b7244d23-d1da-48a7-83c2-64d361a10470", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0030.0000001.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
12024-01-01 00:00:0040.0000000.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
22024-01-01 00:00:0082250.0127501.5000000.00.167-0.1671580.00.0001730.00.0-1.552110e-05-2.0
32024-01-01 00:01:0030.0000001.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
42024-01-01 00:01:0040.0000000.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
..........................................
388752024-01-09 23:58:0040.0000000.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
388762024-01-09 23:58:008202.6649730.4501780.00.000-0.0000520.00.0000520.00.0-1.265903e-10-2.0
388772024-01-09 23:59:0030.0000001.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
388782024-01-09 23:59:0040.0000000.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
388792024-01-09 23:59:008202.6618460.4501750.00.000-0.0000520.00.0000520.00.0-1.265905e-10-2.0
\n", + "

38880 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " time node_id storage level inflow_rate \\\n", + "0 2024-01-01 00:00:00 3 0.000000 1.000000 0.0 \n", + "1 2024-01-01 00:00:00 4 0.000000 0.000000 0.0 \n", + "2 2024-01-01 00:00:00 8 2250.012750 1.500000 0.0 \n", + "3 2024-01-01 00:01:00 3 0.000000 1.000000 0.0 \n", + "4 2024-01-01 00:01:00 4 0.000000 0.000000 0.0 \n", + "... ... ... ... ... ... \n", + "38875 2024-01-09 23:58:00 4 0.000000 0.000000 0.0 \n", + "38876 2024-01-09 23:58:00 8 202.664973 0.450178 0.0 \n", + "38877 2024-01-09 23:59:00 3 0.000000 1.000000 0.0 \n", + "38878 2024-01-09 23:59:00 4 0.000000 0.000000 0.0 \n", + "38879 2024-01-09 23:59:00 8 202.661846 0.450175 0.0 \n", + "\n", + " outflow_rate storage_rate precipitation evaporation drainage \\\n", + "0 0.000 0.000000 0.0 0.000000 0.0 \n", + "1 0.000 0.000000 0.0 0.000000 0.0 \n", + "2 0.167 -0.167158 0.0 0.000173 0.0 \n", + "3 0.000 0.000000 0.0 0.000000 0.0 \n", + "4 0.000 0.000000 0.0 0.000000 0.0 \n", + "... ... ... ... ... ... \n", + "38875 0.000 0.000000 0.0 0.000000 0.0 \n", + "38876 0.000 -0.000052 0.0 0.000052 0.0 \n", + "38877 0.000 0.000000 0.0 0.000000 0.0 \n", + "38878 0.000 0.000000 0.0 0.000000 0.0 \n", + "38879 0.000 -0.000052 0.0 0.000052 0.0 \n", + "\n", + " infiltration balance_error relative_error \n", + "0 0.0 0.000000e+00 0.0 \n", + "1 0.0 0.000000e+00 0.0 \n", + "2 0.0 -1.552110e-05 -2.0 \n", + "3 0.0 0.000000e+00 0.0 \n", + "4 0.0 0.000000e+00 0.0 \n", + "... ... ... ... \n", + "38875 0.0 0.000000e+00 0.0 \n", + "38876 0.0 -1.265903e-10 -2.0 \n", + "38877 0.0 0.000000e+00 0.0 \n", + "38878 0.0 0.000000e+00 0.0 \n", + "38879 0.0 -1.265905e-10 -2.0 \n", + "\n", + "[38880 rows x 13 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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GElOTtbp06c1b9485eXlKT4+Xps3b1ZMTIwkKS8vr9o1RwAAAMp4vc6IGVhnBAAA66mXdUYAAADqGmEEAACYijACAABMRRgBAACmIowAAABTEUYAAICpCCMAAMBUhBEAAGAqwggAADAVYQQAAJiKMAIAAExFGAEAAKYijAAAAFMRRgAAgKkIIwAAwFSEEQAAYCrCCAAAMBVhBAAAmIowAgAATEUYAQAApiKMAAAAUxFGAACAqQgjAADAVIQRAABgKsIIAAAwFWEEAACYijACAABMRRgBAACmIowAAABTEUYAAICpCCMAAMBUhBEAAGAqwggAADAVYQQAAJiqRmFk8eLFio2NVXBwsBISErRr165K9924caOGDh2qa6+9VmFhYerfv7/efvvtGhcMAAB8i9dhJD09XTNmzNDs2bN14MABDRo0SElJScrNza1w/507d2ro0KHavHmzMjMzNXjwYI0YMUIHDhyodfEAAMD6bIZhGN4c0LdvX/Xu3VtLlixxbYuLi9OoUaOUlpbm0Tm6d++u5ORkPfHEEx7t73A4FB4eroKCAoWFhXlTLgAAMImn399e9YwUFRUpMzNTiYmJbtsTExO1e/duj87hdDp15swZtWjRotJ9CgsL5XA43F4AAMA3eRVGTp06pdLSUkVERLhtj4iI0IkTJzw6x/PPP69z585pzJgxle6Tlpam8PBw1ys6OtqbMgEAgIXUaAKrzWZze28YRrltFVm3bp3mzJmj9PR0tW7dutL9UlNTVVBQ4HodO3asJmUCAAAL8Pdm51atWslut5frBcnPzy/XW3Kl9PR0TZ48Wa+//rqGDBlS5b5BQUEKCgrypjQAAGBRXvWMBAYGKiEhQRkZGW7bMzIyNGDAgEqPW7dunSZOnKg//vGPGj58eM0qBQAAPsmrnhFJSklJ0bhx49SnTx/1799fy5cvV25urqZOnSrp0hDLV199pddee03SpSAyfvx4LVy4UP369XP1qoSEhCg8PLwOmwIAAKzI6zCSnJys06dPa968ecrLy1N8fLw2b96smJgYSVJeXp7bmiPLli1TSUmJpk2bpmnTprm2T5gwQWvWrKl9CwAAgKV5vc6IGVhnBAAA66mXdUYAAADqGmEEAACYijACAABMRRgBAACmIowAAABTEUYAAICpCCMAAMBUhBEAAGAqwggAADAVYQQAAJiKMAIA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DmjQoEFKSkpydZ2eO3dON910k5555hmTK/VOUVGRMjMzlZiY6LY9MTFRu3fvrvCYgoIC2Ww2NW/evAEqrDlv21ZUVKTly5crPDxcPXv2bKgya8STtjmdTo0bN06PPvqounfvbkaZNeLp72379u1q3bq1OnfurJ///OfKz89v6FK9Vl3bnE6n3nrrLXXu3Fm33367Wrdurb59+2rTpk3mFOwlb//OnTx5Um+99ZYmT57cUCXWmCdtGzhwoN5880199dVXMgxD27Zt06effqrbb7/djJI9Vl3bCgsLJUnBwcGuz+x2uwIDA/Xee+81aK1maFRh5IUXXtDkyZM1ZcoUxcXFacGCBYqOjnaNB44bN05PPPGEhgwZYnKl3jl16pRKS0sVERHhtj0iIkInTpwot//Fixc1a9YsjR07ttEv8uZp2/72t7+padOmCg4O1osvvqiMjAy1atWqocv1iidte/bZZ+Xv76/p06ebUWKNedK2pKQkrV27Vu+++66ef/557du3T7fddpvrH83Gqrq25efn6+zZs3rmmWc0bNgwbd26VT/+8Y81evRo7dixw6SqPeftvyevvvqqmjVrptGjRzdUiTXmSdteeukldevWTW3btlVgYKCGDRumxYsXa+DAgWaU7LHq2ta1a1fFxMQoNTVV3377rYqKivTMM8/oxIkTysvLM6nqhtNonk1TlhpnzZrltr2q3gOrsdlsbu8Nwyi3rbi4WHfffbecTqcWL17ckOXVSnVtGzx4sLKysnTq1CmtWLFCY8aM0d69e9W6deuGLtVrlbUtMzNTCxcu1AcffFBuH6uo6veWnJzs2h4fH68+ffooJiZGb731liW+2Cprm9PplCSNHDlSDz/8sCSpV69e2r17t5YuXapbbrmlwWutCU/+PZGkVatW6Z577nH7P+7Grqq2vfTSS3r//ff15ptvKiYmRjt37tT999+vyMhIS/yPamVtCwgI0IYNGzR58mS1aNFCdrtdQ4YMUVJSkkmVNqxG0zPibdq3klatWslut5drR35+vlt7i4uLNWbMGOXk5CgjI6PR94pInretSZMm6tixo/r166eVK1fK399fK1eubOhyvVJd23bt2qX8/Hy1a9dO/v7+8vf319GjR/XII4+offv25hTtIU9/b5eLjIxUTExMo5/dX13bWrVqJX9/f3Xr1s3t87i4OEvcTePN727Xrl365JNPNGXKlIYsscaqa9uFCxf0+OOP64UXXtCIESPUo0cPPfDAA0pOTtZvf/tbk6r2jCe/t4SEBGVlZem7775TXl6etmzZotOnTys2NtaMkhtUowkjZTxN+1YSGBiohIQEZWRkuG3PyMjQgAEDJH0fRD777DP94x//UMuWLc0o1WuetK0ihmE0+u7+6to2btw4ffjhh8rKynK9oqKi9Oijj+rtt982qWrP1OT3dvr0aR07dkyRkZENUWKNVde2wMBA3Xjjjfrkk0/cPv/0008VExPTkKXWiDe/u5UrVyohIaHRz88qU13biouLVVxcXO4JsHa73dXj1Vh583sLDw/Xtddeq88++0z79+/XyJEjG7JUc5g0cbacwsJCw263Gxs3bnTbPn36dOPmm29225aTk2O5u2nKbulauXKlcejQIWPGjBlGkyZNjCNHjhjFxcXGnXfeabRt29bIyspyuyWvsLDQ7NKrVVXbzp49a6Smphp79uwxjhw5YmRmZhqTJ082goKC3GaNN1ZVta0iVrqbpqq2nTlzxnjkkUeM3bt3Gzk5Oca2bduM/v37G9ddd53hcDjMLr1a1f3eNm7caAQEBBjLly83PvvsM+Pll1827Ha7sWvXLpMr94wn/10WFBQYoaGhxpIlS0ys1HvVte2WW24xunfvbmzbts344osvjNWrVxvBwcHG4sWLTa68etW17U9/+pOxbds24/Dhw8amTZuMmJgYY/To0SZX3TAaTRgxjEu3Pf3iF79w2xYXF1fudjUrhhHDuHTbckxMjBEYGGj07t3b2LFjh2EY37enote2bdvMLdpDlbXtwoULxo9//GMjKirKCAwMNCIjI40777zT+Ne//mVyxZ6rrG0VsVIYMYzK23b+/HkjMTHRuPbaa42AgACjXbt2xoQJE4zc3FyTK/Zcdb+3lStXGh07djSCg4ONnj17WmKdistV175ly5YZISEhxnfffWdShTVXVdvy8vKMiRMnGlFRUUZwcLDRpUsX4/nnnzecTqeJFXuuqrYtXLjQaNu2revv3K9+9StL/A9pXWhUD8pLT0/XuHHjtHTpUvXv31/Lly/XihUr9NFHHykmJkbffPONcnNzdfz4cQ0fPlzr169Xly5d1KZNG7Vp08bs8gEAQA00qjAiXVoq97nnnlNeXp7i4+P14osv6uabb5YkrVmzRpMmTSp3zJNPPqk5c+Y0cKUAAKAuNLowAgAAri6N7m4aAABwdSGMAAAAUxFGAACAqQgjAADAVIQRAABgKsIIAAAwlelhZOLEiRo1apTZZQAAAJOYHkYAAMDVrVGFkS1btmjgwIFq3ry5WrZsqf/5n//R4cOHXZ8fOXJENptNGzdu1ODBgxUaGqqePXtqz549JlYNAABqo1GFkXPnziklJUX79u3TO++8Iz8/P/34xz8u92jo2bNna+bMmcrKylLnzp3105/+VCUlJSZVDQAAasPf7AIud9ddd7m9X7lypVq3bq1Dhw4pPj7etX3mzJkaPny4JGnu3Lnq3r27Pv/8c3Xt2rVB6wUAALXXqHpGDh8+rLFjx6pDhw4KCwtTbGysJCk3N9dtvx49erj+HBkZKUnKz89vuEIBAECdaVQ9IyNGjFB0dLRWrFihqKgoOZ1OxcfHq6ioyG2/gIAA159tNpsklRvKAQAA1tBowsjp06eVnZ2tZcuWadCgQZKk9957z+SqAABAfWs0YeSaa65Ry5YttXz5ckVGRio3N1ezZs0yuywAAFDPTJ8z4nQ65e/vLz8/P61fv16ZmZmKj4/Xww8/rN/85jdmlwcAAOqZzTAMw8wChg0bpo4dO2rRokVmlgEAAExiWs/It99+q7feekvbt2/XkCFDzCoDAACYzLQ5I/fee6/27dunRx55RCNHjjSrDAAAYDLTh2kAAMDVzfQJrAAA4OpGGAEAAKZqkDCSlpamG2+8Uc2aNVPr1q01atQoffLJJ277GIahOXPmKCoqSiEhIbr11lv10UcfuT7/5ptv9OCDD6pLly4KDQ1Vu3btNH36dBUUFFR4zcLCQvXq1Us2m01ZWVn12TwAAFALDRJGduzYoWnTpun9999XRkaGSkpKlJiYqHPnzrn2ee655/TCCy9o0aJF2rdvn9q0aaOhQ4fqzJkzkqTjx4/r+PHj+u1vf6uDBw9qzZo12rJliyZPnlzhNX/5y18qKiqqIZoHAABqwZQJrF9//bVat26tHTt26Oabb5ZhGIqKitKMGTP02GOPSbrUsxEREaFnn31W9913X4Xnef311/Wzn/1M586dk7//9zcG/f3vf1dKSoo2bNig7t2768CBA+rVq1dDNA0AAHjJlDkjZUMrLVq0kCTl5OToxIkTSkxMdO0TFBSkW265Rbt3767yPGFhYW5B5OTJk/r5z3+u3//+9woNDa2nFgAAgLrS4GHEMAylpKRo4MCBio+PlySdOHFCkhQREeG2b0REhOuzK50+fVq//vWv3XpNDMPQxIkTNXXqVPXp06eeWgAAAOpSgy969sADD+jDDz+s8Im8NpvN7b1hGOW2SZLD4dDw4cPVrVs3Pfnkk67tL7/8shwOh1JTU+u+cAAAUC8atGfkwQcf1Jtvvqlt27apbdu2ru1t2rSRpHK9IPn5+eV6S86cOaNhw4apadOmeuONNxQQEOD67N1339X777+voKAg+fv7q2PHjpKkPn36aMKECfXVLAAAUAsNEkYMw9ADDzygjRs36t1331VsbKzb57GxsWrTpo0yMjJc24qKirRjxw4NGDDAtc3hcCgxMVGBgYF68803FRwc7Hael156Sf/+97+VlZWlrKwsbd68WZKUnp6up59+uh5bCAAAaqpBhmmmTZumP/7xj/rLX/6iZs2auXpAwsPDFRISIpvNphkzZmj+/Pnq1KmTOnXqpPnz5ys0NFRjx46VdKlHJDExUefPn9cf/vAHORwOORwOSdK1114ru92udu3auV23adOmkqTrr7/erScGAAA0Hg0SRpYsWSJJuvXWW922r169WhMnTpR0aV2QCxcu6P7779e3336rvn37auvWrWrWrJkkKTMzU3v37pUk1/BLmZycHLVv375e2wAAAOoHD8oDAACm4tk0AADAVIQRAABgKsIIAAAwFWEEAACYijACAABMRRgBAACmIowAAABTEUYA1Jvt27fLZrPpu+++M7sUAI0Yi54BqDO33nqrevXqpQULFki69Iypb775RhERERU+gRsApAZaDh7A1SkwMND1VG4AqAzDNADqxMSJE7Vjxw4tXLhQNptNNptNa9ascRumWbNmjZo3b66//e1v6tKli0JDQ/WTn/xE586d06uvvqr27dvrmmuu0YMPPqjS0lLXuYuKivTLX/5S1113nZo0aaK+fftq+/bt5jQUQJ2jZwRAnVi4cKE+/fRTxcfHa968eZKkjz76qNx+58+f10svvaT169frzJkzGj16tEaPHq3mzZtr8+bN+uKLL3TXXXdp4MCBSk5OliRNmjRJR44c0fr16xUVFaU33nhDw4YN08GDB9WpU6cGbSeAukcYAVAnwsPDFRgYqNDQUNfQzMcff1xuv+LiYi1ZskTXX3+9JOknP/mJfv/73+vkyZNq2rSpunXrpsGDB2vbtm1KTk7W4cOHtW7dOn355ZeKioqSJM2cOVNbtmzR6tWrNX/+/IZrJIB6QRgB0KBCQ0NdQUSSIiIi1L59ezVt2tRtW35+viTpgw8+kGEY6ty5s9t5CgsL1bJly4YpGkC9IowAaFABAQFu7202W4XbnE6nJMnpdMputyszM1N2u91tv8sDDADrIowAqDOBgYFuE0/rwg033KDS0lLl5+dr0KBBdXpuAI0Dd9MAqDPt27fX3r17deTIEZ06dcrVu1EbnTt31j333KPx48dr48aNysnJ0b59+/Tss89q8+bNdVA1ALMRRgDUmZkzZ8put6tbt2669tprlZubWyfnXb16tcaPH69HHnlEXbp00Z133qm9e/cqOjq6Ts4PwFyswAoAAExFzwgAADAVYQQAAJiKMAIAAExFGAEAAKYijAAAAFMRRgAAgKkIIwAAwFSEEQAAYCrCCAAAMBVhBAAAmIowAgAATEUYAQAApvr/mijkO0WUlwoAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#first, load in the simple model of case 1. Copy it.\n", + "case2_example4 = case1(\"case2_example4\")\n", + "case2_base_model = case2_example4.create_model(copy = True)\n", + "\n", + "#implement the second model\n", + "case2_example4 = case2(\"case2_example4\", model = case2_base_model)\n", + "case2_example4.create_model()" + ] + }, + { + "cell_type": "raw", + "id": "d65f9fa7-70e8-4206-81ec-71a64b742083", + "metadata": {}, + "source": [ + "Volgende case zou kunnen zijn dat er tussen twee peilgebieden (met wel of niet andere target levels) er outlets zijn, die van de een naar de ander gaan, en andersom. Maar in principe verwacht ik daar geen gekke situaties: de outlet laat alleen water stromen als dit onder vrij verval kan, en pompt geen water omhoog. Het enige wat wel gek zou kunnen worden, is als beide peilen rond hetzelfde niveau komen. Dan zou het water de ene tijdstap van links naar rechts kunnen stromen, en de andere momenten de andere kant op. Ik kan me voorstellen dat dit tot instabiliteiten leidt. Weet alleen niet zeker of dit gaat optreden bij simpele voorbeelden als hier." + ] + }, + { + "cell_type": "raw", + "id": "7575a037-5d76-469f-a2c0-021248515678", + "metadata": {}, + "source": [ + "Wat wel interessant zou zijn is het toch wel toevoegen van ContinuousControls. Eerst leek dit niet een logische stap, omdat ik wilde dat de outlet zou luisteren naar boven- en benedenstroomse peil. Maar nu doet dat het eigenlijk alleen naar bovenstrooms. \n", + "\n", + "Punt van reflectie: is dat uberhaupt wel de goede aanpak? Hoe weet de basin dan dat het water moet doorlaten? Je kan dit doen door de crest level een stukje lager te zetten dan streefpeil, maar dat houdt dan wel in dat er ALTIJD water stroomt. Qua doorspoeling is dat opzich nog zo gek niet, maar het is niet de meest chique manier. Ook heb je hier dan weinig controle op, wat je misschien wel wil hebben.\n" + ] + }, + { + "cell_type": "raw", + "id": "2776ed89-2c4a-4fe2-b50f-fb2a9eb707e2", + "metadata": {}, + "source": [ + "Conclusie(?): de discrete controls moeten OOK gaan luisteren naar benedenstroomse peil. Dit toch wel doen aan de hand van de vier verschillende opties, afhankelijk wat de streefpeil van peilgebied 1 en peilgebied 2 is. \n", + "\n", + "Om instabiliteiten tegen te gaan is het wellicht goed om de grenzen niet precies op streefpeil te zetten, maar juist met een bepaalde afwijking. De afwijking om water door te mogen voeren van peilgebied 1 naar peilgebied2 moet kunnen zolang het waterniveau van peilgebied 1 niet 5 cm onder streefpeil zakt. De inlaat vanaf de boezem naar peilgebied 1 moet in principe sturen op exact streefpeil. " + ] + }, + { + "cell_type": "raw", + "id": "76c92c05-e7b1-4c9c-a763-b54dfbfb1c5d", + "metadata": {}, + "source": [ + "1) Hoe verhoudt dit zich tot de min_crest_level en een enkele listen_to_node?\n", + "\n", + "De min_crest_level voert met 1 listen_node_id altijd water door. In het geval van hierboven zou water altijd van peilgebied 1 naar peilgebied 2 gaan, terwijl peilgebied 2 wellicht helemaal geen water nodig heeft terwijl de inlaat van de boezem naar peilgebied 1 wel water aan het inlaten is voor peilgebied 2. \n", + "\n", + "\n", + "\n", + "2) Hoe verhoudt de min_crest_level zich met dubbele listen_to_nodes?\n", + "\n", + "Min_Crest_level lijkt me bijna overbodig worden. \n", + "\n", + "\n", + "3) Stel er komt alleen een min_crest_level op de genoemde 5 cm onder streefpeil van peilgebied 1, dat wordt als het ware een schaduw listen node. Dan hoeft de outlet alleen nog maar te luisteren naar de basin die benedenstrooms ligt?\n", + "\n", + "Dat is niet waar, want stel er is een minimum crest level gedefinieerd die 5 cm onder streefpeil ligt van peilgebied 1. Wat als de water stand 2 cm onder streefpeil ligt (dus wel nog boven crest level), en er is geen water nodig in peilgebied 2? --> dan blijft het stromen, terwijl dat niet moet." + ] + }, + { + "cell_type": "raw", + "id": "b43144a5-e2fc-486b-a2ea-6c81a295abf7", + "metadata": {}, + "source": [ + "Conclusie: vorige conclusie is correct. Luisteren naar zowel boven- als benedestrooms." + ] + }, + { + "cell_type": "raw", + "id": "672b28d7-806a-42a3-a584-15ff3c59273f", + "metadata": {}, + "source": [ + "Stappenplan voor AGV:\n", + "\n", + "Loopen per DiscreteControl lijkt mij geen goed idee. \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "15e38a1d-5017-4432-9538-4a94f5c27937", + "metadata": {}, + "source": [ + "# Thrashbin" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "042e3e2b-1fbe-4932-ba8b-ce878acc8af5", + "metadata": {}, + "outputs": [], + "source": [ + "example1_characteristics = {}\n", + "\n", + "\n", + "#solver\n", + "example1_characteristics['starttime'] = \"2024-01-01 00:00:00\"\n", + "example1_characteristics['endtime'] = \"2024-01-03 00:00:00\"\n", + "example1_characteristics['saveat'] = 60\n", + "\n", + "#boezem settings (LevelBoundary)\n", + "example1_characteristics['boezem1_level'] = 3\n", + "example1_characteristics['boezem2_level'] = 3\n", + "\n", + "#peilgebied settings (Basins)\n", + "example1_characteristics['basin1_profile_area'] = [0.01, 10000.0] \n", + "example1_characteristics['basin1_profile_level'] = [1.0, 5.0] \n", + "example1_characteristics['basin1_initial_level'] = [3]\n", + "example1_characteristics['basin1_target_level'] = [2]\n", + "\n", + "\n", + "example1_characteristics['basin2_profile_area'] = [0.01, 10000.0] \n", + "example1_characteristics['basin2_profile_level'] = [0.0, 5.0] \n", + "example1_characteristics['basin2_initial_level'] = [2] \n", + "example1_characteristics['basin2_target_level'] = [1]\n", + "\n", + "example1_characteristics['evaporation'] = 5 #mm/day, will be converted later to m/s\n", + "example1_characteristics['precipitation'] = 5 #mm/day, will be converted later to m/s\n", + "\n", + "#connection node settings (Outlets, Pumpts)\n", + "example1_characteristics['outlet1_flow_rate'] = 0.010\n", + "example1_characteristics['outlet1_min_crest_level'] = 2.90\n", + "\n", + "example1_characteristics['outlet2_flow_rate'] = 0.010\n", + "example1_characteristics['outlet2_min_crest_level'] = 1.90\n", + "\n", + "example1_characteristics['pump_flow_rate'] = 10/60 #[x] m3 / minute\n", + "\n", + "#general settings\n", + "example1_characteristics['plot'] = True\n", + "example1_characteristics['crs'] = \"EPSG:4326\"\n", + "example1_characteristics['case'] = 'case1'\n", + "example1_characteristics['example'] = 'example1'\n", + "example1_characteristics['results_dir'] = r'../../../../Outlet_tests/'\n", + "example1_characteristics['show_progress'] = False\n", + "example1_characteristics['show_results'] = True\n", + "\n", + "#solver settings\n", + "example1_characteristics['saveat'] = 60\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:ribasim]", + "language": "python", + "name": "conda-env-ribasim-py" + }, + "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.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/peilbeheerst_model/compute_voronoi.ipynb b/src/peilbeheerst_model/compute_voronoi.ipynb new file mode 100644 index 0000000..5e728df --- /dev/null +++ b/src/peilbeheerst_model/compute_voronoi.ipynb @@ -0,0 +1,355 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "5c447874-07f5-4c13-9d5f-f2a3063ae446", + "metadata": {}, + "outputs": [], + "source": [ + "import centerline.geometry\n", + "import geopandas as gpd\n", + "import networkx as nx\n", + "import numpy as np\n", + "import pandas as pd\n", + "import shapely\n", + "import shapely.geometry\n", + "import tqdm.auto as tqdm\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d811cd9a-bd64-4dc6-92f3-b302f7d4ebc9", + "metadata": {}, + "outputs": [], + "source": [ + "df = gpd.read_file(\"../../../../Data_postprocessed/Waterschappen/Wetterskip/Wetterskip.gpkg\", layer=\"peilgebied\")\n", + "df[\"geometry\"] = df.buffer(0)\n", + "df = df[~df.is_empty].copy()\n", + "df[\"geometry\"] = df.geometry.apply(shapely.force_2d)\n", + "df = df[df.peilgebied_cat == 1].copy()\n", + "\n", + "df_crossings = gpd.read_file(\"../../../../Data_crossings/Wetterskip/wetterskip_crossings_v05.gpkg\", layer=\"crossings_hydroobject_filtered\")\n", + "df_crossings = df_crossings[df_crossings.agg_links_in_use].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e0b86228-791d-475d-ac64-ce27e5e50f98", + "metadata": {}, + "outputs": [], + "source": [ + "# Merge polygons with a small buffer. Ook nodig om verbindingen te krijgen in sommige smalle watergangen.\n", + "df_merged = df.buffer(1.0).unary_union\n", + "df_merged = gpd.GeoDataFrame(geometry=list(df_merged.geoms), crs=df.crs)\n", + "\n", + "# add merged id to original polygons\n", + "merged_poly_ids = []\n", + "for row in tqdm.tqdm(df.itertuples(), total=len(df)):\n", + " idxs = df_merged.sindex.query(row.geometry, predicate=\"intersects\")\n", + " if len(idxs) == 0:\n", + " raise ValueError(\"no matches\")\n", + " elif len(idxs) > 1:\n", + " overlaps = []\n", + " for idx in idxs:\n", + " overlap = df_merged.iat[idx].intersection(row.geometry).area / row.geometry.area\n", + " overlaps.append(overlap)\n", + " idx = idxs.index(max(overlaps))\n", + " else:\n", + " idx = idxs[0]\n", + " merged_poly_ids.append(idx)\n", + "df[\"merged_poly_id\"] = merged_poly_ids\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2ea23b73-0db8-4bac-ba30-b36faa3e224b", + "metadata": {}, + "outputs": [], + "source": [ + "df_center = []\n", + "for idx, row in tqdm.tqdm(df_merged.iterrows(), total=len(df_merged)):\n", + " geom = row.geometry\n", + " interp_dist = 10\n", + " if geom.area < 1000:\n", + " interp_dist = 1\n", + " if geom.area < 100:\n", + " interp_dist = 0.1\n", + " if geom.area < 10:\n", + " interp_dist = 0.01\n", + " if geom.area < 1:\n", + " interp_dist = 0.001\n", + " centerpoly = centerline.geometry.Centerline(geom, interpolation_distance=interp_dist)\n", + " centerpoly = centerpoly.geometry\n", + " centerpoly = centerpoly.simplify(1, preserve_topology=True)\n", + " df_center.append(centerpoly)\n", + "df_center = gpd.GeoDataFrame(geometry=list(df_center), crs=df.crs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "429f7bf3-4c68-46b9-a7a8-caf8e1868b55", + "metadata": {}, + "outputs": [], + "source": [ + "df_center_single = df_center.explode(index_parts=False)\n", + "df_center_single = df_center_single.set_index(np.arange(len(df_center_single)), append=True)\n", + "df_center_single.index.set_names([\"poly_id\", \"edge_id\"], inplace=True)\n", + "\n", + "df_center_single_boundary = df_center_single.copy()\n", + "df_center_single_boundary[\"geometry\"] = df_center_single.boundary\n", + "\n", + "# # Check of alles mooi verbonden is\n", + "# for i, row in tqdm.tqdm(enumerate(df_center_single_boundary.itertuples()), total=len(df_center_single_boundary), desc=\"check connections\"):\n", + "# idx = row.Index\n", + "# geom = row.geometry\n", + "\n", + "# idxs, dists = df_center_single_boundary.sindex.nearest(geom, return_distance=True, return_all=True)\n", + "# idxs = idxs[1, :]\n", + "# dists = dists[idxs != i]\n", + "# idxs = idxs[idxs != i]\n", + "# if dists.min() > 0:\n", + "# print(f\"no closed connection for {idx}, {dist.min()=}\")\n", + "# elif len(idxs) == 0:\n", + "# print(f\"No connection for {idx}: {df_center_single_boundary.iloc[idxs].index}\")\n", + "\n", + "df_center_single_boundary_points = df_center_single_boundary.explode(index_parts=True)\n", + "df_center_single_boundary_points[\"node_id\"] = None\n", + "df_center_single_boundary_points[\"connectivity\"] = None\n", + "\n", + "node_id = 0\n", + "idxs, node_ids, connectivity = [], [], []\n", + "for poly_id, poly_group in tqdm.tqdm(df_center_single_boundary_points.groupby(\"poly_id\", sort=False), desc=\"assign node ids\"):\n", + " for geom, group in tqdm.tqdm(poly_group.groupby(\"geometry\", sort=False), desc=f\"{poly_id=}\", leave=False):\n", + " idxs.append(group.index)\n", + " node_ids.append(len(group) * [node_id])\n", + " connectivity.append(len(group) * [len(group)])\n", + " node_id += 1\n", + "\n", + "df_center_single_boundary_points.loc[np.hstack(idxs), \"node_id\"] = np.hstack(node_ids)\n", + "df_center_single_boundary_points.loc[np.hstack(idxs), \"connectivity\"] = np.hstack(connectivity)\n", + "idxs, node_ids, connectivity = None, None, None\n", + "\n", + "assert not pd.isna(df_center_single_boundary_points.node_id).any()\n", + "assert not pd.isna(df_center_single_boundary_points.connectivity).any()\n", + "\n", + "df_center_single_boundary_points = df_center_single_boundary_points.droplevel(-1).set_index(\"node_id\", append=True)\n", + "df_center_single_boundary_points" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a794fa1a-89b2-4bdf-899d-d19d5077fd1a", + "metadata": {}, + "outputs": [], + "source": [ + "# Alleen edges proberen te mergen waarvan beide uiteindes (nodes) connectivity 2 hebben\n", + "pot_reduce = []\n", + "for edge_id, group in tqdm.tqdm(df_center_single_boundary_points.groupby(\"edge_id\", sort=False), desc=\"Find connectivity=2\"):\n", + " if (group.connectivity == 2).all():\n", + " pot_reduce.append(edge_id)\n", + "pot_reduce = df_center_single_boundary.loc[pd.IndexSlice[:, pot_reduce], :].copy()\n", + "\n", + "# Identify merge groups\n", + "edges_visited = {}\n", + "merge_group = 0\n", + "pot_reduce[\"merge_group\"] = None\n", + "for poly_id, polygroup in tqdm.tqdm(pot_reduce.groupby(\"poly_id\", sort=False), desc=\"group edges per polygon\"):\n", + " for edge_id, group in tqdm.tqdm(polygroup.groupby(\"edge_id\", sort=False), leave=False, desc=f\"{poly_id=}\"):\n", + " if edge_id in edges_visited:\n", + " continue\n", + " \n", + " ivec = np.where(polygroup.index.isin(group.index))[0]\n", + " prev_len = 0\n", + " while len(ivec) != prev_len:\n", + " prev_len = len(ivec)\n", + " ivec = polygroup.sindex.query(polygroup.geometry.iloc[ivec], predicate=\"intersects\")\n", + " ivec = np.unique(ivec[1, :])\n", + " \n", + " lbls = polygroup.index[ivec]\n", + " assert len(pot_reduce.loc[lbls].index.get_level_values(\"poly_id\").unique()) == 1\n", + " pot_reduce.loc[lbls, \"merge_group\"] = merge_group\n", + "\n", + " for eid in lbls.get_level_values(\"edge_id\"):\n", + " edges_visited[eid] = True\n", + " merge_group += 1\n", + "\n", + "# Merge\n", + "df_center_single_red = df_center_single[~df_center_single.index.isin(pot_reduce.index)].copy()\n", + "add_rows = []\n", + "for group_id, group in tqdm.tqdm(pot_reduce.groupby(\"merge_group\", dropna=True, sort=False), desc=\"merge edges\"):\n", + " edges_to_merge = np.unique(group.index.get_level_values(\"edge_id\").to_numpy())\n", + " geoms = df_center_single.geometry.loc[pd.IndexSlice[:, edges_to_merge]].tolist()\n", + " geom = shapely.ops.linemerge(geoms)\n", + " assert geom.geom_type == \"LineString\"\n", + " single_row = df_center_single.loc[pd.IndexSlice[:, edges_to_merge[0]], :].copy()\n", + " single_row.loc[:, \"geometry\"] = geom\n", + " add_rows.append(single_row)\n", + "\n", + "# Overwrite dataframes\n", + "df_center_single = pd.concat([df_center_single_red] + add_rows)\n", + "\n", + "df_center_single_boundary = df_center_single.copy()\n", + "df_center_single_boundary[\"geometry\"] = df_center_single.boundary\n", + "\n", + "df_center_single_boundary_points = df_center_single_boundary.explode(index_parts=True)\n", + "df_center_single_boundary_points[\"node_id\"] = None\n", + "idxs, node_ids = [], []\n", + "for node_id, (geom, group) in enumerate(tqdm.tqdm(df_center_single_boundary_points.groupby(\"geometry\", sort=False), desc=\"assign node ids\")):\n", + " idxs.append(group.index)\n", + " node_ids.append(len(group) * [node_id])\n", + "df_center_single_boundary_points.loc[np.hstack(idxs), \"node_id\"] = np.hstack(node_ids)\n", + "assert not pd.isna(df_center_single_boundary_points.node_id).any()\n", + "df_center_single_boundary_points = df_center_single_boundary_points.droplevel(-1).set_index(\"node_id\", append=True)\n", + "\n", + "# # Check of alles mooi verbonden is\n", + "# for i, row in tqdm.tqdm(enumerate(df_center_single_boundary.itertuples()), total=len(df_center_single_boundary), desc=\"check connections\"):\n", + "# idx = row.Index\n", + "# geom = row.geometry\n", + "\n", + "# idxs, dists = df_center_single_boundary.sindex.nearest(geom, return_distance=True, return_all=True)\n", + "# idxs = idxs[1, :]\n", + "# dists = dists[idxs != i]\n", + "# idxs = idxs[idxs != i]\n", + "# if dists.min() > 0:\n", + "# print(f\"no closed connection for {idx}, {dist.min()=}\")\n", + "# elif len(idxs) == 0:\n", + "# print(f\"No connection for {idx}: {df_center_single_boundary.iloc[idxs].index}\")\n", + "\n", + "df_center_single_boundary_points" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9d2e1086-511c-477f-8173-6da9985e67d1", + "metadata": {}, + "outputs": [], + "source": [ + "edge_lengths = dict(zip(df_center_single.index.get_level_values(\"edge_id\"), df_center_single.length))\n", + "shortest_paths = {\"poly_id\": [], \"start_node\": [], \"end_node\": [], \"geometry\": []}\n", + "for poly_id, row in tqdm.tqdm(df_merged.iterrows(), total=len(df_merged)):\n", + " merged_poly = row.geometry\n", + "\n", + " globalids = df.globalid.loc[df.merged_poly_id == poly_id].unique()\n", + " df_crossings_single = df_crossings[df_crossings.peilgebied_from.isin(globalids) | df_crossings.peilgebied_to.isin(globalids)].copy()\n", + "\n", + " # End point\n", + " df_graph = df_center_single_boundary_points.loc[pd.IndexSlice[poly_id, :, :], :].copy()\n", + " idx_end, distance_end = df_graph.sindex.nearest(merged_poly.representative_point(), return_distance=True, return_all=False)\n", + " distance_end = distance_end[0]\n", + " idx_end = idx_end[1,0]\n", + " idx_end = df_graph.index[idx_end]\n", + " end_node = idx_end[-1]\n", + " df_crossings\n", + " # print(f\"{poly_id=}, closest vertex for endpoint at {distance_end:.2f}m ({idx_end=})\")\n", + "\n", + " # Starting points\n", + " idxs, distances = df_graph.sindex.nearest(df_crossings_single.geometry, return_distance=True, return_all=False)\n", + " idx_cross = df_crossings_single.iloc[idxs[0, :]].index\n", + " df_crossings_single.loc[idx_cross, \"start_node\"] = df_graph.iloc[idxs[1, :]].index.get_level_values(\"node_id\")\n", + " df_crossings.loc[idx_cross, \"start_node\"] = df_graph.iloc[idxs[1, :]].index.get_level_values(\"node_id\")\n", + " start_nodes = df_crossings_single[\"start_node\"].dropna().unique().astype(int).tolist()\n", + "\n", + " # Make network for this polygon\n", + " node_ids = df_graph.index.get_level_values(\"node_id\")\n", + " graph = nx.Graph()\n", + "\n", + " # Add nodes and edges\n", + " graph.add_nodes_from(node_ids.unique().tolist())\n", + " for edge_id, group in df_graph.groupby(\"edge_id\", sort=False):\n", + " node1, node2 = group.index.get_level_values(\"node_id\").tolist()\n", + " graph.add_edge(node1, node2, weight=edge_lengths[edge_id])\n", + "\n", + " # Determine shortest path for each start node\n", + " for start_node in tqdm.tqdm(start_nodes, leave=False, desc=f\"{poly_id=}\"):\n", + " try:\n", + " # node_path = nx.dijkstra_path(graph, start_node, end_node)\n", + " node_path = nx.astar_path(graph, start_node, end_node)\n", + " edges = df_graph.loc[pd.IndexSlice[:, :, node_path]].index.get_level_values(\"edge_id\").to_numpy()\n", + " geom = shapely.ops.linemerge(df_center_single.geometry.loc[pd.IndexSlice[poly_id, edges]].tolist())\n", + " shortest_paths[\"poly_id\"].append(poly_id)\n", + " shortest_paths[\"start_node\"].append(start_node)\n", + " shortest_paths[\"end_node\"].append(end_node)\n", + " shortest_paths[\"geometry\"].append(geom)\n", + " except Exception as e:\n", + " print(e)\n", + " pass\n", + "\n", + "df_startcrossings = df_crossings[~pd.isna(df_crossings.start_node)].copy()\n", + "shortest_paths = gpd.GeoDataFrame(shortest_paths, geometry=\"geometry\", crs=df_crossings.crs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "472c5702-5b9c-4599-907f-74465ae09b8c", + "metadata": {}, + "outputs": [], + "source": [ + "df_merged.to_file(\"test_voronoi.gpkg\", layer=\"merged_poly\")\n", + "df_center_single.to_file(\"test_voronoi.gpkg\", layer=\"edges\")\n", + "df_center_single_boundary_points.to_file(\"test_voronoi.gpkg\", layer=\"nodes\")\n", + "shortest_paths.to_file(\"test_voronoi.gpkg\", layer=\"shortest_paths\")\n", + "df_startcrossings.to_file(\"test_voronoi.gpkg\", layer=\"start_crossings\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0bb4e2be-66f5-4bfd-88f1-c9e0e7a1e78c", + "metadata": {}, + "outputs": [], + "source": [ + "# # Check of alles mooi verbonden is\n", + "# for poly_id, polygroup in tqdm.tqdm(df_center_single_boundary.groupby(\"poly_id\", sort=False), desc=\"check connections\"):\n", + "# for i, row in enumerate(polygroup.itertuples()):\n", + "# idx = row.Index\n", + "# geom = row.geometry\n", + " \n", + "# idxs = polygroup.sindex.query(geom, predicate=\"intersects\")\n", + "# idxs = idxs[idxs != i]\n", + "# dists = polygroup.geometry.iloc[idxs].distance(row.geometry)\n", + "# if dists.min() > 0:\n", + "# print(f\"no closed connection for {idx}, {dist.min()=}\")\n", + "# if len(idxs) == 0:\n", + "# print(f\"No connection for {idx}: {polygroup.iloc[idxs].index}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fd42deff-1761-4489-bab6-b2f99fa37093", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:ribasim]", + "language": "python", + "name": "conda-env-ribasim-py" + }, + "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.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From ea2573fc643124011cc3d6120686995bc2380b64 Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Wed, 7 Aug 2024 13:49:08 +0200 Subject: [PATCH 12/25] Created python file to test the outlets, and gain experience with thise type of node --- .../peilbeheerst_model/add_storage_basins.py | 4 + .../crossings_to_ribasim.py | 67 +- .../peilbeheerst_model/outlets.py | 623 ++++++++++++++++++ .../peilbeheerst_model/parse_crossings.py | 7 + .../ribasim_feedback_processor.py | 37 +- .../ribasim_parametrization.py | 405 +++++++++++- 6 files changed, 1076 insertions(+), 67 deletions(-) create mode 100644 src/peilbeheerst_model/peilbeheerst_model/outlets.py diff --git a/src/peilbeheerst_model/peilbeheerst_model/add_storage_basins.py b/src/peilbeheerst_model/peilbeheerst_model/add_storage_basins.py index db3cd94..37d887e 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/add_storage_basins.py +++ b/src/peilbeheerst_model/peilbeheerst_model/add_storage_basins.py @@ -40,6 +40,7 @@ def __init__(self, ribasim_toml, model_name, output_folder, include_hoofdwater=F def setup_logging(self): """Set up logging to file and console.""" + # Clear any existing handlers for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) @@ -91,6 +92,7 @@ def get_current_max_nodeid(self): def add_basin_nodes_with_manning_resistance(self): """Add basin nodes with Manning resistance based on meta_categorie.""" + # Get the meta_categorie column from the state DataFrame state_df = self.model.basin.state.df @@ -259,6 +261,7 @@ def connect_nodes(self, new_basin_node_id, manning_node_id, original_node_id): def run(self): """Run the process of adding basin nodes with Manning resistance and writing the updated model""" + self.add_basin_nodes_with_manning_resistance() # self.write_ribasim_model() logging.shutdown() @@ -267,6 +270,7 @@ def run(self): def write_ribasim_model(self): """Write the updated ribasim model to the output directory""" + outputdir = Path(self.output_folder) modelcase_dir = Path(f"updated_{self.model_name.lower()}") diff --git a/src/peilbeheerst_model/peilbeheerst_model/crossings_to_ribasim.py b/src/peilbeheerst_model/peilbeheerst_model/crossings_to_ribasim.py index a4ea5d8..6e21825 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/crossings_to_ribasim.py +++ b/src/peilbeheerst_model/peilbeheerst_model/crossings_to_ribasim.py @@ -96,10 +96,14 @@ def read_files(self): crossings = crossings[crossings.in_use].reset_index(drop=True) # only use the crossings in use if self.model_characteristics["agg_links_in_use"]: - crossings = crossings[crossings.agg_links_in_use].reset_index(drop=True) # only use the crossings in use + crossings = crossings[crossings.agg_links_in_use].reset_index( + drop=True + ) # only use the crossings in use if self.model_characteristics["agg_areas_in_use"]: - crossings = crossings[crossings.agg_areas_in_use].reset_index(drop=True) # only use the crossings in use + crossings = crossings[crossings.agg_areas_in_use].reset_index( + drop=True + ) # only use the crossings in use crossings["geometry"] = gpd.GeoSeries( gpd.points_from_xy(x=crossings["geometry"].x, y=crossings["geometry"].y) @@ -715,7 +719,8 @@ def discard_duplicate_boezems(boezems): # add a column if a shortest path is found edges["bool_SP"] = edges["line_geom"] edges["bool_SP"].loc[edges["bool_SP"].isna()] = False - edges["bool_SP"].loc[edges["bool_SP"]] = True + # edges["bool_SP"].loc[edges["bool_SP"]] = True + edges['bool_SP'].loc[edges['bool_SP']!=False] = True # fill the line geoms with the previous geoms if no shortest path is found edges.line_geom = edges.line_geom.fillna(edges.line_geom_oud) @@ -767,47 +772,51 @@ def change_edge(self, edges, from_node_id_to_change, to_node_id_to_change, from_ def change_boezems_manually(self, edges): if self.model_characteristics["waterschap"] == "HollandsNoorderkwartier": edges = self.change_edge( - edges, from_node_id_to_change=455, to_node_id_to_change=5, from_node_id_geom=456, to_node_id_geom=5 + edges, from_node_id_to_change=447, to_node_id_to_change=3, from_node_id_geom=83, to_node_id_geom=447 ) edges = self.change_edge( - edges, from_node_id_to_change=475, to_node_id_to_change=5, from_node_id_geom=476, to_node_id_geom=5 + edges, from_node_id_to_change=395, to_node_id_to_change=3, from_node_id_geom=68, to_node_id_geom=395 ) edges = self.change_edge( - edges, from_node_id_to_change=574, to_node_id_to_change=5, from_node_id_geom=575, to_node_id_geom=5 + edges, from_node_id_to_change=571, to_node_id_to_change=3, from_node_id_geom=126, to_node_id_geom=571 ) edges = self.change_edge( - edges, from_node_id_to_change=582, to_node_id_to_change=5, from_node_id_geom=584, to_node_id_geom=5 + edges, from_node_id_to_change=1287, to_node_id_to_change=3, from_node_id_geom=226, to_node_id_geom=1287 ) edges = self.change_edge( - edges, from_node_id_to_change=641, to_node_id_to_change=5, from_node_id_geom=642, to_node_id_geom=5 + edges, from_node_id_to_change=911, to_node_id_to_change=3, from_node_id_geom=101, to_node_id_geom=911 ) edges = self.change_edge( - edges, from_node_id_to_change=851, to_node_id_to_change=5, from_node_id_geom=854, to_node_id_geom=5 + edges, from_node_id_to_change=383, to_node_id_to_change=3, from_node_id_geom=65, to_node_id_geom=383 ) edges = self.change_edge( - edges, from_node_id_to_change=957, to_node_id_to_change=5, from_node_id_geom=959, to_node_id_geom=5 + edges, from_node_id_to_change=817, to_node_id_to_change=3, from_node_id_geom=119, to_node_id_geom=817 ) edges = self.change_edge( - edges, from_node_id_to_change=1061, to_node_id_to_change=5, from_node_id_geom=1065, to_node_id_geom=5 + edges, from_node_id_to_change=366, to_node_id_to_change=3, from_node_id_geom=57, to_node_id_geom=366 ) edges = self.change_edge( - edges, from_node_id_to_change=1198, to_node_id_to_change=5, from_node_id_geom=1201, to_node_id_geom=5 + edges, from_node_id_to_change=717, to_node_id_to_change=3, from_node_id_geom=13, to_node_id_geom=717 ) edges = self.change_edge( - edges, from_node_id_to_change=1295, to_node_id_to_change=5, from_node_id_geom=1299, to_node_id_geom=5 + edges, from_node_id_to_change=487, to_node_id_to_change=3, from_node_id_geom=98, to_node_id_geom=487 ) edges = self.change_edge( - edges, from_node_id_to_change=1513, to_node_id_to_change=5, from_node_id_geom=1516, to_node_id_geom=5 + edges, from_node_id_to_change=481, to_node_id_to_change=3, from_node_id_geom=96, to_node_id_geom=481 + ) + + edges = self.change_edge( + edges, from_node_id_to_change=1027, to_node_id_to_change=3, from_node_id_geom=197, to_node_id_geom=1027 ) return edges @@ -870,6 +879,7 @@ def edge(self): _type_ _description_ """ + edge = gpd.GeoDataFrame() # fix the from nodes @@ -900,6 +910,7 @@ def basin(self): _type_ _description_ """ + basin_nodes = self.nodes.loc[self.nodes["type"] == "Basin"][ ["node_id", "streefpeil", "geometry", "basins_area_geom"] ] @@ -937,7 +948,7 @@ def basin(self): basin_static["potential_evaporation"] = 0 basin_static["infiltration"] = 0 basin_static["precipitation"] = 0 - basin_static["urban_runoff"] = 0 + # basin_static["urban_runoff"] = 0 # display(basin_nodes) basin_area = basin_nodes[["node_id", "streefpeil", "basins_area_geom"]] @@ -1054,6 +1065,7 @@ def flow_boundary(self): _type_ _description_ """ + flow_boundary_nodes = self.nodes.loc[self.nodes["type"] == "FlowBoundary"][ ["node_id", "geometry"] ] # .node_id.to_numpy() @@ -1153,6 +1165,7 @@ def outlet(self, model): _type_ _description_ """ + outlet = ribasim.Outlet(static=pd.DataFrame(data={"node_id": [], "flow_rate": []})) return outlet @@ -1604,7 +1617,7 @@ def add_meta_data(self, model, checks, post_processed_data, crossings): points_within = gpd.sjoin( basin_nodes, checks["boezem"], how="inner", predicate="within" ) # find the basins which are within a peilgebied (found in the checks) - model.basin.state.df.meta_categorie.loc[points_within.index] = ( + model.basin.state.df.meta_categorie.loc[points_within.index-1] = ( "hoofdwater" # set these basins to become peilgebied_cat == 1, or 'doorgaand' ) @@ -1616,17 +1629,25 @@ def add_meta_data(self, model, checks, post_processed_data, crossings): right_on="globalid", ) - pump_function = coupled_crossings_pump.merge(model.pump.node.df, on="geometry", suffixes=("", "_duplicate"))[ - ["node_id", "func_afvoer", "func_aanvoer", "func_circulatie"] - ] + pump_function = coupled_crossings_pump.merge( + model.pump.node.df, on="geometry", suffixes=("", "_duplicate") + )[["node_id", "func_afvoer", "func_aanvoer", "func_circulatie"]] # display(pump_function) - coupled_pump_function = model.pump.static.df.merge(pump_function, left_on="node_id", right_on="node_id") + coupled_pump_function = model.pump.static.df.merge( + pump_function, left_on="node_id", right_on="node_id" + ) # add the coupled_pump_function column per column to the model.pump.static.df - func_afvoer = model.pump.static.df.merge(coupled_pump_function, on="node_id", how="left")["func_afvoer"] - func_aanvoer = model.pump.static.df.merge(coupled_pump_function, on="node_id", how="left")["func_aanvoer"] + func_afvoer = model.pump.static.df.merge(coupled_pump_function, on="node_id", how="left")[ + "func_afvoer" + ] + func_aanvoer = model.pump.static.df.merge(coupled_pump_function, on="node_id", how="left")[ + "func_aanvoer" + ] - func_circulatie = model.pump.static.df.merge(coupled_pump_function, on="node_id", how="left")["func_circulatie"] + func_circulatie = model.pump.static.df.merge(coupled_pump_function, on="node_id", how="left")[ + "func_circulatie" + ] model.pump.static.df["meta_func_afvoer"] = func_afvoer model.pump.static.df["meta_func_aanvoer"] = func_aanvoer diff --git a/src/peilbeheerst_model/peilbeheerst_model/outlets.py b/src/peilbeheerst_model/peilbeheerst_model/outlets.py new file mode 100644 index 0000000..23ca8de --- /dev/null +++ b/src/peilbeheerst_model/peilbeheerst_model/outlets.py @@ -0,0 +1,623 @@ +import os +import subprocess +import warnings + +import pandas as pd +import yaml +from ribasim import Model, Node +from ribasim.nodes import basin, discrete_control, level_boundary, outlet, pump +from shapely.geometry import Point + +warnings.filterwarnings("ignore") + + +class case1: + """ + Create the first Ribasim schematisation with outlets. + + It contains the simple case of a boezem, two cascaded peilgebieden with an outlet in between, + after which the water is pumped through a Pump node to the boezem again. + """ + + def __init__(self, case_example_name): + """Initialize the class. Convert the forcing from mm/day to m/s.""" + case_example_path = os.path.join("../../../../Outlet_tests/json", case_example_name + ".json") + + with open(case_example_path) as file: + characteristics = yaml.safe_load(file) + + self.characteristics = characteristics + + # add the example and case to the characteristics + case, example = case_example_name.split("_") + + self.characteristics["case"] = case + self.characteristics["example"] = example + + self.characteristics["evaporation"] = ( + self.characteristics["evaporation"] / 1000 / 3600 / 24 + ) # convert from mm/day to m/s + self.characteristics["precipitation"] = ( + self.characteristics["precipitation"] / 1000 / 3600 / 24 + ) # convert from mm/day to m/s + + def create_empty_model(self): + """Create an empty Ribasim model.""" + model = Model( + starttime=self.characteristics["starttime"], + endtime=self.characteristics["endtime"], + crs=self.characteristics["crs"], + ) + return model + + def add_boezems(self, model): + """Add the boezems to the model, based on the pre-defined model characteristics.""" + # add the boezems + model.level_boundary.add( + Node(node_id=1, geometry=Point(0.0, 0.0), name="boezem1"), + [level_boundary.Static(level=[self.characteristics["boezem1_level"]])], + ) + + model.level_boundary.add( + Node(node_id=2, geometry=Point(6.0, 0.0), name="boezem2"), + [level_boundary.Static(level=[self.characteristics["boezem2_level"]])], + ) + return model + + def add_peilgebieden(self, model): + """Add the peilgebieden to the model, based on the pre-defined model characteristics.""" + # add peilgebied1 + basin1_data = [ + basin.Profile( + area=self.characteristics["basin1_profile_area"], level=self.characteristics["basin1_profile_level"] + ), + basin.Time( + time=pd.date_range(self.characteristics["starttime"], self.characteristics["endtime"]), + drainage=0.0, + potential_evaporation=self.characteristics["evaporation"], + infiltration=0.0, + precipitation=self.characteristics["precipitation"], + ), + basin.State(level=self.characteristics["basin1_initial_level"]), + ] + + model.basin.add(Node(node_id=3, geometry=Point(2.0, 0.0), name="peilgebied1"), basin1_data) + + # add peilgebied2 + basin2_data = [ + basin.Profile( + area=self.characteristics["basin2_profile_area"], level=self.characteristics["basin2_profile_level"] + ), + basin.Time( + time=pd.date_range(self.characteristics["starttime"], self.characteristics["endtime"]), + drainage=0.0, + potential_evaporation=self.characteristics["evaporation"], + infiltration=0.0, + precipitation=self.characteristics["precipitation"], + ), + basin.State(level=self.characteristics["basin2_initial_level"]), + ] + + model.basin.add(Node(node_id=4, geometry=Point(4.0, 0.0), name="peilgebied2"), basin2_data) + + return model + + def add_connection_nodes(self, model): + """Add the "connection nodes" to the model (Outlets, Pumps), based on the pre-defined model characteristics.""" + # add the connection nodes + ( + model.outlet.add( + Node(node_id=5, geometry=Point(1.0, 0.0), name="Outlet1"), + [ + outlet.Static( + control_state=["pass", "block"], + flow_rate=[self.characteristics["outlet1_flow_rate"], 0], + min_crest_level=self.characteristics["outlet1_min_crest_level"], + ) + ], + ), + ) + + model.outlet.add( + Node(node_id=6, geometry=Point(3.0, 0.0), name="Outlet2"), + [ + outlet.Static( + control_state=["pass", "block"], + flow_rate=[self.characteristics["outlet2_flow_rate"], 0], + min_crest_level=self.characteristics["outlet2_min_crest_level"], + ) + ], + ) + + model.pump.add( + Node(node_id=7, geometry=Point(5.0, 0.0), name="Pump1"), + [pump.Static(control_state=["pass", "block"], flow_rate=[self.characteristics["pump1_flow_rate"], 0])], + ) + + return model + + def add_discrete_control(self, model): + """Add discrete control for each "connecton node", such as Pumps and Outlets.""" + # add the discrete control between the boezem and the basin + model.discrete_control.add( + Node(node_id=100, geometry=Point(1, 1), name="Outlet_DC_1"), + [ + discrete_control.Variable( + compound_variable_id=1, + listen_node_id=[1, 3], + listen_node_type=["LevelBoundary", "Basin"], + variable=["level", "Level"], + ), + discrete_control.Condition( + compound_variable_id=1, + greater_than=[2.95, self.characteristics["basin1_target_level"]], + ), + discrete_control.Logic( + truth_state=["FF", "FT", "TF", "TT"], + control_state=[ + "block", + "block", + "pass", + "block", + ], # block 1 & 2: block when boezem level drops below 2.95 + ), + ], + ) + + # add the discrete control between the basins + model.discrete_control.add( + Node(node_id=101, geometry=Point(3, 1), name="Outlet_DC_2"), + [ + discrete_control.Variable( + compound_variable_id=2, + listen_node_id=[3, 4], + listen_node_type=["Basin", "Basin"], + variable=["level", "level"], + ), + discrete_control.Condition( + compound_variable_id=2, + greater_than=[ + self.characteristics["basin1_target_level"] - 0.05, + self.characteristics["basin2_target_level"], + ], + ), + discrete_control.Logic( + truth_state=["FF", "FT", "TF", "TT"], control_state=["block", "block", "pass", "block"] + ), + ], + ) + + # add the discrete control between the basin and the boezem + model.discrete_control.add( + Node(node_id=102, geometry=Point(5, 1), name="Outlet_DC_1"), + [ + discrete_control.Variable( + compound_variable_id=3, + listen_node_id=[4], + listen_node_type=["Basin"], + variable=["level"], + ), + discrete_control.Condition( + compound_variable_id=3, + greater_than=[self.characteristics["basin2_target_level"]], + ), + discrete_control.Logic(truth_state=["F", "T"], control_state=["block", "pass"]), + ], + ) + + return model + + def add_edges(self, model): + """Add edges between each node.""" + # add the edges + model.edge.add(model.level_boundary[1], model.outlet[5]) + model.edge.add(model.outlet[5], model.basin[3]) + model.edge.add(model.basin[3], model.outlet[6]) + model.edge.add(model.outlet[6], model.basin[4]) + model.edge.add(model.basin[4], model.pump[7]) + model.edge.add(model.pump[7], model.level_boundary[2]) + + # add the edges for the discrete control + model.edge.add(model.discrete_control[100], model.outlet[5]) + model.edge.add(model.discrete_control[101], model.outlet[6]) + model.edge.add(model.discrete_control[102], model.pump[7]) + + return model + + def store_model(self, model): + """Plot and store the model.""" + # apply the settings for the solver + model.solver.saveat = self.characteristics["saveat"] + + # plot the model + if self.characteristics["plot"]: + model.plot() + + # toml_dir = os.path.join( + # self.characteristics["results_dir"], self.characteristics["case"], self.characteristics["example"] + # ) + # create the directory where the model should be stored + if not os.path.exists(os.path.join(self.characteristics["results_dir"], self.characteristics["case"])): + os.makedirs(os.path.join(self.characteristics["results_dir"], self.characteristics["case"])) + + # store the model + model.write( + filepath=os.path.join( + self.characteristics["results_dir"], + self.characteristics["case"], + self.characteristics["example"], + "ribasim.toml", + ) + ) + + def run_model(self, model): + """Run the created Ribasim model.""" + if self.characteristics["show_progress"]: + # show progress of the Ribasim model + subprocess.run( + [ + "ribasim", + os.path.join( + self.characteristics["results_dir"], + self.characteristics["case"], + self.characteristics["example"], + "ribasim.toml", + ), + ], + check=False, + ) + else: + subprocess.run( + [ + "ribasim", + os.path.join( + self.characteristics["results_dir"], + self.characteristics["case"], + self.characteristics["example"], + "ribasim.toml", + ), + ], + check=False, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + + def show_results(self, model): + """Load and plot some results.""" + if self.characteristics["show_results"]: + # load in the data + df_basin = pd.read_feather( + os.path.join( + self.characteristics["results_dir"], + self.characteristics["case"], + self.characteristics["example"], + "results", + "basin.arrow", + ) + ) + + # plot the levels + df_basin_wide = df_basin.pivot_table(index="time", columns="node_id", values=["level"]) + df_basin_wide["level"].plot() + + display(df_basin) + + def create_model(self, copy=False): + """Create the model by running all the functions.""" + model = self.create_empty_model() + model = self.add_boezems(model) + model = self.add_peilgebieden(model) + model = self.add_connection_nodes(model) + model = self.add_discrete_control(model) + model = self.add_edges(model) + + if copy: + return model + + else: + self.store_model(model) + self.run_model(model) + self.show_results(model) + + +class case2: + """ + Create the second Ribasim schematisation case with an additional peilgebied. + + It builds upon case1 which had a simple case of a boezem, two cascaded peilgebieden with an outlet in between, + after which the water is pumped through a Pump node to the boezem again. + In this case, a third peilgebied is added with logical flow direction from and to the boezem and other peilgebieden. + """ + + def __init__(self, case_example_name, model): + """Initialize the class. Convert the forcing from mm/day to m/s.""" + case_example_path = os.path.join("../../../../Outlet_tests/json", case_example_name + ".json") + + with open(case_example_path) as file: + characteristics = yaml.safe_load(file) + + # define the characteristics and the base model + self.characteristics = characteristics + self.model = model + + # add the example and case to the characteristics + case, example = case_example_name.split("_") + + self.characteristics["case"] = case + self.characteristics["example"] = example + + self.characteristics["evaporation"] = ( + self.characteristics["evaporation"] / 1000 / 3600 / 24 + ) # convert from mm/day to m/s + self.characteristics["precipitation"] = ( + self.characteristics["precipitation"] / 1000 / 3600 / 24 + ) # convert from mm/day to m/s + + def add_peilgebied(self, model): + """Add the peilgebieden to the model, based on the pre-defined model characteristics.""" + # add peilgebied1 + basin3_data = [ + basin.Profile( + area=self.characteristics["basin3_profile_area"], level=self.characteristics["basin3_profile_level"] + ), + basin.Time( + time=pd.date_range(self.characteristics["starttime"], self.characteristics["endtime"]), + drainage=0.0, + potential_evaporation=self.characteristics["evaporation"], + infiltration=0.0, + precipitation=self.characteristics["precipitation"], + ), + basin.State(level=self.characteristics["basin3_initial_level"]), + ] + + model.basin.add(Node(node_id=8, geometry=Point(3.0, -2.0), name="peilgebied3"), basin3_data) + + return model + + def add_connection_nodes(self, model): + """Add the "connection nodes" to the model (Outlets, Pumps), based on the pre-defined model characteristics.""" + # add the connection nodes + model.outlet.add( + Node(node_id=9, geometry=Point(1.5, -1.0), name="Outlet3"), + [ + outlet.Static( + control_state=["pass", "block"], + flow_rate=[self.characteristics["outlet4_flow_rate"], 0], + min_crest_level=self.characteristics["outlet4_min_crest_level"], + ) + ], + ) + + ( + model.outlet.add( + Node(node_id=10, geometry=Point(2.5, -1.0), name="Outlet4"), + [ + outlet.Static( + control_state=["pass", "block"], + flow_rate=[self.characteristics["outlet3_flow_rate"], 0], + min_crest_level=self.characteristics["outlet3_min_crest_level"], + ) + ], + ), + ) + + model.outlet.add( + Node(node_id=11, geometry=Point(3.5, -1.0), name="Outlet5"), + [ + outlet.Static( + control_state=["pass", "block"], + flow_rate=[self.characteristics["outlet4_flow_rate"], 0], + min_crest_level=self.characteristics["outlet4_min_crest_level"], + ) + ], + ) + + model.pump.add( + Node(node_id=12, geometry=Point(4.5, -1.0), name="Pump2"), + [pump.Static(control_state=["pass", "block"], flow_rate=[self.characteristics["pump2_flow_rate"], 0])], + ) + + return model + + def add_discrete_control(self, model): + """Add discrete control for each "connecton node", such as Pumps and Outlets.""" + # add the discrete control between the boezem and the basin + model.discrete_control.add( + Node(node_id=103, geometry=Point(0, -2), name="Outlet_DC_4"), + [ + discrete_control.Variable( + compound_variable_id=4, + listen_node_id=[1, 8], + listen_node_type=["LevelBoundary", "Basin"], + variable=["level", "level"], + ), + discrete_control.Condition( + compound_variable_id=4, + greater_than=[2.95, self.characteristics["basin3_target_level"]], + ), + discrete_control.Logic( + truth_state=["FF", "FT", "TF", "TT"], control_state=["block", "block", "pass", "block"] + ), + ], + ) + + # add the discrete control between the boezem and the basin + model.discrete_control.add( + Node(node_id=104, geometry=Point(2, -1), name="Outlet_DC_5"), + [ + discrete_control.Variable( + compound_variable_id=5, + listen_node_id=[8, 3], + listen_node_type=["Basin", "Basin"], + variable=["level", "level"], + ), + discrete_control.Condition( + compound_variable_id=5, + greater_than=[ + self.characteristics["basin3_target_level"] - 0.05, + self.characteristics["basin1_target_level"], + ], + ), + discrete_control.Logic( + truth_state=["FF", "FT", "TF", "TT"], control_state=["block", "block", "pass", "block"] + ), + ], + ) + + # add the discrete control between the basins + model.discrete_control.add( + Node(node_id=105, geometry=Point(4, -1), name="Outlet_DC_6"), + [ + discrete_control.Variable( + compound_variable_id=6, + listen_node_id=[8, 4], + listen_node_type=["Basin", "Basin"], + variable=["level", "level"], + ), + discrete_control.Condition( + compound_variable_id=6, + greater_than=[ + self.characteristics["basin3_target_level"] - 0.05, + self.characteristics["basin2_target_level"], + ], + ), + discrete_control.Logic( + truth_state=["FF", "FT", "TF", "TT"], control_state=["block", "block", "pass", "block"] + ), + ], + ) + + # add the discrete control between the basin and the boezem + model.discrete_control.add( + Node(node_id=106, geometry=Point(6, -2), name="Outlet_DC_7"), + [ + discrete_control.Variable( + compound_variable_id=7, + listen_node_id=[8, 2], + listen_node_type=["Basin", "LevelBoundary"], + variable=["level", "level"], + ), + discrete_control.Condition( + compound_variable_id=7, + greater_than=[self.characteristics["basin3_target_level"] - 0.05, 295], + ), + discrete_control.Logic( + truth_state=["FF", "FT", "TF", "TT"], control_state=["block", "block", "pass", "block"] + ), + ], + ) + + return model + + def store_model(self, model): + """Plot and store the model.""" + # apply the settings for the solver + model.solver.saveat = self.characteristics["saveat"] + + # plot the model + if self.characteristics["plot"]: + model.plot() + + # toml_dir = os.path.join( + # self.characteristics["results_dir"], self.characteristics["case"], self.characteristics["example"] + # ) + # create the directory where the model should be stored + if not os.path.exists(os.path.join(self.characteristics["results_dir"], self.characteristics["case"])): + os.makedirs(os.path.join(self.characteristics["results_dir"], self.characteristics["case"])) + + # store the model + model.write( + filepath=os.path.join( + self.characteristics["results_dir"], + self.characteristics["case"], + self.characteristics["example"], + "ribasim.toml", + ) + ) + + def run_model(self, model): + """Run the created Ribasim model.""" + if self.characteristics["show_progress"]: + # show progress of the Ribasim model + subprocess.run( + [ + "ribasim", + os.path.join( + self.characteristics["results_dir"], + self.characteristics["case"], + self.characteristics["example"], + "ribasim.toml", + ), + ], + check=False, + ) + else: + subprocess.run( + [ + "ribasim", + os.path.join( + self.characteristics["results_dir"], + self.characteristics["case"], + self.characteristics["example"], + "ribasim.toml", + ), + ], + check=False, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + + def show_results(self, model): + """Load and plot some results.""" + if self.characteristics["show_results"]: + # load in the data + df_basin = pd.read_feather( + os.path.join( + self.characteristics["results_dir"], + self.characteristics["case"], + self.characteristics["example"], + "results", + "basin.arrow", + ) + ) + + # plot the levels + df_basin_wide = df_basin.pivot_table(index="time", columns="node_id", values=["level"]) + df_basin_wide["level"].plot() + + display(df_basin) + + def add_edges(self, model): + """Add edges between each node.""" + # add the edges + model.edge.add(model.level_boundary[1], model.outlet[9]) + model.edge.add(model.outlet[9], model.basin[8]) + model.edge.add(model.basin[8], model.outlet[10]) + model.edge.add(model.outlet[10], model.basin[3]) + model.edge.add(model.basin[8], model.outlet[11]) + model.edge.add(model.outlet[11], model.basin[4]) + model.edge.add(model.basin[8], model.pump[12]) + model.edge.add(model.pump[12], model.level_boundary[2]) + + # add the edges for the discrete control + model.edge.add(model.discrete_control[103], model.outlet[9]) + model.edge.add(model.discrete_control[104], model.outlet[10]) + model.edge.add(model.discrete_control[105], model.outlet[11]) + model.edge.add(model.discrete_control[106], model.pump[12]) + + return model + + def create_model(self, copy=False): + """Create the model by running all the functions.""" + model = self.add_peilgebied(self.model) + model = self.add_connection_nodes(model) + model = self.add_discrete_control(model) + model = self.add_edges(model) + + if copy: + return model + + else: + self.store_model(model) + self.run_model(model) + self.show_results(model) diff --git a/src/peilbeheerst_model/peilbeheerst_model/parse_crossings.py b/src/peilbeheerst_model/peilbeheerst_model/parse_crossings.py index 33a36b2..cd3aa3c 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/parse_crossings.py +++ b/src/peilbeheerst_model/peilbeheerst_model/parse_crossings.py @@ -364,6 +364,7 @@ def add_krw_to_peilgebieden( gpd.GeoDataFrame _description_ """ + # Add columns to peilgebieden dataframe pgb_krw_id = "owmident" pgb_krw_name = "owmnaam" @@ -452,6 +453,7 @@ def find_crossings_with_peilgebieden( gpd.GeoDataFrame _description_ """ + # Check uniqueness of globalid for lyr in ["peilgebied", layer, filterlayer]: if lyr is None: @@ -843,6 +845,7 @@ def _make_merged_line_stacked( LineString _description_ """ + # Find the line(s) on which the current crossing lies and the directly # connected lines. nrec = 10 @@ -906,6 +909,7 @@ def _add_potential_crossing( dict[tuple[str | None, str | None, float, float], Point] _description_ """ + for crossing in crossing_points.geometry: # Find crossing line with potentially added connections merged_crossing_line, merged_ids = self._make_merged_line( @@ -1012,6 +1016,7 @@ def _find_stacked_crossings( TypeError _description_ """ + dfs = dfc.copy() dfs.insert(len(dfs.columns) - 1, "match_group", 0) dfs.insert(len(dfs.columns) - 1, "match_stacked", 0) @@ -1822,6 +1827,7 @@ def _assign_structure( tuple[gpd.GeoDataFrame, list] _description_ """ + # Find the line objects nearest to the structure _, idxs = self._find_closest_lines( structure_geom, @@ -2091,6 +2097,7 @@ def _aggregate_identical_links(self, dfc: gpd.GeoDataFrame, agg_links: bool) -> gpd.GeoDataFrame _description_ """ + group_col = "agg_links_group" old_use_col = "in_use" new_use_col = "agg_links_in_use" diff --git a/src/peilbeheerst_model/peilbeheerst_model/ribasim_feedback_processor.py b/src/peilbeheerst_model/peilbeheerst_model/ribasim_feedback_processor.py index a1a11bd..954d658 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/ribasim_feedback_processor.py +++ b/src/peilbeheerst_model/peilbeheerst_model/ribasim_feedback_processor.py @@ -51,12 +51,12 @@ def setup_logging(self): for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) - # logging.basicConfig( - # filename=self.log_filename, - # level=logging.DEBUG, - # format='%(asctime)s - %(levelname)s - %(message)s', - # datefmt='%Y-%m-%d %H:%M:%S' - # ) + logging.basicConfig( + filename=self.log_filename, + level=logging.DEBUG, + format='%(asctime)s - %(levelname)s - %(message)s', + datefmt='%Y-%m-%d %H:%M:%S' + ) def load_feedback(self, feedback_excel): df = pd.read_excel(feedback_excel, sheet_name="Feedback_Formulier", skiprows=7) @@ -87,14 +87,15 @@ def get_current_max_nodeid(self): max_id = max(max_ids) return max_id - # def write_ribasim_model(self): - # outputdir = Path(self.output_folder) - # modelcase_dir = Path(f'updated_{self.waterschap.lower()}') + def write_ribasim_model(self): + outputdir = Path(self.output_folder) + # modelcase_dir = Path(f'updated_{self.waterschap.lower()}') - # full_path = outputdir / modelcase_dir - # full_path.mkdir(parents=True, exist_ok=True) + # full_path = outputdir / modelcase_dir + # full_path.mkdir(parents=True, exist_ok=True) - # self.model.write(full_path / "ribasim.toml") + # print(self.output_folder) + self.model.write(outputdir / "ribasim.toml") def update_dataframe_with_new_node_ids(self, node_id_map): for old_id, new_id in node_id_map.items(): @@ -201,19 +202,19 @@ def add_discrete_control_node_for_pump(self, pump_node_id, pump_geometry): logging.info(f"Adding DiscreteControl node for Pump Node ID: {pump_node_id}") control_states = ["off", "on"] - dfs_pump = self.model.pump.static.df - + dfs_pump = ribasim_model.pump.static.df + if "control_state" not in dfs_pump.columns.tolist() or pd.isna(dfs_pump.control_state).all(): dfs_pump_list = [] for control_state in control_states: - df_pump = dfs_pump.copy() + df_pump = ribasim_model.pump.static.df.copy() df_pump["control_state"] = control_state if control_state == "off": df_pump["flow_rate"] = 0.0 dfs_pump_list.append(df_pump) dfs_pump = pd.concat(dfs_pump_list, ignore_index=True) - self.model.pump.static.df = dfs_pump - + ribasim_model.pump.static.df = dfs_pump + cur_max_nodeid = self.get_current_max_nodeid() if cur_max_nodeid < 90000: @@ -587,7 +588,7 @@ def run(self): self.special_preprocessing_for_hollandse_delta() self.process_model() self.save_feedback() - # self.write_ribasim_model() + self.write_ribasim_model() # # Voorbeeld gebruik diff --git a/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py b/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py index c4cf884..ad722a7 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py +++ b/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py @@ -5,6 +5,7 @@ import numpy as np import pandas as pd +import geopandas as gpd import ribasim import tqdm.auto as tqdm from ribasim_nl import CloudStorage @@ -44,7 +45,8 @@ def set_initial_basin_state(ribasim_model): return -def insert_standard_profile(ribasim_model, regular_percentage=10, boezem_percentage=90, depth_profile=2): +def insert_standard_profile(ribasim_model, unknown_streefpeil, regular_percentage=10, boezem_percentage=90, depth_profile=2): + profile = ribasim_model.basin.area.df.copy() profile.node_id, profile.meta_streefpeil = ( profile.node_id.astype(int), @@ -110,7 +112,7 @@ def set_static_forcing(timesteps: int, timestep_size: str, start_time: str, forc Generate static forcing data for a Ribasim-NL model simulation, assigning hydrological inputs to each node in a basin based on specified parameters. - Modifies the ribasim_model object in place by updating its basin static + Modifies the ribasim_model object in place by updating its basin static DataFrame with the new forcing data. Parameters @@ -126,6 +128,7 @@ def set_static_forcing(timesteps: int, timestep_size: str, start_time: str, forc ribasim_model : object A model object containing the basin node data for assigning forcing inputs. """ + """_summary_ Parameters @@ -299,9 +302,12 @@ def create_linestring(row): def add_outlets(ribasim_model, delta_crest_level=0.10): # select all TRC's which are inlaten # display(ribasim_model.tabulated_rating_curve.static.df) - TRC_naar_OL = ribasim_model.tabulated_rating_curve.static.df.loc[ - ribasim_model.tabulated_rating_curve.static.df.meta_type_verbinding == "Inlaat" - ] + # TRC_naar_OL = ribasim_model.tabulated_rating_curve.static.df.loc[ + # ribasim_model.tabulated_rating_curve.static.df.meta_type_verbinding == "Inlaat" + # ] + + #update: change all TRC's to Outlets + TRC_naar_OL = ribasim_model.tabulated_rating_curve.static.df.copy() TRC_naar_OL = TRC_naar_OL.drop_duplicates(subset="node_id", keep="first") TRC_naar_OL = TRC_naar_OL[["node_id"]] @@ -312,7 +318,9 @@ def add_outlets(ribasim_model, delta_crest_level=0.10): # find the min_crest_level # to do so, find the target levels of the (boezem) connected basins. This has to be done by looking within the edges - target_level = TRC_naar_OL.merge(ribasim_model.edge.df, left_on="node_id", right_on="to_node_id", how="left") + target_level = TRC_naar_OL.merge( + ribasim_model.edge.df, left_on="node_id", right_on="to_node_id", how="left" + ) # the basins of which the target_levels should be retrieved, are stored in the column of from_node_id target_level = target_level.merge( @@ -337,7 +345,7 @@ def add_outlets(ribasim_model, delta_crest_level=0.10): # add the outlets to the model ribasim_model.outlet.node.df = outlet[["node_id", "node_type", "geometry"]] - ribasim_model.outlet.static.df = outlet[["node_id", "flow_rate", "meta_categorie"]] + ribasim_model.outlet.static.df = outlet[["node_id", "flow_rate", "min_crest_level", "meta_categorie"]] # remove the TRC's nodes ribasim_model.tabulated_rating_curve.node = ribasim_model.tabulated_rating_curve.node.df.loc[ @@ -426,30 +434,43 @@ def add_discrete_control_nodes(ribasim_model): return +def set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=4, LevelBoundary_level = 0): + '''Create the Q(h)-relations for each TRC. + It starts passing water from target level onwards.''' -def set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=4): - df_edge = ribasim_model.edge.df - df_edge_tab = ribasim_model.tabulated_rating_curve.static.df.merge( - df_edge, left_on="node_id", right_on="to_node_id", how="inner" - ) - df_tab = ribasim_model.basin.state.df.merge(df_edge_tab, left_on="node_id", right_on="from_node_id", how="inner") - df_tab = df_tab[["to_node_id", "active", "level_x", "flow_rate", "control_state", "meta_type_verbinding"]] - df_tab = df_tab.rename(columns={"to_node_id": "node_id", "level_x": "level"}) + #find the originating basin of each TRC + target_level = ribasim_model.edge.df.loc[ribasim_model.edge.df.to_node_type == 'TabulatedRatingCurve'] #select all TRC's. Do this from the edge table, so we can look the basins easily up afterwards + + #find the target level + target_level = pd.merge(left = target_level, + right = ribasim_model.basin.state.df[['node_id', 'level']], + left_on = 'from_node_id', + right_on = 'node_id', + how = 'left') - def adjust_rows(df): - df["row_num"] = df.groupby("node_id").cumcount() + 1 - df.loc[df["row_num"] == 2, "level"] += level_increase - df.loc[df["row_num"] == 2, "flow_rate"] = flow_rate - df.drop(columns="row_num", inplace=True) + target_level.level.fillna(value = LevelBoundary_level, inplace = True) + + #zero flow rate on target level + Qh_table0 = target_level[['to_node_id', 'level']] + Qh_table0 = Qh_table0.rename(columns={'to_node_id':'node_id'}) + Qh_table0['flow_rate'] = 0 - return df + #pre defined flow rate on target level + level increase + Qh_table1 = Qh_table0.copy() + Qh_table1['level'] += level_increase + Qh_table1['flow_rate'] = flow_rate - # Apply the function - df_tab.node_id = df_tab.node_id.astype(int) - df_tab.level = df_tab.level.astype(float) - df_tab.flow_rate = df_tab.flow_rate.astype(float) + #combine tables, sort, reset index + Qh_table = pd.concat([Qh_table0, Qh_table1]) + Qh_table.sort_values(by=['node_id', 'level', 'flow_rate'], inplace=True) + Qh_table.reset_index(drop=True, inplace=True) - ribasim_model.tabulated_rating_curve.static.df = adjust_rows(df_tab) + ribasim_model.tabulated_rating_curve.static.df = Qh_table + + #remove all redundand TRC nodes + ribasim_model.tabulated_rating_curve.node.df = ribasim_model.tabulated_rating_curve.node.df.loc[ribasim_model.tabulated_rating_curve.node.df.node_id.isin(Qh_table.node_id)] + ribasim_model.tabulated_rating_curve.node.df.sort_values(by='node_id', inplace=True) + ribasim_model.tabulated_rating_curve.node.df.reset_index(drop=True, inplace=True) return @@ -500,6 +521,49 @@ def set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.1, fl return +def create_sufficient_Qh_relation_points(ribasim_model): + '''There are more TRC nodes than defined in the static table. + Identify the nodes which occur less than twice in the table, and create a (for now) dummy relation. + Also delete the TRC in the static table if it doesnt occur in the node table + ''' + + # #get rid of all TRC's static rows which do not occur in the node table (assuming the node table is the groundtruth) + # TRC_nodes = ribasim_model.tabulated_rating_curve.node.df.node_id.values + # ribasim_model.tabulated_rating_curve.static.df = ribasim_model.tabulated_rating_curve.static.df.loc[ribasim_model.tabulated_rating_curve.static.df.node_id.isin(TRC_nodes)] + + # #put all TRC's nodes on one pile. So both the static as well as the node df + # TRC_pile = pd.concat([ribasim_model.tabulated_rating_curve.static.df['node_id'], + # ribasim_model.tabulated_rating_curve.node.df['node_id']]) + + # #each node_id should occur at least three times in the pile (once because of the node, twice because of the Qh relation) + # node_id_counts = ribasim_model.tabulated_rating_curve.static.df['node_id'].value_counts() + + # #select all nodes which occur less than 3 times + # unique_node_ids = node_id_counts[node_id_counts < 3].index + + # #create new Qh relations + # zero_flow = ribasim_model.tabulated_rating_curve.static.df[ribasim_model.tabulated_rating_curve.static.df['node_id'].isin(unique_node_ids)] + # one_flow = zero_flow.copy() + # zero_flow.flow_rate = 0 #set flow rate to 0 if on target level + # one_flow.level += 1 #set level 1 meter higher where it discharges 1 m3/s + + # #remove old Qh points + # ribasim_model.tabulated_rating_curve.static.df = ribasim_model.tabulated_rating_curve.static.df.loc[~ribasim_model.tabulated_rating_curve.static.df['node_id'].isin(unique_node_ids)] + + # #add the new Qh points back in the df + # ribasim_model.tabulated_rating_curve.static.df = pd.concat([ribasim_model.tabulated_rating_curve.static.df, + # zero_flow, + # one_flow]) + # #drop duplicates, sort and reset index + # ribasim_model.tabulated_rating_curve.static.df.drop_duplicates(subset = ['node_id', 'level'], inplace = True) + # ribasim_model.tabulated_rating_curve.static.df.sort_values(by=['node_id', 'level', 'flow_rate'], inplace = True) + # ribasim_model.tabulated_rating_curve.node.df.sort_values(by=['node_id'], inplace = True) + # ribasim_model.tabulated_rating_curve.static.df.reset_index(drop = True, inplace = True) + + # print(len(TRC_nodes)) + # print(len(ribasim_model.tabulated_rating_curve.static.df.node_id.unique())) + + return def write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml): # Write Ribasim model to the Z drive @@ -684,6 +748,7 @@ def validate_basin_area(model): :param model: The ribasim model to validate :return: None """ + too_small_basins = [] error = False for index, row in model.basin.node.df.iterrows(): basin_id = int(row["node_id"]) @@ -693,10 +758,298 @@ def validate_basin_area(model): if basin_area < 100: error = True print(f"Basin with Node ID {basin_id} has an area smaller than 100 m²: {basin_area} m²") + too_small_basins.append(basin_id) if not error: print("All basins are larger than 100 m²") + return + + + + + +def identify_node_meta_categorie(ribasim_model): + """ + Identify the meta_categorie of each Outlet, Pump and LevelBoundary. + It checks whether they are inlaten en uitlaten from a boezem, buitenwater or just regular peilgebieden. + + This will determine the rules of the control nodes. + """ + #create new columsn to store the meta categorie of each node + ribasim_model.outlet.static.df['meta_categorie'] = np.nan + ribasim_model.pump.static.df['meta_categorie'] = np.nan + + #select all basins which are not "bergend" + basin_nodes = ribasim_model.basin.state.df.copy() + peilgebied_basins = basin_nodes.loc[basin_nodes.meta_categorie == 'doorgaand', 'node_id'] + boezem_basins = basin_nodes.loc[basin_nodes.meta_categorie == 'hoofdwater', 'node_id'] + + #select the nodes which originate from a boezem, and the ones which go to a boezem. Use the edge table for this. + nodes_from_boezem = ribasim_model.edge.df.loc[ribasim_model.edge.df.from_node_id.isin(boezem_basins), 'to_node_id'] + nodes_to_boezem = ribasim_model.edge.df.loc[ribasim_model.edge.df.to_node_id.isin(boezem_basins), 'from_node_id'] + + #select the nodes which originate from, and go to a boundary + nodes_from_boundary = ribasim_model.edge.df.loc[ribasim_model.edge.df.from_node_type == 'LevelBoundary', 'to_node_id'] + nodes_to_boundary = ribasim_model.edge.df.loc[ribasim_model.edge.df.to_node_type == 'LevelBoundary', 'from_node_id'] + + #identify the INlaten from the boezem, both stuwen (outlets) and gemalen (pumps) + ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem), 'meta_categorie'] = 'Inlaat boezem, stuw' + ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem), 'meta_categorie'] = 'Inlaat boezem, gemaal' + + #identify the UITlaten from the boezem, both stuwen (outlets) and gemalen (pumps) + ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem), 'meta_categorie'] = 'Uitlaat boezem, stuw' + ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem), 'meta_categorie'] = 'Uitlaat boezem, gemaal' + + #identify the outlets and pumps at the regular peilgebieden + ribasim_model.outlet.static.df.loc[~((ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem)) | (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem))), 'meta_categorie'] = 'Reguliere stuw' + ribasim_model.pump.static.df.loc[~((ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem)) | (ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem))), 'meta_categorie'] = 'Reguliere gemaal' + + + #repeat for the boundary nodes + #identify the buitenwater uitlaten and inlaten. A part will be overwritten later, if its a boundary & boezem. + ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.node_id.isin(nodes_to_boundary), 'meta_categorie'] = 'Uitlaat buitenwater peilgebied, stuw' + ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.node_id.isin(nodes_to_boundary), 'meta_categorie'] = 'Uitlaat buitenwater peilgebied, gemaal' + + ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.node_id.isin(nodes_from_boundary), 'meta_categorie'] = 'Inlaat buitenwater peilgebied, stuw' + ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.node_id.isin(nodes_from_boundary), 'meta_categorie'] = 'Inlaat buitenwater peilgebied, gemaal' + + #boundary & boezem. This is the part where a portion of the already defined meta_categorie will be overwritten by the code above. + ribasim_model.outlet.static.df.loc[(ribasim_model.outlet.static.df.node_id.isin(nodes_to_boundary)) & (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem)), 'meta_categorie'] = 'Uitlaat buitenwater boezem, stuw' + ribasim_model.pump.static.df.loc[(ribasim_model.pump.static.df.node_id.isin(nodes_to_boundary)) & (ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem)), 'meta_categorie'] = 'Uitlaat buitenwater boezem, gemaal' + + ribasim_model.outlet.static.df.loc[(ribasim_model.outlet.static.df.node_id.isin(nodes_from_boundary)) & (ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem)), 'meta_categorie'] = 'Inlaat buitenwater boezem, stuw' + ribasim_model.pump.static.df.loc[(ribasim_model.pump.static.df.node_id.isin(nodes_from_boundary)) & (ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem)), 'meta_categorie'] = 'Inlaat buitenwater boezem, gemaal' + + return + +def add_discrete_control(ribasim_model): + """ + Add discrete control nodes to the network. The rules are based on the meta_categorie of each node. + """ + + # first, remove all Discrete Control if its present + ribasim_model.discrete_control.node.df = ribasim_model.discrete_control.node.df.iloc[0:0] + if ribasim_model.discrete_control.condition.df is not None: + ribasim_model.discrete_control.condition.df = ribasim_model.discrete_control.condition.df.iloc[0:0] + ribasim_model.discrete_control.logic.df = ribasim_model.discrete_control.logic.df.iloc[0:0] + ribasim_model.discrete_control.variable.df = ribasim_model.discrete_control.variable.df.iloc[0:0] + # ribasim_model.edge.df = ribasim_model.edge.df.iloc[0:0] + + #find the nodes to change + boezem_naar_peilgebied_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == 'Inlaat boezem, stuw', 'node_id'] + boezem_naar_peilgebied_gemaal = ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.meta_categorie == 'Inlaat boezem, gemaal', 'node_id'] + + #fill the discrete control. Do this table by tables, where the condition table is determined by the meta_categorie + add_discrete_control_partswise(ribasim_model = ribasim_model, + nodes_to_control = boezem_naar_peilgebied_stuw, + upstream_level_offset = 0, + truth_state = ["FF", "FT", "TF", "TT"], + control_state = ["block", "block", "pass", "block"], + flow_rate_block = 0, + flow_rate_pass = 1, + node_type = 'outlet') + + #fill the discrete control. Do this table by tables, where the condition table is determined by the meta_categorie + # add_discrete_control_partswise(ribasim_model = ribasim_model, + # nodes_to_control = boezem_naar_peilgebied_stuw, + # upstream_level_offset = 0, + # truth_state = ["FF", "FT", "TF", "TT"], + # control_state = ["block", "block", "pass", "block"], + # flow_rate_block = 0, + # flow_rate_pass = 10/60, #m3/min + # node_type = 'pump') + + return + + +def add_discrete_control_partswise(ribasim_model, nodes_to_control, upstream_level_offset, truth_state, control_state, flow_rate_block, flow_rate_pass, node_type): + + ### node #################################################### + #add the discrete control .node table. The node_ids are the same as the node_id of the outlet/pump, but 80.000 is added + DC_nodes=pd.DataFrame() + DC_nodes['node_id'] = nodes_to_control + 80000 + + #trace back the node_id which the DiscreteControl controls, including the compoun_variable_id which is set the same as the node_id + DC_nodes['meta_control_node_id'] = nodes_to_control + DC_nodes['meta_compound_variable_id'] = DC_nodes['node_id'] + DC_nodes['node_type'] = 'DiscreteControl' + DC_nodes = DC_nodes.sort_values(by='node_id').reset_index(drop=True) + + #retrieve the geometries of the DiscreteControl. Put it at the same location, so they may be stored in either the Outlets or the Pumps, so check both if + if node_type == 'outlet' or node_type == 'Outlet': + DC_nodes['geometry'] = DC_nodes.merge(right=ribasim_model.outlet.node.df[['node_id', 'geometry']], + left_on = 'meta_control_node_id', + right_on = 'node_id', + how = 'left')['geometry'] + elif node_type == 'pump' or node_type == 'Pump': + DC_nodes['geometry'] = DC_nodes.merge(right=ribasim_model.pump.node.df[['node_id', 'geometry']], + left_on = 'meta_control_node_id', + right_on = 'node_id', + how = 'left')['geometry'] + + DC_nodes = DC_nodes[['node_id', 'node_type', 'meta_control_node_id', 'meta_compound_variable_id', 'geometry']] + + #concat the DC_nodes to the ribasim model + ribasim_model.discrete_control.node.df = pd.concat([ribasim_model.discrete_control.node.df, DC_nodes]).sort_values(by='node_id').reset_index(drop=True) + ribasim_model.discrete_control.node.df = gpd.GeoDataFrame(ribasim_model.discrete_control.node.df, geometry = 'geometry') + + ### node OUTLET static ### + if node_type == 'outlet' or node_type == 'Outlet': + + #df when water is blocked + outlet_static_block = ribasim_model.outlet.static.df.copy() + outlet_static_block['control_state'] = 'block' + outlet_static_block['flow_rate'] = flow_rate_block + outlet_static_block['min_crest_level'] = np.nan #min crest level is redundant, as control is defined for both upstream as well as downstream levels + + #df when water is passed + outlet_static_pass = ribasim_model.outlet.static.df.copy() + outlet_static_pass['control_state'] = 'pass' + outlet_static_pass['flow_rate'] = flow_rate_pass + outlet_static_pass['min_crest_level'] = np.nan #min crest level is redundant, as control is defined for both upstream as well as downstream levels + + outlet_static = pd.concat([outlet_static_block, outlet_static_pass]).sort_values(by=['node_id', 'control_state']).reset_index(drop=True) + ribasim_model.outlet.static.df = outlet_static + + ### node PUMP static ### + if node_type == 'pump' or node_type == 'Pump': + #df when water is blocked + pump_static_block = ribasim_model.pump.static.df.copy() + pump_static_block['control_state'] = 'block' + pump_static_block['flow_rate'] = flow_rate_block + + #df when water is passed + pump_static_pass = ribasim_model.pump.static.df.copy() + pump_static_pass['control_state'] = 'pass' + pump_static_pass['flow_rate'] = flow_rate_pass + + pump_static = pd.concat([pump_static_block, pump_static_pass]).sort_values(by=['node_id', 'control_state']).reset_index(drop=True) + ribasim_model.pump.static.df = pump_static + display(pump_static) + + ### condition #################################################### + # create the DiscreteControl condition table + DC_condition_us = pd.DataFrame() + DC_condition_us['node_id'] = ribasim_model.discrete_control.node.df['node_id'] + DC_condition_us['meta_control_node_id'] = ribasim_model.discrete_control.node.df['meta_control_node_id'] + DC_condition_us['compound_variable_id'] = ribasim_model.discrete_control.node.df['meta_compound_variable_id'] + DC_condition_ds = DC_condition_us.copy(deep=True) + + #find the greather_than value by looking the corresponding UPstream basin up in the edge table + basin_to_control_node_us = ribasim_model.edge.df.loc[ribasim_model.edge.df.to_node_id.isin(nodes_to_control.values)] #['from_node_id'] + basin_to_control_node_us = basin_to_control_node_us.merge(right = ribasim_model.basin.state.df, + left_on = 'from_node_id', + right_on = 'node_id', + how = 'left')[['to_node_id', 'to_node_type', 'level', 'from_node_id', 'from_node_type']] + basin_to_control_node_us['meta_to_control_node_id'] = basin_to_control_node_us['to_node_id'] + basin_to_control_node_us['meta_to_control_node_type'] = basin_to_control_node_us['to_node_type'] + + DC_condition_us = DC_condition_us.merge(right=basin_to_control_node_us, + left_on = 'meta_control_node_id', + right_on = 'to_node_id') + DC_condition_us['level'] -= upstream_level_offset + + #formatting + DC_condition_us.rename(columns={'level':'greater_than', + 'from_node_id': 'meta_listen_node_id', + 'from_node_type': 'meta_listen_node_type'}, inplace=True) + DC_condition_us = DC_condition_us[['node_id', 'compound_variable_id', 'greater_than', 'meta_listen_node_id', 'meta_listen_node_type', 'meta_to_control_node_id', 'meta_to_control_node_type']] + DC_condition_us['meta_downstream'] = 0 #add a column to sort it later on + + #for each row, there is (incorrectly) another row added where the listen node is the DiscreteControl. This should not be the case. Remove it + DC_condition_us = DC_condition_us.loc[DC_condition_us.meta_listen_node_type != 'DiscreteControl'] + + #the upstream node which is listened to is found. Now, find the downstream listen node. + #basically repeat the same lines as above + basin_to_control_node_ds = ribasim_model.edge.df.loc[ribasim_model.edge.df.from_node_id.isin(nodes_to_control.values)] + basin_to_control_node_ds = basin_to_control_node_ds.merge(right = ribasim_model.basin.state.df, + left_on = 'to_node_id', + right_on = 'node_id', + how = 'left')[['from_node_id', 'from_node_type', 'level', 'to_node_id', 'to_node_type']] + + DC_condition_ds = DC_condition_ds.merge(right=basin_to_control_node_ds, + left_on = 'meta_control_node_id', + right_on = 'from_node_id') + DC_condition_ds['level'] -= upstream_level_offset + + #formatting + DC_condition_ds.rename(columns={'level':'greater_than', + 'to_node_id': 'meta_listen_node_id', + 'to_node_type': 'meta_listen_node_type'}, inplace=True) + DC_condition_ds = DC_condition_ds[['node_id', 'compound_variable_id', 'greater_than', 'meta_listen_node_id', 'meta_listen_node_type']] + DC_condition_ds['meta_downstream'] = 1 #add a column to sort it later on + + #add some more columns so the downstream table matches the upstream table. Not sure why this is not created + DC_condition_ds['meta_to_control_node_id'] = DC_condition_ds.merge(right=DC_condition_us, + on = 'compound_variable_id', + how = 'left')['meta_to_control_node_id'] + DC_condition_ds['meta_to_control_node_type'] = DC_condition_ds.merge(right=DC_condition_us, + on = 'compound_variable_id', + how = 'left')['meta_to_control_node_type'] + #concat the upstream and the downstream condition table + DC_condition = pd.concat([DC_condition_us, DC_condition_ds]) + + #concat the entire DC_condition to the ribasim model + ribasim_model.discrete_control.condition.df = pd.concat([ribasim_model.discrete_control.condition.df, DC_condition]) + ribasim_model.discrete_control.condition.df = ribasim_model.discrete_control.condition.df.sort_values(by=['node_id', 'meta_downstream']).reset_index(drop=True) + + + + ### logic #################################################### + DC_logic = pd.DataFrame() + for i in range(len(truth_state)): + DC_logic_temp = DC_condition.copy()[['node_id']].drop_duplicates() + DC_logic_temp['truth_state'] = truth_state[i] + DC_logic_temp['control_state'] = control_state[i] + + DC_logic = pd.concat([DC_logic, DC_logic_temp]) + + #concat the DC_condition to the ribasim model + ribasim_model.discrete_control.logic.df = pd.concat([ribasim_model.discrete_control.logic.df, DC_logic]) + ribasim_model.discrete_control.logic.df = ribasim_model.discrete_control.logic.df.sort_values(by=['node_id', 'truth_state']).reset_index(drop=True) + + + + ### variable #################################################### + DC_variable = DC_condition.copy()[['node_id', 'compound_variable_id', 'meta_listen_node_id', 'meta_listen_node_type']] + DC_variable.rename(columns={'meta_listen_node_id': 'listen_node_id', 'meta_listen_node_type':'listen_node_type'}, inplace=True) + DC_variable['variable'] = 'level' + + #concat the DC_variable to the ribasim model + ribasim_model.discrete_control.variable.df = pd.concat([ribasim_model.discrete_control.variable.df, DC_variable]) + ribasim_model.discrete_control.variable.df = ribasim_model.discrete_control.variable.df.sort_values(by=['node_id', 'listen_node_id']).reset_index(drop=True) + + ### edge #################################################### + DC_edge = DC_condition.copy()[['node_id', 'meta_to_control_node_id', 'meta_to_control_node_type']] + + #as the DC listens to both the upstream as well as the downstream nodes, it contains twice the node_ids. Only select one. + DC_edge = DC_edge.drop_duplicates(subset='node_id') + DC_edge.rename(columns={'node_id':'from_node_id', + 'meta_to_control_node_id':'to_node_id', + 'meta_to_control_node_type':'to_node_type'}, inplace = True) + + # DC_edge['to_node_type'] = ribasim_model.edge.df.loc[ribasim_model.edge.df.to_node_id == DC_edge.node_id, 'to_node_type'] + DC_edge['from_node_type'] = 'DiscreteControl' + DC_edge['edge_type'] = 'control' + DC_edge['meta_categorie'] = 'DC_control' + + #retrieve the FROM geometry from the DC_nodes. The TO is the same, as the DiscreteControl is on the same location + DC_edge['from_coord'] = DC_nodes['geometry'] + DC_edge['to_coord'] = DC_nodes['geometry'] + + def create_linestring(row): + return LineString([row['from_coord'], row['to_coord']]) + + DC_edge['geometry'] = DC_edge.apply(create_linestring, axis=1) + + DC_edge = DC_edge[['from_node_id', 'from_node_type', 'to_node_id', 'to_node_type', 'edge_type', 'meta_categorie', 'geometry']] + ribasim_model.edge.df = pd.concat([ribasim_model.edge.df, DC_edge]).reset_index(drop=True) + + return + + + ##################### Recycle bin ########################## # def calculate_update_basin_area(ribasim_model, percentage): # """ From 33940ad1391ea94834e228931ed8a9e3c4c4ba6b Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Wed, 7 Aug 2024 13:59:28 +0200 Subject: [PATCH 13/25] Fix ruff issues --- .../peilbeheerst_model/add_storage_basins.py | 5 - .../peilbeheerst_model/controle_output.py | 6 +- .../crossings_to_ribasim.py | 6 +- .../peilbeheerst_model/parse_crossings.py | 7 - .../ribasim_feedback_processor.py | 176 +++-- .../ribasim_parametrization.py | 637 ++++++++++-------- 6 files changed, 462 insertions(+), 375 deletions(-) diff --git a/src/peilbeheerst_model/peilbeheerst_model/add_storage_basins.py b/src/peilbeheerst_model/peilbeheerst_model/add_storage_basins.py index 37d887e..5c7cf43 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/add_storage_basins.py +++ b/src/peilbeheerst_model/peilbeheerst_model/add_storage_basins.py @@ -1,7 +1,6 @@ import logging from pathlib import Path -# import numpy as np import pandas as pd from ribasim import Model from shapely.geometry import Point @@ -40,7 +39,6 @@ def __init__(self, ribasim_toml, model_name, output_folder, include_hoofdwater=F def setup_logging(self): """Set up logging to file and console.""" - # Clear any existing handlers for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) @@ -92,7 +90,6 @@ def get_current_max_nodeid(self): def add_basin_nodes_with_manning_resistance(self): """Add basin nodes with Manning resistance based on meta_categorie.""" - # Get the meta_categorie column from the state DataFrame state_df = self.model.basin.state.df @@ -261,7 +258,6 @@ def connect_nodes(self, new_basin_node_id, manning_node_id, original_node_id): def run(self): """Run the process of adding basin nodes with Manning resistance and writing the updated model""" - self.add_basin_nodes_with_manning_resistance() # self.write_ribasim_model() logging.shutdown() @@ -270,7 +266,6 @@ def run(self): def write_ribasim_model(self): """Write the updated ribasim model to the output directory""" - outputdir = Path(self.output_folder) modelcase_dir = Path(f"updated_{self.model_name.lower()}") diff --git a/src/peilbeheerst_model/peilbeheerst_model/controle_output.py b/src/peilbeheerst_model/peilbeheerst_model/controle_output.py index ffdb118..95c83f1 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/controle_output.py +++ b/src/peilbeheerst_model/peilbeheerst_model/controle_output.py @@ -48,9 +48,9 @@ def initial_final_level(self, control_dict): initial_final_level_df["initial_level"] - initial_final_level_df["final_level"] ) - initial_final_level_df["final_level_within_target"] = ( - True # final level within target level (deviate max 20 cm from streefpeil) is default True ... - ) + initial_final_level_df[ + "final_level_within_target" + ] = True # final level within target level (deviate max 20 cm from streefpeil) is default True ... initial_final_level_df.loc[ (initial_final_level_df["difference_level"] > 0.2) | (initial_final_level_df["difference_level"] < -0.2), "final_level_within_target", diff --git a/src/peilbeheerst_model/peilbeheerst_model/crossings_to_ribasim.py b/src/peilbeheerst_model/peilbeheerst_model/crossings_to_ribasim.py index 6e21825..89db183 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/crossings_to_ribasim.py +++ b/src/peilbeheerst_model/peilbeheerst_model/crossings_to_ribasim.py @@ -720,7 +720,7 @@ def discard_duplicate_boezems(boezems): edges["bool_SP"] = edges["line_geom"] edges["bool_SP"].loc[edges["bool_SP"].isna()] = False # edges["bool_SP"].loc[edges["bool_SP"]] = True - edges['bool_SP'].loc[edges['bool_SP']!=False] = True + edges['bool_SP'].loc[edges['bool_SP']!=False] = True # noqa: E712 # fill the line geoms with the previous geoms if no shortest path is found edges.line_geom = edges.line_geom.fillna(edges.line_geom_oud) @@ -879,7 +879,6 @@ def edge(self): _type_ _description_ """ - edge = gpd.GeoDataFrame() # fix the from nodes @@ -910,7 +909,6 @@ def basin(self): _type_ _description_ """ - basin_nodes = self.nodes.loc[self.nodes["type"] == "Basin"][ ["node_id", "streefpeil", "geometry", "basins_area_geom"] ] @@ -1065,7 +1063,6 @@ def flow_boundary(self): _type_ _description_ """ - flow_boundary_nodes = self.nodes.loc[self.nodes["type"] == "FlowBoundary"][ ["node_id", "geometry"] ] # .node_id.to_numpy() @@ -1165,7 +1162,6 @@ def outlet(self, model): _type_ _description_ """ - outlet = ribasim.Outlet(static=pd.DataFrame(data={"node_id": [], "flow_rate": []})) return outlet diff --git a/src/peilbeheerst_model/peilbeheerst_model/parse_crossings.py b/src/peilbeheerst_model/peilbeheerst_model/parse_crossings.py index cd3aa3c..33a36b2 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/parse_crossings.py +++ b/src/peilbeheerst_model/peilbeheerst_model/parse_crossings.py @@ -364,7 +364,6 @@ def add_krw_to_peilgebieden( gpd.GeoDataFrame _description_ """ - # Add columns to peilgebieden dataframe pgb_krw_id = "owmident" pgb_krw_name = "owmnaam" @@ -453,7 +452,6 @@ def find_crossings_with_peilgebieden( gpd.GeoDataFrame _description_ """ - # Check uniqueness of globalid for lyr in ["peilgebied", layer, filterlayer]: if lyr is None: @@ -845,7 +843,6 @@ def _make_merged_line_stacked( LineString _description_ """ - # Find the line(s) on which the current crossing lies and the directly # connected lines. nrec = 10 @@ -909,7 +906,6 @@ def _add_potential_crossing( dict[tuple[str | None, str | None, float, float], Point] _description_ """ - for crossing in crossing_points.geometry: # Find crossing line with potentially added connections merged_crossing_line, merged_ids = self._make_merged_line( @@ -1016,7 +1012,6 @@ def _find_stacked_crossings( TypeError _description_ """ - dfs = dfc.copy() dfs.insert(len(dfs.columns) - 1, "match_group", 0) dfs.insert(len(dfs.columns) - 1, "match_stacked", 0) @@ -1827,7 +1822,6 @@ def _assign_structure( tuple[gpd.GeoDataFrame, list] _description_ """ - # Find the line objects nearest to the structure _, idxs = self._find_closest_lines( structure_geom, @@ -2097,7 +2091,6 @@ def _aggregate_identical_links(self, dfc: gpd.GeoDataFrame, agg_links: bool) -> gpd.GeoDataFrame _description_ """ - group_col = "agg_links_group" old_use_col = "in_use" new_use_col = "agg_links_in_use" diff --git a/src/peilbeheerst_model/peilbeheerst_model/ribasim_feedback_processor.py b/src/peilbeheerst_model/peilbeheerst_model/ribasim_feedback_processor.py index 954d658..026fbe3 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/ribasim_feedback_processor.py +++ b/src/peilbeheerst_model/peilbeheerst_model/ribasim_feedback_processor.py @@ -6,8 +6,6 @@ import pandas as pd import ribasim from pyproj import Proj, Transformer -from ribasim import Node -from ribasim.nodes import discrete_control from shapely.geometry import LineString, Point # Mapping between feedback form and model names @@ -198,96 +196,96 @@ def remove_node(self, row): except Exception as e: logging.error(f"Error removing node {row['Node ID']}: {e}") - def add_discrete_control_node_for_pump(self, pump_node_id, pump_geometry): - logging.info(f"Adding DiscreteControl node for Pump Node ID: {pump_node_id}") + # def add_discrete_control_node_for_pump(self, pump_node_id, pump_geometry): + # logging.info(f"Adding DiscreteControl node for Pump Node ID: {pump_node_id}") - control_states = ["off", "on"] - dfs_pump = ribasim_model.pump.static.df + # control_states = ["off", "on"] + # dfs_pump = ribasim_model.pump.static.df - if "control_state" not in dfs_pump.columns.tolist() or pd.isna(dfs_pump.control_state).all(): - dfs_pump_list = [] - for control_state in control_states: - df_pump = ribasim_model.pump.static.df.copy() - df_pump["control_state"] = control_state - if control_state == "off": - df_pump["flow_rate"] = 0.0 - dfs_pump_list.append(df_pump) - dfs_pump = pd.concat(dfs_pump_list, ignore_index=True) - ribasim_model.pump.static.df = dfs_pump + # if "control_state" not in dfs_pump.columns.tolist() or pd.isna(dfs_pump.control_state).all(): + # dfs_pump_list = [] + # for control_state in control_states: + # df_pump = ribasim_model.pump.static.df.copy() + # df_pump["control_state"] = control_state + # if control_state == "off": + # df_pump["flow_rate"] = 0.0 + # dfs_pump_list.append(df_pump) + # dfs_pump = pd.concat(dfs_pump_list, ignore_index=True) + # ribasim_model.pump.static.df = dfs_pump - cur_max_nodeid = self.get_current_max_nodeid() - - if cur_max_nodeid < 90000: - new_nodeid = 90000 + cur_max_nodeid + 1 - else: - new_nodeid = cur_max_nodeid + 1 - - basin = self.model.edge.df[ - ((self.model.edge.df["to_node_id"] == pump_node_id) | (self.model.edge.df["from_node_id"] == pump_node_id)) - & ((self.model.edge.df["from_node_type"] == "Basin") | (self.model.edge.df["to_node_type"] == "Basin")) - ] - assert len(basin) >= 1 - basin = basin.iloc[0, :].copy() - if basin["from_node_type"] == "Basin": - compound_variable_id = basin["from_node_id"] - listen_node_id = basin["from_node_id"] - else: - compound_variable_id = basin["to_node_id"] - listen_node_id = basin["to_node_id"] - - df_streefpeilen = self.model.basin.area.df.set_index("node_id") - assert df_streefpeilen.index.is_unique - - try: - self.model.discrete_control.add( - Node(new_nodeid, pump_geometry), - [ - discrete_control.Variable( - compound_variable_id=compound_variable_id, - listen_node_type=["Basin"], - listen_node_id=listen_node_id, - variable=["level"], - ), - discrete_control.Condition( - compound_variable_id=compound_variable_id, - greater_than=[df_streefpeilen.at[listen_node_id, "meta_streefpeil"]], - ), - discrete_control.Logic( - truth_state=["F", "T"], - control_state=control_states, - ), - ], - ) - logging.info(f"Added DiscreteControl Node with ID: {new_nodeid}") - except Exception as e: - logging.error(f"Error adding DiscreteControl Node: {e}") - - try: - self.model.edge.add(self.model.discrete_control[new_nodeid], self.model.pump[pump_node_id]) - logging.info( - f"Added control edge from DiscreteControl Node ID: {new_nodeid} to Pump Node ID: {pump_node_id}" - ) - except Exception as e: - logging.error(f"Error adding control edge: {e}") - - new_node_type_row = pd.DataFrame( - [ - { - "fid": np.nan, - "name": np.nan, - "node_type": "discrete_control", - "subnetwork_id": np.nan, - } - ], - index=[new_nodeid], - ) - - self.df_node_types = pd.concat([self.df_node_types, new_node_type_row]) - - logging.info( - f"Added DiscreteControl node with Node ID: {new_nodeid} at the same location as Pump with Node ID: {pump_node_id}" - ) - logging.info(f"Added control edge from DiscreteControl Node ID: {new_nodeid} to Pump Node ID: {pump_node_id}") + # cur_max_nodeid = self.get_current_max_nodeid() + + # if cur_max_nodeid < 90000: + # new_nodeid = 90000 + cur_max_nodeid + 1 + # else: + # new_nodeid = cur_max_nodeid + 1 + + # basin = self.model.edge.df[ + # ((self.model.edge.df["to_node_id"] == pump_node_id) | (self.model.edge.df["from_node_id"] == pump_node_id)) + # & ((self.model.edge.df["from_node_type"] == "Basin") | (self.model.edge.df["to_node_type"] == "Basin")) + # ] + # assert len(basin) >= 1 + # basin = basin.iloc[0, :].copy() + # if basin["from_node_type"] == "Basin": + # compound_variable_id = basin["from_node_id"] + # listen_node_id = basin["from_node_id"] + # else: + # compound_variable_id = basin["to_node_id"] + # listen_node_id = basin["to_node_id"] + + # df_streefpeilen = self.model.basin.area.df.set_index("node_id") + # assert df_streefpeilen.index.is_unique + + # try: + # self.model.discrete_control.add( + # Node(new_nodeid, pump_geometry), + # [ + # discrete_control.Variable( + # compound_variable_id=compound_variable_id, + # listen_node_type=["Basin"], + # listen_node_id=listen_node_id, + # variable=["level"], + # ), + # discrete_control.Condition( + # compound_variable_id=compound_variable_id, + # greater_than=[df_streefpeilen.at[listen_node_id, "meta_streefpeil"]], + # ), + # discrete_control.Logic( + # truth_state=["F", "T"], + # control_state=control_states, + # ), + # ], + # ) + # logging.info(f"Added DiscreteControl Node with ID: {new_nodeid}") + # except Exception as e: + # logging.error(f"Error adding DiscreteControl Node: {e}") + + # try: + # self.model.edge.add(self.model.discrete_control[new_nodeid], self.model.pump[pump_node_id]) + # logging.info( + # f"Added control edge from DiscreteControl Node ID: {new_nodeid} to Pump Node ID: {pump_node_id}" + # ) + # except Exception as e: + # logging.error(f"Error adding control edge: {e}") + + # new_node_type_row = pd.DataFrame( + # [ + # { + # "fid": np.nan, + # "name": np.nan, + # "node_type": "discrete_control", + # "subnetwork_id": np.nan, + # } + # ], + # index=[new_nodeid], + # ) + + # self.df_node_types = pd.concat([self.df_node_types, new_node_type_row]) + + # logging.info( + # f"Added DiscreteControl node with Node ID: {new_nodeid} at the same location as Pump with Node ID: {pump_node_id}" + # ) + # logging.info(f"Added control edge from DiscreteControl Node ID: {new_nodeid} to Pump Node ID: {pump_node_id}") def add_node(self, row): try: diff --git a/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py b/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py index ad722a7..97822fb 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py +++ b/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py @@ -3,9 +3,9 @@ import sys import warnings +import geopandas as gpd import numpy as np import pandas as pd -import geopandas as gpd import ribasim import tqdm.auto as tqdm from ribasim_nl import CloudStorage @@ -45,8 +45,9 @@ def set_initial_basin_state(ribasim_model): return -def insert_standard_profile(ribasim_model, unknown_streefpeil, regular_percentage=10, boezem_percentage=90, depth_profile=2): - +def insert_standard_profile( + ribasim_model, unknown_streefpeil, regular_percentage=10, boezem_percentage=90, depth_profile=2 +): profile = ribasim_model.basin.area.df.copy() profile.node_id, profile.meta_streefpeil = ( profile.node_id.astype(int), @@ -112,7 +113,7 @@ def set_static_forcing(timesteps: int, timestep_size: str, start_time: str, forc Generate static forcing data for a Ribasim-NL model simulation, assigning hydrological inputs to each node in a basin based on specified parameters. - Modifies the ribasim_model object in place by updating its basin static + Modifies the ribasim_model object in place by updating its basin static DataFrame with the new forcing data. Parameters @@ -128,7 +129,6 @@ def set_static_forcing(timesteps: int, timestep_size: str, start_time: str, forc ribasim_model : object A model object containing the basin node data for assigning forcing inputs. """ - """_summary_ Parameters @@ -306,7 +306,7 @@ def add_outlets(ribasim_model, delta_crest_level=0.10): # ribasim_model.tabulated_rating_curve.static.df.meta_type_verbinding == "Inlaat" # ] - #update: change all TRC's to Outlets + # update: change all TRC's to Outlets TRC_naar_OL = ribasim_model.tabulated_rating_curve.static.df.copy() TRC_naar_OL = TRC_naar_OL.drop_duplicates(subset="node_id", keep="first") TRC_naar_OL = TRC_naar_OL[["node_id"]] @@ -318,9 +318,7 @@ def add_outlets(ribasim_model, delta_crest_level=0.10): # find the min_crest_level # to do so, find the target levels of the (boezem) connected basins. This has to be done by looking within the edges - target_level = TRC_naar_OL.merge( - ribasim_model.edge.df, left_on="node_id", right_on="to_node_id", how="left" - ) + target_level = TRC_naar_OL.merge(ribasim_model.edge.df, left_on="node_id", right_on="to_node_id", how="left") # the basins of which the target_levels should be retrieved, are stored in the column of from_node_id target_level = target_level.merge( @@ -332,9 +330,9 @@ def add_outlets(ribasim_model, delta_crest_level=0.10): target_level.rename(columns={"level": "min_crest_level", "node_id_x": "node_id"}, inplace=True) outlet = target_level.copy(deep=True) - outlet["min_crest_level"] -= ( - delta_crest_level # the peil of the boezem is allowed to lower with this much before no water will flow through the outlet, to prevent - ) + outlet[ + "min_crest_level" + ] -= delta_crest_level # the peil of the boezem is allowed to lower with this much before no water will flow through the outlet, to prevent get_outlet_geometries = ribasim_model.tabulated_rating_curve.node.df.loc[ ribasim_model.tabulated_rating_curve.node.df.node_id.isin(outlet.node_id.to_numpy()) ] @@ -434,42 +432,47 @@ def add_discrete_control_nodes(ribasim_model): return -def set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=4, LevelBoundary_level = 0): - '''Create the Q(h)-relations for each TRC. - It starts passing water from target level onwards.''' - #find the originating basin of each TRC - target_level = ribasim_model.edge.df.loc[ribasim_model.edge.df.to_node_type == 'TabulatedRatingCurve'] #select all TRC's. Do this from the edge table, so we can look the basins easily up afterwards +def set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=4, LevelBoundary_level=0): + """Create the Q(h)-relations for each TRC. It starts passing water from target level onwards.""" + # find the originating basin of each TRC + target_level = ribasim_model.edge.df.loc[ + ribasim_model.edge.df.to_node_type == "TabulatedRatingCurve" + ] # select all TRC's. Do this from the edge table, so we can look the basins easily up afterwards + + # find the target level + target_level = pd.merge( + left=target_level, + right=ribasim_model.basin.state.df[["node_id", "level"]], + left_on="from_node_id", + right_on="node_id", + how="left", + ) - #find the target level - target_level = pd.merge(left = target_level, - right = ribasim_model.basin.state.df[['node_id', 'level']], - left_on = 'from_node_id', - right_on = 'node_id', - how = 'left') + target_level.level.fillna(value=LevelBoundary_level, inplace=True) - target_level.level.fillna(value = LevelBoundary_level, inplace = True) - - #zero flow rate on target level - Qh_table0 = target_level[['to_node_id', 'level']] - Qh_table0 = Qh_table0.rename(columns={'to_node_id':'node_id'}) - Qh_table0['flow_rate'] = 0 + # zero flow rate on target level + Qh_table0 = target_level[["to_node_id", "level"]] + Qh_table0 = Qh_table0.rename(columns={"to_node_id": "node_id"}) + Qh_table0["flow_rate"] = 0 - #pre defined flow rate on target level + level increase + # pre defined flow rate on target level + level increase Qh_table1 = Qh_table0.copy() - Qh_table1['level'] += level_increase - Qh_table1['flow_rate'] = flow_rate + Qh_table1["level"] += level_increase + Qh_table1["flow_rate"] = flow_rate - #combine tables, sort, reset index + # combine tables, sort, reset index Qh_table = pd.concat([Qh_table0, Qh_table1]) - Qh_table.sort_values(by=['node_id', 'level', 'flow_rate'], inplace=True) + Qh_table.sort_values(by=["node_id", "level", "flow_rate"], inplace=True) Qh_table.reset_index(drop=True, inplace=True) ribasim_model.tabulated_rating_curve.static.df = Qh_table - #remove all redundand TRC nodes - ribasim_model.tabulated_rating_curve.node.df = ribasim_model.tabulated_rating_curve.node.df.loc[ribasim_model.tabulated_rating_curve.node.df.node_id.isin(Qh_table.node_id)] - ribasim_model.tabulated_rating_curve.node.df.sort_values(by='node_id', inplace=True) + # remove all redundand TRC nodes + ribasim_model.tabulated_rating_curve.node.df = ribasim_model.tabulated_rating_curve.node.df.loc[ + ribasim_model.tabulated_rating_curve.node.df.node_id.isin(Qh_table.node_id) + ] + ribasim_model.tabulated_rating_curve.node.df.sort_values(by="node_id", inplace=True) ribasim_model.tabulated_rating_curve.node.df.reset_index(drop=True, inplace=True) return @@ -521,12 +524,9 @@ def set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.1, fl return -def create_sufficient_Qh_relation_points(ribasim_model): - '''There are more TRC nodes than defined in the static table. - Identify the nodes which occur less than twice in the table, and create a (for now) dummy relation. - Also delete the TRC in the static table if it doesnt occur in the node table - ''' +def create_sufficient_Qh_relation_points(ribasim_model): + """There are more TRC nodes than defined in the static table. Identify the nodes which occur less than twice in the table, and create a (for now) dummy relation. Also delete the TRC in the static table if it doesnt occur in the node table""" # #get rid of all TRC's static rows which do not occur in the node table (assuming the node table is the groundtruth) # TRC_nodes = ribasim_model.tabulated_rating_curve.node.df.node_id.values # ribasim_model.tabulated_rating_curve.static.df = ribasim_model.tabulated_rating_curve.static.df.loc[ribasim_model.tabulated_rating_curve.static.df.node_id.isin(TRC_nodes)] @@ -538,7 +538,7 @@ def create_sufficient_Qh_relation_points(ribasim_model): # #each node_id should occur at least three times in the pile (once because of the node, twice because of the Qh relation) # node_id_counts = ribasim_model.tabulated_rating_curve.static.df['node_id'].value_counts() - # #select all nodes which occur less than 3 times + # #select all nodes which occur less than 3 times # unique_node_ids = node_id_counts[node_id_counts < 3].index # #create new Qh relations @@ -565,6 +565,7 @@ def create_sufficient_Qh_relation_points(ribasim_model): return + def write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml): # Write Ribasim model to the Z drive ribasim_model.write(path_ribasim_toml) @@ -762,72 +763,111 @@ def validate_basin_area(model): if not error: print("All basins are larger than 100 m²") - return - - - + return -def identify_node_meta_categorie(ribasim_model): +def identify_node_meta_categorie(ribasim_model): """ Identify the meta_categorie of each Outlet, Pump and LevelBoundary. + It checks whether they are inlaten en uitlaten from a boezem, buitenwater or just regular peilgebieden. - This will determine the rules of the control nodes. """ + # create new columsn to store the meta categorie of each node + ribasim_model.outlet.static.df["meta_categorie"] = np.nan + ribasim_model.pump.static.df["meta_categorie"] = np.nan - #create new columsn to store the meta categorie of each node - ribasim_model.outlet.static.df['meta_categorie'] = np.nan - ribasim_model.pump.static.df['meta_categorie'] = np.nan - - #select all basins which are not "bergend" + # select all basins which are not "bergend" basin_nodes = ribasim_model.basin.state.df.copy() - peilgebied_basins = basin_nodes.loc[basin_nodes.meta_categorie == 'doorgaand', 'node_id'] - boezem_basins = basin_nodes.loc[basin_nodes.meta_categorie == 'hoofdwater', 'node_id'] - - #select the nodes which originate from a boezem, and the ones which go to a boezem. Use the edge table for this. - nodes_from_boezem = ribasim_model.edge.df.loc[ribasim_model.edge.df.from_node_id.isin(boezem_basins), 'to_node_id'] - nodes_to_boezem = ribasim_model.edge.df.loc[ribasim_model.edge.df.to_node_id.isin(boezem_basins), 'from_node_id'] - - #select the nodes which originate from, and go to a boundary - nodes_from_boundary = ribasim_model.edge.df.loc[ribasim_model.edge.df.from_node_type == 'LevelBoundary', 'to_node_id'] - nodes_to_boundary = ribasim_model.edge.df.loc[ribasim_model.edge.df.to_node_type == 'LevelBoundary', 'from_node_id'] - - #identify the INlaten from the boezem, both stuwen (outlets) and gemalen (pumps) - ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem), 'meta_categorie'] = 'Inlaat boezem, stuw' - ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem), 'meta_categorie'] = 'Inlaat boezem, gemaal' - - #identify the UITlaten from the boezem, both stuwen (outlets) and gemalen (pumps) - ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem), 'meta_categorie'] = 'Uitlaat boezem, stuw' - ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem), 'meta_categorie'] = 'Uitlaat boezem, gemaal' - - #identify the outlets and pumps at the regular peilgebieden - ribasim_model.outlet.static.df.loc[~((ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem)) | (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem))), 'meta_categorie'] = 'Reguliere stuw' - ribasim_model.pump.static.df.loc[~((ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem)) | (ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem))), 'meta_categorie'] = 'Reguliere gemaal' - - - #repeat for the boundary nodes - #identify the buitenwater uitlaten and inlaten. A part will be overwritten later, if its a boundary & boezem. - ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.node_id.isin(nodes_to_boundary), 'meta_categorie'] = 'Uitlaat buitenwater peilgebied, stuw' - ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.node_id.isin(nodes_to_boundary), 'meta_categorie'] = 'Uitlaat buitenwater peilgebied, gemaal' - - ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.node_id.isin(nodes_from_boundary), 'meta_categorie'] = 'Inlaat buitenwater peilgebied, stuw' - ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.node_id.isin(nodes_from_boundary), 'meta_categorie'] = 'Inlaat buitenwater peilgebied, gemaal' - - #boundary & boezem. This is the part where a portion of the already defined meta_categorie will be overwritten by the code above. - ribasim_model.outlet.static.df.loc[(ribasim_model.outlet.static.df.node_id.isin(nodes_to_boundary)) & (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem)), 'meta_categorie'] = 'Uitlaat buitenwater boezem, stuw' - ribasim_model.pump.static.df.loc[(ribasim_model.pump.static.df.node_id.isin(nodes_to_boundary)) & (ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem)), 'meta_categorie'] = 'Uitlaat buitenwater boezem, gemaal' - - ribasim_model.outlet.static.df.loc[(ribasim_model.outlet.static.df.node_id.isin(nodes_from_boundary)) & (ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem)), 'meta_categorie'] = 'Inlaat buitenwater boezem, stuw' - ribasim_model.pump.static.df.loc[(ribasim_model.pump.static.df.node_id.isin(nodes_from_boundary)) & (ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem)), 'meta_categorie'] = 'Inlaat buitenwater boezem, gemaal' - - return + # peilgebied_basins = basin_nodes.loc[basin_nodes.meta_categorie == "doorgaand", "node_id"] + boezem_basins = basin_nodes.loc[basin_nodes.meta_categorie == "hoofdwater", "node_id"] -def add_discrete_control(ribasim_model): - """ - Add discrete control nodes to the network. The rules are based on the meta_categorie of each node. - """ + # select the nodes which originate from a boezem, and the ones which go to a boezem. Use the edge table for this. + nodes_from_boezem = ribasim_model.edge.df.loc[ribasim_model.edge.df.from_node_id.isin(boezem_basins), "to_node_id"] + nodes_to_boezem = ribasim_model.edge.df.loc[ribasim_model.edge.df.to_node_id.isin(boezem_basins), "from_node_id"] + + # select the nodes which originate from, and go to a boundary + nodes_from_boundary = ribasim_model.edge.df.loc[ + ribasim_model.edge.df.from_node_type == "LevelBoundary", "to_node_id" + ] + nodes_to_boundary = ribasim_model.edge.df.loc[ribasim_model.edge.df.to_node_type == "LevelBoundary", "from_node_id"] + + # identify the INlaten from the boezem, both stuwen (outlets) and gemalen (pumps) + ribasim_model.outlet.static.df.loc[ + ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem), "meta_categorie" + ] = "Inlaat boezem, stuw" + ribasim_model.pump.static.df.loc[ + ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem), "meta_categorie" + ] = "Inlaat boezem, gemaal" + + # identify the UITlaten from the boezem, both stuwen (outlets) and gemalen (pumps) + ribasim_model.outlet.static.df.loc[ + ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem), "meta_categorie" + ] = "Uitlaat boezem, stuw" + ribasim_model.pump.static.df.loc[ + ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem), "meta_categorie" + ] = "Uitlaat boezem, gemaal" + + # identify the outlets and pumps at the regular peilgebieden + ribasim_model.outlet.static.df.loc[ + ~( + (ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem)) + | (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem)) + ), + "meta_categorie", + ] = "Reguliere stuw" + ribasim_model.pump.static.df.loc[ + ~( + (ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem)) + | (ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem)) + ), + "meta_categorie", + ] = "Reguliere gemaal" + + # repeat for the boundary nodes + # identify the buitenwater uitlaten and inlaten. A part will be overwritten later, if its a boundary & boezem. + ribasim_model.outlet.static.df.loc[ + ribasim_model.outlet.static.df.node_id.isin(nodes_to_boundary), "meta_categorie" + ] = "Uitlaat buitenwater peilgebied, stuw" + ribasim_model.pump.static.df.loc[ + ribasim_model.pump.static.df.node_id.isin(nodes_to_boundary), "meta_categorie" + ] = "Uitlaat buitenwater peilgebied, gemaal" + + ribasim_model.outlet.static.df.loc[ + ribasim_model.outlet.static.df.node_id.isin(nodes_from_boundary), "meta_categorie" + ] = "Inlaat buitenwater peilgebied, stuw" + ribasim_model.pump.static.df.loc[ + ribasim_model.pump.static.df.node_id.isin(nodes_from_boundary), "meta_categorie" + ] = "Inlaat buitenwater peilgebied, gemaal" + + # boundary & boezem. This is the part where a portion of the already defined meta_categorie will be overwritten by the code above. + ribasim_model.outlet.static.df.loc[ + (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boundary)) + & (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem)), + "meta_categorie", + ] = "Uitlaat buitenwater boezem, stuw" + ribasim_model.pump.static.df.loc[ + (ribasim_model.pump.static.df.node_id.isin(nodes_to_boundary)) + & (ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem)), + "meta_categorie", + ] = "Uitlaat buitenwater boezem, gemaal" + + ribasim_model.outlet.static.df.loc[ + (ribasim_model.outlet.static.df.node_id.isin(nodes_from_boundary)) + & (ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem)), + "meta_categorie", + ] = "Inlaat buitenwater boezem, stuw" + ribasim_model.pump.static.df.loc[ + (ribasim_model.pump.static.df.node_id.isin(nodes_from_boundary)) + & (ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem)), + "meta_categorie", + ] = "Inlaat buitenwater boezem, gemaal" + + return + +def add_discrete_control(ribasim_model): + """Add discrete control nodes to the network. The rules are based on the meta_categorie of each node.""" # first, remove all Discrete Control if its present ribasim_model.discrete_control.node.df = ribasim_model.discrete_control.node.df.iloc[0:0] if ribasim_model.discrete_control.condition.df is not None: @@ -836,25 +876,31 @@ def add_discrete_control(ribasim_model): ribasim_model.discrete_control.variable.df = ribasim_model.discrete_control.variable.df.iloc[0:0] # ribasim_model.edge.df = ribasim_model.edge.df.iloc[0:0] - #find the nodes to change - boezem_naar_peilgebied_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == 'Inlaat boezem, stuw', 'node_id'] - boezem_naar_peilgebied_gemaal = ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.meta_categorie == 'Inlaat boezem, gemaal', 'node_id'] - - #fill the discrete control. Do this table by tables, where the condition table is determined by the meta_categorie - add_discrete_control_partswise(ribasim_model = ribasim_model, - nodes_to_control = boezem_naar_peilgebied_stuw, - upstream_level_offset = 0, - truth_state = ["FF", "FT", "TF", "TT"], - control_state = ["block", "block", "pass", "block"], - flow_rate_block = 0, - flow_rate_pass = 1, - node_type = 'outlet') - - #fill the discrete control. Do this table by tables, where the condition table is determined by the meta_categorie + # find the nodes to change + boezem_naar_peilgebied_stuw = ribasim_model.outlet.static.df.loc[ + ribasim_model.outlet.static.df.meta_categorie == "Inlaat boezem, stuw", "node_id" + ] + # boezem_naar_peilgebied_gemaal = ribasim_model.pump.static.df.loc[ + # ribasim_model.pump.static.df.meta_categorie == "Inlaat boezem, gemaal", "node_id" + # ] + + # fill the discrete control. Do this table by tables, where the condition table is determined by the meta_categorie + add_discrete_control_partswise( + ribasim_model=ribasim_model, + nodes_to_control=boezem_naar_peilgebied_stuw, + upstream_level_offset=0, + truth_state=["FF", "FT", "TF", "TT"], + control_state=["block", "block", "pass", "block"], + flow_rate_block=0, + flow_rate_pass=1, + node_type="outlet", + ) + + # fill the discrete control. Do this table by tables, where the condition table is determined by the meta_categorie # add_discrete_control_partswise(ribasim_model = ribasim_model, - # nodes_to_control = boezem_naar_peilgebied_stuw, - # upstream_level_offset = 0, - # truth_state = ["FF", "FT", "TF", "TT"], + # nodes_to_control = boezem_naar_peilgebied_stuw, + # upstream_level_offset = 0, + # truth_state = ["FF", "FT", "TF", "TT"], # control_state = ["block", "block", "pass", "block"], # flow_rate_block = 0, # flow_rate_pass = 10/60, #m3/min @@ -862,194 +908,253 @@ def add_discrete_control(ribasim_model): return - -def add_discrete_control_partswise(ribasim_model, nodes_to_control, upstream_level_offset, truth_state, control_state, flow_rate_block, flow_rate_pass, node_type): - - ### node #################################################### - #add the discrete control .node table. The node_ids are the same as the node_id of the outlet/pump, but 80.000 is added - DC_nodes=pd.DataFrame() - DC_nodes['node_id'] = nodes_to_control + 80000 - - #trace back the node_id which the DiscreteControl controls, including the compoun_variable_id which is set the same as the node_id - DC_nodes['meta_control_node_id'] = nodes_to_control - DC_nodes['meta_compound_variable_id'] = DC_nodes['node_id'] - DC_nodes['node_type'] = 'DiscreteControl' - DC_nodes = DC_nodes.sort_values(by='node_id').reset_index(drop=True) - - #retrieve the geometries of the DiscreteControl. Put it at the same location, so they may be stored in either the Outlets or the Pumps, so check both if - if node_type == 'outlet' or node_type == 'Outlet': - DC_nodes['geometry'] = DC_nodes.merge(right=ribasim_model.outlet.node.df[['node_id', 'geometry']], - left_on = 'meta_control_node_id', - right_on = 'node_id', - how = 'left')['geometry'] - elif node_type == 'pump' or node_type == 'Pump': - DC_nodes['geometry'] = DC_nodes.merge(right=ribasim_model.pump.node.df[['node_id', 'geometry']], - left_on = 'meta_control_node_id', - right_on = 'node_id', - how = 'left')['geometry'] - - DC_nodes = DC_nodes[['node_id', 'node_type', 'meta_control_node_id', 'meta_compound_variable_id', 'geometry']] - - #concat the DC_nodes to the ribasim model - ribasim_model.discrete_control.node.df = pd.concat([ribasim_model.discrete_control.node.df, DC_nodes]).sort_values(by='node_id').reset_index(drop=True) - ribasim_model.discrete_control.node.df = gpd.GeoDataFrame(ribasim_model.discrete_control.node.df, geometry = 'geometry') + +def add_discrete_control_partswise( + ribasim_model, + nodes_to_control, + upstream_level_offset, + truth_state, + control_state, + flow_rate_block, + flow_rate_pass, + node_type, +): + ### node #################################################### + # add the discrete control .node table. The node_ids are the same as the node_id of the outlet/pump, but 80.000 is added + DC_nodes = pd.DataFrame() + DC_nodes["node_id"] = nodes_to_control + 80000 + + # trace back the node_id which the DiscreteControl controls, including the compoun_variable_id which is set the same as the node_id + DC_nodes["meta_control_node_id"] = nodes_to_control + DC_nodes["meta_compound_variable_id"] = DC_nodes["node_id"] + DC_nodes["node_type"] = "DiscreteControl" + DC_nodes = DC_nodes.sort_values(by="node_id").reset_index(drop=True) + + # retrieve the geometries of the DiscreteControl. Put it at the same location, so they may be stored in either the Outlets or the Pumps, so check both if + if node_type == "outlet" or node_type == "Outlet": + DC_nodes["geometry"] = DC_nodes.merge( + right=ribasim_model.outlet.node.df[["node_id", "geometry"]], + left_on="meta_control_node_id", + right_on="node_id", + how="left", + )["geometry"] + elif node_type == "pump" or node_type == "Pump": + DC_nodes["geometry"] = DC_nodes.merge( + right=ribasim_model.pump.node.df[["node_id", "geometry"]], + left_on="meta_control_node_id", + right_on="node_id", + how="left", + )["geometry"] + + DC_nodes = DC_nodes[["node_id", "node_type", "meta_control_node_id", "meta_compound_variable_id", "geometry"]] + + # concat the DC_nodes to the ribasim model + ribasim_model.discrete_control.node.df = ( + pd.concat([ribasim_model.discrete_control.node.df, DC_nodes]).sort_values(by="node_id").reset_index(drop=True) + ) + ribasim_model.discrete_control.node.df = gpd.GeoDataFrame( + ribasim_model.discrete_control.node.df, geometry="geometry" + ) ### node OUTLET static ### - if node_type == 'outlet' or node_type == 'Outlet': - - #df when water is blocked + if node_type == "outlet" or node_type == "Outlet": + # df when water is blocked outlet_static_block = ribasim_model.outlet.static.df.copy() - outlet_static_block['control_state'] = 'block' - outlet_static_block['flow_rate'] = flow_rate_block - outlet_static_block['min_crest_level'] = np.nan #min crest level is redundant, as control is defined for both upstream as well as downstream levels + outlet_static_block["control_state"] = "block" + outlet_static_block["flow_rate"] = flow_rate_block + outlet_static_block[ + "min_crest_level" + ] = np.nan # min crest level is redundant, as control is defined for both upstream as well as downstream levels - #df when water is passed + # df when water is passed outlet_static_pass = ribasim_model.outlet.static.df.copy() - outlet_static_pass['control_state'] = 'pass' - outlet_static_pass['flow_rate'] = flow_rate_pass - outlet_static_pass['min_crest_level'] = np.nan #min crest level is redundant, as control is defined for both upstream as well as downstream levels - - outlet_static = pd.concat([outlet_static_block, outlet_static_pass]).sort_values(by=['node_id', 'control_state']).reset_index(drop=True) + outlet_static_pass["control_state"] = "pass" + outlet_static_pass["flow_rate"] = flow_rate_pass + outlet_static_pass[ + "min_crest_level" + ] = np.nan # min crest level is redundant, as control is defined for both upstream as well as downstream levels + + outlet_static = ( + pd.concat([outlet_static_block, outlet_static_pass]) + .sort_values(by=["node_id", "control_state"]) + .reset_index(drop=True) + ) ribasim_model.outlet.static.df = outlet_static ### node PUMP static ### - if node_type == 'pump' or node_type == 'Pump': - #df when water is blocked + if node_type == "pump" or node_type == "Pump": + # df when water is blocked pump_static_block = ribasim_model.pump.static.df.copy() - pump_static_block['control_state'] = 'block' - pump_static_block['flow_rate'] = flow_rate_block + pump_static_block["control_state"] = "block" + pump_static_block["flow_rate"] = flow_rate_block - #df when water is passed + # df when water is passed pump_static_pass = ribasim_model.pump.static.df.copy() - pump_static_pass['control_state'] = 'pass' - pump_static_pass['flow_rate'] = flow_rate_pass - - pump_static = pd.concat([pump_static_block, pump_static_pass]).sort_values(by=['node_id', 'control_state']).reset_index(drop=True) + pump_static_pass["control_state"] = "pass" + pump_static_pass["flow_rate"] = flow_rate_pass + + pump_static = ( + pd.concat([pump_static_block, pump_static_pass]) + .sort_values(by=["node_id", "control_state"]) + .reset_index(drop=True) + ) ribasim_model.pump.static.df = pump_static display(pump_static) - ### condition #################################################### + ### condition #################################################### # create the DiscreteControl condition table DC_condition_us = pd.DataFrame() - DC_condition_us['node_id'] = ribasim_model.discrete_control.node.df['node_id'] - DC_condition_us['meta_control_node_id'] = ribasim_model.discrete_control.node.df['meta_control_node_id'] - DC_condition_us['compound_variable_id'] = ribasim_model.discrete_control.node.df['meta_compound_variable_id'] + DC_condition_us["node_id"] = ribasim_model.discrete_control.node.df["node_id"] + DC_condition_us["meta_control_node_id"] = ribasim_model.discrete_control.node.df["meta_control_node_id"] + DC_condition_us["compound_variable_id"] = ribasim_model.discrete_control.node.df["meta_compound_variable_id"] DC_condition_ds = DC_condition_us.copy(deep=True) - #find the greather_than value by looking the corresponding UPstream basin up in the edge table - basin_to_control_node_us = ribasim_model.edge.df.loc[ribasim_model.edge.df.to_node_id.isin(nodes_to_control.values)] #['from_node_id'] - basin_to_control_node_us = basin_to_control_node_us.merge(right = ribasim_model.basin.state.df, - left_on = 'from_node_id', - right_on = 'node_id', - how = 'left')[['to_node_id', 'to_node_type', 'level', 'from_node_id', 'from_node_type']] - basin_to_control_node_us['meta_to_control_node_id'] = basin_to_control_node_us['to_node_id'] - basin_to_control_node_us['meta_to_control_node_type'] = basin_to_control_node_us['to_node_type'] - - DC_condition_us = DC_condition_us.merge(right=basin_to_control_node_us, - left_on = 'meta_control_node_id', - right_on = 'to_node_id') - DC_condition_us['level'] -= upstream_level_offset - - #formatting - DC_condition_us.rename(columns={'level':'greater_than', - 'from_node_id': 'meta_listen_node_id', - 'from_node_type': 'meta_listen_node_type'}, inplace=True) - DC_condition_us = DC_condition_us[['node_id', 'compound_variable_id', 'greater_than', 'meta_listen_node_id', 'meta_listen_node_type', 'meta_to_control_node_id', 'meta_to_control_node_type']] - DC_condition_us['meta_downstream'] = 0 #add a column to sort it later on - - #for each row, there is (incorrectly) another row added where the listen node is the DiscreteControl. This should not be the case. Remove it - DC_condition_us = DC_condition_us.loc[DC_condition_us.meta_listen_node_type != 'DiscreteControl'] - - #the upstream node which is listened to is found. Now, find the downstream listen node. - #basically repeat the same lines as above - basin_to_control_node_ds = ribasim_model.edge.df.loc[ribasim_model.edge.df.from_node_id.isin(nodes_to_control.values)] - basin_to_control_node_ds = basin_to_control_node_ds.merge(right = ribasim_model.basin.state.df, - left_on = 'to_node_id', - right_on = 'node_id', - how = 'left')[['from_node_id', 'from_node_type', 'level', 'to_node_id', 'to_node_type']] - - DC_condition_ds = DC_condition_ds.merge(right=basin_to_control_node_ds, - left_on = 'meta_control_node_id', - right_on = 'from_node_id') - DC_condition_ds['level'] -= upstream_level_offset - - #formatting - DC_condition_ds.rename(columns={'level':'greater_than', - 'to_node_id': 'meta_listen_node_id', - 'to_node_type': 'meta_listen_node_type'}, inplace=True) - DC_condition_ds = DC_condition_ds[['node_id', 'compound_variable_id', 'greater_than', 'meta_listen_node_id', 'meta_listen_node_type']] - DC_condition_ds['meta_downstream'] = 1 #add a column to sort it later on - - #add some more columns so the downstream table matches the upstream table. Not sure why this is not created - DC_condition_ds['meta_to_control_node_id'] = DC_condition_ds.merge(right=DC_condition_us, - on = 'compound_variable_id', - how = 'left')['meta_to_control_node_id'] - DC_condition_ds['meta_to_control_node_type'] = DC_condition_ds.merge(right=DC_condition_us, - on = 'compound_variable_id', - how = 'left')['meta_to_control_node_type'] - #concat the upstream and the downstream condition table - DC_condition = pd.concat([DC_condition_us, DC_condition_ds]) + # find the greather_than value by looking the corresponding UPstream basin up in the edge table + basin_to_control_node_us = ribasim_model.edge.df.loc[ + ribasim_model.edge.df.to_node_id.isin(nodes_to_control.values) + ] # ['from_node_id'] + basin_to_control_node_us = basin_to_control_node_us.merge( + right=ribasim_model.basin.state.df, left_on="from_node_id", right_on="node_id", how="left" + )[["to_node_id", "to_node_type", "level", "from_node_id", "from_node_type"]] + basin_to_control_node_us["meta_to_control_node_id"] = basin_to_control_node_us["to_node_id"] + basin_to_control_node_us["meta_to_control_node_type"] = basin_to_control_node_us["to_node_type"] + + DC_condition_us = DC_condition_us.merge( + right=basin_to_control_node_us, left_on="meta_control_node_id", right_on="to_node_id" + ) + DC_condition_us["level"] -= upstream_level_offset + + # formatting + DC_condition_us.rename( + columns={ + "level": "greater_than", + "from_node_id": "meta_listen_node_id", + "from_node_type": "meta_listen_node_type", + }, + inplace=True, + ) + DC_condition_us = DC_condition_us[ + [ + "node_id", + "compound_variable_id", + "greater_than", + "meta_listen_node_id", + "meta_listen_node_type", + "meta_to_control_node_id", + "meta_to_control_node_type", + ] + ] + DC_condition_us["meta_downstream"] = 0 # add a column to sort it later on - #concat the entire DC_condition to the ribasim model - ribasim_model.discrete_control.condition.df = pd.concat([ribasim_model.discrete_control.condition.df, DC_condition]) - ribasim_model.discrete_control.condition.df = ribasim_model.discrete_control.condition.df.sort_values(by=['node_id', 'meta_downstream']).reset_index(drop=True) + # for each row, there is (incorrectly) another row added where the listen node is the DiscreteControl. This should not be the case. Remove it + DC_condition_us = DC_condition_us.loc[DC_condition_us.meta_listen_node_type != "DiscreteControl"] + # the upstream node which is listened to is found. Now, find the downstream listen node. + # basically repeat the same lines as above + basin_to_control_node_ds = ribasim_model.edge.df.loc[ + ribasim_model.edge.df.from_node_id.isin(nodes_to_control.values) + ] + basin_to_control_node_ds = basin_to_control_node_ds.merge( + right=ribasim_model.basin.state.df, left_on="to_node_id", right_on="node_id", how="left" + )[["from_node_id", "from_node_type", "level", "to_node_id", "to_node_type"]] + DC_condition_ds = DC_condition_ds.merge( + right=basin_to_control_node_ds, left_on="meta_control_node_id", right_on="from_node_id" + ) + DC_condition_ds["level"] -= upstream_level_offset + + # formatting + DC_condition_ds.rename( + columns={"level": "greater_than", "to_node_id": "meta_listen_node_id", "to_node_type": "meta_listen_node_type"}, + inplace=True, + ) + DC_condition_ds = DC_condition_ds[ + ["node_id", "compound_variable_id", "greater_than", "meta_listen_node_id", "meta_listen_node_type"] + ] + DC_condition_ds["meta_downstream"] = 1 # add a column to sort it later on + + # add some more columns so the downstream table matches the upstream table. Not sure why this is not created + DC_condition_ds["meta_to_control_node_id"] = DC_condition_ds.merge( + right=DC_condition_us, on="compound_variable_id", how="left" + )["meta_to_control_node_id"] + DC_condition_ds["meta_to_control_node_type"] = DC_condition_ds.merge( + right=DC_condition_us, on="compound_variable_id", how="left" + )["meta_to_control_node_type"] + # concat the upstream and the downstream condition table + DC_condition = pd.concat([DC_condition_us, DC_condition_ds]) + + # concat the entire DC_condition to the ribasim model + ribasim_model.discrete_control.condition.df = pd.concat([ribasim_model.discrete_control.condition.df, DC_condition]) + ribasim_model.discrete_control.condition.df = ribasim_model.discrete_control.condition.df.sort_values( + by=["node_id", "meta_downstream"] + ).reset_index(drop=True) ### logic #################################################### DC_logic = pd.DataFrame() for i in range(len(truth_state)): - DC_logic_temp = DC_condition.copy()[['node_id']].drop_duplicates() - DC_logic_temp['truth_state'] = truth_state[i] - DC_logic_temp['control_state'] = control_state[i] - + DC_logic_temp = DC_condition.copy()[["node_id"]].drop_duplicates() + DC_logic_temp["truth_state"] = truth_state[i] + DC_logic_temp["control_state"] = control_state[i] + DC_logic = pd.concat([DC_logic, DC_logic_temp]) - #concat the DC_condition to the ribasim model + # concat the DC_condition to the ribasim model ribasim_model.discrete_control.logic.df = pd.concat([ribasim_model.discrete_control.logic.df, DC_logic]) - ribasim_model.discrete_control.logic.df = ribasim_model.discrete_control.logic.df.sort_values(by=['node_id', 'truth_state']).reset_index(drop=True) - - + ribasim_model.discrete_control.logic.df = ribasim_model.discrete_control.logic.df.sort_values( + by=["node_id", "truth_state"] + ).reset_index(drop=True) ### variable #################################################### - DC_variable = DC_condition.copy()[['node_id', 'compound_variable_id', 'meta_listen_node_id', 'meta_listen_node_type']] - DC_variable.rename(columns={'meta_listen_node_id': 'listen_node_id', 'meta_listen_node_type':'listen_node_type'}, inplace=True) - DC_variable['variable'] = 'level' - - #concat the DC_variable to the ribasim model + DC_variable = DC_condition.copy()[ + ["node_id", "compound_variable_id", "meta_listen_node_id", "meta_listen_node_type"] + ] + DC_variable.rename( + columns={"meta_listen_node_id": "listen_node_id", "meta_listen_node_type": "listen_node_type"}, inplace=True + ) + DC_variable["variable"] = "level" + + # concat the DC_variable to the ribasim model ribasim_model.discrete_control.variable.df = pd.concat([ribasim_model.discrete_control.variable.df, DC_variable]) - ribasim_model.discrete_control.variable.df = ribasim_model.discrete_control.variable.df.sort_values(by=['node_id', 'listen_node_id']).reset_index(drop=True) + ribasim_model.discrete_control.variable.df = ribasim_model.discrete_control.variable.df.sort_values( + by=["node_id", "listen_node_id"] + ).reset_index(drop=True) ### edge #################################################### - DC_edge = DC_condition.copy()[['node_id', 'meta_to_control_node_id', 'meta_to_control_node_type']] - - #as the DC listens to both the upstream as well as the downstream nodes, it contains twice the node_ids. Only select one. - DC_edge = DC_edge.drop_duplicates(subset='node_id') - DC_edge.rename(columns={'node_id':'from_node_id', - 'meta_to_control_node_id':'to_node_id', - 'meta_to_control_node_type':'to_node_type'}, inplace = True) + DC_edge = DC_condition.copy()[["node_id", "meta_to_control_node_id", "meta_to_control_node_type"]] + + # as the DC listens to both the upstream as well as the downstream nodes, it contains twice the node_ids. Only select one. + DC_edge = DC_edge.drop_duplicates(subset="node_id") + DC_edge.rename( + columns={ + "node_id": "from_node_id", + "meta_to_control_node_id": "to_node_id", + "meta_to_control_node_type": "to_node_type", + }, + inplace=True, + ) # DC_edge['to_node_type'] = ribasim_model.edge.df.loc[ribasim_model.edge.df.to_node_id == DC_edge.node_id, 'to_node_type'] - DC_edge['from_node_type'] = 'DiscreteControl' - DC_edge['edge_type'] = 'control' - DC_edge['meta_categorie'] = 'DC_control' - - #retrieve the FROM geometry from the DC_nodes. The TO is the same, as the DiscreteControl is on the same location - DC_edge['from_coord'] = DC_nodes['geometry'] - DC_edge['to_coord'] = DC_nodes['geometry'] - + DC_edge["from_node_type"] = "DiscreteControl" + DC_edge["edge_type"] = "control" + DC_edge["meta_categorie"] = "DC_control" + + # retrieve the FROM geometry from the DC_nodes. The TO is the same, as the DiscreteControl is on the same location + DC_edge["from_coord"] = DC_nodes["geometry"] + DC_edge["to_coord"] = DC_nodes["geometry"] + def create_linestring(row): - return LineString([row['from_coord'], row['to_coord']]) - - DC_edge['geometry'] = DC_edge.apply(create_linestring, axis=1) + return LineString([row["from_coord"], row["to_coord"]]) - DC_edge = DC_edge[['from_node_id', 'from_node_type', 'to_node_id', 'to_node_type', 'edge_type', 'meta_categorie', 'geometry']] + DC_edge["geometry"] = DC_edge.apply(create_linestring, axis=1) + + DC_edge = DC_edge[ + ["from_node_id", "from_node_type", "to_node_id", "to_node_type", "edge_type", "meta_categorie", "geometry"] + ] ribasim_model.edge.df = pd.concat([ribasim_model.edge.df, DC_edge]).reset_index(drop=True) - - return - - - + + return + + ##################### Recycle bin ########################## # def calculate_update_basin_area(ribasim_model, percentage): # """ From 21cdef98b6c0b4cb3336fb77418a896a0f31220c Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Wed, 7 Aug 2024 14:31:29 +0200 Subject: [PATCH 14/25] Fix ruff --- .../AmstelGooienVecht_parametrize.ipynb | 1972 ++++++++++++++++- 1 file changed, 1875 insertions(+), 97 deletions(-) diff --git a/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb index b8c646f..7ef4eeb 100644 --- a/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb +++ b/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 57, "metadata": {}, "outputs": [], "source": [ @@ -10,15 +10,29 @@ "import logging\n", "import os\n", "import pathlib\n", + "import sys\n", "import warnings\n", + "from pathlib import Path\n", "\n", "import pandas as pd\n", "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", "import ribasim\n", "import ribasim.nodes\n", "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", + "from peilbeheerst_model.controle_output import *\n", "from peilbeheerst_model.ribasim_feedback_processor import RibasimFeedbackProcessor\n", "\n", + "# load ribasim_nl\n", + "module_path = Path.cwd() / \"../../ribasim_nl/\"\n", + "sys.path.append(str(module_path))\n", + "\n", + "current_dir = os.getcwd()\n", + "parent_dir = os.path.dirname(current_dir)\n", + "if parent_dir not in sys.path:\n", + " sys.path.append(parent_dir)\n", + "\n", + "%reload_ext autoreload\n", + "%autoreload 2\n", "warnings.filterwarnings(\"ignore\")" ] }, @@ -33,6 +47,13 @@ "\"\"\"" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "metadata": {}, @@ -49,15 +70,13 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "# Set paths\n", - "work_dir = pathlib.Path(\n", - " \"../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel\"\n", - ")\n", - "# work_dir = pathlib.Path(r\"../../../../../Ribasim_updated_models/AmstelGooienVecht\")\n", + "# work_dir = pathlib.Path(\"../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel\")\n", + "work_dir = pathlib.Path(r\"../../../../../Ribasim_updated_models/AmstelGooienVecht\")\n", "ribasim_gpkg = work_dir.joinpath(\"database.gpkg\")\n", "path_ribasim_toml = work_dir.joinpath(\"ribasim.toml\")\n", "output_dir = work_dir.joinpath(\"results\")\n", @@ -87,23 +106,31 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 59, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Processed all actions\n" + ] + } + ], "source": [ "name = \"Ron Bruijns (HKV)\"\n", "waterschap = \"AmstelGooienVecht\"\n", - "versie = \"2024_7_11\"\n", + "versie = \"2024_8_8\"\n", "\n", - "feedback_excel = pathlib.Path(\n", - " r\"../../../../../Ribasim_feedback/V1_formulieren/feedback_formulier_AmstelGooienVecht.xlsx\"\n", - ")\n", + "feedback_excel = pathlib.Path(f\"../../../../../Ribasim_feedback/V1_formulieren/feedback_formulier_{waterschap}.xlsx\")\n", "feedback_excel_processed = (\n", - " r\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_AmstelGooienVecht_JA_processed.xlsx\"\n", + " f\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_{waterschap}_JA_processed.xlsx\"\n", ")\n", "\n", - "ribasim_toml = f\"../../../../../Ribasim_base_models/AmstelGooienVecht_boezemmodel_{versie}/ribasim.toml\"\n", - "output_folder = work_dir # r\"../../../../../Ribasim_updated_models/AmstelGooienVecht\"\n", + "ribasim_toml = f\"../../../../../Ribasim_base_models/{waterschap}_boezemmodel_{versie}/ribasim.toml\"\n", + "output_folder = work_dir # f\"../../../../../Ribasim_updated_models/{waterschap}\"\n", "\n", "processor = RibasimFeedbackProcessor(\n", " name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed\n", @@ -120,7 +147,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 60, "metadata": {}, "outputs": [], "source": [ @@ -139,7 +166,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 61, "metadata": {}, "outputs": [], "source": [ @@ -148,47 +175,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 62, "metadata": {}, "outputs": [], "source": [ - "# # #add nodes for a correct schematisation\n", - "\n", - "# #line 26\n", - "# ribasim_model.tabulated_rating_curve.add(\n", - "# Node(new_node_id, Point(129099, 468239)),\n", - "# [tabulated_rating_curve.Static(level=[0.0, 1.0], flow_rate=[0.0, 10])])\n", - "\n", - "# ribasim_model.edge.add(ribasim_model.level_boundary[91180],ribasim_model.tabulated_rating_curve[new_node_id])\n", - "# ribasim_model.edge.add(ribasim_model.tabulated_rating_curve[new_node_id], ribasim_model.level_boundary[59])\n", - "\n", - "# for some reason a few edges are removed to the ARK\n", - "ribasim_model.edge.add(ribasim_model.basin[68], ribasim_model.pump[316])\n", - "ribasim_model.edge.add(ribasim_model.pump[316], ribasim_model.terminal[915])" + "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"node_id\"] == 195, \"meta_streefpeil\"] = -2.45\n", + "ribasim_model.basin.state.df.loc[ribasim_model.basin.state.df.node_id == 195, \"level\"] = -2.45" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 63, "metadata": {}, "outputs": [], "source": [ - "# Amstel Gooi en Vecht\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"node_id\"] == 184, \"meta_streefpeil\"] = -0.4\n", - "ribasim_model.basin.state.df.loc[ribasim_model.basin.state.df.node_id == 184, \"level\"] = -0.4\n", - "\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"node_id\"] == 192, \"meta_streefpeil\"] = -0.4\n", - "ribasim_model.basin.state.df.loc[ribasim_model.basin.state.df.node_id == 192, \"level\"] = -0.4\n", - "\n", - "assert not pd.isnull(ribasim_model.basin.area.df.meta_streefpeil).any()\n", - "\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", - "] = unknown_streefpeil\n", - "\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"meta_streefpeil\"] == 9.999, \"meta_streefpeil\"] = (\n", - " unknown_streefpeil\n", - ")" + "assert not pd.isnull(ribasim_model.basin.area.df.meta_streefpeil).any()" ] }, { @@ -214,35 +215,1596 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "# Define the initial state of each basin. Is set equal to the streefpeil\n", - "# ribasim_param.set_initial_basin_state(ribasim_model) #the initial states of the basins are by default already set to the streefpeil!\n", - "\n", - "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", - "ribasim_param.insert_standard_profile(\n", - " ribasim_model, regular_percentage=regular_percentage, boezem_percentage=boezem_percentage, depth_profile=2\n", - ")" + "# ribasim_param.set_initial_basin_state(ribasim_model) #the initial states of the basins are by default already set to the streefpeil!" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 65, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:Processing Basin Node ID: 1\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1038\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1039\n", + "INFO:root:Connected new Basin Node ID: 1039 to original Basin Node ID: 1 via Manning Resistance Node ID: 1038\n", + "INFO:root:Processing Basin Node ID: 2\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1040\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1041\n", + "INFO:root:Connected new Basin Node ID: 1041 to original Basin Node ID: 2 via Manning Resistance Node ID: 1040\n", + "INFO:root:Processing Basin Node ID: 3\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1042\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1043\n", + "INFO:root:Connected new Basin Node ID: 1043 to original Basin Node ID: 3 via Manning Resistance Node ID: 1042\n", + "INFO:root:Processing Basin Node ID: 4\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1044\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1045\n", + "INFO:root:Connected new Basin Node ID: 1045 to original Basin Node ID: 4 via Manning Resistance Node ID: 1044\n", + "INFO:root:Processing Basin Node ID: 5\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1046\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1047\n", + "INFO:root:Connected new Basin Node ID: 1047 to original Basin Node ID: 5 via Manning Resistance Node ID: 1046\n", + "INFO:root:Processing Basin Node ID: 6\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1048\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1049\n", + "INFO:root:Connected new Basin Node ID: 1049 to original Basin Node ID: 6 via Manning Resistance Node ID: 1048\n", + "INFO:root:Processing Basin Node ID: 7\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1050\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1051\n", + "INFO:root:Connected new Basin Node ID: 1051 to original Basin Node ID: 7 via Manning Resistance Node ID: 1050\n", + "INFO:root:Processing Basin Node ID: 8\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1052\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1053\n", + "INFO:root:Connected new Basin Node ID: 1053 to original Basin Node ID: 8 via Manning Resistance Node ID: 1052\n", + "INFO:root:Processing Basin Node ID: 9\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1054\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1055\n", + "INFO:root:Connected new Basin Node ID: 1055 to original Basin Node ID: 9 via Manning Resistance Node ID: 1054\n", + "INFO:root:Processing Basin Node ID: 10\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1056\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1057\n", + "INFO:root:Connected new Basin Node ID: 1057 to original Basin Node ID: 10 via Manning Resistance Node ID: 1056\n", + "INFO:root:Processing Basin Node ID: 11\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1058\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1059\n", + "INFO:root:Connected new Basin Node ID: 1059 to original Basin Node ID: 11 via Manning Resistance Node ID: 1058\n", + "INFO:root:Processing Basin Node ID: 12\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1060\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1061\n", + "INFO:root:Connected new Basin Node ID: 1061 to original Basin Node ID: 12 via Manning Resistance Node ID: 1060\n", + "INFO:root:Processing Basin Node ID: 13\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1062\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1063\n", + "INFO:root:Connected new Basin Node ID: 1063 to original Basin Node ID: 13 via Manning Resistance Node ID: 1062\n", + "INFO:root:Processing Basin Node ID: 14\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1064\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1065\n", + "INFO:root:Connected new Basin Node ID: 1065 to original Basin Node ID: 14 via Manning Resistance Node ID: 1064\n", + "INFO:root:Processing Basin Node ID: 15\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1066\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1067\n", + "INFO:root:Connected new Basin Node ID: 1067 to original Basin Node ID: 15 via Manning Resistance Node ID: 1066\n", + "INFO:root:Processing Basin Node ID: 17\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1068\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1069\n", + "INFO:root:Connected new Basin Node ID: 1069 to original Basin Node ID: 17 via Manning Resistance Node ID: 1068\n", + "INFO:root:Processing Basin Node ID: 18\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1070\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1071\n", + "INFO:root:Connected new Basin Node ID: 1071 to original Basin Node ID: 18 via Manning Resistance Node ID: 1070\n", + "INFO:root:Processing Basin Node ID: 24\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1072\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1073\n", + "INFO:root:Connected new Basin Node ID: 1073 to original Basin Node ID: 24 via Manning Resistance Node ID: 1072\n", + "INFO:root:Processing Basin Node ID: 25\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1074\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1075\n", + "INFO:root:Connected new Basin Node ID: 1075 to original Basin Node ID: 25 via Manning Resistance Node ID: 1074\n", + "INFO:root:Processing Basin Node ID: 26\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1076\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1077\n", + "INFO:root:Connected new Basin Node ID: 1077 to original Basin Node ID: 26 via Manning Resistance Node ID: 1076\n", + "INFO:root:Processing Basin Node ID: 27\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1078\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1079\n", + "INFO:root:Connected new Basin Node ID: 1079 to original Basin Node ID: 27 via Manning Resistance Node ID: 1078\n", + "INFO:root:Processing Basin Node ID: 28\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1080\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1081\n", + "INFO:root:Connected new Basin Node ID: 1081 to original Basin Node ID: 28 via Manning Resistance Node ID: 1080\n", + "INFO:root:Processing Basin Node ID: 29\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1082\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1083\n", + "INFO:root:Connected new Basin Node ID: 1083 to original Basin Node ID: 29 via Manning Resistance Node ID: 1082\n", + "INFO:root:Processing Basin Node ID: 30\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1084\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1085\n", + "INFO:root:Connected new Basin Node ID: 1085 to original Basin Node ID: 30 via Manning Resistance Node ID: 1084\n", + "INFO:root:Processing Basin Node ID: 31\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1086\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1087\n", + "INFO:root:Connected new Basin Node ID: 1087 to original Basin Node ID: 31 via Manning Resistance Node ID: 1086\n", + "INFO:root:Processing Basin Node ID: 32\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1088\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1089\n", + "INFO:root:Connected new Basin Node ID: 1089 to original Basin Node ID: 32 via Manning Resistance Node ID: 1088\n", + "INFO:root:Processing Basin Node ID: 33\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1090\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1091\n", + "INFO:root:Connected new Basin Node ID: 1091 to original Basin Node ID: 33 via Manning Resistance Node ID: 1090\n", + "INFO:root:Processing Basin Node ID: 34\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1092\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1093\n", + "INFO:root:Connected new Basin Node ID: 1093 to original Basin Node ID: 34 via Manning Resistance Node ID: 1092\n", + "INFO:root:Processing Basin Node ID: 35\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1094\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1095\n", + "INFO:root:Connected new Basin Node ID: 1095 to original Basin Node ID: 35 via Manning Resistance Node ID: 1094\n", + "INFO:root:Processing Basin Node ID: 36\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1096\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1097\n", + "INFO:root:Connected new Basin Node ID: 1097 to original Basin Node ID: 36 via Manning Resistance Node ID: 1096\n", + "INFO:root:Processing Basin Node ID: 37\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1098\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1099\n", + "INFO:root:Connected new Basin Node ID: 1099 to original Basin Node ID: 37 via Manning Resistance Node ID: 1098\n", + "INFO:root:Processing Basin Node ID: 38\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1100\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1101\n", + "INFO:root:Connected new Basin Node ID: 1101 to original Basin Node ID: 38 via Manning Resistance Node ID: 1100\n", + "INFO:root:Processing Basin Node ID: 39\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1102\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1103\n", + "INFO:root:Connected new Basin Node ID: 1103 to original Basin Node ID: 39 via Manning Resistance Node ID: 1102\n", + "INFO:root:Processing Basin Node ID: 40\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1104\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1105\n", + "INFO:root:Connected new Basin Node ID: 1105 to original Basin Node ID: 40 via Manning Resistance Node ID: 1104\n", + "INFO:root:Processing Basin Node ID: 41\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1106\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1107\n", + "INFO:root:Connected new Basin Node ID: 1107 to original Basin Node ID: 41 via Manning Resistance Node ID: 1106\n", + "INFO:root:Processing Basin Node ID: 42\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1108\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1109\n", + "INFO:root:Connected new Basin Node ID: 1109 to original Basin Node ID: 42 via Manning Resistance Node ID: 1108\n", + "INFO:root:Processing Basin Node ID: 43\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1110\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1111\n", + "INFO:root:Connected new Basin Node ID: 1111 to original Basin Node ID: 43 via Manning Resistance Node ID: 1110\n", + "INFO:root:Processing Basin Node ID: 44\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1112\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1113\n", + "INFO:root:Connected new Basin Node ID: 1113 to original Basin Node ID: 44 via Manning Resistance Node ID: 1112\n", + "INFO:root:Processing Basin Node ID: 45\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1114\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1115\n", + "INFO:root:Connected new Basin Node ID: 1115 to original Basin Node ID: 45 via Manning Resistance Node ID: 1114\n", + "INFO:root:Processing Basin Node ID: 46\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1116\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1117\n", + "INFO:root:Connected new Basin Node ID: 1117 to original Basin Node ID: 46 via Manning Resistance Node ID: 1116\n", + "INFO:root:Processing Basin Node ID: 47\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1118\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1119\n", + "INFO:root:Connected new Basin Node ID: 1119 to original Basin Node ID: 47 via Manning Resistance Node ID: 1118\n", + "INFO:root:Processing Basin Node ID: 48\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1120\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1121\n", + "INFO:root:Connected new Basin Node ID: 1121 to original Basin Node ID: 48 via Manning Resistance Node ID: 1120\n", + "INFO:root:Processing Basin Node ID: 49\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1122\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1123\n", + "INFO:root:Connected new Basin Node ID: 1123 to original Basin Node ID: 49 via Manning Resistance Node ID: 1122\n", + "INFO:root:Processing Basin Node ID: 50\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1124\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1125\n", + "INFO:root:Connected new Basin Node ID: 1125 to original Basin Node ID: 50 via Manning Resistance Node ID: 1124\n", + "INFO:root:Processing Basin Node ID: 51\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1126\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1127\n", + "INFO:root:Connected new Basin Node ID: 1127 to original Basin Node ID: 51 via Manning Resistance Node ID: 1126\n", + "INFO:root:Processing Basin Node ID: 52\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1128\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1129\n", + "INFO:root:Connected new Basin Node ID: 1129 to original Basin Node ID: 52 via Manning Resistance Node ID: 1128\n", + "INFO:root:Processing Basin Node ID: 53\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1130\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1131\n", + "INFO:root:Connected new Basin Node ID: 1131 to original Basin Node ID: 53 via Manning Resistance Node ID: 1130\n", + "INFO:root:Processing Basin Node ID: 54\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1132\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1133\n", + "INFO:root:Connected new Basin Node ID: 1133 to original Basin Node ID: 54 via Manning Resistance Node ID: 1132\n", + "INFO:root:Processing Basin Node ID: 55\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1134\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1135\n", + "INFO:root:Connected new Basin Node ID: 1135 to original Basin Node ID: 55 via Manning Resistance Node ID: 1134\n", + "INFO:root:Processing Basin Node ID: 56\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1136\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1137\n", + "INFO:root:Connected new Basin Node ID: 1137 to original Basin Node ID: 56 via Manning Resistance Node ID: 1136\n", + "INFO:root:Processing Basin Node ID: 57\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1138\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1139\n", + "INFO:root:Connected new Basin Node ID: 1139 to original Basin Node ID: 57 via Manning Resistance Node ID: 1138\n", + "INFO:root:Processing Basin Node ID: 58\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1140\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1141\n", + "INFO:root:Connected new Basin Node ID: 1141 to original Basin Node ID: 58 via Manning Resistance Node ID: 1140\n", + "INFO:root:Processing Basin Node ID: 59\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1142\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1143\n", + "INFO:root:Connected new Basin Node ID: 1143 to original Basin Node ID: 59 via Manning Resistance Node ID: 1142\n", + "INFO:root:Processing Basin Node ID: 60\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1144\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1145\n", + "INFO:root:Connected new Basin Node ID: 1145 to original Basin Node ID: 60 via Manning Resistance Node ID: 1144\n", + "INFO:root:Processing Basin Node ID: 61\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1146\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1147\n", + "INFO:root:Connected new Basin Node ID: 1147 to original Basin Node ID: 61 via Manning Resistance Node ID: 1146\n", + "INFO:root:Processing Basin Node ID: 62\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1148\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1149\n", + "INFO:root:Connected new Basin Node ID: 1149 to original Basin Node ID: 62 via Manning Resistance Node ID: 1148\n", + "INFO:root:Processing Basin Node ID: 63\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1150\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1151\n", + "INFO:root:Connected new Basin Node ID: 1151 to original Basin Node ID: 63 via Manning Resistance Node ID: 1150\n", + "INFO:root:Processing Basin Node ID: 64\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1152\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1153\n", + "INFO:root:Connected new Basin Node ID: 1153 to original Basin Node ID: 64 via Manning Resistance Node ID: 1152\n", + "INFO:root:Processing Basin Node ID: 65\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1154\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1155\n", + "INFO:root:Connected new Basin Node ID: 1155 to original Basin Node ID: 65 via Manning Resistance Node ID: 1154\n", + "INFO:root:Processing Basin Node ID: 66\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1156\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1157\n", + "INFO:root:Connected new Basin Node ID: 1157 to original Basin Node ID: 66 via Manning Resistance Node ID: 1156\n", + "INFO:root:Processing Basin Node ID: 67\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1158\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1159\n", + "INFO:root:Connected new Basin Node ID: 1159 to original Basin Node ID: 67 via Manning Resistance Node ID: 1158\n", + "INFO:root:Processing Basin Node ID: 68\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1160\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1161\n", + "INFO:root:Connected new Basin Node ID: 1161 to original Basin Node ID: 68 via Manning Resistance Node ID: 1160\n", + "INFO:root:Processing Basin Node ID: 69\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1162\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1163\n", + "INFO:root:Connected new Basin Node ID: 1163 to original Basin Node ID: 69 via Manning Resistance Node ID: 1162\n", + "INFO:root:Processing Basin Node ID: 70\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1164\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1165\n", + "INFO:root:Connected new Basin Node ID: 1165 to original Basin Node ID: 70 via Manning Resistance Node ID: 1164\n", + "INFO:root:Processing Basin Node ID: 71\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1166\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1167\n", + "INFO:root:Connected new Basin Node ID: 1167 to original Basin Node ID: 71 via Manning Resistance Node ID: 1166\n", + "INFO:root:Processing Basin Node ID: 72\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1168\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1169\n", + "INFO:root:Connected new Basin Node ID: 1169 to original Basin Node ID: 72 via Manning Resistance Node ID: 1168\n", + "INFO:root:Processing Basin Node ID: 73\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1170\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1171\n", + "INFO:root:Connected new Basin Node ID: 1171 to original Basin Node ID: 73 via Manning Resistance Node ID: 1170\n", + "INFO:root:Processing Basin Node ID: 74\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1172\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1173\n", + "INFO:root:Connected new Basin Node ID: 1173 to original Basin Node ID: 74 via Manning Resistance Node ID: 1172\n", + "INFO:root:Processing Basin Node ID: 75\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1174\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1175\n", + "INFO:root:Connected new Basin Node ID: 1175 to original Basin Node ID: 75 via Manning Resistance Node ID: 1174\n", + "INFO:root:Processing Basin Node ID: 76\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1176\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1177\n", + "INFO:root:Connected new Basin Node ID: 1177 to original Basin Node ID: 76 via Manning Resistance Node ID: 1176\n", + "INFO:root:Processing Basin Node ID: 77\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1178\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1179\n", + "INFO:root:Connected new Basin Node ID: 1179 to original Basin Node ID: 77 via Manning Resistance Node ID: 1178\n", + "INFO:root:Processing Basin Node ID: 78\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1180\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1181\n", + "INFO:root:Connected new Basin Node ID: 1181 to original Basin Node ID: 78 via Manning Resistance Node ID: 1180\n", + "INFO:root:Processing Basin Node ID: 79\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1182\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1183\n", + "INFO:root:Connected new Basin Node ID: 1183 to original Basin Node ID: 79 via Manning Resistance Node ID: 1182\n", + "INFO:root:Processing Basin Node ID: 80\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1184\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1185\n", + "INFO:root:Connected new Basin Node ID: 1185 to original Basin Node ID: 80 via Manning Resistance Node ID: 1184\n", + "INFO:root:Processing Basin Node ID: 81\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1186\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1187\n", + "INFO:root:Connected new Basin Node ID: 1187 to original Basin Node ID: 81 via Manning Resistance Node ID: 1186\n", + "INFO:root:Processing Basin Node ID: 82\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1188\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1189\n", + "INFO:root:Connected new Basin Node ID: 1189 to original Basin Node ID: 82 via Manning Resistance Node ID: 1188\n", + "INFO:root:Processing Basin Node ID: 83\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1190\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1191\n", + "INFO:root:Connected new Basin Node ID: 1191 to original Basin Node ID: 83 via Manning Resistance Node ID: 1190\n", + "INFO:root:Processing Basin Node ID: 87\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1192\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1193\n", + "INFO:root:Connected new Basin Node ID: 1193 to original Basin Node ID: 87 via Manning Resistance Node ID: 1192\n", + "INFO:root:Processing Basin Node ID: 88\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1194\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1195\n", + "INFO:root:Connected new Basin Node ID: 1195 to original Basin Node ID: 88 via Manning Resistance Node ID: 1194\n", + "INFO:root:Processing Basin Node ID: 89\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1196\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1197\n", + "INFO:root:Connected new Basin Node ID: 1197 to original Basin Node ID: 89 via Manning Resistance Node ID: 1196\n", + "INFO:root:Processing Basin Node ID: 90\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1198\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1199\n", + "INFO:root:Connected new Basin Node ID: 1199 to original Basin Node ID: 90 via Manning Resistance Node ID: 1198\n", + "INFO:root:Processing Basin Node ID: 91\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1200\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1201\n", + "INFO:root:Connected new Basin Node ID: 1201 to original Basin Node ID: 91 via Manning Resistance Node ID: 1200\n", + "INFO:root:Processing Basin Node ID: 92\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1202\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1203\n", + "INFO:root:Connected new Basin Node ID: 1203 to original Basin Node ID: 92 via Manning Resistance Node ID: 1202\n", + "INFO:root:Processing Basin Node ID: 93\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1204\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1205\n", + "INFO:root:Connected new Basin Node ID: 1205 to original Basin Node ID: 93 via Manning Resistance Node ID: 1204\n", + "INFO:root:Processing Basin Node ID: 94\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1206\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1207\n", + "INFO:root:Connected new Basin Node ID: 1207 to original Basin Node ID: 94 via Manning Resistance Node ID: 1206\n", + "INFO:root:Processing Basin Node ID: 95\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1208\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1209\n", + "INFO:root:Connected new Basin Node ID: 1209 to original Basin Node ID: 95 via Manning Resistance Node ID: 1208\n", + "INFO:root:Processing Basin Node ID: 96\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1210\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1211\n", + "INFO:root:Connected new Basin Node ID: 1211 to original Basin Node ID: 96 via Manning Resistance Node ID: 1210\n", + "INFO:root:Processing Basin Node ID: 98\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1212\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1213\n", + "INFO:root:Connected new Basin Node ID: 1213 to original Basin Node ID: 98 via Manning Resistance Node ID: 1212\n", + "INFO:root:Processing Basin Node ID: 99\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1214\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1215\n", + "INFO:root:Connected new Basin Node ID: 1215 to original Basin Node ID: 99 via Manning Resistance Node ID: 1214\n", + "INFO:root:Processing Basin Node ID: 100\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1216\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1217\n", + "INFO:root:Connected new Basin Node ID: 1217 to original Basin Node ID: 100 via Manning Resistance Node ID: 1216\n", + "INFO:root:Processing Basin Node ID: 101\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1218\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1219\n", + "INFO:root:Connected new Basin Node ID: 1219 to original Basin Node ID: 101 via Manning Resistance Node ID: 1218\n", + "INFO:root:Processing Basin Node ID: 102\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1220\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1221\n", + "INFO:root:Connected new Basin Node ID: 1221 to original Basin Node ID: 102 via Manning Resistance Node ID: 1220\n", + "INFO:root:Processing Basin Node ID: 103\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1222\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1223\n", + "INFO:root:Connected new Basin Node ID: 1223 to original Basin Node ID: 103 via Manning Resistance Node ID: 1222\n", + "INFO:root:Processing Basin Node ID: 104\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1224\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1225\n", + "INFO:root:Connected new Basin Node ID: 1225 to original Basin Node ID: 104 via Manning Resistance Node ID: 1224\n", + "INFO:root:Processing Basin Node ID: 105\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1226\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1227\n", + "INFO:root:Connected new Basin Node ID: 1227 to original Basin Node ID: 105 via Manning Resistance Node ID: 1226\n", + "INFO:root:Processing Basin Node ID: 106\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1228\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1229\n", + "INFO:root:Connected new Basin Node ID: 1229 to original Basin Node ID: 106 via Manning Resistance Node ID: 1228\n", + "INFO:root:Processing Basin Node ID: 107\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1230\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1231\n", + "INFO:root:Connected new Basin Node ID: 1231 to original Basin Node ID: 107 via Manning Resistance Node ID: 1230\n", + "INFO:root:Processing Basin Node ID: 108\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1232\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1233\n", + "INFO:root:Connected new Basin Node ID: 1233 to original Basin Node ID: 108 via Manning Resistance Node ID: 1232\n", + "INFO:root:Processing Basin Node ID: 109\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1234\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1235\n", + "INFO:root:Connected new Basin Node ID: 1235 to original Basin Node ID: 109 via Manning Resistance Node ID: 1234\n", + "INFO:root:Processing Basin Node ID: 110\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1236\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1237\n", + "INFO:root:Connected new Basin Node ID: 1237 to original Basin Node ID: 110 via Manning Resistance Node ID: 1236\n", + "INFO:root:Processing Basin Node ID: 111\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1238\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1239\n", + "INFO:root:Connected new Basin Node ID: 1239 to original Basin Node ID: 111 via Manning Resistance Node ID: 1238\n", + "INFO:root:Processing Basin Node ID: 112\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1240\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1241\n", + "INFO:root:Connected new Basin Node ID: 1241 to original Basin Node ID: 112 via Manning Resistance Node ID: 1240\n", + "INFO:root:Processing Basin Node ID: 113\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1242\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1243\n", + "INFO:root:Connected new Basin Node ID: 1243 to original Basin Node ID: 113 via Manning Resistance Node ID: 1242\n", + "INFO:root:Processing Basin Node ID: 114\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1244\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1245\n", + "INFO:root:Connected new Basin Node ID: 1245 to original Basin Node ID: 114 via Manning Resistance Node ID: 1244\n", + "INFO:root:Processing Basin Node ID: 116\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1246\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1247\n", + "INFO:root:Connected new Basin Node ID: 1247 to original Basin Node ID: 116 via Manning Resistance Node ID: 1246\n", + "INFO:root:Processing Basin Node ID: 117\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1248\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1249\n", + "INFO:root:Connected new Basin Node ID: 1249 to original Basin Node ID: 117 via Manning Resistance Node ID: 1248\n", + "INFO:root:Processing Basin Node ID: 118\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1250\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1251\n", + "INFO:root:Connected new Basin Node ID: 1251 to original Basin Node ID: 118 via Manning Resistance Node ID: 1250\n", + "INFO:root:Processing Basin Node ID: 119\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1252\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1253\n", + "INFO:root:Connected new Basin Node ID: 1253 to original Basin Node ID: 119 via Manning Resistance Node ID: 1252\n", + "INFO:root:Processing Basin Node ID: 120\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1254\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1255\n", + "INFO:root:Connected new Basin Node ID: 1255 to original Basin Node ID: 120 via Manning Resistance Node ID: 1254\n", + "INFO:root:Processing Basin Node ID: 121\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1256\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1257\n", + "INFO:root:Connected new Basin Node ID: 1257 to original Basin Node ID: 121 via Manning Resistance Node ID: 1256\n", + "INFO:root:Processing Basin Node ID: 122\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1258\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1259\n", + "INFO:root:Connected new Basin Node ID: 1259 to original Basin Node ID: 122 via Manning Resistance Node ID: 1258\n", + "INFO:root:Processing Basin Node ID: 123\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1260\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1261\n", + "INFO:root:Connected new Basin Node ID: 1261 to original Basin Node ID: 123 via Manning Resistance Node ID: 1260\n", + "INFO:root:Processing Basin Node ID: 124\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1262\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1263\n", + "INFO:root:Connected new Basin Node ID: 1263 to original Basin Node ID: 124 via Manning Resistance Node ID: 1262\n", + "INFO:root:Processing Basin Node ID: 125\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1264\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1265\n", + "INFO:root:Connected new Basin Node ID: 1265 to original Basin Node ID: 125 via Manning Resistance Node ID: 1264\n", + "INFO:root:Processing Basin Node ID: 126\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1266\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1267\n", + "INFO:root:Connected new Basin Node ID: 1267 to original Basin Node ID: 126 via Manning Resistance Node ID: 1266\n", + "INFO:root:Processing Basin Node ID: 127\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1268\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1269\n", + "INFO:root:Connected new Basin Node ID: 1269 to original Basin Node ID: 127 via Manning Resistance Node ID: 1268\n", + "INFO:root:Processing Basin Node ID: 128\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1270\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1271\n", + "INFO:root:Connected new Basin Node ID: 1271 to original Basin Node ID: 128 via Manning Resistance Node ID: 1270\n", + "INFO:root:Processing Basin Node ID: 129\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1272\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1273\n", + "INFO:root:Connected new Basin Node ID: 1273 to original Basin Node ID: 129 via Manning Resistance Node ID: 1272\n", + "INFO:root:Processing Basin Node ID: 130\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1274\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1275\n", + "INFO:root:Connected new Basin Node ID: 1275 to original Basin Node ID: 130 via Manning Resistance Node ID: 1274\n", + "INFO:root:Processing Basin Node ID: 131\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1276\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1277\n", + "INFO:root:Connected new Basin Node ID: 1277 to original Basin Node ID: 131 via Manning Resistance Node ID: 1276\n", + "INFO:root:Processing Basin Node ID: 132\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1278\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1279\n", + "INFO:root:Connected new Basin Node ID: 1279 to original Basin Node ID: 132 via Manning Resistance Node ID: 1278\n", + "INFO:root:Processing Basin Node ID: 133\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1280\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1281\n", + "INFO:root:Connected new Basin Node ID: 1281 to original Basin Node ID: 133 via Manning Resistance Node ID: 1280\n", + "INFO:root:Processing Basin Node ID: 134\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1282\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1283\n", + "INFO:root:Connected new Basin Node ID: 1283 to original Basin Node ID: 134 via Manning Resistance Node ID: 1282\n", + "INFO:root:Processing Basin Node ID: 135\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1284\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1285\n", + "INFO:root:Connected new Basin Node ID: 1285 to original Basin Node ID: 135 via Manning Resistance Node ID: 1284\n", + "INFO:root:Processing Basin Node ID: 136\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1286\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1287\n", + "INFO:root:Connected new Basin Node ID: 1287 to original Basin Node ID: 136 via Manning Resistance Node ID: 1286\n", + "INFO:root:Processing Basin Node ID: 137\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1288\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1289\n", + "INFO:root:Connected new Basin Node ID: 1289 to original Basin Node ID: 137 via Manning Resistance Node ID: 1288\n", + "INFO:root:Processing Basin Node ID: 138\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1290\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1291\n", + "INFO:root:Connected new Basin Node ID: 1291 to original Basin Node ID: 138 via Manning Resistance Node ID: 1290\n", + "INFO:root:Processing Basin Node ID: 139\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1292\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1293\n", + "INFO:root:Connected new Basin Node ID: 1293 to original Basin Node ID: 139 via Manning Resistance Node ID: 1292\n", + "INFO:root:Processing Basin Node ID: 140\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1294\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1295\n", + "INFO:root:Connected new Basin Node ID: 1295 to original Basin Node ID: 140 via Manning Resistance Node ID: 1294\n", + "INFO:root:Processing Basin Node ID: 141\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1296\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1297\n", + "INFO:root:Connected new Basin Node ID: 1297 to original Basin Node ID: 141 via Manning Resistance Node ID: 1296\n", + "INFO:root:Processing Basin Node ID: 142\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1298\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1299\n", + "INFO:root:Connected new Basin Node ID: 1299 to original Basin Node ID: 142 via Manning Resistance Node ID: 1298\n", + "INFO:root:Processing Basin Node ID: 143\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1300\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1301\n", + "INFO:root:Connected new Basin Node ID: 1301 to original Basin Node ID: 143 via Manning Resistance Node ID: 1300\n", + "INFO:root:Processing Basin Node ID: 144\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1302\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1303\n", + "INFO:root:Connected new Basin Node ID: 1303 to original Basin Node ID: 144 via Manning Resistance Node ID: 1302\n", + "INFO:root:Processing Basin Node ID: 145\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1304\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1305\n", + "INFO:root:Connected new Basin Node ID: 1305 to original Basin Node ID: 145 via Manning Resistance Node ID: 1304\n", + "INFO:root:Processing Basin Node ID: 146\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1306\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1307\n", + "INFO:root:Connected new Basin Node ID: 1307 to original Basin Node ID: 146 via Manning Resistance Node ID: 1306\n", + "INFO:root:Processing Basin Node ID: 147\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1308\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1309\n", + "INFO:root:Connected new Basin Node ID: 1309 to original Basin Node ID: 147 via Manning Resistance Node ID: 1308\n", + "INFO:root:Processing Basin Node ID: 148\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1310\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1311\n", + "INFO:root:Connected new Basin Node ID: 1311 to original Basin Node ID: 148 via Manning Resistance Node ID: 1310\n", + "INFO:root:Processing Basin Node ID: 149\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1312\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1313\n", + "INFO:root:Connected new Basin Node ID: 1313 to original Basin Node ID: 149 via Manning Resistance Node ID: 1312\n", + "INFO:root:Processing Basin Node ID: 150\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1314\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1315\n", + "INFO:root:Connected new Basin Node ID: 1315 to original Basin Node ID: 150 via Manning Resistance Node ID: 1314\n", + "INFO:root:Processing Basin Node ID: 151\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1316\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1317\n", + "INFO:root:Connected new Basin Node ID: 1317 to original Basin Node ID: 151 via Manning Resistance Node ID: 1316\n", + "INFO:root:Processing Basin Node ID: 152\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1318\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1319\n", + "INFO:root:Connected new Basin Node ID: 1319 to original Basin Node ID: 152 via Manning Resistance Node ID: 1318\n", + "INFO:root:Processing Basin Node ID: 153\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1320\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1321\n", + "INFO:root:Connected new Basin Node ID: 1321 to original Basin Node ID: 153 via Manning Resistance Node ID: 1320\n", + "INFO:root:Processing Basin Node ID: 154\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1322\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1323\n", + "INFO:root:Connected new Basin Node ID: 1323 to original Basin Node ID: 154 via Manning Resistance Node ID: 1322\n", + "INFO:root:Processing Basin Node ID: 155\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1324\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1325\n", + "INFO:root:Connected new Basin Node ID: 1325 to original Basin Node ID: 155 via Manning Resistance Node ID: 1324\n", + "INFO:root:Processing Basin Node ID: 156\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1326\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1327\n", + "INFO:root:Connected new Basin Node ID: 1327 to original Basin Node ID: 156 via Manning Resistance Node ID: 1326\n", + "INFO:root:Processing Basin Node ID: 157\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1328\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1329\n", + "INFO:root:Connected new Basin Node ID: 1329 to original Basin Node ID: 157 via Manning Resistance Node ID: 1328\n", + "INFO:root:Processing Basin Node ID: 158\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1330\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1331\n", + "INFO:root:Connected new Basin Node ID: 1331 to original Basin Node ID: 158 via Manning Resistance Node ID: 1330\n", + "INFO:root:Processing Basin Node ID: 159\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1332\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1333\n", + "INFO:root:Connected new Basin Node ID: 1333 to original Basin Node ID: 159 via Manning Resistance Node ID: 1332\n", + "INFO:root:Processing Basin Node ID: 160\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1334\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1335\n", + "INFO:root:Connected new Basin Node ID: 1335 to original Basin Node ID: 160 via Manning Resistance Node ID: 1334\n", + "INFO:root:Processing Basin Node ID: 161\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1336\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1337\n", + "INFO:root:Connected new Basin Node ID: 1337 to original Basin Node ID: 161 via Manning Resistance Node ID: 1336\n", + "INFO:root:Processing Basin Node ID: 162\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1338\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1339\n", + "INFO:root:Connected new Basin Node ID: 1339 to original Basin Node ID: 162 via Manning Resistance Node ID: 1338\n", + "INFO:root:Processing Basin Node ID: 164\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1340\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1341\n", + "INFO:root:Connected new Basin Node ID: 1341 to original Basin Node ID: 164 via Manning Resistance Node ID: 1340\n", + "INFO:root:Processing Basin Node ID: 165\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1342\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1343\n", + "INFO:root:Connected new Basin Node ID: 1343 to original Basin Node ID: 165 via Manning Resistance Node ID: 1342\n", + "INFO:root:Processing Basin Node ID: 166\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1344\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1345\n", + "INFO:root:Connected new Basin Node ID: 1345 to original Basin Node ID: 166 via Manning Resistance Node ID: 1344\n", + "INFO:root:Processing Basin Node ID: 167\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1346\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1347\n", + "INFO:root:Connected new Basin Node ID: 1347 to original Basin Node ID: 167 via Manning Resistance Node ID: 1346\n", + "INFO:root:Processing Basin Node ID: 168\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1348\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1349\n", + "INFO:root:Connected new Basin Node ID: 1349 to original Basin Node ID: 168 via Manning Resistance Node ID: 1348\n", + "INFO:root:Processing Basin Node ID: 169\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1350\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1351\n", + "INFO:root:Connected new Basin Node ID: 1351 to original Basin Node ID: 169 via Manning Resistance Node ID: 1350\n", + "INFO:root:Processing Basin Node ID: 170\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1352\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1353\n", + "INFO:root:Connected new Basin Node ID: 1353 to original Basin Node ID: 170 via Manning Resistance Node ID: 1352\n", + "INFO:root:Processing Basin Node ID: 171\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1354\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1355\n", + "INFO:root:Connected new Basin Node ID: 1355 to original Basin Node ID: 171 via Manning Resistance Node ID: 1354\n", + "INFO:root:Processing Basin Node ID: 172\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1356\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1357\n", + "INFO:root:Connected new Basin Node ID: 1357 to original Basin Node ID: 172 via Manning Resistance Node ID: 1356\n", + "INFO:root:Processing Basin Node ID: 173\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1358\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1359\n", + "INFO:root:Connected new Basin Node ID: 1359 to original Basin Node ID: 173 via Manning Resistance Node ID: 1358\n", + "INFO:root:Processing Basin Node ID: 174\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1360\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1361\n", + "INFO:root:Connected new Basin Node ID: 1361 to original Basin Node ID: 174 via Manning Resistance Node ID: 1360\n", + "INFO:root:Processing Basin Node ID: 175\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1362\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1363\n", + "INFO:root:Connected new Basin Node ID: 1363 to original Basin Node ID: 175 via Manning Resistance Node ID: 1362\n", + "INFO:root:Processing Basin Node ID: 176\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1364\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1365\n", + "INFO:root:Connected new Basin Node ID: 1365 to original Basin Node ID: 176 via Manning Resistance Node ID: 1364\n", + "INFO:root:Processing Basin Node ID: 177\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1366\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1367\n", + "INFO:root:Connected new Basin Node ID: 1367 to original Basin Node ID: 177 via Manning Resistance Node ID: 1366\n", + "INFO:root:Processing Basin Node ID: 178\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1368\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1369\n", + "INFO:root:Connected new Basin Node ID: 1369 to original Basin Node ID: 178 via Manning Resistance Node ID: 1368\n", + "INFO:root:Processing Basin Node ID: 179\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1370\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1371\n", + "INFO:root:Connected new Basin Node ID: 1371 to original Basin Node ID: 179 via Manning Resistance Node ID: 1370\n", + "INFO:root:Processing Basin Node ID: 180\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1372\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1373\n", + "INFO:root:Connected new Basin Node ID: 1373 to original Basin Node ID: 180 via Manning Resistance Node ID: 1372\n", + "INFO:root:Processing Basin Node ID: 181\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1374\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1375\n", + "INFO:root:Connected new Basin Node ID: 1375 to original Basin Node ID: 181 via Manning Resistance Node ID: 1374\n", + "INFO:root:Processing Basin Node ID: 182\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1376\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1377\n", + "INFO:root:Connected new Basin Node ID: 1377 to original Basin Node ID: 182 via Manning Resistance Node ID: 1376\n", + "INFO:root:Processing Basin Node ID: 183\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1378\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1379\n", + "INFO:root:Connected new Basin Node ID: 1379 to original Basin Node ID: 183 via Manning Resistance Node ID: 1378\n", + "INFO:root:Processing Basin Node ID: 184\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1380\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1381\n", + "INFO:root:Connected new Basin Node ID: 1381 to original Basin Node ID: 184 via Manning Resistance Node ID: 1380\n", + "INFO:root:Processing Basin Node ID: 185\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1382\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1383\n", + "INFO:root:Connected new Basin Node ID: 1383 to original Basin Node ID: 185 via Manning Resistance Node ID: 1382\n", + "INFO:root:Processing Basin Node ID: 186\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1384\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1385\n", + "INFO:root:Connected new Basin Node ID: 1385 to original Basin Node ID: 186 via Manning Resistance Node ID: 1384\n", + "INFO:root:Processing Basin Node ID: 188\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1386\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1387\n", + "INFO:root:Connected new Basin Node ID: 1387 to original Basin Node ID: 188 via Manning Resistance Node ID: 1386\n", + "INFO:root:Processing Basin Node ID: 189\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1388\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1389\n", + "INFO:root:Connected new Basin Node ID: 1389 to original Basin Node ID: 189 via Manning Resistance Node ID: 1388\n", + "INFO:root:Processing Basin Node ID: 190\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1390\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1391\n", + "INFO:root:Connected new Basin Node ID: 1391 to original Basin Node ID: 190 via Manning Resistance Node ID: 1390\n", + "INFO:root:Processing Basin Node ID: 191\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1392\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1393\n", + "INFO:root:Connected new Basin Node ID: 1393 to original Basin Node ID: 191 via Manning Resistance Node ID: 1392\n", + "INFO:root:Processing Basin Node ID: 192\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1394\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1395\n", + "INFO:root:Connected new Basin Node ID: 1395 to original Basin Node ID: 192 via Manning Resistance Node ID: 1394\n", + "INFO:root:Processing Basin Node ID: 193\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1396\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1397\n", + "INFO:root:Connected new Basin Node ID: 1397 to original Basin Node ID: 193 via Manning Resistance Node ID: 1396\n", + "INFO:root:Processing Basin Node ID: 194\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1398\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1399\n", + "INFO:root:Connected new Basin Node ID: 1399 to original Basin Node ID: 194 via Manning Resistance Node ID: 1398\n", + "INFO:root:Processing Basin Node ID: 195\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1400\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1401\n", + "INFO:root:Connected new Basin Node ID: 1401 to original Basin Node ID: 195 via Manning Resistance Node ID: 1400\n", + "INFO:root:Processing Basin Node ID: 196\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1402\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1403\n", + "INFO:root:Connected new Basin Node ID: 1403 to original Basin Node ID: 196 via Manning Resistance Node ID: 1402\n", + "INFO:root:Processing Basin Node ID: 197\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1404\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1405\n", + "INFO:root:Connected new Basin Node ID: 1405 to original Basin Node ID: 197 via Manning Resistance Node ID: 1404\n", + "INFO:root:Processing Basin Node ID: 198\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1406\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1407\n", + "INFO:root:Connected new Basin Node ID: 1407 to original Basin Node ID: 198 via Manning Resistance Node ID: 1406\n", + "INFO:root:Processing Basin Node ID: 199\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1408\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1409\n", + "INFO:root:Connected new Basin Node ID: 1409 to original Basin Node ID: 199 via Manning Resistance Node ID: 1408\n", + "INFO:root:Processing Basin Node ID: 200\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1410\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1411\n", + "INFO:root:Connected new Basin Node ID: 1411 to original Basin Node ID: 200 via Manning Resistance Node ID: 1410\n", + "INFO:root:Processing Basin Node ID: 201\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1412\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1413\n", + "INFO:root:Connected new Basin Node ID: 1413 to original Basin Node ID: 201 via Manning Resistance Node ID: 1412\n", + "INFO:root:Processing Basin Node ID: 202\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1414\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1415\n", + "INFO:root:Connected new Basin Node ID: 1415 to original Basin Node ID: 202 via Manning Resistance Node ID: 1414\n", + "INFO:root:Processing Basin Node ID: 203\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1416\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1417\n", + "INFO:root:Connected new Basin Node ID: 1417 to original Basin Node ID: 203 via Manning Resistance Node ID: 1416\n", + "INFO:root:Processing Basin Node ID: 204\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1418\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1419\n", + "INFO:root:Connected new Basin Node ID: 1419 to original Basin Node ID: 204 via Manning Resistance Node ID: 1418\n", + "INFO:root:Processing Basin Node ID: 205\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1420\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1421\n", + "INFO:root:Connected new Basin Node ID: 1421 to original Basin Node ID: 205 via Manning Resistance Node ID: 1420\n", + "INFO:root:Processing Basin Node ID: 207\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1422\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1423\n", + "INFO:root:Connected new Basin Node ID: 1423 to original Basin Node ID: 207 via Manning Resistance Node ID: 1422\n", + "INFO:root:Processing Basin Node ID: 208\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1424\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1425\n", + "INFO:root:Connected new Basin Node ID: 1425 to original Basin Node ID: 208 via Manning Resistance Node ID: 1424\n", + "INFO:root:Processing Basin Node ID: 209\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1426\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1427\n", + "INFO:root:Connected new Basin Node ID: 1427 to original Basin Node ID: 209 via Manning Resistance Node ID: 1426\n", + "INFO:root:Processing Basin Node ID: 210\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1428\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1429\n", + "INFO:root:Connected new Basin Node ID: 1429 to original Basin Node ID: 210 via Manning Resistance Node ID: 1428\n", + "INFO:root:Processing Basin Node ID: 211\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1430\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1431\n", + "INFO:root:Connected new Basin Node ID: 1431 to original Basin Node ID: 211 via Manning Resistance Node ID: 1430\n", + "INFO:root:Processing Basin Node ID: 212\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1432\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1433\n", + "INFO:root:Connected new Basin Node ID: 1433 to original Basin Node ID: 212 via Manning Resistance Node ID: 1432\n", + "INFO:root:Processing Basin Node ID: 213\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1434\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1435\n", + "INFO:root:Connected new Basin Node ID: 1435 to original Basin Node ID: 213 via Manning Resistance Node ID: 1434\n", + "INFO:root:Processing Basin Node ID: 214\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1436\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1437\n", + "INFO:root:Connected new Basin Node ID: 1437 to original Basin Node ID: 214 via Manning Resistance Node ID: 1436\n", + "INFO:root:Processing Basin Node ID: 215\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1438\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1439\n", + "INFO:root:Connected new Basin Node ID: 1439 to original Basin Node ID: 215 via Manning Resistance Node ID: 1438\n", + "INFO:root:Processing Basin Node ID: 216\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1440\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1441\n", + "INFO:root:Connected new Basin Node ID: 1441 to original Basin Node ID: 216 via Manning Resistance Node ID: 1440\n", + "INFO:root:Processing Basin Node ID: 217\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1442\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1443\n", + "INFO:root:Connected new Basin Node ID: 1443 to original Basin Node ID: 217 via Manning Resistance Node ID: 1442\n", + "INFO:root:Processing Basin Node ID: 218\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1444\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1445\n", + "INFO:root:Connected new Basin Node ID: 1445 to original Basin Node ID: 218 via Manning Resistance Node ID: 1444\n", + "INFO:root:Processing Basin Node ID: 219\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1446\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1447\n", + "INFO:root:Connected new Basin Node ID: 1447 to original Basin Node ID: 219 via Manning Resistance Node ID: 1446\n", + "INFO:root:Processing Basin Node ID: 220\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1448\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1449\n", + "INFO:root:Connected new Basin Node ID: 1449 to original Basin Node ID: 220 via Manning Resistance Node ID: 1448\n", + "INFO:root:Processing Basin Node ID: 221\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1450\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1451\n", + "INFO:root:Connected new Basin Node ID: 1451 to original Basin Node ID: 221 via Manning Resistance Node ID: 1450\n", + "INFO:root:Processing Basin Node ID: 222\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1452\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1453\n", + "INFO:root:Connected new Basin Node ID: 1453 to original Basin Node ID: 222 via Manning Resistance Node ID: 1452\n", + "INFO:root:Processing Basin Node ID: 223\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1454\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1455\n", + "INFO:root:Connected new Basin Node ID: 1455 to original Basin Node ID: 223 via Manning Resistance Node ID: 1454\n", + "INFO:root:Processing Basin Node ID: 224\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1456\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1457\n", + "INFO:root:Connected new Basin Node ID: 1457 to original Basin Node ID: 224 via Manning Resistance Node ID: 1456\n", + "INFO:root:Processing Basin Node ID: 225\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1458\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1459\n", + "INFO:root:Connected new Basin Node ID: 1459 to original Basin Node ID: 225 via Manning Resistance Node ID: 1458\n", + "INFO:root:Processing Basin Node ID: 226\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1460\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1461\n", + "INFO:root:Connected new Basin Node ID: 1461 to original Basin Node ID: 226 via Manning Resistance Node ID: 1460\n", + "INFO:root:Processing Basin Node ID: 227\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1462\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1463\n", + "INFO:root:Connected new Basin Node ID: 1463 to original Basin Node ID: 227 via Manning Resistance Node ID: 1462\n", + "INFO:root:Processing Basin Node ID: 228\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1464\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1465\n", + "INFO:root:Connected new Basin Node ID: 1465 to original Basin Node ID: 228 via Manning Resistance Node ID: 1464\n", + "INFO:root:Processing Basin Node ID: 229\n", + "INFO:root:Successfully added Manning Resistance node with Node ID: 1466\n", + "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", + "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", + "INFO:root:Successfully added new basin node with Node ID: 1467\n", + "INFO:root:Connected new Basin Node ID: 1467 to original Basin Node ID: 229 via Manning Resistance Node ID: 1466\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All basins are larger than 100 m²\n" + ] + } + ], "source": [ "# Add storage basins\n", "model_name = \"AmstelGooienVecht_StorageBasins\"\n", "# node_ids = [1, 2, 3] # Specify node IDs to process or include_hoofdwater Boolean\n", - "processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", + "# processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", + "# ribasim_model = processor.run()\n", + "\n", + "processor = AddStorageBasin(\n", + " path_ribasim_toml, model_name, output_folder, include_hoofdwater=False, log=False, node_ids=None\n", + ")\n", "ribasim_model = processor.run()\n", "\n", "# Check basin area\n", "ribasim_param.validate_basin_area(ribasim_model)" ] }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [], + "source": [ + "# remove the basins of above in the feedback form" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [], + "source": [ + "# change unknown streefpeilen to a default streefpeil\n", + "ribasim_model.basin.area.df.loc[\n", + " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", + "] = unknown_streefpeil\n", + "ribasim_model.basin.area.df.loc[\n", + " ribasim_model.basin.area.df[\"meta_streefpeil\"] == -9.999, \"meta_streefpeil\"\n", + "] = unknown_streefpeil" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [], + "source": [ + "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", + "ribasim_param.insert_standard_profile(\n", + " ribasim_model,\n", + " unknown_streefpeil=unknown_streefpeil,\n", + " regular_percentage=regular_percentage,\n", + " boezem_percentage=boezem_percentage,\n", + " depth_profile=2,\n", + ")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -252,7 +1814,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 69, "metadata": {}, "outputs": [], "source": [ @@ -262,7 +1824,7 @@ " \"potential_evaporation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", " \"drainage\": ribasim_param.convert_mm_day_to_m_sec(0),\n", " \"infiltration\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"urban_runoff\": ribasim_param.convert_mm_day_to_m_sec(0),\n", + " # 'urban_runoff': ribasim_param.convert_mm_day_to_m_sec(0),\n", "}\n", "\n", "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)" @@ -277,7 +1839,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 70, "metadata": {}, "outputs": [], "source": [ @@ -294,7 +1856,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 71, "metadata": {}, "outputs": [], "source": [ @@ -307,82 +1869,114 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### FlowBoundary" + "### Add Outlet" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 73, "metadata": {}, "outputs": [], "source": [ - "# Set FlowBoundary rate for each pump\n", - "# ribasim_model.flow_boundary.static.df['flow_rate'] = 0 #" + "ribasim_param.add_outlets(ribasim_model, delta_crest_level=0.10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Outlet" + "## Add control, based on the meta_categorie" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 74, "metadata": {}, "outputs": [], "source": [ - "ribasim_param.add_outlets(ribasim_model, delta_crest_level=0.10)" + "ribasim_param.identify_node_meta_categorie(ribasim_model)" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 75, "metadata": {}, + "outputs": [], "source": [ - "### Add Discrete Control" + "# ribasim_model.pump.static.df" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 76, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:pyproj:PROJ_ERROR: proj_create: unrecognized format / unknown name\n" + ] + } + ], "source": [ - "# Add discrete control nodes and control edges\n", - "ribasim_param.add_discrete_control_nodes(ribasim_model)" + "ribasim_param.add_discrete_control(ribasim_model)" ] }, { - "cell_type": "markdown", + "cell_type": "raw", "metadata": {}, "source": [ - "### TabulatedRatingCurve" + "a = greater_than \n", + "b = FF FT TF TT --> block, block, pass, block\n", + "\n", + "Boezem naar peilgebied:\n", + "- stuw:\n", + " a) streefpeil from_node_id basin (boezem) - 0.10\n", + " b) ja\n", + "- gemaal:\n", + " a) streefpeil from_node_id basin (boezem) - 0.10\n", + " b) ja\n", + "\n", + "Peilgebied naar peilgebied:\n", + "- stuw:\n", + " a) streefpeil from_node_id basin (peilgebied) - 0.15\n", + " b) ja\n", + "- gemaal: kans is groot dat dit voor waterafvoer is. Hier dus geen (!) offset gebruiken\n", + " a) streefpeil from_node_id basin (peilgebied) - 0.0000000000 (!)\n", + " b) nee: FF FT TF TT --> block, block, pass, pass (!), vanwege waterafvoer\n", + "\n", + "Peilgebied naar boezem:\n", + "- stuw: dit is 100% voor alleen waterafvoer\n", + " a) streefpeil from_node_id basin (peilgebied) - 0.0000000000 (!)\n", + " b) nee: FF FT TF TT --> block, block, pass, pass (!), vanwege waterafvoer\n", + "- gemaal: dit is 100% voor alleen waterafvoer\n", + " a) streefpeil from_node_id basin (peilgebied) - 0.0000000000 (!)\n", + " b) nee: FF FT TF TT --> block, block, pass, pass (!), vanwege waterafvoer\n", + "\n", + "Boundary naar peilgebied: houd geen rekening met boundary, zie peilgebied naar peilgebied\n", + "Peilgebied naar boundary: houd geen rekening met boundary, zie peilgebied naar peilgebied\n", + "\n", + "Boundary naar boezem:\n", + "\n", + "De afvoeren worden bepaald in de outlets. Pas de capaciteit van de boezem-buitenwater knopen als laatste aan." ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "# First, set the Q(h)-relationship to a relationship which is at each TRC node the same\n", - "ribasim_param.set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=1)\n", - "\n", - "# The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", - "# Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", - "ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)" + "### Manning Resistance" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 80, "metadata": {}, "outputs": [], "source": [ - "# #Adjust some TRC's by manually\n", - "# ribasim_model.tabulated_rating_curve.static.df.loc[ribasim_model.tabulated_rating_curve.static.df.node_id == 612, 'flow_rate'] = 0 #too small basin. This is a work around, so no water can flow in or out. Delete this basin later.\n", - "# ribasim_model.tabulated_rating_curve.static.df.loc[ribasim_model.tabulated_rating_curve.static.df.node_id == 613, 'flow_rate'] = 0 #too small basin. This is a work around, so no water can flow in or out. Delete this basin later.\n" + "# there is a MR without geometry and without edges for some reason\n", + "ribasim_model.manning_resistance.node.df = ribasim_model.manning_resistance.node.df.dropna(subset=\"geometry\")" ] }, { @@ -394,9 +1988,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 81, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:pyogrio._io:Created 1,883 records\n", + "INFO:pyogrio._io:Created 1,628 records\n", + "INFO:pyogrio._io:Created 443 records\n" + ] + } + ], "source": [ "# Write model output\n", "ribasim_param.index_reset(ribasim_model)\n", @@ -422,9 +2026,47 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 83, "metadata": {}, "outputs": [], + "source": [ + "# ribasim_model.outlet.static.df" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a89ad18281e3466e87f82f6b75d41792", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Simulating init: 0%| | 0/100 [00:00 Date: Wed, 7 Aug 2024 18:31:07 +0200 Subject: [PATCH 15/25] Fixed ruff --- pixi.lock | 172 +----------------- .../AmstelGooienVecht_parametrize.ipynb | 164 +++++++++-------- ...ielandendeKrimpenerwaard_parametrize.ipynb | 2 +- .../peilbeheerst_model/outlets.py | 4 +- .../postprocess_data/general_functions.py | 86 +++++---- .../post-process_delfland.ipynb | 3 +- .../preprocess_data/Scheldestromen.ipynb | 2 +- .../ribasim_parametrization.py | 2 +- 8 files changed, 143 insertions(+), 292 deletions(-) diff --git a/pixi.lock b/pixi.lock index c573279..1c8055b 100644 --- a/pixi.lock +++ b/pixi.lock @@ -16026,30 +16026,6 @@ packages: - pkg:pypi/numba-celltree?source=conda-forge-mapping size: 33109 timestamp: 1721292112265 -- kind: conda - name: numpy - version: 2.0.1 - build: py312h1103770_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.0.1-py312h1103770_0.conda - sha256: 0746a37d09036b4164ac14dd1328dd4e449a038383aac1e25e2d5f3a691518da - md5: 9f444595d8d9682891f2f078fc19da43 - depends: - - __glibc >=2.17,<3.0.a0 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - libgcc-ng >=12 - - liblapack >=3.9.0,<4.0a0 - - libstdcxx-ng >=12 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - purls: - - pkg:pypi/numpy?source=conda-forge-mapping - size: 8345605 - timestamp: 1721966364929 - kind: conda name: numpy version: 2.0.1 @@ -16075,30 +16051,6 @@ packages: - pkg:pypi/numpy?source=conda-forge-mapping size: 8345605 timestamp: 1721966364929 -- kind: conda - name: numpy - version: 2.0.1 - build: py312h49bc9c5_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/numpy-2.0.1-py312h49bc9c5_0.conda - sha256: 13b38db57cefbbea0cb6a44a5c75df8010480dc6200eda3491c8d203072d1675 - md5: e7fed4e2639f3a0d58bd8b2164059e8d - depends: - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - purls: - - pkg:pypi/numpy?source=conda-forge-mapping - size: 6945867 - timestamp: 1721966986321 - kind: conda name: numpy version: 2.0.1 @@ -16124,29 +16076,6 @@ packages: - pkg:pypi/numpy?source=conda-forge-mapping size: 6945867 timestamp: 1721966986321 -- kind: conda - name: numpy - version: 2.0.1 - build: py312h8813227_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.0.1-py312h8813227_0.conda - sha256: 3f73ed4464e3dc639c875b6cbe86e8095f88afe047bdfdc3d4b4ae120dd830e8 - md5: 7f239fbf9d9355f86529a35af0b24d29 - depends: - - __osx >=10.13 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - libcxx >=16 - - liblapack >=3.9.0,<4.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - purls: - - pkg:pypi/numpy?source=conda-forge-mapping - size: 7464264 - timestamp: 1721966235928 - kind: conda name: numpy version: 2.0.1 @@ -18445,30 +18374,6 @@ packages: - pkg:pypi/pysocks?source=conda-forge-mapping size: 18981 timestamp: 1661604969727 -- kind: conda - name: pytest - version: 8.3.2 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.2-pyhd8ed1ab_0.conda - sha256: 72c84a3cd9fe82835a88e975fd2a0dbf2071d1c423ea4f79e7930578c1014873 - md5: e010a224b90f1f623a917c35addbb924 - depends: - - colorama - - exceptiongroup >=1.0.0rc8 - - iniconfig - - packaging - - pluggy <2,>=1.5 - - python >=3.8 - - tomli >=1 - constrains: - - pytest-faulthandler >=2 - license: MIT - purls: - - pkg:pypi/pytest?source=conda-forge-mapping - size: 257671 - timestamp: 1721923749407 - kind: conda name: pytest version: 8.3.2 @@ -19527,32 +19432,21 @@ packages: timestamp: 1598024297745 - kind: pypi name: ribasim - version: 2024.10.0 + version: 2024.6.0 path: ../Ribasim/python/ribasim - sha256: be31457a51083ee5f04c05753c0308f556542c46f94a60a82f9387c5156e82ff + sha256: d56436e1f00be7894efb23f669c0c58af4d6aa42eeb1956903f6b984fb551b39 requires_dist: - geopandas - matplotlib - numpy - pandas - - pandera>=0.20 + - pandera!=0.16.0 - pyarrow - pydantic~=2.0 - pyogrio - shapely>=2.0 - tomli - tomli-w - - jinja2 ; extra == 'all' - - networkx ; extra == 'all' - - pytest ; extra == 'all' - - pytest-cov ; extra == 'all' - - pytest-xdist ; extra == 'all' - - ribasim-testmodels ; extra == 'all' - - xugrid ; extra == 'all' - - jinja2 ; extra == 'delwaq' - - networkx ; extra == 'delwaq' - - xugrid ; extra == 'delwaq' - - xugrid ; extra == 'netcdf' - pytest ; extra == 'tests' - pytest-cov ; extra == 'tests' - pytest-xdist ; extra == 'tests' @@ -19591,7 +19485,7 @@ packages: name: ribasim-lumping version: 0.1.0 path: src/ribasim_lumping - sha256: dec80735ccc9bf83d5a0805f5081c910c8aa81dc76abdb7052253a657ba034b3 + sha256: 25f734682e8e1d8bbcea37b6147101f264a13471b82341daf989834955d1a942 requires_dist: - contextily - geopandas @@ -19659,25 +19553,6 @@ packages: - pkg:pypi/rioxarray?source=conda-forge-mapping size: 51306 timestamp: 1721412091165 -- kind: conda - name: rpds-py - version: 0.19.1 - build: py312h2615798_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.19.1-py312h2615798_0.conda - sha256: 892407686805709a37a6dd29da06042f891a35774b25cee51368a29be9ccac6b - md5: 80bb17e18169ac455444b8167a105059 - depends: - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - purls: - - pkg:pypi/rpds-py?source=conda-forge-mapping - size: 206243 - timestamp: 1721862293173 - kind: conda name: rpds-py version: 0.19.1 @@ -19698,25 +19573,6 @@ packages: - pkg:pypi/rpds-py?source=conda-forge-mapping size: 206243 timestamp: 1721862293173 -- kind: conda - name: rpds-py - version: 0.19.1 - build: py312ha47ea1c_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.19.1-py312ha47ea1c_0.conda - sha256: dc5ce3a63deffc69263a8e8699e43ae64b45663ce3f39799c10b35524cc3e861 - md5: c54025057789a55e07d585e743fc8744 - depends: - - __osx >=10.13 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - __osx >=10.13 - license: MIT - purls: - - pkg:pypi/rpds-py?source=conda-forge-mapping - size: 295442 - timestamp: 1721861174737 - kind: conda name: rpds-py version: 0.19.1 @@ -19737,26 +19593,6 @@ packages: - pkg:pypi/rpds-py?source=conda-forge-mapping size: 295442 timestamp: 1721861174737 -- kind: conda - name: rpds-py - version: 0.19.1 - build: py312hf008fa9_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.19.1-py312hf008fa9_0.conda - sha256: 931d84722857bfdc9c1bbf8acc9c3bcf9aa294d8d9b4f26015569a3a0fbabefd - md5: ebdebabe560c06a70bc41221b9606945 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - __glibc >=2.17 - license: MIT - purls: - - pkg:pypi/rpds-py?source=conda-forge-mapping - size: 333274 - timestamp: 1721861124399 - kind: conda name: rpds-py version: 0.19.1 diff --git a/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb index 7ef4eeb..54e2318 100644 --- a/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb +++ b/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb @@ -15,15 +15,11 @@ "from pathlib import Path\n", "\n", "import pandas as pd\n", - "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", "import ribasim\n", "import ribasim.nodes\n", - "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", - "from peilbeheerst_model.controle_output import *\n", - "from peilbeheerst_model.ribasim_feedback_processor import RibasimFeedbackProcessor\n", "\n", - "# load ribasim_nl\n", - "module_path = Path.cwd() / \"../../ribasim_nl/\"\n", + "#load ribasim_nl\n", + "module_path = Path.cwd() / '../../ribasim_nl/'\n", "sys.path.append(str(module_path))\n", "\n", "current_dir = os.getcwd()\n", @@ -33,7 +29,12 @@ "\n", "%reload_ext autoreload\n", "%autoreload 2\n", - "warnings.filterwarnings(\"ignore\")" + "warnings.filterwarnings('ignore')\n", + " \n", + "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", + "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", + "from peilbeheerst_model.controle_output import *\n", + "from peilbeheerst_model.ribasim_feedback_processor import RibasimFeedbackProcessor" ] }, { @@ -84,17 +85,15 @@ "# Basin area percentage\n", "regular_percentage = 10\n", "boezem_percentage = 90\n", - "unknown_streefpeil = (\n", - " 0.00012345 # we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", - ")\n", + "unknown_streefpeil = 0.00012345 #we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", "\n", "# Forcing settings\n", "start_time = \"2024-01-01\"\n", - "timestep_size = \"d\"\n", + "timestep_size = 'd'\n", "timesteps = 2\n", - "delta_crest_level = 0.1 # delta waterlevel of boezem compared to streefpeil till no water can flow through an outlet\n", + "delta_crest_level = 0.1 #delta waterlevel of boezem compared to streefpeil till no water can flow through an outlet \n", "\n", - "default_level = 0 # default LevelBoundary level" + "default_level = 0 #default LevelBoundary level" ] }, { @@ -125,16 +124,12 @@ "versie = \"2024_8_8\"\n", "\n", "feedback_excel = pathlib.Path(f\"../../../../../Ribasim_feedback/V1_formulieren/feedback_formulier_{waterschap}.xlsx\")\n", - "feedback_excel_processed = (\n", - " f\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_{waterschap}_JA_processed.xlsx\"\n", - ")\n", + "feedback_excel_processed = f\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_{waterschap}_JA_processed.xlsx\"\n", "\n", "ribasim_toml = f\"../../../../../Ribasim_base_models/{waterschap}_boezemmodel_{versie}/ribasim.toml\"\n", - "output_folder = work_dir # f\"../../../../../Ribasim_updated_models/{waterschap}\"\n", + "output_folder = work_dir #f\"../../../../../Ribasim_updated_models/{waterschap}\"\n", "\n", - "processor = RibasimFeedbackProcessor(\n", - " name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed\n", - ")\n", + "processor = RibasimFeedbackProcessor(name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed)\n", "processor.run()" ] }, @@ -153,7 +148,7 @@ "source": [ "# Load Ribasim model\n", "with warnings.catch_warnings():\n", - " warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", + " warnings.simplefilter(action='ignore', category=FutureWarning)\n", " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)" ] }, @@ -179,8 +174,8 @@ "metadata": {}, "outputs": [], "source": [ - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"node_id\"] == 195, \"meta_streefpeil\"] = -2.45\n", - "ribasim_model.basin.state.df.loc[ribasim_model.basin.state.df.node_id == 195, \"level\"] = -2.45" + "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df['node_id'] == 195, 'meta_streefpeil'] = -2.45\n", + "ribasim_model.basin.state.df.loc[ribasim_model.basin.state.df.node_id == 195, 'level'] = -2.45" ] }, { @@ -1751,14 +1746,12 @@ ], "source": [ "# Add storage basins\n", - "model_name = \"AmstelGooienVecht_StorageBasins\"\n", + "model_name = 'AmstelGooienVecht_StorageBasins'\n", "# node_ids = [1, 2, 3] # Specify node IDs to process or include_hoofdwater Boolean\n", "# processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", "# ribasim_model = processor.run()\n", "\n", - "processor = AddStorageBasin(\n", - " path_ribasim_toml, model_name, output_folder, include_hoofdwater=False, log=False, node_ids=None\n", - ")\n", + "processor = AddStorageBasin(path_ribasim_toml, model_name, output_folder, include_hoofdwater=False, log=False, node_ids=None)\n", "ribasim_model = processor.run()\n", "\n", "# Check basin area\n", @@ -1771,7 +1764,7 @@ "metadata": {}, "outputs": [], "source": [ - "# remove the basins of above in the feedback form" + "#remove the basins of above in the feedback form" ] }, { @@ -1780,13 +1773,9 @@ "metadata": {}, "outputs": [], "source": [ - "# change unknown streefpeilen to a default streefpeil\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", - "] = unknown_streefpeil\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == -9.999, \"meta_streefpeil\"\n", - "] = unknown_streefpeil" + "#change unknown streefpeilen to a default streefpeil\n", + "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df['meta_streefpeil'] == 'Onbekend streefpeil', 'meta_streefpeil'] = unknown_streefpeil\n", + "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df['meta_streefpeil'] == -9.999, 'meta_streefpeil'] = unknown_streefpeil" ] }, { @@ -1796,13 +1785,11 @@ "outputs": [], "source": [ "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", - "ribasim_param.insert_standard_profile(\n", - " ribasim_model,\n", - " unknown_streefpeil=unknown_streefpeil,\n", - " regular_percentage=regular_percentage,\n", - " boezem_percentage=boezem_percentage,\n", - " depth_profile=2,\n", - ")" + "ribasim_param.insert_standard_profile(ribasim_model, \n", + " unknown_streefpeil = unknown_streefpeil,\n", + " regular_percentage = regular_percentage, \n", + " boezem_percentage = boezem_percentage,\n", + " depth_profile = 2)" ] }, { @@ -1819,15 +1806,14 @@ "outputs": [], "source": [ "# Set static forcing\n", - "forcing_dict = {\n", - " \"precipitation\": ribasim_param.convert_mm_day_to_m_sec(5),\n", - " \"potential_evaporation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"drainage\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"infiltration\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " # 'urban_runoff': ribasim_param.convert_mm_day_to_m_sec(0),\n", - "}\n", + "forcing_dict = {'precipitation': ribasim_param.convert_mm_day_to_m_sec(5),\n", + " 'potential_evaporation': ribasim_param.convert_mm_day_to_m_sec(0),\n", + " 'drainage': ribasim_param.convert_mm_day_to_m_sec(0),\n", + " 'infiltration': ribasim_param.convert_mm_day_to_m_sec(0),\n", + " # 'urban_runoff': ribasim_param.convert_mm_day_to_m_sec(0),\n", + " }\n", "\n", - "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)" + "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)\n" ] }, { @@ -1844,7 +1830,7 @@ "outputs": [], "source": [ "# Set pump capacity for each pump\n", - "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut" + "ribasim_model.pump.static.df['flow_rate'] = 0.16667 # 10 kuub per minuut" ] }, { @@ -1860,9 +1846,11 @@ "metadata": {}, "outputs": [], "source": [ - "ribasim_param.Terminals_to_LevelBoundaries(ribasim_model=ribasim_model, default_level=default_level)\n", + "ribasim_param.Terminals_to_LevelBoundaries(ribasim_model = ribasim_model,\n", + " default_level = default_level)\n", "\n", - "ribasim_param.FlowBoundaries_to_LevelBoundaries(ribasim_model=ribasim_model, default_level=default_level)" + "ribasim_param.FlowBoundaries_to_LevelBoundaries(ribasim_model = ribasim_model,\n", + " default_level = default_level)\n" ] }, { @@ -1878,7 +1866,7 @@ "metadata": {}, "outputs": [], "source": [ - "ribasim_param.add_outlets(ribasim_model, delta_crest_level=0.10)" + "ribasim_param.add_outlets(ribasim_model, delta_crest_level = 0.10)" ] }, { @@ -1975,8 +1963,8 @@ "metadata": {}, "outputs": [], "source": [ - "# there is a MR without geometry and without edges for some reason\n", - "ribasim_model.manning_resistance.node.df = ribasim_model.manning_resistance.node.df.dropna(subset=\"geometry\")" + "#there is a MR without geometry and without edges for some reason\n", + "ribasim_model.manning_resistance.node.df = ribasim_model.manning_resistance.node.df.dropna(subset = 'geometry')" ] }, { @@ -2007,7 +1995,8 @@ "ribasim_model.starttime = datetime.datetime(2024, 1, 1)\n", "ribasim_model.endtime = datetime.datetime(2024, 1, 1, 0, 0, 1)\n", "ribasim_model.solver.saveat = 3600\n", - "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)" + "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, \n", + " path_ribasim_toml)" ] }, { @@ -2069,20 +2058,18 @@ ], "source": [ "try:\n", - " ribasim_param.iterate_TRC(\n", - " ribasim_param=ribasim_param,\n", - " allowed_tolerance=0.02,\n", - " max_iter=1,\n", - " expected_difference=0.1,\n", - " max_adjustment=0.25,\n", - " cmd=[\"ribasim\", path_ribasim_toml],\n", - " output_dir=output_dir,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " )\n", + " ribasim_param.iterate_TRC(ribasim_param = ribasim_param, \n", + " allowed_tolerance = 0.02, \n", + " max_iter = 1, \n", + " expected_difference = 0.1, \n", + " max_adjustment = 0.25, \n", + " cmd = ['ribasim', path_ribasim_toml], \n", + " output_dir = output_dir, \n", + " path_ribasim_toml = path_ribasim_toml)\n", "\n", "except Exception:\n", " logging.error(\"The model was not able to run. Log file:\")\n", - " log_file_path = os.path.join(output_dir, \"ribasim.log\") # Update with the correct path to your log file\n", + " log_file_path = os.path.join(output_dir, 'ribasim.log') # Update with the correct path to your log file\n", " try:\n", " with open(log_file_path) as log_file:\n", " log_content = log_file.read()\n", @@ -2171,13 +2158,34 @@ ], "source": [ "# control_dict = Control(work_dir = work_dir).run_all()\n", - "ribasim_param.write_ribasim_model_GoodCloud(\n", - " ribasim_model=ribasim_model,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " waterschap=\"AmstelGooienVecht\",\n", - " modeltype=\"boezemmodel\",\n", - " include_results=True,\n", - ")" + "ribasim_param.write_ribasim_model_GoodCloud(ribasim_model = ribasim_model, \n", + " path_ribasim_toml = path_ribasim_toml,\n", + " waterschap = 'AmstelGooienVecht', \n", + " modeltype = 'boezemmodel',\n", + " include_results = True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'stop' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[26], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mstop\u001b[49m\n", + "\u001b[0;31mNameError\u001b[0m: name 'stop' is not defined" + ] + } + ], + "source": [ + "stop" ] }, { @@ -2193,7 +2201,7 @@ "metadata": {}, "outputs": [], "source": [ - "df_basin = pd.read_feather(os.path.join(output_dir, \"basin.arrow\"))\n", + "df_basin = pd.read_feather(os.path.join(output_dir, 'basin.arrow'))\n", "df_basin" ] }, @@ -2269,7 +2277,7 @@ "metadata": {}, "outputs": [], "source": [ - "# # The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", + "# # The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level. \n", "# # Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", "# ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)\n" ] @@ -2291,7 +2299,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.11.6" } }, "nbformat": 4, diff --git a/src/peilbeheerst_model/Parametrize/SchielandendeKrimpenerwaard_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/SchielandendeKrimpenerwaard_parametrize.ipynb index 5478e2f..cbf35c1 100644 --- a/src/peilbeheerst_model/Parametrize/SchielandendeKrimpenerwaard_parametrize.ipynb +++ b/src/peilbeheerst_model/Parametrize/SchielandendeKrimpenerwaard_parametrize.ipynb @@ -458,7 +458,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.11.6" } }, "nbformat": 4, diff --git a/src/peilbeheerst_model/peilbeheerst_model/outlets.py b/src/peilbeheerst_model/peilbeheerst_model/outlets.py index 23ca8de..b1c653b 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/outlets.py +++ b/src/peilbeheerst_model/peilbeheerst_model/outlets.py @@ -300,7 +300,7 @@ def show_results(self, model): df_basin_wide = df_basin.pivot_table(index="time", columns="node_id", values=["level"]) df_basin_wide["level"].plot() - display(df_basin) + # display(df_basin) def create_model(self, copy=False): """Create the model by running all the functions.""" @@ -585,7 +585,7 @@ def show_results(self, model): df_basin_wide = df_basin.pivot_table(index="time", columns="node_id", values=["level"]) df_basin_wide["level"].plot() - display(df_basin) + # display(df_basin) def add_edges(self, model): """Add edges between each node.""" diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/general_functions.py b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/general_functions.py index d9d406d..493480c 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/general_functions.py +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/general_functions.py @@ -1,32 +1,29 @@ #import packages and functions -import numpy as np +import geopandas as gpd import matplotlib.pyplot as plt import pandas as pd -import geopandas as gpd -import os -import fiona -import shapely def read_gpkg_layers(gpkg_path, variables, engine = 'fiona', print_var=False): - ''' + """ Read specified layers from a GeoPackage (GPKG) file and return them as a dictionary. - Parameters: + Parameters + ---------- gpkg_path (str): The file path to the GeoPackage (GPKG) file to read from. variables (list): A list of layer names to read from the GeoPackage. print_var (bool, optional): If True, print the name of each variable as it is read. Default is False. - Returns: + Returns + ------- dict: A dictionary containing the GeoDataFrames, with layer names as keys. This function reads specified layers from a GeoPackage (GPKG) file and returns them as a dictionary. You can choose to print the names of variables as they are read by setting `print_var` to True. - ''' - + """ data = {} for variable in variables: - if print_var == True: + if print_var: print(variable) data_temp = gpd.read_file(gpkg_path, layer = variable, engine=engine) data[variable] = data_temp @@ -35,20 +32,21 @@ def read_gpkg_layers(gpkg_path, variables, engine = 'fiona', print_var=False): def show_layers_and_columns(waterschap): - ''' + """ Display Information About Layers and Columns in a Geospatial Dataset. - Parameters: + Parameters + ---------- waterschap (dict): A dictionary containing geospatial datasets as GeoDataFrames. - Returns: + Returns + ------- None This function prints the names of all layers and the columns within each layer of a geospatial dataset stored in a dictionary. - ''' - + """ for key in waterschap.keys(): print(key) print(waterschap[str(key)].columns.values) @@ -59,23 +57,25 @@ def show_layers_and_columns(waterschap): def store_data(waterschap, output_gpkg_path): - ''' + """ Store Geospatial Data to a GeoPackage (GPKG) File. - Parameters: + Parameters + ---------- waterschap (dict): A dictionary containing GeoDataFrames to be stored in the GPKG file. output_gpkg_path (str): The file path (including the file name without extension) to save the GPKG file. - Returns: + Returns + ------- None This function stores geospatial data from a dictionary of GeoDataFrames into a GeoPackage (GPKG) file. - Parameters: + Parameters + ---------- - waterschap: A dictionary where the keys represent layer names, and the values are GeoDataFrames. - output_gpkg_path: The file path for the output GPKG file. The '.gpkg' extension is added automatically. - ''' - + """ for key in waterschap.keys(): waterschap[str(key)].to_file(output_gpkg_path + '.gpkg', layer = str(key), driver='GPKG') @@ -83,23 +83,25 @@ def store_data(waterschap, output_gpkg_path): def overlapping_peilgebieden(waterschap_peilgebieden): - ''' + """ Identify and calculate the percentage of overlapping peilgebieden. - Parameters: + Parameters + ---------- waterschap_peilgebieden (geopandas.GeoDataFrame): A GeoDataFrame containing polygons (the peilgebieden). - Returns: + Returns + ------- geopandas.GeoDataFrame: A GeoDataFrame with overlapping polygons and their overlap percentages. This function analyzes a GeoDataFrame of peilgebied polygons to find overlapping polygons and calculate the percentage of overlap between them. It returns a GeoDataFrame with information about the overlapping polygons, including their overlap percentages. - Parameters: + Parameters + ---------- - waterschap_peilgebieden: A GeoDataFrame containing the peilgebieden polygons. - ''' - + """ peilgebied = waterschap_peilgebieden peilgebied.geometry = peilgebied.buffer(distance=0) #make invalid geometries valid peilgebied.set_crs(crs='EPSG:28992', inplace=True) @@ -132,22 +134,23 @@ def overlapping_peilgebieden(waterschap_peilgebieden): def plot_histogram_overlap(overlapping_polygons): - - ''' + """ Plots a histogram of the overlapping polygons in a DataFrame. - Parameters: + Parameters + ---------- overlapping_polygons (pd.DataFrame): A DataFrame containing information about overlapping polygons. It should have a 'overlap_percentage' column to represent the percentage of overlap between polygons. - Returns: + Returns + ------- None The function calculates a histogram of overlapping percentages, providing insights into the distribution of overlaps between polygons. It handles potential NaN values in the 'overlap_percentage' column and creates bins ranging from 0% to 100% in 10% increments for the histogram. The number of overlapping polygons is displayed in the title. - ''' + """ overlapping_polygons['overlap_percentage'] = overlapping_polygons['overlap_percentage'].fillna(0) # Handle potential NaN values bins = range(0, 101, 10) # Create bins from 0% to 100% in 10% increments @@ -165,26 +168,29 @@ def plot_histogram_overlap(overlapping_polygons): def plot_overlapping_peilgebieden(peilgebied, overlapping_polygons, minimum_percentage): - ''' + """ Plot Overlapping Peilgebieden on a map, including a Minimum Percentage of Overlap to show. - Parameters: + Parameters + ---------- peilgebied (geopandas.GeoDataFrame): A GeoDataFrame representing the peilgebied polygons. overlapping_polygons (geopandas.GeoDataFrame): A GeoDataFrame containing information about overlapping polygons/peilgebieden. minimum_percentage (float or int): The minimum overlap percentage required for polygons to be displayed. - Returns: + Returns + ------- None This function creates a plot to visualize overlapping peilgebieden based on a specified minimum overlap percentage. It displays a subset of overlapping polygons with a percentage greater than the specified minimum. - Parameters: + Parameters + ---------- - peilgebied: The entire peilgebieden GeoDataFrame serving as the background. - overlapping_polygons: GeoDataFrame containing information about overlapping polygons. - minimum_percentage: The minimum overlap percentage required for polygons to be displayed. - ''' + """ #make a subsect of overlapping polygons, based on a percentage overlap_subset = overlapping_polygons.loc[overlapping_polygons['overlap_percentage'] > minimum_percentage] @@ -247,7 +253,7 @@ def plot_overlapping_peilgebieden(peilgebied, overlapping_polygons, minimum_perc # peilgebied = overlapping_updated.append(intersection, ignore_index=True) #add the removed difference, but now only the intersected part of pg_afwijking -# if check == True: +# if check: # peilgebied_praktijk.to_file('Checks/Rivierenland/peilgebied_praktijk.gpkg', driver='GPKG') # peilgebied_afwijking.to_file('Checks/Rivierenland/peilgebied_afwijking.gpkg', driver='GPKG') @@ -284,7 +290,7 @@ def burn_in_peilgebieden(base_layer, overlay_layer, plot=True): burned_base_layer = burned_base_layer.drop_duplicates(subset='globalid', keep='last') - if plot == True: + if plot: fig, ax = plt.subplots() base_layer.plot(ax = ax, color='cornflowerblue') overlay_layer.plot(ax = ax, color='blue') diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb index 378e111..5a56593 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb @@ -42,6 +42,7 @@ "%autoreload 2\n", "\n", "from general_functions import *\n", + "\n", "remove_cat_2 = True" ] }, @@ -433,7 +434,7 @@ "metadata": {}, "outputs": [], "source": [ - "if remove_cat_2 == True:\n", + "if remove_cat_2:\n", " delfland['peilgebied'] = delfland['peilgebied'].loc[delfland['peilgebied'].peilgebied_cat !=2]" ] }, diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb index 7f170a8..5e0437c 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb @@ -251,7 +251,7 @@ "outputs": [], "source": [ "for i in range(len(Scheldestromen['peilgebied'])): \n", - " if type(Scheldestromen['peilgebied'].loc[i, 'geometry']) == Polygon:\n", + " if Scheldestromen['peilgebied']['geometry'].at[i].geom_type == 'Polygon':\n", " Scheldestromen['peilgebied'].loc[i, 'geometry'].plot()" ] }, diff --git a/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py b/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py index 97822fb..65e5e66 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py +++ b/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py @@ -999,7 +999,7 @@ def add_discrete_control_partswise( .reset_index(drop=True) ) ribasim_model.pump.static.df = pump_static - display(pump_static) + # display(pump_static) ### condition #################################################### # create the DiscreteControl condition table From 8f2721f378ae5a2636c8c26f65103033dcc37d44 Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Tue, 13 Aug 2024 13:57:19 +0200 Subject: [PATCH 16/25] Ruff fixes --- src/peilbeheerst_model/03_test_outlets.ipynb | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/peilbeheerst_model/03_test_outlets.ipynb b/src/peilbeheerst_model/03_test_outlets.ipynb index c3d124d..a4061af 100644 --- a/src/peilbeheerst_model/03_test_outlets.ipynb +++ b/src/peilbeheerst_model/03_test_outlets.ipynb @@ -46,9 +46,7 @@ "cell_type": "code", "execution_count": 15, "id": "7c117602-860f-4b79-85f0-4baeb2b571e2", - "metadata": { - "scrolled": true - }, + "metadata": {}, "outputs": [ { "data": { @@ -658,9 +656,7 @@ "cell_type": "code", "execution_count": 20, "id": "88d99768-cab2-4bdf-943a-d6ce6975cde0", - "metadata": { - "scrolled": true - }, + "metadata": {}, "outputs": [ { "data": { @@ -964,9 +960,7 @@ "cell_type": "code", "execution_count": 21, "id": "3fbb8789-ac5e-492a-be94-add01dcf779a", - "metadata": { - "scrolled": true - }, + "metadata": {}, "outputs": [ { "data": { @@ -2658,7 +2652,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.11.6" } }, "nbformat": 4, From 3cc016a3562447f7a062a13674a52718456ff9c6 Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Tue, 13 Aug 2024 13:58:07 +0200 Subject: [PATCH 17/25] Fix Ruff --- .../AmstelGooienVecht_parametrize.ipynb | 456 ++++++++++-------- .../ribasim_parametrization.py | 292 +++++++++-- 2 files changed, 491 insertions(+), 257 deletions(-) diff --git a/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb index 54e2318..f80c956 100644 --- a/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb +++ b/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 57, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -10,31 +10,58 @@ "import logging\n", "import os\n", "import pathlib\n", - "import sys\n", "import warnings\n", - "from pathlib import Path\n", "\n", + "import load_ribasim # noqa: F401\n", "import pandas as pd\n", + "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", "import ribasim\n", "import ribasim.nodes\n", - "\n", - "#load ribasim_nl\n", - "module_path = Path.cwd() / '../../ribasim_nl/'\n", - "sys.path.append(str(module_path))\n", - "\n", - "current_dir = os.getcwd()\n", - "parent_dir = os.path.dirname(current_dir)\n", - "if parent_dir not in sys.path:\n", - " sys.path.append(parent_dir)\n", + "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", + "from peilbeheerst_model.controle_output import *\n", + "from peilbeheerst_model.ribasim_feedback_processor import RibasimFeedbackProcessor\n", "\n", "%reload_ext autoreload\n", "%autoreload 2\n", - "warnings.filterwarnings('ignore')\n", - " \n", - "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", - "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", - "from peilbeheerst_model.controle_output import *\n", - "from peilbeheerst_model.ribasim_feedback_processor import RibasimFeedbackProcessor" + "warnings.filterwarnings(\"ignore\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# import datetime\n", + "# import logging\n", + "# import os\n", + "# import pathlib\n", + "# import sys\n", + "# import warnings\n", + "# from pathlib import Path\n", + "\n", + "# import pandas as pd\n", + "# import ribasim\n", + "# import ribasim.nodes\n", + "\n", + "# #load ribasim_nl\n", + "# module_path = Path.cwd() / '../../ribasim_nl/'\n", + "# sys.path.append(str(module_path))\n", + "\n", + "# current_dir = os.getcwd()\n", + "# parent_dir = os.path.dirname(current_dir)\n", + "# if parent_dir not in sys.path:\n", + "# sys.path.append(parent_dir)\n", + "\n", + "# %reload_ext autoreload\n", + "# %autoreload 2\n", + "# warnings.filterwarnings('ignore')\n", + "\n", + "# import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", + "# from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", + "# from peilbeheerst_model.controle_output import *\n", + "# from peilbeheerst_model.ribasim_feedback_processor import RibasimFeedbackProcessor\n", + "\n" ] }, { @@ -71,13 +98,14 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Set paths\n", "# work_dir = pathlib.Path(\"../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel\")\n", - "work_dir = pathlib.Path(r\"../../../../../Ribasim_updated_models/AmstelGooienVecht\")\n", + "waterschap = \"AmstelGooienVecht\"\n", + "work_dir = pathlib.Path(f\"../../../../../Ribasim_updated_models/{waterschap}/modellen/{waterschap}_parametrized\")\n", "ribasim_gpkg = work_dir.joinpath(\"database.gpkg\")\n", "path_ribasim_toml = work_dir.joinpath(\"ribasim.toml\")\n", "output_dir = work_dir.joinpath(\"results\")\n", @@ -85,15 +113,17 @@ "# Basin area percentage\n", "regular_percentage = 10\n", "boezem_percentage = 90\n", - "unknown_streefpeil = 0.00012345 #we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", + "unknown_streefpeil = (\n", + " 0.00012345 # we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", + ")\n", "\n", "# Forcing settings\n", "start_time = \"2024-01-01\"\n", - "timestep_size = 'd'\n", + "timestep_size = \"d\"\n", "timesteps = 2\n", - "delta_crest_level = 0.1 #delta waterlevel of boezem compared to streefpeil till no water can flow through an outlet \n", + "delta_crest_level = 0.1 # delta waterlevel of boezem compared to streefpeil till no water can flow through an outlet\n", "\n", - "default_level = 0 #default LevelBoundary level" + "default_level = 0 # default LevelBoundary level\n" ] }, { @@ -105,7 +135,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 4, "metadata": { "scrolled": true }, @@ -120,17 +150,20 @@ ], "source": [ "name = \"Ron Bruijns (HKV)\"\n", - "waterschap = \"AmstelGooienVecht\"\n", "versie = \"2024_8_8\"\n", "\n", "feedback_excel = pathlib.Path(f\"../../../../../Ribasim_feedback/V1_formulieren/feedback_formulier_{waterschap}.xlsx\")\n", - "feedback_excel_processed = f\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_{waterschap}_JA_processed.xlsx\"\n", + "feedback_excel_processed = (\n", + " f\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_{waterschap}_JA_processed.xlsx\"\n", + ")\n", "\n", "ribasim_toml = f\"../../../../../Ribasim_base_models/{waterschap}_boezemmodel_{versie}/ribasim.toml\"\n", - "output_folder = work_dir #f\"../../../../../Ribasim_updated_models/{waterschap}\"\n", + "output_folder = work_dir # f\"../../../../../Ribasim_updated_models/{waterschap}\"\n", "\n", - "processor = RibasimFeedbackProcessor(name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed)\n", - "processor.run()" + "processor = RibasimFeedbackProcessor(\n", + " name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed\n", + ")\n", + "processor.run()\n" ] }, { @@ -142,14 +175,14 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Load Ribasim model\n", "with warnings.catch_warnings():\n", - " warnings.simplefilter(action='ignore', category=FutureWarning)\n", - " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)" + " warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", + " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)\n" ] }, { @@ -161,7 +194,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -170,17 +203,17 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df['node_id'] == 195, 'meta_streefpeil'] = -2.45\n", - "ribasim_model.basin.state.df.loc[ribasim_model.basin.state.df.node_id == 195, 'level'] = -2.45" + "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"node_id\"] == 195, \"meta_streefpeil\"] = -2.45\n", + "ribasim_model.basin.state.df.loc[ribasim_model.basin.state.df.node_id == 195, \"level\"] = -2.45\n" ] }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -210,17 +243,18 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Define the initial state of each basin. Is set equal to the streefpeil\n", - "# ribasim_param.set_initial_basin_state(ribasim_model) #the initial states of the basins are by default already set to the streefpeil!" + "# ribasim_param.set_initial_basin_state(ribasim_model) #the initial states of the basins are by default already set to the streefpeil!\n", + "\n" ] }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 10, "metadata": { "scrolled": true }, @@ -1746,50 +1780,58 @@ ], "source": [ "# Add storage basins\n", - "model_name = 'AmstelGooienVecht_StorageBasins'\n", + "model_name = \"AmstelGooienVecht_StorageBasins\"\n", "# node_ids = [1, 2, 3] # Specify node IDs to process or include_hoofdwater Boolean\n", "# processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", "# ribasim_model = processor.run()\n", "\n", - "processor = AddStorageBasin(path_ribasim_toml, model_name, output_folder, include_hoofdwater=False, log=False, node_ids=None)\n", + "processor = AddStorageBasin(\n", + " path_ribasim_toml, model_name, output_folder, include_hoofdwater=False, log=False, node_ids=None\n", + ")\n", "ribasim_model = processor.run()\n", "\n", "# Check basin area\n", - "ribasim_param.validate_basin_area(ribasim_model)" + "ribasim_param.validate_basin_area(ribasim_model)\n" ] }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ - "#remove the basins of above in the feedback form" + "# remove the basins of above in the feedback form" ] }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ - "#change unknown streefpeilen to a default streefpeil\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df['meta_streefpeil'] == 'Onbekend streefpeil', 'meta_streefpeil'] = unknown_streefpeil\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df['meta_streefpeil'] == -9.999, 'meta_streefpeil'] = unknown_streefpeil" + "# change unknown streefpeilen to a default streefpeil\n", + "ribasim_model.basin.area.df.loc[\n", + " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", + "] = unknown_streefpeil\n", + "ribasim_model.basin.area.df.loc[\n", + " ribasim_model.basin.area.df[\"meta_streefpeil\"] == -9.999, \"meta_streefpeil\"\n", + "] = unknown_streefpeil\n" ] }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", - "ribasim_param.insert_standard_profile(ribasim_model, \n", - " unknown_streefpeil = unknown_streefpeil,\n", - " regular_percentage = regular_percentage, \n", - " boezem_percentage = boezem_percentage,\n", - " depth_profile = 2)" + "ribasim_param.insert_standard_profile(\n", + " ribasim_model,\n", + " unknown_streefpeil=unknown_streefpeil,\n", + " regular_percentage=regular_percentage,\n", + " boezem_percentage=boezem_percentage,\n", + " depth_profile=2,\n", + ")\n" ] }, { @@ -1801,17 +1843,18 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# Set static forcing\n", - "forcing_dict = {'precipitation': ribasim_param.convert_mm_day_to_m_sec(5),\n", - " 'potential_evaporation': ribasim_param.convert_mm_day_to_m_sec(0),\n", - " 'drainage': ribasim_param.convert_mm_day_to_m_sec(0),\n", - " 'infiltration': ribasim_param.convert_mm_day_to_m_sec(0),\n", - " # 'urban_runoff': ribasim_param.convert_mm_day_to_m_sec(0),\n", - " }\n", + "forcing_dict = {\n", + " \"precipitation\": ribasim_param.convert_mm_day_to_m_sec(10),\n", + " \"potential_evaporation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", + " \"drainage\": ribasim_param.convert_mm_day_to_m_sec(0),\n", + " \"infiltration\": ribasim_param.convert_mm_day_to_m_sec(0),\n", + " # 'urban_runoff': ribasim_param.convert_mm_day_to_m_sec(0),\n", + "}\n", "\n", "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)\n" ] @@ -1825,12 +1868,12 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# Set pump capacity for each pump\n", - "ribasim_model.pump.static.df['flow_rate'] = 0.16667 # 10 kuub per minuut" + "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut\n" ] }, { @@ -1842,15 +1885,13 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ - "ribasim_param.Terminals_to_LevelBoundaries(ribasim_model = ribasim_model,\n", - " default_level = default_level)\n", + "ribasim_param.Terminals_to_LevelBoundaries(ribasim_model=ribasim_model, default_level=default_level)\n", "\n", - "ribasim_param.FlowBoundaries_to_LevelBoundaries(ribasim_model = ribasim_model,\n", - " default_level = default_level)\n" + "ribasim_param.FlowBoundaries_to_LevelBoundaries(ribasim_model=ribasim_model, default_level=default_level)\n" ] }, { @@ -1862,11 +1903,11 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ - "ribasim_param.add_outlets(ribasim_model, delta_crest_level = 0.10)" + "ribasim_param.add_outlets(ribasim_model, delta_crest_level=0.10)" ] }, { @@ -1878,7 +1919,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -1887,67 +1928,68 @@ }, { "cell_type": "code", - "execution_count": 75, - "metadata": {}, - "outputs": [], - "source": [ - "# ribasim_model.pump.static.df" - ] - }, - { - "cell_type": "code", - "execution_count": 76, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ + "DEBUG:pyproj:PROJ_ERROR: proj_create: unrecognized format / unknown name\n", + "DEBUG:pyproj:PROJ_ERROR: proj_create: unrecognized format / unknown name\n", + "DEBUG:pyproj:PROJ_ERROR: proj_create: unrecognized format / unknown name\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sturing has been added for the category Inlaat boezem, stuw\n", + "Sturing has been added for the category Uitlaat boezem, stuw\n", + "Sturing has been added for the category Reguliere stuw\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:pyproj:PROJ_ERROR: proj_create: unrecognized format / unknown name\n", "DEBUG:pyproj:PROJ_ERROR: proj_create: unrecognized format / unknown name\n" ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sturing has been added for the category Inlaat buitenwater peilgebied, stuw\n", + "Sturing has been added for the category Uitlaat buitenwater peilgebied, stuw\n", + "No stuwen are found in the category of Boezem boezem, stuw\n", + "Sturing has been added for the category Inlaat boezem, gemaal\n", + "Sturing has been added for the category Uitlaat boezem, gemaal\n", + "Sturing has been added for the category Regulier afvoer gemaal\n", + "Sturing has been added for the category Regulier aanvoer gemaal\n", + "Sturing has been added for the category Uitlaat buitenwater peilgebied, afvoer gemaal\n", + "Sturing has been added for the category Uitlaat buitenwater peilgebied, aanvoer gemaal\n", + "Sturing has been added for the category Inlaat buitenwater peilgebied, afvoer gemaal\n", + "Sturing has been added for the category Inlaat buitenwater peilgebied, aanvoer gemaal\n", + "No gemalen are found in the category of Boezem boezem, afvoer gemaal\n", + "No gemalen are found in the category of Boezem boezem, aanvoer gemaal\n" + ] } ], "source": [ - "ribasim_param.add_discrete_control(ribasim_model)" + "ribasim_param.add_discrete_control(ribasim_model, waterschap, default_level)" ] }, { - "cell_type": "raw", + "cell_type": "code", + "execution_count": 19, "metadata": {}, + "outputs": [], "source": [ - "a = greater_than \n", - "b = FF FT TF TT --> block, block, pass, block\n", - "\n", - "Boezem naar peilgebied:\n", - "- stuw:\n", - " a) streefpeil from_node_id basin (boezem) - 0.10\n", - " b) ja\n", - "- gemaal:\n", - " a) streefpeil from_node_id basin (boezem) - 0.10\n", - " b) ja\n", - "\n", - "Peilgebied naar peilgebied:\n", - "- stuw:\n", - " a) streefpeil from_node_id basin (peilgebied) - 0.15\n", - " b) ja\n", - "- gemaal: kans is groot dat dit voor waterafvoer is. Hier dus geen (!) offset gebruiken\n", - " a) streefpeil from_node_id basin (peilgebied) - 0.0000000000 (!)\n", - " b) nee: FF FT TF TT --> block, block, pass, pass (!), vanwege waterafvoer\n", - "\n", - "Peilgebied naar boezem:\n", - "- stuw: dit is 100% voor alleen waterafvoer\n", - " a) streefpeil from_node_id basin (peilgebied) - 0.0000000000 (!)\n", - " b) nee: FF FT TF TT --> block, block, pass, pass (!), vanwege waterafvoer\n", - "- gemaal: dit is 100% voor alleen waterafvoer\n", - " a) streefpeil from_node_id basin (peilgebied) - 0.0000000000 (!)\n", - " b) nee: FF FT TF TT --> block, block, pass, pass (!), vanwege waterafvoer\n", - "\n", - "Boundary naar peilgebied: houd geen rekening met boundary, zie peilgebied naar peilgebied\n", - "Peilgebied naar boundary: houd geen rekening met boundary, zie peilgebied naar peilgebied\n", - "\n", - "Boundary naar boezem:\n", - "\n", - "De afvoeren worden bepaald in de outlets. Pas de capaciteit van de boezem-buitenwater knopen als laatste aan." + "ribasim_model.discrete_control.node.df = ribasim_model.discrete_control.node.df.drop_duplicates(\n", + " subset=\"node_id\"\n", + ").reset_index(drop=True)\n" ] }, { @@ -1959,12 +2001,12 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ - "#there is a MR without geometry and without edges for some reason\n", - "ribasim_model.manning_resistance.node.df = ribasim_model.manning_resistance.node.df.dropna(subset = 'geometry')" + "# there is a MR without geometry and without edges for some reason\n", + "ribasim_model.manning_resistance.node.df = ribasim_model.manning_resistance.node.df.dropna(subset=\"geometry\")\n" ] }, { @@ -1976,15 +2018,15 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "INFO:pyogrio._io:Created 1,883 records\n", - "INFO:pyogrio._io:Created 1,628 records\n", + "INFO:pyogrio._io:Created 2,343 records\n", + "INFO:pyogrio._io:Created 2,088 records\n", "INFO:pyogrio._io:Created 443 records\n" ] } @@ -1993,44 +2035,41 @@ "# Write model output\n", "ribasim_param.index_reset(ribasim_model)\n", "ribasim_model.starttime = datetime.datetime(2024, 1, 1)\n", - "ribasim_model.endtime = datetime.datetime(2024, 1, 1, 0, 0, 1)\n", + "ribasim_model.endtime = datetime.datetime(2024, 1, 30)\n", "ribasim_model.solver.saveat = 3600\n", - "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, \n", - " path_ribasim_toml)" + "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)\n" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, "metadata": {}, - "source": [ - "## Run Model" - ] + "outputs": [], + "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Iterate over tabulated rating curves" + "## Run Model" ] }, { - "cell_type": "code", - "execution_count": 83, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "# ribasim_model.outlet.static.df" + "## Iterate over tabulated rating curves" ] }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a89ad18281e3466e87f82f6b75d41792", + "model_id": "7f173194a7c04992b1d34f6959d6af62", "version_major": 2, "version_minor": 0 }, @@ -2044,7 +2083,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "117212c237c94443b105958b0a310d12", + "model_id": "f47456acf2c44d368665847c90fd6bd1", "version_major": 2, "version_minor": 0 }, @@ -2058,24 +2097,26 @@ ], "source": [ "try:\n", - " ribasim_param.iterate_TRC(ribasim_param = ribasim_param, \n", - " allowed_tolerance = 0.02, \n", - " max_iter = 1, \n", - " expected_difference = 0.1, \n", - " max_adjustment = 0.25, \n", - " cmd = ['ribasim', path_ribasim_toml], \n", - " output_dir = output_dir, \n", - " path_ribasim_toml = path_ribasim_toml)\n", + " ribasim_param.iterate_TRC(\n", + " ribasim_param=ribasim_param,\n", + " allowed_tolerance=0.02,\n", + " max_iter=1,\n", + " expected_difference=0.1,\n", + " max_adjustment=0.25,\n", + " cmd=[\"ribasim\", path_ribasim_toml],\n", + " output_dir=output_dir,\n", + " path_ribasim_toml=path_ribasim_toml,\n", + " )\n", "\n", "except Exception:\n", " logging.error(\"The model was not able to run. Log file:\")\n", - " log_file_path = os.path.join(output_dir, 'ribasim.log') # Update with the correct path to your log file\n", + " log_file_path = os.path.join(output_dir, \"ribasim.log\") # Update with the correct path to your log file\n", " try:\n", " with open(log_file_path) as log_file:\n", " log_content = log_file.read()\n", " print(log_content)\n", " except Exception as log_exception:\n", - " logging.error(f\"Could not read the log file: {log_exception}\")" + " logging.error(f\"Could not read the log file: {log_exception}\")\n" ] }, { @@ -2087,15 +2128,28 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "INFO:pyogrio._io:Created 1,931 records\n", - "INFO:pyogrio._io:Created 1,676 records\n", + "INFO:pyogrio._io:Created 2,343 records\n", + "INFO:pyogrio._io:Created 2,088 records\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized/results\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "INFO:pyogrio._io:Created 443 records\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"GET /remote.php/dav/files/nhi_api/Ribasim%20modeldata HTTP/1.1\" 200 None\n", @@ -2103,49 +2157,34 @@ "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PROPFIND /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen HTTP/1.1\" 207 None\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"MKCOL /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6 HTTP/1.1\" 201 0\n", - "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PROPFIND /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6 HTTP/1.1\" 207 None\n", - "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/database_checks.gpkg\n", - "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/database_checks.gpkg HTTP/1.1\" 201 0\n", - "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/ribasim.toml\n", + "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"MKCOL /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24 HTTP/1.1\" 201 0\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/ribasim.toml HTTP/1.1\" 201 0\n", - "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/visualisation_checks.qlr\n", + "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PROPFIND /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24 HTTP/1.1\" 207 None\n", + "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/ribasim.toml\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/visualisation_checks.qlr HTTP/1.1\" 201 0\n", - "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/visualisation_Ribasim.qlr\n", + "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/ribasim.toml HTTP/1.1\" 201 0\n", + "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/database.gpkg\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/visualisation_Ribasim.qlr HTTP/1.1\" 201 0\n", - "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/database.gpkg\n", + "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/database.gpkg HTTP/1.1\" 201 0\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/database.gpkg HTTP/1.1\" 201 0\n", - "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/AmstelGooienVecht.log\n", + "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"MKCOL /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/results HTTP/1.1\" 201 0\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/AmstelGooienVecht.log HTTP/1.1\" 201 0\n", + "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PROPFIND /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/results HTTP/1.1\" 207 None\n", + "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/results/ribasim.log\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"MKCOL /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results HTTP/1.1\" 201 0\n", + "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/results/ribasim.log HTTP/1.1\" 201 0\n", + "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/results/basin_state.arrow\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PROPFIND /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results HTTP/1.1\" 207 None\n", - "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results/subgrid_levels.arrow\n", + "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/results/basin_state.arrow HTTP/1.1\" 201 0\n", + "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/results/basin.arrow\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results/subgrid_levels.arrow HTTP/1.1\" 201 0\n", - "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results/ribasim.log\n", + "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/results/basin.arrow HTTP/1.1\" 201 0\n", + "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/results/control.arrow\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results/ribasim.log HTTP/1.1\" 201 0\n", - "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results/basin_state.arrow\n", + "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/results/control.arrow HTTP/1.1\" 201 0\n", + "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/results/flow.arrow\n", "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results/basin_state.arrow HTTP/1.1\" 201 0\n", - "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results/basin.arrow\n", - "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results/basin.arrow HTTP/1.1\" 201 0\n", - "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results/control.arrow\n", - "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results/control.arrow HTTP/1.1\" 201 0\n", - "INFO:ribasim_nl.cloud:uploading file ../../../../../Ribasim_networks/Waterschappen/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results/flow.arrow\n", - "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): deltares.thegood.cloud:443\n", - "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_boezemmodel_2024_8_6/results/flow.arrow HTTP/1.1\" 201 0\n" + "DEBUG:urllib3.connectionpool:https://deltares.thegood.cloud:443 \"PUT /remote.php/dav/files/nhi_api/Ribasim%20modeldata/AmstelGooienVecht/modellen/AmstelGooienVecht_parametrized_2024_8_24/results/flow.arrow HTTP/1.1\" 201 0\n" ] }, { @@ -2158,16 +2197,18 @@ ], "source": [ "# control_dict = Control(work_dir = work_dir).run_all()\n", - "ribasim_param.write_ribasim_model_GoodCloud(ribasim_model = ribasim_model, \n", - " path_ribasim_toml = path_ribasim_toml,\n", - " waterschap = 'AmstelGooienVecht', \n", - " modeltype = 'boezemmodel',\n", - " include_results = True)\n" + "ribasim_param.write_ribasim_model_GoodCloud(\n", + " ribasim_model=ribasim_model,\n", + " path_ribasim_toml=path_ribasim_toml,\n", + " waterschap=\"AmstelGooienVecht\",\n", + " modeltype=\"boezemmodel\",\n", + " include_results=True,\n", + ")\n" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 24, "metadata": { "scrolled": true }, @@ -2179,7 +2220,7 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[26], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mstop\u001b[49m\n", + "Cell \u001b[0;32mIn[24], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mstop\u001b[49m\n", "\u001b[0;31mNameError\u001b[0m: name 'stop' is not defined" ] } @@ -2201,8 +2242,8 @@ "metadata": {}, "outputs": [], "source": [ - "df_basin = pd.read_feather(os.path.join(output_dir, 'basin.arrow'))\n", - "df_basin" + "df_basin = pd.read_feather(os.path.join(output_dir, \"basin.arrow\"))\n", + "df_basin\n" ] }, { @@ -2216,12 +2257,13 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Set FlowBoundary rate for each pump\n", - "# ribasim_model.flow_boundary.static.df['flow_rate'] = 0 #" + "# ribasim_model.flow_boundary.static.df['flow_rate'] = 0 #\n", + "\n" ] }, { @@ -2235,14 +2277,15 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "# Add discrete control nodes and control edges\n", - "# ribasim_param.add_discrete_control_nodes(ribasim_model)" + "# ribasim_param.add_discrete_control_nodes(ribasim_model)\n", + "\n" ] }, { @@ -2254,32 +2297,33 @@ }, { "cell_type": "markdown", - "metadata": { - "jp-MarkdownHeadingCollapsed": true - }, + "metadata": {}, "source": [ "### TabulatedRatingCurve" ] }, { "cell_type": "code", - "execution_count": 78, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# # First, set the Q(h)-relationship to a relationship which is at each TRC node the same\n", - "# ribasim_param.set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=1)" + "# ribasim_param.set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=1)\n", + "\n" ] }, { "cell_type": "code", - "execution_count": 79, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "# # The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level. \n", + "# # The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", "# # Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", - "# ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)\n" + "# ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)\n", + "\n", + "\n" ] } ], diff --git a/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py b/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py index 65e5e66..53b14e5 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py +++ b/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py @@ -1,4 +1,7 @@ # import pathlib +import json +import os +import shutil import subprocess import sys import warnings @@ -83,9 +86,50 @@ def insert_standard_profile( profile_total = pd.concat([profile_bottom, profile_slightly_above_bottom, profile_top]) profile_total = profile_total.sort_values(by=["node_id", "level", "area"], ascending=True).reset_index(drop=True) + + + #the profiles of the bergende basins are not the same as the doorgaande basins. Fix this. + profile_total['meta_categorie'] = profile_total.merge(right=ribasim_model.basin.state.df, + on = 'node_id')['meta_categorie'] + + #find the node_id of the bergende nodes with the doorgaande nodes + bergende_nodes = profile_total.loc[profile_total.meta_categorie == 'bergend'][['node_id']].reset_index(drop=True) + bergende_nodes['from_MR_node'] = bergende_nodes.merge(right=ribasim_model.edge.df, + left_on='node_id', + right_on='from_node_id', + how = 'left')['to_node_id'] + + bergende_nodes['doorgaande_node'] = bergende_nodes.merge(right=ribasim_model.edge.df, + left_on='from_MR_node', + right_on='from_node_id', + how='left')['to_node_id'] + + #find the profiles + bergende_nodes = bergende_nodes.drop_duplicates(subset='node_id') + bergende_nodes = bergende_nodes.merge(right=ribasim_model.basin.profile.df, + left_on='doorgaande_node', + right_on='node_id', + how='inner', + suffixes=('', 'doorgaand')) + bergende_nodes['meta_categorie'] = 'bergend' + + + #add the found profiles in the table + profile_total = profile_total.loc[profile_total.meta_categorie != 'bergend'].reset_index(drop=True) #remove bergende profiles, as they will be added here below + profile_total = pd.concat([profile_total, bergende_nodes[['node_id', 'level', 'area', 'meta_categorie']]]) + profile_total = profile_total.sort_values(by=['node_id', 'level']).reset_index(drop=True) + # insert the new tables in the model ribasim_model.basin.profile.df = profile_total + #due to the bergende basin, the surface area has been doubled. Correct this. + ribasim_model.basin.profile.df.area /= 2 + + # The newly created (storage) basins do not have a correct initial level yet. Fix this as well. + initial_level = ribasim_model.basin.profile.df.copy() + initial_level = initial_level.drop_duplicates(subset='node_id', keep='last') + ribasim_model.basin.state.df['level'] = ribasim_model.basin.state.df.merge(right=initial_level, + on='node_id')['level_y'] return @@ -568,26 +612,48 @@ def create_sufficient_Qh_relation_points(ribasim_model): def write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml): # Write Ribasim model to the Z drive + if not os.path.exists(path_ribasim_toml): + os.makedirs(path_ribasim_toml) + ribasim_model.write(path_ribasim_toml) def write_ribasim_model_GoodCloud( ribasim_model, path_ribasim_toml, waterschap, modeltype="boezemmodel", include_results=True ): - # Write Ribasim model to the Z drive again, as we want to store the results as well - ribasim_model.write(path_ribasim_toml) - # Write Ribasim model to the GoodCloud + #copy the results folder from the "updated" folder to the "Ribasim_networks" folder + results_source = f'../../../../../Ribasim_updated_models/{waterschap}/modellen/{waterschap}_parametrized/results' + parametrized_location = f"../../../../../Ribasim_networks/Waterschappen/{waterschap}/modellen/{waterschap}_parametrized" + + if not os.path.exists(parametrized_location): + os.makedirs(parametrized_location) + + # If the destination folder of the results already exists, remove it + print(os.path.join(parametrized_location, 'results')) + if os.path.exists(os.path.join(parametrized_location, 'results')): + shutil.rmtree(os.path.join(parametrized_location, 'results')) + + #copy the results to the Ribasim_networks folder + shutil.copytree(results_source, os.path.join(parametrized_location, 'results')) + + #copy the model to the Ribasim_networks folder + parametrized_location = os.path.join(parametrized_location, "ribasim.toml") + ribasim_model.write(parametrized_location) #write to the "Ribasim_networks" folder (will NOT be overwritten at each upload) + path_goodcloud_password = "../../../../../Data_overig/password_goodcloud.txt" with open(path_goodcloud_password) as file: password = file.read() - # Gain access to the goodcloud - cloud_storage = CloudStorage(password=password, data_dir=r"../../../../../Ribasim_networks/Waterschappen/") + cloud_storage = CloudStorage( + password=password, + data_dir=r"../../../../../Ribasim_networks/Waterschappen/", + ) - # Upload the model cloud_storage.upload_model( - authority=waterschap, model=waterschap + "_" + modeltype, include_results=include_results + authority=waterschap, + model=waterschap + "_parametrized", + include_results = include_results ) print(f"The model of waterboard {waterschap} has been uploaded to the goodcloud in the directory of {modeltype}!") @@ -822,7 +888,7 @@ def identify_node_meta_categorie(ribasim_model): | (ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem)) ), "meta_categorie", - ] = "Reguliere gemaal" + ] = "Regulier gemaal" # repeat for the boundary nodes # identify the buitenwater uitlaten and inlaten. A part will be overwritten later, if its a boundary & boezem. @@ -843,86 +909,206 @@ def identify_node_meta_categorie(ribasim_model): # boundary & boezem. This is the part where a portion of the already defined meta_categorie will be overwritten by the code above. ribasim_model.outlet.static.df.loc[ (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boundary)) - & (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem)), + & (ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem)), #to "meta_categorie", ] = "Uitlaat buitenwater boezem, stuw" ribasim_model.pump.static.df.loc[ (ribasim_model.pump.static.df.node_id.isin(nodes_to_boundary)) - & (ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem)), + & (ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem)), #to "meta_categorie", ] = "Uitlaat buitenwater boezem, gemaal" ribasim_model.outlet.static.df.loc[ (ribasim_model.outlet.static.df.node_id.isin(nodes_from_boundary)) - & (ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem)), + & (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem)), #from "meta_categorie", ] = "Inlaat buitenwater boezem, stuw" ribasim_model.pump.static.df.loc[ (ribasim_model.pump.static.df.node_id.isin(nodes_from_boundary)) - & (ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem)), + & (ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem)), #from "meta_categorie", ] = "Inlaat buitenwater boezem, gemaal" + #boezem & boezem. + ribasim_model.outlet.static.df.loc[ + (ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem)) + & (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem)), + "meta_categorie", + ] = "Boezem boezem, stuw" + + ribasim_model.pump.static.df.loc[ + (ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem)) + & (ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem)), + "meta_categorie", + ] = "Boezem boezem, gemaal" + + #some pumps have been added due to the feedback form. Assume all these nodes are afvoer gemalen + ribasim_model.pump.static.df.meta_func_afvoer.fillna(value=1.0, inplace = True) + ribasim_model.pump.static.df.meta_func_aanvoer.fillna(value=0.0, inplace = True) + ribasim_model.pump.static.df.meta_func_circulatie.fillna(value=0.0, inplace = True) + return +def load_model_settings(file_path): + with open(file_path, 'r') as file: + settings = json.load(file) + return settings -def add_discrete_control(ribasim_model): +def add_discrete_control(ribasim_model, waterschap, default_level): """Add discrete control nodes to the network. The rules are based on the meta_categorie of each node.""" - # first, remove all Discrete Control if its present + #load in the sturing which is defined in the json files + sturing = load_model_settings(f'sturing_{waterschap}.json') + + # Remove all Discrete Control nodes and edges if its present ribasim_model.discrete_control.node.df = ribasim_model.discrete_control.node.df.iloc[0:0] if ribasim_model.discrete_control.condition.df is not None: ribasim_model.discrete_control.condition.df = ribasim_model.discrete_control.condition.df.iloc[0:0] ribasim_model.discrete_control.logic.df = ribasim_model.discrete_control.logic.df.iloc[0:0] ribasim_model.discrete_control.variable.df = ribasim_model.discrete_control.variable.df.iloc[0:0] - # ribasim_model.edge.df = ribasim_model.edge.df.iloc[0:0] + ribasim_model.edge.df = ribasim_model.edge.df.loc[ribasim_model.edge.df.edge_type != 'control'] + #start assigning sturing to outlets/weirs # find the nodes to change - boezem_naar_peilgebied_stuw = ribasim_model.outlet.static.df.loc[ - ribasim_model.outlet.static.df.meta_categorie == "Inlaat boezem, stuw", "node_id" - ] - # boezem_naar_peilgebied_gemaal = ribasim_model.pump.static.df.loc[ - # ribasim_model.pump.static.df.meta_categorie == "Inlaat boezem, gemaal", "node_id" - # ] + inlaat_boezem_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == "Inlaat boezem, stuw", "node_id"] + uitlaat_boezem_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == "Uitlaat boezem, stuw", "node_id"] + reguliere_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == "Reguliere stuw", "node_id"] + inlaat_buitenwater_peilgebied_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == "Inlaat buitenwater peilgebied, stuw", "node_id"] + uitlaat_buitenwater_peilgebied_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == "Uitlaat buitenwater peilgebied, stuw", "node_id"] + boezem_boezem_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == "Boezem boezem, stuw", "node_id"] + + #assign the sturing for the weirs/outlets. + nodes_to_control_list_stuw = [inlaat_boezem_stuw, + uitlaat_boezem_stuw, + reguliere_stuw, + inlaat_buitenwater_peilgebied_stuw, + uitlaat_buitenwater_peilgebied_stuw, + boezem_boezem_stuw] + + category_list_stuw = ['Inlaat boezem, stuw', + 'Uitlaat boezem, stuw', + 'Reguliere stuw', + 'Inlaat buitenwater peilgebied, stuw', + 'Uitlaat buitenwater peilgebied, stuw', + 'Boezem boezem, stuw'] # fill the discrete control. Do this table by tables, where the condition table is determined by the meta_categorie - add_discrete_control_partswise( - ribasim_model=ribasim_model, - nodes_to_control=boezem_naar_peilgebied_stuw, - upstream_level_offset=0, - truth_state=["FF", "FT", "TF", "TT"], - control_state=["block", "block", "pass", "block"], - flow_rate_block=0, - flow_rate_pass=1, - node_type="outlet", - ) + for nodes_to_control, category in zip(nodes_to_control_list_stuw, category_list_stuw): + if len(nodes_to_control) > 0: + print(f'Sturing has been added for the category {category}') + add_discrete_control_partswise(ribasim_model=ribasim_model, + nodes_to_control=nodes_to_control, + category=category, + sturing = sturing, + default_level = default_level) + else: + print(f'No stuwen are found in the category of {category}') + + #repeat for the pumps + # find the nodes to change + inlaat_boezem_gemaal = ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.meta_categorie == "Inlaat boezem, gemaal", "node_id"] + uitlaat_boezem_gemaal = ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.meta_categorie == "Uitlaat boezem, gemaal", "node_id"] + + regulier_gemaal_afvoer = ribasim_model.pump.static.df.loc[((ribasim_model.pump.static.df.meta_categorie == "Regulier gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 0)), "node_id"] + regulier_gemaal_aanvoer = ribasim_model.pump.static.df.loc[((ribasim_model.pump.static.df.meta_categorie == "Regulier gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 1)), "node_id"] + + uitlaat_buitenwater_peilgebied_gemaal_afvoer = ribasim_model.pump.static.df.loc[((ribasim_model.pump.static.df.meta_categorie == "Uitlaat buitenwater peilgebied, gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 0)), "node_id"] + uitlaat_buitenwater_peilgebied_gemaal_aanvoer = ribasim_model.pump.static.df.loc[((ribasim_model.pump.static.df.meta_categorie == "Uitlaat buitenwater peilgebied, gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 1)), "node_id"] + + inlaat_buitenwater_peilgebied_gemaal_afvoer = ribasim_model.pump.static.df.loc[((ribasim_model.pump.static.df.meta_categorie == "Inlaat buitenwater peilgebied, gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 0)), "node_id"] + inlaat_buitenwater_peilgebied_gemaal_aanvoer = ribasim_model.pump.static.df.loc[((ribasim_model.pump.static.df.meta_categorie == "Inlaat buitenwater peilgebied, gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 1)), "node_id"] + + + # display(inlaat_buitenwater_peilgebied_gemaal_afvoer) + # display(inlaat_buitenwater_peilgebied_gemaal_aanvoer) + boezem_boezem_gemaal_afvoer = ribasim_model.outlet.static.df.loc[((ribasim_model.outlet.static.df.meta_categorie == "Boezem boezem, gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 0)), "node_id"] + boezem_boezem_gemaal_aanvoer = ribasim_model.outlet.static.df.loc[((ribasim_model.outlet.static.df.meta_categorie == "Boezem boezem, gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 1)), "node_id"] + + #assign the sturing for the gemalen/pumps. + nodes_to_control_list_gemaal = [inlaat_boezem_gemaal, + uitlaat_boezem_gemaal, + regulier_gemaal_afvoer, + regulier_gemaal_aanvoer, + uitlaat_buitenwater_peilgebied_gemaal_afvoer, + uitlaat_buitenwater_peilgebied_gemaal_aanvoer, + inlaat_buitenwater_peilgebied_gemaal_afvoer, # + inlaat_buitenwater_peilgebied_gemaal_aanvoer, # + boezem_boezem_gemaal_afvoer, + boezem_boezem_gemaal_aanvoer] + + category_list_gemaal = ['Inlaat boezem, gemaal', + 'Uitlaat boezem, gemaal', + 'Regulier afvoer gemaal', + 'Regulier aanvoer gemaal', + 'Uitlaat buitenwater peilgebied, afvoer gemaal', + 'Uitlaat buitenwater peilgebied, aanvoer gemaal', + 'Inlaat buitenwater peilgebied, afvoer gemaal', # + 'Inlaat buitenwater peilgebied, aanvoer gemaal', # + 'Boezem boezem, afvoer gemaal', + 'Boezem boezem, aanvoer gemaal'] # fill the discrete control. Do this table by tables, where the condition table is determined by the meta_categorie - # add_discrete_control_partswise(ribasim_model = ribasim_model, - # nodes_to_control = boezem_naar_peilgebied_stuw, - # upstream_level_offset = 0, - # truth_state = ["FF", "FT", "TF", "TT"], - # control_state = ["block", "block", "pass", "block"], - # flow_rate_block = 0, - # flow_rate_pass = 10/60, #m3/min - # node_type = 'pump') - + for nodes_to_control, category in zip(nodes_to_control_list_gemaal, category_list_gemaal): + if len(nodes_to_control) > 0: + print(f'Sturing has been added for the category {category}') + add_discrete_control_partswise(ribasim_model=ribasim_model, + nodes_to_control=nodes_to_control, + category=category, + sturing = sturing, + default_level = default_level) + else: + print(f'No gemalen are found in the category of {category}') + + + + # # fill the discrete control. Do this table by tables, where the condition table is determined by the meta_categorie. Start with the outlets/stuwen + # add_discrete_control_partswise( + # ribasim_model=ribasim_model, + # nodes_to_control=inlaat_boezem_stuw, + # category='Inlaat boezem, stuw', + # sturing = sturing, + # default_level = default_level) + + #many duplicate values have been created. Discard those. + # ribasim_model.outlet.static.df = ribasim_model.outlet.static.df.drop_duplicates().reset_index(drop=True) + # ribasim_model.pump.static.df = ribasim_model.pump.static.df.drop_duplicates().reset_index(drop=True) + + #a DC node occures twice in the table of teh nodes at case of AGV, while this node is not present at all in the DC tables. REmove it + DC_nodes = pd.concat([ribasim_model.discrete_control.logic.df.node_id, + ribasim_model.discrete_control.variable.df.node_id, + ribasim_model.discrete_control.condition.df.node_id]) + + DC_nodes = DC_nodes.drop_duplicates().reset_index(drop=True) + + #add meta_downstream to the DC variable + ribasim_model.discrete_control.variable.df['meta_downstream'] = ribasim_model.discrete_control.variable.df.merge(right = ribasim_model.discrete_control.condition.df, + left_on = ['compound_variable_id', 'listen_node_id'], + right_on = ['compound_variable_id', 'meta_listen_node_id'], + how = 'left')[['meta_downstream']] + + ribasim_model.discrete_control.node.df = ribasim_model.discrete_control.node.df.loc[ribasim_model.discrete_control.node.df.node_id.isin(DC_nodes.values)].reset_index(drop=True) + ribasim_model.discrete_control.node.df = ribasim_model.discrete_control.node.df.drop_duplicates(subset='node_id').reset_index(drop=True) + ribasim_model.discrete_control.condition.df = ribasim_model.discrete_control.condition.df.drop_duplicates().sort_values(by=['node_id', 'meta_downstream']).reset_index(drop=True) + ribasim_model.discrete_control.variable.df = ribasim_model.discrete_control.variable.df.drop_duplicates().sort_values(by=['node_id', 'meta_downstream']).reset_index(drop=True) + ribasim_model.discrete_control.logic.df = ribasim_model.discrete_control.logic.df.drop_duplicates().sort_values(by=['node_id', 'truth_state']).reset_index(drop=True) + + return -def add_discrete_control_partswise( - ribasim_model, - nodes_to_control, - upstream_level_offset, - truth_state, - control_state, - flow_rate_block, - flow_rate_pass, - node_type, -): +def add_discrete_control_partswise(ribasim_model, nodes_to_control, category, sturing, default_level): + + #define the sturing parameters in variables + upstream_level_offset = sturing[category]['upstream_level_offset'] + truth_state = sturing[category]['truth_state'] + control_state = sturing[category]['control_state'] + flow_rate_block = sturing[category]['flow_rate_block'] + flow_rate_pass = sturing[category]['flow_rate_pass'] + node_type = sturing[category]['node_type'] + ### node #################################################### # add the discrete control .node table. The node_ids are the same as the node_id of the outlet/pump, but 80.000 is added DC_nodes = pd.DataFrame() - DC_nodes["node_id"] = nodes_to_control + 80000 + DC_nodes["node_id"] = nodes_to_control.astype(int) + 80000 # trace back the node_id which the DiscreteControl controls, including the compoun_variable_id which is set the same as the node_id DC_nodes["meta_control_node_id"] = nodes_to_control @@ -1080,9 +1266,13 @@ def add_discrete_control_partswise( DC_condition_ds["meta_to_control_node_type"] = DC_condition_ds.merge( right=DC_condition_us, on="compound_variable_id", how="left" )["meta_to_control_node_type"] + # concat the upstream and the downstream condition table DC_condition = pd.concat([DC_condition_us, DC_condition_ds]) + #every basin should have a target level by this part of the code. However, LevelBoundaries may not. Implement it + DC_condition.greater_than.fillna(value = default_level, inplace=True) + # concat the entire DC_condition to the ribasim model ribasim_model.discrete_control.condition.df = pd.concat([ribasim_model.discrete_control.condition.df, DC_condition]) ribasim_model.discrete_control.condition.df = ribasim_model.discrete_control.condition.df.sort_values( From 6bdcfb60996061e081addb15baf2d1d487774e23 Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Tue, 13 Aug 2024 13:59:48 +0200 Subject: [PATCH 18/25] Add workaround to import packages --- src/peilbeheerst_model/Parametrize/load_ribasim.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/peilbeheerst_model/Parametrize/load_ribasim.py diff --git a/src/peilbeheerst_model/Parametrize/load_ribasim.py b/src/peilbeheerst_model/Parametrize/load_ribasim.py new file mode 100644 index 0000000..08e1774 --- /dev/null +++ b/src/peilbeheerst_model/Parametrize/load_ribasim.py @@ -0,0 +1,12 @@ +import os +import sys +from pathlib import Path + +# load ribasim_nl +module_path = Path.cwd() / "../../ribasim_nl/" +sys.path.append(str(module_path)) + +current_dir = os.getcwd() +parent_dir = os.path.dirname(current_dir) +if parent_dir not in sys.path: + sys.path.append(parent_dir) From 21138f270e93022b4d7320533c944f7ce8937473 Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Tue, 13 Aug 2024 14:00:36 +0200 Subject: [PATCH 19/25] Delete outdated notebook of HHSK --- ...ielandendeKrimpenerwaard_parametrize.ipynb | 466 ------------------ 1 file changed, 466 deletions(-) delete mode 100644 src/peilbeheerst_model/Parametrize/SchielandendeKrimpenerwaard_parametrize.ipynb diff --git a/src/peilbeheerst_model/Parametrize/SchielandendeKrimpenerwaard_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/SchielandendeKrimpenerwaard_parametrize.ipynb deleted file mode 100644 index cbf35c1..0000000 --- a/src/peilbeheerst_model/Parametrize/SchielandendeKrimpenerwaard_parametrize.ipynb +++ /dev/null @@ -1,466 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import datetime\n", - "import logging\n", - "import os\n", - "import pathlib\n", - "import warnings\n", - "\n", - "import pandas as pd\n", - "import peilbeheerst_model.ribasim_parametrization as ribasim_param\n", - "import ribasim\n", - "import ribasim.nodes\n", - "from peilbeheerst_model.add_storage_basins import AddStorageBasin\n", - "from peilbeheerst_model.ribasim_feedback_processor import RibasimFeedbackProcessor\n", - "\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "\"\"\"\n", - "Model Aannamens:\n", - "- Max area van hydroobjecten is 10% van basin area, 90% bij boezem\n", - "- Initial state op streefpeil\n", - "- \n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Define variables and model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Set Config" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set paths\n", - "waterschap = \"SchielandendeKrimpenerwaard\"\n", - "versie = \"2024_7_1\"\n", - "\n", - "work_dir = pathlib.Path(r\"../../../../../Ribasim_updated_models\", waterschap)\n", - "ribasim_gpkg = work_dir.joinpath(\"database.gpkg\")\n", - "path_ribasim_toml = work_dir.joinpath(\"ribasim.toml\")\n", - "output_dir = work_dir.joinpath(\"results\")\n", - "\n", - "# Basin area percentage\n", - "regular_percentage = 10\n", - "boezem_percentage = 90\n", - "unknown_streefpeil = (\n", - " 0.00012345 # we need a streefpeil to create the profiles, Q(h)-relations, and af- and aanslag peil for pumps\n", - ")\n", - "\n", - "# Forcing settings\n", - "start_time = \"2024-01-01\"\n", - "timestep_size = \"d\"\n", - "timesteps = 2\n", - "\n", - "default_boundary_level = 0" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Process the feedback form" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "name = \"Ron Bruijns (HKV)\"\n", - "\n", - "feedback_excel = pathlib.Path(\n", - " r\"../../../../../Ribasim_feedback/V1_formulieren/feedback_formulier_\" + waterschap + \".xlsx\"\n", - ")\n", - "feedback_excel_processed = (\n", - " r\"../../../../..//Ribasim_feedback/V1_formulieren_verwerkt/feedback_formulier_\" + waterschap + \"_JA_processed.xlsx\"\n", - ")\n", - "\n", - "ribasim_toml = pathlib.Path(\n", - " r\"../../../../../Ribasim_base_models\", waterschap + \"_boezemmodel_\" + versie, \"ribasim.toml\"\n", - ")\n", - "output_folder = work_dir # r\"../../../../../Ribasim_updated_models/AmstelGooienVecht\"\n", - "\n", - "processor = RibasimFeedbackProcessor(\n", - " name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed\n", - ")\n", - "processor.run()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Load model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load Ribasim model\n", - "with warnings.catch_warnings():\n", - " warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", - " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Model specific tweaks" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "assert not pd.isnull(ribasim_model.basin.area.df.meta_streefpeil).any()\n", - "\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", - "] = unknown_streefpeil\n", - "\n", - "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"meta_streefpeil\"] == 9.999, \"meta_streefpeil\"] = (\n", - " unknown_streefpeil\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Parameterization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Nodes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (characteristics)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the initial state of each basin. Is set equal to the streefpeil\n", - "# ribasim_param.set_initial_basin_state(ribasim_model) #the initial states of the basins are by default already set to the streefpeil!\n", - "\n", - "# Insert standard profiles to each basin. These are [depth_profiles] meter deep, defined from the streefpeil\n", - "ribasim_param.insert_standard_profile(\n", - " ribasim_model, regular_percentage=regular_percentage, boezem_percentage=boezem_percentage, depth_profile=2\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add storage basins\n", - "model_name = \"SchielandendeKrimpenerwaard_StorageBasins\"\n", - "# node_ids = [1, 2, 3] # Specify node IDs to process or include_hoofdwater Boolean\n", - "processor = AddStorageBasin(ribasim_toml, model_name, output_folder, include_hoofdwater=True, log=True, node_ids=None)\n", - "ribasim_model = processor.run()\n", - "\n", - "# Check basin area\n", - "ribasim_param.validate_basin_area(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Basin (forcing)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set static forcing\n", - "forcing_dict = {\n", - " \"precipitation\": ribasim_param.convert_mm_day_to_m_sec(5),\n", - " \"potential_evaporation\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"drainage\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"infiltration\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - " \"urban_runoff\": ribasim_param.convert_mm_day_to_m_sec(0),\n", - "}\n", - "\n", - "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pumps" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set pump capacity for each pump\n", - "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "### Convert all boundary nodes to LevelBoundaries" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ribasim_param.Terminals_to_LevelBoundaries(ribasim_model=ribasim_model, default_level=default_boundary_level)\n", - "\n", - "ribasim_param.FlowBoundaries_to_LevelBoundaries(ribasim_model=ribasim_model, default_level=default_boundary_level)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### FlowBoundary" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# # Set FlowBoundary rate for each pump\n", - "# ribasim_model.flow_boundary.static.df['flow_rate'] = 0 #" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Add Discrete Control" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Add discrete control nodes and control edges\n", - "ribasim_param.add_discrete_control_nodes(ribasim_model)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### TabulatedRatingCurve" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# First, set the Q(h)-relationship to a relationship which is at each TRC node the same\n", - "ribasim_param.set_tabulated_rating_curves(ribasim_model, level_increase=1.0, flow_rate=1)\n", - "\n", - "# The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", - "# Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", - "ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Set numerical settings" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Write model output\n", - "ribasim_param.index_reset(ribasim_model)\n", - "ribasim_model.starttime = datetime.datetime(2024, 1, 1)\n", - "ribasim_model.endtime = datetime.datetime(2024, 1, 5)\n", - "ribasim_model.solver.saveat = 3600\n", - "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Iterate over tabulated rating curves" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "try:\n", - " ribasim_param.iterate_TRC(\n", - " ribasim_param=ribasim_param,\n", - " allowed_tolerance=0.02,\n", - " max_iter=1,\n", - " expected_difference=0.1,\n", - " max_adjustment=0.25,\n", - " cmd=[\"ribasim\", path_ribasim_toml],\n", - " output_dir=output_dir,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " )\n", - "\n", - "except Exception:\n", - " logging.error(\"The model was not able to run. Log file:\")\n", - " log_file_path = os.path.join(output_dir, \"ribasim.log\")\n", - " try:\n", - " with open(log_file_path) as log_file:\n", - " log_content = log_file.read()\n", - " print(log_content)\n", - " except Exception as log_exception:\n", - " logging.error(f\"Could not read the log file: {log_exception}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Write model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# control_dict = Control(work_dir = work_dir).run_all()\n", - "ribasim_param.write_ribasim_model_GoodCloud(\n", - " ribasim_model=ribasim_model,\n", - " path_ribasim_toml=path_ribasim_toml,\n", - " waterschap=waterschap,\n", - " modeltype=\"boezemmodel\",\n", - " include_results=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Open Output" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df_basin = pd.read_feather(os.path.join(output_dir, \"basin.arrow\"))\n", - "df_basin" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:ribasim]", - "language": "python", - "name": "conda-env-ribasim-py" - }, - "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.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} From 2f722d2f3424f33f88e02a9a9217ca41b9a7d609 Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Tue, 13 Aug 2024 14:01:17 +0200 Subject: [PATCH 20/25] Add sturing to AGV --- .../sturing_AmstelGooienVecht.json | 144 ++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 src/peilbeheerst_model/Parametrize/sturing_AmstelGooienVecht.json diff --git a/src/peilbeheerst_model/Parametrize/sturing_AmstelGooienVecht.json b/src/peilbeheerst_model/Parametrize/sturing_AmstelGooienVecht.json new file mode 100644 index 0000000..9431e14 --- /dev/null +++ b/src/peilbeheerst_model/Parametrize/sturing_AmstelGooienVecht.json @@ -0,0 +1,144 @@ +{ + "Inlaat boezem, stuw": { + "upstream_level_offset": 0.10, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["block", "block", "pass", "block"], + "flow_rate_block": 0, + "flow_rate_pass": 2.0, + "node_type": "outlet" + }, + + "Uitlaat boezem, stuw": { + "upstream_level_offset": 0.00, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["block", "block", "pass", "pass"], + "flow_rate_block": 0, + "flow_rate_pass": 2.0, + "node_type": "outlet" + }, + + "Reguliere stuw": { + "upstream_level_offset": 0.15, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["block", "block", "pass", "pass"], + "flow_rate_block": 0, + "flow_rate_pass": 1.0, + "node_type": "outlet" + }, + + "Inlaat buitenwater peilgebied, stuw": { + "upstream_level_offset": 0.10, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["pass", "block", "pass", "block"], + "flow_rate_block": 0, + "flow_rate_pass": 1.0, + "node_type": "outlet" + }, + + "Uitlaat buitenwater peilgebied, stuw": { + "upstream_level_offset": 0.10, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["block", "block", "pass", "pass"], + "flow_rate_block": 0, + "flow_rate_pass": 1.0, + "node_type": "outlet" + }, + + "Boezem boezem, stuw": { + "upstream_level_offset": 0.10, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["block", "block", "pass", "pass"], + "flow_rate_block": 0, + "flow_rate_pass": 10.0, + "node_type": "outlet" + }, + + "Inlaat boezem, gemaal": { + "upstream_level_offset": 0.10, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["block", "block", "pass", "block"], + "flow_rate_block": 0, + "flow_rate_pass": 0.2, + "node_type": "pump" + }, + + "Uitlaat boezem, gemaal": { + "upstream_level_offset": 0.00, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["block", "block", "pass", "pass"], + "flow_rate_block": 0, + "flow_rate_pass": 0.2, + "node_type": "pump" + }, + + "Regulier afvoer gemaal": { + "upstream_level_offset": 0.00, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["block", "block", "pass", "pass"], + "flow_rate_block": 0, + "flow_rate_pass": 0.2, + "node_type": "pump" + }, + + "Regulier aanvoer gemaal": { + "upstream_level_offset": 0.15, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["pass", "block", "pass", "block"], + "flow_rate_block": 0, + "flow_rate_pass": 0.1, + "node_type": "pump" + }, + + "Uitlaat buitenwater peilgebied, afvoer gemaal": { + "upstream_level_offset": 0.15, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["block", "block", "pass", "pass"], + "flow_rate_block": 0, + "flow_rate_pass": 0.2, + "node_type": "pump" + }, + + "Uitlaat buitenwater peilgebied, aanvoer gemaal": { + "upstream_level_offset": 0.15, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["pass", "block", "pass", "block"], + "flow_rate_block": 0, + "flow_rate_pass": 0.1, + "node_type": "pump" + }, + + "Inlaat buitenwater peilgebied, afvoer gemaal": { + "upstream_level_offset": 0.00, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["block", "block", "pass", "pass"], + "flow_rate_block": 0, + "flow_rate_pass": 0.2, + "node_type": "pump" + }, + + "Inlaat buitenwater peilgebied, aanvoer gemaal": { + "upstream_level_offset": 0.15, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["pass", "block", "pass", "block"], + "flow_rate_block": 0, + "flow_rate_pass": 0.1, + "node_type": "pump" + }, + + "Boezem boezem, afvoer gemaal": { + "upstream_level_offset": 0.00, + "truth_state": ["FF", "FT", "TF", "TT"], + "control_state": ["block", "block", "pass", "pass"], + "flow_rate_block": 0, + "flow_rate_pass": 10.0, + "node_type": "pump" + } +} + + + + + + + + From 9f393877e96dd49e1909a4ffdc8ba2a2eab5aafc Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Tue, 13 Aug 2024 14:01:56 +0200 Subject: [PATCH 21/25] Minor changes --- .../peilbeheerst_model/controle_output.py | 2 ++ .../peilbeheerst_model/preprocess_data/HHSK.ipynb | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/peilbeheerst_model/peilbeheerst_model/controle_output.py b/src/peilbeheerst_model/peilbeheerst_model/controle_output.py index 95c83f1..440c99b 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/controle_output.py +++ b/src/peilbeheerst_model/peilbeheerst_model/controle_output.py @@ -199,6 +199,8 @@ def is_stationary(group): return control_dict + # def inspect_individual_basins(self, data): + def store_data(self, data, output_path): """Store the control_dict""" for key in data.keys(): diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb index d97c360..8c5fd38 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb @@ -502,9 +502,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Routing", + "display_name": "Python [conda env:ribasim]", "language": "python", - "name": "routing" + "name": "conda-env-ribasim-py" }, "language_info": { "codemirror_mode": { @@ -516,7 +516,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.13" + "version": "3.11.6" } }, "nbformat": 4, From 1f53bfbbf85c4dd368bf4016c21c98ea592a8f23 Mon Sep 17 00:00:00 2001 From: rbruijnshkv Date: Tue, 13 Aug 2024 14:09:51 +0200 Subject: [PATCH 22/25] Last ruff fix --- .../peilbeheerst_model/ribasim_parametrization.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py b/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py index 53b14e5..467a46e 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py +++ b/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py @@ -950,7 +950,7 @@ def identify_node_meta_categorie(ribasim_model): return def load_model_settings(file_path): - with open(file_path, 'r') as file: + with open(file_path) as file: settings = json.load(file) return settings From 3165b19196bae378022a94dee1aae55a1854e713 Mon Sep 17 00:00:00 2001 From: Martijn Visser Date: Tue, 13 Aug 2024 16:13:41 +0200 Subject: [PATCH 23/25] Don't change pixi.lock --- .gitignore | 1 - pixi.lock | 172 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 168 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 2d43fec..306aa97 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,6 @@ src/ribasim_nl/tests/temp/ src/peilbeheerst_model/tests/temp/ src/peilbeheerst_model/*.html -# src/peilbeheerst_model/*.ipynb src/peilbeheerst_model/*.code-workspace src/peilbeheerst_model/.vscode diff --git a/pixi.lock b/pixi.lock index 1c8055b..c573279 100644 --- a/pixi.lock +++ b/pixi.lock @@ -16026,6 +16026,30 @@ packages: - pkg:pypi/numba-celltree?source=conda-forge-mapping size: 33109 timestamp: 1721292112265 +- kind: conda + name: numpy + version: 2.0.1 + build: py312h1103770_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.0.1-py312h1103770_0.conda + sha256: 0746a37d09036b4164ac14dd1328dd4e449a038383aac1e25e2d5f3a691518da + md5: 9f444595d8d9682891f2f078fc19da43 + depends: + - __glibc >=2.17,<3.0.a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc-ng >=12 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + purls: + - pkg:pypi/numpy?source=conda-forge-mapping + size: 8345605 + timestamp: 1721966364929 - kind: conda name: numpy version: 2.0.1 @@ -16051,6 +16075,30 @@ packages: - pkg:pypi/numpy?source=conda-forge-mapping size: 8345605 timestamp: 1721966364929 +- kind: conda + name: numpy + version: 2.0.1 + build: py312h49bc9c5_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/numpy-2.0.1-py312h49bc9c5_0.conda + sha256: 13b38db57cefbbea0cb6a44a5c75df8010480dc6200eda3491c8d203072d1675 + md5: e7fed4e2639f3a0d58bd8b2164059e8d + depends: + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + purls: + - pkg:pypi/numpy?source=conda-forge-mapping + size: 6945867 + timestamp: 1721966986321 - kind: conda name: numpy version: 2.0.1 @@ -16076,6 +16124,29 @@ packages: - pkg:pypi/numpy?source=conda-forge-mapping size: 6945867 timestamp: 1721966986321 +- kind: conda + name: numpy + version: 2.0.1 + build: py312h8813227_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.0.1-py312h8813227_0.conda + sha256: 3f73ed4464e3dc639c875b6cbe86e8095f88afe047bdfdc3d4b4ae120dd830e8 + md5: 7f239fbf9d9355f86529a35af0b24d29 + depends: + - __osx >=10.13 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=16 + - liblapack >=3.9.0,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + purls: + - pkg:pypi/numpy?source=conda-forge-mapping + size: 7464264 + timestamp: 1721966235928 - kind: conda name: numpy version: 2.0.1 @@ -18374,6 +18445,30 @@ packages: - pkg:pypi/pysocks?source=conda-forge-mapping size: 18981 timestamp: 1661604969727 +- kind: conda + name: pytest + version: 8.3.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.2-pyhd8ed1ab_0.conda + sha256: 72c84a3cd9fe82835a88e975fd2a0dbf2071d1c423ea4f79e7930578c1014873 + md5: e010a224b90f1f623a917c35addbb924 + depends: + - colorama + - exceptiongroup >=1.0.0rc8 + - iniconfig + - packaging + - pluggy <2,>=1.5 + - python >=3.8 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + purls: + - pkg:pypi/pytest?source=conda-forge-mapping + size: 257671 + timestamp: 1721923749407 - kind: conda name: pytest version: 8.3.2 @@ -19432,21 +19527,32 @@ packages: timestamp: 1598024297745 - kind: pypi name: ribasim - version: 2024.6.0 + version: 2024.10.0 path: ../Ribasim/python/ribasim - sha256: d56436e1f00be7894efb23f669c0c58af4d6aa42eeb1956903f6b984fb551b39 + sha256: be31457a51083ee5f04c05753c0308f556542c46f94a60a82f9387c5156e82ff requires_dist: - geopandas - matplotlib - numpy - pandas - - pandera!=0.16.0 + - pandera>=0.20 - pyarrow - pydantic~=2.0 - pyogrio - shapely>=2.0 - tomli - tomli-w + - jinja2 ; extra == 'all' + - networkx ; extra == 'all' + - pytest ; extra == 'all' + - pytest-cov ; extra == 'all' + - pytest-xdist ; extra == 'all' + - ribasim-testmodels ; extra == 'all' + - xugrid ; extra == 'all' + - jinja2 ; extra == 'delwaq' + - networkx ; extra == 'delwaq' + - xugrid ; extra == 'delwaq' + - xugrid ; extra == 'netcdf' - pytest ; extra == 'tests' - pytest-cov ; extra == 'tests' - pytest-xdist ; extra == 'tests' @@ -19485,7 +19591,7 @@ packages: name: ribasim-lumping version: 0.1.0 path: src/ribasim_lumping - sha256: 25f734682e8e1d8bbcea37b6147101f264a13471b82341daf989834955d1a942 + sha256: dec80735ccc9bf83d5a0805f5081c910c8aa81dc76abdb7052253a657ba034b3 requires_dist: - contextily - geopandas @@ -19553,6 +19659,25 @@ packages: - pkg:pypi/rioxarray?source=conda-forge-mapping size: 51306 timestamp: 1721412091165 +- kind: conda + name: rpds-py + version: 0.19.1 + build: py312h2615798_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.19.1-py312h2615798_0.conda + sha256: 892407686805709a37a6dd29da06042f891a35774b25cee51368a29be9ccac6b + md5: 80bb17e18169ac455444b8167a105059 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + purls: + - pkg:pypi/rpds-py?source=conda-forge-mapping + size: 206243 + timestamp: 1721862293173 - kind: conda name: rpds-py version: 0.19.1 @@ -19573,6 +19698,25 @@ packages: - pkg:pypi/rpds-py?source=conda-forge-mapping size: 206243 timestamp: 1721862293173 +- kind: conda + name: rpds-py + version: 0.19.1 + build: py312ha47ea1c_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.19.1-py312ha47ea1c_0.conda + sha256: dc5ce3a63deffc69263a8e8699e43ae64b45663ce3f39799c10b35524cc3e861 + md5: c54025057789a55e07d585e743fc8744 + depends: + - __osx >=10.13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=10.13 + license: MIT + purls: + - pkg:pypi/rpds-py?source=conda-forge-mapping + size: 295442 + timestamp: 1721861174737 - kind: conda name: rpds-py version: 0.19.1 @@ -19593,6 +19737,26 @@ packages: - pkg:pypi/rpds-py?source=conda-forge-mapping size: 295442 timestamp: 1721861174737 +- kind: conda + name: rpds-py + version: 0.19.1 + build: py312hf008fa9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.19.1-py312hf008fa9_0.conda + sha256: 931d84722857bfdc9c1bbf8acc9c3bcf9aa294d8d9b4f26015569a3a0fbabefd + md5: ebdebabe560c06a70bc41221b9606945 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: MIT + purls: + - pkg:pypi/rpds-py?source=conda-forge-mapping + size: 333274 + timestamp: 1721861124399 - kind: conda name: rpds-py version: 0.19.1 From 565b3133a48730903dc294c8dfafd409629d28a3 Mon Sep 17 00:00:00 2001 From: Martijn Visser Date: Tue, 13 Aug 2024 16:17:39 +0200 Subject: [PATCH 24/25] Ruff format --- pixi.lock | 155 +-- .../01_parse_crossings.ipynb | 42 +- .../01_test_parse_crossings.ipynb | 153 ++- .../01b_ad_krw_to_peilgebieden.ipynb | 8 +- .../02_crossings_to_ribasim_notebook.ipynb | 914 ++++++++---------- src/peilbeheerst_model/03_test_outlets.ipynb | 100 +- .../AmstelGooienVecht_parametrize.ipynb | 39 +- src/peilbeheerst_model/compute_voronoi.ipynb | 37 +- .../peilbeheerst_model/controle_output.py | 6 +- .../crossings_to_ribasim.py | 34 +- .../postprocess_data/general_functions.py | 202 ++-- .../postprocess_data/post-process_WSRL.ipynb | 139 +-- .../postprocess_data/post-process_agv.ipynb | 109 ++- .../post-process_delfland.ipynb | 104 +- .../post-process_rijnland.ipynb | 40 +- .../post-process_wetterskip.ipynb | 82 +- .../post-process_zuiderzeeland.ipynb | 117 ++- .../postprocess_data/post-processing_HD.ipynb | 114 +-- .../post-processing_HHNK.ipynb | 113 +-- .../post-processing_HHSK.ipynb | 95 +- .../post-processing_scheldestromen.ipynb | 106 +- .../preprocess_data/AmstelGooienVecht.ipynb | 184 ++-- .../preprocess_data/Delfland.ipynb | 158 +-- .../preprocess_data/HHNK.ipynb | 186 ++-- .../preprocess_data/HHSK.ipynb | 240 +++-- .../preprocess_data/Hollandse_Delta.ipynb | 188 ++-- .../preprocess_data/Rijnland.ipynb | 144 +-- .../preprocess_data/Rivierenland.ipynb | 214 ++-- .../preprocess_data/Scheldestromen.ipynb | 126 +-- .../preprocess_data/Wetterskip.ipynb | 180 ++-- .../preprocess_data/Zuiderzeeland.ipynb | 197 ++-- .../ribasim_feedback_processor.py | 8 +- .../ribasim_parametrization.py | 481 +++++---- 33 files changed, 2562 insertions(+), 2453 deletions(-) diff --git a/pixi.lock b/pixi.lock index c573279..ead4181 100644 --- a/pixi.lock +++ b/pixi.lock @@ -16026,30 +16026,6 @@ packages: - pkg:pypi/numba-celltree?source=conda-forge-mapping size: 33109 timestamp: 1721292112265 -- kind: conda - name: numpy - version: 2.0.1 - build: py312h1103770_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.0.1-py312h1103770_0.conda - sha256: 0746a37d09036b4164ac14dd1328dd4e449a038383aac1e25e2d5f3a691518da - md5: 9f444595d8d9682891f2f078fc19da43 - depends: - - __glibc >=2.17,<3.0.a0 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - libgcc-ng >=12 - - liblapack >=3.9.0,<4.0a0 - - libstdcxx-ng >=12 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - purls: - - pkg:pypi/numpy?source=conda-forge-mapping - size: 8345605 - timestamp: 1721966364929 - kind: conda name: numpy version: 2.0.1 @@ -16075,30 +16051,6 @@ packages: - pkg:pypi/numpy?source=conda-forge-mapping size: 8345605 timestamp: 1721966364929 -- kind: conda - name: numpy - version: 2.0.1 - build: py312h49bc9c5_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/numpy-2.0.1-py312h49bc9c5_0.conda - sha256: 13b38db57cefbbea0cb6a44a5c75df8010480dc6200eda3491c8d203072d1675 - md5: e7fed4e2639f3a0d58bd8b2164059e8d - depends: - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - purls: - - pkg:pypi/numpy?source=conda-forge-mapping - size: 6945867 - timestamp: 1721966986321 - kind: conda name: numpy version: 2.0.1 @@ -16124,29 +16076,6 @@ packages: - pkg:pypi/numpy?source=conda-forge-mapping size: 6945867 timestamp: 1721966986321 -- kind: conda - name: numpy - version: 2.0.1 - build: py312h8813227_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.0.1-py312h8813227_0.conda - sha256: 3f73ed4464e3dc639c875b6cbe86e8095f88afe047bdfdc3d4b4ae120dd830e8 - md5: 7f239fbf9d9355f86529a35af0b24d29 - depends: - - __osx >=10.13 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - libcxx >=16 - - liblapack >=3.9.0,<4.0a0 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - purls: - - pkg:pypi/numpy?source=conda-forge-mapping - size: 7464264 - timestamp: 1721966235928 - kind: conda name: numpy version: 2.0.1 @@ -18445,30 +18374,6 @@ packages: - pkg:pypi/pysocks?source=conda-forge-mapping size: 18981 timestamp: 1661604969727 -- kind: conda - name: pytest - version: 8.3.2 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.2-pyhd8ed1ab_0.conda - sha256: 72c84a3cd9fe82835a88e975fd2a0dbf2071d1c423ea4f79e7930578c1014873 - md5: e010a224b90f1f623a917c35addbb924 - depends: - - colorama - - exceptiongroup >=1.0.0rc8 - - iniconfig - - packaging - - pluggy <2,>=1.5 - - python >=3.8 - - tomli >=1 - constrains: - - pytest-faulthandler >=2 - license: MIT - purls: - - pkg:pypi/pytest?source=conda-forge-mapping - size: 257671 - timestamp: 1721923749407 - kind: conda name: pytest version: 8.3.2 @@ -19591,7 +19496,7 @@ packages: name: ribasim-lumping version: 0.1.0 path: src/ribasim_lumping - sha256: dec80735ccc9bf83d5a0805f5081c910c8aa81dc76abdb7052253a657ba034b3 + sha256: 25f734682e8e1d8bbcea37b6147101f264a13471b82341daf989834955d1a942 requires_dist: - contextily - geopandas @@ -19659,25 +19564,6 @@ packages: - pkg:pypi/rioxarray?source=conda-forge-mapping size: 51306 timestamp: 1721412091165 -- kind: conda - name: rpds-py - version: 0.19.1 - build: py312h2615798_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.19.1-py312h2615798_0.conda - sha256: 892407686805709a37a6dd29da06042f891a35774b25cee51368a29be9ccac6b - md5: 80bb17e18169ac455444b8167a105059 - depends: - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - purls: - - pkg:pypi/rpds-py?source=conda-forge-mapping - size: 206243 - timestamp: 1721862293173 - kind: conda name: rpds-py version: 0.19.1 @@ -19698,25 +19584,6 @@ packages: - pkg:pypi/rpds-py?source=conda-forge-mapping size: 206243 timestamp: 1721862293173 -- kind: conda - name: rpds-py - version: 0.19.1 - build: py312ha47ea1c_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.19.1-py312ha47ea1c_0.conda - sha256: dc5ce3a63deffc69263a8e8699e43ae64b45663ce3f39799c10b35524cc3e861 - md5: c54025057789a55e07d585e743fc8744 - depends: - - __osx >=10.13 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - __osx >=10.13 - license: MIT - purls: - - pkg:pypi/rpds-py?source=conda-forge-mapping - size: 295442 - timestamp: 1721861174737 - kind: conda name: rpds-py version: 0.19.1 @@ -19737,26 +19604,6 @@ packages: - pkg:pypi/rpds-py?source=conda-forge-mapping size: 295442 timestamp: 1721861174737 -- kind: conda - name: rpds-py - version: 0.19.1 - build: py312hf008fa9_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.19.1-py312hf008fa9_0.conda - sha256: 931d84722857bfdc9c1bbf8acc9c3bcf9aa294d8d9b4f26015569a3a0fbabefd - md5: ebdebabe560c06a70bc41221b9606945 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - constrains: - - __glibc >=2.17 - license: MIT - purls: - - pkg:pypi/rpds-py?source=conda-forge-mapping - size: 333274 - timestamp: 1721861124399 - kind: conda name: rpds-py version: 0.19.1 diff --git a/src/peilbeheerst_model/01_parse_crossings.ipynb b/src/peilbeheerst_model/01_parse_crossings.ipynb index 2e52420..61a978f 100644 --- a/src/peilbeheerst_model/01_parse_crossings.ipynb +++ b/src/peilbeheerst_model/01_parse_crossings.ipynb @@ -15,7 +15,7 @@ "import numpy as np\n", "import pandas as pd\n", "from IPython.core.display import HTML\n", - "from peilbeheerst_model import ParseCrossings\n" + "from peilbeheerst_model import ParseCrossings" ] }, { @@ -1277,27 +1277,27 @@ ], "source": [ "for waterschap, waterschap_struct in waterschap_data.items():\n", - " print(f\"\\n{waterschap}...\")\n", + " print(f\"\\n{waterschap}...\")\n", "\n", - " init_settings, crossing_settings = waterschap_struct.values()\n", - " init_settings[\"logfile\"] = pathlib.Path(init_settings[\"output_path\"]).with_suffix(\"\").with_suffix(\".log\")\n", - " \n", - " if waterschap not in ['HHNK']:\n", - " continue\n", - " \n", - " # if pathlib.Path(init_settings[\"output_path\"]).exists() and \"crossings_hydroobject\" in fiona.listlayers(init_settings[\"output_path\"]):\n", - " # continue\n", + " init_settings, crossing_settings = waterschap_struct.values()\n", + " init_settings[\"logfile\"] = pathlib.Path(init_settings[\"output_path\"]).with_suffix(\"\").with_suffix(\".log\")\n", + "\n", + " if waterschap not in [\"HHNK\"]:\n", + " continue\n", "\n", - " # Crossings class initializeren\n", - " cross = ParseCrossings(**init_settings)\n", + " # if pathlib.Path(init_settings[\"output_path\"]).exists() and \"crossings_hydroobject\" in fiona.listlayers(init_settings[\"output_path\"]):\n", + " # continue\n", "\n", - " # Crossings bepalen en wegschrijven\n", - " if crossing_settings[\"filterlayer\"] is None:\n", - " df_hydro = cross.find_crossings_with_peilgebieden(\"hydroobject\", **crossing_settings)\n", - " cross.write_crossings(df_hydro)\n", - " else:\n", - " df_hydro, df_dsf, df_hydro_dsf = cross.find_crossings_with_peilgebieden(\"hydroobject\", **crossing_settings)\n", - " cross.write_crossings(df_hydro, crossing_settings[\"filterlayer\"], df_dsf, df_hydro_dsf)\n" + " # Crossings class initializeren\n", + " cross = ParseCrossings(**init_settings)\n", + "\n", + " # Crossings bepalen en wegschrijven\n", + " if crossing_settings[\"filterlayer\"] is None:\n", + " df_hydro = cross.find_crossings_with_peilgebieden(\"hydroobject\", **crossing_settings)\n", + " cross.write_crossings(df_hydro)\n", + " else:\n", + " df_hydro, df_dsf, df_hydro_dsf = cross.find_crossings_with_peilgebieden(\"hydroobject\", **crossing_settings)\n", + " cross.write_crossings(df_hydro, crossing_settings[\"filterlayer\"], df_dsf, df_hydro_dsf)" ] }, { @@ -1594,13 +1594,13 @@ " reduction_results[\"in_use\"].append(cross_inuse)\n", " reduction_results[\"agg_links_in_use\"].append(cross_agglinks)\n", " reduction_results[\"agg_areas_in_use\"].append(cross_aggareas)\n", - " \n", + "\n", " network_results[\"Basins\"].append(basins)\n", " network_results[\"Edges\"].append(edges)\n", " network_results[\"Peilgebieden\"].append(peilgebieden)\n", " waterschappen.append(waterschap)\n", "\n", - "colours = ['#0C3B5D', '#3EC1CD', '#EF3A4C', '#FCB94D']\n", + "colours = [\"#0C3B5D\", \"#3EC1CD\", \"#EF3A4C\", \"#FCB94D\"]\n", "\n", "x1 = np.arange(len(waterschappen))\n", "width = 1 / (1 + len(network_results))\n", diff --git a/src/peilbeheerst_model/01_test_parse_crossings.ipynb b/src/peilbeheerst_model/01_test_parse_crossings.ipynb index 082a210..10736ea 100644 --- a/src/peilbeheerst_model/01_test_parse_crossings.ipynb +++ b/src/peilbeheerst_model/01_test_parse_crossings.ipynb @@ -18,7 +18,7 @@ "import tqdm.auto as tqdm\n", "from IPython.core.display import HTML\n", "from matplotlib.patches import Polygon\n", - "from peilbeheerst_model import ParseCrossings\n" + "from peilbeheerst_model import ParseCrossings" ] }, { @@ -36,7 +36,7 @@ " ]\n", " },\n", " \"perfect fit star 1\": {\n", - " \"peilgebieden\": [\n", + " \"peilgebieden\": [\n", " shapely.geometry.Polygon([(0, 0), (1, 0), (2, 1.5), (1.5, 2), (0, 2)]),\n", " shapely.geometry.Polygon([(3, 0), (4, 0), (4, 2), (2.5, 2), (2, 1.5)]),\n", " shapely.geometry.Polygon([(1, 0), (3, 0), (2, 1.5)]),\n", @@ -44,7 +44,7 @@ " ]\n", " },\n", " \"perfect fit star 2\": {\n", - " \"peilgebieden\": [\n", + " \"peilgebieden\": [\n", " shapely.geometry.Polygon([(0, 0), (1, 0), (2, 0.5), (1.5, 2), (0, 2)]),\n", " shapely.geometry.Polygon([(3, 0), (4, 0), (4, 2), (2.5, 2), (2, 0.5)]),\n", " shapely.geometry.Polygon([(1, 0), (3, 0), (2, 0.5)]),\n", @@ -140,53 +140,71 @@ " },\n", " \"polygon butterfly 1a\": {\n", " \"peilgebieden\": [\n", - " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.5), (4.0, 0.0), (4.0, 2.0), (2.0, 0.5), (0.0, 2.0)])),\n", + " shapely.validation.make_valid(\n", + " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.5), (4.0, 0.0), (4.0, 2.0), (2.0, 0.5), (0.0, 2.0)])\n", + " ),\n", " ]\n", " },\n", " \"polygon butterfly 1b\": {\n", " \"peilgebieden\": [\n", - " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.5), (4.0, 0.0), (4.0, 2.0), (2.0, 0.5), (0.0, 2.0)])),\n", + " shapely.validation.make_valid(\n", + " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.5), (4.0, 0.0), (4.0, 2.0), (2.0, 0.5), (0.0, 2.0)])\n", + " ),\n", " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.5), (4.0, 0.0)]),\n", " ]\n", " },\n", " \"polygon butterfly 2a\": {\n", " \"peilgebieden\": [\n", - " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.4), (4.0, 0.0), (4.0, 2.0), (2.0, 0.4), (0.0, 2.0)])),\n", + " shapely.validation.make_valid(\n", + " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.4), (4.0, 0.0), (4.0, 2.0), (2.0, 0.4), (0.0, 2.0)])\n", + " ),\n", " ]\n", " },\n", " \"polygon butterfly 2b\": {\n", " \"peilgebieden\": [\n", - " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.4), (4.0, 0.0), (4.0, 2.0), (2.0, 0.4), (0.0, 2.0)])),\n", + " shapely.validation.make_valid(\n", + " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.4), (4.0, 0.0), (4.0, 2.0), (2.0, 0.4), (0.0, 2.0)])\n", + " ),\n", " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.4), (4.0, 0.0)]),\n", " ]\n", " },\n", " \"polygon butterfly 2c\": {\n", " \"peilgebieden\": [\n", - " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.6), (4.0, 0.0), (4.0, 2.0), (2.0, 0.6), (0.0, 2.0)])),\n", + " shapely.validation.make_valid(\n", + " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.6), (4.0, 0.0), (4.0, 2.0), (2.0, 0.6), (0.0, 2.0)])\n", + " ),\n", " ]\n", " },\n", " \"polygon butterfly 2d\": {\n", " \"peilgebieden\": [\n", - " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.6), (4.0, 0.0), (4.0, 2.0), (2.0, 0.6), (0.0, 2.0)])),\n", + " shapely.validation.make_valid(\n", + " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.6), (4.0, 0.0), (4.0, 2.0), (2.0, 0.6), (0.0, 2.0)])\n", + " ),\n", " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.6), (4.0, 0.0)]),\n", " ]\n", " },\n", " \"polygon butterfly 2e\": {\n", " \"peilgebieden\": [\n", - " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.55), (4.0, 0.0), (4.0, 2.0), (2.0, 0.55), (0.0, 2.0)])),\n", + " shapely.validation.make_valid(\n", + " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.55), (4.0, 0.0), (4.0, 2.0), (2.0, 0.55), (0.0, 2.0)])\n", + " ),\n", " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.55), (4.0, 0.0)]),\n", " ]\n", " },\n", " \"polygon butterfly 3a\": {\n", " \"peilgebieden\": [\n", " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.5), (0.0, 2.0)]),\n", - " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (4.0, 0.0), (2.0, 0.5), (4.0, 2.0), (0.0, 2.0), (2.0, 0.5)])),\n", + " shapely.validation.make_valid(\n", + " shapely.geometry.Polygon([(0.0, 0.0), (4.0, 0.0), (2.0, 0.5), (4.0, 2.0), (0.0, 2.0), (2.0, 0.5)])\n", + " ),\n", " ]\n", " },\n", " \"polygon butterfly 3b\": {\n", " \"peilgebieden\": [\n", " shapely.geometry.Polygon([(0.0, 0.0), (2.0, 0.4), (0.0, 2.0)]),\n", - " shapely.validation.make_valid(shapely.geometry.Polygon([(0.0, 0.0), (4.0, 0.0), (2.0, 0.4), (4.0, 2.0), (0.0, 2.0), (2.0, 0.4)])),\n", + " shapely.validation.make_valid(\n", + " shapely.geometry.Polygon([(0.0, 0.0), (4.0, 0.0), (2.0, 0.4), (4.0, 2.0), (0.0, 2.0), (2.0, 0.4)])\n", + " ),\n", " ]\n", " },\n", "}\n", @@ -198,7 +216,7 @@ " shapely.geometry.LineString([(0.5, 0.9), (2.0, 0.9)]),\n", " shapely.geometry.LineString([(3.5, 0.9), (2.0, 0.9)]),\n", " shapely.geometry.LineString([(3.8, 0.9), (3.5, 0.9)]),\n", - " shapely.geometry.LineString([(3.5, 1.5), (0.5, 1.5)])\n", + " shapely.geometry.LineString([(3.5, 1.5), (0.5, 1.5)]),\n", "]\n", "\n", "filterlist = [\n", @@ -213,10 +231,10 @@ "for testname, options in nofilter.items():\n", " options[\"hydroobjecten\"] = linelist.copy()\n", " nofilter[testname] = options.copy()\n", - " \n", + "\n", " options[\"duikersifonhevel\"] = filterlist.copy()\n", " withfilter[testname] = options.copy()\n", - " \n", + "\n", "\n", "nofilter[\"driehoek 1a\"] = {\n", " \"peilgebieden\": [\n", @@ -340,11 +358,14 @@ " # df_hydro = gpd.GeoDataFrame(dict(globalid=lineid, geometry=options[\"hydroobjecten\"]), crs=\"epsg:28992\")\n", "\n", " df_peil = gpd.GeoDataFrame({\"globalid\": polyid, \"geometry\": options[\"peilgebieden\"]}, crs=\"epsg:28992\")\n", - " df_streef = gpd.GeoDataFrame({\"globalid\": polyid, \"waterhoogte\": polywl, \"geometry\": len(options[\"peilgebieden\"]) * [None]}, crs=\"epsg:28992\")\n", - " \n", + " df_streef = gpd.GeoDataFrame(\n", + " {\"globalid\": polyid, \"waterhoogte\": polywl, \"geometry\": len(options[\"peilgebieden\"]) * [None]},\n", + " crs=\"epsg:28992\",\n", + " )\n", + "\n", " lineid = [f\"line_{i+1}\" for i in range(len(options[\"hydroobjecten\"]))]\n", " df_hydro = gpd.GeoDataFrame({\"globalid\": lineid, \"geometry\": options[\"hydroobjecten\"]}, crs=\"epsg:28992\")\n", - " \n", + "\n", " if \"duikersifonhevel\" not in options:\n", " # Empty filter\n", " gpkg_path1 = testdir.joinpath(f\"nofilter_{test_name}.gpkg\")\n", @@ -364,13 +385,15 @@ " df_streef.to_file(gpkg_path2, layer=\"streefpeil\")\n", " polyfl = [f\"dsh_{i+1}\" for i in range(len(options[\"duikersifonhevel\"]))]\n", " # df_filter = gpd.GeoDataFrame(dict(globalid=polyfl, geometry=options[\"duikersifonhevel\"]), crs=\"epsg:28992\")\n", - " df_filter = gpd.GeoDataFrame({\"globalid\": polyfl, \"geometry\": options[\"duikersifonhevel\"]}, crs=\"epsg:28992\")\n", + " df_filter = gpd.GeoDataFrame(\n", + " {\"globalid\": polyfl, \"geometry\": options[\"duikersifonhevel\"]}, crs=\"epsg:28992\"\n", + " )\n", "\n", " df_filter.to_file(gpkg_path2, layer=\"duikersifonhevel\")\n", " with warnings.catch_warnings():\n", " warnings.simplefilter(action=\"ignore\", category=UserWarning)\n", " gpd.GeoDataFrame(columns=[\"globalid\", \"geometry\"]).to_file(gpkg_path2, layer=\"stuw\")\n", - " gpd.GeoDataFrame(columns=[\"globalid\", \"geometry\"]).to_file(gpkg_path2, layer=\"gemaal\")\n" + " gpd.GeoDataFrame(columns=[\"globalid\", \"geometry\"]).to_file(gpkg_path2, layer=\"gemaal\")" ] }, { @@ -389,12 +412,12 @@ " dfs = df_streef.set_index(\"globalid\", inplace=False)\n", " for i, row in enumerate(dfp.itertuples()):\n", " coords = row.geometry.exterior.coords\n", - "# if old_len == len(dfp):\n", + " # if old_len == len(dfp):\n", " xtext = row.geometry.centroid.x - 0.5\n", " ytext = row.geometry.centroid.y\n", - "# else:\n", - "# xtext = coords[0][0] + 0.05\n", - "# ytext = coords[0][1]\n", + " # else:\n", + " # xtext = coords[0][0] + 0.05\n", + " # ytext = coords[0][1]\n", " if (i % 2) == 0:\n", " ytext += 0.05\n", " else:\n", @@ -406,10 +429,20 @@ " dfh = df_hydro.explode(index_parts=True)\n", " for row in dfh.itertuples():\n", " coords = np.array(row.geometry.coords)\n", - " x, y = coords[:,0], coords[:,1]\n", + " x, y = coords[:, 0], coords[:, 1]\n", " offset = row.geometry.interpolate(0.1, normalized=True)\n", - " ax.arrow(x[0], y[0], offset.x - x[0], offset.y - y[0], shape=\"full\", lw=0, length_includes_head=True, head_width=.05, color=\"steelblue\")\n", - " ax.text(offset.x, offset.y+0.05, row.globalid)\n", + " ax.arrow(\n", + " x[0],\n", + " y[0],\n", + " offset.x - x[0],\n", + " offset.y - y[0],\n", + " shape=\"full\",\n", + " lw=0,\n", + " length_includes_head=True,\n", + " head_width=0.05,\n", + " color=\"steelblue\",\n", + " )\n", + " ax.text(offset.x, offset.y + 0.05, row.globalid)\n", " ax.plot(x, y, marker=\".\", markersize=5, lw=1, color=\"steelblue\")\n", "\n", " for row in df_crossings.itertuples():\n", @@ -424,9 +457,9 @@ " dff = df_filter.explode(index_parts=True)\n", " for row in dff.itertuples():\n", " coords = np.array(row.geometry.coords)\n", - " x, y = coords[:,0], coords[:,1]\n", + " x, y = coords[:, 0], coords[:, 1]\n", " ax.plot(x, y, marker=\".\", markersize=5, lw=2, alpha=0.3, color=\"purple\")\n", - " \n", + "\n", " ax.set_xlim([-0.1, 4.1])\n", " ax.set_ylim([-0.1, 2.1])\n", " ax.set_aspect(\"equal\")\n", @@ -443,39 +476,47 @@ "source": [ "for i, gpkg_path in enumerate(sorted(testdir.glob(\"nofilter_*.gpkg\"))):\n", " if gpkg_path.is_file() and gpkg_path.suffix == \".gpkg\":\n", - "# if \"butterfly 3b\" not in gpkg_path.stem and \"polygon within polygon 1\" not in gpkg_path.stem:\n", - "# continue\n", - "# if \"perfect fit on edge\" not in gpkg_path.stem:\n", - "# continue\n", - "# if \"polygon within polygon 1\" not in gpkg_path.stem:\n", - "# continue\n", + " # if \"butterfly 3b\" not in gpkg_path.stem and \"polygon within polygon 1\" not in gpkg_path.stem:\n", + " # continue\n", + " # if \"perfect fit on edge\" not in gpkg_path.stem:\n", + " # continue\n", + " # if \"polygon within polygon 1\" not in gpkg_path.stem:\n", + " # continue\n", " # if \"narrow gap\" not in gpkg_path.stem:\n", " # continue\n", - "# if \"driehoek\" not in gpkg_path.stem:\n", - "# continue\n", - "# if \"nofilter_narrow gap\" not in gpkg_path.stem:\n", - "# continue\n", - "# if \"volgorde groep\" not in gpkg_path.stem and \"nofilter_polygon butterfly 2e\" not in gpkg_path.stem and \"nofilter_perfect fit star 2\" not in gpkg_path.stem:\n", - "# continue\n", - "# if \"nofilter_polygon butterfly 2e\" not in gpkg_path.stem and \"nofilter_perfect fit star 2\" not in gpkg_path.stem:\n", - "# continue\n", + " # if \"driehoek\" not in gpkg_path.stem:\n", + " # continue\n", + " # if \"nofilter_narrow gap\" not in gpkg_path.stem:\n", + " # continue\n", + " # if \"volgorde groep\" not in gpkg_path.stem and \"nofilter_polygon butterfly 2e\" not in gpkg_path.stem and \"nofilter_perfect fit star 2\" not in gpkg_path.stem:\n", + " # continue\n", + " # if \"nofilter_polygon butterfly 2e\" not in gpkg_path.stem and \"nofilter_perfect fit star 2\" not in gpkg_path.stem:\n", + " # continue\n", "\n", " display(HTML(f\"

Test {i+1:02d}: {gpkg_path.stem}

\"))\n", " cross = ParseCrossings(gpkg_path, disable_progress=True, show_log=True)\n", - " df_crossings = cross.find_crossings_with_peilgebieden(\"hydroobject\", group_stacked=True, filterlayer=None, agg_links=False)\n", + " df_crossings = cross.find_crossings_with_peilgebieden(\n", + " \"hydroobject\", group_stacked=True, filterlayer=None, agg_links=False\n", + " )\n", " df_crossings_valid = df_crossings[df_crossings.in_use].copy()\n", "\n", " test_output = df_crossings_valid.copy()\n", " test_output[\"geom_x\"] = np.round(test_output.geometry.x, 8)\n", " test_output[\"geom_y\"] = np.round(test_output.geometry.y, 8)\n", " test_output = test_output.drop(columns=\"geometry\", inplace=False)\n", - " \n", + "\n", " # Make static test output\n", " test_output.to_csv(testdir.joinpath(f\"output_{gpkg_path.stem}.csv\"), index=False)\n", "\n", " display(df_crossings)\n", " display(df_crossings_valid)\n", - " make_plot(cross.df_gpkg[\"peilgebied\"], cross.df_gpkg[\"hydroobject\"], cross.df_gpkg[\"streefpeil\"], cross.df_gpkg[\"duikersifonhevel\"], df_crossings_valid)\n", + " make_plot(\n", + " cross.df_gpkg[\"peilgebied\"],\n", + " cross.df_gpkg[\"hydroobject\"],\n", + " cross.df_gpkg[\"streefpeil\"],\n", + " cross.df_gpkg[\"duikersifonhevel\"],\n", + " df_crossings_valid,\n", + " )\n", " display(HTML(\"
\"))" ] }, @@ -488,17 +529,19 @@ "source": [ "for i, gpkg_path in enumerate(sorted(testdir.glob(\"withfilter_*.gpkg\"))):\n", " if gpkg_path.is_file() and gpkg_path.suffix == \".gpkg\":\n", - "# if \"withfilter_polygon butterfly 1a\" not in gpkg_path.stem:\n", - "# continue\n", + " # if \"withfilter_polygon butterfly 1a\" not in gpkg_path.stem:\n", + " # continue\n", " # if \"withfilter_narrow gap\" not in gpkg_path.stem:\n", " # continue\n", - "# if \"scheldestromen\" not in gpkg_path.stem:\n", - "# continue\n", + " # if \"scheldestromen\" not in gpkg_path.stem:\n", + " # continue\n", "\n", " display(HTML(f\"

Test {i+1:02d}: {gpkg_path.stem}

\"))\n", "\n", " cross = ParseCrossings(gpkg_path, disable_progress=True, show_log=True)\n", - " _, df_filter, df_crossings = cross.find_crossings_with_peilgebieden(\"hydroobject\", group_stacked=True, filterlayer=\"duikersifonhevel\", agg_links=False)\n", + " _, df_filter, df_crossings = cross.find_crossings_with_peilgebieden(\n", + " \"hydroobject\", group_stacked=True, filterlayer=\"duikersifonhevel\", agg_links=False\n", + " )\n", " df_crossings_valid = df_crossings[df_crossings.in_use].copy()\n", "\n", " test_output = df_crossings_valid.copy()\n", @@ -513,7 +556,13 @@ " display(df_filter)\n", " display(df_crossings_valid)\n", " if \"scheldestromen\" not in gpkg_path.stem:\n", - " make_plot(cross.df_gpkg[\"peilgebied\"], cross.df_gpkg[\"hydroobject\"], cross.df_gpkg[\"streefpeil\"], cross.df_gpkg[\"duikersifonhevel\"], df_crossings_valid)\n", + " make_plot(\n", + " cross.df_gpkg[\"peilgebied\"],\n", + " cross.df_gpkg[\"hydroobject\"],\n", + " cross.df_gpkg[\"streefpeil\"],\n", + " cross.df_gpkg[\"duikersifonhevel\"],\n", + " df_crossings_valid,\n", + " )\n", " display(HTML(\"
\"))" ] }, diff --git a/src/peilbeheerst_model/01b_ad_krw_to_peilgebieden.ipynb b/src/peilbeheerst_model/01b_ad_krw_to_peilgebieden.ipynb index 0d2a4bc..8c4ef7d 100644 --- a/src/peilbeheerst_model/01b_ad_krw_to_peilgebieden.ipynb +++ b/src/peilbeheerst_model/01b_ad_krw_to_peilgebieden.ipynb @@ -13,7 +13,7 @@ "import geopandas as gpd\n", "import pandas as pd\n", "from IPython.core.display import HTML\n", - "from peilbeheerst_model import ParseCrossings\n" + "from peilbeheerst_model import ParseCrossings" ] }, { @@ -47,7 +47,7 @@ "source": [ "for waterschap, waterschap_struct in waterschap_data.items():\n", " print(f\"\\n{waterschap}...\")\n", - " \n", + "\n", " init_settings, crossing_settings = waterschap_struct.values()\n", " gpkg = pathlib.Path(init_settings[\"output_path\"])\n", " if not gpkg.exists():\n", @@ -58,7 +58,7 @@ " df_peilgebieden = ParseCrossings._make_valid_2dgeom(df_peilgebieden)\n", "\n", " df_peilgebieden = ParseCrossings.add_krw_to_peilgebieden(\n", - " df_peilgebieden, \n", + " df_peilgebieden,\n", " init_settings[\"krw_path\"],\n", " init_settings[\"krw_column_id\"],\n", " init_settings[\"krw_column_name\"],\n", @@ -68,7 +68,7 @@ "\n", " assert df_peilgebieden.shape[0] == org_shape[0]\n", " df_peilgebieden.to_file(gpkg, layer=\"peilgebied\")\n", - " print(gpkg)\n" + " print(gpkg)" ] }, { diff --git a/src/peilbeheerst_model/02_crossings_to_ribasim_notebook.ipynb b/src/peilbeheerst_model/02_crossings_to_ribasim_notebook.ipynb index b58b8d6..e6b75c5 100644 --- a/src/peilbeheerst_model/02_crossings_to_ribasim_notebook.ipynb +++ b/src/peilbeheerst_model/02_crossings_to_ribasim_notebook.ipynb @@ -16,8 +16,8 @@ "from crossings_to_ribasim import *\n", "from ribasim import Model\n", "\n", - "pd.set_option('display.max_columns', None)\n", - "warnings.filterwarnings('ignore') #Let op!!!!!!!!!!!!!! Waarschuwingen worden genegeerd\n", + "pd.set_option(\"display.max_columns\", None)\n", + "warnings.filterwarnings(\"ignore\") # Let op!!!!!!!!!!!!!! Waarschuwingen worden genegeerd\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", @@ -25,12 +25,12 @@ "ribasim.__version__\n", "\n", "\n", - "#load ribasim_nl\n", - "module_path = Path.cwd() / '../ribasim_nl/'\n", + "# load ribasim_nl\n", + "module_path = Path.cwd() / \"../ribasim_nl/\"\n", "sys.path.append(str(module_path))\n", "\n", - "#load crossings_to_ribasim.py\n", - "sys.path.append('peilbeheerst_model')" + "# load crossings_to_ribasim.py\n", + "sys.path.append(\"peilbeheerst_model\")" ] }, { @@ -58,43 +58,37 @@ } ], "source": [ - " \n", - "model_characteristics = { \n", - " #model description\n", - " 'waterschap': 'AmstelGooienVecht',\n", - " 'modelname': '20240417_samenwerkdag',\n", - " 'modeltype': 'boezemmodel',\n", - "\n", - " #define paths\n", - " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/AmstelGooienVecht/AGV.gpkg\",\n", - " 'path_crossings' : \"../../../../Data_crossings/AmstelGooienVecht/agv_crossings_v05.gpkg\",\n", - " 'path_boezem': \"../../../../Data_shortest_path/AGV/AGV_shortest_path.gpkg\", \n", - " 'path_Pdrive' : None,\n", - " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", - "\n", - " #apply filters\n", - " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", - " 'in_use' : True,\n", - " 'agg_links_in_use' : True,\n", - " 'agg_areas_in_use': True,\n", - " 'aggregation': True,\n", - "\n", - " #data storage settings\n", - " 'write_Pdrive' : False,\n", - " 'write_Zdrive' : True,\n", - " 'write_goodcloud' : True, \n", - " 'write_checks' : True,\n", - " 'write_symbology' : True,\n", - "\n", - "\n", - " #numerical settings\n", - " 'solver': None,\n", - " 'logging': None,\n", - " 'starttime': '2024-01-01 00:00:00',\n", - " 'endtime': '2024-01-02 00:00:00',\n", - " }\n", - "\n", - "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "model_characteristics = {\n", + " # model description\n", + " \"waterschap\": \"AmstelGooienVecht\",\n", + " \"modelname\": \"20240417_samenwerkdag\",\n", + " \"modeltype\": \"boezemmodel\",\n", + " # define paths\n", + " \"path_postprocessed_data\": r\"../../../../Data_postprocessed/Waterschappen/AmstelGooienVecht/AGV.gpkg\",\n", + " \"path_crossings\": \"../../../../Data_crossings/AmstelGooienVecht/agv_crossings_v05.gpkg\",\n", + " \"path_boezem\": \"../../../../Data_shortest_path/AGV/AGV_shortest_path.gpkg\",\n", + " \"path_Pdrive\": None,\n", + " \"path_goodcloud_password\": \"../../../../Data_overig/password_goodcloud.txt\",\n", + " # apply filters\n", + " \"crossings_layer\": \"crossings_hydroobject_filtered\",\n", + " \"in_use\": True,\n", + " \"agg_links_in_use\": True,\n", + " \"agg_areas_in_use\": True,\n", + " \"aggregation\": True,\n", + " # data storage settings\n", + " \"write_Pdrive\": False,\n", + " \"write_Zdrive\": True,\n", + " \"write_goodcloud\": True,\n", + " \"write_checks\": True,\n", + " \"write_symbology\": True,\n", + " # numerical settings\n", + " \"solver\": None,\n", + " \"logging\": None,\n", + " \"starttime\": \"2024-01-01 00:00:00\",\n", + " \"endtime\": \"2024-01-02 00:00:00\",\n", + "}\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics=model_characteristics)\n", "\n", "post_processed_data, crossings = waterboard.read_files()\n", "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", @@ -103,10 +97,8 @@ "nodes, edges = waterboard.create_nodes(crossings, edges)\n", "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", "\n", - "#create individual model parts of the network\n", - "network = RibasimNetwork(nodes = nodes, \n", - " edges = edges, \n", - " model_characteristics = model_characteristics)\n", + "# create individual model parts of the network\n", + "network = RibasimNetwork(nodes=nodes, edges=edges, model_characteristics=model_characteristics)\n", "\n", "edge = network.edge()\n", "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", @@ -123,10 +115,8 @@ "# discrete_control = network.discrete_control()\n", "# pid_control = network.pid_control()\n", "\n", - "#insert the individual model modules in an actual model\n", - "model = Model(starttime=model_characteristics['starttime'], \n", - " endtime=model_characteristics['endtime'], \n", - " crs=\"EPSG:28992\")\n", + "# insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics[\"starttime\"], endtime=model_characteristics[\"endtime\"], crs=\"EPSG:28992\")\n", "\n", "model.edge = edge\n", "\n", @@ -153,12 +143,12 @@ "\n", "model.terminal.node = terminal_node\n", "\n", - "#add checks and metadata\n", - "checks = network.check(model, post_processed_data = post_processed_data, crossings = crossings)\n", + "# add checks and metadata\n", + "checks = network.check(model, post_processed_data=post_processed_data, crossings=crossings)\n", "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", "\n", - "#write the result\n", - "network.WriteResults(model = model, checks = checks)\n" + "# write the result\n", + "network.WriteResults(model=model, checks=checks)" ] }, { @@ -178,43 +168,37 @@ }, "outputs": [], "source": [ - " \n", - "model_characteristics = { \n", - " #model description\n", - " 'waterschap': 'Delfland',\n", - " 'modelname': '20240423_omgedraaid',\n", - " 'modeltype': 'boezemmodel',\n", - "\n", - " #define paths\n", - " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/Delfland/Delfland.gpkg\",\n", - " 'path_crossings' : \"../../../../Data_crossings/Delfland/delfland_crossings_v08.gpkg\",\n", - " 'path_boezem': \"../../../../Data_shortest_path/Delfland/Delfland_shortest_path.gpkg\",\n", - " 'path_Pdrive' : None,\n", - " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", - "\n", - " #apply filters\n", - " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", - " 'in_use' : True,\n", - " 'agg_links_in_use' : True,\n", - " 'agg_areas_in_use': True,\n", - " 'aggregation': True,\n", - "\n", - " #data storage settings\n", - " 'write_Pdrive' : False,\n", - " 'write_Zdrive' : True,\n", - " 'write_goodcloud' : True,\n", - " 'write_checks' : True,\n", - " 'write_symbology' : True,\n", - "\n", - "\n", - " #numerical settings\n", - " 'solver': None,\n", - " 'logging': None,\n", - " 'starttime': '2024-01-01 00:00:00',\n", - " 'endtime': '2024-01-02 00:00:00',\n", - " }\n", - "\n", - "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "model_characteristics = {\n", + " # model description\n", + " \"waterschap\": \"Delfland\",\n", + " \"modelname\": \"20240423_omgedraaid\",\n", + " \"modeltype\": \"boezemmodel\",\n", + " # define paths\n", + " \"path_postprocessed_data\": r\"../../../../Data_postprocessed/Waterschappen/Delfland/Delfland.gpkg\",\n", + " \"path_crossings\": \"../../../../Data_crossings/Delfland/delfland_crossings_v08.gpkg\",\n", + " \"path_boezem\": \"../../../../Data_shortest_path/Delfland/Delfland_shortest_path.gpkg\",\n", + " \"path_Pdrive\": None,\n", + " \"path_goodcloud_password\": \"../../../../Data_overig/password_goodcloud.txt\",\n", + " # apply filters\n", + " \"crossings_layer\": \"crossings_hydroobject_filtered\",\n", + " \"in_use\": True,\n", + " \"agg_links_in_use\": True,\n", + " \"agg_areas_in_use\": True,\n", + " \"aggregation\": True,\n", + " # data storage settings\n", + " \"write_Pdrive\": False,\n", + " \"write_Zdrive\": True,\n", + " \"write_goodcloud\": True,\n", + " \"write_checks\": True,\n", + " \"write_symbology\": True,\n", + " # numerical settings\n", + " \"solver\": None,\n", + " \"logging\": None,\n", + " \"starttime\": \"2024-01-01 00:00:00\",\n", + " \"endtime\": \"2024-01-02 00:00:00\",\n", + "}\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics=model_characteristics)\n", "\n", "post_processed_data, crossings = waterboard.read_files()\n", "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", @@ -224,10 +208,8 @@ "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", "\n", "\n", - "#create individual model parts of the network\n", - "network = RibasimNetwork(nodes = nodes, \n", - " edges = edges, \n", - " model_characteristics = model_characteristics)\n", + "# create individual model parts of the network\n", + "network = RibasimNetwork(nodes=nodes, edges=edges, model_characteristics=model_characteristics)\n", "\n", "edge = network.edge()\n", "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", @@ -243,10 +225,8 @@ "# outlet = network.outlet()\n", "# discrete_control = network.discrete_control()\n", "# pid_control = network.pid_control()\n", - "#insert the individual model modules in an actual model\n", - "model = Model(starttime=model_characteristics['starttime'], \n", - " endtime=model_characteristics['endtime'], \n", - " crs=\"EPSG:28992\")\n", + "# insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics[\"starttime\"], endtime=model_characteristics[\"endtime\"], crs=\"EPSG:28992\")\n", "\n", "model.edge = edge\n", "\n", @@ -274,12 +254,12 @@ "model.terminal.node = terminal_node\n", "\n", "\n", - "#add checks and metadata\n", - "checks = network.check(post_processed_data = post_processed_data, crossings = crossings)\n", + "# add checks and metadata\n", + "checks = network.check(post_processed_data=post_processed_data, crossings=crossings)\n", "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", "\n", - "#write the result\n", - "network.WriteResults(model = model, checks = checks)\n" + "# write the result\n", + "network.WriteResults(model=model, checks=checks)" ] }, { @@ -307,43 +287,37 @@ }, "outputs": [], "source": [ - " \n", - "model_characteristics = { \n", - " #model description\n", - " 'waterschap': 'HollandseDelta',\n", - " 'modelname': '20240417_samenwerkdag',\n", - " 'modeltype': 'boezemmodel',\n", - "\n", - " #define paths\n", - " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/Hollandse_Delta/HD.gpkg\",\n", - " 'path_crossings' : \"../../../../Data_crossings/Hollandse_Delta/hd_crossings_v06.gpkg\",\n", - " 'path_Pdrive' : None,\n", - " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", - " 'path_boezem': \"../../../../Data_shortest_path/Hollandse_Delta/HD_shortest_path.gpkg\",\n", - "\n", - " #apply filters\n", - " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", - " 'in_use' : True,\n", - " 'agg_links_in_use' : True,\n", - " 'agg_areas_in_use': True,\n", - " 'aggregation': True,\n", - "\n", - " #data storage settings\n", - " 'write_Pdrive' : False,\n", - " 'write_Zdrive' : True,\n", - " 'write_goodcloud' : True,\n", - " 'write_checks' : True,\n", - " 'write_symbology' : True,\n", - "\n", - "\n", - " #numerical settings\n", - " 'solver': None,\n", - " 'logging': None,\n", - " 'starttime': '2024-01-01 00:00:00',\n", - " 'endtime': '2024-01-02 00:00:00',\n", - " }\n", - "\n", - "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "model_characteristics = {\n", + " # model description\n", + " \"waterschap\": \"HollandseDelta\",\n", + " \"modelname\": \"20240417_samenwerkdag\",\n", + " \"modeltype\": \"boezemmodel\",\n", + " # define paths\n", + " \"path_postprocessed_data\": r\"../../../../Data_postprocessed/Waterschappen/Hollandse_Delta/HD.gpkg\",\n", + " \"path_crossings\": \"../../../../Data_crossings/Hollandse_Delta/hd_crossings_v06.gpkg\",\n", + " \"path_Pdrive\": None,\n", + " \"path_goodcloud_password\": \"../../../../Data_overig/password_goodcloud.txt\",\n", + " \"path_boezem\": \"../../../../Data_shortest_path/Hollandse_Delta/HD_shortest_path.gpkg\",\n", + " # apply filters\n", + " \"crossings_layer\": \"crossings_hydroobject_filtered\",\n", + " \"in_use\": True,\n", + " \"agg_links_in_use\": True,\n", + " \"agg_areas_in_use\": True,\n", + " \"aggregation\": True,\n", + " # data storage settings\n", + " \"write_Pdrive\": False,\n", + " \"write_Zdrive\": True,\n", + " \"write_goodcloud\": True,\n", + " \"write_checks\": True,\n", + " \"write_symbology\": True,\n", + " # numerical settings\n", + " \"solver\": None,\n", + " \"logging\": None,\n", + " \"starttime\": \"2024-01-01 00:00:00\",\n", + " \"endtime\": \"2024-01-02 00:00:00\",\n", + "}\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics=model_characteristics)\n", "\n", "post_processed_data, crossings = waterboard.read_files()\n", "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", @@ -353,11 +327,8 @@ "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", "\n", "\n", - "\n", - "#create individual model parts of the network\n", - "network = RibasimNetwork(nodes = nodes, \n", - " edges = edges, \n", - " model_characteristics = model_characteristics)\n", + "# create individual model parts of the network\n", + "network = RibasimNetwork(nodes=nodes, edges=edges, model_characteristics=model_characteristics)\n", "\n", "edge = network.edge()\n", "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", @@ -374,10 +345,8 @@ "# discrete_control = network.discrete_control()\n", "# pid_control = network.pid_control()\n", "\n", - "#insert the individual model modules in an actual model\n", - "model = Model(starttime=model_characteristics['starttime'], \n", - " endtime=model_characteristics['endtime'], \n", - " crs=\"EPSG:28992\")\n", + "# insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics[\"starttime\"], endtime=model_characteristics[\"endtime\"], crs=\"EPSG:28992\")\n", "\n", "model.edge = edge\n", "\n", @@ -404,12 +373,12 @@ "\n", "model.terminal.node = terminal_node\n", "\n", - "#add checks and metadata\n", - "checks = network.check(post_processed_data = post_processed_data, crossings = crossings)\n", + "# add checks and metadata\n", + "checks = network.check(post_processed_data=post_processed_data, crossings=crossings)\n", "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", "\n", - "#write the result\n", - "network.WriteResults(model = model, checks = checks)\n" + "# write the result\n", + "network.WriteResults(model=model, checks=checks)" ] }, { @@ -435,43 +404,37 @@ } ], "source": [ - " \n", - "model_characteristics = { \n", - " #model description\n", - " 'waterschap': 'HollandsNoorderkwartier',\n", - " 'modelname': '20240502',\n", - " 'modeltype': 'boezemmodel',\n", - "\n", - " #define paths\n", - " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/HHNK/Noorderkwartier.gpkg\",\n", - " 'path_crossings' : \"../../../../Data_crossings/HHNK/hhnk_crossings_v26.gpkg\",\n", - " 'path_Pdrive' : None,\n", - " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", - " 'path_boezem': \"../../../../Data_shortest_path/HHNK/HHNK_shortest_path.gpkg\",\n", - "\n", - " #apply filters\n", - " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", - " 'in_use' : True,\n", - " 'agg_links_in_use' : True,\n", - " 'agg_areas_in_use': True,\n", - " 'aggregation': True,\n", - "\n", - " #data storage settings\n", - " 'write_Pdrive' : False,\n", - " 'write_Zdrive' : True,\n", - " 'write_goodcloud' : True,\n", - " 'write_checks' : True,\n", - " 'write_symbology' : True,\n", - "\n", - "\n", - " #numerical settings\n", - " 'solver': None,\n", - " 'logging': None,\n", - " 'starttime': '2024-01-01 00:00:00',\n", - " 'endtime': '2024-01-02 00:00:00',\n", - " }\n", - "\n", - "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "model_characteristics = {\n", + " # model description\n", + " \"waterschap\": \"HollandsNoorderkwartier\",\n", + " \"modelname\": \"20240502\",\n", + " \"modeltype\": \"boezemmodel\",\n", + " # define paths\n", + " \"path_postprocessed_data\": r\"../../../../Data_postprocessed/Waterschappen/HHNK/Noorderkwartier.gpkg\",\n", + " \"path_crossings\": \"../../../../Data_crossings/HHNK/hhnk_crossings_v26.gpkg\",\n", + " \"path_Pdrive\": None,\n", + " \"path_goodcloud_password\": \"../../../../Data_overig/password_goodcloud.txt\",\n", + " \"path_boezem\": \"../../../../Data_shortest_path/HHNK/HHNK_shortest_path.gpkg\",\n", + " # apply filters\n", + " \"crossings_layer\": \"crossings_hydroobject_filtered\",\n", + " \"in_use\": True,\n", + " \"agg_links_in_use\": True,\n", + " \"agg_areas_in_use\": True,\n", + " \"aggregation\": True,\n", + " # data storage settings\n", + " \"write_Pdrive\": False,\n", + " \"write_Zdrive\": True,\n", + " \"write_goodcloud\": True,\n", + " \"write_checks\": True,\n", + " \"write_symbology\": True,\n", + " # numerical settings\n", + " \"solver\": None,\n", + " \"logging\": None,\n", + " \"starttime\": \"2024-01-01 00:00:00\",\n", + " \"endtime\": \"2024-01-02 00:00:00\",\n", + "}\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics=model_characteristics)\n", "\n", "post_processed_data, crossings = waterboard.read_files()\n", "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", @@ -482,10 +445,8 @@ "edges = waterboard.change_boezems_manually(edges)\n", "\n", "\n", - "#create individual model parts of the network\n", - "network = RibasimNetwork(nodes = nodes, \n", - " edges = edges, \n", - " model_characteristics = model_characteristics)\n", + "# create individual model parts of the network\n", + "network = RibasimNetwork(nodes=nodes, edges=edges, model_characteristics=model_characteristics)\n", "\n", "edge = network.edge()\n", "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", @@ -502,10 +463,8 @@ "# discrete_control = network.discrete_control()\n", "# pid_control = network.pid_control()\n", "\n", - "#insert the individual model modules in an actual model\n", - "model = Model(starttime=model_characteristics['starttime'], \n", - " endtime=model_characteristics['endtime'], \n", - " crs=\"EPSG:28992\")\n", + "# insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics[\"starttime\"], endtime=model_characteristics[\"endtime\"], crs=\"EPSG:28992\")\n", "\n", "model.edge = edge\n", "\n", @@ -529,12 +488,12 @@ "\n", "model.terminal.node = terminal_node\n", "\n", - "#add checks and metadata\n", - "checks = network.check(model = model, post_processed_data = post_processed_data, crossings = crossings)\n", + "# add checks and metadata\n", + "checks = network.check(model=model, post_processed_data=post_processed_data, crossings=crossings)\n", "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", "\n", - "#write the result\n", - "network.WriteResults(model = model, checks = checks)\n" + "# write the result\n", + "network.WriteResults(model=model, checks=checks)" ] }, { @@ -560,43 +519,38 @@ } ], "source": [ - "model_characteristics = { \n", - " #model description\n", - " 'waterschap': 'Rijnland',\n", - " 'modelname': '20240414_aggregated',\n", - " 'modeltype': 'boezemmodel',\n", - "\n", - " #define paths\n", - " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/Rijnland/Rijnland.gpkg\",\n", - " 'path_crossings' : \"../../../../Data_crossings/Rijnland/rijnland_crossings_v04.gpkg\",\n", - " 'path_Pdrive' : None,\n", - " 'path_boezem': \"../../../../Data_shortest_path/Rijnland/Rijnland_shortest_path.gpkg\",\n", - " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", - "\n", - " #apply filters\n", - " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", - " 'in_use' : True,\n", - " 'agg_links_in_use' : True,\n", - " 'agg_areas_in_use': True,\n", - " 'aggregation': True,\n", - "\n", - " #data storage settings\n", - " 'write_Pdrive' : False,\n", - " 'write_Zdrive' : True,\n", - " 'write_goodcloud' : True,\n", - " 'write_checks' : True,\n", - " 'write_symbology' : True,\n", - "\n", - "\n", - " #numerical settings\n", - " 'solver': None,\n", - " 'logging': None,\n", - " 'starttime': '2024-01-01 00:00:00',\n", - " 'endtime': '2024-01-02 00:00:00',\n", - " }\n", - "\n", - "\n", - "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "model_characteristics = {\n", + " # model description\n", + " \"waterschap\": \"Rijnland\",\n", + " \"modelname\": \"20240414_aggregated\",\n", + " \"modeltype\": \"boezemmodel\",\n", + " # define paths\n", + " \"path_postprocessed_data\": r\"../../../../Data_postprocessed/Waterschappen/Rijnland/Rijnland.gpkg\",\n", + " \"path_crossings\": \"../../../../Data_crossings/Rijnland/rijnland_crossings_v04.gpkg\",\n", + " \"path_Pdrive\": None,\n", + " \"path_boezem\": \"../../../../Data_shortest_path/Rijnland/Rijnland_shortest_path.gpkg\",\n", + " \"path_goodcloud_password\": \"../../../../Data_overig/password_goodcloud.txt\",\n", + " # apply filters\n", + " \"crossings_layer\": \"crossings_hydroobject_filtered\",\n", + " \"in_use\": True,\n", + " \"agg_links_in_use\": True,\n", + " \"agg_areas_in_use\": True,\n", + " \"aggregation\": True,\n", + " # data storage settings\n", + " \"write_Pdrive\": False,\n", + " \"write_Zdrive\": True,\n", + " \"write_goodcloud\": True,\n", + " \"write_checks\": True,\n", + " \"write_symbology\": True,\n", + " # numerical settings\n", + " \"solver\": None,\n", + " \"logging\": None,\n", + " \"starttime\": \"2024-01-01 00:00:00\",\n", + " \"endtime\": \"2024-01-02 00:00:00\",\n", + "}\n", + "\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics=model_characteristics)\n", "\n", "post_processed_data, crossings = waterboard.read_files()\n", "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", @@ -606,11 +560,8 @@ "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", "\n", "\n", - "\n", - "#create individual model parts of the network\n", - "network = RibasimNetwork(nodes = nodes, \n", - " edges = edges, \n", - " model_characteristics = model_characteristics)\n", + "# create individual model parts of the network\n", + "network = RibasimNetwork(nodes=nodes, edges=edges, model_characteristics=model_characteristics)\n", "\n", "edge = network.edge()\n", "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", @@ -627,10 +578,8 @@ "# discrete_control = network.discrete_control()\n", "# pid_control = network.pid_control()\n", "\n", - "#insert the individual model modules in an actual model\n", - "model = Model(starttime=model_characteristics['starttime'], \n", - " endtime=model_characteristics['endtime'], \n", - " crs=\"EPSG:28992\")\n", + "# insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics[\"starttime\"], endtime=model_characteristics[\"endtime\"], crs=\"EPSG:28992\")\n", "\n", "model.edge = edge\n", "\n", @@ -658,14 +607,12 @@ "\n", "model.terminal.node = terminal_node\n", "\n", - "#add checks and metadata\n", - "checks = network.check(post_processed_data = post_processed_data, \n", - " crossings = crossings,\n", - " model = model)\n", + "# add checks and metadata\n", + "checks = network.check(post_processed_data=post_processed_data, crossings=crossings, model=model)\n", "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", "\n", - "#write the result\n", - "network.WriteResults(model = model, checks = checks)\n" + "# write the result\n", + "network.WriteResults(model=model, checks=checks)" ] }, { @@ -683,43 +630,37 @@ "metadata": {}, "outputs": [], "source": [ - " \n", - "model_characteristics = { \n", - " #model description\n", - " 'waterschap': 'Rivierenland',\n", - " 'modelname': '20240402_bug_fix',\n", - " 'modeltype': 'boezemmodel',\n", - "\n", - " #define paths\n", - " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/WSRL/WSRL.gpkg\",\n", - " 'path_crossings' : \"../../../../Data_crossings/WSRL/wsrl_crossings_v06.gpkg\",\n", - " 'path_Pdrive' : None,\n", - " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", - " 'path_boezem': \"../../../../Data_shortest_path/WSRL/WSRL_shortest_path.gpkg\",\n", - "\n", - " #apply filters\n", - " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", - " 'in_use' : True,\n", - " 'agg_links_in_use' : True,\n", - " 'agg_areas_in_use': True,\n", - " 'aggregation': True,\n", - "\n", - " #data storage settings\n", - " 'write_Pdrive' : False,\n", - " 'write_Zdrive' : True,\n", - " 'write_goodcloud' : True,\n", - " 'write_checks' : True,\n", - " 'write_symbology' : True,\n", - "\n", - "\n", - " #numerical settings\n", - " 'solver': None,\n", - " 'logging': None,\n", - " 'starttime': '2024-01-01 00:00:00',\n", - " 'endtime': '2024-01-02 00:00:00',\n", - " }\n", - "\n", - "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "model_characteristics = {\n", + " # model description\n", + " \"waterschap\": \"Rivierenland\",\n", + " \"modelname\": \"20240402_bug_fix\",\n", + " \"modeltype\": \"boezemmodel\",\n", + " # define paths\n", + " \"path_postprocessed_data\": r\"../../../../Data_postprocessed/Waterschappen/WSRL/WSRL.gpkg\",\n", + " \"path_crossings\": \"../../../../Data_crossings/WSRL/wsrl_crossings_v06.gpkg\",\n", + " \"path_Pdrive\": None,\n", + " \"path_goodcloud_password\": \"../../../../Data_overig/password_goodcloud.txt\",\n", + " \"path_boezem\": \"../../../../Data_shortest_path/WSRL/WSRL_shortest_path.gpkg\",\n", + " # apply filters\n", + " \"crossings_layer\": \"crossings_hydroobject_filtered\",\n", + " \"in_use\": True,\n", + " \"agg_links_in_use\": True,\n", + " \"agg_areas_in_use\": True,\n", + " \"aggregation\": True,\n", + " # data storage settings\n", + " \"write_Pdrive\": False,\n", + " \"write_Zdrive\": True,\n", + " \"write_goodcloud\": True,\n", + " \"write_checks\": True,\n", + " \"write_symbology\": True,\n", + " # numerical settings\n", + " \"solver\": None,\n", + " \"logging\": None,\n", + " \"starttime\": \"2024-01-01 00:00:00\",\n", + " \"endtime\": \"2024-01-02 00:00:00\",\n", + "}\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics=model_characteristics)\n", "\n", "post_processed_data, crossings = waterboard.read_files()\n", "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", @@ -729,11 +670,8 @@ "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", "\n", "\n", - "\n", - "#create individual model parts of the network\n", - "network = RibasimNetwork(nodes = nodes, \n", - " edges = edges, \n", - " model_characteristics = model_characteristics)\n", + "# create individual model parts of the network\n", + "network = RibasimNetwork(nodes=nodes, edges=edges, model_characteristics=model_characteristics)\n", "\n", "edge = network.edge()\n", "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", @@ -750,10 +688,8 @@ "# discrete_control = network.discrete_control()\n", "# pid_control = network.pid_control()\n", "\n", - "#insert the individual model modules in an actual model\n", - "model = Model(starttime=model_characteristics['starttime'], \n", - " endtime=model_characteristics['endtime'], \n", - " crs=\"EPSG:28992\")\n", + "# insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics[\"starttime\"], endtime=model_characteristics[\"endtime\"], crs=\"EPSG:28992\")\n", "\n", "model.edge = edge\n", "\n", @@ -777,12 +713,12 @@ "\n", "model.terminal.node = terminal_node\n", "\n", - "#add checks and metadata\n", - "checks = network.check(post_processed_data = post_processed_data, crossings = crossings)\n", + "# add checks and metadata\n", + "checks = network.check(post_processed_data=post_processed_data, crossings=crossings)\n", "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", "\n", - "#write the result\n", - "network.WriteResults(model = model, checks = checks)\n", + "# write the result\n", + "network.WriteResults(model=model, checks=checks)\n", "\n", "model.tabulated_rating_curve.node = tabulated_rating_curve_node\n", "model.tabulated_rating_curve.static = tabulated_rating_curve_static\n", @@ -798,12 +734,12 @@ "\n", "model.terminal.node = terminal_node\n", "\n", - "#add checks and metadata\n", - "checks = network.check(post_processed_data = post_processed_data, crossings = crossings)\n", + "# add checks and metadata\n", + "checks = network.check(post_processed_data=post_processed_data, crossings=crossings)\n", "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", "\n", - "#write the result\n", - "network.WriteResults(model = model, checks = checks)\n" + "# write the result\n", + "network.WriteResults(model=model, checks=checks)" ] }, { @@ -829,44 +765,38 @@ } ], "source": [ - " \n", - "model_characteristics = { \n", - " #model description\n", - " 'waterschap': 'Scheldestromen',\n", - " 'modelname': '20240417_samenwerkdag',\n", - " 'modeltype': 'boezemmodel',\n", - "\n", - " #define paths\n", - " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/Scheldestromen/Scheldestromen.gpkg\",\n", - " 'path_crossings' : \"../../../../Data_crossings/Scheldestromen/scheldestromen_crossings_v02.gpkg\",\n", - " 'path_Pdrive' : None,\n", - " 'path_boezem': \"../../../../Data_shortest_path/Scheldestromen/Scheldestromen_shortest_path.gpkg\",\n", - " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", - "\n", - " #apply filters\n", - " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", - " 'in_use' : True,\n", - " 'agg_links_in_use' : True,\n", - " 'agg_areas_in_use': True,\n", - " 'aggregation': True,\n", - "\n", - " #data storage settings\n", - " 'write_Pdrive' : False,\n", - " 'write_Zdrive' : True,\n", - " 'write_goodcloud' : True,\n", - " 'write_checks' : True,\n", - " 'write_symbology' : True,\n", - "\n", - "\n", - " #numerical settings\n", - " 'solver': None,\n", - " 'logging': None,\n", - " 'starttime': '2024-01-01 00:00:00',\n", - " 'endtime': '2024-01-02 00:00:00',\n", - " }\n", - "\n", - "\n", - "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "model_characteristics = {\n", + " # model description\n", + " \"waterschap\": \"Scheldestromen\",\n", + " \"modelname\": \"20240417_samenwerkdag\",\n", + " \"modeltype\": \"boezemmodel\",\n", + " # define paths\n", + " \"path_postprocessed_data\": r\"../../../../Data_postprocessed/Waterschappen/Scheldestromen/Scheldestromen.gpkg\",\n", + " \"path_crossings\": \"../../../../Data_crossings/Scheldestromen/scheldestromen_crossings_v02.gpkg\",\n", + " \"path_Pdrive\": None,\n", + " \"path_boezem\": \"../../../../Data_shortest_path/Scheldestromen/Scheldestromen_shortest_path.gpkg\",\n", + " \"path_goodcloud_password\": \"../../../../Data_overig/password_goodcloud.txt\",\n", + " # apply filters\n", + " \"crossings_layer\": \"crossings_hydroobject_filtered\",\n", + " \"in_use\": True,\n", + " \"agg_links_in_use\": True,\n", + " \"agg_areas_in_use\": True,\n", + " \"aggregation\": True,\n", + " # data storage settings\n", + " \"write_Pdrive\": False,\n", + " \"write_Zdrive\": True,\n", + " \"write_goodcloud\": True,\n", + " \"write_checks\": True,\n", + " \"write_symbology\": True,\n", + " # numerical settings\n", + " \"solver\": None,\n", + " \"logging\": None,\n", + " \"starttime\": \"2024-01-01 00:00:00\",\n", + " \"endtime\": \"2024-01-02 00:00:00\",\n", + "}\n", + "\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics=model_characteristics)\n", "\n", "post_processed_data, crossings = waterboard.read_files()\n", "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", @@ -876,11 +806,8 @@ "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", "\n", "\n", - "\n", - "#create individual model parts of the network\n", - "network = RibasimNetwork(nodes = nodes, \n", - " edges = edges, \n", - " model_characteristics = model_characteristics)\n", + "# create individual model parts of the network\n", + "network = RibasimNetwork(nodes=nodes, edges=edges, model_characteristics=model_characteristics)\n", "\n", "edge = network.edge()\n", "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", @@ -897,10 +824,8 @@ "# discrete_control = network.discrete_control()\n", "# pid_control = network.pid_control()\n", "\n", - "#insert the individual model modules in an actual model\n", - "model = Model(starttime=model_characteristics['starttime'], \n", - " endtime=model_characteristics['endtime'], \n", - " crs=\"EPSG:28992\")\n", + "# insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics[\"starttime\"], endtime=model_characteristics[\"endtime\"], crs=\"EPSG:28992\")\n", "\n", "model.edge = edge\n", "\n", @@ -927,13 +852,13 @@ "\n", "model.terminal.node = terminal_node\n", "\n", - "#add checks and metadata\n", - "checks = network.check(post_processed_data = post_processed_data, crossings = crossings, model = model)\n", + "# add checks and metadata\n", + "checks = network.check(post_processed_data=post_processed_data, crossings=crossings, model=model)\n", "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", "\n", - "#write the result\n", + "# write the result\n", "# stop\n", - "network.WriteResults(model = model, checks = checks)\n" + "network.WriteResults(model=model, checks=checks)" ] }, { @@ -959,44 +884,38 @@ } ], "source": [ - " \n", - "model_characteristics = { \n", - " #model description\n", - " 'waterschap': 'SchielandendeKrimpenerwaard',\n", - " 'modelname': '20240429_check',\n", - " 'modeltype': 'boezemmodel',\n", - "\n", - " #define paths\n", - " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/HHSK/HHSK.gpkg\",\n", - " 'path_crossings' : \"../../../../Data_crossings/HHSK/hhsk_crossings_v04.gpkg\",\n", - " 'path_Pdrive' : None,\n", - " 'path_boezem': \"../../../../Data_shortest_path/HHSK/HHSK_shortest_path.gpkg\",\n", - " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", - "\n", - " #apply filters\n", - " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", - " 'in_use' : True,\n", - " 'agg_links_in_use' : True,\n", - " 'agg_areas_in_use': True,\n", - " 'aggregation': True,\n", - "\n", - " #data storage settings\n", - " 'write_Pdrive' : False,\n", - " 'write_Zdrive' : True,\n", - " 'write_goodcloud' : True,\n", - " 'write_checks' : True,\n", - " 'write_symbology' : True,\n", - "\n", - "\n", - " #numerical settings\n", - " 'solver': None,\n", - " 'logging': None,\n", - " 'starttime': '2024-01-01 00:00:00',\n", - " 'endtime': '2024-01-02 00:00:00',\n", - " }\n", - "\n", - "\n", - "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "model_characteristics = {\n", + " # model description\n", + " \"waterschap\": \"SchielandendeKrimpenerwaard\",\n", + " \"modelname\": \"20240429_check\",\n", + " \"modeltype\": \"boezemmodel\",\n", + " # define paths\n", + " \"path_postprocessed_data\": r\"../../../../Data_postprocessed/Waterschappen/HHSK/HHSK.gpkg\",\n", + " \"path_crossings\": \"../../../../Data_crossings/HHSK/hhsk_crossings_v04.gpkg\",\n", + " \"path_Pdrive\": None,\n", + " \"path_boezem\": \"../../../../Data_shortest_path/HHSK/HHSK_shortest_path.gpkg\",\n", + " \"path_goodcloud_password\": \"../../../../Data_overig/password_goodcloud.txt\",\n", + " # apply filters\n", + " \"crossings_layer\": \"crossings_hydroobject_filtered\",\n", + " \"in_use\": True,\n", + " \"agg_links_in_use\": True,\n", + " \"agg_areas_in_use\": True,\n", + " \"aggregation\": True,\n", + " # data storage settings\n", + " \"write_Pdrive\": False,\n", + " \"write_Zdrive\": True,\n", + " \"write_goodcloud\": True,\n", + " \"write_checks\": True,\n", + " \"write_symbology\": True,\n", + " # numerical settings\n", + " \"solver\": None,\n", + " \"logging\": None,\n", + " \"starttime\": \"2024-01-01 00:00:00\",\n", + " \"endtime\": \"2024-01-02 00:00:00\",\n", + "}\n", + "\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics=model_characteristics)\n", "\n", "post_processed_data, crossings = waterboard.read_files()\n", "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", @@ -1005,10 +924,8 @@ "nodes, edges = waterboard.create_nodes(crossings, edges)\n", "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", "\n", - "#create individual model parts of the network\n", - "network = RibasimNetwork(nodes = nodes, \n", - " edges = edges, \n", - " model_characteristics = model_characteristics)\n", + "# create individual model parts of the network\n", + "network = RibasimNetwork(nodes=nodes, edges=edges, model_characteristics=model_characteristics)\n", "\n", "edge = network.edge()\n", "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", @@ -1026,10 +943,8 @@ "# discrete_control = network.discrete_control()\n", "# pid_control = network.pid_control()\n", "\n", - "#insert the individual model modules in an actual model\n", - "model = Model(starttime=model_characteristics['starttime'], \n", - " endtime=model_characteristics['endtime'], \n", - " crs=\"EPSG:28992\")\n", + "# insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics[\"starttime\"], endtime=model_characteristics[\"endtime\"], crs=\"EPSG:28992\")\n", "\n", "model.edge = edge\n", "\n", @@ -1056,12 +971,12 @@ "\n", "model.terminal.node = terminal_node\n", "\n", - "#add checks and metadata\n", - "checks = network.check(model = model, post_processed_data = post_processed_data, crossings = crossings)\n", + "# add checks and metadata\n", + "checks = network.check(model=model, post_processed_data=post_processed_data, crossings=crossings)\n", "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", "\n", - "#write the result\n", - "network.WriteResults(model = model, checks = checks)\n" + "# write the result\n", + "network.WriteResults(model=model, checks=checks)" ] }, { @@ -1246,44 +1161,38 @@ "metadata": {}, "outputs": [], "source": [ - " \n", - "model_characteristics = { \n", - " #model description\n", - " 'waterschap': 'WetterskipFryslan',\n", - " 'modelname': '20240417_samenwerkdag',\n", - " 'modeltype': 'boezemmodel',\n", - "\n", - " #define paths\n", - " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/Wetterskip/Wetterskip.gpkg\",\n", - " 'path_crossings' : \"../../../../Data_crossings/Wetterskip/wetterskip_crossings_v06.gpkg\",\n", - " 'path_Pdrive' : None,\n", - " 'path_boezem': \"../../../../Data_shortest_path/Wetterskip/Wetterskip_shortest_path.gpkg\",\n", - " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", - "\n", - " #apply filters\n", - " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", - " 'in_use' : True,\n", - " 'agg_links_in_use' : True,\n", - " 'agg_areas_in_use': True,\n", - " 'aggregation': True, ############################ LET OP\n", - "\n", - " #data storage settings\n", - " 'write_Pdrive' : False,\n", - " 'write_Zdrive' : True,\n", - " 'write_goodcloud' : True,\n", - " 'write_checks' : True,\n", - " 'write_symbology' : True,\n", - "\n", - "\n", - " #numerical settings\n", - " 'solver': None,\n", - " 'logging': None,\n", - " 'starttime': '2024-01-01 00:00:00',\n", - " 'endtime': '2024-01-02 00:00:00',\n", - " }\n", - "\n", - "\n", - "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "model_characteristics = {\n", + " # model description\n", + " \"waterschap\": \"WetterskipFryslan\",\n", + " \"modelname\": \"20240417_samenwerkdag\",\n", + " \"modeltype\": \"boezemmodel\",\n", + " # define paths\n", + " \"path_postprocessed_data\": r\"../../../../Data_postprocessed/Waterschappen/Wetterskip/Wetterskip.gpkg\",\n", + " \"path_crossings\": \"../../../../Data_crossings/Wetterskip/wetterskip_crossings_v06.gpkg\",\n", + " \"path_Pdrive\": None,\n", + " \"path_boezem\": \"../../../../Data_shortest_path/Wetterskip/Wetterskip_shortest_path.gpkg\",\n", + " \"path_goodcloud_password\": \"../../../../Data_overig/password_goodcloud.txt\",\n", + " # apply filters\n", + " \"crossings_layer\": \"crossings_hydroobject_filtered\",\n", + " \"in_use\": True,\n", + " \"agg_links_in_use\": True,\n", + " \"agg_areas_in_use\": True,\n", + " \"aggregation\": True, ############################ LET OP\n", + " # data storage settings\n", + " \"write_Pdrive\": False,\n", + " \"write_Zdrive\": True,\n", + " \"write_goodcloud\": True,\n", + " \"write_checks\": True,\n", + " \"write_symbology\": True,\n", + " # numerical settings\n", + " \"solver\": None,\n", + " \"logging\": None,\n", + " \"starttime\": \"2024-01-01 00:00:00\",\n", + " \"endtime\": \"2024-01-02 00:00:00\",\n", + "}\n", + "\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics=model_characteristics)\n", "\n", "post_processed_data, crossings = waterboard.read_files()\n", "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", @@ -1293,10 +1202,8 @@ "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", "\n", "\n", - "#create individual model parts of the network\n", - "network = RibasimNetwork(nodes = nodes, \n", - " edges = edges, \n", - " model_characteristics = model_characteristics)\n", + "# create individual model parts of the network\n", + "network = RibasimNetwork(nodes=nodes, edges=edges, model_characteristics=model_characteristics)\n", "\n", "edge = network.edge()\n", "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", @@ -1313,10 +1220,8 @@ "# discrete_control = network.discrete_control()\n", "# pid_control = network.pid_control()\n", "\n", - "#insert the individual model modules in an actual model\n", - "model = Model(starttime=model_characteristics['starttime'], \n", - " endtime=model_characteristics['endtime'], \n", - " crs=\"EPSG:28992\")\n", + "# insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics[\"starttime\"], endtime=model_characteristics[\"endtime\"], crs=\"EPSG:28992\")\n", "\n", "model.edge = edge\n", "\n", @@ -1343,12 +1248,12 @@ "\n", "model.terminal.node = terminal_node\n", "\n", - "#add checks and metadata\n", - "checks = network.check(model = model, post_processed_data = post_processed_data, crossings = crossings)\n", + "# add checks and metadata\n", + "checks = network.check(model=model, post_processed_data=post_processed_data, crossings=crossings)\n", "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", "\n", - "#write the result\n", - "network.WriteResults(model = model, checks = checks)\n" + "# write the result\n", + "network.WriteResults(model=model, checks=checks)" ] }, { @@ -1374,44 +1279,37 @@ } ], "source": [ - " \n", - "model_characteristics = { \n", - " #model description\n", - " 'waterschap': 'Zuiderzeeland',\n", - " 'modelname': '20240417_samenwerkdag',\n", - " 'modeltype': 'boezemmodel',\n", - "\n", - " #define paths\n", - " 'path_postprocessed_data' : r\"../../../../Data_postprocessed/Waterschappen/Zuiderzeeland/Zuiderzeeland.gpkg\",\n", - " 'path_crossings' : \"../../../../Data_crossings/Zuiderzeeland/zzl_crossings_v05.gpkg\",\n", - " 'path_Pdrive' : None,\n", - " 'path_goodcloud_password': \"../../../../Data_overig/password_goodcloud.txt\",\n", - " 'path_boezem': \"../../../../Data_shortest_path/Zuiderzeeland/Zuiderzeeland_shortest_path.gpkg\",\n", - "\n", - "\n", - " #apply filters\n", - " 'crossings_layer' : 'crossings_hydroobject_filtered',\n", - " 'in_use' : True,\n", - " 'agg_links_in_use' : True,\n", - " 'agg_areas_in_use': True,\n", - " 'aggregation': True,\n", - "\n", - " #data storage settings\n", - " 'write_Pdrive' : False,\n", - " 'write_Zdrive' : True,\n", - " 'write_goodcloud' : True,\n", - " 'write_checks' : True,\n", - " 'write_symbology' : True,\n", - "\n", - "\n", - " #numerical settings\n", - " 'solver': None,\n", - " 'logging': None,\n", - " 'starttime': '2024-01-01 00:00:00',\n", - " 'endtime': '2024-01-02 00:00:00',\n", - " }\n", - "\n", - "waterboard = CrossingsToRibasim(model_characteristics = model_characteristics)\n", + "model_characteristics = {\n", + " # model description\n", + " \"waterschap\": \"Zuiderzeeland\",\n", + " \"modelname\": \"20240417_samenwerkdag\",\n", + " \"modeltype\": \"boezemmodel\",\n", + " # define paths\n", + " \"path_postprocessed_data\": r\"../../../../Data_postprocessed/Waterschappen/Zuiderzeeland/Zuiderzeeland.gpkg\",\n", + " \"path_crossings\": \"../../../../Data_crossings/Zuiderzeeland/zzl_crossings_v05.gpkg\",\n", + " \"path_Pdrive\": None,\n", + " \"path_goodcloud_password\": \"../../../../Data_overig/password_goodcloud.txt\",\n", + " \"path_boezem\": \"../../../../Data_shortest_path/Zuiderzeeland/Zuiderzeeland_shortest_path.gpkg\",\n", + " # apply filters\n", + " \"crossings_layer\": \"crossings_hydroobject_filtered\",\n", + " \"in_use\": True,\n", + " \"agg_links_in_use\": True,\n", + " \"agg_areas_in_use\": True,\n", + " \"aggregation\": True,\n", + " # data storage settings\n", + " \"write_Pdrive\": False,\n", + " \"write_Zdrive\": True,\n", + " \"write_goodcloud\": True,\n", + " \"write_checks\": True,\n", + " \"write_symbology\": True,\n", + " # numerical settings\n", + " \"solver\": None,\n", + " \"logging\": None,\n", + " \"starttime\": \"2024-01-01 00:00:00\",\n", + " \"endtime\": \"2024-01-02 00:00:00\",\n", + "}\n", + "\n", + "waterboard = CrossingsToRibasim(model_characteristics=model_characteristics)\n", "\n", "post_processed_data, crossings = waterboard.read_files()\n", "post_processed_data, crossings = waterboard.routing_processor(post_processed_data, crossings)\n", @@ -1421,10 +1319,8 @@ "edges = waterboard.embed_boezems(edges, post_processed_data, crossings)\n", "\n", "\n", - "#create individual model parts of the network\n", - "network = RibasimNetwork(nodes = nodes, \n", - " edges = edges, \n", - " model_characteristics = model_characteristics)\n", + "# create individual model parts of the network\n", + "network = RibasimNetwork(nodes=nodes, edges=edges, model_characteristics=model_characteristics)\n", "\n", "edge = network.edge()\n", "basin_node, basin_profile, basin_static, basin_state, basin_area = network.basin()\n", @@ -1441,10 +1337,8 @@ "# discrete_control = network.discrete_control()\n", "# pid_control = network.pid_control()\n", "\n", - "#insert the individual model modules in an actual model\n", - "model = Model(starttime=model_characteristics['starttime'], \n", - " endtime=model_characteristics['endtime'], \n", - " crs=\"EPSG:28992\")\n", + "# insert the individual model modules in an actual model\n", + "model = Model(starttime=model_characteristics[\"starttime\"], endtime=model_characteristics[\"endtime\"], crs=\"EPSG:28992\")\n", "\n", "model.edge = edge\n", "\n", @@ -1471,12 +1365,12 @@ "\n", "model.terminal.node = terminal_node\n", "\n", - "#add checks and metadata\n", - "checks = network.check(model = model, post_processed_data = post_processed_data, crossings = crossings)\n", + "# add checks and metadata\n", + "checks = network.check(model=model, post_processed_data=post_processed_data, crossings=crossings)\n", "model = network.add_meta_data(model, checks, post_processed_data, crossings)\n", "\n", - "#write the result\n", - "network.WriteResults(model = model, checks = checks)\n" + "# write the result\n", + "network.WriteResults(model=model, checks=checks)" ] }, { diff --git a/src/peilbeheerst_model/03_test_outlets.ipynb b/src/peilbeheerst_model/03_test_outlets.ipynb index a4061af..523f9a3 100644 --- a/src/peilbeheerst_model/03_test_outlets.ipynb +++ b/src/peilbeheerst_model/03_test_outlets.ipynb @@ -20,7 +20,7 @@ "\n", "from outlets import case1, case2\n", "\n", - "sys.path.append('peilbeheerst_model')\n", + "sys.path.append(\"peilbeheerst_model\")\n", "\n", "%load_ext autoreload\n", "%autoreload 2" @@ -1562,12 +1562,12 @@ } ], "source": [ - "#first, load in the simple model of case 1. Copy it.\n", + "# first, load in the simple model of case 1. Copy it.\n", "case2_example1 = case1(\"case2_example1\")\n", - "case2_base_model = case2_example1.create_model(copy = True)\n", + "case2_base_model = case2_example1.create_model(copy=True)\n", "\n", - "#then, change it to a case 2 category\n", - "case2_example1 = case2(\"case2_example1\", model = case2_base_model)\n", + "# then, change it to a case 2 category\n", + "case2_example1 = case2(\"case2_example1\", model=case2_base_model)\n", "case2_example1.create_model()" ] }, @@ -1874,11 +1874,11 @@ } ], "source": [ - "#first, load in the simple model of case 1. Copy it.\n", + "# first, load in the simple model of case 1. Copy it.\n", "case2_example1 = case1(\"case2_example2\")\n", - "case2_base_model = case2_example1.create_model(copy = True)\n", + "case2_base_model = case2_example1.create_model(copy=True)\n", "\n", - "case2_example2 = case2(\"case2_example2\", model = case2_base_model)\n", + "case2_example2 = case2(\"case2_example2\", model=case2_base_model)\n", "case2_example2.create_model()" ] }, @@ -2183,12 +2183,12 @@ } ], "source": [ - "#first, load in the simple model of case 1. Copy it.\n", + "# first, load in the simple model of case 1. Copy it.\n", "case2_example1 = case1(\"case2_example3\")\n", - "case2_base_model = case2_example1.create_model(copy = True)\n", + "case2_base_model = case2_example1.create_model(copy=True)\n", "\n", - "#implement the second model\n", - "case2_example3 = case2(\"case2_example3\", model = case2_base_model)\n", + "# implement the second model\n", + "case2_example3 = case2(\"case2_example3\", model=case2_base_model)\n", "case2_example3.create_model()" ] }, @@ -2494,12 +2494,12 @@ } ], "source": [ - "#first, load in the simple model of case 1. Copy it.\n", + "# first, load in the simple model of case 1. Copy it.\n", "case2_example4 = case1(\"case2_example4\")\n", - "case2_base_model = case2_example4.create_model(copy = True)\n", + "case2_base_model = case2_example4.create_model(copy=True)\n", "\n", - "#implement the second model\n", - "case2_example4 = case2(\"case2_example4\", model = case2_base_model)\n", + "# implement the second model\n", + "case2_example4 = case2(\"case2_example4\", model=case2_base_model)\n", "case2_example4.create_model()" ] }, @@ -2589,50 +2589,50 @@ "example1_characteristics = {}\n", "\n", "\n", - "#solver\n", - "example1_characteristics['starttime'] = \"2024-01-01 00:00:00\"\n", - "example1_characteristics['endtime'] = \"2024-01-03 00:00:00\"\n", - "example1_characteristics['saveat'] = 60\n", + "# solver\n", + "example1_characteristics[\"starttime\"] = \"2024-01-01 00:00:00\"\n", + "example1_characteristics[\"endtime\"] = \"2024-01-03 00:00:00\"\n", + "example1_characteristics[\"saveat\"] = 60\n", "\n", - "#boezem settings (LevelBoundary)\n", - "example1_characteristics['boezem1_level'] = 3\n", - "example1_characteristics['boezem2_level'] = 3\n", + "# boezem settings (LevelBoundary)\n", + "example1_characteristics[\"boezem1_level\"] = 3\n", + "example1_characteristics[\"boezem2_level\"] = 3\n", "\n", - "#peilgebied settings (Basins)\n", - "example1_characteristics['basin1_profile_area'] = [0.01, 10000.0] \n", - "example1_characteristics['basin1_profile_level'] = [1.0, 5.0] \n", - "example1_characteristics['basin1_initial_level'] = [3]\n", - "example1_characteristics['basin1_target_level'] = [2]\n", + "# peilgebied settings (Basins)\n", + "example1_characteristics[\"basin1_profile_area\"] = [0.01, 10000.0]\n", + "example1_characteristics[\"basin1_profile_level\"] = [1.0, 5.0]\n", + "example1_characteristics[\"basin1_initial_level\"] = [3]\n", + "example1_characteristics[\"basin1_target_level\"] = [2]\n", "\n", "\n", - "example1_characteristics['basin2_profile_area'] = [0.01, 10000.0] \n", - "example1_characteristics['basin2_profile_level'] = [0.0, 5.0] \n", - "example1_characteristics['basin2_initial_level'] = [2] \n", - "example1_characteristics['basin2_target_level'] = [1]\n", + "example1_characteristics[\"basin2_profile_area\"] = [0.01, 10000.0]\n", + "example1_characteristics[\"basin2_profile_level\"] = [0.0, 5.0]\n", + "example1_characteristics[\"basin2_initial_level\"] = [2]\n", + "example1_characteristics[\"basin2_target_level\"] = [1]\n", "\n", - "example1_characteristics['evaporation'] = 5 #mm/day, will be converted later to m/s\n", - "example1_characteristics['precipitation'] = 5 #mm/day, will be converted later to m/s\n", + "example1_characteristics[\"evaporation\"] = 5 # mm/day, will be converted later to m/s\n", + "example1_characteristics[\"precipitation\"] = 5 # mm/day, will be converted later to m/s\n", "\n", - "#connection node settings (Outlets, Pumpts)\n", - "example1_characteristics['outlet1_flow_rate'] = 0.010\n", - "example1_characteristics['outlet1_min_crest_level'] = 2.90\n", + "# connection node settings (Outlets, Pumpts)\n", + "example1_characteristics[\"outlet1_flow_rate\"] = 0.010\n", + "example1_characteristics[\"outlet1_min_crest_level\"] = 2.90\n", "\n", - "example1_characteristics['outlet2_flow_rate'] = 0.010\n", - "example1_characteristics['outlet2_min_crest_level'] = 1.90\n", + "example1_characteristics[\"outlet2_flow_rate\"] = 0.010\n", + "example1_characteristics[\"outlet2_min_crest_level\"] = 1.90\n", "\n", - "example1_characteristics['pump_flow_rate'] = 10/60 #[x] m3 / minute\n", + "example1_characteristics[\"pump_flow_rate\"] = 10 / 60 # [x] m3 / minute\n", "\n", - "#general settings\n", - "example1_characteristics['plot'] = True\n", - "example1_characteristics['crs'] = \"EPSG:4326\"\n", - "example1_characteristics['case'] = 'case1'\n", - "example1_characteristics['example'] = 'example1'\n", - "example1_characteristics['results_dir'] = r'../../../../Outlet_tests/'\n", - "example1_characteristics['show_progress'] = False\n", - "example1_characteristics['show_results'] = True\n", + "# general settings\n", + "example1_characteristics[\"plot\"] = True\n", + "example1_characteristics[\"crs\"] = \"EPSG:4326\"\n", + "example1_characteristics[\"case\"] = \"case1\"\n", + "example1_characteristics[\"example\"] = \"example1\"\n", + "example1_characteristics[\"results_dir\"] = r\"../../../../Outlet_tests/\"\n", + "example1_characteristics[\"show_progress\"] = False\n", + "example1_characteristics[\"show_results\"] = True\n", "\n", - "#solver settings\n", - "example1_characteristics['saveat'] = 60\n" + "# solver settings\n", + "example1_characteristics[\"saveat\"] = 60" ] } ], diff --git a/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb index f80c956..c809338 100644 --- a/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb +++ b/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb @@ -23,7 +23,7 @@ "\n", "%reload_ext autoreload\n", "%autoreload 2\n", - "warnings.filterwarnings(\"ignore\")\n" + "warnings.filterwarnings(\"ignore\")" ] }, { @@ -123,7 +123,7 @@ "timesteps = 2\n", "delta_crest_level = 0.1 # delta waterlevel of boezem compared to streefpeil till no water can flow through an outlet\n", "\n", - "default_level = 0 # default LevelBoundary level\n" + "default_level = 0 # default LevelBoundary level" ] }, { @@ -163,7 +163,7 @@ "processor = RibasimFeedbackProcessor(\n", " name, waterschap, versie, feedback_excel, ribasim_toml, output_folder, feedback_excel_processed\n", ")\n", - "processor.run()\n" + "processor.run()" ] }, { @@ -182,7 +182,7 @@ "# Load Ribasim model\n", "with warnings.catch_warnings():\n", " warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", - " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)\n" + " ribasim_model = ribasim.Model(filepath=path_ribasim_toml)" ] }, { @@ -208,7 +208,7 @@ "outputs": [], "source": [ "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"node_id\"] == 195, \"meta_streefpeil\"] = -2.45\n", - "ribasim_model.basin.state.df.loc[ribasim_model.basin.state.df.node_id == 195, \"level\"] = -2.45\n" + "ribasim_model.basin.state.df.loc[ribasim_model.basin.state.df.node_id == 195, \"level\"] = -2.45" ] }, { @@ -1791,7 +1791,7 @@ "ribasim_model = processor.run()\n", "\n", "# Check basin area\n", - "ribasim_param.validate_basin_area(ribasim_model)\n" + "ribasim_param.validate_basin_area(ribasim_model)" ] }, { @@ -1813,9 +1813,9 @@ "ribasim_model.basin.area.df.loc[\n", " ribasim_model.basin.area.df[\"meta_streefpeil\"] == \"Onbekend streefpeil\", \"meta_streefpeil\"\n", "] = unknown_streefpeil\n", - "ribasim_model.basin.area.df.loc[\n", - " ribasim_model.basin.area.df[\"meta_streefpeil\"] == -9.999, \"meta_streefpeil\"\n", - "] = unknown_streefpeil\n" + "ribasim_model.basin.area.df.loc[ribasim_model.basin.area.df[\"meta_streefpeil\"] == -9.999, \"meta_streefpeil\"] = (\n", + " unknown_streefpeil\n", + ")" ] }, { @@ -1831,7 +1831,7 @@ " regular_percentage=regular_percentage,\n", " boezem_percentage=boezem_percentage,\n", " depth_profile=2,\n", - ")\n" + ")" ] }, { @@ -1856,7 +1856,7 @@ " # 'urban_runoff': ribasim_param.convert_mm_day_to_m_sec(0),\n", "}\n", "\n", - "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)\n" + "ribasim_param.set_static_forcing(timesteps, timestep_size, start_time, forcing_dict, ribasim_model)" ] }, { @@ -1873,7 +1873,7 @@ "outputs": [], "source": [ "# Set pump capacity for each pump\n", - "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut\n" + "ribasim_model.pump.static.df[\"flow_rate\"] = 0.16667 # 10 kuub per minuut" ] }, { @@ -1891,7 +1891,7 @@ "source": [ "ribasim_param.Terminals_to_LevelBoundaries(ribasim_model=ribasim_model, default_level=default_level)\n", "\n", - "ribasim_param.FlowBoundaries_to_LevelBoundaries(ribasim_model=ribasim_model, default_level=default_level)\n" + "ribasim_param.FlowBoundaries_to_LevelBoundaries(ribasim_model=ribasim_model, default_level=default_level)" ] }, { @@ -1989,7 +1989,7 @@ "source": [ "ribasim_model.discrete_control.node.df = ribasim_model.discrete_control.node.df.drop_duplicates(\n", " subset=\"node_id\"\n", - ").reset_index(drop=True)\n" + ").reset_index(drop=True)" ] }, { @@ -2006,7 +2006,7 @@ "outputs": [], "source": [ "# there is a MR without geometry and without edges for some reason\n", - "ribasim_model.manning_resistance.node.df = ribasim_model.manning_resistance.node.df.dropna(subset=\"geometry\")\n" + "ribasim_model.manning_resistance.node.df = ribasim_model.manning_resistance.node.df.dropna(subset=\"geometry\")" ] }, { @@ -2037,7 +2037,7 @@ "ribasim_model.starttime = datetime.datetime(2024, 1, 1)\n", "ribasim_model.endtime = datetime.datetime(2024, 1, 30)\n", "ribasim_model.solver.saveat = 3600\n", - "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)\n" + "ribasim_param.write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml)" ] }, { @@ -2116,7 +2116,7 @@ " log_content = log_file.read()\n", " print(log_content)\n", " except Exception as log_exception:\n", - " logging.error(f\"Could not read the log file: {log_exception}\")\n" + " logging.error(f\"Could not read the log file: {log_exception}\")" ] }, { @@ -2203,7 +2203,7 @@ " waterschap=\"AmstelGooienVecht\",\n", " modeltype=\"boezemmodel\",\n", " include_results=True,\n", - ")\n" + ")" ] }, { @@ -2243,7 +2243,7 @@ "outputs": [], "source": [ "df_basin = pd.read_feather(os.path.join(output_dir, \"basin.arrow\"))\n", - "df_basin\n" + "df_basin" ] }, { @@ -2322,7 +2322,6 @@ "# # The water level in the boezem is regulated heavily. There is a smaller tolerance for an increase in water level.\n", "# # Hence, the TRC's which discharge water from the boezem to a Terminal should have a higher capacity.\n", "# ribasim_param.set_tabulated_rating_curves_boundaries(ribasim_model, level_increase=0.10, flow_rate=40)\n", - "\n", "\n" ] } diff --git a/src/peilbeheerst_model/compute_voronoi.ipynb b/src/peilbeheerst_model/compute_voronoi.ipynb index 5e728df..16ab010 100644 --- a/src/peilbeheerst_model/compute_voronoi.ipynb +++ b/src/peilbeheerst_model/compute_voronoi.ipynb @@ -14,7 +14,7 @@ "import pandas as pd\n", "import shapely\n", "import shapely.geometry\n", - "import tqdm.auto as tqdm\n" + "import tqdm.auto as tqdm" ] }, { @@ -30,7 +30,9 @@ "df[\"geometry\"] = df.geometry.apply(shapely.force_2d)\n", "df = df[df.peilgebied_cat == 1].copy()\n", "\n", - "df_crossings = gpd.read_file(\"../../../../Data_crossings/Wetterskip/wetterskip_crossings_v05.gpkg\", layer=\"crossings_hydroobject_filtered\")\n", + "df_crossings = gpd.read_file(\n", + " \"../../../../Data_crossings/Wetterskip/wetterskip_crossings_v05.gpkg\", layer=\"crossings_hydroobject_filtered\"\n", + ")\n", "df_crossings = df_crossings[df_crossings.agg_links_in_use].copy()" ] }, @@ -60,8 +62,7 @@ " else:\n", " idx = idxs[0]\n", " merged_poly_ids.append(idx)\n", - "df[\"merged_poly_id\"] = merged_poly_ids\n", - " " + "df[\"merged_poly_id\"] = merged_poly_ids" ] }, { @@ -124,7 +125,9 @@ "\n", "node_id = 0\n", "idxs, node_ids, connectivity = [], [], []\n", - "for poly_id, poly_group in tqdm.tqdm(df_center_single_boundary_points.groupby(\"poly_id\", sort=False), desc=\"assign node ids\"):\n", + "for poly_id, poly_group in tqdm.tqdm(\n", + " df_center_single_boundary_points.groupby(\"poly_id\", sort=False), desc=\"assign node ids\"\n", + "):\n", " for geom, group in tqdm.tqdm(poly_group.groupby(\"geometry\", sort=False), desc=f\"{poly_id=}\", leave=False):\n", " idxs.append(group.index)\n", " node_ids.append(len(group) * [node_id])\n", @@ -151,7 +154,9 @@ "source": [ "# Alleen edges proberen te mergen waarvan beide uiteindes (nodes) connectivity 2 hebben\n", "pot_reduce = []\n", - "for edge_id, group in tqdm.tqdm(df_center_single_boundary_points.groupby(\"edge_id\", sort=False), desc=\"Find connectivity=2\"):\n", + "for edge_id, group in tqdm.tqdm(\n", + " df_center_single_boundary_points.groupby(\"edge_id\", sort=False), desc=\"Find connectivity=2\"\n", + "):\n", " if (group.connectivity == 2).all():\n", " pot_reduce.append(edge_id)\n", "pot_reduce = df_center_single_boundary.loc[pd.IndexSlice[:, pot_reduce], :].copy()\n", @@ -164,14 +169,14 @@ " for edge_id, group in tqdm.tqdm(polygroup.groupby(\"edge_id\", sort=False), leave=False, desc=f\"{poly_id=}\"):\n", " if edge_id in edges_visited:\n", " continue\n", - " \n", + "\n", " ivec = np.where(polygroup.index.isin(group.index))[0]\n", " prev_len = 0\n", " while len(ivec) != prev_len:\n", " prev_len = len(ivec)\n", " ivec = polygroup.sindex.query(polygroup.geometry.iloc[ivec], predicate=\"intersects\")\n", " ivec = np.unique(ivec[1, :])\n", - " \n", + "\n", " lbls = polygroup.index[ivec]\n", " assert len(pot_reduce.loc[lbls].index.get_level_values(\"poly_id\").unique()) == 1\n", " pot_reduce.loc[lbls, \"merge_group\"] = merge_group\n", @@ -201,7 +206,9 @@ "df_center_single_boundary_points = df_center_single_boundary.explode(index_parts=True)\n", "df_center_single_boundary_points[\"node_id\"] = None\n", "idxs, node_ids = [], []\n", - "for node_id, (geom, group) in enumerate(tqdm.tqdm(df_center_single_boundary_points.groupby(\"geometry\", sort=False), desc=\"assign node ids\")):\n", + "for node_id, (geom, group) in enumerate(\n", + " tqdm.tqdm(df_center_single_boundary_points.groupby(\"geometry\", sort=False), desc=\"assign node ids\")\n", + "):\n", " idxs.append(group.index)\n", " node_ids.append(len(group) * [node_id])\n", "df_center_single_boundary_points.loc[np.hstack(idxs), \"node_id\"] = np.hstack(node_ids)\n", @@ -238,13 +245,17 @@ " merged_poly = row.geometry\n", "\n", " globalids = df.globalid.loc[df.merged_poly_id == poly_id].unique()\n", - " df_crossings_single = df_crossings[df_crossings.peilgebied_from.isin(globalids) | df_crossings.peilgebied_to.isin(globalids)].copy()\n", + " df_crossings_single = df_crossings[\n", + " df_crossings.peilgebied_from.isin(globalids) | df_crossings.peilgebied_to.isin(globalids)\n", + " ].copy()\n", "\n", " # End point\n", " df_graph = df_center_single_boundary_points.loc[pd.IndexSlice[poly_id, :, :], :].copy()\n", - " idx_end, distance_end = df_graph.sindex.nearest(merged_poly.representative_point(), return_distance=True, return_all=False)\n", + " idx_end, distance_end = df_graph.sindex.nearest(\n", + " merged_poly.representative_point(), return_distance=True, return_all=False\n", + " )\n", " distance_end = distance_end[0]\n", - " idx_end = idx_end[1,0]\n", + " idx_end = idx_end[1, 0]\n", " idx_end = df_graph.index[idx_end]\n", " end_node = idx_end[-1]\n", " df_crossings\n", @@ -312,7 +323,7 @@ "# for i, row in enumerate(polygroup.itertuples()):\n", "# idx = row.Index\n", "# geom = row.geometry\n", - " \n", + "\n", "# idxs = polygroup.sindex.query(geom, predicate=\"intersects\")\n", "# idxs = idxs[idxs != i]\n", "# dists = polygroup.geometry.iloc[idxs].distance(row.geometry)\n", diff --git a/src/peilbeheerst_model/peilbeheerst_model/controle_output.py b/src/peilbeheerst_model/peilbeheerst_model/controle_output.py index 440c99b..2dbf817 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/controle_output.py +++ b/src/peilbeheerst_model/peilbeheerst_model/controle_output.py @@ -48,9 +48,9 @@ def initial_final_level(self, control_dict): initial_final_level_df["initial_level"] - initial_final_level_df["final_level"] ) - initial_final_level_df[ - "final_level_within_target" - ] = True # final level within target level (deviate max 20 cm from streefpeil) is default True ... + initial_final_level_df["final_level_within_target"] = ( + True # final level within target level (deviate max 20 cm from streefpeil) is default True ... + ) initial_final_level_df.loc[ (initial_final_level_df["difference_level"] > 0.2) | (initial_final_level_df["difference_level"] < -0.2), "final_level_within_target", diff --git a/src/peilbeheerst_model/peilbeheerst_model/crossings_to_ribasim.py b/src/peilbeheerst_model/peilbeheerst_model/crossings_to_ribasim.py index 89db183..6510a8c 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/crossings_to_ribasim.py +++ b/src/peilbeheerst_model/peilbeheerst_model/crossings_to_ribasim.py @@ -96,14 +96,10 @@ def read_files(self): crossings = crossings[crossings.in_use].reset_index(drop=True) # only use the crossings in use if self.model_characteristics["agg_links_in_use"]: - crossings = crossings[crossings.agg_links_in_use].reset_index( - drop=True - ) # only use the crossings in use + crossings = crossings[crossings.agg_links_in_use].reset_index(drop=True) # only use the crossings in use if self.model_characteristics["agg_areas_in_use"]: - crossings = crossings[crossings.agg_areas_in_use].reset_index( - drop=True - ) # only use the crossings in use + crossings = crossings[crossings.agg_areas_in_use].reset_index(drop=True) # only use the crossings in use crossings["geometry"] = gpd.GeoSeries( gpd.points_from_xy(x=crossings["geometry"].x, y=crossings["geometry"].y) @@ -720,7 +716,7 @@ def discard_duplicate_boezems(boezems): edges["bool_SP"] = edges["line_geom"] edges["bool_SP"].loc[edges["bool_SP"].isna()] = False # edges["bool_SP"].loc[edges["bool_SP"]] = True - edges['bool_SP'].loc[edges['bool_SP']!=False] = True # noqa: E712 + edges["bool_SP"].loc[edges["bool_SP"] != False] = True # noqa: E712 # fill the line geoms with the previous geoms if no shortest path is found edges.line_geom = edges.line_geom.fillna(edges.line_geom_oud) @@ -1613,7 +1609,7 @@ def add_meta_data(self, model, checks, post_processed_data, crossings): points_within = gpd.sjoin( basin_nodes, checks["boezem"], how="inner", predicate="within" ) # find the basins which are within a peilgebied (found in the checks) - model.basin.state.df.meta_categorie.loc[points_within.index-1] = ( + model.basin.state.df.meta_categorie.loc[points_within.index - 1] = ( "hoofdwater" # set these basins to become peilgebied_cat == 1, or 'doorgaand' ) @@ -1625,25 +1621,17 @@ def add_meta_data(self, model, checks, post_processed_data, crossings): right_on="globalid", ) - pump_function = coupled_crossings_pump.merge( - model.pump.node.df, on="geometry", suffixes=("", "_duplicate") - )[["node_id", "func_afvoer", "func_aanvoer", "func_circulatie"]] + pump_function = coupled_crossings_pump.merge(model.pump.node.df, on="geometry", suffixes=("", "_duplicate"))[ + ["node_id", "func_afvoer", "func_aanvoer", "func_circulatie"] + ] # display(pump_function) - coupled_pump_function = model.pump.static.df.merge( - pump_function, left_on="node_id", right_on="node_id" - ) + coupled_pump_function = model.pump.static.df.merge(pump_function, left_on="node_id", right_on="node_id") # add the coupled_pump_function column per column to the model.pump.static.df - func_afvoer = model.pump.static.df.merge(coupled_pump_function, on="node_id", how="left")[ - "func_afvoer" - ] - func_aanvoer = model.pump.static.df.merge(coupled_pump_function, on="node_id", how="left")[ - "func_aanvoer" - ] + func_afvoer = model.pump.static.df.merge(coupled_pump_function, on="node_id", how="left")["func_afvoer"] + func_aanvoer = model.pump.static.df.merge(coupled_pump_function, on="node_id", how="left")["func_aanvoer"] - func_circulatie = model.pump.static.df.merge(coupled_pump_function, on="node_id", how="left")[ - "func_circulatie" - ] + func_circulatie = model.pump.static.df.merge(coupled_pump_function, on="node_id", how="left")["func_circulatie"] model.pump.static.df["meta_func_afvoer"] = func_afvoer model.pump.static.df["meta_func_aanvoer"] = func_aanvoer diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/general_functions.py b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/general_functions.py index 493480c..d12a988 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/general_functions.py +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/general_functions.py @@ -1,10 +1,10 @@ -#import packages and functions +# import packages and functions import geopandas as gpd import matplotlib.pyplot as plt import pandas as pd -def read_gpkg_layers(gpkg_path, variables, engine = 'fiona', print_var=False): +def read_gpkg_layers(gpkg_path, variables, engine="fiona", print_var=False): """ Read specified layers from a GeoPackage (GPKG) file and return them as a dictionary. @@ -25,9 +25,9 @@ def read_gpkg_layers(gpkg_path, variables, engine = 'fiona', print_var=False): for variable in variables: if print_var: print(variable) - data_temp = gpd.read_file(gpkg_path, layer = variable, engine=engine) + data_temp = gpd.read_file(gpkg_path, layer=variable, engine=engine) data[variable] = data_temp - + return data @@ -50,12 +50,11 @@ def show_layers_and_columns(waterschap): for key in waterschap.keys(): print(key) print(waterschap[str(key)].columns.values) - print('type = ', type(waterschap[str(key)])) - print('crs = ', waterschap[str(key)].crs) + print("type = ", type(waterschap[str(key)])) + print("crs = ", waterschap[str(key)].crs) print() - - - + + def store_data(waterschap, output_gpkg_path): """ Store Geospatial Data to a GeoPackage (GPKG) File. @@ -70,18 +69,16 @@ def store_data(waterschap, output_gpkg_path): None This function stores geospatial data from a dictionary of GeoDataFrames into a GeoPackage (GPKG) file. - + Parameters ---------- - waterschap: A dictionary where the keys represent layer names, and the values are GeoDataFrames. - output_gpkg_path: The file path for the output GPKG file. The '.gpkg' extension is added automatically. """ - for key in waterschap.keys(): - waterschap[str(key)].to_file(output_gpkg_path + '.gpkg', layer = str(key), driver='GPKG') + for key in waterschap.keys(): + waterschap[str(key)].to_file(output_gpkg_path + ".gpkg", layer=str(key), driver="GPKG") + - - - def overlapping_peilgebieden(waterschap_peilgebieden): """ Identify and calculate the percentage of overlapping peilgebieden. @@ -103,34 +100,42 @@ def overlapping_peilgebieden(waterschap_peilgebieden): - waterschap_peilgebieden: A GeoDataFrame containing the peilgebieden polygons. """ peilgebied = waterschap_peilgebieden - peilgebied.geometry = peilgebied.buffer(distance=0) #make invalid geometries valid - peilgebied.set_crs(crs='EPSG:28992', inplace=True) + peilgebied.geometry = peilgebied.buffer(distance=0) # make invalid geometries valid + peilgebied.set_crs(crs="EPSG:28992", inplace=True) # Create an empty GeoDataFrame to store the overlapping polygons and additional information overlapping_polygons = gpd.GeoDataFrame(columns=peilgebied.columns) - # Iterate through each polygon in peilgebied + # Iterate through each polygon in peilgebied for index, row in peilgebied.iterrows(): - current_polygon = peilgebied.iloc[[index]] #select the current polygon - other_polygons = peilgebied.drop(index) #create a GeoDataFrame without the current polygon - overlaps = other_polygons[other_polygons.geometry.overlaps(current_polygon.geometry.iloc[0])] #check for overlaps with other polygons + current_polygon = peilgebied.iloc[[index]] # select the current polygon + other_polygons = peilgebied.drop(index) # create a GeoDataFrame without the current polygon + overlaps = other_polygons[ + other_polygons.geometry.overlaps(current_polygon.geometry.iloc[0]) + ] # check for overlaps with other polygons if not overlaps.empty: - #calculate the percentage of overlap, and add this to the gdf including the overlapping indexes - current_overlap_percentage = overlaps.geometry.intersection(current_polygon.geometry.iloc[0]).area / current_polygon.geometry.iloc[0].area * 100 - - overlaps['overlap_percentage'], overlaps['source_globalid'] = pd.NA, pd.NA #create columns - - #fill columns - overlaps['overlap_percentage'] = current_overlap_percentage #multiple peilgebieden will be added to the temporal gdf if there are multiple overlapping polygons - overlaps['source_globalid'] = current_polygon['globalid'].values[0] #add the global id of the current polygon. - - #add to the results + # calculate the percentage of overlap, and add this to the gdf including the overlapping indexes + current_overlap_percentage = ( + overlaps.geometry.intersection(current_polygon.geometry.iloc[0]).area + / current_polygon.geometry.iloc[0].area + * 100 + ) + + overlaps["overlap_percentage"], overlaps["source_globalid"] = pd.NA, pd.NA # create columns + + # fill columns + overlaps["overlap_percentage"] = ( + current_overlap_percentage # multiple peilgebieden will be added to the temporal gdf if there are multiple overlapping polygons + ) + overlaps["source_globalid"] = current_polygon["globalid"].values[ + 0 + ] # add the global id of the current polygon. + + # add to the results overlapping_polygons = pd.concat([overlapping_polygons, overlaps]) - return overlapping_polygons - - + return overlapping_polygons def plot_histogram_overlap(overlapping_polygons): @@ -151,22 +156,24 @@ def plot_histogram_overlap(overlapping_polygons): from 0% to 100% in 10% increments for the histogram. The number of overlapping polygons is displayed in the title. """ - overlapping_polygons['overlap_percentage'] = overlapping_polygons['overlap_percentage'].fillna(0) # Handle potential NaN values + overlapping_polygons["overlap_percentage"] = overlapping_polygons["overlap_percentage"].fillna( + 0 + ) # Handle potential NaN values bins = range(0, 101, 10) # Create bins from 0% to 100% in 10% increments # Create the histogram - plt.hist(overlapping_polygons['overlap_percentage'], bins=bins, color='cornflowerblue', edgecolor='k') + plt.hist(overlapping_polygons["overlap_percentage"], bins=bins, color="cornflowerblue", edgecolor="k") # Set labels and title - plt.xlabel('Overlap [%]') - plt.ylabel('Frequency [#]') # Update the y-axis label + plt.xlabel("Overlap [%]") + plt.ylabel("Frequency [#]") # Update the y-axis label # plt.yscale('log') # Set the y-axis scale to 'log' plt.ylim(0, 15) - plt.suptitle('Histogram of overlapping percentages') - plt.title(f'Number of overlapping polygons = {len(overlapping_polygons)}', fontsize = 8) + plt.suptitle("Histogram of overlapping percentages") + plt.title(f"Number of overlapping polygons = {len(overlapping_polygons)}", fontsize=8) plt.show() - - + + def plot_overlapping_peilgebieden(peilgebied, overlapping_polygons, minimum_percentage): """ Plot Overlapping Peilgebieden on a map, including a Minimum Percentage of Overlap to show. @@ -191,33 +198,34 @@ def plot_overlapping_peilgebieden(peilgebied, overlapping_polygons, minimum_perc - minimum_percentage: The minimum overlap percentage required for polygons to be displayed. """ - #make a subsect of overlapping polygons, based on a percentage - overlap_subset = overlapping_polygons.loc[overlapping_polygons['overlap_percentage'] > minimum_percentage] + # make a subsect of overlapping polygons, based on a percentage + overlap_subset = overlapping_polygons.loc[overlapping_polygons["overlap_percentage"] > minimum_percentage] - #plot + # plot fig, ax = plt.subplots() - peilgebied.plot(ax = ax, color='lightgray') #background - overlap_subset.plot(ax = ax, cmap = 'coolwarm', column = overlap_subset.overlap_percentage, label = 'Percentage of overlap', legend = True) + peilgebied.plot(ax=ax, color="lightgray") # background + overlap_subset.plot( + ax=ax, cmap="coolwarm", column=overlap_subset.overlap_percentage, label="Percentage of overlap", legend=True + ) plt.show() - - - + + # def intersect_using_spatial_index(peilgebied_praktijk, peilgebied_afwijking, check): # """ # Conduct spatial intersection using spatial index for candidates GeoDataFrame to make queries faster. -# Note, with this function, you can have multiple Polygons in the 'intersecting_gdf' and it will return all the points +# Note, with this function, you can have multiple Polygons in the 'intersecting_gdf' and it will return all the points # intersect with ANY of those geometries. # """ # peilgebied_praktijk_sindex = peilgebied_praktijk.sindex # possible_matches_index = [] - + # # 'itertuples()' function is a faster version of 'iterrows()' # for other in peilgebied_afwijking.itertuples(): # bounds = other.geometry.bounds # c = list(peilgebied_praktijk_sindex.intersection(bounds)) # possible_matches_index += c - + # # Get unique candidates # unique_candidate_matches = list(set(possible_matches_index)) # possible_matches = peilgebied_praktijk.iloc[unique_candidate_matches] @@ -227,24 +235,24 @@ def plot_overlapping_peilgebieden(peilgebied, overlapping_polygons, minimum_perc # # print('un_un =') # # display(un_un) # # print() - + # # print('possible_matches =') # # display(possible_matches) # # print() - + # # print('overlapping_pg_praktijk =') # # display(possible_matches[un_un]) - + # # possible_matches[un_un].to_file('peilgebied_afwijking_unary_union_Rijnland.shp') - - + + # # Conduct the actual intersect # overlapping_pg_praktijk = possible_matches.loc[un_un] #the entire peilgebied praktijk polygons - - + + # #remove the peilgebied afwijking from the peilgebied praktijk # intersection = gpd.overlay(overlapping_pg_praktijk, peilgebied_afwijking, how='intersection') - + # #fix possible invalid geometries # overlapping_pg_praktijk['geometry'] = overlapping_pg_praktijk.buffer(distance = 0) # peilgebied_afwijking['geometry'] = peilgebied_afwijking.buffer(distance = 0) @@ -252,7 +260,7 @@ def plot_overlapping_peilgebieden(peilgebied, overlapping_polygons, minimum_perc # overlapping_updated = gpd.overlay(peilgebied_praktijk, intersection, how='symmetric_difference') ##remove the difference between pg_praktijk and pg_afwijking # peilgebied = overlapping_updated.append(intersection, ignore_index=True) #add the removed difference, but now only the intersected part of pg_afwijking - + # if check: # peilgebied_praktijk.to_file('Checks/Rivierenland/peilgebied_praktijk.gpkg', driver='GPKG') # peilgebied_afwijking.to_file('Checks/Rivierenland/peilgebied_afwijking.gpkg', driver='GPKG') @@ -260,39 +268,51 @@ def plot_overlapping_peilgebieden(peilgebied, overlapping_polygons, minimum_perc # intersection.to_file('Checks/Rivierenland/intersection.gpkg', driver='GPKG') # overlapping_updated.to_file('Checks/Rivierenland/overlapping_updated.gpkg', driver='GPKG') # peilgebied.to_file('Checks/Rivierenland/peilgebied.gpkg', driver='GPKG') - + # return peilgebied + def burn_in_peilgebieden(base_layer, overlay_layer, plot=True): - #remove the overlapping parts from the base_layer - base_layer_without_overlapping = gpd.overlay(base_layer, overlay_layer, how='symmetric_difference', keep_geom_type=False) ##remove the difference between pg_praktijk and pg_afwijking - - #fill each column - base_layer_without_overlapping.code_1.fillna(value = base_layer_without_overlapping.code_2, inplace=True) - base_layer_without_overlapping.nen3610id_1.fillna(value = base_layer_without_overlapping.nen3610id_2, inplace=True) - base_layer_without_overlapping.globalid_1.fillna(value = base_layer_without_overlapping.globalid_2, inplace=True) + # remove the overlapping parts from the base_layer + base_layer_without_overlapping = gpd.overlay( + base_layer, overlay_layer, how="symmetric_difference", keep_geom_type=False + ) ##remove the difference between pg_praktijk and pg_afwijking + + # fill each column + base_layer_without_overlapping.code_1.fillna(value=base_layer_without_overlapping.code_2, inplace=True) + base_layer_without_overlapping.nen3610id_1.fillna(value=base_layer_without_overlapping.nen3610id_2, inplace=True) + base_layer_without_overlapping.globalid_1.fillna(value=base_layer_without_overlapping.globalid_2, inplace=True) # base_layer_without_overlapping.waterhoogte_1.fillna(value = base_layer_without_overlapping.waterhoogte, inplace=True) - - if 'waterhoogte_1' in base_layer_without_overlapping.keys(): #sometimes a waterhoogte is present in the peilgebieden. Manage this. - base_layer_without_overlapping.rename(columns={'code_1': 'code', - 'nen3610id_1': 'nen3610id', - 'globalid_1': 'globalid', - 'waterhoogte_1': 'waterhoogte'}, inplace = True) - base_layer_without_overlapping.drop(columns = ['code_2', 'nen3610id_2', 'globalid_2', 'waterhoogte_2'], inplace=True) - + + if ( + "waterhoogte_1" in base_layer_without_overlapping.keys() + ): # sometimes a waterhoogte is present in the peilgebieden. Manage this. + base_layer_without_overlapping.rename( + columns={ + "code_1": "code", + "nen3610id_1": "nen3610id", + "globalid_1": "globalid", + "waterhoogte_1": "waterhoogte", + }, + inplace=True, + ) + base_layer_without_overlapping.drop( + columns=["code_2", "nen3610id_2", "globalid_2", "waterhoogte_2"], inplace=True + ) + else: - base_layer_without_overlapping.rename(columns={'code_1': 'code', - 'nen3610id_1': 'nen3610id', - 'globalid_1': 'globalid'}, inplace = True) - base_layer_without_overlapping.drop(columns = ['code_2', 'nen3610id_2', 'globalid_2'], inplace=True) - - burned_base_layer = pd.concat([pd.DataFrame(base_layer_without_overlapping), pd.DataFrame(overlay_layer)], axis = 0) - - burned_base_layer = burned_base_layer.drop_duplicates(subset='globalid', keep='last') - + base_layer_without_overlapping.rename( + columns={"code_1": "code", "nen3610id_1": "nen3610id", "globalid_1": "globalid"}, inplace=True + ) + base_layer_without_overlapping.drop(columns=["code_2", "nen3610id_2", "globalid_2"], inplace=True) + + burned_base_layer = pd.concat([pd.DataFrame(base_layer_without_overlapping), pd.DataFrame(overlay_layer)], axis=0) + + burned_base_layer = burned_base_layer.drop_duplicates(subset="globalid", keep="last") + if plot: fig, ax = plt.subplots() - base_layer.plot(ax = ax, color='cornflowerblue') - overlay_layer.plot(ax = ax, color='blue') - - return burned_base_layer \ No newline at end of file + base_layer.plot(ax=ax, color="cornflowerblue") + overlay_layer.plot(ax=ax, color="blue") + + return burned_base_layer diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb index 1e80bc9..bcae967 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb @@ -51,8 +51,8 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'WSRL'\n", + "# define relative paths\n", + "waterschap = \"WSRL\"\n", "\n", "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", "\n", @@ -61,7 +61,7 @@ "# Hoofdwatersysteem boundaries\n", "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_wsrl.gpkg\"\n", + "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_wsrl.gpkg\"\n", "# Output folder\n", "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] @@ -82,21 +82,24 @@ "outputs": [], "source": [ "# Load HHNK files\n", - "WSRL = read_gpkg_layers(gpkg_path = data_path, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'hydroobject',\n", - " 'duikersifonhevel',\n", - " 'peilgebied', \n", - " 'streefpeil',\n", - " 'aggregation_area',\n", - " ])\n", - "WSRL['peilgebied'] = WSRL['peilgebied'].to_crs('EPSG:28992')\n", + "WSRL = read_gpkg_layers(\n", + " gpkg_path=data_path,\n", + " variables=[\n", + " \"stuw\",\n", + " \"gemaal\",\n", + " \"hydroobject\",\n", + " \"duikersifonhevel\",\n", + " \"peilgebied\",\n", + " \"streefpeil\",\n", + " \"aggregation_area\",\n", + " ],\n", + ")\n", + "WSRL[\"peilgebied\"] = WSRL[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", "\n", "# Load waterschap boundaries\n", "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", - "gdf_grens = gdf_grens.set_index('waterschap')\n", + "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", + "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", "\n", "# Load hws\n", "gdf_hws = gpd.read_file(hws_path)\n", @@ -124,7 +127,7 @@ ], "source": [ "# check primary key\n", - "WSRL['peilgebied']['globalid'].is_unique" + "WSRL[\"peilgebied\"][\"globalid\"].is_unique" ] }, { @@ -143,10 +146,10 @@ "outputs": [], "source": [ "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[['Waterschap Rivierenland']]\n", + "gdf_grens = gdf_grens.loc[[\"Waterschap Rivierenland\"]]\n", "\n", "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" ] }, { @@ -166,22 +169,22 @@ ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(WSRL['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "overlaps = gpd.overlay(WSRL[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", "\n", "# # # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", "# non_overlapping_peilgebied = gpd.overlay(WSRL['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", "# overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", - " \n", + "\n", "# Step 3: Calculate Area Percentages\n", "# Calculate the area of overlaps\n", - "overlaps['overlap_area'] = overlaps.area\n", + "overlaps[\"overlap_area\"] = overlaps.area\n", "\n", "# Step 4: Filter based on area Area Percentages\n", "minimum_area = 20000\n", - "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", - "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", + "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" ] }, { @@ -203,19 +206,18 @@ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", "\n", - "for index, row in WSRL['peilgebied'].iterrows():\n", - " \n", - " if row.CODE == 'LNG014-P':\n", - " print('yes')\n", + "for index, row in WSRL[\"peilgebied\"].iterrows():\n", + " if row.CODE == \"LNG014-P\":\n", + " print(\"yes\")\n", " peilgebieden_cat.append(1)\n", - " \n", + "\n", " else:\n", " peilgebieden_cat.append(0)\n", - " \n", + "\n", "# Add new column and drop old HWS_BZM column\n", - "WSRL['peilgebied']['peilgebied_cat'] = peilgebieden_cat\n", + "WSRL[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat\n", "# WSRL['peilgebied'] = WSRL['peilgebied'].drop(columns=['HWS_BZM'])\n", - "WSRL['peilgebied'] = WSRL['peilgebied'].rename(columns={'CODE':'code'})" + "WSRL[\"peilgebied\"] = WSRL[\"peilgebied\"].rename(columns={\"CODE\": \"code\"})" ] }, { @@ -235,13 +237,26 @@ "metadata": {}, "outputs": [], "source": [ - "#add boezems\n", + "# add boezems\n", "codes_to_update = [\n", - " \"NDB004-P\", \"LNG013-P\", \"LNG012-P\", \"LNG011-P\", \"LNG010-P\",\n", - " \"LNG009-P\", \"LNG008-P\", \"LNG007-P\", \"LNG006-P\", \"LNG005-P\",\n", - " \"LNG304-P\", \"LNG002-P\", \"LNG001-P\", 'LNG014-P_extra', 'NDW100-P', 'OVW200-P'\n", + " \"NDB004-P\",\n", + " \"LNG013-P\",\n", + " \"LNG012-P\",\n", + " \"LNG011-P\",\n", + " \"LNG010-P\",\n", + " \"LNG009-P\",\n", + " \"LNG008-P\",\n", + " \"LNG007-P\",\n", + " \"LNG006-P\",\n", + " \"LNG005-P\",\n", + " \"LNG304-P\",\n", + " \"LNG002-P\",\n", + " \"LNG001-P\",\n", + " \"LNG014-P_extra\",\n", + " \"NDW100-P\",\n", + " \"OVW200-P\",\n", "]\n", - "WSRL['peilgebied'].loc[WSRL['peilgebied']['code'].isin(codes_to_update), 'peilgebied_cat'] = 1\n" + "WSRL[\"peilgebied\"].loc[WSRL[\"peilgebied\"][\"code\"].isin(codes_to_update), \"peilgebied_cat\"] = 1" ] }, { @@ -263,16 +278,16 @@ "globalids = []\n", "nen3610ids = []\n", "\n", - "for index, row in WSRL['peilgebied'].iterrows():\n", - " codes.append(f'dummy_code_peilgebied_{row.globalid}')\n", - " globalids.append(f'dummy_globalid_peilgebied_{row.globalid}')\n", - " nen3610ids.append(f'dummy_nen3610id_peilgebied_{row.globalid}')\n", + "for index, row in WSRL[\"peilgebied\"].iterrows():\n", + " codes.append(f\"dummy_code_peilgebied_{row.globalid}\")\n", + " globalids.append(f\"dummy_globalid_peilgebied_{row.globalid}\")\n", + " nen3610ids.append(f\"dummy_nen3610id_peilgebied_{row.globalid}\")\n", "\n", - "WSRL['peilgebied']['code'] = codes\n", - "WSRL['peilgebied']['globalid'] = globalids \n", - "WSRL['peilgebied']['nen3610id'] = nen3610ids\n", + "WSRL[\"peilgebied\"][\"code\"] = codes\n", + "WSRL[\"peilgebied\"][\"globalid\"] = globalids\n", + "WSRL[\"peilgebied\"][\"nen3610id\"] = nen3610ids\n", "\n", - "WSRL['streefpeil']['globalid'] = globalids" + "WSRL[\"streefpeil\"][\"globalid\"] = globalids" ] }, { @@ -293,7 +308,7 @@ } ], "source": [ - "WSRL['peilgebied']['globalid'].is_unique" + "WSRL[\"peilgebied\"][\"globalid\"].is_unique" ] }, { @@ -312,14 +327,14 @@ "outputs": [], "source": [ "# update peilgebied dict key\n", - "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['peilgebied_cat'] = 2\n", + "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"peilgebied_cat\"] = 2\n", "\n", - "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", "\n", - "WSRL['peilgebied'] = pd.concat([gdf_hws, WSRL['peilgebied']])" + "WSRL[\"peilgebied\"] = pd.concat([gdf_hws, WSRL[\"peilgebied\"]])" ] }, { @@ -331,12 +346,12 @@ "source": [ "# Create boezem streefpeil layer\n", "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", "\n", - "WSRL['streefpeil'] = pd.concat([streefpeil_hws, WSRL['streefpeil']])\n", - "WSRL['streefpeil'] = gpd.GeoDataFrame(WSRL['streefpeil'])" + "WSRL[\"streefpeil\"] = pd.concat([streefpeil_hws, WSRL[\"streefpeil\"]])\n", + "WSRL[\"streefpeil\"] = gpd.GeoDataFrame(WSRL[\"streefpeil\"])" ] }, { @@ -357,7 +372,7 @@ } ], "source": [ - "WSRL['peilgebied']['globalid'].is_unique" + "WSRL[\"peilgebied\"][\"globalid\"].is_unique" ] }, { @@ -428,7 +443,7 @@ "outputs": [], "source": [ "if remove_cat_2:\n", - " WSRL['peilgebied'] = WSRL['peilgebied'].loc[WSRL['peilgebied'].peilgebied_cat !=2]" + " WSRL[\"peilgebied\"] = WSRL[\"peilgebied\"].loc[WSRL[\"peilgebied\"].peilgebied_cat != 2]" ] }, { @@ -449,7 +464,7 @@ } ], "source": [ - "WSRL['peilgebied']['peilgebied_cat'].unique()\n" + "WSRL[\"peilgebied\"][\"peilgebied_cat\"].unique()" ] }, { @@ -481,9 +496,9 @@ } ], "source": [ - "for key in WSRL.keys(): \n", + "for key in WSRL.keys():\n", " print(key)\n", - " WSRL[str(key)].to_file(f'{output_folder}/{waterschap}.gpkg', layer = str(key), driver='GPKG')" + " WSRL[str(key)].to_file(f\"{output_folder}/{waterschap}.gpkg\", layer=str(key), driver=\"GPKG\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb index 2f95ce5..171e2a5 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb @@ -53,9 +53,9 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'AmstelGooienVecht'\n", - "waterschap2 = 'AGV'\n", + "# define relative paths\n", + "waterschap = \"AmstelGooienVecht\"\n", + "waterschap2 = \"AGV\"\n", "\n", "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", "# \"Z:\\projects\\4750_20\\Data_postprocessed\\Waterschappen\\AmstelGooienVecht\\AGV.gpkg\"\n", @@ -66,7 +66,7 @@ "hws_path = \"/DATAFOLDER//projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "\n", "# Buffer boundaries\n", - "buffer_path = r\"/DATAFOLDER//projects/4750_30/Data_overig/HWS/hws_buffer_agv.gpkg\"\n", + "buffer_path = r\"/DATAFOLDER//projects/4750_30/Data_overig/HWS/hws_buffer_agv.gpkg\"\n", "\n", "# # Buffer RWHS\n", "# rhws_path = f\"/DATAFOLDER//projects/4750_30/Data_overig/HWS/agv_rhws_buffer.gpkg\"\n", @@ -91,28 +91,31 @@ "outputs": [], "source": [ "# Load HHNK files\n", - "AVG = read_gpkg_layers(gpkg_path = data_path, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'hydroobject',\n", - " 'duikersifonhevel',\n", - " 'peilgebied', \n", - " 'streefpeil',\n", - " 'aggregation_area',\n", - " ])\n", - "AVG['peilgebied'] = AVG['peilgebied'].to_crs('EPSG:28992')\n", + "AVG = read_gpkg_layers(\n", + " gpkg_path=data_path,\n", + " variables=[\n", + " \"stuw\",\n", + " \"gemaal\",\n", + " \"hydroobject\",\n", + " \"duikersifonhevel\",\n", + " \"peilgebied\",\n", + " \"streefpeil\",\n", + " \"aggregation_area\",\n", + " ],\n", + ")\n", + "AVG[\"peilgebied\"] = AVG[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", "\n", "# Load waterschap boundaries\n", "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", - "gdf_grens = gdf_grens.set_index('waterschap')\n", + "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", + "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", "\n", "# Load hws\n", "gdf_hws = gpd.read_file(hws_path)\n", "\n", "# Load buffer\n", "gdf_buffer = gpd.read_file(buffer_path)\n", - "gdf_buffer = gdf_buffer.to_crs('EPSG:28992')\n", + "gdf_buffer = gdf_buffer.to_crs(\"EPSG:28992\")\n", "gdf_buffer = gdf_buffer.dissolve()\n", "\n", "# # Load rhws\n", @@ -139,7 +142,7 @@ } ], "source": [ - "AVG['peilgebied'].globalid.is_unique" + "AVG[\"peilgebied\"].globalid.is_unique" ] }, { @@ -158,10 +161,10 @@ "outputs": [], "source": [ "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[['HH Amstel, Gooi en Vecht']]\n", + "gdf_grens = gdf_grens.loc[[\"HH Amstel, Gooi en Vecht\"]]\n", "\n", "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')\n", + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")\n", "\n", "# # Use waterschap boudnaries to clip HWS layer\n", "# gdf_rhws = gpd.overlay(gdf_grens, gdf_rhws, how='intersection')" @@ -196,22 +199,22 @@ ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(AVG['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "overlaps = gpd.overlay(AVG[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", "\n", "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(AVG['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", - " \n", + "non_overlapping_peilgebied = gpd.overlay(AVG[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", + "\n", "# Step 3: Calculate Area Percentages\n", "# Calculate the area of overlaps\n", - "overlaps['overlap_area'] = overlaps.area\n", + "overlaps[\"overlap_area\"] = overlaps.area\n", "\n", "# Step 4: Filter based on area Area Percentages\n", "minimum_area = 500\n", - "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", - "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", + "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" ] }, { @@ -244,17 +247,17 @@ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", "\n", - "for index, row in AVG['peilgebied'].iterrows():\n", - " # if row.code == \"Oosterpark\" or row.code == \"Vechtboezem\":\n", - " if \"Oosterpark\" in row.code or \"Vechtboezem\" in row.code or \"Stadsboezem Amsterdam\" in row.code:\n", - " print(\"true\")\n", - " \n", - " peilgebieden_cat.append(1)\n", - " else:\n", - " peilgebieden_cat.append(0)\n", - " \n", + "for index, row in AVG[\"peilgebied\"].iterrows():\n", + " # if row.code == \"Oosterpark\" or row.code == \"Vechtboezem\":\n", + " if \"Oosterpark\" in row.code or \"Vechtboezem\" in row.code or \"Stadsboezem Amsterdam\" in row.code:\n", + " print(\"true\")\n", + "\n", + " peilgebieden_cat.append(1)\n", + " else:\n", + " peilgebieden_cat.append(0)\n", + "\n", "# Add new column and drop old HWS_BZM column\n", - "AVG['peilgebied']['peilgebied_cat'] = peilgebieden_cat" + "AVG[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat" ] }, { @@ -316,14 +319,14 @@ "outputs": [], "source": [ "# update peilgebied dict key\n", - "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['peilgebied_cat'] = 2\n", + "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"peilgebied_cat\"] = 2\n", "\n", - "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", "\n", - "AVG['peilgebied'] = pd.concat([gdf_hws, AVG['peilgebied']])" + "AVG[\"peilgebied\"] = pd.concat([gdf_hws, AVG[\"peilgebied\"]])" ] }, { @@ -335,12 +338,12 @@ "source": [ "# Create boezem streefpeil layer\n", "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", "\n", - "AVG['streefpeil'] = pd.concat([streefpeil_hws, AVG['streefpeil']])\n", - "AVG['streefpeil'] = gpd.GeoDataFrame(AVG['streefpeil'])" + "AVG[\"streefpeil\"] = pd.concat([streefpeil_hws, AVG[\"streefpeil\"]])\n", + "AVG[\"streefpeil\"] = gpd.GeoDataFrame(AVG[\"streefpeil\"])" ] }, { @@ -424,7 +427,7 @@ "outputs": [], "source": [ "if remove_cat_2:\n", - " AVG['peilgebied'] = AVG['peilgebied'].loc[AVG['peilgebied'].peilgebied_cat !=2]" + " AVG[\"peilgebied\"] = AVG[\"peilgebied\"].loc[AVG[\"peilgebied\"].peilgebied_cat != 2]" ] }, { @@ -458,9 +461,9 @@ } ], "source": [ - "for key in AVG.keys(): \n", + "for key in AVG.keys():\n", " print(key)\n", - " AVG[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" + " AVG[str(key)].to_file(f\"{output_folder}/{waterschap2}.gpkg\", layer=str(key), driver=\"GPKG\")" ] }, { @@ -481,7 +484,7 @@ } ], "source": [ - "AVG['peilgebied']['peilgebied_cat'].unique()" + "AVG[\"peilgebied\"][\"peilgebied_cat\"].unique()" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb index 5a56593..abf3448 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb @@ -61,8 +61,8 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'Delfland'\n", + "# define relative paths\n", + "waterschap = \"Delfland\"\n", "\n", "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", "\n", @@ -71,9 +71,9 @@ "# Hoofdwatersysteem boundaries\n", "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_delfland.gpkg\"\n", + "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_delfland.gpkg\"\n", "# Output folder\n", - "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/\"\n" + "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/\"" ] }, { @@ -92,22 +92,25 @@ "outputs": [], "source": [ "# Load HHNK files\n", - "delfland = read_gpkg_layers(gpkg_path = data_path, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'hydroobject',\n", - " 'duikersifonhevel',\n", - " 'peilgebied', \n", - " 'streefpeil',\n", - " 'aggregation_area',\n", - " ])\n", + "delfland = read_gpkg_layers(\n", + " gpkg_path=data_path,\n", + " variables=[\n", + " \"stuw\",\n", + " \"gemaal\",\n", + " \"hydroobject\",\n", + " \"duikersifonhevel\",\n", + " \"peilgebied\",\n", + " \"streefpeil\",\n", + " \"aggregation_area\",\n", + " ],\n", + ")\n", "\n", - "delfland['peilgebied'] = delfland['peilgebied'].to_crs('EPSG:28992')\n", + "delfland[\"peilgebied\"] = delfland[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", "\n", "# Load waterschap boundaries\n", "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", - "gdf_grens = gdf_grens.set_index('waterschap')\n", + "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", + "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", "\n", "# Load hws\n", "gdf_hws = gpd.read_file(hws_path)\n", @@ -132,10 +135,10 @@ "outputs": [], "source": [ "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[['HHS van Delfland']]\n", + "gdf_grens = gdf_grens.loc[[\"HHS van Delfland\"]]\n", "\n", "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" ] }, { @@ -167,22 +170,22 @@ ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(delfland['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "overlaps = gpd.overlay(delfland[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", "\n", "# Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(delfland['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", - " \n", + "non_overlapping_peilgebied = gpd.overlay(delfland[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", + "\n", "# Step 3: Calculate Area Percentages\n", "# Calculate the area of overlaps\n", - "overlaps['overlap_area'] = overlaps.area\n", + "overlaps[\"overlap_area\"] = overlaps.area\n", "\n", "# Step 4: Filter based on area Area Percentages\n", "minimum_area = 200\n", - "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", - "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", + "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" ] }, { @@ -265,23 +268,22 @@ "peilgebieden_cat = []\n", "ids = []\n", "\n", - "for index, row in delfland['peilgebied'].iterrows():\n", - "\n", - " if row.code.startswith('BZM') or row.HWS_BZM:\n", - " print('yes')\n", + "for index, row in delfland[\"peilgebied\"].iterrows():\n", + " if row.code.startswith(\"BZM\") or row.HWS_BZM:\n", + " print(\"yes\")\n", " peilgebieden_cat.append(1)\n", - " \n", + "\n", " # Check if the row's globalid is in overlap_ids\n", " elif row.globalid in overlap_ids:\n", " peilgebieden_cat.append(2)\n", - " \n", + "\n", " # If none of the above conditions are met, append 0\n", " else:\n", " peilgebieden_cat.append(0)\n", - " \n", + "\n", "# Add new column and drop old HWS_BZM column\n", - "delfland['peilgebied']['peilgebied_cat'] = peilgebieden_cat\n", - "delfland['peilgebied'] = delfland['peilgebied'].drop(columns=['HWS_BZM'])" + "delfland[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat\n", + "delfland[\"peilgebied\"] = delfland[\"peilgebied\"].drop(columns=[\"HWS_BZM\"])" ] }, { @@ -300,14 +302,14 @@ "outputs": [], "source": [ "# update peilgebied dict key\n", - "gdf_hws['globalid'] = 'dummy_globalid__hws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['code'] = 'dummy_code_hws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['nen3610id'] = 'dummy_nen3610id_hws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['peilgebied_cat'] = 2\n", + "gdf_hws[\"globalid\"] = \"dummy_globalid__hws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"code\"] = \"dummy_code_hws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_hws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"peilgebied_cat\"] = 2\n", "\n", - "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", "\n", - "delfland['peilgebied'] = pd.concat([gdf_hws, delfland['peilgebied']])" + "delfland[\"peilgebied\"] = pd.concat([gdf_hws, delfland[\"peilgebied\"]])" ] }, { @@ -319,12 +321,12 @@ "source": [ "# Create boezem streefpeil layer\n", "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws['globalid'] = 'dummy_globalid_hws_' + gdf_hws.index.astype(str)\n", - "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws[\"globalid\"] = \"dummy_globalid_hws_\" + gdf_hws.index.astype(str)\n", + "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", "\n", - "delfland['streefpeil'] = pd.concat([streefpeil_hws, delfland['streefpeil']])\n", - "delfland['streefpeil'] = gpd.GeoDataFrame(delfland['streefpeil'])" + "delfland[\"streefpeil\"] = pd.concat([streefpeil_hws, delfland[\"streefpeil\"]])\n", + "delfland[\"streefpeil\"] = gpd.GeoDataFrame(delfland[\"streefpeil\"])" ] }, { @@ -414,7 +416,7 @@ } ], "source": [ - "delfland['peilgebied'].peilgebied_cat.unique()" + "delfland[\"peilgebied\"].peilgebied_cat.unique()" ] }, { @@ -424,7 +426,7 @@ "metadata": {}, "outputs": [], "source": [ - "delfland['peilgebied'] = delfland['peilgebied'][['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]" + "delfland[\"peilgebied\"] = delfland[\"peilgebied\"][[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]" ] }, { @@ -435,7 +437,7 @@ "outputs": [], "source": [ "if remove_cat_2:\n", - " delfland['peilgebied'] = delfland['peilgebied'].loc[delfland['peilgebied'].peilgebied_cat !=2]" + " delfland[\"peilgebied\"] = delfland[\"peilgebied\"].loc[delfland[\"peilgebied\"].peilgebied_cat != 2]" ] }, { @@ -467,9 +469,9 @@ } ], "source": [ - "for key in delfland.keys(): \n", + "for key in delfland.keys():\n", " print(key)\n", - " delfland[str(key)].to_file(f'{output_folder}/{waterschap}.gpkg', layer = str(key), driver='GPKG')" + " delfland[str(key)].to_file(f\"{output_folder}/{waterschap}.gpkg\", layer=str(key), driver=\"GPKG\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb index 645d9f3..80fc63c 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb @@ -65,7 +65,7 @@ "# Buffer boundaries\n", "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_rijnland.gpkg\"\n", "# Output folder\n", - "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"\n" + "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] }, { @@ -110,7 +110,7 @@ "gdf_buffer = gpd.read_file(buffer_path)\n", "\n", "# temp\n", - "Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"].drop(index=2, axis=1)\n" + "Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"].drop(index=2, axis=1)" ] }, { @@ -131,7 +131,7 @@ } ], "source": [ - "Rijnland[\"peilgebied\"].globalid.is_unique\n" + "Rijnland[\"peilgebied\"].globalid.is_unique" ] }, { @@ -153,7 +153,7 @@ "gdf_grens = gdf_grens.loc[[\"HH van Rijnland\"]]\n", "\n", "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")\n" + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" ] }, { @@ -200,7 +200,7 @@ "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")\n" + "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" ] }, { @@ -491,7 +491,7 @@ " peilgebieden_cat.append(0)\n", "\n", "# Add new column and drop old HWS_BZM column\n", - "Rijnland[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat\n" + "Rijnland[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat" ] }, { @@ -517,7 +517,7 @@ "\n", "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", "\n", - "Rijnland[\"peilgebied\"] = pd.concat([gdf_hws, Rijnland[\"peilgebied\"]])\n" + "Rijnland[\"peilgebied\"] = pd.concat([gdf_hws, Rijnland[\"peilgebied\"]])" ] }, { @@ -534,7 +534,7 @@ "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", "\n", "Rijnland[\"streefpeil\"] = pd.concat([streefpeil_hws, Rijnland[\"streefpeil\"]])\n", - "Rijnland[\"streefpeil\"] = gpd.GeoDataFrame(Rijnland[\"streefpeil\"])\n" + "Rijnland[\"streefpeil\"] = gpd.GeoDataFrame(Rijnland[\"streefpeil\"])" ] }, { @@ -635,9 +635,7 @@ "id": "77d4a830-e70e-4242-bd29-d04483ec3c02", "metadata": {}, "outputs": [], - "source": [ - "\n" - ] + "source": [] }, { "cell_type": "code", @@ -702,7 +700,7 @@ "df[\"globalid_1\"] = glob_1s\n", "df[\"globalid_2\"] = glob_2s\n", "\n", - "df.to_csv(\"../overlapping_Rijnland.csv\")\n" + "df.to_csv(\"../overlapping_Rijnland.csv\")" ] }, { @@ -746,7 +744,7 @@ } ], "source": [ - "print(df)\n" + "print(df)" ] }, { @@ -777,7 +775,7 @@ " numbers_to_remove.extend(associated_idx2)\n", "\n", "# Remove duplicates using set operation\n", - "numbers_to_remove = list(set(numbers_to_remove))\n" + "numbers_to_remove = list(set(numbers_to_remove))" ] }, { @@ -796,7 +794,7 @@ "outputs": [], "source": [ "Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"][~Rijnland[\"peilgebied\"].index.isin(numbers_to_remove)]\n", - "Rijnland[\"streefpeil\"] = Rijnland[\"streefpeil\"][~Rijnland[\"streefpeil\"].index.isin(numbers_to_remove)]\n" + "Rijnland[\"streefpeil\"] = Rijnland[\"streefpeil\"][~Rijnland[\"streefpeil\"].index.isin(numbers_to_remove)]" ] }, { @@ -807,7 +805,7 @@ "outputs": [], "source": [ "if remove_cat_2:\n", - " Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"].loc[Rijnland[\"peilgebied\"].peilgebied_cat != 2]\n" + " Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"].loc[Rijnland[\"peilgebied\"].peilgebied_cat != 2]" ] }, { @@ -841,7 +839,7 @@ "source": [ "for key in Rijnland.keys():\n", " print(key)\n", - " Rijnland[str(key)].to_file(f\"{output_folder}/{waterschap}.gpkg\", layer=str(key), driver=\"GPKG\")\n" + " Rijnland[str(key)].to_file(f\"{output_folder}/{waterschap}.gpkg\", layer=str(key), driver=\"GPKG\")" ] }, { @@ -850,9 +848,7 @@ "id": "c4473cbe-38bd-4c89-9ac6-839470451f26", "metadata": {}, "outputs": [], - "source": [ - "\n" - ] + "source": [] }, { "cell_type": "code", @@ -860,9 +856,7 @@ "id": "f18b37ff-f12a-47d4-b406-233ef5008454", "metadata": {}, "outputs": [], - "source": [ - "\n" - ] + "source": [] } ], "metadata": { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb index 2760aa0..b6de1c1 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb @@ -51,8 +51,8 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'Wetterskip'\n", + "# define relative paths\n", + "waterschap = \"Wetterskip\"\n", "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", "\n", "# Waterschaps boundaries\n", @@ -60,7 +60,7 @@ "# Hoofdwatersysteem boundaries\n", "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_wetterskip.gpkg\"\n", + "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_wetterskip.gpkg\"\n", "# Output folder\n", "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}/\"\n", "# Dm netwerk\n", @@ -83,21 +83,24 @@ "outputs": [], "source": [ "# Load HHNK files\n", - "Wetterskip = read_gpkg_layers(gpkg_path = data_path, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'hydroobject',\n", - " 'duikersifonhevel',\n", - " 'peilgebied', \n", - " 'streefpeil',\n", - " 'aggregation_area',\n", - " ])\n", - "Wetterskip['peilgebied'] = Wetterskip['peilgebied'].to_crs('EPSG:28992')\n", + "Wetterskip = read_gpkg_layers(\n", + " gpkg_path=data_path,\n", + " variables=[\n", + " \"stuw\",\n", + " \"gemaal\",\n", + " \"hydroobject\",\n", + " \"duikersifonhevel\",\n", + " \"peilgebied\",\n", + " \"streefpeil\",\n", + " \"aggregation_area\",\n", + " ],\n", + ")\n", + "Wetterskip[\"peilgebied\"] = Wetterskip[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", "\n", "# Load waterschap boundaries\n", "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", - "gdf_grens = gdf_grens.set_index('waterschap')\n", + "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", + "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", "\n", "# Load hws\n", "gdf_hws = gpd.read_file(hws_path)\n", @@ -105,7 +108,7 @@ "# Load buffer\n", "gdf_buffer = gpd.read_file(buffer_path)\n", "\n", - "gdf_rhws= gpd.read_file(boezem_path)" + "gdf_rhws = gpd.read_file(boezem_path)" ] }, { @@ -155,7 +158,7 @@ "# # # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", "# non_overlapping_peilgebied = gpd.overlay(Wetterskip['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", "# overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", - " \n", + "\n", "# # Step 3: Calculate Area Percentages\n", "# # Calculate the area of overlaps\n", "# overlaps['overlap_area'] = overlaps.area\n", @@ -186,14 +189,13 @@ "# Add to geodataframe\n", "peilgebieden_cat = []\n", "\n", - "for index, row in Wetterskip['streefpeil'].iterrows():\n", - " \n", + "for index, row in Wetterskip[\"streefpeil\"].iterrows():\n", " if round(row.waterhoogte, 2) == -0.52:\n", " peilgebieden_cat.append(1)\n", " else:\n", " peilgebieden_cat.append(0)\n", - " \n", - "Wetterskip['peilgebied']['peilgebied_cat'] = peilgebieden_cat" + "\n", + "Wetterskip[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat" ] }, { @@ -220,14 +222,14 @@ "outputs": [], "source": [ "# update peilgebied dict key\n", - "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['peilgebied_cat'] = 2\n", + "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"peilgebied_cat\"] = 2\n", "\n", - "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", "\n", - "Wetterskip['peilgebied'] = pd.concat([gdf_hws, Wetterskip['peilgebied']])" + "Wetterskip[\"peilgebied\"] = pd.concat([gdf_hws, Wetterskip[\"peilgebied\"]])" ] }, { @@ -239,12 +241,12 @@ "source": [ "# update streefpeil dict key\n", "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", "\n", - "Wetterskip['streefpeil'] = pd.concat([streefpeil_hws, Wetterskip['streefpeil']])\n", - "Wetterskip['streefpeil'] = gpd.GeoDataFrame(Wetterskip['streefpeil'])" + "Wetterskip[\"streefpeil\"] = pd.concat([streefpeil_hws, Wetterskip[\"streefpeil\"]])\n", + "Wetterskip[\"streefpeil\"] = gpd.GeoDataFrame(Wetterskip[\"streefpeil\"])" ] }, { @@ -384,13 +386,13 @@ "\n", "\n", "# for idx1, idx2 in overlapping_pairs:\n", - " \n", + "\n", "# idx1s.append(idx1)\n", "# idx2s.append(idx2)\n", - " \n", + "\n", "# glob_1s.append(gdf.iloc[idx1].globalid)\n", "# glob_2s.append(gdf.iloc[idx2].globalid)\n", - " \n", + "\n", "# df = pd.DataFrame()\n", "# df['idx1'] = idx1s\n", "# df['idx2'] = idx2s\n", @@ -431,7 +433,7 @@ "# for number in df['idx1'].unique():\n", "# if number in numbers_to_remove:\n", "# continue\n", - " \n", + "\n", "# # Find all combinations\n", "# associated_idx2 = df[df['idx1'] == number]['idx2'].tolist()\n", "# # Append combinations\n", @@ -478,7 +480,7 @@ } ], "source": [ - "Wetterskip['streefpeil']['globalid'].is_unique" + "Wetterskip[\"streefpeil\"][\"globalid\"].is_unique" ] }, { @@ -489,7 +491,7 @@ "outputs": [], "source": [ "if remove_cat_2:\n", - " Wetterskip['peilgebied'] = Wetterskip['peilgebied'].loc[Wetterskip['peilgebied'].peilgebied_cat !=2]" + " Wetterskip[\"peilgebied\"] = Wetterskip[\"peilgebied\"].loc[Wetterskip[\"peilgebied\"].peilgebied_cat != 2]" ] }, { @@ -521,9 +523,9 @@ } ], "source": [ - "for key in Wetterskip.keys(): \n", + "for key in Wetterskip.keys():\n", " print(key)\n", - " Wetterskip[str(key)].to_file(f'{output_folder}/{waterschap}.gpkg', layer = str(key), driver='GPKG')" + " Wetterskip[str(key)].to_file(f\"{output_folder}/{waterschap}.gpkg\", layer=str(key), driver=\"GPKG\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb index 74d39bc..af70905 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb @@ -62,9 +62,9 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'Zuiderzeeland'\n", - "waterschap2 = 'Zuiderzeeland'\n", + "# define relative paths\n", + "waterschap = \"Zuiderzeeland\"\n", + "waterschap2 = \"Zuiderzeeland\"\n", "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", "\n", "# Waterschaps boundaries\n", @@ -72,7 +72,7 @@ "# Hoofdwatersysteem boundaries\n", "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_zuiderzeeland.gpkg\"\n", + "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_zuiderzeeland.gpkg\"\n", "# Output folder\n", "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] @@ -93,21 +93,24 @@ "outputs": [], "source": [ "# Load HHNK files\n", - "Zuiderzeeland = read_gpkg_layers(gpkg_path = data_path, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'hydroobject',\n", - " 'duikersifonhevel',\n", - " 'peilgebied', \n", - " 'streefpeil',\n", - " 'aggregation_area',\n", - " ])\n", - "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].to_crs('EPSG:28992')\n", + "Zuiderzeeland = read_gpkg_layers(\n", + " gpkg_path=data_path,\n", + " variables=[\n", + " \"stuw\",\n", + " \"gemaal\",\n", + " \"hydroobject\",\n", + " \"duikersifonhevel\",\n", + " \"peilgebied\",\n", + " \"streefpeil\",\n", + " \"aggregation_area\",\n", + " ],\n", + ")\n", + "Zuiderzeeland[\"peilgebied\"] = Zuiderzeeland[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", "\n", "# Load waterschap boundaries\n", "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", - "gdf_grens = gdf_grens.set_index('waterschap')\n", + "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", + "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", "\n", "# Load hws\n", "gdf_hws = gpd.read_file(hws_path)\n", @@ -134,7 +137,7 @@ } ], "source": [ - "Zuiderzeeland['peilgebied'].globalid.is_unique" + "Zuiderzeeland[\"peilgebied\"].globalid.is_unique" ] }, { @@ -153,10 +156,10 @@ "outputs": [], "source": [ "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[['Waterschap Zuiderzeeland']]\n", + "gdf_grens = gdf_grens.loc[[\"Waterschap Zuiderzeeland\"]]\n", "\n", "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" ] }, { @@ -324,7 +327,7 @@ } ], "source": [ - "Zuiderzeeland['peilgebied']" + "Zuiderzeeland[\"peilgebied\"]" ] }, { @@ -356,22 +359,22 @@ ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(Zuiderzeeland['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "overlaps = gpd.overlay(Zuiderzeeland[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", "\n", "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(Zuiderzeeland['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", - " \n", + "non_overlapping_peilgebied = gpd.overlay(Zuiderzeeland[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", + "\n", "# Step 3: Calculate Area Percentages\n", "# Calculate the area of overlaps\n", - "overlaps['overlap_area'] = overlaps.area\n", + "overlaps[\"overlap_area\"] = overlaps.area\n", "\n", "# Step 4: Filter based on area Area Percentages\n", "minimum_area = 100\n", - "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", - "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", + "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" ] }, { @@ -539,7 +542,7 @@ } ], "source": [ - "Zuiderzeeland['peilgebied']" + "Zuiderzeeland[\"peilgebied\"]" ] }, { @@ -565,33 +568,27 @@ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", "\n", - "for index, row in Zuiderzeeland['peilgebied'].iterrows():\n", - " \n", - " if 'LVA.01' in row.code:\n", + "for index, row in Zuiderzeeland[\"peilgebied\"].iterrows():\n", + " if \"LVA.01\" in row.code:\n", " peilgebieden_cat.append(1)\n", - " print('yes')\n", - " elif '3.01' in row.code:\n", + " print(\"yes\")\n", + " elif \"3.01\" in row.code:\n", " peilgebieden_cat.append(1)\n", - " print('yes')\n", - " elif 'LAGE AFDELING' in row.code:\n", - " print('yes')\n", + " print(\"yes\")\n", + " elif \"LAGE AFDELING\" in row.code:\n", + " print(\"yes\")\n", " peilgebieden_cat.append(1)\n", "\n", - " elif 'HOGE AFDELING' in row.code:\n", - " print('yes')\n", + " elif \"HOGE AFDELING\" in row.code:\n", + " print(\"yes\")\n", " peilgebieden_cat.append(1)\n", "\n", " else:\n", " peilgebieden_cat.append(0)\n", - " \n", - "\n", - " \n", - "\n", - "\n", "\n", "\n", "# Add new column and drop old HWS_BZM column\n", - "Zuiderzeeland['peilgebied']['peilgebied_cat'] = peilgebieden_cat\n", + "Zuiderzeeland[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat\n", "# Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].drop(columns=['HWS_BZM'])" ] }, @@ -611,14 +608,14 @@ "outputs": [], "source": [ "# update peilgebied dict key\n", - "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['peilgebied_cat'] = 2\n", + "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"peilgebied_cat\"] = 2\n", "\n", - "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", "\n", - "Zuiderzeeland['peilgebied'] = pd.concat([gdf_hws, Zuiderzeeland['peilgebied']])" + "Zuiderzeeland[\"peilgebied\"] = pd.concat([gdf_hws, Zuiderzeeland[\"peilgebied\"]])" ] }, { @@ -638,12 +635,12 @@ "source": [ "# Create boezem streefpeil layer\n", "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", "\n", - "Zuiderzeeland['streefpeil'] = pd.concat([streefpeil_hws, Zuiderzeeland['streefpeil']])\n", - "Zuiderzeeland['streefpeil'] = gpd.GeoDataFrame(Zuiderzeeland['streefpeil'])" + "Zuiderzeeland[\"streefpeil\"] = pd.concat([streefpeil_hws, Zuiderzeeland[\"streefpeil\"]])\n", + "Zuiderzeeland[\"streefpeil\"] = gpd.GeoDataFrame(Zuiderzeeland[\"streefpeil\"])" ] }, { @@ -727,7 +724,7 @@ "outputs": [], "source": [ "if remove_cat_2:\n", - " Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].loc[Zuiderzeeland['peilgebied'].peilgebied_cat !=2]" + " Zuiderzeeland[\"peilgebied\"] = Zuiderzeeland[\"peilgebied\"].loc[Zuiderzeeland[\"peilgebied\"].peilgebied_cat != 2]" ] }, { @@ -756,7 +753,7 @@ } ], "source": [ - "Zuiderzeeland['peilgebied'].globalid.is_unique" + "Zuiderzeeland[\"peilgebied\"].globalid.is_unique" ] }, { @@ -780,9 +777,9 @@ } ], "source": [ - "for key in Zuiderzeeland.keys(): \n", + "for key in Zuiderzeeland.keys():\n", " print(key)\n", - " Zuiderzeeland[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" + " Zuiderzeeland[str(key)].to_file(f\"{output_folder}/{waterschap2}.gpkg\", layer=str(key), driver=\"GPKG\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb index a1ee298..9b09fee 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb @@ -60,9 +60,9 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'Hollandse_Delta'\n", - "waterschap2 = 'HD'\n", + "# define relative paths\n", + "waterschap = \"Hollandse_Delta\"\n", + "waterschap2 = \"HD\"\n", "\n", "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", "\n", @@ -71,7 +71,7 @@ "# Hoofdwatersysteem boundaries\n", "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_hd.gpkg\"\n", + "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_hd.gpkg\"\n", "# Output folder\n", "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] @@ -92,28 +92,31 @@ "outputs": [], "source": [ "# Load HHNK files\n", - "HD = read_gpkg_layers(gpkg_path = data_path, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'hydroobject',\n", - " 'duikersifonhevel',\n", - " 'peilgebied', \n", - " 'streefpeil',\n", - " 'aggregation_area',\n", - " ])\n", - "HD['peilgebied'] = HD['peilgebied'].to_crs('EPSG:28992')\n", + "HD = read_gpkg_layers(\n", + " gpkg_path=data_path,\n", + " variables=[\n", + " \"stuw\",\n", + " \"gemaal\",\n", + " \"hydroobject\",\n", + " \"duikersifonhevel\",\n", + " \"peilgebied\",\n", + " \"streefpeil\",\n", + " \"aggregation_area\",\n", + " ],\n", + ")\n", + "HD[\"peilgebied\"] = HD[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", "\n", "# Load waterschap boundaries\n", "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", - "gdf_grens = gdf_grens.set_index('waterschap')\n", + "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", + "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", "\n", "# Load hws\n", "gdf_hws = gpd.read_file(hws_path)\n", "\n", "# Load buffer\n", "gdf_buffer = gpd.read_file(buffer_path)\n", - "gdf_buffer = gdf_buffer.to_crs('EPSG:28992')\n", + "gdf_buffer = gdf_buffer.to_crs(\"EPSG:28992\")\n", "gdf_buffer = gdf_buffer.dissolve()" ] }, @@ -135,7 +138,7 @@ } ], "source": [ - "HD['peilgebied'].globalid.is_unique" + "HD[\"peilgebied\"].globalid.is_unique" ] }, { @@ -156,10 +159,10 @@ "outputs": [], "source": [ "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[['Waterschap Hollandse Delta']]\n", + "gdf_grens = gdf_grens.loc[[\"Waterschap Hollandse Delta\"]]\n", "\n", "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" ] }, { @@ -191,22 +194,22 @@ ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(HD['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "overlaps = gpd.overlay(HD[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", "\n", "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(HD['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", - " \n", + "non_overlapping_peilgebied = gpd.overlay(HD[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", + "\n", "# Step 3: Calculate Area Percentages\n", "# Calculate the area of overlaps\n", - "overlaps['overlap_area'] = overlaps.area\n", + "overlaps[\"overlap_area\"] = overlaps.area\n", "\n", "# Step 4: Filter based on area Area Percentages\n", "minimum_area = 500\n", - "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", - "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", + "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" ] }, { @@ -227,29 +230,27 @@ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", "\n", - "for index, row in HD['peilgebied'].iterrows():\n", - " \n", - " if row.code == 'Zuiderdiepboezem_164':\n", + "for index, row in HD[\"peilgebied\"].iterrows():\n", + " if row.code == \"Zuiderdiepboezem_164\":\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'Zuiderdiepboezem_163':\n", + " elif row.code == \"Zuiderdiepboezem_163\":\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'Zoetwaterboezem_571':\n", + " elif row.code == \"Zoetwaterboezem_571\":\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'Kanaal door Voorne_570':\n", + " elif row.code == \"Kanaal door Voorne_570\":\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'Binnenbedijkte Maas_290':\n", + " elif row.code == \"Binnenbedijkte Maas_290\":\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'Boezemloozende door Strijensas_333':\n", + " elif row.code == \"Boezemloozende door Strijensas_333\":\n", " peilgebieden_cat.append(1)\n", " # elif row.code == 'Zuiderdiepboezem':\n", " # peilgebieden_cat.append(1)\n", - " elif row.code == 'Kreekkade_660':\n", + " elif row.code == \"Kreekkade_660\":\n", " peilgebieden_cat.append(1)\n", - " elif row.code == 'Zwijndrechtse Waard_703':\n", + " elif row.code == \"Zwijndrechtse Waard_703\":\n", " peilgebieden_cat.append(1)\n", " else:\n", " peilgebieden_cat.append(0)\n", - " \n", "\n", " # if row.code == 'Zuiderdiepboezem en havenkanaal Dirksland':\n", " # peilgebieden_cat.append(1)\n", @@ -270,8 +271,7 @@ " # elif row.code == 'Zwijndrechtse Waard':\n", " # peilgebieden_cat.append(1)\n", " # else:\n", - " # peilgebieden_cat.append(0)\n", - " \n" + " # peilgebieden_cat.append(0)" ] }, { @@ -282,7 +282,7 @@ "outputs": [], "source": [ "# Add new column\n", - "HD['peilgebied']['peilgebied_cat'] = peilgebieden_cat" + "HD[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat" ] }, { @@ -303,7 +303,7 @@ } ], "source": [ - "HD['peilgebied']['peilgebied_cat'].unique()" + "HD[\"peilgebied\"][\"peilgebied_cat\"].unique()" ] }, { @@ -322,14 +322,14 @@ "outputs": [], "source": [ "# update peilgebied dict key\n", - "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['peilgebied_cat'] = 2\n", + "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"peilgebied_cat\"] = 2\n", "\n", - "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", "\n", - "HD['peilgebied'] = pd.concat([gdf_hws, HD['peilgebied']])" + "HD[\"peilgebied\"] = pd.concat([gdf_hws, HD[\"peilgebied\"]])" ] }, { @@ -341,12 +341,12 @@ "source": [ "# Create boezem streefpeil layer\n", "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", "\n", - "HD['streefpeil'] = pd.concat([streefpeil_hws, HD['streefpeil']])\n", - "HD['streefpeil'] = gpd.GeoDataFrame(HD['streefpeil'])" + "HD[\"streefpeil\"] = pd.concat([streefpeil_hws, HD[\"streefpeil\"]])\n", + "HD[\"streefpeil\"] = gpd.GeoDataFrame(HD[\"streefpeil\"])" ] }, { @@ -423,7 +423,7 @@ "outputs": [], "source": [ "if remove_cat_2:\n", - " HD['peilgebied'] = HD['peilgebied'].loc[HD['peilgebied'].peilgebied_cat !=2]" + " HD[\"peilgebied\"] = HD[\"peilgebied\"].loc[HD[\"peilgebied\"].peilgebied_cat != 2]" ] }, { @@ -455,9 +455,9 @@ } ], "source": [ - "for key in HD.keys(): \n", + "for key in HD.keys():\n", " print(key)\n", - " HD[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" + " HD[str(key)].to_file(f\"{output_folder}/{waterschap2}.gpkg\", layer=str(key), driver=\"GPKG\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb index f7a5a7c..b12a95f 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb @@ -60,9 +60,9 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'HHNK'\n", - "waterschap2 = 'Noorderkwartier'\n", + "# define relative paths\n", + "waterschap = \"HHNK\"\n", + "waterschap2 = \"Noorderkwartier\"\n", "\n", "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", "\n", @@ -71,7 +71,7 @@ "# Hoofdwatersysteem boundaries\n", "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_hhnk.gpkg\"\n", + "buffer_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_hhnk.gpkg\"\n", "# Output folder\n", "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] @@ -92,21 +92,24 @@ "outputs": [], "source": [ "# Load HHNK files\n", - "HHNK = read_gpkg_layers(gpkg_path = data_path, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'hydroobject',\n", - " 'duikersifonhevel',\n", - " 'peilgebied', \n", - " 'streefpeil',\n", - " 'aggregation_area',\n", - " ])\n", - "HHNK['peilgebied'] = HHNK['peilgebied'].to_crs('EPSG:28992')\n", + "HHNK = read_gpkg_layers(\n", + " gpkg_path=data_path,\n", + " variables=[\n", + " \"stuw\",\n", + " \"gemaal\",\n", + " \"hydroobject\",\n", + " \"duikersifonhevel\",\n", + " \"peilgebied\",\n", + " \"streefpeil\",\n", + " \"aggregation_area\",\n", + " ],\n", + ")\n", + "HHNK[\"peilgebied\"] = HHNK[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", "\n", "# Load waterschap boundaries\n", "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", - "gdf_grens = gdf_grens.set_index('waterschap')\n", + "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", + "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", "\n", "# Load hws\n", "gdf_hws = gpd.read_file(hws_path)\n", @@ -131,10 +134,10 @@ "outputs": [], "source": [ "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[['HH Hollands Noorderkwartier']]\n", + "gdf_grens = gdf_grens.loc[[\"HH Hollands Noorderkwartier\"]]\n", "\n", "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" ] }, { @@ -178,10 +181,10 @@ ], "source": [ "# Plot\n", - "fig,ax = plt.subplots()\n", + "fig, ax = plt.subplots()\n", "\n", - "HHNK['peilgebied'].plot(ax=ax)\n", - "gdf_grens.plot(ax=ax, color='red', alpha=0.5)" + "HHNK[\"peilgebied\"].plot(ax=ax)\n", + "gdf_grens.plot(ax=ax, color=\"red\", alpha=0.5)" ] }, { @@ -202,7 +205,7 @@ } ], "source": [ - "HHNK['peilgebied'].geometry.type.unique()" + "HHNK[\"peilgebied\"].geometry.type.unique()" ] }, { @@ -212,7 +215,7 @@ "metadata": {}, "outputs": [], "source": [ - "HHNK['peilgebied'].geometry = HHNK['peilgebied'].buffer(0)\n", + "HHNK[\"peilgebied\"].geometry = HHNK[\"peilgebied\"].buffer(0)\n", "gdf_grens.geometry = gdf_grens.buffer(0)" ] }, @@ -233,23 +236,23 @@ ], "source": [ "# Step 1: Identify the Overlapping Areas and clip.\n", - "HHNK['peilgebied'] = gpd.overlay(HHNK['peilgebied'], gdf_grens, how='intersection', keep_geom_type=True)\n", - "overlaps = gpd.overlay(HHNK['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "HHNK[\"peilgebied\"] = gpd.overlay(HHNK[\"peilgebied\"], gdf_grens, how=\"intersection\", keep_geom_type=True)\n", + "overlaps = gpd.overlay(HHNK[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", "\n", "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(HHNK['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", - " \n", + "non_overlapping_peilgebied = gpd.overlay(HHNK[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", + "\n", "# Step 3: Calculate Area Percentages\n", "# Calculate the area of overlaps\n", - "overlaps['overlap_area'] = overlaps.area\n", + "overlaps[\"overlap_area\"] = overlaps.area\n", "\n", "# Step 4: Filter based on area Area Percentages\n", "minimum_area = 20000\n", - "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", - "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", + "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" ] }, { @@ -286,20 +289,19 @@ "# code_list = [\"dummy_code_5188\",\"dummy_code_5161\",\"dummy_code_5210\",\"dummy_code_4352\",\"dummy_code_5164\",\"dummy_code_5200\",\"dummy_code_5167\",\"dummy_code_37\"]\n", "\n", "\n", - "for index, row in HHNK['peilgebied'].iterrows():\n", - " \n", + "for index, row in HHNK[\"peilgebied\"].iterrows():\n", " if row.HWS_BZM:\n", - " print('yes')\n", + " print(\"yes\")\n", " peilgebieden_cat.append(1)\n", - " \n", + "\n", " # elif row.HWS_BZM is True:\n", " # peilgebieden_cat.append(1)\n", - " \n", + "\n", " else:\n", " peilgebieden_cat.append(0)\n", - " \n", + "\n", "# Add new column and drop old HWS_BZM column\n", - "HHNK['peilgebied']['peilgebied_cat'] = peilgebieden_cat\n", + "HHNK[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat\n", "# HHNK['peilgebied'] = HHNK['peilgebied'].drop(columns=['HWS_BZM'])" ] }, @@ -319,14 +321,14 @@ "outputs": [], "source": [ "# update peilgebied dict key\n", - "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['peilgebied_cat'] = 2\n", + "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"peilgebied_cat\"] = 2\n", "\n", - "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", "\n", - "HHNK['peilgebied'] = pd.concat([gdf_hws, HHNK['peilgebied']])" + "HHNK[\"peilgebied\"] = pd.concat([gdf_hws, HHNK[\"peilgebied\"]])" ] }, { @@ -338,12 +340,12 @@ "source": [ "# Create boezem streefpeil layer\n", "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", "\n", - "HHNK['streefpeil'] = pd.concat([streefpeil_hws, HHNK['streefpeil']])\n", - "HHNK['streefpeil'] = gpd.GeoDataFrame(HHNK['streefpeil'])" + "HHNK[\"streefpeil\"] = pd.concat([streefpeil_hws, HHNK[\"streefpeil\"]])\n", + "HHNK[\"streefpeil\"] = gpd.GeoDataFrame(HHNK[\"streefpeil\"])" ] }, { @@ -366,7 +368,6 @@ "# buffer_polygon = gpd.overlay(buffer_polygon, gdf_hws, how='difference', keep_geom_type=True)\n", "\n", "\n", - "\n", "# # Apply a small buffer to both GeoDataFrames to \"clean\" the geometries\n", "# buffer_polygon.geometry = buffer_polygon.buffer(0.001).buffer(-0.001)\n", "# HHNK['peilgebied'].geometry = HHNK['peilgebied'].buffer(0.001).buffer(-0.001)\n", @@ -431,7 +432,7 @@ "metadata": {}, "outputs": [], "source": [ - "HHNK['peilgebied'] = HHNK['peilgebied'][['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]" + "HHNK[\"peilgebied\"] = HHNK[\"peilgebied\"][[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]" ] }, { @@ -442,7 +443,7 @@ "outputs": [], "source": [ "if remove_cat_2:\n", - " HHNK['peilgebied'] = HHNK['peilgebied'].loc[HHNK['peilgebied'].peilgebied_cat !=2]" + " HHNK[\"peilgebied\"] = HHNK[\"peilgebied\"].loc[HHNK[\"peilgebied\"].peilgebied_cat != 2]" ] }, { @@ -474,9 +475,9 @@ } ], "source": [ - "for key in HHNK.keys(): \n", + "for key in HHNK.keys():\n", " print(key)\n", - " HHNK[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" + " HHNK[str(key)].to_file(f\"{output_folder}/{waterschap2}.gpkg\", layer=str(key), driver=\"GPKG\")" ] }, { @@ -497,7 +498,7 @@ } ], "source": [ - "HHNK['peilgebied']['peilgebied_cat'].unique()" + "HHNK[\"peilgebied\"][\"peilgebied_cat\"].unique()" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb index b610663..770951c 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb @@ -51,8 +51,8 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'HHSK'\n", + "# define relative paths\n", + "waterschap = \"HHSK\"\n", "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap}.gpkg\"\n", "\n", "# Waterschaps boundaries\n", @@ -60,7 +60,7 @@ "# Hoofdwatersysteem boundaries\n", "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = r\"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_HHSK.gpkg\"\n", + "buffer_path = r\"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_HHSK.gpkg\"\n", "# Output folder\n", "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] @@ -81,28 +81,31 @@ "outputs": [], "source": [ "# Load HHNK files\n", - "HHSK = read_gpkg_layers(gpkg_path = data_path, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'hydroobject',\n", - " 'duikersifonhevel',\n", - " 'peilgebied', \n", - " 'streefpeil',\n", - " 'aggregation_area',\n", - " ])\n", - "HHSK['peilgebied'] = HHSK['peilgebied'].to_crs('EPSG:28992')\n", + "HHSK = read_gpkg_layers(\n", + " gpkg_path=data_path,\n", + " variables=[\n", + " \"stuw\",\n", + " \"gemaal\",\n", + " \"hydroobject\",\n", + " \"duikersifonhevel\",\n", + " \"peilgebied\",\n", + " \"streefpeil\",\n", + " \"aggregation_area\",\n", + " ],\n", + ")\n", + "HHSK[\"peilgebied\"] = HHSK[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", "\n", "# Load waterschap boundaries\n", "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", - "gdf_grens = gdf_grens.set_index('waterschap')\n", + "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", + "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", "\n", "# Load hws\n", "gdf_hws = gpd.read_file(hws_path)\n", "\n", "# Load buffer\n", "gdf_buffer = gpd.read_file(buffer_path)\n", - "gdf_buffer = gdf_buffer.to_crs('EPSG:28992')\n", + "gdf_buffer = gdf_buffer.to_crs(\"EPSG:28992\")\n", "gdf_buffer = gdf_buffer.dissolve()" ] }, @@ -122,8 +125,8 @@ } ], "source": [ - "print(len(HHSK['duikersifonhevel'].globalid.unique()))\n", - "print(len(HHSK['duikersifonhevel'].globalid))" + "print(len(HHSK[\"duikersifonhevel\"].globalid.unique()))\n", + "print(len(HHSK[\"duikersifonhevel\"].globalid))" ] }, { @@ -144,7 +147,7 @@ } ], "source": [ - "HHSK['peilgebied'].globalid.is_unique" + "HHSK[\"peilgebied\"].globalid.is_unique" ] }, { @@ -165,7 +168,7 @@ } ], "source": [ - "len(HHSK['hydroobject'])" + "len(HHSK[\"hydroobject\"])" ] }, { @@ -176,9 +179,9 @@ "outputs": [], "source": [ "# HHSK['hydroobject'] = HHSK['hydroobject'].explode(ignore_index=False, index_parts=True)\n", - "HHSK['hydroobject'][\"geometry\"] = HHSK['hydroobject'].make_valid()\n", - "HHSK['hydroobject'][\"geometry\"] = HHSK['hydroobject'].geometry.apply(shapely.force_2d)\n", - "HHSK['hydroobject'] = HHSK['hydroobject'][~HHSK['hydroobject'].is_empty].copy()" + "HHSK[\"hydroobject\"][\"geometry\"] = HHSK[\"hydroobject\"].make_valid()\n", + "HHSK[\"hydroobject\"][\"geometry\"] = HHSK[\"hydroobject\"].geometry.apply(shapely.force_2d)\n", + "HHSK[\"hydroobject\"] = HHSK[\"hydroobject\"][~HHSK[\"hydroobject\"].is_empty].copy()" ] }, { @@ -188,7 +191,7 @@ "metadata": {}, "outputs": [], "source": [ - "HHSK['hydroobject'] = HHSK['hydroobject'].drop_duplicates(subset=\"geometry\",keep=\"first\")" + "HHSK[\"hydroobject\"] = HHSK[\"hydroobject\"].drop_duplicates(subset=\"geometry\", keep=\"first\")" ] }, { @@ -209,7 +212,7 @@ } ], "source": [ - "len(HHSK['hydroobject'])" + "len(HHSK[\"hydroobject\"])" ] }, { @@ -228,10 +231,10 @@ "outputs": [], "source": [ "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[['Schieland en de Krimpenerwaard']]\n", + "gdf_grens = gdf_grens.loc[[\"Schieland en de Krimpenerwaard\"]]\n", "\n", "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" ] }, { @@ -263,23 +266,23 @@ ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(HHSK['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", - "gdf_hws = gpd.overlay(gdf_hws, HHSK['peilgebied'], how='difference')\n", + "overlaps = gpd.overlay(HHSK[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", + "gdf_hws = gpd.overlay(gdf_hws, HHSK[\"peilgebied\"], how=\"difference\")\n", "\n", "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(HHSK['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", - " \n", + "non_overlapping_peilgebied = gpd.overlay(HHSK[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", + "\n", "# Step 3: Calculate Area Percentages\n", "# Calculate the area of overlaps\n", - "overlaps['overlap_area'] = overlaps.area\n", + "overlaps[\"overlap_area\"] = overlaps.area\n", "\n", "# Step 4: Filter based on area Area Percentages\n", "minimum_area = 50\n", - "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", - "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", + "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')\n", + "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")\n", "\n", "# gdf_hws = gdf_hws_clipped" ] @@ -329,7 +332,7 @@ "\n", "# else:\n", "# peilgebieden_cat.append(0)\n", - " \n", + "\n", "# HHSK['peilgebied']['peilgebied_cat'] = peilgebieden_cat" ] }, @@ -340,7 +343,7 @@ "metadata": {}, "outputs": [], "source": [ - "HHSK['peilgebied']['peilgebied_cat'] = 0" + "HHSK[\"peilgebied\"][\"peilgebied_cat\"] = 0" ] }, { @@ -350,10 +353,10 @@ "metadata": {}, "outputs": [], "source": [ - "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('GPG-399'), 'peilgebied_cat'] = 1\n", - "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('GPG-1005'), 'peilgebied_cat'] = 1\n", - "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('GPG-1360'), 'peilgebied_cat'] = 1\n", - "HHSK['peilgebied'].loc[HHSK['peilgebied'].code.str.contains('GPG-1012'), 'peilgebied_cat'] = 1\n" + "HHSK[\"peilgebied\"].loc[HHSK[\"peilgebied\"].code.str.contains(\"GPG-399\"), \"peilgebied_cat\"] = 1\n", + "HHSK[\"peilgebied\"].loc[HHSK[\"peilgebied\"].code.str.contains(\"GPG-1005\"), \"peilgebied_cat\"] = 1\n", + "HHSK[\"peilgebied\"].loc[HHSK[\"peilgebied\"].code.str.contains(\"GPG-1360\"), \"peilgebied_cat\"] = 1\n", + "HHSK[\"peilgebied\"].loc[HHSK[\"peilgebied\"].code.str.contains(\"GPG-1012\"), \"peilgebied_cat\"] = 1" ] }, { @@ -419,7 +422,7 @@ } ], "source": [ - "HHSK['peilgebied']['peilgebied_cat'].unique()" + "HHSK[\"peilgebied\"][\"peilgebied_cat\"].unique()" ] }, { @@ -503,7 +506,7 @@ "outputs": [], "source": [ "if remove_cat_2:\n", - " HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied'].peilgebied_cat !=2]" + " HHSK[\"peilgebied\"] = HHSK[\"peilgebied\"].loc[HHSK[\"peilgebied\"].peilgebied_cat != 2]" ] }, { @@ -535,9 +538,9 @@ } ], "source": [ - "for key in HHSK.keys(): \n", + "for key in HHSK.keys():\n", " print(key)\n", - " HHSK[str(key)].to_file(f'{output_folder}/{waterschap}.gpkg', layer = str(key), driver='GPKG')" + " HHSK[str(key)].to_file(f\"{output_folder}/{waterschap}.gpkg\", layer=str(key), driver=\"GPKG\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb index 71d325e..503c21e 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb @@ -51,9 +51,9 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'Scheldestromen'\n", - "waterschap2 = 'Scheldestromen'\n", + "# define relative paths\n", + "waterschap = \"Scheldestromen\"\n", + "waterschap2 = \"Scheldestromen\"\n", "\n", "data_path = f\"/DATAFOLDER/projects/4750_20/Data_postprocessed/Waterschappen/{waterschap}/{waterschap2}.gpkg\"\n", "\n", @@ -62,7 +62,7 @@ "# Hoofdwatersysteem boundaries\n", "hws_path = \"/DATAFOLDER/projects/4750_30/Data_overig/HWS/krw_basins_vlakken.gpkg\"\n", "# Buffer boundaries\n", - "buffer_path = r\"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_Scheldestromen.gpkg\"\n", + "buffer_path = r\"/DATAFOLDER/projects/4750_30/Data_overig/HWS/hws_buffer_Scheldestromen.gpkg\"\n", "# Output folder\n", "output_folder = f\"/DATAFOLDER/projects/4750_30/Data_postprocessed/Waterschappen/{waterschap}\"" ] @@ -83,28 +83,31 @@ "outputs": [], "source": [ "# Load HHNK files\n", - "Scheldestromen = read_gpkg_layers(gpkg_path = data_path, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'hydroobject',\n", - " 'duikersifonhevel',\n", - " 'peilgebied', \n", - " 'streefpeil',\n", - " 'aggregation_area',\n", - " ])\n", - "Scheldestromen['peilgebied'] = Scheldestromen['peilgebied'].to_crs('EPSG:28992')\n", + "Scheldestromen = read_gpkg_layers(\n", + " gpkg_path=data_path,\n", + " variables=[\n", + " \"stuw\",\n", + " \"gemaal\",\n", + " \"hydroobject\",\n", + " \"duikersifonhevel\",\n", + " \"peilgebied\",\n", + " \"streefpeil\",\n", + " \"aggregation_area\",\n", + " ],\n", + ")\n", + "Scheldestromen[\"peilgebied\"] = Scheldestromen[\"peilgebied\"].to_crs(\"EPSG:28992\")\n", "\n", "# Load waterschap boundaries\n", "gdf_grens = gpd.read_file(grens_path)\n", - "gdf_grens = gdf_grens.to_crs('EPSG:28992')\n", - "gdf_grens = gdf_grens.set_index('waterschap')\n", + "gdf_grens = gdf_grens.to_crs(\"EPSG:28992\")\n", + "gdf_grens = gdf_grens.set_index(\"waterschap\")\n", "\n", "# Load hws\n", "gdf_hws = gpd.read_file(hws_path)\n", "\n", "# Load buffer\n", "gdf_buffer = gpd.read_file(buffer_path)\n", - "gdf_buffer = gdf_buffer.to_crs('EPSG:28992')\n", + "gdf_buffer = gdf_buffer.to_crs(\"EPSG:28992\")\n", "gdf_buffer = gdf_buffer.dissolve()" ] }, @@ -126,7 +129,7 @@ } ], "source": [ - "Scheldestromen['peilgebied'].globalid.is_unique" + "Scheldestromen[\"peilgebied\"].globalid.is_unique" ] }, { @@ -294,7 +297,7 @@ } ], "source": [ - "Scheldestromen['peilgebied']" + "Scheldestromen[\"peilgebied\"]" ] }, { @@ -313,10 +316,10 @@ "outputs": [], "source": [ "# Select boundaries HH Amstel, Gooi en Vecht\n", - "gdf_grens = gdf_grens.loc[['Waterschap Scheldestromen']]\n", + "gdf_grens = gdf_grens.loc[[\"Waterschap Scheldestromen\"]]\n", "\n", "# Use waterschap boudnaries to clip HWS layer\n", - "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how='intersection')" + "gdf_hws = gpd.overlay(gdf_grens, gdf_hws, how=\"intersection\")" ] }, { @@ -348,22 +351,22 @@ ], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", - "overlaps = gpd.overlay(Scheldestromen['peilgebied'], gdf_hws, how='intersection', keep_geom_type=True)\n", + "overlaps = gpd.overlay(Scheldestromen[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", "\n", "# # Step 2: Subtract Overlapping Areas from the original polygons in each DataFrame\n", - "non_overlapping_peilgebied = gpd.overlay(Scheldestromen['peilgebied'], overlaps, how='difference', keep_geom_type=True)\n", - "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how='intersection', keep_geom_type=False)\n", - " \n", + "non_overlapping_peilgebied = gpd.overlay(Scheldestromen[\"peilgebied\"], overlaps, how=\"difference\", keep_geom_type=True)\n", + "overlaps = gpd.overlay(non_overlapping_peilgebied, gdf_hws, how=\"intersection\", keep_geom_type=False)\n", + "\n", "# Step 3: Calculate Area Percentages\n", "# Calculate the area of overlaps\n", - "overlaps['overlap_area'] = overlaps.area\n", + "overlaps[\"overlap_area\"] = overlaps.area\n", "\n", "# Step 4: Filter based on area Area Percentages\n", "minimum_area = 500\n", - "print(f'Number of overlapping shapes without filter: {len(overlaps)}')\n", - "overlap_ids = overlaps.loc[overlaps['overlap_area'] > minimum_area]\n", + "print(f\"Number of overlapping shapes without filter: {len(overlaps)}\")\n", + "overlap_ids = overlaps.loc[overlaps[\"overlap_area\"] > minimum_area]\n", "overlap_ids = overlap_ids.globalid.to_list()\n", - "print(f'Number of overlapping shapes with filter: {len(overlap_ids)}')" + "print(f\"Number of overlapping shapes with filter: {len(overlap_ids)}\")" ] }, { @@ -393,17 +396,16 @@ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", "\n", - "for index, row in Scheldestromen['peilgebied'].iterrows():\n", - " \n", - " if row.nen3610id == 'dummy_nen3610id_peilgebied_549':\n", + "for index, row in Scheldestromen[\"peilgebied\"].iterrows():\n", + " if row.nen3610id == \"dummy_nen3610id_peilgebied_549\":\n", " print(True)\n", " peilgebieden_cat.append(1)\n", - " elif 'GPG437' in row.code:\n", - " print('yes')\n", + " elif \"GPG437\" in row.code:\n", + " print(\"yes\")\n", " peilgebieden_cat.append(1)\n", - " elif 'dummy_code_nhws_3'in row.code: \n", + " elif \"dummy_code_nhws_3\" in row.code:\n", " peilgebieden_cat.append(1)\n", - " print('yes2')\n", + " print(\"yes2\")\n", " else:\n", " peilgebieden_cat.append(0)" ] @@ -416,7 +418,7 @@ "outputs": [], "source": [ "# Add new column\n", - "Scheldestromen['peilgebied']['peilgebied_cat'] = peilgebieden_cat" + "Scheldestromen[\"peilgebied\"][\"peilgebied_cat\"] = peilgebieden_cat" ] }, { @@ -437,7 +439,7 @@ } ], "source": [ - "Scheldestromen['peilgebied']['peilgebied_cat'].unique()" + "Scheldestromen[\"peilgebied\"][\"peilgebied_cat\"].unique()" ] }, { @@ -456,14 +458,14 @@ "outputs": [], "source": [ "# update peilgebied dict key\n", - "gdf_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['code'] = 'dummy_code_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['nen3610id'] = 'dummy_nen3610id_nhws_' + gdf_hws.index.astype(str)\n", - "gdf_hws['peilgebied_cat'] = 2\n", + "gdf_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"code\"] = \"dummy_code_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"nen3610id\"] = \"dummy_nen3610id_nhws_\" + gdf_hws.index.astype(str)\n", + "gdf_hws[\"peilgebied_cat\"] = 2\n", "\n", - "gdf_hws = gdf_hws[['globalid', 'code', 'nen3610id', 'peilgebied_cat', 'geometry']]\n", + "gdf_hws = gdf_hws[[\"globalid\", \"code\", \"nen3610id\", \"peilgebied_cat\", \"geometry\"]]\n", "\n", - "Scheldestromen['peilgebied'] = pd.concat([gdf_hws, Scheldestromen['peilgebied']])" + "Scheldestromen[\"peilgebied\"] = pd.concat([gdf_hws, Scheldestromen[\"peilgebied\"]])" ] }, { @@ -475,12 +477,12 @@ "source": [ "# Create boezem streefpeil layer\n", "streefpeil_hws = pd.DataFrame()\n", - "streefpeil_hws['waterhoogte'] = [np.nan] * len(gdf_hws)\n", - "streefpeil_hws['globalid'] = 'dummy_globalid_nhws_' + gdf_hws.index.astype(str)\n", - "streefpeil_hws['geometry'] = [None]* len(gdf_hws)\n", + "streefpeil_hws[\"waterhoogte\"] = [np.nan] * len(gdf_hws)\n", + "streefpeil_hws[\"globalid\"] = \"dummy_globalid_nhws_\" + gdf_hws.index.astype(str)\n", + "streefpeil_hws[\"geometry\"] = [None] * len(gdf_hws)\n", "\n", - "Scheldestromen['streefpeil'] = pd.concat([streefpeil_hws, Scheldestromen['streefpeil']])\n", - "Scheldestromen['streefpeil'] = gpd.GeoDataFrame(Scheldestromen['streefpeil'])" + "Scheldestromen[\"streefpeil\"] = pd.concat([streefpeil_hws, Scheldestromen[\"streefpeil\"]])\n", + "Scheldestromen[\"streefpeil\"] = gpd.GeoDataFrame(Scheldestromen[\"streefpeil\"])" ] }, { @@ -557,7 +559,7 @@ "outputs": [], "source": [ "if remove_cat_2:\n", - " Scheldestromen['peilgebied'] = Scheldestromen['peilgebied'].loc[Scheldestromen['peilgebied'].peilgebied_cat !=2]" + " Scheldestromen[\"peilgebied\"] = Scheldestromen[\"peilgebied\"].loc[Scheldestromen[\"peilgebied\"].peilgebied_cat != 2]" ] }, { @@ -591,9 +593,9 @@ } ], "source": [ - "for key in Scheldestromen.keys(): \n", + "for key in Scheldestromen.keys():\n", " print(key)\n", - " Scheldestromen[str(key)].to_file(f'{output_folder}/{waterschap2}.gpkg', layer = str(key), driver='GPKG')" + " Scheldestromen[str(key)].to_file(f\"{output_folder}/{waterschap2}.gpkg\", layer=str(key), driver=\"GPKG\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb index e2d11ac..cb00919 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb @@ -7,12 +7,12 @@ "metadata": {}, "outputs": [], "source": [ - "#import packages and functions\n", + "# import packages and functions\n", "import os\n", "\n", "import geopandas as gpd\n", "import numpy as np\n", - "import pandas as pd\n" + "import pandas as pd" ] }, { @@ -26,7 +26,7 @@ "\n", "%load_ext autoreload\n", "%autoreload 2\n", - "pd.set_option('display.max_columns', None)\n" + "pd.set_option(\"display.max_columns\", None)" ] }, { @@ -44,11 +44,11 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'AVG'\n", - "path_AVG = '..\\..\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht'\n", + "# define relative paths\n", + "waterschap = \"AVG\"\n", + "path_AVG = \"..\\..\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\"\n", "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/AmstelGooienVecht\"\n", - "DM_path = '..\\..\\Data_overig\\DM_Netwerk\\DM_Netwerk.shp'\n" + "DM_path = \"..\\..\\Data_overig\\DM_Netwerk\\DM_Netwerk.shp\"" ] }, { @@ -65,13 +65,13 @@ "# path_variable = os.path.join(path_AVG, variable + '.csv')\n", "# df_var = pd.read_csv(path_variable, delimiter=';')\n", "# geom_col = df_var.keys()[-1] #retrieve the column name\n", - " \n", + "\n", "# if not 'geometrie' in geom_col:\n", - "# raise ValueError('No \"geometry\" string found in the last column of the dataframe. Check for existence') \n", - " \n", - "# df_var['geometry'] = df_var[geom_col].apply(lambda x: wkt.loads(x.split(';')[-1])) \n", + "# raise ValueError('No \"geometry\" string found in the last column of the dataframe. Check for existence')\n", + "\n", + "# df_var['geometry'] = df_var[geom_col].apply(lambda x: wkt.loads(x.split(';')[-1]))\n", "# AVG[variable] = df_var\n", - " \n", + "\n", "# #there is one last gpkg which contains the streefpeilen (and peilgebieden)\n", "# AVG['peilgebied'] = gpd.read_file(os.path.join(path_AVG, 'vigerende_peilgebieden.gpkg'))" ] @@ -122,17 +122,27 @@ "metadata": {}, "outputs": [], "source": [ - "#overwrite previous data\n", - "AVG['stuw'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Stuw.shp\")\n", - "AVG['stuw'] = AVG['stuw'].loc[AVG['stuw'].LHM == 'LHM']\n", + "# overwrite previous data\n", + "AVG[\"stuw\"] = gpd.read_file(\n", + " r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Stuw.shp\"\n", + ")\n", + "AVG[\"stuw\"] = AVG[\"stuw\"].loc[AVG[\"stuw\"].LHM == \"LHM\"]\n", "\n", - "AVG['gemaal'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Gemaal.shp\")\n", - "AVG['gemaal'] = AVG['gemaal'].loc[AVG['gemaal'].LHM == 'LHM']\n", + "AVG[\"gemaal\"] = gpd.read_file(\n", + " r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Gemaal.shp\"\n", + ")\n", + "AVG[\"gemaal\"] = AVG[\"gemaal\"].loc[AVG[\"gemaal\"].LHM == \"LHM\"]\n", "\n", - "AVG['duikersifonhevel'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Duikersifonhevel.shp\")\n", - "AVG['hydroobject'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\LHM_hydrovakken.shp\")\n", + "AVG[\"duikersifonhevel\"] = gpd.read_file(\n", + " r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\Duikersifonhevel.shp\"\n", + ")\n", + "AVG[\"hydroobject\"] = gpd.read_file(\n", + " r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\LHM_hydrovakken.shp\"\n", + ")\n", "\n", - "AVG['peilgebied'] = gpd.read_file(r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\LHM_gebieden.shp\")\n" + "AVG[\"peilgebied\"] = gpd.read_file(\n", + " r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\AmstelGooienVecht\\data dump 6 maart LHM AGV\\LHM_gebieden.shp\"\n", + ")" ] }, { @@ -142,9 +152,9 @@ "metadata": {}, "outputs": [], "source": [ - "AVG['peilgebied'].loc[AVG['peilgebied'].zomer == 0, 'zomer'] = np.nan\n", - "AVG['peilgebied'].loc[AVG['peilgebied'].winter == 0, 'winter'] = np.nan\n", - "AVG['peilgebied'].loc[AVG['peilgebied'].vast == 0, 'vast'] = np.nan" + "AVG[\"peilgebied\"].loc[AVG[\"peilgebied\"].zomer == 0, \"zomer\"] = np.nan\n", + "AVG[\"peilgebied\"].loc[AVG[\"peilgebied\"].winter == 0, \"winter\"] = np.nan\n", + "AVG[\"peilgebied\"].loc[AVG[\"peilgebied\"].vast == 0, \"vast\"] = np.nan" ] }, { @@ -154,7 +164,7 @@ "metadata": {}, "outputs": [], "source": [ - "AVG['peilgebied']['streefpeil'] = AVG['peilgebied'][['vast', 'zomer']].min(axis=1, skipna=True)\n" + "AVG[\"peilgebied\"][\"streefpeil\"] = AVG[\"peilgebied\"][[\"vast\", \"zomer\"]].min(axis=1, skipna=True)" ] }, { @@ -164,18 +174,29 @@ "metadata": {}, "outputs": [], "source": [ - "#determine aanvoer en afvoer gemalen\n", - "AVG['gemaal']['func_aanvoer'], AVG['gemaal']['func_afvoer'], AVG['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "AVG['gemaal']['functiegemaal'] = AVG['gemaal']['naam'].astype(str) # aan AGV gevraagd of alle opmaling informatie in de kolom 'naam' verwerkt is. Antwoord: ja\n", + "# determine aanvoer en afvoer gemalen\n", + "AVG[\"gemaal\"][\"func_aanvoer\"], AVG[\"gemaal\"][\"func_afvoer\"], AVG[\"gemaal\"][\"func_circulatie\"] = (\n", + " False,\n", + " False,\n", + " False,\n", + ") # default is False\n", + "AVG[\"gemaal\"][\"functiegemaal\"] = AVG[\"gemaal\"][\"naam\"].astype(\n", + " str\n", + ") # aan AGV gevraagd of alle opmaling informatie in de kolom 'naam' verwerkt is. Antwoord: ja\n", "\n", - "AVG['gemaal'].loc[AVG['gemaal']['functiegemaal'] == 'onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", + "AVG[\"gemaal\"].loc[AVG[\"gemaal\"][\"functiegemaal\"] == \"onbekend\", \"functiegemaal\"] = (\n", + " np.nan\n", + ") # replace onbekend with nan, will be filled up later see one line below\n", "\n", - "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('fvoer|nderbemaling|f-|oodpomp'), 'func_afvoer'] = True\n", - "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('anvoergemaal|pmaling|an-|p-|pvoer'), 'func_aanvoer'] = True\n", - "AVG['gemaal'].loc[AVG['gemaal'].functiegemaal.str.contains('irculatie'), 'func_circulatie'] = True\n", - "AVG['gemaal'].loc[(AVG['gemaal'].func_afvoer is False) &\n", - " (AVG['gemaal'].func_aanvoer is False) &\n", - " (AVG['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + "AVG[\"gemaal\"].loc[AVG[\"gemaal\"].functiegemaal.str.contains(\"fvoer|nderbemaling|f-|oodpomp\"), \"func_afvoer\"] = True\n", + "AVG[\"gemaal\"].loc[AVG[\"gemaal\"].functiegemaal.str.contains(\"anvoergemaal|pmaling|an-|p-|pvoer\"), \"func_aanvoer\"] = True\n", + "AVG[\"gemaal\"].loc[AVG[\"gemaal\"].functiegemaal.str.contains(\"irculatie\"), \"func_circulatie\"] = True\n", + "AVG[\"gemaal\"].loc[\n", + " (AVG[\"gemaal\"].func_afvoer is False)\n", + " & (AVG[\"gemaal\"].func_aanvoer is False)\n", + " & (AVG[\"gemaal\"].func_circulatie is False),\n", + " \"func_afvoer\",\n", + "] = True # set to afvoergemaal is there the function is unknown" ] }, { @@ -185,53 +206,55 @@ "metadata": {}, "outputs": [], "source": [ - "#stuw\n", - "AVG['stuw'] = AVG['stuw'][['code', 'geometry']]\n", - "AVG['stuw'].loc[:, 'nen3610id'] = 'dummy_nen3610id_stuw_' + AVG['stuw'].index.astype(str)\n", - "AVG['stuw']['globalid'] = 'dummy_globalid_stuw_' + AVG['stuw'].index.astype(str)\n", - "AVG['stuw'] = gpd.GeoDataFrame(AVG['stuw']).to_crs('epsg:28992')\n", + "# stuw\n", + "AVG[\"stuw\"] = AVG[\"stuw\"][[\"code\", \"geometry\"]]\n", + "AVG[\"stuw\"].loc[:, \"nen3610id\"] = \"dummy_nen3610id_stuw_\" + AVG[\"stuw\"].index.astype(str)\n", + "AVG[\"stuw\"][\"globalid\"] = \"dummy_globalid_stuw_\" + AVG[\"stuw\"].index.astype(str)\n", + "AVG[\"stuw\"] = gpd.GeoDataFrame(AVG[\"stuw\"]).to_crs(\"epsg:28992\")\n", "\n", - "#gemaal\n", - "AVG['gemaal'] = AVG['gemaal'][['code', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "AVG['gemaal'].loc[:, 'nen3610id'] = 'dummy_nen3610id_gemaal_' + AVG['gemaal'].index.astype(str)\n", - "AVG['gemaal']['globalid'] = 'dummy_globalid_gemaal_' + AVG['gemaal'].index.astype(str)\n", - "AVG['gemaal'] = gpd.GeoDataFrame(AVG['gemaal']).to_crs('epsg:28992')\n", + "# gemaal\n", + "AVG[\"gemaal\"] = AVG[\"gemaal\"][[\"code\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]]\n", + "AVG[\"gemaal\"].loc[:, \"nen3610id\"] = \"dummy_nen3610id_gemaal_\" + AVG[\"gemaal\"].index.astype(str)\n", + "AVG[\"gemaal\"][\"globalid\"] = \"dummy_globalid_gemaal_\" + AVG[\"gemaal\"].index.astype(str)\n", + "AVG[\"gemaal\"] = gpd.GeoDataFrame(AVG[\"gemaal\"]).to_crs(\"epsg:28992\")\n", "\n", - "#afsluitmiddel\n", - "AVG['afsluitmiddel'] = AVG['afsluitmiddel'][['code', 'geometry']]\n", - "AVG['afsluitmiddel'].loc[:, 'nen3610id'] = 'dummy_nen3610id_afsluitmiddel_' + AVG['afsluitmiddel'].index.astype(str)\n", - "AVG['afsluitmiddel']['globalid'] = 'dummy_globalid_afsluitmiddel_' + AVG['afsluitmiddel'].index.astype(str)\n", - "AVG['afsluitmiddel'] = gpd.GeoDataFrame(AVG['afsluitmiddel']).set_crs('epsg:28992')\n", + "# afsluitmiddel\n", + "AVG[\"afsluitmiddel\"] = AVG[\"afsluitmiddel\"][[\"code\", \"geometry\"]]\n", + "AVG[\"afsluitmiddel\"].loc[:, \"nen3610id\"] = \"dummy_nen3610id_afsluitmiddel_\" + AVG[\"afsluitmiddel\"].index.astype(str)\n", + "AVG[\"afsluitmiddel\"][\"globalid\"] = \"dummy_globalid_afsluitmiddel_\" + AVG[\"afsluitmiddel\"].index.astype(str)\n", + "AVG[\"afsluitmiddel\"] = gpd.GeoDataFrame(AVG[\"afsluitmiddel\"]).set_crs(\"epsg:28992\")\n", "\n", - "#duikersifonhevel\n", - "AVG['duikersifonhevel'] = AVG['duikersifonhevel'][['code', 'geometry']]\n", - "AVG['duikersifonhevel'].loc[:, 'nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + AVG['duikersifonhevel'].index.astype(str)\n", - "AVG['duikersifonhevel']['globalid'] = 'dummy_globalid_duikersifonhevel_' + AVG['duikersifonhevel'].index.astype(str)\n", - "AVG['duikersifonhevel'] = gpd.GeoDataFrame(AVG['duikersifonhevel']).to_crs('epsg:28992')\n", + "# duikersifonhevel\n", + "AVG[\"duikersifonhevel\"] = AVG[\"duikersifonhevel\"][[\"code\", \"geometry\"]]\n", + "AVG[\"duikersifonhevel\"].loc[:, \"nen3610id\"] = \"dummy_nen3610id_duikersifonhevel_\" + AVG[\n", + " \"duikersifonhevel\"\n", + "].index.astype(str)\n", + "AVG[\"duikersifonhevel\"][\"globalid\"] = \"dummy_globalid_duikersifonhevel_\" + AVG[\"duikersifonhevel\"].index.astype(str)\n", + "AVG[\"duikersifonhevel\"] = gpd.GeoDataFrame(AVG[\"duikersifonhevel\"]).to_crs(\"epsg:28992\")\n", "\n", - "#hydroobject\n", - "AVG['hydroobject'] = AVG['hydroobject'][['geometry']]\n", - "AVG['hydroobject']['code'] = 'dummy_code_hydroobject_' + AVG['hydroobject'].index.astype(str)\n", - "AVG['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + AVG['hydroobject'].index.astype(str)\n", - "AVG['hydroobject']['globalid'] = 'dummy_globalid_hydroobject_' + AVG['hydroobject'].index.astype(str)\n", - "AVG['hydroobject'] = gpd.GeoDataFrame(AVG['hydroobject']).set_crs('epsg:28992')\n", + "# hydroobject\n", + "AVG[\"hydroobject\"] = AVG[\"hydroobject\"][[\"geometry\"]]\n", + "AVG[\"hydroobject\"][\"code\"] = \"dummy_code_hydroobject_\" + AVG[\"hydroobject\"].index.astype(str)\n", + "AVG[\"hydroobject\"][\"nen3610id\"] = \"dummy_nen3610id_hydroobject_\" + AVG[\"hydroobject\"].index.astype(str)\n", + "AVG[\"hydroobject\"][\"globalid\"] = \"dummy_globalid_hydroobject_\" + AVG[\"hydroobject\"].index.astype(str)\n", + "AVG[\"hydroobject\"] = gpd.GeoDataFrame(AVG[\"hydroobject\"]).set_crs(\"epsg:28992\")\n", "\n", - "#streefpeil\n", - "AVG['streefpeil'] = pd.DataFrame()\n", - "AVG['streefpeil']['waterhoogte'] = AVG['peilgebied']['streefpeil']\n", - "AVG['streefpeil']['globalid'] = 'dummy_globalid_streefpeil_' + AVG['streefpeil'].index.astype(str)\n", - "AVG['streefpeil']['geometry'] = np.nan\n", - "AVG['streefpeil'] = gpd.GeoDataFrame(AVG['streefpeil']).set_crs('epsg:28992')\n", + "# streefpeil\n", + "AVG[\"streefpeil\"] = pd.DataFrame()\n", + "AVG[\"streefpeil\"][\"waterhoogte\"] = AVG[\"peilgebied\"][\"streefpeil\"]\n", + "AVG[\"streefpeil\"][\"globalid\"] = \"dummy_globalid_streefpeil_\" + AVG[\"streefpeil\"].index.astype(str)\n", + "AVG[\"streefpeil\"][\"geometry\"] = np.nan\n", + "AVG[\"streefpeil\"] = gpd.GeoDataFrame(AVG[\"streefpeil\"]).set_crs(\"epsg:28992\")\n", "\n", - "#peilgebied\n", - "AVG['peilgebied']['code'] = AVG['peilgebied']['GAFNAAM']\n", - "AVG['peilgebied']['geometry'] = AVG['peilgebied']['geometry']\n", - "AVG['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + AVG['peilgebied'].index.astype(str)\n", - "AVG['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + AVG['peilgebied'].index.astype(str)\n", + "# peilgebied\n", + "AVG[\"peilgebied\"][\"code\"] = AVG[\"peilgebied\"][\"GAFNAAM\"]\n", + "AVG[\"peilgebied\"][\"geometry\"] = AVG[\"peilgebied\"][\"geometry\"]\n", + "AVG[\"peilgebied\"][\"nen3610id\"] = \"dummy_nen3610id_peilgebied_\" + AVG[\"peilgebied\"].index.astype(str)\n", + "AVG[\"peilgebied\"][\"globalid\"] = \"dummy_globalid_peilgebied_\" + AVG[\"peilgebied\"].index.astype(str)\n", "\n", "\n", - "AVG['peilgebied'] = AVG['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "AVG['peilgebied'] = gpd.GeoDataFrame(AVG['peilgebied']).to_crs('epsg:28992')\n" + "AVG[\"peilgebied\"] = AVG[\"peilgebied\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "AVG[\"peilgebied\"] = gpd.GeoDataFrame(AVG[\"peilgebied\"]).to_crs(\"epsg:28992\")" ] }, { @@ -241,10 +264,10 @@ "metadata": {}, "outputs": [], "source": [ - "#add duikersifonhevels to the hydroobjecten \n", - "AVG['hydroobject'] = pd.concat([AVG['hydroobject'], AVG['duikersifonhevel']])\n", - "AVG['hydroobject'] = AVG['hydroobject'].drop_duplicates(subset='globalid') #in case it is run multiple times\n", - "AVG['hydroobject'] = gpd.GeoDataFrame(AVG['hydroobject']).set_crs('epsg:28992')\n" + "# add duikersifonhevels to the hydroobjecten\n", + "AVG[\"hydroobject\"] = pd.concat([AVG[\"hydroobject\"], AVG[\"duikersifonhevel\"]])\n", + "AVG[\"hydroobject\"] = AVG[\"hydroobject\"].drop_duplicates(subset=\"globalid\") # in case it is run multiple times\n", + "AVG[\"hydroobject\"] = gpd.GeoDataFrame(AVG[\"hydroobject\"]).set_crs(\"epsg:28992\")" ] }, { @@ -270,7 +293,7 @@ "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap = AVG)" + "show_layers_and_columns(waterschap=AVG)" ] }, { @@ -284,9 +307,8 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = AVG, \n", - " output_gpkg_path = output_gpkg_path + '/AGV')\n" + "\n", + "store_data(waterschap=AVG, output_gpkg_path=output_gpkg_path + \"/AGV\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb index e0e3977..f6d6120 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "#import packages and functions\n", + "# import packages and functions\n", "import os\n", "\n", "import geopandas as gpd\n", @@ -41,8 +41,8 @@ }, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'Delfland'\n", + "# define relative paths\n", + "waterschap = \"Delfland\"\n", "gdb_path = \"../../Data_preprocessed/Waterschappen/Delfland/Watersysteem.gdb\"\n", "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Delfland\"" ] @@ -54,18 +54,14 @@ "metadata": {}, "outputs": [], "source": [ - "Delfland = read_gpkg_layers(gpkg_path = gdb_path, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'watergang',\n", - " 'duikersifonhevel',\n", - " 'peilgebiedpraktijk',\n", - " 'keerschot']) \n", - " # 'peilafwijkinggebied', \n", - " # 'pomp'])\n", - " # 'streefpeil'])\n", - "#change names\n", - "Delfland['hydroobject'] = Delfland.pop('watergang')\n" + "Delfland = read_gpkg_layers(\n", + " gpkg_path=gdb_path, variables=[\"stuw\", \"gemaal\", \"watergang\", \"duikersifonhevel\", \"peilgebiedpraktijk\", \"keerschot\"]\n", + ")\n", + "# 'peilafwijkinggebied',\n", + "# 'pomp'])\n", + "# 'streefpeil'])\n", + "# change names\n", + "Delfland[\"hydroobject\"] = Delfland.pop(\"watergang\")" ] }, { @@ -83,65 +79,86 @@ "metadata": {}, "outputs": [], "source": [ - "#discard irrelevant data of Delfland Delfland, and create a uniform dataset compared to the other waterschappen\n", - "#Stuw\n", - "Delfland['stuw'] = Delfland['stuw'][['CODE', 'GLOBALID', 'geometry']]\n", - "Delfland['stuw'] = Delfland['stuw'].rename(columns={'CODE': 'code', 'GLOBALID': 'globalid'})\n", - "Delfland['stuw']['nen3610id'] = 'dummy_nen3610id_stuw_' + Delfland['stuw'].index.astype(str)\n", + "# discard irrelevant data of Delfland Delfland, and create a uniform dataset compared to the other waterschappen\n", + "# Stuw\n", + "Delfland[\"stuw\"] = Delfland[\"stuw\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", + "Delfland[\"stuw\"] = Delfland[\"stuw\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"})\n", + "Delfland[\"stuw\"][\"nen3610id\"] = \"dummy_nen3610id_stuw_\" + Delfland[\"stuw\"].index.astype(str)\n", "\n", - "#Gemaal\n", + "# Gemaal\n", "\n", - "#determine aanvoer en afvoer gemalen\n", - "Delfland['gemaal']['func_aanvoer'], Delfland['gemaal']['func_afvoer'], Delfland['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "Delfland['gemaal'].FUNCTIEGEMAAL_resolved.fillna(Delfland['gemaal'].WS_SOORTGEMAAL)#sometimes recircualtie is located in another column, but sometimes they are different. Only fill in for NaN\n", - "Delfland['gemaal']['FUNCTIEGEMAAL_resolved'] = Delfland['gemaal']['FUNCTIEGEMAAL_resolved'].astype(str) \n", + "# determine aanvoer en afvoer gemalen\n", + "Delfland[\"gemaal\"][\"func_aanvoer\"], Delfland[\"gemaal\"][\"func_afvoer\"], Delfland[\"gemaal\"][\"func_circulatie\"] = (\n", + " False,\n", + " False,\n", + " False,\n", + ") # default is False\n", + "Delfland[\"gemaal\"].FUNCTIEGEMAAL_resolved.fillna(\n", + " Delfland[\"gemaal\"].WS_SOORTGEMAAL\n", + ") # sometimes recircualtie is located in another column, but sometimes they are different. Only fill in for NaN\n", + "Delfland[\"gemaal\"][\"FUNCTIEGEMAAL_resolved\"] = Delfland[\"gemaal\"][\"FUNCTIEGEMAAL_resolved\"].astype(str)\n", "\n", - "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Onbekend|Onderbemaling|Afvoergemaal|Af-'), 'func_afvoer'] = True\n", - "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Opmaling|Aanvoer'), 'func_aanvoer'] = True\n", - "Delfland['gemaal'].loc[Delfland['gemaal'].FUNCTIEGEMAAL_resolved.str.contains('Overig|circulatie'), 'func_circulatie'] = True\n", - "Delfland['gemaal'].loc[(Delfland['gemaal'].func_afvoer is False) &\n", - " (Delfland['gemaal'].func_aanvoer is False) &\n", - " (Delfland['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown\n", + "Delfland[\"gemaal\"].loc[\n", + " Delfland[\"gemaal\"].FUNCTIEGEMAAL_resolved.str.contains(\"Onbekend|Onderbemaling|Afvoergemaal|Af-\"), \"func_afvoer\"\n", + "] = True\n", + "Delfland[\"gemaal\"].loc[Delfland[\"gemaal\"].FUNCTIEGEMAAL_resolved.str.contains(\"Opmaling|Aanvoer\"), \"func_aanvoer\"] = (\n", + " True\n", + ")\n", + "Delfland[\"gemaal\"].loc[\n", + " Delfland[\"gemaal\"].FUNCTIEGEMAAL_resolved.str.contains(\"Overig|circulatie\"), \"func_circulatie\"\n", + "] = True\n", + "Delfland[\"gemaal\"].loc[\n", + " (Delfland[\"gemaal\"].func_afvoer is False)\n", + " & (Delfland[\"gemaal\"].func_aanvoer is False)\n", + " & (Delfland[\"gemaal\"].func_circulatie is False),\n", + " \"func_afvoer\",\n", + "] = True # set to afvoergemaal is there the function is unknown\n", "\n", - "Delfland['gemaal'] = Delfland['gemaal'][['GLOBALID', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "Delfland['gemaal'] = Delfland['gemaal'].rename(columns={'GLOBALID': 'globalid'})\n", - "Delfland['gemaal']['code'] = 'dummy_code_gemaal_' + Delfland['gemaal'].index.astype(str)\n", - "Delfland['gemaal']['nen3610id'] = 'dummy_nen3610id_gemaal_' + Delfland['gemaal'].index.astype(str)\n", + "Delfland[\"gemaal\"] = Delfland[\"gemaal\"][[\"GLOBALID\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]]\n", + "Delfland[\"gemaal\"] = Delfland[\"gemaal\"].rename(columns={\"GLOBALID\": \"globalid\"})\n", + "Delfland[\"gemaal\"][\"code\"] = \"dummy_code_gemaal_\" + Delfland[\"gemaal\"].index.astype(str)\n", + "Delfland[\"gemaal\"][\"nen3610id\"] = \"dummy_nen3610id_gemaal_\" + Delfland[\"gemaal\"].index.astype(str)\n", "\n", - "#Hydroobject\n", - "Delfland['hydroobject'] = Delfland['hydroobject'][['GLOBALID', 'geometry']]\n", - "Delfland['hydroobject'] = Delfland['hydroobject'].rename(columns={'GLOBALID': 'globalid'})\n", - "Delfland['hydroobject']['code'] = 'dummy_code_hydroobject_' + Delfland['hydroobject'].index.astype(str)\n", - "Delfland['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + Delfland['hydroobject'].index.astype(str)\n", + "# Hydroobject\n", + "Delfland[\"hydroobject\"] = Delfland[\"hydroobject\"][[\"GLOBALID\", \"geometry\"]]\n", + "Delfland[\"hydroobject\"] = Delfland[\"hydroobject\"].rename(columns={\"GLOBALID\": \"globalid\"})\n", + "Delfland[\"hydroobject\"][\"code\"] = \"dummy_code_hydroobject_\" + Delfland[\"hydroobject\"].index.astype(str)\n", + "Delfland[\"hydroobject\"][\"nen3610id\"] = \"dummy_nen3610id_hydroobject_\" + Delfland[\"hydroobject\"].index.astype(str)\n", "\n", - "#Keerschot\n", - "Delfland['keerschot'] = Delfland['keerschot'][['GLOBALID', 'geometry']]\n", - "Delfland['keerschot'] = Delfland['keerschot'].rename(columns={'GLOBALID': 'globalid'})\n", - "Delfland['keerschot']['code'] = 'dummy_code_keerschot_' + Delfland['keerschot'].index.astype(str)\n", - "Delfland['keerschot']['nen3610id'] = 'dummy_nen3610id_keerschot_' + Delfland['keerschot'].index.astype(str)\n", + "# Keerschot\n", + "Delfland[\"keerschot\"] = Delfland[\"keerschot\"][[\"GLOBALID\", \"geometry\"]]\n", + "Delfland[\"keerschot\"] = Delfland[\"keerschot\"].rename(columns={\"GLOBALID\": \"globalid\"})\n", + "Delfland[\"keerschot\"][\"code\"] = \"dummy_code_keerschot_\" + Delfland[\"keerschot\"].index.astype(str)\n", + "Delfland[\"keerschot\"][\"nen3610id\"] = \"dummy_nen3610id_keerschot_\" + Delfland[\"keerschot\"].index.astype(str)\n", "\n", - "#duikersifonhevel\n", - "Delfland['duikersifonhevel'] = Delfland['duikersifonhevel'][['CODE', 'GLOBALID', 'geometry']]\n", - "Delfland['duikersifonhevel'] = Delfland['duikersifonhevel'].rename(columns={'CODE':'code', 'GLOBALID': 'globalid'})\n", - "Delfland['duikersifonhevel']['code'] = 'dummy_code_duikersifonhevel_' + Delfland['duikersifonhevel'].index.astype(str)\n", - "Delfland['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + Delfland['duikersifonhevel'].index.astype(str)\n", + "# duikersifonhevel\n", + "Delfland[\"duikersifonhevel\"] = Delfland[\"duikersifonhevel\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", + "Delfland[\"duikersifonhevel\"] = Delfland[\"duikersifonhevel\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"})\n", + "Delfland[\"duikersifonhevel\"][\"code\"] = \"dummy_code_duikersifonhevel_\" + Delfland[\"duikersifonhevel\"].index.astype(str)\n", + "Delfland[\"duikersifonhevel\"][\"nen3610id\"] = \"dummy_nen3610id_duikersifonhevel_\" + Delfland[\n", + " \"duikersifonhevel\"\n", + "].index.astype(str)\n", "\n", - "#afsluitmiddel\n", - "#niet geleverd\n", + "# afsluitmiddel\n", + "# niet geleverd\n", "\n", - "#Peilgebiedpraktijk\n", - "Delfland['peilgebiedpraktijk'] = Delfland['peilgebiedpraktijk'][['WS_HOOGPEIL', 'CODE', 'GLOBALID', 'geometry']]\n", - "Delfland['peilgebiedpraktijk']['nen3610id'] = 'dummy_nen3610id_peilgebiedpraktijk_' + Delfland['peilgebiedpraktijk'].index.astype(str)\n", - "Delfland['peilgebiedpraktijk'] = Delfland['peilgebiedpraktijk'].rename(columns={'WS_HOOGPEIL': 'streefpeil', 'CODE':'code', 'GLOBALID':'globalid'})\n", + "# Peilgebiedpraktijk\n", + "Delfland[\"peilgebiedpraktijk\"] = Delfland[\"peilgebiedpraktijk\"][[\"WS_HOOGPEIL\", \"CODE\", \"GLOBALID\", \"geometry\"]]\n", + "Delfland[\"peilgebiedpraktijk\"][\"nen3610id\"] = \"dummy_nen3610id_peilgebiedpraktijk_\" + Delfland[\n", + " \"peilgebiedpraktijk\"\n", + "].index.astype(str)\n", + "Delfland[\"peilgebiedpraktijk\"] = Delfland[\"peilgebiedpraktijk\"].rename(\n", + " columns={\"WS_HOOGPEIL\": \"streefpeil\", \"CODE\": \"code\", \"GLOBALID\": \"globalid\"}\n", + ")\n", "\n", - "#Streefpeil\n", - "Delfland['streefpeil'] = pd.DataFrame()\n", - "Delfland['streefpeil']['waterhoogte'] = Delfland['peilgebiedpraktijk']['streefpeil']\n", - "Delfland['streefpeil']['globalid'] = Delfland['peilgebiedpraktijk']['globalid']\n", - "Delfland['streefpeil']['geometry'] = None\n", - "Delfland['streefpeil'] = gpd.GeoDataFrame(Delfland['streefpeil'], geometry = 'geometry')\n", + "# Streefpeil\n", + "Delfland[\"streefpeil\"] = pd.DataFrame()\n", + "Delfland[\"streefpeil\"][\"waterhoogte\"] = Delfland[\"peilgebiedpraktijk\"][\"streefpeil\"]\n", + "Delfland[\"streefpeil\"][\"globalid\"] = Delfland[\"peilgebiedpraktijk\"][\"globalid\"]\n", + "Delfland[\"streefpeil\"][\"geometry\"] = None\n", + "Delfland[\"streefpeil\"] = gpd.GeoDataFrame(Delfland[\"streefpeil\"], geometry=\"geometry\")\n", "\n", - "Delfland['peilgebied'] = Delfland['peilgebiedpraktijk']" + "Delfland[\"peilgebied\"] = Delfland[\"peilgebiedpraktijk\"]" ] }, { @@ -159,8 +176,8 @@ "metadata": {}, "outputs": [], "source": [ - "Delfland['peilgebied']['HWS_BZM'] = False\n", - "Delfland['peilgebied'].loc[Delfland['peilgebied'].code == 'BZM 1', 'HWS_BZM'] = True #looked up manually" + "Delfland[\"peilgebied\"][\"HWS_BZM\"] = False\n", + "Delfland[\"peilgebied\"].loc[Delfland[\"peilgebied\"].code == \"BZM 1\", \"HWS_BZM\"] = True # looked up manually" ] }, { @@ -170,8 +187,8 @@ "metadata": {}, "outputs": [], "source": [ - "#delete irrelvant data\n", - "variables = ['peilgebiedpraktijk']\n", + "# delete irrelvant data\n", + "variables = [\"peilgebiedpraktijk\"]\n", "\n", "for variable in variables:\n", " if str(variable) in Delfland:\n", @@ -193,7 +210,7 @@ "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap = Delfland)" + "show_layers_and_columns(waterschap=Delfland)" ] }, { @@ -215,9 +232,8 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = Delfland, \n", - " output_gpkg_path = output_gpkg_path + '/Delfland')\n" + "\n", + "store_data(waterschap=Delfland, output_gpkg_path=output_gpkg_path + \"/Delfland\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb index cc20f06..4ab9d66 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "#import packages and functions\n", + "# import packages and functions\n", "import geopandas as gpd\n", "import numpy as np\n", "import pandas as pd\n", @@ -40,7 +40,7 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", + "# define relative paths\n", "gpkg_path_HHNK = \"../../Data_preprocessed/Waterschappen/HHNK/Noorderkwartier.gpkg\"\n", "gdb_path_HHNK = \"../../Data_preprocessed/Waterschappen/HHNK/Watersysteemanalyse_BWN2.gdb\"\n", "gdb_path_HHNK_nalevering = \"../../Data_preprocessed/Waterschappen/HHNK/Na_levering_HHNK_gemalen_stuwen_20240321.gdb\"\n", @@ -55,26 +55,28 @@ "metadata": {}, "outputs": [], "source": [ - "#retrieve the data\n", - "HHNK = read_gpkg_layers(gpkg_path = gpkg_path_HHNK, \n", - " variables = [\n", - " # 'stuw', #nalevering\n", - " # 'gemaal', #nalevering\n", - " 'afsluitmiddel',\n", - " 'hydroobject',\n", - " 'duikersifonhevel']) \n", - " # 'peilafwijkinggebied', \n", - " # 'peilgebiedpraktijk',\n", - " # 'pomp'])\n", - " # 'streefpeil'])\n", - " \n", - "#retrieve data from a gdb, as the gpkg of HHNK does not contain all relevant data\n", - "data_gdb = gpd.read_file(gdb_path_HHNK, layer='BWN_ruimtekaart')\n", - "HHNK_nalevering = read_gpkg_layers(gpkg_path = gdb_path_HHNK_nalevering, \n", - " variables = ['stuw', 'gemaal']) #nalevering\n", + "# retrieve the data\n", + "HHNK = read_gpkg_layers(\n", + " gpkg_path=gpkg_path_HHNK,\n", + " variables=[\n", + " # 'stuw', #nalevering\n", + " # 'gemaal', #nalevering\n", + " \"afsluitmiddel\",\n", + " \"hydroobject\",\n", + " \"duikersifonhevel\",\n", + " ],\n", + ")\n", + "# 'peilafwijkinggebied',\n", + "# 'peilgebiedpraktijk',\n", + "# 'pomp'])\n", + "# 'streefpeil'])\n", "\n", - "HHNK['stuw'] = HHNK_nalevering['stuw']\n", - "HHNK['gemaal'] = HHNK_nalevering['gemaal']" + "# retrieve data from a gdb, as the gpkg of HHNK does not contain all relevant data\n", + "data_gdb = gpd.read_file(gdb_path_HHNK, layer=\"BWN_ruimtekaart\")\n", + "HHNK_nalevering = read_gpkg_layers(gpkg_path=gdb_path_HHNK_nalevering, variables=[\"stuw\", \"gemaal\"]) # nalevering\n", + "\n", + "HHNK[\"stuw\"] = HHNK_nalevering[\"stuw\"]\n", + "HHNK[\"gemaal\"] = HHNK_nalevering[\"gemaal\"]" ] }, { @@ -92,31 +94,48 @@ "metadata": {}, "outputs": [], "source": [ - "#determine aanvoer en afvoer gemalen\n", - "HHNK['gemaal']['func_aanvoer'], HHNK['gemaal']['func_afvoer'], HHNK['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "HHNK['gemaal']['functiegemaal'] = HHNK['gemaal']['FUNCTIEGEMAAL'].astype(str) \n", - "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] == 'onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", - "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] == '99', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", - "HHNK['gemaal']['functiegemaal'].fillna(HHNK['gemaal']['OPMERKING'], inplace = True) #some additional is given in this column\n", - "HHNK['gemaal'] = HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] != 'niet meer in gebruik'] #filter the gemalen out which are not in use\n", - "HHNK['gemaal'] = HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'] != '901'] #filter the gemalen out which are not in use\n", + "# determine aanvoer en afvoer gemalen\n", + "HHNK[\"gemaal\"][\"func_aanvoer\"], HHNK[\"gemaal\"][\"func_afvoer\"], HHNK[\"gemaal\"][\"func_circulatie\"] = (\n", + " False,\n", + " False,\n", + " False,\n", + ") # default is False\n", + "HHNK[\"gemaal\"][\"functiegemaal\"] = HHNK[\"gemaal\"][\"FUNCTIEGEMAAL\"].astype(str)\n", + "HHNK[\"gemaal\"].loc[HHNK[\"gemaal\"][\"functiegemaal\"] == \"onbekend\", \"functiegemaal\"] = (\n", + " np.nan\n", + ") # replace onbekend with nan, will be filled up later see one line below\n", + "HHNK[\"gemaal\"].loc[HHNK[\"gemaal\"][\"functiegemaal\"] == \"99\", \"functiegemaal\"] = (\n", + " np.nan\n", + ") # replace onbekend with nan, will be filled up later see one line below\n", + "HHNK[\"gemaal\"][\"functiegemaal\"].fillna(\n", + " HHNK[\"gemaal\"][\"OPMERKING\"], inplace=True\n", + ") # some additional is given in this column\n", + "HHNK[\"gemaal\"] = HHNK[\"gemaal\"].loc[\n", + " HHNK[\"gemaal\"][\"functiegemaal\"] != \"niet meer in gebruik\"\n", + "] # filter the gemalen out which are not in use\n", + "HHNK[\"gemaal\"] = HHNK[\"gemaal\"].loc[\n", + " HHNK[\"gemaal\"][\"functiegemaal\"] != \"901\"\n", + "] # filter the gemalen out which are not in use\n", "\n", "# HHNK['gemaal'].loc[HHNK['gemaal'].functiegemaal.str.contains('onderbemaling|afvoer|af-'), 'func_afvoer'] = True\n", "# HHNK['gemaal'].loc[HHNK['gemaal'].functiegemaal.str.contains('trekker|opmaling|op-|wateraanvoer|aanvoer'), 'func_aanvoer'] = True #aannamen: trekkerpompen vooral voor wateraanvoer\n", "# HHNK['gemaal'].loc[HHNK['gemaal'].functiegemaal.str.contains('doorspoelpomp'), 'func_circulatie'] = True\n", "\n", - "afvoer_values = ['2', '4', '5', '6', '903']\n", - "aanvoer_values = ['1', '3', '5', '902', '903'] #aannamen: trekkerpompen vooral voor wateraanvoer\n", - "circulatie_values = ['904']\n", + "afvoer_values = [\"2\", \"4\", \"5\", \"6\", \"903\"]\n", + "aanvoer_values = [\"1\", \"3\", \"5\", \"902\", \"903\"] # aannamen: trekkerpompen vooral voor wateraanvoer\n", + "circulatie_values = [\"904\"]\n", "\n", "\n", - "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(afvoer_values), 'func_afvoer'] = True\n", - "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(aanvoer_values), 'func_aanvoer'] = True\n", - "HHNK['gemaal'].loc[HHNK['gemaal']['functiegemaal'].isin(circulatie_values), 'func_circulatie'] = True\n", + "HHNK[\"gemaal\"].loc[HHNK[\"gemaal\"][\"functiegemaal\"].isin(afvoer_values), \"func_afvoer\"] = True\n", + "HHNK[\"gemaal\"].loc[HHNK[\"gemaal\"][\"functiegemaal\"].isin(aanvoer_values), \"func_aanvoer\"] = True\n", + "HHNK[\"gemaal\"].loc[HHNK[\"gemaal\"][\"functiegemaal\"].isin(circulatie_values), \"func_circulatie\"] = True\n", "\n", - "HHNK['gemaal'].loc[(HHNK['gemaal'].func_afvoer is False) &\n", - " (HHNK['gemaal'].func_aanvoer is False) &\n", - " (HHNK['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + "HHNK[\"gemaal\"].loc[\n", + " (HHNK[\"gemaal\"].func_afvoer is False)\n", + " & (HHNK[\"gemaal\"].func_aanvoer is False)\n", + " & (HHNK[\"gemaal\"].func_circulatie is False),\n", + " \"func_afvoer\",\n", + "] = True # set to afvoergemaal is there the function is unknown" ] }, { @@ -126,15 +145,17 @@ "metadata": {}, "outputs": [], "source": [ - "#gemaal\n", - "HHNK['gemaal'].rename(columns={'CODE': 'code',\n", - " 'GLOBALID': 'globalid'}, inplace = True)\n", - "HHNK['gemaal']['nen3610id'] = 'dummy_nen3610id_' + HHNK['gemaal'].index.astype(str) #create a string as the globalid is usually a str as well\n", + "# gemaal\n", + "HHNK[\"gemaal\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"}, inplace=True)\n", + "HHNK[\"gemaal\"][\"nen3610id\"] = \"dummy_nen3610id_\" + HHNK[\"gemaal\"].index.astype(\n", + " str\n", + ") # create a string as the globalid is usually a str as well\n", "\n", - "#stuw\n", - "HHNK['stuw'].rename(columns={'CODE': 'code',\n", - " 'GLOBALID': 'globalid'}, inplace = True)\n", - "HHNK['stuw']['nen3610id'] = 'dummy_nen3610id_' + HHNK['stuw'].index.astype(str) #create a string as the globalid is usually a str as well\n" + "# stuw\n", + "HHNK[\"stuw\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"}, inplace=True)\n", + "HHNK[\"stuw\"][\"nen3610id\"] = \"dummy_nen3610id_\" + HHNK[\"stuw\"].index.astype(\n", + " str\n", + ") # create a string as the globalid is usually a str as well" ] }, { @@ -155,11 +176,13 @@ "outputs": [], "source": [ "# discard irrelevant dataHHNK\n", - "HHNK['stuw'] = HHNK['stuw'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "HHNK['gemaal'] = HHNK['gemaal'][['code', 'globalid', 'nen3610id', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "HHNK['hydroobject'] = HHNK['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "HHNK['afsluitmiddel'] = HHNK['afsluitmiddel'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "HHNK['duikersifonhevel'] = HHNK['duikersifonhevel'][['code', 'globalid', 'nen3610id', 'geometry']]" + "HHNK[\"stuw\"] = HHNK[\"stuw\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", + "HHNK[\"gemaal\"] = HHNK[\"gemaal\"][\n", + " [\"code\", \"globalid\", \"nen3610id\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]\n", + "]\n", + "HHNK[\"hydroobject\"] = HHNK[\"hydroobject\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", + "HHNK[\"afsluitmiddel\"] = HHNK[\"afsluitmiddel\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", + "HHNK[\"duikersifonhevel\"] = HHNK[\"duikersifonhevel\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]" ] }, { @@ -177,17 +200,21 @@ "metadata": {}, "outputs": [], "source": [ - "data_gdb = data_gdb[['streefpeil', 'geometry']]\n", - "data_gdb['globalid'] = 'dummy_globalid_' + data_gdb.index.astype(str) #create a string as the globalid is usually a str as well\n", - "streefpeil = data_gdb[['streefpeil', 'globalid']]\n", - "peilgebied = data_gdb[['globalid', 'geometry']]\n", + "data_gdb = data_gdb[[\"streefpeil\", \"geometry\"]]\n", + "data_gdb[\"globalid\"] = \"dummy_globalid_\" + data_gdb.index.astype(\n", + " str\n", + ") # create a string as the globalid is usually a str as well\n", + "streefpeil = data_gdb[[\"streefpeil\", \"globalid\"]]\n", + "peilgebied = data_gdb[[\"globalid\", \"geometry\"]]\n", "\n", - "#add the data to the dictionary\n", - "HHNK['streefpeil'] = streefpeil\n", - "HHNK['peilgebied'] = peilgebied\n", + "# add the data to the dictionary\n", + "HHNK[\"streefpeil\"] = streefpeil\n", + "HHNK[\"peilgebied\"] = peilgebied\n", "\n", - "#hand made changes\n", - "HHNK['peilgebied'] = HHNK['peilgebied'][HHNK['peilgebied']['globalid'] != 1725] #not a correct shape. Basically only lines, with 36 seperate segments\n" + "# hand made changes\n", + "HHNK[\"peilgebied\"] = HHNK[\"peilgebied\"][\n", + " HHNK[\"peilgebied\"][\"globalid\"] != 1725\n", + "] # not a correct shape. Basically only lines, with 36 seperate segments" ] }, { @@ -197,9 +224,9 @@ "metadata": {}, "outputs": [], "source": [ - "HHNK['streefpeil'] = HHNK['streefpeil'].rename(columns={'streefpeil': 'waterhoogte'})\n", - "HHNK['streefpeil']['geometry'] = None\n", - "HHNK['streefpeil'] = gpd.GeoDataFrame(HHNK['streefpeil'], geometry = 'geometry')" + "HHNK[\"streefpeil\"] = HHNK[\"streefpeil\"].rename(columns={\"streefpeil\": \"waterhoogte\"})\n", + "HHNK[\"streefpeil\"][\"geometry\"] = None\n", + "HHNK[\"streefpeil\"] = gpd.GeoDataFrame(HHNK[\"streefpeil\"], geometry=\"geometry\")" ] }, { @@ -212,9 +239,9 @@ "# HHNK['streefpeil']['code'] = 'dummy_code_streefpeil_' + HHNK['streefpeil'].index.astype(str)\n", "# HHNK['streefpeil']['nen3610id'] = 'dummy_nen3610id_streefpeil_' + HHNK['streefpeil'].index.astype(str)\n", "\n", - "HHNK['peilgebied']['code'] = 'dummy_code_' + HHNK['peilgebied'].index.astype(str)\n", - "HHNK['peilgebied']['nen3610id'] = 'dummy_nen3610id_' + HHNK['peilgebied'].index.astype(str)\n", - "HHNK['peilgebied']['HWS_BZM'] = False" + "HHNK[\"peilgebied\"][\"code\"] = \"dummy_code_\" + HHNK[\"peilgebied\"].index.astype(str)\n", + "HHNK[\"peilgebied\"][\"nen3610id\"] = \"dummy_nen3610id_\" + HHNK[\"peilgebied\"].index.astype(str)\n", + "HHNK[\"peilgebied\"][\"HWS_BZM\"] = False" ] }, { @@ -232,7 +259,7 @@ "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap = HHNK)" + "show_layers_and_columns(waterschap=HHNK)" ] }, { @@ -261,7 +288,7 @@ "outputs": [], "source": [ "path_HWS_BZM = \"..\\..\\Scripts\\Aggregeren\\Hoofdwatersysteem\\BZM_HWS_HHNK.shp\"\n", - "HWS_BZM = gpd.read_file(path_HWS_BZM)\n" + "HWS_BZM = gpd.read_file(path_HWS_BZM)" ] }, { @@ -271,18 +298,18 @@ "metadata": {}, "outputs": [], "source": [ - "HWS_BZM['code'] = 'dummy_code_' + (HWS_BZM.index + max(HHNK['peilgebied'].index) + 1).astype(str)\n", - "HWS_BZM['globalid'] = 'dummy_globalid_' + (HWS_BZM.index + max(HHNK['peilgebied'].index) + 1).astype(str)\n", - "HWS_BZM['nen3610id'] = 'dummy_nen3610id_' + (HWS_BZM.index + max(HHNK['peilgebied'].index) + 1).astype(str)\n", - "HWS_BZM['waterhoogte'] = HWS_BZM['zomerpeil']\n", - "HWS_BZM['HWS_BZM'] = True\n", - "HWS_BZM = HWS_BZM[['code', 'globalid', 'nen3610id', 'waterhoogte', 'HWS_BZM', 'geometry']]\n", + "HWS_BZM[\"code\"] = \"dummy_code_\" + (HWS_BZM.index + max(HHNK[\"peilgebied\"].index) + 1).astype(str)\n", + "HWS_BZM[\"globalid\"] = \"dummy_globalid_\" + (HWS_BZM.index + max(HHNK[\"peilgebied\"].index) + 1).astype(str)\n", + "HWS_BZM[\"nen3610id\"] = \"dummy_nen3610id_\" + (HWS_BZM.index + max(HHNK[\"peilgebied\"].index) + 1).astype(str)\n", + "HWS_BZM[\"waterhoogte\"] = HWS_BZM[\"zomerpeil\"]\n", + "HWS_BZM[\"HWS_BZM\"] = True\n", + "HWS_BZM = HWS_BZM[[\"code\", \"globalid\", \"nen3610id\", \"waterhoogte\", \"HWS_BZM\", \"geometry\"]]\n", "\n", - "HWS_BZM_peilgebied = HWS_BZM[['code', 'globalid', 'nen3610id', 'HWS_BZM', 'geometry']]\n", - "HWS_BZM_streefpeil = HWS_BZM[['waterhoogte', 'globalid', 'geometry']]\n", + "HWS_BZM_peilgebied = HWS_BZM[[\"code\", \"globalid\", \"nen3610id\", \"HWS_BZM\", \"geometry\"]]\n", + "HWS_BZM_streefpeil = HWS_BZM[[\"waterhoogte\", \"globalid\", \"geometry\"]]\n", "\n", - "HHNK['peilgebied'] = gpd.GeoDataFrame(pd.concat([HHNK['peilgebied'], HWS_BZM_peilgebied])).reset_index(drop=True)\n", - "HHNK['streefpeil'] = gpd.GeoDataFrame(pd.concat([HHNK['streefpeil'], HWS_BZM_streefpeil])).reset_index(drop=True)" + "HHNK[\"peilgebied\"] = gpd.GeoDataFrame(pd.concat([HHNK[\"peilgebied\"], HWS_BZM_peilgebied])).reset_index(drop=True)\n", + "HHNK[\"streefpeil\"] = gpd.GeoDataFrame(pd.concat([HHNK[\"streefpeil\"], HWS_BZM_streefpeil])).reset_index(drop=True)" ] }, { @@ -300,8 +327,7 @@ "metadata": {}, "outputs": [], "source": [ - "store_data(waterschap = HHNK, \n", - " output_gpkg_path = output_gpkg_path_HHNK)\n" + "store_data(waterschap=HHNK, output_gpkg_path=output_gpkg_path_HHNK)" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb index 8c5fd38..96e5b13 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb @@ -7,12 +7,12 @@ "metadata": {}, "outputs": [], "source": [ - "#import packages and functions\n", + "# import packages and functions\n", "import os\n", "\n", "import geopandas as gpd\n", "import numpy as np\n", - "import pandas as pd\n" + "import pandas as pd" ] }, { @@ -36,7 +36,7 @@ "metadata": {}, "outputs": [], "source": [ - "pd.set_option('display.max_columns', None)" + "pd.set_option(\"display.max_columns\", None)" ] }, { @@ -46,10 +46,10 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'HHSK'\n", - "path_HHSK = '..\\..\\Data_preprocessed\\Waterschappen\\HHSK\\HyDamo_metWasverzachter_20230905.gpkg'\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/HHSK\"\n" + "# define relative paths\n", + "waterschap = \"HHSK\"\n", + "path_HHSK = \"..\\..\\Data_preprocessed\\Waterschappen\\HHSK\\HyDamo_metWasverzachter_20230905.gpkg\"\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/HHSK\"" ] }, { @@ -59,18 +59,21 @@ "metadata": {}, "outputs": [], "source": [ - "HHSK = read_gpkg_layers(gpkg_path = path_HHSK, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'afsluitmiddel',\n", - " 'duikersifonhevel',\n", - " 'hydroobject',\n", - " # 'peilgebiedvigerend',\n", - " # 'peilafwijkinggebied',\n", - " # 'peilbesluitgebied',\n", - " 'streefpeil'],\n", - " engine = 'pyogrio') \n", - " " + "HHSK = read_gpkg_layers(\n", + " gpkg_path=path_HHSK,\n", + " variables=[\n", + " \"stuw\",\n", + " \"gemaal\",\n", + " \"afsluitmiddel\",\n", + " \"duikersifonhevel\",\n", + " \"hydroobject\",\n", + " # 'peilgebiedvigerend',\n", + " # 'peilafwijkinggebied',\n", + " # 'peilbesluitgebied',\n", + " \"streefpeil\",\n", + " ],\n", + " engine=\"pyogrio\",\n", + ")" ] }, { @@ -80,8 +83,10 @@ "metadata": {}, "outputs": [], "source": [ - "HHSK_nalevering = read_gpkg_layers(gpkg_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\LHM_hhsk_nalevering.gpkg\",\n", - " variables = ['Persleiding'])" + "HHSK_nalevering = read_gpkg_layers(\n", + " gpkg_path=r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\LHM_hhsk_nalevering.gpkg\",\n", + " variables=[\"Persleiding\"],\n", + ")" ] }, { @@ -91,9 +96,10 @@ "metadata": {}, "outputs": [], "source": [ - "HHSK_2nalevering = read_gpkg_layers(gpkg_path = r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\hhsklevering_07032024.gpkg\",\n", - " variables = ['PeilgebiedPraktijk',\n", - " 'VigerendPeilgebiedZPP'])" + "HHSK_2nalevering = read_gpkg_layers(\n", + " gpkg_path=r\"D:\\Users\\Bruijns\\Documents\\PR4750_20\\Data_preprocessed\\Waterschappen\\HHSK\\hhsklevering_07032024.gpkg\",\n", + " variables=[\"PeilgebiedPraktijk\", \"VigerendPeilgebiedZPP\"],\n", + ")" ] }, { @@ -111,16 +117,24 @@ "metadata": {}, "outputs": [], "source": [ - "HHSK['stuw'] = HHSK['stuw'].loc[(HHSK['stuw']['statusobject'] == '3') | (HHSK['stuw']['statusobject'] == 3)]\n", - "HHSK['gemaal'] = HHSK['gemaal'].loc[(HHSK['gemaal']['statusobject'] == '3') | (HHSK['gemaal']['statusobject'] == 3)]\n", - "HHSK['hydroobject'] = HHSK['hydroobject'].loc[(HHSK['hydroobject']['statusobject'] == '3') | (HHSK['hydroobject']['statusobject'] == 3)]\n", - "HHSK['duikersifonhevel'] = HHSK['duikersifonhevel'].loc[(HHSK['duikersifonhevel']['statusobject'] == '3') | (HHSK['duikersifonhevel']['statusobject'] == 3)]\n", - "HHSK['afsluitmiddel'] = HHSK['afsluitmiddel'].loc[(HHSK['afsluitmiddel']['statusobject'] == '3') | (HHSK['afsluitmiddel']['statusobject'] == 3)]\n", + "HHSK[\"stuw\"] = HHSK[\"stuw\"].loc[(HHSK[\"stuw\"][\"statusobject\"] == \"3\") | (HHSK[\"stuw\"][\"statusobject\"] == 3)]\n", + "HHSK[\"gemaal\"] = HHSK[\"gemaal\"].loc[(HHSK[\"gemaal\"][\"statusobject\"] == \"3\") | (HHSK[\"gemaal\"][\"statusobject\"] == 3)]\n", + "HHSK[\"hydroobject\"] = HHSK[\"hydroobject\"].loc[\n", + " (HHSK[\"hydroobject\"][\"statusobject\"] == \"3\") | (HHSK[\"hydroobject\"][\"statusobject\"] == 3)\n", + "]\n", + "HHSK[\"duikersifonhevel\"] = HHSK[\"duikersifonhevel\"].loc[\n", + " (HHSK[\"duikersifonhevel\"][\"statusobject\"] == \"3\") | (HHSK[\"duikersifonhevel\"][\"statusobject\"] == 3)\n", + "]\n", + "HHSK[\"afsluitmiddel\"] = HHSK[\"afsluitmiddel\"].loc[\n", + " (HHSK[\"afsluitmiddel\"][\"statusobject\"] == \"3\") | (HHSK[\"afsluitmiddel\"][\"statusobject\"] == 3)\n", + "]\n", "\n", "# HHSK['peilgebiedvigerend'] = HHSK['peilgebiedvigerend'].loc[(HHSK['peilgebiedvigerend']['statusobject'] == '3') | (HHSK['peilgebiedvigerend']['statusobject'] == 3)]\n", "# HHSK['peilafwijkinggebied'] = HHSK['peilafwijkinggebied'].loc[(HHSK['peilafwijkinggebied']['statusobject'] == '3') | (HHSK['peilafwijkinggebied']['statusobject'] == 3)]\n", "\n", - "HHSK_nalevering['Persleiding'] = HHSK_nalevering['Persleiding'].loc[(HHSK_nalevering['Persleiding']['STATUSOBJECT'] == '3') | (HHSK_nalevering['Persleiding']['STATUSOBJECT'] == 3)]" + "HHSK_nalevering[\"Persleiding\"] = HHSK_nalevering[\"Persleiding\"].loc[\n", + " (HHSK_nalevering[\"Persleiding\"][\"STATUSOBJECT\"] == \"3\") | (HHSK_nalevering[\"Persleiding\"][\"STATUSOBJECT\"] == 3)\n", + "]" ] }, { @@ -130,8 +144,10 @@ "metadata": {}, "outputs": [], "source": [ - "HHSK['hydroobject']['categorieoppwaterlichaam'] = HHSK['hydroobject']['categorieoppwaterlichaam'].astype(float)\n", - "HHSK['hydroobject'] = HHSK['hydroobject'].loc[HHSK['hydroobject']['categorieoppwaterlichaam'] == 1] #only select primaire waterlichamen" + "HHSK[\"hydroobject\"][\"categorieoppwaterlichaam\"] = HHSK[\"hydroobject\"][\"categorieoppwaterlichaam\"].astype(float)\n", + "HHSK[\"hydroobject\"] = HHSK[\"hydroobject\"].loc[\n", + " HHSK[\"hydroobject\"][\"categorieoppwaterlichaam\"] == 1\n", + "] # only select primaire waterlichamen" ] }, { @@ -159,16 +175,23 @@ "metadata": {}, "outputs": [], "source": [ - "#determine aanvoer en afvoer gemalen\n", - "HHSK['gemaal']['func_aanvoer'], HHSK['gemaal']['func_afvoer'], HHSK['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "HHSK['gemaal']['functiegemaal'] = HHSK['gemaal']['functiegemaal'].astype(str) \n", + "# determine aanvoer en afvoer gemalen\n", + "HHSK[\"gemaal\"][\"func_aanvoer\"], HHSK[\"gemaal\"][\"func_afvoer\"], HHSK[\"gemaal\"][\"func_circulatie\"] = (\n", + " False,\n", + " False,\n", + " False,\n", + ") # default is False\n", + "HHSK[\"gemaal\"][\"functiegemaal\"] = HHSK[\"gemaal\"][\"functiegemaal\"].astype(str)\n", "\n", - "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('2|4|5|6|7|99'), 'func_afvoer'] = True\n", - "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('1|3|5|'), 'func_aanvoer'] = True\n", - "HHSK['gemaal'].loc[HHSK['gemaal'].functiegemaal.str.contains('8'), 'func_circulatie'] = True\n", - "HHSK['gemaal'].loc[(HHSK['gemaal'].func_afvoer is False) &\n", - " (HHSK['gemaal'].func_aanvoer is False) &\n", - " (HHSK['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + "HHSK[\"gemaal\"].loc[HHSK[\"gemaal\"].functiegemaal.str.contains(\"2|4|5|6|7|99\"), \"func_afvoer\"] = True\n", + "HHSK[\"gemaal\"].loc[HHSK[\"gemaal\"].functiegemaal.str.contains(\"1|3|5|\"), \"func_aanvoer\"] = True\n", + "HHSK[\"gemaal\"].loc[HHSK[\"gemaal\"].functiegemaal.str.contains(\"8\"), \"func_circulatie\"] = True\n", + "HHSK[\"gemaal\"].loc[\n", + " (HHSK[\"gemaal\"].func_afvoer is False)\n", + " & (HHSK[\"gemaal\"].func_aanvoer is False)\n", + " & (HHSK[\"gemaal\"].func_circulatie is False),\n", + " \"func_afvoer\",\n", + "] = True # set to afvoergemaal is there the function is unknown" ] }, { @@ -186,11 +209,13 @@ "metadata": {}, "outputs": [], "source": [ - "HHSK['stuw'] = HHSK['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "HHSK['gemaal'] = HHSK['gemaal'][['code', 'nen3610id', 'globalid', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "HHSK['hydroobject'] = HHSK['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "HHSK['duikersifonhevel'] = HHSK['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "HHSK['afsluitmiddel'] = HHSK['afsluitmiddel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "HHSK[\"stuw\"] = HHSK[\"stuw\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "HHSK[\"gemaal\"] = HHSK[\"gemaal\"][\n", + " [\"code\", \"nen3610id\", \"globalid\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]\n", + "]\n", + "HHSK[\"hydroobject\"] = HHSK[\"hydroobject\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "HHSK[\"duikersifonhevel\"] = HHSK[\"duikersifonhevel\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "HHSK[\"afsluitmiddel\"] = HHSK[\"afsluitmiddel\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", "\n", "# HHSK['peilgebiedvigerend'] = HHSK['peilgebiedvigerend'][['code', 'nen3610id', 'globalid', 'geometry']]\n", "# HHSK['peilafwijkinggebied'] = HHSK['peilafwijkinggebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", @@ -215,10 +240,11 @@ "metadata": {}, "outputs": [], "source": [ - "HHSK_nalevering['Persleiding'] = HHSK_nalevering['Persleiding'][['CODE', 'GLOBALID', 'geometry']]\n", - "HHSK_nalevering['Persleiding']['nen3610id'] = 'dummy_nen3610id_persleiding_' + HHSK_nalevering['Persleiding'].index.astype(str)\n", - "HHSK_nalevering['Persleiding'] = HHSK_nalevering['Persleiding'].rename(columns = {'CODE': 'code',\n", - " 'GLOBALID': 'globalid'})\n" + "HHSK_nalevering[\"Persleiding\"] = HHSK_nalevering[\"Persleiding\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", + "HHSK_nalevering[\"Persleiding\"][\"nen3610id\"] = \"dummy_nen3610id_persleiding_\" + HHSK_nalevering[\n", + " \"Persleiding\"\n", + "].index.astype(str)\n", + "HHSK_nalevering[\"Persleiding\"] = HHSK_nalevering[\"Persleiding\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"})" ] }, { @@ -228,13 +254,15 @@ "metadata": {}, "outputs": [], "source": [ - "HHSK['duikersifonhevel'] = gpd.GeoDataFrame(pd.concat([HHSK['duikersifonhevel'], HHSK_nalevering['Persleiding']])).reset_index(drop=True)\n", + "HHSK[\"duikersifonhevel\"] = gpd.GeoDataFrame(\n", + " pd.concat([HHSK[\"duikersifonhevel\"], HHSK_nalevering[\"Persleiding\"]])\n", + ").reset_index(drop=True)\n", "\n", - "#HHSK has apparently non unique values for the global ids in duikersifonhevel\n", - "HHSK['duikersifonhevel']['globalid'] = 'dummy_globalid_duikersifonhevel_' + HHSK['duikersifonhevel'].index.astype(str)\n", + "# HHSK has apparently non unique values for the global ids in duikersifonhevel\n", + "HHSK[\"duikersifonhevel\"][\"globalid\"] = \"dummy_globalid_duikersifonhevel_\" + HHSK[\"duikersifonhevel\"].index.astype(str)\n", "\n", - "#remove empty point geomtries from the gemalen\n", - "HHSK['gemaal'] = HHSK['gemaal'][~HHSK['gemaal'].is_empty].reset_index(drop=True)" + "# remove empty point geomtries from the gemalen\n", + "HHSK[\"gemaal\"] = HHSK[\"gemaal\"][~HHSK[\"gemaal\"].is_empty].reset_index(drop=True)" ] }, { @@ -252,15 +280,21 @@ "metadata": {}, "outputs": [], "source": [ - "#edit the peilgebiedpraktijk\n", - "HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'].fillna(HHSK_2nalevering['PeilgebiedPraktijk']['VASTPEIL'], inplace= True)\n", - "HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'].fillna(HHSK_2nalevering['PeilgebiedPraktijk']['BOVENPEIL'], inplace= True)\n", - "HHSK_2nalevering['PeilgebiedPraktijk']['ONDERPEIL'].fillna(HHSK_2nalevering['PeilgebiedPraktijk']['SCHOUWPEIL'], inplace= True)\n", + "# edit the peilgebiedpraktijk\n", + "HHSK_2nalevering[\"PeilgebiedPraktijk\"][\"ONDERPEIL\"].fillna(\n", + " HHSK_2nalevering[\"PeilgebiedPraktijk\"][\"VASTPEIL\"], inplace=True\n", + ")\n", + "HHSK_2nalevering[\"PeilgebiedPraktijk\"][\"ONDERPEIL\"].fillna(\n", + " HHSK_2nalevering[\"PeilgebiedPraktijk\"][\"BOVENPEIL\"], inplace=True\n", + ")\n", + "HHSK_2nalevering[\"PeilgebiedPraktijk\"][\"ONDERPEIL\"].fillna(\n", + " HHSK_2nalevering[\"PeilgebiedPraktijk\"][\"SCHOUWPEIL\"], inplace=True\n", + ")\n", "\n", - "HHSK['peilgebiedpraktijk'] = HHSK_2nalevering['PeilgebiedPraktijk'][['CODE', 'ONDERPEIL', 'BRONGID', 'geometry']]\n", - "HHSK['peilgebiedpraktijk'] = HHSK_2nalevering['PeilgebiedPraktijk'].rename(columns = {'CODE': 'code',\n", - " 'ONDERPEIL': 'waterhoogte',\n", - " 'BRONGID': 'globalid'})" + "HHSK[\"peilgebiedpraktijk\"] = HHSK_2nalevering[\"PeilgebiedPraktijk\"][[\"CODE\", \"ONDERPEIL\", \"BRONGID\", \"geometry\"]]\n", + "HHSK[\"peilgebiedpraktijk\"] = HHSK_2nalevering[\"PeilgebiedPraktijk\"].rename(\n", + " columns={\"CODE\": \"code\", \"ONDERPEIL\": \"waterhoogte\", \"BRONGID\": \"globalid\"}\n", + ")" ] }, { @@ -270,15 +304,21 @@ "metadata": {}, "outputs": [], "source": [ - "#edit the peilgebiedvigerend\n", - "HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'].fillna(HHSK_2nalevering['VigerendPeilgebiedZPP']['VASTPEIL'], inplace= True)\n", - "HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'].fillna(HHSK_2nalevering['VigerendPeilgebiedZPP']['BOVENPEIL'], inplace= True)\n", - "HHSK_2nalevering['VigerendPeilgebiedZPP']['ONDERPEIL'].fillna(HHSK_2nalevering['VigerendPeilgebiedZPP']['SCHOUWPEIL'], inplace= True)\n", + "# edit the peilgebiedvigerend\n", + "HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][\"ONDERPEIL\"].fillna(\n", + " HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][\"VASTPEIL\"], inplace=True\n", + ")\n", + "HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][\"ONDERPEIL\"].fillna(\n", + " HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][\"BOVENPEIL\"], inplace=True\n", + ")\n", + "HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][\"ONDERPEIL\"].fillna(\n", + " HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][\"SCHOUWPEIL\"], inplace=True\n", + ")\n", "\n", - "HHSK['peilgebiedvigerend'] = HHSK_2nalevering['VigerendPeilgebiedZPP'][['CODE', 'ONDERPEIL', 'BRONGID', 'geometry']]\n", - "HHSK['peilgebiedvigerend'] = HHSK_2nalevering['VigerendPeilgebiedZPP'].rename(columns = {'CODE': 'code',\n", - " 'ONDERPEIL': 'waterhoogte',\n", - " 'BRONGID': 'globalid'})" + "HHSK[\"peilgebiedvigerend\"] = HHSK_2nalevering[\"VigerendPeilgebiedZPP\"][[\"CODE\", \"ONDERPEIL\", \"BRONGID\", \"geometry\"]]\n", + "HHSK[\"peilgebiedvigerend\"] = HHSK_2nalevering[\"VigerendPeilgebiedZPP\"].rename(\n", + " columns={\"CODE\": \"code\", \"ONDERPEIL\": \"waterhoogte\", \"BRONGID\": \"globalid\"}\n", + ")" ] }, { @@ -288,15 +328,17 @@ "metadata": {}, "outputs": [], "source": [ - "#select the peilgebiedpraktijk which have a primaire hydroobject\n", + "# select the peilgebiedpraktijk which have a primaire hydroobject\n", "\n", - "#pgp_pw : PeilGebiedPraktijk Primaire Watergang\n", - "pgp_pw = gpd.sjoin(left_df = HHSK_2nalevering['PeilgebiedPraktijk'], \n", - " right_df = HHSK['hydroobject'],\n", - " how=\"inner\", \n", - " predicate='contains',\n", - " lsuffix = 'pgp',\n", - " rsuffix = 'hydroobject').drop_duplicates(subset='CODE') \n" + "# pgp_pw : PeilGebiedPraktijk Primaire Watergang\n", + "pgp_pw = gpd.sjoin(\n", + " left_df=HHSK_2nalevering[\"PeilgebiedPraktijk\"],\n", + " right_df=HHSK[\"hydroobject\"],\n", + " how=\"inner\",\n", + " predicate=\"contains\",\n", + " lsuffix=\"pgp\",\n", + " rsuffix=\"hydroobject\",\n", + ").drop_duplicates(subset=\"CODE\")" ] }, { @@ -316,10 +358,7 @@ "metadata": {}, "outputs": [], "source": [ - "pgv_diff = gpd.sjoin(left_df = HHSK['peilgebiedvigerend'],\n", - " right_df = pgp_pw,\n", - " how = \"inner\",\n", - " predicate = 'intersects')" + "pgv_diff = gpd.sjoin(left_df=HHSK[\"peilgebiedvigerend\"], right_df=pgp_pw, how=\"inner\", predicate=\"intersects\")" ] }, { @@ -374,9 +413,7 @@ "metadata": {}, "outputs": [], "source": [ - "peilgebied = burn_in_peilgebieden(base_layer = streefpeilen_PG_v, \n", - " overlay_layer = streefpeilen_PG_a,\n", - " plot = True)" + "peilgebied = burn_in_peilgebieden(base_layer=streefpeilen_PG_v, overlay_layer=streefpeilen_PG_a, plot=True)" ] }, { @@ -387,10 +424,10 @@ "outputs": [], "source": [ "streefpeil = gpd.GeoDataFrame()\n", - "streefpeil['waterhoogte'] = peilgebied['waterhoogte']\n", - "streefpeil['globalid'] = peilgebied['globalid']\n", - "streefpeil['geometry'] = np.nan\n", - "HHSK['streefpeil'] = gpd.GeoDataFrame(streefpeil)" + "streefpeil[\"waterhoogte\"] = peilgebied[\"waterhoogte\"]\n", + "streefpeil[\"globalid\"] = peilgebied[\"globalid\"]\n", + "streefpeil[\"geometry\"] = np.nan\n", + "HHSK[\"streefpeil\"] = gpd.GeoDataFrame(streefpeil)" ] }, { @@ -400,7 +437,7 @@ "metadata": {}, "outputs": [], "source": [ - "HHSK['peilgebied'] = gpd.GeoDataFrame(peilgebied[['code', 'nen3610id', 'globalid', 'geometry']])" + "HHSK[\"peilgebied\"] = gpd.GeoDataFrame(peilgebied[[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]])" ] }, { @@ -410,7 +447,7 @@ "metadata": {}, "outputs": [], "source": [ - "HHSK['peilgebied'] = HHSK['peilgebied'].loc[HHSK['peilgebied']['code'] !='GPG-1206'] #Not a regular polygon" + "HHSK[\"peilgebied\"] = HHSK[\"peilgebied\"].loc[HHSK[\"peilgebied\"][\"code\"] != \"GPG-1206\"] # Not a regular polygon" ] }, { @@ -428,8 +465,8 @@ "metadata": {}, "outputs": [], "source": [ - "#delete irrelvant data\n", - "variables = ['peilgebiedpraktijk', 'peilgebiedvigerend', 'peilafwijkinggebied']\n", + "# delete irrelvant data\n", + "variables = [\"peilgebiedpraktijk\", \"peilgebiedvigerend\", \"peilafwijkinggebied\"]\n", "\n", "for variable in variables:\n", " if str(variable) in HHSK:\n", @@ -443,10 +480,10 @@ "metadata": {}, "outputs": [], "source": [ - "#add duikersifonhevels to the hydroobjecten \n", - "HHSK['hydroobject'] = pd.concat([HHSK['hydroobject'], HHSK['duikersifonhevel']])\n", - "HHSK['hydroobject'] = HHSK['hydroobject'].drop_duplicates(subset='globalid') #in case it is run multiple times\n", - "HHSK['hydroobject'] = gpd.GeoDataFrame(HHSK['hydroobject']).set_crs('epsg:28992')\n" + "# add duikersifonhevels to the hydroobjecten\n", + "HHSK[\"hydroobject\"] = pd.concat([HHSK[\"hydroobject\"], HHSK[\"duikersifonhevel\"]])\n", + "HHSK[\"hydroobject\"] = HHSK[\"hydroobject\"].drop_duplicates(subset=\"globalid\") # in case it is run multiple times\n", + "HHSK[\"hydroobject\"] = gpd.GeoDataFrame(HHSK[\"hydroobject\"]).set_crs(\"epsg:28992\")" ] }, { @@ -464,7 +501,7 @@ "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap = HHSK)" + "show_layers_and_columns(waterschap=HHSK)" ] }, { @@ -486,9 +523,8 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = HHSK, \n", - " output_gpkg_path = output_gpkg_path + '/HHSK')\n" + "\n", + "store_data(waterschap=HHSK, output_gpkg_path=output_gpkg_path + \"/HHSK\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb index c869d40..4f74f03 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb @@ -7,12 +7,12 @@ "metadata": {}, "outputs": [], "source": [ - "#import packages and functions\n", + "# import packages and functions\n", "import os\n", "\n", "import geopandas as gpd\n", "import numpy as np\n", - "import pandas as pd\n" + "import pandas as pd" ] }, { @@ -42,8 +42,8 @@ }, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'Hollandse_Delta'\n", + "# define relative paths\n", + "waterschap = \"Hollandse_Delta\"\n", "data_path = \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Hollandse_Delta_aangepast.gpkg\"\n", "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Hollandse_Delta\"" ] @@ -55,22 +55,25 @@ "metadata": {}, "outputs": [], "source": [ - "HD = read_gpkg_layers(gpkg_path = data_path, \n", - " variables = ['stuwen', \n", - " 'gemalen', \n", - " 'afsluitmiddelen',\n", - " 'sluizen',\n", - " 'HydroObjectWatergangtype', #= hydroobject\n", - " 'HydroObjectKunstwerkvakken']) #= duikersifonhevel\n", + "HD = read_gpkg_layers(\n", + " gpkg_path=data_path,\n", + " variables=[\n", + " \"stuwen\",\n", + " \"gemalen\",\n", + " \"afsluitmiddelen\",\n", + " \"sluizen\",\n", + " \"HydroObjectWatergangtype\", # = hydroobject\n", + " \"HydroObjectKunstwerkvakken\",\n", + " ],\n", + ") # = duikersifonhevel\n", "\n", - "#change names\n", - "HD['stuw'] = HD.pop('stuwen')\n", - "HD['gemaal'] = HD.pop('gemalen')\n", - "HD['afsluitmiddel'] = HD.pop('afsluitmiddelen')\n", - "HD['sluis'] = HD.pop('sluizen')\n", - "HD['hydroobject'] = HD.pop('HydroObjectWatergangtype')\n", - "HD['duikersifonhevel'] = HD.pop('HydroObjectKunstwerkvakken')\n", - " \n" + "# change names\n", + "HD[\"stuw\"] = HD.pop(\"stuwen\")\n", + "HD[\"gemaal\"] = HD.pop(\"gemalen\")\n", + "HD[\"afsluitmiddel\"] = HD.pop(\"afsluitmiddelen\")\n", + "HD[\"sluis\"] = HD.pop(\"sluizen\")\n", + "HD[\"hydroobject\"] = HD.pop(\"HydroObjectWatergangtype\")\n", + "HD[\"duikersifonhevel\"] = HD.pop(\"HydroObjectKunstwerkvakken\")" ] }, { @@ -80,22 +83,23 @@ "metadata": {}, "outputs": [], "source": [ - "#see the readme: peilgebieden have not be delivered properly. This data is retrieved from an external online database.\n", + "# see the readme: peilgebieden have not be delivered properly. This data is retrieved from an external online database.\n", "# peilgebieden_path = '../../Data_preprocessed/Waterschappen/Hollandse_Delta/WSHD_Peilgebieden_(Vigerend).shp'\n", - "peilgebieden_path_all = \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Nalvering_tweede/Shapefiles/PeilgebiedenPraktijk.shp\"\n", - "peilgebieden_path_geen_AP = \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Nalvering_tweede/Shapefiles/PeilgebiedenGeenAP.shp\"\n", + "peilgebieden_path_all = (\n", + " \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Nalvering_tweede/Shapefiles/PeilgebiedenPraktijk.shp\"\n", + ")\n", + "peilgebieden_path_geen_AP = (\n", + " \"../../Data_preprocessed/Waterschappen/Hollandse_Delta/Nalvering_tweede/Shapefiles/PeilgebiedenGeenAP.shp\"\n", + ")\n", "\n", - "#load in both the old ones and the new ones, as the new ones do not have the peilgebiedafwijkingen, but they dont have the streefpeilen. These are stored in the old ones.\n", + "# load in both the old ones and the new ones, as the new ones do not have the peilgebiedafwijkingen, but they dont have the streefpeilen. These are stored in the old ones.\n", "peilgebieden_all = gpd.read_file(peilgebieden_path_all)\n", "peilgebieden_geen_AP = gpd.read_file(peilgebieden_path_geen_AP)\n", "\n", - "peilgebieden = pd.merge(left=peilgebieden_all,\n", - " right=peilgebieden_geen_AP,\n", - " on='Dis',\n", - " suffixes=('_all', ''))\n", + "peilgebieden = pd.merge(left=peilgebieden_all, right=peilgebieden_geen_AP, on=\"Dis\", suffixes=(\"_all\", \"\"))\n", "\n", - "#add the shapefile to the dictionary\n", - "HD['peilgebied'] = peilgebieden" + "# add the shapefile to the dictionary\n", + "HD[\"peilgebied\"] = peilgebieden" ] }, { @@ -113,19 +117,30 @@ "metadata": {}, "outputs": [], "source": [ - "#determine aanvoer en afvoer gemalen\n", - "HD['gemaal']['func_aanvoer'], HD['gemaal']['func_afvoer'], HD['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "HD['gemaal']['functiegemaal'] = HD['gemaal']['FUNCTIEGEM'].astype(str) \n", - "HD['gemaal'].loc[HD['gemaal']['functiegemaal'] == 'Onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", - "HD['gemaal']['functiegemaal'].fillna(HD['gemaal']['NAAM'], inplace = True) #some additional information may given in this column\n", - "HD['gemaal']['functiegemaal'] = HD['gemaal']['functiegemaal'].astype(str) #again, otherise issue True False\n", + "# determine aanvoer en afvoer gemalen\n", + "HD[\"gemaal\"][\"func_aanvoer\"], HD[\"gemaal\"][\"func_afvoer\"], HD[\"gemaal\"][\"func_circulatie\"] = (\n", + " False,\n", + " False,\n", + " False,\n", + ") # default is False\n", + "HD[\"gemaal\"][\"functiegemaal\"] = HD[\"gemaal\"][\"FUNCTIEGEM\"].astype(str)\n", + "HD[\"gemaal\"].loc[HD[\"gemaal\"][\"functiegemaal\"] == \"Onbekend\", \"functiegemaal\"] = (\n", + " np.nan\n", + ") # replace onbekend with nan, will be filled up later see one line below\n", + "HD[\"gemaal\"][\"functiegemaal\"].fillna(\n", + " HD[\"gemaal\"][\"NAAM\"], inplace=True\n", + ") # some additional information may given in this column\n", + "HD[\"gemaal\"][\"functiegemaal\"] = HD[\"gemaal\"][\"functiegemaal\"].astype(str) # again, otherise issue True False\n", "\n", - "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('f-|fvoer|nderbemaling'), 'func_afvoer'] = True\n", - "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('anvoergemaal|pmaling'), 'func_aanvoer'] = True\n", - "HD['gemaal'].loc[HD['gemaal'].functiegemaal.str.contains('Doorspoel'), 'func_circulatie'] = True\n", - "HD['gemaal'].loc[(HD['gemaal'].func_afvoer is False) &\n", - " (HD['gemaal'].func_aanvoer is False) &\n", - " (HD['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + "HD[\"gemaal\"].loc[HD[\"gemaal\"].functiegemaal.str.contains(\"f-|fvoer|nderbemaling\"), \"func_afvoer\"] = True\n", + "HD[\"gemaal\"].loc[HD[\"gemaal\"].functiegemaal.str.contains(\"anvoergemaal|pmaling\"), \"func_aanvoer\"] = True\n", + "HD[\"gemaal\"].loc[HD[\"gemaal\"].functiegemaal.str.contains(\"Doorspoel\"), \"func_circulatie\"] = True\n", + "HD[\"gemaal\"].loc[\n", + " (HD[\"gemaal\"].func_afvoer is False)\n", + " & (HD[\"gemaal\"].func_aanvoer is False)\n", + " & (HD[\"gemaal\"].func_circulatie is False),\n", + " \"func_afvoer\",\n", + "] = True # set to afvoergemaal is there the function is unknown" ] }, { @@ -135,55 +150,53 @@ "metadata": {}, "outputs": [], "source": [ - "#discard irrelevant data of HD HD, and create a uniform dataset compared to the other waterschappen\n", - "#Stuw\n", - "HD['stuw'] = HD['stuw'][['CODE', 'GLOBALID', 'geometry']]\n", - "HD['stuw'] = HD['stuw'].rename(columns={'CODE': 'code', 'GLOBALID': 'globalid'})\n", - "HD['stuw']['nen3610id'] = 'dummy_nen3610id_stuw_' + HD['stuw'].index.astype(str)\n", + "# discard irrelevant data of HD HD, and create a uniform dataset compared to the other waterschappen\n", + "# Stuw\n", + "HD[\"stuw\"] = HD[\"stuw\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", + "HD[\"stuw\"] = HD[\"stuw\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"})\n", + "HD[\"stuw\"][\"nen3610id\"] = \"dummy_nen3610id_stuw_\" + HD[\"stuw\"].index.astype(str)\n", "\n", - "#Gemaal\n", - "HD['gemaal'] = HD['gemaal'][['CODE', 'GLOBALID', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "HD['gemaal'] = HD['gemaal'].rename(columns={'GLOBALID': 'globalid',\n", - " 'CODE': 'code'})\n", - "HD['gemaal']['nen3610id'] = 'dummy_nen3610id_gemaal_' + HD['gemaal'].index.astype(str)\n", + "# Gemaal\n", + "HD[\"gemaal\"] = HD[\"gemaal\"][[\"CODE\", \"GLOBALID\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]]\n", + "HD[\"gemaal\"] = HD[\"gemaal\"].rename(columns={\"GLOBALID\": \"globalid\", \"CODE\": \"code\"})\n", + "HD[\"gemaal\"][\"nen3610id\"] = \"dummy_nen3610id_gemaal_\" + HD[\"gemaal\"].index.astype(str)\n", "\n", - "#Hydroobject\n", - "HD['hydroobject'] = HD['hydroobject'][['CODE', 'GLOBALID', 'geometry']]\n", - "HD['hydroobject'] = HD['hydroobject'].rename(columns={'GLOBALID': 'globalid',\n", - " 'CODE': 'code'})\n", - "HD['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + HD['hydroobject'].index.astype(str)\n", + "# Hydroobject\n", + "HD[\"hydroobject\"] = HD[\"hydroobject\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", + "HD[\"hydroobject\"] = HD[\"hydroobject\"].rename(columns={\"GLOBALID\": \"globalid\", \"CODE\": \"code\"})\n", + "HD[\"hydroobject\"][\"nen3610id\"] = \"dummy_nen3610id_hydroobject_\" + HD[\"hydroobject\"].index.astype(str)\n", "\n", - "#sluis\n", - "HD['sluis'] = HD['sluis'][['CODE', 'GLOBALID', 'geometry']]\n", - "HD['sluis'] = HD['sluis'].rename(columns={'GLOBALID': 'globalid'})\n", - "HD['sluis']['nen3610id'] = 'dummy_nen3610id_sluis_' + HD['sluis'].index.astype(str)\n", + "# sluis\n", + "HD[\"sluis\"] = HD[\"sluis\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", + "HD[\"sluis\"] = HD[\"sluis\"].rename(columns={\"GLOBALID\": \"globalid\"})\n", + "HD[\"sluis\"][\"nen3610id\"] = \"dummy_nen3610id_sluis_\" + HD[\"sluis\"].index.astype(str)\n", "\n", - "#duikersifonhevel\n", - "HD['duikersifonhevel'] = HD['duikersifonhevel'][['CODE', 'GLOBALID', 'geometry']]\n", - "HD['duikersifonhevel'] = HD['duikersifonhevel'].rename(columns={'CODE':'code', 'GLOBALID': 'globalid'})\n", - "HD['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + HD['duikersifonhevel'].index.astype(str)\n", + "# duikersifonhevel\n", + "HD[\"duikersifonhevel\"] = HD[\"duikersifonhevel\"][[\"CODE\", \"GLOBALID\", \"geometry\"]]\n", + "HD[\"duikersifonhevel\"] = HD[\"duikersifonhevel\"].rename(columns={\"CODE\": \"code\", \"GLOBALID\": \"globalid\"})\n", + "HD[\"duikersifonhevel\"][\"nen3610id\"] = \"dummy_nen3610id_duikersifonhevel_\" + HD[\"duikersifonhevel\"].index.astype(str)\n", "\n", - "#afsluitmiddel\n", - "HD['afsluitmiddel'] = HD['afsluitmiddel'][['CODE', 'geometry']]\n", - "HD['afsluitmiddel'] = HD['afsluitmiddel'].rename(columns={'CODE':'code'})\n", - "HD['afsluitmiddel']['nen3610id'] = 'dummy_nen3610id_afsluitmiddel_' + HD['afsluitmiddel'].index.astype(str)\n", - "HD['afsluitmiddel']['globalid'] = 'dummy_globalid_afsluitmiddel_' + HD['afsluitmiddel'].index.astype(str)\n", + "# afsluitmiddel\n", + "HD[\"afsluitmiddel\"] = HD[\"afsluitmiddel\"][[\"CODE\", \"geometry\"]]\n", + "HD[\"afsluitmiddel\"] = HD[\"afsluitmiddel\"].rename(columns={\"CODE\": \"code\"})\n", + "HD[\"afsluitmiddel\"][\"nen3610id\"] = \"dummy_nen3610id_afsluitmiddel_\" + HD[\"afsluitmiddel\"].index.astype(str)\n", + "HD[\"afsluitmiddel\"][\"globalid\"] = \"dummy_globalid_afsluitmiddel_\" + HD[\"afsluitmiddel\"].index.astype(str)\n", "\n", - "#Peilgebied\n", - "HD['peilgebied'] = HD['peilgebied'][['REKENPEIL_', 'NAAM_BEMAL', 'geometry']]\n", - "HD['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + HD['peilgebied'].index.astype(str)\n", - "HD['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + HD['peilgebied'].index.astype(str)\n", - "HD['peilgebied'] = HD['peilgebied'].rename(columns={'REKENPEIL_': 'streefpeil', 'NAAM_BEMAL':'code'})\n", + "# Peilgebied\n", + "HD[\"peilgebied\"] = HD[\"peilgebied\"][[\"REKENPEIL_\", \"NAAM_BEMAL\", \"geometry\"]]\n", + "HD[\"peilgebied\"][\"nen3610id\"] = \"dummy_nen3610id_peilgebied_\" + HD[\"peilgebied\"].index.astype(str)\n", + "HD[\"peilgebied\"][\"globalid\"] = \"dummy_globalid_peilgebied_\" + HD[\"peilgebied\"].index.astype(str)\n", + "HD[\"peilgebied\"] = HD[\"peilgebied\"].rename(columns={\"REKENPEIL_\": \"streefpeil\", \"NAAM_BEMAL\": \"code\"})\n", "\n", - "#Streefpeil\n", - "HD['streefpeil'] = pd.DataFrame()\n", - "HD['streefpeil']['waterhoogte'] = HD['peilgebied']['streefpeil']\n", - "HD['streefpeil']['globalid'] = HD['peilgebied']['globalid']\n", - "HD['streefpeil']['geometry'] = None\n", - "HD['streefpeil'] = gpd.GeoDataFrame(HD['streefpeil'], geometry = 'geometry')\n", + "# Streefpeil\n", + "HD[\"streefpeil\"] = pd.DataFrame()\n", + "HD[\"streefpeil\"][\"waterhoogte\"] = HD[\"peilgebied\"][\"streefpeil\"]\n", + "HD[\"streefpeil\"][\"globalid\"] = HD[\"peilgebied\"][\"globalid\"]\n", + "HD[\"streefpeil\"][\"geometry\"] = None\n", + "HD[\"streefpeil\"] = gpd.GeoDataFrame(HD[\"streefpeil\"], geometry=\"geometry\")\n", "\n", - "#Remove the streefpeil from the peilgebied\n", - "HD['peilgebied'] = HD['peilgebied'][['code', 'geometry', 'nen3610id', 'globalid']]" + "# Remove the streefpeil from the peilgebied\n", + "HD[\"peilgebied\"] = HD[\"peilgebied\"][[\"code\", \"geometry\", \"nen3610id\", \"globalid\"]]" ] }, { @@ -193,8 +206,8 @@ "metadata": {}, "outputs": [], "source": [ - "#delete irrelvant data\n", - "variables = ['peilgebiedpraktijk']\n", + "# delete irrelvant data\n", + "variables = [\"peilgebiedpraktijk\"]\n", "\n", "for variable in variables:\n", " if str(variable) in HD:\n", @@ -216,7 +229,7 @@ "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap = HD)" + "show_layers_and_columns(waterschap=HD)" ] }, { @@ -248,9 +261,8 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = HD, \n", - " output_gpkg_path = output_gpkg_path + '/HD')\n" + "\n", + "store_data(waterschap=HD, output_gpkg_path=output_gpkg_path + \"/HD\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb index 1230e05..c38d190 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "#import packages and functions\n", + "# import packages and functions\n", "import os\n", "\n", "import geopandas as gpd\n", @@ -33,7 +33,7 @@ "metadata": {}, "outputs": [], "source": [ - "pd.set_option('display.max_columns', None)" + "pd.set_option(\"display.max_columns\", None)" ] }, { @@ -43,10 +43,10 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'Rijnland'\n", - "path_Rijnland = '..\\..\\Data_preprocessed\\Waterschappen\\Rijnland\\DataRijnland\\DataRijnland.gpkg'\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Rijnland\"\n" + "# define relative paths\n", + "waterschap = \"Rijnland\"\n", + "path_Rijnland = \"..\\..\\Data_preprocessed\\Waterschappen\\Rijnland\\DataRijnland\\DataRijnland.gpkg\"\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Rijnland\"" ] }, { @@ -56,17 +56,20 @@ "metadata": {}, "outputs": [], "source": [ - "Rijnland = read_gpkg_layers(gpkg_path = path_Rijnland, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'afsluitmiddel',\n", - " 'duikersifonhevel',\n", - " 'hydroobject',\n", - " 'peilgebiedvigerend',\n", - " 'peilgebiedpraktijk',\n", - " 'peilafwijkinggebied',\n", - " 'streefpeil']) \n", - " " + "Rijnland = read_gpkg_layers(\n", + " gpkg_path=path_Rijnland,\n", + " variables=[\n", + " \"stuw\",\n", + " \"gemaal\",\n", + " \"afsluitmiddel\",\n", + " \"duikersifonhevel\",\n", + " \"hydroobject\",\n", + " \"peilgebiedvigerend\",\n", + " \"peilgebiedpraktijk\",\n", + " \"peilafwijkinggebied\",\n", + " \"streefpeil\",\n", + " ],\n", + ")" ] }, { @@ -85,9 +88,9 @@ "outputs": [], "source": [ "fig, ax = plt.subplots()\n", - "Rijnland['peilgebiedvigerend'].plot(ax=ax, color='blue')\n", - "Rijnland['peilgebiedpraktijk'].plot(ax=ax, color='orange')\n", - "Rijnland['peilafwijkinggebied'].plot(ax=ax, color='green')" + "Rijnland[\"peilgebiedvigerend\"].plot(ax=ax, color=\"blue\")\n", + "Rijnland[\"peilgebiedpraktijk\"].plot(ax=ax, color=\"orange\")\n", + "Rijnland[\"peilafwijkinggebied\"].plot(ax=ax, color=\"green\")" ] }, { @@ -97,14 +100,14 @@ "metadata": {}, "outputs": [], "source": [ - "Rijnland['stuw'] = Rijnland['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['gemaal'] = Rijnland['gemaal'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['afsluitmiddel'] = Rijnland['afsluitmiddel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['hydroobject'] = Rijnland['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['duikersifonhevel'] = Rijnland['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['peilgebiedpraktijk'] = Rijnland['peilgebiedpraktijk'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['peilafwijkinggebied'] = Rijnland['peilafwijkinggebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['peilgebiedvigerend'] = Rijnland['peilgebiedvigerend'][['code', 'nen3610id', 'globalid', 'geometry']]\n" + "Rijnland[\"stuw\"] = Rijnland[\"stuw\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "Rijnland[\"gemaal\"] = Rijnland[\"gemaal\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "Rijnland[\"afsluitmiddel\"] = Rijnland[\"afsluitmiddel\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "Rijnland[\"hydroobject\"] = Rijnland[\"hydroobject\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "Rijnland[\"duikersifonhevel\"] = Rijnland[\"duikersifonhevel\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "Rijnland[\"peilgebiedpraktijk\"] = Rijnland[\"peilgebiedpraktijk\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "Rijnland[\"peilafwijkinggebied\"] = Rijnland[\"peilafwijkinggebied\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "Rijnland[\"peilgebiedvigerend\"] = Rijnland[\"peilgebiedvigerend\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]" ] }, { @@ -114,10 +117,10 @@ "metadata": {}, "outputs": [], "source": [ - "#fix geometries\n", - "Rijnland['peilgebiedvigerend']['geometry'] = Rijnland['peilgebiedvigerend'].buffer(distance = 0)\n", - "Rijnland['peilgebiedpraktijk']['geometry'] = Rijnland['peilgebiedpraktijk'].buffer(distance = 0)\n", - "Rijnland['peilafwijkinggebied']['geometry'] = Rijnland['peilafwijkinggebied'].buffer(distance = 0)" + "# fix geometries\n", + "Rijnland[\"peilgebiedvigerend\"][\"geometry\"] = Rijnland[\"peilgebiedvigerend\"].buffer(distance=0)\n", + "Rijnland[\"peilgebiedpraktijk\"][\"geometry\"] = Rijnland[\"peilgebiedpraktijk\"].buffer(distance=0)\n", + "Rijnland[\"peilafwijkinggebied\"][\"geometry\"] = Rijnland[\"peilafwijkinggebied\"].buffer(distance=0)" ] }, { @@ -127,14 +130,14 @@ "metadata": {}, "outputs": [], "source": [ - "# peilgebied = burn_in_peilgebieden(base_layer = Rijnland['peilgebiedpraktijk'], \n", + "# peilgebied = burn_in_peilgebieden(base_layer = Rijnland['peilgebiedpraktijk'],\n", "# overlay_layer = Rijnland['peilafwijkinggebied'],\n", "# plot = True)\n", "# Rijnland['peilgebied'] = gpd.GeoDataFrame(peilgebied)\n", "\n", - "peilgebied = burn_in_peilgebieden(base_layer = Rijnland['peilgebiedvigerend'], \n", - " overlay_layer = Rijnland['peilgebiedpraktijk'],\n", - " plot = True)\n" + "peilgebied = burn_in_peilgebieden(\n", + " base_layer=Rijnland[\"peilgebiedvigerend\"], overlay_layer=Rijnland[\"peilgebiedpraktijk\"], plot=True\n", + ")" ] }, { @@ -145,9 +148,9 @@ "outputs": [], "source": [ "peilgebied = gpd.GeoDataFrame(peilgebied)\n", - "peilgebied = peilgebied[peilgebied.geometry.type.isin(['Polygon', 'MultiPolygon'])] #only select polygons\n", + "peilgebied = peilgebied[peilgebied.geometry.type.isin([\"Polygon\", \"MultiPolygon\"])] # only select polygons\n", "\n", - "Rijnland['peilgebied'] = gpd.GeoDataFrame(peilgebied)" + "Rijnland[\"peilgebied\"] = gpd.GeoDataFrame(peilgebied)" ] }, { @@ -157,7 +160,7 @@ "metadata": {}, "outputs": [], "source": [ - "gpd.GeoDataFrame(peilgebied).to_file('Rijnland_test_kan_weg.shp')\n", + "gpd.GeoDataFrame(peilgebied).to_file(\"Rijnland_test_kan_weg.shp\")\n", "# peilgebied" ] }, @@ -198,7 +201,7 @@ "metadata": {}, "outputs": [], "source": [ - "Rijnland['streefpeil'].peilgebiedpraktijkid.fillna(value=Rijnland['streefpeil']['peilgebiedvigerendid'], inplace=True)\n", + "Rijnland[\"streefpeil\"].peilgebiedpraktijkid.fillna(value=Rijnland[\"streefpeil\"][\"peilgebiedvigerendid\"], inplace=True)\n", "# Rijnland['streefpeil'].drop_duplicates(subset=['peilgebiedpraktijkid'], inplace=True)" ] }, @@ -209,12 +212,14 @@ "metadata": {}, "outputs": [], "source": [ - "#get rid of irrelevant streefpeilen, which otherwise results in too many overlapped peilgebieden\n", - "filter_condition = Rijnland['streefpeil']['soortstreefpeil'].isin(['omer', 'ondergrens']) #'omer' for all rows where something of zomer, Zomer, dynamische zomer, etc, is used\n", - "kept_rows = Rijnland['streefpeil'][filter_condition]\n", + "# get rid of irrelevant streefpeilen, which otherwise results in too many overlapped peilgebieden\n", + "filter_condition = Rijnland[\"streefpeil\"][\"soortstreefpeil\"].isin(\n", + " [\"omer\", \"ondergrens\"]\n", + ") #'omer' for all rows where something of zomer, Zomer, dynamische zomer, etc, is used\n", + "kept_rows = Rijnland[\"streefpeil\"][filter_condition]\n", "\n", - "other_rows = Rijnland['streefpeil'][~filter_condition].drop_duplicates(subset=['peilgebiedpraktijkid'])\n", - "Rijnland['streefpeil'] = pd.concat([kept_rows, other_rows])" + "other_rows = Rijnland[\"streefpeil\"][~filter_condition].drop_duplicates(subset=[\"peilgebiedpraktijkid\"])\n", + "Rijnland[\"streefpeil\"] = pd.concat([kept_rows, other_rows])" ] }, { @@ -227,13 +232,15 @@ "# Rijnland['streefpeil'].peilafwijkinggebiedid.fillna(value=Rijnland['streefpeil']['peilgebiedpraktijkid'], inplace=True)\n", "# Rijnland['streefpeil'].peilgebiedpraktijkid.fillna(value=Rijnland['streefpeil']['peilgebiedvigerendid'], inplace=True)\n", "\n", - "pg_sp = pd.merge(left = peilgebied,\n", - " right = Rijnland['streefpeil'],\n", - " left_on = 'globalid',\n", - " right_on = 'peilgebiedpraktijkid',\n", - " suffixes = ('', '_streefpeil'))\n", + "pg_sp = pd.merge(\n", + " left=peilgebied,\n", + " right=Rijnland[\"streefpeil\"],\n", + " left_on=\"globalid\",\n", + " right_on=\"peilgebiedpraktijkid\",\n", + " suffixes=(\"\", \"_streefpeil\"),\n", + ")\n", "\n", - "pg_sp['geometry'] = gpd.GeoDataFrame(geometry = pg_sp['geometry']).reset_index(drop=True)\n", + "pg_sp[\"geometry\"] = gpd.GeoDataFrame(geometry=pg_sp[\"geometry\"]).reset_index(drop=True)\n", "# pg_sp = pg_sp.explode('geometry',ignore_index=True)" ] }, @@ -254,15 +261,15 @@ "metadata": {}, "outputs": [], "source": [ - "#there are duplicate codes, nen3610ids and globalids due to the exploded function. Rename these.\n", - "pg_sp['nen3610id'] = 'dummy_nen3610id_peilgebied_' + pg_sp.index.astype(str)\n", - "pg_sp['code'] = 'dummy_code_peilgebied_' + pg_sp.index.astype(str)\n", - "pg_sp['globalid'] = 'dummy_globalid_peilgebied_' + pg_sp.index.astype(str)\n", + "# there are duplicate codes, nen3610ids and globalids due to the exploded function. Rename these.\n", + "pg_sp[\"nen3610id\"] = \"dummy_nen3610id_peilgebied_\" + pg_sp.index.astype(str)\n", + "pg_sp[\"code\"] = \"dummy_code_peilgebied_\" + pg_sp.index.astype(str)\n", + "pg_sp[\"globalid\"] = \"dummy_globalid_peilgebied_\" + pg_sp.index.astype(str)\n", "\n", - "Rijnland['peilgebied'] = pg_sp\n", - "Rijnland['peilgebied'] = Rijnland['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Rijnland['peilgebied'] = gpd.GeoDataFrame(Rijnland['peilgebied'], geometry = 'geometry')\n", - "Rijnland['peilgebied'] = Rijnland['peilgebied'].set_crs('EPSG:28992')" + "Rijnland[\"peilgebied\"] = pg_sp\n", + "Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "Rijnland[\"peilgebied\"] = gpd.GeoDataFrame(Rijnland[\"peilgebied\"], geometry=\"geometry\")\n", + "Rijnland[\"peilgebied\"] = Rijnland[\"peilgebied\"].set_crs(\"EPSG:28992\")" ] }, { @@ -272,11 +279,11 @@ "metadata": {}, "outputs": [], "source": [ - "streefpeil = pg_sp[['waterhoogte', 'globalid']]\n", + "streefpeil = pg_sp[[\"waterhoogte\", \"globalid\"]]\n", "\n", - "streefpeil['geometry'] = np.nan\n", + "streefpeil[\"geometry\"] = np.nan\n", "streefpeil = gpd.GeoDataFrame(streefpeil)\n", - "Rijnland['streefpeil'] = streefpeil" + "Rijnland[\"streefpeil\"] = streefpeil" ] }, { @@ -286,8 +293,8 @@ "metadata": {}, "outputs": [], "source": [ - "#delete irrelvant data\n", - "variables = ['peilgebiedpraktijk', 'peilgebiedvigerend', 'peilafwijkinggebied']\n", + "# delete irrelvant data\n", + "variables = [\"peilgebiedpraktijk\", \"peilgebiedvigerend\", \"peilafwijkinggebied\"]\n", "\n", "for variable in variables:\n", " if str(variable) in Rijnland:\n", @@ -301,7 +308,7 @@ "metadata": {}, "outputs": [], "source": [ - "Rijnland['peilgebied'].plot()" + "Rijnland[\"peilgebied\"].plot()" ] }, { @@ -319,7 +326,7 @@ "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap = Rijnland)" + "show_layers_and_columns(waterschap=Rijnland)" ] }, { @@ -349,9 +356,8 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = Rijnland, \n", - " output_gpkg_path = output_gpkg_path + '/Rijnland')\n" + "\n", + "store_data(waterschap=Rijnland, output_gpkg_path=output_gpkg_path + \"/Rijnland\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb index a181363..d424797 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb @@ -7,13 +7,13 @@ "metadata": {}, "outputs": [], "source": [ - "#import packages and functions\n", + "# import packages and functions\n", "import os\n", "\n", "import geopandas as gpd\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", - "import pandas as pd\n" + "import pandas as pd" ] }, { @@ -33,7 +33,7 @@ "metadata": {}, "outputs": [], "source": [ - "pd.set_option('display.max_columns', None)\n" + "pd.set_option(\"display.max_columns\", None)" ] }, { @@ -53,8 +53,8 @@ }, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'WSRL'\n", + "# define relative paths\n", + "waterschap = \"WSRL\"\n", "data_path = \"../../Data_preprocessed/Waterschappen/WSRL\"\n", "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/WSRL\"" ] @@ -66,28 +66,24 @@ "metadata": {}, "outputs": [], "source": [ - "#WSRL has delivered the data per catchment. Loop through each catchment, and concat all data to a single dictionary\n", + "# WSRL has delivered the data per catchment. Loop through each catchment, and concat all data to a single dictionary\n", "WSRL = {}\n", "\n", "for root, dirs, files in os.walk(data_path):\n", " for file in files:\n", - " if file.endswith('.gpkg'):\n", + " if file.endswith(\".gpkg\"):\n", " gpkg_path = os.path.join(root, file)\n", - " \n", + "\n", " if WSRL == {}:\n", - " WSRL = read_gpkg_layers(gpkg_path = gpkg_path,\n", - " variables = ['Stuw',\n", - " 'Gemaal',\n", - " 'Hydroobject',\n", - " 'Duikersifonhevel']) \n", + " WSRL = read_gpkg_layers(\n", + " gpkg_path=gpkg_path, variables=[\"Stuw\", \"Gemaal\", \"Hydroobject\", \"Duikersifonhevel\"]\n", + " )\n", " else:\n", - " temp_WSRL = read_gpkg_layers(gpkg_path = gpkg_path,\n", - " variables = ['Stuw',\n", - " 'Gemaal',\n", - " 'Hydroobject',\n", - " 'Duikersifonhevel']) \n", + " temp_WSRL = read_gpkg_layers(\n", + " gpkg_path=gpkg_path, variables=[\"Stuw\", \"Gemaal\", \"Hydroobject\", \"Duikersifonhevel\"]\n", + " )\n", " for variable in WSRL.keys():\n", - " WSRL[variable] = pd.concat([WSRL[variable], temp_WSRL[variable]]).reset_index(drop=True)\n" + " WSRL[variable] = pd.concat([WSRL[variable], temp_WSRL[variable]]).reset_index(drop=True)" ] }, { @@ -106,12 +102,11 @@ "outputs": [], "source": [ "gdb_path = r\"..\\..\\Data_preprocessed\\Waterschappen\\WSRL\\OverigeGegevens.gdb\"\n", - "WSRL_gdb = read_gpkg_layers(gpkg_path = gdb_path,\n", - " variables = ['PeilgebiedenPraktijk'])\n", + "WSRL_gdb = read_gpkg_layers(gpkg_path=gdb_path, variables=[\"PeilgebiedenPraktijk\"])\n", "\n", - "#add the gdb to the dict\n", + "# add the gdb to the dict\n", "# WSRL['peilgebiedafwijking'] = WSRL_gdb['Peilafwijkingen']\n", - "WSRL['peilgebiedpraktijk'] = WSRL_gdb['PeilgebiedenPraktijk']" + "WSRL[\"peilgebiedpraktijk\"] = WSRL_gdb[\"PeilgebiedenPraktijk\"]" ] }, { @@ -121,11 +116,11 @@ "metadata": {}, "outputs": [], "source": [ - "#change names\n", - "WSRL['stuw'] = WSRL.pop('Stuw')\n", - "WSRL['gemaal'] = WSRL.pop('Gemaal')\n", - "WSRL['hydroobject'] = WSRL.pop('Hydroobject')\n", - "WSRL['duikersifonhevel'] = WSRL.pop('Duikersifonhevel')" + "# change names\n", + "WSRL[\"stuw\"] = WSRL.pop(\"Stuw\")\n", + "WSRL[\"gemaal\"] = WSRL.pop(\"Gemaal\")\n", + "WSRL[\"hydroobject\"] = WSRL.pop(\"Hydroobject\")\n", + "WSRL[\"duikersifonhevel\"] = WSRL.pop(\"Duikersifonhevel\")" ] }, { @@ -143,21 +138,31 @@ "metadata": {}, "outputs": [], "source": [ - "#add gemaal information\n", - "WSRL['peilgebiedpraktijk']['waterhoogte'] = np.nan\n", - "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'seizoensgebonden', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'flexibel', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'natuurlijk', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'vast', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['VASTPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[WSRL['peilgebiedpraktijk']['TYPE_PEILBEHEER'] == 'streef', 'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['STREEFPEIL'], inplace=True)\n", + "# add gemaal information\n", + "WSRL[\"peilgebiedpraktijk\"][\"waterhoogte\"] = np.nan\n", + "WSRL[\"peilgebiedpraktijk\"].loc[\n", + " WSRL[\"peilgebiedpraktijk\"][\"TYPE_PEILBEHEER\"] == \"seizoensgebonden\", \"waterhoogte\"\n", + "].fillna(WSRL[\"peilgebiedpraktijk\"][\"ZOMERPEIL\"], inplace=True)\n", + "WSRL[\"peilgebiedpraktijk\"].loc[WSRL[\"peilgebiedpraktijk\"][\"TYPE_PEILBEHEER\"] == \"flexibel\", \"waterhoogte\"].fillna(\n", + " WSRL[\"peilgebiedpraktijk\"][\"ZOMERPEIL\"], inplace=True\n", + ")\n", + "WSRL[\"peilgebiedpraktijk\"].loc[WSRL[\"peilgebiedpraktijk\"][\"TYPE_PEILBEHEER\"] == \"natuurlijk\", \"waterhoogte\"].fillna(\n", + " WSRL[\"peilgebiedpraktijk\"][\"ZOMERPEIL\"], inplace=True\n", + ")\n", + "WSRL[\"peilgebiedpraktijk\"].loc[WSRL[\"peilgebiedpraktijk\"][\"TYPE_PEILBEHEER\"] == \"vast\", \"waterhoogte\"].fillna(\n", + " WSRL[\"peilgebiedpraktijk\"][\"VASTPEIL\"], inplace=True\n", + ")\n", + "WSRL[\"peilgebiedpraktijk\"].loc[WSRL[\"peilgebiedpraktijk\"][\"TYPE_PEILBEHEER\"] == \"streef\", \"waterhoogte\"].fillna(\n", + " WSRL[\"peilgebiedpraktijk\"][\"STREEFPEIL\"], inplace=True\n", + ")\n", "\n", - "#niet elke kolom is ingevuld met de paren die je zou verwachten. Vul voor de ontbrekende waarden de volgende waarden in:\n", - "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['STREEFPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['VASTPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['ZOMERPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['MIN_PEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['WINTERPEIL'], inplace=True)\n", - "WSRL['peilgebiedpraktijk'].loc[:,'waterhoogte'].fillna(WSRL['peilgebiedpraktijk']['MAX_PEIL'], inplace=True)\n" + "# niet elke kolom is ingevuld met de paren die je zou verwachten. Vul voor de ontbrekende waarden de volgende waarden in:\n", + "WSRL[\"peilgebiedpraktijk\"].loc[:, \"waterhoogte\"].fillna(WSRL[\"peilgebiedpraktijk\"][\"STREEFPEIL\"], inplace=True)\n", + "WSRL[\"peilgebiedpraktijk\"].loc[:, \"waterhoogte\"].fillna(WSRL[\"peilgebiedpraktijk\"][\"VASTPEIL\"], inplace=True)\n", + "WSRL[\"peilgebiedpraktijk\"].loc[:, \"waterhoogte\"].fillna(WSRL[\"peilgebiedpraktijk\"][\"ZOMERPEIL\"], inplace=True)\n", + "WSRL[\"peilgebiedpraktijk\"].loc[:, \"waterhoogte\"].fillna(WSRL[\"peilgebiedpraktijk\"][\"MIN_PEIL\"], inplace=True)\n", + "WSRL[\"peilgebiedpraktijk\"].loc[:, \"waterhoogte\"].fillna(WSRL[\"peilgebiedpraktijk\"][\"WINTERPEIL\"], inplace=True)\n", + "WSRL[\"peilgebiedpraktijk\"].loc[:, \"waterhoogte\"].fillna(WSRL[\"peilgebiedpraktijk\"][\"MAX_PEIL\"], inplace=True)" ] }, { @@ -167,18 +172,25 @@ "metadata": {}, "outputs": [], "source": [ - "#Add gemaal information\n", - "#determine aanvoer en afvoer gemalen\n", - "WSRL['gemaal']['func_aanvoer'], WSRL['gemaal']['func_afvoer'], WSRL['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "WSRL['gemaal']['functiegemaal'] = WSRL['gemaal']['naam'].astype(str) \n", + "# Add gemaal information\n", + "# determine aanvoer en afvoer gemalen\n", + "WSRL[\"gemaal\"][\"func_aanvoer\"], WSRL[\"gemaal\"][\"func_afvoer\"], WSRL[\"gemaal\"][\"func_circulatie\"] = (\n", + " False,\n", + " False,\n", + " False,\n", + ") # default is False\n", + "WSRL[\"gemaal\"][\"functiegemaal\"] = WSRL[\"gemaal\"][\"naam\"].astype(str)\n", "\n", "\n", - "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Afvoer|Onbekend|Af-|Onderbemaling'), 'func_afvoer'] = True\n", - "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Aanvoer|Opmaling'), 'func_aanvoer'] = True\n", - "WSRL['gemaal'].loc[WSRL['gemaal'].functiegemaal.str.contains('Doorspoelgemaal'), 'func_circulatie'] = True\n", - "WSRL['gemaal'].loc[(WSRL['gemaal'].func_afvoer is False) &\n", - " (WSRL['gemaal'].func_aanvoer is False) &\n", - " (WSRL['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + "WSRL[\"gemaal\"].loc[WSRL[\"gemaal\"].functiegemaal.str.contains(\"Afvoer|Onbekend|Af-|Onderbemaling\"), \"func_afvoer\"] = True\n", + "WSRL[\"gemaal\"].loc[WSRL[\"gemaal\"].functiegemaal.str.contains(\"Aanvoer|Opmaling\"), \"func_aanvoer\"] = True\n", + "WSRL[\"gemaal\"].loc[WSRL[\"gemaal\"].functiegemaal.str.contains(\"Doorspoelgemaal\"), \"func_circulatie\"] = True\n", + "WSRL[\"gemaal\"].loc[\n", + " (WSRL[\"gemaal\"].func_afvoer is False)\n", + " & (WSRL[\"gemaal\"].func_aanvoer is False)\n", + " & (WSRL[\"gemaal\"].func_circulatie is False),\n", + " \"func_afvoer\",\n", + "] = True # set to afvoergemaal is there the function is unknown" ] }, { @@ -190,11 +202,13 @@ }, "outputs": [], "source": [ - "#discard irrelevant data of WSRL, and create a uniform dataset compared to the other waterschappen\n", - "WSRL['stuw'] = WSRL['stuw'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "WSRL['gemaal'] = WSRL['gemaal'][['code', 'globalid', 'nen3610id', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "WSRL['hydroobject'] = WSRL['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "WSRL['duikersifonhevel'] = WSRL['duikersifonhevel'][['code', 'globalid', 'nen3610id', 'geometry']]\n" + "# discard irrelevant data of WSRL, and create a uniform dataset compared to the other waterschappen\n", + "WSRL[\"stuw\"] = WSRL[\"stuw\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", + "WSRL[\"gemaal\"] = WSRL[\"gemaal\"][\n", + " [\"code\", \"globalid\", \"nen3610id\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]\n", + "]\n", + "WSRL[\"hydroobject\"] = WSRL[\"hydroobject\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", + "WSRL[\"duikersifonhevel\"] = WSRL[\"duikersifonhevel\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]" ] }, { @@ -215,7 +229,7 @@ "outputs": [], "source": [ "fig, ax = plt.subplots()\n", - "WSRL['peilgebiedpraktijk'].plot(ax=ax, color='cornflowerblue', label = 'Peilgebiedpraktijk')\n", + "WSRL[\"peilgebiedpraktijk\"].plot(ax=ax, color=\"cornflowerblue\", label=\"Peilgebiedpraktijk\")\n", "# WSRL['peilgebiedafwijking'].plot(ax=ax, color='blue', label = 'Peilgebiedafwijking')\n", "ax.legend()\n", "plt.show()" @@ -232,39 +246,44 @@ " \"\"\"\n", " Conduct spatial intersection using spatial index for candidates GeoDataFrame to make queries faster.\n", "\n", - " Note, with this function, you can have multiple Polygons in the 'intersecting_gdf' and it will return all the points \n", + " Note, with this function, you can have multiple Polygons in the 'intersecting_gdf' and it will return all the points\n", " intersect with ANY of those geometries.\n", " \"\"\"\n", " peilgebied_praktijk_sindex = peilgebied_praktijk.sindex\n", " possible_matches_index = []\n", - " \n", + "\n", " # 'itertuples()' function is a faster version of 'iterrows()'\n", " for other in peilgebied_afwijking.itertuples():\n", " bounds = other.geometry.bounds\n", " c = list(peilgebied_praktijk_sindex.intersection(bounds))\n", " possible_matches_index += c\n", - " \n", + "\n", " # Get unique candidates\n", " unique_candidate_matches = list(set(possible_matches_index))\n", " possible_matches = peilgebied_praktijk.iloc[unique_candidate_matches]\n", "\n", " # Conduct the actual intersect\n", - " overlapping_pg_praktijk = possible_matches.loc[possible_matches.intersects(peilgebied_afwijking.unary_union)] #the entire peilgebied praktijk polygons\n", - " \n", - " #remove the peilgebied afwijking from the peilgebied praktijk\n", - " intersection = gpd.overlay(overlapping_pg_praktijk, peilgebied_afwijking, how='intersection')\n", - " overlapping_updated = gpd.overlay(peilgebied_praktijk, intersection, how='symmetric_difference') #check of het difference of symmetrical difference moet zijn!#remove the difference between pg_praktijk and pg_afwijking\n", - " peilgebied = overlapping_updated.append(intersection, ignore_index=True) #add the removed difference, but now only the intersected part of pg_afwijking\n", + " overlapping_pg_praktijk = possible_matches.loc[\n", + " possible_matches.intersects(peilgebied_afwijking.unary_union)\n", + " ] # the entire peilgebied praktijk polygons\n", + "\n", + " # remove the peilgebied afwijking from the peilgebied praktijk\n", + " intersection = gpd.overlay(overlapping_pg_praktijk, peilgebied_afwijking, how=\"intersection\")\n", + " overlapping_updated = gpd.overlay(\n", + " peilgebied_praktijk, intersection, how=\"symmetric_difference\"\n", + " ) # check of het difference of symmetrical difference moet zijn!#remove the difference between pg_praktijk and pg_afwijking\n", + " peilgebied = overlapping_updated.append(\n", + " intersection, ignore_index=True\n", + " ) # add the removed difference, but now only the intersected part of pg_afwijking\n", "\n", - " \n", " if check:\n", - " peilgebied_praktijk.to_file('Checks/Rivierenland/peilgebied_praktijk.gpkg', driver='GPKG')\n", - " peilgebied_afwijking.to_file('Checks/Rivierenland/peilgebied_afwijking.gpkg', driver='GPKG')\n", + " peilgebied_praktijk.to_file(\"Checks/Rivierenland/peilgebied_praktijk.gpkg\", driver=\"GPKG\")\n", + " peilgebied_afwijking.to_file(\"Checks/Rivierenland/peilgebied_afwijking.gpkg\", driver=\"GPKG\")\n", + "\n", + " intersection.to_file(\"Checks/Rivierenland/intersection.gpkg\", driver=\"GPKG\")\n", + " overlapping_updated.to_file(\"Checks/Rivierenland/overlapping_updated.gpkg\", driver=\"GPKG\")\n", + " peilgebied.to_file(\"Checks/Rivierenland/peilgebied.gpkg\", driver=\"GPKG\")\n", "\n", - " intersection.to_file('Checks/Rivierenland/intersection.gpkg', driver='GPKG')\n", - " overlapping_updated.to_file('Checks/Rivierenland/overlapping_updated.gpkg', driver='GPKG')\n", - " peilgebied.to_file('Checks/Rivierenland/peilgebied.gpkg', driver='GPKG')\n", - " \n", " return peilgebied" ] }, @@ -275,10 +294,10 @@ "metadata": {}, "outputs": [], "source": [ - "# peilgebied = intersect_using_spatial_index(peilgebied_praktijk = WSRL['peilgebiedpraktijk'], \n", + "# peilgebied = intersect_using_spatial_index(peilgebied_praktijk = WSRL['peilgebiedpraktijk'],\n", "# peilgebied_afwijking = WSRL['peilgebiedafwijking'],\n", "# check = False)\n", - "peilgebied = WSRL['peilgebiedpraktijk']" + "peilgebied = WSRL[\"peilgebiedpraktijk\"]" ] }, { @@ -293,7 +312,7 @@ "\n", "# for fill_column in ['ZOMERPEIL', 'STREEFPEIL', 'VASTPEIL', 'MAX_PEIL', 'MIN_PEIL', 'WINTERPEIL']:\n", "# peilgebied.waterhoogte.fillna(value = peilgebied[fill_column], inplace=True)\n", - " \n", + "\n", "# WSRL['peilgebiedpraktijk'].waterhoogte.fillna(value=WSRL['peilgebiedpraktijk'][['ZOMERPEIL', 'STREEFPEIL', 'VASTPEIL', 'MAX_PEIL', 'MIN_PEIL']])" ] }, @@ -304,7 +323,7 @@ "metadata": {}, "outputs": [], "source": [ - "#store the ontbrekende_streefpeilen to a gpkg, check validity\n", + "# store the ontbrekende_streefpeilen to a gpkg, check validity\n", "ontbrekende_streefpeilen = peilgebied[peilgebied.waterhoogte.isna()]\n", "# ontbrekende_streefpeilen.to_file('Checks/Rivierenland/peilgebieden_zonder_streefpeil.gpkg', driver='GPKG')\n", "peilgebied.plot()" @@ -317,26 +336,26 @@ "metadata": {}, "outputs": [], "source": [ - "peilgebied['CODE_0'] = peilgebied.CODE #change names for later purposes\n", + "peilgebied[\"CODE_0\"] = peilgebied.CODE # change names for later purposes\n", "peilgebied.CODE = np.nan\n", "\n", - "#add and fill the final columns\n", - "columns_to_check = ['CODE_0']\n", + "# add and fill the final columns\n", + "columns_to_check = [\"CODE_0\"]\n", "\n", - "for fill_column in ['CODE_0']:\n", - " peilgebied.CODE.fillna(value = peilgebied[fill_column], inplace=True)\n", + "for fill_column in [\"CODE_0\"]:\n", + " peilgebied.CODE.fillna(value=peilgebied[fill_column], inplace=True)\n", "\n", - "peilgebied['globalid'] = peilgebied.index.astype(str)\n", - "peilgebied['nen3610id'] = 'dummy_nen3610id_peilgebied_' + peilgebied.index.astype(str)\n", + "peilgebied[\"globalid\"] = peilgebied.index.astype(str)\n", + "peilgebied[\"nen3610id\"] = \"dummy_nen3610id_peilgebied_\" + peilgebied.index.astype(str)\n", "\n", - "#create streefpeil key\n", - "WSRL['streefpeil'] = peilgebied[['waterhoogte', 'globalid']]\n", - "WSRL['streefpeil']['geometry'] = np.nan\n", - "WSRL['streefpeil'] = gpd.GeoDataFrame(WSRL['streefpeil'])\n", + "# create streefpeil key\n", + "WSRL[\"streefpeil\"] = peilgebied[[\"waterhoogte\", \"globalid\"]]\n", + "WSRL[\"streefpeil\"][\"geometry\"] = np.nan\n", + "WSRL[\"streefpeil\"] = gpd.GeoDataFrame(WSRL[\"streefpeil\"])\n", "\n", - "#only select the relevant columns\n", - "peilgebied = peilgebied[['CODE', 'globalid', 'nen3610id', 'geometry']]\n", - "WSRL['peilgebied'] = peilgebied #add to the dict" + "# only select the relevant columns\n", + "peilgebied = peilgebied[[\"CODE\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", + "WSRL[\"peilgebied\"] = peilgebied # add to the dict" ] }, { @@ -346,8 +365,8 @@ "metadata": {}, "outputs": [], "source": [ - "#discard irrelvant data\n", - "variables = ['peilgebiedpraktijk','peilgebiedafwijking']\n", + "# discard irrelvant data\n", + "variables = [\"peilgebiedpraktijk\", \"peilgebiedafwijking\"]\n", "\n", "for variable in variables:\n", " if str(variable) in WSRL:\n", @@ -369,7 +388,7 @@ "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap = WSRL)" + "show_layers_and_columns(waterschap=WSRL)" ] }, { @@ -399,9 +418,8 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = WSRL, \n", - " output_gpkg_path = output_gpkg_path + '/WSRL')\n" + "\n", + "store_data(waterschap=WSRL, output_gpkg_path=output_gpkg_path + \"/WSRL\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb index 5e0437c..28306f5 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "#import packages and functions\n", + "# import packages and functions\n", "import os\n", "\n", "import geopandas as gpd\n", @@ -32,7 +32,7 @@ "metadata": {}, "outputs": [], "source": [ - "pd.set_option('display.max_columns', None)" + "pd.set_option(\"display.max_columns\", None)" ] }, { @@ -42,10 +42,10 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'Scheldestromen'\n", - "path_Scheldestromen = '..\\..\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Scheldestromen.gpkg'\n", - "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Scheldestromen\"\n" + "# define relative paths\n", + "waterschap = \"Scheldestromen\"\n", + "path_Scheldestromen = \"..\\..\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Scheldestromen.gpkg\"\n", + "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Scheldestromen\"" ] }, { @@ -55,21 +55,26 @@ "metadata": {}, "outputs": [], "source": [ - "Scheldestromen = read_gpkg_layers(gpkg_path = path_Scheldestromen, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " # 'afsluitmiddel',\n", - " 'duikersifonhevel',\n", - " 'hydroobject',\n", - " # 'peilgebiedvigerend',\n", - " # 'peilgebiedpraktijk',\n", - " # 'peilafwijkinggebied',\n", - " # 'streefpeil',\n", - " ],\n", - " engine = 'pyogrio') \n", - " \n", - "#the peilgebieden and streefpeilen do not contain overlapping values. Scheldestromen has delivered additional files as shapes\n", - "Scheldestromen['peilgebied'] = gpd.read_file('..\\..\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Praktijkpeilgebieden_20231204.shp')" + "Scheldestromen = read_gpkg_layers(\n", + " gpkg_path=path_Scheldestromen,\n", + " variables=[\n", + " \"stuw\",\n", + " \"gemaal\",\n", + " # 'afsluitmiddel',\n", + " \"duikersifonhevel\",\n", + " \"hydroobject\",\n", + " # 'peilgebiedvigerend',\n", + " # 'peilgebiedpraktijk',\n", + " # 'peilafwijkinggebied',\n", + " # 'streefpeil',\n", + " ],\n", + " engine=\"pyogrio\",\n", + ")\n", + "\n", + "# the peilgebieden and streefpeilen do not contain overlapping values. Scheldestromen has delivered additional files as shapes\n", + "Scheldestromen[\"peilgebied\"] = gpd.read_file(\n", + " \"..\\..\\Data_preprocessed\\Waterschappen\\Scheldestromen\\Praktijkpeilgebieden_20231204.shp\"\n", + ")" ] }, { @@ -79,18 +84,20 @@ "metadata": {}, "outputs": [], "source": [ - "Scheldestromen['peilgebied']['code'] = Scheldestromen['peilgebied']['GPGIDENT']\n", - "Scheldestromen['peilgebied']['globalid'] = Scheldestromen['peilgebied']['GLOBALID'] \n", - "Scheldestromen['peilgebied']['waterhoogte'] = Scheldestromen['peilgebied']['GPGZP'] \n", - "Scheldestromen['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + Scheldestromen['peilgebied'].index.astype(str)\n", + "Scheldestromen[\"peilgebied\"][\"code\"] = Scheldestromen[\"peilgebied\"][\"GPGIDENT\"]\n", + "Scheldestromen[\"peilgebied\"][\"globalid\"] = Scheldestromen[\"peilgebied\"][\"GLOBALID\"]\n", + "Scheldestromen[\"peilgebied\"][\"waterhoogte\"] = Scheldestromen[\"peilgebied\"][\"GPGZP\"]\n", + "Scheldestromen[\"peilgebied\"][\"nen3610id\"] = \"dummy_nen3610id_peilgebied_\" + Scheldestromen[\"peilgebied\"].index.astype(\n", + " str\n", + ")\n", "\n", - "Scheldestromen['streefpeil'] = gpd.GeoDataFrame()\n", - "Scheldestromen['streefpeil']['waterhoogte'] = Scheldestromen['peilgebied']['waterhoogte']\n", - "Scheldestromen['streefpeil']['globalid'] = Scheldestromen['peilgebied']['globalid']\n", - "Scheldestromen['streefpeil']['geometry'] = np.nan\n", + "Scheldestromen[\"streefpeil\"] = gpd.GeoDataFrame()\n", + "Scheldestromen[\"streefpeil\"][\"waterhoogte\"] = Scheldestromen[\"peilgebied\"][\"waterhoogte\"]\n", + "Scheldestromen[\"streefpeil\"][\"globalid\"] = Scheldestromen[\"peilgebied\"][\"globalid\"]\n", + "Scheldestromen[\"streefpeil\"][\"geometry\"] = np.nan\n", "\n", "\n", - "Scheldestromen['peilgebied'] = Scheldestromen['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]" + "Scheldestromen[\"peilgebied\"] = Scheldestromen[\"peilgebied\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]" ] }, { @@ -100,9 +107,9 @@ "metadata": {}, "outputs": [], "source": [ - "#convert multiz points to points\n", - "Scheldestromen['stuw'].geometry = Scheldestromen['stuw'].centroid\n", - "Scheldestromen['gemaal'].geometry = Scheldestromen['gemaal'].centroid\n" + "# convert multiz points to points\n", + "Scheldestromen[\"stuw\"].geometry = Scheldestromen[\"stuw\"].centroid\n", + "Scheldestromen[\"gemaal\"].geometry = Scheldestromen[\"gemaal\"].centroid" ] }, { @@ -120,19 +127,19 @@ "metadata": {}, "outputs": [], "source": [ - "#stuw\n", - "Scheldestromen['stuw'] = Scheldestromen['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "# stuw\n", + "Scheldestromen[\"stuw\"] = Scheldestromen[\"stuw\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", "\n", - "#gemaal\n", - "Scheldestromen['gemaal'] = Scheldestromen['gemaal'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Scheldestromen['gemaal']['code'] = 'dummy_code_gemaal_' + Scheldestromen['gemaal'].index.astype(str)\n", + "# gemaal\n", + "Scheldestromen[\"gemaal\"] = Scheldestromen[\"gemaal\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "Scheldestromen[\"gemaal\"][\"code\"] = \"dummy_code_gemaal_\" + Scheldestromen[\"gemaal\"].index.astype(str)\n", "\n", - "#hydroobject\n", - "Scheldestromen['hydroobject']['code'] = Scheldestromen['hydroobject']['naam']\n", - "Scheldestromen['hydroobject'] = Scheldestromen['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "# hydroobject\n", + "Scheldestromen[\"hydroobject\"][\"code\"] = Scheldestromen[\"hydroobject\"][\"naam\"]\n", + "Scheldestromen[\"hydroobject\"] = Scheldestromen[\"hydroobject\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", "\n", - "#duikersifonhevel\n", - "Scheldestromen['duikersifonhevel'] = Scheldestromen['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n" + "# duikersifonhevel\n", + "Scheldestromen[\"duikersifonhevel\"] = Scheldestromen[\"duikersifonhevel\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]" ] }, { @@ -155,10 +162,10 @@ "metadata": {}, "outputs": [], "source": [ - "Scheldestromen['stuw'] = Scheldestromen['stuw'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Scheldestromen['gemaal'] = Scheldestromen['gemaal'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Scheldestromen['hydroobject'] = Scheldestromen['hydroobject'][['code', 'nen3610id', 'globalid', 'geometry']]\n", - "Scheldestromen['duikersifonhevel'] = Scheldestromen['duikersifonhevel'][['code', 'nen3610id', 'globalid', 'geometry']]\n" + "Scheldestromen[\"stuw\"] = Scheldestromen[\"stuw\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "Scheldestromen[\"gemaal\"] = Scheldestromen[\"gemaal\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "Scheldestromen[\"hydroobject\"] = Scheldestromen[\"hydroobject\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", + "Scheldestromen[\"duikersifonhevel\"] = Scheldestromen[\"duikersifonhevel\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]" ] }, { @@ -217,8 +224,8 @@ "metadata": {}, "outputs": [], "source": [ - "#delete irrelvant data\n", - "variables = ['peilgebiedpraktijk', 'peilgebiedvigerend', 'peilafwijkinggebied']\n", + "# delete irrelvant data\n", + "variables = [\"peilgebiedpraktijk\", \"peilgebiedvigerend\", \"peilafwijkinggebied\"]\n", "\n", "for variable in variables:\n", " if str(variable) in Scheldestromen:\n", @@ -240,7 +247,7 @@ "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap = Scheldestromen)" + "show_layers_and_columns(waterschap=Scheldestromen)" ] }, { @@ -250,9 +257,9 @@ "metadata": {}, "outputs": [], "source": [ - "for i in range(len(Scheldestromen['peilgebied'])): \n", - " if Scheldestromen['peilgebied']['geometry'].at[i].geom_type == 'Polygon':\n", - " Scheldestromen['peilgebied'].loc[i, 'geometry'].plot()" + "for i in range(len(Scheldestromen[\"peilgebied\"])):\n", + " if Scheldestromen[\"peilgebied\"][\"geometry\"].at[i].geom_type == \"Polygon\":\n", + " Scheldestromen[\"peilgebied\"].loc[i, \"geometry\"].plot()" ] }, { @@ -262,11 +269,9 @@ "metadata": {}, "outputs": [], "source": [ - "merged = pd.merge(left = Scheldestromen['peilgebied'],\n", - " right = Scheldestromen['streefpeil'],\n", - " on = 'globalid')\n", + "merged = pd.merge(left=Scheldestromen[\"peilgebied\"], right=Scheldestromen[\"streefpeil\"], on=\"globalid\")\n", "\n", - "merged[merged.waterhoogte.isna()]\n" + "merged[merged.waterhoogte.isna()]" ] }, { @@ -288,9 +293,8 @@ "if not os.path.exists(output_gpkg_path):\n", " # If it doesn't exist, create it\n", " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = Scheldestromen, \n", - " output_gpkg_path = output_gpkg_path + '/Scheldestromen')\n" + "\n", + "store_data(waterschap=Scheldestromen, output_gpkg_path=output_gpkg_path + \"/Scheldestromen\")" ] }, { @@ -306,7 +310,7 @@ "metadata": {}, "outputs": [], "source": [ - "Scheldestromen['hydroobject']" + "Scheldestromen[\"hydroobject\"]" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb index 6467fb2..eeb3f2f 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb @@ -7,12 +7,12 @@ "metadata": {}, "outputs": [], "source": [ - "#import packages and functions\n", + "# import packages and functions\n", "import geopandas as gpd\n", "import pandas as pd\n", "from general_functions import *\n", "\n", - "pd.set_option('display.max_columns', None)\n" + "pd.set_option(\"display.max_columns\", None)" ] }, { @@ -44,30 +44,26 @@ "metadata": {}, "outputs": [], "source": [ - "# Duikersifonhevel and hydroobject have a type of multicurvedZ, the peilgebieden a MultiSurfaceZ, which geopandas can not handle. I have manually \n", + "# Duikersifonhevel and hydroobject have a type of multicurvedZ, the peilgebieden a MultiSurfaceZ, which geopandas can not handle. I have manually\n", "# exported these to single shapes, which automatically converts it to regular MultiStrings. Then these layers have been packed together to a\n", - "# geopackage again. \n", + "# geopackage again.\n", "\n", - "#retrieve the data\n", - "Wetterskip = read_gpkg_layers(gpkg_path = gpkg_path_Wetterskip, \n", - " variables = ['stuw', \n", - " 'gemaal', \n", - " 'afsluitmiddel',\n", - " 'hydroobject',\n", - " 'duikersifonhevel'],\n", - " # 'peilmerk',\n", - " # 'streefpeil',\n", - " # 'peilgebiedpraktijk', \n", - " # 'peilgebiedvigerend',\n", - " # 'peilbesluitgebied'],\n", - " print_var = False)\n", + "# retrieve the data\n", + "Wetterskip = read_gpkg_layers(\n", + " gpkg_path=gpkg_path_Wetterskip,\n", + " variables=[\"stuw\", \"gemaal\", \"afsluitmiddel\", \"hydroobject\", \"duikersifonhevel\"],\n", + " # 'peilmerk',\n", + " # 'streefpeil',\n", + " # 'peilgebiedpraktijk',\n", + " # 'peilgebiedvigerend',\n", + " # 'peilbesluitgebied'],\n", + " print_var=False,\n", + ")\n", "\n", - "#The peilgebieden en streefpeilen have been delivered as additional data\n", - "peilgebiedpraktijk = gpd.read_file(peilgebiedpraktijk_path,\n", - " layer = 'DAMO_W_PeilgebiedPraktijk')\n", + "# The peilgebieden en streefpeilen have been delivered as additional data\n", + "peilgebiedpraktijk = gpd.read_file(peilgebiedpraktijk_path, layer=\"DAMO_W_PeilgebiedPraktijk\")\n", "\n", - "streefpeil = gpd.read_file(streefpeil_path,\n", - " layer = 'DAMO_W_Streefpeil')\n" + "streefpeil = gpd.read_file(streefpeil_path, layer=\"DAMO_W_Streefpeil\")" ] }, { @@ -77,14 +73,11 @@ "metadata": {}, "outputs": [], "source": [ - "#merge the streefpeil and the peilgebieden\n", - "peilgebied = pd.merge(left = streefpeil,\n", - " right = peilgebiedpraktijk,\n", - " left_on = 'PEILGEBIEDPRAKTIJKID',\n", - " right_on = 'GLOBALID')\n", + "# merge the streefpeil and the peilgebieden\n", + "peilgebied = pd.merge(left=streefpeil, right=peilgebiedpraktijk, left_on=\"PEILGEBIEDPRAKTIJKID\", right_on=\"GLOBALID\")\n", "\n", - "peilgebied = gpd.GeoDataFrame(peilgebied, geometry = 'geometry_y', crs='EPSG:28992')\n", - "peilgebied.reset_index(drop=True, inplace = True)\n", + "peilgebied = gpd.GeoDataFrame(peilgebied, geometry=\"geometry_y\", crs=\"EPSG:28992\")\n", + "peilgebied.reset_index(drop=True, inplace=True)\n", "peilgebied.plot()" ] }, @@ -95,7 +88,7 @@ "metadata": {}, "outputs": [], "source": [ - "peilgebied = peilgebied.explode(ignore_index = True, index_parts=False)\n", + "peilgebied = peilgebied.explode(ignore_index=True, index_parts=False)\n", "# peilgebied" ] }, @@ -106,24 +99,28 @@ "metadata": {}, "outputs": [], "source": [ - "Wetterskip['peilgebied'] = peilgebied[['WATERHOOGTE', 'nen3610id_y', 'GLOBALID_y', 'geometry_y']]\n", - "Wetterskip['peilgebied'] = Wetterskip['peilgebied'].rename(columns = {'WATERHOOGTE':'waterhoogte',\n", - " 'nen3610id_y':'nen3610id',\n", - " 'GLOBALID_y':'globalid',\n", - " 'geometry_y':'geometry'})\n", + "Wetterskip[\"peilgebied\"] = peilgebied[[\"WATERHOOGTE\", \"nen3610id_y\", \"GLOBALID_y\", \"geometry_y\"]]\n", + "Wetterskip[\"peilgebied\"] = Wetterskip[\"peilgebied\"].rename(\n", + " columns={\n", + " \"WATERHOOGTE\": \"waterhoogte\",\n", + " \"nen3610id_y\": \"nen3610id\",\n", + " \"GLOBALID_y\": \"globalid\",\n", + " \"geometry_y\": \"geometry\",\n", + " }\n", + ")\n", "\n", - "#give new globalids and codes, as the peilgebied.explode() results in non unique values.\n", - "Wetterskip['peilgebied']['code'] = 'dummy_code_peilgebied_' + Wetterskip['peilgebied'].index.astype(str)\n", - "Wetterskip['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Wetterskip['peilgebied'].index.astype(str)\n", + "# give new globalids and codes, as the peilgebied.explode() results in non unique values.\n", + "Wetterskip[\"peilgebied\"][\"code\"] = \"dummy_code_peilgebied_\" + Wetterskip[\"peilgebied\"].index.astype(str)\n", + "Wetterskip[\"peilgebied\"][\"globalid\"] = \"dummy_globalid_peilgebied_\" + Wetterskip[\"peilgebied\"].index.astype(str)\n", "\n", - "#create the streefpeilen layer\n", - "Wetterskip['streefpeil'] = Wetterskip['peilgebied'][['waterhoogte', 'globalid', 'geometry']]\n", - "Wetterskip['peilgebied'] = Wetterskip['peilgebied'][['code', 'nen3610id', 'globalid', 'geometry']]\n", + "# create the streefpeilen layer\n", + "Wetterskip[\"streefpeil\"] = Wetterskip[\"peilgebied\"][[\"waterhoogte\", \"globalid\", \"geometry\"]]\n", + "Wetterskip[\"peilgebied\"] = Wetterskip[\"peilgebied\"][[\"code\", \"nen3610id\", \"globalid\", \"geometry\"]]\n", "\n", - "Wetterskip['streefpeil']['geometry'] = None\n", + "Wetterskip[\"streefpeil\"][\"geometry\"] = None\n", "\n", - "Wetterskip['streefpeil'] = gpd.GeoDataFrame(Wetterskip['streefpeil'], geometry='geometry', crs='EPSG:28992')\n", - "Wetterskip['peilgebied'] = gpd.GeoDataFrame(Wetterskip['peilgebied'], geometry='geometry', crs='EPSG:28992')\n" + "Wetterskip[\"streefpeil\"] = gpd.GeoDataFrame(Wetterskip[\"streefpeil\"], geometry=\"geometry\", crs=\"EPSG:28992\")\n", + "Wetterskip[\"peilgebied\"] = gpd.GeoDataFrame(Wetterskip[\"peilgebied\"], geometry=\"geometry\", crs=\"EPSG:28992\")" ] }, { @@ -133,10 +130,12 @@ "metadata": {}, "outputs": [], "source": [ - "Wetterskip['stuw']['geometry'] = Wetterskip['stuw'].centroid #prevent strange geometries\n", - "Wetterskip['gemaal']['geometry'] = Wetterskip['gemaal'].centroid #prevent strange geometries\n", + "Wetterskip[\"stuw\"][\"geometry\"] = Wetterskip[\"stuw\"].centroid # prevent strange geometries\n", + "Wetterskip[\"gemaal\"][\"geometry\"] = Wetterskip[\"gemaal\"].centroid # prevent strange geometries\n", "\n", - "Wetterskip['hydroobject'] = Wetterskip['hydroobject'].loc[Wetterskip['hydroobject'].categorieo == 'primair'] #feedback WS Fryslan: only use primaire hydroobjecten" + "Wetterskip[\"hydroobject\"] = Wetterskip[\"hydroobject\"].loc[\n", + " Wetterskip[\"hydroobject\"].categorieo == \"primair\"\n", + "] # feedback WS Fryslan: only use primaire hydroobjecten" ] }, { @@ -146,16 +145,25 @@ "metadata": {}, "outputs": [], "source": [ - "#determine aanvoer en afvoer gemalen\n", - "Wetterskip['gemaal']['func_aanvoer'], Wetterskip['gemaal']['func_afvoer'], Wetterskip['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "Wetterskip['gemaal']['functiegemaal'] = Wetterskip['gemaal']['functiegemaal'].astype(str) \n", + "# determine aanvoer en afvoer gemalen\n", + "Wetterskip[\"gemaal\"][\"func_aanvoer\"], Wetterskip[\"gemaal\"][\"func_afvoer\"], Wetterskip[\"gemaal\"][\"func_circulatie\"] = (\n", + " False,\n", + " False,\n", + " False,\n", + ") # default is False\n", + "Wetterskip[\"gemaal\"][\"functiegemaal\"] = Wetterskip[\"gemaal\"][\"functiegemaal\"].astype(str)\n", "\n", - "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Onbekend|Onderbemaling|Afvoergemaal'), 'func_afvoer'] = True\n", - "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Opmaling|Aanvoer'), 'func_aanvoer'] = True\n", - "Wetterskip['gemaal'].loc[Wetterskip['gemaal'].functiegemaal.str.contains('Overig|circulatie'), 'func_circulatie'] = True\n", - "Wetterskip['gemaal'].loc[(Wetterskip['gemaal'].func_afvoer is False) &\n", - " (Wetterskip['gemaal'].func_aanvoer is False) &\n", - " (Wetterskip['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown\n" + "Wetterskip[\"gemaal\"].loc[\n", + " Wetterskip[\"gemaal\"].functiegemaal.str.contains(\"Onbekend|Onderbemaling|Afvoergemaal\"), \"func_afvoer\"\n", + "] = True\n", + "Wetterskip[\"gemaal\"].loc[Wetterskip[\"gemaal\"].functiegemaal.str.contains(\"Opmaling|Aanvoer\"), \"func_aanvoer\"] = True\n", + "Wetterskip[\"gemaal\"].loc[Wetterskip[\"gemaal\"].functiegemaal.str.contains(\"Overig|circulatie\"), \"func_circulatie\"] = True\n", + "Wetterskip[\"gemaal\"].loc[\n", + " (Wetterskip[\"gemaal\"].func_afvoer is False)\n", + " & (Wetterskip[\"gemaal\"].func_aanvoer is False)\n", + " & (Wetterskip[\"gemaal\"].func_circulatie is False),\n", + " \"func_afvoer\",\n", + "] = True # set to afvoergemaal is there the function is unknown" ] }, { @@ -165,14 +173,16 @@ "metadata": {}, "outputs": [], "source": [ - "#points\n", - "Wetterskip['stuw'] = Wetterskip['stuw'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "Wetterskip['gemaal'] = Wetterskip['gemaal'][['code', 'globalid', 'nen3610id', 'func_afvoer', 'func_aanvoer', 'func_circulatie', 'geometry']]\n", - "Wetterskip['afsluitmiddel'] = Wetterskip['afsluitmiddel'][['code', 'globalid', 'nen3610id', 'geometry']]\n", + "# points\n", + "Wetterskip[\"stuw\"] = Wetterskip[\"stuw\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", + "Wetterskip[\"gemaal\"] = Wetterskip[\"gemaal\"][\n", + " [\"code\", \"globalid\", \"nen3610id\", \"func_afvoer\", \"func_aanvoer\", \"func_circulatie\", \"geometry\"]\n", + "]\n", + "Wetterskip[\"afsluitmiddel\"] = Wetterskip[\"afsluitmiddel\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", "\n", - "#lines\n", - "Wetterskip['hydroobject'] = Wetterskip['hydroobject'][['code', 'globalid', 'nen3610id', 'geometry']]\n", - "Wetterskip['duikersifonhevel'] = Wetterskip['duikersifonhevel'][['code', 'globalid', 'nen3610id', 'geometry']]\n" + "# lines\n", + "Wetterskip[\"hydroobject\"] = Wetterskip[\"hydroobject\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]\n", + "Wetterskip[\"duikersifonhevel\"] = Wetterskip[\"duikersifonhevel\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]" ] }, { @@ -183,16 +193,15 @@ "outputs": [], "source": [ "# #delete irrelvant data\n", - "# variables = ['peilmerk', \n", - "# 'peilgebiedpraktijk', \n", + "# variables = ['peilmerk',\n", + "# 'peilgebiedpraktijk',\n", "# 'peilgebiedvigerend',\n", - "# 'peilbesluitgebied', \n", + "# 'peilbesluitgebied',\n", "# 'peilgebiedpraktijk']\n", "\n", "# for variable in variables:\n", "# if str(variable) in Wetterskip:\n", - "# del Wetterskip[variable]\n", - " " + "# del Wetterskip[variable]\n" ] }, { @@ -202,10 +211,12 @@ "metadata": {}, "outputs": [], "source": [ - "#add duikersifonhevels to the hydroobjecten \n", - "Wetterskip['hydroobject'] = pd.concat([Wetterskip['hydroobject'], Wetterskip['duikersifonhevel']])\n", - "Wetterskip['hydroobject'] = Wetterskip['hydroobject'].drop_duplicates(subset='globalid') #in case it is run multiple times\n", - "Wetterskip['hydroobject'] = gpd.GeoDataFrame(Wetterskip['hydroobject']).set_crs('epsg:28992')\n" + "# add duikersifonhevels to the hydroobjecten\n", + "Wetterskip[\"hydroobject\"] = pd.concat([Wetterskip[\"hydroobject\"], Wetterskip[\"duikersifonhevel\"]])\n", + "Wetterskip[\"hydroobject\"] = Wetterskip[\"hydroobject\"].drop_duplicates(\n", + " subset=\"globalid\"\n", + ") # in case it is run multiple times\n", + "Wetterskip[\"hydroobject\"] = gpd.GeoDataFrame(Wetterskip[\"hydroobject\"]).set_crs(\"epsg:28992\")" ] }, { @@ -215,7 +226,7 @@ "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap = Wetterskip)" + "show_layers_and_columns(waterschap=Wetterskip)" ] }, { @@ -225,8 +236,7 @@ "metadata": {}, "outputs": [], "source": [ - "store_data(waterschap = Wetterskip, \n", - " output_gpkg_path = output_gpkg_path_Wetterskip)\n" + "store_data(waterschap=Wetterskip, output_gpkg_path=output_gpkg_path_Wetterskip)" ] }, { @@ -251,16 +261,16 @@ "source": [ "# layout_path = r\"..\\..\\Data_postprocessed\\QGIS_overzicht\\routing_style_format3.gpkg\"\n", "# output_layout_path = r\"..\\..\\Data_postprocessed\\QGIS_overzicht\\routing_style_format2_saved\"\n", - "# layout = read_gpkg_layers(gpkg_path = layout_path, \n", - "# variables = ['stuw', \n", - "# 'gemaal', \n", + "# layout = read_gpkg_layers(gpkg_path = layout_path,\n", + "# variables = ['stuw',\n", + "# 'gemaal',\n", "# 'afsluitmiddel'])#,\n", "# # 'hydroobject',\n", "# # 'duikersifonhevel',\n", "# # 'streefpeil',\n", - "# # 'peilgebiedpraktijk', \n", + "# # 'peilgebiedpraktijk',\n", "# # 'peilgebiedvigerend'])\n", - "# store_data(waterschap = layout, \n", + "# store_data(waterschap = layout,\n", "# output_gpkg_path = output_layout_path)\n" ] }, @@ -306,8 +316,8 @@ "\n", "# #add semi dummy globalid's and nen3610id's\n", "# extra_peil['globalid'], extra_peil['nen3610id'] = np.arange(0, len(extra_peil)), np.arange(0, len(extra_peil))\n", - "# extra_peil['globalid'] = 'globalid_wetterskip_streefpeil_' + extra_peil['globalid'].astype(str) \n", - "# extra_peil['nen3610id'] = 'nen3610id_wetterskip_' + extra_peil['nen3610id'].astype(str) \n" + "# extra_peil['globalid'] = 'globalid_wetterskip_streefpeil_' + extra_peil['globalid'].astype(str)\n", + "# extra_peil['nen3610id'] = 'nen3610id_wetterskip_' + extra_peil['nen3610id'].astype(str)\n" ] }, { @@ -348,14 +358,14 @@ "\n", "# #move the peilgebiedid id to both the peilgebiedenas well as the streefpeilen\n", "# Wetterskip['peilgebied'] = gpd.GeoDataFrame()\n", - "# Wetterskip['peilgebied']['peilgebiedid'] = Wetterskip['streefpeil']['peilgebiedid'] \n", + "# Wetterskip['peilgebied']['peilgebiedid'] = Wetterskip['streefpeil']['peilgebiedid']\n", "\n", - "# Wetterskip['peilgebied'][['code','globalid','nen3610id']] = Wetterskip['streefpeil'][['code','globalid','nen3610id',]] \n", + "# Wetterskip['peilgebied'][['code','globalid','nen3610id']] = Wetterskip['streefpeil'][['code','globalid','nen3610id',]]\n", "\n", "\n", "# #the peilgebieden have been merged. Drop the irrelevant columns\n", "# Wetterskip['streefpeil'] = Wetterskip['streefpeil'][['waterhoogte', 'peilgebiedid']]#.drop(columns=['peilgebiedvigerendid', 'peilgebiedpraktijkid'], inplace = True)\n", - "# # Wetterskip['peilgebied'] = " + "# # Wetterskip['peilgebied'] =" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb index 8867c9e..4e7c2f7 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb @@ -7,14 +7,14 @@ "metadata": {}, "outputs": [], "source": [ - "#import packages and functions\n", + "# import packages and functions\n", "import os\n", "\n", "import fiona\n", "import geopandas as gpd\n", "import numpy as np\n", "import pandas as pd\n", - "from general_functions import *\n" + "from general_functions import *" ] }, { @@ -24,7 +24,7 @@ "metadata": {}, "outputs": [], "source": [ - "pd.set_option('display.max_columns', None)" + "pd.set_option(\"display.max_columns\", None)" ] }, { @@ -34,9 +34,9 @@ "metadata": {}, "outputs": [], "source": [ - "#define relative paths\n", - "waterschap = 'Zuiderzeeland'\n", - "path_zzl = '..\\..\\Data_preprocessed\\Waterschappen\\Zuiderzeeland'\n", + "# define relative paths\n", + "waterschap = \"Zuiderzeeland\"\n", + "path_zzl = \"..\\..\\Data_preprocessed\\Waterschappen\\Zuiderzeeland\"\n", "output_gpkg_path = \"../../Data_postprocessed/Waterschappen/Zuiderzeeland\"" ] }, @@ -59,20 +59,20 @@ "source": [ "Zuiderzeeland = {}\n", "\n", - "Zuiderzeeland['gemaal'] = gpd.read_file(path_zzl + '\\gemalen.gpkg')\n", - "Zuiderzeeland['hevels'] = gpd.read_file(path_zzl + '\\overigekunstwerken.gpkg')\n", + "Zuiderzeeland[\"gemaal\"] = gpd.read_file(path_zzl + \"\\gemalen.gpkg\")\n", + "Zuiderzeeland[\"hevels\"] = gpd.read_file(path_zzl + \"\\overigekunstwerken.gpkg\")\n", "# Zuiderzeeland['peilgebied'] = gpd.read_file(path_zzl + '\\peilgebieden.gpkg')\n", - "Zuiderzeeland['peilgebied'] = gpd.read_file(path_zzl + '\\peilvakken_nalevering.gpkg')\n", + "Zuiderzeeland[\"peilgebied\"] = gpd.read_file(path_zzl + \"\\peilvakken_nalevering.gpkg\")\n", "\n", "\n", - "#use fiona for the duikersifonhevels and watergangen due to unexpted geometry types\n", - "with fiona.open(path_zzl + '/Duikers.gpkg', 'r') as file:\n", + "# use fiona for the duikersifonhevels and watergangen due to unexpted geometry types\n", + "with fiona.open(path_zzl + \"/Duikers.gpkg\", \"r\") as file:\n", " # Read the contents and store them in the GeoDataFrame\n", - " Zuiderzeeland['duikersifonhevel'] = gpd.GeoDataFrame.from_features(file, crs = 'EPSG:28992')\n", - " \n", - "with fiona.open(path_zzl + '/zzl_watergangen_nalevering/zzl_Watergangen.shp', 'r') as file:\n", + " Zuiderzeeland[\"duikersifonhevel\"] = gpd.GeoDataFrame.from_features(file, crs=\"EPSG:28992\")\n", + "\n", + "with fiona.open(path_zzl + \"/zzl_watergangen_nalevering/zzl_Watergangen.shp\", \"r\") as file:\n", " # Read the contents and store them in the GeoDataFrame\n", - " Zuiderzeeland['hydroobject'] = gpd.GeoDataFrame.from_features(file)" + " Zuiderzeeland[\"hydroobject\"] = gpd.GeoDataFrame.from_features(file)" ] }, { @@ -82,8 +82,8 @@ "metadata": {}, "outputs": [], "source": [ - "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'].set_crs(crs = 'WGS84', allow_override=True)\n", - "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'].to_crs(crs = 'EPSG:28992')" + "Zuiderzeeland[\"hydroobject\"] = Zuiderzeeland[\"hydroobject\"].set_crs(crs=\"WGS84\", allow_override=True)\n", + "Zuiderzeeland[\"hydroobject\"] = Zuiderzeeland[\"hydroobject\"].to_crs(crs=\"EPSG:28992\")" ] }, { @@ -101,13 +101,12 @@ "metadata": {}, "outputs": [], "source": [ - "KWKSOORT_stuw = ['Constructie',\n", - " 'inlaat',\n", - " 'uitlaat',\n", - " 'keerwand'] #gebasseerd op de geleverde data van Zuiderzeeland\n", + "KWKSOORT_stuw = [\"Constructie\", \"inlaat\", \"uitlaat\", \"keerwand\"] # gebasseerd op de geleverde data van Zuiderzeeland\n", "\n", - "Zuiderzeeland['stuw'] = Zuiderzeeland['hevels'].loc[Zuiderzeeland['hevels']['KWKSOORT'].isin(KWKSOORT_stuw)].reset_index(drop=True)\n", - "Zuiderzeeland['stuw'].geometry = Zuiderzeeland['stuw'].centroid #prevent pointZ geometries" + "Zuiderzeeland[\"stuw\"] = (\n", + " Zuiderzeeland[\"hevels\"].loc[Zuiderzeeland[\"hevels\"][\"KWKSOORT\"].isin(KWKSOORT_stuw)].reset_index(drop=True)\n", + ")\n", + "Zuiderzeeland[\"stuw\"].geometry = Zuiderzeeland[\"stuw\"].centroid # prevent pointZ geometries" ] }, { @@ -117,9 +116,13 @@ "metadata": {}, "outputs": [], "source": [ - "#distinguish multiple parameters from the same gpkg\n", - "Zuiderzeeland['afsluitmiddel'] = Zuiderzeeland['hevels'].loc[Zuiderzeeland['hevels']['KWKSOORT'] == 'Afsluitmiddel (groot)'].reset_index(drop=True)\n", - "Zuiderzeeland['hevels'] = Zuiderzeeland['hevels'].loc[Zuiderzeeland['hevels']['KWKSOORT'] == 'Hevel'].reset_index(drop=True)" + "# distinguish multiple parameters from the same gpkg\n", + "Zuiderzeeland[\"afsluitmiddel\"] = (\n", + " Zuiderzeeland[\"hevels\"].loc[Zuiderzeeland[\"hevels\"][\"KWKSOORT\"] == \"Afsluitmiddel (groot)\"].reset_index(drop=True)\n", + ")\n", + "Zuiderzeeland[\"hevels\"] = (\n", + " Zuiderzeeland[\"hevels\"].loc[Zuiderzeeland[\"hevels\"][\"KWKSOORT\"] == \"Hevel\"].reset_index(drop=True)\n", + ")" ] }, { @@ -129,18 +132,33 @@ "metadata": {}, "outputs": [], "source": [ - "#determine aanvoer en afvoer gemalen\n", - "Zuiderzeeland['gemaal']['func_aanvoer'], Zuiderzeeland['gemaal']['func_afvoer'], Zuiderzeeland['gemaal']['func_circulatie'] = False, False, False #default is False\n", - "Zuiderzeeland['gemaal']['functiegemaal'] = Zuiderzeeland['gemaal']['KGMFUNC'].astype(str) \n", - "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal']['functiegemaal'] == 'onbekend', 'functiegemaal'] = np.nan #replace onbekend with nan, will be filled up later see one line below\n", - "Zuiderzeeland['gemaal']['functiegemaal'].fillna(Zuiderzeeland['gemaal']['KGMSOORT'], inplace = True) #some additional is given in this column\n", + "# determine aanvoer en afvoer gemalen\n", + "(\n", + " Zuiderzeeland[\"gemaal\"][\"func_aanvoer\"],\n", + " Zuiderzeeland[\"gemaal\"][\"func_afvoer\"],\n", + " Zuiderzeeland[\"gemaal\"][\"func_circulatie\"],\n", + ") = False, False, False # default is False\n", + "Zuiderzeeland[\"gemaal\"][\"functiegemaal\"] = Zuiderzeeland[\"gemaal\"][\"KGMFUNC\"].astype(str)\n", + "Zuiderzeeland[\"gemaal\"].loc[Zuiderzeeland[\"gemaal\"][\"functiegemaal\"] == \"onbekend\", \"functiegemaal\"] = (\n", + " np.nan\n", + ") # replace onbekend with nan, will be filled up later see one line below\n", + "Zuiderzeeland[\"gemaal\"][\"functiegemaal\"].fillna(\n", + " Zuiderzeeland[\"gemaal\"][\"KGMSOORT\"], inplace=True\n", + ") # some additional is given in this column\n", "\n", - "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('af-|afvoer|onderbemaling'), 'func_afvoer'] = True\n", - "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('aanvoergemaal|opmaling'), 'func_aanvoer'] = True\n", - "Zuiderzeeland['gemaal'].loc[Zuiderzeeland['gemaal'].functiegemaal.str.contains('circulatie'), 'func_circulatie'] = True\n", - "Zuiderzeeland['gemaal'].loc[(Zuiderzeeland['gemaal'].func_afvoer is False) &\n", - " (Zuiderzeeland['gemaal'].func_aanvoer is False) &\n", - " (Zuiderzeeland['gemaal'].func_circulatie is False), 'func_afvoer'] = True #set to afvoergemaal is there the function is unknown" + "Zuiderzeeland[\"gemaal\"].loc[\n", + " Zuiderzeeland[\"gemaal\"].functiegemaal.str.contains(\"af-|afvoer|onderbemaling\"), \"func_afvoer\"\n", + "] = True\n", + "Zuiderzeeland[\"gemaal\"].loc[\n", + " Zuiderzeeland[\"gemaal\"].functiegemaal.str.contains(\"aanvoergemaal|opmaling\"), \"func_aanvoer\"\n", + "] = True\n", + "Zuiderzeeland[\"gemaal\"].loc[Zuiderzeeland[\"gemaal\"].functiegemaal.str.contains(\"circulatie\"), \"func_circulatie\"] = True\n", + "Zuiderzeeland[\"gemaal\"].loc[\n", + " (Zuiderzeeland[\"gemaal\"].func_afvoer is False)\n", + " & (Zuiderzeeland[\"gemaal\"].func_aanvoer is False)\n", + " & (Zuiderzeeland[\"gemaal\"].func_circulatie is False),\n", + " \"func_afvoer\",\n", + "] = True # set to afvoergemaal is there the function is unknown" ] }, { @@ -158,54 +176,72 @@ "metadata": {}, "outputs": [], "source": [ - "#Gemaal\n", - "Zuiderzeeland['gemaal'] = Zuiderzeeland['gemaal'][['KGMIDENT', 'GLOBALID', 'func_aanvoer', 'func_afvoer', 'func_circulatie', 'geometry']]\n", - "Zuiderzeeland['gemaal'] = Zuiderzeeland['gemaal'].rename(columns={'KGMIDENT': 'code', 'GLOBALID': 'globalid'})\n", - "Zuiderzeeland['gemaal']['nen3610id'] = 'dummy_nen3610id_gemaal_' + Zuiderzeeland['gemaal'].index.astype(str)\n", + "# Gemaal\n", + "Zuiderzeeland[\"gemaal\"] = Zuiderzeeland[\"gemaal\"][\n", + " [\"KGMIDENT\", \"GLOBALID\", \"func_aanvoer\", \"func_afvoer\", \"func_circulatie\", \"geometry\"]\n", + "]\n", + "Zuiderzeeland[\"gemaal\"] = Zuiderzeeland[\"gemaal\"].rename(columns={\"KGMIDENT\": \"code\", \"GLOBALID\": \"globalid\"})\n", + "Zuiderzeeland[\"gemaal\"][\"nen3610id\"] = \"dummy_nen3610id_gemaal_\" + Zuiderzeeland[\"gemaal\"].index.astype(str)\n", "\n", - "#Hydroobject\n", - "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'][['OWAIDENT', 'GLOBALID', 'geometry']]\n", - "Zuiderzeeland['hydroobject'] = Zuiderzeeland['hydroobject'].rename(columns={'OWAIDENT':'code', 'GLOBALID':'globalid'})\n", - "Zuiderzeeland['hydroobject']['nen3610id'] = 'dummy_nen3610id_hydroobject_' + Zuiderzeeland['hydroobject'].index.astype(str)\n", + "# Hydroobject\n", + "Zuiderzeeland[\"hydroobject\"] = Zuiderzeeland[\"hydroobject\"][[\"OWAIDENT\", \"GLOBALID\", \"geometry\"]]\n", + "Zuiderzeeland[\"hydroobject\"] = Zuiderzeeland[\"hydroobject\"].rename(columns={\"OWAIDENT\": \"code\", \"GLOBALID\": \"globalid\"})\n", + "Zuiderzeeland[\"hydroobject\"][\"nen3610id\"] = \"dummy_nen3610id_hydroobject_\" + Zuiderzeeland[\"hydroobject\"].index.astype(\n", + " str\n", + ")\n", "\n", - "#duikersifonhevel\n", - "Zuiderzeeland['duikersifonhevel'] = Zuiderzeeland['duikersifonhevel'][['KDUIDENT', 'GLOBALID', 'geometry']]\n", - "Zuiderzeeland['duikersifonhevel'] = Zuiderzeeland['duikersifonhevel'].rename(columns={'KDUIDENT':'code', 'GLOBALID': 'globalid'})\n", - "Zuiderzeeland['duikersifonhevel']['nen3610id'] = 'dummy_nen3610id_duikersifonhevel_' + Zuiderzeeland['duikersifonhevel'].index.astype(str)\n", + "# duikersifonhevel\n", + "Zuiderzeeland[\"duikersifonhevel\"] = Zuiderzeeland[\"duikersifonhevel\"][[\"KDUIDENT\", \"GLOBALID\", \"geometry\"]]\n", + "Zuiderzeeland[\"duikersifonhevel\"] = Zuiderzeeland[\"duikersifonhevel\"].rename(\n", + " columns={\"KDUIDENT\": \"code\", \"GLOBALID\": \"globalid\"}\n", + ")\n", + "Zuiderzeeland[\"duikersifonhevel\"][\"nen3610id\"] = \"dummy_nen3610id_duikersifonhevel_\" + Zuiderzeeland[\n", + " \"duikersifonhevel\"\n", + "].index.astype(str)\n", "\n", - "#hevels\n", - "Zuiderzeeland['hevels'] = Zuiderzeeland['hevels'][['KWKIDENT', 'GLOBALID', 'geometry']]\n", - "Zuiderzeeland['hevels'] = Zuiderzeeland['hevels'].rename(columns={'KWKIDENT':'code', 'GLOBALID': 'globalid'})\n", - "Zuiderzeeland['hevels']['nen3610id'] = 'dummy_nen3610id_hevels_' + Zuiderzeeland['hevels'].index.astype(str)\n", - "#add to the duikersifonhevel\n", - "Zuiderzeeland['duikersifonhevel'] = gpd.GeoDataFrame(pd.concat((Zuiderzeeland['duikersifonhevel'], Zuiderzeeland['hevels']))) \n", + "# hevels\n", + "Zuiderzeeland[\"hevels\"] = Zuiderzeeland[\"hevels\"][[\"KWKIDENT\", \"GLOBALID\", \"geometry\"]]\n", + "Zuiderzeeland[\"hevels\"] = Zuiderzeeland[\"hevels\"].rename(columns={\"KWKIDENT\": \"code\", \"GLOBALID\": \"globalid\"})\n", + "Zuiderzeeland[\"hevels\"][\"nen3610id\"] = \"dummy_nen3610id_hevels_\" + Zuiderzeeland[\"hevels\"].index.astype(str)\n", + "# add to the duikersifonhevel\n", + "Zuiderzeeland[\"duikersifonhevel\"] = gpd.GeoDataFrame(\n", + " pd.concat((Zuiderzeeland[\"duikersifonhevel\"], Zuiderzeeland[\"hevels\"]))\n", + ")\n", "\n", - "#stuw\n", - "Zuiderzeeland['stuw'] = Zuiderzeeland['stuw'][['KWKIDENT', 'GLOBALID', 'geometry', 'KWKSOORT']]\n", - "Zuiderzeeland['stuw'] = Zuiderzeeland['stuw'].rename(columns={'KWKIDENT':'code', 'GLOBALID': 'globalid', 'KWKSOORT':'KWKsoort'})\n", - "Zuiderzeeland['stuw'] = Zuiderzeeland['stuw'].set_crs('EPSG:28992')\n", - "Zuiderzeeland['stuw']['nen3610id'] = 'dummy_nen3610id_stuw_' + Zuiderzeeland['stuw'].index.astype(str)\n", + "# stuw\n", + "Zuiderzeeland[\"stuw\"] = Zuiderzeeland[\"stuw\"][[\"KWKIDENT\", \"GLOBALID\", \"geometry\", \"KWKSOORT\"]]\n", + "Zuiderzeeland[\"stuw\"] = Zuiderzeeland[\"stuw\"].rename(\n", + " columns={\"KWKIDENT\": \"code\", \"GLOBALID\": \"globalid\", \"KWKSOORT\": \"KWKsoort\"}\n", + ")\n", + "Zuiderzeeland[\"stuw\"] = Zuiderzeeland[\"stuw\"].set_crs(\"EPSG:28992\")\n", + "Zuiderzeeland[\"stuw\"][\"nen3610id\"] = \"dummy_nen3610id_stuw_\" + Zuiderzeeland[\"stuw\"].index.astype(str)\n", "\n", - "#afsluitmiddel\n", - "Zuiderzeeland['afsluitmiddel'] = Zuiderzeeland['afsluitmiddel'][['KWKIDENT', 'GLOBALID', 'geometry']]\n", - "Zuiderzeeland['afsluitmiddel'] = Zuiderzeeland['afsluitmiddel'].rename(columns={'KWKIDENT':'code', 'GLOBALID': 'globalid'})\n", - "Zuiderzeeland['afsluitmiddel']['nen3610id'] = 'dummy_nen3610id_hevels_' + Zuiderzeeland['afsluitmiddel'].index.astype(str)\n", + "# afsluitmiddel\n", + "Zuiderzeeland[\"afsluitmiddel\"] = Zuiderzeeland[\"afsluitmiddel\"][[\"KWKIDENT\", \"GLOBALID\", \"geometry\"]]\n", + "Zuiderzeeland[\"afsluitmiddel\"] = Zuiderzeeland[\"afsluitmiddel\"].rename(\n", + " columns={\"KWKIDENT\": \"code\", \"GLOBALID\": \"globalid\"}\n", + ")\n", + "Zuiderzeeland[\"afsluitmiddel\"][\"nen3610id\"] = \"dummy_nen3610id_hevels_\" + Zuiderzeeland[\"afsluitmiddel\"].index.astype(\n", + " str\n", + ")\n", "\n", - "#peilgebied\n", - "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'][['DHYDRO_ZMRPL', 'GPGIDENT', 'geometry']]\n", - "Zuiderzeeland['peilgebied']['nen3610id'] = 'dummy_nen3610id_peilgebied_' + Zuiderzeeland['peilgebied'].index.astype(str)\n", - "Zuiderzeeland['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Zuiderzeeland['peilgebied'].index.astype(str)\n", - "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'].rename(columns={'DHYDRO_ZMRPL': 'streefpeil', 'GPGIDENT':'code'})\n", - "Zuiderzeeland['peilgebied']['globalid'] = 'dummy_globalid_peilgebied_' + Zuiderzeeland['peilgebied'].index.astype(str)\n", + "# peilgebied\n", + "Zuiderzeeland[\"peilgebied\"] = Zuiderzeeland[\"peilgebied\"][[\"DHYDRO_ZMRPL\", \"GPGIDENT\", \"geometry\"]]\n", + "Zuiderzeeland[\"peilgebied\"][\"nen3610id\"] = \"dummy_nen3610id_peilgebied_\" + Zuiderzeeland[\"peilgebied\"].index.astype(str)\n", + "Zuiderzeeland[\"peilgebied\"][\"globalid\"] = \"dummy_globalid_peilgebied_\" + Zuiderzeeland[\"peilgebied\"].index.astype(str)\n", + "Zuiderzeeland[\"peilgebied\"] = Zuiderzeeland[\"peilgebied\"].rename(\n", + " columns={\"DHYDRO_ZMRPL\": \"streefpeil\", \"GPGIDENT\": \"code\"}\n", + ")\n", + "Zuiderzeeland[\"peilgebied\"][\"globalid\"] = \"dummy_globalid_peilgebied_\" + Zuiderzeeland[\"peilgebied\"].index.astype(str)\n", "\n", - "#streefpeil\n", - "Zuiderzeeland['streefpeil'] = Zuiderzeeland['peilgebied'][['streefpeil', 'globalid']]\n", - "Zuiderzeeland['streefpeil']['geometry'] = np.nan\n", - "Zuiderzeeland['streefpeil'].rename(columns = {'streefpeil': 'waterhoogte'}, inplace=True)\n", - "Zuiderzeeland['streefpeil'] = gpd.GeoDataFrame(Zuiderzeeland['streefpeil'], geometry = 'geometry')\n", + "# streefpeil\n", + "Zuiderzeeland[\"streefpeil\"] = Zuiderzeeland[\"peilgebied\"][[\"streefpeil\", \"globalid\"]]\n", + "Zuiderzeeland[\"streefpeil\"][\"geometry\"] = np.nan\n", + "Zuiderzeeland[\"streefpeil\"].rename(columns={\"streefpeil\": \"waterhoogte\"}, inplace=True)\n", + "Zuiderzeeland[\"streefpeil\"] = gpd.GeoDataFrame(Zuiderzeeland[\"streefpeil\"], geometry=\"geometry\")\n", "\n", - "#delete the streefpeil in the peilgebied for consistency\n", - "Zuiderzeeland['peilgebied'] = Zuiderzeeland['peilgebied'][['code', 'globalid', 'nen3610id', 'geometry']]" + "# delete the streefpeil in the peilgebied for consistency\n", + "Zuiderzeeland[\"peilgebied\"] = Zuiderzeeland[\"peilgebied\"][[\"code\", \"globalid\", \"nen3610id\", \"geometry\"]]" ] }, { @@ -223,7 +259,7 @@ "metadata": {}, "outputs": [], "source": [ - "show_layers_and_columns(waterschap = Zuiderzeeland)" + "show_layers_and_columns(waterschap=Zuiderzeeland)" ] }, { @@ -245,9 +281,8 @@ "\n", "if not os.path.exists(output_gpkg_path):\n", " os.makedirs(output_gpkg_path)\n", - " \n", - "store_data(waterschap = Zuiderzeeland, \n", - " output_gpkg_path = output_gpkg_path + '/Zuiderzeeland')\n" + "\n", + "store_data(waterschap=Zuiderzeeland, output_gpkg_path=output_gpkg_path + \"/Zuiderzeeland\")" ] }, { diff --git a/src/peilbeheerst_model/peilbeheerst_model/ribasim_feedback_processor.py b/src/peilbeheerst_model/peilbeheerst_model/ribasim_feedback_processor.py index 026fbe3..ed4edab 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/ribasim_feedback_processor.py +++ b/src/peilbeheerst_model/peilbeheerst_model/ribasim_feedback_processor.py @@ -52,8 +52,8 @@ def setup_logging(self): logging.basicConfig( filename=self.log_filename, level=logging.DEBUG, - format='%(asctime)s - %(levelname)s - %(message)s', - datefmt='%Y-%m-%d %H:%M:%S' + format="%(asctime)s - %(levelname)s - %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", ) def load_feedback(self, feedback_excel): @@ -201,7 +201,7 @@ def remove_node(self, row): # control_states = ["off", "on"] # dfs_pump = ribasim_model.pump.static.df - + # if "control_state" not in dfs_pump.columns.tolist() or pd.isna(dfs_pump.control_state).all(): # dfs_pump_list = [] # for control_state in control_states: @@ -212,7 +212,7 @@ def remove_node(self, row): # dfs_pump_list.append(df_pump) # dfs_pump = pd.concat(dfs_pump_list, ignore_index=True) # ribasim_model.pump.static.df = dfs_pump - + # cur_max_nodeid = self.get_current_max_nodeid() # if cur_max_nodeid < 90000: diff --git a/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py b/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py index 467a46e..826a1f4 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py +++ b/src/peilbeheerst_model/peilbeheerst_model/ribasim_parametrization.py @@ -86,50 +86,51 @@ def insert_standard_profile( profile_total = pd.concat([profile_bottom, profile_slightly_above_bottom, profile_top]) profile_total = profile_total.sort_values(by=["node_id", "level", "area"], ascending=True).reset_index(drop=True) + # the profiles of the bergende basins are not the same as the doorgaande basins. Fix this. + profile_total["meta_categorie"] = profile_total.merge(right=ribasim_model.basin.state.df, on="node_id")[ + "meta_categorie" + ] - - #the profiles of the bergende basins are not the same as the doorgaande basins. Fix this. - profile_total['meta_categorie'] = profile_total.merge(right=ribasim_model.basin.state.df, - on = 'node_id')['meta_categorie'] - - #find the node_id of the bergende nodes with the doorgaande nodes - bergende_nodes = profile_total.loc[profile_total.meta_categorie == 'bergend'][['node_id']].reset_index(drop=True) - bergende_nodes['from_MR_node'] = bergende_nodes.merge(right=ribasim_model.edge.df, - left_on='node_id', - right_on='from_node_id', - how = 'left')['to_node_id'] - - bergende_nodes['doorgaande_node'] = bergende_nodes.merge(right=ribasim_model.edge.df, - left_on='from_MR_node', - right_on='from_node_id', - how='left')['to_node_id'] - - #find the profiles - bergende_nodes = bergende_nodes.drop_duplicates(subset='node_id') - bergende_nodes = bergende_nodes.merge(right=ribasim_model.basin.profile.df, - left_on='doorgaande_node', - right_on='node_id', - how='inner', - suffixes=('', 'doorgaand')) - bergende_nodes['meta_categorie'] = 'bergend' - - - #add the found profiles in the table - profile_total = profile_total.loc[profile_total.meta_categorie != 'bergend'].reset_index(drop=True) #remove bergende profiles, as they will be added here below - profile_total = pd.concat([profile_total, bergende_nodes[['node_id', 'level', 'area', 'meta_categorie']]]) - profile_total = profile_total.sort_values(by=['node_id', 'level']).reset_index(drop=True) + # find the node_id of the bergende nodes with the doorgaande nodes + bergende_nodes = profile_total.loc[profile_total.meta_categorie == "bergend"][["node_id"]].reset_index(drop=True) + bergende_nodes["from_MR_node"] = bergende_nodes.merge( + right=ribasim_model.edge.df, left_on="node_id", right_on="from_node_id", how="left" + )["to_node_id"] + + bergende_nodes["doorgaande_node"] = bergende_nodes.merge( + right=ribasim_model.edge.df, left_on="from_MR_node", right_on="from_node_id", how="left" + )["to_node_id"] + + # find the profiles + bergende_nodes = bergende_nodes.drop_duplicates(subset="node_id") + bergende_nodes = bergende_nodes.merge( + right=ribasim_model.basin.profile.df, + left_on="doorgaande_node", + right_on="node_id", + how="inner", + suffixes=("", "doorgaand"), + ) + bergende_nodes["meta_categorie"] = "bergend" + + # add the found profiles in the table + profile_total = profile_total.loc[profile_total.meta_categorie != "bergend"].reset_index( + drop=True + ) # remove bergende profiles, as they will be added here below + profile_total = pd.concat([profile_total, bergende_nodes[["node_id", "level", "area", "meta_categorie"]]]) + profile_total = profile_total.sort_values(by=["node_id", "level"]).reset_index(drop=True) # insert the new tables in the model ribasim_model.basin.profile.df = profile_total - #due to the bergende basin, the surface area has been doubled. Correct this. + # due to the bergende basin, the surface area has been doubled. Correct this. ribasim_model.basin.profile.df.area /= 2 # The newly created (storage) basins do not have a correct initial level yet. Fix this as well. initial_level = ribasim_model.basin.profile.df.copy() - initial_level = initial_level.drop_duplicates(subset='node_id', keep='last') - ribasim_model.basin.state.df['level'] = ribasim_model.basin.state.df.merge(right=initial_level, - on='node_id')['level_y'] + initial_level = initial_level.drop_duplicates(subset="node_id", keep="last") + ribasim_model.basin.state.df["level"] = ribasim_model.basin.state.df.merge(right=initial_level, on="node_id")[ + "level_y" + ] return @@ -374,9 +375,9 @@ def add_outlets(ribasim_model, delta_crest_level=0.10): target_level.rename(columns={"level": "min_crest_level", "node_id_x": "node_id"}, inplace=True) outlet = target_level.copy(deep=True) - outlet[ - "min_crest_level" - ] -= delta_crest_level # the peil of the boezem is allowed to lower with this much before no water will flow through the outlet, to prevent + outlet["min_crest_level"] -= ( + delta_crest_level # the peil of the boezem is allowed to lower with this much before no water will flow through the outlet, to prevent + ) get_outlet_geometries = ribasim_model.tabulated_rating_curve.node.df.loc[ ribasim_model.tabulated_rating_curve.node.df.node_id.isin(outlet.node_id.to_numpy()) ] @@ -613,33 +614,36 @@ def create_sufficient_Qh_relation_points(ribasim_model): def write_ribasim_model_Zdrive(ribasim_model, path_ribasim_toml): # Write Ribasim model to the Z drive if not os.path.exists(path_ribasim_toml): - os.makedirs(path_ribasim_toml) - + os.makedirs(path_ribasim_toml) + ribasim_model.write(path_ribasim_toml) def write_ribasim_model_GoodCloud( ribasim_model, path_ribasim_toml, waterschap, modeltype="boezemmodel", include_results=True ): + # copy the results folder from the "updated" folder to the "Ribasim_networks" folder + results_source = f"../../../../../Ribasim_updated_models/{waterschap}/modellen/{waterschap}_parametrized/results" + parametrized_location = ( + f"../../../../../Ribasim_networks/Waterschappen/{waterschap}/modellen/{waterschap}_parametrized" + ) - #copy the results folder from the "updated" folder to the "Ribasim_networks" folder - results_source = f'../../../../../Ribasim_updated_models/{waterschap}/modellen/{waterschap}_parametrized/results' - parametrized_location = f"../../../../../Ribasim_networks/Waterschappen/{waterschap}/modellen/{waterschap}_parametrized" - if not os.path.exists(parametrized_location): - os.makedirs(parametrized_location) + os.makedirs(parametrized_location) # If the destination folder of the results already exists, remove it - print(os.path.join(parametrized_location, 'results')) - if os.path.exists(os.path.join(parametrized_location, 'results')): - shutil.rmtree(os.path.join(parametrized_location, 'results')) - - #copy the results to the Ribasim_networks folder - shutil.copytree(results_source, os.path.join(parametrized_location, 'results')) - - #copy the model to the Ribasim_networks folder + print(os.path.join(parametrized_location, "results")) + if os.path.exists(os.path.join(parametrized_location, "results")): + shutil.rmtree(os.path.join(parametrized_location, "results")) + + # copy the results to the Ribasim_networks folder + shutil.copytree(results_source, os.path.join(parametrized_location, "results")) + + # copy the model to the Ribasim_networks folder parametrized_location = os.path.join(parametrized_location, "ribasim.toml") - ribasim_model.write(parametrized_location) #write to the "Ribasim_networks" folder (will NOT be overwritten at each upload) + ribasim_model.write( + parametrized_location + ) # write to the "Ribasim_networks" folder (will NOT be overwritten at each upload) path_goodcloud_password = "../../../../../Data_overig/password_goodcloud.txt" with open(path_goodcloud_password) as file: @@ -647,13 +651,11 @@ def write_ribasim_model_GoodCloud( cloud_storage = CloudStorage( password=password, - data_dir=r"../../../../../Ribasim_networks/Waterschappen/", + data_dir=r"../../../../../Ribasim_networks/Waterschappen/", ) cloud_storage.upload_model( - authority=waterschap, - model=waterschap + "_parametrized", - include_results = include_results + authority=waterschap, model=waterschap + "_parametrized", include_results=include_results ) print(f"The model of waterboard {waterschap} has been uploaded to the goodcloud in the directory of {modeltype}!") @@ -862,17 +864,17 @@ def identify_node_meta_categorie(ribasim_model): ribasim_model.outlet.static.df.loc[ ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem), "meta_categorie" ] = "Inlaat boezem, stuw" - ribasim_model.pump.static.df.loc[ - ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem), "meta_categorie" - ] = "Inlaat boezem, gemaal" + ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem), "meta_categorie"] = ( + "Inlaat boezem, gemaal" + ) # identify the UITlaten from the boezem, both stuwen (outlets) and gemalen (pumps) ribasim_model.outlet.static.df.loc[ ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem), "meta_categorie" ] = "Uitlaat boezem, stuw" - ribasim_model.pump.static.df.loc[ - ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem), "meta_categorie" - ] = "Uitlaat boezem, gemaal" + ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem), "meta_categorie"] = ( + "Uitlaat boezem, gemaal" + ) # identify the outlets and pumps at the regular peilgebieden ribasim_model.outlet.static.df.loc[ @@ -895,9 +897,9 @@ def identify_node_meta_categorie(ribasim_model): ribasim_model.outlet.static.df.loc[ ribasim_model.outlet.static.df.node_id.isin(nodes_to_boundary), "meta_categorie" ] = "Uitlaat buitenwater peilgebied, stuw" - ribasim_model.pump.static.df.loc[ - ribasim_model.pump.static.df.node_id.isin(nodes_to_boundary), "meta_categorie" - ] = "Uitlaat buitenwater peilgebied, gemaal" + ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.node_id.isin(nodes_to_boundary), "meta_categorie"] = ( + "Uitlaat buitenwater peilgebied, gemaal" + ) ribasim_model.outlet.static.df.loc[ ribasim_model.outlet.static.df.node_id.isin(nodes_from_boundary), "meta_categorie" @@ -909,27 +911,27 @@ def identify_node_meta_categorie(ribasim_model): # boundary & boezem. This is the part where a portion of the already defined meta_categorie will be overwritten by the code above. ribasim_model.outlet.static.df.loc[ (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boundary)) - & (ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem)), #to + & (ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem)), # to "meta_categorie", ] = "Uitlaat buitenwater boezem, stuw" ribasim_model.pump.static.df.loc[ (ribasim_model.pump.static.df.node_id.isin(nodes_to_boundary)) - & (ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem)), #to + & (ribasim_model.pump.static.df.node_id.isin(nodes_from_boezem)), # to "meta_categorie", ] = "Uitlaat buitenwater boezem, gemaal" ribasim_model.outlet.static.df.loc[ (ribasim_model.outlet.static.df.node_id.isin(nodes_from_boundary)) - & (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem)), #from + & (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem)), # from "meta_categorie", ] = "Inlaat buitenwater boezem, stuw" ribasim_model.pump.static.df.loc[ (ribasim_model.pump.static.df.node_id.isin(nodes_from_boundary)) - & (ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem)), #from + & (ribasim_model.pump.static.df.node_id.isin(nodes_to_boezem)), # from "meta_categorie", ] = "Inlaat buitenwater boezem, gemaal" - #boezem & boezem. + # boezem & boezem. ribasim_model.outlet.static.df.loc[ (ribasim_model.outlet.static.df.node_id.isin(nodes_from_boezem)) & (ribasim_model.outlet.static.df.node_id.isin(nodes_to_boezem)), @@ -942,124 +944,199 @@ def identify_node_meta_categorie(ribasim_model): "meta_categorie", ] = "Boezem boezem, gemaal" - #some pumps have been added due to the feedback form. Assume all these nodes are afvoer gemalen - ribasim_model.pump.static.df.meta_func_afvoer.fillna(value=1.0, inplace = True) - ribasim_model.pump.static.df.meta_func_aanvoer.fillna(value=0.0, inplace = True) - ribasim_model.pump.static.df.meta_func_circulatie.fillna(value=0.0, inplace = True) - + # some pumps have been added due to the feedback form. Assume all these nodes are afvoer gemalen + ribasim_model.pump.static.df.meta_func_afvoer.fillna(value=1.0, inplace=True) + ribasim_model.pump.static.df.meta_func_aanvoer.fillna(value=0.0, inplace=True) + ribasim_model.pump.static.df.meta_func_circulatie.fillna(value=0.0, inplace=True) + return + def load_model_settings(file_path): with open(file_path) as file: settings = json.load(file) return settings + def add_discrete_control(ribasim_model, waterschap, default_level): """Add discrete control nodes to the network. The rules are based on the meta_categorie of each node.""" - #load in the sturing which is defined in the json files - sturing = load_model_settings(f'sturing_{waterschap}.json') - + # load in the sturing which is defined in the json files + sturing = load_model_settings(f"sturing_{waterschap}.json") + # Remove all Discrete Control nodes and edges if its present ribasim_model.discrete_control.node.df = ribasim_model.discrete_control.node.df.iloc[0:0] if ribasim_model.discrete_control.condition.df is not None: ribasim_model.discrete_control.condition.df = ribasim_model.discrete_control.condition.df.iloc[0:0] ribasim_model.discrete_control.logic.df = ribasim_model.discrete_control.logic.df.iloc[0:0] ribasim_model.discrete_control.variable.df = ribasim_model.discrete_control.variable.df.iloc[0:0] - ribasim_model.edge.df = ribasim_model.edge.df.loc[ribasim_model.edge.df.edge_type != 'control'] + ribasim_model.edge.df = ribasim_model.edge.df.loc[ribasim_model.edge.df.edge_type != "control"] - #start assigning sturing to outlets/weirs + # start assigning sturing to outlets/weirs # find the nodes to change - inlaat_boezem_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == "Inlaat boezem, stuw", "node_id"] - uitlaat_boezem_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == "Uitlaat boezem, stuw", "node_id"] - reguliere_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == "Reguliere stuw", "node_id"] - inlaat_buitenwater_peilgebied_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == "Inlaat buitenwater peilgebied, stuw", "node_id"] - uitlaat_buitenwater_peilgebied_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == "Uitlaat buitenwater peilgebied, stuw", "node_id"] - boezem_boezem_stuw = ribasim_model.outlet.static.df.loc[ribasim_model.outlet.static.df.meta_categorie == "Boezem boezem, stuw", "node_id"] - - #assign the sturing for the weirs/outlets. - nodes_to_control_list_stuw = [inlaat_boezem_stuw, - uitlaat_boezem_stuw, - reguliere_stuw, - inlaat_buitenwater_peilgebied_stuw, - uitlaat_buitenwater_peilgebied_stuw, - boezem_boezem_stuw] - - category_list_stuw = ['Inlaat boezem, stuw', - 'Uitlaat boezem, stuw', - 'Reguliere stuw', - 'Inlaat buitenwater peilgebied, stuw', - 'Uitlaat buitenwater peilgebied, stuw', - 'Boezem boezem, stuw'] + inlaat_boezem_stuw = ribasim_model.outlet.static.df.loc[ + ribasim_model.outlet.static.df.meta_categorie == "Inlaat boezem, stuw", "node_id" + ] + uitlaat_boezem_stuw = ribasim_model.outlet.static.df.loc[ + ribasim_model.outlet.static.df.meta_categorie == "Uitlaat boezem, stuw", "node_id" + ] + reguliere_stuw = ribasim_model.outlet.static.df.loc[ + ribasim_model.outlet.static.df.meta_categorie == "Reguliere stuw", "node_id" + ] + inlaat_buitenwater_peilgebied_stuw = ribasim_model.outlet.static.df.loc[ + ribasim_model.outlet.static.df.meta_categorie == "Inlaat buitenwater peilgebied, stuw", "node_id" + ] + uitlaat_buitenwater_peilgebied_stuw = ribasim_model.outlet.static.df.loc[ + ribasim_model.outlet.static.df.meta_categorie == "Uitlaat buitenwater peilgebied, stuw", "node_id" + ] + boezem_boezem_stuw = ribasim_model.outlet.static.df.loc[ + ribasim_model.outlet.static.df.meta_categorie == "Boezem boezem, stuw", "node_id" + ] + + # assign the sturing for the weirs/outlets. + nodes_to_control_list_stuw = [ + inlaat_boezem_stuw, + uitlaat_boezem_stuw, + reguliere_stuw, + inlaat_buitenwater_peilgebied_stuw, + uitlaat_buitenwater_peilgebied_stuw, + boezem_boezem_stuw, + ] + + category_list_stuw = [ + "Inlaat boezem, stuw", + "Uitlaat boezem, stuw", + "Reguliere stuw", + "Inlaat buitenwater peilgebied, stuw", + "Uitlaat buitenwater peilgebied, stuw", + "Boezem boezem, stuw", + ] # fill the discrete control. Do this table by tables, where the condition table is determined by the meta_categorie for nodes_to_control, category in zip(nodes_to_control_list_stuw, category_list_stuw): if len(nodes_to_control) > 0: - print(f'Sturing has been added for the category {category}') - add_discrete_control_partswise(ribasim_model=ribasim_model, - nodes_to_control=nodes_to_control, - category=category, - sturing = sturing, - default_level = default_level) + print(f"Sturing has been added for the category {category}") + add_discrete_control_partswise( + ribasim_model=ribasim_model, + nodes_to_control=nodes_to_control, + category=category, + sturing=sturing, + default_level=default_level, + ) else: - print(f'No stuwen are found in the category of {category}') - - #repeat for the pumps + print(f"No stuwen are found in the category of {category}") + + # repeat for the pumps # find the nodes to change - inlaat_boezem_gemaal = ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.meta_categorie == "Inlaat boezem, gemaal", "node_id"] - uitlaat_boezem_gemaal = ribasim_model.pump.static.df.loc[ribasim_model.pump.static.df.meta_categorie == "Uitlaat boezem, gemaal", "node_id"] - - regulier_gemaal_afvoer = ribasim_model.pump.static.df.loc[((ribasim_model.pump.static.df.meta_categorie == "Regulier gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 0)), "node_id"] - regulier_gemaal_aanvoer = ribasim_model.pump.static.df.loc[((ribasim_model.pump.static.df.meta_categorie == "Regulier gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 1)), "node_id"] + inlaat_boezem_gemaal = ribasim_model.pump.static.df.loc[ + ribasim_model.pump.static.df.meta_categorie == "Inlaat boezem, gemaal", "node_id" + ] + uitlaat_boezem_gemaal = ribasim_model.pump.static.df.loc[ + ribasim_model.pump.static.df.meta_categorie == "Uitlaat boezem, gemaal", "node_id" + ] - uitlaat_buitenwater_peilgebied_gemaal_afvoer = ribasim_model.pump.static.df.loc[((ribasim_model.pump.static.df.meta_categorie == "Uitlaat buitenwater peilgebied, gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 0)), "node_id"] - uitlaat_buitenwater_peilgebied_gemaal_aanvoer = ribasim_model.pump.static.df.loc[((ribasim_model.pump.static.df.meta_categorie == "Uitlaat buitenwater peilgebied, gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 1)), "node_id"] + regulier_gemaal_afvoer = ribasim_model.pump.static.df.loc[ + ( + (ribasim_model.pump.static.df.meta_categorie == "Regulier gemaal") + & (ribasim_model.pump.static.df.meta_func_afvoer != 0) + ), + "node_id", + ] + regulier_gemaal_aanvoer = ribasim_model.pump.static.df.loc[ + ( + (ribasim_model.pump.static.df.meta_categorie == "Regulier gemaal") + & (ribasim_model.pump.static.df.meta_func_afvoer != 1) + ), + "node_id", + ] - inlaat_buitenwater_peilgebied_gemaal_afvoer = ribasim_model.pump.static.df.loc[((ribasim_model.pump.static.df.meta_categorie == "Inlaat buitenwater peilgebied, gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 0)), "node_id"] - inlaat_buitenwater_peilgebied_gemaal_aanvoer = ribasim_model.pump.static.df.loc[((ribasim_model.pump.static.df.meta_categorie == "Inlaat buitenwater peilgebied, gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 1)), "node_id"] + uitlaat_buitenwater_peilgebied_gemaal_afvoer = ribasim_model.pump.static.df.loc[ + ( + (ribasim_model.pump.static.df.meta_categorie == "Uitlaat buitenwater peilgebied, gemaal") + & (ribasim_model.pump.static.df.meta_func_afvoer != 0) + ), + "node_id", + ] + uitlaat_buitenwater_peilgebied_gemaal_aanvoer = ribasim_model.pump.static.df.loc[ + ( + (ribasim_model.pump.static.df.meta_categorie == "Uitlaat buitenwater peilgebied, gemaal") + & (ribasim_model.pump.static.df.meta_func_afvoer != 1) + ), + "node_id", + ] + inlaat_buitenwater_peilgebied_gemaal_afvoer = ribasim_model.pump.static.df.loc[ + ( + (ribasim_model.pump.static.df.meta_categorie == "Inlaat buitenwater peilgebied, gemaal") + & (ribasim_model.pump.static.df.meta_func_afvoer != 0) + ), + "node_id", + ] + inlaat_buitenwater_peilgebied_gemaal_aanvoer = ribasim_model.pump.static.df.loc[ + ( + (ribasim_model.pump.static.df.meta_categorie == "Inlaat buitenwater peilgebied, gemaal") + & (ribasim_model.pump.static.df.meta_func_afvoer != 1) + ), + "node_id", + ] # display(inlaat_buitenwater_peilgebied_gemaal_afvoer) # display(inlaat_buitenwater_peilgebied_gemaal_aanvoer) - boezem_boezem_gemaal_afvoer = ribasim_model.outlet.static.df.loc[((ribasim_model.outlet.static.df.meta_categorie == "Boezem boezem, gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 0)), "node_id"] - boezem_boezem_gemaal_aanvoer = ribasim_model.outlet.static.df.loc[((ribasim_model.outlet.static.df.meta_categorie == "Boezem boezem, gemaal") & (ribasim_model.pump.static.df.meta_func_afvoer != 1)), "node_id"] - - #assign the sturing for the gemalen/pumps. - nodes_to_control_list_gemaal = [inlaat_boezem_gemaal, - uitlaat_boezem_gemaal, - regulier_gemaal_afvoer, - regulier_gemaal_aanvoer, - uitlaat_buitenwater_peilgebied_gemaal_afvoer, - uitlaat_buitenwater_peilgebied_gemaal_aanvoer, - inlaat_buitenwater_peilgebied_gemaal_afvoer, # - inlaat_buitenwater_peilgebied_gemaal_aanvoer, # - boezem_boezem_gemaal_afvoer, - boezem_boezem_gemaal_aanvoer] - - category_list_gemaal = ['Inlaat boezem, gemaal', - 'Uitlaat boezem, gemaal', - 'Regulier afvoer gemaal', - 'Regulier aanvoer gemaal', - 'Uitlaat buitenwater peilgebied, afvoer gemaal', - 'Uitlaat buitenwater peilgebied, aanvoer gemaal', - 'Inlaat buitenwater peilgebied, afvoer gemaal', # - 'Inlaat buitenwater peilgebied, aanvoer gemaal', # - 'Boezem boezem, afvoer gemaal', - 'Boezem boezem, aanvoer gemaal'] + boezem_boezem_gemaal_afvoer = ribasim_model.outlet.static.df.loc[ + ( + (ribasim_model.outlet.static.df.meta_categorie == "Boezem boezem, gemaal") + & (ribasim_model.pump.static.df.meta_func_afvoer != 0) + ), + "node_id", + ] + boezem_boezem_gemaal_aanvoer = ribasim_model.outlet.static.df.loc[ + ( + (ribasim_model.outlet.static.df.meta_categorie == "Boezem boezem, gemaal") + & (ribasim_model.pump.static.df.meta_func_afvoer != 1) + ), + "node_id", + ] + + # assign the sturing for the gemalen/pumps. + nodes_to_control_list_gemaal = [ + inlaat_boezem_gemaal, + uitlaat_boezem_gemaal, + regulier_gemaal_afvoer, + regulier_gemaal_aanvoer, + uitlaat_buitenwater_peilgebied_gemaal_afvoer, + uitlaat_buitenwater_peilgebied_gemaal_aanvoer, + inlaat_buitenwater_peilgebied_gemaal_afvoer, # + inlaat_buitenwater_peilgebied_gemaal_aanvoer, # + boezem_boezem_gemaal_afvoer, + boezem_boezem_gemaal_aanvoer, + ] + + category_list_gemaal = [ + "Inlaat boezem, gemaal", + "Uitlaat boezem, gemaal", + "Regulier afvoer gemaal", + "Regulier aanvoer gemaal", + "Uitlaat buitenwater peilgebied, afvoer gemaal", + "Uitlaat buitenwater peilgebied, aanvoer gemaal", + "Inlaat buitenwater peilgebied, afvoer gemaal", # + "Inlaat buitenwater peilgebied, aanvoer gemaal", # + "Boezem boezem, afvoer gemaal", + "Boezem boezem, aanvoer gemaal", + ] # fill the discrete control. Do this table by tables, where the condition table is determined by the meta_categorie for nodes_to_control, category in zip(nodes_to_control_list_gemaal, category_list_gemaal): if len(nodes_to_control) > 0: - print(f'Sturing has been added for the category {category}') - add_discrete_control_partswise(ribasim_model=ribasim_model, - nodes_to_control=nodes_to_control, - category=category, - sturing = sturing, - default_level = default_level) + print(f"Sturing has been added for the category {category}") + add_discrete_control_partswise( + ribasim_model=ribasim_model, + nodes_to_control=nodes_to_control, + category=category, + sturing=sturing, + default_level=default_level, + ) else: - print(f'No gemalen are found in the category of {category}') - + print(f"No gemalen are found in the category of {category}") - # # fill the discrete control. Do this table by tables, where the condition table is determined by the meta_categorie. Start with the outlets/stuwen # add_discrete_control_partswise( # ribasim_model=ribasim_model, @@ -1068,42 +1145,62 @@ def add_discrete_control(ribasim_model, waterschap, default_level): # sturing = sturing, # default_level = default_level) - #many duplicate values have been created. Discard those. + # many duplicate values have been created. Discard those. # ribasim_model.outlet.static.df = ribasim_model.outlet.static.df.drop_duplicates().reset_index(drop=True) # ribasim_model.pump.static.df = ribasim_model.pump.static.df.drop_duplicates().reset_index(drop=True) - #a DC node occures twice in the table of teh nodes at case of AGV, while this node is not present at all in the DC tables. REmove it - DC_nodes = pd.concat([ribasim_model.discrete_control.logic.df.node_id, - ribasim_model.discrete_control.variable.df.node_id, - ribasim_model.discrete_control.condition.df.node_id]) - + # a DC node occures twice in the table of teh nodes at case of AGV, while this node is not present at all in the DC tables. REmove it + DC_nodes = pd.concat( + [ + ribasim_model.discrete_control.logic.df.node_id, + ribasim_model.discrete_control.variable.df.node_id, + ribasim_model.discrete_control.condition.df.node_id, + ] + ) + DC_nodes = DC_nodes.drop_duplicates().reset_index(drop=True) - #add meta_downstream to the DC variable - ribasim_model.discrete_control.variable.df['meta_downstream'] = ribasim_model.discrete_control.variable.df.merge(right = ribasim_model.discrete_control.condition.df, - left_on = ['compound_variable_id', 'listen_node_id'], - right_on = ['compound_variable_id', 'meta_listen_node_id'], - how = 'left')[['meta_downstream']] - - ribasim_model.discrete_control.node.df = ribasim_model.discrete_control.node.df.loc[ribasim_model.discrete_control.node.df.node_id.isin(DC_nodes.values)].reset_index(drop=True) - ribasim_model.discrete_control.node.df = ribasim_model.discrete_control.node.df.drop_duplicates(subset='node_id').reset_index(drop=True) - ribasim_model.discrete_control.condition.df = ribasim_model.discrete_control.condition.df.drop_duplicates().sort_values(by=['node_id', 'meta_downstream']).reset_index(drop=True) - ribasim_model.discrete_control.variable.df = ribasim_model.discrete_control.variable.df.drop_duplicates().sort_values(by=['node_id', 'meta_downstream']).reset_index(drop=True) - ribasim_model.discrete_control.logic.df = ribasim_model.discrete_control.logic.df.drop_duplicates().sort_values(by=['node_id', 'truth_state']).reset_index(drop=True) - - + # add meta_downstream to the DC variable + ribasim_model.discrete_control.variable.df["meta_downstream"] = ribasim_model.discrete_control.variable.df.merge( + right=ribasim_model.discrete_control.condition.df, + left_on=["compound_variable_id", "listen_node_id"], + right_on=["compound_variable_id", "meta_listen_node_id"], + how="left", + )[["meta_downstream"]] + + ribasim_model.discrete_control.node.df = ribasim_model.discrete_control.node.df.loc[ + ribasim_model.discrete_control.node.df.node_id.isin(DC_nodes.values) + ].reset_index(drop=True) + ribasim_model.discrete_control.node.df = ribasim_model.discrete_control.node.df.drop_duplicates( + subset="node_id" + ).reset_index(drop=True) + ribasim_model.discrete_control.condition.df = ( + ribasim_model.discrete_control.condition.df.drop_duplicates() + .sort_values(by=["node_id", "meta_downstream"]) + .reset_index(drop=True) + ) + ribasim_model.discrete_control.variable.df = ( + ribasim_model.discrete_control.variable.df.drop_duplicates() + .sort_values(by=["node_id", "meta_downstream"]) + .reset_index(drop=True) + ) + ribasim_model.discrete_control.logic.df = ( + ribasim_model.discrete_control.logic.df.drop_duplicates() + .sort_values(by=["node_id", "truth_state"]) + .reset_index(drop=True) + ) + return def add_discrete_control_partswise(ribasim_model, nodes_to_control, category, sturing, default_level): - - #define the sturing parameters in variables - upstream_level_offset = sturing[category]['upstream_level_offset'] - truth_state = sturing[category]['truth_state'] - control_state = sturing[category]['control_state'] - flow_rate_block = sturing[category]['flow_rate_block'] - flow_rate_pass = sturing[category]['flow_rate_pass'] - node_type = sturing[category]['node_type'] + # define the sturing parameters in variables + upstream_level_offset = sturing[category]["upstream_level_offset"] + truth_state = sturing[category]["truth_state"] + control_state = sturing[category]["control_state"] + flow_rate_block = sturing[category]["flow_rate_block"] + flow_rate_pass = sturing[category]["flow_rate_pass"] + node_type = sturing[category]["node_type"] ### node #################################################### # add the discrete control .node table. The node_ids are the same as the node_id of the outlet/pump, but 80.000 is added @@ -1148,17 +1245,17 @@ def add_discrete_control_partswise(ribasim_model, nodes_to_control, category, st outlet_static_block = ribasim_model.outlet.static.df.copy() outlet_static_block["control_state"] = "block" outlet_static_block["flow_rate"] = flow_rate_block - outlet_static_block[ - "min_crest_level" - ] = np.nan # min crest level is redundant, as control is defined for both upstream as well as downstream levels + outlet_static_block["min_crest_level"] = ( + np.nan + ) # min crest level is redundant, as control is defined for both upstream as well as downstream levels # df when water is passed outlet_static_pass = ribasim_model.outlet.static.df.copy() outlet_static_pass["control_state"] = "pass" outlet_static_pass["flow_rate"] = flow_rate_pass - outlet_static_pass[ - "min_crest_level" - ] = np.nan # min crest level is redundant, as control is defined for both upstream as well as downstream levels + outlet_static_pass["min_crest_level"] = ( + np.nan + ) # min crest level is redundant, as control is defined for both upstream as well as downstream levels outlet_static = ( pd.concat([outlet_static_block, outlet_static_pass]) @@ -1266,13 +1363,13 @@ def add_discrete_control_partswise(ribasim_model, nodes_to_control, category, st DC_condition_ds["meta_to_control_node_type"] = DC_condition_ds.merge( right=DC_condition_us, on="compound_variable_id", how="left" )["meta_to_control_node_type"] - + # concat the upstream and the downstream condition table DC_condition = pd.concat([DC_condition_us, DC_condition_ds]) - #every basin should have a target level by this part of the code. However, LevelBoundaries may not. Implement it - DC_condition.greater_than.fillna(value = default_level, inplace=True) - + # every basin should have a target level by this part of the code. However, LevelBoundaries may not. Implement it + DC_condition.greater_than.fillna(value=default_level, inplace=True) + # concat the entire DC_condition to the ribasim model ribasim_model.discrete_control.condition.df = pd.concat([ribasim_model.discrete_control.condition.df, DC_condition]) ribasim_model.discrete_control.condition.df = ribasim_model.discrete_control.condition.df.sort_values( From bca611c861bb11ab25f71ae9e7089834bb457bc3 Mon Sep 17 00:00:00 2001 From: Martijn Visser Date: Tue, 13 Aug 2024 16:19:16 +0200 Subject: [PATCH 25/25] pixi run pre-commit --- .../01_parse_crossings.ipynb | 1494 +--------- .../01_test_parse_crossings.ipynb | 14 +- .../01b_ad_krw_to_peilgebieden.ipynb | 8 +- .../02_crossings_to_ribasim_notebook.ipynb | 295 +- src/peilbeheerst_model/03_test_outlets.ipynb | 2391 +---------------- .../AmstelGooienVecht_parametrize.ipynb | 1768 +----------- .../sturing_AmstelGooienVecht.json | 18 +- src/peilbeheerst_model/compute_voronoi.ipynb | 20 +- .../postprocess_data/post-process_WSRL.ipynb | 210 +- .../postprocess_data/post-process_agv.ipynb | 171 +- .../post-process_delfland.ipynb | 198 +- .../post-process_rijnland.ipynb | 468 +--- .../post-process_wetterskip.ipynb | 139 +- .../post-process_zuiderzeeland.ipynb | 493 +--- .../postprocess_data/post-processing_HD.ipynb | 154 +- .../post-processing_HHNK.ipynb | 198 +- .../post-processing_HHSK.ipynb | 222 +- .../post-processing_scheldestromen.ipynb | 336 +-- .../preprocess_data/AmstelGooienVecht.ipynb | 38 +- .../preprocess_data/Delfland.ipynb | 32 +- .../preprocess_data/HHNK.ipynb | 46 +- .../preprocess_data/HHSK.ipynb | 78 +- .../preprocess_data/Hollandse_Delta.ipynb | 32 +- .../preprocess_data/Rijnland.ipynb | 78 +- .../preprocess_data/Rivierenland.ipynb | 56 +- .../preprocess_data/Scheldestromen.ipynb | 50 +- .../preprocess_data/Wetterskip.ipynb | 48 +- .../preprocess_data/Zuiderzeeland.ipynb | 38 +- src/ribasim_lumping/README.md | 6 +- 29 files changed, 1001 insertions(+), 8098 deletions(-) diff --git a/src/peilbeheerst_model/01_parse_crossings.ipynb b/src/peilbeheerst_model/01_parse_crossings.ipynb index 61a978f..026f976 100644 --- a/src/peilbeheerst_model/01_parse_crossings.ipynb +++ b/src/peilbeheerst_model/01_parse_crossings.ipynb @@ -2,8 +2,8 @@ "cells": [ { "cell_type": "code", - "execution_count": 14, - "id": "bd2ec4f5-5df5-4c1e-a010-00e47c676d17", + "execution_count": null, + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -20,366 +20,10 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "9340d65c-0872-43ae-ada8-4a4e3ab21a9a", + "execution_count": null, + "id": "1", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "

Function init:

" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
gpkg_pathoutput_pathsearch_radius_structureagg_peilgebieden_layeragg_peilgebieden_columnkrw_pathkrw_column_idkrw_column_namekrw_min_overlap
HHNK../../../../Data_postprocessed/Waterschappen/H...../../../../Data_crossings/HHNK/hhnk_crossings...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
Delfland../../../../Data_postprocessed/Waterschappen/D...../../../../Data_crossings/Delfland/delfland_c...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
Hollandse Delta../../../../Data_postprocessed/Waterschappen/H...../../../../Data_crossings/Hollandse_Delta/hd_...300aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
AmstelGooienVecht../../../../Data_postprocessed/Waterschappen/A...../../../../Data_crossings/AmstelGooienVecht/a...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
HHSK../../../../Data_postprocessed/Waterschappen/H...../../../../Data_crossings/HHSK/hhsk_crossings...300aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
Rijnland../../../../Data_postprocessed/Waterschappen/R...../../../../Data_crossings/Rijnland/rijnland_c...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
Scheldestromen../../../../Data_postprocessed/Waterschappen/S...../../../../Data_crossings/Scheldestromen/sche...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
Wetterskip../../../../Data_postprocessed/Waterschappen/W...../../../../Data_crossings/Wetterskip/wettersk...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
WSRL../../../../Data_postprocessed/Waterschappen/W...../../../../Data_crossings/WSRL/wsrl_crossings...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
Zuiderzeeland../../../../Data_postprocessed/Waterschappen/Z...../../../../Data_crossings/Zuiderzeeland/zzl_c...60aggregation_areacode../../../../Data_overig/KRW/KRW_lichamen_per_w...owmidentowmnaam0.025
\n", - "
" - ], - "text/plain": [ - " gpkg_path \\\n", - "HHNK ../../../../Data_postprocessed/Waterschappen/H... \n", - "Delfland ../../../../Data_postprocessed/Waterschappen/D... \n", - "Hollandse Delta ../../../../Data_postprocessed/Waterschappen/H... \n", - "AmstelGooienVecht ../../../../Data_postprocessed/Waterschappen/A... \n", - "HHSK ../../../../Data_postprocessed/Waterschappen/H... \n", - "Rijnland ../../../../Data_postprocessed/Waterschappen/R... \n", - "Scheldestromen ../../../../Data_postprocessed/Waterschappen/S... \n", - "Wetterskip ../../../../Data_postprocessed/Waterschappen/W... \n", - "WSRL ../../../../Data_postprocessed/Waterschappen/W... \n", - "Zuiderzeeland ../../../../Data_postprocessed/Waterschappen/Z... \n", - "\n", - " output_path \\\n", - "HHNK ../../../../Data_crossings/HHNK/hhnk_crossings... \n", - "Delfland ../../../../Data_crossings/Delfland/delfland_c... \n", - "Hollandse Delta ../../../../Data_crossings/Hollandse_Delta/hd_... \n", - "AmstelGooienVecht ../../../../Data_crossings/AmstelGooienVecht/a... \n", - "HHSK ../../../../Data_crossings/HHSK/hhsk_crossings... \n", - "Rijnland ../../../../Data_crossings/Rijnland/rijnland_c... \n", - "Scheldestromen ../../../../Data_crossings/Scheldestromen/sche... \n", - "Wetterskip ../../../../Data_crossings/Wetterskip/wettersk... \n", - "WSRL ../../../../Data_crossings/WSRL/wsrl_crossings... \n", - "Zuiderzeeland ../../../../Data_crossings/Zuiderzeeland/zzl_c... \n", - "\n", - " search_radius_structure agg_peilgebieden_layer \\\n", - "HHNK 60 aggregation_area \n", - "Delfland 60 aggregation_area \n", - "Hollandse Delta 300 aggregation_area \n", - "AmstelGooienVecht 60 aggregation_area \n", - "HHSK 300 aggregation_area \n", - "Rijnland 60 aggregation_area \n", - "Scheldestromen 60 aggregation_area \n", - "Wetterskip 60 aggregation_area \n", - "WSRL 60 aggregation_area \n", - "Zuiderzeeland 60 aggregation_area \n", - "\n", - " agg_peilgebieden_column \\\n", - "HHNK code \n", - "Delfland code \n", - "Hollandse Delta code \n", - "AmstelGooienVecht code \n", - "HHSK code \n", - "Rijnland code \n", - "Scheldestromen code \n", - "Wetterskip code \n", - "WSRL code \n", - "Zuiderzeeland code \n", - "\n", - " krw_path \\\n", - "HHNK ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", - "Delfland ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", - "Hollandse Delta ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", - "AmstelGooienVecht ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", - "HHSK ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", - "Rijnland ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", - "Scheldestromen ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", - "Wetterskip ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", - "WSRL ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", - "Zuiderzeeland ../../../../Data_overig/KRW/KRW_lichamen_per_w... \n", - "\n", - " krw_column_id krw_column_name krw_min_overlap \n", - "HHNK owmident owmnaam 0.025 \n", - "Delfland owmident owmnaam 0.025 \n", - "Hollandse Delta owmident owmnaam 0.025 \n", - "AmstelGooienVecht owmident owmnaam 0.025 \n", - "HHSK owmident owmnaam 0.025 \n", - "Rijnland owmident owmnaam 0.025 \n", - "Scheldestromen owmident owmnaam 0.025 \n", - "Wetterskip owmident owmnaam 0.025 \n", - "WSRL owmident owmnaam 0.025 \n", - "Zuiderzeeland owmident owmnaam 0.025 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "

Function find_crossings_with_peilgebieden:

" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
filterlayergroup_stacked
HHNKduikersifonhevelTrue
DelflandduikersifonhevelTrue
Hollandse DeltaduikersifonhevelTrue
AmstelGooienVechtduikersifonhevelTrue
HHSKduikersifonhevelTrue
RijnlandduikersifonhevelTrue
ScheldestromenduikersifonhevelTrue
WetterskipduikersifonhevelTrue
WSRLduikersifonhevelTrue
ZuiderzeelandduikersifonhevelTrue
\n", - "
" - ], - "text/plain": [ - " filterlayer group_stacked\n", - "HHNK duikersifonhevel True\n", - "Delfland duikersifonhevel True\n", - "Hollandse Delta duikersifonhevel True\n", - "AmstelGooienVecht duikersifonhevel True\n", - "HHSK duikersifonhevel True\n", - "Rijnland duikersifonhevel True\n", - "Scheldestromen duikersifonhevel True\n", - "Wetterskip duikersifonhevel True\n", - "WSRL duikersifonhevel True\n", - "Zuiderzeeland duikersifonhevel True" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "with open(\"waterschappen.json\") as f:\n", " waterschap_data = json.load(f)\n", @@ -398,883 +42,10 @@ }, { "cell_type": "code", - "execution_count": 16, - "id": "816b0266-4eb7-4465-8439-316d44efd5db", + "execution_count": null, + "id": "2", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "HHNK...\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "02183bcd33bd4c9185d763aeb620c302", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Snap geometries in 'hydroobject': 0%| | 0/190044 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
in_useagg_links_in_useagg_areas_in_use
HHNK854653265326
Delfland40802916410
Hollandse Delta313917891789
AmstelGooienVecht1476676670
HHSK1247492453
Rijnland540528331005
Scheldestromen17131172372
Wetterskip12912100612671
WSRL21211611657
Zuiderzeeland1892554527
\n", - "" - ], - "text/plain": [ - " in_use agg_links_in_use agg_areas_in_use\n", - "HHNK 8546 5326 5326\n", - "Delfland 4080 2916 410\n", - "Hollandse Delta 3139 1789 1789\n", - "AmstelGooienVecht 1476 676 670\n", - "HHSK 1247 492 453\n", - "Rijnland 5405 2833 1005\n", - "Scheldestromen 1713 1172 372\n", - "Wetterskip 12912 10061 2671\n", - "WSRL 2121 1611 657\n", - "Zuiderzeeland 1892 554 527" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
BasinsEdgesPeilgebieden
HHNK223106522649
Delfland105820283
Hollandse Delta7833578785
AmstelGooienVecht2281340228
HHSK156906157
Rijnland2852010542
Scheldestromen190744294
Wetterskip94853422158
WSRL1291314446
Zuiderzeeland2891054289
\n", - "
" - ], - "text/plain": [ - " Basins Edges Peilgebieden\n", - "HHNK 223 10652 2649\n", - "Delfland 105 820 283\n", - "Hollandse Delta 783 3578 785\n", - "AmstelGooienVecht 228 1340 228\n", - "HHSK 156 906 157\n", - "Rijnland 285 2010 542\n", - "Scheldestromen 190 744 294\n", - "Wetterskip 948 5342 2158\n", - "WSRL 129 1314 446\n", - "Zuiderzeeland 289 1054 289" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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UAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuI5QCAAAAAACA6wilAAAAAAAA4DpCKQAAAAAAALiOUAoAAAAAAACuS/NQ6vz583r66adVqFAhBQQEqHDhwnruueeUnJzslDEzjRgxQhEREQoICFCdOnW0Y8cOr+UkJCSob9++yp07t7Jly6YWLVro0KFDXmViYmIUGRmpoKAgBQUFKTIyUidPnkzrTQIAAAAAAEAaS/NQasyYMXrzzTc1ZcoU7dy5U2PHjtXLL7+syZMnO2XGjh2r8ePHa8qUKdq0aZPCwsJUv359xcXFOWX69++vhQsXat68eVq9erVOnTqlZs2aKSkpySnTsWNHbd26VUuXLtXSpUu1detWRUZGpvUmAQAAAAAAII15zMzScoHNmjVTaGio3nrrLWdamzZtlDVrVr3zzjsyM0VERKh///4aPHiwpAutokJDQzVmzBj16tVLsbGxypMnj9555x21b99ekvTHH38of/78WrJkiRo2bKidO3eqZMmSWr9+vapWrSpJWr9+vapVq6Zdu3apWLFil1XfNN78m0Kdb793ZT0r7irvynoAAAAAAEDa8ng8/1rGP61XWrNmTb355pvas2ePihYtqm3btmn16tWaOHGiJGnfvn2KiopSgwYNnNdkzpxZtWvX1tq1a9WrVy9t2bJF586d8yoTERGhUqVKae3atWrYsKHWrVunoKAgJ5CSpDvvvFNBQUFau3btZYdSPO53/WLfAAAAAACQPuXIkeNfy6R5KDV48GDFxsaqePHi8vPzU1JSkl544QV16NBBkhQVFSVJCg0N9XpdaGio9u/f75TJlCnTRRsQGhrqvD4qKkohISEXrT8kJMQpczmCg4Mvuyzcxb4BAAAAAODGleah1Pvvv693331X7733nu64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w4YN0yOPPKJNmzbp5ZdfVu/evTVs2DBJBFNpwcy0du1ajR07Vv3795dEMHWz8Pf3l3ShT6nGjRvrt99+0+jRozV//nydOXPGx7W7PhBKwXUnT57Ufffdp06dOkmS8uTJoxw5cih79uySLlwscYC+fvn5+emjjz5SgwYNFBsbqwceeEBly5ZVZGSkFixY4OvqIQ3t379fzz//vMaOHatBgwapXLly+vTTT1WgQAG9/fbbBFPXuXPnzsnMFBoaqscee0xBQUHq16+fdu3apQwZMtyUwVRUVJRKlSqlpUuXSrrQ31bWrFmdE8bUF11cgF1fUgKpwYMHq3379jpx4oTq16+vt99+W4888giP8t1gPB6Pli9frk2bNumhhx5Snz591LZtW02bNk3du3dX27ZttXjxYl9XM11LHUjt2rVL3377rb766istWbJEO3bsULNmzbRs2TKNHj1akmhN+h95PB61aNFCM2bM0Hvvvae+fftKunQwdTP+Pt/IPB6PFi1apAoVKui3337TI488otDQUA0bNkwffPABwZQkGeCyEydO2KhRo6xcuXLWt29f++abb6x69er266+/mpnZuXPn7MyZM075ffv2+aimuJTY2FirWbOmPf300860HTt22MMPP2yBgYH2ySefmJlZcnKyr6qIK5SUlHTJ6YmJifbss8/azz//bH/88YcVLVrUevfubYcPH7YmTZrYLbfcYk8++aTLtcWlpHzfzp075/w7MTHRq8xbb71ltWvXtjZt2tiuXbuc6T/88IPFx8e7V1kfSkpKsubNm1vu3Lnt66+/tgkTJli1atUuKpfyHp44ccLtKuIfrFmzxoKDg2358uVmduEz/vnnn9stt9xinTp1spMnT/q2gkgzCQkJ1rJlS/N4PNa4cWOvefHx8da7d28LDAy0jz76yEc1TL+++uorr9+H0aNHW506daxBgwYWExPjTD9y5Ij17dvXateubX/++acPanpjiomJsWnTplmePHns0UcfdaannIslJiZanz59vM6zkX4lJydbXFycVa9e3QYOHOg1r02bNhYeHm4zZ860U6dO+aiG1wdCKbjm0KFDTvB0/PhxGz9+vFWqVMmKFCliHo/HihQpYgUKFLD8+fNbRESEFSxY0CIiIqx48eJcGFxHTpw4Yfnz57eXX37Za/qPP/5o5cuXt8DAQPvwww99VDtc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uXJl69atm61bt85GjBhhbdq0sZYtWzrNFrkTc32IjY214OBg83g89thjj3nNSwmm7rrrLi7g0rGUE/vY2FgbPHiwValSxQYPHuwVTNWqVcsqVapkDRs2NH9/f/rduY6knPzOnz/fcuTIYc8995zzfTx69Ki9+OKLFhQUdFEwdaOLi4tzPsPjxo2zTJky2eTJk+3hhx+20NBQe/jhh+2LL76wo0ePWrt27axhw4Z28uRJH9caqc2fP99CQkKsYMGC9u2333rNe/zxx+2OO+6wsWPH2uHDh73mcf6QvqQcw86fP29xcXFWt25d69u3r912223WvXt3Z/6xY8esc+fONn36dPbxFdi5c6d5PB7r0qWLHTp0yJlerlw5W7hwoZn9X4iblJRkLVq0sPLly9tbb71lZ86cMbMLj/l7PB7r27cvYeC/2Ldvn40fP96rn8ZVq1ZZnjx5zOPx2KeffupVPjk52eLj423GjBnOUyNI344cOWKNGjWyXLlyWa9evbzmpQRTNWrUsPnz5/uohtc3Qimkqbi4OOdxvZUrV1rBggWtb9++tmLFCtu/f7+NHTvW7rnnHitRooSFhYVZrly5zOPxWKdOnezcuXM0u7+ObNy40YoUKWI1a9a0o0ePmpl3533BwcHWqFGjf+yrBdef1N+xlBP82NhYGzp0qFWuXNkrmPr2229t1KhR1rNnT9uxY4dP6ou/t3btWgsODrYZM2Zc1FIxpY+pXLly2fDhw31UQ3cdPHjQ6tata3PmzLHExEQ7ceKEPfbYY1a8eHErU6aMffLJJxYVFeWUHzNmjJUsWdLphBTXjy5dulimTJls9OjRFw2RPXDgQMuTJ4+9++67Pqod/ouU36ATJ06YmTnnEB999JH5+/tblSpVvMoPGzbMbr/9dlrRX4GU93j16tWWJUsW69y5s/MYXpkyZbwCkpSwKSkpyWrWrGmRkZGWlJTkLGPVqlX2008/ubwF6cv27dutaNGi1qBBA/vwww+95q1bt85y5sxpXbp0cVp4pn5/cWP56KOPrFatWlawYEFbv36917y1a9da48aNrV69ehf9roFQCmko9QVBSnPEL7/80goWLGj333+/152A77//3hYtWmQdOnSwu+66i04rfezvfhw3bdpkuXLlsjZt2jitCVLKRkVFcXcnnUnZd8uXL7chQ4ZY+/btbebMmXbmzBmL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nSUnJ1v9+vWtUqVK9sknnzhBPK1tfGP8+PHOv8+fP2+///67tW7d2mbPnm1mF/oZCgoKsgcffNDy589v7du3t02bNjmvSdl/BBXpz8KFCy0gIMCKFi1q4eHhFh4e7gygkuKjjz6ycuXK2b333kt/Yf/Ba6+9ZmFhYc75eYqUVu4rVqywgIAAa9q0qdfAD7h8v//+uxUsWNAiIyNt8eLFVqRIEQsPD7fg4GCbNm2a102Pe+65x1q3bu3D2uK/GjdunH355Zde01566SXr1q2bmZn99ttvVrhwYevYsaP179/f8uTJ49ViKqWDe/wzQilctcu9IEi5U50SaPy1w1K4Y8eOHdakSROnBVuKdevW2fbt2y0uLs7uuusu6969u5ldCKiyZMli2bJlu2goW1yfUi7ajh8/bps2bbJJkybZrFmz7JdffnFO8lu1amX+/v523333eb126NChVq1aNU5SfSxlH6YOgFeuXGnZs2e3qVOnWkJCgi1atMg8Ho+99tprZnZhFKv33nvPhg8fblOmTLnhR6nat2+fnTx50uLj4y0yMtKyZctmP//8s02ePNly5MhhX3zxhVP2zJkz1rhxYytcuLAtWrTIh7W+ua1evdr8/f2tY8eOzrRTp07Z119/bcePH7fNmzdb/vz5bdKkSWZ24XiUI0cOa968uVfLah7nSj9SwsPTp0/bE088YTNnzrT4+Hj74osvrGrVqlayZMmLWut8+umnXi178O/++p3o2bOnMxz97t27bdasWVajRg0rX768rVq1yszMli1bZrVr1+b7dBVSOpEfN26cVaxY0RYuXGhHjx611atXe32ek5KSLDEx0e6//34bPnw4YXo6lZycbE2aNLHAwECnRa/ZhXOL9evXW3x8vN1111320EMPmZnZrl27LHfu3JY5c2Z79tlnnWXg3xFK4YpdzQXBbbfdZp988omZ8eX0hb59+9orr7xiq1evtg4dOljNmjVt3rx5XmW+++47K1eunPPIxA8//GAPPfSQde7c2Xbu3OmLauMKpJxc/vTTT1avXj2rVKmS5cqVyzJnzmy33XabjRw50s6fP29Lly51Rj1avXq1ffHFFzZgwAC75ZZbbNu2bT7eCphdeDSgSJEizt3Wl19+2fr06WNmZgcOHLBbb73V+dvs5nrkIjEx0erUqWMREREWExNjZ8+etfbt21uGDBksS5YsXq0DUj8u0apVK/v11199Ve2b3unTp23evHlWoEABu//++53pKXeQn332WWvVqpXTiu2FF16wGjVqWJ8+fbhwTsfWr19v4eHhVqdOHWfEN7MLIWXNmjWtZMmSF7WYwtUZP368ffHFFzZ8+HArW7asPf3001atWjW799577dFHH7W2bdtaeHi4nThxwut1fL8uz/Hjx73+PnnypJUrV84aNGhwyfLnz5+3p59+2vLly2d79uxxo4q4Rs6fP2+dOnWyHDly2IoVK7zmff/991a6dGnn5snPP/9sLVq0sJdeeumG70IhrRFK4YpwQZD+vPvuu5Y5c2anM+QdO3bYfffdd1Ew9cknn1j27Nlt/fr1dvr0aRs+fLi1adOGZvTpQMpJ5datWy1Xrlz22GOP2bp16+zEiRP2888/W4MGDSxv3rz21FNPmdmFu9EtW7a0TJkyWalSpaxmzZq2detWX24CUtm5c6cVLlzYJk6caGZmDz30kPXo0cN+//13y5cvn/Xs2dMJ9z/88EN75ZVXbqoLix9++MEqVapkpUqVshMnTtjp06etT58+ljFjRudxr5T352YK7K53Z86csblz5zqP5qX2xBNPWN26dZ1WMq1atbL33nvP2Y830+f7RvLzzz9bvXr1LEOGDF6tDJKTk23NmjVWp04dCw8Pt2PHjvmwlulT6u/E1KlTLSIiwrZv324rV660Pn36WNGiRe3ll192bjZ98MEHVq9ePTt16pSvqpxu/fLLL5YzZ05r3ry5HT582HkPt2zZYgEBAV6PapmZzZ4923r37m158uS5KR6lvxmcP3/e7r///ouCqW3btlmePHns9ddfN7MLrXybN29+UYiJf0cohSvGBUH6MmzYMLvnnnvM7EKHe99++6399NNP1q5dO7vrrrvs/fffd8rWqVPHMmfObGXKlLHg4GB+TNOBlO/aDz/8YAEBATZy5MiLysTExFiHDh0sNDTUFi5c6EzftWuXnThxwk6ePOlWdXGZ2rZtaxUrVjQzs7feesvuvvtuy5s3r9OHQXJysiUmJlrv3r3tscceuyn6e0sdUOzcudOqVatmlSpVspiYGDtz5ozdf//9li1bNluzZo1TDr7115bRp06dsrlz51q+fPm8WkzNnDnTChcubJUrV7aSJUta8eLFnfMHWlenX8nJybZ3716rXbu23XrrrXbo0CGv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dnbw4EGvst9++6317NnTChYsaA0aNLCHHnqIGxnAZfjrNVRCQoLVqFHDvvjiCzt16pRFRER4BVKzZ8+mZZSLMgi4SpkyZfJ1FW4qycnJ8ng8OnPmjI4dO6bly5fr999/V2xsrJKSkvT7779rw4YNaty4sRo3bqw333xTkrR9+3a9+uqr+v7775U9e3blyJHDx1uCK+XxeBQQEKA//vhDFStW1MGDB3XHHXeoWbNmmjhxoiRp0aJF2rhxo28rin+UMWNGDR06VJ07d1ZUVJSeeeYZZ162bNnUp08fNWzYUL///ruOHj3qw5oCl/bll19q0KBB6tWrl+bOnStJ2rt3r8LDw9WlSxdt3LhRiYmJql69ur755hstWLBAQ4YM0cGDByVJfn5+Sk5O9uUm4AqNGTNGRYoU0Zw5c9SyZUt17drVmZcrVy69/PLLat++vZo3b66vvvpKGTJwaXGl4uLi5O/vL0n6/PPPFRwcrAkTJmjdunV64YUXtGvXLkmSmalmzZp644039MMPP2jRokX63//+J39/f50/f95ZBoC/t2PHDkkXrmNvvfVWjR8/XiVLllTLli01efJkSVJ8fLwWLlyozz77TGbmy+reNPjlANKB5ORkZciQQXv27NEjjzyiu+66S02aNNEdd9yh3r17688//1RkZKTq1q2r8uXLa/r06c6J4bx58/TLL78oIiLCx1uBK5HyI5hyARcbGyt/f3+tWrVKd999txo3bqypU6dKko4cOaL58+fr559/5sfzOpKyL37//Xf9/vvv+u233xQWFqannnpKkZGRWrZsmZ5//nmnfLZs2TRo0CB98MEHCgsL81W1gUuaPn26OnXqpL1792rTpk3q3Lmzpk2bJklat26dcufOrQcffNArmPr666/10Ucf6bnnnnOWQ2iR/gQGBqpBgwY6ePCgXnzxRcXFxUm6cIzLlSuXXnnlFdWvX1+dO3dWfHy8j2ubvqxcuVLFixfX6dOnNWDAAD355JN66qmn9Nhjj+mVV17RZ599pldffVV79uyRx+ORJC1fvlzZs2d3bg6bGYEU8DfswpNh8ng8Wrx4sUqXLq3HHntMknTfffdp3759uuWWWzR58mTnOzVq1Cht27ZNrVu3dr53uLY8xhUMcF1LCaS2b9+uRo0a6d5779Wdd96pqlWratasWZo/f74yZsyojh07ateuXdq4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2srNmzfJnj07ycnJlCpViq1btzJv3jwaN25Mx44dKVGiBDY2NixYsIDnz58bHVtE5E8JCgoiOjqatWvXsnPnThWkRETkraCRUiIiv3Lr1i0gbVqfpB+bN29m9OjRmEwmatWqRZ8+fahYseIrvb8ARo8ezYoVK4iMjKRw4cIGJhYR+eNiY2Pp1asXOXPmZOLEibi4uBgdSURE5LVQUUpERNK12NhY6taty7Bhw7hz5w4nTpzgzp07+Pn5Ub16dQC2bNnC2rVr2b9/Pzt37qRSpUoGpxYR+XNu375NhgwZ1ANPRETeKpq+JyIi6c6vV5p6+fIln332GQMHDgQgLCwMPz8/+vbty9y5c6lWrRq2trZkzZqV77//XiMMROSNlDdvXqMjiIiIvHYaKSUiIumKpSC1f/9+Dh48yMOHD7l58yarV6+27mMpTF27dg0/Pz+qVavGixcvyJAhg4HJRURERETkz1BRSkRE0p2tW7fSokULypUrR0JCAlevXiUiIoKqVata9zl48CBjx44lJSWFXbt2kSFDBi2bLiIiIiLyBlFRSkRE0pWHDx+ycOFCcubMSbdu3YiOjmbKlClERESwbdu2VwpTERERFClShIIFCxqYWERERERE/hM2RgcQERGxOHXqFHnz5iUoKIh3330XgKpVqzJu3Dg8PDzw9vbm6NGj1v1r166tgpSIiIiIyBtKRSkREXntUlNTf/fnvHnz0q5dO06fPk1CQoL1dVdXV3x8fKhfvz7VqlXj+PHjrzWviIiIiIj89bT6noiIvHY2NjacO3eOgIAAunfvTuHChbGxscHJyYmJEyeSnJxMjx49KFq0KDVr1gTSClMjRowgY8aMZM6c2eAjEBERERGR/y/1lBIRkdcuKSmJ2rVr8+OPP1K8eHG8vb2pVq0arVq1AuDp06d069aNkJAQdu/eTa1atV55r4ODg1HRRURERETkL6KilIiIGGLatGnY2dlRvnx5IiIi+Pbbb/Hy8sLd3Z1evXrx6NEjhg0bxpo1awgJCcHT09PoyCIiIiIi8hdSUUpERAwRFhZG06ZN2bt3L25ubty4cYOFCxcyadIkKleuTIcOHShXrhyLFi1i//79/PTTT2TMmNHo2CIiIiIi8hdRo3MRETGEp6cn3bt359tvv+X58+fkz5+fmJgYihUrRpkyZdiwYQN169bFycmJH374QQUpEREREZF/GDU6FxERw1SrVo2ZM2dib29Pt27dCAsLY9++fbi6uhIXF8fevXvx8PCgYMGCRkcVEREREZG/mKbviYiIoTw8PIiIiMDJyYkdO3ZQsWJFoyOJiIiIiMhroOl7IiJiCMszkeHDh1OiRAnmzJlDxYoV0bMSEREREZG3g4pSIiJiCJPJBECVKlVITU3l6NGjr2wXEREREZF/NhWlRETEUPny5cPHx4dZs2Zx5MgRo+OIiIiIiMhroqKUiIgYrm7dulStWpV3333X6CgiIiIiIvKaqNG5iIikC8+fPydjxoxGxxARERERkddERSkREREREREREXntNH1PREREREREREReOxWlRERERERERETktVNRSkREREREREREXjsVpURERERERERE5LVTUUpERERERERERF47FaVEREREREREROS1U1FKREREREREREReOxWlRERERERERETktVNRSkREREREREREXrv/AuuTNZM2se2OAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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ezVgwABt2bJFkydP1tSpU/X888//42UDAADg6sTje1eBli1bqm/fvpKkIUOGaNy4cVq8eLHKly//j99779696tChgypXrixJKlOmjDPvtddeU40aNRQXF+dM++9//6sSJUpox44duvHGG//x8q80HTp08Pr7rbfeUnh4uLZs2aL4+Hh5PB698cYbKlCggCpWrKhff/1VvXr1csq//vrrKleunF566SVJUrly5bRp06ZsvWgMCQnRpEmT5Ofnp/Lly6tVq1b65ptvvOohSU888YSmTZumxYsXO/vH/v37dfr0abVv314lS5aUJGfepahSpYqefvppSVLZsmU1adIkffPNN04Ll39i7969ql69umrWrClJXiHCzJkzlSdPHr355pvOBfvbb7+t4OBgLV68WE2bNv3Hy7/S+HrfLl68uAYNGuT83b9/f82bN08fffSRateu7Uy/4YYbNHr0aOfvESNGXPB37O/WrVKlStq7d6/Kli2r+vXry+PxOPv+pRo0aJBatWolSRo1apRuuukm7dq16x//pv/+++9KSkpS69atdf3110uSKlSo4Mx//vnnNXToUPXo0UPSmd/7Z599VoMHD3a+hwAAAMDFoKXUVaBKlSrOvz0ejyIjI3Xw4MFsee8BAwboueeeU7169fT0009r48aNzrz169dr0aJFTr9EhQsXdi6azn60Bf/np59+UteuXVWmTBldc801Kl26tKQzAcn27dtVpUoVFShQwCl/8803e71++/btqlWrlte0c8v8UzfddJP8/Pycv4sVK3be/jRmzBhNnjxZ8fHxXqFT1apV1ahRI1WuXFkdO3bUG2+8ocTExEuuy9n79l/V5VI9/PDDmjlzpqpVq6bBgwdrxYoVzrz169dr165dCgwMdPbt0NBQ/fHHH+zbf8HX+3Z6erqef/55ValSRWFhYSpcuLAWLFigvXv3epXLDCEzZeV37O/WTTrz6OmGDRtUrlw5DRgwQAsWLMhyvf/M2ft9sWLFJClb9vvQ0FD17NlTzZo1U5s2bfSf//xH+/fvd+avX79ezzzzjNe26NWrl/bv36+TJ0/+4+UDAADg6kModRU4dyQ+j8fjPFbyd/LkObN7nP1o1bl9Bz344IP63//+p5iYGP3444+qWbOmJk6cKEnKyMhQmzZttGHDBq//du7cqdtuu+2frtYVqU2bNjpy5IjeeOMNrV692nm0KC0tTWbmtMrJdO5jb1kp809lZX+69dZblZ6erg8//NBrup+fnxYuXKivvvpKFStW1MSJE1WuXDnt3r37stXlz2Rl327RooX27Nmj2NhY/fbbb2rUqJHT0iYjI0PR0dHn7ds7duxQ165dL2ldrnS+3rfHjBmjcePGafDgwfr222+1YcMGNWvW7LzHLQsVKuT1d1Z+x/5u3SSpRo0a2r17t5599lmlpKSoU6dOuvvuu7Nc93Odvd9nbpOs7vfnbrNz9/u3335bK1euVN26dfXBBx/oxhtv1KpVq5xljBo1yms7/Pjjj9q5c6dXoAgAAABkFaEU/lLRokUlyetO+dmdDmcqUaKEHnroIc2aNUsDBw7UG2+8IenMhdjmzZtVqlQp3XDDDV7/nXvhhzMdMW/dulVPPvmkGjVqpAoVKni1Iipfvrw2btyo1NRUZ9q6deu83qN8+fJau3at17Rzy7jh5ptv1rx58xQXF+c8bpXJ4/GoXr16GjVqlL7//nvly5dPs2fPdrV+Wd23ixYtqp49e+rdd9/V+PHjnUECatSooZ07dyo8PPy8fZtRAs+XE/btZcuW6c4779S9996rqlWrqkyZMtq5c+cFX3eh37ELrVuma665Rp07d9Ybb7yhDz74QJ988omOHj2a5fpnh6JFiyohIcErmPqz/b569ep64okntGLFClWqVEnvv/++pDPbYvv27edthxtuuMEJegEAAICLwVkk/tINN9ygEiVKaOTIkdqxY4e++OILjRkzxqtMbGys5s+fr927d+u7777Tt99+6/RB0q9fPx09elRdunTRmjVr9L///U8LFizQ/fffr/T0dF+sUo6WOYrblClTtGvXLn377bd67LHHnPldu3ZVRkaGevfura1bt2r+/Pl6+eWXJf1fa4k+ffpo27ZtGjJkiHbs2KEPP/zQ6YT83FYml1udOnX01Vdf6ZlnntG4ceMkSatXr1ZcXJzWrVunvXv3atasWTp06JBXvzVuCAgI0C233KJ///vf2rJli5YuXaonn3zSq8yIESP02WefadeuXdq8ebM+//xzp57dunVTkSJFdOedd2rZsmXavXu3lixZokcffVT79u1zdV1yg5ywb99www1auHChVqxYoa1bt6pPnz5KSEi44Osu9Dt2oXWTpHHjxmnmzJnatm2bduzYoY8++kiRkZEK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Th9//LFOnjzp49rlDIRScN2xY8d09913q1u3bpKkokWLKiQkRIULF5Z05mKJH+icy8/PT7NmzVLTpk2VlJSke++9V1WrVlVMTIw++eQTX1cP2WjPnj169tlnNXr0aD3++OOqVq2a5syZo5IlS2ratGkEUzncqVOnZGaKiIjQo48+qqCgIA0YMEDbtm1Tnjx5rspgKiEhQZUqVdK8efMknelvq2DBgs4J49kXXVyA5SyZgdSQIUPUuXNnHT16VE2aNNG0adP08MMP8yjfFcbj8WjRokVau3at7rvvPvXr108dO3bUlClT9OCDD6pjx4764osvfF3NXO3sQGrbtm1atmyZvv76a3355ZfavHmzWrdurYULFyouLk6SaE36D3k8HrVt21Zvvvmm3n//ffXv31/SnwdTV+Px+Urm8Xg0d+5c1ahRQz///LMefvhhRUREaPjw4frwww8JpiTJAJcdPXrUnnvuOatWrZr179/fvv32W6tbt67973//MzOzU6dO2cmTJ53yu3fv9lFN8WeSkpKsfv369uSTTzrTNm/ebA899JAFBgbaZ599ZmZmGRkZvqoiLlJ6evqfTk9LS7Onn37adu7cab/99pvdeOON1rdvX9u/f7+1bNnSrrnmGhs8eLDLtcWfyfy+nTp1yvl3WlqaV5m33nrLGjRoYB06dLBt27Y503/88UdLSUlxr7I+lJ6ebm3atLEiRYrYN998Y+PGjbM6deqcVy5zGx49etTtKuJvLF++3IKDg23RokVmdmYf/+qrr+yaa66xbt262bFjx3xbQWSb1NRUa9eunXk8HmvRooXXvJSUFOvbt68FBgbarFmzfFTD3Ovrr7/2Oj7ExcVZw4YNrWnTppaYmOhMP3DggPXv398aNGhgv//+uw9qemVKTEy0KVOmWNGiRe2RRx5xpmeei6WlpVm/fv28zrORe2VkZFhycrLVrVvXBg0a5DWvQ4cOVqxYMXv77bft+PHjPqphzkAoBdfs27fPCZ6OHDliY8eOtZo1a1rZsmXN4/FY2bJlrWTJklaiRAmLioqyUqVKWVRUlJUvX54Lgxzk6NGjVqJECXvppZe8pm/atMmqV69ugYGB9tFHH/modrhUv/76q8XHx5uZ2YwZM2z06NFm9n/BxtNPP23t27d3votPPvmklStXzho0aGAHDhzwTaXhWLFihdffX331lbVr1866d+9uEydOdKa/9dZbdvvtt9tdd91lq1evtpEjR1pUVNQV/xt7duiWkZFh3bp1s6JFi1rnzp0tPDzcatWqZfXq1bMWLVpY/fr17eabb7Z69erZXXfdZSdOnPBhzXG2hQsXWvHixZ3fnMzw8KOPPrI8efLYgAEDrvh9+WqyZ88eu++++6xw4cK2bt06M/u/z/yPP/6w7t27W2Rk5FV/MXcxHn/8cevYsaPXjcMvv/zSPB6PBQQE2OrVq73Kf/fdd+bxeGzJkiVuV/WKsHfvXvvggw/s1VdftZ9++slOnz5tZmbHjh3702DqxIkT9sgjj1hAQICtX7/eV9VGNktPT7e6devaqFGjzOzM71emm2++2W666SZ75ZVXrurfMn9ft9TC1SE5OVn9+vXTkSNHNHXqVF1//fXq3r27zEzTpk1T0aJF9dRTTykjI0OnTp1SgQIFlJqaqjx58qhevXoKCQnx9Srg/wsJCdHtt9+utWvX6sCBA4qIiJAk3XTTTapRo4b27t2rQYMGqWnTpgoMDKS5dy6QlJSk+++/XwEBAVq0aJFGjBihN998U5KUN29eSdKWLVuUlpbmfBeTk5N1//33q3fv3goODvZV1SFp5cqVqlevnp577jkNGzZMixYt0p133ql77rlHR44c0ahRo7R9+3ZNnDhR999/v/Lmzatp06bprrvuUr58+TR79uwr+jd2586diouLU5s2bdS2bVv5+/tr+vTpeuihh/Tmm2+qXr16qlu3rtLS0hQYGKjU1FSZmQoXLqy77rpLBQsW9PUqXJXsrEeLMpUuXVqHDx/WokWL1LlzZ2d+tWrVFB4erokTJyo4OFijRo3yRZXxD2R+3r///rv++OMPFSlSRNddd53Gjh2rQ4cOqUmTJlq8eLGqVKkiM1P+/Pk1ZcoUJSYmqlChQr6ufq7x73//W+np6fJ4PNq8ebNKlSqlFi1aaOnSpbr99ts1fvx4xcXFqVSpUpKkwMBA3XDDDc4jzsi6jRs3ql27dipSpIjWrVunG2+8US+88ILuuusuBQUFqXPnzpLk9Ns1ceJEDR8+XP/9738VHx+vGjVq+LL6yCb2/wcSCA4Ods6x8+fPr9TUVOXPn1/Vq1fX9OnTNWPGDKdrm6uSLxMxXF3++9//WpMmTaxVq1a2a9cuMzvTYmrMmDFWo0aN85o0wvcy76QlJSV5NemePHmyVahQwV566SWvVjIPP/ywvfLKK3bkyBG3q4pLsHjxYueu3dKlS61ChQrm8Xhs+PDhTpnM+Znf00cffdT69u1rISEh9tNPP/mk3vB24MABe/755y00NNRefPFF++STT2zChAlmdqZl49SpUy1//vzWr18/5zXbt2+3lStX2i+//OKrarvihx9+sOLFi1uXLl3s7bff9pqXmppqffr0saCgIFuzZo1vKog/dfYjxcnJyV7Te/XqZbfccot98cUXzvRDhw5Zr169bMWKFc5vFnKPzHONzz77zBo1amTXXnut3X333fb888+bmdnhw4etXbt2Fhoaahs3bvR6DbLu1KlTzr8/+OADu/baa+29995zWoMuXLjQ/P39rVWrVjZ9+nRbvHixtWrVyipXrsz36iL98MMPFhAQYE899ZQdPHjQfvnlFwsPD7d27dp5lctsMRUVFWXFihWzggUL0kIql8v8bdq/f78dO3bMkpKSzOzMPhESEmL33XefV/nHHnvMPv30U/v1119dr2tOQiiFy+7sE4d3333Xbr/9dq9g6vDhwzZ27FirXLmyPfzww3/6OvjOp59+atHR0ValShXr0aOH07T0ySeftAoVKljbtm3tqaeesp49e1p4eLjzuSJnW7Rokd144432+OOP26lTpywlJcUqVqxoZcqUsS5dutjixYu9yu/YscMGDhxoNWvWtPr169v333/vm4rjTx08eNBeeOEFCwkJsWuvvdYrgDl58qQTTA0YMMB3lXTZrl27rHjx4jZ06NDz+tc6W8eOHS0oKMi+/vprr+kcg3zj7O3+wgsvWOvWra1Ro0Y2f/58S0tLs40bN1rHjh2tXLlyNmrUKHvnnXescePGVrduXa++1ZC7fPnllxYQEGAvv/yyrVq1yh566CHLly+fzZ8/38zMfvvtN2vfvr15PB7btGmTj2ub+5z7e3b69Glr0aKF1ahRw95//30nmPr6668tb9685vF47P7777f77rvPCaQIprLmp59+Mo/HY48//riZ/d+2r1+/vl133XVeN3nNztygnzBhglWpUoVzqyvErFmzrGrVqla6dGl78MEHnXPqmTNnWnBwsNWvX99iY2OtW7duVqBAAad7m6sZoRQum4SEBNu3b5+lpqZ6TX/33Xfttttus1atWtnOnTvN7MwP8vjx4+3aa6+1xx57zBfVxZ9YtWqVhYSE2NChQ+2FF16wa6+91urUqeO0rpg+fbr17t3bKleubC1btuRgmoscO3bMHn/8catbt67TMio5OdkWLVpkt9xyi3Xo0OG8YCo1NdVOnTpFh6c5yNktSo4ePWqjR4+2wMBAGzhwoFe5kydP2vTp083j8diQIUPcrqZPPP3003bnnXd69d2QkJBg69evtxkzZnj1nRITE0O/KTnA2fvzuHHjLCgoyEaOHGl16tSxMmXK2Msvv2ypqam2Y8cOGzVqlIWHh1uNGjWscePGTvBImJi7ZGRk2MmTJ61Lly727LPPmtmZ37KoqKjzQvSEhATr1q2b10ANuDgjRoxwWqBlDvxQtWpVr2AqPj7e8ubNa/3793dab/zVgCg437p16yxPnjz2wAMPODdyX3zxRfN4PBYREWHdunWz9u3b28SJE+3w4cOWlpZmGRkZ54VVyJ22bNliRYoUsTFjxtgzzzxjLVu2tDp16tjChQvN7MzgUB06dLAWLVpYy5Yt7YcffvBxjXMGQilcFpl3CSIiIqxGjRr2yiuveDW1/+KLL+yOO+6wFi1a2I4dO8zsTPP7V155hUeCcogtW7bYrFmznJNEszN3KsuUKWO1a9e2vXv3OtOTk5OvmtG7rgSZJ5e///67PfHEExYdHW3Dhg1zWhd89dVXVqdOHevYsaMzytWTTz5pL7/8sq+qjD+RefG9atUq+/zzz+348eN29OhRi4uLswIFCti///1vr/InT560GTNm2NatW31RXVelp6dbp06drFu3bs60Tz75xDp16mQhISFWoEABK1++vE2aNMnMzmzL3r17c7GbQ2zevNl69+7tnMSbmf3rX/+yChUq2OjRo51gPCkpyY4dO0YLqSvAbbfdZnPmzLG9e/da8eLFrXfv3s68Tz/91BmIg9Y6WTdhwgTbs2eP83daWpo1adLEvvzyS2fa2cHUjBkznGBq/vz55u/vb7179/Y638NfOzsQX7ZsmV1zzTXWp08fe+aZZyw0NNQ+/fRTW7t2ra1fv95iYmKsdu3a5vF4rGfPnl43T5B7bdy40Z599lmvbjCWL19unTp1sptvvtnrWtjM+NzPQiiFy2LNmjVWuHBhK1OmjDVt2tQaNGhgoaGhVqtWLXvggQds5cqVNnLkSOvQoYO1a9fOabbInZicISkpyYKDg83j8dijjz7qNS8zmLr11lu5gMvFMk/sk5KSbMiQIXbzzTfbkCFDvIKp2267zWrWrGnNmjUzf39/+t3JQTJPfj/++GMLCQmxZ555xvk+Hjp0yF544QULCgo6L5i60iUnJzv78JgxYyxfvnw2ceJEe+ihhywiIsIeeughmz9/vh06dMg6depkzZo1s2PHjvm41jjbxx9/bOHh4VaqVClbtmyZ17x//etfdtNNN9no0aNt//79XvM4f8hdMn/DTp8+bcnJydaoUSPr37+/XX/99fbggw868w8fPmzdu3e3N954g8/4ImzdutU8Ho/16NHD9u3b50yvVq2azZ4928z+L8RNT0+3tm3bWvXq1e2tt96ykydPmtmZx/w9Ho/179+fMPACdu/ebWPHjvXqp3Hp0qVWtGhR83g8NmfOHK/yGRkZlpKSYm+++abz1AhytwMHDljz5s0tLCzM+vTp4zUvM5iqV6+effzxxz6qYc5GKIVslZyc7Dyut2TJEitVqpT179/fFi9ebHv27LHRo0fbHXfcYRUqVLDIyEgLCwszj8dj3bp1s1OnTtHsPgdZs2aNlS1b1urXr2+HDh0yM+/O+4KDg6158+Z/21cLcp6zv2OZJ/hJSUk2bNgwq1WrllcwtWzZMnvuueesd+/etnnzZp/UF39txYoVFhwcbG+++eZ5LRUz+5gKCwuzESNG+KiG7vrll1+sUaNG9t5771laWpodPXrUHn30UStfvrxVqVLFPvvsM0tISHDKv/jii1axYkWnE1LkHD169LB8+fJZXFzceUNkDxo0yIoWLWrvvvuuj2qHfyLzGHT06FEzM+ccYtasWebv728333yzV/nhw4fbDTfcQCv6i5C5jePj461AgQLWvXt35zG8KlWqeAUkmWFTenq61a9f32JiYiw9Pd15j6VLl9qWLVtcXoPcZePGjXbjjTda06ZN7aOPPvKat3LlSgsNDbUePXo4LTzP3r64ssyaNctuu+02K1WqlK1atcpr3ooVK6xFixbWuHHj845rIJRCNjr7giCzOeKCBQusVKlSds8993jdCfj+++9t7ty51qVLF7v11lvptNLH/urguHbtWgsLC7MOHTo4rQkyyyYkJHB3J5fJ/OwWLVpkQ4cOtc6dO9vbb79tJ0+etJSUFBs2bJjVrl3bK5jKyMjg7nQOFRcXZ02bNvW6g332v48dO2ZPPvmkXXfddXb48OEr/iQ4JSXFatWqZbVr17bZs2c72+LQoUN/egLYt29fu+eee3j02If+7relS5cuVr58eZs+fbrzSFGmCRMm0HIjF/vss8+sVq1adtttt9mwYcPst99+MzOz0aNHm8fjsZiYGHvwwQete/fuFhQUZN99952Pa5y7nH3cXrp0qeXLl8+6dOli27dvt1tvvdVWrlxpZme+f3/88YedPn3aK5zK/D/H/gvbunWrhYWF2eDBg+3w4cN/Wmbp0qV2zTXXWNeuXb1GE0Xu9lfnVHPmzLFGjRpZq1atzgumVq9e7dVyEf/HY2YmIBv88ccfuu222+Tn56dBgwapdevWyp8/v7755hs9+OCDqlu3rv71r3+pZs2azmtSU1MlSfnz5/dVta96ZiaPx6M1a9Zoy5YtOnjwoO6//34VKVJEkrRmzRq1aNFCt99+u9566y0FBQU5r0HuM3v2bN1///1q3bq1ihUrpnHjxqlz586aPHmyMjIy9MILL2jJkiWKjo7WuHHj5Ofn5+sq4xwZGRnKkyePHnjgAe3bt0/z589X5qE883v5ww8/qGzZsjp16pROnz6tsLAwX1b5sktPT5efn5+OHz+u9u3b68iRIxo2bJjatGmjfPnyOdtMkk6cOKHnn39eb775phYtWqSbbrrJx7W/Op39mcTHx+vgwYMqXbq0SpYsqdDQUElSp06dtGnTJj3xxBPq0KGDChYs6PUemZ87co8ffvhBd9xxh/71r39p165d2r17twoUKKCpU6eqWLFimjt3rqZNm6bU1FTdeOONevDBB1WhQgVfVzvXOPt7lZKSooCAAC1btkyNGjVSs2bNtG7dOiUmJqp69epKSUnR77//rnz58qlFixYaN27cee+Bv5aamqp7771XISEhmjJlijP91KlTOnjwoDIyMlSoUCGFhoZq6dKlat++verWrasZM2aoUKFCPqw5/qnM66DVq1dr+fLl8ng8qlKliho1aiRJ+uSTTzRlyhT5+/vr6aef1s033+zjGucCvkzEcOXIvMOSnJxsTZo0sejoaPvoo4+cFlNff/21lSpVyrp168YIbTlIZsr/ySefWHh4uNWpU8cqV65sUVFR9uWXXzr9CqxevdoiIiKsSZMmPOqSi+3evdvKly9vr7/+ujOtUKFCNmTIEK/OzwcMGGCNGze2gwcP+qqqyIJJkyZZQECArV+/3sz+7/uclJRkgwYN8uok+kqWud5ndxhasmRJq1Onjn3yySdenV+PGzfOOnfubCVLlqT1hQ+dfYd56NChVrx4cStfvrxFRETYgAEDbN26dc78Tp06WeXKle21116jU9hc6uzPOz4+3msE0I8//tgaNGhgjRo1cjrUzmwZR0udi3P29nrzzTdt3Lhxzohuy5cvt4IFC9qNN95oL7/8ss2fP98+//xze+edd2z27NkMEnCRUlJS7NSpU1arVi2bOnWqM/2rr76yvn37WmBgoEVGRlq7du2cxx+//fZbK1mypPMoJXKns6+dQkJCrGXLllazZk2rU6eOVz+en3zyibVs2dLq1avndUzDnyOUwj/2dxcE5wZTZcuWtbZt29rGjRt9Ulf8n8yTlyVLlljRokXtrbfeMrMzfdF4PB677rrr7OOPP3YebVm+fLmVKVPGqxNH5C67du1y+uvYuXOnFS9e3Hr16uXMzwyMf//9dwKpHCTzN3bXrl22atUqW7FihaWmplpKSoo1b97cKleu7JzwnDx50p588kmLioqy3bt3+7DWl9+OHTts9erVZmZefdtNmDDBgoODrWrVqhYdHW2ffPKJpaWl2ZEjR2zMmDH22GOP8eixD5198fviiy9a8eLFbcmSJWZmNnDgQAsMDLR7773Xa2CFRo0aWbdu3a74R1CvRGf3TfT6669bbGys9e3b16tMZjDVpEkTr9Hi+LwvzeOPP25RUVH21ltv2c8//+xMX758ueXLl88efPDBPz3GE0xlzb59+6xixYq2Z88ea968uTVq1MgSEhJs1KhRVrZsWbv77rtt6tSp9tprr1l0dLQ9//zzzs37zJu9yN2WLVtmxYsXd27yrl692oKCgqx48eJeI++9//771r59e0awzAJCKVyyrF4QfPzxx04w9eWXX1rVqlW5S+Aj77zzjk2bNs35++TJkzZ27Fh78sknzexMS5qSJUvagAEDrGPHjlakSBGbPXu2c9eSvldyvr87iV+xYoVFRkba4sWL7frrr7devXo5J0rr1q2zu+66y3788Ue3qoosOPuOXPny5a1s2bJWu3Ztq1Gjhh09etRWrVplnTp1snz58tktt9xitWvXtvDw8KuiFVDv3r3N4/F4jdD2wgsvWEhIiK1cudIyMjKsSZMmVrNmTfvss8+cIJ7WNr4xduxY59+nT5+2X3/91dq3b2/Tp083szP9DAUFBVnPnj2tRIkS1rlzZ1u7dq3zmszPj6Ai95k9e7YFBATYjTfeaMWKFbNixYo5A6hkmjVrllWrVs3uvPNO+gv7B1555RWLjIx0zs8zZbZyX7x4sQUEBFirVq28Bn5A1v36669WqlQpi4mJsS+++MLKli1rxYoVs+DgYJsyZYrXTY877rjD2rdv78Pa4p8aM2aMLViwwGvav//9b3vggQfMzOznn3+2MmXKWNeuXS02NtaKFi3q1WIqs4N7/D1CKVyyrF4QZN6pzgw0zu2wFO7YvHmztWzZ0mnBlmnlypW2ceNGS05OtltvvdUefPBBMzsTUBUoUMAKFSp03lC2yJkyL9qOHDlia9eutQkTJtjUqVPtp59+ck7y77rrLvP397e7777b67XDhg2zOnXqcJLqY5mf4dkB8JIlS6xw4cI2efJkS01Ntblz55rH47FXXnnFzM6MYvX+++/biBEjbNKkSVf8KFW7d++2Y8eOWUpKisXExFihQoVs586dNnHiRAsJCbH58+c7ZU+ePGktWrSwMmXK2Ny5c31Y66tbfHy8+fv7W9euXZ1px48ft2+++caOHDli69atsxIlStiECRPM7MzvUUhIiLVp08arZTWPc+UemeHhiRMn7LHHHrO3337bUlJSbP78+Va7dm2rWLHiea115syZ49WyBxd27neid+/eznD027dvt6lTp1q9evWsevXqtnTpUjMzW7hwoTVo0IDv0yXI7ER+zJgxFh0dbbNnz7ZDhw5ZfHy81/6cnp5uaWlpds8999iIESMI03OpjIwMa9mypQUGBjotes3OnFusWrXKUlJS7NZbb7X77rvPzMy2bdtmRYoUsfz589vTTz/tvAcujFAKF+1SLgiuv/56++yzz8yML6cv9O/f315++WWLj4+3Ll26WP369W3mzJleZb777jurVq2a88jEjz/+aPfdd591797dtm7d6otq4yJknlxu2bLFGjdubDVr1rSwsDDLnz+/XX/99TZq1Cg7ffq0zZs3zxn1KD4+3ubPn28DBw60a665xn744QcfrwXMzjwaULZsWedu60svvWT9+vUzM7O9e/fadddd5/xtdnU9cpGWlmYNGza0qKgoS0xMtD/++MM6d+5sefLksQIFCni1Djj7cYm77rrL/ve///mq2le9EydO2MyZM61kyZJ2zz33ONMz7yA//fTTdtdddzmt2J5//nmrV6+e9evXjwvnXGzVqlVWrFgxa9iwoTPim9mZkLJ+/fpWsWLF81pM4dKMHTvW5s+fbyNGjLCqVavak08+aXXq1LE777zTHnnkEevYsaMVK1bMjh496vU6vl9Zc+TIEa+/jx07ZtWqVbOmTZv+afnTp0/bk08+addee63t2LHDjSriMjl9+rR169bNQkJCbPHixV7zvv/+e6tcubJz82Tnzp3Wtm1b+/e//33Fd6GQ3QilcFG4IMh93n33XcufP7/TGfLmzZvt7rvvPi+Y+uyzz6xw4cK2atUqO3HihI0YMcI6dOhAM/pcIPOkcsOGDRYWFmaPPvqorVy50o4ePWo7d+60pk2bWvHixe2JJ54wszN3o9u1a2f58uWzSpUqWf369W3Dhg2+XAWcZevWrVamTBkbP368mZndd9991qtXL/v111/t2muvtd69ezvh/kcffWQvv/zyVXVh8eOPP1rNmjWtUqVKdvToUTtx4oT169fP8ubN6zzulbl9rqbALqc7efKkzZgxw3k072yPPfaYNWrUyGklc9ddd9n777/vfI5X0/59Jdm5c6c1btzY8uTJ49XKICMjw5YvX24NGza0YsWK2eHDh31Yy9zp7O/E5MmTLSoqyjZu3GhLliyxfv362Y033mgvvfSSc7Ppww8/tMaNG9vx48d9VeVc66effrLQ0FBr06aN7d+/39mG69evt4CAAK9HtczMpk+fbn379rWiRYteFY/SXw1Onz5t99xzz3nB1A8//GBFixa1V1991czOtPJt06bNeSEmLoxQCheNC4LcZfjw4XbHHXeY2ZkO95YtW2ZbtmyxTp062a233moffPCBU7Zhw4aWP39+q1KligUHB3MwzQUyv2s//vijBQQE2KhRo84rk5iYaF26dLGIiAibPXu2M33btm129OhRO3bsmFvVRRZ17NjRoqOjzczsrbfesttvv92KFy/u9GGQkZFhaWlp1rdvX3v00Ueviv7ezg4otm7danXq1LGaNWtaYmKinTx50u655x4rVKiQLV++3CkH3zq3ZfTx48dtxowZdu2113q1mHr77betTJkyVqtWLatYsaKVL1/eOX+gdXXulZGRYbt27bIGDRrYddddZ/v27fOat3jxYmvRooXt2rXLh7XM3b777jvr37+/V3+hp0+f9hopOT093Vq0aGEdOnTg+3QJduzYYcHBwebxeKxp06b28ssvO2Hf448/btWrV3eOO+vWrbOePXva3Xff7Yy6hytDenq6dezY0SuYOnTokPXp08ciIyOtXLlyFhISwrXTJSKUQpZxQZA7LVq0yDwej917773m8Xjsv//9r5mdOXBmBlPvvfeeU37ChAn2xhtv0Nw4Fzl48KCVLl3aateu7UzL/P5l/j85OdlKly5tbdu29UkdkTWZn1fmSfD06dPt0KFDVqFCBQsNDXV+X5OTk23YsGFWrFixK/7x2rMDt7MH1Rg4cKB5PB6rXr26HT161P744w/r0qWLBQcHn9fEHu47+xzg1KlTlpqaambewVSnTp2cMtOmTbPnnnvOnnrqKSeQoqVu7pF5jrh9+3ZbtWqVrVy50nkcc+/evVa3bl0rVaqUVzBlxmhk/8TSpUstICDAAgMD7e233z5vfnJysn3xxRfWuHFjq1KlivP7STB1YefeXP/Pf/5j//rXv+zJJ5+0hx56yKpXr25z58611atX20033WQjRowwszOPKickJHiFgsh9Mj//Q4cO2W+//eb1mHGHDh0sJCTEFi1aZGZme/bssS+++MJee+21K75Pz8uJUAoXxAVB7vPFF194/d2jRw/zeDzWoUMHr+lnB1MzZsxws4rIRqdPn7aePXtavXr1bPTo0ZacnGxm/3dQzbwYHDNmjN1www124MABTkpzgHNHEzv772PHjlnbtm2tY8eOZnbm8YFSpUpZjRo1rGzZsta8eXMrVqzYFX9Hbt++fdaxY0f79ttvvaa/+OKLFhYWZm+++aZFR0c7LXf/+OMPa9WqlRUvXpyL3Rzi3//+t3Xo0MHuuOMOp6PlP/74w2bOnHleMHU2WlrnHpm/YR9//LFFRkZa+fLlzePxWKtWrezDDz80szPBVL169axs2bIMj36J/uy4PXr0aCtYsKDde++9523XH374wWJjY61nz57O94nvVdZknkdlWrx4sTVv3ty+/PJLS0lJsUmTJllwcLC99NJL1qxZMwsODrbvv//eN5VFtsr8nn366ad222232XXXXWetWrWygQMHOmXuuecernezGaEU/hYXBLnP2rVrrUSJEs5IEMePH7e6deta165dzc/Pz0aOHOlVft26ddalSxerXLmyzZo1yxdVxj+QGWScOnXKHnroIatVq5aNHj3aGeXy7NYK/fr182pNBd/btWuXPfPMM15DSGeaNWuWeTwe+/rrr83M7LfffrMZM2bYsGHD7L333rsq+un76aefrE6dOtayZUuLj483szOjvIaGhtrChQvN7Ezn/tWrV7dq1arZkSNHLDU19bzWGHDP2b85cXFxVrRoUXv00UetWbNmli9fPnvjjTfM7Eww9cEHH1jJkiWtcePGvqoussmqVassKCjIJk+ebL/88outXr3a2rRpY3fccYdzbvG///3PKleubFWrVqUV3EU6+3uVmprqdcP4+eeft2LFitmzzz5rv/32m9fr9u/f71xks82zZv/+/VaiRAkbNmyY7dmzx5n+7LPPWpEiRZzjS3x8vPXq1ctatWplHo/HWrZsaadPn+am3xXgq6++sgIFCtj48eNt/fr19vTTT5vH43EG7Tp9+rR17drVPB6Pc26Cf4ZQCn+LC4LcJykpycaPH2/R0dHWq1cvZ9qpU6ds4sSJ5ufn5wxTmmnVqlV23333MRRzLvVXwVRmZ5yZ/Ut07drVnn76acvIyOCkKYd47LHH7Nprr7WAgAAbOHDgea0cmzdvbjExMVf1owA7duyw5s2b25133mm9evWyokWLeo3yanamc/hSpUpZ3bp1eXQ8h9izZ48NHjzY607yU089Zf7+/jZlyhQzOxNMvf3229auXTs+t1xu4sSJVrt2ba/PcdOmTdasWTO76667zOxMC4Tdu3dzrnGRzt6m//nPf6xdu3bWtGlT5xzPzOy5556za6+91p577jnbv3//ee/BMT/rEhMTbdSoURYcHGyNGjWycePGOfN69OhhPXr0cPriPHDggC1ZssRat27NCMZXgMz+Oh988EGnj9aDBw/atddea/379z+v/P3332/btm1zu5pXJEIpXBAXBLlH5klHcnKyTZgwwSpVquR10pKYmPiXwVRm3w/InTLvgJ4dTL344otOMDV8+HArU6YMHcrmQL/++quNHz/eatSoYeHh4Xb33XfbZ599ZhkZGfb6669biRIlLCEhwcyu3jvd27dvtyZNmlhAQIC9/PLLzvSzjzfbt2+/KlqP5UQjR4509lGzMyN8ejweK1GihNeoa2Zngqm8efM6LabO7haA84fcI/N847vvvrOjR4/apEmTrHLlyk6AnvlbtXjxYvN4PFywZ4OhQ4daZGSkjR492mbMmGEej8dat27tfIeee+45K1mypA0ZMoQRDbNB5mjVN9xwgzVs2NC2bdtmH374ofXo0cO5MZ+J0O/KkZGRYbfddpu9/fbb9ttvv1nx4sW9rqU+/PBD++qrr3xYwysToRSyhAuC3CPzM/n9999twoQJVqVKFbv//vud+YmJiTZp0iQrUKCAPf74476qJi6DPwumJk6caIMHD7ZChQrR30EOt2vXLps7d65FR0dbmTJlLDo62j7++GMrUKCAxcbG+rp6Prdr1y5r2rSptWjRwpYtW+ZMJ8jwrcwRec/tq2bAgAHm8Xhs6tSpZuZ90TZy5EivRyGQO82dO9c8Ho+tWbPGvv76a6/PO9OmTZusYsWKV/yADJfbjz/+aBUrVnQ6V/7yyy+tcOHC9vrrr3uVGzhwoLVr146QJJscOXLE5s6da9WrV7cyZcrY0KFDLTo62nr37u3rquEyOXHihN1777320EMPWenSpc+7uX///ffbhAkTrtqbhJcLoRSyjAuCnO3sE5DMi4Pk5GSbNGmSVapUySuYOnbsmL300ksWFhZmhw4d4uQllzv78zs7mOrXr5+FhoZaoUKFbN26db6qHs6R+Xlt2bLFFi9ebNu2bfP6HU1LS7NvvvnGunTpYiVLljSPx2O33HKL0+rtapbZcrdZs2b045ADZB5rMvfp2bNn2+7du535DzzwgBUuXNjmzZt33mvffPNNOl3OxRITE23ChAleNypHjRpl+fLls//+97+2f/9+O3nypD3xxBPOABvIunNH0P3mm2+sfPnyZmb22WefeQVSSUlJXqMoZ34fObfLXrGxsda8eXMrXry4eTwep7Uncq/M78jhw4ed0eTNzvQp5fF4rFq1as6jmhkZGTZs2DArXbo0Tx1cBoRSuChcEORMmT+qCxcutNjYWGvcuLG9/vrr9r///c9Onz5tkyZNsqpVq54XTB09etRXVcYlyPycjx8/bkePHvUKMs6+Y3N2MDVs2DDuUOdAH330kRUrVszCwsKsevXqNmzYsD+9QI+Pj7cxY8bwGZ5lx44d1rp1a7vlllts5cqVvq7OVatjx47O6I+nT5+2ffv2mcfjsc6dO3uNAnbffff9ZTBlxmhgucXZAcfGjRvN39/fbrzxRvvggw+c6SkpKfbss8+av7+/XX/99Va1alULDw+/4kcJzW6JiYnOv9euXWtmZ7rJqF+/vj3//PMWGBhokydPdsqsWbPGWrZs6bWdCaSyz9nbctGiRTZkyBALDAzkuJzLZX6uc+bMsZtvvtmqVKlipUqVstdff92OHz9u06dPtzx58tjdd99tnTp1sq5du1pwcDC/Z5cJoRQuGhcEOdPs2bMtMDDQHnroIXvqqaesePHi1rx5cztw4IDzKF90dLQzxDxyl7MPni1btrTrrrvOevTo4dUB59loVpzzZH6G+/bts3r16tmbb75pGzdutKFDh9rNN99sDz/8sHOBnpqaet7r8H+2bt1qd999t9fISHBXt27dnP00MyCPj4+3QoUKWdeuXc8LpoKDg+3TTz/1SV1xaTI/17OPJ8ePH7djx45Z7969zePx2CuvvOJV1sxs9erV9t5779n06dO9Ws7hwubMmWO9evWyw4cPW//+/c3f39+OHDli+/btszvuuMP8/Pxs6NChTvmUlBRr1aqVdejQgScXLqNzj8NX8+AjV5J58+ZZoUKFbMyYMbZnzx7r27ev+fv7O6Mez58/3/r162ft2rWzESNGEEReRoRSuCRcEOQsv/zyi1WtWtVee+01Mztz8AwMDLTBgwc7B9ITJ07Y6NGjrX79+ucNGYzc4fPPP7eAgAB78cUXbeHChdazZ08rWLCgffvtt76uGrJo/fr11qdPH+vevbvzON6JEyfsxRdftFq1ankFU7Qg+XtnB3dwz7n75aRJk+ybb75xPo/ly5db/vz5rWvXrl7nCO3atbPGjRu7Wlf8cz///LONHTvWzMw++OADq1WrliUnJ9uBAwesV69eVqBAAecYdPr0aUL0f+iDDz6wIkWKWLVq1SwsLMw2b97szIuPj7cyZcpYixYt7Nlnn7UpU6bY7bffbpUqVXI6OyeYArImPT3d7r33Xqd/3X379lnZsmXP6y8sM5Tnt+3yIpTCJeOCwH1/9YP4yy+/WLVq1ezEiRO2Y8eO80aKWLlypaWnp1tycjKP7OVCGRkZdvz4cWvfvr39+9//NrMzj18WK1bMHn30Ud9WDlmWlpZm/fv3t2LFilmVKlW85h0/ftxefPFFq1OnjsXExNDSDbnG9ddfbyVLlrT4+Pg/DabObjHFfp37DB482CpWrGj33nuv5c2b19566y1n3uHDh+2+++6zgIAAZ5RFQpGLl5GR4RX2du/e3Twej3Xq1Ml++eUXr7LLli2z3r17W6lSpaxp06Z23333cSMDyIJzr6FSU1OtXr16Nn/+fDt+/LhFRUV5BVLTp0+nZZSL8gi4RPny5fN1Fa4qGRkZ8ng8OnnypA4fPqxFixbp119/VVJSktLT0/Xrr79q9erVatGihVq0aKHXX39dkrRx40b95z//0ffff6/ChQsrJCTEx2uCi+XxeBQQEKDffvtN0dHR+uWXX3TTTTepdevWGj9+vCRp7ty5WrNmjW8rir+VN29eDRs2TN27d1dCQoKeeuopZ16hQoXUr18/NWvWTL/++qsOHTrkw5oCf27BggV6/PHH1adPH82YMUOStGvXLhUrVkw9evTQmjVrlJaWprp16+rbb7/VJ598oqFDh+qXX36RJPn5+Skj4/+1d59hVZzrGsf/i6YgoAYLVuyKWKJiUBTBQhTFEhK7IPYWS2JFTYgFC1giYq8EVGyoWFFUpBklRrBsKbGgsSAxgA1FYM4HzlqJO8k5ce/Egfj8viTMmsV1j3Mxs9Yz7/u8BWoegnhDixcvpm7dumzbto1evXoxdOhQ3WsWFhb4+fnRt29funfvTkREBHp68tXiTT158gQDAwMAjh49SpkyZVi+fDlnz57Fx8eHpKQkABRFoW3btqxZs4bLly9z8OBBNm/ejIGBAXl5ebrfIYT4Y1evXgUKv8dWr16dZcuW0bBhQ3r16sXKlSsByMnJYd++fRw6dAhFUdSM+86QO4cQxUBBQQF6enqkpKQwZswYHBwc6Nq1KzY2NowdO5bHjx/j7u5Ox44dadasGRs2bNB9MAwJCeH69etUrlxZ5aMQb0J7E9R+gcvOzsbAwICoqCjat2+Pi4sL69atAyA9PZ09e/aQmpoqN88iRHsu7t69y927d7l16xaWlpZ4eXnh7u7OiRMnmDdvnm7/UqVKMXXqVHbt2oWlpaVasYX4XRs2bGDgwIH88MMPxMfH4+Hhwfr16wE4e/Ys5cqVw9PT87XC1MmTJwkNDWXu3Lm63yNFi+LHzMyMDz/8kDt37rBw4UKePHkCFF7jLCwsWLJkCc7Oznh4eJCTk6Ny2uLlzJkzNGjQgGfPnjF58mSmTZuGl5cXEydOZMmSJRw6dIgVK1aQkpKCRqMB4PTp05iamuoeDiuKIgUpIf6AUjgzDI1Gw+HDh2ncuDETJ04E4JNPPuHmzZuYm5uzcuVK3d/U/PnzSUxMxM3NTfd3J/5eGkW+wQhRpGkLUpcuXaJLly707NmTVq1aYWdnx9atW9mzZw+GhoYMGDCApKQkzp8/z5o1a8jOziY2NpaNGzcSHR1N06ZN1T4U8Sdpb54nT57k2LFjzJkzBxMTE7Zu3crQoUNp164dkZGRuv1nzZrFnj17CA8Pp0aNGqrlFr/QnsMDBw7oRkT9+OOPjB49mgkTJlCiRAnmzp3L2bNn6dGjBzNnzlQ5sRB/bOPGjYwbN47t27fz8ccfc+XKFVxcXKhbty779u2jdOnSAHzwwQdkZmayZcsWWrZsSYkSJYiKisLJyYm9e/fy0UcfqXwk4s/QXr/OnTuHqakpNjY2AIwfP55vv/0WNzc3Pv30U8zMzADIysrCwMCAx48fywOwN3ThwgVmzpzJxYsXycvLIzExkWrVqunOwe7du5kyZQrOzs707NmTtWvXkpiYqBt9KF+Yhfhj2jKHRqMhJCQEd3d3rKyscHBwYMuWLTx//hw/Pz9CQ0MxMTHB1taWe/fuERkZSUREBM2aNVP5CN4hb3/GoBDiz9L2ZkhMTFRMTEwULy+v3/QM2LFjh/LBBx8odnZ2ysaNG5UhQ4YopUuXVho3bqx06tRJSUxMVCO6+C/t2bNHee+995SJEyfqloR+8eKF8uWXXyoajUYZO3asMmHCBGXo0KGKubm5cvHiRXUDi9+IiIhQTE1NlVWrVinZ2dnK119/rWg0GmXfvn2KoihKRkaGMmXKFKVevXqKn5+fumGF+AOnT59WNBqNMmfOnNe216lTR7GxsVHS09NfWzyjQ4cOiomJiZKQkKC7h9nb2ysrVqx4q7nFf0bbd2Xv3r1K5cqVldGjR+v6guXn5yvjxo1TWrZsqcyfP1/JyspSZs+erdjb20uf0f/C5MmTFY1Go1StWlV5+PChoiiv920NDQ1VmjVrptjY2CgODg66puZCiD9n586dikajUQ4ePKgEBQUp77//vu7v6Pnz58rhw4eVwYMHKz179lSmTJmiJCUlqZz43SNFKSGKuNu3byvlypVTevfurdv2700x165dq1hYWCjr169XFEVRUlNTladPnyqPHz9+63nFm3vx4oWiKL98GYiPj1fKli2rO5//vt+uXbuUrl27Kp06dVLGjRv32uo8Qh0ZGRm/2TZhwgRl7NixiqIoyo0bN5R69eq9tgCBoihKenq6MnPmTFk2XRRZKSkpioODg9KjRw9dgdzNzU0xMTFRnJ2dlbZt2yrvv/++MmbMGCU6Olp59OiRMm7cOF1T83PnzinNmjVTkpOT1TwM8QaOHTumGBsbK5s2bdKtEqpVUFCgTJ06VbGxsVHq1aunVKxYUTl79qxKSYsn7b1eW7SNjo5WQkNDla5duyo1atRQrl+/riiKouTk5Ojek56eriQlJeneI03Nhfhjv25qHh0drWg0GmXz5s2KoijK5s2bldq1ayt5eXmyMEMRItP3hCjibt26RZ8+fahUqRJTp06lbdu2uteU/x3eDeDg4ED58uUJDQ0lPz8ffX19tSKLN7BlyxZSU1OZNm0aZcqUAQp7t+zevZvjx4+TmZnJyZMnCQoKIiUlhUmTJjFq1CieP3+OiYmJNDctAry8vEhNTWXHjh0YGhoChX+bnTt3pl+/fri7u1OjRg26d+/OmjVr0Gg0bNmyhdq1a9OuXTvdFF0hiqrU1FQmTJiAvr4+2dnZPH/+nMDAQBo2bMiVK1dITU3Fz8+Pa9eu0bt3bzZu3Kh774sXL3j8+DEVKlRQ8QjEn5Wbm8u4ceN47733WLx4MY8fP+b69evs2LEDc3NzRo0aRfny5QkPD+fhw4fY29tTu3ZttWMXG7++3v/88888f/6cqlWrAoUNmCdOnMj169eJjIzEysoKgMDAQDp37qzrNSj3DCH+b9rvR1FRUSiKQm5uLs7OzkBhD8ShQ4fy3XffUapUKQD2799Pr169VEws5IomRBFXo0YNtm3bRm5uLvPnzycmJuZ39zMwMMDExARAClLFyNmzZzly5AirV68mKysLKFzRKCIigmXLluHm5kZgYCDlypWjS5cujBkzhh9++EHOdREyfPhwvvzySwwNDXVNfjUaDS1atCAgIAArKyvc3NxYuXIlGo2GvLw8jh8/zrFjx8jLy5OeIKLIq1u3Lv7+/rx8+ZLLly8zffp0GjVqhJ6eHo0aNeLjjz/m9OnTnDt3TrcAAxR+MShZsqQUpIoRIyMjHj16RGxsLHfv3mXixIlMnjyZyMhIlixZomsQ3LlzZ9zd3aUg9QYURdEVk7766it69uxJw4YN6devH2vWrMHGxoYlS5bQoEEDWrduzf79+3F2dmb16tWv/Q1JQUqI/5tGoyE2NhYnJyeys7Pp0KGD7jVzc3Pu3r2r68vm7e2Nm5sbt2/fViuuQIpSQhQL2i8EGo2G+fPnExsbCxRedAsKCvjxxx8xNjbWPQWQAZDFx/r163F2diYsLAx/f3+ys7Pp0aMHX3zxBWvWrKFBgwbMnj2bTZs2sWDBApo1a6Zb+Qikyana8vPzqV27Nk2aNOHEiRO4ubnplu/u1q0benp6mJmZMXPmTAwNDcnLy8Pb25vY2FiGDBmCgYGBnENRLNStW5e1a9fSqlUrtm7dqntAoqenR15eHsbGxjRo0AB9fX3y8/MBuT4VB7/3eWHixIn89NNP1KpVi6dPnzJ27FjOnz9PQEAAycnJZGdnq5C0eHv06JHu72Hu3LmsXr2ayZMnEx8fz507d1i+fDmpqam8//77LFmyBAcHByZPnoy+vj4xMTHo6enJZzsh/qSUlBQeP36Mj48PPXr00D3AVRQFY2Nj9PX1MTIywtfXl6VLlxIfH0/16tVVTv1uk+l7QhQj2ikUiqIwe/Zs3VS+GTNmcOzYMQ4dOqQbBi6KvlevXmFoaMj9+/f5/PPPuXr1KgMGDGDChAmYmJiQmZlJ2bJldft7eXmxb98+oqKiZORBEZSSkoK1tTXdunUjICCA6tWrs379ejZv3szDhw+xtbXlyZMnXLhwgfDwcFnVRRRL2vsQwOzZs2nTpo3KicR/SjvFJSYmhvDwcHJycmjUqBGenp48fvyYa9euYWdnp9t/woQJpKWlERISgrGxsYrJi5fo6Gh69erFtWvXMDc3x9HRkS+++AJXV1fOnDmDi4sLAQEBDB069LW2DGlpaVSrVk1X+JWp+kL8/9LT06lZsyYvX75kxowZ+Pj4vPZ6fn4+tra2GBkZcenSJaKjo7G1tVUprdCSkVJCFCP/PmLq4sWL+Pr6smrVKgIDA6UgVcwYGhoSEhJC//79yczMJCMjg0WLFrF8+XKysrJ0BamIiAhGjBjBhg0bCAkJkYJUEVWvXj2uXbtGdHQ0I0eO5O7du4wcOZKVK1fi4eGBsbEx7dq1IzY2VgpSotjS3of09fWZNGkSly5dUjuS+A9pNBpCQ0Pp0aMHqampvHz5kqFDhzJy5EhMTEx0BamEhASmTp1KUFAQ8+bNk4LUG6pcuTLlypXjq6++4tGjRxQUFODg4MD+/ftxdXVl2bJlDB06lJycHLZv305ycjIAVlZW6OnpUVBQIAUpIf6ksmXLsmXLFqpUqcLly5d127XjcPLz83n69Cnx8fGcP39eClJFhFzhhChmtF8IPv/8c7p06UJmZiZnz56ladOmakcTbygxMZExY8awdOlSXF1dsbCwYMSIEezatQuNRsP48eNRFIWrV6+SkZHBmTNnsLGxUTu24JcRBrdu3SIjI4Py5ctjampKvXr1OHv2LK1atWLYsGGsW7eOli1b0rJlS7UjC/GXqVu3Ln5+fmzcuJFGjRqpHUe8gV83yb558ybTpk1jzpw5jB8/nnv37hEUFISxsbGuCHLx4kU2bNhAXFwckZGRNGnSRM34xY6iKFhZWTFo0CD27t3LqVOnSE9PZ+LEiYSFhbF48WJGjx4NFJ6PoKAgKlSoQP369XW/Q3pICfHHtJ/HtNc2IyMj+vbti0ajwdPTk7Fjx7J69WpdT08jIyMOHz6MgYEBtWrVUju++F8yfU+IYio5OZlp06axYMECKVQUU4cPH2b06NHExsbq5rIrioKnpydhYWF4eXkxduxYSpYsSU5ODmZmZionFvDLB6DQ0FAmT55MXl4eenp61K9fn3nz5mFnZ0dSUhKtW7fGwcEBX19fGjRooHZsIf42shpY0ffNN9/Qt29fSpQooTtfiYmJjBo1im+//Za0tDTatGmjWyUUCh+cNG3alMTERCpUqEClSpVUPori49q1a1hbW+t+zsrKws7Oji5dutC1a1c+/vhjPvroI4KCglAUhZycHPr06UNubi5Hjx6VRUyE+BO0n8dOnDjBkSNHuHz5Mj179sTR0ZEmTZqwa9cuPD09GTp0KAEBAYDcr4oqOSNCFFP169dnz549UpAqhrTPArRNrp89ewbAy5cv0Wg0rFq1CiMjI1avXs2aNWvQ19eXglQRotFoiIuLw93dncmTJ3Pq1CkWLVqEqakpAwcO5Pz58zRo0IBz585x6NAhvL29efXqldqxhfjbyAf8oi09PZ3PPvuMdu3akZubqztfr1694smTJxw7dgwnJye6devGypUrgcKC1FdffUVycjJNmzaVgtQbOHjwIDY2Nri4uHDjxg2ysrIoU6YMGzZsYN26dURERDBz5ky2bdvGoEGDGDx4MK6urqSlpXH48GH09fUpKChQ+zCEKPI0Gg379++nV69elChRgqZNmxIaGkr//v25f/8+H3/8MYGBgQQFBTF48GBA7ldFlZwVIYoxQ0NDtSOIP+nXg1K1TUzbtWuHgYEBM2bMAKBEiRIA/PTTT7Rs2RIXFxf69OkjK1gVQdHR0XTo0IFPP/2UunXr0r9/f2bPno2NjQ0LFiwgKyuLevXqkZqayty5c+VvVQihmgoVKhAeHk52djaOjo7k5ubqtltaWtK7d29atWrFunXrdNP2tm/fTmZmJu+9956a0YslKysrqlatSlxcHJ9++in+/v5cvHiRdu3aMXLkSL777jvatm3LgQMHePbsGQYGBrRv356LFy/qVmmVL85C/DHtZ+r79++zYMEC/Pz8WLRoEbNmzSIxMZHOnTtTqVIl9PX16d27NwEBAZw4cYIHDx6onFz8EZm+J4QQfzPt8OIzZ84QHh5OpUqVaNmyJa1atSI+Ph4XFxdat26Nt7c3ZmZmBAcHEx8fz65duzA3N1c7vvgd8+bNIygoiO+//x5TU1Pd9g0bNjB//nzOnz9PxYoVVUwohBCvT1W5cOEC/fr1o27duuzfvx8jIyO++eYbpkyZQvfu3enXrx/m5uaEhISwZcsWoqOjady4scpHUDxo/53z8vLIz89nxYoVPH78mDJlypCWlkZ4eDi+vr4YGxszbtw4RowYwfTp03n58qXugRQUNmGWqXtC/FZQUBAA7u7uum23b9/G2dmZM2fO8OLFCxwcHHBxcWH9+vUAnDhxgubNm2NhYcGTJ09k1kERJo3OhRDib6bRaAgLC6Nv377Y2try008/YWhoyNy5c+nVqxfHjx+nX79+uLm5UVBQQEFBAQcPHpSCVBFmY2ODRqPh+PHjdO3alZIlSwLQvHlzDA0NycrKkqKUEEJ12pG2R44cYc+ePbz33nscO3YMZ2dnTp48iYeHBy9fviQkJISePXtSr149SpQowZkzZ6Qg9Qbu3r1LtWrVMDAwwMDAgPfff58FCxbg7e3NlClT2LhxI2PGjGHSpElYWFjg6+uLq6urrgWD9uGVFKSE+K0HDx6wfft2srOzMTY25pNPPgHgyZMnmJqakpSUxJAhQ+jSpYuuJ15SUhK7d+/GzMwMCwsLKUgVcTI2VAgh/mbp6ekkJCQQEBBAdHQ0QUFB2NvbM378eEJDQ2nevDmXL19mx44d7Nixg/j4eFq0aKF2bMEvQ8Rv3LjBtWvXuHDhAgBubm40atQILy8vDh06xM8//0xBQQEhISGULFmS8uXLqxlbCCGAwqJUREQEvXr1wtbWlnnz5rFy5Upu3rxJ27ZtycvLY8SIEYSEhPD9999z+PBhwsPDZUXfNxAfH4+VlRVTp04lOTkZgA8//BAHBwcGDBjA/fv3GT58OAcOHCA9PZ1SpUqRmZnJ2rVrdb9DpukL8ccsLS2ZO3cu1atXJyAggJCQEKDwAWGZMmXo0KED7du3Z8OGDbrC7tatW/n++++xsrJSM7r4k2T6nhBC/I0uXbrEoEGDMDAwYM2aNdjZ2QGFK/N8/fXXHDlyhOXLl+ue+oiiQ/vkeu/evUyZMgUo7Pfl7OzM0qVLqVmzJp988glXr14lKyuLBg0acOnSJSIiImjWrJnK6YUQ76LU1FTq1q372raZM2dy9epVDhw4ABRONfv222/p06cPdevWJTw8HCMjIzXi/iNkZWURFBTE3LlzadiwIZ07d2bmzJkAeHp6UqpUKRYtWoSZmRmZmZncvHmTrVu3smzZMl0PLyHE79M2/dfT0+PkyZNs2rSJGzduMH36dD766CNu375N3759yczMZOHCheTk5HDu3Dm2bNlCTEwMTZo0UfkIxJ8hI6WEEOJvlJmZSc2aNUlOTiYzM1O33dramkmTJtGjRw8GDx7MoUOHVEwpfo9GoyEmJobBgwcze/Zsdu3aRXh4OAkJCXh6enLnzh327NnDihUrmDlzJgMGDCA+Pl4KUkIIVYSHh1O/fn3279//2vb09HRu3bql+1lPT4/WrVszceJEzpw5g4ODg675uXhzZcqUYfz48cTGxlK7dm02btyIvb09Fy5cwMHBgWfPnnH16lUASpcuTfPmzfH398fAwEBWZhXi/6HRaNDT02P//v1s3ryZmzdv8t133zFnzhz27t1L9erV2bt3L7Vq1cLLy4v58+fzww8/SEGqmJGRUkII8TeLjY1l4cKFpKamsmHDBtq1a6d77cqVK2zevJkxY8b85um2UN/ixYsJDw/n5MmTQOGHo3v37tGqVSvs7e11Q8iFEKIoGD16NNu3byc4OJgePXoAEBERwdixY5k9ezYeHh66ffft24e/vz85OTns2LGDmjVrqhX7HyM7O5uLFy/i5eVFRkYGXbt25dixY3Tq1InVq1erHU+IYuPXTf/j4uJwdHQkICCANm3a8OOPP+Lr60tubi6ff/45bm5uANy6dYsyZcpgaGhIqVKl1Iwv3pCMlBJCiL+ItsZ/7949bt++TVpaGgBt2rRh6tSpNG3alAkTJhAdHa17T6NGjVi0aJEUpFSkHRqen58PQF5enu61Bw8ekJOTg0ajQaPR8OLFCypXrsymTZs4fvw4SUlJuvcLIYTa1q5di7u7O/369dNN17O2tqZ58+bs2LGDrVu3AoXXu/Pnz2NtbU1kZKQUpP4ipUuXxsnJibNnz9K3b1/S0tLIyMhg7dq1vxnBJoT4rZ07dwK81vQ/Ojqa5s2bM2rUKBo1akSXLl3w8fFBo9Ewd+5c3bWuRo0alClTRgpSxZAUpYQQ4i+g7T904MABPvroI9q0acOQIUOYM2cOAI6OjowdO5Z69erx2WefcerUKd17pZeHerTLeN+4cQMfHx8mTJhAfHy87vXu3btz4cIFtm3bBqBbZU9fX59y5cphamqqW25dCCHUpC2Qr1q1Ck9PT/r378/+/fupUqUK3t7elClThnnz5lGnTh2cnJwICAhgzJgxuuua+Gtoz4OPjw+zZs1i/Pjx2NnZ4erqqnIyIYq26OhoVqxYwZ07d17bXrZsWR4/fsz9+/eBws/crVu3ZvLkySQlJeHl5cXevXvViCz+IvJJWggh/gIajYYjR44wcOBABgwYQGhoKA4ODsyZM0fXJNvJyYlx48ZRrlw5vL29ycnJQWZQq0dbkLpy5QouLi5kZGRQrVo1WrduDUBOTg5OTk6MHTsWb29vgoODAXj58iWnT5+mZMmS8mVOCKE67X3k1wXy1atX4+7uTv/+/dm3bx/W1tYsX76cbdu20atXL7p37058fDyNGzdWK/Y/lp6enu6cfPDBB8ydO5ezZ89iYGDw2khcIcTrmjVrRlhYGNWqVePKlSu67bVq1eLevXscOnSIgoIC3WqVFSpUoEWLFjg5OdGyZUu1You/gPSUEkKI/8C1a9eoWbOmrijx448/4unpSc+ePRk/fjw//fQTzZs3p2bNmly6dIkhQ4awbNkyAGJiYqhZsyZVqlRR8xAEkJycjL29PUOHDuXLL7/EzMwMgMDAQFJSUpg+fTpPnjxhyZIlrFq1inr16mFsbMzNmzc5ceKENDUXQqhKO0o3NjaWmJgYsrOzsbGxYeDAgUBhj6nAwEB27NhBr1691A37jtOeKyHEb/367yMtLQ1XV1caN27M9u3bAfjiiy9YvHgx/v7+fPjhh1SrVg1vb2/S09NZsmQJZcuWVTO++C9JUUoIId6AoigcPnyYHj16sH37dtzc3DAyMiI3NxdfX1/69euHqakpHTp0wNHRkQULFjBlyhS2bNnCyJEjWbt2rdqHIP5XTk4OQ4YMwdTUlHXr1un6FyxYsIDZs2dTp04d+vfvz+TJkzE3NycuLo7IyEjKlStHx44dqV27tspHIIQQEBoaypAhQ+jZsydPnz7l2rVr2NjYsGfPHgDGjRtHcHAwGzdupHfv3iqnFUKI3/p1USozM5NNmzYREhJC48aN2bJlCwDe3t4EBARgbm6OmZkZN27cICYmhvfff1/F5OKvIEUpIYT4D3h4eBAWFsa6devo3r07JiYmvHr1CkNDQ/z8/IiKimLr1q1YWFjg6+tLcHAw+fn5REREYGlpKU9Li4Dnz5/TrFkzPv/8c0aNGoWiKERHR9OxY0eOHz9OVFQUBw8exMXFhbFjx1KpUiW1IwshxGuuX7/Ohx9+yJQpUxgzZgzJycm0bt2agQMHsnLlSt1+gwYN4vTp0yQnJ2NqaqpiYiGE+H0nTpzA2NiYtm3bkpWVxTfffMPmzZtp3rw5mzdvBgr7Tt2/f5/MzEycnZ2pVauWyqnFX0F6SgkhxJ8UFhbG2bNnAfjmm2/46KOPGDZsGAcPHuTFixcYGhoCcOnSJZ49e4aFhQUA6enpDBw4kHPnzlGpUiUpSBUB+fn53Llzh9TUVOrVqwcU9gVr164dV69epX379nh7e9O1a1fWr19PbGysyomFEOK3Hj58iKmpKWPGjCEtLQ1nZ2f69OmjK0hpr13BwcFcuHBBClJCiCLp5cuXbN26lXbt2hEXF0eZMmVwd3dn6NChfP/99wwZMgQABwcH+vTpw6hRo6Qg9Q9ioHYAIYQo6hRF4fbt2wwaNAhXV1eMjIxo0aKFbjjxsGHDAOjRowfGxsZ07tyZmTNn6raHhoZy7tw5+TKgsm+++Ybc3FyGDx+Ovr4+5ubmVKlShf3799OyZUvd+albty75+fno6+vTv39/IiIiZJSUEKJI0U51URSF9957j/j4eD7++GNcXFxYtWoVAAkJCezYsQMLCwsaNGiApaWlyqmFEOKXxRm01zCNRkOJEiVYuHAhhoaGtG/fnpMnT9K2bVvc3d2Bws9wffv2ZefOnWpGF38TGSklhBD/D41Gg5WVFfv27eP8+fN8/fXXfPfddwBs2bKF3r17M2zYMMLCwsjPz+fDDz9k/Pjx/Otf/+LevXtERkbqRuMIdWRkZLB79242btzItm3bAKhUqRIdOnRg69atnDp1itzcXKDwfGv7SwUGBmJgYCDnTwihCkVRdF/gft1xQzvi1tLSkmvXrmFnZ4eLi8tr/fECAwP517/+Rfny5d9+cCGE+DcFBQVA4ago7TUsJycHKLy+Va9enfnz59OnTx86duxIbGwsZcuWxcPDg969e3P//n3u37+vWn7x95GeUkII8Sdon+ScPn2aoUOH0qZNGyZOnKhbgnbYsGGEhISwadMm+vXrp3vP8+fPKVWqlJrRxf9KTExkyZIl3Lx5k+HDh+Pp6cmzZ8/o1KkTaWlp+Pn50blzZ8qVK8etW7dYuXIlGzZsICYmhiZNmqgdXwjxDsrJycHY2Jjc3FyMjIyIiYnh3LlzmJiY0KNHD6pUqcKhQ4dwc3Nj2LBhDBo0iJIlS7Jt2zY2b95MdHQ0jRs3VvswhBDvuIKCAvT09EhNTWXixIls3ryZ+/fv4+rqSkREBNbW1rrP2nfu3OHzzz/n0KFDxMTE0KJFC7KzsykoKJBV9v6hpCglhBB/gnY6F8CpU6cYNmzY7xam9u7dy4oVK+jduzcmJiZqRha/49KlSyxevJi0tDRGjRqFu7s7N2/eZNiwYURFRVG1alUsLCzQaDQ8fvyYXbt2yaouQghVBAUFMW3aNBISEqhYsSK7d+9m6NCh1KlTh2fPnpGfn8+RI0eoX78+oaGhfPbZZ+Tn52Nubo6pqSnr16+X65cQQnXagtSlS5dwdHQkOzubhIQEDAwMGDt2LHfu3NFdy7T7njp1ik6dOgGFvfFat26t8lGIv5MUpYQQ4v+gfWqjLUppb5YnTpxg5MiRvylM9enTh7i4OK5du4aZmZnK6YWW9rwBXLx4ET8/P27dusWnn37KgAEDAFi1ahW3b9/m0aNHODo64uTkRLVq1dSMLYR4h0VFRTFjxgyePn3KkSNH8Pf3x8bGhkGDBpGQkIC3tzexsbF8++231K9fn7t375KZmYmRkRHly5eXEQVCCNVpP38lJCRgb2+Pp6cnMTExLFiwAFdXV77//nu+/PJLLl26xPHjx2nQoAEASUlJeHt7U7FiRcaMGYO1tbXKRyL+TlKUEkKIP6AtSJ08eZJ9+/aRlZVFw4YNGT58OBUqVHitMDVp0iRsbW0BuH//vjTGLiK05zAzMxONRoOxsTElSpTg2rVrzJs3j7S0NEaMGIGnp6faUYUQ4jfOnj3LtGnTePDgAdWrV2fp0qW60U8//PADEydOJDY2lnPnzlG/fn11wwohxK9oC1KJiYm0bt2azz//nPnz51O1alWmTZvGhAkTgMJFGWbPnk1CQgJhYWFYWVmxcuVKEhIS2LZtm7TBeAdIo3MhhPgDGo2G/fv34+rqysuXL3n48CH79u3jgw8+4Pbt2zg7O7N+/XrOnz/PvHnzuHjxIoCscFREaAtShw4dolu3bjg5OdG4cWMCAwOpXbs2X3zxBTVq1GDjxo0EBwerHVcIIXS0DYFbt26Nn58fdevWJSoqCiMjI93rderUYcWKFTg6OmJtbc2NGzfUjCyEEK/R09Pj+++/x8HBgc8++4z58+cDUL16dbKysnT7vf/++yxcuBB7e3tsbW1p164dy5cvZ86cOVKQekdIUUoIIf7ATz/9xJw5c5g7dy4bNmzg+PHjbNmyhXr16uHk5ERGRgbOzs6sXLmStLQ0KlasCPyyKpJQl0aj4dixY/Tr1w83NzdCQ0NxcHBg9OjRxMXFYW1tzfTp06lVqxaLFi1i165dakcWQggURUFPT4+UlBRu3bpFq1at+PLLL2nRogU9evQgIyMDPT09FEWhTp06+Pr60rt3b169eqV2dCGE0Pn555/58MMPGTFiBD4+PrrtFStWJCUlBUB33WrcuDG7du0iMjKSefPmkZiYSNOmTVXJLd4+KUoJId552lnMT548ee3np0+fcv/+/dcaxVpbW+Pr60vZsmXZuXMnBQUFdO7cmbi4OCpXrvzWs4vfpygKeXl5bN26lU8//ZQpU6ZgbGxMdHQ0gwcPxsnJCYAmTZowadIk7O3t+eCDD9QNLYR452lHeIaGhtK9e3cOHDjAw4cPadWqFcuXL6dSpUo4OTnx8OFDNBoNiqJQv359goODZfqeEKJIMTU15ejRoyxduhQoXDQIoGzZsmRmZgJgaGio23/p0qWYmJjg5uZGjRo13npeoR4pSgkh3nkajYZHjx5Rq1YtNmzYoBvpVKlSJapWrcqZM2d0++rr69O0aVMMDAxITk7WNc82NjZWJbv4pYgIkJeXp/t/AwMD0tLScHFx4cmTJ9ja2tK+fXvWrl0LwLZt2/jhhx9o3rw5K1eulA9AQgjVaTQajh8/zqBBg5gwYQL9+/enQoUKQOFUvsWLF2NhYYGzszMPHjzQ3a9+/cVOCCGKAiMjI91CQL/WsGFDnj59CvzyGc7b25upU6dSokSJt5pRFA1SlBJCCAqLSh4eHnz66acEBQUBhXPhW7duzalTpwgNDdXtq9FoqFKlCmXKlEFRFN2TbfH2af/tHz16BBQWoqKjo0lKSgKgatWqLF26lMaNG9OrVy9WrlwJwPPnz9m9ezcHDx5EURRdnxYhhHhbtH2jtP8FyM3NZdOmTYwYMYJx48bpClLagru9vT1LliwhPz+fjz76iIKCAmTNIiFEcaCvrw9AuXLlSE5O1i1C4+3tja+vL/Hx8TRu3FjllEINBmoHEEKIosDExARvb29KlSrF4MGD0dfXZ8CAAcyZM4cBAwbg6+tLdHQ09vb2REVFcfLkSRYsWCDFKJVpNBoePnzIoEGD6Ny5M1ZWVvTp04ejR49ibW1N7969mTlzJqVLl2bVqlW69/n4+HDlyhWWLVsm51AI8dZpV6W6desWJ06cwNbWlmbNmmFkZMStW7ewsbEBCqe76OvrY2BQ+JH97t27fPDBB2zdupVy5crpRusKIURxYWlpiaIomJmZMX/+fHx9fYmJiaFFixZqRxMqkaKUEOKdo/0yoJWXl4e+vj7m5ubMnTuXU6dOMWjQIPLy8vDw8GD79u0sWrSImJgYDh8+jKWlJWfOnKFBgwYqHoXQUhQFa2tr1q9fT1paGlu3bqVz584AuLi4kJiYSFhYGE5OTjRv3pw7d+5w8uRJTp48Sa1atVROL4R412jvQZcvX+aTTz7BxsaGqlWr6l43Njbm/PnzQOHIAu3+d+7cYceOHQwcOBBbW1u14gshxH+lYcOGlC1blk8++YSjR48SFxcnBal3nDxeEUK8c/T09Lh9+zb+/v5A4ZQv7fQHX19fUlJS6N27N56enmzZsoX33nuPhQsXEhMTQ0xMDEePHn2t+blQj6IoVKxYkW7dupGWloalpaVuKh+AmZkZM2bMYP78+VhaWpKSkkLVqlWJi4ujWbNmKiYXQryr9PT0SEpKwtHRETc3NwICAnBxcdG9PmXKFK5cucJnn32m2x8gICCAHTt2yHRjIUSxptFoSElJ4ejRo5w/f14KUgKNIhPRhRDvmPz8fGbNmsW+ffsYNmwY06ZNA2DBggUsXbqUnTt34uTkxJw5c/Dx8SEwMBB3d3eVU4t/p+0nlZOTw507d0hJSeHMmTNERUXRq1cvvLy81I4ohBC/kZOTg4eHBxUrViQgIEC3/dWrV/z8889cv36d2NhYgoODKVOmDE2aNOHhw4eEh4cTGRkpD0WEEMVafn4+Cxcu5JNPPpFZBwKQ6XtCiHeQvr4+48eP58WLF4SGhmJubs6TJ09YtmwZwcHBdOrUCYAZM2agr6/P4MGDMTIyom/fvionF1ragtSRI0fYuHEjixcvxtXVFVtbW16+fMn+/fvR09Nj+vTpAAQHB9OiRQusra2lMb0QQlUGBgY8ePAAR0dH3bbw8HCOHTvGxo0bsbKywsTEBH9/fzZv3szNmzextLQkLi6Ohg0bqphcCCH+e/r6+nh5eekanwshRSkhxDupSpUqzJgxAx8fH77++muuX79OeHg4HTp0IC8vDwMDA0qVKsWUKVMwMjKiSZMmakcWv6LRaAgNDWXIkCGMGTOGJ0+eAIXNM728vFi0aBGhoaFcv36d8uXLs3DhQlJTU3XvFUIIteTk5PDTTz9x6dIlkpKS2LdvH4GBgTRq1Ij58+djamqKn58fERERBAYGAr80PBdCiH8CuZ6JX5Ppe0KId1p6ejoLFiwgMjISDw8PJk+eDKArTAEysqYISkpKomPHjnzxxReMHj1at/3mzZvUrFmTx48f4+/vz4kTJ8jJyWH9+vUy5UUIUWScOnWKzp07U6VKFX7++Wf8/Pzo2LEjderU4dWrV7i6ulKhQgWCgoIAuQ8JIYT455KRUkKId1rFihXx8vKioKCA3bt3k5eXx/Tp0zEwMNA9mZYvAkXPvXv3qFChAqNHj+bnn39mz5497Nq1i/Pnz9OvXz98fX2ZPn0606ZNIycnh9KlS6sdWQghdDp06MCNGzd4+PAhVlZWlCtXTveavr4+pUuXpkaNGrpFOOQ+JIQQ4p9KRkoJIQTw4MEDfHx8uHjxIh07dmTOnDlqRxL/h5SUFBo0aMCgQYNISEigVq1aWFtb06hRIzw8PAgLC6Nbt25qxxRCiDeSm5vLvHnz2Lx5M5GRkdStW1ftSEIIIcTfSkZKCSEEhb2IZs2ahZeXF3FxcTx69AgLCwu1Ywl+mbby4MEDSpcuTV5eHvXq1ePgwYOsWbOG7t27M3jwYOrUqYOenh7r1q3jxYsXascWQog3EhwcTHx8PDt37uTo0aNSkBJCCPFOkJFSQgjxK+np6UDhtD5RdOzfv59Zs2ah0Who06YNY8eOpWnTpq/1/gKYNWsW33zzDbGxsVSvXl3FxEII8eclJyczevRoypYti4+PD9bW1mpHEkIIId4KKUoJIYQo0pKTk2nfvj3Tpk0jIyODhIQEMjIy8Pf3p1WrVgAcOHCAnTt3curUKY4ePUqzZs1UTi2EEG/m4cOHlChRQnrgCSGEeKfI9D0hhBBFzq9Xmnr16hUff/wxkyZNAiAyMhJ/f3/GjRvH6tWrsbOzQ19fHzMzM06fPi0jDIQQxVKFChXUjiCEEEK8dTJSSgghRJGiLUidOnWKqKgosrOzefDgATt27NDtoy1M3b17F39/f+zs7Hj58iUlSpRQMbkQQgghhBDiTUhRSgghRJFz8OBB+vTpQ6NGjcjMzOTOnTvExMTQsmVL3T5RUVHMmTOH/Px8jh07RokSJWTZdCGEEEIIIYoRKUoJIYQoUrKzs1m/fj1ly5Zl+PDhxMfHs2jRImJiYjh06NBrhamYmBhq1KhB1apVVUwshBBCCCGE+E/oqR1ACCGE0Lp06RIVKlQgODiYypUrA9CyZUvmzp2Lo6Mjrq6uXLhwQbd/27ZtpSAlhBBCCCFEMSVFKSGEEG9dQUHB7/5coUIFBg0axOXLl8nMzNS9bmNjg7e3Nx07dsTOzo6LFy++1bxCCCGEEEKIv56svieEEOKt09PTIykpicDAQEaMGEH16tXR09PD0tISHx8f8vLyGDlyJDVr1sTe3h4oLEzNmDGDkiVLUqpUKZWPQAghhBBCCPHfkp5SQggh3rrc3Fzatm3Ld999R+3atXF1dcXOzo5+/foB8OzZM4YPH05YWBjHjx+nTZs2r73XyMhIrehCCCGEEEKIv4gUpYQQQqjCz88PAwMDGjduTExMDF9//TUuLi44ODgwevRoHj9+zLRp0wgJCSEsLAwnJye1IwshhBBCCCH+QlKUEkIIoYrIyEh69epFREQEtra23L9/n/Xr17NgwQKaN2+Oh4cHjRo1YsOGDZw6dYoffviBkiVLqh1bCCGEEEII8ReRRudCCCFU4eTkxIgRI/j666958eIFlSpV4tq1a9SqVYsGDRqwZ88e2rdvj6WlJd9++60UpIQQQgghhPiHkUbnQgghVGNnZ8eyZcswNDRk+PDhREZGcvLkSWxsbEhNTSUiIgJHR0eqVq2qdlQhhBBCCCHEX0ym7wkhhFCVo6MjMTExWFpacuTIEZo2bap2JCGEEEIIIcRbINP3hBBCqEL7TGT69OnUqVOHVatW0bRpU+RZiRBCCCGEEO8GKUoJIYRQhUajAaBFixYUFBRw4cKF17YLIYQQQggh/tmkKCWEEEJVFStWxNvbm+XLl3P+/Hm14wghhBBCCCHeEilKCSGEUF379u1p2bIllStXVjuKEEIIIYQQ4i2RRudCCCGKhBcvXlCyZEm1YwghhBBCCCHeEilKCSGEEEIIIYQQQoi3TqbvCSGEEEIIIYQQQoi3TopSQgghhBBCCCGEEOKtk6KUEEIIIYQQQgghhHjrpCglhBBCCCGEEEIIId46KUoJIYQQQgghhBBCiLdOilJCCCGEEEIIIYQQ4q2TopQQQgghhBBCCCGEeOukKCWEEEIIIYQQQggh3jopSgkhhBBCCCGEEEKIt+5/AHb/y3MByCbtAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.close(\"all\")\n", "fig1, ax1 = plt.subplots(figsize=(12, 7.4), dpi=100)\n", @@ -1637,7 +171,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8980f137-8176-4156-8319-5039e61a11c5", + "id": "5", "metadata": {}, "outputs": [], "source": [] @@ -1645,7 +179,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ba8a41fb-5e6d-41e0-b0c1-2ba7bf113908", + "id": "6", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/01_test_parse_crossings.ipynb b/src/peilbeheerst_model/01_test_parse_crossings.ipynb index 10736ea..4df0fd6 100644 --- a/src/peilbeheerst_model/01_test_parse_crossings.ipynb +++ b/src/peilbeheerst_model/01_test_parse_crossings.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4bf1ab0f-3ade-41c7-ac67-5ccd41930481", + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -24,7 +24,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2122bf39-a6e1-4f80-a9dd-4782abe7d351", + "id": "1", "metadata": {}, "outputs": [], "source": [ @@ -340,7 +340,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8a965c64-38f9-4955-ba7e-680d52c151de", + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -399,7 +399,7 @@ { "cell_type": "code", "execution_count": null, - "id": "633f4754-9354-4f3b-8bb5-087d9de1d5a5", + "id": "3", "metadata": {}, "outputs": [], "source": [ @@ -470,7 +470,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7833bb4e-0c62-40df-a820-e5621bd924cd", + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -523,7 +523,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b2630053-7e0b-4040-abbf-c1993f1b1732", + "id": "5", "metadata": {}, "outputs": [], "source": [ @@ -569,7 +569,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4f834db9-ddfd-4ebd-8e6e-7232dd99a7cf", + "id": "6", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/01b_ad_krw_to_peilgebieden.ipynb b/src/peilbeheerst_model/01b_ad_krw_to_peilgebieden.ipynb index 8c4ef7d..edb465e 100644 --- a/src/peilbeheerst_model/01b_ad_krw_to_peilgebieden.ipynb +++ b/src/peilbeheerst_model/01b_ad_krw_to_peilgebieden.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8e3aee81-bf33-4516-8850-26b5765669e2", + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -19,7 +19,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d037c21b-381a-4910-a801-f1d83924c555", + "id": "1", "metadata": {}, "outputs": [], "source": [ @@ -41,7 +41,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a797396c-2f6a-4c59-983f-2f195de9bf87", + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -74,7 +74,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5225ced2-77c6-4cfb-b7c5-50a4e86fb95b", + "id": "3", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/02_crossings_to_ribasim_notebook.ipynb b/src/peilbeheerst_model/02_crossings_to_ribasim_notebook.ipynb index e6b75c5..92082cb 100644 --- a/src/peilbeheerst_model/02_crossings_to_ribasim_notebook.ipynb +++ b/src/peilbeheerst_model/02_crossings_to_ribasim_notebook.ipynb @@ -2,8 +2,8 @@ "cells": [ { "cell_type": "code", - "execution_count": 6, - "id": "698d0fb7-f655-4ef4-8f2c-4007711a6f97", + "execution_count": null, + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -35,7 +35,7 @@ }, { "cell_type": "markdown", - "id": "1727b840-0c96-4801-976f-44638063e2ef", + "id": "1", "metadata": {}, "source": [ "# Amstel, Gooi en Vecht" @@ -43,20 +43,10 @@ }, { "cell_type": "code", - "execution_count": 19, - "id": "894a203e-0681-407e-83c9-f30cff83287c", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Done\n" - ] - } - ], + "execution_count": null, + "id": "2", + "metadata": {}, + "outputs": [], "source": [ "model_characteristics = {\n", " # model description\n", @@ -153,7 +143,7 @@ }, { "cell_type": "markdown", - "id": "00b919b6-92ba-4d8e-b6aa-6818ae84a9e2", + "id": "3", "metadata": {}, "source": [ "# Delfland" @@ -162,10 +152,8 @@ { "cell_type": "code", "execution_count": null, - "id": "5fc9b8a4-0ce0-46dd-9103-a10123e5bb3c", - "metadata": { - "scrolled": true - }, + "id": "4", + "metadata": {}, "outputs": [], "source": [ "model_characteristics = {\n", @@ -265,14 +253,14 @@ { "cell_type": "code", "execution_count": null, - "id": "5b309773-f18f-4d93-9986-f8a88d4c118f", + "id": "5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "3d1ef23c-590a-467d-a855-7c122d7b2950", + "id": "6", "metadata": {}, "source": [ "# Hollandse Delta" @@ -281,10 +269,8 @@ { "cell_type": "code", "execution_count": null, - "id": "b093ce38-a5e7-4c89-a5c8-0715a0262f32", - "metadata": { - "scrolled": true - }, + "id": "7", + "metadata": {}, "outputs": [], "source": [ "model_characteristics = {\n", @@ -383,7 +369,7 @@ }, { "cell_type": "markdown", - "id": "164a32d0-1bfa-458e-96fe-ce3e39b4f896", + "id": "8", "metadata": {}, "source": [ "# Hollands Noorderkwartier" @@ -391,18 +377,10 @@ }, { "cell_type": "code", - "execution_count": 5, - "id": "dacfbfbf-c8de-486f-a1e3-3ae0ab5084c2", + "execution_count": null, + "id": "9", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Done\n" - ] - } - ], + "outputs": [], "source": [ "model_characteristics = {\n", " # model description\n", @@ -498,7 +476,7 @@ }, { "cell_type": "markdown", - "id": "1584b072-7343-45f9-931f-c47b5e017919", + "id": "10", "metadata": {}, "source": [ "# Rijnland" @@ -506,18 +484,10 @@ }, { "cell_type": "code", - "execution_count": 5, - "id": "4d849e83-6a82-4e0e-ba71-455a3ac70f1b", + "execution_count": null, + "id": "11", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Done\n" - ] - } - ], + "outputs": [], "source": [ "model_characteristics = {\n", " # model description\n", @@ -617,7 +587,7 @@ }, { "cell_type": "markdown", - "id": "6bf50e62-98ed-415c-a79e-7819d010c8d5", + "id": "12", "metadata": {}, "source": [ "# Rivierenland" @@ -626,7 +596,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d1a952bc-f7d4-41da-98c1-8600f6c5b11c", + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -744,7 +714,7 @@ }, { "cell_type": "markdown", - "id": "6c079f11-7f01-44e6-8794-0eb8209b7110", + "id": "14", "metadata": {}, "source": [ "# Scheldestromen" @@ -752,18 +722,10 @@ }, { "cell_type": "code", - "execution_count": 8, - "id": "5ac210c0-151c-4490-9cd0-e708659bbe4c", + "execution_count": null, + "id": "15", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Done\n" - ] - } - ], + "outputs": [], "source": [ "model_characteristics = {\n", " # model description\n", @@ -863,7 +825,7 @@ }, { "cell_type": "markdown", - "id": "0e9a9726-a95c-4f59-9d2c-cf1d1a7d557b", + "id": "16", "metadata": {}, "source": [ "# Schieland en de Krimpenerwaard" @@ -871,18 +833,10 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "44f18817-06c8-40c0-8918-750587a6f599", + "execution_count": null, + "id": "17", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Done\n" - ] - } - ], + "outputs": [], "source": [ "model_characteristics = {\n", " # model description\n", @@ -981,174 +935,17 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "f96e0c9e-cf29-4eb2-abf0-6ab07873d2bb", + "execution_count": null, + "id": "18", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
TabulatedRatingCurve / static
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
node_idactivecontrol_statelevelflow_ratemeta_type_verbinding
0161<NA>NaN0.00.0Inlaat
1161<NA>NaN1.01.0Inlaat
2162<NA>NaN0.00.0NaN
3162<NA>NaN1.01.0NaN
4163<NA>NaN0.00.0Uitlaat
.....................
529607<NA>NaN1.01.0NaN
530608<NA>NaN0.00.0Inlaat
531608<NA>NaN1.01.0Inlaat
532612<NA>NaN0.00.0NaN
533612<NA>NaN1.01.0NaN
\n", - "

534 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - "TabulatedRatingCurve / static\n", - " node_id active control_state level flow_rate meta_type_verbinding\n", - "0 161 NaN 0.0 0.0 Inlaat\n", - "1 161 NaN 1.0 1.0 Inlaat\n", - "2 162 NaN 0.0 0.0 NaN\n", - "3 162 NaN 1.0 1.0 NaN\n", - "4 163 NaN 0.0 0.0 Uitlaat\n", - ".. ... ... ... ... ... ...\n", - "529 607 NaN 1.0 1.0 NaN\n", - "530 608 NaN 0.0 0.0 Inlaat\n", - "531 608 NaN 1.0 1.0 Inlaat\n", - "532 612 NaN 0.0 0.0 NaN\n", - "533 612 NaN 1.0 1.0 NaN\n", - "\n", - "[534 rows x 6 columns]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "model.tabulated_rating_curve.static" ] }, { "cell_type": "markdown", - "id": "f8176275-f42d-4ab4-923d-3b739613ea2f", + "id": "19", "metadata": {}, "source": [ "# Wetterskip" @@ -1157,7 +954,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2ad4796a-a184-4be9-8106-cd9bd62fa369", + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -1258,7 +1055,7 @@ }, { "cell_type": "markdown", - "id": "5455f6bc-88e3-43cd-922b-467b5c58a917", + "id": "21", "metadata": {}, "source": [ "# Zuiderzeeland" @@ -1266,18 +1063,10 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "c261b5e9-8c1f-44c8-9076-28003b203611", + "execution_count": null, + "id": "22", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Done\n" - ] - } - ], + "outputs": [], "source": [ "model_characteristics = {\n", " # model description\n", @@ -1376,7 +1165,7 @@ { "cell_type": "code", "execution_count": null, - "id": "03982b8e-1288-48b1-9279-eadb47d9952a", + "id": "23", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/03_test_outlets.ipynb b/src/peilbeheerst_model/03_test_outlets.ipynb index 523f9a3..d05157b 100644 --- a/src/peilbeheerst_model/03_test_outlets.ipynb +++ b/src/peilbeheerst_model/03_test_outlets.ipynb @@ -2,19 +2,10 @@ "cells": [ { "cell_type": "code", - "execution_count": 7, - "id": "90f0b71e-aba0-4772-8931-1a22240566d8", + "execution_count": null, + "id": "0", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], + "outputs": [], "source": [ "import sys\n", "\n", @@ -28,7 +19,7 @@ }, { "cell_type": "markdown", - "id": "0eb85747-970f-4c98-a335-25e500d54863", + "id": "1", "metadata": {}, "source": [ "# Case 1" @@ -36,7 +27,7 @@ }, { "cell_type": "markdown", - "id": "7315c3e5-66a9-4b4d-a7e1-e396ec8084cf", + "id": "2", "metadata": {}, "source": [ "### Example 1: boundary and basin levels on target " @@ -44,295 +35,10 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "7c117602-860f-4b79-85f0-4baeb2b571e2", + "execution_count": null, + "id": "3", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0031250.0087502.0000000.0055500.004450-0.0000110.00.0001450.00.00.0009660.190740
12024-01-01 00:00:0041000.0090001.0000000.0044500.005304-0.0005800.00.0001160.00.0-0.000390-0.083897
22024-01-01 00:01:0031250.0080692.0000000.0047380.005262-0.0003670.00.0001450.00.0-0.000302-0.061862
32024-01-01 00:01:004999.9741960.9999830.0052620.0038040.0009480.00.0001160.00.00.0003940.095823
42024-01-01 00:02:0031249.9860761.9999910.0055170.0044830.0010210.00.0001450.00.0-0.000131-0.028820
..........................................
892752024-01-31 23:57:004999.9928100.9999920.0046960.0041460.0004120.00.0001160.00.00.0000220.005092
892762024-01-31 23:58:0031250.0052251.9999990.0050700.004930-0.0001390.00.0001450.00.00.0001350.026956
892772024-01-31 23:58:0041000.0175381.0000040.0049300.005271-0.0002690.00.0001160.00.0-0.000189-0.037547
892782024-01-31 23:59:0031249.9968611.9999950.0054070.0045930.0000830.00.0001450.00.00.0005860.116452
892792024-01-31 23:59:0041000.0014280.9999960.0045930.004688-0.0004240.00.0001160.00.00.0002130.047562
\n", - "

89280 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " time node_id storage level inflow_rate \\\n", - "0 2024-01-01 00:00:00 3 1250.008750 2.000000 0.005550 \n", - "1 2024-01-01 00:00:00 4 1000.009000 1.000000 0.004450 \n", - "2 2024-01-01 00:01:00 3 1250.008069 2.000000 0.004738 \n", - "3 2024-01-01 00:01:00 4 999.974196 0.999983 0.005262 \n", - "4 2024-01-01 00:02:00 3 1249.986076 1.999991 0.005517 \n", - "... ... ... ... ... ... \n", - "89275 2024-01-31 23:57:00 4 999.992810 0.999992 0.004696 \n", - "89276 2024-01-31 23:58:00 3 1250.005225 1.999999 0.005070 \n", - "89277 2024-01-31 23:58:00 4 1000.017538 1.000004 0.004930 \n", - "89278 2024-01-31 23:59:00 3 1249.996861 1.999995 0.005407 \n", - "89279 2024-01-31 23:59:00 4 1000.001428 0.999996 0.004593 \n", - "\n", - " outflow_rate storage_rate precipitation evaporation drainage \\\n", - "0 0.004450 -0.000011 0.0 0.000145 0.0 \n", - "1 0.005304 -0.000580 0.0 0.000116 0.0 \n", - "2 0.005262 -0.000367 0.0 0.000145 0.0 \n", - "3 0.003804 0.000948 0.0 0.000116 0.0 \n", - "4 0.004483 0.001021 0.0 0.000145 0.0 \n", - "... ... ... ... ... ... \n", - "89275 0.004146 0.000412 0.0 0.000116 0.0 \n", - "89276 0.004930 -0.000139 0.0 0.000145 0.0 \n", - "89277 0.005271 -0.000269 0.0 0.000116 0.0 \n", - "89278 0.004593 0.000083 0.0 0.000145 0.0 \n", - "89279 0.004688 -0.000424 0.0 0.000116 0.0 \n", - "\n", - " infiltration balance_error relative_error \n", - "0 0.0 0.000966 0.190740 \n", - "1 0.0 -0.000390 -0.083897 \n", - "2 0.0 -0.000302 -0.061862 \n", - "3 0.0 0.000394 0.095823 \n", - "4 0.0 -0.000131 -0.028820 \n", - "... ... ... ... \n", - "89275 0.0 0.000022 0.005092 \n", - "89276 0.0 0.000135 0.026956 \n", - "89277 0.0 -0.000189 -0.037547 \n", - "89278 0.0 0.000586 0.116452 \n", - "89279 0.0 0.000213 0.047562 \n", - "\n", - "[89280 rows x 13 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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X6Z9ZSZ5mZqaPnPfoobGHXOSFBEREVWJubk5zp8/j44dOwJ4Mqu95PeOHTsiNja21sPpoUOHEBcXhzfffLPc9RYWFhgyZAjWrFmDn3/+GVu3bsWjR4/g5eWF27dv4+rVq5U+lq+vLxQKBVJTU+Hu7q7y5eDgAODJVdfic1KV7YYOHYqrV69i586dZY4rhEB6ejosLCzQqFEj/P777yrrT5w4gZYtW1b6fZRXY0VatWpV7vFatGhRrVdPAV5BJSIioufg7OyMw4cPw9raGtnZ2fJyExMTREdHq1y1qwn5+fm4e/cuFAoF7t27h71792LBggXo27cvRowYUab9t99+C0dHR/j4+EBHRwf//e9/4eDgACsrKwQEBKBr165488038c0338Dd3R1XrlyBJEkICgoq9/gtWrTAsGHDMGLECCxZsgS+vr548OABDh06hNatW6NPnz5wdXVFVlYWDh48CG9vb5iYmFRqu8GDB2P79u14++23MWPGDPTs2RN2dnaIi4vDt99+i/HjxyMkJARTpkzBrFmz0KxZM/j4+CA8PByxsbGIjIys9Hksr0YTE5Ny23766ado164d5s6diyFDhuCPP/7A999/j+XLl1f6eJX21BGqREREpJWqY5LUsWPHBIAyX7///ns1VlpWaGiofCw9PT1hZ2cnevToIdauXSsUCoXcDiUmSa1evVr4+PgIU1NTYWFhIV599VVx7tw5ue3Dhw/FyJEjhY2NjTAyMhIvv/yyiIqKEkJUPJGooKBAzJw5U7i6ugp9fX3h4OAg3njjDXHhwgW5zdixY4WNjY0AIGbNmlXp7RQKhVixYoVo166dMDExERYWFqJt27Zi2bJlIicnR24zZ84c0bhxY6Gvry+8vb1VnqRQPEnq/Pnz8rK0tDQBQBw+fPipNVY02WnLli2iVatWQl9fXzg7O4vFixerrK+uSVKSELX40DIiIiLSCHl5eUhKSoKbmxuMjIyeax9Tp07FokWLEBISgq+//hqffvopdu7cic8++wxfffVVNVdM2qCy/Y63+ImIiOi59O/fH97e3nj77bchSRK2b9+OjRs3wsXFRd2lUR3HK6hERET1UHVcQSWqqsr2O87iJyIiIiKNwoBKRERERBqFAZWIiIiINAoDKhERERFpFAZUIiIiItIoDKhEREREpFEYUImIiIhIozCgEhEREVWBJEnY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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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IowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKM8DiNZWVlKTU1VfHy8LMvSmjVrmuxTVlamhx9+WF27dlVwcLAuvfRSvfbaa82pFwAAnGcCPO1QUlKiQYMG6bbbbtOECRPc6jNx4kQdPnxYy5YtU48ePVRUVKSKigqPiwUAAOcfj8NISkqKUlJS3G6/fv16ZWZmav/+/YqOjpYkdevWzdPNAgCA85THYcRTa9euVVJSkp599lm9+eabateunW688UY98cQTCg0NrbdPWVmZysrKnNMOh8PbZQIA0GyVlZUqLy83XYbPBQYGyt/fv8Xr8XoY2b9/vzZv3qyQkBCtXr1a33//ve666y4dPXq0wetGFi5cqMcee8zbpQEA0CK2bauwsFA//PCD6VKMiYqKUqdOnWRZVrPXYdm2bTe7s2Vp9erVGj9+fINtkpOT9cknn6iwsFCRkZGSpFWrVumWW25RSUlJvaMj9Y2MJCQkqLi4WBEREc0tFwCAVlVQUKAffvhBMTExCgsLa9EHcltj27ZKS0tVVFSkqKgoxcXF1WnjcDgUGRnZ5Oe310dG4uLidMkllziDiCT17dtXtm3rm2++Uc+ePev0CQ4OVnBwsLdLAwCg2SorK51BpEOHDqbLMaJmQKGoqEgxMTHNPmXj9e8Zueqqq3To0CGdOHHCOe+LL76Qn5+fOnfu7O3NAwDgFTXXiISFhRmuxKya/W/JNTMeh5ETJ04oNzdXubm5kqS8vDzl5uYqPz9fkpSenq4pU6Y420+ePFkdOnTQbbfdpt27dysrK0v333+/br/99gYvYAUAoK24kE7N1Kc19t/jMJKTk6MhQ4ZoyJAhkqS0tDQNGTJEjzzyiKTq82c1wUSS2rdvr4yMDP3www9KSkrSrbfeqtTUVC1evLjFxQMAgLbP42tGRo4cqcaueV2xYkWdeX369FFGRoanmwIAAGeZP3++1qxZ4zw70RIHDhxQYmKitm/frsGDB9fbZtOmTRo1apSOHTumqKioFm+zIV6/gBUAAJx7EhISVFBQoIsvvth0KYQRAAAuRP7+/urUqZPpMiRx114AALxi5MiRmjNnjh544AFFR0erU6dOmj9/vnN5fn6+xo0bp/bt2ysiIsJ5H7ezPf3004qNjVV4eLimT5+uU6dO1dnO8uXL1bdvX4WEhKhPnz568cUX3arvwIEDsizL5ZTPunXr1KtXL4WGhmrUqFE6cOBAc3bdY4QRAAC85PXXX1e7du30+eef69lnn9Xjjz+ujIwM2bat8ePH6+jRo8rMzFRGRob27dunSZMmOfv+4Q9/0KOPPqqnnnpKOTk5iouLqxM0Xn31VT388MN66qmntGfPHi1YsEC/+c1v9Prrr3tc68GDB3XzzTfrhhtuUG5uru644w499NBDLX4O3MFpGgAAvGTgwIF69NFHJUk9e/bUkiVL9Le//U2StGPHDuXl5SkhIUGS9Oabb6p///7Kzs7WZZddphdeeEG333677rjjDknSk08+qY8//thldOSJJ57Q888/r5tvvlmSlJiYqN27d+vll1/W1KlTPap16dKl6t69u/77v/9blmWpd+/e2rlzp5555pkWPw9NYWQEAAAvGThwoMt0XFycioqKtGfPHiUkJDiDiCT169dPUVFR2rNnjyRpz549GjZsmEv/s6e/++47HTx4UNOnT1f79u2djyeffFL79u3zuNY9e/boiiuucPnekNrb9xZGRgAA8JLAwECXacuyVFVVJdu26/2ysIbm16eqqkpS9amayy+/3GVZc76WvQW3qmsxRkYAAPCxfv36KT8/XwcPHnTO2717t4qLi9W3b19J1fdx27Jli0u/s6djY2N1ySWXaP/+/erRo4fLIzExsVk1NbY9b2JkBAAAHxs9erQGDhyoW2+9VS+88IIqKip011136ZprrlFSUpIk6e6779bUqVOVlJSk4cOH6+2339auXbvUvXt353rmz5+vOXPmKCIiQikpKSorK1NOTo6OHTumtLQ0j2qaMWOGnn/+eaWlpenO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BAAAGEUYAQAARhFGAACAUYQRAABgFGEEAAAYRRgBAABGEUYAAIBRhBEAAGAUYQQAABhFGAEAAEYRRgAAgFEeh5GsrCylpqYqPj5elmVpzZo1jbZftWqVrrvuOnXs2FEREREaNmyY/vrXvza3XgAAcJ7xOIyUlJRo0KBBWrJkiVvts7KydN1112ndunXaunWrRo0apdTUVG3fvt3jYgEAwPnHsm3bbnZny9Lq1as1fvx4j/r1799fkyZN0iOPPOJWe4fDocjISBUXFysiIqIZlQIAAF9z9/M7wIc1SZKqqqp0/PhxRUdHN9imrKxMZWVlzmmHw+GL0gAAgAE+v4D1+eefV0lJiSZOnNhgm4ULFyoyMtL5SEhI8GGFAADAl3waRt59913Nnz9fK1euVExMTIPt0tPTVVxc7HwcPHjQh1UCAABf8tlpmpUrV2r69Ol6//33NXr06EbbBgcHKzg42EeVAQAAk3wyMvLuu+9q2rRpeueddzR27FhfbBIAALQRHo+MnDhxQl999ZVzOi8vT7m5uYqOjlaXLl2Unp6ub7/9Vm+88Yak6iAyZcoULVq0SFdccYUKCwslSaGhoYqMjGyl3QAAAG2VxyMjOTk5GjJkiIYMGSJJSktL05AhQ5x/pltQUKD8/Hxn+5dfflkVFRWaOXOm4uLinI+77767lXYBAAC0ZS36nhFf4XtGAABoe9z9/ObeNAAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjPA4jWVlZSk1NVXx8vCzL0po1a5rsk5mZqaFDhyokJETdu3fXSy+91JxaAQDA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T9MAAIALm/ELWAEAwIWNMAIAAIzySRhZuHChLrvsMoWHhysmJkbjx4/X3r17XdrYtq358+crPj5eoaGhGjlypHbt2uVcfvToUc2ePVu9e/dWWFiYunTpojlz5qi4uLjebZaVlWnw4MGyLEu5ubne3D0AANACPgkjmZmZmjlzprZs2aKMjAxVVFQoOTlZJSUlzjbPPvusfvvb32rJkiXKzs5Wp06ddN111+n48eOSpEOHDunQoUN67rnntHPnTq1YsULr16/X9OnT693mAw88oPj4eF/sHgAAaAEjF7B+9913iomJUWZmpq6++mrZtq34+Hjdc889evDBByVVj2zExsbqmWee0Z133lnvet5//33953/+p0pKShQQcOYPg/7yl78oLS1NH3zwgfr376/t27dr8ODBvtg1AADgISPXjNScWomOjpYk5eXlqbCwUMnJyc42wcHBuuaaa/Tpp582up6IiAiXIHL48GH98pe/1JtvvqmwsDAv7QEAAGgtPg8jtm0rLS1Nw4cP14ABAyRJhYWFkqTY2FiXtrGxsc5ltR05ckRPPPGEy6iJbduaNm2aZsyYoaSkJC/tAQAAaE0+/9KzWbNmaceOHfXekdeyLJdp27brzJMkh8OhsWPHql+/fnr00Ued83/3u9/J4XAoPT299QsHAABe4dORkdmzZ2vt2rXauHGjOnfu7JzfqVMnSaozClJUVFRntOT48eMaM2aM2rdvr9WrVyswMNC5bMOGDdqyZYuCg4MVEBCgHj16SJKSkpI0depUb+0WAABoAZ+EEdu2NWvWLK1atUobNmxQYmKiy/LExER16tRJGRkZznmnT59WZmamrrzySuc8h8Oh5ORkBQUFae3atQoJCXFZz+LFi/WPf/xDubm5ys3N1bp16yRJK1eu1FNPPeXFPQQAAM3lk9M0M2fO1DvvvKMPP/xQ4eHhzhGQyMhIhYaGyrIs3XPPPVqwYIF69uypnj17asGCBQoLC9PkyZMlVY+IJCcnq7S0VG+99ZYcDoccDockqWPHjvL391eXLl1cttu+fXtJ0qWXXuoyEgMAAM4dPgkjS5culSSNHDnSZf7y5cs1bdo0SdXfC3Ly5EndddddOnbsmC6//HJ99NFHCg8PlyRt3bpVn3/+uSQ5T7/UyMvLU7du3by6DwAAwDu4UR4AADCKe9MAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAsBrNm3aJMuy9MMPP5guBcA5jC89A9BqRo4cqcGDB+uFF16QVH2PqaNHjyo2NrbeO3ADgOSjr4MHcGEKCgpy3pUbABrCaRoArWLatGnKzMzUokWLZFmWLMvSihUrXE7TrFixQlFRUfrTn/6k3r17KywsTLfccotKSkr0+uuvq1u3brrooos0e/ZsVVZWOtd9+vRpPfDAA7rkkkvUrl07XX755dq0aZOZHQXQ6hgZAdAqFi1apC+++EIDBgzQ448/LknatWtXnXalpaVavHix3nvvPR0/flw333yzbr75ZkVFRWndunXav3+/JkyYoOHDh2vSpEmSpNtuu00HDhzQe++9p/j4eK1evVpjxozRzp071bNnT5/uJ4DWRxgB0CoiIyMVFBSksLAw56mZf/3rX3XalZeXa+nSpbr00kslSbfccovefPNNHT58WO3bt1e/fv00atQobdy4UZMmTdK+ffv07rvv6ptvvlF8fLwkae7cuVq/fr2WL1+uBQsW+G4nAXgFYQSAT4WFhTmDiCTFxsaqW7duat++vcu8oqIiSdK2bdtk27Z69erlsp6ysjJ16NDBN0UD8CrCCACfCgwMdJm2LKveeVVVVZKkqqoq+fv7a+vWrfL393dpd3aAAdB2EUYAtJqgoCCXC09bw5AhQ1RZWamioiKNGDGiVdcN4NzAX9MAaDXdunXT559/rgMHDuj77793jm60RK9evXTrrbdqypQpWrVqlfLy8pSdna1nnnlG69ata4WqAZhGGAHQaubOnSt/f3/169dPHTt2VH5+fqusd/ny5ZoyZYruu+8+9e7dWzfeeKM+//xzJSQktMr6AZjFN7ACAACjGBkBAABGEUYAAIBRhBEAAGAUYQQAABhFGAEAAEYRRgAAgFGEEQAAYBRhBAAAGEUYAQAARhFGAACAUYQRAABgFGEEAAAY9f8OK3i7XPBPFgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "case1_example1 = case1(\"case1_example1\")\n", "case1_example1.create_model()" @@ -340,7 +46,7 @@ }, { "cell_type": "markdown", - "id": "7e86db4e-2425-483d-9a64-380c6b69a023", + "id": "4", "metadata": {}, "source": [ "### Example 2: boundary levels below target" @@ -348,297 +54,10 @@ }, { "cell_type": "code", - "execution_count": 18, - "id": "a49607e1-2214-4b0b-953a-552a600d0f3a", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0031250.0087502.0000000.00.000000-0.0001450.00.0001450.00.0-1.268499e-08-2.0
12024-01-01 00:00:0041000.0090001.0000000.00.000014-0.0001940.00.0001160.00.06.448805e-05-2.0
22024-01-01 00:01:0031250.0000701.9999970.00.000000-0.0001450.00.0001450.00.0-3.257827e-10-2.0
32024-01-01 00:01:004999.9973380.9999940.00.000000-0.0001170.00.0001160.00.09.985815e-07-2.0
42024-01-01 00:02:0031249.9913901.9999930.00.000000-0.0001450.00.0001450.00.0-1.843947e-10-2.0
..........................................
892752024-01-31 23:57:004714.0466050.8450080.00.000000-0.0000980.00.0000980.00.0-1.265895e-10-2.0
892762024-01-31 23:58:003892.5538671.8450070.00.000000-0.0001220.00.0001220.00.0-1.582412e-10-2.0
892772024-01-31 23:58:004714.0407370.8450050.00.000000-0.0000980.00.0000980.00.0-1.265901e-10-2.0
892782024-01-31 23:59:003892.5465321.8450040.00.000000-0.0001220.00.0001220.00.0-1.582377e-10-2.0
892792024-01-31 23:59:004714.0348690.8450010.00.000000-0.0000980.00.0000980.00.0-1.265908e-10-2.0
\n", - "

89280 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " time node_id storage level inflow_rate \\\n", - "0 2024-01-01 00:00:00 3 1250.008750 2.000000 0.0 \n", - "1 2024-01-01 00:00:00 4 1000.009000 1.000000 0.0 \n", - "2 2024-01-01 00:01:00 3 1250.000070 1.999997 0.0 \n", - "3 2024-01-01 00:01:00 4 999.997338 0.999994 0.0 \n", - "4 2024-01-01 00:02:00 3 1249.991390 1.999993 0.0 \n", - "... ... ... ... ... ... \n", - "89275 2024-01-31 23:57:00 4 714.046605 0.845008 0.0 \n", - "89276 2024-01-31 23:58:00 3 892.553867 1.845007 0.0 \n", - "89277 2024-01-31 23:58:00 4 714.040737 0.845005 0.0 \n", - "89278 2024-01-31 23:59:00 3 892.546532 1.845004 0.0 \n", - "89279 2024-01-31 23:59:00 4 714.034869 0.845001 0.0 \n", - "\n", - " outflow_rate storage_rate precipitation evaporation drainage \\\n", - "0 0.000000 -0.000145 0.0 0.000145 0.0 \n", - "1 0.000014 -0.000194 0.0 0.000116 0.0 \n", - "2 0.000000 -0.000145 0.0 0.000145 0.0 \n", - "3 0.000000 -0.000117 0.0 0.000116 0.0 \n", - "4 0.000000 -0.000145 0.0 0.000145 0.0 \n", - "... ... ... ... ... ... \n", - "89275 0.000000 -0.000098 0.0 0.000098 0.0 \n", - "89276 0.000000 -0.000122 0.0 0.000122 0.0 \n", - "89277 0.000000 -0.000098 0.0 0.000098 0.0 \n", - "89278 0.000000 -0.000122 0.0 0.000122 0.0 \n", - "89279 0.000000 -0.000098 0.0 0.000098 0.0 \n", - "\n", - " infiltration balance_error relative_error \n", - "0 0.0 -1.268499e-08 -2.0 \n", - "1 0.0 6.448805e-05 -2.0 \n", - "2 0.0 -3.257827e-10 -2.0 \n", - "3 0.0 9.985815e-07 -2.0 \n", - "4 0.0 -1.843947e-10 -2.0 \n", - "... ... ... ... \n", - "89275 0.0 -1.265895e-10 -2.0 \n", - "89276 0.0 -1.582412e-10 -2.0 \n", - "89277 0.0 -1.265901e-10 -2.0 \n", - "89278 0.0 -1.582377e-10 -2.0 \n", - "89279 0.0 -1.265908e-10 -2.0 \n", - "\n", - "[89280 rows x 13 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqgAAADwCAYAAADM+pbvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABTXElEQVR4nO3deVwVZd8G8GvYd5BNUNkUBS1ZFFPcQNNEUyFzKU1BzbLMpdJ8fcwtNU2z9KnHtVdQI83HPXLJDTXNBZVERURDXEJxQfb1nPv9w5eJw6KgwDkcru/nwwfPzD0zvzPdwcXMfc+RhBACREREREQaQkfdBRARERERlcSASkREREQahQGViIiIiDQKAyoRERERaRQGVCIiIiLSKAyoRERERKRRGFCJiIiISKMwoBIRERGRRtFTdwFERESkXgqFAoWFheoug7Scvr4+dHV1K9WWAZWIiKieEkLg7t27ePz4sbpLoXrCysoKDg4OkCTpqe0YUImIiOqp4nBqb28PExOTZ4YGouclhEBOTg5SU1MBAI6Ojk9tz4BKRERUDykUCjmc2tjYqLscqgeMjY0BAKmpqbC3t3/q7X5OkiIiIqqHisecmpiYqLkSqk+K+9uzxjwzoBIREdVjvK1Ptamy/Y0BlYiIiIg0CgMqERERaY3AwEBMmjRJ3WU81Y0bNyBJEmJjY9VdisZiQCUiIqI6IywsDJIklfm6du2aukujasRZ/ERERFSnBAUFITw8XGWZnZ2dmqqhmsArqERERFSnGBoawsHBQeWrokcWpaWlYcSIEWjQoAFMTEzQu3dvJCYmAnjybE47Ozts3bpVbu/j4wN7e3v59R9//AF9fX1kZWVVWE94eDhatmwJIyMjeHp6Yvny5SrrT58+DV9fXxgZGcHPzw/nz58vs49du3ahefPmMDY2Rrdu3bBu3TpIkqTyIQonTpxA165dYWxsDCcnJ0yYMAHZ2dmVOmd1DQMqERERqcgtVNTaV00LCwtDTEwMdu3ahT/++ANCCPTp0weFhYWQJAldu3ZFdHQ0gCdh9vLlyygsLMTly5cBANHR0Wjbti3MzMzK3f+aNWswffp0zJ8/H/Hx8fjyyy8xY8YMrFu3DgCQnZ2Nvn37wsPDA2fPnsXs2bMxefJklX3cuHEDAwcOREhICGJjY/H+++9j+vTpKm3i4uLQq1cvDBgwABcuXMDPP/+M33//HR999FE1nzHNwFv8REREpCJw+e+1dqxTEwOqvE1UVJRKYOzduzf++9//lmmXmJiIXbt24fjx4+jYsSMAIDIyEk5OTtixYwcGDRqEwMBArF69GgBw9OhReHt7w9nZGdHR0WjVqhWio6MRGBhYYS1z587FkiVLMGDAAACAm5sbLl++jFWrViE0NBSRkZFQKBRYu3YtTExM8NJLL+H27dv44IMP5H2sXLkSHh4eWLx4MQDAw8MDFy9exPz58+U2ixcvxtChQ+UJYM2bN8e///1vBAQEYMWKFTAyMqryedRkDKhERERUp3Tr1g0rVqyQX5uampbbLj4+Hnp6emjfvr28zMbGBh4eHoiPjwfwZNb/xIkT8eDBAxw5cgSBgYFwdnbGkSNH8N577+HEiRMVPhXg/v37uHXrFkaPHo0xY8bIy4uKimBpaSnX4O3trfKBCP7+/ir7SUhIQLt27VSWvfLKKyqvz549i2vXriEyMlJeJoSAUqlEUlISWrZsWW6NdRUDKhEREamI/rCzukt4KlNTU7i7uz+znRCiwuXFD4x/+eWXYWNjgyNHjuDIkSP44osv4OTkhPnz5+PMmTPIzc1F587lnw+lUgngyW3+kiEYgDwmtqIaKqqnotqVSiXef/99TJgwocz2zs7OzzxGXcOASkRERCqM9Sv+jPS6pFWrVigqKsKpU6fkW/wPHz7E1atX5SuOxeNQd+7ciYsXL6JLly4wNzdHYWEhVq5ciTZt2sDc3Lzc/Tds2BCNGzfGX3/9hWHDhlVYw4YNG5Cbmyt/Fv3JkydV2nh6emL37t0qy2JiYlRet2nTBpcuXapUMNcGnCRFREREWql58+YIDg7GmDFj8Pvvv+PPP//EO++8g8aNGyM4OFhuFxgYiJ9++gleXl6wsLCQQ2tkZORTx58CwOzZs7FgwQIsW7YMV69eRVxcHMLDw/HNN98AAIYOHQodHR2MHj0aly9fxu7du/H111+r7OP999/HlStXMHXqVFy9ehWbN29GREQEgH8+GnTq1Kn4448/MG7cOMTGxsrja8ePH199J0yDMKASERGR1goPD0fbtm3Rt29f+Pv7QwiB3bt3Q19fX27TrVs3KBQKlTAaEBAAhUKBgICnT+J699138cMPPyAiIgKtW7dGQEAAIiIi4ObmBgAwMzPDL7/8gsuXL8PX1xfTp0/HV199pbIPNzc3bNmyBdu2bYOXlxdWrFghz+I3NDQEAHh5eeHIkSNITExEly5d4OvrixkzZsDR0bE6TpPGkURlBkcQERGRVsnLy0NSUhLc3Ny0bga4Npg/fz5WrlyJW7duqbuUalXZfscxqERERERqtnz5crRr1w42NjY4fvw4Fi9erLXPOK0MBlQiIiIiNUtMTMS8efPw6NEjODs749NPP8W0adPUXZba8BY/ERFRPcRb/KQOle13nCRFRERERBqFAZWIiIiINAoDKhERERFpFAZUIiIiItIoDKhEREREpFEYUImIiIhqWHR0NCRJwuPHj6t1v7Nnz4aPj0+17lMTMKASERFRnXL37l2MHz8eTZs2haGhIZycnNCvXz8cPHiwWo8TGBiISZMmVes+qXL4oH4iIiKqM27cuIFOnTrBysoKixYtgpeXFwoLC7Fv3z6MGzcOV65cqdV6hBBQKBTQ02Okqk68gkpERER1xocffghJknD69GkMHDgQLVq0wEsvvYRPPvkEJ0+elNvdvHkTwcHBMDMzg4WFBQYPHox79+7J64tvjW/YsAGurq6wtLTEW2+9hczMTABAWFgYjhw5gmXLlkGSJEiShBs3bsi36vft2wc/Pz8YGhri2LFjyM/Px4QJE2Bvbw8jIyN07twZZ86cqdJ7S09Px3vvvQd7e3tYWFige/fu+PPPP1XaLFy4EA0bNoS5uTlGjx6NvLw8lfVFRUWYMGECrKysYGNjg6lTpyI0NBQhISFyGyEEFi1ahKZNm8LY2Bje3t7YsmVLlWqtaQyoREREVCc8evQIe/fuxbhx42BqalpmvZWVFYAnASwkJASPHj3CkSNHsH//fly/fh1DhgxRaX/9+nXs2LEDUVFRiIqKwpEjR7Bw4UIAwLJly+Dv748xY8YgJSUFKSkpcHJykrf97LPPsGDBAsTHx8PLywufffYZtm7dinXr1uHcuXNwd3dHr1698OjRo0q9NyEEXn/9ddy9exe7d+/G2bNn0aZNG7z66qvyPjZv3oxZs2Zh/vz5iImJgaOjI5YvX66yn6+++gqRkZEIDw/H8ePHkZGRgR07dqi0+fzzzxEeHo4VK1bg0qVL+Pjjj/HOO+/gyJEjlaq1VggiIiKqd3Jzc8Xly5dFbm5umXX5+fm19lUVp06dEgDEtm3bntrut99+E7q6uuLmzZvyskuXLgkA4vTp00IIIWbNmiVMTExERkaG3GbKlCmiffv28uuAgAAxceJElX0fPnxYABA7duyQl2VlZQl9fX0RGRkpLysoKBCNGjUSixYtUtkuLS2t3JoPHjwoLCwsRF5ensryZs2aiVWrVgkhhPD39xdjx45VWd++fXvh7e0tv27YsKFYvHix/LqoqEg4OzuL4OBguVYjIyNx4sQJlf2MHj1avP322+XWVp2e1u9K4oAJIiIiUrFgwYJaO9asWbMq3VYIAQCQJOmp7eLj4+Hk5KRyxbNVq1awsrJCfHw82rVrBwBwdXWFubm53MbR0RGpqamVqsXPz0/+9/Xr11FYWIhOnTrJy/T19fHKK68gPj6+Uvs7e/YssrKyYGNjo7I8NzcX169fl9/X2LFjVdb7+/vj8OHDAJ4MEbh37x5eeeUVeb2uri7atm0LpVIJALh8+TLy8vLQs2dPlf0UFBTA19e3UrXWBgZUIiIiqhOaN28OSZIQHx+vMqayNCFEuSG29HJ9fX2V9ZIkyUHuWUoOMagoOFdUR3mUSiUcHR0RHR1dZl3x0IXKKq+OkscBgF9//RWNGzdWaWdoaFil49QkBlQiIiJSMW3aNHWXUC5ra2v06tUL//nPfzBhwoQy41AfP34MKysrtGrVCjdv3sStW7fkq6iXL19Geno6WrZsWenjGRgYQKFQPLOdu7s7DAwM8Pvvv2Po0KEAgMLCQsTExFT6MVVt2rTB3bt3oaenB1dX13LbtGzZEidPnsSIESPkZSUnhllaWqJhw4Y4ffo0unTpAgBQKBQ4f/68/KzUVq1awdDQEDdv3kRAQEClalMHBlQiIiJSYWBgoO4SKrR8+XJ07NgRr7zyCr744gt4eXmhqKgI+/fvx4oVKxAfH48ePXrAy8sLw4YNw9KlS1FUVIQPP/wQAQEBKrfmn8XV1RWnTp3CjRs3YGZmBmtr63LbmZqa4oMPPsCUKVNgbW0NZ2dnLFq0CDk5ORg9enSljtWjRw/4+/sjJCQEX331FTw8PPD3339j9+7dCAkJgZ+fHyZOnIjQ0FD4+fmhc+fOiIyMxKVLl9C0aVN5P+PHj8eCBQvg7u4OT09PfPfdd0hLS5Ovqpqbm2Py5Mn4+OOPoVQq0blzZ2RkZODEiRMwMzNDaGhopc9PTWJAJSIiojrDzc0N586dw/z58/Hpp58iJSUFdnZ2aNu2LVasWAHgyS3uHTt2YPz48ejatSt0dHQQFBSE7777rkrHmjx5MkJDQ9GqVSvk5uYiKSmpwrYLFy6EUqnE8OHDkZmZCT8/P+zbtw8NGjSo1LEkScLu3bsxffp0jBo1Cvfv34eDgwO6du2Khg0bAgCGDBmC69evY+rUqcjLy8Obb76JDz74APv27ZP3M3XqVNy9excjRoyArq4u3nvvPfTq1Qu6urpym7lz58Le3h4LFizAX3/9BSsrK7Rp0wb/+te/qnR+apIkSg5MICIionohLy8PSUlJcHNzg5GRkbrLoRqiVCrRsmVLDB48GHPnzlV3OZXud7yCSkRERKQlkpOT8dtvvyEgIAD5+fn4/vvvkZSUJI+NrSv4oH4iIiIiLaGjo4OIiAi0a9cOnTp1QlxcHA4cOFClyWGagFdQiYiIiLSEk5MTjh8/ru4yXhivoBIRERGRRmFAJSIiIiKNwoBKRERERBqFAZWIiIiINAoDKhERERFpFAZUIiIiItIoDKhERESkNYo/5lQbREREwMrKSt1lqAUDKhEREdUZYWFhCAkJqXB9SkoKevfuXal9aVOY1TZ8UD8RERFpDQcHB3WXQNWAV1CJiIhIa5S8KlpQUICPPvoIjo6OMDIygqurKxYsWAAAcHV1BQC88cYbkCRJfg0Av/zyC9q2bQsjIyM0bdoUc+bMQVFRkcoxfvjhB7zxxhswMTFB8+bNsWvXrqfWVVBQgM8++wyNGzeGqakp2rdvj+joaJU2ERERcHZ2homJCd544w08fPiwzH7mzZsHe3t7mJub491338X//M//wMfHR6VNeHg4WrZsCSMjI3h6emL58uWVO3kahAGViIiItNK///1v7Nq1C5s3b0ZCQgJ+/PFHOYieOXMGwJMwl5KSIr/et28f3nnnHUyYMAGXL1/GqlWrEBERgfnz56vse86cORg8eDAuXLiAPn36YNiwYXj06FGFtYwcORLHjx/Hpk2bcOHCBQwaNAhBQUFITEwEAJw6dQqjRo3Chx9+iNjYWHTr1g3z5s1T2UdkZCTmz5+Pr776CmfPnoWzszNWrFih0mbNmjWYPn065s+fj/j4eHz55ZeYMWMG1q1b90LnstYJIiIiqndyc3PF5cuXRW5ubpl1+fn5FX4VFhZWum1BQcEz21ZVaGioCA4OrnA9ALF9+3YhhBDjx48X3bt3F0ql8plti3Xp0kV8+eWXKss2bNggHB0dVbb7/PPP5ddZWVlCkiSxZ8+eco9z7do1IUmSuHPnjsryV199VUybNk0IIcTbb78tgoKCVNYPGTJEWFpayq/bt28vxo0bp9KmU6dOwtvbW37t5OQkfvrpJ5U2c+fOFf7+/uXWVtue1u9K4hhUIiIiUlF8G7w8zZs3x9ChQ+XXX3/9NQoLC8tt6+LigrCwMPn1smXLkJOTo9Jm1qxZL1bsU4SFhaFnz57w8PBAUFAQ+vbti9dee+2p25w9exZnzpxRuWKqUCiQl5eHnJwcmJiYAAC8vLzk9aampjA3N0dqamq5+zx37hyEEGjRooXK8vz8fNjY2AAA4uPj8cYbb6is9/f3x969e+XXCQkJ+PDDD1XavPLKKzh06BAA4P79+7h16xZGjx6NMWPGyG2KiopgaWn51PetaRhQiYiISCu1adMGSUlJ2LNnDw4cOIDBgwejR48e2LJlS4XbKJVKzJkzBwMGDCizzsjISP63vr6+yjpJkqBUKivcp66uLs6ePQtdXV2VdWZmZgAAIUSl3pMkSSqvS25XfPw1a9agffv2Ku1KH1fTMaASERGRimnTplW4TkdHdfrK5MmTK2xbOkxNnDjxxQp7DhYWFhgyZAiGDBmCgQMHIigoCI8ePYK1tTX09fWhUChU2rdp0wYJCQlwd3evthp8fX2hUCiQmpqKLl26lNumVatWOHnypMqy0q89PDxw+vRpDB8+XF4WExMj/7thw4Zo3Lgx/vrrLwwbNqza6lcHBlQiIiJSYWBgoPa2T5Oeno7Y2FiVZdbW1nB2dlZZ9u2338LR0RE+Pj7Q0dHBf//7Xzg4OMgPv3d1dcXBgwfRqVMnGBoaokGDBpg5cyb69u0LJycnDBo0CDo6Orhw4QLi4uLKTFqqrBYtWmDYsGEYMWIElixZAl9fXzx48ACHDh1C69at0adPH0yYMAEdO3bEokWLEBISgt9++03l9j4AjB8/HmPGjIGfnx86duyIn3/+GRcuXEDTpk3lNrNnz8aECRNgYWGB3r17Iz8/HzExMUhLS8Mnn3zyXPWrA2fxExERUZ0SHR0NX19fla+ZM2eWaWdmZoavvvoKfn5+aNeuHW7cuIHdu3fLV4GXLFmC/fv3w8nJCb6+vgCAXr16ISoqCvv370e7du3QoUMHfPPNN3BxcXmhmsPDwzFixAh8+umn8PDwQP/+/XHq1Ck4OTkBADp06IAffvgB3333HXx8fPDbb7/h888/V9nHsGHDMG3aNEyePFkevhAWFqYy9ODdd9/FDz/8gIiICLRu3RoBAQGIiIiAm5vbC9Vf2yRR2UEPREREpDXy8vKQlJQENzc3lYBDdUvPnj3h4OCADRs2qLuUSqlsv+MtfiIiIqI6ICcnBytXrkSvXr2gq6uLjRs34sCBA9i/f7+6S6t2DKhEREREdYAkSdi9ezfmzZuH/Px8eHh4YOvWrejRo4e6S6t2DKhEREREdYCxsTEOHDig7jJqBSdJEREREZFGYUAlIiIiIo3CgEpEREREGoUBlYiIiIg0CgMqEREREWkUBlQiIiIi0igMqEREREQlREREwMrKSt1l1GsMqERERFSnhIWFQZIk+cvGxgZBQUG4cOFCtex/yJAhuHr1arXsi54PAyoRERHVOUFBQUhJSUFKSgoOHjwIPT099O3bt1r2bWxsDHt7+2rZFz0fBlQiIiJ6bgoFEB0NbNz45LtCUTvHNTQ0hIODAxwcHODj44OpU6fi1q1buH//PgBg6tSpaNGiBUxMTNC0aVPMmDEDhYWF8vZ//vknunXrBnNzc1hYWKBt27aIiYkBUPYW/+zZs+Hj44MNGzbA1dUVlpaWeOutt5CZmVk7b7Ye4kedEhER0XPZtg2YOBG4ffufZU2aAMuWAQMG1F4dWVlZiIyMhLu7O2xsbAAA5ubmiIiIQKNGjRAXF4cxY8bA3Nwcn332GQBg2LBh8PX1xYoVK6Crq4vY2Fjo6+tXeIzr169jx44diIqKQlpaGgYPHoyFCxdi/vz5tfIe6xsGVCIiIqqybduAgQMBIVSX37nzZPmWLTUbUqOiomBmZgYAyM7OhqOjI6KioqCj8+Tm8Oeffy63dXV1xaeffoqff/5ZDqg3b97ElClT4OnpCQBo3rz5U4+nVCoREREBc3NzAMDw4cNx8OBBBtQawlv8REREVCUKxZMrp6XDKfDPskmTavZ2f7du3RAbG4vY2FicOnUKr732Gnr37o3k5GQAwJYtW9C5c2c4ODjAzMwMM2bMwM2bN+XtP/nkE7z77rvo0aMHFi5ciOvXrz/1eK6urnI4BQBHR0ekpqbWzJsjBlQiIiKqmmPHVG/rlyYEcOvWk3Y1xdTUFO7u7nB3d8crr7yC//3f/0V2djbWrFmDkydP4q233kLv3r0RFRWF8+fPY/r06SgoKJC3nz17Ni5duoTXX38dhw4dQqtWrbB9+/YKj1f69r8kSVAqlTX2/uo73uInIiKiKklJqd521UGSJOjo6CA3NxfHjx+Hi4sLpk+fLq8vvrJaUosWLdCiRQt8/PHHePvttxEeHo433nij9oqmCjGgEhERUZU4OlZvu+eRn5+Pu3fvAgDS0tLw/fffIysrC/369UN6ejpu3ryJTZs2oV27dvj1119Vro7m5uZiypQpGDhwINzc3HD79m2cOXMGb775Zs0VTFXCgEpERERV0qXLk9n6d+6UPw5Vkp6s79Kl5mrYu3cvHP8/AZubm8PT0xP//e9/ERgYCAD4+OOP8dFHHyE/Px+vv/46ZsyYgdmzZwMAdHV18fDhQ4wYMQL37t2Dra0tBgwYgDlz5tRcwVQlkhDldS0iIiLSZnl5eUhKSoKbmxuMjIyqvH3xLH5ANaRK0pPvNT2Ln+qmyvY7TpIiIiKiKhsw4EkIbdxYdXmTJgyn9OJ4i5+IiIiey4ABQHDwk9n6KSlPxpx26QLo6qq7MqrrGFCJiIjouenqAv8/7JOo2vAWPxERERFpFAZUIiIiItIoDKhEREREpFEYUImIiIhIozCgEhEREZFGYUAlIiIiIo3CgEpERERaSZIk7NixQ91l1Cuurq5YunTpC++HAZWIiIjqlLCwMEiSBEmSoK+vj4YNG6Jnz55Yu3YtlEql3C4lJQW9e/dWW50RERGwsrJ6rm2FEFi9ejXat28PMzMzWFlZwc/PD0uXLkVOTo5G1FiTGFCJiIiozgkKCkJKSgpu3LiBPXv2oFu3bpg4cSL69u2LoqIiAICDgwMMDQ2r/dgKhUIlCNeE4cOHY9KkSQgODsbhw4cRGxuLGTNmYOfOnfjtt99q9NjlKSgoqNXjMaASERHRCxFCIDo6GkKIWjumoaEhHBwc0LhxY7Rp0wb/+te/sHPnTuzZswcREREAVG/xFxQU4KOPPoKjoyOMjIzg6uqKBQsWyPt7/Pgx3nvvPTRs2BBGRkZ4+eWXERUVBeCfq4xRUVFo1aoVDA0NkZycjIKCAnz22Wdo3LgxTE1N0b59e0RHRwMAoqOjMXLkSKSnp8tXe2fPni3XUtF2ALB582ZERkZi48aN+Ne//oV27drB1dUVwcHBOHToELp16wYAUCqV+OKLL9CkSRMYGhrCx8cHe/fulfdz48YNSJKEbdu2oVu3bjAxMYG3tzf++OOPZ9bo6uqKefPmISwsDJaWlhgzZgwAYOvWrXjppZdgaGgIV1dXLFmypDr/s/5DEBERUb2Tm5srLl++LHJzc194X7t37xYAxJ49e6qhsmcLDQ0VwcHB5a7z9vYWvXv3FkIIAUBs375dCCHE4sWLhZOTkzh69Ki4ceOGOHbsmPjpp5+EEEIoFArRoUMH8dJLL4nffvtNXL9+Xfzyyy9i9+7dQgghwsPDhb6+vujYsaM4fvy4uHLlisjKyhJDhw4VHTt2FEePHhXXrl0TixcvFoaGhuLq1asiPz9fLF26VFhYWIiUlBSRkpIiMjMzhRDiqdsJIUT//v2Fh4fHM8/DN998IywsLMTGjRvFlStXxGeffSb09fXl/SQlJQkAwtPTU0RFRYmEhAQxcOBA4eLiIgoLC59ao4uLi7CwsBCLFy8WiYmJIjExUcTExAgdHR3xxRdfiISEBBEeHi6MjY1FeHi4XJOLi4v49ttvK6y5sv2OAZWIiKgeqs6AOmrUKAFAjB49uhoqe7anBdQhQ4aIli1bCiFUA+r48eNF9+7dhVKpLLPNvn37hI6OjkhISCh3n+Hh4QKAiI2NlZddu3ZNSJIk7ty5o9L21VdfFdOmTZO3s7S0VFlfme1atmwp+vfvX/6bL6FRo0Zi/vz5KsvatWsnPvzwQyHEPwH1hx9+kNdfunRJABDx8fEV1ijEk6AZEhKismzo0KGiZ8+eKsumTJkiWrVqpbJddQRUvZq5LktERETaSqlUYsWKFXj8+DEAYMuWLfJ3Nzc3AICVlRU++OAD6OjU7mhCIQQkSSqzPCwsDD179oSHhweCgoLQt29fvPbaawCA2NhYNGnSBC1atKhwvwYGBvDy8pJfnzt3DkKIMtvk5+fDxsamwv1UZruK3kNJGRkZ+Pvvv9GpUyeV5Z06dcKff/6psqxk3Y6OjgCA1NRUeHp6PvUYfn5+Kq/j4+MRHBxc5nhLly6FQqGArq7uU/dXFQyoREREVCXZ2dmYOXMmHj16BEmS5BCalZWFGTNmQAgBa2trjBgxAubm5rVaW3x8vBySS2rTpg2SkpKwZ88eHDhwAIMHD0aPHj2wZcsWGBsbP3O/xsbGKqFRqVRCV1cXZ8+eLRPMzMzMKtxPZbZr0aIF4uPjn1kTgDJBtrxwq6+vX6Z9ZSZ5mZqaPnPfoobGHXOSFBEREVWJubk5zp8/j44dOwJ4Mqu95PeOHTsiNja21sPpoUOHEBcXhzfffLPc9RYWFhgyZAjWrFmDn3/+GVu3bsWjR4/g5eWF27dv4+rVq5U+lq+vLxQKBVJTU+Hu7q7y5eDgAODJVdfic1KV7YYOHYqrV69i586dZY4rhEB6ejosLCzQqFEj/P777yrrT5w4gZYtW1b6fZRXY0VatWpV7vFatGhRrVdPAV5BJSIioufg7OyMw4cPw9raGtnZ2fJyExMTREdHq1y1qwn5+fm4e/cuFAoF7t27h71792LBggXo27cvRowYUab9t99+C0dHR/j4+EBHRwf//e9/4eDgACsrKwQEBKBr165488038c0338Dd3R1XrlyBJEkICgoq9/gtWrTAsGHDMGLECCxZsgS+vr548OABDh06hNatW6NPnz5wdXVFVlYWDh48CG9vb5iYmFRqu8GDB2P79u14++23MWPGDPTs2RN2dnaIi4vDt99+i/HjxyMkJARTpkzBrFmz0KxZM/j4+CA8PByxsbGIjIys9Hksr0YTE5Ny23766ado164d5s6diyFDhuCPP/7A999/j+XLl1f6eJX21BGqREREpJWqY5LUsWPHBIAyX7///ns1VlpWaGiofCw9PT1hZ2cnevToIdauXSsUCoXcDiUmSa1evVr4+PgIU1NTYWFhIV599VVx7tw5ue3Dhw/FyJEjhY2NjTAyMhIvv/yyiIqKEkJUPJGooKBAzJw5U7i6ugp9fX3h4OAg3njjDXHhwgW5zdixY4WNjY0AIGbNmlXp7RQKhVixYoVo166dMDExERYWFqJt27Zi2bJlIicnR24zZ84c0bhxY6Gvry+8vb1VnqRQPEnq/Pnz8rK0tDQBQBw+fPipNVY02WnLli2iVatWQl9fXzg7O4vFixerrK+uSVKSELX40DIiIiLSCHl5eUhKSoKbmxuMjIyeax9Tp07FokWLEBISgq+//hqffvopdu7cic8++wxfffVVNVdM2qCy/Y63+ImIiOi59O/fH97e3nj77bchSRK2b9+OjRs3wsXFRd2lUR3HK6hERET1UHVcQSWqqsr2O87iJyIiIiKNwoBKRERERBqFAZWIiIiINAoDKhERERFpFAZUIiIiItIoDKhEREREpFEYUImIiIhIozCgEhEREVWBJEnY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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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hYVp/fr1Gjx4sBcndMc1IwAAdHEDBw5UcXGxduzYoV/84heaNm2a9u7d67Pjc2YEAAAvCAnw095HbjB2bE8EBgbqwgsvlCQlJyersLBQzz33nF588UVvjNcAMQIAgBfYbDaP3ippTyzLktPp9NnxPH6bpqCgQGlpaYqPj5fNZtOGDRuave9f/vIX+fv765JLLvH0sAAAwAseeOABffDBBzp48KB2796txYsXa+vWrbrtttt8NoPHMVJdXa1hw4YpJyfHo/0qKys1depUXXfddZ4eEgAAeMmRI0d0++23a+DAgbruuuv00UcfafPmzbr++ut9NoPH549SU1OVmprq8YFmzZqlKVOmyM/Pz6OzKQAAwHtWrlxpegTffJpm1apV2r9/vx566KFmbe90OuVwONwWAADQOXk9Rj7//HMtWrRIq1evlr9/807EZGdny263u5aEhAQvTwkAAEzxaozU1dVpypQpevjhhzVgwIBm75eVlaXKykrXcujQIS9OCQAATPLqZ46OHz+uoqIi7dq1S3PnzpUk1dfXy7Is+fv767333tO1117bYL+goCAFBQV5czQAANBOeDVGIiIitHv3brd1y5cv15YtW/TWW28pMTHRm4cHAAAdgMcxUlVVpS+++MJ1u6SkRMXFxYqKilKfPn2UlZWlr776Sq+++qq6deumpKQkt/2jo6MVHBzcYD0AAOiaPI6RoqIijRkzxnU7MzNTkjRt2jTl5uaqrKxMpaWlbTchAADo1GyWZVmmhzgXh8Mhu92uyspKRUREmB4HAACdPHlSJSUlSkxMVHBwsOlxjDnbv0NzX7/51V4AAGAUMQIAAIwiRgAAgEt2drZsNpsWLFjgs2MSIwAAQJJUWFiol156SUOHDvXpcb36PSMAAHRZliXVnDBz7IBQyWbzaJeqqirddtttevnll/Xoo496abDGESMAAHhDzQlpabyZYz9wWArs7tEuc+bM0fjx4zV27FhiBAAA+Nabb76pjz/+WIWFhUaOT4wAAOANAaGnz1CYOnYzHTp0SHfddZfee+89Y9+XQowAAOANNpvHb5WYsHPnTlVUVGjEiBGudXV1dSooKFBOTo6cTqf8/Py8OgMxAgBAF3bdddc1+FHb6dOn6+KLL9bChQu9HiISMQIAQJcWHh7e4Mdru3fvrh49evjsR235nhEAAGAUZ0YAAICbrVu3+vR4nBkBAABGESMAAMAoYgQAABhFjAAAAKOIEQAAWsGyLNMjGNUWz58YAQCgBQICAiRJJ04Y+mXeduLM8z/z79ESfLQXAIAW8PPzU2RkpCoqKiRJoaGhstlshqfyHcuydOLECVVUVCgyMrJV39RKjAAA0EKxsbGS5AqSrigyMtL179BSxAgAAC1ks9kUFxen6Oho1dTUmB7H5wICAtrkt2uIEQAAWsnPz88nPyjXWXEBKwAAMIoYAQAARhEjAADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIwiRgAAgFHECAAAMIoYAQAARhEjAADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIwiRgAAgFHECAAAMIoYAQAARhEjAADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIwiRgAAgFEex0hBQYHS0tIUHx8vm82mDRs2nHX7devW6frrr1evXr0UERGhkSNH6o9//GNL5wUAAJ2MxzFSXV2tYcOGKScnp1nbFxQU6Prrr9emTZu0c+dOjRkzRmlpadq1a5fHwwIAgM7HZlmW1eKdbTatX79eEydO9Gi/IUOGaPLkyXrwwQebtb3D4ZDdbldlZaUiIiJaMCkAAPC15r5++/twJklSfX29jh8/rqioqCa3cTqdcjqdrtsOh8MXowEAAAN8fgHr008/rerqat16661NbpOdnS273e5aEhISfDghAADwJZ/GyBtvvKElS5ZozZo1io6ObnK7rKwsVVZWupZDhw75cEoAAOBLPnubZs2aNZoxY4bWrl2rsWPHnnXboKAgBQUF+WgyAABgkk/OjLzxxhtKT0/X66+/rvHjx/vikAAAoIPw+MxIVVWVvvjiC9ftkpISFRcXKyoqSn369FFWVpa++uorvfrqq5JOh8jUqVP13HPP6YorrlB5ebkkKSQkRHa7vY2eBgAA6Kg8PjNSVFSk4cOHa/jw4ZKkzMxMDR8+3PUx3bKyMpWWlrq2f/HFF1VbW6s5c+YoLi7Otdx1111t9BQAAEBH1qrvGfEVvmcEAICOp7mv3/w2DQAAMIoYAQAARhEjAADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIwiRgAAgFHECAAAMIoYAQAARhEjAADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIwiRgAAgFHECAAAMIoYAQAARhEjAADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIwiRgAAgFHECAAAMIoYAQAARhEjAADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIwiRgAAgFHECAAAMIoYAQAARhEjAADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIwiRgAAgFHECAAAMIoYAQAARhEjAADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIzyOEYKCgqUlpam+Ph42Ww2bdiw4Zz75Ofna8SIEQoODlb//v31wgsvtGRWAADQCXkcI9XV1Ro2bJhycnKatX1JSYluvPFGjR49Wrt27dIDDzyg+fPn6+233/Z4WAAA0Pn4e7pDamqqUlNTm739Cy+8oD59+ujZZ5+VJA0aNEhFRUV66qmnNGnSJE8PDwAAOhmPY8RT27dvV0pKitu6G264QStXrlRNTY0CAgIa7ON0OuV0Ol23HQ7H6f9Y9/+kXr2lsBgprJfUPVoK+8fSPVoKCPbqcwEAAG3P6zFSXl6umJgYt3UxMTGqra3V0aNHFRcX12Cf7OxsPfzwww0f7NNN0kFb0wcLipC69/pRrBAuAAC0Z16PEUmy2dwDwrKsRtefkZWVpczMTNdth8OhhIQE6fpHJOu4VHVEqv5aqqo4vVRXSHWnJKfj9PLN/nMPRbgAANAueD1GYmNjVV5e7rauoqJC/v7+6tGjR6P7BAUFKSgoqOEdyXdIEREN11uWdLLyH4Fy5B+B8uP/JlwAAGiPvB4jI0eO1Lvvvuu27r333lNycnKj14u0iM0mhUSeXnpedPZtCRcAANoVj2OkqqpKX3zxhet2SUmJiouLFRUVpT59+igrK0tfffWVXn31VUlSRkaGcnJylJmZqTvvvFPbt2/XypUr9cYbb7Tds/AE4QIAQLvicYwUFRVpzJgxrttnru2YNm2acnNzVVZWptLSUtf9iYmJ2rRpk+6++2795je/UXx8vJYtW9YxPtZLuAAA4HU268zVpO2Yw+GQ3W5XZWWlIhq7ZqSjaUm4eIJwAQC0A819/fbJp2nwI5xxAQDAhRhp7wgXAEAnR4x0JoQLAKADIka6KsIFANBOECM4N8IFAOBFxAjaFuECAPAQMQJzWhIuZ8KEcAGAToMYQcfww3DpNeDs2xIuANChECPofAgXAOhQiBF0bYQLABhHjADNRbgAgFcQI4A3EC4A0GzECGAa4QKgiyNGgI6EcAHQCREjQGfV7sPlB7FCuABdGjECgHABYBQxAsAzhAuANkaMAPCeNg+XI1LV14QL0MkQIwDaB8IF6LKIEQAdD+ECdCrECIDOjXAB2j1iBADOIFwAI4gRAGgJwgVoM8QIAHgb4QKcFTECAO0J4YIuiBgBgI6KcEEnQYwAQFdAuKAdI0YAAO4IF/gYMQIAaDnCBW2AGAEA+EZrw6XRiCFcOgNiBADQ/hAuXQoxAgDo2AiXDo8YAQB0HYRLu0SMAADQGMLFZ4gRAABai3BpFWIEAABfIlwaIEYAAGivuki4ECMAAHQG7TFc/Ho0a3RiBACArsZX4eL8olnjECMAAKBprQmX8oPS47ef8xDECAAAaBs/Dpeooc3arZtXhwIAADgHYgQAABhFjAAAAKOIEQAAYBQxAgAAjCJGAACAUS2KkeXLlysxMVHBwcEaMWKEPvjgg7Nuv3r1ag0bNkyhoaGKi4vT9OnTdezYsRYNDAAAOhePY2TNmjVasGCBFi9erF27dmn06NFKTU1VaWlpo9tv27ZNU6dO1YwZM7Rnzx6tXbtWhYWFmjlzZquHBwAAHZ/HMfLMM89oxowZmjlzpgYNGqRnn31WCQkJWrFiRaPb79ixQ/369dP8+fOVmJioUaNGadasWSoqKmr18AAAoOPzKEZOnTqlnTt3KiUlxW19SkqKPvzww0b3ufLKK/Xll19q06ZNsixLR44c0VtvvaXx48c3eRyn0ymHw+G2AACAzsmjGDl69Kjq6uoUExPjtj4mJkbl5eWN7nPllVdq9erVmjx5sgIDAxUbG6vIyEg9//zzTR4nOztbdrvdtSQkJHgyJgAA6EBadAGrzWZzu21ZVoN1Z+zdu1fz58/Xgw8+qJ07d2rz5s0qKSlRRkZGk4+flZWlyspK13Lo0KGWjAkAADoAj34or2fPnvLz82twFqSioqLB2ZIzsrOz9bOf/Uz33XefJGno0KHq3r27Ro8erUcffVRxcXEN9gkKClJQUJAnowEAgA7KoxgJDAzUiBEjlJeXp5tuusm1Pi8vTxMmTGh0nxMnTsjf3/0wfn5+kk6fUWmOM9tx7QgAAB3Hmdftc77eWx568803rYCAAGvlypXW3r17rQULFljdu3e3Dh48aFmWZS1atMi6/fbbXduvWrXK8vf3t5YvX27t37/f2rZtm5WcnGxddtllzT7m/v37LUksLCwsLCwsHXDZv3//WV/nPTozIkmTJ0/WsWPH9Mgjj6isrExJSUnatGmT+vbtK0kqKytz+86R9PR0HT9+XDk5ObrnnnsUGRmpa6+9Vk888USzjxkVFSVJKi0tld1u93RkSdKll16qwsLCFu3L/uzP/uzP/uzP/p6rrKxUnz59XK/jTfE4RiRp9uzZmj17dqP35ebmNlg3b948zZs3ryWHkiR163b6Olu73a6IiIgWPYafn1+L92V/9md/9md/9mf/ljvzOt7k/a169A5kzpw57M/+7M/+7M/+7O/j/ZvDZjX3KlKDHA6H7Ha7KisrW11nAADAN5r7+t0hzowEBQXpoYce4uO+AAB0IM19/e4QZ0YAAEDn1SHOjAAAgM6LGAEAAEYRI2hTy5cvV2JiooKDgzVixAh98MEHrvuqqqo0d+5c9e7dWyEhIRo0aJBWrFhhcFr8UEFBgdLS0hQfHy+bzaYNGza43Z+eni6bzea2XHHFFWaGhZvs7GxdeumlCg8PV3R0tCZOnKhPP/3UdX9NTY0WLlyon/zkJ+revbvi4+M1depUHT582ODUOONcfz9JOnLkiNLT0xUfH6/Q0FCNGzdOn3/+uaGJ2x4xgjazZs0aLViwQIsXL9auXbs0evRopaamur4E7+6779bmzZv129/+Vvv27dPdd9+tefPm6Z133jE8OSSpurpaw4YNU05OTpPbjBs3TmVlZa5l06ZNPpwQTcnPz9ecOXO0Y8cO5eXlqba2VikpKaqurpZ0+mc5Pv74Y/3qV7/Sxx9/rHXr1umzzz7Tz3/+c8OTQzr338+yLE2cOFEHDhzQO++8o127dqlv374aO3asa5sOz9Ovgweactlll1kZGRlu6y6++GJr0aJFlmVZ1pAhQ6xHHnnE7f6f/vSn1i9/+UufzYjmkWStX7/ebd20adOsCRMmGJkHnqmoqLAkWfn5+U1u89e//tWSZP3973/34WRojh///T799FNLkvW///u/rm1qa2utqKgo6+WXXzY1ZpvizAjaxKlTp7Rz506lpKS4rU9JSdGHH34oSRo1apQ2btyor776SpZl6f3339dnn32mG264wcTIaIGtW7cqOjpaAwYM0J133qmKigrTI6ERlZWVknTWr+CurKyUzWZTZGSkj6ZCc/347+d0OiVJwcHBrm38/PwUGBiobdu2+X5ALyBG0CaOHj2quro6xcTEuK2PiYlReXm5JGnZsmUaPHiwevfurcDAQI0bN07Lly/XqFGjTIwMD6Wmpmr16tXasmWLnn76aRUWFuraa691/Q8l2gfLspSZmalRo0YpKSmp0W1OnjypRYsWacqUKXyRZDvT2N/v4osvVt++fZWVlaVvv/1Wp06d0uOPP67y8nKVlZUZnrhttOi3aYCm2Gw2t9uWZbnWLVu2TDt27NDGjRvVt29fFRQUaPbs2YqLi9PYsWNNjAsPTJ482fXfSUlJSk5OVt++ffX73/9eN998s8HJ8ENz587VJ5980uT/x1xTU6N//dd/VX19vZYvX+7j6XAujf39AgIC9Pbbb2vGjBmKioqSn5+fxo4dq9TUVIOTti1iBG2iZ8+e8vPzc50FOaOiokIxMTH6/vvv9cADD2j9+vUaP368JGno0KEqLi7WU089RYx0QHFxcerbt2+nuqK/o5s3b542btyogoIC9e7du8H9NTU1uvXWW1VSUqItW7ZwVqSdOdvfb8SIESouLlZlZaVOnTqlXr166fLLL1dycrKhadsWb9OgTQQGBmrEiBHKy8tzW5+Xl6crr7xSNTU1qqmpafDLjX5+fqqvr/flqGgjx44d06FDhxQXF2d6lC7PsizNnTtX69at05YtW5SYmNhgmzMh8vnnn+tPf/qTevToYWBSNKY5f78z7Ha7evXqpc8//1xFRUWaMGGCDyf1Hs6MoM1kZmbq9ttvV3JyskaOHKmXXnpJpaWlysjIUEREhK6++mrdd999CgkJUd++fZWfn69XX31VzzzzjOnRodPfA/PFF1+4bpeUlKi4uFhRUVGKiorSkiVLNGnSJMXFxengwYN64IEH1LNnT910000Gp4Z0+ldVX3/9db3zzjsKDw93naG02+0KCQlRbW2tbrnlFn388cf63e9+p7q6Otc2UVFRCgwMNDl+l3euv58krV27Vr169VKfPn20e/du3XXXXZo4cWKDDw10WCY/yoPO5ze/+Y3Vt29fKzAw0PrpT3/q9tHCsrIyKz093YqPj7eCg4OtgQMHWk8//bRVX19vcGKc8f7771uSGizTpk2zTpw4YaWkpFi9evWyAgICrD59+ljTpk2zSktLTY8Ny2r07ybJWrVqlWVZllVSUtLkNu+//77R2XHuv59lWdZzzz1n9e7d2/V/f7/85S8tp9Npbug2xg/lAQAAo7hmBAAAGEWMAAAAo4gRAABgFDECAACMIkYAAIBRxAgAADCKGAEAAEYRIwAAwChiBAAAGEWMAAAAo4gRAABgFDECAACMIkYAAIBRxAgAADCKGAEAAEYRIwAAwChiBAAAGEWMAAAAo4gRAABgFDECAACMIkYAAIBRxAgAADCKGAEAAEYRIwAAwCjjMZKenq6JEyeaHgMAABhiPEYAAEDX1q5iZPPmzRo1apQiIyPVo0cP/cu//Iv279/vuv/gwYOy2Wxat26dxowZo9DQUA0bNkzbt283ODUAAGiNdhUj1dXVyszMVGFhof785z+rW7duuummm1RfX++23eLFi3XvvfequLhYAwYM0L/927+ptrbW0NQAAKA1/E0P8EOTJk1yu71y5UpFR0dr7969SkpKcq2/9957NX78eEnSww8/rCFDhuiLL77QxRdf7NN5AQBA67WrMyP79+/XlClT1L9/f0VERCgxMVGSVFpa6rbd0KFDXf8dFxcnSaqoqPDdoAAAoM20qzMjaWlpSkhI0Msvv6z4+HjV19crKSlJp06dctsuICDA9d82m02SGryVAwAAOoZ2EyPHjh3Tvn379OKLL2r06NGSpG3bthmeCgAAeFu7iZHzzjtPPXr00EsvvaS4uDiVlpZq0aJFpscCAABeZvyakfr6evn7+6tbt2568803tXPnTiUlJenuu+/Wf/zHf5geDwAAeJnNsizL5ADjxo3ThRdeqJycHJNjAAAAQ4ydGfn222/1+9//Xlu3btXYsWNNjQEAAAwzds3IHXfcocLCQt1zzz2aMGGCqTEAAIBhxt+mAQAAXZvxC1gBAEDXRowAAACjfBIj2dnZuvTSSxUeHq7o6GhNnDhRn376qds2lmVpyZIlio+PV0hIiK655hrt2bPHdf8333yjefPmaeDAgQoNDVWfPn00f/58VVZWNnpMp9OpSy65RDabTcXFxd58egAAoBV8EiP5+fmaM2eOduzYoby8PNXW1iolJUXV1dWubZ588kk988wzysnJUWFhoWJjY3X99dfr+PHjkqTDhw/r8OHDeuqpp7R7927l5uZq8+bNmjFjRqPHvP/++xUfH++LpwcAAFrByAWsX3/9taKjo5Wfn6+rrrpKlmUpPj5eCxYs0MKFCyWdPrMRExOjJ554QrNmzWr0cdauXat///d/V3V1tfz9//nBoD/84Q/KzMzU22+/rSFDhmjXrl265JJLfPHUAACAh4xcM3LmrZWoqChJUklJicrLy5WSkuLaJigoSFdffbU+/PDDsz5ORESEW4gcOXJEd955p1577TWFhoZ66RkAAIC24vMYsSxLmZmZGjVqlJKSkiRJ5eXlkqSYmBi3bWNiYlz3/dixY8f061//2u2siWVZSk9PV0ZGhpKTk730DAAAQFvy+ZeezZ07V5988kmjv8hrs9ncbluW1WCdJDkcDo0fP16DBw/WQw895Fr//PPPy+FwKCsrq+0HBwAAXuHTMyPz5s3Txo0b9f7776t3796u9bGxsZLU4CxIRUVFg7Mlx48f17hx4xQWFqb169crICDAdd+WLVu0Y8cOBQUFyd/fXxdeeKEkKTk5WdOmTfPW0wIAAK3gkxixLEtz587VunXrtGXLFiUmJrrdn5iYqNjYWOXl5bnWnTp1Svn5+bryyitd6xwOh1JSUhQYGKiNGzcqODjY7XGWLVumv/3tbyouLlZxcbE2bdokSVqzZo0ee+wxLz5DAADQUj55m2bOnDl6/fXX9c477yg8PNx1BsRutyskJEQ2m00LFizQ0qVLddFFF+miiy7S0qVLFRoaqilTpkg6fUYkJSVFJ06c0G9/+1s5HA45HA5JUq9eveTn56c+ffq4HTcsLEySdMEFF7idiQEAAO2HT2JkxYoVkqRrrrnGbf2qVauUnp4u6fT3gnz//feaPXu2vv32W11++eV67733FB4eLknauXOnPvroI0lyvf1yRklJifr16+fV5wAAALyDH8oDAABG8ds0AADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIwiRgAAgFHECAAAMIoYAeA1W7dulc1m03fffWd6FADtGF96BqDNXHPNNbrkkkv07LPPSjr9G1PffPONYmJiGv0FbgCQfPR18AC6psDAQNevcgNAU3ibBkCbSE9PV35+vp577jnZbDbZbDbl5ua6vU2Tm5uryMhI/e53v9PAgQMVGhqqW265RdXV1XrllVfUr18/nXfeeZo3b57q6upcj33q1Cndf//9Ov/889W9e3ddfvnl2rp1q5knCqDNcWYEQJt47rnn9NlnnykpKUmPPPKIJGnPnj0Ntjtx4oSWLVumN998U8ePH9fNN9+sm2++WZGRkdq0aZMOHDigSZMmadSoUZo8ebIkafr06Tp48KDefPNNxcfHa/369Ro3bpx2796tiy66yKfPE0DbI0YAtAm73a7AwECFhoa63pr5v//7vwbb1dTUaMWKFbrgggskSbfccotee+01HTlyRGFhYRo8eLDGjBmj999/X5MnT9b+/fv1xhtv6Msvv1R8fLwk6d5779XmzZu1atUqLV261HdPEoBXECMAfCo0NNQVIpIUExOjfv36KSwszG1dRUWFJOnjjz+WZVkaMGCA2+M4nU716NHDN0MD8CpiBIBPBQQEuN222WyNrquvr5ck1dfXy8/PTzt37pSfn5/bdj8MGAAdFzECoM0EBga6XXjaFoYPH666ujpVVFRo9OjRbfrYANoHPk0DoM3069dPH330kQ4ePKijR4+6zm60xoABA3Tbbbdp6tSpWrdunUpKSlRYWKgnnnhCmzZtaoOpAZhGjABoM/fee6/8/Pw0ePBg9erVS6WlpW3yuKtWrdLUqVN1zz33aODAgfr5z3+ujz76SAkJCW3y+ADM4htYAQCAUZwZAQAARhEjAADAKGIEAAAYRYwAAACjiBEAAGAUMQIAAIwiRgAAgFHECAAAMIoYAQAARhEjAADAKGIEAAAYRYwAAACj/j91BYVeCrm7BgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "id": "5", + "metadata": {}, + "outputs": [], "source": [ "case1_example2 = case1(\"case1_example2\")\n", "case1_example2.create_model()" @@ -646,7 +65,7 @@ }, { "cell_type": "markdown", - "id": "f65cb535-55c1-4a83-b97c-224b8b1aceb7", + "id": "6", "metadata": {}, "source": [ "### Example 3: boundary levels on target, initial state below target" @@ -654,295 +73,10 @@ }, { "cell_type": "code", - "execution_count": 20, - "id": "88d99768-cab2-4bdf-943a-d6ce6975cde0", + "execution_count": null, + "id": "7", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0030.0000001.0000000.0100000.0000000.0105780.0005791.840109e-070.00.06.906490e-080.316024
12024-01-01 00:00:0040.0000000.0000000.0000000.0000000.0005790.0005792.925180e-090.00.01.169242e-090.333136
22024-01-01 00:01:0030.6347071.0225300.0100000.0000000.0105780.0005797.583603e-070.00.01.609514e-070.191875
32024-01-01 00:01:0040.0347220.0058880.0000000.0000000.0005790.0005791.274586e-080.00.02.839159e-090.200429
42024-01-01 00:02:0031.2693741.0318630.0100000.0000000.0105770.0005791.507221e-060.00.02.753056e-070.167372
..........................................
892752024-01-31 23:57:0041000.0096721.0000000.0052050.006290-0.0003510.0005791.157395e-040.00.0-2.707639e-04-0.045742
892762024-01-31 23:58:0031249.9874281.9999910.0055190.0044810.0002310.0005791.446765e-040.00.01.241401e-030.236630
892772024-01-31 23:58:004999.9886400.9999900.0044810.0052030.0002310.0005791.157402e-040.00.0-4.899401e-04-0.096563
892782024-01-31 23:59:0031250.0012901.9999970.0053360.0046640.0002070.0005791.446766e-040.00.08.995734e-040.171079
892792024-01-31 23:59:0041000.0024810.9999970.0046640.005471-0.0000630.0005791.157402e-040.00.0-2.811831e-04-0.052235
\n", - "

89280 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " time node_id storage level inflow_rate \\\n", - "0 2024-01-01 00:00:00 3 0.000000 1.000000 0.010000 \n", - "1 2024-01-01 00:00:00 4 0.000000 0.000000 0.000000 \n", - "2 2024-01-01 00:01:00 3 0.634707 1.022530 0.010000 \n", - "3 2024-01-01 00:01:00 4 0.034722 0.005888 0.000000 \n", - "4 2024-01-01 00:02:00 3 1.269374 1.031863 0.010000 \n", - "... ... ... ... ... ... \n", - "89275 2024-01-31 23:57:00 4 1000.009672 1.000000 0.005205 \n", - "89276 2024-01-31 23:58:00 3 1249.987428 1.999991 0.005519 \n", - "89277 2024-01-31 23:58:00 4 999.988640 0.999990 0.004481 \n", - "89278 2024-01-31 23:59:00 3 1250.001290 1.999997 0.005336 \n", - "89279 2024-01-31 23:59:00 4 1000.002481 0.999997 0.004664 \n", - "\n", - " outflow_rate storage_rate precipitation evaporation drainage \\\n", - "0 0.000000 0.010578 0.000579 1.840109e-07 0.0 \n", - "1 0.000000 0.000579 0.000579 2.925180e-09 0.0 \n", - "2 0.000000 0.010578 0.000579 7.583603e-07 0.0 \n", - "3 0.000000 0.000579 0.000579 1.274586e-08 0.0 \n", - "4 0.000000 0.010577 0.000579 1.507221e-06 0.0 \n", - "... ... ... ... ... ... \n", - "89275 0.006290 -0.000351 0.000579 1.157395e-04 0.0 \n", - "89276 0.004481 0.000231 0.000579 1.446765e-04 0.0 \n", - "89277 0.005203 0.000231 0.000579 1.157402e-04 0.0 \n", - "89278 0.004664 0.000207 0.000579 1.446766e-04 0.0 \n", - "89279 0.005471 -0.000063 0.000579 1.157402e-04 0.0 \n", - "\n", - " infiltration balance_error relative_error \n", - "0 0.0 6.906490e-08 0.316024 \n", - "1 0.0 1.169242e-09 0.333136 \n", - "2 0.0 1.609514e-07 0.191875 \n", - "3 0.0 2.839159e-09 0.200429 \n", - "4 0.0 2.753056e-07 0.167372 \n", - "... ... ... ... \n", - "89275 0.0 -2.707639e-04 -0.045742 \n", - "89276 0.0 1.241401e-03 0.236630 \n", - "89277 0.0 -4.899401e-04 -0.096563 \n", - "89278 0.0 8.995734e-04 0.171079 \n", - "89279 0.0 -2.811831e-04 -0.052235 \n", - "\n", - "[89280 rows x 13 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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X6Z9ZSZ5mZqaPnPfoobGHXOSFBEREVWJubk5zp8/j44dOwJ4Mqu95PeOHTsiNja21sPpoUOHEBcXhzfffLPc9RYWFhgyZAjWrFmDn3/+GVu3bsWjR4/g5eWF27dv4+rVq5U+lq+vLxQKBVJTU+Hu7q7y5eDgAODJVdfic1KV7YYOHYqrV69i586dZY4rhEB6ejosLCzQqFEj/P777yrrT5w4gZYtW1b6fZRXY0VatWpV7vFatGhRrVdPAV5BJSIioufg7OyMw4cPw9raGtnZ2fJyExMTREdHq1y1qwn5+fm4e/cuFAoF7t27h71792LBggXo27cvRowYUab9t99+C0dHR/j4+EBHRwf//e9/4eDgACsrKwQEBKBr165488038c0338Dd3R1XrlyBJEkICgoq9/gtWrTAsGHDMGLECCxZsgS+vr548OABDh06hNatW6NPnz5wdXVFVlYWDh48CG9vb5iYmFRqu8GDB2P79u14++23MWPGDPTs2RN2dnaIi4vDt99+i/HjxyMkJARTpkzBrFmz0KxZM/j4+CA8PByxsbGIjIys9Hksr0YTE5Ny23766ado164d5s6diyFDhuCPP/7A999/j+XLl1f6eJX21BGqREREpJWqY5LUsWPHBIAyX7///ns1VlpWaGiofCw9PT1hZ2cnevToIdauXSsUCoXcDiUmSa1evVr4+PgIU1NTYWFhIV599VVx7tw5ue3Dhw/FyJEjhY2NjTAyMhIvv/yyiIqKEkJUPJGooKBAzJw5U7i6ugp9fX3h4OAg3njjDXHhwgW5zdixY4WNjY0AIGbNmlXp7RQKhVixYoVo166dMDExERYWFqJt27Zi2bJlIicnR24zZ84c0bhxY6Gvry+8vb1VnqRQPEnq/Pnz8rK0tDQBQBw+fPipNVY02WnLli2iVatWQl9fXzg7O4vFixerrK+uSVKSELX40DIiIiLSCHl5eUhKSoKbmxuMjIyeax9Tp07FokWLEBISgq+//hqffvopdu7cic8++wxfffVVNVdM2qCy/Y63+ImIiOi59O/fH97e3nj77bchSRK2b9+OjRs3wsXFRd2lUR3HK6hERET1UHVcQSWqqsr2O87iJyIiIiKNwoBKRERERBqFAZWIiIiINAoDKhERERFpFAZUIiIiItIoDKhEREREpFEYUImIiIhIozCgEhEREVWBJEnY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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAHhCAYAAABN6eUeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABFjUlEQVR4nO3deXxU5d3///cQshBIBgJkKyFEZAuRRUAIAkrFCCoFtSVdDOKNenMXFUz9FuNSt0pKq/4AUSotklpvIPoNWysosUpSvwYETKhVRMBgIiZGtgwEyHp+fwyZMmRhJtuZTF7Px2MeM3PmOmc+ZxKYd67rOudYDMMwBAAA4ME6mV0AAADA5RBYAACAxyOwAAAAj0dgAQAAHo/AAgAAPB6BBQAAeDwCCwAA8HgEFgAA4PE6m11AS6mpqdG3336roKAgWSwWs8sBAAAuMAxDp0+fVmRkpDp1argfxWsCy7fffquoqCizywAAAE1QWFioPn36NPi61wSWoKAgSfYdDg4ONrkaAADgCpvNpqioKMf3eEO8JrDUDgMFBwcTWAAAaGcuN52DSbcAAMDjEVgAAIDHI7AAAACPR2ABAAAej8ACAAA8HoEFAAB4PAILAADweAQWAADg8QgsAADA47kVWFJTUzVmzBgFBQUpNDRUM2fO1IEDBy67XlZWlkaNGqWAgABdccUV+uMf/1inTUZGhmJjY+Xv76/Y2Fht3LjRndIAAIAXcyuwZGVlaf78+dq5c6cyMzNVVVWlhIQElZWVNbhOfn6+br75Zk2cOFG5ubl69NFH9eCDDyojI8PRJicnR4mJiUpKStK+ffuUlJSkWbNmadeuXU3fMwAA4DUshmEYTV35+++/V2hoqLKysjRp0qR62yxatEhbtmzR/v37HcvmzZunffv2KScnR5KUmJgom82mbdu2OdpMnTpVPXr00Lp161yqxWazyWq1qrS0lGsJAQDQTrj6/d2six+WlpZKkkJCQhpsk5OTo4SEBKdlN910k1avXq3Kykr5+voqJydHDz30UJ02S5cubXC75eXlKi8vdzy32WxN2IPGVdcYWvLOF/rq+zPqdJmLMrnKYpE6WSyqrDZUVVMj/85Nm0bkbsxsofJbpA5X1rlcvRdvo7G2jb3Xxes1Pbb/Z1u126jdVCt95C5prZ93S6rvM2/OZ1e7z839WV7uPVp7+/VpzfdsSHP+fbT259Ramvp/yeW20xqfhav/Vlz5d9FS++3u9mu3XXHujEvbaXJgMQxDycnJmjBhguLi4hpsV1xcrLCwMKdlYWFhqqqq0rFjxxQREdFgm+Li4ga3m5qaqqeffrqp5bvk/S9KtCr7q1Z9DwAAOrKa8rMutWtyYLn//vv1r3/9Sx9++OFl2156yejaUaiLl9fXprFLTaekpCg5Odnx3GazKSoqyqXaXfXR4WMXapN+O7PhUOYqw7iQig1DNYZ09NQ5hQcHyN+3eQdrWS5kbEPm/UljuSjnX1qHRRZTa2sJhuFar09r92w09jl7i5b4ffGG37n6NOd3zHKZv8Vb+/Oq/Zlcro62ULuvbfl/p6v73ZTa2vvv+9my07pv6eXbNSmwPPDAA9qyZYuys7PVp0+fRtuGh4fX6SkpKSlR586d1bNnz0bbXNrrcjF/f3/5+/s3pXyX5Rw+Lkla8bOrdcuwiFZ9LwAAOiKbzab7XGjn1p/2hmHo/vvv14YNG/T+++8rJibmsuvEx8crMzPTadn27ds1evRo+fr6Ntpm/Pjx7pTXoo6fKdcXxaclSeOuaHiODgAAaH1uBZb58+frjTfe0Nq1axUUFKTi4mIVFxfr3LlzjjYpKSmaPXu24/m8efP09ddfKzk5Wfv379drr72m1atX6+GHH3a0WbBggbZv364lS5boiy++0JIlS/Tee+9p4cKFzd/DJtr51QlJ0qCwIPXs1ro9OQAAoHFuBZaVK1eqtLRU119/vSIiIhy39PR0R5uioiIVFBQ4nsfExGjr1q3asWOHRowYoWeffVbLly/XHXfc4Wgzfvx4rV+/XmvWrNGwYcOUlpam9PR0jR07tgV2sWlyvrLPX4nv39O0GgAAgF2zzsPiSVr6PCw3vLBDh78v06tJo3TT0PAWqBAAAFzK1e9vriVUj+9s53X4+zJZLNK4GHpYAAAwG4GlHju/sh8dNDQyWNZAX5OrAQAABJZ61B7OHH8FvSsAAHgCAks9ProQWMb372VyJQAAQCKw1FFUek4FJ86qk0Ua3a+H2eUAAAARWOrYfeSkJGlopFVBAcxfAQDAExBYLrE7337COHpXAADwHASWS+w+Yg8s1/TjdPwAAHgKAstFSs9W6sB39usHjSawAADgMQgsF9lbcEKGIV3Rq6t6B3H9IAAAPAWB5SIf59sn3DJ/BQAAz0JguUjt/JUxDAcBAOBRCCwXnK+s1r++OSVJuiaGwAIAgCchsFywr/CUKqsN9Q7yV9+QQLPLAQAAFyGwXHDx4cwWi8XkagAAwMUILBd8fOEMt2OYcAsAgMchsEiqqTGUW1B7hBDzVwAA8DQEFkmHvz+j0+er1MXXR4PDg8wuBwAAXILAIim38JQkaVgfqzr78JEAAOBp+HaWlFtwSpI0si/zVwAA8EQEFskxf2VEVHdzCwEAAPXq8IHlTHmVvrxwwcORfbubWwwAAKhXhw8s//rmlGoM6QfduygsOMDscgAAQD06fGCpnb8ygt4VAAA8FoGldsIt81cAAPBYHTqwGIahvEL7hFuOEAIAwHN16MDyzclzOnamQr4+Fg2NDDa7HAAA0IAOHVg+uXA4c2ykVQG+PiZXAwAAGtKhA8u+wlJJ0og+VpMrAQAAjenQgeXfR+2B5ao+3c0tBAAANKrDBpaaGkOffXshsPyAHhYAADyZ24ElOztb06dPV2RkpCwWizZt2tRo+zlz5shisdS5DR061NEmLS2t3jbnz593e4dc9dWxMpVVVCvAt5P69+7aau8DAACaz+3AUlZWpuHDh2vFihUutV+2bJmKiooct8LCQoWEhOgnP/mJU7vg4GCndkVFRQoIaL0zz9YOB8VGBHOFZgAAPFxnd1eYNm2apk2b5nJ7q9Uqq/U/Qy6bNm3SyZMndffddzu1s1gsCg8Pd7ecJvv0KMNBAAC0F23etbB69WpNmTJF0dHRTsvPnDmj6Oho9enTR7feeqtyc3Mb3U55eblsNpvTzR21gSWOwAIAgMdr08BSVFSkbdu26Z577nFaPnjwYKWlpWnLli1at26dAgICdO211+rgwYMNbis1NdXRe2O1WhUVFeVyHTU1hj7/1h5wruKQZgAAPF6bBpa0tDR1795dM2fOdFo+btw43XnnnRo+fLgmTpyoN998UwMHDtRLL73U4LZSUlJUWlrquBUWFrpcR/7xMp0pr1KAbydd2btbU3cHAAC0EbfnsDSVYRh67bXXlJSUJD8/v0bbdurUSWPGjGm0h8Xf31/+/v5NqqV2wu0QJtwCANAutNm3dVZWlg4dOqS5c+detq1hGMrLy1NERESr1PLpN0y4BQCgPXG7h+XMmTM6dOiQ43l+fr7y8vIUEhKivn37KiUlRUePHtXrr7/utN7q1as1duxYxcXF1dnm008/rXHjxmnAgAGy2Wxavny58vLy9PLLLzdhly6PCbcAALQvbgeWPXv2aPLkyY7nycnJkqS77rpLaWlpKioqUkFBgdM6paWlysjI0LJly+rd5qlTp3TfffepuLhYVqtVI0eOVHZ2tq655hp3y7sswzD0eZF9wm1cJIEFAID2wGIYhmF2ES3BZrPJarWqtLRUwcHBDbY7euqcrv3d++rcyaLPn5kqv87MYQEAwCyufn93uG/rLy70rlwZ2o2wAgBAO9HhvrG/KD4tyX6EEAAAaB86XGCpnb8yODzI5EoAAICrOlxgqR0SGkwPCwAA7UaHCiznK6uVf6xMkjSEHhYAANqNDhVYDn53RjWGFNLVT72DmnaWXAAA0PY6VGDZX/yf+SsWi8XkagAAgKs6VGD5oogjhAAAaI86VmAp5gghAADaow4TWAzD4BwsAAC0Ux0msBw7U6ETZRXqZLGf5RYAALQfHSawHCo5I0mKCglUgK+PydUAAAB3dKDAYh8OGkDvCgAA7U4HCiz2Hpb+BBYAANqdDhNYDl4ILFf2JrAAANDedJjAUtvDMiCMQ5oBAGhvOkRgKT1XqZLT5ZKk/r27mlwNAABwV4cILLW9K+HBAQoK8DW5GgAA4K4OEVgOO4aDmL8CAEB71CECy6HvLxwhxIRbAADapQ4RWA5+Zz8HC2e4BQCgfeoQgaW2h4WTxgEA0D55fWA5X1mtb06ekyRdwZAQAADtktcHlm9OnpVhSN38O6tXNz+zywEAAE3g9YEl/9hZSVK/XoGyWCwmVwMAAJrC6wPL18fLJEnRPTlhHAAA7ZXXB5b8Y/bAEkNgAQCg3fL6wPL1cfuQUHTPQJMrAQAATeX1gcXRw9KLHhYAANorrw4s5VXV+rbUfkgzc1gAAGi/vDqwFJ7gkGYAALyB24ElOztb06dPV2RkpCwWizZt2tRo+x07dshisdS5ffHFF07tMjIyFBsbK39/f8XGxmrjxo3ullbHkWP/mb/CIc0AALRfbgeWsrIyDR8+XCtWrHBrvQMHDqioqMhxGzBggOO1nJwcJSYmKikpSfv27VNSUpJmzZqlXbt2uVuekyMXDmnux/wVAADatc7urjBt2jRNmzbN7TcKDQ1V9+7d631t6dKluvHGG5WSkiJJSklJUVZWlpYuXap169a5/V61HIGFI4QAAGjX2mwOy8iRIxUREaEbbrhBH3zwgdNrOTk5SkhIcFp200036aOPPmpwe+Xl5bLZbE63SxWcsE+47RtCYAEAoD1r9cASERGhVatWKSMjQxs2bNCgQYN0ww03KDs729GmuLhYYWFhTuuFhYWpuLi4we2mpqbKarU6blFRUXXaHD1pn8MS1YPAAgBAe+b2kJC7Bg0apEGDBjmex8fHq7CwUM8//7wmTZrkWH7ppFjDMBqdKJuSkqLk5GTHc5vN5hRaDMNwXKX5Bz26NHs/AACAeUw5rHncuHE6ePCg43l4eHid3pSSkpI6vS4X8/f3V3BwsNPtYsfOVKi8qkYWixRhJbAAANCemRJYcnNzFRER4XgeHx+vzMxMpzbbt2/X+PHjm/we31wYDgoPDpBfZ68+3QwAAF7P7SGhM2fO6NChQ47n+fn5ysvLU0hIiPr27auUlBQdPXpUr7/+uiT7EUD9+vXT0KFDVVFRoTfeeEMZGRnKyMhwbGPBggWaNGmSlixZohkzZmjz5s1677339OGHHzZ5x46esg8H9WE4CACAds/twLJnzx5NnjzZ8bx2Hsldd92ltLQ0FRUVqaCgwPF6RUWFHn74YR09elRdunTR0KFD9fbbb+vmm292tBk/frzWr1+vxx9/XE888YT69++v9PR0jR07tsk75pi/0p3AAgBAe2cxDMMwu4iWYLPZZLVaVVpaquDgYD2+6VO9sbNA90++Ug/fNOjyGwAAAG3u0u/vhnjt5I7aHhaGhAAAaP+8NrAcdQQWzsECAEB755WBhXOwAADgXbwysJwoq9C5ympJUmT3AJOrAQAAzeWVgaWo9LwkqVc3f/l39jG5GgAA0FxeGVi+s9kDS7jV3+RKAABAS/DKwFJcG1iCGQ4CAMAbeGVg+e7CkFAYgQUAAK/glYGFHhYAALyLlwaWcklSmJXAAgCAN/DKwFI7JEQPCwAA3sErA4tjSIgeFgAAvILXBZbzldUqPVcpiUm3AAB4C68LLLXnYOni66PggM4mVwMAAFqC1wWWkgsTbsOtAbJYLCZXAwAAWoL3BZbT9h6W0CDOcgsAgLfwusBy7Iy9hyWU+SsAAHgNrwssJ8rsE257dvUzuRIAANBSvDCw2HtYenUjsAAA4C28MLBUSJJ6dWMOCwAA3sLrAsvx2iEhAgsAAF7D+wLLhUm3PRkSAgDAa3hdYDlx9sKQUFd6WAAA8BZeF1jKK2sk0cMCAIA38brAIkkBvp0U6OdjdhkAAKCFeGVg6dXNn9PyAwDgRbwysHCEEAAA3sU7AwtnuQUAwKt4ZWDpEUhgAQDAm3hlYLF28TW7BAAA0IIILAAAwOO5HViys7M1ffp0RUZGymKxaNOmTY2237Bhg2688Ub17t1bwcHBio+P17vvvuvUJi0tTRaLpc7t/Pnz7pYnSeoeSGABAMCbuB1YysrKNHz4cK1YscKl9tnZ2brxxhu1detW7d27V5MnT9b06dOVm5vr1C44OFhFRUVOt4CAAHfLk0QPCwAA3qazuytMmzZN06ZNc7n90qVLnZ4vXrxYmzdv1t/+9jeNHDnSsdxisSg8PNzdcupFYAEAwLu0+RyWmpoanT59WiEhIU7Lz5w5o+joaPXp00e33nprnR6YS5WXl8tmszndalkZEgIAwKu0eWB54YUXVFZWplmzZjmWDR48WGlpadqyZYvWrVungIAAXXvttTp48GCD20lNTZXVanXcoqKiHK/RwwIAgHexGIZhNHlli0UbN27UzJkzXWq/bt063XPPPdq8ebOmTJnSYLuamhpdffXVmjRpkpYvX15vm/LycpWXlzue22w2RUVFKWrhm/rk2R+pF2e7BQDA49lsNlmtVpWWlio4OLjBdm7PYWmq9PR0zZ07V2+99VajYUWSOnXqpDFjxjTaw+Lv7y9///pDCT0sAAB4lzYZElq3bp3mzJmjtWvX6pZbbrlse8MwlJeXp4iICLffK9Cvk3x9vPL0MgAAdFhu97CcOXNGhw4dcjzPz89XXl6eQkJC1LdvX6WkpOjo0aN6/fXXJdnDyuzZs7Vs2TKNGzdOxcXFkqQuXbrIarVKkp5++mmNGzdOAwYMkM1m0/Lly5WXl6eXX37Z7R0KDqB3BQAAb+N2V8SePXs0cuRIxyHJycnJGjlypH7zm99IkoqKilRQUOBo/+qrr6qqqkrz589XRESE47ZgwQJHm1OnTum+++7TkCFDlJCQoKNHjyo7O1vXXHON2zvULaDNRrkAAEAbadakW09SO2nnluff1d9/lWB2OQAAwAWuTrr1uskeXf3pYQEAwNt4XWAJ9PO6XQIAoMPzum/3QD96WAAA8DZeF1i6ElgAAPA6XhdYApnDAgCA1/G6wNLVz8fsEgAAQAvzusASSGABAMDreF1gYQ4LAADex/sCC3NYAADwOl4XWLr4MyQEAIC38brAEuBDYAEAwNt4XWDx87WYXQIAAGhhXhdY/Dt73S4BANDhed23u19nhoQAAPA2XhdY/H28bpcAAOjwvO7b3d/X63YJAIAOz+u+3RkSAgDA+3hdYGHSLQAA3sfrvt39mMMCAIDX8bpv906dOA8LAADexusCCwAA8D4EFgAA4PEILAAAwOMRWAAAgMcjsAAAAI9HYAEAAB6PwAIAADwegQUAAHg8AgsAAPB4BBYAAODxCCwAAMDjuR1YsrOzNX36dEVGRspisWjTpk2XXScrK0ujRo1SQECArrjiCv3xj3+s0yYjI0OxsbHy9/dXbGysNm7c6G5pAADAS7kdWMrKyjR8+HCtWLHCpfb5+fm6+eabNXHiROXm5urRRx/Vgw8+qIyMDEebnJwcJSYmKikpSfv27VNSUpJmzZqlXbt2uVseAADwQhbDMIwmr2yxaOPGjZo5c2aDbRYtWqQtW7Zo//79jmXz5s3Tvn37lJOTI0lKTEyUzWbTtm3bHG2mTp2qHj16aN26dS7VYrPZZLVaVVpaquDg4KbtEAAAaFOufn93bu1CcnJylJCQ4LTspptu0urVq1VZWSlfX1/l5OTooYceqtNm6dKlDW63vLxc5eXljuc2m61F6zbdvnTps42Smpwngeap/VvGYmmd7bbGttuDxj5Xw2j9z+TSv1Gb+n717Ud9f/+21u9PW/zuNPbzcPVv/bb+HW96H0TLc3Xfz1a61KzVA0txcbHCwsKcloWFhamqqkrHjh1TREREg22Ki4sb3G5qaqqefvrpVqnZdKXfSFvul6orzK4EAIDWVe5ayGr1wCLZh44uVjsKdfHy+tpcuuxiKSkpSk5Odjy32WyKiopqiXLNt/cv9rDi102amirJIntPSwf8a7RBzf0r4uLP0mhg+cWvX+6zv7RNS/+8Lt1fy0XLXam59nntdtz9narv83Zlf+tbfvGyi+txR2v/e6jv85Pqfm7u/txd+V1r6LXGtl9fTQ1t69LXG2vT0Pbr09DvVEPruvNvqrHP9eL9ac1/c2rC9uv7rBvTlP3w1O8GN/6PPnNO+t28yzZr9cASHh5ep6ekpKREnTt3Vs+ePRttc2mvy8X8/f3l7+/f8gWbraZG2ndh3s70ZdJVPza3HgAAWpPNJunygaXVz8MSHx+vzMxMp2Xbt2/X6NGj5evr22ib8ePHt3Z5nic/SyotlAKs0uBbza4GAACP4HYPy5kzZ3To0CHH8/z8fOXl5SkkJER9+/ZVSkqKjh49qtdff12S/YigFStWKDk5Wffee69ycnK0evVqp6N/FixYoEmTJmnJkiWaMWOGNm/erPfee08ffvhhC+xiO5O31n4f92PJN8DcWgAA8BBu97Ds2bNHI0eO1MiRIyVJycnJGjlypH7zm99IkoqKilRQUOBoHxMTo61bt2rHjh0aMWKEnn32WS1fvlx33HGHo8348eO1fv16rVmzRsOGDVNaWprS09M1duzY5u5f+3K+VNq/xf54xC/MrQUAAA/SrPOweBKvOA/L3jTpbwuk3oOlX+7smId8AgA6FFe/v7mWkCfJ/V/7/YhfEFYAALgIgcVTHD8sffOxZOkkDZtldjUAAHgUAoun+Fe6/b7/D6WgcHNrAQDAwxBYPIFh/CewDPupubUAAOCBCCye4Jvd0skjkm9XafDNZlcDAIDHIbB4gn3r7fdDpkt+Xc2tBQAAD0RgMVtVhfTZBvtjJtsCAFAvAovZDr0nnTspdQuTrrje7GoAAPBIBBaz1U62veonUicfc2sBAMBDEVjMVH5G+vJd+2OuygwAQIMILGY6+K5UdU7qESNFjDC7GgAAPBaBxUyfbbTfD72NU/EDANAIAotZyk9LBzPtj4feZm4tAAB4OAKLWQ68I1Wdl3peKYVfZXY1AAB4NAKLWRgOAgDAZQQWM5y3SYcYDgIAwFUEFjMc2CpVV0i9BkmhsWZXAwCAxyOwmIHhIAAA3EJgaWvnTkmH/mF/PHSmmZUAANBuEFja2oGtUk2l1HuIFDrE7GoAAGgXCCxt7d8Xrswcd7u5dQAA0I4QWNrS+VLpqx32x7EzzawEAIB2hcDSlg79wz4c1Gug1Hug2dUAANBuEFja0oFt9vuBU82tAwCAdobA0laqq6SD2+2PB91sbi0AALQzBJa2UrhTOn9K6hIiRV1jdjUAALQrBJa24hgOuknq5GNuLQAAtDMElrZgGPbzr0jSoGnm1gIAQDtEYGkLxw5KJ76SfPyk/j80uxoAANodAktbqO1d6TdR8g8ytxYAANohAktb+PId+z3DQQAANEmTAssrr7yimJgYBQQEaNSoUfrnP//ZYNs5c+bIYrHUuQ0dOtTRJi0trd4258+fb0p5nqXsuFS4y/6Y868AANAkbgeW9PR0LVy4UI899phyc3M1ceJETZs2TQUFBfW2X7ZsmYqKihy3wsJChYSE6Cc/+YlTu+DgYKd2RUVFCggIaNpeeZKD2yWjRgq7SuoeZXY1AAC0S24HlhdffFFz587VPffcoyFDhmjp0qWKiorSypUr621vtVoVHh7uuO3Zs0cnT57U3Xff7dTOYrE4tQsPD2/aHnkajg4CAKDZ3AosFRUV2rt3rxISEpyWJyQk6KOPPnJpG6tXr9aUKVMUHR3ttPzMmTOKjo5Wnz59dOuttyo3N7fR7ZSXl8tmszndPE5VuXT4ffvjQQwHAQDQVG4FlmPHjqm6ulphYWFOy8PCwlRcXHzZ9YuKirRt2zbdc889TssHDx6stLQ0bdmyRevWrVNAQICuvfZaHTx4sMFtpaamymq1Om5RUR443HLkn1LFGalbuBQx0uxqAABot5o06dZisTg9NwyjzrL6pKWlqXv37po5c6bT8nHjxunOO+/U8OHDNXHiRL355psaOHCgXnrppQa3lZKSotLSUsetsLCwKbvSumrPbjtoqtSJA7IAAGiqzu407tWrl3x8fOr0ppSUlNTpdbmUYRh67bXXlJSUJD8/v0bbdurUSWPGjGm0h8Xf31/+/v6uF9/WDEP68l3744HMXwEAoDnc+rPfz89Po0aNUmZmptPyzMxMjR8/vtF1s7KydOjQIc2dO/ey72MYhvLy8hQREeFOeZ7l2EGptFDy8ZdiJpldDQAA7ZpbPSySlJycrKSkJI0ePVrx8fFatWqVCgoKNG/ePEn2oZqjR4/q9ddfd1pv9erVGjt2rOLi4ups8+mnn9a4ceM0YMAA2Ww2LV++XHl5eXr55ZebuFseoHaybXS85Bdobi0AALRzbgeWxMREHT9+XM8884yKiooUFxenrVu3Oo76KSoqqnNOltLSUmVkZGjZsmX1bvPUqVO67777VFxcLKvVqpEjRyo7O1vXXHNNE3bJQ9QGFq4dBABAs1kMwzDMLqIl2Gw2Wa1WlZaWKjg42NxiqsqlJf2kyrPSvA+l8KvMrQcAAA/l6vc3h660hsKP7WGla6gUOvTy7QEAQKMILK3BMRw0mcOZAQBoAXybtgZHYLnB3DoAAPASBJaWVnZMKtpnf3zF9aaWAgCAtyCwtLT8LEmGFBYnBTV+Mj0AAOAaAktLy/+n/T7mOnPrAADAixBYWlp+tv0+ZqK5dQAA4EUILC2p9Kh04rBk6SRFN36pAgAA4DoCS0s6cmE4KGKEFGA1tRQAALwJgaUlOeavMBwEAEBLIrC0pCMX5q/04+rMAAC0JAJLSzn5tXSqQOrUWeo7zuxqAADwKgSWllKQY7+PHCn5dzO3FgAAvAyBpaXUBhZ6VwAAaHEElpZSsNN+3zfe3DoAAPBCBJaWcPaE9P0X9sdRY82tBQAAL0RgaQmFu+z3vQZKXXuZWwsAAF6IwNISmL8CAECrIrC0BOavAADQqggszVV5Xvo21/6Y+SsAALQKAktzfZsrVVdIXUOlkCvMrgYAAK9EYGmui+evWCzm1gIAgJcisDSXY/4KE24BAGgtBJbmMAzp6F77Y+avAADQaggszXGqQDp7TOrkK4XFmV0NAABei8DSHLW9K+Fxkm+AubUAAODFCCzNURtYfjDK3DoAAPByBJbmOPqJ/Z7AAgBAqyKwNFV1lVSUZ38cebWppQAA4O0ILE31/RdS5VnJL0jqNcDsagAA8GoElqb69sJwUOQIqZOPqaUAAODtmhRYXnnlFcXExCggIECjRo3SP//5zwbb7tixQxaLpc7tiy++cGqXkZGh2NhY+fv7KzY2Vhs3bmxKaW3HMeGW4SAAAFqb24ElPT1dCxcu1GOPPabc3FxNnDhR06ZNU0FBQaPrHThwQEVFRY7bgAH/GUbJyclRYmKikpKStG/fPiUlJWnWrFnatWuX+3vUVoo/td9HjjS3DgAAOgCLYRiGOyuMHTtWV199tVauXOlYNmTIEM2cOVOpqal12u/YsUOTJ0/WyZMn1b1793q3mZiYKJvNpm3btjmWTZ06VT169NC6detcqstms8lqtaq0tFTBwcHu7JL7qquk1B9IVeel+/dKva5s3fcDAMBLufr97VYPS0VFhfbu3auEhASn5QkJCfroo48aXXfkyJGKiIjQDTfcoA8++MDptZycnDrbvOmmmxrdZnl5uWw2m9OtzZw4bA8rvl2lkJi2e18AADootwLLsWPHVF1drbCwMKflYWFhKi4urnediIgIrVq1ShkZGdqwYYMGDRqkG264QdnZ2Y42xcXFbm1TklJTU2W1Wh23qKgod3aleWqHg8KGMuEWAIA20LkpK1ksFqfnhmHUWVZr0KBBGjRokON5fHy8CgsL9fzzz2vSpElN2qYkpaSkKDk52fHcZrO1XWipDSzhXD8IAIC24FYPS69eveTj41On56OkpKROD0ljxo0bp4MHDzqeh4eHu71Nf39/BQcHO93ajCOwXNV27wkAQAfmVmDx8/PTqFGjlJmZ6bQ8MzNT48ePd3k7ubm5ioiIcDyPj4+vs83t27e7tc025Qgsw8ytAwCADsLtIaHk5GQlJSVp9OjRio+P16pVq1RQUKB58+ZJsg/VHD16VK+//rokaenSperXr5+GDh2qiooKvfHGG8rIyFBGRoZjmwsWLNCkSZO0ZMkSzZgxQ5s3b9Z7772nDz/8sIV2swWd/k4qK5EsnaTQWLOrAQCgQ3A7sCQmJur48eN65plnVFRUpLi4OG3dulXR0dGSpKKiIqdzslRUVOjhhx/W0aNH1aVLFw0dOlRvv/22br75Zkeb8ePHa/369Xr88cf1xBNPqH///kpPT9fYsWNbYBdb2HcXeldC+kt+gebWAgBAB+H2eVg8VZudh+XD/0967ylp6O3ST9a03vsAANABtMp5WCAm3AIAYAICi7uYcAsAQJsjsLijqkI6ftj+OHSIubUAANCBEFjcceKwZFRLfkFScKTZ1QAA0GEQWNzx/QH7fa8BUiNn4QUAAC2LwOKOY1/a73sParwdAABoUQQWd9T2sBBYAABoUwQWdxyrHRIisAAA0JYILK6qqZGOHbI/pocFAIA2RWBxVWmBVHVO8vGTukebXQ0AAB0KgcVVtfNXel4p+bh9CSYAANAMBBZXOQ5pHmhuHQAAdEAEFleduHCG214DzK0DAIAOiMDiqhP59vuQK8ytAwCADojA4qrawNIjxtw6AADogAgsrqiqkGzf2B/TwwIAQJsjsLjiVIFk1Ei+XaVuoWZXAwBAh0NgccWJr+z3Pfpx0UMAAExAYHHFydoJt8xfAQDADJwBzRUnCCwAgOaprq5WZWWl2WW0OV9fX/n4+DR7OwQWV9QOCTHhFgDgJsMwVFxcrFOnTpldimm6d++u8PBwWZoxrYLA4oqTR+z3PfqZWQUAoB2qDSuhoaEKDAxs1pd2e2MYhs6ePauSkhJJUkRERJO3RWC5HMOQSi8c0sxFDwEAbqiurnaElZ49e5pdjim6dOkiSSopKVFoaGiTh4eYdHs5505KlWX2x8GR5tYCAGhXauesBAYGmlyJuWr3vzlzeAgsl2M7ar8P7CX5djG3FgBAu9SRhoHq0xL7T2C5nNrhIGsfc+sAAKADI7BcDoEFANCOPPXUUxoxYkSLbOvIkSOyWCzKy8trsM2OHTtksVha/SgoJt1eDoEFANBBRUVFqaioSL169TK7FALLZdUGluAfmFsHAABtzMfHR+Hh4WaXIYkhocujhwUA0Equv/56Pfjgg/r1r3+tkJAQhYeH66mnnnK8XlBQoBkzZqhbt24KDg7WrFmz9N133zlt43e/+53CwsIUFBSkuXPn6vz583XeZ82aNRoyZIgCAgI0ePBgvfLKKy7VV9+Q0NatWzVw4EB16dJFkydP1pEjR5qy624jsFxO7VFCBBYAQCv4y1/+oq5du2rXrl36/e9/r2eeeUaZmZkyDEMzZ87UiRMnlJWVpczMTB0+fFiJiYmOdd988009+eSTeu6557Rnzx5FRETUCSN/+tOf9Nhjj+m5557T/v37tXjxYj3xxBP6y1/+4nathYWFuv3223XzzTcrLy9P99xzjx555JFmfwYuMZrg5ZdfNvr162f4+/sbV199tZGdnd1g24yMDGPKlClGr169jKCgIGPcuHHGO++849RmzZo1hqQ6t3PnzrlcU2lpqSHJKC0tbcou1a+6yjCe6mEYTwYbxqlvWm67AIAO4dy5c8bnn3/e4PfZddddZ0yYMMFp2ZgxY4xFixYZ27dvN3x8fIyCggLHa5999pkhyfj4448NwzCM+Ph4Y968eU7rjx071hg+fLjjeVRUlLF27VqnNs8++6wRHx9/2frz8/MNSUZubq5hGIaRkpJiDBkyxKipqXG0WbRokSHJOHnyZIPbaexzcPX72+0elvT0dC1cuFCPPfaYcnNzNXHiRE2bNk0FBQX1ts/OztaNN96orVu3au/evZo8ebKmT5+u3Nxcp3bBwcEqKipyugUEBLhbXssqOyYZ1ZIsUrcwc2sBAHilYcOGOT2PiIhQSUmJ9u/fr6ioKEVFRTlei42NVffu3bV//35J0v79+xUfH++0/sXPv//+exUWFmru3Lnq1q2b4/bb3/5Whw8fdrvW/fv3a9y4cU7nVbn0/VuL25NuX3zxRc2dO1f33HOPJGnp0qV69913tXLlSqWmptZpv3TpUqfnixcv1ubNm/W3v/1NI0eOdCy3WCweM7HH4fD79vtuoZIP85MBAC3P19fX6bnFYlFNTY0Mw6j3hGsNLa9PTU2NJPuw0NixY51ea8op8g3DcHudluJWD0tFRYX27t2rhIQEp+UJCQn66KOPXNpGTU2NTp8+rZCQEKflZ86cUXR0tPr06aNbb721Tg/MpcrLy2Wz2ZxuLeqrHdLfF9ofD0horCUAAC0uNjZWBQUFKiwsdCz7/PPPVVpaqiFDhkiShgwZop07dzqtd/HzsLAw/eAHP9BXX32lK6+80ukWExPTpJoae7/W5FZgOXbsmKqrqxUW5jw8EhYWpuLiYpe28cILL6isrEyzZs1yLBs8eLDS0tK0ZcsWrVu3TgEBAbr22mt18ODBBreTmpoqq9XquF3cZdZsR/6ftPanUtV5aeA06ZYXWm7bAAC4YMqUKRo2bJh+8Ytf6JNPPtHHH3+s2bNn67rrrtPo0aMlSQsWLNBrr72m1157TV9++aWefPJJffbZZ07beeqpp5Samqply5bpyy+/1Keffqo1a9boxRdfdLumefPm6fDhw0pOTtaBAwe0du1apaWltcTuXlaTjhK6tCvK1e6pdevW6amnnlJ6erpCQ0Mdy8eNG6c777xTw4cP18SJE/Xmm29q4MCBeumllxrcVkpKikpLSx23ixNosxR+LK2dJVWdk668UZr1F6mzf8tsGwAAF1ksFm3atEk9evTQpEmTNGXKFF1xxRVKT093tElMTNRvfvMbLVq0SKNGjdLXX3+t//mf/3Hazj333KM///nPSktL01VXXaXrrrtOaWlpTeph6du3rzIyMvS3v/1Nw4cP1x//+EctXry42fvqCovhxoBURUWFAgMD9dZbb+m2225zLF+wYIHy8vKUlZXV4Lrp6em6++679dZbb+mWW2657Hvde++9+uabb7Rt2zaXarPZbLJarSotLVVwcLBL69TxbZ70l+lSuU264nrpZ+u54CEAoMnOnz+v/Px8xcTEmH8giYka+xxc/f52q4fFz89Po0aNUmZmptPyzMxMjR8/vsH11q1bpzlz5mjt2rUuhRXDMJSXl6eIiAh3ymuek0ek//2JPaxEXyv9dC1hBQAAD+H2kFBycrL+/Oc/67XXXtP+/fv10EMPqaCgQPPmzZNkH6qZPXu2o/26des0e/ZsvfDCCxo3bpyKi4tVXFys0tJSR5unn35a7777rr766ivl5eVp7ty5ysvLc2yz1ZUdl964QyorkcLipJ+tk/y6ts17AwBgksWLFzsd7nzxbdq0aWaX58TtY3UTExN1/PhxPfPMMyoqKlJcXJy2bt2q6OhoSVJRUZHTOVleffVVVVVVaf78+Zo/f75j+V133eWYqHPq1Cndd999Ki4ultVq1ciRI5Wdna1rrrmmmbvngspz0rqfSscPSdYo6Rf/Vwqwtv77AgBgsnnz5jkdBHOxLl08a5TBrTksnqxJc1gMQ8q4R/r3hZDyX9ul0MGtWygAoMNgDotdm89h8TofvWQPK5062+esEFYAAPBIHTewHPqH9N6T9sdTfyf1m2BuPQAAoEEdM7CcKpT+739JRo008k5pzD1mVwQAABrR8QJLdZW04V7p/Ckp8mrp5hckF6/JAAAAzNHxAss/n5cKciS/IOnHr0m+HXcSFAAA7UXHCiwFO6WsJfbHt74ohbh/WmIAAND2Ok5gqTwvbZ5vn7cy7KfSsPqPOwcAAM5WrlypYcOGKTg4WMHBwYqPj3f50jktpeMEluzf208O1y1cmrbE7GoAAGg3+vTpo9/97nfas2eP9uzZox/+8IeaMWNGnStDtya3z3TbLhV/Kv2/ZfbHtzwvdeluajkAALQn06dPd3r+3HPPaeXKldq5c6eGDh3aJjV4f2AxDOnth6WaKmnIdPsNAAAPYBiGzlVWm/LeXXx9ZGnCUbLV1dV66623VFZWpvj4+FaorH7eH1g+3yQV7pQ6d5Gm/d7sagAAcDhXWa3Y37xrynt//sxNCvRzPQZ8+umnio+P1/nz59WtWzdt3LhRsbGxrVihM++ew1JVLmVeOJvttQuk4Ehz6wEAoJ0aNGiQ8vLytHPnTv3P//yP7rrrLn3++edt9v7e3cOy+8/Sqa/tE22vfdDsagAAcNLF10efP3OTae/tDj8/P1155ZWSpNGjR2v37t1atmyZXn311dYorw7vDSyV5/8z0XZyiuTX1dx6AAC4hMVicWtYxpMYhqHy8vI2e7/2+Sm5Ivev0pnvpOA+0vCfm10NAADt1qOPPqpp06YpKipKp0+f1vr167Vjxw698847bVaDdwaW6qr/9K5MWCh19jO1HAAA2rPvvvtOSUlJKioqktVq1bBhw/TOO+/oxhtvbLMavDOwHNgqlRZKgb2kkUlmVwMAQLu2evVqs0vw0qOE9lz4YK+ezcUNAQDwAt4XWI4flr7aIckijZpjcjEAAKAleF9g+Wyj/f7KKVKPaHNrAQAALcL7Asv+v9vvr/qJuXUAAIAW432B5cQhycdPGjTV7EoAAEAL8b7AIkn9fygFWM2uAgAAtBAvDSw3mF0BAABoQd4ZWK64zuwKAABAC/K+wNI1VOo10OwqAABAC/K+wBIxQrJYzK4CAAC0IO8LLGGxZlcAAIBXS01NlcVi0cKFC9vsPb0vsIQSWAAAaC27d+/WqlWrNGzYsDZ9X+8LLD36mV0BAABe6cyZM/rFL36hP/3pT+rRo0ebvrf3Xa05ONLsCgAAcI1hSJVnzXlv30C353zOnz9ft9xyi6ZMmaLf/va3rVRY/ZoUWF555RX94Q9/UFFRkYYOHaqlS5dq4sSJDbbPyspScnKyPvvsM0VGRurXv/615s2b59QmIyNDTzzxhA4fPqz+/fvrueee02233eZ+cZwwDgDQXlSelRab9If2o99Kfl1dbr5+/Xp98skn2r17dysW1TC3h4TS09O1cOFCPfbYY8rNzdXEiRM1bdo0FRQU1Ns+Pz9fN998syZOnKjc3Fw9+uijevDBB5WRkeFok5OTo8TERCUlJWnfvn1KSkrSrFmztGvXLvf3iCOEAABoUYWFhVqwYIHeeOMNBQQEmFKDxTAMw50Vxo4dq6uvvlorV650LBsyZIhmzpyp1NTUOu0XLVqkLVu2aP/+/Y5l8+bN0759+5STkyNJSkxMlM1m07Zt2xxtpk6dqh49emjdunUu1WWz2WS1WlVaWqrg4GB3dgkAgFZx/vx55efnKyYmpv4v+nYyJLRp0ybddttt8vHxcSyrrq6WxWJRp06dVF5e7vTapRr7HFz9/nZrSKiiokJ79+7VI4884rQ8ISFBH330Ub3r5OTkKCEhwWnZTTfdpNWrV6uyslK+vr7KycnRQw89VKfN0qVLG6ylvLxc5eXljuc2m82dXQEAwHwWi1vDMma54YYb9Omnnzotu/vuuzV48GAtWrSo0bDSUtwKLMeOHVN1dbXCwsKcloeFham4uLjedYqLi+ttX1VVpWPHjikiIqLBNg1tU7IfA/7000+7Uz4AAGiCoKAgxcXFOS3r2rWrevbsWWd5a2nSYc2WS7qQDMOos+xy7S9d7u42U1JSVFpa6rgVFha6XD8AAGhf3Oph6dWrl3x8fOr0fJSUlNTpIakVHh5eb/vOnTurZ8+ejbZpaJuS5O/vL39/f3fKBwAALWTHjh1t+n5u9bD4+flp1KhRyszMdFqemZmp8ePH17tOfHx8nfbbt2/X6NGj5evr22ibhrYJAAA6FrfPw5KcnKykpCSNHj1a8fHxWrVqlQoKChznVUlJSdHRo0f1+uuvS7IfEbRixQolJyfr3nvvVU5OjlavXu109M+CBQs0adIkLVmyRDNmzNDmzZv13nvv6cMPP2yh3QQAAO2Z24ElMTFRx48f1zPPPKOioiLFxcVp69atio6OliQVFRU5nZMlJiZGW7du1UMPPaSXX35ZkZGRWr58ue644w5Hm/Hjx2v9+vV6/PHH9cQTT6h///5KT0/X2LFjW2AXAQBAe+f2eVg8FedhAQB4msueh6WDaInzsHjfxQ8BAPAwXtI30GQtsf8EFgAAWkntwSVnz5p0NlsPUbv/tZ9HU3jf1ZoBAPAQPj4+6t69u0pKSiRJgYGBjZ5jzNsYhqGzZ8+qpKRE3bt3b9YZcQksAAC0ovDwcElyhJaOqHv37o7PoakILAAAtCKLxaKIiAiFhoaqsrLS7HLanK+vb4tca4jAAgBAG/Dx8WmTiwR6KybdAgAAj0dgAQAAHo/AAgAAPJ7XzGGpPSmNzWYzuRIAAOCq2u/ty51czmsCy/HjxyVJUVFRJlcCAADcdfz4cVmt1gZf95rAEhISIkkqKChodIcbM2bMGO3evbvJNbA+67M+67M+67O+e0pLS9W3b1/H93hDvCawdOpkn45jtVqbfPFDHx+fZl04kfVZn/VZn/VZn/WbpvZ7vMHXm7V1LzN//nzWZ33WZ33WZ33Wb+P1XWExvOQSkq5enhoAAHgOV7+/vaaHxd/fX08++aT8/f3NLgUAALjI1e9vr+lhAQAA3strelgAAID3IrAAAACPR2BBm3vllVcUExOjgIAAjRo1Sv/85z8dr505c0b333+/+vTpoy5dumjIkCFauXKlidWiVnZ2tqZPn67IyEhZLBZt2rTJ6fU5c+bIYrE43caNG2dOsagjNTVVY8aMUVBQkEJDQzVz5kwdOHDA8XplZaUWLVqkq666Sl27dlVkZKRmz56tb7/91sSqUetyPz9J+u677zRnzhxFRkYqMDBQU6dO1cGDB02quOURWNCm0tPTtXDhQj322GPKzc3VxIkTNW3aNBUUFEiSHnroIb3zzjt64403tH//fj300EN64IEHtHnzZpMrR1lZmYYPH64VK1Y02Gbq1KkqKipy3LZu3dqGFaIxWVlZmj9/vnbu3KnMzExVVVUpISFBZWVlkqSzZ8/qk08+0RNPPKFPPvlEGzZs0Jdffqkf/ehHJlcO6fI/P8MwNHPmTH311VfavHmzcnNzFR0drSlTpjjatHsG0IauueYaY968eU7LBg8ebDzyyCOGYRjG0KFDjWeeecbp9auvvtp4/PHH26xGXJ4kY+PGjU7L7rrrLmPGjBmm1AP3lZSUGJKMrKysBtt8/PHHhiTj66+/bsPK4IpLf34HDhwwJBn//ve/HW2qqqqMkJAQ409/+pNZZbYoeljQZioqKrR3714lJCQ4LU9ISNBHH30kSZowYYK2bNmio0ePyjAMffDBB/ryyy910003mVEy3LRjxw6FhoZq4MCBuvfee1VSUmJ2SWhAaWmpJDV6OvTS0lJZLBZ17969jaqCqy79+ZWXl0uSAgICHG18fHzk5+enDz/8sO0LbAUEFrSZY8eOqbq6WmFhYU7Lw8LCVFxcLElavny5YmNj1adPH/n5+Wnq1Kl65ZVXNGHCBDNKhhumTZum//3f/9X777+vF154Qbt379YPf/hDx3+k8ByGYSg5OVkTJkxQXFxcvW3Onz+vRx55RD//+c85GaeHqe/nN3jwYEVHRyslJUUnT55URUWFfve736m4uFhFRUUmV9wyvOZaQmg/LBaL03PDMBzLli9frp07d2rLli2Kjo5Wdna2fvnLXyoiIkJTpkwxo1y4KDEx0fE4Li5Oo0ePVnR0tN5++23dfvvtJlaGS91///3617/+1eBf3pWVlfrpT3+qmpoavfLKK21cHS6nvp+fr6+vMjIyNHfuXIWEhMjHx0dTpkzRtGnTTKy0ZRFY0GZ69eolHx8fR29KrZKSEoWFhencuXN69NFHtXHjRt1yyy2SpGHDhikvL0/PP/88gaWdiYiIUHR0tFcdpeANHnjgAW3ZskXZ2dnq06dPndcrKys1a9Ys5efn6/3336d3xcM09vMbNWqU8vLyVFpaqoqKCvXu3Vtjx47V6NGjTaq2ZTEkhDbj5+enUaNGKTMz02l5Zmamxo8fr8rKSlVWVta5YqePj49qamraslS0gOPHj6uwsFARERFmlwLZezLvv/9+bdiwQe+//75iYmLqtKkNKwcPHtR7772nnj17mlAp6uPKz6+W1WpV7969dfDgQe3Zs0czZsxow0pbDz0saFPJyclKSkrS6NGjFR8fr1WrVqmgoEDz5s1TcHCwrrvuOv2f//N/1KVLF0VHRysrK0uvv/66XnzxRbNL7/DOnDmjQ4cOOZ7n5+crLy9PISEhCgkJ0VNPPaU77rhDEREROnLkiB599FH16tVLt912m4lVo9b8+fO1du1abd68WUFBQY6eTqvVqi5duqiqqko//vGP9cknn+jvf/+7qqurHW1CQkLk5+dnZvkd3uV+fpL01ltvqXfv3urbt68+/fRTLViwQDNnzqxzoEO7ZeYhSuiYXn75ZSM6Otrw8/Mzrr76aqfDKouKiow5c+YYkZGRRkBAgDFo0CDjhRdeMGpqakysGIZhGB988IEhqc7trrvuMs6ePWskJCQYvXv3Nnx9fY2+ffsad911l1FQUGB22bigvp+dJGPNmjWGYRhGfn5+g20++OADU2vH5X9+hmEYy5YtM/r06eP4N/j4448b5eXl5hXdwrj4IQAA8HjMYQEAAB6PwAIAADwegQUAAHg8AgsAAPB4BBYAAODxCCwAAMDjEVgAAIDHI7AAAACPR2ABAAAej8ACAAA8HoEFAAB4PAILAADweAQWAADg8QgsAADA4xFYAACAxyOwAAAAj0dgAQAAHo/AAgAAPB6BBQAAeDwCCwAA8HgEFgAA4PEILAAAwOMRWAAAgMcjsAAAAI/XLgLLnDlzNHPmTLPLAAAAJmkXgQUAAHRs7S6wvPPOO5owYYK6d++unj176tZbb9Xhw4cdrx85ckQWi0UbNmzQ5MmTFRgYqOHDhysnJ8fEqgEAQHO0u8BSVlam5ORk7d69W//4xz/UqVMn3XbbbaqpqXFq99hjj+nhhx9WXl6eBg4cqJ/97GeqqqoyqWoAANAcnc0uwF133HGH0/PVq1crNDRUn3/+ueLi4hzLH374Yd1yyy2SpKefflpDhw7VoUOHNHjw4DatFwAANF+762E5fPiwfv7zn+uKK65QcHCwYmJiJEkFBQVO7YYNG+Z4HBERIUkqKSlpu0IBAECLaXc9LNOnT1dUVJT+9Kc/KTIyUjU1NYqLi1NFRYVTO19fX8dji8UiSXWGjQAAQPvQrgLL8ePHtX//fr366quaOHGiJOnDDz80uSoAANDa2lVg6dGjh3r27KlVq1YpIiJCBQUFeuSRR8wuCwAAtLJ2MYelpqZGnTt3VqdOnbR+/Xrt3btXcXFxeuihh/SHP/zB7PIAAEArsxiGYZhdxOVMnTpVV155pVasWGF2KQAAwAQe3cNy8uRJvf3229qxY4emTJlidjkAAMAkHj2H5b/+67+0e/du/epXv9KMGTPMLgcAAJikXQwJAQCAjs2jh4QAAAAkAgsAAGgHPCawpKamasyYMQoKClJoaKhmzpypAwcOOLUxDENPPfWUIiMj1aVLF11//fX67LPPHK+fOHFCDzzwgAYNGqTAwED17dtXDz74oEpLS+t9z/Lyco0YMUIWi0V5eXmtuXsAAKAZPCawZGVlaf78+dq5c6cyMzNVVVWlhIQElZWVOdr8/ve/14svvqgVK1Zo9+7dCg8P14033qjTp09Lkr799lt9++23ev755/Xpp58qLS1N77zzjubOnVvve/76179WZGRkm+wfAABoOo+ddPv9998rNDRUWVlZmjRpkgzDUGRkpBYuXKhFixZJsveQhIWFacmSJfrv//7verfz1ltv6c4771RZWZk6d/7PQVHbtm1TcnKyMjIyNHToUOXm5mrEiBFtsWsAAMBNHtPDcqnaYZyQkBBJUn5+voqLi5WQkOBo4+/vr+uuu04fffRRo9sJDg52Civfffed7r33Xv31r39VYGBgK+0BAABoKR4ZWAzDUHJysiZMmKC4uDhJUnFxsSQpLCzMqW1YWJjjtUsdP35czz77rFPvi2EYmjNnjubNm6fRo0e30h4AAICW5JEnjrv//vv1r3/9q94rMVssFqfnhmHUWSZJNptNt9xyi2JjY/Xkk086lr/00kuy2WxKSUlp+cIBAECr8LgelgceeEBbtmzRBx98oD59+jiWh4eHS1Kd3pSSkpI6vS6nT5/W1KlT1a1bN23cuFG+vr6O195//33t3LlT/v7+6ty5s6688kpJ0ujRo3XXXXe11m4BAIBm8JjAYhiG7r//fm3YsEHvv/++YmJinF6PiYlReHi4MjMzHcsqKiqUlZWl8ePHO5bZbDYlJCTIz89PW7ZsUUBAgNN2li9frn379ikvL095eXnaunWrJCk9PV3PPfdcK+4hAABoKo8ZEpo/f77Wrl2rzZs3KygoyNGTYrVa1aVLF1ksFi1cuFCLFy/WgAEDNGDAAC1evFiBgYH6+c9/Lsnes5KQkKCzZ8/qjTfekM1mk81mkyT17t1bPj4+6tu3r9P7duvWTZLUv39/px4dAADgOTwmsKxcuVKSdP311zstX7NmjebMmSPJft6Uc+fO6Ze//KVOnjypsWPHavv27QoKCpIk7d27V7t27ZIkx1BPrfz8fPXr169V9wEAALQOjz0PCwAAQC2PmcMCAADQEAILAADweAQWAADg8QgsAADA4xFYAACAxyOwAAAAj0dgAQAAHo/AAsA0O3bskMVi0alTp8wuBYCH48RxANrM9ddfrxEjRmjp0qWS7NcDO3HihMLCwuq96joA1PKYU/MD6Hj8/PwcV2IHgMYwJASgTcyZM0dZWVlatmyZLBaLLBaL0tLSnIaE0tLS1L17d/3973/XoEGDFBgYqB//+McqKyvTX/7yF/Xr1089evTQAw88oOrqase2Kyoq9Otf/1o/+MEP1LVrV40dO1Y7duwwZ0cBtAp6WAC0iWXLlunLL79UXFycnnnmGUnSZ599Vqfd2bNntXz5cq1fv16nT5/W7bffrttvv13du3fX1q1b9dVXX+mOO+7QhAkTlJiYKEm6++67deTIEa1fv16RkZHauHGjpk6dqk8//VQDBgxo0/0E0DoILADahNVqlZ+fnwIDAx3DQF988UWddpWVlVq5cqX69+8vSfrxj3+sv/71r/ruu+/UrVs3xcbGavLkyfrggw+UmJiow4cPa926dfrmm28UGRkpSXr44Yf1zjvvaM2aNVq8eHHb7SSAVkNgAeBRAgMDHWFFksLCwtSvXz9169bNaVlJSYkk6ZNPPpFhGBo4cKDTdsrLy9WzZ8+2KRpAqyOwAPAovr6+Ts8tFku9y2pqaiRJNTU18vHx0d69e+Xj4+PU7uKQA6B9I7AAaDN+fn5Ok2VbwsiRI1VdXa2SkhJNnDixRbcNwHNwlBCANtOvXz/t2rVLR44c0bFjxxy9JM0xcOBA/eIXv9Ds2bO1YcMG5efna/fu3VqyZIm2bt3aAlUD8AQEFgBt5uGHH5aPj49iY2PVu3dvFRQUtMh216xZo9mzZ+tXv/qVBg0apB/96EfatWuXoqKiWmT7AMzHmW4BAIDHo4cFAAB4PAILAADweAQWAADg8QgsAADA4xFYAACAxyOwAAAAj0dgAQAAHo/AAgAAPB6BBQAAeDwCCwAA8HgEFgAA4PEILAAAwOP9/773BQEPKCkrAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "case1_example3 = case1(\"case1_example3\")\n", "case1_example3.create_model()" @@ -950,7 +84,7 @@ }, { "cell_type": "markdown", - "id": "67bf3197-b08b-43b2-977c-c49b16b4741d", + "id": "8", "metadata": {}, "source": [ "### Example 4: boundary levels on target, initial state above target" @@ -958,295 +92,10 @@ }, { "cell_type": "code", - "execution_count": 21, - "id": "3fbb8789-ac5e-492a-be94-add01dcf779a", + "execution_count": null, + "id": "9", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:003101249.98875010.0000000.000000e+003.209287e-07-0.0007230.0005790.0013020.00.0-9.478442e-07-1.636535e-03
12024-01-01 00:00:004100000.00000010.0000003.209287e-071.666667e-01-0.1669770.0005790.0011570.00.0-2.679622e-04-3.758205e-01
22024-01-01 00:01:003101249.9453859.9999980.000000e+001.856004e-06-0.0007250.0005790.0013020.00.01.486129e-072.568361e-04
32024-01-01 00:01:00499989.9813779.9994991.856004e-061.666667e-01-0.1672080.0005790.0011570.00.0-3.493134e-05-5.841113e-02
42024-01-01 00:02:003101249.9018629.9999960.000000e+004.820334e-06-0.0007280.0005790.0013020.00.02.231118e-073.856115e-04
..........................................
892752024-01-31 23:57:004999.9898400.9999901.000000e-029.348269e-03-0.0000080.0005790.0001160.00.01.123059e-031.121133e-01
892762024-01-31 23:58:00372849.1470478.6340890.000000e+001.000000e-02-0.0105260.0005790.0011040.00.0-8.461456e-11-1.462140e-07
892772024-01-31 23:58:004999.9893380.9999901.000000e-028.271165e-030.0008540.0005790.0001160.00.01.338075e-031.477566e-01
892782024-01-31 23:59:00372848.5155028.6340560.000000e+001.000000e-02-0.0105260.0005790.0011040.00.0-7.554613e-11-1.305437e-07
892792024-01-31 23:59:0041000.0405621.0000161.000000e-021.033537e-02-0.0006860.0005790.0001160.00.08.132637e-047.995064e-02
\n", - "

89280 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " time node_id storage level inflow_rate \\\n", - "0 2024-01-01 00:00:00 3 101249.988750 10.000000 0.000000e+00 \n", - "1 2024-01-01 00:00:00 4 100000.000000 10.000000 3.209287e-07 \n", - "2 2024-01-01 00:01:00 3 101249.945385 9.999998 0.000000e+00 \n", - "3 2024-01-01 00:01:00 4 99989.981377 9.999499 1.856004e-06 \n", - "4 2024-01-01 00:02:00 3 101249.901862 9.999996 0.000000e+00 \n", - "... ... ... ... ... ... \n", - "89275 2024-01-31 23:57:00 4 999.989840 0.999990 1.000000e-02 \n", - "89276 2024-01-31 23:58:00 3 72849.147047 8.634089 0.000000e+00 \n", - "89277 2024-01-31 23:58:00 4 999.989338 0.999990 1.000000e-02 \n", - "89278 2024-01-31 23:59:00 3 72848.515502 8.634056 0.000000e+00 \n", - "89279 2024-01-31 23:59:00 4 1000.040562 1.000016 1.000000e-02 \n", - "\n", - " outflow_rate storage_rate precipitation evaporation drainage \\\n", - "0 3.209287e-07 -0.000723 0.000579 0.001302 0.0 \n", - "1 1.666667e-01 -0.166977 0.000579 0.001157 0.0 \n", - "2 1.856004e-06 -0.000725 0.000579 0.001302 0.0 \n", - "3 1.666667e-01 -0.167208 0.000579 0.001157 0.0 \n", - "4 4.820334e-06 -0.000728 0.000579 0.001302 0.0 \n", - "... ... ... ... ... ... \n", - "89275 9.348269e-03 -0.000008 0.000579 0.000116 0.0 \n", - "89276 1.000000e-02 -0.010526 0.000579 0.001104 0.0 \n", - "89277 8.271165e-03 0.000854 0.000579 0.000116 0.0 \n", - "89278 1.000000e-02 -0.010526 0.000579 0.001104 0.0 \n", - "89279 1.033537e-02 -0.000686 0.000579 0.000116 0.0 \n", - "\n", - " infiltration balance_error relative_error \n", - "0 0.0 -9.478442e-07 -1.636535e-03 \n", - "1 0.0 -2.679622e-04 -3.758205e-01 \n", - "2 0.0 1.486129e-07 2.568361e-04 \n", - "3 0.0 -3.493134e-05 -5.841113e-02 \n", - "4 0.0 2.231118e-07 3.856115e-04 \n", - "... ... ... ... \n", - "89275 0.0 1.123059e-03 1.121133e-01 \n", - "89276 0.0 -8.461456e-11 -1.462140e-07 \n", - "89277 0.0 1.338075e-03 1.477566e-01 \n", - "89278 0.0 -7.554613e-11 -1.305437e-07 \n", - "89279 0.0 8.132637e-04 7.995064e-02 \n", - "\n", - "[89280 rows x 13 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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X6Z9ZSZ5mZqaPnPfoobGHXOSFBEREVWJubk5zp8/j44dOwJ4Mqu95PeOHTsiNja21sPpoUOHEBcXhzfffLPc9RYWFhgyZAjWrFmDn3/+GVu3bsWjR4/g5eWF27dv4+rVq5U+lq+vLxQKBVJTU+Hu7q7y5eDgAODJVdfic1KV7YYOHYqrV69i586dZY4rhEB6ejosLCzQqFEj/P777yrrT5w4gZYtW1b6fZRXY0VatWpV7vFatGhRrVdPAV5BJSIioufg7OyMw4cPw9raGtnZ2fJyExMTREdHq1y1qwn5+fm4e/cuFAoF7t27h71792LBggXo27cvRowYUab9t99+C0dHR/j4+EBHRwf//e9/4eDgACsrKwQEBKBr165488038c0338Dd3R1XrlyBJEkICgoq9/gtWrTAsGHDMGLECCxZsgS+vr548OABDh06hNatW6NPnz5wdXVFVlYWDh48CG9vb5iYmFRqu8GDB2P79u14++23MWPGDPTs2RN2dnaIi4vDt99+i/HjxyMkJARTpkzBrFmz0KxZM/j4+CA8PByxsbGIjIys9Hksr0YTE5Ny23766ado164d5s6diyFDhuCPP/7A999/j+XLl1f6eJX21BGqREREpJWqY5LUsWPHBIAyX7///ns1VlpWaGiofCw9PT1hZ2cnevToIdauXSsUCoXcDiUmSa1evVr4+PgIU1NTYWFhIV599VVx7tw5ue3Dhw/FyJEjhY2NjTAyMhIvv/yyiIqKEkJUPJGooKBAzJw5U7i6ugp9fX3h4OAg3njjDXHhwgW5zdixY4WNjY0AIGbNmlXp7RQKhVixYoVo166dMDExERYWFqJt27Zi2bJlIicnR24zZ84c0bhxY6Gvry+8vb1VnqRQPEnq/Pnz8rK0tDQBQBw+fPipNVY02WnLli2iVatWQl9fXzg7O4vFixerrK+uSVKSELX40DIiIiLSCHl5eUhKSoKbmxuMjIyeax9Tp07FokWLEBISgq+//hqffvopdu7cic8++wxfffVVNVdM2qCy/Y63+ImIiOi59O/fH97e3nj77bchSRK2b9+OjRs3wsXFRd2lUR3HK6hERET1UHVcQSWqqsr2O87iJyIiIiKNwoBKRERERBqFAZWIiIiINAoDKhERERFpFAZUIiIiItIoDKhEREREpFEYUImIiIhIozCgEhEREVWBJEnY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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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u7i4WEOGDFHXrl313nvv6cILL7SwMhxqypQp+vrrr1v9F3F9fb0uu+wyud1uvfjiiyGuDkfT0t8vISFBb731lq699lplZ2fLbrdr1KhRGjt2rIWVBhbhA23WsWNH2e12by+HR3l5ufLy8nTgwAHdc889mj9/vsaNGydJGjBggFavXq2nnnqK8BGBCgoK1LVr16iabR8Npk6dqgULFmjZsmXq3LnzYe/X19frkksu0ZYtW7R48WJ6PcLMkf5+gwcP1urVq1VRUaG6ujp16tRJw4YN05AhQyyqNrAYdkGbJSYmavDgwVq0aJHP64sWLdLpp5+u+vp61dfXH3ZnQ7vdLrfbHcpSESB79uzRtm3bVFBQYHUpkNnLOGXKFL399ttavHixunfvftg+nuDx3Xff6cMPP1ROTo4FlaIl/vz9PDIzM9WpUyd99913WrFihcaPHx/CSoOHng+0y/Tp03XVVVdpyJAhOu200/Tyyy+rtLRUN9xwgxwOh0aMGKH//M//VEpKirp27aqlS5fqT3/6k5555hmrS4fMdVg2bdrkfb5lyxatXr1a2dnZys7O1oMPPqiLLrpIBQUF2rp1q+655x517NhRF1xwgYVVw2Py5Ml67bXX9O677yojI8PbC5mZmamUlBQ1NDTo4osv1qpVq/T3v/9djY2N3n2ys7OVmJhoZfkx72h/P0l688031alTJ3Xp0kVr1qzRLbfcogkTJhw20T9iWXmpDSLbCy+8YHTt2tVITEw0Tj75ZJ/L/Hbs2GFMmjTJKCwsNJKTk40+ffoYTz/9tOF2uy2sGB4ff/yxIemwx8SJE42amhpj9OjRRqdOnYyEhASjS5cuxsSJE43S0lKry0aTlv52kow5c+YYhmEYW7ZsaXWfjz/+2NLacfS/n2EYxnPPPWd07tzZ+//B3/72t4bL5bKu6ADjxnIAACCkmPMBAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCivABAABCKuThY9KkSZowYUKoTwsAAMIEPR8AACCkLA0fCxcu1PDhw5WVlaWcnBz94he/0ObN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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "case1_example1 = case1(\"case1_example4\")\n", "case1_example1.create_model()" @@ -1254,7 +103,7 @@ }, { "cell_type": "markdown", - "id": "e907351e-2d44-4031-8201-5effcb6a232b", + "id": "10", "metadata": {}, "source": [ "# Case 2" @@ -1262,7 +111,7 @@ }, { "cell_type": "markdown", - "id": "64862d6c-7da0-41a4-9285-105749b91ef6", + "id": "11", "metadata": {}, "source": [ "### Example 1: boundary and basin levels on target " @@ -1270,297 +119,10 @@ }, { "cell_type": "code", - "execution_count": 23, - "id": "029f65b0-0158-46b1-be23-79564bc49f20", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0031250.0087502.0000000.0055500.004450-0.0000110.00.0001450.00.00.0009660.190740
12024-01-01 00:00:0041000.0090001.0000000.0044500.005304-0.0005800.00.0001160.00.0-0.000390-0.083897
22024-01-01 00:01:0031250.0080692.0000000.0047380.005262-0.0003670.00.0001450.00.0-0.000302-0.061862
32024-01-01 00:01:004999.9741960.9999830.0052620.0038040.0009480.00.0001160.00.00.0003940.095823
42024-01-01 00:02:0031249.9860761.9999910.0055170.0044830.0010210.00.0001450.00.0-0.000131-0.028820
..........................................
28752024-01-01 23:57:0041000.0077360.9999990.0056270.005870-0.0001500.00.0001160.00.0-0.000209-0.036459
28762024-01-01 23:58:0031249.9969351.9999950.0050940.0049060.0002990.00.0001450.00.0-0.000256-0.052041
28772024-01-01 23:58:004999.9987530.9999950.0049060.004242-0.0000020.00.0001160.00.00.0005500.118730
28782024-01-01 23:59:0031250.0148712.0000020.0057830.0042170.0000060.00.0001450.00.00.0014160.279322
28792024-01-01 23:59:004999.9986590.9999950.0042170.004927-0.0004760.00.0001160.00.0-0.000350-0.079689
\n", - "

2880 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " time node_id storage level inflow_rate \\\n", - "0 2024-01-01 00:00:00 3 1250.008750 2.000000 0.005550 \n", - "1 2024-01-01 00:00:00 4 1000.009000 1.000000 0.004450 \n", - "2 2024-01-01 00:01:00 3 1250.008069 2.000000 0.004738 \n", - "3 2024-01-01 00:01:00 4 999.974196 0.999983 0.005262 \n", - "4 2024-01-01 00:02:00 3 1249.986076 1.999991 0.005517 \n", - "... ... ... ... ... ... \n", - "2875 2024-01-01 23:57:00 4 1000.007736 0.999999 0.005627 \n", - "2876 2024-01-01 23:58:00 3 1249.996935 1.999995 0.005094 \n", - "2877 2024-01-01 23:58:00 4 999.998753 0.999995 0.004906 \n", - "2878 2024-01-01 23:59:00 3 1250.014871 2.000002 0.005783 \n", - "2879 2024-01-01 23:59:00 4 999.998659 0.999995 0.004217 \n", - "\n", - " outflow_rate storage_rate precipitation evaporation drainage \\\n", - "0 0.004450 -0.000011 0.0 0.000145 0.0 \n", - "1 0.005304 -0.000580 0.0 0.000116 0.0 \n", - "2 0.005262 -0.000367 0.0 0.000145 0.0 \n", - "3 0.003804 0.000948 0.0 0.000116 0.0 \n", - "4 0.004483 0.001021 0.0 0.000145 0.0 \n", - "... ... ... ... ... ... \n", - "2875 0.005870 -0.000150 0.0 0.000116 0.0 \n", - "2876 0.004906 0.000299 0.0 0.000145 0.0 \n", - "2877 0.004242 -0.000002 0.0 0.000116 0.0 \n", - "2878 0.004217 0.000006 0.0 0.000145 0.0 \n", - "2879 0.004927 -0.000476 0.0 0.000116 0.0 \n", - "\n", - " infiltration balance_error relative_error \n", - "0 0.0 0.000966 0.190740 \n", - "1 0.0 -0.000390 -0.083897 \n", - "2 0.0 -0.000302 -0.061862 \n", - "3 0.0 0.000394 0.095823 \n", - "4 0.0 -0.000131 -0.028820 \n", - "... ... ... ... \n", - "2875 0.0 -0.000209 -0.036459 \n", - "2876 0.0 -0.000256 -0.052041 \n", - "2877 0.0 0.000550 0.118730 \n", - "2878 0.0 0.001416 0.279322 \n", - "2879 0.0 -0.000350 -0.079689 \n", - "\n", - "[2880 rows x 13 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHRCAYAAAC4mLk+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAzh0lEQVR4nO3deXRV1f3//9c1IwkZDJgJAgRRAZFBokALAhaC0cVQ7BInBgutKIOYWiXSymAFZClFRED5UFCLQpXhQ5XyIa2QaBFKMKko1AGCoZIQQcklQS6B7N8f/LhfrxCSG3Lv5obnY62ses7ZZ5/9TlLuK/tMDmOMEQAAgCVX2B4AAAC4vBFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFgVbHsAtVFVVaWDBw8qKipKDofD9nAAAEAtGGN07NgxJScn64orqp//CIgwcvDgQaWkpNgeBgAAqIMDBw6oefPm1W4PiDASFRUl6Uwx0dHRlkcDAABqw+l0KiUlxf05Xp2ACCNnT81ER0cTRgAACDA1XWLBBawAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKq/CyKxZs3TTTTcpKipK8fHxGjJkiD777LMa98vJyVHXrl0VHh6u1q1ba/HixXUeMAAAaFi8CiM5OTkaN26ctm3bpuzsbJ06dUrp6emqqKiodp/CwkLdfvvt6tWrl/Lz8/Xkk09q4sSJWr169UUPHgAABD6HMcbUdedvvvlG8fHxysnJ0S233HLeNk888YTWr1+vPXv2uNeNHTtW//73v/Xhhx/W6jhOp1MxMTEqKyvj3TQAAASI2n5+X9SL8srKyiRJcXFx1bb58MMPlZ6e7rFuwIABWrp0qSorKxUSElLr4y1470uFRzau22ABAP5V9791A0cNL4C73J2oKK9VuzqHEWOMMjMz1bNnT3Xo0KHadiUlJUpISPBYl5CQoFOnTunw4cNKSko6Zx+XyyWXy+VedjqdkqTFOXt1RVhEXYcMAAD8qMp1vFbt6hxGxo8fr48//lgffPBBjW1//Orgs2eGqnul8KxZszR9+vRz1t9zc4rCIpgZAYBAUdt5g0t5DqW6Gn445tpOAl1uEymu4+WaU4t2dQojEyZM0Pr165Wbm6vmzZtfsG1iYqJKSko81pWWlio4OFhNmjQ57z5ZWVnKzMx0LzudTqWkpGjKHe25ZgQAgADhdDrrP4wYYzRhwgStXbtWW7ZsUWpqao379OjRQ3/961891m3atElpaWnVXi8SFhamsLAwb4YGAAAClFe39o4bN05//vOf9cYbbygqKkolJSUqKSnR999/726TlZWlESNGuJfHjh2rr776SpmZmdqzZ4/+9Kc/aenSpXrsscfqrwoAABCwvAojixYtUllZmfr06aOkpCT316pVq9xtiouLVVRU5F5OTU3Vhg0btGXLFnXu3FlPP/205s+frzvvvLP+qgAAAAHrop4z4i88ZwQAgMBT289v3k0DAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsMrrMJKbm6uBAwcqOTlZDodD69atq3GfFStWqFOnToqIiFBSUpIeeOABHTlypC7jBQAADYzXYaSiokKdOnXSggULatX+gw8+0IgRIzR69Gh9+umneuutt7Rjxw6NGTPG68ECAICGJ9jbHTIyMpSRkVHr9tu2bVOrVq00ceJESVJqaqoefPBBzZkzx9tDAwCABsjn14z85Cc/0X//+19t2LBBxhgdOnRIb7/9tu644w5fHxoAAAQAv4SRFStWaNiwYQoNDVViYqJiY2P14osvVruPy+WS0+n0+AIAAA2Tz8PI7t27NXHiRD311FPauXOnNm7cqMLCQo0dO7bafWbNmqWYmBj3V0pKiq+HCQAALHEYY0ydd3Y4tHbtWg0ZMqTaNsOHD9eJEyf01ltvudd98MEH6tWrlw4ePKikpKRz9nG5XHK5XO5lp9OplJQUlZWVKTo6uq7DBQAAfuR0OhUTE1Pj57fXF7B66/jx4woO9jxMUFCQJKm6HBQWFqawsDBfDw0AAFwCvD5NU15eroKCAhUUFEiSCgsLVVBQoKKiIklSVlaWRowY4W4/cOBArVmzRosWLdK+ffv0z3/+UxMnTtTNN9+s5OTk+qkCAAAELK9nRvLy8tS3b1/3cmZmpiRp5MiRWr58uYqLi93BRJJGjRqlY8eOacGCBfrNb36j2NhY3XrrrXr22WfrYfgAACDQXdQ1I/5S23NOAADg0lHbz2/eTQMAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACs8jqM5ObmauDAgUpOTpbD4dC6detq3MflcmnKlClq2bKlwsLCdPXVV+tPf/pTXcYLAAAamGBvd6ioqFCnTp30wAMP6M4776zVPnfddZcOHTqkpUuXqk2bNiotLdWpU6e8HiwAAGh4vA4jGRkZysjIqHX7jRs3KicnR/v27VNcXJwkqVWrVt4eFgAANFBehxFvrV+/XmlpaZozZ45ef/11RUZGatCgQXr66afVqFGj8+7jcrnkcrncy06n09fDBACgzk6fPq3Kykrbw/C7kJAQBQUFXXQ/Pg8j+/bt0wcffKDw8HCtXbtWhw8f1sMPP6xvv/222utGZs2apenTp/t6aAAAXBRjjEpKSnT06FHbQ7EmNjZWiYmJcjgcde7DYYwxdd7Z4dDatWs1ZMiQatukp6fr/fffV0lJiWJiYiRJa9as0S9+8QtVVFScd3bkfDMjKSkpKisrU3R0dF2HCwBAvSouLtbRo0cVHx+viIiIi/pADjTGGB0/flylpaWKjY1VUlLSOW2cTqdiYmJq/Pz2+cxIUlKSmjVr5g4iktSuXTsZY/Tf//5X11xzzTn7hIWFKSwszNdDAwCgzk6fPu0OIk2aNLE9HCvOTiiUlpYqPj6+zqdsfP6ckZ/+9Kc6ePCgysvL3es+//xzXXHFFWrevLmvDw8AgE+cvUYkIiLC8kjsOlv/xVwz43UYKS8vV0FBgQoKCiRJhYWFKigoUFFRkSQpKytLI0aMcLe/99571aRJEz3wwAPavXu3cnNz9dvf/la//OUvq72AFQCAQHE5nZo5n/qo3+swkpeXpy5duqhLly6SpMzMTHXp0kVPPfWUpDPnz84GE0lq3LixsrOzdfToUaWlpem+++7TwIEDNX/+/IsePAAACHxeXzPSp08fXeia1+XLl5+zrm3btsrOzvb2UAAA4AemTZumdevWuc9OXIz9+/crNTVV+fn56ty583nbbNmyRX379tV3332n2NjYiz5mdXx+ASsAALj0pKSkqLi4WE2bNrU9FMIIAACXo6CgICUmJtoehiTe2gsAgE/06dNHEydO1OOPP664uDglJiZq2rRp7u1FRUUaPHiwGjdurOjoaPd73H5o9uzZSkhIUFRUlEaPHq0TJ06cc5xly5apXbt2Cg8PV9u2bbVw4cJajW///v1yOBwep3w2bNiga6+9Vo0aNVLfvn21f//+upTuNcIIAAA+8uqrryoyMlLbt2/XnDlzNGPGDGVnZ8sYoyFDhujbb79VTk6OsrOztXfvXg0bNsy971/+8hdNnTpVzzzzjPLy8pSUlHRO0FiyZImmTJmiZ555Rnv27NHMmTP1+9//Xq+++qrXYz1w4ICGDh2q22+/XQUFBRozZowmT5580d+D2uA0DQAAPtKxY0dNnTpVknTNNddowYIF+sc//iFJ+vjjj1VYWKiUlBRJ0uuvv67rr79eO3bs0E033aR58+bpl7/8pcaMGSNJ+sMf/qC///3vHrMjTz/9tJ5//nkNHTpUkpSamqrdu3fr5Zdf1siRI70a66JFi9S6dWv98Y9/lMPh0HXXXaddu3bp2WefvejvQ02YGQEAwEc6duzosZyUlKTS0lLt2bNHKSkp7iAiSe3bt1dsbKz27NkjSdqzZ4969Ojhsf8Pl7/55hsdOHBAo0ePVuPGjd1ff/jDH7R3716vx7pnzx51797d47khPz6+rzAzAgCAj4SEhHgsOxwOVVVVyRhz3oeFVbf+fKqqqiSdOVXTrVs3j211eSz7Rbyq7qIxMwIAgJ+1b99eRUVFOnDggHvd7t27VVZWpnbt2kk68x63bdu2eez3w+WEhAQ1a9ZM+/btU5s2bTy+UlNT6zSmCx3Pl5gZAQDAz/r166eOHTvqvvvu07x583Tq1Ck9/PDD6t27t9LS0iRJjzzyiEaOHKm0tDT17NlTK1as0KeffqrWrVu7+5k2bZomTpyo6OhoZWRkyOVyKS8vT999950yMzO9GtPYsWP1/PPPKzMzUw8++KB27tx53geZ+gIzIwAA+JnD4dC6det05ZVX6pZbblG/fv3UunVrrVq1yt1m2LBheuqpp/TEE0+oa9eu+uqrr/TQQw959DNmzBj9z//8j5YvX64bbrhBvXv31vLly+s0M9KiRQutXr1af/3rX9WpUyctXrxYM2fOvOhaa8NhbJ4kqiWn06mYmBiVlZUpOjra9nAAANCJEydUWFio1NRUhYeH2x6ONRf6PtT285uZEQAAYBVhBACABmjmzJket/z+8CsjI8P28DxwASsAAA3Q2LFjddddd513W6NGjfw8mgsjjAAA0ADFxcUpLi7O9jBqhdM0AADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAwGVs0aJF6tixo6KjoxUdHa0ePXrob3/7m1/HQBgBAOAy1rx5c82ePVt5eXnKy8vTrbfeqsGDB+vTTz/12xh46BkAAJexgQMHeiw/88wzWrRokbZt26brr7/eL2MgjAAA4APGGH1fedrKsRuFBMnhcHi93+nTp/XWW2+poqJCPXr08MHIzo8wAgCAD3xfeVrtn/o/K8fePWOAIkJr/xG/a9cu9ejRQydOnFDjxo21du1atW/f3ocj9MQ1IwAAXOauu+46FRQUaNu2bXrooYc0cuRI7d6922/HZ2YEAAAfaBQSpN0zBlg7tjdCQ0PVpk0bSVJaWpp27NihF154QS+//LIvhncOwggAAD7gcDi8OlVyKTHGyOVy+e14gfldAgAA9eLJJ59URkaGUlJSdOzYMa1cuVJbtmzRxo0b/TYGwggAAJexQ4cOafjw4SouLlZMTIw6duyojRs3qn///n4bA2EEAIDL2NKlS20PgbtpAACAXYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAuM2aNUsOh0OTJk3y2zEJIwAAQJK0Y8cOvfLKK+rYsaNfj0sYAQAAKi8v13333aclS5boyiuv9OuxeWsvAAC+YIxUedzOsUMiJIfDq13GjRunO+64Q/369dMf/vAHHw3s/AgjAAD4QuVxaWaynWM/eVAKjax185UrV+qjjz7Sjh07fDio6hFGAAC4jB04cECPPPKINm3apPDwcCtjIIwAAOALIRFnZihsHbuWdu7cqdLSUnXt2tW97vTp08rNzdWCBQvkcrkUFBTki1G6EUYAAPAFh8OrUyW2/OxnP9OuXbs81j3wwANq27atnnjiCZ8HEYkwAgDAZS0qKkodOnTwWBcZGakmTZqcs95XuLUXAABYxcwIAADwsGXLFr8ej5kRAABgFWEEAABYRRgBAABWeR1GcnNzNXDgQCUnJ8vhcGjdunW13vef//yngoOD1blzZ28PCwAAGiivw0hFRYU6deqkBQsWeLVfWVmZRowYoZ/97GfeHhIAgEuWMcb2EKyqj/q9vpsmIyNDGRkZXh/owQcf1L333qugoCCvZlMAALgUhYSESJKOHz+uRo0aWR6NPcePn3kZ4NnvR1345dbeZcuWae/evfrzn/9cqzcBulwuuVwu97LT6fTl8AAA8FpQUJBiY2NVWloqSYqIiJDDyzflBjJjjI4fP67S0lLFxsZe1JNafR5GvvjiC02ePFnvv/++goNrd7hZs2Zp+vTpPh4ZAAAXJzExUZLcgeRyFBsb6/4+1JVPw8jp06d17733avr06br22mtrvV9WVpYyMzPdy06nUykpKb4YIgAAdeZwOJSUlKT4+HhVVlbaHo7fhYSE1Mu7a3waRo4dO6a8vDzl5+dr/PjxkqSqqioZYxQcHKxNmzbp1ltvPWe/sLAwhYWF+XJoAADUm6CgIL+8UK6h8mkYiY6OPudNgAsXLtR7772nt99+W6mpqb48PAAACABeh5Hy8nJ9+eWX7uXCwkIVFBQoLi5OLVq0UFZWlr7++mu99tpruuKKK8554198fLzCw8P99iZAAABwafM6jOTl5alv377u5bPXdowcOVLLly9XcXGxioqK6m+EAACgQXOYAHhai9PpVExMjMrKyhQdHW17OAAAoBZq+/nNu2kAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVnkdRnJzczVw4EAlJyfL4XBo3bp1F2y/Zs0a9e/fX1dddZWio6PVo0cP/d///V9dxwsAABoYr8NIRUWFOnXqpAULFtSqfW5urvr3768NGzZo586d6tu3rwYOHKj8/HyvBwsAABoehzHG1Hlnh0Nr167VkCFDvNrv+uuv17Bhw/TUU0/Vqr3T6VRMTIzKysoUHR1dh5ECAAB/q+3nd7AfxyRJqqqq0rFjxxQXF1dtG5fLJZfL5V52Op3+GBoAALDA7xewPv/886qoqNBdd91VbZtZs2YpJibG/ZWSkuLHEQIAAH/yaxh58803NW3aNK1atUrx8fHVtsvKylJZWZn768CBA34cJQAA8Ce/naZZtWqVRo8erbfeekv9+vW7YNuwsDCFhYX5aWQAAMAmv8yMvPnmmxo1apTeeOMN3XHHHf44JAAACBBez4yUl5fryy+/dC8XFhaqoKBAcXFxatGihbKysvT111/rtddek3QmiIwYMUIvvPCCunfvrpKSEklSo0aNFBMTU09lAACAQOX1zEheXp66dOmiLl26SJIyMzPVpUsX9226xcXFKioqcrd/+eWXderUKY0bN05JSUnur0ceeaSeSgAAAIHsop4z4i88ZwQAgMBT289v3k0DAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsMrrMJKbm6uBAwcqOTlZDodD69atq3GfnJwcde3aVeHh4WrdurUWL15cl7ECAIAGyOswUlFRoU6dOmnBggW1al9YWKjbb79dvXr1Un5+vp588klNnDhRq1ev9nqwAACg4Qn2doeMjAxlZGTUuv3ixYvVokULzZs3T5LUrl075eXl6bnnntOdd97p7eEBAEAD43UY8daHH36o9PR0j3UDBgzQ0qVLVVlZqZCQkHP2cblccrlc7mWn03nmP/6nv9TI50P2A4fH/8jU1L6GBqbGDn5waMcPF+p2zBqPdwnuW+P+DXHfC2++JH9OjiukmBSpUax0rFiqOl1D3xc6luNHv+9oeALt5+vFv9VWne/7Wsexf3+qVs18/sleUlKihIQEj3UJCQk6deqUDh8+rKSkpHP2mTVrlqZPn35uZ9/skcIC7ZcPgFecX9seAYD64qpdiPHLNIPjR3+dmP//r5sfrz8rKytLmZmZ7mWn06mUlBRp2AopKtJ3A62ViwlD5gd/2f34B1RDvzX+hefNuH5wbGMu0PcF+ryY8djat8b9G+K+F958yf2cvs6Tyr6WYppJUclScGjN+1Z3LGN05nedP2AaJnPhn7G3s2K1mtGrh98lf87WVfvvuxez4hf8jKiFYxXS7EE1NvN5GElMTFRJSYnHutLSUgUHB6tJkybn3ScsLExhYWHnbmjdW4qO9sUwAVwKkjraHgGA+nT2Mosa+Pw5Iz169FB2drbHuk2bNiktLe2814sAAIDLi9dhpLy8XAUFBSooKJB05tbdgoICFRUVSTpzimXEiBHu9mPHjtVXX32lzMxM7dmzR3/605+0dOlSPfbYY/VTAQAACGhen6bJy8tT37593ctnr+0YOXKkli9fruLiYncwkaTU1FRt2LBBjz76qF566SUlJydr/vz53NYLAAAkSQ5jvLkv1A6n06mYmBiVlZUpmmtGAAAICLX9/ObdNAAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqn7+1tz6cfUiss5Zv/wMAAPad/dyu6WHvARFGjhw5IklKSUmxPBIAAOCtI0eOKCYmptrtARFG4uLiJElFRUUXLKYhuummm7Rjxw7bw/A76r68UPflhbovH2VlZWrRooX7c7w6ARFGrrjizKUtMTExl92L8oKCgi67miXqvtxQ9+WFui8/Zz/Hq93up3GgjsaNG2d7CFZQ9+WFui8v1I0fc5iariq5BNT2FcQAAODSUdvP74CYGQkLC9PUqVMVFhZmeygAAKCWavv5HRAzIwAAoOEKiJkRAADQcBFGAACAVYQRH1q4cKFSU1MVHh6url276v3333dvmzZtmtq2bavIyEhdeeWV6tevn7Zv315jn7t27VLv3r3VqFEjNWvWTDNmzDjnyXY5OTnq2rWrwsPD1bp1ay1evLjea7uQC9UtSXv27NGgQYMUExOjqKgode/eXUVFRRfsM9DrPnTokEaNGqXk5GRFRETotttu0xdffFFjn5d63bm5uRo4cKCSk5PlcDi0bt0697bKyko98cQTuuGGGxQZGank5GSNGDFCBw8erLHfQK5bkkaNGiWHw+Hx1b179xr7DfS6y8vLNX78eDVv3lyNGjVSu3bttGjRohr7vZTrnjVrlm666SZFRUUpPj5eQ4YM0WeffebRZs2aNRowYICaNm0qh8OhgoKCWvV9KdftdwY+sXLlShMSEmKWLFlidu/ebR555BETGRlpvvrqK2OMMStWrDDZ2dlm79695pNPPjGjR4820dHRprS0tNo+y8rKTEJCgrn77rvNrl27zOrVq01UVJR57rnn3G327dtnIiIizCOPPGJ2795tlixZYkJCQszbb7/t85qNqbnuL7/80sTFxZnf/va35qOPPjJ79+4177zzjjl06FC1fQZ63VVVVaZ79+6mV69e5l//+pf5z3/+Y37961+bFi1amPLy8mr7DIS6N2zYYKZMmWJWr15tJJm1a9e6tx09etT069fPrFq1yvznP/8xH374oenWrZvp2rXrBfsM9LqNMWbkyJHmtttuM8XFxe6vI0eOXLDPhlD3mDFjzNVXX202b95sCgsLzcsv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0HARRgAAgFV+CSOzZs3STTfdpKioKMXHx2vIkCHuZ4ucZYzRtGnTlJycrEaNGqlPnz769NNP3du//fZbTZgwQdddd50iIiLUokULTZw4sdrbeF0ulzp37iyHw6GCggJflgcAAC6CX8JITk6Oxo0bp23btik7O1unTp1Senq6Kioq3G3mzJmjuXPnasGCBdqxY4cSExPVv39/HTt2TJJ08OBBHTx4UM8995x27dql5cuXa+PGjRo9evR5j/n4448rOTnZH+UBAICLYOUC1m+++Ubx8fHKycnRLbfcImOMkpOTNWnSJD3xxBOSzsxsJCQk6Nlnn9WDDz543n7eeust3X///aqoqHA/CE06c/dNZmamVq9ereuvv175+fnq3LmzP0oDAABesnLNyNlTK3FxcZKkwsJClZSUKD093d0mLCxMvXv31tatWy/YT3R0tEcQOXTokH71q1/p9ddfV0REhI8qAAAA9cXvYcQYo8zMTPXs2VMdOnSQJPcbfn/8Vt+EhIRz3v571pEjR/T00097zJoYYzRq1CiNHTtWaWlpPqoAAADUJ78/gXX8+PH6+OOP9cEHH5yzzeFweCwbY85ZJ0lOp1N33HGH2rdvr6lTp7rXv/jii3I6ncrKyqr/gQMAAJ/w68zIhAkTtH79em3evFnNmzd3rz/7pt4fz4KUlpaeM1ty7Ngx3XbbbWrcuLHWrl2rkJAQ97b33ntP27ZtU1hYmIKDg9WmTRtJUlpamkaOHOmrsgAAwEXwSxgxxmj8+PFas2aN3nvvPaWmpnpsT01NVWJiorKzs93rTp48qZycHP3kJz9xr3M6nUpPT1doaKjWr1+v8PBwj37mz5+vf//73yooKFBBQYE2bNggSVq1apWeeeYZH1YIAADqyi+nacaNG6c33nhD//u//6uoqCj3DEhMTIwaNWokh8OhSZMmaebMmbrmmmt0zTXXaObMmYqIiNC9994r6cyMSHp6uo4fP64///nPcjqdcjqdkqSrrrpKQUFBatGihcdxGzduLEm6+uqrPWZiAADApcMvYWTRokWSpD59+nisX7ZsmUaNGiXpzHNBvv/+ez388MP67rvv1K1bN23atElRUVGSpJ07d2r79u2S5D79clZhYaFatWrl0xoAAIBv8KI8AABgFe+mAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQSAz2zZskUOh0NHjx61PRQAlzAeegag3vTp00edO3fWvHnzJJ15x9S3336rhISE876BGwAkPz0OHsDlKTQ01P1WbgCoDqdpANSLUaNGKScnRy+88IIcDoccDoeWL1/ucZpm+fLlio2N1TvvvKPrrrtOERER+sUvfqGKigq9+uqratWqla688kpNmDBBp0+fdvd98uRJPf7442rWrJkiIyPVrVs3bdmyxU6hAOodMyMA6sULL7ygzz//XB06dNCMGTMkSZ9++uk57Y4fP6758+dr5cqVOnbsmIYOHaqhQ4cqNjZWGzZs0L59+3TnnXeqZ8+eGjZsmCTpgQce0P79+7Vy5UolJydr7dq1uu2227Rr1y5dc801fq0TQP0jjACoFzExMQoNDVVERIT71Mx//vOfc9pVVlZq0aJFuvrqqyVJv/jFL/T666/r0KFDaty4sdq3b6++fftq8+bNGjZsmPbu3as333xT//3vf5WcnCxJeuyxx7Rx40YtW7ZMM2fO9F+RAHyCMALAryIiItxBRJISEhLUqlUrNW7c2GNdaWmpJOmjjz6SMUbXXnutRz8ul0tNmjTxz6AB+BRhBIBfhYSEeCw7HI7zrquqqpIkVVVVKSgoSDt37lRQUJBHux8GGACBizACoN6EhoZ6XHhaH7p06aLTp0+rtLRUvXr1qte+AVwauJsGQL1p1aqVtm/frv379+vw4cPu2Y2Lce211+q+++7TiBEjtGbNGhUWFmrHjh169tlntWHDhnoYNQDbCCMA6s1jjz2moKAgtW/fXldddZWKiorqpd9ly5ZpxIgR+s1vfqPrrrtOgwYN0vbt25WSklIv/QOwiyewAgAAq5gZAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWPX/AVAA2DjCsx/ZAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "id": "12", + "metadata": {}, + "outputs": [], "source": [ "# first, load in the simple model of case 1. Copy it.\n", "case2_example1 = case1(\"case2_example1\")\n", @@ -1573,7 +135,7 @@ }, { "cell_type": "markdown", - "id": "5c22f340-c381-4992-91db-f6186c4e3c80", + "id": "13", "metadata": {}, "source": [ "### Example 2: boundary and basins below target, third basin above\n", @@ -1582,297 +144,10 @@ }, { "cell_type": "code", - "execution_count": 25, - "id": "a37e627d-2f8a-4d19-9ee6-f535420d277c", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0030.0000001.0000000.010.0000000.0100000.01.679887e-070.00.06.045863e-080.305011
12024-01-01 00:00:0040.0000000.0000000.010.0000000.0100000.01.845589e-070.00.06.611968e-080.303833
22024-01-01 00:00:008100000.00000010.0000000.000.186667-0.1878240.01.157374e-030.00.0-3.483442e-08-2.000000
32024-01-01 00:01:0030.5999861.0219050.010.0000000.0099990.07.009689e-070.00.01.399768e-070.181562
42024-01-01 00:01:0040.5999850.0244900.010.0000000.0099990.07.624346e-070.00.01.508812e-070.180076
..........................................
1339152024-01-31 23:58:004763.8048150.8739550.000.000000-0.0001010.01.011524e-040.00.0-1.265898e-10-2.000000
1339162024-01-31 23:58:0085635.4363652.3739040.000.000000-0.0002750.02.747575e-040.00.0-1.265873e-10-2.000000
1339172024-01-31 23:59:003953.2532341.8732680.000.000000-0.0001260.01.263410e-040.00.0-1.582402e-10-2.000000
1339182024-01-31 23:59:004763.7987450.8739510.000.000000-0.0001010.01.011520e-040.00.0-1.265904e-10-2.000000
1339192024-01-31 23:59:0085635.4198792.3739000.000.000000-0.0002750.02.747571e-040.00.0-1.265705e-10-2.000000
\n", - "

133920 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " time node_id storage level inflow_rate \\\n", - "0 2024-01-01 00:00:00 3 0.000000 1.000000 0.01 \n", - "1 2024-01-01 00:00:00 4 0.000000 0.000000 0.01 \n", - "2 2024-01-01 00:00:00 8 100000.000000 10.000000 0.00 \n", - "3 2024-01-01 00:01:00 3 0.599986 1.021905 0.01 \n", - "4 2024-01-01 00:01:00 4 0.599985 0.024490 0.01 \n", - "... ... ... ... ... ... \n", - "133915 2024-01-31 23:58:00 4 763.804815 0.873955 0.00 \n", - "133916 2024-01-31 23:58:00 8 5635.436365 2.373904 0.00 \n", - "133917 2024-01-31 23:59:00 3 953.253234 1.873268 0.00 \n", - "133918 2024-01-31 23:59:00 4 763.798745 0.873951 0.00 \n", - "133919 2024-01-31 23:59:00 8 5635.419879 2.373900 0.00 \n", - "\n", - " outflow_rate storage_rate precipitation evaporation drainage \\\n", - "0 0.000000 0.010000 0.0 1.679887e-07 0.0 \n", - "1 0.000000 0.010000 0.0 1.845589e-07 0.0 \n", - "2 0.186667 -0.187824 0.0 1.157374e-03 0.0 \n", - "3 0.000000 0.009999 0.0 7.009689e-07 0.0 \n", - "4 0.000000 0.009999 0.0 7.624346e-07 0.0 \n", - "... ... ... ... ... ... \n", - "133915 0.000000 -0.000101 0.0 1.011524e-04 0.0 \n", - "133916 0.000000 -0.000275 0.0 2.747575e-04 0.0 \n", - "133917 0.000000 -0.000126 0.0 1.263410e-04 0.0 \n", - "133918 0.000000 -0.000101 0.0 1.011520e-04 0.0 \n", - "133919 0.000000 -0.000275 0.0 2.747571e-04 0.0 \n", - "\n", - " infiltration balance_error relative_error \n", - "0 0.0 6.045863e-08 0.305011 \n", - "1 0.0 6.611968e-08 0.303833 \n", - "2 0.0 -3.483442e-08 -2.000000 \n", - "3 0.0 1.399768e-07 0.181562 \n", - "4 0.0 1.508812e-07 0.180076 \n", - "... ... ... ... \n", - "133915 0.0 -1.265898e-10 -2.000000 \n", - "133916 0.0 -1.265873e-10 -2.000000 \n", - "133917 0.0 -1.582402e-10 -2.000000 \n", - "133918 0.0 -1.265904e-10 -2.000000 \n", - "133919 0.0 -1.265705e-10 -2.000000 \n", - "\n", - "[133920 rows x 13 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAHhCAYAAADOLdwlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCnUlEQVR4nO3dd3zU9eHH8fc3lw0ZhBESCRD2iAwJdRQVFCkUFUQrCio4+pOKKFLrbqUOUm21oFQUf4pURak/QbHioLKkCLIiCMhMSGRFVsLMuPv+/gg5s8m4+37vcq/n43EP7773He+7CHnz+S7DNE1TAAAAFgmyOwAAAAgslA8AAGApygcAALAU5QMAAFiK8gEAACxF+QAAAJaifAAAAEtRPgAAgKWC7Q5Qnsvl0r59+xQVFSXDMOyOAwAAasA0TR0/flyJiYkKCqp+bMPnyse+ffuUlJRkdwwAAFAH2dnZatWqVbXz+Fz5iIqKklQcPjo62uY0AACgJvLy8pSUlOT+PV4dnysfJbtaoqOjKR8AAPiZmhwywQGnAADAUpQPAABgKZ/b7QIAgK9zOp0qLCy0O4blQkJC5HA46r0eygcAADVkmqYOHDigY8eO2R3FNrGxsWrZsmW9LodB+QAAoIZKikeLFi0UGRkZUNejMk1Tp06dUk5OjiQpISGhzuuifAAAUANOp9NdPJo2bWp3HFtERERIknJyctSiRYs674LhgFMAAGqg5BiPyMhIm5PYq+Tz1+eYF8oHAAC1EEi7Wirjic9P+QAAAJaqdflYvny5rrnmGiUmJsowDH300Udl3jdNU5MnT1ZiYqIiIiLUv39/bd682VN5AQCAn6t1+Th58qR69uyp6dOnV/r+888/rxdffFHTp0/XmjVr1LJlS1111VU6fvx4vcMCABBIJk+erF69enlkXZmZmTIMQ+np6VXOs3TpUhmG4fVTiWt9tsuQIUM0ZMiQSt8zTVNTp07V448/rhEjRkiSZs+erfj4eM2ZM0d33313/dICAIA6SUpK0v79+9WsWTO7o3j2mI+MjAwdOHBAgwYNck8LCwvT5ZdfrpUrV1a6TH5+vvLy8so8JGnL4S2ejAYAQEBzOBxq2bKlgoPtv8qGR8vHgQMHJEnx8fFlpsfHx7vfKy8tLU0xMTHuR1JSkiTp7+v+LtM0PRkPAACv6d+/v+677z499NBDiouLU8uWLTV58mT3+1lZWRo2bJgaN26s6Oho3XjjjTp48GCZdfzlL39RfHy8oqKidOedd+rMmTMVtjNr1ix17dpV4eHh6tKli1555ZUa5atst8vChQvVqVMnRUREaMCAAcrMzKzLR681r5ztUv40HNM0qzw159FHH1Vubq77kZ2dLUnadGiTFmYs9EY8AAC8Yvbs2WrUqJFWr16t559/Xk899ZQWLVok0zQ1fPhwHTlyRMuWLdOiRYu0a9cujRw50r3sv/71Lz355JN69tlntXbtWiUkJFQoFq+//roef/xxPfvss9q6daumTJmiP/7xj5o9e3ats2ZnZ2vEiBH69a9/rfT0dN1111165JFH6v0d1IRHx15atmwpqXgEpPRlV3NyciqMhpQICwtTWFhYpe+9uO5FDUgaoMiQwL6gCwDAP/To0UNPPvmkJKljx46aPn26vvrqK0nSxo0blZGR4R7hf/vtt9W9e3etWbNGffv21dSpU3XHHXforrvukiQ988wz+s9//lNm9OPpp5/WCy+84D6uMjk5WVu2bNFrr72mMWPG1CrrjBkz1K5dO/3973+XYRjq3LmzNm3apOeee67e38O5eHTkIzk5WS1bttSiRYvc0woKCrRs2TJdcskltVpXYqNE5ZzK0Zvfv+nJiAAAeE2PHj3KvE5ISFBOTo62bt2qpKQkd/GQpG7duik2NlZbt26VJG3dulUXX3xxmeVLv/7pp5+UnZ2tO++8U40bN3Y/nnnmGe3atavWWbdu3aqLLrqozJ6J8tv3llqPfJw4cUI7d+50v87IyFB6erri4uLUunVrTZw4UVOmTFHHjh3VsWNHTZkyRZGRkRo1alSttnNv73v1x3V/1Fub39KIjiOU2DixtlEBALBUSEhImdeGYcjlclV5+EF1hyWU53K5JBXvernwwgvLvFeXe6zYeVxlrUc+1q5dq969e6t3796SpEmTJql3797605/+JEl66KGHNHHiRN1zzz1KTU3V3r179eWXXyoqKqpW2xmQNECp8anKd+brxXUv1jYmAAA+o1u3bsrKynIf1yhJW7ZsUW5urrp27SpJ6tq1q1atWlVmudKv4+Pjdd5552n37t3q0KFDmUdycnKdMlW3PW+qdfno37+/TNOs8HjrrbckFbe8yZMna//+/Tpz5oyWLVumlJSUWgczDEMP/+JhBRlB+iLzC607uK7W6wAAwBcMHDhQPXr00OjRo7V+/Xp9++23uu2223T55ZcrNTVVknT//ffrzTff1Jtvvqnt27frySefrHCF8MmTJystLU3Tpk3T9u3btWnTJs2aNUsvvlj7f6SPGzdOu3bt0qRJk7Rt2zbNmTPH/bvc23z63i5d4rro+o7XS5Ke+/Y5OV1OmxMBAFB7JbcjadKkiS677DINHDhQ7dq109y5c93zjBw5Un/605/08MMPq0+fPtqzZ49+97vflVnPXXfdpf/93//VW2+9pfPPP1+XX3653nrrrTqNfLRu3VoffvihPvnkE/Xs2VOvvvqqpkyZUu/PWhOG6WMX08jLy1NMTIxyc3MVHR2tI2eO6Op5V+t44XH9+ZI/a0THEXZHBAAEoDNnzigjI0PJyckKDw+3O45tqvoeyv/+ro5Pj3xIUlx4nMb1HCdJmrZ+mk4UnLA5EQAAqA+fLx+SdHOXm9U2uq2OnDmimRtn2h0HAACfM2XKlDKn4JZ+VHVPNrvYf4H3GghxhOgPff+g8V+N19tb39b1na5Xm+g2dscCAMBnjBs3TjfeeGOl70VERFicpnp+UT4k6bJWl6nfef20Yu8K/X3d3zV1wFS7IwEA4DPi4uIUFxdnd4wa8YvdLiX+kPoHOQyHvsr6ilNvAQDwU35VPtrFtnOfevu3NX+Ty3TZnAgAANSWX5UPSfpdr98pMjhS3x/+Xp9nfG53HAAAUEt+Vz6aRTTTneffKan41Nt8Z77NiQAAQG34XfmQpFu73aoWkS207+Q+zdk6x+44AACgFvyyfEQER+i+3vdJkl7f+LqOnjlqcyIAAFBTflk+JOnqdlerS1wXHS88rtc2vmZ3HAAA/MKMGTPUo0cPRUdHKzo6WhdffLE+++wzSzP4bflwBDn0+9TfS5Lm/jBXmbmZ9gYCAMAPtGrVSn/5y1+0du1arV27VldccYWGDRtW4Q663uQ3FxmrzEUJF+nS8y7V13u/1tT1U7nwGADANqZp6nShPXdfjwhxyDCMGs17zTXXlHn97LPPasaMGVq1apW6d+/ujXgV+HX5kKRJfSbpv/v+677wWJ/4PnZHAgAEoNOFTnX70xe2bHvLU79SZGjtf6U7nU598MEHOnnypC6++GIvJKuc3+52KdGhSQeN6DhCEhceAwCgJjZt2qTGjRsrLCxM48aN0/z589WtWzfLtu/3Ix+SNL7XeC3cvVDfH/5eX2Z+qcHJg+2OBAAIMBEhDm156le2bbs2OnfurPT0dB07dkwffvihxowZo2XLlllWQBpE+WgW0Uxju4/VK9+9opc3vKwr21ypkKAQu2MBAAKIYRh12vVhh9DQUHXo0EGSlJqaqjVr1mjatGl67TVrzh71+90uJW7rfpviwuOUdTxL83fMtzsOAAB+wzRN5edbd8XwBlM+GoU00v/0+B9J0ozvZuhU4SmbEwEA4Hsee+wxff3118rMzNSmTZv0+OOPa+nSpRo9erRlGRpM+ZCkGzvdqPMan6dDpw9pzg9cdh0AgPIOHjyoW2+9VZ07d9aVV16p1atX6/PPP9dVV11lWQb/2DlVQyGOEI3vNV6PrXhMb256U7/p9BvFhMXYHQsAAJ/xxhtv2B2hYY18SNLQdkPVqUknHS88rv/d9L92xwEAAOU0uPIRZATp/gvulyTN2TpHB04esDkRAAAorcGVD0m69LxL1Se+jwpcBZrx3Qy74wAAgFIaZPkwDEMTL5goSfpo50fafWy3vYEAAIBbgywfktSrRS8NSBogl+nSyxtetjsOAAA4q8GWD0m6/4L7FWQE6T9Z/9HGnzbaHQcAAKiBl4/2se11bftrJUnT1k+zOQ0AAJAaePmQpHt63qOQoBB9e+Bbfbv/W7vjAAAQ8Bp8+UhonKDrO14vSZqePl2madqcCACAwNbgy4ck/bbHbxXmCNOGnA1auW+l3XEAAAhoAVE+WkS20MjOIyVJL294mdEPAAAkpaWlFV+eYuJES7cbEOVDku5IuUMRwRHafHizlmYvtTsOAAC2WrNmjWbOnKkePXpYvu2AKR9NI5pqdNfi2wVPT58ul+myOREAoEExTangpD2PWo7onzhxQqNHj9brr7+uJk2aeOkLqVqDuqvtuYztPlbv//C+th/drkV7FulXbX9ldyQAQENReEqakmjPth/bJ4U2qvHs48eP19ChQzVw4EA988wzXgxWuYAZ+ZCkmLAY3dbtNknSK+mvyOly2pwIAABrvf/++1q/fr3S0tJsyxBQIx+SdEu3W/TO1ne0O3e3FmYs1DXtr7E7EgCgIQiJLB6BsGvbNZCdna37779fX375pcLDw70cqmoBVz6iQqN0e8rtmrZ+ml797lUNTh6skKAQu2MBAPydYdRq14cd1q1bp5ycHPXp08c9zel0avny5Zo+fbry8/PlcDi8niOgdruUGNVllOLC45R1PEuf7PrE7jgAAFjiyiuv1KZNm5Senu5+pKamavTo0UpPT7ekeEgBWj4iQyJ1R8odkqTXvntNhc5CmxMBAOB9UVFRSklJKfNo1KiRmjZtqpSUFMtyBGT5kKSRnUeqaXhT7Tu5T5/sZvQDAACrBGz5CA8O1+0pt0uSZm6cqUIXox8AgMCzdOlSTZ061dJtBmz5kKTfdPqN4sLjtPfEXi3cvdDuOAAABISALh+RIZEa032MJOn1Ta+ryFVkcyIAABq+gC4fknRT55sUGxarPXl79Hnm53bHAQCgwQv48lF69GPmxplc9RQAAC8L+PIhFY9+RIdGKyM3Q4v2LLI7DgAADRrlQ1Lj0Ma6tdutkqTXNr7GHW8BAPAiysdZo7qOUlRIlHYe26mvsr6yOw4AAA0W5eOs6NBoje42WpL06nevMvoBAICXUD5KuaXrLWoU0kjbj27X0uyldscBAKBBonyUEhMWo1FdRkkqPvbDNE2bEwEA4FlFRUV64oknlJycrIiICLVr105PPfWUXC7rRvwpH+Xc2u1WhTvCteXwFn2z/xu74wAA4FHPPfecXn31VU2fPl1bt27V888/r7/+9a96+eWXLctA+SinSXgTXd/peknSG5vesDkNAACe9c0332jYsGEaOnSo2rZtqxtuuEGDBg3S2rVrLcsQbNmW/MiYbmM094e5+vbAt9r400b1aN7D7kgAAB9nmqZOF522ZdsRwREyDKNG8/br10+vvvqqtm/frk6dOum7777TihUrLL25nMfLR1FRkSZPnqx3331XBw4cUEJCgsaOHasnnnhCQUH+MdCS0DhBQ9sN1ce7PtYbm97QtCum2R0JAODjThed1oVzLrRl26tHrVZkSGSN5n344YeVm5urLl26yOFwyOl06tlnn9XNN9/s5ZQ/83j5KNmXNHv2bHXv3l1r167V7bffrpiYGN1///2e3pzX3JFyhxbsWqDF2Yu169gutY9tb3ckAADqbe7cuXrnnXc0Z84cde/eXenp6Zo4caISExM1ZswYSzJ4vHyU3pckSW3bttV7771n6b4kT2gX205XtL5CX2V9pTe/f1PP9nvW7kgAAB8WERyh1aNW27btmvrDH/6gRx55RDfddJMk6fzzz9eePXuUlpbmv+WjtvuS8vPzlZ+f736dl5fn6Uh1dtf5d+mrrK+0cPdCje81XomNE+2OBADwUYZh1HjXh51OnTpV4TAIh8Ph36faPvzww7r55pvVpUsXhYSEqHfv3po4cWKV+5LS0tIUExPjfiQlJXk6Up2lNEvRhQkXqsgs0uzNs+2OAwBAvV1zzTV69tln9emnnyozM1Pz58/Xiy++qOuuu86yDB4vH6X3Ja1fv16zZ8/W3/72N82eXfkv70cffVS5ubnuR3Z2tqcj1ctd598lSZq3Y56OnDlicxoAAOrn5Zdf1g033KB77rlHXbt21YMPPqi7775bTz/9tGUZDNPDl/FMSkrSI488ovHjx7unPfPMM3rnnXf0ww8/nHP5vLw8xcTEKDc3V9HR0Z6MViemaermT2/W5sOb9T89/kcTek+wOxIAwAZnzpxRRkaGkpOTFR4ebncc21T1PdTm97fHRz58YV+SJxmG4R79eO+H93Si4ITNiQAA8G8eLx++sC/J065ofYWSY5J1vOC4Ptzxod1xAADwax4vH76wL8nTgowgje0+VpL0ztZ3VOgqtDcQAAB+zOPlIyoqSlOnTtWePXt0+vRp7dq1S88884xCQ0M9vSlLDW03VHHhcTpw8oC+zPzS7jgAAPgt/7jeuQ8Ic4RpVJdRkqTZm2fLw8fpAgAQMCgftTCy80iFO8K19chWrT3oX1dsBQB4RqD/49MTn5/yUQux4bEa1mGYJOmtzW/ZGwYAYKmQkBBJxWd1BrKSz1/yfdSFxy+v3tDd1u02/Wvbv7T8x+XafWy32sW2szsSAMACDodDsbGxysnJkSRFRkbW+Db2DYFpmjp16pRycnIUGxsrh8NR53VRPmqpdXRrDUgaoMXZi/XPLf/U5Esm2x0JAGCRli1bSpK7gASi2NhY9/dQVx6/wml9+doVTiuzIWeDbvvsNoUGheqLG75Qs4hmdkcCAFjI6XSqsDDwLrsQEhJS5YhHbX5/M/JRB72a91KPZj208dBGvf/D+7q39712RwIAWMjhcNRrt0Og44DTOjAMQ2O6j5Ekzd02V6eLTtucCAAA/0H5qKMrW1+p8xqfp2P5x7Rg5wK74wAA4DcoH3XkCHLo1m63Siq+5LrL9M8b5wEAYDXKRz0M7zBcjUMaKzMvUyv3rbQ7DgAAfoHyUQ+NQhppeIfhkqR3t75rbxgAAPwE5aOebu5yswwZWrF3hTJzM+2OAwCAz6N81FPr6Na6rNVlkqT3fnjP5jQAAPg+yocHjOpafLfbj3Z+pBMFJ2xOAwCAb6N8eMDFCRerXUw7nSo6pY92fmR3HAAAfBrlwwMMw9DorqMlSXN+mMNptwAAVIPy4SFXt7taUSFRyj6erRV7V9gdBwAAn0X58JDIkEiN6DhCEqfdAgBQHcqHB93U5SYZMrRy30rtPrbb7jgAAPgkyocHtYpqpf5J/SUx+gEAQFUoHx5WcuDpJ7s/4bRbAAAqQfnwsF+0/IWSY5J1uui0/r3733bHAQDA51A+PMwwDN3Y6UZJ0r+2/0umadqcCAAA30L58IJrO1yrcEe4dhzdofSf0u2OAwCAT6F8eEF0aLSGJA+RJM3dNtfmNAAA+BbKh5eM7DxSkvRl5pc6cuaIzWkAAPAdlA8v6d6su7o37a5CVyH3ewEAoBTKhxeVjH58sO0D7vcCAMBZlA8vGpw8WFGhUfrxxI9auW+l3XEAAPAJlA8vigiO0LD2wyRx4CkAACUoH172m86/kSQt/3G59p/Yb3MaAADsR/nwsnYx7fSLlr+Qy3Tp/3b8n91xAACwHeXDAiWjHx/t/EhOl9PmNAAA2IvyYYErkq5QbFisck7l6L/7/mt3HAAAbEX5sECoI1RXt7takjRvxzyb0wAAYC/Kh0VGdBwhSVqWvUyHTh+yOQ0AAPahfFikY5OO6tG8h4rMIn2y6xO74wAAYBvKh4VGdCge/Zi3Y55M07Q5DQAA9qB8WGhw8mBFBEcoMy9T63PW2x0HAABbUD4s1CikkYYkD5HEgacAgMBF+bDYdR2ukyR9mfmljhcctzkNAADWo3xYrGfznmof015nnGf0WcZndscBAMBylA+LGYbhPu32wx0f2pwGAADrUT5scE37axQcFKwth7do25FtdscBAMBSlA8bNAlvogFJAyRJC3YtsDkNAADWonzY5Jp210iSPt39qYpcRTanAQDAOpQPm/Rr1U9Nwpro8JnDWrlvpd1xAACwDOXDJiFBIfp1u19LEpdbBwAEFMqHja5tf60kaXHWYuUV5NmcBgAAa1A+bNQ1rqs6xHZQgatAX2Z+aXccAAAsQfmwkWEYuqZ98YGn7HoBAAQKyofNrm53tYKMIK3PWa/svGy74wAA4HWUD5u1iGyhixIukiR9spvRDwBAw0f58AElB54u2LVALtNlcxoAALyL8uEDrmh9hRqFNNLeE3u1IWeD3XEAAPAqr5SPvXv36pZbblHTpk0VGRmpXr16ad26dd7YVIMQERyhQW0GSeLAUwBAw+fx8nH06FH98pe/VEhIiD777DNt2bJFL7zwgmJjYz29qQal5IJji/YsUqGz0OY0AAB4T7CnV/jcc88pKSlJs2bNck9r27atpzfT4PSN76tmEc106PQhrdy3UpcnXW53JAAAvMLjIx8LFixQamqqfvOb36hFixbq3bu3Xn/99Srnz8/PV15eXplHIHIEOTS47WBJ0sKMhTanAQDAezxePnbv3q0ZM2aoY8eO+uKLLzRu3Djdd999+uc//1np/GlpaYqJiXE/kpKSPB3JbwxJHiJJWpK9RKcKT9mcBgAA7zBM0zQ9ucLQ0FClpqZq5cqf79R63333ac2aNfrmm28qzJ+fn6/8/Hz367y8PCUlJSk3N1fR0dGejObzTNPUr+f9Wj+e+FHPX/a8u4wAAODr8vLyFBMTU6Pf3x4f+UhISFC3bt3KTOvatauysrIqnT8sLEzR0dFlHoHKMAx34WDXCwCgofJ4+fjlL3+pbdu2lZm2fft2tWnTxtObapB+nVx81suKvSuUm59rcxoAADzP4+XjgQce0KpVqzRlyhTt3LlTc+bM0cyZMzV+/HhPb6pB6tCkgzo26agiV5H+s+c/dscBAMDjPF4++vbtq/nz5+u9995TSkqKnn76aU2dOlWjR4/29KYarJLRj88yPrM5CQAAnufxA07rqzYHrDRUPx7/UUPmDZEhQ1/95is1j2xudyQAAKpl6wGnqL9WUa3Us3lPmTL1ReYXdscBAMCjKB8+quSsly/3fGlzEgAAPIvy4aMGth4oSdqQs0EHTx60OQ0AAJ5D+fBR8Y3i1at5L0nSV1lf2RsGAAAPonz4sKvaXCWp+E63AAA0FJQPH1ZSPtYdXKdDpw/ZnAYAAM+gfPiwhMYJOr/Z+TJlanHWYrvjAADgEZQPH1cy+sFZLwCAhoLy4eMGtik+62XtgbU6cuaIzWkAAKg/yoePS4pKUte4rnKaTi3JWmJ3HAAA6o3y4QcGtR0kiV0vAICGgfLhB0qO+1i9f7WOnTlmbxgAAOqJ8uEH2kS3UecmneU0nVr641K74wAAUC+UDz9xZesrJYnjPgAAfo/y4Sf6J/WXJH2z/xudKTpjbxgAAOqB8uEnusR1UUKjBJ0uOq1V+1fZHQcAgDqjfPgJwzDcox9Lstn1AgDwX5QPPzIgaYAkaWn2UjldTnvDAABQR5QPP5LaMlVRIVE6cuaINh3aZHccAADqhPLhR0KCQtSvVT9J0uJsbjQHAPBPlA8/c0XSFZI45RYA4L8oH36m33n9FBwUrMy8TGXkZtgdBwCAWqN8+JnGoY31i5a/kFR84CkAAP6G8uGHSs564ZRbAIA/onz4oZLrfaTnpHOjOQCA36F8+KGWjVqqY5OOMmVq5b6VdscBAKBWKB9+6tLzLpUkfb33a5uTAABQO5QPP1VSPv67979c7RQA4FcoH36qZ4ueigqJ0tH8o9p8eLPdcQAAqDHKh58KCQrRRYkXSZJW7F1hcxoAAGqO8uHH3Md9/MhxHwAA/0H58GP9ziu+z8v3h7/XodOHbE4DAEDNUD78WPPI5uoa11WSOOUWAOA3KB9+rmT0Y8WPHPcBAPAPlA8/d1mryyRJ/933XxW5imxOAwDAuVE+/Nz5zc5XTFiM8grytOnQJrvjAABwTpQPP+cIcuiihOJTblftW2VzGgAAzo3y0QCUlI9v9n9jcxIAAM6N8tEAXJx4sSRp408bdaLghM1pAACoHuWjATiv8XlKikqS03Rq7cG1dscBAKBalI8G4uKE4tGPb/ax6wUA4NsoHw1Eya6XVfs56BQA4NsoHw1E35Z9FWQEaXfubh04ecDuOAAAVIny0UDEhMWoe9PukqTV+1fbnAYAgKpRPhoQTrkFAPgDykcD4j7uY98qmaZpcxoAACpH+WhAejbvqYjgCB0+c1g7ju2wOw4AAJWifDQgoY5QXRB/gSTp2/3f2pwGAIDKUT4amL7xfSWJi40BAHwW5aOBSW2ZKqm4fLhMl81pAACoiPLRwHRr2k0RwRHKzc/VzmM77Y4DAEAFlI8GJiQoRL1b9JYkrTmwxuY0AABURPlogFLji3e9rDu4zuYkAABURPlogPq2PHvQ6YG1XO8DAOBzKB8NUPem3RXuCNfR/KPadWyX3XEAACiD8tEAhThC1KtFL0nSmoMc9wEA8C1eLx9paWkyDEMTJ0709qZQSslxH2sPcL0PAIBv8Wr5WLNmjWbOnKkePXp4czOohPu4j4Mc9wEA8C1eKx8nTpzQ6NGj9frrr6tJkybe2gyqkNIsRWGOMB05c0QZuRl2xwEAwM1r5WP8+PEaOnSoBg4cWO18+fn5ysvLK/NA/YU6QnV+s/MlSek/pdsbBgCAUrxSPt5//32tX79eaWlp55w3LS1NMTEx7kdSUpI3IgWkkoNO03PSbc0BAEBpHi8f2dnZuv/++/XOO+8oPDz8nPM/+uijys3NdT+ys7M9HSlg9WreSxIjHwAA3xLs6RWuW7dOOTk56tOnj3ua0+nU8uXLNX36dOXn58vhcLjfCwsLU1hYmKdjQFLP5j0lSRm5GTp25phiw2PtDQQAgLxQPq688kpt2rSpzLTbb79dXbp00cMPP1ymeMC7YsNjlRyTrIzcDH3303e6POlyuyMBAOD58hEVFaWUlJQy0xo1aqSmTZtWmA7v69W8lzJyM5T+UzrlAwDgE7jCaQPHQacAAF/j8ZGPyixdutSKzaASJeXj+0Pfq9BVqJCgEHsDAQACHiMfDVzb6LaKCYvRGecZbTuyze44AABQPhq6ICPIfdYLu14AAL6A8hEASq73sSFng71BAAAQ5SMglBz3senQpupnBADAApSPANCtaTcZMrT/5H4dPn3Y7jgAgABH+QgAjUIaKTkmWZK0+fBmm9MAAAId5SNApDQrvsDb94e+tzkJACDQUT4CRPem3SVx3AcAwH6UjwBxfrPzJUmbD22WaZo2pwEABDLKR4DoHNdZwUHBOpp/VPtO7rM7DgAggFE+AkSoI1SdmnSSxHEfAAB7UT4CSEpTDjoFANiP8hFAOOMFAOALKB8BpKR8bDm8RU6X0+Y0AIBARfkIIO1i2ikiOEKnik5pT94eu+MAAAIU5SOAOIIc7oNOfzjyg81pAACBivIRYLrEdZEk/XCU8gEAsAflI8CUlI9tR7bZnAQAEKgoHwHGPfJx5AeudAoAsAXlI8B0iO2gICNIR84c0aHTh+yOAwAIQJSPABMeHK7k6GRJ0tYjW21OAwAIRJSPANQ5rrMkjvsAANiD8hGASh/3AQCA1SgfAcg98nGUkQ8AgPUoHwGoc5Pi8pGVl6WThSdtTgMACDSUjwDUNKKpWkS0kClT249utzsOACDAUD4CVMe4jpKkHUd32JwEABBoKB8BqmNscfnYdWyXzUkAAIGG8hGgOsR2kCTtPLbT5iQAgEBD+QhQHZpQPgAA9qB8BKh2Me1kyNCRM0d0+PRhu+MAAAII5SNARQRHKCkqSRKjHwAAa1E+AhjHfQAA7ED5CGDtY9tLonwAAKxF+QhgHZsUn2678yjlAwBgHcpHACu928U0TZvTAAACBeUjgLWNbqtgI1gnCk/o4KmDdscBAAQIykcAC3GEqG1MW0lcZh0AYB3KR4DjjBcAgNUoHwGO8gEAsBrlI8BxmXUAgNUoHwGuZORj97HdcrqcNqcBAASCYLsDwF6tGrdSRHCEThed1rCPhyk5OllBRpD74TAcMgxDDsNRYXp1r6uap/S6arJuq7df+rlhGHb/eACgQaJ8BDhHkEMXJVykJdlLtCdvj/bk7bE7ks8wZNSq/NS2SFW3TG0LV33WVZtlqipr3tg+gIaL8gE9dclTWrFvhQqdhXKZLrnkksvlktN0ypQpp8spl1nxtUuuMs9rukxl87lUPM3lOjuPWc26K5mv9PTq5it57jJd5/xeTJkqMoskUypUoQU/CZRmZZHy9ChcdSNqdd1+TUf9PLF9wNsoH1BseKyubne13TEsZZrmzwXF/LmQnKvYVFqSarBM+fLjNJ0yzZ+3X90y5XPWZZnSy7lfV5On9DJlclYzX+nXlW6v1OuacJpOOU2OQ7JDjcqPghQUVIPyU2o+Q4YcQZUsr7PLVvJehWXOzlcyMhkUFFTp8rVZpvT08nlqsox7eqnXNV4m6OftBRmBs7uX8oGAZBiGDBn8K88mdS0yNS1J5yo/tdl++XXWtaTVZ/vnmq82y9T05+MyXSpSkZf/T0B5NSpM1Y2UlS9DNRg5q+vu4PLzFJwsqPHnpHwAsFzJX1awnieLjK+VtNqMvtlRZk2d+x5aLrN4FFOmpJoNEvoM5+maj1RSPgAggBiGoWCDv/rtUFJOalu4ajr65Y1dpLXZ/qkTp7RVW2v0XfB/IAAAFihd/EIUYnMaz8vLy1Oa0mo0L+OeAADAUpQPAABgKcoHAACwFOUDAABYivIBAAAsRfkAAACW8nj5SEtLU9++fRUVFaUWLVpo+PDh2rZtm6c3AwAA/JTHy8eyZcs0fvx4rVq1SosWLVJRUZEGDRqkkydPenpTAADADxmmaZ77eq/18NNPP6lFixZatmyZLrvssnPOn5eXp5iYGOXm5io6Otqb0QAAgIfU5ve3169wmpubK0mKi4ur9P38/Hzl5+e7X+fl5Xkty8Yfj+lPH29W1pFTXttGXZTcw/DnmxkaZV6Xf9+o8v2Kd0N0z1PDZctFUJBhyGEYCgoy5Agqfh1kGHIEGQoyVOr52XnOTit+bigo6Od5HIZRfGOiIMkRdPb52fcMQ6Wen53HPX+pbRiq+Pzs65KcZef5OXfZnGfzB1XxWUp/xqByOct8lrPPg1TlZwEAlOXV8mGapiZNmqR+/fopJSWl0nnS0tL05z//2ZsxZJqmZq/M1LMLt6rQ6dWBHqACR/kiVmVJqnyeoFIFrLiwVVHezlHwKhY2ldpOVQXvbHlzF7ZSJTOoXEmrruBVV96CdI7PUrHIVl0+y35/AHyTV3e7jB8/Xp9++qlWrFihVq1aVTpPZSMfSUlJHtvtknu6UA//30Z9vvmAJGlw95aacGUHhTp840Sfki+/5KdQctdD9+sqple7jPt9s9JtqMr5Ky7nMk25XJLTNM8+N+V0mXKZxe8VPzfPPtfP85hn53GdY56z6/r5eal5Sq3fvc1q111JrrPZnS7z7I2Ritdvnp3mNE2ZpoqfVzZPyboqyemix/q8yke1VHVJqrKAVVbYKpmnXCkqX8Dc26xsFLFCwStVzNxlTOWKaPXl7eeCWH575yhv1RZLlfsslX/HjPoFHp/Y7TJhwgQtWLBAy5cvr7J4SFJYWJjCwsK8kmHr/jzd/fY6ZR05pRCHocd/3VVjLmnLHwp4hGlWVsLkLis/F7by5arqklS64JUpRubZYuRSuZJUxTwVtlc2W4XCV7oIVln4Sj6XdO4iWvyZqlp3pd9DuVznWq4mnC5TxTf5pilaLaimI3Tldq+W3m1ZpuxUU5KqKovV7QYuv1u20rJYVXmrdOSwYsGrvFhWNuJYvvSdeyTRva4KBdg/ip/Hy4dpmpowYYLmz5+vpUuXKjk52dObqJEvNx/QxLnpOlXgVKsmEfrHqAvUMynWlixomNy7QGQoxGF3msBTacGrqryVlLQKo2BVF7zyo29lS+Q5Cl515a3CyF75InqOETp3zoojdKXn+blYqtKcFb6/cp+54nf28/Ma/XxMyeU0RfGznlF+hO5cu1crLXi1P87PeabmZ7V6vHyMHz9ec+bM0ccff6yoqCgdOFC8uyMmJkYRERGe3lwFpmnqlaW79Ncviq8t8ssOTfWPURcoNjLU69sGYJ2gIENB8v1/4TVEVZaiUrs5az8KVtnIYTW7bqsteMWlq8a7Vyv5LNXtBq4wmllJwatYLCsbRSz13VQ6ElhunrMZz/3zkYpMU1bvG3bl1/xkDo8f81HVcM+sWbM0duzYcy5fn1NtC50uPfLhJn24/kdJ0m0Xt9Efr+6mEB85vgMAgPoo2d17roJ3rvJW2Whd6UJUl+P8Th7P091X9bDnmA8vXzakSqcLnLp3znp99UOOHEGG/nxtd91yURtbsgAA4A2lz3jzNXl5ebq7hvN6/TofVsg9Vag7Z6/R2j1HFRYcpFdGX6Aru8bbHQsAAFTC78tH7qlCjX5jlb7fm6fo8GC9Mbav+rat/IJmAADAfn5dPvLOFOq2N1fr+715atooVO/+9kJ1ackl2QEA8GV+eyTmyfwijX3zW333Y66aRIZQPAAA8BN+WT6KnC5NeG+D1mcdU0xEiN65i+IBAIC/8LvyYZqmJn+yWYt/yFFYcJBm3d5X3RNj7I4FAABqyO/Kx6z/ZuqdVVkyDGnaTb10QesmdkcCAAC14FflY92eo5qycKsk6bEhXTU4JcHmRAAAoLb8pnwcOVmge+esV5HL1NAeCbrrUnvuGQMAAOrHb8rHEx9t0v7cM2rXrJGeu76HX9y1DwAAVOQX5eOzTfu1cNMBBQcZeunm3moc5teXJwEAIKD5fPnIPV2oP368WZL0u/7tlXIeZ7YAAODPfL58vLJkpw6dyFf75o107xUd7I4DAADqyafLx49HT2nWykxJ0hNDuyks2GFvIAAAUG8+XT7+sWSnCopcuqR9U/Xv3NzuOAAAwAN8tnwcOp6vD9fvlSQ9cFUnzm4BAKCB8Nny8a+12SoocqlXUqxS23AVUwAAGgqfLR8ff1c86nH7L9sy6gEAQAPis+Vj79Ezigx1aFC3lnZHAQAAHuSz5UOSBnaNV0QoZ7gAANCQ+HT5uKwTZ7gAANDQ+HT5uLh9U7sjAAAAD/PZ8hEXGaLzYiPsjgEAADzMZ8tHcrPGdkcAAABe4LPlIyE23O4IAADAC3z23vSNwzwQ7USOlLVKkln1PKZZ/L5x9qyazBVS4+ZSs841346rSApyFP835wepZUq59ZfZYMXtB4dLh3dIIZFS4xbF04yqeqH5c2bTlIrypdBGpd52SicPFT9vHF/8X/d1Uowavg6SgoKK/2s4ij9bhedBZ587Sj2varqjeBslzyusj+u4AEAg8dny0ai+5SN7jfTuDdKZYx7JAy+rqpR4pPwEnWMdlZWs8uWrZD1BlRSr6qbXZ/t12E7p6TXdDgBYzGfLR+u4ehxsumuJ9P5oqfCkFNtGik6sfL6SEQbTVfzaMKSDW6T8XCnposr/RV5hJEM/L1v6vdIjFxXWU+q1q0gqOi3l7pWaday4nZL1lqzD/dz4eTShqKB0QOlYthSbdHY7ZrncNXhtuoofLlfxSIrpklzO4ueus++ZzrPTXNVPL/luz8V0Sk5nzeaFZ3mk/FQy/Zzlp7Lp5UbJqho9q2r7dSqwNd1+dZ+zttspKbeM+iEw+Wz5uL5PUt0W3Ppv6f9ul5wFUrsB0k3vlt0tAWuZpcuMs1yZqWq6s3g5d+GpQclxnV2m0uk13E6FeWq7ndLTa/I5q8lV25JXYXptil9JjkLv/r+AioxalLkqy091u0g9OHpYabGsbvtW7bqt6ecvvx2Kn518tnzUydZ/S/+6rfgv3q7XSNe/IQWH2Z0qsJX84ZdDcoTYnSbwVDZ6VZNSVGmBO1f5qcN2yhSuupSsem6/2qJak+nVFNiaKFmvJDHwZ7FajrDVumR5YNdtnUYPqytwXt7+iVM1/vYbTvnY/qX0wdjiP/Q9RkrDXpEcDefjAXUSFCT57kltDVudRtXqUn6q2EVa5a7TumynutHDumy/JqOHNdl+FdOrO8ng5x9Q8W5vFXn5f4QAkl+T771Yw/jtvHupNPeW4mHj7tdRPADYzzDO/j3E30WWK9nda+uu26p2Hde0fNVk9K6a7Xtq121timUtipz//6nY/5303ijJmS91HiqNeJ3iAQCBrPSxHrBOXp70l5gazerf47G5P0rv3lh8VkvyZdJvZnFcAQAAPs5/y8eZvOLiceKA1LyrdOPbHFwKAIAf8M/yYZrSR7+TcjYXX8Vz9L+kiFi7UwEAgBrwz/Kx8iXph39LjlDp5vek2NZ2JwIAADXkf+Uj87/Sf/5c/HzwX6Tz+tibBwAA1Ip/lY8zudK8/zl7LY+bpNQ77E4EAABqyb/KxxePSXk/Sk3aSkNf4PK4AAD4If8pHzsWSRvekWRIw2dIYY3tTgQAAOrAP8pH4Rlp4YPFzy/6ndTmEnvzAACAOvOP8rHqH9LRTCkqQRrwuN1pAABAPfh++Th+UFr+QvHzgX9mdwsAAH7O98vHypeKL59+XqrU40a70wAAgHry7fJx4idpzRvFzwc8ytktAAA0AL5dPla/KhWdLr6QWPsr7U4DAAA8wHfLh7NQWv/P4ue/vJ9RDwAAGgjfLR/bv5BO5hTfOK7zr+1OAwAAPMR3y8emD4v/22u05AixNwsAAPAY3y0fGcuK/3v+DfbmAAAAHuW75cNVUHwPlxbd7E4CAAA8yHfLhyR1GsyBpgAANDC+XT5aX2R3AgAA4GG+XT5a/cLuBAAAwMN8t3yEx0ox59mdAgAAeJjXyscrr7yi5ORkhYeHq0+fPvr6669rt4LYNt4JBgAAbOWV8jF37lxNnDhRjz/+uDZs2KBLL71UQ4YMUVZWVs1XEtPKG9EAAIDNvFI+XnzxRd15552666671LVrV02dOlVJSUmaMWNGzVcSHu2NaAAAwGYeLx8FBQVat26dBg0aVGb6oEGDtHLlygrz5+fnKy8vr8xDkhTS2NPRAACAD/B4+Th06JCcTqfi4+PLTI+Pj9eBAwcqzJ+WlqaYmBj3IykpqfiNsEaejgYAAHyA1w44NcpdHMw0zQrTJOnRRx9Vbm6u+5GdnV38RqdfeSsaAACwUbCnV9isWTM5HI4Koxw5OTkVRkMkKSwsTGFhYRVX1PJ8T0cDAAA+wOMjH6GhoerTp48WLVpUZvqiRYt0ySWXeHpzAADAz3h85EOSJk2apFtvvVWpqam6+OKLNXPmTGVlZWncuHHe2BwAAPAjXikfI0eO1OHDh/XUU09p//79SklJ0cKFC9WmDRcOAwAg0BmmaZp2hygtLy9PMTExys3NVXQ01/oAAMAf1Ob3t+/e2wUAADRIlA8AAGApygcAALAU5QMAAFiK8gEAACxF+QAAAJaifAAAAEtRPgAAgKUoHwAAwFJeubx6fZRccDUvL8/mJAAAoKZKfm/X5MLpPlc+Dh8+LElKSkqyOQkAAKitw4cPKyYmptp5fK58xMXFSZKysrLOGb4qffv21Zo1a+qcgeVZnuVZnuVZnuVrJzc3V61bt3b/Hq+Oz5WPoKDiw1BiYmLqfGM5h8NRr5vSsTzLszzLszzLs3zdlPwer3aeem3BR40fP57lWZ7lWZ7lWZ7lLV6+pgyzJkeGWKg2t+QFAAC+oTa/v31u5CMsLExPPvmkwsLC7I4CAABqqDa/v31u5AMAADRsPjfyAQAAGjbKBwAAsBTlA3X2yiuvKDk5WeHh4erTp4++/vpr93snTpzQvffeq1atWikiIkJdu3bVjBkzbEyL0pYvX65rrrlGiYmJMgxDH330UZn3x44dK8Mwyjwuuugie8KigrS0NPXt21dRUVFq0aKFhg8frm3btrnfLyws1MMPP6zzzz9fjRo1UmJiom677Tbt27fPxtQoca6fnyQdPHhQY8eOVWJioiIjIzV48GDt2LHDpsSeR/lAncydO1cTJ07U448/rg0bNujSSy/VkCFDlJWVJUl64IEH9Pnnn+udd97R1q1b9cADD2jChAn6+OOPbU4OSTp58qR69uyp6dOnVznP4MGDtX//fvdj4cKFFiZEdZYtW6bx48dr1apVWrRokYqKijRo0CCdPHlSknTq1CmtX79ef/zjH7V+/XrNmzdP27dv17XXXmtzckjn/vmZpqnhw4dr9+7d+vjjj7Vhwwa1adNGAwcOdM/j90ygDn7xi1+Y48aNKzOtS5cu5iOPPGKapml2797dfOqpp8q8f8EFF5hPPPGEZRlRM5LM+fPnl5k2ZswYc9iwYbbkQe3l5OSYksxly5ZVOc+3335rSjL37NljYTLURPmf37Zt20xJ5vfff++ep6ioyIyLizNff/11u2J6FCMfqLWCggKtW7dOgwYNKjN90KBBWrlypSSpX79+WrBggfbu3SvTNLVkyRJt375dv/rVr+yIjDpYunSpWrRooU6dOum3v/2tcnJy7I6EKuTm5kpStZe1zs3NlWEYio2NtSgVaqr8zy8/P1+SFB4e7p7H4XAoNDRUK1assD6gF1A+UGuHDh2S0+lUfHx8menx8fE6cOCAJOmll15St27d1KpVK4WGhmrw4MF65ZVX1K9fPzsio5aGDBmid999V4sXL9YLL7ygNWvW6IorrnD/pQjfYZqmJk2apH79+iklJaXSec6cOaNHHnlEo0aN4uKNPqayn1+XLl3Upk0bPfroozp69KgKCgr0l7/8RQcOHND+/fttTuwZPndvF/gPwzDKvDZN0z3tpZde0qpVq7RgwQK1adNGy5cv1z333KOEhAQNHDjQjriohZEjR7qfp6SkKDU1VW3atNGnn36qESNG2JgM5d17773auHFjlf8iLiws1E033SSXy6VXXnnF4nQ4l8p+fiEhIfrwww915513Ki4uTg6HQwMHDtSQIUNsTOpZlA/UWrNmzeRwONyjHCVycnIUHx+v06dP67HHHtP8+fM1dOhQSVKPHj2Unp6uv/3tb5QPP5SQkKA2bdo0qKPtG4IJEyZowYIFWr58uVq1alXh/cLCQt14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FB4eXmY9L730kr777julp6crPT1dCxculCTNnTtXzz77rDc+GgAAqCev7HYZP3685syZo48//lhRUVHuEY6YmBhFRETIMAxNnDhRU6ZMUceOHdWxY0dNmTJFkZGRGjVqlKTiEY9Bgwbp1KlTeuedd5SXl6e8vDxJUvPmzeVwONS6desy223cuLEkqX379mVGWgAAgO/wSvmYMWOGJKl///5lps+aNUtjx46VVHxdjtOnT+uee+7R0aNHdeGFF+rLL79UVFSUJGndunVavXq1JLl3p5TIyMhQ27ZtvREdAAB4GTeWAwAAluLeLgAAwFKUDwAAYCnKBwAAsBTlAwAAWIryAQAALEX5AAAAlqJ8AAAAS1E+AHjE0qVLZRiGjh07ZncUAD6Oi4wBqJP+/furV69emjp1qqTi+zMdOXJE8fHxld6dGgBKeOXy6gACT2hoqPuO1QBQHXa7AKi1sWPHatmyZZo2bZoMw5BhGHrrrbfK7HZ56623FBsbq3//+9/q3LmzIiMjdcMNN+jkyZOaPXu22rZtqyZNmmjChAlyOp3udRcUFOihhx7Seeedp0aNGunCCy/U0qVL7fmgALyCkQ8AtTZt2jRt375dKSkpeuqppyRJmzdvrjDfqVOn9NJLL+n999/X8ePHNWLECI0YMUKxsbFauHChdu/ereuvv179+vXTyJEjJUm33367MjMz9f777ysxMVHz58/X4MGDtWnTJnXs2NHSzwnAOygfAGotJiZGoaGhioyMdO9q+eGHHyrMV1hYqBkzZqh9+/aSpBtuuEFvv/22Dh48qMaNG6tbt24aMGCAlixZopEjR2rXrl1677339OOPPyoxMVGS9OCDD+rzzz/XrFmzNGXKFOs+JACvoXwA8JrIyEh38ZCk+Ph4tW3bVo0bNy4zLScnR5K0fv16maapTp06lVlPfn6+mjZtak1oAF5H+QDgNSEhIWVeG4ZR6TSXyyVJcrlccjgcWrdunRwOR5n5ShcWAP6N8gGgTkJDQ8scKOoJvXv3ltPpVE5Oji699FKPrhuA7+BsFwB10rZtW61evVqZmZk6dOiQe/SiPjp16qTRo0frtttu07x585SRkaE1a9boueee08KFCz2QGoAvoHwAqJMHH3xQDodD3bp1U/PmzZWVleWR9c6aNUu33Xabfv/736tz58669tprtXr1aiUlJXlk/QDsxxVOAQCApRj5AAAAlqJ8AAAAS1E+AACApSgfAADAUpQPAABgKcoHAACwFOUDAABYivIBAAAsRfkAAACWonwAAABLUT4AAIClKB8AAMBS/w+gqeq/DEDLBgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "id": "14", + "metadata": {}, + "outputs": [], "source": [ "# first, load in the simple model of case 1. Copy it.\n", "case2_example1 = case1(\"case2_example2\")\n", @@ -1884,7 +159,7 @@ }, { "cell_type": "markdown", - "id": "8239f609-2cc3-473c-8608-65837df994e0", + "id": "15", "metadata": {}, "source": [ "### Example 3: boundary and basins below target, third basin above, pump rate of third peilgebied set to 0. \n", @@ -1893,295 +168,10 @@ }, { "cell_type": "code", - "execution_count": 26, - "id": "4b4404cb-233a-485d-a9b0-ec1d841f3a7a", + "execution_count": null, + "id": "16", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0030.0000001.0000001.000000e-020.0000000.0100000.01.679887e-070.00.06.045863e-083.050107e-01
12024-01-01 00:00:0040.0000000.0000001.000000e-020.0000000.0100000.01.845589e-070.00.06.611968e-083.038326e-01
22024-01-01 00:00:008100000.00000010.0000000.000000e+000.020000-0.0211570.01.157403e-030.00.0-3.912639e-09-2.000000e+00
32024-01-01 00:01:0030.5999861.0219051.000000e-020.0000000.0099990.07.009689e-070.00.01.399768e-071.815624e-01
42024-01-01 00:01:0040.5999850.0244901.000000e-020.0000000.0099990.07.624346e-070.00.01.508812e-071.800760e-01
..........................................
2591952024-02-29 23:58:00431693.7004405.6297141.743486e-070.000000-0.0006510.06.515870e-040.00.0-1.002416e-13-5.749492e-07
2591962024-02-29 23:58:00831696.4171055.6299550.000000e+000.000002-0.0006540.06.516149e-040.00.0-8.542787e-14-2.000000e+00
2591972024-02-29 23:59:00326785.5142965.6290822.257008e-060.000000-0.0006670.06.697163e-040.00.0-2.457064e-14-1.088638e-08
2591982024-02-29 23:59:00431693.6613555.6297101.743285e-070.000000-0.0006510.06.515866e-040.00.0-1.875781e-13-1.076003e-06
2591992024-02-29 23:59:00831696.3778625.6299510.000000e+000.000002-0.0006540.06.516145e-040.00.0-1.678335e-13-2.000000e+00
\n", - "

259200 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " time node_id storage level inflow_rate \\\n", - "0 2024-01-01 00:00:00 3 0.000000 1.000000 1.000000e-02 \n", - "1 2024-01-01 00:00:00 4 0.000000 0.000000 1.000000e-02 \n", - "2 2024-01-01 00:00:00 8 100000.000000 10.000000 0.000000e+00 \n", - "3 2024-01-01 00:01:00 3 0.599986 1.021905 1.000000e-02 \n", - "4 2024-01-01 00:01:00 4 0.599985 0.024490 1.000000e-02 \n", - "... ... ... ... ... ... \n", - "259195 2024-02-29 23:58:00 4 31693.700440 5.629714 1.743486e-07 \n", - "259196 2024-02-29 23:58:00 8 31696.417105 5.629955 0.000000e+00 \n", - "259197 2024-02-29 23:59:00 3 26785.514296 5.629082 2.257008e-06 \n", - "259198 2024-02-29 23:59:00 4 31693.661355 5.629710 1.743285e-07 \n", - "259199 2024-02-29 23:59:00 8 31696.377862 5.629951 0.000000e+00 \n", - "\n", - " outflow_rate storage_rate precipitation evaporation drainage \\\n", - "0 0.000000 0.010000 0.0 1.679887e-07 0.0 \n", - "1 0.000000 0.010000 0.0 1.845589e-07 0.0 \n", - "2 0.020000 -0.021157 0.0 1.157403e-03 0.0 \n", - "3 0.000000 0.009999 0.0 7.009689e-07 0.0 \n", - "4 0.000000 0.009999 0.0 7.624346e-07 0.0 \n", - "... ... ... ... ... ... \n", - "259195 0.000000 -0.000651 0.0 6.515870e-04 0.0 \n", - "259196 0.000002 -0.000654 0.0 6.516149e-04 0.0 \n", - "259197 0.000000 -0.000667 0.0 6.697163e-04 0.0 \n", - "259198 0.000000 -0.000651 0.0 6.515866e-04 0.0 \n", - "259199 0.000002 -0.000654 0.0 6.516145e-04 0.0 \n", - "\n", - " infiltration balance_error relative_error \n", - "0 0.0 6.045863e-08 3.050107e-01 \n", - "1 0.0 6.611968e-08 3.038326e-01 \n", - "2 0.0 -3.912639e-09 -2.000000e+00 \n", - "3 0.0 1.399768e-07 1.815624e-01 \n", - "4 0.0 1.508812e-07 1.800760e-01 \n", - "... ... ... ... \n", - "259195 0.0 -1.002416e-13 -5.749492e-07 \n", - "259196 0.0 -8.542787e-14 -2.000000e+00 \n", - "259197 0.0 -2.457064e-14 -1.088638e-08 \n", - "259198 0.0 -1.875781e-13 -1.076003e-06 \n", - "259199 0.0 -1.678335e-13 -2.000000e+00 \n", - "\n", - "[259200 rows x 13 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAHhCAYAAADOLdwlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABZ0ElEQVR4nO3dd3wUdeLG8c/sZtMgCTUJgQABQpeOCIKAAoJKFcGCwlnuPMHGedbTU0/FcvpTzxMFPUAF6b2oKF0EI0V6b5EWahJSt8zvj4VoBCGBzc4med6v1142M7M7z3q72YfvNMM0TRMRERERP7FZHUBERERKF5UPERER8SuVDxEREfErlQ8RERHxK5UPERER8SuVDxEREfErlQ8RERHxK5UPERER8asgqwP8nsfj4dChQ0RERGAYhtVxREREpABM0yQ9PZ24uDhstouPbQRc+Th06BDx8fFWxxAREZHLkJycTLVq1S66TMCVj4iICMAbPjIy0uI0IiIiUhBpaWnEx8fnfY9fTMCVj3ObWiIjI1U+REREipmC7DKhHU5FRETEr1Q+RERExK8CbrOLiIhIoHO73TidTqtj+J3D4cBut1/x86h8iIiIFJBpmhw5coTTp09bHcUy5cqVIzY29opOh6HyISIiUkDnikd0dDTh4eGl6nxUpmmSmZlJSkoKAFWqVLns51L5EBERKQC3251XPCpWrGh1HEuEhYUBkJKSQnR09GVvgtEOpyIiIgVwbh+P8PBwi5NY69zrv5J9XlQ+RERECqE0bWq5EF+8fpUPERER8atCl49ly5bRs2dP4uLiMAyDmTNn5ptvmiYvvvgicXFxhIWF0alTJzZv3uyrvCIiIlLMFbp8ZGRk0LRpUz744IMLzn/zzTd55513+OCDD0hKSiI2NpauXbuSnp5+xWFFRERKkxdffJFmzZr55Ln27duHYRisX7/+D5dZsmQJhmEU+aHEhT7apUePHvTo0eOC80zT5N133+W5556jX79+AIwbN46YmBgmTJjAX/7ylytLKyIiIpclPj6ew4cPU6lSJauj+Hafj71793LkyBG6deuWNy0kJISOHTuycuXKCz4mJyeHtLS0fDeA6Tunk5ab5st4IiIipZbdbic2NpagIOvPsuHT8nHkyBEAYmJi8k2PiYnJm/d7I0aMICoqKu8WHx8PwJtJb9J5UmeeXPok3x/8HrfH7cuoIiIiPtWpUyceeeQRnnzySSpUqEBsbCwvvvhi3vwDBw7Qu3dvypYtS2RkJAMGDODo0aP5nuP1118nJiaGiIgI7rvvPrKzs89bz5gxY2jQoAGhoaHUr1+fDz/8sED5LrTZZf78+dStW5ewsDA6d+7Mvn37LuelF1qRHO3y+8NwTNP8w0NznnnmGVJTU/NuycnJANSKqkWuJ5cF+xbw4LcP0m1aN95b+x57U/cWRWQREZErNm7cOMqUKcPq1at58803efnll1m4cCGmadKnTx9OnjzJ0qVLWbhwIbt372bgwIF5j508eTL//Oc/efXVV/npp5+oUqXKecVi9OjRPPfcc7z66qts3bqV1157jeeff55x48YVOmtycjL9+vXjpptuYv369dx///08/fTTV/zfoCB8OvYSGxsLeEdAfnva1ZSUlPNGQ84JCQkhJCTkvOnjbxrPL65fmLVrFvP3ziclM4VPNn7CJxs/oWnlpvSp04cba95IRHCEL1+CiIjIZWvSpAn//Oc/AUhMTOSDDz7gu+++A2DDhg3s3bs3b4T/888/p1GjRiQlJdG6dWveffdd7r33Xu6//34AXnnlFb799tt8ox//+te/ePvtt/P2q0xISGDLli18/PHHDB48uFBZR44cSa1atfi///s/DMOgXr16bNy4kTfeeOOK/ztcik9HPhISEoiNjWXhwoV503Jzc1m6dCnt2rUr1HMZhkGjio14ts2zLLptEW93fJvrql2HzbDx87GfeemHl7h+8vU8vfxpfjj0Ax7T48uXIiIiUmhNmjTJ93uVKlVISUlh69atxMfH5xUPgIYNG1KuXDm2bt0KwNatW2nbtm2+x//292PHjpGcnMx9991H2bJl826vvPIKu3fvLnTWrVu3cs011+TbMvH79ReVQo98nDlzhl27duX9vnfvXtavX0+FChWoXr06jz32GK+99hqJiYkkJiby2muvER4ezp133nnZIYPtwXSr2Y1uNbtxLPMYc/fMZeaumexJ3cO8PfOYt2cesWVi6VW7F71r96Z6ZPXLXpeIiMjlcjgc+X43DAOPx/OHux9cbLeE3/N4vP/IHj16NG3atMk373KusWKaZqEf4yuFLh8//fQTnTt3zvt9+PDhAAwePJixY8fy5JNPkpWVxUMPPcSpU6do06YN33zzDRERvtk8Ujm8Mn9q/CeG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RVI+li5dytChQ1m1ahULFy7E5XLRrVs3MjIy8pZ58803eeedd/jggw9ISkoiNjaWrl27kp6eDsChQ4c4dOgQ//73v9m4cSNjx47lq6++yrvA3O89+eSTxMXFFcXLERERER/yyw6n565Wu3TpUq677jpM0yQuLo7HHnuMp556CvCOXMTExPDGG2/wl7/85YLPM2XKFAYNGkRGRgZBQb8eqLNgwQKGDx/OtGnTaNSoEevWraNZs2ZF/bJERETkMvhln49zm0oqVKgAwN69ezly5AjdunXLWyYkJISOHTuycuXKiz5PZGRkvuJx9OhRHnjgAT7//PO8q1+KiIhI4Cry8mGaJsOHD6d9+/Y0btwYgCNHjgAQExOTb9mYmJi8eb934sQJ/vWvf+UbFTFNkyFDhvDggw/SqlWrInoFIiIi4ktFfpKxYcOGsWHDhgtesfb3l8M2TfOCl8hOS0vj5ptvpmHDhvzzn//Mm/6f//yHtLQ0nnnmGd8HFxERkSJRpCMfDz/8MLNnz2bx4sVUq1Ytb3psbCzAeaMcKSkp542GpKen0717d8qWLcuMGTNwOBx58xYtWsSqVasICQkhKCgo75LcrVq1YvDgwUX1skREROQKFEn5ME2TYcOGMX36dBYtWkRCQkK++QkJCcTGxrJw4cK8abm5uSxdupR27drlTUtLS6Nbt24EBwcze/ZsQkND8z3P+++/z88//8z69etZv3498+fPB2DSpEm8+uqrRfHSRERE5AoVyWaXoUOHMmHCBGbNmkVERETeCEdUVBRhYWEYhsFjjz3Ga6+9RmJiIomJibz22muEh4dz5513At4Rj27dupGZmckXX3xBWloaaWlpAFSuXBm73U716tXzrbds2bIA1K5dO99Ii4iIiASOIikfI0eOBKBTp075po8ZM4YhQ4YA3vNyZGVl8dBDD3Hq1CnatGnDN998Q0REBABr1qxh9erVAHmbU87Zu3cvNWvWLIroIiIiUsR0YTkRERHxK13bRURERPxK5UNERET8SuVDRERE/ErlQ0RERPxK5UNERET8SuVDRERE/ErlQ0RERPxK5UNEfGLJkiUYhsHp06etjiIiAU4nGRORy9KpUyeaNWvGu+++C3ivz3Ty5EliYmIueHVqEZFziuT06iJS+gQHB+ddsVpE5GK02UVECm3IkCEsXbqU9957D8MwMAyDsWPH5tvsMnbsWMqVK8fcuXOpV68e4eHh9O/fn4yMDMaNG0fNmjUpX748Dz/8MG63O++5c3NzefLJJ6latSplypShTZs2LFmyxJoXKiJFQiMfIlJo7733Hjt27KBx48a8/PLLAGzevPm85TIzM3n//feZOHEi6enp9OvXj379+lGuXDnmz5/Pnj17uPXWW2nfvj0DBw4E4E9/+hP79u1j4sSJxMXFMWPGDLp3787GjRtJTEz06+sUkaKh8iEihRYVFUVwcDDh4eF5m1q2bdt23nJOp5ORI0dSu3ZtAPr378/nn3/O0aNHKVu2LA0bNqRz584sXryYgQMHsnv3br788kt++eUX4uLiAHjiiSf46quvGDNmDK+99pr/XqSIFBmVDxEpMuHh4XnFAyAmJoaaNWtStmzZfNNSUlIAWLt2LaZpUrdu3XzPk5OTQ8WKFf0TWkSKnMqHiBQZh8OR73fDMC44zePxAODxeLDb7axZswa73Z5vud8WFhEp3lQ+ROSyBAcH59tR1BeaN2+O2+0mJSWFDh06+PS5RSRw6GgXEbksNWvWZPXq1ezbt4/jx4/njV5cibp163LXXXdxzz33MH36dPbu3UtSUhJvvPEG8+fP90FqEQkEKh8iclmeeOIJ7HY7DRs2pHLlyhw4cMAnzztmzBjuuece/va3v1GvXj169erF6tWriY+P98nzi4j1dIZTERER8SuNfIiIiIhfqXyIiIiIX6l8iIiIiF+pfIiIiIhfqXyIiIiIX6l8iIiIiF+pfIiIiIhfqXyIiIiIX6l8iIiIiF+pfIiIiIhfqXyIiIiIX6l8iIiIiF/9PxPCqQTKfxPPAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# first, load in the simple model of case 1. Copy it.\n", "case2_example1 = case1(\"case2_example3\")\n", @@ -2194,7 +184,7 @@ }, { "cell_type": "markdown", - "id": "c2a05bd1-bb84-4221-9b79-87a02066de8e", + "id": "17", "metadata": {}, "source": [ "### Example 4: low target level in third basin, results in incorrect flow direction\n", @@ -2204,295 +194,10 @@ }, { "cell_type": "code", - "execution_count": 32, - "id": "b7244d23-d1da-48a7-83c2-64d361a10470", + "execution_count": null, + "id": "18", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
timenode_idstoragelevelinflow_rateoutflow_ratestorage_rateprecipitationevaporationdrainageinfiltrationbalance_errorrelative_error
02024-01-01 00:00:0030.0000001.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
12024-01-01 00:00:0040.0000000.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
22024-01-01 00:00:0082250.0127501.5000000.00.167-0.1671580.00.0001730.00.0-1.552110e-05-2.0
32024-01-01 00:01:0030.0000001.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
42024-01-01 00:01:0040.0000000.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
..........................................
388752024-01-09 23:58:0040.0000000.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
388762024-01-09 23:58:008202.6649730.4501780.00.000-0.0000520.00.0000520.00.0-1.265903e-10-2.0
388772024-01-09 23:59:0030.0000001.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
388782024-01-09 23:59:0040.0000000.0000000.00.0000.0000000.00.0000000.00.00.000000e+000.0
388792024-01-09 23:59:008202.6618460.4501750.00.000-0.0000520.00.0000520.00.0-1.265905e-10-2.0
\n", - "

38880 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " time node_id storage level inflow_rate \\\n", - "0 2024-01-01 00:00:00 3 0.000000 1.000000 0.0 \n", - "1 2024-01-01 00:00:00 4 0.000000 0.000000 0.0 \n", - "2 2024-01-01 00:00:00 8 2250.012750 1.500000 0.0 \n", - "3 2024-01-01 00:01:00 3 0.000000 1.000000 0.0 \n", - "4 2024-01-01 00:01:00 4 0.000000 0.000000 0.0 \n", - "... ... ... ... ... ... \n", - "38875 2024-01-09 23:58:00 4 0.000000 0.000000 0.0 \n", - "38876 2024-01-09 23:58:00 8 202.664973 0.450178 0.0 \n", - "38877 2024-01-09 23:59:00 3 0.000000 1.000000 0.0 \n", - "38878 2024-01-09 23:59:00 4 0.000000 0.000000 0.0 \n", - "38879 2024-01-09 23:59:00 8 202.661846 0.450175 0.0 \n", - "\n", - " outflow_rate storage_rate precipitation evaporation drainage \\\n", - "0 0.000 0.000000 0.0 0.000000 0.0 \n", - "1 0.000 0.000000 0.0 0.000000 0.0 \n", - "2 0.167 -0.167158 0.0 0.000173 0.0 \n", - "3 0.000 0.000000 0.0 0.000000 0.0 \n", - "4 0.000 0.000000 0.0 0.000000 0.0 \n", - "... ... ... ... ... ... \n", - "38875 0.000 0.000000 0.0 0.000000 0.0 \n", - "38876 0.000 -0.000052 0.0 0.000052 0.0 \n", - "38877 0.000 0.000000 0.0 0.000000 0.0 \n", - "38878 0.000 0.000000 0.0 0.000000 0.0 \n", - "38879 0.000 -0.000052 0.0 0.000052 0.0 \n", - "\n", - " infiltration balance_error relative_error \n", - "0 0.0 0.000000e+00 0.0 \n", - "1 0.0 0.000000e+00 0.0 \n", - "2 0.0 -1.552110e-05 -2.0 \n", - "3 0.0 0.000000e+00 0.0 \n", - "4 0.0 0.000000e+00 0.0 \n", - "... ... ... ... \n", - "38875 0.0 0.000000e+00 0.0 \n", - "38876 0.0 -1.265903e-10 -2.0 \n", - "38877 0.0 0.000000e+00 0.0 \n", - "38878 0.0 0.000000e+00 0.0 \n", - "38879 0.0 -1.265905e-10 -2.0 \n", - "\n", - "[38880 rows x 13 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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GElOTtbp06c1b9485eXlKT4+Xps3b1ZMTIwkKS8vr9o1RwAAAMp4vc6IGVhnBAAA66mXdUYAAADqGmEEAACYijACAABMRRgBAACmIowAAABTEUYAAICpCCMAAMBUhBEAAGAqwggAADAVYQQAAJiKMAIAAExFGAEAAKYijAAAAFMRRgAAgKkIIwAAwFSEEQAAYCrCCAAAMBVhBAAAmIowAgAATEUYAQAApiKMAAAAUxFGAACAqQgjAADAVIQRAABgKsIIAAAwFWEEAACYijACAABMRRgBAACmIowAAABTEUYAAICpCCMAAMBUhBEAAGAqwggAADAVYQQAAJiqRmFk8eLFio2NVXBwsBISErRr165K9924caOGDh2qa6+9VmFhYerfv7/efvvtGhcMAAB8i9dhJD09XTNmzNDs2bN14MABDRo0SElJScrNza1w/507d2ro0KHavHmzMjMzNXjwYI0YMUIHDhyodfEAAMD6bIZhGN4c0LdvX/Xu3VtLlixxbYuLi9OoUaOUlpbm0Tm6d++u5ORkPfHEEx7t73A4FB4eroKCAoWFhXlTLgAAMImn399e9YwUFRUpMzNTiYmJbtsTExO1e/duj87hdDp15swZtWjRotJ9CgsL5XA43F4AAMA3eRVGTp06pdLSUkVERLhtj4iI0IkTJzw6x/PPP69z585pzJgxle6Tlpam8PBw1ys6OtqbMgEAgIXUaAKrzWZze28YRrltFVm3bp3mzJmj9PR0tW7dutL9UlNTVVBQ4HodO3asJmUCAAAL8Pdm51atWslut5frBcnPzy/XW3Kl9PR0TZ48Wa+//rqGDBlS5b5BQUEKCgrypjQAAGBRXvWMBAYGKiEhQRkZGW7bMzIyNGDAgEqPW7dunSZOnKg//vGPGj58eM0qBQAAPsmrnhFJSklJ0bhx49SnTx/1799fy5cvV25urqZOnSrp0hDLV199pddee03SpSAyfvx4LVy4UP369XP1qoSEhCg8PLwOmwIAAKzI6zCSnJys06dPa968ecrLy1N8fLw2b96smJgYSVJeXp7bmiPLli1TSUmJpk2bpmnTprm2T5gwQWvWrKl9CwAAgKV5vc6IGVhnBAAA66mXdUYAAADqGmEEAACYijACAABMRRgBAACmIowAAABTEUYAAICpCCMAAMBUhBEAAGAqwggAADAVYQQAAJiKMAIA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DmjQoEFKSkpydZ2eO3dON910k5555hmTK/VOUVGRMjMzlZiY6LY9MTFRu3fvrvCYgoIC2Ww2NW/evAEqrDlv21ZUVKTly5crPDxcPXv2bKgya8STtjmdTo0bN06PPvqounfvbkaZNeLp72379u1q3bq1OnfurJ///OfKz89v6FK9Vl3bnE6n3nrrLXXu3Fm33367Wrdurb59+2rTpk3mFOwlb//OnTx5Um+99ZYmT57cUCXWmCdtGzhwoN5880199dVXMgxD27Zt06effqrbb7/djJI9Vl3bCgsLJUnBwcGuz+x2uwIDA/Xee+81aK1maFRh5IUXXtDkyZM1ZcoUxcXFacGCBYqOjnaNB44bN05PPPGEhgwZYnKl3jl16pRKS0sVERHhtj0iIkInTpwot//Fixc1a9YsjR07ttEv8uZp2/72t7+padOmCg4O1osvvqiMjAy1atWqocv1iidte/bZZ+Xv76/p06ebUWKNedK2pKQkrV27Vu+++66ef/557du3T7fddpvrH83Gqrq25efn6+zZs3rmmWc0bNgwbd26VT/+8Y81evRo7dixw6SqPeftvyevvvqqmjVrptGjRzdUiTXmSdteeukldevWTW3btlVgYKCGDRumxYsXa+DAgWaU7LHq2ta1a1fFxMQoNTVV3377rYqKivTMM8/oxIkTysvLM6nqhtNonk1TlhpnzZrltr2q3gOrsdlsbu8Nwyi3rbi4WHfffbecTqcWL17ckOXVSnVtGzx4sLKysnTq1CmtWLFCY8aM0d69e9W6deuGLtVrlbUtMzNTCxcu1AcffFBuH6uo6veWnJzs2h4fH68+ffooJiZGb731liW+2Cprm9PplCSNHDlSDz/8sCSpV69e2r17t5YuXapbbrmlwWutCU/+PZGkVatW6Z577nH7P+7Grqq2vfTSS3r//ff15ptvKiYmRjt37tT999+vyMhIS/yPamVtCwgI0IYNGzR58mS1aNFCdrtdQ4YMUVJSkkmVNqxG0zPibdq3klatWslut5drR35+vlt7i4uLNWbMGOXk5CgjI6PR94pInretSZMm6tixo/r166eVK1fK399fK1eubOhyvVJd23bt2qX8/Hy1a9dO/v7+8vf319GjR/XII4+offv25hTtIU9/b5eLjIxUTExMo5/dX13bWrVqJX9/f3Xr1s3t87i4OEvcTePN727Xrl365JNPNGXKlIYsscaqa9uFCxf0+OOP64UXXtCIESPUo0cPPfDAA0pOTtZvf/tbk6r2jCe/t4SEBGVlZem7775TXl6etmzZotOnTys2NtaMkhtUowkjZTxN+1YSGBiohIQEZWRkuG3PyMjQgAEDJH0fRD777DP94x//UMuWLc0o1WuetK0ihmE0+u7+6to2btw4ffjhh8rKynK9oqKi9Oijj+rtt982qWrP1OT3dvr0aR07dkyRkZENUWKNVde2wMBA3Xjjjfrkk0/cPv/0008VExPTkKXWiDe/u5UrVyohIaHRz88qU13biouLVVxcXO4JsHa73dXj1Vh583sLDw/Xtddeq88++0z79+/XyJEjG7JUc5g0cbacwsJCw263Gxs3bnTbPn36dOPmm29225aTk2O5u2nKbulauXKlcejQIWPGjBlGkyZNjCNHjhjFxcXGnXfeabRt29bIyspyuyWvsLDQ7NKrVVXbzp49a6Smphp79uwxjhw5YmRmZhqTJ082goKC3GaNN1ZVta0iVrqbpqq2nTlzxnjkkUeM3bt3Gzk5Oca2bduM/v37G9ddd53hcDjMLr1a1f3eNm7caAQEBBjLly83PvvsM+Pll1827Ha7sWvXLpMr94wn/10WFBQYoaGhxpIlS0ys1HvVte2WW24xunfvbmzbts344osvjNWrVxvBwcHG4sWLTa68etW17U9/+pOxbds24/Dhw8amTZuMmJgYY/To0SZX3TAaTRgxjEu3Pf3iF79w2xYXF1fudjUrhhHDuHTbckxMjBEYGGj07t3b2LFjh2EY37enote2bdvMLdpDlbXtwoULxo9//GMjKirKCAwMNCIjI40777zT+Ne//mVyxZ6rrG0VsVIYMYzK23b+/HkjMTHRuPbaa42AgACjXbt2xoQJE4zc3FyTK/Zcdb+3lStXGh07djSCg4ONnj17WmKdistV175ly5YZISEhxnfffWdShTVXVdvy8vKMiRMnGlFRUUZwcLDRpUsX4/nnnzecTqeJFXuuqrYtXLjQaNu2revv3K9+9StL/A9pXWhUD8pLT0/XuHHjtHTpUvXv31/Lly/XihUr9NFHHykmJkbffPONcnNzdfz4cQ0fPlzr169Xly5d1KZNG7Vp08bs8gEAQA00qjAiXVoq97nnnlNeXp7i4+P14osv6uabb5YkrVmzRpMmTSp3zJNPPqk5c+Y0cKUAAKAuNLowAgAAri6N7m4aAABwdSGMAAAAUxFGAACAqQgjAADAVIQRAABgKsIIAAAwlelhZOLEiRo1apTZZQAAAJOYHkYAAMDVrVGFkS1btmjgwIFq3ry5WrZsqf/5n//R4cOHXZ8fOXJENptNGzdu1ODBgxUaGqqePXtqz549JlYNAABqo1GFkXPnziklJUX79u3TO++8Iz8/P/34xz8u92jo2bNna+bMmcrKylLnzp3105/+VCUlJSZVDQAAasPf7AIud9ddd7m9X7lypVq3bq1Dhw4pPj7etX3mzJkaPny4JGnu3Lnq3r27Pv/8c3Xt2rVB6wUAALXXqHpGDh8+rLFjx6pDhw4KCwtTbGysJCk3N9dtvx49erj+HBkZKUnKz89vuEIBAECdaVQ9IyNGjFB0dLRWrFihqKgoOZ1OxcfHq6ioyG2/gIAA159tNpsklRvKAQAA1tBowsjp06eVnZ2tZcuWadCgQZKk9957z+SqAABAfWs0YeSaa65Ry5YttXz5ckVGRio3N1ezZs0yuywAAFDPTJ8z4nQ65e/vLz8/P61fv16ZmZmKj4/Xww8/rN/85jdmlwcAAOqZzTAMw8wChg0bpo4dO2rRokVmlgEAAExiWs/It99+q7feekvbt2/XkCFDzCoDAACYzLQ5I/fee6/27dunRx55RCNHjjSrDAAAYDLTh2kAAMDVzfQJrAAA4OpGGAEAAKZqkDCSlpamG2+8Uc2aNVPr1q01atQoffLJJ277GIahOXPmKCoqSiEhIbr11lv10UcfuT7/5ptv9OCDD6pLly4KDQ1Vu3btNH36dBUUFFR4zcLCQvXq1Us2m01ZWVn12TwAAFALDRJGduzYoWnTpun9999XRkaGSkpKlJiYqHPnzrn2ee655/TCCy9o0aJF2rdvn9q0aaOhQ4fqzJkzkqTjx4/r+PHj+u1vf6uDBw9qzZo12rJliyZPnlzhNX/5y18qKiqqIZoHAABqwZQJrF9//bVat26tHTt26Oabb5ZhGIqKitKMGTP02GOPSbrUsxEREaFnn31W9913X4Xnef311/Wzn/1M586dk7//9zcG/f3vf1dKSoo2bNig7t2768CBA+rVq1dDNA0AAHjJlDkjZUMrLVq0kCTl5OToxIkTSkxMdO0TFBSkW265Rbt3767yPGFhYW5B5OTJk/r5z3+u3//+9woNDa2nFgAAgLrS4GHEMAylpKRo4MCBio+PlySdOHFCkhQREeG2b0REhOuzK50+fVq//vWv3XpNDMPQxIkTNXXqVPXp06eeWgAAAOpSgy969sADD+jDDz+s8Im8NpvN7b1hGOW2SZLD4dDw4cPVrVs3Pfnkk67tL7/8shwOh1JTU+u+cAAAUC8atGfkwQcf1Jtvvqlt27apbdu2ru1t2rSRpHK9IPn5+eV6S86cOaNhw4apadOmeuONNxQQEOD67N1339X777+voKAg+fv7q2PHjpKkPn36aMKECfXVLAAAUAsNEkYMw9ADDzygjRs36t1331VsbKzb57GxsWrTpo0yMjJc24qKirRjxw4NGDDAtc3hcCgxMVGBgYF68803FRwc7Hael156Sf/+97+VlZWlrKwsbd68WZKUnp6up59+uh5bCAAAaqpBhmmmTZumP/7xj/rLX/6iZs2auXpAwsPDFRISIpvNphkzZmj+/Pnq1KmTOnXqpPnz5ys0NFRjx46VdKlHJDExUefPn9cf/vAHORwOORwOSdK1114ru92udu3auV23adOmkqTrr7/erScGAAA0Hg0SRpYsWSJJuvXWW922r169WhMnTpR0aV2QCxcu6P7779e3336rvn37auvWrWrWrJkkKTMzU3v37pUk1/BLmZycHLVv375e2wAAAOoHD8oDAACm4tk0AADAVIQRAABgKsIIAAAwFWEEAACYijACAABMRRgBAACmIowAAABTEUYA1Jvt27fLZrPpu+++M7sUAI0Yi54BqDO33nqrevXqpQULFki69Iypb775RhERERU+gRsApAZaDh7A1SkwMND1VG4AqAzDNADqxMSJE7Vjxw4tXLhQNptNNptNa9ascRumWbNmjZo3b66//e1v6tKli0JDQ/WTn/xE586d06uvvqr27dvrmmuu0YMPPqjS0lLXuYuKivTLX/5S1113nZo0aaK+fftq+/bt5jQUQJ2jZwRAnVi4cKE+/fRTxcfHa968eZKkjz76qNx+58+f10svvaT169frzJkzGj16tEaPHq3mzZtr8+bN+uKLL3TXXXdp4MCBSk5OliRNmjRJR44c0fr16xUVFaU33nhDw4YN08GDB9WpU6cGbSeAukcYAVAnwsPDFRgYqNDQUNfQzMcff1xuv+LiYi1ZskTXX3+9JOknP/mJfv/73+vkyZNq2rSpunXrpsGDB2vbtm1KTk7W4cOHtW7dOn355ZeKioqSJM2cOVNbtmzR6tWrNX/+/IZrJIB6QRgB0KBCQ0NdQUSSIiIi1L59ezVt2tRtW35+viTpgw8+kGEY6ty5s9t5CgsL1bJly4YpGkC9IowAaFABAQFu7202W4XbnE6nJMnpdMputyszM1N2u91tv8sDDADrIowAqDOBgYFuE0/rwg033KDS0lLl5+dr0KBBdXpuAI0Dd9MAqDPt27fX3r17deTIEZ06dcrVu1EbnTt31j333KPx48dr48aNysnJ0b59+/Tss89q8+bNdVA1ALMRRgDUmZkzZ8put6tbt2669tprlZubWyfnXb16tcaPH69HHnlEXbp00Z133qm9e/cqOjq6Ts4PwFyswAoAAExFzwgAADAVYQQAAJiKMAIAAExFGAEAAKYijAAAAFMRRgAAgKkIIwAAwFSEEQAAYCrCCAAAMBVhBAAAmIowAgAATEUYAQAApvr/mijkO0WUlwoAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# first, load in the simple model of case 1. Copy it.\n", "case2_example4 = case1(\"case2_example4\")\n", @@ -2505,7 +210,7 @@ }, { "cell_type": "raw", - "id": "d65f9fa7-70e8-4206-81ec-71a64b742083", + "id": "19", "metadata": {}, "source": [ "Volgende case zou kunnen zijn dat er tussen twee peilgebieden (met wel of niet andere target levels) er outlets zijn, die van de een naar de ander gaan, en andersom. Maar in principe verwacht ik daar geen gekke situaties: de outlet laat alleen water stromen als dit onder vrij verval kan, en pompt geen water omhoog. Het enige wat wel gek zou kunnen worden, is als beide peilen rond hetzelfde niveau komen. Dan zou het water de ene tijdstap van links naar rechts kunnen stromen, en de andere momenten de andere kant op. Ik kan me voorstellen dat dit tot instabiliteiten leidt. Weet alleen niet zeker of dit gaat optreden bij simpele voorbeelden als hier." @@ -2513,7 +218,7 @@ }, { "cell_type": "raw", - "id": "7575a037-5d76-469f-a2c0-021248515678", + "id": "20", "metadata": {}, "source": [ "Wat wel interessant zou zijn is het toch wel toevoegen van ContinuousControls. Eerst leek dit niet een logische stap, omdat ik wilde dat de outlet zou luisteren naar boven- en benedenstroomse peil. Maar nu doet dat het eigenlijk alleen naar bovenstrooms. \n", @@ -2523,7 +228,7 @@ }, { "cell_type": "raw", - "id": "2776ed89-2c4a-4fe2-b50f-fb2a9eb707e2", + "id": "21", "metadata": {}, "source": [ "Conclusie(?): de discrete controls moeten OOK gaan luisteren naar benedenstroomse peil. Dit toch wel doen aan de hand van de vier verschillende opties, afhankelijk wat de streefpeil van peilgebied 1 en peilgebied 2 is. \n", @@ -2533,7 +238,7 @@ }, { "cell_type": "raw", - "id": "76c92c05-e7b1-4c9c-a763-b54dfbfb1c5d", + "id": "22", "metadata": {}, "source": [ "1) Hoe verhoudt dit zich tot de min_crest_level en een enkele listen_to_node?\n", @@ -2554,7 +259,7 @@ }, { "cell_type": "raw", - "id": "b43144a5-e2fc-486b-a2ea-6c81a295abf7", + "id": "23", "metadata": {}, "source": [ "Conclusie: vorige conclusie is correct. Luisteren naar zowel boven- als benedestrooms." @@ -2562,7 +267,7 @@ }, { "cell_type": "raw", - "id": "672b28d7-806a-42a3-a584-15ff3c59273f", + "id": "24", "metadata": {}, "source": [ "Stappenplan voor AGV:\n", @@ -2573,7 +278,7 @@ }, { "cell_type": "markdown", - "id": "15e38a1d-5017-4432-9538-4a94f5c27937", + "id": "25", "metadata": {}, "source": [ "# Thrashbin" @@ -2582,7 +287,7 @@ { "cell_type": "code", "execution_count": null, - "id": "042e3e2b-1fbe-4932-ba8b-ce878acc8af5", + "id": "26", "metadata": {}, "outputs": [], "source": [ diff --git a/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb b/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb index c809338..4a3f38b 100644 --- a/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb +++ b/src/peilbeheerst_model/Parametrize/AmstelGooienVecht_parametrize.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -98,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -135,19 +135,9 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Processed all actions\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "name = \"Ron Bruijns (HKV)\"\n", "versie = \"2024_8_8\"\n", @@ -175,7 +165,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -194,7 +184,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -203,7 +193,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -213,7 +203,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -243,7 +233,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -254,1530 +244,9 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:Processing Basin Node ID: 1\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1038\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1039\n", - "INFO:root:Connected new Basin Node ID: 1039 to original Basin Node ID: 1 via Manning Resistance Node ID: 1038\n", - "INFO:root:Processing Basin Node ID: 2\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1040\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1041\n", - "INFO:root:Connected new Basin Node ID: 1041 to original Basin Node ID: 2 via Manning Resistance Node ID: 1040\n", - "INFO:root:Processing Basin Node ID: 3\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1042\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1043\n", - "INFO:root:Connected new Basin Node ID: 1043 to original Basin Node ID: 3 via Manning Resistance Node ID: 1042\n", - "INFO:root:Processing Basin Node ID: 4\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1044\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1045\n", - "INFO:root:Connected new Basin Node ID: 1045 to original Basin Node ID: 4 via Manning Resistance Node ID: 1044\n", - "INFO:root:Processing Basin Node ID: 5\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1046\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1047\n", - "INFO:root:Connected new Basin Node ID: 1047 to original Basin Node ID: 5 via Manning Resistance Node ID: 1046\n", - "INFO:root:Processing Basin Node ID: 6\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1048\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1049\n", - "INFO:root:Connected new Basin Node ID: 1049 to original Basin Node ID: 6 via Manning Resistance Node ID: 1048\n", - "INFO:root:Processing Basin Node ID: 7\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1050\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1051\n", - "INFO:root:Connected new Basin Node ID: 1051 to original Basin Node ID: 7 via Manning Resistance Node ID: 1050\n", - "INFO:root:Processing Basin Node ID: 8\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1052\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1053\n", - "INFO:root:Connected new Basin Node ID: 1053 to original Basin Node ID: 8 via Manning Resistance Node ID: 1052\n", - "INFO:root:Processing Basin Node ID: 9\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1054\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1055\n", - "INFO:root:Connected new Basin Node ID: 1055 to original Basin Node ID: 9 via Manning Resistance Node ID: 1054\n", - "INFO:root:Processing Basin Node ID: 10\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1056\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1057\n", - "INFO:root:Connected new Basin Node ID: 1057 to original Basin Node ID: 10 via Manning Resistance Node ID: 1056\n", - "INFO:root:Processing Basin Node ID: 11\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1058\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1059\n", - "INFO:root:Connected new Basin Node ID: 1059 to original Basin Node ID: 11 via Manning Resistance Node ID: 1058\n", - "INFO:root:Processing Basin Node ID: 12\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1060\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1061\n", - "INFO:root:Connected new Basin Node ID: 1061 to original Basin Node ID: 12 via Manning Resistance Node ID: 1060\n", - "INFO:root:Processing Basin Node ID: 13\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1062\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1063\n", - "INFO:root:Connected new Basin Node ID: 1063 to original Basin Node ID: 13 via Manning Resistance Node ID: 1062\n", - "INFO:root:Processing Basin Node ID: 14\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1064\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1065\n", - "INFO:root:Connected new Basin Node ID: 1065 to original Basin Node ID: 14 via Manning Resistance Node ID: 1064\n", - "INFO:root:Processing Basin Node ID: 15\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1066\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1067\n", - "INFO:root:Connected new Basin Node ID: 1067 to original Basin Node ID: 15 via Manning Resistance Node ID: 1066\n", - "INFO:root:Processing Basin Node ID: 17\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1068\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1069\n", - "INFO:root:Connected new Basin Node ID: 1069 to original Basin Node ID: 17 via Manning Resistance Node ID: 1068\n", - "INFO:root:Processing Basin Node ID: 18\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1070\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1071\n", - "INFO:root:Connected new Basin Node ID: 1071 to original Basin Node ID: 18 via Manning Resistance Node ID: 1070\n", - "INFO:root:Processing Basin Node ID: 24\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1072\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1073\n", - "INFO:root:Connected new Basin Node ID: 1073 to original Basin Node ID: 24 via Manning Resistance Node ID: 1072\n", - "INFO:root:Processing Basin Node ID: 25\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1074\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1075\n", - "INFO:root:Connected new Basin Node ID: 1075 to original Basin Node ID: 25 via Manning Resistance Node ID: 1074\n", - "INFO:root:Processing Basin Node ID: 26\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1076\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1077\n", - "INFO:root:Connected new Basin Node ID: 1077 to original Basin Node ID: 26 via Manning Resistance Node ID: 1076\n", - "INFO:root:Processing Basin Node ID: 27\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1078\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1079\n", - "INFO:root:Connected new Basin Node ID: 1079 to original Basin Node ID: 27 via Manning Resistance Node ID: 1078\n", - "INFO:root:Processing Basin Node ID: 28\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1080\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1081\n", - "INFO:root:Connected new Basin Node ID: 1081 to original Basin Node ID: 28 via Manning Resistance Node ID: 1080\n", - "INFO:root:Processing Basin Node ID: 29\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1082\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1083\n", - "INFO:root:Connected new Basin Node ID: 1083 to original Basin Node ID: 29 via Manning Resistance Node ID: 1082\n", - "INFO:root:Processing Basin Node ID: 30\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1084\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1085\n", - "INFO:root:Connected new Basin Node ID: 1085 to original Basin Node ID: 30 via Manning Resistance Node ID: 1084\n", - "INFO:root:Processing Basin Node ID: 31\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1086\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1087\n", - "INFO:root:Connected new Basin Node ID: 1087 to original Basin Node ID: 31 via Manning Resistance Node ID: 1086\n", - "INFO:root:Processing Basin Node ID: 32\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1088\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1089\n", - "INFO:root:Connected new Basin Node ID: 1089 to original Basin Node ID: 32 via Manning Resistance Node ID: 1088\n", - "INFO:root:Processing Basin Node ID: 33\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1090\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1091\n", - "INFO:root:Connected new Basin Node ID: 1091 to original Basin Node ID: 33 via Manning Resistance Node ID: 1090\n", - "INFO:root:Processing Basin Node ID: 34\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1092\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1093\n", - "INFO:root:Connected new Basin Node ID: 1093 to original Basin Node ID: 34 via Manning Resistance Node ID: 1092\n", - "INFO:root:Processing Basin Node ID: 35\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1094\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1095\n", - "INFO:root:Connected new Basin Node ID: 1095 to original Basin Node ID: 35 via Manning Resistance Node ID: 1094\n", - "INFO:root:Processing Basin Node ID: 36\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1096\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1097\n", - "INFO:root:Connected new Basin Node ID: 1097 to original Basin Node ID: 36 via Manning Resistance Node ID: 1096\n", - "INFO:root:Processing Basin Node ID: 37\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1098\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1099\n", - "INFO:root:Connected new Basin Node ID: 1099 to original Basin Node ID: 37 via Manning Resistance Node ID: 1098\n", - "INFO:root:Processing Basin Node ID: 38\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1100\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1101\n", - "INFO:root:Connected new Basin Node ID: 1101 to original Basin Node ID: 38 via Manning Resistance Node ID: 1100\n", - "INFO:root:Processing Basin Node ID: 39\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1102\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1103\n", - "INFO:root:Connected new Basin Node ID: 1103 to original Basin Node ID: 39 via Manning Resistance Node ID: 1102\n", - "INFO:root:Processing Basin Node ID: 40\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1104\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1105\n", - "INFO:root:Connected new Basin Node ID: 1105 to original Basin Node ID: 40 via Manning Resistance Node ID: 1104\n", - "INFO:root:Processing Basin Node ID: 41\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1106\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1107\n", - "INFO:root:Connected new Basin Node ID: 1107 to original Basin Node ID: 41 via Manning Resistance Node ID: 1106\n", - "INFO:root:Processing Basin Node ID: 42\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1108\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1109\n", - "INFO:root:Connected new Basin Node ID: 1109 to original Basin Node ID: 42 via Manning Resistance Node ID: 1108\n", - "INFO:root:Processing Basin Node ID: 43\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1110\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1111\n", - "INFO:root:Connected new Basin Node ID: 1111 to original Basin Node ID: 43 via Manning Resistance Node ID: 1110\n", - "INFO:root:Processing Basin Node ID: 44\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1112\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1113\n", - "INFO:root:Connected new Basin Node ID: 1113 to original Basin Node ID: 44 via Manning Resistance Node ID: 1112\n", - "INFO:root:Processing Basin Node ID: 45\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1114\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1115\n", - "INFO:root:Connected new Basin Node ID: 1115 to original Basin Node ID: 45 via Manning Resistance Node ID: 1114\n", - "INFO:root:Processing Basin Node ID: 46\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1116\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1117\n", - "INFO:root:Connected new Basin Node ID: 1117 to original Basin Node ID: 46 via Manning Resistance Node ID: 1116\n", - "INFO:root:Processing Basin Node ID: 47\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1118\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1119\n", - "INFO:root:Connected new Basin Node ID: 1119 to original Basin Node ID: 47 via Manning Resistance Node ID: 1118\n", - "INFO:root:Processing Basin Node ID: 48\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1120\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1121\n", - "INFO:root:Connected new Basin Node ID: 1121 to original Basin Node ID: 48 via Manning Resistance Node ID: 1120\n", - "INFO:root:Processing Basin Node ID: 49\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1122\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1123\n", - "INFO:root:Connected new Basin Node ID: 1123 to original Basin Node ID: 49 via Manning Resistance Node ID: 1122\n", - "INFO:root:Processing Basin Node ID: 50\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1124\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1125\n", - "INFO:root:Connected new Basin Node ID: 1125 to original Basin Node ID: 50 via Manning Resistance Node ID: 1124\n", - "INFO:root:Processing Basin Node ID: 51\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1126\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1127\n", - "INFO:root:Connected new Basin Node ID: 1127 to original Basin Node ID: 51 via Manning Resistance Node ID: 1126\n", - "INFO:root:Processing Basin Node ID: 52\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1128\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1129\n", - "INFO:root:Connected new Basin Node ID: 1129 to original Basin Node ID: 52 via Manning Resistance Node ID: 1128\n", - "INFO:root:Processing Basin Node ID: 53\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1130\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1131\n", - "INFO:root:Connected new Basin Node ID: 1131 to original Basin Node ID: 53 via Manning Resistance Node ID: 1130\n", - "INFO:root:Processing Basin Node ID: 54\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1132\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1133\n", - "INFO:root:Connected new Basin Node ID: 1133 to original Basin Node ID: 54 via Manning Resistance Node ID: 1132\n", - "INFO:root:Processing Basin Node ID: 55\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1134\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1135\n", - "INFO:root:Connected new Basin Node ID: 1135 to original Basin Node ID: 55 via Manning Resistance Node ID: 1134\n", - "INFO:root:Processing Basin Node ID: 56\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1136\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1137\n", - "INFO:root:Connected new Basin Node ID: 1137 to original Basin Node ID: 56 via Manning Resistance Node ID: 1136\n", - "INFO:root:Processing Basin Node ID: 57\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1138\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1139\n", - "INFO:root:Connected new Basin Node ID: 1139 to original Basin Node ID: 57 via Manning Resistance Node ID: 1138\n", - "INFO:root:Processing Basin Node ID: 58\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1140\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1141\n", - "INFO:root:Connected new Basin Node ID: 1141 to original Basin Node ID: 58 via Manning Resistance Node ID: 1140\n", - "INFO:root:Processing Basin Node ID: 59\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1142\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1143\n", - "INFO:root:Connected new Basin Node ID: 1143 to original Basin Node ID: 59 via Manning Resistance Node ID: 1142\n", - "INFO:root:Processing Basin Node ID: 60\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1144\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1145\n", - "INFO:root:Connected new Basin Node ID: 1145 to original Basin Node ID: 60 via Manning Resistance Node ID: 1144\n", - "INFO:root:Processing Basin Node ID: 61\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1146\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1147\n", - "INFO:root:Connected new Basin Node ID: 1147 to original Basin Node ID: 61 via Manning Resistance Node ID: 1146\n", - "INFO:root:Processing Basin Node ID: 62\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1148\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1149\n", - "INFO:root:Connected new Basin Node ID: 1149 to original Basin Node ID: 62 via Manning Resistance Node ID: 1148\n", - "INFO:root:Processing Basin Node ID: 63\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1150\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1151\n", - "INFO:root:Connected new Basin Node ID: 1151 to original Basin Node ID: 63 via Manning Resistance Node ID: 1150\n", - "INFO:root:Processing Basin Node ID: 64\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1152\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1153\n", - "INFO:root:Connected new Basin Node ID: 1153 to original Basin Node ID: 64 via Manning Resistance Node ID: 1152\n", - "INFO:root:Processing Basin Node ID: 65\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1154\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1155\n", - "INFO:root:Connected new Basin Node ID: 1155 to original Basin Node ID: 65 via Manning Resistance Node ID: 1154\n", - "INFO:root:Processing Basin Node ID: 66\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1156\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1157\n", - "INFO:root:Connected new Basin Node ID: 1157 to original Basin Node ID: 66 via Manning Resistance Node ID: 1156\n", - "INFO:root:Processing Basin Node ID: 67\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1158\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1159\n", - "INFO:root:Connected new Basin Node ID: 1159 to original Basin Node ID: 67 via Manning Resistance Node ID: 1158\n", - "INFO:root:Processing Basin Node ID: 68\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1160\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1161\n", - "INFO:root:Connected new Basin Node ID: 1161 to original Basin Node ID: 68 via Manning Resistance Node ID: 1160\n", - "INFO:root:Processing Basin Node ID: 69\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1162\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1163\n", - "INFO:root:Connected new Basin Node ID: 1163 to original Basin Node ID: 69 via Manning Resistance Node ID: 1162\n", - "INFO:root:Processing Basin Node ID: 70\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1164\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1165\n", - "INFO:root:Connected new Basin Node ID: 1165 to original Basin Node ID: 70 via Manning Resistance Node ID: 1164\n", - "INFO:root:Processing Basin Node ID: 71\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1166\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1167\n", - "INFO:root:Connected new Basin Node ID: 1167 to original Basin Node ID: 71 via Manning Resistance Node ID: 1166\n", - "INFO:root:Processing Basin Node ID: 72\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1168\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1169\n", - "INFO:root:Connected new Basin Node ID: 1169 to original Basin Node ID: 72 via Manning Resistance Node ID: 1168\n", - "INFO:root:Processing Basin Node ID: 73\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1170\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1171\n", - "INFO:root:Connected new Basin Node ID: 1171 to original Basin Node ID: 73 via Manning Resistance Node ID: 1170\n", - "INFO:root:Processing Basin Node ID: 74\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1172\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1173\n", - "INFO:root:Connected new Basin Node ID: 1173 to original Basin Node ID: 74 via Manning Resistance Node ID: 1172\n", - "INFO:root:Processing Basin Node ID: 75\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1174\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1175\n", - "INFO:root:Connected new Basin Node ID: 1175 to original Basin Node ID: 75 via Manning Resistance Node ID: 1174\n", - "INFO:root:Processing Basin Node ID: 76\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1176\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1177\n", - "INFO:root:Connected new Basin Node ID: 1177 to original Basin Node ID: 76 via Manning Resistance Node ID: 1176\n", - "INFO:root:Processing Basin Node ID: 77\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1178\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1179\n", - "INFO:root:Connected new Basin Node ID: 1179 to original Basin Node ID: 77 via Manning Resistance Node ID: 1178\n", - "INFO:root:Processing Basin Node ID: 78\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1180\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1181\n", - "INFO:root:Connected new Basin Node ID: 1181 to original Basin Node ID: 78 via Manning Resistance Node ID: 1180\n", - "INFO:root:Processing Basin Node ID: 79\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1182\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1183\n", - "INFO:root:Connected new Basin Node ID: 1183 to original Basin Node ID: 79 via Manning Resistance Node ID: 1182\n", - "INFO:root:Processing Basin Node ID: 80\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1184\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1185\n", - "INFO:root:Connected new Basin Node ID: 1185 to original Basin Node ID: 80 via Manning Resistance Node ID: 1184\n", - "INFO:root:Processing Basin Node ID: 81\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1186\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1187\n", - "INFO:root:Connected new Basin Node ID: 1187 to original Basin Node ID: 81 via Manning Resistance Node ID: 1186\n", - "INFO:root:Processing Basin Node ID: 82\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1188\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1189\n", - "INFO:root:Connected new Basin Node ID: 1189 to original Basin Node ID: 82 via Manning Resistance Node ID: 1188\n", - "INFO:root:Processing Basin Node ID: 83\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1190\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1191\n", - "INFO:root:Connected new Basin Node ID: 1191 to original Basin Node ID: 83 via Manning Resistance Node ID: 1190\n", - "INFO:root:Processing Basin Node ID: 87\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1192\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1193\n", - "INFO:root:Connected new Basin Node ID: 1193 to original Basin Node ID: 87 via Manning Resistance Node ID: 1192\n", - "INFO:root:Processing Basin Node ID: 88\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1194\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1195\n", - "INFO:root:Connected new Basin Node ID: 1195 to original Basin Node ID: 88 via Manning Resistance Node ID: 1194\n", - "INFO:root:Processing Basin Node ID: 89\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1196\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1197\n", - "INFO:root:Connected new Basin Node ID: 1197 to original Basin Node ID: 89 via Manning Resistance Node ID: 1196\n", - "INFO:root:Processing Basin Node ID: 90\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1198\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1199\n", - "INFO:root:Connected new Basin Node ID: 1199 to original Basin Node ID: 90 via Manning Resistance Node ID: 1198\n", - "INFO:root:Processing Basin Node ID: 91\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1200\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1201\n", - "INFO:root:Connected new Basin Node ID: 1201 to original Basin Node ID: 91 via Manning Resistance Node ID: 1200\n", - "INFO:root:Processing Basin Node ID: 92\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1202\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1203\n", - "INFO:root:Connected new Basin Node ID: 1203 to original Basin Node ID: 92 via Manning Resistance Node ID: 1202\n", - "INFO:root:Processing Basin Node ID: 93\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1204\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1205\n", - "INFO:root:Connected new Basin Node ID: 1205 to original Basin Node ID: 93 via Manning Resistance Node ID: 1204\n", - "INFO:root:Processing Basin Node ID: 94\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1206\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1207\n", - "INFO:root:Connected new Basin Node ID: 1207 to original Basin Node ID: 94 via Manning Resistance Node ID: 1206\n", - "INFO:root:Processing Basin Node ID: 95\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1208\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1209\n", - "INFO:root:Connected new Basin Node ID: 1209 to original Basin Node ID: 95 via Manning Resistance Node ID: 1208\n", - "INFO:root:Processing Basin Node ID: 96\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1210\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1211\n", - "INFO:root:Connected new Basin Node ID: 1211 to original Basin Node ID: 96 via Manning Resistance Node ID: 1210\n", - "INFO:root:Processing Basin Node ID: 98\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1212\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1213\n", - "INFO:root:Connected new Basin Node ID: 1213 to original Basin Node ID: 98 via Manning Resistance Node ID: 1212\n", - "INFO:root:Processing Basin Node ID: 99\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1214\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1215\n", - "INFO:root:Connected new Basin Node ID: 1215 to original Basin Node ID: 99 via Manning Resistance Node ID: 1214\n", - "INFO:root:Processing Basin Node ID: 100\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1216\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1217\n", - "INFO:root:Connected new Basin Node ID: 1217 to original Basin Node ID: 100 via Manning Resistance Node ID: 1216\n", - "INFO:root:Processing Basin Node ID: 101\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1218\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1219\n", - "INFO:root:Connected new Basin Node ID: 1219 to original Basin Node ID: 101 via Manning Resistance Node ID: 1218\n", - "INFO:root:Processing Basin Node ID: 102\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1220\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1221\n", - "INFO:root:Connected new Basin Node ID: 1221 to original Basin Node ID: 102 via Manning Resistance Node ID: 1220\n", - "INFO:root:Processing Basin Node ID: 103\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1222\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1223\n", - "INFO:root:Connected new Basin Node ID: 1223 to original Basin Node ID: 103 via Manning Resistance Node ID: 1222\n", - "INFO:root:Processing Basin Node ID: 104\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1224\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1225\n", - "INFO:root:Connected new Basin Node ID: 1225 to original Basin Node ID: 104 via Manning Resistance Node ID: 1224\n", - "INFO:root:Processing Basin Node ID: 105\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1226\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1227\n", - "INFO:root:Connected new Basin Node ID: 1227 to original Basin Node ID: 105 via Manning Resistance Node ID: 1226\n", - "INFO:root:Processing Basin Node ID: 106\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1228\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1229\n", - "INFO:root:Connected new Basin Node ID: 1229 to original Basin Node ID: 106 via Manning Resistance Node ID: 1228\n", - "INFO:root:Processing Basin Node ID: 107\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1230\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1231\n", - "INFO:root:Connected new Basin Node ID: 1231 to original Basin Node ID: 107 via Manning Resistance Node ID: 1230\n", - "INFO:root:Processing Basin Node ID: 108\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1232\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1233\n", - "INFO:root:Connected new Basin Node ID: 1233 to original Basin Node ID: 108 via Manning Resistance Node ID: 1232\n", - "INFO:root:Processing Basin Node ID: 109\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1234\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1235\n", - "INFO:root:Connected new Basin Node ID: 1235 to original Basin Node ID: 109 via Manning Resistance Node ID: 1234\n", - "INFO:root:Processing Basin Node ID: 110\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1236\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1237\n", - "INFO:root:Connected new Basin Node ID: 1237 to original Basin Node ID: 110 via Manning Resistance Node ID: 1236\n", - "INFO:root:Processing Basin Node ID: 111\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1238\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1239\n", - "INFO:root:Connected new Basin Node ID: 1239 to original Basin Node ID: 111 via Manning Resistance Node ID: 1238\n", - "INFO:root:Processing Basin Node ID: 112\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1240\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1241\n", - "INFO:root:Connected new Basin Node ID: 1241 to original Basin Node ID: 112 via Manning Resistance Node ID: 1240\n", - "INFO:root:Processing Basin Node ID: 113\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1242\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1243\n", - "INFO:root:Connected new Basin Node ID: 1243 to original Basin Node ID: 113 via Manning Resistance Node ID: 1242\n", - "INFO:root:Processing Basin Node ID: 114\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1244\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1245\n", - "INFO:root:Connected new Basin Node ID: 1245 to original Basin Node ID: 114 via Manning Resistance Node ID: 1244\n", - "INFO:root:Processing Basin Node ID: 116\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1246\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1247\n", - "INFO:root:Connected new Basin Node ID: 1247 to original Basin Node ID: 116 via Manning Resistance Node ID: 1246\n", - "INFO:root:Processing Basin Node ID: 117\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1248\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1249\n", - "INFO:root:Connected new Basin Node ID: 1249 to original Basin Node ID: 117 via Manning Resistance Node ID: 1248\n", - "INFO:root:Processing Basin Node ID: 118\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1250\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1251\n", - "INFO:root:Connected new Basin Node ID: 1251 to original Basin Node ID: 118 via Manning Resistance Node ID: 1250\n", - "INFO:root:Processing Basin Node ID: 119\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1252\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1253\n", - "INFO:root:Connected new Basin Node ID: 1253 to original Basin Node ID: 119 via Manning Resistance Node ID: 1252\n", - "INFO:root:Processing Basin Node ID: 120\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1254\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1255\n", - "INFO:root:Connected new Basin Node ID: 1255 to original Basin Node ID: 120 via Manning Resistance Node ID: 1254\n", - "INFO:root:Processing Basin Node ID: 121\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1256\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1257\n", - "INFO:root:Connected new Basin Node ID: 1257 to original Basin Node ID: 121 via Manning Resistance Node ID: 1256\n", - "INFO:root:Processing Basin Node ID: 122\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1258\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1259\n", - "INFO:root:Connected new Basin Node ID: 1259 to original Basin Node ID: 122 via Manning Resistance Node ID: 1258\n", - "INFO:root:Processing Basin Node ID: 123\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1260\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1261\n", - "INFO:root:Connected new Basin Node ID: 1261 to original Basin Node ID: 123 via Manning Resistance Node ID: 1260\n", - "INFO:root:Processing Basin Node ID: 124\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1262\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1263\n", - "INFO:root:Connected new Basin Node ID: 1263 to original Basin Node ID: 124 via Manning Resistance Node ID: 1262\n", - "INFO:root:Processing Basin Node ID: 125\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1264\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1265\n", - "INFO:root:Connected new Basin Node ID: 1265 to original Basin Node ID: 125 via Manning Resistance Node ID: 1264\n", - "INFO:root:Processing Basin Node ID: 126\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1266\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1267\n", - "INFO:root:Connected new Basin Node ID: 1267 to original Basin Node ID: 126 via Manning Resistance Node ID: 1266\n", - "INFO:root:Processing Basin Node ID: 127\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1268\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1269\n", - "INFO:root:Connected new Basin Node ID: 1269 to original Basin Node ID: 127 via Manning Resistance Node ID: 1268\n", - "INFO:root:Processing Basin Node ID: 128\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1270\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1271\n", - "INFO:root:Connected new Basin Node ID: 1271 to original Basin Node ID: 128 via Manning Resistance Node ID: 1270\n", - "INFO:root:Processing Basin Node ID: 129\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1272\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1273\n", - "INFO:root:Connected new Basin Node ID: 1273 to original Basin Node ID: 129 via Manning Resistance Node ID: 1272\n", - "INFO:root:Processing Basin Node ID: 130\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1274\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1275\n", - "INFO:root:Connected new Basin Node ID: 1275 to original Basin Node ID: 130 via Manning Resistance Node ID: 1274\n", - "INFO:root:Processing Basin Node ID: 131\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1276\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1277\n", - "INFO:root:Connected new Basin Node ID: 1277 to original Basin Node ID: 131 via Manning Resistance Node ID: 1276\n", - "INFO:root:Processing Basin Node ID: 132\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1278\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1279\n", - "INFO:root:Connected new Basin Node ID: 1279 to original Basin Node ID: 132 via Manning Resistance Node ID: 1278\n", - "INFO:root:Processing Basin Node ID: 133\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1280\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1281\n", - "INFO:root:Connected new Basin Node ID: 1281 to original Basin Node ID: 133 via Manning Resistance Node ID: 1280\n", - "INFO:root:Processing Basin Node ID: 134\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1282\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1283\n", - "INFO:root:Connected new Basin Node ID: 1283 to original Basin Node ID: 134 via Manning Resistance Node ID: 1282\n", - "INFO:root:Processing Basin Node ID: 135\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1284\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1285\n", - "INFO:root:Connected new Basin Node ID: 1285 to original Basin Node ID: 135 via Manning Resistance Node ID: 1284\n", - "INFO:root:Processing Basin Node ID: 136\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1286\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1287\n", - "INFO:root:Connected new Basin Node ID: 1287 to original Basin Node ID: 136 via Manning Resistance Node ID: 1286\n", - "INFO:root:Processing Basin Node ID: 137\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1288\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1289\n", - "INFO:root:Connected new Basin Node ID: 1289 to original Basin Node ID: 137 via Manning Resistance Node ID: 1288\n", - "INFO:root:Processing Basin Node ID: 138\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1290\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1291\n", - "INFO:root:Connected new Basin Node ID: 1291 to original Basin Node ID: 138 via Manning Resistance Node ID: 1290\n", - "INFO:root:Processing Basin Node ID: 139\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1292\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1293\n", - "INFO:root:Connected new Basin Node ID: 1293 to original Basin Node ID: 139 via Manning Resistance Node ID: 1292\n", - "INFO:root:Processing Basin Node ID: 140\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1294\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1295\n", - "INFO:root:Connected new Basin Node ID: 1295 to original Basin Node ID: 140 via Manning Resistance Node ID: 1294\n", - "INFO:root:Processing Basin Node ID: 141\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1296\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1297\n", - "INFO:root:Connected new Basin Node ID: 1297 to original Basin Node ID: 141 via Manning Resistance Node ID: 1296\n", - "INFO:root:Processing Basin Node ID: 142\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1298\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1299\n", - "INFO:root:Connected new Basin Node ID: 1299 to original Basin Node ID: 142 via Manning Resistance Node ID: 1298\n", - "INFO:root:Processing Basin Node ID: 143\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1300\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1301\n", - "INFO:root:Connected new Basin Node ID: 1301 to original Basin Node ID: 143 via Manning Resistance Node ID: 1300\n", - "INFO:root:Processing Basin Node ID: 144\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1302\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1303\n", - "INFO:root:Connected new Basin Node ID: 1303 to original Basin Node ID: 144 via Manning Resistance Node ID: 1302\n", - "INFO:root:Processing Basin Node ID: 145\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1304\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1305\n", - "INFO:root:Connected new Basin Node ID: 1305 to original Basin Node ID: 145 via Manning Resistance Node ID: 1304\n", - "INFO:root:Processing Basin Node ID: 146\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1306\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1307\n", - "INFO:root:Connected new Basin Node ID: 1307 to original Basin Node ID: 146 via Manning Resistance Node ID: 1306\n", - "INFO:root:Processing Basin Node ID: 147\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1308\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1309\n", - "INFO:root:Connected new Basin Node ID: 1309 to original Basin Node ID: 147 via Manning Resistance Node ID: 1308\n", - "INFO:root:Processing Basin Node ID: 148\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1310\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1311\n", - "INFO:root:Connected new Basin Node ID: 1311 to original Basin Node ID: 148 via Manning Resistance Node ID: 1310\n", - "INFO:root:Processing Basin Node ID: 149\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1312\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1313\n", - "INFO:root:Connected new Basin Node ID: 1313 to original Basin Node ID: 149 via Manning Resistance Node ID: 1312\n", - "INFO:root:Processing Basin Node ID: 150\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1314\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1315\n", - "INFO:root:Connected new Basin Node ID: 1315 to original Basin Node ID: 150 via Manning Resistance Node ID: 1314\n", - "INFO:root:Processing Basin Node ID: 151\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1316\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1317\n", - "INFO:root:Connected new Basin Node ID: 1317 to original Basin Node ID: 151 via Manning Resistance Node ID: 1316\n", - "INFO:root:Processing Basin Node ID: 152\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1318\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1319\n", - "INFO:root:Connected new Basin Node ID: 1319 to original Basin Node ID: 152 via Manning Resistance Node ID: 1318\n", - "INFO:root:Processing Basin Node ID: 153\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1320\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1321\n", - "INFO:root:Connected new Basin Node ID: 1321 to original Basin Node ID: 153 via Manning Resistance Node ID: 1320\n", - "INFO:root:Processing Basin Node ID: 154\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1322\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1323\n", - "INFO:root:Connected new Basin Node ID: 1323 to original Basin Node ID: 154 via Manning Resistance Node ID: 1322\n", - "INFO:root:Processing Basin Node ID: 155\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1324\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1325\n", - "INFO:root:Connected new Basin Node ID: 1325 to original Basin Node ID: 155 via Manning Resistance Node ID: 1324\n", - "INFO:root:Processing Basin Node ID: 156\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1326\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1327\n", - "INFO:root:Connected new Basin Node ID: 1327 to original Basin Node ID: 156 via Manning Resistance Node ID: 1326\n", - "INFO:root:Processing Basin Node ID: 157\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1328\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1329\n", - "INFO:root:Connected new Basin Node ID: 1329 to original Basin Node ID: 157 via Manning Resistance Node ID: 1328\n", - "INFO:root:Processing Basin Node ID: 158\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1330\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1331\n", - "INFO:root:Connected new Basin Node ID: 1331 to original Basin Node ID: 158 via Manning Resistance Node ID: 1330\n", - "INFO:root:Processing Basin Node ID: 159\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1332\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1333\n", - "INFO:root:Connected new Basin Node ID: 1333 to original Basin Node ID: 159 via Manning Resistance Node ID: 1332\n", - "INFO:root:Processing Basin Node ID: 160\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1334\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1335\n", - "INFO:root:Connected new Basin Node ID: 1335 to original Basin Node ID: 160 via Manning Resistance Node ID: 1334\n", - "INFO:root:Processing Basin Node ID: 161\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1336\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1337\n", - "INFO:root:Connected new Basin Node ID: 1337 to original Basin Node ID: 161 via Manning Resistance Node ID: 1336\n", - "INFO:root:Processing Basin Node ID: 162\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1338\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1339\n", - "INFO:root:Connected new Basin Node ID: 1339 to original Basin Node ID: 162 via Manning Resistance Node ID: 1338\n", - "INFO:root:Processing Basin Node ID: 164\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1340\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1341\n", - "INFO:root:Connected new Basin Node ID: 1341 to original Basin Node ID: 164 via Manning Resistance Node ID: 1340\n", - "INFO:root:Processing Basin Node ID: 165\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1342\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1343\n", - "INFO:root:Connected new Basin Node ID: 1343 to original Basin Node ID: 165 via Manning Resistance Node ID: 1342\n", - "INFO:root:Processing Basin Node ID: 166\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1344\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1345\n", - "INFO:root:Connected new Basin Node ID: 1345 to original Basin Node ID: 166 via Manning Resistance Node ID: 1344\n", - "INFO:root:Processing Basin Node ID: 167\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1346\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1347\n", - "INFO:root:Connected new Basin Node ID: 1347 to original Basin Node ID: 167 via Manning Resistance Node ID: 1346\n", - "INFO:root:Processing Basin Node ID: 168\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1348\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1349\n", - "INFO:root:Connected new Basin Node ID: 1349 to original Basin Node ID: 168 via Manning Resistance Node ID: 1348\n", - "INFO:root:Processing Basin Node ID: 169\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1350\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1351\n", - "INFO:root:Connected new Basin Node ID: 1351 to original Basin Node ID: 169 via Manning Resistance Node ID: 1350\n", - "INFO:root:Processing Basin Node ID: 170\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1352\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1353\n", - "INFO:root:Connected new Basin Node ID: 1353 to original Basin Node ID: 170 via Manning Resistance Node ID: 1352\n", - "INFO:root:Processing Basin Node ID: 171\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1354\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1355\n", - "INFO:root:Connected new Basin Node ID: 1355 to original Basin Node ID: 171 via Manning Resistance Node ID: 1354\n", - "INFO:root:Processing Basin Node ID: 172\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1356\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1357\n", - "INFO:root:Connected new Basin Node ID: 1357 to original Basin Node ID: 172 via Manning Resistance Node ID: 1356\n", - "INFO:root:Processing Basin Node ID: 173\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1358\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1359\n", - "INFO:root:Connected new Basin Node ID: 1359 to original Basin Node ID: 173 via Manning Resistance Node ID: 1358\n", - "INFO:root:Processing Basin Node ID: 174\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1360\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1361\n", - "INFO:root:Connected new Basin Node ID: 1361 to original Basin Node ID: 174 via Manning Resistance Node ID: 1360\n", - "INFO:root:Processing Basin Node ID: 175\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1362\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1363\n", - "INFO:root:Connected new Basin Node ID: 1363 to original Basin Node ID: 175 via Manning Resistance Node ID: 1362\n", - "INFO:root:Processing Basin Node ID: 176\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1364\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1365\n", - "INFO:root:Connected new Basin Node ID: 1365 to original Basin Node ID: 176 via Manning Resistance Node ID: 1364\n", - "INFO:root:Processing Basin Node ID: 177\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1366\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1367\n", - "INFO:root:Connected new Basin Node ID: 1367 to original Basin Node ID: 177 via Manning Resistance Node ID: 1366\n", - "INFO:root:Processing Basin Node ID: 178\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1368\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1369\n", - "INFO:root:Connected new Basin Node ID: 1369 to original Basin Node ID: 178 via Manning Resistance Node ID: 1368\n", - "INFO:root:Processing Basin Node ID: 179\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1370\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1371\n", - "INFO:root:Connected new Basin Node ID: 1371 to original Basin Node ID: 179 via Manning Resistance Node ID: 1370\n", - "INFO:root:Processing Basin Node ID: 180\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1372\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1373\n", - "INFO:root:Connected new Basin Node ID: 1373 to original Basin Node ID: 180 via Manning Resistance Node ID: 1372\n", - "INFO:root:Processing Basin Node ID: 181\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1374\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1375\n", - "INFO:root:Connected new Basin Node ID: 1375 to original Basin Node ID: 181 via Manning Resistance Node ID: 1374\n", - "INFO:root:Processing Basin Node ID: 182\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1376\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1377\n", - "INFO:root:Connected new Basin Node ID: 1377 to original Basin Node ID: 182 via Manning Resistance Node ID: 1376\n", - "INFO:root:Processing Basin Node ID: 183\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1378\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1379\n", - "INFO:root:Connected new Basin Node ID: 1379 to original Basin Node ID: 183 via Manning Resistance Node ID: 1378\n", - "INFO:root:Processing Basin Node ID: 184\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1380\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1381\n", - "INFO:root:Connected new Basin Node ID: 1381 to original Basin Node ID: 184 via Manning Resistance Node ID: 1380\n", - "INFO:root:Processing Basin Node ID: 185\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1382\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1383\n", - "INFO:root:Connected new Basin Node ID: 1383 to original Basin Node ID: 185 via Manning Resistance Node ID: 1382\n", - "INFO:root:Processing Basin Node ID: 186\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1384\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1385\n", - "INFO:root:Connected new Basin Node ID: 1385 to original Basin Node ID: 186 via Manning Resistance Node ID: 1384\n", - "INFO:root:Processing Basin Node ID: 188\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1386\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1387\n", - "INFO:root:Connected new Basin Node ID: 1387 to original Basin Node ID: 188 via Manning Resistance Node ID: 1386\n", - "INFO:root:Processing Basin Node ID: 189\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1388\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1389\n", - "INFO:root:Connected new Basin Node ID: 1389 to original Basin Node ID: 189 via Manning Resistance Node ID: 1388\n", - "INFO:root:Processing Basin Node ID: 190\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1390\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1391\n", - "INFO:root:Connected new Basin Node ID: 1391 to original Basin Node ID: 190 via Manning Resistance Node ID: 1390\n", - "INFO:root:Processing Basin Node ID: 191\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1392\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1393\n", - "INFO:root:Connected new Basin Node ID: 1393 to original Basin Node ID: 191 via Manning Resistance Node ID: 1392\n", - "INFO:root:Processing Basin Node ID: 192\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1394\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1395\n", - "INFO:root:Connected new Basin Node ID: 1395 to original Basin Node ID: 192 via Manning Resistance Node ID: 1394\n", - "INFO:root:Processing Basin Node ID: 193\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1396\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1397\n", - "INFO:root:Connected new Basin Node ID: 1397 to original Basin Node ID: 193 via Manning Resistance Node ID: 1396\n", - "INFO:root:Processing Basin Node ID: 194\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1398\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1399\n", - "INFO:root:Connected new Basin Node ID: 1399 to original Basin Node ID: 194 via Manning Resistance Node ID: 1398\n", - "INFO:root:Processing Basin Node ID: 195\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1400\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1401\n", - "INFO:root:Connected new Basin Node ID: 1401 to original Basin Node ID: 195 via Manning Resistance Node ID: 1400\n", - "INFO:root:Processing Basin Node ID: 196\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1402\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1403\n", - "INFO:root:Connected new Basin Node ID: 1403 to original Basin Node ID: 196 via Manning Resistance Node ID: 1402\n", - "INFO:root:Processing Basin Node ID: 197\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1404\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1405\n", - "INFO:root:Connected new Basin Node ID: 1405 to original Basin Node ID: 197 via Manning Resistance Node ID: 1404\n", - "INFO:root:Processing Basin Node ID: 198\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1406\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1407\n", - "INFO:root:Connected new Basin Node ID: 1407 to original Basin Node ID: 198 via Manning Resistance Node ID: 1406\n", - "INFO:root:Processing Basin Node ID: 199\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1408\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1409\n", - "INFO:root:Connected new Basin Node ID: 1409 to original Basin Node ID: 199 via Manning Resistance Node ID: 1408\n", - "INFO:root:Processing Basin Node ID: 200\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1410\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1411\n", - "INFO:root:Connected new Basin Node ID: 1411 to original Basin Node ID: 200 via Manning Resistance Node ID: 1410\n", - "INFO:root:Processing Basin Node ID: 201\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1412\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1413\n", - "INFO:root:Connected new Basin Node ID: 1413 to original Basin Node ID: 201 via Manning Resistance Node ID: 1412\n", - "INFO:root:Processing Basin Node ID: 202\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1414\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1415\n", - "INFO:root:Connected new Basin Node ID: 1415 to original Basin Node ID: 202 via Manning Resistance Node ID: 1414\n", - "INFO:root:Processing Basin Node ID: 203\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1416\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1417\n", - "INFO:root:Connected new Basin Node ID: 1417 to original Basin Node ID: 203 via Manning Resistance Node ID: 1416\n", - "INFO:root:Processing Basin Node ID: 204\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1418\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1419\n", - "INFO:root:Connected new Basin Node ID: 1419 to original Basin Node ID: 204 via Manning Resistance Node ID: 1418\n", - "INFO:root:Processing Basin Node ID: 205\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1420\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1421\n", - "INFO:root:Connected new Basin Node ID: 1421 to original Basin Node ID: 205 via Manning Resistance Node ID: 1420\n", - "INFO:root:Processing Basin Node ID: 207\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1422\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1423\n", - "INFO:root:Connected new Basin Node ID: 1423 to original Basin Node ID: 207 via Manning Resistance Node ID: 1422\n", - "INFO:root:Processing Basin Node ID: 208\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1424\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1425\n", - "INFO:root:Connected new Basin Node ID: 1425 to original Basin Node ID: 208 via Manning Resistance Node ID: 1424\n", - "INFO:root:Processing Basin Node ID: 209\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1426\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1427\n", - "INFO:root:Connected new Basin Node ID: 1427 to original Basin Node ID: 209 via Manning Resistance Node ID: 1426\n", - "INFO:root:Processing Basin Node ID: 210\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1428\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1429\n", - "INFO:root:Connected new Basin Node ID: 1429 to original Basin Node ID: 210 via Manning Resistance Node ID: 1428\n", - "INFO:root:Processing Basin Node ID: 211\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1430\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1431\n", - "INFO:root:Connected new Basin Node ID: 1431 to original Basin Node ID: 211 via Manning Resistance Node ID: 1430\n", - "INFO:root:Processing Basin Node ID: 212\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1432\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1433\n", - "INFO:root:Connected new Basin Node ID: 1433 to original Basin Node ID: 212 via Manning Resistance Node ID: 1432\n", - "INFO:root:Processing Basin Node ID: 213\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1434\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1435\n", - "INFO:root:Connected new Basin Node ID: 1435 to original Basin Node ID: 213 via Manning Resistance Node ID: 1434\n", - "INFO:root:Processing Basin Node ID: 214\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1436\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1437\n", - "INFO:root:Connected new Basin Node ID: 1437 to original Basin Node ID: 214 via Manning Resistance Node ID: 1436\n", - "INFO:root:Processing Basin Node ID: 215\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1438\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1439\n", - "INFO:root:Connected new Basin Node ID: 1439 to original Basin Node ID: 215 via Manning Resistance Node ID: 1438\n", - "INFO:root:Processing Basin Node ID: 216\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1440\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1441\n", - "INFO:root:Connected new Basin Node ID: 1441 to original Basin Node ID: 216 via Manning Resistance Node ID: 1440\n", - "INFO:root:Processing Basin Node ID: 217\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1442\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1443\n", - "INFO:root:Connected new Basin Node ID: 1443 to original Basin Node ID: 217 via Manning Resistance Node ID: 1442\n", - "INFO:root:Processing Basin Node ID: 218\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1444\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1445\n", - "INFO:root:Connected new Basin Node ID: 1445 to original Basin Node ID: 218 via Manning Resistance Node ID: 1444\n", - "INFO:root:Processing Basin Node ID: 219\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1446\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1447\n", - "INFO:root:Connected new Basin Node ID: 1447 to original Basin Node ID: 219 via Manning Resistance Node ID: 1446\n", - "INFO:root:Processing Basin Node ID: 220\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1448\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1449\n", - "INFO:root:Connected new Basin Node ID: 1449 to original Basin Node ID: 220 via Manning Resistance Node ID: 1448\n", - "INFO:root:Processing Basin Node ID: 221\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1450\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1451\n", - "INFO:root:Connected new Basin Node ID: 1451 to original Basin Node ID: 221 via Manning Resistance Node ID: 1450\n", - "INFO:root:Processing Basin Node ID: 222\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1452\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1453\n", - "INFO:root:Connected new Basin Node ID: 1453 to original Basin Node ID: 222 via Manning Resistance Node ID: 1452\n", - "INFO:root:Processing Basin Node ID: 223\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1454\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1455\n", - "INFO:root:Connected new Basin Node ID: 1455 to original Basin Node ID: 223 via Manning Resistance Node ID: 1454\n", - "INFO:root:Processing Basin Node ID: 224\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1456\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1457\n", - "INFO:root:Connected new Basin Node ID: 1457 to original Basin Node ID: 224 via Manning Resistance Node ID: 1456\n", - "INFO:root:Processing Basin Node ID: 225\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1458\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1459\n", - "INFO:root:Connected new Basin Node ID: 1459 to original Basin Node ID: 225 via Manning Resistance Node ID: 1458\n", - "INFO:root:Processing Basin Node ID: 226\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1460\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1461\n", - "INFO:root:Connected new Basin Node ID: 1461 to original Basin Node ID: 226 via Manning Resistance Node ID: 1460\n", - "INFO:root:Processing Basin Node ID: 227\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1462\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1463\n", - "INFO:root:Connected new Basin Node ID: 1463 to original Basin Node ID: 227 via Manning Resistance Node ID: 1462\n", - "INFO:root:Processing Basin Node ID: 228\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1464\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1465\n", - "INFO:root:Connected new Basin Node ID: 1465 to original Basin Node ID: 228 via Manning Resistance Node ID: 1464\n", - "INFO:root:Processing Basin Node ID: 229\n", - "INFO:root:Successfully added Manning Resistance node with Node ID: 1466\n", - "WARNING:root:Sub value for key 'concentration' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_external' is None or has no DataFrame\n", - "WARNING:root:Sub value for key 'concentration_state' is None or has no DataFrame\n", - "INFO:root:Successfully added new basin node with Node ID: 1467\n", - "INFO:root:Connected new Basin Node ID: 1467 to original Basin Node ID: 229 via Manning Resistance Node ID: 1466\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "All basins are larger than 100 m²\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "# Add storage basins\n", "model_name = \"AmstelGooienVecht_StorageBasins\"\n", @@ -1796,7 +265,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1805,7 +274,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1820,7 +289,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1843,7 +312,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1868,7 +337,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1885,7 +354,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1903,7 +372,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1919,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1928,62 +397,16 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DEBUG:pyproj:PROJ_ERROR: proj_create: unrecognized format / unknown name\n", - "DEBUG:pyproj:PROJ_ERROR: proj_create: unrecognized format / unknown name\n", - "DEBUG:pyproj:PROJ_ERROR: proj_create: unrecognized format / unknown name\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sturing has been added for the category Inlaat boezem, stuw\n", - "Sturing has been added for the category Uitlaat boezem, stuw\n", - "Sturing has been added for the category Reguliere stuw\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DEBUG:pyproj:PROJ_ERROR: proj_create: unrecognized format / unknown name\n", - "DEBUG:pyproj:PROJ_ERROR: proj_create: unrecognized format / unknown name\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sturing has been added for the category Inlaat buitenwater peilgebied, stuw\n", - "Sturing has been added for the category Uitlaat buitenwater peilgebied, stuw\n", - "No stuwen are found in the category of Boezem boezem, stuw\n", - "Sturing has been added for the category Inlaat boezem, gemaal\n", - "Sturing has been added for the category Uitlaat boezem, gemaal\n", - "Sturing has been added for the category Regulier afvoer gemaal\n", - "Sturing has been added for the category Regulier aanvoer gemaal\n", - "Sturing has been added for the category Uitlaat buitenwater peilgebied, afvoer gemaal\n", - "Sturing has been added for the category Uitlaat buitenwater peilgebied, aanvoer gemaal\n", - "Sturing has been added for the category Inlaat buitenwater peilgebied, afvoer gemaal\n", - "Sturing has been added for the category Inlaat buitenwater peilgebied, aanvoer gemaal\n", - "No gemalen are found in the category of Boezem boezem, afvoer gemaal\n", - "No gemalen are found in the category of Boezem boezem, aanvoer gemaal\n" - ] - } - ], + "outputs": [], "source": [ "ribasim_param.add_discrete_control(ribasim_model, waterschap, default_level)" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -2001,7 +424,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -2018,19 +441,9 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:pyogrio._io:Created 2,343 records\n", - "INFO:pyogrio._io:Created 2,088 records\n", - "INFO:pyogrio._io:Created 443 records\n" - ] - } - ], + "outputs": [], "source": [ "# Write model output\n", "ribasim_param.index_reset(ribasim_model)\n", @@ -2063,38 +476,9 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "7f173194a7c04992b1d34f6959d6af62", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Simulating init: 0%| | 0/100 [00:00 1\u001b[0m \u001b[43mstop\u001b[49m\n", - "\u001b[0;31mNameError\u001b[0m: name 'stop' is not defined" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "stop" ] @@ -2278,9 +584,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "scrolled": true - }, + "metadata": {}, "outputs": [], "source": [ "# Add discrete control nodes and control edges\n", diff --git a/src/peilbeheerst_model/Parametrize/sturing_AmstelGooienVecht.json b/src/peilbeheerst_model/Parametrize/sturing_AmstelGooienVecht.json index 9431e14..58e2e06 100644 --- a/src/peilbeheerst_model/Parametrize/sturing_AmstelGooienVecht.json +++ b/src/peilbeheerst_model/Parametrize/sturing_AmstelGooienVecht.json @@ -52,7 +52,7 @@ "flow_rate_pass": 10.0, "node_type": "outlet" }, - + "Inlaat boezem, gemaal": { "upstream_level_offset": 0.10, "truth_state": ["FF", "FT", "TF", "TT"], @@ -61,7 +61,7 @@ "flow_rate_pass": 0.2, "node_type": "pump" }, - + "Uitlaat boezem, gemaal": { "upstream_level_offset": 0.00, "truth_state": ["FF", "FT", "TF", "TT"], @@ -70,7 +70,7 @@ "flow_rate_pass": 0.2, "node_type": "pump" }, - + "Regulier afvoer gemaal": { "upstream_level_offset": 0.00, "truth_state": ["FF", "FT", "TF", "TT"], @@ -107,7 +107,7 @@ "node_type": "pump" }, - "Inlaat buitenwater peilgebied, afvoer gemaal": { + "Inlaat buitenwater peilgebied, afvoer gemaal": { "upstream_level_offset": 0.00, "truth_state": ["FF", "FT", "TF", "TT"], "control_state": ["block", "block", "pass", "pass"], @@ -116,7 +116,7 @@ "node_type": "pump" }, - "Inlaat buitenwater peilgebied, aanvoer gemaal": { + "Inlaat buitenwater peilgebied, aanvoer gemaal": { "upstream_level_offset": 0.15, "truth_state": ["FF", "FT", "TF", "TT"], "control_state": ["pass", "block", "pass", "block"], @@ -134,11 +134,3 @@ "node_type": "pump" } } - - - - - - - - diff --git a/src/peilbeheerst_model/compute_voronoi.ipynb b/src/peilbeheerst_model/compute_voronoi.ipynb index 16ab010..1cc3562 100644 --- a/src/peilbeheerst_model/compute_voronoi.ipynb +++ b/src/peilbeheerst_model/compute_voronoi.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5c447874-07f5-4c13-9d5f-f2a3063ae446", + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -20,7 +20,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d811cd9a-bd64-4dc6-92f3-b302f7d4ebc9", + "id": "1", "metadata": {}, "outputs": [], "source": [ @@ -39,7 +39,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e0b86228-791d-475d-ac64-ce27e5e50f98", + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -68,7 +68,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2ea23b73-0db8-4bac-ba30-b36faa3e224b", + "id": "3", "metadata": {}, "outputs": [], "source": [ @@ -94,7 +94,7 @@ { "cell_type": "code", "execution_count": null, - "id": "429f7bf3-4c68-46b9-a7a8-caf8e1868b55", + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -148,7 +148,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a794fa1a-89b2-4bdf-899d-d19d5077fd1a", + "id": "5", "metadata": {}, "outputs": [], "source": [ @@ -235,7 +235,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9d2e1086-511c-477f-8173-6da9985e67d1", + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -300,7 +300,7 @@ { "cell_type": "code", "execution_count": null, - "id": "472c5702-5b9c-4599-907f-74465ae09b8c", + "id": "7", "metadata": {}, "outputs": [], "source": [ @@ -314,7 +314,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0bb4e2be-66f5-4bfd-88f1-c9e0e7a1e78c", + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -336,7 +336,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fd42deff-1761-4489-bab6-b2f99fa37093", + "id": "9", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb index bcae967..3fcfcff 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_WSRL.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "690952c5-5037-476a-a660-d54fec614748", + "id": "0", "metadata": {}, "source": [ "# WSRL" @@ -10,7 +10,7 @@ }, { "cell_type": "markdown", - "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "id": "1", "metadata": {}, "source": [ "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", @@ -21,8 +21,8 @@ }, { "cell_type": "code", - "execution_count": 1, - "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "execution_count": null, + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ }, { "cell_type": "markdown", - "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "id": "3", "metadata": {}, "source": [ "## WSRL" @@ -46,8 +46,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "execution_count": null, + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -68,7 +68,7 @@ }, { "cell_type": "markdown", - "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "id": "5", "metadata": {}, "source": [ "### Load Files" @@ -76,8 +76,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "execution_count": null, + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -110,21 +110,10 @@ }, { "cell_type": "code", - "execution_count": 4, - "id": "1c0d88a9-1141-4f86-8345-0eb4678eadc1", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "id": "7", + "metadata": {}, + "outputs": [], "source": [ "# check primary key\n", "WSRL[\"peilgebied\"][\"globalid\"].is_unique" @@ -132,7 +121,7 @@ }, { "cell_type": "markdown", - "id": "ed0d59f7-011b-4114-94ff-791d9c8ba514", + "id": "8", "metadata": {}, "source": [ "## Select waterschap boundaries and clip hws layer" @@ -140,8 +129,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "id": "5f40630a-2a94-42f7-8ee6-7b74bcde912e", + "execution_count": null, + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -154,19 +143,10 @@ }, { "cell_type": "code", - "execution_count": 6, - "id": "06e7be9e-6154-457e-b0ee-3c1c83a5d9f4", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of overlapping shapes without filter: 378\n", - "Number of overlapping shapes with filter: 54\n" - ] - } - ], + "execution_count": null, + "id": "10", + "metadata": {}, + "outputs": [], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(WSRL[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", @@ -189,19 +169,10 @@ }, { "cell_type": "code", - "execution_count": 7, - "id": "a2c9f5ef-364a-47b6-ae0c-ffc4e7072108", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "yes\n", - "yes\n" - ] - } - ], + "execution_count": null, + "id": "11", + "metadata": {}, + "outputs": [], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", @@ -222,8 +193,8 @@ }, { "cell_type": "code", - "execution_count": 8, - "id": "528cd71d-848f-4ba7-a2af-965bdbd16888", + "execution_count": null, + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -232,8 +203,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "b2d4a069-9ff4-4996-9e04-fd05db9e2573", + "execution_count": null, + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -261,7 +232,7 @@ }, { "cell_type": "markdown", - "id": "ad5df059-48f2-4a5d-a911-e924b6e44116", + "id": "14", "metadata": {}, "source": [ "## Adjust globalid, code, nen3610id ['streefpeil'], ['peilgebied']" @@ -269,8 +240,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "9a9719a8-9003-42bf-88d8-dc0e14a6235c", + "execution_count": null, + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -292,28 +263,17 @@ }, { "cell_type": "code", - "execution_count": 11, - "id": "7099292c-fbe8-448b-bcb9-d512852168ba", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "id": "16", + "metadata": {}, + "outputs": [], "source": [ "WSRL[\"peilgebied\"][\"globalid\"].is_unique" ] }, { "cell_type": "markdown", - "id": "517f54ec-74da-4247-9984-f3dbe770a508", + "id": "17", "metadata": {}, "source": [ "## Add nhws to ['peilgebied','streefpeil']" @@ -321,8 +281,8 @@ }, { "cell_type": "code", - "execution_count": 12, - "id": "37606d1c-0408-4dc7-a4cc-72147b35aabd", + "execution_count": null, + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -339,8 +299,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "id": "e56bed85-30fb-4aaa-bf2c-55a0432857f2", + "execution_count": null, + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -356,28 +316,17 @@ }, { "cell_type": "code", - "execution_count": 14, - "id": "e0480ec4-0826-47b9-9e57-88a35d4ebd6f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "id": "20", + "metadata": {}, + "outputs": [], "source": [ "WSRL[\"peilgebied\"][\"globalid\"].is_unique" ] }, { "cell_type": "markdown", - "id": "9dbe4b9a-b7b2-429f-ae0c-408cc61134d8", + "id": "21", "metadata": {}, "source": [ "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" @@ -385,8 +334,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "e44043cf-0ea3-47ab-85ab-3af1c85dd3a7", + "execution_count": null, + "id": "22", "metadata": {}, "outputs": [], "source": [ @@ -404,7 +353,7 @@ }, { "cell_type": "markdown", - "id": "b9628396-f882-419e-a265-424cfcb15b24", + "id": "23", "metadata": {}, "source": [ "## Add buffer to ['peilgebied']" @@ -412,7 +361,7 @@ }, { "cell_type": "markdown", - "id": "bd9a7f41-d404-4512-9639-777d8ac73bed", + "id": "24", "metadata": {}, "source": [ "## Add buffer to ['peilgebied','streefpeil']" @@ -420,8 +369,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "id": "ac737828-1f7e-42ab-9f37-45e0fd1e189c", + "execution_count": null, + "id": "25", "metadata": {}, "outputs": [], "source": [ @@ -437,8 +386,8 @@ }, { "cell_type": "code", - "execution_count": 17, - "id": "f8133133-67d8-4b9c-9150-071c81079d3b", + "execution_count": null, + "id": "26", "metadata": {}, "outputs": [], "source": [ @@ -448,28 +397,17 @@ }, { "cell_type": "code", - "execution_count": 18, - "id": "f48bd18b-8f73-46fb-90be-2bb629cd7e00", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 1])" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "id": "27", + "metadata": {}, + "outputs": [], "source": [ "WSRL[\"peilgebied\"][\"peilgebied_cat\"].unique()" ] }, { "cell_type": "markdown", - "id": "997ba837-686c-4a6d-81a4-a92682428196", + "id": "28", "metadata": {}, "source": [ "## Store output" @@ -477,24 +415,10 @@ }, { "cell_type": "code", - "execution_count": 19, - "id": "4b7ca695-ba56-46a4-bd0f-ced939947deb", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "gemaal\n", - "hydroobject\n", - "duikersifonhevel\n", - "peilgebied\n", - "streefpeil\n", - "aggregation_area\n" - ] - } - ], + "execution_count": null, + "id": "29", + "metadata": {}, + "outputs": [], "source": [ "for key in WSRL.keys():\n", " print(key)\n", @@ -504,7 +428,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b9833c7e-20f4-4d9c-8dec-fa49c3298e0a", + "id": "30", "metadata": {}, "outputs": [], "source": [] @@ -512,7 +436,7 @@ { "cell_type": "code", "execution_count": null, - "id": "333debe3-dcf1-4fe1-b18c-968224ec2122", + "id": "31", "metadata": {}, "outputs": [], "source": [] @@ -520,7 +444,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5ca711a0-ade5-4edc-8eb5-abab9e33971a", + "id": "32", "metadata": {}, "outputs": [], "source": [] @@ -528,7 +452,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a4869ac1-b67c-4979-8155-8da665072655", + "id": "33", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb index 171e2a5..675b020 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_agv.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "690952c5-5037-476a-a660-d54fec614748", + "id": "0", "metadata": {}, "source": [ "# Amstel Gooi en Vecht" @@ -10,7 +10,7 @@ }, { "cell_type": "markdown", - "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "id": "1", "metadata": {}, "source": [ "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", @@ -21,8 +21,8 @@ }, { "cell_type": "code", - "execution_count": 1, - "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "execution_count": null, + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -40,7 +40,7 @@ }, { "cell_type": "markdown", - "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "id": "3", "metadata": {}, "source": [ "## Amstel Gooi en Vecht" @@ -48,8 +48,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "execution_count": null, + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -77,7 +77,7 @@ }, { "cell_type": "markdown", - "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "id": "5", "metadata": {}, "source": [ "### Load Files" @@ -85,8 +85,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "execution_count": null, + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -126,28 +126,17 @@ }, { "cell_type": "code", - "execution_count": 4, - "id": "dd29abc2-65fa-4b54-95e5-98a4878eb620", + "execution_count": null, + "id": "7", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "AVG[\"peilgebied\"].globalid.is_unique" ] }, { "cell_type": "markdown", - "id": "a1d63576-29bb-4157-b3fa-d6c7404e3ccf", + "id": "8", "metadata": {}, "source": [ "## Select waterschap boundaries and clip hws layer" @@ -155,8 +144,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "id": "b89385dd-5d81-4bea-9627-7750b1842e9c", + "execution_count": null, + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -172,7 +161,7 @@ }, { "cell_type": "markdown", - "id": "09d49cea-cfba-454a-b29a-b22f93064617", + "id": "10", "metadata": {}, "source": [ "## Peilgebied and HWS layer overlap:\n", @@ -184,19 +173,10 @@ }, { "cell_type": "code", - "execution_count": 6, - "id": "f6edfd80-f81c-4659-9d8d-1dec3f91a23c", + "execution_count": null, + "id": "11", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of overlapping shapes without filter: 28\n", - "Number of overlapping shapes with filter: 0\n" - ] - } - ], + "outputs": [], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(AVG[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", @@ -219,30 +199,10 @@ }, { "cell_type": "code", - "execution_count": 7, - "id": "fa787842-0a11-4d0f-ba5e-04566370a9fb", + "execution_count": null, + "id": "12", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n" - ] - } - ], + "outputs": [], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", @@ -262,7 +222,7 @@ }, { "cell_type": "markdown", - "id": "361025ff-51b6-4a45-9fa5-d3d3698611dc", + "id": "13", "metadata": {}, "source": [ "## Add rhws to ['peilgebied','streefpeil']" @@ -270,8 +230,8 @@ }, { "cell_type": "code", - "execution_count": 8, - "id": "3164fa66-d75f-498e-bc88-56532faee31b", + "execution_count": null, + "id": "14", "metadata": {}, "outputs": [], "source": [ @@ -288,8 +248,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "89ba7b08-3b2a-4058-9946-e82e19bfe4e3", + "execution_count": null, + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -305,7 +265,7 @@ }, { "cell_type": "markdown", - "id": "afef1983-b814-4d0d-bc07-ad88539a5459", + "id": "16", "metadata": {}, "source": [ "## Add nhws to ['peilgebied','streefpeil']" @@ -313,8 +273,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "6f005124-3aa6-4b04-baa1-6e38736cd2c6", + "execution_count": null, + "id": "17", "metadata": {}, "outputs": [], "source": [ @@ -331,8 +291,8 @@ }, { "cell_type": "code", - "execution_count": 11, - "id": "b735a861-3ef3-4db4-b9eb-fd89dc47aca7", + "execution_count": null, + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -348,7 +308,7 @@ }, { "cell_type": "markdown", - "id": "9177014f-707b-4b32-9a6b-fb5da9e61546", + "id": "19", "metadata": {}, "source": [ "### Create buffer polygon between NHWS and peilgebied/RHWS" @@ -356,8 +316,8 @@ }, { "cell_type": "code", - "execution_count": 12, - "id": "494db515-aebe-4d94-854e-0c2c939a8214", + "execution_count": null, + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -375,7 +335,7 @@ }, { "cell_type": "markdown", - "id": "003fc773-c705-42f6-925a-2ae67eef83c0", + "id": "21", "metadata": {}, "source": [ "### Add buffer to ['peilgebied','streefpeil']" @@ -383,8 +343,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "id": "03d96d05-9819-4811-891c-d645406c7027", + "execution_count": null, + "id": "22", "metadata": {}, "outputs": [], "source": [ @@ -403,8 +363,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "id": "c0fa7650-eb05-4b93-9a49-dda6ac49b31b", + "execution_count": null, + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -421,8 +381,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "8d5771f9-fdce-44b0-bea8-1cf0023e7e66", + "execution_count": null, + "id": "24", "metadata": {}, "outputs": [], "source": [ @@ -432,7 +392,7 @@ }, { "cell_type": "markdown", - "id": "81991696-fd4d-490d-9129-98f091d64f91", + "id": "25", "metadata": {}, "source": [ "## Store output" @@ -440,26 +400,10 @@ }, { "cell_type": "code", - "execution_count": 16, - "id": "b70f5533-bc4f-4554-a3f1-e0d4085fea90", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "gemaal\n", - "hydroobject\n", - "duikersifonhevel\n", - "peilgebied\n", - "streefpeil\n", - "aggregation_area\n" - ] - } - ], + "execution_count": null, + "id": "26", + "metadata": {}, + "outputs": [], "source": [ "for key in AVG.keys():\n", " print(key)\n", @@ -468,21 +412,10 @@ }, { "cell_type": "code", - "execution_count": 17, - "id": "db877f10-5557-46ed-8c1f-0c25103663ed", + "execution_count": null, + "id": "27", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 1])" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "AVG[\"peilgebied\"][\"peilgebied_cat\"].unique()" ] @@ -490,7 +423,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f4008e4c-ab26-4e6d-86cb-6e449d167ad8", + "id": "28", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb index abf3448..caad67e 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_delfland.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "690952c5-5037-476a-a660-d54fec614748", + "id": "0", "metadata": {}, "source": [ "# Delfland" @@ -10,7 +10,7 @@ }, { "cell_type": "markdown", - "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "id": "1", "metadata": {}, "source": [ "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", @@ -21,19 +21,10 @@ }, { "cell_type": "code", - "execution_count": 46, - "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "execution_count": null, + "id": "2", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], + "outputs": [], "source": [ "import geopandas as gpd\n", "import numpy as np\n", @@ -48,7 +39,7 @@ }, { "cell_type": "markdown", - "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "id": "3", "metadata": {}, "source": [ "## Set Paths" @@ -56,8 +47,8 @@ }, { "cell_type": "code", - "execution_count": 47, - "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "execution_count": null, + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -78,7 +69,7 @@ }, { "cell_type": "markdown", - "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "id": "5", "metadata": {}, "source": [ "## Load files" @@ -86,8 +77,8 @@ }, { "cell_type": "code", - "execution_count": 48, - "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "execution_count": null, + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -121,7 +112,7 @@ }, { "cell_type": "markdown", - "id": "5556d211-e92e-4ba3-85c2-4ff9bd33fbeb", + "id": "7", "metadata": {}, "source": [ "## Select waterschap boundaries and clip hws layer" @@ -129,8 +120,8 @@ }, { "cell_type": "code", - "execution_count": 49, - "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", + "execution_count": null, + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -143,7 +134,7 @@ }, { "cell_type": "markdown", - "id": "fbca5734-774b-4327-bb0a-1c2a68afe982", + "id": "9", "metadata": {}, "source": [ "## Peilgebied and HWS layer overlap:\n", @@ -155,19 +146,10 @@ }, { "cell_type": "code", - "execution_count": 50, - "id": "d28b061b-117d-4e71-b737-f759953951d9", + "execution_count": null, + "id": "10", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of overlapping shapes without filter: 26\n", - "Number of overlapping shapes with filter: 0\n" - ] - } - ], + "outputs": [], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(delfland[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", @@ -190,7 +172,7 @@ }, { "cell_type": "markdown", - "id": "fada8dca-0d9d-4619-b03e-403d3d19009a", + "id": "11", "metadata": {}, "source": [ "## Create peilgebied_cat column" @@ -198,71 +180,10 @@ }, { "cell_type": "code", - "execution_count": 51, - "id": "16fe0d25-7dd4-410a-9bec-5a69aced0614", + "execution_count": null, + "id": "12", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n" - ] - } - ], + "outputs": [], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", @@ -288,7 +209,7 @@ }, { "cell_type": "markdown", - "id": "8061cb15-b0ba-47b7-afa0-caed45438ae4", + "id": "13", "metadata": {}, "source": [ "## Add HWS to ['peilgebied', 'streefpeil']" @@ -296,8 +217,8 @@ }, { "cell_type": "code", - "execution_count": 52, - "id": "c12f62cb-60b3-4a43-b26c-6ea1f36f4606", + "execution_count": null, + "id": "14", "metadata": {}, "outputs": [], "source": [ @@ -314,8 +235,8 @@ }, { "cell_type": "code", - "execution_count": 53, - "id": "68dad130-b22b-47f2-bb20-dc88f33d4614", + "execution_count": null, + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -331,7 +252,7 @@ }, { "cell_type": "markdown", - "id": "3634cbd6-d698-460b-95c3-0737d2d12388", + "id": "16", "metadata": {}, "source": [ "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" @@ -339,8 +260,8 @@ }, { "cell_type": "code", - "execution_count": 54, - "id": "d8a24a33-7382-4fea-b45e-950dffb59f2c", + "execution_count": null, + "id": "17", "metadata": {}, "outputs": [], "source": [ @@ -352,7 +273,7 @@ }, { "cell_type": "markdown", - "id": "5a7d781e-3fe5-4239-b8c1-5f61d4b87460", + "id": "18", "metadata": {}, "source": [ "## Add buffer to ['peilgebied','streefpeil']" @@ -360,8 +281,8 @@ }, { "cell_type": "code", - "execution_count": 55, - "id": "e22637f0-8fdd-4971-b602-7cf4bed8584a", + "execution_count": null, + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -378,8 +299,8 @@ }, { "cell_type": "code", - "execution_count": 56, - "id": "a40dac33-9a57-4a17-8303-89836afbc8ed", + "execution_count": null, + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -400,29 +321,18 @@ }, { "cell_type": "code", - "execution_count": 57, - "id": "47b761f3-7fcb-420f-be20-9dd5ac3568ad", + "execution_count": null, + "id": "21", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([2, 0, 1])" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "delfland[\"peilgebied\"].peilgebied_cat.unique()" ] }, { "cell_type": "code", - "execution_count": 58, - "id": "bf287dbf-a0e8-4fb6-b054-b7ce79d3de20", + "execution_count": null, + "id": "22", "metadata": {}, "outputs": [], "source": [ @@ -431,8 +341,8 @@ }, { "cell_type": "code", - "execution_count": 59, - "id": "2cd05359-00b9-435e-8e7c-2cc1f110c560", + "execution_count": null, + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -442,7 +352,7 @@ }, { "cell_type": "markdown", - "id": "52f756f2-cf33-408a-9104-4f7d95a5d4eb", + "id": "24", "metadata": {}, "source": [ "## Write output" @@ -450,24 +360,10 @@ }, { "cell_type": "code", - "execution_count": 60, - "id": "38b5a11a-bf29-4958-af68-baab619e5e51", + "execution_count": null, + "id": "25", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "gemaal\n", - "hydroobject\n", - "duikersifonhevel\n", - "peilgebied\n", - "streefpeil\n", - "aggregation_area\n" - ] - } - ], + "outputs": [], "source": [ "for key in delfland.keys():\n", " print(key)\n", @@ -477,7 +373,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9cf38b1b-92d9-4b2c-b5eb-09d2333bd5ef", + "id": "26", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb index 80fc63c..7801eab 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_rijnland.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "690952c5-5037-476a-a660-d54fec614748", + "id": "0", "metadata": {}, "source": [ "# Rijnland" @@ -10,7 +10,7 @@ }, { "cell_type": "markdown", - "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "id": "1", "metadata": {}, "source": [ "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", @@ -21,8 +21,8 @@ }, { "cell_type": "code", - "execution_count": 1, - "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "execution_count": null, + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -40,7 +40,7 @@ }, { "cell_type": "markdown", - "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "id": "3", "metadata": {}, "source": [ "## Rijnland" @@ -48,8 +48,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "execution_count": null, + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -70,7 +70,7 @@ }, { "cell_type": "markdown", - "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "id": "5", "metadata": {}, "source": [ "### Load Files" @@ -78,8 +78,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "execution_count": null, + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -115,28 +115,17 @@ }, { "cell_type": "code", - "execution_count": 4, - "id": "613a849a-f873-402f-a33f-acb2b60bea4e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "id": "7", + "metadata": {}, + "outputs": [], "source": [ "Rijnland[\"peilgebied\"].globalid.is_unique" ] }, { "cell_type": "markdown", - "id": "623a0316-463e-444e-af95-d409c962fd21", + "id": "8", "metadata": {}, "source": [ "## Select waterschap boundaries and clip hws layer" @@ -144,8 +133,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "id": "98c82db0-4036-4ffa-ae1b-4400f5c28a58", + "execution_count": null, + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -158,7 +147,7 @@ }, { "cell_type": "markdown", - "id": "240d4f27-3149-49db-82c2-aeb208b8bdb8", + "id": "10", "metadata": {}, "source": [ "## Peilgebied and HWS layer overlap:\n", @@ -170,19 +159,10 @@ }, { "cell_type": "code", - "execution_count": 6, - "id": "08cf410b-78c1-47ab-b32c-e0ed60ebd7ec", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of overlapping shapes without filter: 9\n", - "Number of overlapping shapes with filter: 0\n" - ] - } - ], + "execution_count": null, + "id": "11", + "metadata": {}, + "outputs": [], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(Rijnland[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", @@ -205,7 +185,7 @@ }, { "cell_type": "markdown", - "id": "c9739ed5-7eaa-4255-bf5d-04d419530de8", + "id": "12", "metadata": {}, "source": [ "## Create peilgebied_cat column" @@ -213,272 +193,10 @@ }, { "cell_type": "code", - "execution_count": 7, - "id": "73f6c0f2-8f3c-4b63-a36a-508bd0c0f1ce", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n", - "true\n" - ] - } - ], + "execution_count": null, + "id": "13", + "metadata": {}, + "outputs": [], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", @@ -496,7 +214,7 @@ }, { "cell_type": "markdown", - "id": "a23b8673-850f-4c3a-a1d2-d2a3aa148a7d", + "id": "14", "metadata": {}, "source": [ "## Add nhws to ['peilgebied','streefpeil']" @@ -504,8 +222,8 @@ }, { "cell_type": "code", - "execution_count": 8, - "id": "8661eed7-0552-4f93-acad-62f1af2482d9", + "execution_count": null, + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -522,8 +240,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "7dd6604c-fe9e-4414-a477-d68978cf4c22", + "execution_count": null, + "id": "16", "metadata": {}, "outputs": [], "source": [ @@ -539,7 +257,7 @@ }, { "cell_type": "markdown", - "id": "8bba7dd4-ce87-4ba9-9004-f986d597f7be", + "id": "17", "metadata": {}, "source": [ "### Create buffer polygon between NHWS and peilgebied/RHWS" @@ -547,8 +265,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "8c7a3dd5-3e21-4116-9dbb-eda621bbb7ec", + "execution_count": null, + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -576,7 +294,7 @@ }, { "cell_type": "markdown", - "id": "de6ebf83-cc20-4e63-89b5-a74c03a57b54", + "id": "19", "metadata": {}, "source": [ "### Add buffer to ['peilgebied','streefpeil']" @@ -584,8 +302,8 @@ }, { "cell_type": "code", - "execution_count": 11, - "id": "c936a691-7ded-4e63-a344-83f27387cf0d", + "execution_count": null, + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -604,8 +322,8 @@ }, { "cell_type": "code", - "execution_count": 12, - "id": "4d53d1fe-774d-402d-bf40-af0dc62aef4a", + "execution_count": null, + "id": "21", "metadata": {}, "outputs": [], "source": [ @@ -622,7 +340,7 @@ }, { "cell_type": "markdown", - "id": "7f8b16ac-76dc-4958-8479-bd99ce3ebd66", + "id": "22", "metadata": {}, "source": [ "## Rijnland data contains many duplicate peilgebieden\n", @@ -632,25 +350,17 @@ { "cell_type": "code", "execution_count": null, - "id": "77d4a830-e70e-4242-bd29-d04483ec3c02", + "id": "23", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", - "execution_count": 13, - "id": "dae75f8d-f919-4690-b0cc-a04112c32b6a", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Processing 8807 out of 8807...\r" - ] - } - ], + "execution_count": null, + "id": "24", + "metadata": {}, + "outputs": [], "source": [ "gdf = Rijnland[\"peilgebied\"][3:]\n", "\n", @@ -705,51 +415,17 @@ }, { "cell_type": "code", - "execution_count": 14, - "id": "9df31513-a055-4185-aadb-6bf0d59914ae", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " idx1 idx2 globalid_1 \\\n", - "0 4 256 dummy_globalid_peilgebied_6_6 \n", - "1 5 257 dummy_globalid_peilgebied_6_7 \n", - "2 6 258 dummy_globalid_peilgebied_6_8 \n", - "3 7 259 dummy_globalid_peilgebied_6_9 \n", - "4 8 260 dummy_globalid_peilgebied_6_10 \n", - ".. ... ... ... \n", - "215 6861 6895 dummy_globalid_peilgebied_446_6863 \n", - "216 6862 6896 dummy_globalid_peilgebied_446_6864 \n", - "217 6863 6897 dummy_globalid_peilgebied_446_6865 \n", - "218 6864 6898 dummy_globalid_peilgebied_446_6866 \n", - "219 6865 6899 dummy_globalid_peilgebied_446_6867 \n", - "\n", - " globalid_2 \n", - "0 dummy_globalid_peilgebied_0_258 \n", - "1 dummy_globalid_peilgebied_0_259 \n", - "2 dummy_globalid_peilgebied_0_260 \n", - "3 dummy_globalid_peilgebied_0_261 \n", - "4 dummy_globalid_peilgebied_0_262 \n", - ".. ... \n", - "215 dummy_globalid_peilgebied_447_6897 \n", - "216 dummy_globalid_peilgebied_447_6898 \n", - "217 dummy_globalid_peilgebied_447_6899 \n", - "218 dummy_globalid_peilgebied_448_6900 \n", - "219 dummy_globalid_peilgebied_448_6901 \n", - "\n", - "[220 rows x 4 columns]\n" - ] - } - ], + "execution_count": null, + "id": "25", + "metadata": {}, + "outputs": [], "source": [ "print(df)" ] }, { "cell_type": "markdown", - "id": "e4928043-eded-4a45-a6ea-986e516d3a28", + "id": "26", "metadata": {}, "source": [ "### Create list of duplicates for removal" @@ -757,8 +433,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "3ba5af40-ac04-4997-a890-34987e8cfabe", + "execution_count": null, + "id": "27", "metadata": {}, "outputs": [], "source": [ @@ -780,7 +456,7 @@ }, { "cell_type": "markdown", - "id": "54028e80-ab1a-40cf-a0f6-808f4f1af1a5", + "id": "28", "metadata": {}, "source": [ "### Remove duplicates" @@ -788,8 +464,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "id": "2f09ef95-f0ff-4216-ac2e-a5b6a05b1ac0", + "execution_count": null, + "id": "29", "metadata": {}, "outputs": [], "source": [ @@ -799,8 +475,8 @@ }, { "cell_type": "code", - "execution_count": 17, - "id": "1c7da63d-37de-4bc7-a234-d9bec8cc0c55", + "execution_count": null, + "id": "30", "metadata": {}, "outputs": [], "source": [ @@ -810,7 +486,7 @@ }, { "cell_type": "markdown", - "id": "fec7d831-127b-438f-8fdb-9e2cda4707ff", + "id": "31", "metadata": {}, "source": [ "### Store data" @@ -818,24 +494,10 @@ }, { "cell_type": "code", - "execution_count": 18, - "id": "59127d3b-ce3b-42ee-915d-62f0f720ec08", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "gemaal\n", - "hydroobject\n", - "duikersifonhevel\n", - "peilgebied\n", - "streefpeil\n", - "aggregation_area\n" - ] - } - ], + "execution_count": null, + "id": "32", + "metadata": {}, + "outputs": [], "source": [ "for key in Rijnland.keys():\n", " print(key)\n", @@ -845,7 +507,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c4473cbe-38bd-4c89-9ac6-839470451f26", + "id": "33", "metadata": {}, "outputs": [], "source": [] @@ -853,7 +515,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f18b37ff-f12a-47d4-b406-233ef5008454", + "id": "34", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb index b6de1c1..a9a37f8 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_wetterskip.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "690952c5-5037-476a-a660-d54fec614748", + "id": "0", "metadata": {}, "source": [ "# Wetterskip" @@ -10,7 +10,7 @@ }, { "cell_type": "markdown", - "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "id": "1", "metadata": {}, "source": [ "This script adds a new column \"peilgebied_cat\" and make sure the peilgebieden neatly match the HWS layer (Daniel):\n", @@ -21,8 +21,8 @@ }, { "cell_type": "code", - "execution_count": 1, - "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "execution_count": null, + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ }, { "cell_type": "markdown", - "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "id": "3", "metadata": {}, "source": [ "## Set Paths" @@ -46,8 +46,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "execution_count": null, + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -69,7 +69,7 @@ }, { "cell_type": "markdown", - "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "id": "5", "metadata": {}, "source": [ "## Load Files" @@ -77,8 +77,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "execution_count": null, + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -113,7 +113,7 @@ }, { "cell_type": "markdown", - "id": "bc4a7b18-311d-4a29-ba13-df3d587e60b2", + "id": "7", "metadata": {}, "source": [ "## Select waterschap boundaries and clip hws layer" @@ -121,8 +121,8 @@ }, { "cell_type": "code", - "execution_count": 4, - "id": "b5eae4c4-2d5a-4678-a5af-56e3626d29ec", + "execution_count": null, + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -135,7 +135,7 @@ }, { "cell_type": "markdown", - "id": "f141d0fe-6f1f-471f-acf1-4f11522bd15d", + "id": "9", "metadata": {}, "source": [ "## Check Peilgebied and HWS layer overlap:\n", @@ -147,8 +147,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "id": "56faab44-3fda-43c4-8426-197fbb6c63a8", + "execution_count": null, + "id": "10", "metadata": {}, "outputs": [], "source": [ @@ -173,7 +173,7 @@ }, { "cell_type": "markdown", - "id": "9d4b936d-e24d-46b0-9c04-429290c39ade", + "id": "11", "metadata": {}, "source": [ "## Create peilgebied_cat column" @@ -181,8 +181,8 @@ }, { "cell_type": "code", - "execution_count": 6, - "id": "6ad958c4-01ce-4fcb-9170-fa8bf0f7c7f0", + "execution_count": null, + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -201,14 +201,14 @@ { "cell_type": "code", "execution_count": null, - "id": "c9be301b-1577-4516-a5a2-70e02769e343", + "id": "13", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "2187ad3d-4399-42b1-9d50-5183ff374326", + "id": "14", "metadata": {}, "source": [ "## Add nhws to ['peilgebied','streefpeil']" @@ -216,8 +216,8 @@ }, { "cell_type": "code", - "execution_count": 7, - "id": "28509a06-79c9-4e68-9be7-dcf654494c90", + "execution_count": null, + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -234,8 +234,8 @@ }, { "cell_type": "code", - "execution_count": 8, - "id": "37bec5bb-70dd-4789-9f92-bcfcd571d790", + "execution_count": null, + "id": "16", "metadata": {}, "outputs": [], "source": [ @@ -251,7 +251,7 @@ }, { "cell_type": "markdown", - "id": "c2499b90-db91-49b7-9dc5-f43d2de46e3f", + "id": "17", "metadata": {}, "source": [ "### Create buffer polygon between NHWS and peilgebied/RHWS" @@ -259,8 +259,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "f3ee584a-4ac9-47fd-8006-4be11e9d02a4", + "execution_count": null, + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -278,7 +278,7 @@ }, { "cell_type": "markdown", - "id": "a796dae1-e578-45c2-abc4-bd0f660f2175", + "id": "19", "metadata": {}, "source": [ "### Add buffer to ['peilgebied','streefpeil']" @@ -286,8 +286,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "42af7580-3cdf-4d7c-9204-50bec3dc088d", + "execution_count": null, + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -306,8 +306,8 @@ }, { "cell_type": "code", - "execution_count": 11, - "id": "bc785a36-81a6-4c79-affc-a0938d78beb5", + "execution_count": null, + "id": "21", "metadata": {}, "outputs": [], "source": [ @@ -324,7 +324,7 @@ }, { "cell_type": "markdown", - "id": "ffb583ff-6707-48af-b3db-b35465eb949e", + "id": "22", "metadata": {}, "source": [ "## Wetterskip data contains many duplicate peilgebieden" @@ -332,7 +332,7 @@ }, { "cell_type": "markdown", - "id": "6ca97726-e159-4cae-be86-b99232a80d56", + "id": "23", "metadata": {}, "source": [ "### Calculate polygons that overlap with more than 90 % of their area" @@ -340,8 +340,8 @@ }, { "cell_type": "code", - "execution_count": 12, - "id": "c234dbaf-5345-442e-9fe4-d458a8ed225c", + "execution_count": null, + "id": "24", "metadata": { "tags": [] }, @@ -404,8 +404,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "id": "22074ae1-cc01-4212-b877-a190122a152d", + "execution_count": null, + "id": "25", "metadata": {}, "outputs": [], "source": [ @@ -414,7 +414,7 @@ }, { "cell_type": "markdown", - "id": "3e377aaf-adcd-4a0d-b225-48705f0a7f97", + "id": "26", "metadata": {}, "source": [ "### Create list of duplicates for removal" @@ -422,8 +422,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "id": "1d8b87a6-2e74-4b0e-9a2e-40734e38ec77", + "execution_count": null, + "id": "27", "metadata": {}, "outputs": [], "source": [ @@ -445,7 +445,7 @@ }, { "cell_type": "markdown", - "id": "0f8737e0-aea1-49fb-8a48-8a8afc52f3f8", + "id": "28", "metadata": {}, "source": [ "### Remove duplicates" @@ -453,8 +453,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "41cc52dc-a5ab-4879-ba6d-95edc7130479", + "execution_count": null, + "id": "29", "metadata": {}, "outputs": [], "source": [ @@ -464,29 +464,18 @@ }, { "cell_type": "code", - "execution_count": 16, - "id": "f180bb58-0cdc-4bd4-9b24-eb5deb446e82", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "id": "30", + "metadata": {}, + "outputs": [], "source": [ "Wetterskip[\"streefpeil\"][\"globalid\"].is_unique" ] }, { "cell_type": "code", - "execution_count": 17, - "id": "59fd83a7-da5b-43ff-a4ee-f97fb9389a1a", + "execution_count": null, + "id": "31", "metadata": {}, "outputs": [], "source": [ @@ -496,7 +485,7 @@ }, { "cell_type": "markdown", - "id": "ed9019dc-6278-4761-b30b-2a7f9b3757b9", + "id": "32", "metadata": {}, "source": [ "## Store data" @@ -504,24 +493,10 @@ }, { "cell_type": "code", - "execution_count": 18, - "id": "65bafa4a-7c96-4fae-870d-821aa638d322", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "gemaal\n", - "hydroobject\n", - "duikersifonhevel\n", - "peilgebied\n", - "streefpeil\n", - "aggregation_area\n" - ] - } - ], + "execution_count": null, + "id": "33", + "metadata": {}, + "outputs": [], "source": [ "for key in Wetterskip.keys():\n", " print(key)\n", @@ -531,7 +506,7 @@ { "cell_type": "code", "execution_count": null, - "id": "97db8354-a89a-4f58-bab8-f722f123fcec", + "id": "34", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb index af70905..7625396 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-process_zuiderzeeland.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "690952c5-5037-476a-a660-d54fec614748", + "id": "0", "metadata": { "tags": [] }, @@ -12,7 +12,7 @@ }, { "cell_type": "markdown", - "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "id": "1", "metadata": {}, "source": [ "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer:\n", @@ -23,19 +23,10 @@ }, { "cell_type": "code", - "execution_count": 81, - "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "execution_count": null, + "id": "2", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], + "outputs": [], "source": [ "import geopandas as gpd\n", "import numpy as np\n", @@ -49,7 +40,7 @@ }, { "cell_type": "markdown", - "id": "b2434b6d-2898-45f8-a5cb-fbb9c2c2e77b", + "id": "3", "metadata": {}, "source": [ "## Zuiderzeeland" @@ -57,8 +48,8 @@ }, { "cell_type": "code", - "execution_count": 82, - "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "execution_count": null, + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -79,7 +70,7 @@ }, { "cell_type": "markdown", - "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "id": "5", "metadata": {}, "source": [ "### Load Files" @@ -87,8 +78,8 @@ }, { "cell_type": "code", - "execution_count": 83, - "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "execution_count": null, + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -121,28 +112,17 @@ }, { "cell_type": "code", - "execution_count": 84, - "id": "51af6c3a-7b5d-447c-8757-5dd2f4694958", + "execution_count": null, + "id": "7", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 84, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Zuiderzeeland[\"peilgebied\"].globalid.is_unique" ] }, { "cell_type": "markdown", - "id": "b37e2158-618d-4dd0-a576-7cb32e41c0d2", + "id": "8", "metadata": {}, "source": [ "## Select waterschap boundaries and clip hws layer" @@ -150,8 +130,8 @@ }, { "cell_type": "code", - "execution_count": 85, - "id": "c5e7495b-8517-4729-b586-7e1913dbbd83", + "execution_count": null, + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -164,175 +144,17 @@ }, { "cell_type": "code", - "execution_count": 86, - "id": "51e6de19-8bb2-47f9-860c-45d30d72972d", + "execution_count": null, + "id": "10", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
codeglobalidnen3610idgeometry
0OR 56dummy_globalid_peilgebied_0dummy_nen3610id_peilgebied_0POLYGON Z ((167444.972 487009.101 0.000, 16762...
1OR 13dummy_globalid_peilgebied_1dummy_nen3610id_peilgebied_1POLYGON Z ((182383.808 509903.577 0.000, 18241...
2HT 6dummy_globalid_peilgebied_2dummy_nen3610id_peilgebied_2POLYGON Z ((158728.408 504422.232 0.000, 15873...
3SCHOTERPAD-D-TOCHTdummy_globalid_peilgebied_3dummy_nen3610id_peilgebied_3POLYGON Z ((179970.587 533631.593 0.000, 17996...
4ZWARTEMEERTOCHTdummy_globalid_peilgebied_4dummy_nen3610id_peilgebied_4POLYGON Z ((192476.653 518448.383 0.000, 19250...
...............
290TA.02dummy_globalid_peilgebied_290dummy_nen3610id_peilgebied_290POLYGON Z ((189642.837 527330.192 0.000, 18985...
291URK 2dummy_globalid_peilgebied_291dummy_nen3610id_peilgebied_291POLYGON Z ((169418.497 519698.470 0.000, 16937...
292TA.13dummy_globalid_peilgebied_292dummy_nen3610id_peilgebied_292POLYGON Z ((187294.201 529202.794 0.000, 18747...
2933.11dummy_globalid_peilgebied_293dummy_nen3610id_peilgebied_293POLYGON Z ((160519.614 477230.775 0.000, 16016...
294TA.04dummy_globalid_peilgebied_294dummy_nen3610id_peilgebied_294POLYGON Z ((188319.932 529257.440 0.000, 18832...
\n", - "

295 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " code globalid \\\n", - "0 OR 56 dummy_globalid_peilgebied_0 \n", - "1 OR 13 dummy_globalid_peilgebied_1 \n", - "2 HT 6 dummy_globalid_peilgebied_2 \n", - "3 SCHOTERPAD-D-TOCHT dummy_globalid_peilgebied_3 \n", - "4 ZWARTEMEERTOCHT dummy_globalid_peilgebied_4 \n", - ".. ... ... \n", - "290 TA.02 dummy_globalid_peilgebied_290 \n", - "291 URK 2 dummy_globalid_peilgebied_291 \n", - "292 TA.13 dummy_globalid_peilgebied_292 \n", - "293 3.11 dummy_globalid_peilgebied_293 \n", - "294 TA.04 dummy_globalid_peilgebied_294 \n", - "\n", - " nen3610id \\\n", - "0 dummy_nen3610id_peilgebied_0 \n", - "1 dummy_nen3610id_peilgebied_1 \n", - "2 dummy_nen3610id_peilgebied_2 \n", - "3 dummy_nen3610id_peilgebied_3 \n", - "4 dummy_nen3610id_peilgebied_4 \n", - ".. ... \n", - "290 dummy_nen3610id_peilgebied_290 \n", - "291 dummy_nen3610id_peilgebied_291 \n", - "292 dummy_nen3610id_peilgebied_292 \n", - "293 dummy_nen3610id_peilgebied_293 \n", - "294 dummy_nen3610id_peilgebied_294 \n", - "\n", - " geometry \n", - "0 POLYGON Z ((167444.972 487009.101 0.000, 16762... \n", - "1 POLYGON Z ((182383.808 509903.577 0.000, 18241... \n", - "2 POLYGON Z ((158728.408 504422.232 0.000, 15873... \n", - "3 POLYGON Z ((179970.587 533631.593 0.000, 17996... \n", - "4 POLYGON Z ((192476.653 518448.383 0.000, 19250... \n", - ".. ... \n", - "290 POLYGON Z ((189642.837 527330.192 0.000, 18985... \n", - "291 POLYGON Z ((169418.497 519698.470 0.000, 16937... \n", - "292 POLYGON Z ((187294.201 529202.794 0.000, 18747... \n", - "293 POLYGON Z ((160519.614 477230.775 0.000, 16016... \n", - "294 POLYGON Z ((188319.932 529257.440 0.000, 18832... \n", - "\n", - "[295 rows x 4 columns]" - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Zuiderzeeland[\"peilgebied\"]" ] }, { "cell_type": "markdown", - "id": "b93b71dd-7176-42ae-bf4e-f31a429b229a", + "id": "11", "metadata": {}, "source": [ "## Peilgebied and HWS layer overlap:\n", @@ -344,19 +166,10 @@ }, { "cell_type": "code", - "execution_count": 87, - "id": "76cd16f7-c2cd-4ef7-b478-42359e0f8735", + "execution_count": null, + "id": "12", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of overlapping shapes without filter: 23\n", - "Number of overlapping shapes with filter: 0\n" - ] - } - ], + "outputs": [], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(Zuiderzeeland[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", @@ -379,191 +192,20 @@ }, { "cell_type": "code", - "execution_count": 88, - "id": "3fca7d17-e4a3-445e-92ef-74e60e661e1e", + "execution_count": null, + "id": "13", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
codeglobalidnen3610idgeometry
0OR 56dummy_globalid_peilgebied_0dummy_nen3610id_peilgebied_0POLYGON Z ((167444.972 487009.101 0.000, 16762...
1OR 13dummy_globalid_peilgebied_1dummy_nen3610id_peilgebied_1POLYGON Z ((182383.808 509903.577 0.000, 18241...
2HT 6dummy_globalid_peilgebied_2dummy_nen3610id_peilgebied_2POLYGON Z ((158728.408 504422.232 0.000, 15873...
3SCHOTERPAD-D-TOCHTdummy_globalid_peilgebied_3dummy_nen3610id_peilgebied_3POLYGON Z ((179970.587 533631.593 0.000, 17996...
4ZWARTEMEERTOCHTdummy_globalid_peilgebied_4dummy_nen3610id_peilgebied_4POLYGON Z ((192476.653 518448.383 0.000, 19250...
...............
290TA.02dummy_globalid_peilgebied_290dummy_nen3610id_peilgebied_290POLYGON Z ((189642.837 527330.192 0.000, 18985...
291URK 2dummy_globalid_peilgebied_291dummy_nen3610id_peilgebied_291POLYGON Z ((169418.497 519698.470 0.000, 16937...
292TA.13dummy_globalid_peilgebied_292dummy_nen3610id_peilgebied_292POLYGON Z ((187294.201 529202.794 0.000, 18747...
2933.11dummy_globalid_peilgebied_293dummy_nen3610id_peilgebied_293POLYGON Z ((160519.614 477230.775 0.000, 16016...
294TA.04dummy_globalid_peilgebied_294dummy_nen3610id_peilgebied_294POLYGON Z ((188319.932 529257.440 0.000, 18832...
\n", - "

295 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " code globalid \\\n", - "0 OR 56 dummy_globalid_peilgebied_0 \n", - "1 OR 13 dummy_globalid_peilgebied_1 \n", - "2 HT 6 dummy_globalid_peilgebied_2 \n", - "3 SCHOTERPAD-D-TOCHT dummy_globalid_peilgebied_3 \n", - "4 ZWARTEMEERTOCHT dummy_globalid_peilgebied_4 \n", - ".. ... ... \n", - "290 TA.02 dummy_globalid_peilgebied_290 \n", - "291 URK 2 dummy_globalid_peilgebied_291 \n", - "292 TA.13 dummy_globalid_peilgebied_292 \n", - "293 3.11 dummy_globalid_peilgebied_293 \n", - "294 TA.04 dummy_globalid_peilgebied_294 \n", - "\n", - " nen3610id \\\n", - "0 dummy_nen3610id_peilgebied_0 \n", - "1 dummy_nen3610id_peilgebied_1 \n", - "2 dummy_nen3610id_peilgebied_2 \n", - "3 dummy_nen3610id_peilgebied_3 \n", - "4 dummy_nen3610id_peilgebied_4 \n", - ".. ... \n", - "290 dummy_nen3610id_peilgebied_290 \n", - "291 dummy_nen3610id_peilgebied_291 \n", - "292 dummy_nen3610id_peilgebied_292 \n", - "293 dummy_nen3610id_peilgebied_293 \n", - "294 dummy_nen3610id_peilgebied_294 \n", - "\n", - " geometry \n", - "0 POLYGON Z ((167444.972 487009.101 0.000, 16762... \n", - "1 POLYGON Z ((182383.808 509903.577 0.000, 18241... \n", - "2 POLYGON Z ((158728.408 504422.232 0.000, 15873... \n", - "3 POLYGON Z ((179970.587 533631.593 0.000, 17996... \n", - "4 POLYGON Z ((192476.653 518448.383 0.000, 19250... \n", - ".. ... \n", - "290 POLYGON Z ((189642.837 527330.192 0.000, 18985... \n", - "291 POLYGON Z ((169418.497 519698.470 0.000, 16937... \n", - "292 POLYGON Z ((187294.201 529202.794 0.000, 18747... \n", - "293 POLYGON Z ((160519.614 477230.775 0.000, 16016... \n", - "294 POLYGON Z ((188319.932 529257.440 0.000, 18832... \n", - "\n", - "[295 rows x 4 columns]" - ] - }, - "execution_count": 88, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Zuiderzeeland[\"peilgebied\"]" ] }, { "cell_type": "code", - "execution_count": 89, - "id": "a7f16af4-fc46-4533-93b6-ee52d6d7687c", + "execution_count": null, + "id": "14", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n", - "yes\n" - ] - } - ], + "outputs": [], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", @@ -594,7 +236,7 @@ }, { "cell_type": "markdown", - "id": "5dcaab7b-5abe-431a-b890-9d19be3254f2", + "id": "15", "metadata": {}, "source": [ "## Add nhws to ['peilgebied']" @@ -602,8 +244,8 @@ }, { "cell_type": "code", - "execution_count": 90, - "id": "ec5c9dde-2698-4a73-9fce-266a3c5e96d7", + "execution_count": null, + "id": "16", "metadata": {}, "outputs": [], "source": [ @@ -620,7 +262,7 @@ }, { "cell_type": "markdown", - "id": "51415106-fb75-4dad-97ba-4b046cb1f545", + "id": "17", "metadata": {}, "source": [ "## Add HWS to ['streefpeil']" @@ -628,8 +270,8 @@ }, { "cell_type": "code", - "execution_count": 91, - "id": "9e61effa-42ae-46d7-879e-d7fa928ebd8d", + "execution_count": null, + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -645,7 +287,7 @@ }, { "cell_type": "markdown", - "id": "a1c16adb-759d-41ae-b864-513aaafff8ac", + "id": "19", "metadata": {}, "source": [ "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" @@ -653,8 +295,8 @@ }, { "cell_type": "code", - "execution_count": 92, - "id": "1317fbfd-b713-4172-b1b0-c678c4e8d986", + "execution_count": null, + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -672,7 +314,7 @@ }, { "cell_type": "markdown", - "id": "d7ca89cf-c74c-4c88-9c69-4dfdca718e54", + "id": "21", "metadata": { "tags": [] }, @@ -682,8 +324,8 @@ }, { "cell_type": "code", - "execution_count": 93, - "id": "f5033a40-2967-4cc1-9772-fef2be4169b0", + "execution_count": null, + "id": "22", "metadata": {}, "outputs": [], "source": [ @@ -700,8 +342,8 @@ }, { "cell_type": "code", - "execution_count": 94, - "id": "970ab69a-6f3a-46ce-9882-aded5f98a39f", + "execution_count": null, + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -718,8 +360,8 @@ }, { "cell_type": "code", - "execution_count": 95, - "id": "51d36d36-9420-4be9-8d6b-8ac0263a7129", + "execution_count": null, + "id": "24", "metadata": {}, "outputs": [], "source": [ @@ -729,7 +371,7 @@ }, { "cell_type": "markdown", - "id": "31b4ba32-7f34-49a6-b256-966c24faf68a", + "id": "25", "metadata": {}, "source": [ "## Store output" @@ -737,45 +379,20 @@ }, { "cell_type": "code", - "execution_count": 96, - "id": "9e589e19-a137-418b-b2a7-5b0c778766a6", + "execution_count": null, + "id": "26", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Zuiderzeeland[\"peilgebied\"].globalid.is_unique" ] }, { "cell_type": "code", - "execution_count": 97, - "id": "eb0ed312-2aef-41f6-83c7-ead0e630aa39", + "execution_count": null, + "id": "27", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "gemaal\n", - "hydroobject\n", - "duikersifonhevel\n", - "peilgebied\n", - "streefpeil\n", - "aggregation_area\n" - ] - } - ], + "outputs": [], "source": [ "for key in Zuiderzeeland.keys():\n", " print(key)\n", @@ -785,7 +402,7 @@ { "cell_type": "code", "execution_count": null, - "id": "888995e9-8b43-48d3-88ea-2aeea2caa311", + "id": "28", "metadata": {}, "outputs": [], "source": [] @@ -793,7 +410,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d90929e5-6345-4ccf-8d32-ddfcc20510d4", + "id": "29", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb index 9b09fee..edcae23 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HD.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "690952c5-5037-476a-a660-d54fec614748", + "id": "0", "metadata": {}, "source": [ "# Hollandse Delta" @@ -10,7 +10,7 @@ }, { "cell_type": "markdown", - "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "id": "1", "metadata": {}, "source": [ "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", @@ -21,19 +21,10 @@ }, { "cell_type": "code", - "execution_count": 103, - "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "execution_count": null, + "id": "2", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], + "outputs": [], "source": [ "import geopandas as gpd\n", "import numpy as np\n", @@ -47,7 +38,7 @@ }, { "cell_type": "markdown", - "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "id": "3", "metadata": {}, "source": [ "## Delfland" @@ -55,8 +46,8 @@ }, { "cell_type": "code", - "execution_count": 104, - "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "execution_count": null, + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -78,7 +69,7 @@ }, { "cell_type": "markdown", - "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "id": "5", "metadata": {}, "source": [ "### Load Files" @@ -86,8 +77,8 @@ }, { "cell_type": "code", - "execution_count": 105, - "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "execution_count": null, + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -122,28 +113,17 @@ }, { "cell_type": "code", - "execution_count": 106, - "id": "a7b8f366-9c57-440f-bf48-7908612465d5", + "execution_count": null, + "id": "7", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 106, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "HD[\"peilgebied\"].globalid.is_unique" ] }, { "cell_type": "markdown", - "id": "5556d211-e92e-4ba3-85c2-4ff9bd33fbeb", + "id": "8", "metadata": {}, "source": [ "## Select waterschap boundaries and clip hws layer" @@ -151,8 +131,8 @@ }, { "cell_type": "code", - "execution_count": 107, - "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", + "execution_count": null, + "id": "9", "metadata": { "tags": [] }, @@ -167,7 +147,7 @@ }, { "cell_type": "markdown", - "id": "d0ed9e9b-258b-4f16-8bcb-b9d412a8c8c3", + "id": "10", "metadata": {}, "source": [ "## Peilgebied and HWS layer overlap:\n", @@ -179,19 +159,10 @@ }, { "cell_type": "code", - "execution_count": 108, - "id": "05757b4b-2f8e-48a6-a76c-9e06e23f20da", + "execution_count": null, + "id": "11", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of overlapping shapes without filter: 174\n", - "Number of overlapping shapes with filter: 0\n" - ] - } - ], + "outputs": [], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(HD[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", @@ -214,7 +185,7 @@ }, { "cell_type": "markdown", - "id": "942d281a-aa46-4b57-af3a-f4e2df811b26", + "id": "12", "metadata": {}, "source": [ "## Create peilgebied_cat column" @@ -222,8 +193,8 @@ }, { "cell_type": "code", - "execution_count": 109, - "id": "5793dd3d-766d-46bd-811e-4c8b6e118d3a", + "execution_count": null, + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -276,8 +247,8 @@ }, { "cell_type": "code", - "execution_count": 110, - "id": "d0e88867-184b-48b5-a10f-ba8816f10dcc", + "execution_count": null, + "id": "14", "metadata": {}, "outputs": [], "source": [ @@ -287,28 +258,17 @@ }, { "cell_type": "code", - "execution_count": 111, - "id": "68fd5607-5ed5-4b4e-8c13-9159e175aaae", + "execution_count": null, + "id": "15", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 1])" - ] - }, - "execution_count": 111, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "HD[\"peilgebied\"][\"peilgebied_cat\"].unique()" ] }, { "cell_type": "markdown", - "id": "8ab1e249-a9cc-4728-bfce-d9c965da18df", + "id": "16", "metadata": {}, "source": [ "## Add nhws to ['peilgebied','streefpeil']" @@ -316,8 +276,8 @@ }, { "cell_type": "code", - "execution_count": 112, - "id": "e60dbbe9-1f27-4a71-b10b-1ecf3c53b060", + "execution_count": null, + "id": "17", "metadata": {}, "outputs": [], "source": [ @@ -334,8 +294,8 @@ }, { "cell_type": "code", - "execution_count": 113, - "id": "03ff37c8-16cc-4cdc-9a1b-ea10f06ea630", + "execution_count": null, + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -351,7 +311,7 @@ }, { "cell_type": "markdown", - "id": "9e2ea1a8-4a26-4515-9613-11cbd828c0d5", + "id": "19", "metadata": {}, "source": [ "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" @@ -359,8 +319,8 @@ }, { "cell_type": "code", - "execution_count": 114, - "id": "c4c448fb-3cb3-451c-aa17-d336f02deb6b", + "execution_count": null, + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -372,7 +332,7 @@ }, { "cell_type": "markdown", - "id": "eb233361-1e89-4bfa-b2f4-22d66155db58", + "id": "21", "metadata": {}, "source": [ "## Add buffer to ['peilgebied','streefpeil']" @@ -380,8 +340,8 @@ }, { "cell_type": "code", - "execution_count": 115, - "id": "75fc528f-5902-4a5d-bc7c-d0b700875832", + "execution_count": null, + "id": "22", "metadata": {}, "outputs": [], "source": [ @@ -398,8 +358,8 @@ }, { "cell_type": "code", - "execution_count": 116, - "id": "b345f335-bc12-4e99-8272-9e47cc325021", + "execution_count": null, + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -417,8 +377,8 @@ }, { "cell_type": "code", - "execution_count": 117, - "id": "a8852930-5bbe-41b3-886e-b73ffa70177d", + "execution_count": null, + "id": "24", "metadata": {}, "outputs": [], "source": [ @@ -428,7 +388,7 @@ }, { "cell_type": "markdown", - "id": "dfea55d4-0bc9-485b-ac90-68b1dd8455b6", + "id": "25", "metadata": {}, "source": [ "## Store output" @@ -436,24 +396,10 @@ }, { "cell_type": "code", - "execution_count": 118, - "id": "70b4b337-44a9-4ef4-aee2-f7431aae720c", + "execution_count": null, + "id": "26", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "gemaal\n", - "hydroobject\n", - "duikersifonhevel\n", - "peilgebied\n", - "streefpeil\n", - "aggregation_area\n" - ] - } - ], + "outputs": [], "source": [ "for key in HD.keys():\n", " print(key)\n", @@ -463,7 +409,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fccf3cfa-991c-42d3-b9f9-3869230a3fcf", + "id": "27", "metadata": {}, "outputs": [], "source": [] @@ -471,7 +417,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fc6075a8-8575-442d-a9f5-925dc3614f79", + "id": "28", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb index b12a95f..8fdc1ba 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHNK.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "690952c5-5037-476a-a660-d54fec614748", + "id": "0", "metadata": {}, "source": [ "# HHNK" @@ -10,7 +10,7 @@ }, { "cell_type": "markdown", - "id": "2799e766-bbe4-4f8d-a780-051b36f773ae", + "id": "1", "metadata": {}, "source": [ "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", @@ -21,19 +21,10 @@ }, { "cell_type": "code", - "execution_count": 69, - "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "execution_count": null, + "id": "2", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], + "outputs": [], "source": [ "import geopandas as gpd\n", "import numpy as np\n", @@ -47,7 +38,7 @@ }, { "cell_type": "markdown", - "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "id": "3", "metadata": {}, "source": [ "## Set Paths" @@ -55,8 +46,8 @@ }, { "cell_type": "code", - "execution_count": 70, - "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "execution_count": null, + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -78,7 +69,7 @@ }, { "cell_type": "markdown", - "id": "25e2a7de-cb4b-4f6b-b2db-c675f481b939", + "id": "5", "metadata": {}, "source": [ "## Load files" @@ -86,8 +77,8 @@ }, { "cell_type": "code", - "execution_count": 71, - "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "execution_count": null, + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -120,7 +111,7 @@ }, { "cell_type": "markdown", - "id": "1e7e929e-e302-4791-b4d2-3808d48cbb56", + "id": "7", "metadata": {}, "source": [ "## Select waterschap boundaries and clip hws layer" @@ -128,8 +119,8 @@ }, { "cell_type": "code", - "execution_count": 72, - "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", + "execution_count": null, + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -142,7 +133,7 @@ }, { "cell_type": "markdown", - "id": "ab931fb8-1011-49e9-88c0-e4b1cb09b217", + "id": "9", "metadata": {}, "source": [ "## Peilgebied and HWS layer overlap:\n", @@ -154,31 +145,10 @@ }, { "cell_type": "code", - "execution_count": 73, - "id": "2f96be55-a022-430c-baad-6a8a90bdcc2f", + "execution_count": null, + "id": "10", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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DbnfKJQoAldfDdxyC2UrJJwzJEUt4fzkwguBf/7Pce1ffwPjBQMTxRX9mSAI+IVrxvHskUqvjZCi0MrshhuSYnaOkphEbkBiErnNabWAH/4Q2L8fCHtzRmMGBoA9e4B3vjNpAJwlEpPIhITNkEoBH/wgcPvtwJEjQKVCxS2VogP/dJpWZEkE3VuGpKglJACAYQCXX362X0XCKeAkzaASEhISzi2SopaQkLCtSIpaQkLCtiIpagkJCduKpKglJCRsK5KilpCQsK1IilpCQsK2IilqCQkJ24qkqCUkJGwrkqKWkJCwrUiKWkJCwrYiKWoJCQnbiqSoJSQkbCuSopaQkLCtSKyHNiDy0KzX62f5lSQknN9En8GNfG2TorYBjUYDADAxMXGWX0lCQgJAn8lcbu0M1sTOewPCMMT09DQymczmch+3QL1ex8TEBI4fP55Yha8iuTdrc77eG8YYGo0GyuUyRHHtk7NkpbYBoihifHztsNxTQTabPa/+cG6F5N6szfl4b9ZboUUkjYKEhIRtRVLUEhISthVJUTuLaJqGz33uc9A07Wy/lHOO5N6sTXJv1idpFCQkJGwrkpVaQkLCtiIpagkJCduKpKglJCRsK5KilpCQsK1Iito6/OhHP8Ldd9+NcrkMQRDw3e9+t+vnjDE8+OCDKJfLMAwDt956K1566aWuaxzHwa//+q9jYGAAqVQK99xzDyYnJ7uuqVQquP/++5HL5ZDL5XD//fejWq12XXPs2DHcfffdSKVSGBgYwCc/+Um4rtt1zYEDB7B3714YhoGxsTH83u/93oZzcifKevfG8zz863/9r3HllVcilUqhXC7jV37lVzA9Pd31GOfjvVnNxz72MQiCgK985Std39+u9+aMwBLW5B//8R/ZZz/7WfbQQw8xAOw73/lO18+/8IUvsEwmwx566CF24MAB9ku/9EtsdHSU1ev1+JqPf/zjbGxsjO3bt48999xz7LbbbmNXXXUV830/vub9738/27NnD3viiSfYE088wfbs2cPuuuuu+Oe+77M9e/aw2267jT333HNs3759rFwuswceeCC+plarseHhYXbvvfeyAwcOsIceeohlMhn2pS996Yzfm2q1yu644w72X//rf2Wvvvoqe/LJJ9l1113Hrrnmmq7HOB/vTSff+c532FVXXcXK5TL7oz/6o66fbdd7cyZIitomWf2HMwxDNjIywr7whS/E37Ntm+VyOfZnf/ZnjDH6cCuKwr71rW/F10xNTTFRFNnDDz/MGGPs5ZdfZgDYj3/84/iaJ598kgFgr776KmOMPiSiKLKpqan4mv/yX/4L0zSN1Wo1xhhjf/qnf8pyuRyzbTu+5vOf/zwrl8ssDMNTeCd6We+DG/H0008zAOzo0aOMseTeTE5OsrGxMXbw4EG2c+fOrqJ2vtyb00Wy/TxBDh8+jNnZWbzvfe+Lv6dpGvbu3YsnnngCALB//354ntd1Tblcxp49e+JrnnzySeRyOVx33XXxNddffz1yuVzXNXv27EG5XI6vufPOO+E4Dvbv3x9fs3fv3i5B5p133onp6WkcOXLk1N+ALVKr1SAIAvL5PIDz+96EYYj7778fv/Vbv4Urrrii5+fn8705FSRF7QSZnZ0FAAwPD3d9f3h4OP7Z7OwsVFVFoVBY95qhoaGexx8aGuq6ZvXzFAoFqKq67jXRf0fXnC1s28a/+Tf/Bh/5yEfiAezz+d588YtfhCzL+OQnP9n35+fzvTkVJC4dJ8lqOyLG2IYWRauv6Xf9qbiG8cPeU22ZtBU8z8O9996LMAzxp3/6pxtev93vzf79+/HHf/zHeO6557b83Nv93pwqkpXaCTIyMgKg92+z+fn5+G+6kZERuK6LSqWy7jVzc3M9j7+wsNB1zernqVQq8Dxv3Wvm5+cB9K4mzxSe5+HDH/4wDh8+jH379nXZ5Jyv9+Z//+//jfn5eezYsQOyLEOWZRw9ehSf/vSnsWvXrvj1no/35lSRFLUTZPfu3RgZGcG+ffvi77mui8ceeww33ngjAOCaa66Boihd18zMzODgwYPxNTfccANqtRqefvrp+JqnnnoKtVqt65qDBw9iZmYmvuaRRx6Bpmm45ppr4mt+9KMfdbXrH3nkEZTL5fjDciaJCtqhQ4fw6KOPolQqdf38fL03999/P1588UW88MIL8Ve5XMZv/dZv4Xvf+x6A8/fenDLOSnviLUKj0WDPP/88e/755xkA9uUvf5k9//zzcQfvC1/4Asvlcuzb3/42O3DgALvvvvv6SjrGx8fZo48+yp577jl2++23923Nv/3tb2dPPvkke/LJJ9mVV17ZtzX/nve8hz333HPs0UcfZePj412t+Wq1yoaHh9l9993HDhw4wL797W+zbDZ72lrz690bz/PYPffcw8bHx9kLL7zAZmZm4i/Hcc7re9OP1d1PxrbvvTkTJEVtHX7wgx8wAD1fv/qrv8oYI1nH5z73OTYyMsI0TWO33HILO3DgQNdjWJbFHnjgAVYsFplhGOyuu+5ix44d67pmaWmJ/fIv/zLLZDIsk8mwX/7lX2aVSqXrmqNHj7IPfvCDzDAMViwW2QMPPNDVhmeMsRdffJHdfPPNTNM0NjIywh588MHT1pZf794cPny4788AsB/84Afn9b3pR7+itl3vzZkgsR5KSEjYViRnagkJCduKpKglJCRsK5KilpCQsK1IilpCQsK2IilqCQkJ24qkqCUkJGwrkqKWkJCwrUiKWkJCwrYiKWoJCQnbiqSoJSQkbCuSopaQkLCtSIpaQkLCtuL/B9b38LJpQp1PAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Plot\n", "fig, ax = plt.subplots()\n", @@ -189,29 +159,18 @@ }, { "cell_type": "code", - "execution_count": 74, - "id": "31892560-b870-4f06-8e58-acdf13489c62", + "execution_count": null, + "id": "11", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['Polygon', 'MultiPolygon'], dtype=object)" - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "HHNK[\"peilgebied\"].geometry.type.unique()" ] }, { "cell_type": "code", - "execution_count": 75, - "id": "552d46b7-24c5-4dc5-a818-885bac461e36", + "execution_count": null, + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -221,19 +180,10 @@ }, { "cell_type": "code", - "execution_count": 76, - "id": "f2740959-7a85-4947-950e-d8a64cb8ece2", + "execution_count": null, + "id": "13", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of overlapping shapes without filter: 61\n", - "Number of overlapping shapes with filter: 0\n" - ] - } - ], + "outputs": [], "source": [ "# Step 1: Identify the Overlapping Areas and clip.\n", "HHNK[\"peilgebied\"] = gpd.overlay(HHNK[\"peilgebied\"], gdf_grens, how=\"intersection\", keep_geom_type=True)\n", @@ -257,7 +207,7 @@ }, { "cell_type": "markdown", - "id": "37f2ee9b-d819-4d7b-92a1-49fe681b4380", + "id": "14", "metadata": {}, "source": [ "## Create peilgebied_cat column" @@ -265,23 +215,12 @@ }, { "cell_type": "code", - "execution_count": 77, - "id": "c5c819f1-dfae-4bf4-b14e-63902e433b1a", + "execution_count": null, + "id": "15", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "yes\n", - "yes\n", - "yes\n", - "yes\n" - ] - } - ], + "outputs": [], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", @@ -307,7 +246,7 @@ }, { "cell_type": "markdown", - "id": "0c470216-2a8b-4a0a-9e0a-7877203df9dd", + "id": "16", "metadata": {}, "source": [ "## Add nhws to ['peilgebied','streefpeil']" @@ -315,8 +254,8 @@ }, { "cell_type": "code", - "execution_count": 78, - "id": "7dfdcfaf-4b9a-443f-b40c-65460af8352d", + "execution_count": null, + "id": "17", "metadata": {}, "outputs": [], "source": [ @@ -333,8 +272,8 @@ }, { "cell_type": "code", - "execution_count": 79, - "id": "a744a7e5-9ac9-4e47-8cf2-791206581786", + "execution_count": null, + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -350,7 +289,7 @@ }, { "cell_type": "markdown", - "id": "161bb7c7-0ba5-4eb6-bab1-b513cfd330f7", + "id": "19", "metadata": {}, "source": [ "### Create layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" @@ -358,8 +297,8 @@ }, { "cell_type": "code", - "execution_count": 80, - "id": "e9d64a75-240f-4583-9b38-3e3b22a578a3", + "execution_count": null, + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -382,7 +321,7 @@ }, { "cell_type": "markdown", - "id": "7fc8e8ea-4f94-4d3e-8820-46a442903ee6", + "id": "21", "metadata": {}, "source": [ "## Add buffer to ['peilgebied','streefpeil']" @@ -390,8 +329,8 @@ }, { "cell_type": "code", - "execution_count": 81, - "id": "ac1121dc-342e-4960-9294-308b619de9d8", + "execution_count": null, + "id": "22", "metadata": {}, "outputs": [], "source": [ @@ -408,8 +347,8 @@ }, { "cell_type": "code", - "execution_count": 82, - "id": "746d2ebd-7307-4745-8e0e-35c047126c27", + "execution_count": null, + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -427,8 +366,8 @@ }, { "cell_type": "code", - "execution_count": 83, - "id": "f3a71ec5-0feb-4c23-a0c2-f3b83f6a5c04", + "execution_count": null, + "id": "24", "metadata": {}, "outputs": [], "source": [ @@ -437,8 +376,8 @@ }, { "cell_type": "code", - "execution_count": 84, - "id": "aec2c426-e962-4ff3-a015-a11695708c52", + "execution_count": null, + "id": "25", "metadata": {}, "outputs": [], "source": [ @@ -448,7 +387,7 @@ }, { "cell_type": "markdown", - "id": "f0d2cab6-6529-4f4a-972a-533de967e85a", + "id": "26", "metadata": {}, "source": [ "## Write output" @@ -456,24 +395,10 @@ }, { "cell_type": "code", - "execution_count": 85, - "id": "02fcfb58-7054-4517-97f3-224c9acb4d1f", + "execution_count": null, + "id": "27", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "gemaal\n", - "hydroobject\n", - "duikersifonhevel\n", - "peilgebied\n", - "streefpeil\n", - "aggregation_area\n" - ] - } - ], + "outputs": [], "source": [ "for key in HHNK.keys():\n", " print(key)\n", @@ -482,21 +407,10 @@ }, { "cell_type": "code", - "execution_count": 86, - "id": "fb843192-82da-4b4f-bb64-f475a4b52162", + "execution_count": null, + "id": "28", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 1])" - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "HHNK[\"peilgebied\"][\"peilgebied_cat\"].unique()" ] @@ -504,7 +418,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0660f4a6-e3f6-4125-9fde-9d66eda1c644", + "id": "29", "metadata": {}, "outputs": [], "source": [] @@ -512,7 +426,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1680c820-f362-4c07-bef0-359a7fa94d36", + "id": "30", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb index 770951c..e48b119 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_HHSK.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "690952c5-5037-476a-a660-d54fec614748", + "id": "0", "metadata": {}, "source": [ "# HHSK" @@ -10,7 +10,7 @@ }, { "cell_type": "markdown", - "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "id": "1", "metadata": {}, "source": [ "This script adds a new column \"peilgebied_cat\" and make sure the peilgebieden allign witgh the HWS layer (Daniel):\n", @@ -21,8 +21,8 @@ }, { "cell_type": "code", - "execution_count": 1, - "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "execution_count": null, + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ }, { "cell_type": "markdown", - "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "id": "3", "metadata": {}, "source": [ "## HHSK" @@ -46,8 +46,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "execution_count": null, + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -67,7 +67,7 @@ }, { "cell_type": "markdown", - "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "id": "5", "metadata": {}, "source": [ "## Load Files" @@ -75,8 +75,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "execution_count": null, + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -111,19 +111,10 @@ }, { "cell_type": "code", - "execution_count": 4, - "id": "0d23e578-c217-4aa4-b5f4-41e01e32a503", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "12509\n", - "12509\n" - ] - } - ], + "execution_count": null, + "id": "7", + "metadata": {}, + "outputs": [], "source": [ "print(len(HHSK[\"duikersifonhevel\"].globalid.unique()))\n", "print(len(HHSK[\"duikersifonhevel\"].globalid))" @@ -131,50 +122,28 @@ }, { "cell_type": "code", - "execution_count": 5, - "id": "5dccf386-5dd3-4d48-8ba9-13e563be96c0", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "id": "8", + "metadata": {}, + "outputs": [], "source": [ "HHSK[\"peilgebied\"].globalid.is_unique" ] }, { "cell_type": "code", - "execution_count": 6, - "id": "2cc1dcf0-84a3-4be0-a20f-e685ceec58ab", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "25622" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "id": "9", + "metadata": {}, + "outputs": [], "source": [ "len(HHSK[\"hydroobject\"])" ] }, { "cell_type": "code", - "execution_count": 7, - "id": "6b749ccd-55e8-4305-857e-994ed1e77725", + "execution_count": null, + "id": "10", "metadata": {}, "outputs": [], "source": [ @@ -186,8 +155,8 @@ }, { "cell_type": "code", - "execution_count": 8, - "id": "8f314b82-55e7-4b45-879f-40b6b7ef84b6", + "execution_count": null, + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -196,28 +165,17 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "9330239f-a3cd-47e2-a6d0-89e6df252c9c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "21838" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "id": "12", + "metadata": {}, + "outputs": [], "source": [ "len(HHSK[\"hydroobject\"])" ] }, { "cell_type": "markdown", - "id": "5556d211-e92e-4ba3-85c2-4ff9bd33fbeb", + "id": "13", "metadata": {}, "source": [ "## Select waterschap boundaries and clip hws layer" @@ -225,8 +183,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "c70bb838-9d93-4d5a-ae12-2da18d145009", + "execution_count": null, + "id": "14", "metadata": {}, "outputs": [], "source": [ @@ -239,7 +197,7 @@ }, { "cell_type": "markdown", - "id": "caba0e5d-0c01-4ff9-9d83-8790125ff85d", + "id": "15", "metadata": {}, "source": [ "## Check Peilgebied and HWS layer overlap:\n", @@ -251,19 +209,10 @@ }, { "cell_type": "code", - "execution_count": 11, - "id": "b3fd731a-1dc8-46cb-b4a3-f052eca43400", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of overlapping shapes without filter: 26\n", - "Number of overlapping shapes with filter: 0\n" - ] - } - ], + "execution_count": null, + "id": "16", + "metadata": {}, + "outputs": [], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(HHSK[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", @@ -289,7 +238,7 @@ }, { "cell_type": "markdown", - "id": "8c84ed19-d0a7-4a27-8e3d-03b132a502ac", + "id": "17", "metadata": {}, "source": [ "## Create peilgebied_cat column" @@ -297,8 +246,8 @@ }, { "cell_type": "code", - "execution_count": 12, - "id": "3702811b-f3c3-4745-a863-73329e22c5cd", + "execution_count": null, + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -307,8 +256,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "id": "9bae7259-c4fd-4f2a-beb4-ec92a924f210", + "execution_count": null, + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -338,8 +287,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "id": "1c1c34e4-4fb2-4921-850b-7a48112da28f", + "execution_count": null, + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -348,8 +297,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "2a3b05ad-eb78-4e3d-bfb8-23ec469d1ed1", + "execution_count": null, + "id": "21", "metadata": {}, "outputs": [], "source": [ @@ -361,7 +310,7 @@ }, { "cell_type": "markdown", - "id": "037faf79-c747-405e-b2e5-a73acfed0aba", + "id": "22", "metadata": { "tags": [] }, @@ -371,8 +320,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "id": "0cdb36b6-9c4a-42fd-95f6-17c6b4e5803f", + "execution_count": null, + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -389,8 +338,8 @@ }, { "cell_type": "code", - "execution_count": 17, - "id": "3ed63b03-009a-4cde-8e64-e7f59bb8ca21", + "execution_count": null, + "id": "24", "metadata": {}, "outputs": [], "source": [ @@ -406,28 +355,17 @@ }, { "cell_type": "code", - "execution_count": 18, - "id": "eb5bc143-8a45-4a77-af37-5b190c2fe9f2", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 1])" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "id": "25", + "metadata": {}, + "outputs": [], "source": [ "HHSK[\"peilgebied\"][\"peilgebied_cat\"].unique()" ] }, { "cell_type": "markdown", - "id": "49d80d89-6676-48cc-a1b3-33771f1a9250", + "id": "26", "metadata": {}, "source": [ "### Create buffer polygon between NHWS and peilgebied/RHWS" @@ -435,8 +373,8 @@ }, { "cell_type": "code", - "execution_count": 19, - "id": "d415acda-966c-4847-a4b6-a06b23f87218", + "execution_count": null, + "id": "27", "metadata": {}, "outputs": [], "source": [ @@ -454,7 +392,7 @@ }, { "cell_type": "markdown", - "id": "eaeccbcb-b0d6-4caa-9fb9-dc8a44016298", + "id": "28", "metadata": {}, "source": [ "### Add buffer to ['peilgebied','streefpeil']" @@ -462,8 +400,8 @@ }, { "cell_type": "code", - "execution_count": 20, - "id": "852a9639-cdc4-4709-abb0-fded2aed5970", + "execution_count": null, + "id": "29", "metadata": {}, "outputs": [], "source": [ @@ -482,8 +420,8 @@ }, { "cell_type": "code", - "execution_count": 21, - "id": "7fb401c1-3291-4bff-896e-1fc1478fe830", + "execution_count": null, + "id": "30", "metadata": {}, "outputs": [], "source": [ @@ -500,8 +438,8 @@ }, { "cell_type": "code", - "execution_count": 22, - "id": "3e9caf33-e3d2-4f01-a281-3557e171720e", + "execution_count": null, + "id": "31", "metadata": {}, "outputs": [], "source": [ @@ -511,7 +449,7 @@ }, { "cell_type": "markdown", - "id": "05a65661-9821-4657-9351-22502ee9a58c", + "id": "32", "metadata": {}, "source": [ "### Store post-processed data" @@ -519,24 +457,10 @@ }, { "cell_type": "code", - "execution_count": 23, - "id": "3425a4bd-f8b1-4dd3-b11b-4bb420c8a5bb", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "gemaal\n", - "hydroobject\n", - "duikersifonhevel\n", - "peilgebied\n", - "streefpeil\n", - "aggregation_area\n" - ] - } - ], + "execution_count": null, + "id": "33", + "metadata": {}, + "outputs": [], "source": [ "for key in HHSK.keys():\n", " print(key)\n", @@ -546,7 +470,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f2b2da20-38a8-4308-908a-c4282bf407a7", + "id": "34", "metadata": {}, "outputs": [], "source": [] @@ -554,7 +478,7 @@ { "cell_type": "code", "execution_count": null, - "id": "77a8d3f4-775a-4484-b0b8-cd23bb1fbd1d", + "id": "35", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb index 503c21e..226dc1f 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/postprocess_data/post-processing_scheldestromen.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "690952c5-5037-476a-a660-d54fec614748", + "id": "0", "metadata": {}, "source": [ "# Scheldestromen" @@ -10,7 +10,7 @@ }, { "cell_type": "markdown", - "id": "e9e378d7-8f05-4562-87b0-34978ba61554", + "id": "1", "metadata": {}, "source": [ "This script adds a new column \"peilgebied_cat\" and makes sure the peilgebieden allign with the HWS layer (Daniel):\n", @@ -21,8 +21,8 @@ }, { "cell_type": "code", - "execution_count": 1, - "id": "0c27c7a4-5733-46ea-970f-cd985b8c92cd", + "execution_count": null, + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ }, { "cell_type": "markdown", - "id": "dc1f28d2-8499-4ebb-906e-1724bd334aac", + "id": "3", "metadata": {}, "source": [ "## Scheldestromen" @@ -46,8 +46,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "id": "e15206a7-6639-40bb-9942-f920085f53b4", + "execution_count": null, + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -69,7 +69,7 @@ }, { "cell_type": "markdown", - "id": "7bbafed8-355a-4ec9-90c9-eca9e3b9313d", + "id": "5", "metadata": {}, "source": [ "### Load Files" @@ -77,8 +77,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "id": "0f6dcf56-e8a4-4055-bc86-a6d33c91d8d8", + "execution_count": null, + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -113,196 +113,27 @@ }, { "cell_type": "code", - "execution_count": 4, - "id": "5fcd4cc6-3c75-462f-af3e-7693c9c5265f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "id": "7", + "metadata": {}, + "outputs": [], "source": [ "Scheldestromen[\"peilgebied\"].globalid.is_unique" ] }, { "cell_type": "code", - "execution_count": 5, - "id": "afc99001-f0fd-4433-9799-72bb34966673", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
codenen3610idglobalidgeometry
0GPG1398_dummy_id_0dummy_nen3610id_peilgebied_0dummy_globalid_peilgebied_0MULTIPOLYGON Z (((39197.262 373523.013 -100000...
1GPG1007_dummy_id_1dummy_nen3610id_peilgebied_1dummy_globalid_peilgebied_1MULTIPOLYGON Z (((15595.339 368349.545 0.000, ...
2GPG803_dummy_id_2dummy_nen3610id_peilgebied_2dummy_globalid_peilgebied_2MULTIPOLYGON Z (((36391.858 373284.887 0.000, ...
3GPG911_dummy_id_3dummy_nen3610id_peilgebied_3dummy_globalid_peilgebied_3MULTIPOLYGON Z (((40712.442 373620.190 0.000, ...
4GPG842_dummy_id_4dummy_nen3610id_peilgebied_4dummy_globalid_peilgebied_4MULTIPOLYGON Z (((33494.859 370960.048 0.000, ...
...............
847GPG1333_dummy_id_847dummy_nen3610id_peilgebied_847dummy_globalid_peilgebied_847MULTIPOLYGON Z (((56639.793 391068.875 0.000, ...
848GPG1335_dummy_id_848dummy_nen3610id_peilgebied_848dummy_globalid_peilgebied_848MULTIPOLYGON Z (((57784.953 391743.719 0.000, ...
849GPG457_dummy_id_849dummy_nen3610id_peilgebied_849dummy_globalid_peilgebied_849MULTIPOLYGON Z (((22309.586 393311.125 0.000, ...
850GPG808_dummy_id_850dummy_nen3610id_peilgebied_850dummy_globalid_peilgebied_850MULTIPOLYGON Z (((58756.058 366653.895 0.000, ...
851GPG1004_dummy_id_851dummy_nen3610id_peilgebied_851dummy_globalid_peilgebied_851MULTIPOLYGON Z (((56100.529 364330.493 0.000, ...
\n", - "

852 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " code nen3610id \\\n", - "0 GPG1398_dummy_id_0 dummy_nen3610id_peilgebied_0 \n", - "1 GPG1007_dummy_id_1 dummy_nen3610id_peilgebied_1 \n", - "2 GPG803_dummy_id_2 dummy_nen3610id_peilgebied_2 \n", - "3 GPG911_dummy_id_3 dummy_nen3610id_peilgebied_3 \n", - "4 GPG842_dummy_id_4 dummy_nen3610id_peilgebied_4 \n", - ".. ... ... \n", - "847 GPG1333_dummy_id_847 dummy_nen3610id_peilgebied_847 \n", - "848 GPG1335_dummy_id_848 dummy_nen3610id_peilgebied_848 \n", - "849 GPG457_dummy_id_849 dummy_nen3610id_peilgebied_849 \n", - "850 GPG808_dummy_id_850 dummy_nen3610id_peilgebied_850 \n", - "851 GPG1004_dummy_id_851 dummy_nen3610id_peilgebied_851 \n", - "\n", - " globalid \\\n", - "0 dummy_globalid_peilgebied_0 \n", - "1 dummy_globalid_peilgebied_1 \n", - "2 dummy_globalid_peilgebied_2 \n", - "3 dummy_globalid_peilgebied_3 \n", - "4 dummy_globalid_peilgebied_4 \n", - ".. ... \n", - "847 dummy_globalid_peilgebied_847 \n", - "848 dummy_globalid_peilgebied_848 \n", - "849 dummy_globalid_peilgebied_849 \n", - "850 dummy_globalid_peilgebied_850 \n", - "851 dummy_globalid_peilgebied_851 \n", - "\n", - " geometry \n", - "0 MULTIPOLYGON Z (((39197.262 373523.013 -100000... \n", - "1 MULTIPOLYGON Z (((15595.339 368349.545 0.000, ... \n", - "2 MULTIPOLYGON Z (((36391.858 373284.887 0.000, ... \n", - "3 MULTIPOLYGON Z (((40712.442 373620.190 0.000, ... \n", - "4 MULTIPOLYGON Z (((33494.859 370960.048 0.000, ... \n", - ".. ... \n", - "847 MULTIPOLYGON Z (((56639.793 391068.875 0.000, ... \n", - "848 MULTIPOLYGON Z (((57784.953 391743.719 0.000, ... \n", - "849 MULTIPOLYGON Z (((22309.586 393311.125 0.000, ... \n", - "850 MULTIPOLYGON Z (((58756.058 366653.895 0.000, ... \n", - "851 MULTIPOLYGON Z (((56100.529 364330.493 0.000, ... \n", - "\n", - "[852 rows x 4 columns]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "id": "8", + "metadata": {}, + "outputs": [], "source": [ "Scheldestromen[\"peilgebied\"]" ] }, { "cell_type": "markdown", - "id": "3e2faf6a-d645-44c7-8882-f6e613e73410", + "id": "9", "metadata": {}, "source": [ "## Select waterschap boundaries and clip hws layer" @@ -310,8 +141,8 @@ }, { "cell_type": "code", - "execution_count": 6, - "id": "0d804374-1484-42d0-88a2-f6bec404349b", + "execution_count": null, + "id": "10", "metadata": {}, "outputs": [], "source": [ @@ -324,7 +155,7 @@ }, { "cell_type": "markdown", - "id": "0cc62e79-0fc4-48d3-b3b6-e4ded29c2e35", + "id": "11", "metadata": {}, "source": [ "## Peilgebied and HWS layer overlap:\n", @@ -336,19 +167,10 @@ }, { "cell_type": "code", - "execution_count": 7, - "id": "a15df030-9a47-47bb-a09c-dd4b5dda65e2", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of overlapping shapes without filter: 203\n", - "Number of overlapping shapes with filter: 0\n" - ] - } - ], + "execution_count": null, + "id": "12", + "metadata": {}, + "outputs": [], "source": [ "# Step 1: Identify the Overlapping Areas and clip\n", "overlaps = gpd.overlay(Scheldestromen[\"peilgebied\"], gdf_hws, how=\"intersection\", keep_geom_type=True)\n", @@ -371,7 +193,7 @@ }, { "cell_type": "markdown", - "id": "87df5559-330b-41e1-8355-cbcc5c33d0a5", + "id": "13", "metadata": {}, "source": [ "## Create peilgebied_cat columnm" @@ -379,19 +201,10 @@ }, { "cell_type": "code", - "execution_count": 8, - "id": "bfc95c53-1282-479b-8348-ad54085a49f6", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "True\n", - "yes\n" - ] - } - ], + "execution_count": null, + "id": "14", + "metadata": {}, + "outputs": [], "source": [ "# Add occurence to geodataframe\n", "peilgebieden_cat = []\n", @@ -412,8 +225,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "cc35d69e-9ce6-423b-abda-0b8314a5ec22", + "execution_count": null, + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -423,28 +236,17 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "4cfae028-3cac-4eaf-bb0e-282de2469448", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 1])" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "id": "16", + "metadata": {}, + "outputs": [], "source": [ "Scheldestromen[\"peilgebied\"][\"peilgebied_cat\"].unique()" ] }, { "cell_type": "markdown", - "id": "43ed5595-4741-4dc9-9c37-4ba790190281", + "id": "17", "metadata": {}, "source": [ "## Add nhws to ['peilgebied','streefpeil']" @@ -452,8 +254,8 @@ }, { "cell_type": "code", - "execution_count": 11, - "id": "b666fddd-e1b8-4e66-9a88-d87fb0df8749", + "execution_count": null, + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -470,8 +272,8 @@ }, { "cell_type": "code", - "execution_count": 12, - "id": "55368969-6fce-4597-a6a8-128f5a54bcb8", + "execution_count": null, + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -487,7 +289,7 @@ }, { "cell_type": "markdown", - "id": "9d3ed0b2-0f05-4c51-b24f-4032059b1bc9", + "id": "20", "metadata": {}, "source": [ "### Create buffer layer that ensures spatial match between peilgebied and hws layers based on the buffer layer" @@ -495,8 +297,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "id": "6c6a1883-1647-493a-acad-411404f1daec", + "execution_count": null, + "id": "21", "metadata": {}, "outputs": [], "source": [ @@ -508,7 +310,7 @@ }, { "cell_type": "markdown", - "id": "8c27471d-9fb3-4d38-bd63-b841cc41cbee", + "id": "22", "metadata": { "tags": [] }, @@ -518,8 +320,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "id": "39a1211a-bb76-4c4f-ac7e-2405d2729705", + "execution_count": null, + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -536,8 +338,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "77237ffe-7099-4872-8f1f-4ccc0cd84b6c", + "execution_count": null, + "id": "24", "metadata": {}, "outputs": [], "source": [ @@ -553,8 +355,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "id": "4eba78fb-2f12-4ea8-9558-d0f97f94f654", + "execution_count": null, + "id": "25", "metadata": {}, "outputs": [], "source": [ @@ -564,7 +366,7 @@ }, { "cell_type": "markdown", - "id": "cf892c2f-bf67-4e5e-a2f1-20699fedcf88", + "id": "26", "metadata": {}, "source": [ "## Store output" @@ -572,26 +374,12 @@ }, { "cell_type": "code", - "execution_count": 17, - "id": "17796202-2f3c-4175-8409-7c2294b76703", + "execution_count": null, + "id": "27", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "stuw\n", - "gemaal\n", - "hydroobject\n", - "duikersifonhevel\n", - "peilgebied\n", - "streefpeil\n", - "aggregation_area\n" - ] - } - ], + "outputs": [], "source": [ "for key in Scheldestromen.keys():\n", " print(key)\n", @@ -601,7 +389,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c3c9d9ed-1be2-49f8-a0fa-0b8804a37de2", + "id": "28", "metadata": {}, "outputs": [], "source": [] @@ -609,7 +397,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7e07fd19-28ae-47f6-b71e-a4c0c49e6b8b", + "id": "29", "metadata": {}, "outputs": [], "source": [] @@ -617,7 +405,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8d0cfb75-8c87-40f7-b15b-47e4efdbc5db", + "id": "30", "metadata": {}, "outputs": [], "source": [] @@ -625,7 +413,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4957fa79-db9d-4de6-a416-6f94052e98db", + "id": "31", "metadata": {}, "outputs": [], "source": [] @@ -633,7 +421,7 @@ { "cell_type": "code", "execution_count": null, - "id": "88882c7e-be83-499f-b1a9-12c9d8eb65ce", + "id": "32", "metadata": {}, "outputs": [], "source": [] @@ -641,7 +429,7 @@ { "cell_type": "code", "execution_count": null, - "id": "065612a7-7d42-4d19-9a26-264811713efd", + "id": "33", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb index cb00919..ef0bc05 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/AmstelGooienVecht.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d13f9ab1-f6e7-4958-96cc-343f0c2138f6", + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -18,7 +18,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ad89ae02-4242-4aca-bd5a-c0c3fd8592ac", + "id": "1", "metadata": {}, "outputs": [], "source": [ @@ -31,7 +31,7 @@ }, { "cell_type": "markdown", - "id": "09981d65-c7d2-4802-9fca-2ef490213b2c", + "id": "2", "metadata": {}, "source": [ "# Amstel, Gooi en Vecht" @@ -40,7 +40,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b5fc0f1d-b2bf-4933-9472-96cb110e6111", + "id": "3", "metadata": {}, "outputs": [], "source": [ @@ -54,7 +54,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d54f0c7c-93a1-44bd-b0f9-fcf37279dc83", + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -79,7 +79,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d8ca7d9a-fcd9-4154-9278-029f2a25b7b7", + "id": "5", "metadata": {}, "outputs": [], "source": [ @@ -100,7 +100,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6a63463e", + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -109,7 +109,7 @@ }, { "cell_type": "markdown", - "id": "3c3e568b-79b0-4809-8274-a029cc61b534", + "id": "7", "metadata": {}, "source": [ "# Nalevering" @@ -118,7 +118,7 @@ { "cell_type": "code", "execution_count": null, - "id": "31327447-601e-4f6a-b141-e97162433b37", + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -148,7 +148,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f68a9597-d088-40c2-88df-931aa281d000", + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -160,7 +160,7 @@ { "cell_type": "code", "execution_count": null, - "id": "951b70c4-740a-47db-9abf-7c5770aa24bb", + "id": "10", "metadata": {}, "outputs": [], "source": [ @@ -170,7 +170,7 @@ { "cell_type": "code", "execution_count": null, - "id": "320352cd-a10b-48ff-afc0-71023df12cb4", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -202,7 +202,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7fd2e22c-95a0-4877-b160-843b36ea56a3", + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -260,7 +260,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3cb1e8f8-fc21-4b03-a6e9-d0c1eecd5701", + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -273,14 +273,14 @@ { "cell_type": "code", "execution_count": null, - "id": "74d6b456-154a-4c13-b53d-4d5e67122485", + "id": "14", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "9276888c-0ba2-4f5d-8ecb-a26baa1747f0", + "id": "15", "metadata": {}, "source": [ "# Control, store" @@ -289,7 +289,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f2554d9e-9957-47bd-8cef-e6bfd4220a61", + "id": "16", "metadata": {}, "outputs": [], "source": [ @@ -299,7 +299,7 @@ { "cell_type": "code", "execution_count": null, - "id": "be767e93-6ab9-4a3d-a7ae-247eb3877617", + "id": "17", "metadata": {}, "outputs": [], "source": [ @@ -314,7 +314,7 @@ { "cell_type": "code", "execution_count": null, - "id": "09e3e8eb-f52b-497b-a0ef-b8613d7771c1", + "id": "18", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb index f6d6120..19ff4db 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Delfland.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -17,7 +17,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "id": "1", "metadata": {}, "outputs": [], "source": [ @@ -26,7 +26,7 @@ }, { "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "id": "2", "metadata": {}, "source": [ "# Delfland" @@ -35,7 +35,7 @@ { "cell_type": "code", "execution_count": null, - "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", + "id": "3", "metadata": { "tags": [] }, @@ -50,7 +50,7 @@ { "cell_type": "code", "execution_count": null, - "id": "532b0b83-2139-4d48-8e42-883ed8e88325", + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -66,7 +66,7 @@ }, { "cell_type": "markdown", - "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", + "id": "5", "metadata": {}, "source": [ "### Adjust column names" @@ -75,7 +75,7 @@ { "cell_type": "code", "execution_count": null, - "id": "059f9113-bcd4-470a-abb6-4fd8ec193f4a", + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -163,7 +163,7 @@ }, { "cell_type": "markdown", - "id": "54a863ea-caab-4be6-bca6-78c2ae91941f", + "id": "7", "metadata": {}, "source": [ "### Add column to determine the HWS_BZM" @@ -172,7 +172,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fda7f5c9-6949-4044-b04d-ba438d2b37d3", + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -183,7 +183,7 @@ { "cell_type": "code", "execution_count": null, - "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -197,7 +197,7 @@ }, { "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "id": "10", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -206,7 +206,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -215,7 +215,7 @@ }, { "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "id": "12", "metadata": {}, "source": [ "### Store data" @@ -224,7 +224,7 @@ { "cell_type": "code", "execution_count": null, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -238,14 +238,14 @@ }, { "cell_type": "raw", - "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", + "id": "14", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": null, - "id": "fedb4c6e-49c2-44f4-88f0-0e1ce4802bc7", + "id": "15", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb index 4ab9d66..c3cf825 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHNK.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -20,14 +20,14 @@ { "cell_type": "code", "execution_count": null, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "id": "1", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "id": "2", "metadata": {}, "source": [ "# Hollands Noorderkwartier" @@ -36,7 +36,7 @@ { "cell_type": "code", "execution_count": null, - "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", + "id": "3", "metadata": {}, "outputs": [], "source": [ @@ -51,7 +51,7 @@ { "cell_type": "code", "execution_count": null, - "id": "baf1ecdb-36e9-4370-ad9d-28dd4b7b0c6b", + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -82,7 +82,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3dbf5fe0-ac68-4270-b936-51dd5e7e8215", + "id": "5", "metadata": {}, "outputs": [], "source": [] @@ -90,7 +90,7 @@ { "cell_type": "code", "execution_count": null, - "id": "033468ab-b74c-468a-90b1-eac395ad8d17", + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -141,7 +141,7 @@ { "cell_type": "code", "execution_count": null, - "id": "805ffd9b-da23-46e3-977f-84575e32f225", + "id": "7", "metadata": {}, "outputs": [], "source": [ @@ -160,7 +160,7 @@ }, { "cell_type": "markdown", - "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", + "id": "8", "metadata": {}, "source": [ "### GPKG" @@ -169,7 +169,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9b86f37d-16de-49db-969a-b233f1531abb", + "id": "9", "metadata": { "tags": [] }, @@ -187,7 +187,7 @@ }, { "cell_type": "markdown", - "id": "cdc5db0a-4f5f-464f-aa98-1cc7ea968680", + "id": "10", "metadata": {}, "source": [ "### .GDB" @@ -196,7 +196,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fe5e6309-4370-4da7-bd2c-9c7f7f727545", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -220,7 +220,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ebd41c6f-24dc-4a56-b24c-65c33b707707", + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -232,7 +232,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e6164c27-8292-4943-bc6e-83445ed956a9", + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -246,7 +246,7 @@ }, { "cell_type": "markdown", - "id": "d72f3d5c-20ed-4ca6-a71f-ddca9cf93fee", + "id": "14", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -255,7 +255,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ffd4ea1b-e2a2-4e3b-a5cf-e820a4709c30", + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -264,7 +264,7 @@ }, { "cell_type": "markdown", - "id": "56fa3a9e-2894-4676-9a47-29fbdadc96c5", + "id": "16", "metadata": { "tags": [] }, @@ -274,7 +274,7 @@ }, { "cell_type": "markdown", - "id": "064607bb-4c54-4dc2-b913-94dfcd18cfa0", + "id": "17", "metadata": {}, "source": [ "Some changes by hand have been made. The resulting shapefile contains the bordering BZM and HWS shapes, including streefpeil" @@ -283,7 +283,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8e8c8649-cde9-40db-b155-d8d80ba65f6a", + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -294,7 +294,7 @@ { "cell_type": "code", "execution_count": null, - "id": "350baa05-21ab-48af-b4b9-cae7fef089a6", + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -314,7 +314,7 @@ }, { "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "id": "20", "metadata": {}, "source": [ "### Store data" @@ -323,7 +323,7 @@ { "cell_type": "code", "execution_count": null, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "id": "21", "metadata": {}, "outputs": [], "source": [ @@ -332,7 +332,7 @@ }, { "cell_type": "raw", - "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", + "id": "22", "metadata": {}, "source": [ "Toevoegen aan notities:\n", diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb index 96e5b13..a336f57 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/HHSK.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -18,7 +18,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "id": "1", "metadata": { "tags": [ "test" @@ -32,7 +32,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -42,7 +42,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", + "id": "3", "metadata": {}, "outputs": [], "source": [ @@ -55,7 +55,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1f39bd82-2fed-41d6-a4f7-979a9a2120bd", + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -79,7 +79,7 @@ { "cell_type": "code", "execution_count": null, - "id": "279c940f-4290-48d6-bd48-b1e79f8be16e", + "id": "5", "metadata": {}, "outputs": [], "source": [ @@ -92,7 +92,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6ea5a43d-b2e6-42ef-8002-01c3377ed897", + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -104,7 +104,7 @@ }, { "cell_type": "markdown", - "id": "32562573-3c78-4565-85be-1b7c03a023be", + "id": "7", "metadata": {}, "source": [ "## Only select status_object == 3" @@ -113,7 +113,7 @@ { "cell_type": "code", "execution_count": null, - "id": "10efac14-fd47-4f61-9180-e89e864713c7", + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -140,7 +140,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d91ef127-a46e-4ce7-b4fc-ec13d39b6820", + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -152,7 +152,7 @@ }, { "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "id": "10", "metadata": {}, "source": [ "# HHSK" @@ -160,7 +160,7 @@ }, { "cell_type": "markdown", - "id": "62a8afeb-9d69-4df0-8e9a-0aa255543fb1", + "id": "11", "metadata": { "tags": [] }, @@ -171,7 +171,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8196e429-c7c1-40f1-9dd3-525699656dc7", + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -197,7 +197,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5f19829d-6116-45d4-92ae-a0e27509afa3", + "id": "13", "metadata": {}, "outputs": [], "source": [] @@ -205,7 +205,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fe221b99-ad03-4688-a656-9cb19e4f1a8b", + "id": "14", "metadata": {}, "outputs": [], "source": [ @@ -225,7 +225,7 @@ }, { "cell_type": "markdown", - "id": "8c3e7f83-1aa8-4714-8ef5-7d0176097d94", + "id": "15", "metadata": { "tags": [] }, @@ -236,7 +236,7 @@ { "cell_type": "code", "execution_count": null, - "id": "75bbbea1-5ef9-4935-ad8e-4f294eaf1c9f", + "id": "16", "metadata": {}, "outputs": [], "source": [ @@ -250,7 +250,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8495f3ba-98df-4eea-97a5-d09534e36885", + "id": "17", "metadata": {}, "outputs": [], "source": [ @@ -267,7 +267,7 @@ }, { "cell_type": "markdown", - "id": "31841446-4e06-47b7-98a3-38d389df26df", + "id": "18", "metadata": {}, "source": [ "### Add the nageleverde peilgebieden to the original data" @@ -276,7 +276,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9ee954f4-c333-4bb4-8dcc-b1e1cd7c2b57", + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -300,7 +300,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c37cfb5c-3b9e-4e57-b44c-3cbe610da093", + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -324,7 +324,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fd7bfade-497b-40bd-8345-8dc4fd3d172b", + "id": "21", "metadata": {}, "outputs": [], "source": [ @@ -344,7 +344,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5631e7ba-f5a0-4eaf-942a-3b6535a4ba8b", + "id": "22", "metadata": {}, "outputs": [], "source": [ @@ -354,7 +354,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7df9baa4-7092-4401-be9a-fd3a451c38b0", + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -364,7 +364,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a03b9016-af7d-4c4e-a10b-1f2ea2ee9254", + "id": "24", "metadata": {}, "outputs": [], "source": [ @@ -374,7 +374,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9736e6e4-0e8f-4396-a1f4-3b4f3e9bf690", + "id": "25", "metadata": {}, "outputs": [], "source": [ @@ -398,7 +398,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b5d16748-7262-4e43-baa2-f182cb8dd142", + "id": "26", "metadata": {}, "outputs": [], "source": [ @@ -409,7 +409,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0292ab77-acfd-4666-9c3b-b9bd8c1f1fec", + "id": "27", "metadata": {}, "outputs": [], "source": [ @@ -419,7 +419,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cd21bcac-8d25-4d47-ad0a-c7338e6e6653", + "id": "28", "metadata": {}, "outputs": [], "source": [ @@ -433,7 +433,7 @@ { "cell_type": "code", "execution_count": null, - "id": "88e9543c-2dbe-4ebf-9423-b38daeeaa004", + "id": "29", "metadata": {}, "outputs": [], "source": [ @@ -443,7 +443,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6cdf901e-c4b4-4fb8-9f40-4731ff3c2d1d", + "id": "30", "metadata": {}, "outputs": [], "source": [ @@ -452,7 +452,7 @@ }, { "cell_type": "markdown", - "id": "51df5dde-d374-4ae3-8d43-1c495581f021", + "id": "31", "metadata": {}, "source": [ "### Delete irrelevant data" @@ -461,7 +461,7 @@ { "cell_type": "code", "execution_count": null, - "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", + "id": "32", "metadata": {}, "outputs": [], "source": [ @@ -476,7 +476,7 @@ { "cell_type": "code", "execution_count": null, - "id": "375f1598-03c1-48a1-bb19-54790273dad0", + "id": "33", "metadata": {}, "outputs": [], "source": [ @@ -488,7 +488,7 @@ }, { "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "id": "34", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -497,7 +497,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "id": "35", "metadata": {}, "outputs": [], "source": [ @@ -506,7 +506,7 @@ }, { "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "id": "36", "metadata": {}, "source": [ "### Store data" @@ -515,7 +515,7 @@ { "cell_type": "code", "execution_count": null, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "id": "37", "metadata": {}, "outputs": [], "source": [ @@ -530,7 +530,7 @@ { "cell_type": "code", "execution_count": null, - "id": "69cbb333-f66e-4ca8-880f-3242846c6a9b", + "id": "38", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb index 4f74f03..d759394 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Hollandse_Delta.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -18,7 +18,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "id": "1", "metadata": {}, "outputs": [], "source": [ @@ -27,7 +27,7 @@ }, { "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "id": "2", "metadata": {}, "source": [ "# HD" @@ -36,7 +36,7 @@ { "cell_type": "code", "execution_count": null, - "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", + "id": "3", "metadata": { "tags": [] }, @@ -51,7 +51,7 @@ { "cell_type": "code", "execution_count": null, - "id": "532b0b83-2139-4d48-8e42-883ed8e88325", + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -79,7 +79,7 @@ { "cell_type": "code", "execution_count": null, - "id": "077f1c26-c738-48f7-b9df-bec5b7356c9a", + "id": "5", "metadata": {}, "outputs": [], "source": [ @@ -104,7 +104,7 @@ }, { "cell_type": "markdown", - "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", + "id": "6", "metadata": {}, "source": [ "### Adjust column names" @@ -113,7 +113,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d54bf05e-f563-44ec-9864-4774e2aecfc6", + "id": "7", "metadata": {}, "outputs": [], "source": [ @@ -146,7 +146,7 @@ { "cell_type": "code", "execution_count": null, - "id": "059f9113-bcd4-470a-abb6-4fd8ec193f4a", + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -202,7 +202,7 @@ { "cell_type": "code", "execution_count": null, - "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -216,7 +216,7 @@ }, { "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "id": "10", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -225,7 +225,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -235,7 +235,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2809cf79-d381-432b-8ddd-3497556f5d82", + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -244,7 +244,7 @@ }, { "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "id": "13", "metadata": {}, "source": [ "### Store data" @@ -253,7 +253,7 @@ { "cell_type": "code", "execution_count": null, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "id": "14", "metadata": {}, "outputs": [], "source": [ @@ -268,7 +268,7 @@ { "cell_type": "code", "execution_count": null, - "id": "52f17e20-95a7-493f-bff9-6600df570fe0", + "id": "15", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb index c38d190..67cc146 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rijnland.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -19,7 +19,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "id": "1", "metadata": {}, "outputs": [], "source": [ @@ -29,7 +29,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -39,7 +39,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", + "id": "3", "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ca6ddcd9-e960-4b5f-ba10-4d222c16a843", + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -74,7 +74,7 @@ }, { "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "id": "5", "metadata": {}, "source": [ "# Rijnland" @@ -83,7 +83,7 @@ { "cell_type": "code", "execution_count": null, - "id": "01dda03c-5a50-4bde-a655-7ed14c85a8d3", + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -96,7 +96,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e58ee099-54b3-415b-8222-9545776a7a61", + "id": "7", "metadata": {}, "outputs": [], "source": [ @@ -113,7 +113,7 @@ { "cell_type": "code", "execution_count": null, - "id": "023a704c-685e-4fe9-9745-39a5ed461a03", + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -126,7 +126,7 @@ { "cell_type": "code", "execution_count": null, - "id": "eb236dc1-11b3-42c4-99e9-fecd568bec2b", + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -143,7 +143,7 @@ { "cell_type": "code", "execution_count": null, - "id": "05098a9e-9b5a-487e-8b3e-7f3d82bda74e", + "id": "10", "metadata": {}, "outputs": [], "source": [ @@ -156,7 +156,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5339a8c5-8c43-4ccd-9008-103fc7e7058e", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -167,7 +167,7 @@ { "cell_type": "code", "execution_count": null, - "id": "096a2293-cd78-4c8d-b0e8-bbbe559a8155", + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -185,7 +185,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6bea1764-0459-4d49-9d48-c5b85a6c3480", + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -197,7 +197,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9efaf904-e94c-4c87-aeb6-c04d4f183e27", + "id": "14", "metadata": {}, "outputs": [], "source": [ @@ -208,7 +208,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1511cf73-aa2b-423f-be87-c95fb0d9bdbb", + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -225,7 +225,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7bdd80ad-650c-4e9f-a3bd-d675c4544830", + "id": "16", "metadata": {}, "outputs": [], "source": [ @@ -247,7 +247,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fb1f6f57-60e7-4122-9648-5a0883933dd1", + "id": "17", "metadata": {}, "outputs": [], "source": [ @@ -257,7 +257,7 @@ { "cell_type": "code", "execution_count": null, - "id": "dbb4827e-17ad-461f-8101-f97f38b2b31e", + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -275,7 +275,7 @@ { "cell_type": "code", "execution_count": null, - "id": "67ba9685-90b6-4389-818f-a003d9d41dc8", + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -289,7 +289,7 @@ { "cell_type": "code", "execution_count": null, - "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -304,7 +304,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9ea24ea8-67ae-4cff-ac30-6492dcd80c41", + "id": "21", "metadata": {}, "outputs": [], "source": [ @@ -313,7 +313,7 @@ }, { "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "id": "22", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -322,7 +322,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -331,7 +331,7 @@ }, { "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "id": "24", "metadata": {}, "source": [ "### Store data" @@ -340,7 +340,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f198edc5-7466-4668-b980-adabdf7c7c94", + "id": "25", "metadata": {}, "outputs": [], "source": [] @@ -348,7 +348,7 @@ { "cell_type": "code", "execution_count": null, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "id": "26", "metadata": {}, "outputs": [], "source": [ @@ -363,7 +363,7 @@ { "cell_type": "code", "execution_count": null, - "id": "48b0320b-258c-44c8-aff2-83153db1a512", + "id": "27", "metadata": {}, "outputs": [], "source": [] @@ -371,7 +371,7 @@ { "cell_type": "code", "execution_count": null, - "id": "311db7da-e645-47f2-af06-0bdf23a5589b", + "id": "28", "metadata": {}, "outputs": [], "source": [] @@ -379,7 +379,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0b93668e-c539-426a-9af2-99d36af00334", + "id": "29", "metadata": {}, "outputs": [], "source": [] @@ -387,7 +387,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5a09e840-7204-4aac-b825-c66394c60775", + "id": "30", "metadata": {}, "outputs": [], "source": [] @@ -395,7 +395,7 @@ { "cell_type": "code", "execution_count": null, - "id": "622a1518-d12d-4b70-ac03-0d251ee09861", + "id": "31", "metadata": {}, "outputs": [], "source": [] @@ -403,7 +403,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c0cf20d1-b76c-4e07-ab7b-9976313f8dad", + "id": "32", "metadata": {}, "outputs": [], "source": [] @@ -411,7 +411,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ace74b96-2316-4b02-b3ca-9e2b9d3c18aa", + "id": "33", "metadata": {}, "outputs": [], "source": [] @@ -419,7 +419,7 @@ { "cell_type": "code", "execution_count": null, - "id": "92551bfe-2672-4c85-988e-e19a320b8cee", + "id": "34", "metadata": {}, "outputs": [], "source": [] @@ -427,7 +427,7 @@ { "cell_type": "code", "execution_count": null, - "id": "70c906ed-d0b1-4ccb-b527-775d1c7e1e48", + "id": "35", "metadata": {}, "outputs": [], "source": [] @@ -435,7 +435,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ed6d57c1-3127-43a2-9de0-29cbf5846bd1", + "id": "36", "metadata": {}, "outputs": [], "source": [] @@ -443,7 +443,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c562c790-2afa-493d-a86d-c438deae6470", + "id": "37", "metadata": {}, "outputs": [], "source": [] @@ -451,7 +451,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0090fd91-40eb-48e1-aa99-2360a13a708e", + "id": "38", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb index d424797..1aedd84 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Rivierenland.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -19,7 +19,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "id": "1", "metadata": {}, "outputs": [], "source": [ @@ -29,7 +29,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4c2a1a6e-1255-4481-9d94-b0206f40e94d", + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ }, { "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "id": "3", "metadata": {}, "source": [ "# WSRL" @@ -47,7 +47,7 @@ { "cell_type": "code", "execution_count": null, - "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", + "id": "4", "metadata": { "tags": [] }, @@ -62,7 +62,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c0f66000-73e6-4b06-b5a2-8308213c2461", + "id": "5", "metadata": {}, "outputs": [], "source": [ @@ -88,7 +88,7 @@ }, { "cell_type": "markdown", - "id": "7469bb6f-dc28-43b3-b9cb-2d4505b5d5fd", + "id": "6", "metadata": {}, "source": [ "Additional data is given in another gpkg, which includes the peilgebieden" @@ -97,7 +97,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5018d1e6-f7ba-4e02-b01a-6d83a3a5e9a3", + "id": "7", "metadata": {}, "outputs": [], "source": [ @@ -112,7 +112,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fc85db32-bb81-4f7f-9a38-2bd89b3fc658", + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -125,7 +125,7 @@ }, { "cell_type": "markdown", - "id": "341e9076-62bd-4d0f-aba9-835cdf93afeb", + "id": "9", "metadata": {}, "source": [ "### Adjust column names" @@ -134,7 +134,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c0302db0-e7f0-4dd2-88b7-3dc9aadd581f", + "id": "10", "metadata": {}, "outputs": [], "source": [ @@ -168,7 +168,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6f56f578-aca0-4957-89df-b6a3a08278a3", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -196,7 +196,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6dce84db-36f3-4a1c-9f10-7c14d9e4a6ed", + "id": "12", "metadata": { "tags": [] }, @@ -214,7 +214,7 @@ { "cell_type": "code", "execution_count": null, - "id": "059f9113-bcd4-470a-abb6-4fd8ec193f4a", + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -224,7 +224,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0181e016-5103-4d66-b0fa-27ef59282f51", + "id": "14", "metadata": {}, "outputs": [], "source": [ @@ -238,7 +238,7 @@ { "cell_type": "code", "execution_count": null, - "id": "96f0e8bf-89e3-4743-b047-d23791bdc5b4", + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -290,7 +290,7 @@ { "cell_type": "code", "execution_count": null, - "id": "500d4d64-c65b-4426-9f89-7f10e12a0514", + "id": "16", "metadata": {}, "outputs": [], "source": [ @@ -303,7 +303,7 @@ { "cell_type": "code", "execution_count": null, - "id": "363a8b04-a132-469a-b5c8-cde2e911a9c0", + "id": "17", "metadata": {}, "outputs": [], "source": [ @@ -319,7 +319,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cfbf8612-93a9-4357-a3c9-cd3dd9d9bf71", + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -332,7 +332,7 @@ { "cell_type": "code", "execution_count": null, - "id": "74734b29-5c4a-4e63-a873-88d8f6ebbd14", + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -361,7 +361,7 @@ { "cell_type": "code", "execution_count": null, - "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -375,7 +375,7 @@ }, { "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "id": "21", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -384,7 +384,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "id": "22", "metadata": {}, "outputs": [], "source": [ @@ -394,14 +394,14 @@ { "cell_type": "code", "execution_count": null, - "id": "d81fa34f-69aa-4d0e-9612-8ae36b959e0b", + "id": "23", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "id": "24", "metadata": {}, "source": [ "### Store data" @@ -410,7 +410,7 @@ { "cell_type": "code", "execution_count": null, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "id": "25", "metadata": {}, "outputs": [], "source": [ @@ -424,14 +424,14 @@ }, { "cell_type": "raw", - "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", + "id": "26", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": null, - "id": "fedb4c6e-49c2-44f4-88f0-0e1ce4802bc7", + "id": "27", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb index 28306f5..de0aa81 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Scheldestromen.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -18,7 +18,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3f5aaa20-7965-4aa7-bf24-79965d87edb1", + "id": "1", "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", + "id": "3", "metadata": {}, "outputs": [], "source": [ @@ -51,7 +51,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1f39bd82-2fed-41d6-a4f7-979a9a2120bd", + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -80,7 +80,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4a7d78f8-7605-4aba-b4c6-b17b81d4f5df", + "id": "5", "metadata": {}, "outputs": [], "source": [ @@ -103,7 +103,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0c14883a-873b-44ee-b9d3-57d7da0b67c3", + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -114,7 +114,7 @@ }, { "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "id": "7", "metadata": {}, "source": [ "# Scheldestromen" @@ -123,7 +123,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cbe8f365-8b00-4824-b04c-b976f9a43f05", + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -145,7 +145,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b3f70ee4-d645-4114-b5e2-2dd573374d6e", + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -158,7 +158,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e58ee099-54b3-415b-8222-9545776a7a61", + "id": "10", "metadata": {}, "outputs": [], "source": [ @@ -171,7 +171,7 @@ { "cell_type": "code", "execution_count": null, - "id": "023a704c-685e-4fe9-9745-39a5ed461a03", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -182,7 +182,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4d5d490e-5bba-4d16-95a0-a17880adc0d9", + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -195,7 +195,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cd21bcac-8d25-4d47-ad0a-c7338e6e6653", + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -209,7 +209,7 @@ { "cell_type": "code", "execution_count": null, - "id": "88e9543c-2dbe-4ebf-9423-b38daeeaa004", + "id": "14", "metadata": {}, "outputs": [], "source": [ @@ -220,7 +220,7 @@ { "cell_type": "code", "execution_count": null, - "id": "42dc4ba1-3ccb-4b0f-a075-77aec9b85a07", + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -234,7 +234,7 @@ }, { "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "id": "16", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -243,7 +243,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "id": "17", "metadata": {}, "outputs": [], "source": [ @@ -253,7 +253,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f9d38f6f-42df-45b4-a1d2-b1a779c104d8", + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -265,7 +265,7 @@ { "cell_type": "code", "execution_count": null, - "id": "45564e81-4fcf-4479-b406-8142b4a64ad1", + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -276,7 +276,7 @@ }, { "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "id": "20", "metadata": {}, "source": [ "### Store data" @@ -285,7 +285,7 @@ { "cell_type": "code", "execution_count": null, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "id": "21", "metadata": {}, "outputs": [], "source": [ @@ -299,14 +299,14 @@ }, { "cell_type": "raw", - "id": "d6b186d5-c907-4b19-9ee2-c7222476856a", + "id": "22", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": null, - "id": "fedb4c6e-49c2-44f4-88f0-0e1ce4802bc7", + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -316,7 +316,7 @@ { "cell_type": "code", "execution_count": null, - "id": "af637fd1-1d33-4eb2-92c7-51c29e477404", + "id": "24", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb index eeb3f2f..f5278bb 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Wetterskip.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -17,7 +17,7 @@ }, { "cell_type": "markdown", - "id": "48a939f4-8a39-4c24-b466-499eba37172d", + "id": "1", "metadata": {}, "source": [ "# Wetterskip Fryslan" @@ -26,7 +26,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b782b9c9-12b9-461b-8874-a59dad72e4bd", + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -40,7 +40,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b96e6dab-5341-480d-b077-5b05a2984aa7", + "id": "3", "metadata": {}, "outputs": [], "source": [ @@ -69,7 +69,7 @@ { "cell_type": "code", "execution_count": null, - "id": "05d63407-5f32-41a9-afbb-ade51a17b7a4", + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -84,7 +84,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ccc56b93-ad7b-4b80-b197-21c6aa07e07c", + "id": "5", "metadata": {}, "outputs": [], "source": [ @@ -95,7 +95,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8e3c5720-ff47-40c2-a3f0-e2e635414ed9", + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -126,7 +126,7 @@ { "cell_type": "code", "execution_count": null, - "id": "21704eb9-844a-483f-b102-53313a08c3e9", + "id": "7", "metadata": {}, "outputs": [], "source": [ @@ -141,7 +141,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7eed68de-331a-4829-b78e-ab39db127d71", + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -169,7 +169,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b17739a1-76d0-4d8e-bbf9-2483cc81abe5", + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -188,7 +188,7 @@ { "cell_type": "code", "execution_count": null, - "id": "54ee138a-5c47-414c-a550-68756f739c91", + "id": "10", "metadata": {}, "outputs": [], "source": [ @@ -207,7 +207,7 @@ { "cell_type": "code", "execution_count": null, - "id": "660832b6-d52f-4c17-9b15-510c265c0bea", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -222,7 +222,7 @@ { "cell_type": "code", "execution_count": null, - "id": "81d3df9b-574a-4bd7-860f-2ac4fda4bd4f", + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -232,7 +232,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ddeaea28-d8ad-484d-880c-965cd4bd8faf", + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -241,7 +241,7 @@ }, { "cell_type": "markdown", - "id": "2f83cab3-fb65-4336-a0ed-36339c34c2dc", + "id": "14", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] @@ -253,7 +253,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2982e516-9b1f-4f4e-86cc-5131ff53925a", + "id": "15", "metadata": { "tags": [] }, @@ -276,7 +276,7 @@ }, { "cell_type": "raw", - "id": "ba602947-7d4c-48b0-9651-683efffd0932", + "id": "16", "metadata": {}, "source": [ "There are some peilgebieden without peil. Merge the peilgebied praktijk and the peilgebiedvigerend. Then, take the difference between this merged peilgebied and the peilbesluit gebied. The leftover areas should get a streefpeil based on the layer of peilmerk." @@ -285,7 +285,7 @@ { "cell_type": "code", "execution_count": null, - "id": "868691a9-9659-4026-9588-2d9e73f04db5", + "id": "17", "metadata": {}, "outputs": [], "source": [ @@ -301,7 +301,7 @@ { "cell_type": "code", "execution_count": null, - "id": "29513621-a948-408e-91cd-9255d55d539b", + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -323,7 +323,7 @@ { "cell_type": "code", "execution_count": null, - "id": "47072d3d-5d87-40c3-bf57-198d618271ae", + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -335,7 +335,7 @@ { "cell_type": "code", "execution_count": null, - "id": "794c3ba1-d2ec-4ed7-9f7c-432fe189cc81", + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -348,7 +348,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7484c309-6a03-492b-a27c-fcf3ef837446", + "id": "21", "metadata": {}, "outputs": [], "source": [ @@ -371,7 +371,7 @@ { "cell_type": "code", "execution_count": null, - "id": "25cfdd50-7216-48aa-a60a-b60710500790", + "id": "22", "metadata": {}, "outputs": [], "source": [] @@ -379,7 +379,7 @@ { "cell_type": "code", "execution_count": null, - "id": "57d0bb94-fc26-4299-804e-8c6a17847c77", + "id": "23", "metadata": {}, "outputs": [], "source": [] diff --git a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb index 4e7c2f7..dbb81e7 100644 --- a/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb +++ b/src/peilbeheerst_model/peilbeheerst_model/preprocess_data/Zuiderzeeland.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "065338fd-62d6-480e-8c80-8bc4b101846b", + "id": "0", "metadata": {}, "outputs": [], "source": [ @@ -20,7 +20,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cbbec2b5-c309-4a42-a914-dd33c2da3610", + "id": "1", "metadata": {}, "outputs": [], "source": [ @@ -30,7 +30,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e7bb775e-cc57-4586-a13c-8d9ba05ace6b", + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -42,7 +42,7 @@ }, { "cell_type": "markdown", - "id": "ffeed567-f858-4e46-83ff-89b7d7ea9b6d", + "id": "3", "metadata": {}, "source": [ "# Zuiderzeeland" @@ -51,7 +51,7 @@ { "cell_type": "code", "execution_count": null, - "id": "636e86b9-bd75-4f8f-91eb-e757fba21fde", + "id": "4", "metadata": { "tags": [] }, @@ -78,7 +78,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a0d86e2c-d365-4a03-8276-d59f93367128", + "id": "5", "metadata": {}, "outputs": [], "source": [ @@ -88,7 +88,7 @@ }, { "cell_type": "raw", - "id": "920dff3d-f81f-4e88-a8be-67fa2c60d41b", + "id": "6", "metadata": {}, "source": [ "ZZL: stuwen in KWKSOORT in overigekunstwerken.gpkg" @@ -97,7 +97,7 @@ { "cell_type": "code", "execution_count": null, - "id": "28a99515-40c8-4a8e-b78f-0781869de8be", + "id": "7", "metadata": {}, "outputs": [], "source": [ @@ -112,7 +112,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e58ee099-54b3-415b-8222-9545776a7a61", + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -128,7 +128,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a9a814bb-bf6a-4822-9447-c8fb0bbc57ae", + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -164,7 +164,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5a55866b-ece5-45ce-836d-c8b1fc737c2b", + "id": "10", "metadata": {}, "outputs": [], "source": [] @@ -172,7 +172,7 @@ { "cell_type": "code", "execution_count": null, - "id": "aec76a19-0893-48a0-b1af-c8c871d0557d", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -246,7 +246,7 @@ }, { "cell_type": "markdown", - "id": "21ccbba5-8e59-4134-9209-db988bc5c3d5", + "id": "12", "metadata": {}, "source": [ "### Check for the correct keys and columns" @@ -255,7 +255,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b064a376-0396-4c93-a2ad-eca3eea54598", + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -264,7 +264,7 @@ }, { "cell_type": "markdown", - "id": "e4e74b4c-17ba-4829-9531-248f4d74cfad", + "id": "14", "metadata": {}, "source": [ "### Store data" @@ -273,7 +273,7 @@ { "cell_type": "code", "execution_count": null, - "id": "556aea48-a819-4f70-8e22-6c843354a46d", + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -288,7 +288,7 @@ { "cell_type": "code", "execution_count": null, - "id": "116f9f2a-ad97-44c5-9a2f-ba43c80e4b2d", + "id": "16", "metadata": {}, "outputs": [], "source": [] @@ -296,7 +296,7 @@ { "cell_type": "code", "execution_count": null, - "id": "01a06379-58e7-4621-b998-4f95b947bd63", + "id": "17", "metadata": {}, "outputs": [], "source": [] @@ -304,7 +304,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f48ffb3f-11d0-41d7-9254-61b2c7873436", + "id": "18", "metadata": {}, "outputs": [], "source": [] diff --git a/src/ribasim_lumping/README.md b/src/ribasim_lumping/README.md index a5ee50c..de8ca0d 100644 --- a/src/ribasim_lumping/README.md +++ b/src/ribasim_lumping/README.md @@ -5,10 +5,10 @@ This python package is used to develop an aggregated Ribasim network (Deltares, This code was integrated into the Ribasim-NL repository after development in https://github.com/harm-nomden-sweco/ribasim_lumping. ### Objective -This python-package provides functions to translate a D-Hydro or a HyDAMO network into a simplified (aggregated/lumped) Ribasim-network: +This python-package provides functions to translate a D-Hydro or a HyDAMO network into a simplified (aggregated/lumped) Ribasim-network: - The user provides a list of locations where the network should be split, resulting into sub-networks which are called 'basins''; - For these basins relations regarding waterlevel-watersurface-watervolume are calculated; -- Exchange of watervolume (flow) between basins takes place via these split locations. +- Exchange of watervolume (flow) between basins takes place via these split locations. - Stage-discharge relations are generated to define flow-rates between basins. ### Dependencies @@ -21,7 +21,7 @@ Most important dependencies: We will make this package accessible via pypi. It is recommended to clone this repository because it is under development and it includes some example notebooks. We are still working on tests and test data, etc. ### Development, contributions and licences -This package is developed by Sweco (contributors: Harm Nomden and Tessa Andringa) when working on a TKI-project (top consortia for knowledge and innovation) within the NHI programme (Dutch Hydrological Instruments programme). This focuses on the development, testing and application of the new Ribasim-model (https://tkideltatechnologie.nl/project/oppervlaktewatermodule-nhi/). +This package is developed by Sweco (contributors: Harm Nomden and Tessa Andringa) when working on a TKI-project (top consortia for knowledge and innovation) within the NHI programme (Dutch Hydrological Instruments programme). This focuses on the development, testing and application of the new Ribasim-model (https://tkideltatechnologie.nl/project/oppervlaktewatermodule-nhi/). It is possible to contribute, create issues, start discussions. We will respond as soon as possible. This package is developed under the MIT license. Reference to this package: Ribasim-Lumping (Sweco, 2023).