{ "cells": [ { "cell_type": "markdown", "id": "48977305", "metadata": {}, "source": [ "# Workshop introduction pydov\n", "\n", "[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/DOV-Vlaanderen/pydov/master?filepath=docs%2Fworkshop%2Fworkshop-pydov.ipynb)\n", "\n", "## What is pydov?\n", "\n", "- A Python package to easily use DOV data in other scripts and tools\n", " - Searching on attributes and location​\n", " - Combine with other datasets\n", " - Results available in a Pandas DataFrame​\n", "\n", "- A reference client implementation of our metadata, WFS and XML services\n", "\n", "- A community project\n", " - Open development on GitHub:​ https://github.com/DOV-Vlaanderen/pydov/\n", " - Open-source license: MIT\n", "\n", "- Contribute yourself?\n", " - Issues for questions\n", " - Documentation\n", " - Code" ] }, { "cell_type": "markdown", "id": "785b233e", "metadata": {}, "source": [ "## Installation\n", "\n", "`pip install -U pydov[geom]`" ] }, { "cell_type": "markdown", "id": "2bbcda2c", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Quick start" ] }, { "cell_type": "code", "execution_count": 1, "id": "7b966d4e", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[000/002] cc\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", "
pkey_boringboornummerxymv_mtawstart_boring_mtawgemeentediepte_boring_vandiepte_boring_totdatum_aanvanguitvoerderboorgatmetingdiepte_methode_vandiepte_methode_totboormethode
0https://www.dov.vlaanderen.be/data/boring/1989...kb14d40e-B777108015.0202860.05.05.0Gent0.0660.01989-01-25onbekendFalse0.0660.0onbekend
1https://www.dov.vlaanderen.be/data/boring/1972...kb14d40e-B778108090.0202835.05.05.0Gent0.0600.01972-05-17onbekendFalse0.0600.0onbekend
\n", "
" ], "text/plain": [ " pkey_boring boornummer x \\\n", "0 https://www.dov.vlaanderen.be/data/boring/1989... kb14d40e-B777 108015.0 \n", "1 https://www.dov.vlaanderen.be/data/boring/1972... kb14d40e-B778 108090.0 \n", "\n", " y mv_mtaw start_boring_mtaw gemeente diepte_boring_van \\\n", "0 202860.0 5.0 5.0 Gent 0.0 \n", "1 202835.0 5.0 5.0 Gent 0.0 \n", "\n", " diepte_boring_tot datum_aanvang uitvoerder boorgatmeting \\\n", "0 660.0 1989-01-25 onbekend False \n", "1 600.0 1972-05-17 onbekend False \n", "\n", " diepte_methode_van diepte_methode_tot boormethode \n", "0 0.0 660.0 onbekend \n", "1 0.0 600.0 onbekend " ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.boring import BoringSearch\n", "\n", "from pydov.util.location import Within, Box\n", "\n", "from owslib.fes2 import PropertyIsGreaterThan\n", "\n", "boring_search = BoringSearch()\n", "\n", "dataframe = boring_search.search(\n", " query=PropertyIsGreaterThan(propertyname='diepte_tot_m', literal='550'),\n", " location=Within(Box(107500, 202000, 108500, 203000, epsg=31370))\n", ")\n", "\n", "dataframe" ] }, { "cell_type": "markdown", "id": "3dee5617", "metadata": {}, "source": [ "## Select datasets\n", "> More info: https://pydov.readthedocs.io/en/stable/select_datasets.html\n", "\n", "To retrieve data you must first choose which datasets you want to query.\n", "\n", "### Search objects\n", "\n", "Each of the available datasets has a corresponding search object to query the data.\n", "\n", "The following code creates three search objects to query data about Boreholes, Samples and Observations respectively." ] }, { "cell_type": "code", "execution_count": 2, "id": "34fb1018", "metadata": {}, "outputs": [], "source": [ "from pydov.search.boring import BoringSearch\n", "from pydov.search.monster import MonsterSearch\n", "from pydov.search.observatie import ObservatieSearch\n", "\n", "boring_search = BoringSearch()\n", "monster_search = MonsterSearch()\n", "observatie_search = ObservatieSearch()" ] }, { "cell_type": "markdown", "id": "442bf590", "metadata": {}, "source": [ "_Exercise: which search object can you use to find groundwater level measurements?_\n", "
\n", "Answer\n", "from pydov.search.grondwaterfilter import GrondwaterFilterSearch\n", "\n", "grondwaterfilter_search = GrondwaterFilterSearch()\n", "
" ] }, { "cell_type": "markdown", "id": "8dc5516a", "metadata": {}, "source": [ "### Object types\n", "> More info: https://pydov.readthedocs.io/en/stable/output_fields.html#customizing-object-types-and-subtypes\n", "\n", "Each search object is linked to an object type, which determines which fields are available in the result by default.\n", "\n", "When creating the search object, you can optionally specify the object type to influence which fields will be returned. The following code is equivalent to the earlier version of `observatie_search`:" ] }, { "cell_type": "code", "execution_count": 3, "id": "25849cf7", "metadata": {}, "outputs": [], "source": [ "from pydov.search.observatie import ObservatieSearch\n", "\n", "from pydov.types.observatie import Observatie\n", "\n", "observatie_search = ObservatieSearch(\n", " objecttype=Observatie\n", ")" ] }, { "cell_type": "markdown", "id": "8d4664a9", "metadata": {}, "source": [ "The following schema clarifies the difference between search objects, object types and subtypes. A search object determines which fields can be searched on, an object type determines which fields can be returned in the result. For each record in the search result there is at most one result from the (main) object type, and there can be multiple records from the subtype.\n", "\n", "![objecttypes](../objecttypes.svg)" ] }, { "cell_type": "markdown", "id": "f2d6aa8d", "metadata": {}, "source": [ "### Fieldsets\n", "\n", "For some object types, extra fields are available that are not present in the result by default, but can be added easily. Using the `get_fieldsets()` method on an object type, you can query which sets are available." ] }, { "cell_type": "code", "execution_count": 4, "id": "e6923f33", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'ObservatieDetails': {'name': 'ObservatieDetails',\n", " 'class': pydov.types.observatie.ObservatieDetails,\n", " 'definition': 'Fieldset containing fields with extra details about the observation. It has the following fields: betrouwbaarheid, geobserveerd_object_type, geobserveerd_object_naam, geobserveerd_object_permkey.'}}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.observatie import ObservatieSearch\n", "from pydov.types.observatie import Observatie\n", "\n", "Observatie.get_fieldsets()" ] }, { "cell_type": "code", "execution_count": 5, "id": "606fa285", "metadata": {}, "outputs": [], "source": [ "from pydov.types.observatie import ObservatieDetails\n", "\n", "observatie_search = ObservatieSearch(\n", " objecttype=Observatie.with_extra_fields(ObservatieDetails)\n", ")" ] }, { "cell_type": "markdown", "id": "d8cdbef6", "metadata": {}, "source": [ "_Exercise: which fieldsets are available for Boreholes?_\n", "
\n", "Answer\n", "\n", "__MethodeXyz__\n", "\n", "from pydov.types.boring import Boring\n", "\n", "Boring.get_fieldsets()\n", "
" ] }, { "cell_type": "markdown", "id": "e078a266", "metadata": {}, "source": [ "### Subtypes\n", "\n", "For some object types, extra subtypes are available, which can be used instead of the default subtype. Using the `get_subtypes()` method on an object type, you can query which subtypes are available." ] }, { "cell_type": "code", "execution_count": 6, "id": "ed350c62", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'Fractiemeting': {'name': 'Fractiemeting',\n", " 'class': pydov.types.observatie.Fractiemeting,\n", " 'definition': 'Subtype showing the details of a fraction measurement. It has the following fields: fractiemeting_ondergrens, fractiemeting_bovengrens, fractiemeting_waarde.'},\n", " 'Meetreeks': {'name': 'Meetreeks',\n", " 'class': pydov.types.observatie.Meetreeks,\n", " 'definition': 'Subtype showing the details of a measurement series. It has the following fields: meetreeks_meetpunt_parameter, meetreeks_meetpunt, meetreeks_meetpunt_eenheid, meetreeks_meetwaarde_parameter, meetreeks_meetwaarde, meetreeks_meetwaarde_eenheid.'},\n", " 'ObservatieHerhaling': {'name': 'ObservatieHerhaling',\n", " 'class': pydov.types.observatie.ObservatieHerhaling,\n", " 'definition': 'Subtype showing the repetition information of an observation. It has the following fields: herhaling_aantal, herhaling_minimum, herhaling_maximum, herhaling_standaardafwijking.'},\n", " 'SecundaireParameter': {'name': 'SecundaireParameter',\n", " 'class': pydov.types.observatie.SecundaireParameter,\n", " 'definition': 'Subtype showing the secondary parameter of an observation. It has the following fields: secundaireparameter_parameter, secundaireparameter_resultaat, secundaireparameter_eenheid.'}}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.observatie import ObservatieSearch\n", "from pydov.types.observatie import Observatie\n", "\n", "Observatie.get_subtypes()" ] }, { "cell_type": "code", "execution_count": 7, "id": "f2db2d35", "metadata": {}, "outputs": [], "source": [ "from pydov.types.observatie import SecundaireParameter\n", "\n", "observatie_search = ObservatieSearch(\n", " objecttype=Observatie.with_subtype(SecundaireParameter)\n", ")" ] }, { "cell_type": "markdown", "id": "efbe2866", "metadata": {}, "source": [ "_Exercise: which subtypes are available for Groundwater Filters?_\n", "
\n", "Answer\n", "\n", "__Gxg and Peilmeting__\n", "\n", "from pydov.types.grondwaterfilter import GrondwaterFilter\n", "\n", "GrondwaterFilter.get_subtypes()\n", "
" ] }, { "cell_type": "markdown", "id": "ee4c8f4b", "metadata": {}, "source": [ "## Search by location\n", "> More info: https://pydov.readthedocs.io/en/stable/query_location.html\n", "\n", "Geographical search can be done with the `location` parameter of the `search` method. You provide a geographical filter and a geometry object, or a filter factory based on a geodataframe or vector GIS file.\n", "\n", "### Overlap with rectangle\n", "\n", "Searching for objects that overlap with a rectangular area is simple:\n" ] }, { "cell_type": "code", "execution_count": 8, "id": "1b7c9396", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_observatiepkey_parentfenomeentijddiepte_van_mdiepte_tot_mparametergroepparameterdetectieconditieresultaateenheidmethodeuitvoerderherkomst
0https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/196...1968-01-01NaNNaNBodem_chemischpH H2O (ph_h2o)NaN5.8-NaNCentrum voor Grondonderzoek (C.V.G.)LABO
1https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/196...1968-01-01NaNNaNBodem_chemischOrganische C - percentage (organische_c_perc)NaN3.69%Aardewerk nieuwe methode organische koolstofCentrum voor Grondonderzoek (C.V.G.)LABO
2https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/196...1968-01-01NaNNaNBodem_fysisch_textuurTextuur - grove fractie (groter dan 2000 µm) (...NaN0.0%NaNCentrum voor Grondonderzoek (C.V.G.)LABO
3https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/196...1968-01-01NaNNaNBodem_fysisch_textuurTextuur - handmatig - fout groter dan 5% (tex...NaNjaNaNNaNCentrum voor Grondonderzoek (C.V.G.)LABO
4https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/196...1968-01-01NaNNaNBodem_fysisch_textuurMediaan van de textuurfracties (textuur_mediaan)NaN140µmNaNCentrum voor Grondonderzoek (C.V.G.)LABO
5https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/196...1968-01-01NaNNaNBodem_chemischCalciumcarbonaatgehalte (caco3_gehalte)NaN0.0%NaNCentrum voor Grondonderzoek (C.V.G.)LABO
6https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/196...1968-01-01NaNNaNBodem_fysisch_textuurTextuurfracties (textuurmeting)NaNNaN%NaNCentrum voor Grondonderzoek (C.V.G.)LABO
7https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/196...1968-01-01NaNNaNBodem_fysisch_textuurTextuur - granulometrie - klasse bodemkarterin...NaNZ - ZandNaNNaNCentrum voor Grondonderzoek (C.V.G.)LABO
8https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/196...1968-01-01NaNNaNBodem_fysisch_textuurTextuur - handmatig - klassen bodemkartering (...NaNS - Lemig zand-NaNCentrum voor Grondonderzoek (C.V.G.)LABO
\n", "
" ], "text/plain": [ " pkey_observatie \\\n", "0 https://www.dov.vlaanderen.be/data/observatie/... \n", "1 https://www.dov.vlaanderen.be/data/observatie/... \n", "2 https://www.dov.vlaanderen.be/data/observatie/... \n", "3 https://www.dov.vlaanderen.be/data/observatie/... \n", "4 https://www.dov.vlaanderen.be/data/observatie/... \n", "5 https://www.dov.vlaanderen.be/data/observatie/... \n", "6 https://www.dov.vlaanderen.be/data/observatie/... \n", "7 https://www.dov.vlaanderen.be/data/observatie/... \n", "8 https://www.dov.vlaanderen.be/data/observatie/... \n", "\n", " pkey_parent fenomeentijd \\\n", "0 https://www.dov.vlaanderen.be/data/monster/196... 1968-01-01 \n", "1 https://www.dov.vlaanderen.be/data/monster/196... 1968-01-01 \n", "2 https://www.dov.vlaanderen.be/data/monster/196... 1968-01-01 \n", "3 https://www.dov.vlaanderen.be/data/monster/196... 1968-01-01 \n", "4 https://www.dov.vlaanderen.be/data/monster/196... 1968-01-01 \n", "5 https://www.dov.vlaanderen.be/data/monster/196... 1968-01-01 \n", "6 https://www.dov.vlaanderen.be/data/monster/196... 1968-01-01 \n", "7 https://www.dov.vlaanderen.be/data/monster/196... 1968-01-01 \n", "8 https://www.dov.vlaanderen.be/data/monster/196... 1968-01-01 \n", "\n", " diepte_van_m diepte_tot_m parametergroep \\\n", "0 NaN NaN Bodem_chemisch \n", "1 NaN NaN Bodem_chemisch \n", "2 NaN NaN Bodem_fysisch_textuur \n", "3 NaN NaN Bodem_fysisch_textuur \n", "4 NaN NaN Bodem_fysisch_textuur \n", "5 NaN NaN Bodem_chemisch \n", "6 NaN NaN Bodem_fysisch_textuur \n", "7 NaN NaN Bodem_fysisch_textuur \n", "8 NaN NaN Bodem_fysisch_textuur \n", "\n", " parameter detectieconditie \\\n", "0 pH H2O (ph_h2o) NaN \n", "1 Organische C - percentage (organische_c_perc) NaN \n", "2 Textuur - grove fractie (groter dan 2000 µm) (... NaN \n", "3 Textuur - handmatig - fout groter dan 5% (tex... NaN \n", "4 Mediaan van de textuurfracties (textuur_mediaan) NaN \n", "5 Calciumcarbonaatgehalte (caco3_gehalte) NaN \n", "6 Textuurfracties (textuurmeting) NaN \n", "7 Textuur - granulometrie - klasse bodemkarterin... NaN \n", "8 Textuur - handmatig - klassen bodemkartering (... NaN \n", "\n", " resultaat eenheid methode \\\n", "0 5.8 - NaN \n", "1 3.69 % Aardewerk nieuwe methode organische koolstof \n", "2 0.0 % NaN \n", "3 ja NaN NaN \n", "4 140 µm NaN \n", "5 0.0 % NaN \n", "6 NaN % NaN \n", "7 Z - Zand NaN NaN \n", "8 S - Lemig zand - NaN \n", "\n", " uitvoerder herkomst \n", "0 Centrum voor Grondonderzoek (C.V.G.) LABO \n", "1 Centrum voor Grondonderzoek (C.V.G.) LABO \n", "2 Centrum voor Grondonderzoek (C.V.G.) LABO \n", "3 Centrum voor Grondonderzoek (C.V.G.) LABO \n", "4 Centrum voor Grondonderzoek (C.V.G.) LABO \n", "5 Centrum voor Grondonderzoek (C.V.G.) LABO \n", "6 Centrum voor Grondonderzoek (C.V.G.) LABO \n", "7 Centrum voor Grondonderzoek (C.V.G.) LABO \n", "8 Centrum voor Grondonderzoek (C.V.G.) LABO " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.observatie import ObservatieSearch\n", "from pydov.util.location import Within, Box\n", "\n", "observatie_search = ObservatieSearch()\n", "\n", "observatie_search.search(\n", " location=Within(Box(minx=200000, miny=211000, maxx=201000, maxy=212000, epsg=31370))\n", ")" ] }, { "cell_type": "markdown", "id": "1f2d829b", "metadata": {}, "source": [ "_Exercise: how many samples are in the rectangle with coordinates [150000, 150000, 175000, 175000]?_\n", "
\n", "Answer\n", "\n", "__8669__\n", "\n", "from pydov.search.monster import MonsterSearch\n", "from pydov.util.location import Within, Box\n", "\n", "monster_search = MonsterSearch()\n", "\n", "monster_search.search(\n", " location=Within(Box(minx=150000, miny=150000, maxx=175000, maxy=175000, epsg=31370))\n", ")\n", "
" ] }, { "cell_type": "markdown", "id": "98e5101e", "metadata": {}, "source": [ "### Buffer around point location\n", "\n", "You can also search on a circular buffer around a point location:" ] }, { "cell_type": "code", "execution_count": 9, "id": "a656e3da", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_observatiepkey_parentfenomeentijddiepte_van_mdiepte_tot_mparametergroepparameterdetectieconditieresultaateenheidmethodeuitvoerderherkomst
0https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2025-06-30NaNNaNZware metalenChroom (Cr)NaN1.149µg/lOnbekendEurofins Analytico B.V.LABO
1https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2025-06-30NaNNaNAnionenBicarbonaat (HCO3)NaN5.5mg/lOnbekendEurofins Analytico B.V.LABO
2https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2025-06-30NaNNaNFysico-chemische parametersOpgeloste zuurstof (O2)NaN1.2mg/lOnbekendEurofins Analytico B.V.VELD
3https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2025-06-30NaNNaNKationenNatrium (Na)NaN13.0mg/lOnbekendEurofins Analytico B.V.LABO
4https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2025-06-30NaNNaNKationenKalium (K)NaN10.7mg/lOnbekendEurofins Analytico B.V.LABO
..........................................
3573https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2022-11-17NaNNaNAnionenSulfaat (SO4)NaN49.8mg/lOnbekendEurofins Analytico B.V.LABO
3574https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2022-11-17NaNNaNAnionenChloriden (Cl)NaN32.7mg/lOnbekendEurofins Analytico B.V.LABO
3575https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2022-11-17NaNNaNZware metalenAluminium (Al)NaN0.104mg/lOnbekendEurofins Analytico B.V.LABO
3576https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2022-11-17NaNNaNKationenKalium (K)NaN22.0mg/lOnbekendEurofins Analytico B.V.LABO
3577https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2022-11-17NaNNaNZware metalenArseen (As)<5.000µg/lOnbekendEurofins Analytico B.V.LABO
\n", "

3578 rows × 13 columns

\n", "
" ], "text/plain": [ " pkey_observatie \\\n", "0 https://www.dov.vlaanderen.be/data/observatie/... \n", "1 https://www.dov.vlaanderen.be/data/observatie/... \n", "2 https://www.dov.vlaanderen.be/data/observatie/... \n", "3 https://www.dov.vlaanderen.be/data/observatie/... \n", "4 https://www.dov.vlaanderen.be/data/observatie/... \n", "... ... \n", "3573 https://www.dov.vlaanderen.be/data/observatie/... \n", "3574 https://www.dov.vlaanderen.be/data/observatie/... \n", "3575 https://www.dov.vlaanderen.be/data/observatie/... \n", "3576 https://www.dov.vlaanderen.be/data/observatie/... \n", "3577 https://www.dov.vlaanderen.be/data/observatie/... \n", "\n", " pkey_parent fenomeentijd \\\n", "0 https://www.dov.vlaanderen.be/data/monster/202... 2025-06-30 \n", "1 https://www.dov.vlaanderen.be/data/monster/202... 2025-06-30 \n", "2 https://www.dov.vlaanderen.be/data/monster/202... 2025-06-30 \n", "3 https://www.dov.vlaanderen.be/data/monster/202... 2025-06-30 \n", "4 https://www.dov.vlaanderen.be/data/monster/202... 2025-06-30 \n", "... ... ... \n", "3573 https://www.dov.vlaanderen.be/data/monster/202... 2022-11-17 \n", "3574 https://www.dov.vlaanderen.be/data/monster/202... 2022-11-17 \n", "3575 https://www.dov.vlaanderen.be/data/monster/202... 2022-11-17 \n", "3576 https://www.dov.vlaanderen.be/data/monster/202... 2022-11-17 \n", "3577 https://www.dov.vlaanderen.be/data/monster/202... 2022-11-17 \n", "\n", " diepte_van_m diepte_tot_m parametergroep \\\n", "0 NaN NaN Zware metalen \n", "1 NaN NaN Anionen \n", "2 NaN NaN Fysico-chemische parameters \n", "3 NaN NaN Kationen \n", "4 NaN NaN Kationen \n", "... ... ... ... \n", "3573 NaN NaN Anionen \n", "3574 NaN NaN Anionen \n", "3575 NaN NaN Zware metalen \n", "3576 NaN NaN Kationen \n", "3577 NaN NaN Zware metalen \n", "\n", " parameter detectieconditie resultaat eenheid methode \\\n", "0 Chroom (Cr) NaN 1.149 µg/l Onbekend \n", "1 Bicarbonaat (HCO3) NaN 5.5 mg/l Onbekend \n", "2 Opgeloste zuurstof (O2) NaN 1.2 mg/l Onbekend \n", "3 Natrium (Na) NaN 13.0 mg/l Onbekend \n", "4 Kalium (K) NaN 10.7 mg/l Onbekend \n", "... ... ... ... ... ... \n", "3573 Sulfaat (SO4) NaN 49.8 mg/l Onbekend \n", "3574 Chloriden (Cl) NaN 32.7 mg/l Onbekend \n", "3575 Aluminium (Al) NaN 0.104 mg/l Onbekend \n", "3576 Kalium (K) NaN 22.0 mg/l Onbekend \n", "3577 Arseen (As) < 5.000 µg/l Onbekend \n", "\n", " uitvoerder herkomst \n", "0 Eurofins Analytico B.V. LABO \n", "1 Eurofins Analytico B.V. LABO \n", "2 Eurofins Analytico B.V. VELD \n", "3 Eurofins Analytico B.V. LABO \n", "4 Eurofins Analytico B.V. LABO \n", "... ... ... \n", "3573 Eurofins Analytico B.V. LABO \n", "3574 Eurofins Analytico B.V. LABO \n", "3575 Eurofins Analytico B.V. LABO \n", "3576 Eurofins Analytico B.V. LABO \n", "3577 Eurofins Analytico B.V. LABO \n", "\n", "[3578 rows x 13 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.observatie import ObservatieSearch\n", "from pydov.util.location import WithinDistance, Point\n", "\n", "observatie_search = ObservatieSearch()\n", "\n", "observatie_search.search(\n", " location=WithinDistance(\n", " Point(x=200000, y=205000, epsg=31370),\n", " distance=500)\n", ")" ] }, { "cell_type": "markdown", "id": "f5e2c85f", "metadata": {}, "source": [ "_Exercise: how many observations are within a radius of 250 meters of the belfort of Ghent?_\n", "
\n", "Answer\n", "\n", "__7__\n", "\n", "from pydov.search.observatie import ObservatieSearch\n", "from pydov.util.location import WithinDistance, Point\n", "\n", "observatie_search = ObservatieSearch()\n", "\n", "observatie_search.search(\n", " location=WithinDistance(\n", " Point(x=3.725278, y=51.053889, epsg=4326),\n", " distance=250)\n", ")\n", "
" ] }, { "cell_type": "markdown", "id": "40c73f46", "metadata": {}, "source": [ "### GeoPandas geodataframe\n", "\n", "You can also search geographically based on a Geodataframe. This can be used in a GeopandasFilter factory, together with a location filter.\n", "\n", "Below we first create a geodataframe:" ] }, { "cell_type": "code", "execution_count": 10, "id": "1d390d6c", "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", "
gml_idgeometryname
0polygon_multiple_31370.0POLYGON ((108636.15 194960.844, 109195.574 195...site 1
1polygon_multiple_31370.1POLYGON ((107485.786 196741.544, 108297.344 19...site 2
\n", "
" ], "text/plain": [ " gml_id \\\n", "0 polygon_multiple_31370.0 \n", "1 polygon_multiple_31370.1 \n", "\n", " geometry name \n", "0 POLYGON ((108636.15 194960.844, 109195.574 195... site 1 \n", "1 POLYGON ((107485.786 196741.544, 108297.344 19... site 2 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import geopandas as gpd\n", "\n", "shapefile = \"../../tests/data/util/location/polygon_multiple_31370.shp\"\n", "\n", "geodataframe = gpd.read_file(shapefile)\n", "geodataframe[\"name\"] = [\"site 1\", \"site 2\"]\n", "geodataframe" ] }, { "cell_type": "markdown", "id": "31c0e799", "metadata": {}, "source": [ "We can now use this in a pydov search query, for example to find boreholes:" ] }, { "cell_type": "code", "execution_count": 11, "id": "3fcd805a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[000/018] cccccccccccccccccc\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_boringboornummerxymv_mtawstart_boring_mtawgemeentediepte_boring_vandiepte_boring_totdatum_aanvanguitvoerderboorgatmetingdiepte_methode_vandiepte_methode_totboormethode
0https://www.dov.vlaanderen.be/data/boring/2018...B/4-104356108025.00196593.008.058.05Gent0.07.0NaNNaNFalse0.00.0onbekend
1https://www.dov.vlaanderen.be/data/boring/2019...1718-B-180092107947.29196640.527.967.96NaN0.08.02019-03-11VerhofsteFalse0.08.0spoelboring
2https://www.dov.vlaanderen.be/data/boring/2020...1718-B-190135107991.00196706.008.408.40NaN0.08.02020-05-15VerhofsteFalse0.08.0spoelboring
3https://www.dov.vlaanderen.be/data/boring/2022...1407-B0863107842.53196371.087.387.38Gent0.04.02022-06-08De Backer PutboringenFalse0.04.0spoelboring
4https://www.dov.vlaanderen.be/data/boring/2023...1718-B220073108144.95196771.099.189.18NaN0.04.02023-04-13VerhofsteFalse0.04.0spoelboring
................................................
63https://www.dov.vlaanderen.be/data/boring/1893...kb22d55e-B44108900.00194425.006.006.00Destelbergen0.021.01893-01-01Behiels-(Lemmens)-WetterenFalse0.021.0onbekend
64https://www.dov.vlaanderen.be/data/boring/1894...kb22d55e-B102107618.00196709.007.507.50Gent0.00.01894-01-01onbekendFalse0.00.0onbekend
65https://www.dov.vlaanderen.be/data/boring/1894...kb22d55e-B103107791.00196516.007.507.50Gent0.00.01894-01-01onbekendFalse0.00.0onbekend
66https://www.dov.vlaanderen.be/data/boring/1895...kb22d55e-B400109050.00194990.007.007.00Destelbergen0.00.01895-01-01onbekendFalse0.00.0onbekend
67https://www.dov.vlaanderen.be/data/boring/1895...kb22d55e-B425108742.00194936.007.007.00Destelbergen0.00.01895-01-01onbekendFalse0.00.0onbekend
\n", "

68 rows × 15 columns

\n", "
" ], "text/plain": [ " pkey_boring boornummer \\\n", "0 https://www.dov.vlaanderen.be/data/boring/2018... B/4-104356 \n", "1 https://www.dov.vlaanderen.be/data/boring/2019... 1718-B-180092 \n", "2 https://www.dov.vlaanderen.be/data/boring/2020... 1718-B-190135 \n", "3 https://www.dov.vlaanderen.be/data/boring/2022... 1407-B0863 \n", "4 https://www.dov.vlaanderen.be/data/boring/2023... 1718-B220073 \n", ".. ... ... \n", "63 https://www.dov.vlaanderen.be/data/boring/1893... kb22d55e-B44 \n", "64 https://www.dov.vlaanderen.be/data/boring/1894... kb22d55e-B102 \n", "65 https://www.dov.vlaanderen.be/data/boring/1894... kb22d55e-B103 \n", "66 https://www.dov.vlaanderen.be/data/boring/1895... kb22d55e-B400 \n", "67 https://www.dov.vlaanderen.be/data/boring/1895... kb22d55e-B425 \n", "\n", " x y mv_mtaw start_boring_mtaw gemeente \\\n", "0 108025.00 196593.00 8.05 8.05 Gent \n", "1 107947.29 196640.52 7.96 7.96 NaN \n", "2 107991.00 196706.00 8.40 8.40 NaN \n", "3 107842.53 196371.08 7.38 7.38 Gent \n", "4 108144.95 196771.09 9.18 9.18 NaN \n", ".. ... ... ... ... ... \n", "63 108900.00 194425.00 6.00 6.00 Destelbergen \n", "64 107618.00 196709.00 7.50 7.50 Gent \n", "65 107791.00 196516.00 7.50 7.50 Gent \n", "66 109050.00 194990.00 7.00 7.00 Destelbergen \n", "67 108742.00 194936.00 7.00 7.00 Destelbergen \n", "\n", " diepte_boring_van diepte_boring_tot datum_aanvang \\\n", "0 0.0 7.0 NaN \n", "1 0.0 8.0 2019-03-11 \n", "2 0.0 8.0 2020-05-15 \n", "3 0.0 4.0 2022-06-08 \n", "4 0.0 4.0 2023-04-13 \n", ".. ... ... ... \n", "63 0.0 21.0 1893-01-01 \n", "64 0.0 0.0 1894-01-01 \n", "65 0.0 0.0 1894-01-01 \n", "66 0.0 0.0 1895-01-01 \n", "67 0.0 0.0 1895-01-01 \n", "\n", " uitvoerder boorgatmeting diepte_methode_van \\\n", "0 NaN False 0.0 \n", "1 Verhofste False 0.0 \n", "2 Verhofste False 0.0 \n", "3 De Backer Putboringen False 0.0 \n", "4 Verhofste False 0.0 \n", ".. ... ... ... \n", "63 Behiels-(Lemmens)-Wetteren False 0.0 \n", "64 onbekend False 0.0 \n", "65 onbekend False 0.0 \n", "66 onbekend False 0.0 \n", "67 onbekend False 0.0 \n", "\n", " diepte_methode_tot boormethode \n", "0 0.0 onbekend \n", "1 8.0 spoelboring \n", "2 8.0 spoelboring \n", "3 4.0 spoelboring \n", "4 4.0 spoelboring \n", ".. ... ... \n", "63 21.0 onbekend \n", "64 0.0 onbekend \n", "65 0.0 onbekend \n", "66 0.0 onbekend \n", "67 0.0 onbekend \n", "\n", "[68 rows x 15 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.boring import BoringSearch\n", "from pydov.util.location import Within, GeopandasFilter\n", "\n", "boring_search = BoringSearch()\n", "\n", "boring_search.search(\n", " location=GeopandasFilter(geodataframe, Within)\n", ")" ] }, { "cell_type": "markdown", "id": "1a7e0210", "metadata": {}, "source": [ "We can also directly use a GIS file (for example a Shapefile) with a GeometryFilter factory:" ] }, { "cell_type": "code", "execution_count": 12, "id": "6a7ed02e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[000/018] cccccccccccccccccc\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_boringboornummerxymv_mtawstart_boring_mtawgemeentediepte_boring_vandiepte_boring_totdatum_aanvanguitvoerderboorgatmetingdiepte_methode_vandiepte_methode_totboormethode
0https://www.dov.vlaanderen.be/data/boring/2018...B/4-104356108025.00196593.008.058.05Gent0.07.0NaNNaNFalse0.00.0onbekend
1https://www.dov.vlaanderen.be/data/boring/2019...1718-B-180092107947.29196640.527.967.96NaN0.08.02019-03-11VerhofsteFalse0.08.0spoelboring
2https://www.dov.vlaanderen.be/data/boring/2020...1718-B-190135107991.00196706.008.408.40NaN0.08.02020-05-15VerhofsteFalse0.08.0spoelboring
3https://www.dov.vlaanderen.be/data/boring/2022...1407-B0863107842.53196371.087.387.38Gent0.04.02022-06-08De Backer PutboringenFalse0.04.0spoelboring
4https://www.dov.vlaanderen.be/data/boring/2023...1718-B220073108144.95196771.099.189.18NaN0.04.02023-04-13VerhofsteFalse0.04.0spoelboring
................................................
63https://www.dov.vlaanderen.be/data/boring/1893...kb22d55e-B44108900.00194425.006.006.00Destelbergen0.021.01893-01-01Behiels-(Lemmens)-WetterenFalse0.021.0onbekend
64https://www.dov.vlaanderen.be/data/boring/1894...kb22d55e-B102107618.00196709.007.507.50Gent0.00.01894-01-01onbekendFalse0.00.0onbekend
65https://www.dov.vlaanderen.be/data/boring/1894...kb22d55e-B103107791.00196516.007.507.50Gent0.00.01894-01-01onbekendFalse0.00.0onbekend
66https://www.dov.vlaanderen.be/data/boring/1895...kb22d55e-B400109050.00194990.007.007.00Destelbergen0.00.01895-01-01onbekendFalse0.00.0onbekend
67https://www.dov.vlaanderen.be/data/boring/1895...kb22d55e-B425108742.00194936.007.007.00Destelbergen0.00.01895-01-01onbekendFalse0.00.0onbekend
\n", "

68 rows × 15 columns

\n", "
" ], "text/plain": [ " pkey_boring boornummer \\\n", "0 https://www.dov.vlaanderen.be/data/boring/2018... B/4-104356 \n", "1 https://www.dov.vlaanderen.be/data/boring/2019... 1718-B-180092 \n", "2 https://www.dov.vlaanderen.be/data/boring/2020... 1718-B-190135 \n", "3 https://www.dov.vlaanderen.be/data/boring/2022... 1407-B0863 \n", "4 https://www.dov.vlaanderen.be/data/boring/2023... 1718-B220073 \n", ".. ... ... \n", "63 https://www.dov.vlaanderen.be/data/boring/1893... kb22d55e-B44 \n", "64 https://www.dov.vlaanderen.be/data/boring/1894... kb22d55e-B102 \n", "65 https://www.dov.vlaanderen.be/data/boring/1894... kb22d55e-B103 \n", "66 https://www.dov.vlaanderen.be/data/boring/1895... kb22d55e-B400 \n", "67 https://www.dov.vlaanderen.be/data/boring/1895... kb22d55e-B425 \n", "\n", " x y mv_mtaw start_boring_mtaw gemeente \\\n", "0 108025.00 196593.00 8.05 8.05 Gent \n", "1 107947.29 196640.52 7.96 7.96 NaN \n", "2 107991.00 196706.00 8.40 8.40 NaN \n", "3 107842.53 196371.08 7.38 7.38 Gent \n", "4 108144.95 196771.09 9.18 9.18 NaN \n", ".. ... ... ... ... ... \n", "63 108900.00 194425.00 6.00 6.00 Destelbergen \n", "64 107618.00 196709.00 7.50 7.50 Gent \n", "65 107791.00 196516.00 7.50 7.50 Gent \n", "66 109050.00 194990.00 7.00 7.00 Destelbergen \n", "67 108742.00 194936.00 7.00 7.00 Destelbergen \n", "\n", " diepte_boring_van diepte_boring_tot datum_aanvang \\\n", "0 0.0 7.0 NaN \n", "1 0.0 8.0 2019-03-11 \n", "2 0.0 8.0 2020-05-15 \n", "3 0.0 4.0 2022-06-08 \n", "4 0.0 4.0 2023-04-13 \n", ".. ... ... ... \n", "63 0.0 21.0 1893-01-01 \n", "64 0.0 0.0 1894-01-01 \n", "65 0.0 0.0 1894-01-01 \n", "66 0.0 0.0 1895-01-01 \n", "67 0.0 0.0 1895-01-01 \n", "\n", " uitvoerder boorgatmeting diepte_methode_van \\\n", "0 NaN False 0.0 \n", "1 Verhofste False 0.0 \n", "2 Verhofste False 0.0 \n", "3 De Backer Putboringen False 0.0 \n", "4 Verhofste False 0.0 \n", ".. ... ... ... \n", "63 Behiels-(Lemmens)-Wetteren False 0.0 \n", "64 onbekend False 0.0 \n", "65 onbekend False 0.0 \n", "66 onbekend False 0.0 \n", "67 onbekend False 0.0 \n", "\n", " diepte_methode_tot boormethode \n", "0 0.0 onbekend \n", "1 8.0 spoelboring \n", "2 8.0 spoelboring \n", "3 4.0 spoelboring \n", "4 4.0 spoelboring \n", ".. ... ... \n", "63 21.0 onbekend \n", "64 0.0 onbekend \n", "65 0.0 onbekend \n", "66 0.0 onbekend \n", "67 0.0 onbekend \n", "\n", "[68 rows x 15 columns]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.boring import BoringSearch\n", "from pydov.util.location import Within, GeometryFilter\n", "\n", "boring_search = BoringSearch()\n", "\n", "studiegebied = '../../tests/data/util/location/polygon_multiple_31370.shp'\n", "\n", "boring_search.search(\n", " location=GeometryFilter(studiegebied, Within)\n", ")" ] }, { "cell_type": "markdown", "id": "06f7d80b", "metadata": {}, "source": [ "_Exercise: how many observations are located within or within a radius of 200 meters of the study area?_\n", "
\n", "Answer\n", "\n", "__303__\n", "\n", "from pydov.search.observatie import ObservatieSearch\n", "from pydov.util.location import WithinDistance, GeometryFilter\n", "\n", "observatie_search = ObservatieSearch()\n", "\n", "observatie_search.search(\n", " location=GeometryFilter(studiegebied, WithinDistance, {'distance': 200})\n", ")\n", "
" ] }, { "cell_type": "markdown", "id": "acd44ea3", "metadata": {}, "source": [ "## Search by attributes\n", "> More info: https://pydov.readthedocs.io/en/stable/query_attribute.html\n", "\n", "Next to searching by location, you can also search for objects with certain properties.\n", "\n", "### Available search fields\n", "\n", "To find out which attributes (fields) are available in a datatype, you can use the `get_fields()` method. To specifically query the fields that can be searched on, use the following code:" ] }, { "cell_type": "code", "execution_count": 13, "id": "748cff54", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " \n", "
\n", "

id - Uniek referentienummer in de databank.

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

naam - Naam van het monster.

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

pkey_monster - Permanente URL die verwijst naar de gegevens van het monster op de website.

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

gekoppeld_aan - Het ouder-object (parent) waaraan een monster gekoppeld is. Bijvoorbeeld een boring, een ander monster, ...

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

pkey_parents - Permanente URL die verwijst naar de gegevens van het gekoppeld ouder-object (parent) op de website.

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

materiaalklasse - Aard van het materiaal waaruit het monster bestaat, ingedeeld volgens een classificatie bijvoorbeeld sediment, hard gesteente.

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

diepte_van_m - Minimum diepte van het monster ten opzichte van het aanvangspeil van het gekoppeld ouder-object, in meter.

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

diepte_tot_m - Maximum diepte van het monster ten opzichte van het aanvangspeil van het gekoppeld ouder-object, in meter.

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

aantal_observaties - Aantal observaties die beschikbaar zijn bij het monster.

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

datum_monstername - Datum van monstername.

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

monstersamenstelling - Samenstelling van het monster: enkelvoudig monster of mengmonster.

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

monstertype - Type monster of bemonstering: geroerd, ongeroerd, vloeistof.

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

bemonsteringsprocedure - Een workflow, protocol, plan, algoritme of berekeningswijze waarin wordt gespecifieerd hoe de bemonstering moet worden uitgevoerd.

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

bemonsteringsinstrument - Het instrument waarmee de bemonstering is uitgevoerd.

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

bemonstering_door - De agent (persoon of organisatie) die de bemonstering heeft uitgevoerd.

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

opmerkingen - Aantal opmerkingen bij het monster.

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

actuele_opslaglocatie - De plaats waar het monster is bewaard.

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

opdracht - Opdracht waaraan een monster gekoppeld is.

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

permkey_monster - Permkey van het monster als deel van de permanente URL.

\n", "
\n", "
" ], "text/plain": [ "{'id': {'name': 'id', 'definition': 'Uniek referentienummer in de databank.', 'type': 'string', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'naam': {'name': 'naam', 'definition': 'Naam van het monster.', 'type': 'string', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'pkey_monster': {'name': 'pkey_monster', 'definition': 'Permanente URL die verwijst naar de gegevens van het monster op de website.', 'type': 'string', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'gekoppeld_aan': {'name': 'gekoppeld_aan', 'definition': 'Het ouder-object (parent) waaraan een monster gekoppeld is. Bijvoorbeeld een boring, een ander monster, ...', 'type': 'string', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'pkey_parents': {'name': 'pkey_parents', 'definition': 'Permanente URL die verwijst naar de gegevens van het gekoppeld ouder-object (parent) op de website.', 'type': 'string', 'multivalue': True, 'notnull': False, 'query': True, 'cost': 1}, 'materiaalklasse': {'name': 'materiaalklasse', 'definition': 'Aard van het materiaal waaruit het monster bestaat, ingedeeld volgens een classificatie bijvoorbeeld sediment, hard gesteente.', 'type': 'string', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'diepte_van_m': {'name': 'diepte_van_m', 'definition': 'Minimum diepte van het monster ten opzichte van het aanvangspeil van het gekoppeld ouder-object, in meter.', 'type': 'float', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'diepte_tot_m': {'name': 'diepte_tot_m', 'definition': 'Maximum diepte van het monster ten opzichte van het aanvangspeil van het gekoppeld ouder-object, in meter.', 'type': 'float', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'aantal_observaties': {'name': 'aantal_observaties', 'definition': 'Aantal observaties die beschikbaar zijn bij het monster.', 'type': 'integer', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'datum_monstername': {'name': 'datum_monstername', 'definition': 'Datum van monstername.', 'type': 'date', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'monstersamenstelling': {'name': 'monstersamenstelling', 'definition': 'Samenstelling van het monster: enkelvoudig monster of mengmonster.', 'type': 'string', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'monstertype': {'name': 'monstertype', 'definition': 'Type monster of bemonstering: geroerd, ongeroerd, vloeistof.', 'type': 'string', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1, 'codelist': , , >}, 'bemonsteringsprocedure': {'name': 'bemonsteringsprocedure', 'definition': 'Een workflow, protocol, plan, algoritme of berekeningswijze waarin wordt gespecifieerd hoe de bemonstering moet worden uitgevoerd.', 'type': 'string', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'bemonsteringsinstrument': {'name': 'bemonsteringsinstrument', 'definition': 'Het instrument waarmee de bemonstering is uitgevoerd.', 'type': 'string', 'multivalue': True, 'notnull': False, 'query': True, 'cost': 1}, 'bemonstering_door': {'name': 'bemonstering_door', 'definition': 'De agent (persoon of organisatie) die de bemonstering heeft uitgevoerd.', 'type': 'string', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'opmerkingen': {'name': 'opmerkingen', 'definition': 'Aantal opmerkingen bij het monster.', 'type': 'integer', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'actuele_opslaglocatie': {'name': 'actuele_opslaglocatie', 'definition': 'De plaats waar het monster is bewaard.', 'type': 'string', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'opdracht': {'name': 'opdracht', 'definition': 'Opdracht waaraan een monster gekoppeld is.', 'type': 'string', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}, 'permkey_monster': {'name': 'permkey_monster', 'definition': 'Permkey van het monster als deel van de permanente URL.', 'type': 'string', 'multivalue': False, 'notnull': False, 'query': True, 'cost': 1}}" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.monster import MonsterSearch\n", "\n", "monster_search = MonsterSearch()\n", "\n", "monster_search.get_fields(query=True)" ] }, { "cell_type": "markdown", "id": "959a0fc2", "metadata": {}, "source": [ "### Attribute equal to\n", "\n", "Searching on attribute values can be done with the search operators from `owslib.fes2`: PropertyIsEqualTo, PropertyIsNotEqualTo, PropertyIsNull, PropertyIsLike, PropertyIsLessThan, PropertyIsLessThanOrEqualTo, PropertyIsGreaterThan, PropertyIsGreaterThanOrEqualTo, PropertyIsBetween.\n", "\n", "For example, to query samples where the sample type is 'ongeroerd' (undisturbed), you can use the following code. The `max_features` parameter ensures that at most this number of features is returned; this is useful to test your query on a subset of the data." ] }, { "cell_type": "code", "execution_count": 14, "id": "f774973d", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_monsternaampkey_parentsmateriaalklassedatum_monsternamediepte_van_mdiepte_tot_mmonstertypemonstersamenstellingbemonsteringsprocedurebemonsteringsinstrumentbemonstering_door
0https://www.dov.vlaanderen.be/data/monster/201...0(https://www.dov.vlaanderen.be/data/boring/198...sediment1980-01-01288.80288.80ongeroerdEnkelvoudig monsterNaN(buis,)NaN
1https://www.dov.vlaanderen.be/data/monster/201...0(https://www.dov.vlaanderen.be/data/boring/190...hardgesteente1901-01-01541.00542.20ongeroerdEnkelvoudig monsterNaN(kerboor,)NaN
2https://www.dov.vlaanderen.be/data/monster/201...0.002(https://www.dov.vlaanderen.be/data/boring/196...sediment1964-01-0117.3817.38ongeroerdEnkelvoudig monsterNaN(kerboor,)NaN
3https://www.dov.vlaanderen.be/data/monster/201...1(https://www.dov.vlaanderen.be/data/boring/199...sediment1995-01-01102.25102.25ongeroerdEnkelvoudig monsterNaN(kerboor,)NaN
4https://www.dov.vlaanderen.be/data/monster/201...1(https://www.dov.vlaanderen.be/data/boring/201...sediment1972-08-090.250.25ongeroerdEnkelvoudig monsterNaN(buis,)NaN
5https://www.dov.vlaanderen.be/data/monster/201...1(https://www.dov.vlaanderen.be/data/boring/197...sediment1972-01-010.200.20ongeroerdEnkelvoudig monsterNaN(kerboor,)NaN
6https://www.dov.vlaanderen.be/data/monster/201...1(https://www.dov.vlaanderen.be/data/boring/197...sediment1972-01-010.150.15ongeroerdEnkelvoudig monsterNaN(kerboor,)NaN
7https://www.dov.vlaanderen.be/data/monster/201...1(https://www.dov.vlaanderen.be/data/boring/197...sediment1972-01-010.200.20ongeroerdEnkelvoudig monsterNaN(kerboor,)NaN
8https://www.dov.vlaanderen.be/data/monster/201...1(https://www.dov.vlaanderen.be/data/boring/197...sediment1972-01-010.100.10ongeroerdEnkelvoudig monsterNaN(kerboor,)NaN
9https://www.dov.vlaanderen.be/data/monster/201...1(https://www.dov.vlaanderen.be/data/boring/197...sediment1972-01-010.800.80ongeroerdEnkelvoudig monsterNaN(kerboor,)NaN
\n", "
" ], "text/plain": [ " pkey_monster naam \\\n", "0 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "1 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "2 https://www.dov.vlaanderen.be/data/monster/201... 0.002 \n", "3 https://www.dov.vlaanderen.be/data/monster/201... 1 \n", "4 https://www.dov.vlaanderen.be/data/monster/201... 1 \n", "5 https://www.dov.vlaanderen.be/data/monster/201... 1 \n", "6 https://www.dov.vlaanderen.be/data/monster/201... 1 \n", "7 https://www.dov.vlaanderen.be/data/monster/201... 1 \n", "8 https://www.dov.vlaanderen.be/data/monster/201... 1 \n", "9 https://www.dov.vlaanderen.be/data/monster/201... 1 \n", "\n", " pkey_parents materiaalklasse \\\n", "0 (https://www.dov.vlaanderen.be/data/boring/198... sediment \n", "1 (https://www.dov.vlaanderen.be/data/boring/190... hardgesteente \n", "2 (https://www.dov.vlaanderen.be/data/boring/196... sediment \n", "3 (https://www.dov.vlaanderen.be/data/boring/199... sediment \n", "4 (https://www.dov.vlaanderen.be/data/boring/201... sediment \n", "5 (https://www.dov.vlaanderen.be/data/boring/197... sediment \n", "6 (https://www.dov.vlaanderen.be/data/boring/197... sediment \n", "7 (https://www.dov.vlaanderen.be/data/boring/197... sediment \n", "8 (https://www.dov.vlaanderen.be/data/boring/197... sediment \n", "9 (https://www.dov.vlaanderen.be/data/boring/197... sediment \n", "\n", " datum_monstername diepte_van_m diepte_tot_m monstertype \\\n", "0 1980-01-01 288.80 288.80 ongeroerd \n", "1 1901-01-01 541.00 542.20 ongeroerd \n", "2 1964-01-01 17.38 17.38 ongeroerd \n", "3 1995-01-01 102.25 102.25 ongeroerd \n", "4 1972-08-09 0.25 0.25 ongeroerd \n", "5 1972-01-01 0.20 0.20 ongeroerd \n", "6 1972-01-01 0.15 0.15 ongeroerd \n", "7 1972-01-01 0.20 0.20 ongeroerd \n", "8 1972-01-01 0.10 0.10 ongeroerd \n", "9 1972-01-01 0.80 0.80 ongeroerd \n", "\n", " monstersamenstelling bemonsteringsprocedure bemonsteringsinstrument \\\n", "0 Enkelvoudig monster NaN (buis,) \n", "1 Enkelvoudig monster NaN (kerboor,) \n", "2 Enkelvoudig monster NaN (kerboor,) \n", "3 Enkelvoudig monster NaN (kerboor,) \n", "4 Enkelvoudig monster NaN (buis,) \n", "5 Enkelvoudig monster NaN (kerboor,) \n", "6 Enkelvoudig monster NaN (kerboor,) \n", "7 Enkelvoudig monster NaN (kerboor,) \n", "8 Enkelvoudig monster NaN (kerboor,) \n", "9 Enkelvoudig monster NaN (kerboor,) \n", "\n", " bemonstering_door \n", "0 NaN \n", "1 NaN \n", "2 NaN \n", "3 NaN \n", "4 NaN \n", "5 NaN \n", "6 NaN \n", "7 NaN \n", "8 NaN \n", "9 NaN " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.monster import MonsterSearch\n", "\n", "from owslib.fes2 import PropertyIsEqualTo\n", "\n", "monster_search = MonsterSearch()\n", "\n", "monster_search.search(\n", " query=PropertyIsEqualTo('monstertype', 'ongeroerd'),\n", " max_features=10\n", ")" ] }, { "cell_type": "markdown", "id": "7481ef3a", "metadata": {}, "source": [ "### Attribute greater than or equal to\n", "\n", "For example, to query all samples taken since 1/1/2025, you use the following code:" ] }, { "cell_type": "code", "execution_count": 15, "id": "56b89353", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_monsternaampkey_parentsmateriaalklassedatum_monsternamediepte_van_mdiepte_tot_mmonstertypemonstersamenstellingbemonsteringsprocedurebemonsteringsinstrumentbemonstering_door
0https://www.dov.vlaanderen.be/data/monster/202...000/00/2-F1/M2025(https://www.dov.vlaanderen.be/data/filter/200...grondwater2025-04-22NaN3.0vloeistofEnkelvoudig monsterNaN(pomp,)Eurofins Analytico B.V.
1https://www.dov.vlaanderen.be/data/monster/202...000/32/2-F1/M2025(https://www.dov.vlaanderen.be/data/filter/200...grondwater2025-04-17NaN3.0vloeistofEnkelvoudig monsterNaN(pomp,)Eurofins Analytico B.V.
2https://www.dov.vlaanderen.be/data/monster/202...000/32/2-F2/M2025(https://www.dov.vlaanderen.be/data/filter/200...grondwater2025-04-17NaN6.5vloeistofEnkelvoudig monsterNaN(pomp,)Eurofins Analytico B.V.
3https://www.dov.vlaanderen.be/data/monster/202...000/32/3-F1/M2025(https://www.dov.vlaanderen.be/data/filter/200...grondwater2025-06-05NaN3.0vloeistofEnkelvoudig monsterNaN(pomp,)Eurofins Analytico B.V.
4https://www.dov.vlaanderen.be/data/monster/202...000/32/3-F2/M2025(https://www.dov.vlaanderen.be/data/filter/200...grondwater2025-06-05NaN6.0vloeistofEnkelvoudig monsterNaN(pomp,)Eurofins Analytico B.V.
5https://www.dov.vlaanderen.be/data/monster/202...000/32/5-F1/M2025(https://www.dov.vlaanderen.be/data/filter/200...grondwater2025-04-17NaN3.0vloeistofEnkelvoudig monsterNaN(pomp,)Eurofins Analytico B.V.
6https://www.dov.vlaanderen.be/data/monster/202...000/32/5-F2/M2025(https://www.dov.vlaanderen.be/data/filter/200...grondwater2025-04-17NaN5.9vloeistofEnkelvoudig monsterNaN(pomp,)Eurofins Analytico B.V.
7https://www.dov.vlaanderen.be/data/monster/202...000/32/6-F1/M2025(https://www.dov.vlaanderen.be/data/filter/200...grondwater2025-04-22NaN3.0vloeistofEnkelvoudig monsterNaN(pomp,)Eurofins Analytico B.V.
8https://www.dov.vlaanderen.be/data/monster/202...000/32/6-F2/M2025(https://www.dov.vlaanderen.be/data/filter/200...grondwater2025-04-22NaN7.2vloeistofEnkelvoudig monsterNaN(pomp,)Eurofins Analytico B.V.
9https://www.dov.vlaanderen.be/data/monster/202...000/32/9-F1/M2025(https://www.dov.vlaanderen.be/data/filter/200...grondwater2025-04-22NaN3.5vloeistofEnkelvoudig monsterNaN(pomp,)Eurofins Analytico B.V.
\n", "
" ], "text/plain": [ " pkey_monster naam \\\n", "0 https://www.dov.vlaanderen.be/data/monster/202... 000/00/2-F1/M2025 \n", "1 https://www.dov.vlaanderen.be/data/monster/202... 000/32/2-F1/M2025 \n", "2 https://www.dov.vlaanderen.be/data/monster/202... 000/32/2-F2/M2025 \n", "3 https://www.dov.vlaanderen.be/data/monster/202... 000/32/3-F1/M2025 \n", "4 https://www.dov.vlaanderen.be/data/monster/202... 000/32/3-F2/M2025 \n", "5 https://www.dov.vlaanderen.be/data/monster/202... 000/32/5-F1/M2025 \n", "6 https://www.dov.vlaanderen.be/data/monster/202... 000/32/5-F2/M2025 \n", "7 https://www.dov.vlaanderen.be/data/monster/202... 000/32/6-F1/M2025 \n", "8 https://www.dov.vlaanderen.be/data/monster/202... 000/32/6-F2/M2025 \n", "9 https://www.dov.vlaanderen.be/data/monster/202... 000/32/9-F1/M2025 \n", "\n", " pkey_parents materiaalklasse \\\n", "0 (https://www.dov.vlaanderen.be/data/filter/200... grondwater \n", "1 (https://www.dov.vlaanderen.be/data/filter/200... grondwater \n", "2 (https://www.dov.vlaanderen.be/data/filter/200... grondwater \n", "3 (https://www.dov.vlaanderen.be/data/filter/200... grondwater \n", "4 (https://www.dov.vlaanderen.be/data/filter/200... grondwater \n", "5 (https://www.dov.vlaanderen.be/data/filter/200... grondwater \n", "6 (https://www.dov.vlaanderen.be/data/filter/200... grondwater \n", "7 (https://www.dov.vlaanderen.be/data/filter/200... grondwater \n", "8 (https://www.dov.vlaanderen.be/data/filter/200... grondwater \n", "9 (https://www.dov.vlaanderen.be/data/filter/200... grondwater \n", "\n", " datum_monstername diepte_van_m diepte_tot_m monstertype \\\n", "0 2025-04-22 NaN 3.0 vloeistof \n", "1 2025-04-17 NaN 3.0 vloeistof \n", "2 2025-04-17 NaN 6.5 vloeistof \n", "3 2025-06-05 NaN 3.0 vloeistof \n", "4 2025-06-05 NaN 6.0 vloeistof \n", "5 2025-04-17 NaN 3.0 vloeistof \n", "6 2025-04-17 NaN 5.9 vloeistof \n", "7 2025-04-22 NaN 3.0 vloeistof \n", "8 2025-04-22 NaN 7.2 vloeistof \n", "9 2025-04-22 NaN 3.5 vloeistof \n", "\n", " monstersamenstelling bemonsteringsprocedure bemonsteringsinstrument \\\n", "0 Enkelvoudig monster NaN (pomp,) \n", "1 Enkelvoudig monster NaN (pomp,) \n", "2 Enkelvoudig monster NaN (pomp,) \n", "3 Enkelvoudig monster NaN (pomp,) \n", "4 Enkelvoudig monster NaN (pomp,) \n", "5 Enkelvoudig monster NaN (pomp,) \n", "6 Enkelvoudig monster NaN (pomp,) \n", "7 Enkelvoudig monster NaN (pomp,) \n", "8 Enkelvoudig monster NaN (pomp,) \n", "9 Enkelvoudig monster NaN (pomp,) \n", "\n", " bemonstering_door \n", "0 Eurofins Analytico B.V. \n", "1 Eurofins Analytico B.V. \n", "2 Eurofins Analytico B.V. \n", "3 Eurofins Analytico B.V. \n", "4 Eurofins Analytico B.V. \n", "5 Eurofins Analytico B.V. \n", "6 Eurofins Analytico B.V. \n", "7 Eurofins Analytico B.V. \n", "8 Eurofins Analytico B.V. \n", "9 Eurofins Analytico B.V. " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.monster import MonsterSearch\n", "\n", "from owslib.fes2 import PropertyIsGreaterThanOrEqualTo\n", "\n", "monster_search = MonsterSearch()\n", "\n", "monster_search.search(\n", " query=PropertyIsGreaterThanOrEqualTo(\n", " 'datum_monstername', '2025-01-01'),\n", " max_features=10\n", ")" ] }, { "cell_type": "markdown", "id": "ca2827ec", "metadata": {}, "source": [ "### Combine attribute filters\n", "\n", "It is also possible to combine different filters (also nested) with the And, Or, Not operators from `owslib.fes2`.\n", "\n", "To combine the two previous search queries, you use for example:" ] }, { "cell_type": "code", "execution_count": 16, "id": "5c0134a2", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_monsternaampkey_parentsmateriaalklassedatum_monsternamediepte_van_mdiepte_tot_mmonstertypemonstersamenstellingbemonsteringsprocedurebemonsteringsinstrumentbemonstering_door
0https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-02-054.004.50ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
1https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-02-075.005.40ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
2https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-01-212.503.00ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
3https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-01-223.003.50ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
4https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-02-286.507.00ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
.......................................
265https://www.dov.vlaanderen.be/data/monster/202...N008(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-08-2921.0021.41ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
266https://www.dov.vlaanderen.be/data/monster/202...N008A(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-03-1717.0017.35ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
267https://www.dov.vlaanderen.be/data/monster/202...N008B(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-03-1717.3517.50ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
268https://www.dov.vlaanderen.be/data/monster/202...N009(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-03-1317.0017.50ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
269https://www.dov.vlaanderen.be/data/monster/202...N009(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-03-1918.0018.50ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
\n", "

270 rows × 12 columns

\n", "
" ], "text/plain": [ " pkey_monster naam \\\n", "0 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", "1 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", "2 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", "3 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", "4 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", ".. ... ... \n", "265 https://www.dov.vlaanderen.be/data/monster/202... N008 \n", "266 https://www.dov.vlaanderen.be/data/monster/202... N008A \n", "267 https://www.dov.vlaanderen.be/data/monster/202... N008B \n", "268 https://www.dov.vlaanderen.be/data/monster/202... N009 \n", "269 https://www.dov.vlaanderen.be/data/monster/202... N009 \n", "\n", " pkey_parents materiaalklasse \\\n", "0 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "1 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "2 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "3 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "4 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", ".. ... ... \n", "265 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "266 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "267 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "268 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "269 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "\n", " datum_monstername diepte_van_m diepte_tot_m monstertype \\\n", "0 2025-02-05 4.00 4.50 ongeroerd \n", "1 2025-02-07 5.00 5.40 ongeroerd \n", "2 2025-01-21 2.50 3.00 ongeroerd \n", "3 2025-01-22 3.00 3.50 ongeroerd \n", "4 2025-02-28 6.50 7.00 ongeroerd \n", ".. ... ... ... ... \n", "265 2025-08-29 21.00 21.41 ongeroerd \n", "266 2025-03-17 17.00 17.35 ongeroerd \n", "267 2025-03-17 17.35 17.50 ongeroerd \n", "268 2025-03-13 17.00 17.50 ongeroerd \n", "269 2025-03-19 18.00 18.50 ongeroerd \n", "\n", " monstersamenstelling bemonsteringsprocedure bemonsteringsinstrument \\\n", "0 Enkelvoudig monster NaN (steekbus,) \n", "1 Enkelvoudig monster NaN (steekbus,) \n", "2 Enkelvoudig monster NaN (steekbus,) \n", "3 Enkelvoudig monster NaN (steekbus,) \n", "4 Enkelvoudig monster NaN (steekbus,) \n", ".. ... ... ... \n", "265 Enkelvoudig monster NaN (steekbus,) \n", "266 Enkelvoudig monster NaN (steekbus,) \n", "267 Enkelvoudig monster NaN (steekbus,) \n", "268 Enkelvoudig monster NaN (steekbus,) \n", "269 Enkelvoudig monster NaN (steekbus,) \n", "\n", " bemonstering_door \n", "0 Geolab \n", "1 Geolab \n", "2 Geolab \n", "3 Geolab \n", "4 Geolab \n", ".. ... \n", "265 Geolab \n", "266 Geolab \n", "267 Geolab \n", "268 Geolab \n", "269 Geolab \n", "\n", "[270 rows x 12 columns]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.monster import MonsterSearch\n", "\n", "from owslib.fes2 import (\n", " And, PropertyIsEqualTo, PropertyIsGreaterThanOrEqualTo)\n", "\n", "monster_search = MonsterSearch()\n", "\n", "monster_search.search(\n", " query=And([\n", " PropertyIsGreaterThanOrEqualTo('datum_monstername', '2025-01-01'),\n", " PropertyIsEqualTo('monstertype', 'ongeroerd')\n", " ])\n", ")" ] }, { "cell_type": "markdown", "id": "15dba549", "metadata": {}, "source": [ "_Exercise: how many observations were observed in the FIELD from 1/1/2025 at a depth of at least 175 meters?_\n", "
\n", "Answer\n", "\n", "__8__\n", "\n", "from pydov.search.observatie import ObservatieSearch\n", "\n", "from owslib.fes2 import (\n", " And, PropertyIsEqualTo, PropertyIsGreaterThanOrEqualTo)\n", "\n", "observatie_search = ObservatieSearch()\n", "\n", "observatie_search.search(\n", " query=And([\n", " PropertyIsGreaterThanOrEqualTo('fenomeentijd', '2025-01-01'),\n", " PropertyIsGreaterThanOrEqualTo('diepte_van_m', '175'),\n", " PropertyIsEqualTo('herkomst', 'VELD')\n", " ])\n", ")\n", "
" ] }, { "cell_type": "markdown", "id": "d4dd35a5", "metadata": {}, "source": [ "### Combine attribute filters with location\n", "\n", "Finally, you can also combine attribute filters with a location filter. Here you only get results that satisfy both filters." ] }, { "cell_type": "code", "execution_count": 17, "id": "e2bf8903", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_monsternaampkey_parentsmateriaalklassedatum_monsternamediepte_van_mdiepte_tot_mmonstertypemonstersamenstellingbemonsteringsprocedurebemonsteringsinstrumentbemonstering_door
0https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-02-054.04.50ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
1https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-02-075.05.40ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
2https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-02-286.57.00ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
3https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-02-285.56.00ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
4https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-03-044.55.00ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
.......................................
91https://www.dov.vlaanderen.be/data/monster/202...N007(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-03-2512.012.50ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
92https://www.dov.vlaanderen.be/data/monster/202...N007(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-03-1413.514.00ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
93https://www.dov.vlaanderen.be/data/monster/202...N007(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-08-2917.017.50ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
94https://www.dov.vlaanderen.be/data/monster/202...N008(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-03-1416.516.90ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
95https://www.dov.vlaanderen.be/data/monster/202...N008(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-08-2921.021.41ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
\n", "

96 rows × 12 columns

\n", "
" ], "text/plain": [ " pkey_monster naam \\\n", "0 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", "1 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", "2 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", "3 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", "4 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", ".. ... ... \n", "91 https://www.dov.vlaanderen.be/data/monster/202... N007 \n", "92 https://www.dov.vlaanderen.be/data/monster/202... N007 \n", "93 https://www.dov.vlaanderen.be/data/monster/202... N007 \n", "94 https://www.dov.vlaanderen.be/data/monster/202... N008 \n", "95 https://www.dov.vlaanderen.be/data/monster/202... N008 \n", "\n", " pkey_parents materiaalklasse \\\n", "0 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "1 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "2 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "3 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "4 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", ".. ... ... \n", "91 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "92 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "93 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "94 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "95 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "\n", " datum_monstername diepte_van_m diepte_tot_m monstertype \\\n", "0 2025-02-05 4.0 4.50 ongeroerd \n", "1 2025-02-07 5.0 5.40 ongeroerd \n", "2 2025-02-28 6.5 7.00 ongeroerd \n", "3 2025-02-28 5.5 6.00 ongeroerd \n", "4 2025-03-04 4.5 5.00 ongeroerd \n", ".. ... ... ... ... \n", "91 2025-03-25 12.0 12.50 ongeroerd \n", "92 2025-03-14 13.5 14.00 ongeroerd \n", "93 2025-08-29 17.0 17.50 ongeroerd \n", "94 2025-03-14 16.5 16.90 ongeroerd \n", "95 2025-08-29 21.0 21.41 ongeroerd \n", "\n", " monstersamenstelling bemonsteringsprocedure bemonsteringsinstrument \\\n", "0 Enkelvoudig monster NaN (steekbus,) \n", "1 Enkelvoudig monster NaN (steekbus,) \n", "2 Enkelvoudig monster NaN (steekbus,) \n", "3 Enkelvoudig monster NaN (steekbus,) \n", "4 Enkelvoudig monster NaN (steekbus,) \n", ".. ... ... ... \n", "91 Enkelvoudig monster NaN (steekbus,) \n", "92 Enkelvoudig monster NaN (steekbus,) \n", "93 Enkelvoudig monster NaN (steekbus,) \n", "94 Enkelvoudig monster NaN (steekbus,) \n", "95 Enkelvoudig monster NaN (steekbus,) \n", "\n", " bemonstering_door \n", "0 Geolab \n", "1 Geolab \n", "2 Geolab \n", "3 Geolab \n", "4 Geolab \n", ".. ... \n", "91 Geolab \n", "92 Geolab \n", "93 Geolab \n", "94 Geolab \n", "95 Geolab \n", "\n", "[96 rows x 12 columns]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.monster import MonsterSearch\n", "\n", "from owslib.fes2 import (\n", " And, PropertyIsEqualTo, PropertyIsGreaterThanOrEqualTo)\n", "\n", "monster_search = MonsterSearch()\n", "\n", "monster_search.search(\n", " query=And([\n", " PropertyIsGreaterThanOrEqualTo('datum_monstername', '2025-01-01'),\n", " PropertyIsEqualTo('monstertype', 'ongeroerd')\n", " ]),\n", " location=Within(Box(18000, 200000, 220000, 230000, epsg=31370))\n", ")" ] }, { "cell_type": "markdown", "id": "4e364a66", "metadata": {}, "source": [ "## Select result fields\n", "\n", "If you need fewer (or: more) fields than are present in the result by default, you can use the `return_fields` parameter to customize these fields.\n", "\n", "You should only query the fields you need; this ensures that the services are not unnecessarily burdened and that the result will be available faster." ] }, { "cell_type": "code", "execution_count": 18, "id": "f9ce2a6e", "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", "
pkey_monsternaamdiepte_van_mdiepte_tot_m
0https://www.dov.vlaanderen.be/data/monster/201...079.079.0
1https://www.dov.vlaanderen.be/data/monster/201...07.07.0
2https://www.dov.vlaanderen.be/data/monster/201...010.510.5
3https://www.dov.vlaanderen.be/data/monster/201...0288.8288.8
4https://www.dov.vlaanderen.be/data/monster/201...00.10.1
5https://www.dov.vlaanderen.be/data/monster/201...011.012.0
6https://www.dov.vlaanderen.be/data/monster/201...0541.0542.2
7https://www.dov.vlaanderen.be/data/monster/201...000/00/2-F1/M1501NaN3.0
8https://www.dov.vlaanderen.be/data/monster/201...000/00/2-F1/M1/C2014-1NaN3.0
9https://www.dov.vlaanderen.be/data/monster/201...000/00/2-F1/M2015-2NaN3.0
\n", "
" ], "text/plain": [ " pkey_monster naam \\\n", "0 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "1 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "2 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "3 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "4 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "5 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "6 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "7 https://www.dov.vlaanderen.be/data/monster/201... 000/00/2-F1/M1501 \n", "8 https://www.dov.vlaanderen.be/data/monster/201... 000/00/2-F1/M1/C2014-1 \n", "9 https://www.dov.vlaanderen.be/data/monster/201... 000/00/2-F1/M2015-2 \n", "\n", " diepte_van_m diepte_tot_m \n", "0 79.0 79.0 \n", "1 7.0 7.0 \n", "2 10.5 10.5 \n", "3 288.8 288.8 \n", "4 0.1 0.1 \n", "5 11.0 12.0 \n", "6 541.0 542.2 \n", "7 NaN 3.0 \n", "8 NaN 3.0 \n", "9 NaN 3.0 " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.monster import MonsterSearch\n", "\n", "monster_search = MonsterSearch()\n", "\n", "monster_search.get_fields()\n", "\n", "df_monsters = monster_search.search(\n", " max_features=10,\n", " return_fields=['pkey_monster', 'naam', 'diepte_van_m', 'diepte_tot_m']\n", ")\n", "\n", "df_monsters" ] }, { "cell_type": "markdown", "id": "787214bf", "metadata": {}, "source": [ "_Exercise: how deep is the deepest borehole in Poperinge?_\n", "
\n", "Answer\n", "\n", "__665 meters__\n", "\n", "from pydov.search.boring import BoringSearch\n", "\n", "boring_search = BoringSearch()\n", "\n", "df_boringen = boring_search.search(\n", " query=PropertyIsEqualTo('gemeente', 'Poperinge'),\n", " return_fields=['diepte_boring_tot']\n", ")\n", "\n", "float(df_boringen.diepte_boring_tot.max())\n", "
" ] }, { "cell_type": "markdown", "id": "2d9bfc95", "metadata": {}, "source": [ "_Extra: how deep is the deepest borehole in the DOV database?_\n", "
\n", "Answer\n", "\n", "__4905 meters__\n", "\n", "from pydov.search.boring import BoringSearch\n", "from owslib.fes2 import SortBy, SortProperty\n", "\n", "bs = BoringSearch()\n", "bs.search(sort_by=SortBy([SortProperty('diepte_boring_tot', 'DESC')]),\n", " max_features=1,\n", " return_fields=('pkey_boring', 'datum_aanvang', 'uitvoerder', 'gemeente', 'diepte_boring_tot'))\n", "
" ] }, { "cell_type": "markdown", "id": "e45950e1", "metadata": {}, "source": [ "### Add geometry\n", "\n", "By default, the result dataframes only contain attribute values. To also query the geometry, you can add this field to the list of `return_fields`.\n", "\n", "To get the name of the geometry column, you can use the following command:" ] }, { "cell_type": "code", "execution_count": 19, "id": "f2a02b72", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " \n", "
\n", "

geom - None

  • type: geometry
  • notnull: False
  • query: False
  • cost: 1
  • multivalue: False
\n", "
\n", "
" ], "text/plain": [ "{'geom': {'name': 'geom', 'definition': None, 'type': 'geometry', 'multivalue': False, 'notnull': False, 'query': False, 'cost': 1}}" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.monster import MonsterSearch\n", "\n", "monster_search = MonsterSearch()\n", "\n", "monster_search.get_fields(type='geometry')" ] }, { "cell_type": "markdown", "id": "6f42fe22", "metadata": {}, "source": [ "Then you can add this as a `GeometryReturnField`, where you specify both the name and the desired coordinate system:" ] }, { "cell_type": "code", "execution_count": 20, "id": "f7a1069a", "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", "
pkey_monsternaamgeom
0https://www.dov.vlaanderen.be/data/monster/201...0POINT (236820 181175)
1https://www.dov.vlaanderen.be/data/monster/201...0POINT (160032.9 175678.8)
2https://www.dov.vlaanderen.be/data/monster/201...0POINT (153903 178252)
3https://www.dov.vlaanderen.be/data/monster/201...0POINT (78776 226370)
4https://www.dov.vlaanderen.be/data/monster/201...0POINT (214069.5 216345.4)
5https://www.dov.vlaanderen.be/data/monster/201...0POINT (165215 161534)
6https://www.dov.vlaanderen.be/data/monster/201...0POINT (234942 189926)
7https://www.dov.vlaanderen.be/data/monster/201...000/00/2-F1/M1501POINT (28554.55 194470.43)
8https://www.dov.vlaanderen.be/data/monster/201...000/00/2-F1/M1/C2014-1POINT (28554.55 194470.43)
9https://www.dov.vlaanderen.be/data/monster/201...000/00/2-F1/M2015-2POINT (28554.55 194470.43)
\n", "
" ], "text/plain": [ " pkey_monster naam \\\n", "0 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "1 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "2 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "3 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "4 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "5 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "6 https://www.dov.vlaanderen.be/data/monster/201... 0 \n", "7 https://www.dov.vlaanderen.be/data/monster/201... 000/00/2-F1/M1501 \n", "8 https://www.dov.vlaanderen.be/data/monster/201... 000/00/2-F1/M1/C2014-1 \n", "9 https://www.dov.vlaanderen.be/data/monster/201... 000/00/2-F1/M2015-2 \n", "\n", " geom \n", "0 POINT (236820 181175) \n", "1 POINT (160032.9 175678.8) \n", "2 POINT (153903 178252) \n", "3 POINT (78776 226370) \n", "4 POINT (214069.5 216345.4) \n", "5 POINT (165215 161534) \n", "6 POINT (234942 189926) \n", "7 POINT (28554.55 194470.43) \n", "8 POINT (28554.55 194470.43) \n", "9 POINT (28554.55 194470.43) " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.fields import GeometryReturnField\n", "\n", "df_monsters = monster_search.search(\n", " max_features=10,\n", " return_fields=['pkey_monster', 'naam', GeometryReturnField('geom', epsg=31370)]\n", ")\n", "\n", "df_monsters" ] }, { "cell_type": "markdown", "id": "1f7d9eb9", "metadata": {}, "source": [ "You can easily convert this result to a geodataframe:" ] }, { "cell_type": "code", "execution_count": 21, "id": "a9114b2f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdf_monsters = gpd.GeoDataFrame(df_monsters, geometry='geom', crs='EPSG:31370')\n", "gdf_monsters.explore()" ] }, { "cell_type": "markdown", "id": "8dcebac3", "metadata": {}, "source": [ "## Combine datasets\n", "\n", "Beyond the extensive search capabilities, the strength of pydov lies in the possibilities to combine different datasets. This way you can use the results of one dataset to further query and thus link different datasets together.\n", "\n", "For example, you can search for recent undisturbed samples of material class 'sediment' in your study area:" ] }, { "cell_type": "code", "execution_count": 22, "id": "7b2a0758", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_monsternaampkey_parentsmateriaalklassedatum_monsternamediepte_van_mdiepte_tot_mmonstertypemonstersamenstellingbemonsteringsprocedurebemonsteringsinstrumentbemonstering_door
0https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-02-054.04.50ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
1https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-02-075.05.40ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
2https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-02-286.57.00ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
3https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-02-285.56.00ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
4https://www.dov.vlaanderen.be/data/monster/202...N001(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-03-044.55.00ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
.......................................
91https://www.dov.vlaanderen.be/data/monster/202...N007(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-03-2512.012.50ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
92https://www.dov.vlaanderen.be/data/monster/202...N007(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-03-1413.514.00ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
93https://www.dov.vlaanderen.be/data/monster/202...N007(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-08-2917.017.50ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
94https://www.dov.vlaanderen.be/data/monster/202...N008(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-03-1416.516.90ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
95https://www.dov.vlaanderen.be/data/monster/202...N008(https://www.dov.vlaanderen.be/data/boring/202...sediment2025-08-2921.021.41ongeroerdEnkelvoudig monsterNaN(steekbus,)Geolab
\n", "

96 rows × 12 columns

\n", "
" ], "text/plain": [ " pkey_monster naam \\\n", "0 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", "1 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", "2 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", "3 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", "4 https://www.dov.vlaanderen.be/data/monster/202... N001 \n", ".. ... ... \n", "91 https://www.dov.vlaanderen.be/data/monster/202... N007 \n", "92 https://www.dov.vlaanderen.be/data/monster/202... N007 \n", "93 https://www.dov.vlaanderen.be/data/monster/202... N007 \n", "94 https://www.dov.vlaanderen.be/data/monster/202... N008 \n", "95 https://www.dov.vlaanderen.be/data/monster/202... N008 \n", "\n", " pkey_parents materiaalklasse \\\n", "0 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "1 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "2 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "3 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "4 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", ".. ... ... \n", "91 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "92 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "93 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "94 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "95 (https://www.dov.vlaanderen.be/data/boring/202... sediment \n", "\n", " datum_monstername diepte_van_m diepte_tot_m monstertype \\\n", "0 2025-02-05 4.0 4.50 ongeroerd \n", "1 2025-02-07 5.0 5.40 ongeroerd \n", "2 2025-02-28 6.5 7.00 ongeroerd \n", "3 2025-02-28 5.5 6.00 ongeroerd \n", "4 2025-03-04 4.5 5.00 ongeroerd \n", ".. ... ... ... ... \n", "91 2025-03-25 12.0 12.50 ongeroerd \n", "92 2025-03-14 13.5 14.00 ongeroerd \n", "93 2025-08-29 17.0 17.50 ongeroerd \n", "94 2025-03-14 16.5 16.90 ongeroerd \n", "95 2025-08-29 21.0 21.41 ongeroerd \n", "\n", " monstersamenstelling bemonsteringsprocedure bemonsteringsinstrument \\\n", "0 Enkelvoudig monster NaN (steekbus,) \n", "1 Enkelvoudig monster NaN (steekbus,) \n", "2 Enkelvoudig monster NaN (steekbus,) \n", "3 Enkelvoudig monster NaN (steekbus,) \n", "4 Enkelvoudig monster NaN (steekbus,) \n", ".. ... ... ... \n", "91 Enkelvoudig monster NaN (steekbus,) \n", "92 Enkelvoudig monster NaN (steekbus,) \n", "93 Enkelvoudig monster NaN (steekbus,) \n", "94 Enkelvoudig monster NaN (steekbus,) \n", "95 Enkelvoudig monster NaN (steekbus,) \n", "\n", " bemonstering_door \n", "0 Geolab \n", "1 Geolab \n", "2 Geolab \n", "3 Geolab \n", "4 Geolab \n", ".. ... \n", "91 Geolab \n", "92 Geolab \n", "93 Geolab \n", "94 Geolab \n", "95 Geolab \n", "\n", "[96 rows x 12 columns]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.monster import MonsterSearch\n", "\n", "from owslib.fes2 import (\n", " And, PropertyIsEqualTo, PropertyIsGreaterThanOrEqualTo)\n", "\n", "monster_search = MonsterSearch()\n", "\n", "df_monsters = monster_search.search(\n", " query=And([\n", " PropertyIsGreaterThanOrEqualTo('datum_monstername', '2025-01-01'),\n", " PropertyIsEqualTo('monstertype', 'ongeroerd'),\n", " PropertyIsEqualTo('materiaalklasse', 'sediment')\n", " ]),\n", " location=Within(Box(18000, 200000, 220000, 230000, epsg=31370)),\n", ")\n", "\n", "df_monsters" ] }, { "cell_type": "markdown", "id": "c56df316", "metadata": {}, "source": [ "And then query the boreholes from which these samples were taken:" ] }, { "cell_type": "code", "execution_count": 23, "id": "ed4ed591", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[000/025] ccccccccccccccccccccccccc\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_boringboornummerxystart_boring_mtawdiepte_boring_vandiepte_boring_tot
0https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-24/145-B2171606.34226099.2429.470.017.0
1https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-24/170-B3184946.81224485.4330.660.013.0
2https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-24/129-B1190260.76224986.2430.800.011.0
3https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-24/172-B4189057.08224239.4630.540.013.0
4https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-24/032-B2184784.67204405.3224.970.013.0
5https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-24/048-B2187330.14203702.5524.340.011.0
6https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/018-B2138033.62217213.1311.020.015.0
7https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/016-B7140207.22220214.486.040.015.0
8https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/016-B40139941.76219840.9410.640.015.0
9https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/016-B51139930.52220230.546.720.015.0
10https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/016-B54139933.84220067.226.330.015.0
11https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/016-B64139978.91219818.457.260.015.0
12https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/016-B67140027.49220118.966.380.015.0
13https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/016-B91140180.82220020.086.270.037.0
14https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/016-B92140228.82220215.936.050.037.0
15https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-24/034-B1188005.68203472.4023.600.010.0
16https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/095-B167509.23225520.897.71NaN15.0
17https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/095-B367612.11225524.997.690.015.0
18https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/101-B169725.28225684.547.850.045.7
19https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/101-B369751.19225638.327.750.025.0
20https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/101-B669818.19225513.277.820.018.0
21https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/101-B969867.78225414.717.710.046.7
22https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/101-B1069910.34225294.168.950.047.1
23https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/101-B1469627.03225643.007.900.06.6
24https://www.dov.vlaanderen.be/data/boring/2025...1411-GEO-25/101-B2069764.33225383.577.820.06.6
\n", "
" ], "text/plain": [ " pkey_boring boornummer \\\n", "0 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-24/145-B2 \n", "1 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-24/170-B3 \n", "2 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-24/129-B1 \n", "3 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-24/172-B4 \n", "4 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-24/032-B2 \n", "5 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-24/048-B2 \n", "6 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/018-B2 \n", "7 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/016-B7 \n", "8 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/016-B40 \n", "9 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/016-B51 \n", "10 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/016-B54 \n", "11 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/016-B64 \n", "12 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/016-B67 \n", "13 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/016-B91 \n", "14 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/016-B92 \n", "15 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-24/034-B1 \n", "16 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/095-B1 \n", "17 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/095-B3 \n", "18 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/101-B1 \n", "19 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/101-B3 \n", "20 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/101-B6 \n", "21 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/101-B9 \n", "22 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/101-B10 \n", "23 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/101-B14 \n", "24 https://www.dov.vlaanderen.be/data/boring/2025... 1411-GEO-25/101-B20 \n", "\n", " x y start_boring_mtaw diepte_boring_van \\\n", "0 171606.34 226099.24 29.47 0.0 \n", "1 184946.81 224485.43 30.66 0.0 \n", "2 190260.76 224986.24 30.80 0.0 \n", "3 189057.08 224239.46 30.54 0.0 \n", "4 184784.67 204405.32 24.97 0.0 \n", "5 187330.14 203702.55 24.34 0.0 \n", "6 138033.62 217213.13 11.02 0.0 \n", "7 140207.22 220214.48 6.04 0.0 \n", "8 139941.76 219840.94 10.64 0.0 \n", "9 139930.52 220230.54 6.72 0.0 \n", "10 139933.84 220067.22 6.33 0.0 \n", "11 139978.91 219818.45 7.26 0.0 \n", "12 140027.49 220118.96 6.38 0.0 \n", "13 140180.82 220020.08 6.27 0.0 \n", "14 140228.82 220215.93 6.05 0.0 \n", "15 188005.68 203472.40 23.60 0.0 \n", "16 67509.23 225520.89 7.71 NaN \n", "17 67612.11 225524.99 7.69 0.0 \n", "18 69725.28 225684.54 7.85 0.0 \n", "19 69751.19 225638.32 7.75 0.0 \n", "20 69818.19 225513.27 7.82 0.0 \n", "21 69867.78 225414.71 7.71 0.0 \n", "22 69910.34 225294.16 8.95 0.0 \n", "23 69627.03 225643.00 7.90 0.0 \n", "24 69764.33 225383.57 7.82 0.0 \n", "\n", " diepte_boring_tot \n", "0 17.0 \n", "1 13.0 \n", "2 11.0 \n", "3 13.0 \n", "4 13.0 \n", "5 11.0 \n", "6 15.0 \n", "7 15.0 \n", "8 15.0 \n", "9 15.0 \n", "10 15.0 \n", "11 15.0 \n", "12 15.0 \n", "13 37.0 \n", "14 37.0 \n", "15 10.0 \n", "16 15.0 \n", "17 15.0 \n", "18 45.7 \n", "19 25.0 \n", "20 18.0 \n", "21 46.7 \n", "22 47.1 \n", "23 6.6 \n", "24 6.6 " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.boring import BoringSearch\n", "\n", "from pydov.util.query import Join\n", "\n", "boring_search = BoringSearch()\n", "\n", "df_boringen = boring_search.search(\n", " query=Join(df_monsters, on='pkey_boring', using='pkey_parents'),\n", " return_fields=['pkey_boring', 'boornummer', 'x', 'y', 'start_boring_mtaw', 'diepte_boring_van', 'diepte_boring_tot']\n", ")\n", "\n", "df_boringen" ] } ], "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": 5 }