{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example of DOV search methods for groundwater permits (grondwatervergunningen)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/DOV-Vlaanderen/pydov/master?filepath=docs%2Fnotebooks%2Fsearch_boringen.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mind that the data source of groundwater permits is just a WFS. It can be accessed with simple WFS calls from OWSLib. It is included in the pydov API for ease of access for less experienced users. And to provide a general interface with unit testing to all considered objects." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Use cases explained below\n", "* Get permits in a bounding box\n", "* Get permits in a bounding box based on specific properties\n", "* Select permits in a municipality and return depth\n", "* Get permits, returning fields not available in the standard output dataframe\n", "* Get for a certain permit the measured water quality parameters if available" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import inspect, sys\n", "import warnings; warnings.simplefilter('ignore')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# check pydov path\n", "import pydov" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Get information about the datatype 'GrondwaterVergunning'" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from pydov.search.grondwatervergunning import GrondwaterVergunningSearch\n", "gwv = GrondwaterVergunningSearch()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A description is provided for the 'Gwvergunningen' datatype (in Dutch):" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Vergunningen verleend voor het winnen van grondwater kunnen gevisualiseerd en bevraagd worden in de Databank Ondergrond Vlaanderen. \\r\\nSinds 1999 zijn vergunningen verleend volgens de VLAREM-wetgeving. Ze zijn ingedeeld in klasse 1, 2 of 3, waarbij er voor klasse 1 en 2 een vergunningsplicht geldt en voor klasse 3 een meldingsplicht. De indelingslijst is terug te vinden in VLAREM I (het winnen van grondwater is opgenomen onder rubriek 53). Oudere aanvragen zijn verleend volgens het Grondwaterdecreet. Deze zijn ingedeeld in categorie A, B en C.'" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gwv.get_description()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The different fields that are available for objects of the 'Gwvergunningen' datatype can be requested with the get_fields() method:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "id_vergunning\n", "pkey_installatie\n", "exploitant\n", "exploitant_naam\n", "inrichtingsnummer\n", "watnr\n", "vergunning\n", "vlaremrubriek\n", "vergund_jaardebiet\n", "vergund_dagdebiet\n", "vergund_volume_per_projectdebiet\n", "van_datum_termijn\n", "tot_datum_termijn\n", "aquifer_HCOVv1_vergunning\n", "aquifer_vergunning\n", "diepte\n", "vergund_aantal_putten\n", "inrichtingsklasse\n", "vergunningverlenende_overheid_VVO\n", "referentie_VVO\n", "nacebelcode\n", "IIOA_CBBnr\n", "IIOA_adres\n", "grondwaterlichaam\n", "actie_waakgebied\n", "x\n", "y\n", "exploitant_adres\n", "cbbnr\n", "kbonr\n", "heffingsnummer\n", "exploitant_namen\n", "eerste_invoer\n", "geom\n" ] } ], "source": [ "fields = gwv.get_fields()\n", "\n", "# print available fields\n", "for f in fields.values():\n", " print(f['name'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, you can list all the fields and their details by inspecting the `get_fields()` output or the search instance itself in a notebook:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", "
\n", " \n", "
\n", " pydov.search.grondwatervergunning.GrondwaterVergunningSearch\n", "
\n", "

Vergunningen verleend voor het winnen van grondwater kunnen gevisualiseerd en bevraagd worden in de Databank Ondergrond Vlaanderen. \r\n", "Sinds 1999 zijn vergunningen verleend volgens de VLAREM-wetgeving. Ze zijn ingedeeld in klasse 1, 2 of 3, waarbij er voor klasse 1 en 2 een vergunningsplicht geldt en voor klasse 3 een meldingsplicht. De indelingslijst is terug te vinden in VLAREM I (het winnen van grondwater is opgenomen onder rubriek 53). Oudere aanvragen zijn verleend volgens het Grondwaterdecreet. Deze zijn ingedeeld in categorie A, B en C.

\n", " \n", "
\n", "

id_vergunning - Uniek volgnummer ter identificatie

  • type: string
  • notnull: True
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

pkey_installatie - ID van de installatie (permkey). Een installatie is een verzameling van grondwaterlocaties van een IIOA (ingedeelde inrichting of activiteit) die 1 of meerdere filters hebben die betrekking hebben op dezelfde aquifer (watervoerende laag).\n", "Hyperlink naar de installatiefiche.

  • type: string
  • notnull: True
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

exploitant - De ID van de exploitant (de natuurlijke of rechtspersoon) van een\n", "grondwaterwinning. Deze exploiteert de IIOA voor een bepaalde periode. Hyperlink naar de exploitantfiche.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

exploitant_naam - De naam van de exploitant (de natuurlijke of rechtspersoon) van een\n", "grondwaterwinning. Deze exploiteert de IIOA voor een bepaalde periode.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

inrichtingsnummer - Een inrichtingsnummer is de (unieke) identificatie die gegenereerd wordt in het \n", "omgevingsloket.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

watnr - Dossiernummer dat door VMM-afdeling bevoegd voor Grondwater gebruikt wordt voor hun interne werking. Hyperlink naar de vergunningfiche.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

vergunning - ID van de vergunning (permkey)

  • type: string
  • notnull: True
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

vlaremrubriek - Code die gebruikt wordt in VLAREM (bijlage 1 VLAREM II) om een rubriek aan te duiden

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

vergund_jaardebiet - Vergunde hoeveelheid grondwater dat volgens de vergunning voor een grondwaterwinning mag opgepompt worden per jaar (in m³).

  • type: float
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

vergund_dagdebiet - Vergunde hoeveelheid grondwater dat volgens de vergunning voor een grondwaterwinning mag opgepompt worden per dag(in m³).

  • type: float
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

vergund_volume_per_projectdebiet - None

  • type: integer
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

van_datum_termijn - Startdatum van de deeltermijn van een vergunning.

  • type: date
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

tot_datum_termijn - Einddatum van de deeltermijn van een vergunning.

  • type: date
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

aquifer_HCOVv1_vergunning - None

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

aquifer_vergunning - None

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

diepte - Maximale vergunde diepte (in meter)

  • type: float
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

vergund_aantal_putten - Maximaal aantal pompputten dat in de vergunde watervoerende laag op een bepaalde locatie mag aangelegd worden (uit de vergunningfiche).

  • type: integer
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

inrichtingsklasse - Klasse van de omgevingsvergunning/milieuvergunning bepaald in VLAREM.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

vergunningverlenende_overheid_VVO - Vergunning Verlenende Overheid: de overheid of instantie die het vergunningsbesluit of de beroepsbeslissing heeft genomen.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

referentie_VVO - Nummer zoals het door de vergunning verlenende overheid gebruikt wordt voor communicatie. Sinds de inwerkingtreding van het omgevingsloket wordt hier het OMG-projectnummer ingevuld. Het nummer bestaat steeds uit 10 cijfers. De eerste 4 zijn het jaartal, nadien komt er een volgnummer.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

nacebelcode - Activiteiten uitgevoerd door de meest recente exploitant op de IIOA

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

IIOA_CBBnr - Nummer uit het Centraal Bedrijven Bestand voor de IIOA (Ingedeelde Inrichting of Activiteit)

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

IIOA_adres - Adres van de IIOA (ligging van de grondwaterwinning)

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

grondwaterlichaam - Grondwaterlichaam van de installatie, zoals afgebakend in uitvoering van de Europese Kaderrichtlijn Water

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

actie_waakgebied - de actie- en waakgebieden afgebakend i.k.v. het gebiedspecifieke beleid zoals vastgesteld in de herstelprogrammas voor grondwaterlichamen in ontoereikende kwantitatieve toestand binnen het Centraal Vlaams Systeem, het Brulandkrijtsysteem en het Sokkelsysteem (2016-2021)

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

x - De x-coördinaat van de installatie in het Lambert72 coördinaatsysteem (in meter, EPSG:31370).

  • type: float
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

y - De y-coördinaat van de installatie in het Lambert72 coördinaatsysteem (in meter, EPSG:31370).

  • type: float
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

exploitant_adres - Adres van de exploitant (maatschappelijke zetel).

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

cbbnr - Nummer uit het Centraal Bedrijven Bestand van de exploitant.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

kbonr - Elke exploitant krijgt in de Kruispunt Bank voor Ondernemingen een uniek\n", "identificatienummer.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

heffingsnummer - Nummer dat gebruikt wordt bij de VMM-afdeling bevoegd voor heffingen voor hun interne werking.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

exploitant_namen - Eventueel alternatieve namen voor de exploitant (afkorting, commerciële naam, \n", "oude namen, ...)

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

eerste_invoer - Het tijdstip waarop deze grondwatervergunning voor het eerst in DOV ingevoerd werd.

  • type: datetime
  • notnull: True
  • query: True
  • cost: 1
  • multivalue: False
\n", "
\n", " \n", " \n", "
\n", "

geom - None

  • type: geometry
  • notnull: False
  • query: False
  • cost: 1
  • multivalue: False
\n", "
\n", "

\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gwv" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example use cases" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get permits in a bounding box" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get data for all the permits that are geographically located within the bounds of the specified box.\n", "\n", "The coordinates are in the Belgian Lambert72 (EPSG:31370) coordinate system and are given in the order of lower left x, lower left y, upper right x, upper right y." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n" ] }, { "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", "
id_vergunningpkey_installatiexydiepteexploitant_naamwatnrvlaremrubriekvergund_jaardebietvergund_dagdebietvan_datum_termijntot_datum_termijnaquifer_vergunninginrichtingsklassenacebelcodeactie_waakgebiedcbbnrkbonr
070509https://www.dov.vlaanderen.be/data/installatie...157118.69210256.807.5BOUWONDERNEMING VOORUITZICHTANT-02373-A53.2.2.b)2<25116363.0NaN2021-04-302026-04-29A0200: Kempens AquifersysteemKlasse 241201: Algemene bouw van residentiële gebouwengeen actie/waakgebiedenNaN0404678357
161750https://www.dov.vlaanderen.be/data/installatie...157158.00210393.009.0BOUWONDERNEMING VOORUITZICHTANT-00091-A53.2.2.b)2<25205020.0NaN2018-05-252018-11-25A0200: Kempens AquifersysteemKlasse 241201: Algemene bouw van residentiële gebouwen...NaNNaN0404678357
264227https://www.dov.vlaanderen.be/data/installatie...157158.00210393.009.0BOUWONDERNEMING VOORUITZICHTANT-00589-A53.2.2.b)2<25205020.0NaN2019-06-072020-06-07A0200: Kempens AquifersysteemKlasse 241201: Algemene bouw van residentiële gebouwen...NaNNaN0404678357
367692https://www.dov.vlaanderen.be/data/installatie...154171.79214241.69NaNAQUAFINANT-01287-A53.2.2.b)2<25200000.0NaN2021-03-082023-09-08A0100: Quartaire AquifersystemenKlasse 237: Afvalwaterafvoergeen actie/waakgebieden004188700000220440691388
466155https://www.dov.vlaanderen.be/data/installatie...154146.74213791.848.0SAMBER COLLEGEANT-00514-A53.2.2.b)2<2531000.0NaN2019-05-032020-05-03A0100: Quartaire AquifersystemenKlasse 241101: Ontwikkeling van residentiële bouwproje...geen actie/waakgebiedenNaN0670629393
\n", "
" ], "text/plain": [ " id_vergunning pkey_installatie x \\\n", "0 70509 https://www.dov.vlaanderen.be/data/installatie... 157118.69 \n", "1 61750 https://www.dov.vlaanderen.be/data/installatie... 157158.00 \n", "2 64227 https://www.dov.vlaanderen.be/data/installatie... 157158.00 \n", "3 67692 https://www.dov.vlaanderen.be/data/installatie... 154171.79 \n", "4 66155 https://www.dov.vlaanderen.be/data/installatie... 154146.74 \n", "\n", " y diepte exploitant_naam watnr \\\n", "0 210256.80 7.5 BOUWONDERNEMING VOORUITZICHT ANT-02373-A \n", "1 210393.00 9.0 BOUWONDERNEMING VOORUITZICHT ANT-00091-A \n", "2 210393.00 9.0 BOUWONDERNEMING VOORUITZICHT ANT-00589-A \n", "3 214241.69 NaN AQUAFIN ANT-01287-A \n", "4 213791.84 8.0 SAMBER COLLEGE ANT-00514-A \n", "\n", " vlaremrubriek vergund_jaardebiet vergund_dagdebiet van_datum_termijn \\\n", "0 53.2.2.b)2<25 116363.0 NaN 2021-04-30 \n", "1 53.2.2.b)2<25 205020.0 NaN 2018-05-25 \n", "2 53.2.2.b)2<25 205020.0 NaN 2019-06-07 \n", "3 53.2.2.b)2<25 200000.0 NaN 2021-03-08 \n", "4 53.2.2.b)2<25 31000.0 NaN 2019-05-03 \n", "\n", " tot_datum_termijn aquifer_vergunning inrichtingsklasse \\\n", "0 2026-04-29 A0200: Kempens Aquifersysteem Klasse 2 \n", "1 2018-11-25 A0200: Kempens Aquifersysteem Klasse 2 \n", "2 2020-06-07 A0200: Kempens Aquifersysteem Klasse 2 \n", "3 2023-09-08 A0100: Quartaire Aquifersystemen Klasse 2 \n", "4 2020-05-03 A0100: Quartaire Aquifersystemen Klasse 2 \n", "\n", " nacebelcode actie_waakgebied \\\n", "0 41201: Algemene bouw van residentiële gebouwen geen actie/waakgebieden \n", "1 41201: Algemene bouw van residentiële gebouwen... NaN \n", "2 41201: Algemene bouw van residentiële gebouwen... NaN \n", "3 37: Afvalwaterafvoer geen actie/waakgebieden \n", "4 41101: Ontwikkeling van residentiële bouwproje... geen actie/waakgebieden \n", "\n", " cbbnr kbonr \n", "0 NaN 0404678357 \n", "1 NaN 0404678357 \n", "2 NaN 0404678357 \n", "3 00418870000022 0440691388 \n", "4 NaN 0670629393 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.util.location import Within, Box\n", "\n", "df = gwv.search(location=Within(Box(153145, 206930, 163150, 216935, epsg=31370)))\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "697" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(df)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "697 permits were obtained in this bbox. However, not all permits are stil active, indicated by *tot_datum_termijn*. For more information about the extracted volumes, referenced by *vlaremrubriek*, see Vlarem II. See [this link](https://navigator.emis.vito.be/mijn-navigator?woId=70336) for more information about the potential definitions." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", "
\n", "

vlaremrubriek - Code die gebruikt wordt in VLAREM (bijlage 1 VLAREM II) om een rubriek aan te duiden

\n", "
\n", " " ], "text/plain": [ "{'name': 'vlaremrubriek', 'definition': 'Code die gebruikt wordt in VLAREM (bijlage 1 VLAREM II) om een rubriek aan te duiden', 'type': 'string', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fields['vlaremrubriek']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get permits in a bounding box with specific properties" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next to querying permits based on their geographic location within a bounding box, we can also search for permits matching a specific set of properties. For this we can build a query using a combination of the 'Gwvergunningen' fields and operators provided by the WFS protocol.\n", "\n", "A list of possible operators can be found below:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['PropertyIsBetween',\n", " 'PropertyIsEqualTo',\n", " 'PropertyIsGreaterThan',\n", " 'PropertyIsGreaterThanOrEqualTo',\n", " 'PropertyIsLessThan',\n", " 'PropertyIsLessThanOrEqualTo',\n", " 'PropertyIsLike',\n", " 'PropertyIsNotEqualTo',\n", " 'PropertyIsNull',\n", " 'SortProperty']" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[i for i,j in inspect.getmembers(sys.modules['owslib.fes2'], inspect.isclass) if 'Property' in i]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we build a query using the *PropertyIsGreaterThan* operator in addition to the earlier bbox, to restrict the query to active permits:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n" ] }, { "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", "
id_vergunningpkey_installatiexydiepteexploitant_naamwatnrvlaremrubriekvergund_jaardebietvergund_dagdebietvan_datum_termijntot_datum_termijnaquifer_vergunninginrichtingsklassenacebelcodeactie_waakgebiedcbbnrkbonr
070509https://www.dov.vlaanderen.be/data/installatie...157118.69210256.807.5BOUWONDERNEMING VOORUITZICHTANT-02373-A53.2.2.b)2<25116363.0NaN2021-04-302026-04-29A0200: Kempens AquifersysteemKlasse 241201: Algemene bouw van residentiële gebouwengeen actie/waakgebiedenNaN0404678357
167692https://www.dov.vlaanderen.be/data/installatie...154171.79214241.69NaNAQUAFINANT-01287-A53.2.2.b)2<25200000.0NaN2021-03-082023-09-08A0100: Quartaire AquifersystemenKlasse 237: Afvalwaterafvoergeen actie/waakgebieden004188700000220440691388
256901https://www.dov.vlaanderen.be/data/installatie...160621.00215168.0065.0VAN DE VELDE KATHYANT/gw2-668853.6.1<2510800.030.02013-12-032033-12-03A0254: Zanden van Berchem en Voort buiten de R...Klasse 20000: onbekendgeen actie/waakgebiedenNaNNaN
356904https://www.dov.vlaanderen.be/data/installatie...157300.00214115.0045.0VENNESHOP BVBAANT-gw2/691953.8.2<175000.020.02014-10-242034-10-24A0254: Zanden van Berchem en Voort buiten de R...Klasse 29601: Wassen en (chemisch) reinigen van textie...geen actie/waakgebiedenNaNNaN
456979https://www.dov.vlaanderen.be/data/installatie...160161.00215342.0050.0JAGERS RIENANT/gw2-630653.6.1<255037.013.82012-11-222032-06-26A0254: Zanden van Berchem en Voort buiten de R...Klasse 20000: onbekendgeen actie/waakgebiedenNaNNaN
\n", "
" ], "text/plain": [ " id_vergunning pkey_installatie x \\\n", "0 70509 https://www.dov.vlaanderen.be/data/installatie... 157118.69 \n", "1 67692 https://www.dov.vlaanderen.be/data/installatie... 154171.79 \n", "2 56901 https://www.dov.vlaanderen.be/data/installatie... 160621.00 \n", "3 56904 https://www.dov.vlaanderen.be/data/installatie... 157300.00 \n", "4 56979 https://www.dov.vlaanderen.be/data/installatie... 160161.00 \n", "\n", " y diepte exploitant_naam watnr \\\n", "0 210256.80 7.5 BOUWONDERNEMING VOORUITZICHT ANT-02373-A \n", "1 214241.69 NaN AQUAFIN ANT-01287-A \n", "2 215168.00 65.0 VAN DE VELDE KATHY ANT/gw2-6688 \n", "3 214115.00 45.0 VENNESHOP BVBA ANT-gw2/6919 \n", "4 215342.00 50.0 JAGERS RIEN ANT/gw2-6306 \n", "\n", " vlaremrubriek vergund_jaardebiet vergund_dagdebiet van_datum_termijn \\\n", "0 53.2.2.b)2<25 116363.0 NaN 2021-04-30 \n", "1 53.2.2.b)2<25 200000.0 NaN 2021-03-08 \n", "2 53.6.1<25 10800.0 30.0 2013-12-03 \n", "3 53.8.2<17 5000.0 20.0 2014-10-24 \n", "4 53.6.1<25 5037.0 13.8 2012-11-22 \n", "\n", " tot_datum_termijn aquifer_vergunning \\\n", "0 2026-04-29 A0200: Kempens Aquifersysteem \n", "1 2023-09-08 A0100: Quartaire Aquifersystemen \n", "2 2033-12-03 A0254: Zanden van Berchem en Voort buiten de R... \n", "3 2034-10-24 A0254: Zanden van Berchem en Voort buiten de R... \n", "4 2032-06-26 A0254: Zanden van Berchem en Voort buiten de R... \n", "\n", " inrichtingsklasse nacebelcode \\\n", "0 Klasse 2 41201: Algemene bouw van residentiële gebouwen \n", "1 Klasse 2 37: Afvalwaterafvoer \n", "2 Klasse 2 0000: onbekend \n", "3 Klasse 2 9601: Wassen en (chemisch) reinigen van textie... \n", "4 Klasse 2 0000: onbekend \n", "\n", " actie_waakgebied cbbnr kbonr \n", "0 geen actie/waakgebieden NaN 0404678357 \n", "1 geen actie/waakgebieden 00418870000022 0440691388 \n", "2 geen actie/waakgebieden NaN NaN \n", "3 geen actie/waakgebieden NaN NaN \n", "4 geen actie/waakgebieden NaN NaN " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from owslib.fes2 import PropertyIsGreaterThan\n", "\n", "query = PropertyIsGreaterThan(propertyname='tot_datum_termijn',\n", " literal='2020-09-01')\n", "df = gwv.search(query=query,\n", " location=Within(Box(153145, 206930, 163150, 216935, epsg=31370)))\n", "\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "325" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(df)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Contrary to the earlier query, this result contains considerably less active permits in the considered bbox." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mind that among these permits, there could also be permits for dewatering works, or ATES systems. Both of these are mostly not important in the development of a hydrogeological model. For dewatering works, it is currently not possible to see the operational status. These works could have well been finished some time ago, or not. See [this link](https://navigator.emis.vito.be/mijn-navigator?woId=70336) for more information about *vlaremrubriek* codes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Select permits in a municipality and return depth" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can limit the columns in the output dataframe by specifying the *return_fields* parameter in our search.\n", "\n", "In this example we query all the permits in the city of Ghent and return their depth. For this a remote WFS GML query is used as described in [this notebook](https://github.com/DOV-Vlaanderen/pydov/blob/master/docs/notebooks/remote_wfs_gml_query.ipynb):" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n" ] }, { "data": { "text/plain": [ "array([[]], dtype=object)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjkAAAGzCAYAAADNKAZOAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAOmBJREFUeJzt3X9YVHXC///XIAOoNSIaIBsqWZmaZoup3P3QEkFyS829ypW7qLy0DCvFtWI3DbXNsm7zR27W3mtu9y3brnuvbrkuSWrSD/MHyfpzycqirYAthBFZx4E53z/6cL6NoIkOAu95Pq7LS88573Pm/TpnlJczc8BhWZYlAAAAw4S09AQAAACaAyUHAAAYiZIDAACMRMkBAABGouQAAAAjUXIAAICRKDkAAMBIlBwAAGAkSg4AADASJQfAeZWTkyOHw2Ev9+zZU3fffXfLTQiAsSg5AIy3YcMG5eTktPQ0AJxnlBwALaq4uFi/+c1vmvUxNmzYoLlz5zbrYwBofUJbegIAglt4eHhLTwGAoXglB0Czeffdd3XNNdcoIiJCvXr10ksvvdRgTGOfyamsrNT06dMVHx+v8PBwXXrppXrmmWfk8/nsMZ999pkcDoeee+45Pf/88+rRo4fat2+vYcOGad++ffa4u+++W8uXL5ckORwO+1c9n8+nxYsXq1+/foqIiFBMTIzuu+8+HTlyJMBnA8D5xis5AJrF3r17lZKSoosuukg5OTmqra3VE088oZiYmNPuV1NTo2HDhunLL7/Ufffdp+7du+v9999Xdna2vv76ay1evNhv/KuvvqqjR48qMzNTx48f15IlS3TTTTdp7969dmH56quvlJ+fr//5n/9p8Hj33XefVq1apXvuuUcPPfSQDh8+rBdeeEG7d+/We++9J6fTGcjTAuB8sgCgGYwdO9aKiIiwPv/8c3vdgQMHrHbt2lnf/6enR48eVkZGhr08f/58q2PHjtZHH33kd7zHHnvMateunVVSUmJZlmUdPnzYkmS1b9/e+uc//2mP2759uyXJmjFjhr0uMzPTauyfu3feeceSZK1evdpvfV5eXqPrAbQtvF0FIODq6ur05ptvauzYserevbu9vk+fPkpNTT3tvmvWrNH111+vzp0765tvvrF/JScnq66uTgUFBX7jx44dqx/96Ef28uDBgzVkyBBt2LDhB+e5Zs0aderUSSNHjvR7rMTERF1wwQXasmVLE5MDaE14uwpAwP3rX//Sv//9b1122WUNtvXu3fu0BeTQoUPas2ePLrrooka3l5eX+y039hiXX365/vjHP/7gPA8dOqSqqipFR0ef0WMBaFsoOQBaFZ/Pp5EjR+qRRx5pdPvll18e0MeKjo7W6tWrG91+qqIFoG2g5AAIuIsuukjt27fXoUOHGmwrLi4+7b69evVSdXW1kpOTz+ixGnuMjz76SD179rSXv3831cmP9dZbb+naa69V+/btz+jxALQdfCYHQMC1a9dOqampWrdunUpKSuz1Bw8e1JtvvnnafW+//XZt27at0XGVlZWqra31W7du3Tp9+eWX9vKOHTu0fft2paWl2es6duxo73/yY9XV1Wn+/PkNHqu2trbBeABti8OyLKulJwHAPHv27NGQIUMUHR2tBx54QLW1tVq2bJliYmK0Z88e1f/T07NnTw0fPlyrVq2S9N0t5Ndff7327Nmju+++W4mJiTp27Jj27t2rP/3pT/rss8/UtWtXffbZZ0pISFD//v119OhRTZ06VR6PR4sXL5bD4dDevXvVrVs3Sd99wPj222/XnXfeqdTUVLVr104TJkyQJN1///166aWXlJaWppSUFDmdTh06dEhr1qzRkiVL9NOf/rRFzh+Ac0fJAdBsCgoKlJWVpb179+riiy/WI488oq+//lpz5849ZcmRpOrqaj311FNas2aNSkpK5HK5dPnll+u2227TQw89JKfTaZecZ599ViEhIVq8eLHKy8s1ePBgvfDCCxowYIB9vLq6Os2YMUOvvfaavvnmG1mWpe//0/eb3/xGL730kg4cOKDQ0FD17NlTaWlpmj59ul2UALQ9lBwAbdL3S87Pf/7zlp4OgFaIz+QAAAAjUXIAAICRKDkAAMBIfCYHAAAYiVdyAACAkSg5AADASMb+WAefz6evvvpKF1544Sm/pTsAAGhdLMvS0aNHFRcXp5CQc3stxtiS89VXXyk+Pr6lpwEAAM7CF198oYsvvvicjmFsybnwwgslfXeSXC5XwI/v9Xq1ceNG+9vAmypYckrBk5Wc5gmWrMGSUwqerI3ldLvdio+Pt7+OnwtjS079W1Qul6vZSk6HDh3kcrmMfwIGQ04peLKS0zzBkjVYckrBk/V0OQPxURM+eAwAAIxEyQEAAEai5AAAACNRcgAAgJEoOQAAwEiUHAAAYCRKDgAAMBIlBwAAGImSAwAAjETJAQAARqLkAAAAIzW55BQUFOiWW25RXFycHA6H1q1b12DMwYMHdeutt6pTp07q2LGjrrnmGpWUlNjbjx8/rszMTHXp0kUXXHCBxo8fr7KyMr9jlJSUaPTo0erQoYOio6M1a9Ys1dbWNj0hAAAISk0uOceOHdNVV12l5cuXN7r9k08+0XXXXacrrrhCb7/9tvbs2aPZs2crIiLCHjNjxgy98cYbWrNmjbZu3aqvvvpKt912m729rq5Oo0eP1okTJ/T+++/rd7/7nVatWqU5c+acRUQAABCMmvxTyNPS0pSWlnbK7b/85S918803a+HChfa6Xr162X+uqqrSb3/7W+Xm5uqmm26SJL3yyivq06ePPvjgAw0dOlQbN27UgQMH9NZbbykmJkYDBw7U/Pnz9eijjyonJ0dhYWENHtfj8cjj8djLbrdb0nc/4dTr9TY15g+qP2ZzHLs1CZacUvBkJad5giVrsOSUgidrYzkDmdlhWZZ11js7HFq7dq3Gjh0rSfL5fOrUqZMeeeQRvfvuu9q9e7cSEhKUnZ1tj9m8ebNGjBihI0eOKDIy0j5Wjx49NH36dM2YMUNz5szR66+/rqKiInv74cOHdckll+jDDz/U1Vdf3WAuOTk5mjt3boP1ubm56tChw9lGBAAA51FNTY0mTpyoqqoquVyuczpWk1/JOZ3y8nJVV1fr6aef1pNPPqlnnnlGeXl5uu2227RlyxYNGzZMpaWlCgsL8ys4khQTE6PS0lJJUmlpqWJiYhpsr9/WmOzsbGVlZdnLbrdb8fHxSklJOeeT1JjEeXmaP8in2btC5PE5An785rAvJ7XJ+3i9XuXn52vkyJFyOp3NMKvWI1iyktM8wZI1WHJKwZO1sZz178QEQkBLjs/nkySNGTNGM2bMkCQNHDhQ77//vlasWKFhw4YF8uH8hIeHKzw8vMF6p9PZLE+Q+mLj8TnkqWsbJedczkNzncfWKFiyktM8wZI1WHJKwZP1+zkDmTegt5B37dpVoaGh6tu3r9/6Pn362HdXxcbG6sSJE6qsrPQbU1ZWptjYWHvMyXdb1S/XjwEAADidgJacsLAwXXPNNSouLvZb/9FHH6lHjx6SpMTERDmdTm3atMneXlxcrJKSEiUlJUmSkpKStHfvXpWXl9tj8vPz5XK5GhQoAACAxjT57arq6mp9/PHH9vLhw4dVVFSkqKgode/eXbNmzdIdd9yhG264QTfeeKPy8vL0xhtv6O2335YkderUSZMmTVJWVpaioqLkcrn04IMPKikpSUOHDpUkpaSkqG/fvrrzzju1cOFClZaW6vHHH1dmZmajb0kBAACcrMklZ9euXbrxxhvt5foP+2ZkZGjVqlUaN26cVqxYoQULFuihhx5S79699X//93+67rrr7H2ef/55hYSEaPz48fJ4PEpNTdWvf/1re3u7du20fv16TZ06VUlJSerYsaMyMjI0b968c8kKAACCSJNLzvDhw/VDd53fe++9uvfee0+5PSIiQsuXLz/lNxSUvrulfMOGDU2dHgAAgCR+dhUAADAUJQcAABiJkgMAAIxEyQEAAEai5AAAACNRcgAAgJEoOQAAwEiUHAAAYCRKDgAAMBIlBwAAGImSAwAAjETJAQAARqLkAAAAI1FyAACAkSg5AADASJQcAABgJEoOAAAwEiUHAAAYiZIDAACMRMkBAABGouQAAAAjUXIAAICRKDkAAMBIlBwAAGAkSg4AADASJQcAABiJkgMAAIxEyQEAAEai5AAAACNRcgAAgJEoOQAAwEiUHAAAYCRKDgAAMFKTS05BQYFuueUWxcXFyeFwaN26dacce//998vhcGjx4sV+6ysqKpSeni6Xy6XIyEhNmjRJ1dXVfmP27Nmj66+/XhEREYqPj9fChQubOlUAABDEmlxyjh07pquuukrLly8/7bi1a9fqgw8+UFxcXINt6enp2r9/v/Lz87V+/XoVFBRoypQp9na3262UlBT16NFDhYWFevbZZ5WTk6OXX365qdMFAABBKrSpO6SlpSktLe20Y7788ks9+OCDevPNNzV69Gi/bQcPHlReXp527typQYMGSZKWLVumm2++Wc8995zi4uK0evVqnThxQitXrlRYWJj69eunoqIiLVq0yK8MfZ/H45HH47GX3W63JMnr9crr9TY15g8KD7H8fm8LzuY81O/THOewtQmWrOQ0T7BkDZacUvBkbSxnIDM7LMs666/SDodDa9eu1dixY+11Pp9PycnJGjNmjB5++GH17NlT06dP1/Tp0yVJK1eu1MyZM3XkyBF7n9raWkVERGjNmjUaN26c7rrrLrndbr+3wrZs2aKbbrpJFRUV6ty5c4O55OTkaO7cuQ3W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dR5bo2DJSk7zBEvWYMkpBU/W7+cMZN6A3kIeGxsrSSorK/NbX1ZWZm+LjY1VeXm53/ba2lpVVFT4jWnsGN9/DAAAgNMJaMlJSEhQbGysNm3aZK9zu93avn27kpKSJElJSUmqrKxUYWGhPWbz5s3y+XwaMmSIPaagoMDvw0f5+fnq3bt3o29VAQAAnKzJJae6ulpFRUUqKiqSJB0+fFhFRUUqKSmRw+HQ9OnT9eSTT+r111/X3r17dddddykuLs7+cHKfPn00atQoTZ48WTt27NB7772nadOmacKECYqLi5MkTZw4UWFhYZo0aZL279+vP/zhD1qyZInfZ24AAABOp8mfydm1a5duvPFGe7m+eGRkZGjVqlV65JFHdOzYMU2ZMkWVlZW67rrrlJeXp4iICHuf1atXa9q0aRoxYoRCQkI0fvx4LV261N7eqVMnbdy4UZmZmUpMTFTXrl01Z86cU94+DgAAcLIml5zhw4frdHedOxwOzZs3T/PmzTvlmKioKOXm5p72cQYMGKB33nmnqdMDAACQxM+uAgAAhqLkAAAAI1FyAACAkSg5AADASJQcAABgJEoOAAAwEiUHAAAYiZIDAACMRMkBAABGouQAAAAjUXIAAICRKDkAAMBIlBwAAGAkSg4AADASJQcAABiJkgMAAIxEyQEAAEai5AAAACNRcgAAgJEoOQAAwEiUHAAAYCRKDgAAMBIlBwAAGImSAwAAjETJAQAARqLkAAAAI1FyAACAkSg5AADASJQcAABgJEoOAAAwEiUHAAAYiZIDAACMRMkBAABGCnjJqaur0+zZs5WQkKD27durV69emj9/vizLssdYlqU5c+aoW7duat++vZKTk3Xo0CG/41RUVCg9PV0ul0uRkZGaNGmSqqurAz1dAABgqICXnGeeeUYvvviiXnjhBR08eFDPPPOMFi5cqGXLltljFi5cqKVLl2rFihXavn27OnbsqNTUVB0/ftwek56erv379ys/P1/r169XQUGBpkyZEujpAgAAQ4UG+oDvv/++xowZo9GjR0uSevbsqd///vfasWOHpO9exVm8eLEef/xxjRkzRpL06quvKiYmRuvWrdOECRN08OBB5eXlaefOnRo0aJAkadmyZbr55pv13HPPKS4ursHjejweeTwee9ntdkuSvF6vvF5voGMqPMTy+70tOJvzUL9Pc5zD1iZY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g2s8atQovzFtIeeCBQt0zTXX6MILL1R0dLTGjh2r4uJivzFn8nwtKSnR6NGj1aFDB0VHR2vWrFmqra09n1F+0JlkHT58eIPrev/99/uNae1ZX3zxRQ0YMMD+jrdJSUn629/+Zm835Xr+UE4TruWpPP3003I4HJo+fbq97rxdVwtN8tprr1lhYWHWypUrrf3791uTJ0+2IiMjrbKyspae2ll74oknrH79+llff/21/etf//qXvf3++++34uPjrU2bNlm7du2yhg4dav3Hf/xHC874zG3YsMH65S9/af35z3+2JFlr16712/70009bnTp1statW2f9/e9/t2699VYrISHB+ve//22PGTVqlHXVVVdZH3zwgfXOO+9Yl156qfWzn/3sPCc5vR/KmZGRYY0aNcrvGldUVPiNaQs5U1NTrVdeecXat2+fVVRUZN18881W9+7drerqanvMDz1fa2trrSuvvNJKTk62du/ebW3YsMHq2rWrlZ2d3RKRTulMsg4bNsyaPHmy33Wtqqqyt7eFrK+//rr117/+1froo4+s4uJi6xe/+IXldDqtffv2WZZlzvX8oZwmXMvG7Nixw+rZs6c1YMAA6+GHH7bXn6/rSslposGDB1uZmZn2cl1dnRUXF2ctWLCgBWd1bp544gnrqquuanRbZWWl5XQ6rTVr1tjrDh48aEmytm3bdp5mGBgnf/H3+XxWbGys9eyzz9rrKisrrfDwcOv3v/+9ZVmWdeDAAUuStXPnTnvM3/72N8vhcFhffvnleZt7U5yq5IwZM+aU+7TFnJZlWeXl5ZYka+vWrZZlndnzdcOGDVZISIhVWlpqj3nxxRctl8tleTye8xugCU7OalnffWH8/heOk7XVrJ07d7b++7//2+jraVn/f07LMvNaHj161Lrsssus/Px8v3zn87rydlUTnDhxQoWFhUpOTrbXhYSEKDk5Wdu2bWvBmZ27Q4cOKS4uTpdcconS09NVUlIiSSosLJTX6/XLfMUVV6h79+5tPvPhw4dVWlrql61Tp04aMmSInW3btm2KjIzUoEGD7DHJyckKCQnR9u3bz/ucz8Xbb7+t6Oho9e7dW1OnTtW3335rb2urOauqqiRJUVFRks7s+bpt2zb179/f77unp6amyu12a//+/edx9k1zctZ6q1evVteuXXXllVcqOztbNTU19ra2lrWurk6vvfaajh07pqSkJGOv58k565l0LSUpMzNTo0eP9rt+0vn9e9pqf6xDa/TNN9+orq6uwY+WiImJ0T/+8Y8WmtW5GzJkiFatWqXevXvr66+/1ty5c3X99ddr3759Ki0tVVhYWIOf6B4TE6PS0tKWmXCA1M+/setZv620tFTR0dF+20NDQxUVFdWm8o8aNUq33XabEhIS9Mknn+gXv/iF0tLStG3bNrVr165N5vT5fJo+fbquvfZaXXnllZJ0Rs/X0tLSRq95/bbWqLGskjRx4kT16NFDcXFx2rNnjx599FEVFxfrz3/+s6S2k3Xv3r1KSkrS8ePHdcEFF2jt2rXq27evioqKjLqep8opmXMt67322mv68MMPtXPnzgbbzuffU0oOlJaWZv95wIABGjJkiHr06KE//vGPat++fQvODIEyYcIE+8/9+/fXgAED1KtXL7399tsaMWJEC87s7GVmZmrfvn169913W3oqze5UWadMmWL/uX///urWrZtGjBihTz75RL169Trf0zxrvXv3VlFRkaqqqvSnP/1JGRkZ2rp1a0tPK+BOlbNv377GXEtJ+uKLL/Twww8rPz9fERERLToX3q5qgq5du6pdu3YNPgFeVlam2NjYFppV4EVGRuryyy/Xxx9/rNjYWJ04cUKVlZV+Y0zIXD//013P2NhYlZeX+22vra1VRUVFm85/ySWXqGvXrvr4448ltb2c06ZN0/r167VlyxZdfPHF9vozeb7GxsY2es3rt7U2p8ramCFDhkiS33VtC1nDwsJ06aWXKjExUQsWLNBVV12lJUuWGHc9T5WzMW31WkrfvR1VXl6uH//4xwoNDVVoaKi2bt2qpUuXKjQ0VDExMeftulJymiAsLEyJiYnatGmTvc7n82nTpk1+76u2ddXV1frkk0/UrVs3JSYmyul0+mUuLi5WSUlJm8+ckJCg2NhYv2xut1vbt2+3syUlJamyslKFhYX2mM2bN8vn89n/CLVF//znP/Xtt9+qW7duktpOTsuyNG3aNK1du1abN29WQkKC3/Yzeb4mJSVp7969fqUuPz9fLpfLfuugNfihrI0pKiqSJL/r2haynszn88nj8Rh1PRtTn7MxbflajhgxQnv37lVRUZH9a9CgQUpPT7f/fN6uayA+QR1MXnvtNSs8PNxatWqVdeDAAWvKlClWZGSk3yfA25qZM2dab7/9tnX48GHrvffes5KTk62uXbta5eXllmV9d6tf9+7drc2bN1u7du2ykpKSrKSkpBae9Zk5evSotXv3bmv37t2WJGvRokXW7t27rc8//9yyrO9uIY+MjLT+8pe/WHv27LHGjBnT6C3kV199tbV9+3br3XfftS677LJWd2v16XIePXrU+vnPf25t27bNOnz4sPXWW29ZP/7xj63LLrvMOn78uH2MtpBz6tSpVqdOnay3337b71bbmpoae8wPPV/rb01NSUmxioqKrLy8POuiiy5qdbfi/lDWjz/+2Jo3b561a9cu6/Dhw9Zf/vIX65JLLrFuuOEG+xhtIetjjz1mbd261Tp8+LC1Z88e67HHHrMcDoe1ceNGy7LMuZ6ny2nKtTydk+8eO1/XlZJzFpYtW2Z1797dCgsLswYPHmx98MEHLT2lc3LHHXdY3bp1s8LCwqwf/ehH1h133GF9/PHH9vZ///vf1gMPPGB17tzZ6tChgzVu3Djr66+/bsEZn7ktW7ZYkhr8ysjIsCzru9vIZ8+ebcXExFjh4eHWiBEjrOLiYr9jfPvtt9bPfvYz64ILLrBcLpd1zz33WEePHm2BNKd2upw1NTVWSkqKddFFF1lOp9Pq0aOHNXny5AbFvC3kbCyjJOuVV16xx5zJ8/Wzzz6z0tLSrPbt21tdu3a1Zs6caXm93vOc5vR+KGtJSYl1ww03WFFRUVZ4eLh16aWXWrNmzfL73iqW1fqz3nvvvVaPHj2ssLAw66KLLrJGjBhhFxzLMud6ni6nKdfydE4uOefrujosy7Ka/FoUAABAK8dncgAAgJEoOQAAwEiUHAAAYCRKDgAAMBIlBwAAGImSAwAAjETJAQAARqLkAAAAI1FyAACAkSg5AADASJQcAABgpP8PA/n4FpChXLYAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from owslib.etree import etree\n", "from owslib.wfs import WebFeatureService\n", "from owslib.fes import PropertyIsEqualTo\n", "\n", "from pydov.util.location import GmlFilter\n", "\n", "gemeentegrenzen = WebFeatureService(\n", " 'https://geo.api.vlaanderen.be/VRBG/wfs',\n", " version='1.1.0')\n", "naam_filter = PropertyIsEqualTo(propertyname='NAAM', literal='Gent')\n", "gemeente_poly = gemeentegrenzen.getfeature(\n", " typename='VRBG:Refgem',\n", " filter=etree.tostring(naam_filter.toXML()).decode(\"utf8\"),\n", " outputFormat='text/xml; subtype=gml/3.2').read()\n", "\n", "df = gwv.search(\n", " location=GmlFilter(gemeente_poly, Within), \n", " return_fields=('id_vergunning', 'diepte'))\n", "df.hist(column='diepte')" ] }, { "cell_type": "code", "execution_count": 15, "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", "
diepte
count1879.000000
mean17.469729
std28.925402
min-1.000000
25%5.000000
50%7.000000
75%17.000000
max385.000000
\n", "
" ], "text/plain": [ " diepte\n", "count 1879.000000\n", "mean 17.469729\n", "std 28.925402\n", "min -1.000000\n", "25% 5.000000\n", "50% 7.000000\n", "75% 17.000000\n", "max 385.000000" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get permit data, returning fields not available in the standard output dataframe" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Not all fields are available in the default output frame. However, you can examine the available fields with the *get_fields()* method and pass the desired field name to the *return_fields* parameter." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n" ] }, { "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", "
id_vergunningdieptevergunningverlenende_overheid_VVO
0697582.2Gemeentebestuur GENT
164011NaNGemeentebestuur GENT
2636403.0Vlaams Gewest
363638NaNVlaams Gewest
4639387.0Gemeentebestuur GENT
\n", "
" ], "text/plain": [ " id_vergunning diepte vergunningverlenende_overheid_VVO\n", "0 69758 2.2 Gemeentebestuur GENT\n", "1 64011 NaN Gemeentebestuur GENT\n", "2 63640 3.0 Vlaams Gewest\n", "3 63638 NaN Vlaams Gewest\n", "4 63938 7.0 Gemeentebestuur GENT" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from owslib.fes2 import PropertyIsGreaterThanOrEqualTo\n", "\n", "query = PropertyIsGreaterThanOrEqualTo(\n", " propertyname='diepte',\n", " literal='200')\n", "\n", "df = gwv.search(\n", " location=GmlFilter(gemeente_poly, Within),\n", " return_fields=('id_vergunning', 'diepte', 'vergunningverlenende_overheid_VVO'))\n", "\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Estimate groundwater quality data for a certain permit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Given groundwater scarcity in Belgium, the reuse of dewatering drainage is increasingly being considerd. In some cases, this water contains a high iron load which is not desirable for a lot of applications. \n", "Determine the groundwater quality for a certain permit, e.g. for the permit at Diestsestraat 209 3000 Leuven." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n" ] }, { "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", "
id_vergunningpkey_installatiexydiepteexploitant_naamwatnrvlaremrubriekvergund_jaardebietvergund_dagdebietvan_datum_termijntot_datum_termijnaquifer_vergunninginrichtingsklassenacebelcodeactie_waakgebiedcbbnrkbonr
064279https://www.dov.vlaanderen.be/data/installatie...174097.89174672.5411.0Rialto HoldingVLB-00133-A53.2.2.a)<2522450.0445.02019-05-292023-03-16A0620: Zand van BrusselKlasse 364200: HoldingsNaNNaN0675544028
\n", "
" ], "text/plain": [ " id_vergunning pkey_installatie x \\\n", "0 64279 https://www.dov.vlaanderen.be/data/installatie... 174097.89 \n", "\n", " y diepte exploitant_naam watnr vlaremrubriek \\\n", "0 174672.54 11.0 Rialto Holding VLB-00133-A 53.2.2.a)<25 \n", "\n", " vergund_jaardebiet vergund_dagdebiet van_datum_termijn tot_datum_termijn \\\n", "0 22450.0 445.0 2019-05-29 2023-03-16 \n", "\n", " aquifer_vergunning inrichtingsklasse nacebelcode \\\n", "0 A0620: Zand van Brussel Klasse 3 64200: Holdings \n", "\n", " actie_waakgebied cbbnr kbonr \n", "0 NaN NaN 0675544028 " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.util.location import Within, Box\n", "from owslib.fes2 import PropertyIsEqualTo\n", "import pandas as pd\n", "\n", "query = PropertyIsEqualTo(propertyname='inrichtingsnummer',\n", " literal='20181004-0018')\n", "df_permit = gwv.search(query=query)\n", "df_permit.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The water is extracted from the hydrogeological layer 'Zand van Brussel' which is designated with the according HCOV code '0620'. We can now look in the data from the groundwater quality monitoring wells which wells are situated nearby for that specific hydrogeological layer. For this, we first have to look at the dataset comprising the head measurements, that also contains the HCOV code of the aquifer. Subsequently, we can fetch the water quality monitoring data of the selected well screens. \n", "More information on the HCOV code can be found through this [link](https://www.dov.vlaanderen.be/index.php/page/hcov-kartering). " ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "gw_id\n", "pkey_grondwaterlocatie\n", "filternummer\n", "pkey_filter\n", "namen\n", "filtergrafiek\n", "putgrafiek\n", "Aquifer_HCOVv1\n", "Aquifer_HCOVv2\n", "diepte_onderkant_filter\n", "lengte_filter\n", "putsoort\n", "filtertype\n", "meetnet\n", "x\n", "y\n", "start_grondwaterlocatie_mtaw\n", "gemeente\n", "grondwaterlichaam\n", "afgesloten_volgens_gwdecreet\n", "datum_in_filter\n", "datum_uit_filter\n", "stijghoogterapport\n", "analyserapport\n", "boornummer\n", "boringfiche\n", "peilmetingen_van\n", "peilmetingen_tot\n", "kwaliteitsmetingen_van\n", "kwaliteitsmetingen_tot\n", "recentste_exploitant\n", "beheerder\n", "aantal_dagen_sinds_laatste_meting\n", "eerste_invoer\n", "recentste_installatie\n", "geom\n", "meetnet_code\n", "aquifer_code\n", "grondwaterlichaam_code\n", "regime\n", "datum\n", "tijdstip\n", "peil_mtaw\n", "betrouwbaarheid\n", "methode\n", "filterstatus\n", "filtertoestand\n", "mv_mtaw\n" ] } ], "source": [ "from pydov.search.grondwaterfilter import GrondwaterFilterSearch\n", "from pydov.search.monster import MonsterSearch\n", "from pydov.util.query import Join\n", "\n", "gfs = GrondwaterFilterSearch()\n", "fields = gfs.get_fields()\n", "\n", "# print available fields\n", "for f in fields.values():\n", " print(f['name'])\n" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n" ] }, { "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", "
pkey_filterxyAquifer_HCOVv2diepte_onderkant_filter
0https://www.dov.vlaanderen.be/data/filter/1967...170932.00177130.000620 - Zand van Brussel42.0
3https://www.dov.vlaanderen.be/data/filter/2014...171603.90174596.620620 - Zand van Brussel66.0
13https://www.dov.vlaanderen.be/data/filter/2006...171800.00179870.000620 - Zand van BrusselNaN
19https://www.dov.vlaanderen.be/data/filter/2024...176420.07176010.010620 - Zand van Brussel37.1
20https://www.dov.vlaanderen.be/data/filter/1900...173804.20175098.740620 - Zand van Brussel24.0
\n", "
" ], "text/plain": [ " pkey_filter x y \\\n", "0 https://www.dov.vlaanderen.be/data/filter/1967... 170932.00 177130.00 \n", "3 https://www.dov.vlaanderen.be/data/filter/2014... 171603.90 174596.62 \n", "13 https://www.dov.vlaanderen.be/data/filter/2006... 171800.00 179870.00 \n", "19 https://www.dov.vlaanderen.be/data/filter/2024... 176420.07 176010.01 \n", "20 https://www.dov.vlaanderen.be/data/filter/1900... 173804.20 175098.74 \n", "\n", " Aquifer_HCOVv2 diepte_onderkant_filter \n", "0 0620 - Zand van Brussel 42.0 \n", "3 0620 - Zand van Brussel 66.0 \n", "13 0620 - Zand van Brussel NaN \n", "19 0620 - Zand van Brussel 37.1 \n", "20 0620 - Zand van Brussel 24.0 " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.grondwaterfilter import GrondwaterFilterSearch\n", "from pydov.search.monster import MonsterSearch\n", "from pydov.search.observatie import ObservatieSearch\n", "from pydov.util.query import FuzzyJoin, PropertyInList\n", "\n", "from owslib.fes2 import And\n", "\n", "filter = GrondwaterFilterSearch()\n", "monster = MonsterSearch()\n", "observatie = ObservatieSearch()\n", "\n", "# Find the groundwater screens\n", "df_filters = filter.search(location=Within(Box(170000, 174000, 190000, 180000, epsg=31370)),\n", " return_fields=['pkey_filter', 'x', 'y', 'Aquifer_HCOVv2', 'diepte_onderkant_filter'])\n", "\n", "df_filters = df_filters[(df_filters['Aquifer_HCOVv2'].str.contains('0620'))]\n", "df_filters.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now select the according water quality data:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[000/001] .\n" ] }, { "data": { "text/plain": [ " parameter \n", "resultaat count Ijzer (Fe) 223.000000\n", " Ijzer II (Fe2+) 75.000000\n", " mean Ijzer (Fe) 1.412457\n", " Ijzer II (Fe2+) 0.701560\n", " std Ijzer (Fe) 1.929072\n", " Ijzer II (Fe2+) 1.268594\n", " min Ijzer (Fe) 0.000000\n", " Ijzer II (Fe2+) 0.000000\n", " 25% Ijzer (Fe) 0.020000\n", " Ijzer II (Fe2+) 0.020000\n", " 50% Ijzer (Fe) 0.164000\n", " Ijzer II (Fe2+) 0.070000\n", " 75% Ijzer (Fe) 3.245000\n", " Ijzer II (Fe2+) 0.649000\n", " max Ijzer (Fe) 12.300000\n", " Ijzer II (Fe2+) 4.400000\n", "dtype: float64" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Find the samples linked to the groundwater screens\n", "df_monsters = monster.search(\n", " query=FuzzyJoin(df_filters, on='pkey_parents', using='pkey_filter'),\n", " return_fields=['pkey_monster'])\n", "\n", "# Find the iron observations linked to the samples\n", "df_observaties = observatie.search(\n", " query=And([\n", " Join(df_monsters, on='pkey_parent', using='pkey_monster'),\n", " PropertyInList('parameter', [\n", " 'Ijzer (Fe)',\n", " 'Ijzer II (Fe2+)',\n", " 'Ijzer III (Fe3+)',\n", " 'Ijzer - Totaal (Fe(Tot.))'\n", " ])\n", " ])\n", ")\n", "\n", "# Make sure results are numeric\n", "df_observaties['resultaat'] = pd.to_numeric(df_observaties.resultaat)\n", "\n", "# Group stats per parameter\n", "df_stat = df_observaties.loc[:, ['parameter', 'resultaat']].groupby('parameter').describe().unstack(1)\n", "df_stat" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mind the units of the values. " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['mg/l'], dtype=object)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_observaties.eenheid.unique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As such, the iron content of the considered hydrogeological layer is on average 1.4 mg/L with a stdev of 1.93 mg/L. This is most likely above the standards for use as irrigation water (see this [link](https://lv.vlaanderen.be/nl/voorlichting-info/publicaties/praktijkgidsen/water/duurzaam-watergebruik-de-openluchtgroenteteelt-3#chemische)). Mind that further processing with a limited selection of the two nearest monitoring screens is possible. And even further, an indication of the nearest OVAM sites can be obtained from the WFS with (in Dutch) 'Dossierinfo' as available from this [link](https://services.ovam.be/geoserver2/wfs?REQUEST=GetCapabilities&SERVICE=WFS)." ] } ], "metadata": { "kernelspec": { "display_name": ".venv (3.13.5)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.5" } }, "nbformat": 4, "nbformat_minor": 4 }