{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example of DOV search methods for soil data (bodemgegevens)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/DOV-Vlaanderen/pydov/master?filepath=docs%2Fnotebooks%2Fsearch_bodem.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Use cases explained below\n", "* Introduction to the bodem-objects\n", "* Get bodemsites in a bounding box\n", "* Get bodemlocaties with specific properties\n", "* Get all direct and indirect bodemobservaties linked to a bodemlocatie\n", "* Find all bodemlocaties where observations exist for organic carbon percentage in Geraardsbergen between 0 and 30 cm deep\n", "* Find Aardewerk soil locations" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "\n", "import inspect, sys\n", "import warnings; warnings.simplefilter('ignore')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "\n", "# check pydov path\n", "import pydov" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Get information about the datatype 'Bodemlocatie'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Other datatypes are also possible:\n", "* Bodemsite: BodemsiteSearch\n", "* Bodemobservatie: BodemobservatieSearch" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from pydov.search.bodemlocatie import BodemlocatieSearch\n", "bodemlocatie = BodemlocatieSearch()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A description is provided for the 'Bodemlocatie' datatype:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"Een bodemlocatie is ofwel een profielput of een boring. Een boring is altijd één puntlocatie (x,y,z) en een profielput heeft minimum één en maximum twee puntlocaties (begin- en eindpunt van de profielput). \\r\\nEen profielput is een uitgegraven put in de bodem waarin profielbeschrijvingen, monsternames of bodemobservaties worden uitgevoerd. Een profielbeschrijving is een waarneming van bodemhorizonten en/of bodemlagen in een uitgegraven profielput. Een bodemhorizont is een visueel te onderscheiden deel van de bodem dat ontstaan is door omzetting van het moedermateriaal door pedogenetische processen of door het afzetten van organisch materiaal. Een bodemhorizont heeft voor de meeste bodemvariabelen homogene morfologische en analytische karakteristieken. Een bodemlaag daarentegen is ontstaan door niet-pedogenetische processen. Aan de hand van een profielput krijg je een beeld van de bodemkundige opbouw.\\r\\nEen boring is het resultaat van het boren in de ondergrond met verwijdering van bodem door middel van een gereedschap in de vorm van een holle buis. Aan de hand van dit opgeboorde bodemmateriaal worden bodembeschrijvingen, bodemobservaties en monsternames uitgevoerd.\\r\\nDe bodemlocaties uit de 'Aardewerk-Vlaanderen-2010' databank worden afzonderlijk ontsloten in de datasets 'Bodemprofielen kartering Belgische bodemkaart' en 'Oppervlaktemonsters kartering Belgische bodemkaart'.\"" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bodemlocatie.get_description()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The different fields that are available for objects of the 'Bodemlocatie' datatype can be requested with the get_fields() method:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "naam\n", "pkey_bodemlocatie\n", "type\n", "rapport_bodemlocatie\n", "profielbeschrijving\n", "waarnemingsdatum\n", "doel\n", "x\n", "y\n", "mv_mtaw\n", "Auteurs\n", "Aantal_classificaties\n", "Aantal_opbouwen\n", "erfgoed\n", "Aantal_observaties\n", "Aantal_monsters\n", "bodemstreek\n", "Bodemsite\n", "pkey_bodemsite\n", "Opdrachten\n", "eerste_invoer\n", "geom\n", "invoerdatum\n", "educatieve_waarde\n" ] } ], "source": [ "fields = bodemlocatie.get_fields()\n", "\n", "# print available fields\n", "for f in fields.values():\n", " print(f['name'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, you can list all the fields and their details by inspecting the `get_fields()` output or the search instance itself in a notebook:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", "
\n", " \n", "
\n", " pydov.search.bodemlocatie.BodemlocatieSearch\n", "
\n", "

Een bodemlocatie is ofwel een profielput of een boring. Een boring is altijd één puntlocatie (x,y,z) en een profielput heeft minimum één en maximum twee puntlocaties (begin- en eindpunt van de profielput). \r\n", "Een profielput is een uitgegraven put in de bodem waarin profielbeschrijvingen, monsternames of bodemobservaties worden uitgevoerd. Een profielbeschrijving is een waarneming van bodemhorizonten en/of bodemlagen in een uitgegraven profielput. Een bodemhorizont is een visueel te onderscheiden deel van de bodem dat ontstaan is door omzetting van het moedermateriaal door pedogenetische processen of door het afzetten van organisch materiaal. Een bodemhorizont heeft voor de meeste bodemvariabelen homogene morfologische en analytische karakteristieken. Een bodemlaag daarentegen is ontstaan door niet-pedogenetische processen. Aan de hand van een profielput krijg je een beeld van de bodemkundige opbouw.\r\n", "Een boring is het resultaat van het boren in de ondergrond met verwijdering van bodem door middel van een gereedschap in de vorm van een holle buis. Aan de hand van dit opgeboorde bodemmateriaal worden bodembeschrijvingen, bodemobservaties en monsternames uitgevoerd.\r\n", "De bodemlocaties uit de 'Aardewerk-Vlaanderen-2010' databank worden afzonderlijk ontsloten in de datasets 'Bodemprofielen kartering Belgische bodemkaart' en 'Oppervlaktemonsters kartering Belgische bodemkaart'.

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

naam - De unieke naam van de bodemlocatie.

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

pkey_bodemlocatie - Permanente URL die verwijst naar de gegevens van de bodemlocatie op de website.

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

type - Het type van de bodemlocatie: boring of profielput.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False
  • codelist:
  • \n", " \n", "
    \n", " \n", "
    \n", " pydov.util.codelists.FeatureCatalogueValues\n", "
    \n", " \n", " \n", "
    \n", "

    boring - boring - Een boring is het resultaat van het boren in de ondergrond met verwijdering van bodem door middel van een gereedschap in de vorm van een holle buis. Aan de hand van dit opgeboorde bodemmateriaal worden bodembeschrijvingen, bodemobservaties en monsternames uitgevoerd.

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

    profielput - profielput - Een profielput is een uitgegraven put in de bodem waarin profielbeschrijvingen, monsternames of bodemobservaties worden uitgevoerd. Een profielbeschrijving is een waarneming van bodemhorizonten en/of bodemlagen in een uitgegraven profielput. Een bodemhorizont is een visueel te onderscheiden deel van de bodem dat ontstaan is door omzetting van het moedermateriaal door pedogenetische processen of door het afzetten van organisch materiaal. Een bodemhorizont heeft voor de meeste bodemvariabelen homogene morfologische en analytische karakteristieken. Een bodemlaag daarentegen is ontstaan door niet-pedogenetische processen. Aan de hand van een profielput krijg je een beeld van de bodemkundige opbouw.

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

rapport_bodemlocatie - URL die verwijst naar een volledig rapport van de bodemlocatie in PDF formaat.

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

profielbeschrijving - URL die verwijst naar de profielbeschrijving van de bodemlocatie in PDF formaat.

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

waarnemingsdatum - De datum waarop de bodemlocatie bestudeerd en geobserveerd werd.

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

doel - Het doel van de bodemlocatie: bodemkundige opbouw, infrastructuurwerken, ruilverkaveling, archeologische opgraving, bodemobservaties, ...

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

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

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

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

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

mv_mtaw - De hoogte van het maaiveld van (het startpunt van) de bodemlocatie in het TAW stelsel (in meter).

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

Auteurs - De auteur die de bodemlocatie bestudeerd en/of geobserveerd heeft.

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

Aantal_classificaties - Het aantal classficiaties aan een bodemlocatie. Er kunnen verschillende types classificaties aan een bodemlocatie worden gehangen: Belgische classificatie, WRB classificatie, ...

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

Aantal_opbouwen - Geeft aan hoeveel verschillende types bodemkundige opbouw beschikbaar zijn voor deze bodemlocatie (van 0 t.e.m. 3): algemeen, technisch en/of WRB diagnostisch.

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

erfgoed - Of de bodemlocatie gekend is als bodemkundig erfgoed, om één of meerdere redenen.

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

Aantal_observaties - Het aantal observaties dat aan de bodemlocatie gekoppeld is.

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

Aantal_monsters - Het aantal monsters dat aan de bodemlocatie gekoppeld is.

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

bodemstreek - De bodemstreek waarin deze bodemlocatie gelegen is volgens de Digitale Bodemkaart van het Vlaamse Gewest.

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

Bodemsite - De naam van de bodemsite waaraan de bodemlocatie gekoppeld is.

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

pkey_bodemsite - Permanente URL die verwijst naar de gegevens van de bodemsite waaraan de bodemlocatie gekoppeld is, op de website.

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

Opdrachten - De DOV-opdracht(en) waaraan de bodemlocatie gekoppeld is.

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

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

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

geom - None

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

invoerdatum - Datum van invoer van de bodemlocatie.

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

educatieve_waarde - Educatieve waarde van de bodemlocatie.

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

\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bodemlocatie" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example use cases" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get bodemsites in a bounding box" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get data for all the bodemsites that are geographically located completely within the bounds of the specified box.\n", "\n", "The coordinates are in the Belgian Lambert72 (EPSG:31370) coordinate system and are given in the order of lower left x, lower left y, upper right x, upper right y." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The same methods can be used for other bodem objects." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "from pydov.search.bodemsite import BodemsiteSearch\n", "bodemsite = BodemsiteSearch()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[000/029] ccccccccccccccccccccccccccccc\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pkey_bodemsitenaamwaarnemingsdatumbeschrijvinginvoerdatum
0https://www.dov.vlaanderen.be/data/bodemsite/2...CN_2694352021-04-03Curieuzeneuzen: meetsite in een particuliere tuin2023-09-29
1https://www.dov.vlaanderen.be/data/bodemsite/2...CN_2709142021-04-03Curieuzeneuzen: meetsite in een particuliere tuin2023-09-29
2https://www.dov.vlaanderen.be/data/bodemsite/2...CN_2867632021-04-03Curieuzeneuzen: meetsite in een schooltuin2023-09-29
3https://www.dov.vlaanderen.be/data/bodemsite/2...CN_2874652021-04-03Curieuzeneuzen: meetsite in een openbaar groen...2023-09-29
4https://www.dov.vlaanderen.be/data/bodemsite/2...Zoniënwoud_GroenendaalNaNZachte helling op plateau, Bodem nooit onder l...NaN
\n", "
" ], "text/plain": [ " pkey_bodemsite naam \\\n", "0 https://www.dov.vlaanderen.be/data/bodemsite/2... CN_269435 \n", "1 https://www.dov.vlaanderen.be/data/bodemsite/2... CN_270914 \n", "2 https://www.dov.vlaanderen.be/data/bodemsite/2... CN_286763 \n", "3 https://www.dov.vlaanderen.be/data/bodemsite/2... CN_287465 \n", "4 https://www.dov.vlaanderen.be/data/bodemsite/2... Zoniënwoud_Groenendaal \n", "\n", " waarnemingsdatum beschrijving \\\n", "0 2021-04-03 Curieuzeneuzen: meetsite in een particuliere tuin \n", "1 2021-04-03 Curieuzeneuzen: meetsite in een particuliere tuin \n", "2 2021-04-03 Curieuzeneuzen: meetsite in een schooltuin \n", "3 2021-04-03 Curieuzeneuzen: meetsite in een openbaar groen... \n", "4 NaN Zachte helling op plateau, Bodem nooit onder l... \n", "\n", " invoerdatum \n", "0 2023-09-29 \n", "1 2023-09-29 \n", "2 2023-09-29 \n", "3 2023-09-29 \n", "4 NaN " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.util.location import Within, Box\n", "\n", "df = bodemsite.search(location=Within(Box(148000, 160800, 160000, 169500, epsg=31370)))\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The dataframe contains a list of bodemsites. The available data are flattened to represent unique attributes per row of the dataframe.\n", "\n", "Using the *pkey_bodemsite* field one can request the details of this bodemsite in a webbrowser:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "https://www.dov.vlaanderen.be/data/bodemsite/2017-000210\n", "https://www.dov.vlaanderen.be/data/bodemsite/2021-007106\n", "https://www.dov.vlaanderen.be/data/bodemsite/2021-007116\n", "https://www.dov.vlaanderen.be/data/bodemsite/2021-007484\n", "https://www.dov.vlaanderen.be/data/bodemsite/2021-007552\n" ] } ], "source": [ "for pkey_bodemsite in set(df.pkey_bodemsite.head()):\n", " print(pkey_bodemsite)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get bodemlocaties with specific properties" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next to querying bodem objects based on their geographic location within a bounding box, we can also search for bodem objects matching a specific set of properties. \n", "The same methods can be used for all bodem objects.\n", "For this we can build a query using a combination of the 'Bodemlocatie' fields and operators provided by the WFS protocol.\n", "\n", "A list of possible operators can be found below:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['PropertyIsBetween',\n", " 'PropertyIsEqualTo',\n", " 'PropertyIsGreaterThan',\n", " 'PropertyIsGreaterThanOrEqualTo',\n", " 'PropertyIsLessThan',\n", " 'PropertyIsLessThanOrEqualTo',\n", " 'PropertyIsLike',\n", " 'PropertyIsNotEqualTo',\n", " 'PropertyIsNull',\n", " 'SortProperty']" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[i for i,j in inspect.getmembers(sys.modules['owslib.fes2'], inspect.isclass) if 'Property' in i]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we build a query using the *PropertyIsEqualTo* operator to find all bodemlocaties with bodemstreek 'zandstreek'.\n", "We use *max_features=10* to limit the results to 10." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[000/010] cccccccccc\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", "
pkey_bodemlocatiepkey_bodemsitenaamtypewaarnemingsdatumdoelxymv_mtawerfgoedbodemstreekinvoerdatumeducatieve_waarde
0https://www.dov.vlaanderen.be/data/bodemlocati...NaNARCH_2017C381_WP0001BP01profielput2017-03-27archeologische proefputten ifv prehistorische ...100951.02197304.896.11FalseZandstreek2022-03-02NaN
1https://www.dov.vlaanderen.be/data/bodemlocati...NaNARCH_2018D174_1profielput2018-11-07archeologische proefsleuven en proefputten136567.44209067.7313.17FalseZandstreek2022-03-02NaN
2https://www.dov.vlaanderen.be/data/bodemlocati...NaNARCH_2018D174_2profielput2018-11-07archeologische proefsleuven en proefputten136520.06209040.8813.75FalseZandstreek2022-03-02NaN
3https://www.dov.vlaanderen.be/data/bodemlocati...NaNARCH_2018D174_3profielput2018-11-07archeologische proefsleuven en proefputten136458.47209006.7713.41FalseZandstreek2022-03-02NaN
4https://www.dov.vlaanderen.be/data/bodemlocati...NaNARCH_2021L196_463.1profielput2021-12-21archeologische proefsleuven en proefputten119075.97201394.215.75FalseZandstreek2022-03-07NaN
\n", "
" ], "text/plain": [ " pkey_bodemlocatie pkey_bodemsite \\\n", "0 https://www.dov.vlaanderen.be/data/bodemlocati... NaN \n", "1 https://www.dov.vlaanderen.be/data/bodemlocati... NaN \n", "2 https://www.dov.vlaanderen.be/data/bodemlocati... NaN \n", "3 https://www.dov.vlaanderen.be/data/bodemlocati... NaN \n", "4 https://www.dov.vlaanderen.be/data/bodemlocati... NaN \n", "\n", " naam type waarnemingsdatum \\\n", "0 ARCH_2017C381_WP0001BP01 profielput 2017-03-27 \n", "1 ARCH_2018D174_1 profielput 2018-11-07 \n", "2 ARCH_2018D174_2 profielput 2018-11-07 \n", "3 ARCH_2018D174_3 profielput 2018-11-07 \n", "4 ARCH_2021L196_463.1 profielput 2021-12-21 \n", "\n", " doel x y \\\n", "0 archeologische proefputten ifv prehistorische ... 100951.02 197304.89 \n", "1 archeologische proefsleuven en proefputten 136567.44 209067.73 \n", "2 archeologische proefsleuven en proefputten 136520.06 209040.88 \n", "3 archeologische proefsleuven en proefputten 136458.47 209006.77 \n", "4 archeologische proefsleuven en proefputten 119075.97 201394.21 \n", "\n", " mv_mtaw erfgoed bodemstreek invoerdatum educatieve_waarde \n", "0 6.11 False Zandstreek 2022-03-02 NaN \n", "1 13.17 False Zandstreek 2022-03-02 NaN \n", "2 13.75 False Zandstreek 2022-03-02 NaN \n", "3 13.41 False Zandstreek 2022-03-02 NaN \n", "4 5.75 False Zandstreek 2022-03-07 NaN " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from owslib.fes2 import PropertyIsEqualTo\n", "\n", "query = PropertyIsEqualTo(propertyname='bodemstreek',\n", " literal='Zandstreek')\n", "df = bodemlocatie.search(query=query, max_features=10)\n", "\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once again we can use the *pkey_bodemlocatie* as a permanent link to the information of these bodemlocaties:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "https://www.dov.vlaanderen.be/data/bodemlocatie/2017-018199\n", "https://www.dov.vlaanderen.be/data/bodemlocatie/2021-024151\n", "https://www.dov.vlaanderen.be/data/bodemlocatie/2018-022980\n", "https://www.dov.vlaanderen.be/data/bodemlocatie/2018-022978\n", "https://www.dov.vlaanderen.be/data/bodemlocatie/2018-022979\n" ] } ], "source": [ "for pkey_bodemlocatie in set(df.pkey_bodemlocatie.head()):\n", " print(pkey_bodemlocatie)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get all observaties linked to bodemlocatie" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get all bodemobservaties in a specific bodemlocatie.\n", "Direct means bodemobservaties directly linked with a bodemlocatie.\n", "Indirect means bodemobservaties linked with child-objects of the bodemlocatie, like diepteintervallen or monsters." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "from pydov.search.observatie import ObservatieSearch\n", "from pydov.search.monster import MonsterSearch\n", "\n", "from pydov.search.bodemlocatie import BodemlocatieSearch\n", "from pydov.search.bodemdiepteinterval import BodemdiepteintervalSearch\n", "\n", "from owslib.fes2 import PropertyIsEqualTo\n", "from pydov.util.query import Join, FuzzyJoin\n", "\n", "bodemlocatie = BodemlocatieSearch()\n", "bodemdiepteinterval = BodemdiepteintervalSearch()\n", "monster = MonsterSearch()\n", "observatie = ObservatieSearch()\n", "\n", "# prepare an empty dataframe to store all observations:\n", "df_observaties = pd.DataFrame()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we get the soil locations (bodemlocaties) of our interest:" ] }, { "cell_type": "code", "execution_count": 14, "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", "
pkey_bodemlocatie
0https://www.dov.vlaanderen.be/data/bodemlocati...
\n", "
" ], "text/plain": [ " pkey_bodemlocatie\n", "0 https://www.dov.vlaanderen.be/data/bodemlocati..." ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_bodemlocaties = bodemlocatie.search(query=PropertyIsEqualTo(propertyname='naam', literal='VMM_INF_52'), \n", " return_fields=('pkey_bodemlocatie',))\n", "df_bodemlocaties.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, let's search for all observations that are linked directly to the soil location:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/000] ." ] }, { "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", "
pkey_observatiepkey_parentfenomeentijddiepte_van_mdiepte_tot_mparametergroepparameterdetectieconditieresultaateenheidmethodeuitvoerderherkomstpkey_bodemlocatie
\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [pkey_observatie, pkey_parent, fenomeentijd, diepte_van_m, diepte_tot_m, parametergroep, parameter, detectieconditie, resultaat, eenheid, methode, uitvoerder, herkomst, pkey_bodemlocatie]\n", "Index: []" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# find observations linked directly to the soil location\n", "df_obs = observatie.search(\n", " query=Join(df_bodemlocaties, on='pkey_parent', using='pkey_bodemlocatie')\n", ")\n", "\n", "# in this case, the parent is the soil location\n", "df_obs['pkey_bodemlocatie'] = df_obs['pkey_parent']\n", "\n", "# add these observations to the dataframe with observations\n", "df_observaties = pd.concat([df_observaties, df_obs]).reset_index(drop=True)\n", "df_observaties" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observations can also be linked to a specific depth interval of the soil location. First, we have to find all depth intervals, and then search for observations linked to those:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_mparametergroepparameterdetectieconditieresultaateenheidmethodeuitvoerderherkomstpkey_bodemlocatie
0https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
1https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
2https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
3https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
4https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
5https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
6https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
7https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
8https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
9https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
10https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
11https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
12https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
13https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
14https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
15https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
\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", "9 https://www.dov.vlaanderen.be/data/observatie/... \n", "10 https://www.dov.vlaanderen.be/data/observatie/... \n", "11 https://www.dov.vlaanderen.be/data/observatie/... \n", "12 https://www.dov.vlaanderen.be/data/observatie/... \n", "13 https://www.dov.vlaanderen.be/data/observatie/... \n", "14 https://www.dov.vlaanderen.be/data/observatie/... \n", "15 https://www.dov.vlaanderen.be/data/observatie/... \n", "\n", " pkey_parent fenomeentijd \\\n", "0 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "1 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "2 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "3 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "4 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "5 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "6 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "7 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "8 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "9 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "10 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "11 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "12 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "13 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "14 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "15 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "\n", " diepte_van_m diepte_tot_m parametergroep parameter \\\n", "0 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "1 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "2 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "3 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "4 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "5 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "6 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "7 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "8 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "9 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "10 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "11 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "12 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "13 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "14 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "15 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "\n", " detectieconditie resultaat eenheid methode \\\n", "0 NaN 0.00E00 m/s Ksat Enkele-ring-methode \n", "1 NaN 0.00E00 m/s Ksat Enkele-ring-methode \n", "2 NaN 0.00E00 m/s Ksat Open-end-methode \n", "3 NaN 0.00E00 m/s Ksat Enkele-ring-methode \n", "4 NaN 0.00E00 m/s Ksat_Soakaway_methode \n", "5 NaN 0.00E00 m/s Ksat Porchet-methode \n", "6 NaN 0.00E00 m/s Ksat_Soakaway_methode \n", "7 NaN 0.00E00 m/s Ksat Enkele-ring-methode \n", "8 NaN 0.00E00 m/s Ksat Open-end-methode \n", "9 NaN 0.00E00 m/s Ksat_Soakaway_methode \n", "10 NaN 0.00E00 m/s Ksat Porchet-methode \n", "11 NaN 0.00E00 m/s Ksat Open-end-methode \n", "12 NaN 0.00E00 m/s Ksat Porchet-methode \n", "13 NaN 0.00E00 m/s Ksat_Soakaway_methode \n", "14 NaN 0.00E00 m/s Ksat Open-end-methode \n", "15 NaN 0.00E00 m/s Ksat Porchet-methode \n", "\n", " uitvoerder herkomst \\\n", "0 Bodemkundige Dienst van België VELD \n", "1 Bodemkundige Dienst van België VELD \n", "2 Bodemkundige Dienst van België VELD \n", "3 Bodemkundige Dienst van België VELD \n", "4 Bodemkundige Dienst van België VELD \n", "5 Bodemkundige Dienst van België VELD \n", "6 Bodemkundige Dienst van België VELD \n", "7 Bodemkundige Dienst van België VELD \n", "8 Bodemkundige Dienst van België VELD \n", "9 Bodemkundige Dienst van België VELD \n", "10 Bodemkundige Dienst van België VELD \n", "11 Bodemkundige Dienst van België VELD \n", "12 Bodemkundige Dienst van België VELD \n", "13 Bodemkundige Dienst van België VELD \n", "14 Bodemkundige Dienst van België VELD \n", "15 Bodemkundige Dienst van België VELD \n", "\n", " pkey_bodemlocatie \n", "0 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "1 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "2 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "3 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "4 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "5 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "6 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "7 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "8 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "9 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "10 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "11 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "12 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "13 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "14 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "15 https://www.dov.vlaanderen.be/data/bodemlocati... " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# find all depth intervals linked to the soil location\n", "df_diepteintervallen = bodemdiepteinterval.search(\n", " query=Join(df_bodemlocaties, on='pkey_bodemlocatie'),\n", " return_fields=('pkey_diepteinterval','pkey_bodemlocatie',)\n", ")\n", "\n", "if len(df_diepteintervallen) > 0:\n", "\n", " # find all observations linked to the depth intervals\n", " df_obs = observatie.search(query=Join(df_diepteintervallen, on='pkey_parent', using='pkey_diepteinterval'))\n", "\n", " # merge the result with the depth intervals, to be able to link the observations with the soil location\n", " df_obs = df_obs.merge(\n", " df_diepteintervallen, left_on='pkey_parent', right_on='pkey_diepteinterval'\n", " ).drop(\n", " columns=('pkey_diepteinterval')\n", " )\n", "\n", " if len(df_obs) > 0:\n", " df_observaties = pd.concat([df_observaties, df_obs]).reset_index(drop=True)\n", "\n", "df_observaties" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observations can also be linked to a sample taken from the soil location. First we have to find all samples, and then find observations linked to those:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/000] ." ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pkey_observatiepkey_parentfenomeentijddiepte_van_mdiepte_tot_mparametergroepparameterdetectieconditieresultaateenheidmethodeuitvoerderherkomstpkey_bodemlocatie
0https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
1https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
2https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
3https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
4https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
5https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
6https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
7https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
8https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
9https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
10https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
11https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
12https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
13https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
14https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
15https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
\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", "9 https://www.dov.vlaanderen.be/data/observatie/... \n", "10 https://www.dov.vlaanderen.be/data/observatie/... \n", "11 https://www.dov.vlaanderen.be/data/observatie/... \n", "12 https://www.dov.vlaanderen.be/data/observatie/... \n", "13 https://www.dov.vlaanderen.be/data/observatie/... \n", "14 https://www.dov.vlaanderen.be/data/observatie/... \n", "15 https://www.dov.vlaanderen.be/data/observatie/... \n", "\n", " pkey_parent fenomeentijd \\\n", "0 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "1 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "2 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "3 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "4 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "5 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "6 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "7 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "8 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "9 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "10 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "11 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "12 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "13 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "14 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "15 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "\n", " diepte_van_m diepte_tot_m parametergroep parameter \\\n", "0 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "1 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "2 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "3 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "4 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "5 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "6 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "7 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "8 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "9 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "10 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "11 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "12 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "13 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "14 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "15 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "\n", " detectieconditie resultaat eenheid methode \\\n", "0 NaN 0.00E00 m/s Ksat Enkele-ring-methode \n", "1 NaN 0.00E00 m/s Ksat Enkele-ring-methode \n", "2 NaN 0.00E00 m/s Ksat Open-end-methode \n", "3 NaN 0.00E00 m/s Ksat Enkele-ring-methode \n", "4 NaN 0.00E00 m/s Ksat_Soakaway_methode \n", "5 NaN 0.00E00 m/s Ksat Porchet-methode \n", "6 NaN 0.00E00 m/s Ksat_Soakaway_methode \n", "7 NaN 0.00E00 m/s Ksat Enkele-ring-methode \n", "8 NaN 0.00E00 m/s Ksat Open-end-methode \n", "9 NaN 0.00E00 m/s Ksat_Soakaway_methode \n", "10 NaN 0.00E00 m/s Ksat Porchet-methode \n", "11 NaN 0.00E00 m/s Ksat Open-end-methode \n", "12 NaN 0.00E00 m/s Ksat Porchet-methode \n", "13 NaN 0.00E00 m/s Ksat_Soakaway_methode \n", "14 NaN 0.00E00 m/s Ksat Open-end-methode \n", "15 NaN 0.00E00 m/s Ksat Porchet-methode \n", "\n", " uitvoerder herkomst \\\n", "0 Bodemkundige Dienst van België VELD \n", "1 Bodemkundige Dienst van België VELD \n", "2 Bodemkundige Dienst van België VELD \n", "3 Bodemkundige Dienst van België VELD \n", "4 Bodemkundige Dienst van België VELD \n", "5 Bodemkundige Dienst van België VELD \n", "6 Bodemkundige Dienst van België VELD \n", "7 Bodemkundige Dienst van België VELD \n", "8 Bodemkundige Dienst van België VELD \n", "9 Bodemkundige Dienst van België VELD \n", "10 Bodemkundige Dienst van België VELD \n", "11 Bodemkundige Dienst van België VELD \n", "12 Bodemkundige Dienst van België VELD \n", "13 Bodemkundige Dienst van België VELD \n", "14 Bodemkundige Dienst van België VELD \n", "15 Bodemkundige Dienst van België VELD \n", "\n", " pkey_bodemlocatie \n", "0 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "1 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "2 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "3 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "4 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "5 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "6 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "7 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "8 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "9 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "10 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "11 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "12 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "13 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "14 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "15 https://www.dov.vlaanderen.be/data/bodemlocati... " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# find all samples linked to the soil location\n", "df_monsters = monster.search(\n", " query=FuzzyJoin(df_bodemlocaties, on='pkey_parents', using='pkey_bodemlocatie'),\n", " return_fields=('pkey_monster', 'pkey_parents')\n", ")\n", "\n", "# take the first soil location from the sample's parents as the linked soil location\n", "df_monsters['pkey_bodemlocatie'] = df_monsters['pkey_parents'].apply(lambda x: [i for i in x if 'bodemlocatie' in i][0])\n", "\n", "if len(df_monsters) > 0:\n", "\n", " # find all observations linked to samples\n", " df_obs = observatie.search(query=Join(df_monsters, on='pkey_parent', using='pkey_monster'))\n", "\n", " # merge the result with the samples, to be able to link them to their soil location\n", " df_obs = df_obs.merge(\n", " df_monsters, left_on='pkey_parent', right_on='pkey_monster'\n", " ).drop(\n", " columns=['pkey_parents', 'pkey_monster']\n", " )\n", "\n", " if len(df_obs) > 0:\n", " df_observaties = pd.concat([df_observaties, df_obs]).reset_index(drop=True)\n", "\n", "df_observaties" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lastly, observations can also be linked to a sample linked to a specific depth interval. First we have to find all samples linked to a depth interval, and then find observations linked to those:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_mparametergroepparameterdetectieconditieresultaateenheidmethodeuitvoerderherkomstpkey_bodemlocatie
0https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
1https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
2https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
3https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
4https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
5https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
6https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
7https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
8https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
9https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
10https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
11https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
12https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
13https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
14https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
15https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
16https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/201...2015-08-27NaNNaNBodem_fysisch_textuurTextuurfracties (textuurmeting)NaNNaN%Textuur pipetmethode Robinson-KöhnNaNLABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
17https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/201...2015-08-27NaNNaNBodem_fysisch_textuurTextuurfracties (textuurmeting)NaNNaN%Textuur pipetmethode Robinson-KöhnBodemkundige Dienst van BelgiëLABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
18https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/201...2015-08-27NaNNaNBodem_fysisch_textuurTextuur - granulometrisch - klassen bodemkarte...NaNE - Klei-Textuur pipetmethode Robinson-KöhnBodemkundige Dienst van BelgiëLABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
19https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/201...2015-09-08NaNNaNBodem_fysisch_textuurTextuurfracties (textuurmeting)NaNNaN%Textuur pipetmethode Robinson-KöhnBodemkundige Dienst van BelgiëLABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
20https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/201...2015-08-27NaNNaNBodem_fysisch_textuurTextuur - handmatig - klassen bodemkartering (...NaNA - Leem-Textuur manuele schatting (palpatie)Bodemkundige Dienst van BelgiëLABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
\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", "9 https://www.dov.vlaanderen.be/data/observatie/... \n", "10 https://www.dov.vlaanderen.be/data/observatie/... \n", "11 https://www.dov.vlaanderen.be/data/observatie/... \n", "12 https://www.dov.vlaanderen.be/data/observatie/... \n", "13 https://www.dov.vlaanderen.be/data/observatie/... \n", "14 https://www.dov.vlaanderen.be/data/observatie/... \n", "15 https://www.dov.vlaanderen.be/data/observatie/... \n", "16 https://www.dov.vlaanderen.be/data/observatie/... \n", "17 https://www.dov.vlaanderen.be/data/observatie/... \n", "18 https://www.dov.vlaanderen.be/data/observatie/... \n", "19 https://www.dov.vlaanderen.be/data/observatie/... \n", "20 https://www.dov.vlaanderen.be/data/observatie/... \n", "\n", " pkey_parent fenomeentijd \\\n", "0 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "1 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "2 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "3 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "4 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "5 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "6 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "7 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "8 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "9 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "10 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "11 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "12 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "13 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "14 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "15 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "16 https://www.dov.vlaanderen.be/data/monster/201... 2015-08-27 \n", "17 https://www.dov.vlaanderen.be/data/monster/201... 2015-08-27 \n", "18 https://www.dov.vlaanderen.be/data/monster/201... 2015-08-27 \n", "19 https://www.dov.vlaanderen.be/data/monster/201... 2015-09-08 \n", "20 https://www.dov.vlaanderen.be/data/monster/201... 2015-08-27 \n", "\n", " diepte_van_m diepte_tot_m parametergroep \\\n", "0 NaN NaN Bodem_fysisch_vocht \n", "1 NaN NaN Bodem_fysisch_vocht \n", "2 NaN NaN Bodem_fysisch_vocht \n", "3 NaN NaN Bodem_fysisch_vocht \n", "4 NaN NaN Bodem_fysisch_vocht \n", "5 NaN NaN Bodem_fysisch_vocht \n", "6 NaN NaN Bodem_fysisch_vocht \n", "7 NaN NaN Bodem_fysisch_vocht \n", "8 NaN NaN Bodem_fysisch_vocht \n", "9 NaN NaN Bodem_fysisch_vocht \n", "10 NaN NaN Bodem_fysisch_vocht \n", "11 NaN NaN Bodem_fysisch_vocht \n", "12 NaN NaN Bodem_fysisch_vocht \n", "13 NaN NaN Bodem_fysisch_vocht \n", "14 NaN NaN Bodem_fysisch_vocht \n", "15 NaN NaN Bodem_fysisch_vocht \n", "16 NaN NaN Bodem_fysisch_textuur \n", "17 NaN NaN Bodem_fysisch_textuur \n", "18 NaN NaN Bodem_fysisch_textuur \n", "19 NaN NaN Bodem_fysisch_textuur \n", "20 NaN NaN Bodem_fysisch_textuur \n", "\n", " parameter detectieconditie \\\n", "0 Ksat (ksat) NaN \n", "1 Ksat (ksat) NaN \n", "2 Ksat (ksat) NaN \n", "3 Ksat (ksat) NaN \n", "4 Ksat (ksat) NaN \n", "5 Ksat (ksat) NaN \n", "6 Ksat (ksat) NaN \n", "7 Ksat (ksat) NaN \n", "8 Ksat (ksat) NaN \n", "9 Ksat (ksat) NaN \n", "10 Ksat (ksat) NaN \n", "11 Ksat (ksat) NaN \n", "12 Ksat (ksat) NaN \n", "13 Ksat (ksat) NaN \n", "14 Ksat (ksat) NaN \n", "15 Ksat (ksat) NaN \n", "16 Textuurfracties (textuurmeting) NaN \n", "17 Textuurfracties (textuurmeting) NaN \n", "18 Textuur - granulometrisch - klassen bodemkarte... NaN \n", "19 Textuurfracties (textuurmeting) NaN \n", "20 Textuur - handmatig - klassen bodemkartering (... NaN \n", "\n", " resultaat eenheid methode \\\n", "0 0.00E00 m/s Ksat Enkele-ring-methode \n", "1 0.00E00 m/s Ksat Enkele-ring-methode \n", "2 0.00E00 m/s Ksat Open-end-methode \n", "3 0.00E00 m/s Ksat Enkele-ring-methode \n", "4 0.00E00 m/s Ksat_Soakaway_methode \n", "5 0.00E00 m/s Ksat Porchet-methode \n", "6 0.00E00 m/s Ksat_Soakaway_methode \n", "7 0.00E00 m/s Ksat Enkele-ring-methode \n", "8 0.00E00 m/s Ksat Open-end-methode \n", "9 0.00E00 m/s Ksat_Soakaway_methode \n", "10 0.00E00 m/s Ksat Porchet-methode \n", "11 0.00E00 m/s Ksat Open-end-methode \n", "12 0.00E00 m/s Ksat Porchet-methode \n", "13 0.00E00 m/s Ksat_Soakaway_methode \n", "14 0.00E00 m/s Ksat Open-end-methode \n", "15 0.00E00 m/s Ksat Porchet-methode \n", "16 NaN % Textuur pipetmethode Robinson-Köhn \n", "17 NaN % Textuur pipetmethode Robinson-Köhn \n", "18 E - Klei - Textuur pipetmethode Robinson-Köhn \n", "19 NaN % Textuur pipetmethode Robinson-Köhn \n", "20 A - Leem - Textuur manuele schatting (palpatie) \n", "\n", " uitvoerder herkomst \\\n", "0 Bodemkundige Dienst van België VELD \n", "1 Bodemkundige Dienst van België VELD \n", "2 Bodemkundige Dienst van België VELD \n", "3 Bodemkundige Dienst van België VELD \n", "4 Bodemkundige Dienst van België VELD \n", "5 Bodemkundige Dienst van België VELD \n", "6 Bodemkundige Dienst van België VELD \n", "7 Bodemkundige Dienst van België VELD \n", "8 Bodemkundige Dienst van België VELD \n", "9 Bodemkundige Dienst van België VELD \n", "10 Bodemkundige Dienst van België VELD \n", "11 Bodemkundige Dienst van België VELD \n", "12 Bodemkundige Dienst van België VELD \n", "13 Bodemkundige Dienst van België VELD \n", "14 Bodemkundige Dienst van België VELD \n", "15 Bodemkundige Dienst van België VELD \n", "16 NaN LABO \n", "17 Bodemkundige Dienst van België LABO \n", "18 Bodemkundige Dienst van België LABO \n", "19 Bodemkundige Dienst van België LABO \n", "20 Bodemkundige Dienst van België LABO \n", "\n", " pkey_bodemlocatie \n", "0 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "1 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "2 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "3 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "4 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "5 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "6 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "7 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "8 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "9 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "10 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "11 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "12 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "13 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "14 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "15 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "16 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "17 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "18 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "19 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "20 https://www.dov.vlaanderen.be/data/bodemlocati... " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# find all samples linked to a depth interval\n", "df_monsters_diepteintervallen = monster.search(\n", " query=FuzzyJoin(df_diepteintervallen, on='pkey_parents', using='pkey_diepteinterval'),\n", " return_fields=('pkey_monster', 'pkey_parents')\n", ")\n", "\n", "# take the first depth interval from the sample's parents as the linked depth interval\n", "df_monsters_diepteintervallen['pkey_diepteinterval'] = df_monsters_diepteintervallen['pkey_parents'].apply(lambda x: [i for i in x if 'diepteinterval' in i][0])\n", "\n", "# merge the result with the depth interval to be able to link them to the soil location\n", "df_monsters_diepteintervallen = df_monsters_diepteintervallen.merge(\n", " df_diepteintervallen, on='pkey_diepteinterval'\n", ").drop(\n", " columns=('pkey_diepteinterval')\n", ")\n", "\n", "if len(df_monsters_diepteintervallen) > 0:\n", "\n", " # find all observations linked to the samples\n", " df_obs = observatie.search(query=Join(df_monsters_diepteintervallen, on='pkey_parent', using='pkey_monster'))\n", "\n", " # merge the result with the previous result, to be able to link them to the soil location\n", " df_obs = df_obs.merge(\n", " df_monsters_diepteintervallen, left_on='pkey_parent', right_on='pkey_monster'\n", " ).drop(\n", " columns=['pkey_parents', 'pkey_monster']\n", " )\n", "\n", " if len(df_obs) > 0:\n", " df_observaties = pd.concat([df_observaties, df_obs]).reset_index(drop=True)\n", "\n", "df_observaties" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also group these queries into a function, which will allow us to easily reuse this with any given dataframe of soil locations (containing at least the column `pkey_bodemlocatie`):" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/000] .[000/001] .\n", "[000/001] .\n", "[000/000] .[000/001] .\n", "[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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_mparametergroepparameterdetectieconditieresultaateenheidmethodeuitvoerderherkomstpkey_bodemlocatie
0https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
1https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
2https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
3https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
4https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
5https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
6https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
7https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
8https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
9https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
10https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
11https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
12https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
13https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
14https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
15https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Porchet-methodeBodemkundige Dienst van BelgiëVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
16https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/201...2015-08-27NaNNaNBodem_fysisch_textuurTextuurfracties (textuurmeting)NaNNaN%Textuur pipetmethode Robinson-KöhnNaNLABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
17https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/201...2015-08-27NaNNaNBodem_fysisch_textuurTextuurfracties (textuurmeting)NaNNaN%Textuur pipetmethode Robinson-KöhnBodemkundige Dienst van BelgiëLABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
18https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/201...2015-08-27NaNNaNBodem_fysisch_textuurTextuur - granulometrisch - klassen bodemkarte...NaNE - Klei-Textuur pipetmethode Robinson-KöhnBodemkundige Dienst van BelgiëLABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
19https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/201...2015-09-08NaNNaNBodem_fysisch_textuurTextuurfracties (textuurmeting)NaNNaN%Textuur pipetmethode Robinson-KöhnBodemkundige Dienst van BelgiëLABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
20https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/201...2015-08-27NaNNaNBodem_fysisch_textuurTextuur - handmatig - klassen bodemkartering (...NaNA - Leem-Textuur manuele schatting (palpatie)Bodemkundige Dienst van BelgiëLABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
\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", "9 https://www.dov.vlaanderen.be/data/observatie/... \n", "10 https://www.dov.vlaanderen.be/data/observatie/... \n", "11 https://www.dov.vlaanderen.be/data/observatie/... \n", "12 https://www.dov.vlaanderen.be/data/observatie/... \n", "13 https://www.dov.vlaanderen.be/data/observatie/... \n", "14 https://www.dov.vlaanderen.be/data/observatie/... \n", "15 https://www.dov.vlaanderen.be/data/observatie/... \n", "16 https://www.dov.vlaanderen.be/data/observatie/... \n", "17 https://www.dov.vlaanderen.be/data/observatie/... \n", "18 https://www.dov.vlaanderen.be/data/observatie/... \n", "19 https://www.dov.vlaanderen.be/data/observatie/... \n", "20 https://www.dov.vlaanderen.be/data/observatie/... \n", "\n", " pkey_parent fenomeentijd \\\n", "0 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "1 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "2 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "3 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "4 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "5 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "6 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "7 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "8 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "9 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "10 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "11 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "12 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "13 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "14 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "15 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "16 https://www.dov.vlaanderen.be/data/monster/201... 2015-08-27 \n", "17 https://www.dov.vlaanderen.be/data/monster/201... 2015-08-27 \n", "18 https://www.dov.vlaanderen.be/data/monster/201... 2015-08-27 \n", "19 https://www.dov.vlaanderen.be/data/monster/201... 2015-09-08 \n", "20 https://www.dov.vlaanderen.be/data/monster/201... 2015-08-27 \n", "\n", " diepte_van_m diepte_tot_m parametergroep \\\n", "0 NaN NaN Bodem_fysisch_vocht \n", "1 NaN NaN Bodem_fysisch_vocht \n", "2 NaN NaN Bodem_fysisch_vocht \n", "3 NaN NaN Bodem_fysisch_vocht \n", "4 NaN NaN Bodem_fysisch_vocht \n", "5 NaN NaN Bodem_fysisch_vocht \n", "6 NaN NaN Bodem_fysisch_vocht \n", "7 NaN NaN Bodem_fysisch_vocht \n", "8 NaN NaN Bodem_fysisch_vocht \n", "9 NaN NaN Bodem_fysisch_vocht \n", "10 NaN NaN Bodem_fysisch_vocht \n", "11 NaN NaN Bodem_fysisch_vocht \n", "12 NaN NaN Bodem_fysisch_vocht \n", "13 NaN NaN Bodem_fysisch_vocht \n", "14 NaN NaN Bodem_fysisch_vocht \n", "15 NaN NaN Bodem_fysisch_vocht \n", "16 NaN NaN Bodem_fysisch_textuur \n", "17 NaN NaN Bodem_fysisch_textuur \n", "18 NaN NaN Bodem_fysisch_textuur \n", "19 NaN NaN Bodem_fysisch_textuur \n", "20 NaN NaN Bodem_fysisch_textuur \n", "\n", " parameter detectieconditie \\\n", "0 Ksat (ksat) NaN \n", "1 Ksat (ksat) NaN \n", "2 Ksat (ksat) NaN \n", "3 Ksat (ksat) NaN \n", "4 Ksat (ksat) NaN \n", "5 Ksat (ksat) NaN \n", "6 Ksat (ksat) NaN \n", "7 Ksat (ksat) NaN \n", "8 Ksat (ksat) NaN \n", "9 Ksat (ksat) NaN \n", "10 Ksat (ksat) NaN \n", "11 Ksat (ksat) NaN \n", "12 Ksat (ksat) NaN \n", "13 Ksat (ksat) NaN \n", "14 Ksat (ksat) NaN \n", "15 Ksat (ksat) NaN \n", "16 Textuurfracties (textuurmeting) NaN \n", "17 Textuurfracties (textuurmeting) NaN \n", "18 Textuur - granulometrisch - klassen bodemkarte... NaN \n", "19 Textuurfracties (textuurmeting) NaN \n", "20 Textuur - handmatig - klassen bodemkartering (... NaN \n", "\n", " resultaat eenheid methode \\\n", "0 0.00E00 m/s Ksat Enkele-ring-methode \n", "1 0.00E00 m/s Ksat Enkele-ring-methode \n", "2 0.00E00 m/s Ksat Open-end-methode \n", "3 0.00E00 m/s Ksat Enkele-ring-methode \n", "4 0.00E00 m/s Ksat_Soakaway_methode \n", "5 0.00E00 m/s Ksat Porchet-methode \n", "6 0.00E00 m/s Ksat_Soakaway_methode \n", "7 0.00E00 m/s Ksat Enkele-ring-methode \n", "8 0.00E00 m/s Ksat Open-end-methode \n", "9 0.00E00 m/s Ksat_Soakaway_methode \n", "10 0.00E00 m/s Ksat Porchet-methode \n", "11 0.00E00 m/s Ksat Open-end-methode \n", "12 0.00E00 m/s Ksat Porchet-methode \n", "13 0.00E00 m/s Ksat_Soakaway_methode \n", "14 0.00E00 m/s Ksat Open-end-methode \n", "15 0.00E00 m/s Ksat Porchet-methode \n", "16 NaN % Textuur pipetmethode Robinson-Köhn \n", "17 NaN % Textuur pipetmethode Robinson-Köhn \n", "18 E - Klei - Textuur pipetmethode Robinson-Köhn \n", "19 NaN % Textuur pipetmethode Robinson-Köhn \n", "20 A - Leem - Textuur manuele schatting (palpatie) \n", "\n", " uitvoerder herkomst \\\n", "0 Bodemkundige Dienst van België VELD \n", "1 Bodemkundige Dienst van België VELD \n", "2 Bodemkundige Dienst van België VELD \n", "3 Bodemkundige Dienst van België VELD \n", "4 Bodemkundige Dienst van België VELD \n", "5 Bodemkundige Dienst van België VELD \n", "6 Bodemkundige Dienst van België VELD \n", "7 Bodemkundige Dienst van België VELD \n", "8 Bodemkundige Dienst van België VELD \n", "9 Bodemkundige Dienst van België VELD \n", "10 Bodemkundige Dienst van België VELD \n", "11 Bodemkundige Dienst van België VELD \n", "12 Bodemkundige Dienst van België VELD \n", "13 Bodemkundige Dienst van België VELD \n", "14 Bodemkundige Dienst van België VELD \n", "15 Bodemkundige Dienst van België VELD \n", "16 NaN LABO \n", "17 Bodemkundige Dienst van België LABO \n", "18 Bodemkundige Dienst van België LABO \n", "19 Bodemkundige Dienst van België LABO \n", "20 Bodemkundige Dienst van België LABO \n", "\n", " pkey_bodemlocatie \n", "0 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "1 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "2 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "3 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "4 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "5 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "6 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "7 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "8 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "9 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "10 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "11 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "12 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "13 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "14 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "15 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "16 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "17 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "18 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "19 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "20 https://www.dov.vlaanderen.be/data/bodemlocati... " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def search_all_observations(df_bodemlocaties):\n", " df_observaties = pd.DataFrame()\n", "\n", " ## Direct observations\n", "\n", " # find observations linked directly to the soil location\n", " df_obs = observatie.search(\n", " query=Join(df_bodemlocaties, on='pkey_parent', using='pkey_bodemlocatie')\n", " )\n", "\n", " # in this case, the parent is the soil location\n", " df_obs['pkey_bodemlocatie'] = df_obs['pkey_parent']\n", "\n", " # add these observations to the dataframe with observations\n", " df_observaties = pd.concat([df_observaties, df_obs]).reset_index(drop=True)\n", "\n", "\n", " ## Observations linked to depth intervals\n", "\n", " # find all depth intervals linked to the soil location\n", " df_diepteintervallen = bodemdiepteinterval.search(\n", " query=Join(df_bodemlocaties, on='pkey_bodemlocatie'),\n", " return_fields=('pkey_diepteinterval','pkey_bodemlocatie',)\n", " )\n", "\n", " if len(df_diepteintervallen) > 0:\n", "\n", " # find all observations linked to the depth intervals\n", " df_obs = observatie.search(query=Join(df_diepteintervallen, on='pkey_parent', using='pkey_diepteinterval'))\n", "\n", " # merge the result with the depth intervals, to be able to link the observations with the soil location\n", " df_obs = df_obs.merge(\n", " df_diepteintervallen, left_on='pkey_parent', right_on='pkey_diepteinterval'\n", " ).drop(\n", " columns=('pkey_diepteinterval')\n", " )\n", "\n", " if len(df_obs) > 0:\n", " df_observaties = pd.concat([df_observaties, df_obs]).reset_index(drop=True)\n", "\n", "\n", " ## Observations linked to samples\n", "\n", " # find all samples linked to the soil location\n", " df_monsters = monster.search(\n", " query=FuzzyJoin(df_bodemlocaties, on='pkey_parents', using='pkey_bodemlocatie'),\n", " return_fields=('pkey_monster', 'pkey_parents')\n", " )\n", "\n", " # take the first soil location from the sample's parents as the linked soil location\n", " df_monsters['pkey_bodemlocatie'] = df_monsters['pkey_parents'].apply(lambda x: [i for i in x if 'bodemlocatie' in i][0])\n", "\n", " if len(df_monsters) > 0:\n", "\n", " # find all observations linked to samples\n", " df_obs = observatie.search(query=Join(df_monsters, on='pkey_parent', using='pkey_monster'))\n", "\n", " # merge the result with the samples, to be able to link them to their soil location\n", " df_obs = df_obs.merge(\n", " df_monsters, left_on='pkey_parent', right_on='pkey_monster'\n", " ).drop(\n", " columns=['pkey_parents', 'pkey_monster']\n", " )\n", "\n", " if len(df_obs) > 0:\n", " df_observaties = pd.concat([df_observaties, df_obs]).reset_index(drop=True)\n", "\n", "\n", " ## Observations linked to samples linked to depth intervals\n", "\n", " # find all samples linked to a depth interval\n", " df_monsters_diepteintervallen = monster.search(\n", " query=FuzzyJoin(df_diepteintervallen, on='pkey_parents', using='pkey_diepteinterval'),\n", " return_fields=('pkey_monster', 'pkey_parents')\n", " )\n", "\n", " # take the first depth interval from the sample's parents as the linked depth interval\n", " df_monsters_diepteintervallen['pkey_diepteinterval'] = df_monsters_diepteintervallen['pkey_parents'].apply(lambda x: [i for i in x if 'diepteinterval' in i][0])\n", "\n", " # merge the result with the depth interval to be able to link them to the soil location\n", " df_monsters_diepteintervallen = df_monsters_diepteintervallen.merge(\n", " df_diepteintervallen, on='pkey_diepteinterval'\n", " ).drop(\n", " columns=('pkey_diepteinterval')\n", " )\n", "\n", " if len(df_monsters_diepteintervallen) > 0:\n", "\n", " # find all observations linked to the samples\n", " df_obs = observatie.search(query=Join(df_monsters_diepteintervallen, on='pkey_parent', using='pkey_monster'))\n", "\n", " # merge the result with the previous result, to be able to link them to the soil location\n", " df_obs = df_obs.merge(\n", " df_monsters_diepteintervallen, left_on='pkey_parent', right_on='pkey_monster'\n", " ).drop(\n", " columns=['pkey_parents', 'pkey_monster']\n", " )\n", "\n", " if len(df_obs) > 0:\n", " df_observaties = pd.concat([df_observaties, df_obs]).reset_index(drop=True)\n", "\n", " return df_observaties\n", "\n", "search_all_observations(df_bodemlocaties)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Find all soil locations with a given soil classification" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get all soil locations with a given soil classification:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[000/001] .\n", "[000/010] ..........\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", "
pkey_bodemlocatiepkey_bodemsitenaamtypewaarnemingsdatumdoelxymv_mtawerfgoedbodemstreekinvoerdatumeducatieve_waarde
0https://www.dov.vlaanderen.be/data/bodemlocati...https://www.dov.vlaanderen.be/data/bodemsite/2...HAAST_16profielput2015-04-16archeologische landschappelijke profielputten248905.67200391.2932.88TrueKempen2015-04-16ZEER
1https://www.dov.vlaanderen.be/data/bodemlocati...NaNKART_PROF_071E/28profielput1960-09-30bodemprofielen en oppervlaktemonsters karterin...129724.00186794.007.00FalseZandstreek2019-10-11OK
2https://www.dov.vlaanderen.be/data/bodemlocati...NaNKART_PROF_071E/24profielput1960-09-29bodemprofielen en oppervlaktemonsters karterin...128409.00185764.005.00FalseZandleemstreek2019-10-11OK
3https://www.dov.vlaanderen.be/data/bodemlocati...NaNKART_PROF_071E/21profielput1960-09-28bodemprofielen en oppervlaktemonsters karterin...127729.00185179.005.00FalseZandleemstreek2019-10-11OK
4https://www.dov.vlaanderen.be/data/bodemlocati...NaNKART_OPP_053W/030boring1968-01-01bodemprofielen en oppervlaktemonsters karterin...73845.00195091.00-9999.00FalseKunstmatige gronden2019-10-12OK
\n", "
" ], "text/plain": [ " pkey_bodemlocatie \\\n", "0 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "1 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "2 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "3 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "4 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "\n", " pkey_bodemsite naam \\\n", "0 https://www.dov.vlaanderen.be/data/bodemsite/2... HAAST_16 \n", "1 NaN KART_PROF_071E/28 \n", "2 NaN KART_PROF_071E/24 \n", "3 NaN KART_PROF_071E/21 \n", "4 NaN KART_OPP_053W/030 \n", "\n", " type waarnemingsdatum \\\n", "0 profielput 2015-04-16 \n", "1 profielput 1960-09-30 \n", "2 profielput 1960-09-29 \n", "3 profielput 1960-09-28 \n", "4 boring 1968-01-01 \n", "\n", " doel x y \\\n", "0 archeologische landschappelijke profielputten 248905.67 200391.29 \n", "1 bodemprofielen en oppervlaktemonsters karterin... 129724.00 186794.00 \n", "2 bodemprofielen en oppervlaktemonsters karterin... 128409.00 185764.00 \n", "3 bodemprofielen en oppervlaktemonsters karterin... 127729.00 185179.00 \n", "4 bodemprofielen en oppervlaktemonsters karterin... 73845.00 195091.00 \n", "\n", " mv_mtaw erfgoed bodemstreek invoerdatum educatieve_waarde \n", "0 32.88 True Kempen 2015-04-16 ZEER \n", "1 7.00 False Zandstreek 2019-10-11 OK \n", "2 5.00 False Zandleemstreek 2019-10-11 OK \n", "3 5.00 False Zandleemstreek 2019-10-11 OK \n", "4 -9999.00 False Kunstmatige gronden 2019-10-12 OK " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from owslib.fes2 import PropertyIsEqualTo\n", "from pydov.util.query import Join\n", "\n", "from pydov.search.bodemclassificatie import BodemclassificatieSearch\n", "from pydov.search.bodemlocatie import BodemlocatieSearch\n", "\n", "bodemclassificatie = BodemclassificatieSearch()\n", "bl_Scbz = bodemclassificatie.search(query=PropertyIsEqualTo('bodemtype', 'Scbz'), return_fields=['pkey_bodemlocatie'])\n", "\n", "bodemlocatie = BodemlocatieSearch()\n", "bl = bodemlocatie.search(query=Join(bl_Scbz, 'pkey_bodemlocatie'))\n", "bl.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also get their observations, using the function we defined earlier:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[000/001] .\n", "[000/001] .\n", "[000/001] .\n", "[000/001] .\n", "[000/001] .\n", "[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", "
pkey_observatiepkey_parentfenomeentijddiepte_van_mdiepte_tot_mparametergroepparameterdetectieconditieresultaateenheidmethodeuitvoerderherkomstpkey_bodemlocatie
0https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemlocati...NaNNaNNaNBodemanalyse parametersvegetatie (vegetatie)NaNgrasNaNOnbekendNaNVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
1https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemlocati...1960-09-30NaNNaNBodem_terreinVegetatie (vegetatie)NaNAardappel (Solanum tuberosum)-NaNAppelmans, FransVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
2https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemlocati...1960-09-30NaNNaNBodem_fysisch_vochtDrainage Aardewerk - interne drainage (drainag...NaNDi2 - langzaamNaNTerreinobservatie Belgische bodemkarteringAppelmans, FransVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
3https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemlocati...1960-09-30NaNNaNBodem_fysisch_vochtDrainage Aardewerk - oppervlakkige drainage (d...NaNDr2 - langzaamNaNTerreinobservatie Belgische bodemkarteringAppelmans, FransVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
4https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemlocati...1960-09-30NaNNaNBodem_terreinGeologische aard - afzettingswijze laag 1 (geo...NaNst - stuif- / verstovenNaNTerreinobservatie Belgische bodemkarteringAppelmans, FransVELDhttps://www.dov.vlaanderen.be/data/bodemlocati...
\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", " pkey_parent fenomeentijd \\\n", "0 https://www.dov.vlaanderen.be/data/bodemlocati... NaN \n", "1 https://www.dov.vlaanderen.be/data/bodemlocati... 1960-09-30 \n", "2 https://www.dov.vlaanderen.be/data/bodemlocati... 1960-09-30 \n", "3 https://www.dov.vlaanderen.be/data/bodemlocati... 1960-09-30 \n", "4 https://www.dov.vlaanderen.be/data/bodemlocati... 1960-09-30 \n", "\n", " diepte_van_m diepte_tot_m parametergroep \\\n", "0 NaN NaN Bodemanalyse parameters \n", "1 NaN NaN Bodem_terrein \n", "2 NaN NaN Bodem_fysisch_vocht \n", "3 NaN NaN Bodem_fysisch_vocht \n", "4 NaN NaN Bodem_terrein \n", "\n", " parameter detectieconditie \\\n", "0 vegetatie (vegetatie) NaN \n", "1 Vegetatie (vegetatie) NaN \n", "2 Drainage Aardewerk - interne drainage (drainag... NaN \n", "3 Drainage Aardewerk - oppervlakkige drainage (d... NaN \n", "4 Geologische aard - afzettingswijze laag 1 (geo... NaN \n", "\n", " resultaat eenheid \\\n", "0 gras NaN \n", "1 Aardappel (Solanum tuberosum) - \n", "2 Di2 - langzaam NaN \n", "3 Dr2 - langzaam NaN \n", "4 st - stuif- / verstoven NaN \n", "\n", " methode uitvoerder herkomst \\\n", "0 Onbekend NaN VELD \n", "1 NaN Appelmans, Frans VELD \n", "2 Terreinobservatie Belgische bodemkartering Appelmans, Frans VELD \n", "3 Terreinobservatie Belgische bodemkartering Appelmans, Frans VELD \n", "4 Terreinobservatie Belgische bodemkartering Appelmans, Frans VELD \n", "\n", " pkey_bodemlocatie \n", "0 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "1 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "2 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "3 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "4 https://www.dov.vlaanderen.be/data/bodemlocati... " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "obs = search_all_observations(bl)\n", "obs.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get all depth intervals and observations from a soil location" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[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", "
pkey_diepteintervalpkey_bodemopbouwpkey_bodemlocatienrtypenaambovengrens1_cmbovengrens2_cmondergrens1_cmondergrens2_cmondergrens_bereiktgrensduidelijkheidgrensregelmatigheidbeschrijvingxymv_mtaw
0https://www.dov.vlaanderen.be/data/bodemdiepte...https://www.dov.vlaanderen.be/data/bodemopbouw...https://www.dov.vlaanderen.be/data/bodemlocati...1horizontNaN0.0NaN10.0NaNNVTNaNNaN-129586.0182459.030.7
1https://www.dov.vlaanderen.be/data/bodemdiepte...https://www.dov.vlaanderen.be/data/bodemopbouw...https://www.dov.vlaanderen.be/data/bodemlocati...2horizontNaN10.0NaN40.0NaNNVTNaNNaN-129586.0182459.030.7
2https://www.dov.vlaanderen.be/data/bodemdiepte...https://www.dov.vlaanderen.be/data/bodemopbouw...https://www.dov.vlaanderen.be/data/bodemlocati...3horizontNaN40.0NaN85.0NaNNVTNaNNaNhorizont gebruikt voor infiltratiemetingen129586.0182459.030.7
3https://www.dov.vlaanderen.be/data/bodemdiepte...https://www.dov.vlaanderen.be/data/bodemopbouw...https://www.dov.vlaanderen.be/data/bodemlocati...4horizontNaN85.0NaN130.0NaNNVTNaNNaN-129586.0182459.030.7
4https://www.dov.vlaanderen.be/data/bodemdiepte...https://www.dov.vlaanderen.be/data/bodemopbouw...https://www.dov.vlaanderen.be/data/bodemlocati...5horizontNaN130.0NaN200.0NaNNEENaNNaN-129586.0182459.030.7
\n", "
" ], "text/plain": [ " pkey_diepteinterval \\\n", "0 https://www.dov.vlaanderen.be/data/bodemdiepte... \n", "1 https://www.dov.vlaanderen.be/data/bodemdiepte... \n", "2 https://www.dov.vlaanderen.be/data/bodemdiepte... \n", "3 https://www.dov.vlaanderen.be/data/bodemdiepte... \n", "4 https://www.dov.vlaanderen.be/data/bodemdiepte... \n", "\n", " pkey_bodemopbouw \\\n", "0 https://www.dov.vlaanderen.be/data/bodemopbouw... \n", "1 https://www.dov.vlaanderen.be/data/bodemopbouw... \n", "2 https://www.dov.vlaanderen.be/data/bodemopbouw... \n", "3 https://www.dov.vlaanderen.be/data/bodemopbouw... \n", "4 https://www.dov.vlaanderen.be/data/bodemopbouw... \n", "\n", " pkey_bodemlocatie nr type naam \\\n", "0 https://www.dov.vlaanderen.be/data/bodemlocati... 1 horizont NaN \n", "1 https://www.dov.vlaanderen.be/data/bodemlocati... 2 horizont NaN \n", "2 https://www.dov.vlaanderen.be/data/bodemlocati... 3 horizont NaN \n", "3 https://www.dov.vlaanderen.be/data/bodemlocati... 4 horizont NaN \n", "4 https://www.dov.vlaanderen.be/data/bodemlocati... 5 horizont NaN \n", "\n", " bovengrens1_cm bovengrens2_cm ondergrens1_cm ondergrens2_cm \\\n", "0 0.0 NaN 10.0 NaN \n", "1 10.0 NaN 40.0 NaN \n", "2 40.0 NaN 85.0 NaN \n", "3 85.0 NaN 130.0 NaN \n", "4 130.0 NaN 200.0 NaN \n", "\n", " ondergrens_bereikt grensduidelijkheid grensregelmatigheid \\\n", "0 NVT NaN NaN \n", "1 NVT NaN NaN \n", "2 NVT NaN NaN \n", "3 NVT NaN NaN \n", "4 NEE NaN NaN \n", "\n", " beschrijving x y mv_mtaw \n", "0 - 129586.0 182459.0 30.7 \n", "1 - 129586.0 182459.0 30.7 \n", "2 horizont gebruikt voor infiltratiemetingen 129586.0 182459.0 30.7 \n", "3 - 129586.0 182459.0 30.7 \n", "4 - 129586.0 182459.0 30.7 " ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pydov.search.bodemlocatie import BodemlocatieSearch\n", "from pydov.search.bodemdiepteinterval import BodemdiepteintervalSearch\n", "from pydov.util.query import Join\n", "from owslib.fes2 import PropertyIsEqualTo\n", "\n", "bodemlocatie = BodemlocatieSearch()\n", "bodemdiepteinterval = BodemdiepteintervalSearch()\n", "\n", "bodemlocaties = bodemlocatie.search(query=PropertyIsEqualTo(propertyname='naam', literal='VMM_INF_52'),\n", " return_fields=('pkey_bodemlocatie',))\n", "\n", "bodemdiepteintervallen = bodemdiepteinterval.search(\n", " query=Join(bodemlocaties, on='pkey_bodemlocatie'))\n", "bodemdiepteintervallen" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And get their observations:" ] }, { "cell_type": "code", "execution_count": 23, "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", "
pkey_observatiepkey_parentfenomeentijddiepte_van_mdiepte_tot_mparametergroepparameterdetectieconditieresultaateenheidmethodeuitvoerderherkomst
0https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELD
1https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELD
2https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Open-end-methodeBodemkundige Dienst van BelgiëVELD
3https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat Enkele-ring-methodeBodemkundige Dienst van BelgiëVELD
4https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/bodemdiepte...2015-09-08NaNNaNBodem_fysisch_vochtKsat (ksat)NaN0.00E00m/sKsat_Soakaway_methodeBodemkundige Dienst van BelgiëVELD
\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", " pkey_parent fenomeentijd \\\n", "0 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "1 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "2 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "3 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "4 https://www.dov.vlaanderen.be/data/bodemdiepte... 2015-09-08 \n", "\n", " diepte_van_m diepte_tot_m parametergroep parameter \\\n", "0 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "1 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "2 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "3 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "4 NaN NaN Bodem_fysisch_vocht Ksat (ksat) \n", "\n", " detectieconditie resultaat eenheid methode \\\n", "0 NaN 0.00E00 m/s Ksat Enkele-ring-methode \n", "1 NaN 0.00E00 m/s Ksat Enkele-ring-methode \n", "2 NaN 0.00E00 m/s Ksat Open-end-methode \n", "3 NaN 0.00E00 m/s Ksat Enkele-ring-methode \n", "4 NaN 0.00E00 m/s Ksat_Soakaway_methode \n", "\n", " uitvoerder herkomst \n", "0 Bodemkundige Dienst van België VELD \n", "1 Bodemkundige Dienst van België VELD \n", "2 Bodemkundige Dienst van België VELD \n", "3 Bodemkundige Dienst van België VELD \n", "4 Bodemkundige Dienst van België VELD " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# direct observaties linked to diepteintervallen\n", "df_observaties = observatie.search(query=Join(bodemdiepteintervallen, on='pkey_parent', using='pkey_diepteinterval'))\n", "df_observaties.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Find all bodemlocaties where observations exist for organic carbon percentage in Geraardsbergen between 0 and 30 cm deep" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get boundaries of Geraardsbergen by using a WFS" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "from owslib.etree import etree\n", "from owslib.wfs import WebFeatureService\n", "from pydov.util.location import (\n", " GmlFilter,\n", " Within,\n", ")\n", "\n", "from owslib.fes import PropertyIsEqualTo\n", "\n", "gemeentegrenzen = WebFeatureService(\n", " 'https://geo.api.vlaanderen.be/VRBG/wfs',\n", " version='1.1.0')\n", "\n", "gemeente_filter = PropertyIsEqualTo(propertyname='NAAM', literal='Geraardsbergen')\n", "gemeente_poly = gemeentegrenzen.getfeature(\n", " typename='VRBG:Refgem',\n", " filter=etree.tostring(gemeente_filter.toXML()).decode(\"utf8\"),\n", " outputFormat='text/xml; subtype=gml/3.2').read()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get bodemobservaties in Geraardsbergen with the requested properties:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[000/309] ..................................................\n", "[050/309] ..................................................\n", "[100/309] ..................................................\n", "[150/309] ..................................................\n", "[200/309] ..................................................\n", "[250/309] ..................................................\n", "[300/309] .........\n", "[000/000] .[000/001] .\n", "[000/000] .[000/001] .\n", "[000/001] .\n", "[000/001] .\n", "[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", "
pkey_observatiepkey_parentfenomeentijddiepte_van_mdiepte_tot_mparametergroepparameterdetectieconditieresultaateenheidmethodeuitvoerderherkomstpkey_bodemlocatie
0https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2021-04-03NaNNaNBodem_chemischOrganische C - percentage (organische_c_perc)NaN2.11%TOC by CN analyser na verwijderen anorganische CUniversiteit Gent, Department of Green Chemist...LABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
1https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2021-04-03NaNNaNBodem_chemischOrganische C - percentage (organische_c_perc)NaN2.46%TOC by CN analyser na verwijderen anorganische CUniversiteit Gent, Department of Green Chemist...LABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
2https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2021-04-03NaNNaNBodem_chemischOrganische C - percentage (organische_c_perc)NaN3.65%TOC by CN analyser na verwijderen anorganische CUniversiteit Gent, Department of Green Chemist...LABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
3https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2021-04-03NaNNaNBodem_chemischOrganische C - percentage (organische_c_perc)NaN2.82%TOC by CN analyser na verwijderen anorganische CUniversiteit Gent, Department of Green Chemist...LABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
4https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2021-04-03NaNNaNBodem_chemischOrganische C - percentage (organische_c_perc)NaN0.75%TOC by CN analyser na verwijderen anorganische CUniversiteit Gent, Department of Green Chemist...LABOhttps://www.dov.vlaanderen.be/data/bodemlocati...
\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", " pkey_parent fenomeentijd \\\n", "0 https://www.dov.vlaanderen.be/data/monster/202... 2021-04-03 \n", "1 https://www.dov.vlaanderen.be/data/monster/202... 2021-04-03 \n", "2 https://www.dov.vlaanderen.be/data/monster/202... 2021-04-03 \n", "3 https://www.dov.vlaanderen.be/data/monster/202... 2021-04-03 \n", "4 https://www.dov.vlaanderen.be/data/monster/202... 2021-04-03 \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_chemisch \n", "3 NaN NaN Bodem_chemisch \n", "4 NaN NaN Bodem_chemisch \n", "\n", " parameter detectieconditie resultaat \\\n", "0 Organische C - percentage (organische_c_perc) NaN 2.11 \n", "1 Organische C - percentage (organische_c_perc) NaN 2.46 \n", "2 Organische C - percentage (organische_c_perc) NaN 3.65 \n", "3 Organische C - percentage (organische_c_perc) NaN 2.82 \n", "4 Organische C - percentage (organische_c_perc) NaN 0.75 \n", "\n", " eenheid methode \\\n", "0 % TOC by CN analyser na verwijderen anorganische C \n", "1 % TOC by CN analyser na verwijderen anorganische C \n", "2 % TOC by CN analyser na verwijderen anorganische C \n", "3 % TOC by CN analyser na verwijderen anorganische C \n", "4 % TOC by CN analyser na verwijderen anorganische C \n", "\n", " uitvoerder herkomst \\\n", "0 Universiteit Gent, Department of Green Chemist... LABO \n", "1 Universiteit Gent, Department of Green Chemist... LABO \n", "2 Universiteit Gent, Department of Green Chemist... LABO \n", "3 Universiteit Gent, Department of Green Chemist... LABO \n", "4 Universiteit Gent, Department of Green Chemist... LABO \n", "\n", " pkey_bodemlocatie \n", "0 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "1 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "2 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "3 https://www.dov.vlaanderen.be/data/bodemlocati... \n", "4 https://www.dov.vlaanderen.be/data/bodemlocati... " ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "from owslib.fes2 import PropertyIsEqualTo, PropertyIsGreaterThanOrEqualTo, PropertyIsLessThanOrEqualTo\n", "from owslib.fes2 import And\n", "\n", "from pydov.util.query import Join, FuzzyJoin\n", "\n", "from pydov.search.bodemlocatie import BodemlocatieSearch\n", "from pydov.search.bodemdiepteinterval import BodemdiepteintervalSearch\n", "from pydov.search.observatie import ObservatieSearch\n", "from pydov.search.monster import MonsterSearch\n", "\n", "bodemlocatie = BodemlocatieSearch()\n", "diepteinterval = BodemdiepteintervalSearch()\n", "observatie = ObservatieSearch()\n", "monster = MonsterSearch()\n", "\n", "df_observaties = pd.DataFrame()\n", "\n", "df_bodemlocaties = bodemlocatie.search(\n", " location=GmlFilter(gemeente_poly, Within)\n", ")\n", "\n", "parameter_name = 'Organische C - percentage (organische_c_perc)'\n", "\n", "## Direct observations\n", "\n", "# find observations linked directly to the soil location\n", "df_obs = observatie.search(\n", " query=And([\n", " Join(df_bodemlocaties, on='pkey_parent', using='pkey_bodemlocatie'),\n", " PropertyIsEqualTo('parameter', parameter_name),\n", " PropertyIsGreaterThanOrEqualTo('diepte_van_m', '0'),\n", " PropertyIsLessThanOrEqualTo('diepte_tot_m', '0.3')\n", " ])\n", ")\n", "\n", "# in this case, the parent is the soil location\n", "df_obs['pkey_bodemlocatie'] = df_obs['pkey_parent']\n", "\n", "# add these observations to the dataframe with observations\n", "df_observaties = pd.concat([df_observaties, df_obs]).reset_index(drop=True)\n", "\n", "## Observations linked to depth intervals\n", "\n", "df_diepteintervallen = diepteinterval.search(\n", " query=And([\n", " Join(df_bodemlocaties, on='pkey_bodemlocatie'),\n", " PropertyIsGreaterThanOrEqualTo('bovengrens1_cm', '0'),\n", " PropertyIsLessThanOrEqualTo('ondergrens1_cm', '30')\n", " ]),\n", " return_fields=('pkey_diepteinterval', 'pkey_bodemlocatie')\n", ")\n", "\n", "if len(df_diepteintervallen) > 0:\n", "\n", " # find all observations linked to the depth intervals\n", " df_obs = observatie.search(\n", " query=And([\n", " Join(df_diepteintervallen, on='pkey_parent', using='pkey_diepteinterval'),\n", " PropertyIsEqualTo('parameter', parameter_name)\n", " ])\n", " )\n", "\n", " # merge the result with the depth intervals, to be able to link the observations with the soil location\n", " df_obs = df_obs.merge(\n", " df_diepteintervallen, left_on='pkey_parent', right_on='pkey_diepteinterval'\n", " ).drop(\n", " columns=('pkey_diepteinterval')\n", " )\n", "\n", " if len(df_obs) > 0:\n", " df_observaties = pd.concat([df_observaties, df_obs]).reset_index(drop=True)\n", "\n", "\n", "## Observations linked to samples\n", "\n", "df_monsters = monster.search(\n", " query=And([\n", " FuzzyJoin(df_bodemlocaties, on='pkey_parents', using='pkey_bodemlocatie'),\n", " PropertyIsGreaterThanOrEqualTo(propertyname=\"diepte_van_m\", literal = '0'),\n", " PropertyIsLessThanOrEqualTo(propertyname=\"diepte_tot_m\", literal = '0.30')\n", " ]),\n", " return_fields=('pkey_monster', 'pkey_parents')\n", ")\n", "\n", "# take the first soil location from the sample's parents as the linked soil location\n", "df_monsters['pkey_bodemlocatie'] = df_monsters['pkey_parents'].apply(lambda x: [i for i in x if 'bodemlocatie' in i][0])\n", "\n", "if len(df_monsters) > 0:\n", "\n", " # find all observations linked to samples\n", " df_obs = observatie.search(\n", " query=And([\n", " Join(df_monsters, on='pkey_parent', using='pkey_monster'),\n", " PropertyIsEqualTo('parameter', parameter_name)\n", " ])\n", " )\n", "\n", " # merge the result with the samples, to be able to link them to their soil location\n", " df_obs = df_obs.merge(\n", " df_monsters, left_on='pkey_parent', right_on='pkey_monster'\n", " ).drop(\n", " columns=['pkey_parents', 'pkey_monster']\n", " )\n", "\n", " if len(df_obs) > 0:\n", " df_observaties = pd.concat([df_observaties, df_obs]).reset_index(drop=True)\n", "\n", "\n", "## Observations linked to samples linked to depth intervals\n", "\n", "# find all samples linked to a depth interval\n", "df_monsters_diepteintervallen = monster.search(\n", " query=FuzzyJoin(df_diepteintervallen, on='pkey_parents', using='pkey_diepteinterval'),\n", " return_fields=('pkey_monster', 'pkey_parents')\n", ")\n", "\n", "# take the first depth interval from the sample's parents as the linked depth interval\n", "df_monsters_diepteintervallen['pkey_diepteinterval'] = df_monsters_diepteintervallen['pkey_parents'].apply(lambda x: [i for i in x if 'diepteinterval' in i][0])\n", "\n", "# merge the result with the depth interval to be able to link them to the soil location\n", "df_monsters_diepteintervallen = df_monsters_diepteintervallen.merge(\n", " df_diepteintervallen, on='pkey_diepteinterval'\n", ").drop(\n", " columns=('pkey_diepteinterval')\n", ")\n", "\n", "\n", "if len(df_monsters_diepteintervallen) > 0:\n", "\n", " # find all observations linked to the samples\n", " df_obs = observatie.search(query=And([\n", " Join(df_monsters_diepteintervallen, on='pkey_parent', using='pkey_monster'),\n", " PropertyIsEqualTo('parameter', parameter_name)\n", " ]))\n", "\n", " # merge the result with the previous result, to be able to link them to the soil location\n", " df_obs = df_obs.merge(\n", " df_monsters_diepteintervallen, left_on='pkey_parent', right_on='pkey_monster'\n", " ).drop(\n", " columns=['pkey_parents', 'pkey_monster']\n", " )\n", "\n", " if len(df_obs) > 0:\n", " df_observaties = pd.concat([df_observaties, df_obs]).reset_index(drop=True)\n", "\n", "df_observaties.head()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have all observations with the requested properties. \n", "Next we need to link them with the bodemlocatie" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pkey_observatiepkey_parentfenomeentijddiepte_van_mdiepte_tot_mparametergroepparameterdetectieconditieresultaateenheid...typewaarnemingsdatumdoelxymv_mtawerfgoedbodemstreekinvoerdatumeducatieve_waarde
0https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2021-04-03NaNNaNBodem_chemischOrganische C - percentage (organische_c_perc)NaN2.11%...boring2021-04-03bodemchemisch en bodemfysisch onderzoek119024.66158973.2327.98FalseLeemstreek2023-09-29NaN
1https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2021-04-03NaNNaNBodem_chemischOrganische C - percentage (organische_c_perc)NaN2.46%...boring2021-04-03bodemchemisch en bodemfysisch onderzoek111423.09161667.2234.08FalseZandleemstreek2023-09-29NaN
2https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2021-04-03NaNNaNBodem_chemischOrganische C - percentage (organische_c_perc)NaN3.65%...boring2021-04-03bodemchemisch en bodemfysisch onderzoek111828.87161403.1944.25FalseKunstmatige gronden2023-09-29NaN
3https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2021-04-03NaNNaNBodem_chemischOrganische C - percentage (organische_c_perc)NaN2.82%...boring2021-04-03bodemchemisch en bodemfysisch onderzoek121724.11164764.1229.22FalseZandleemstreek2023-09-29NaN
4https://www.dov.vlaanderen.be/data/observatie/...https://www.dov.vlaanderen.be/data/monster/202...2021-04-03NaNNaNBodem_chemischOrganische C - percentage (organische_c_perc)NaN0.75%...boring2021-04-03bodemchemisch en bodemfysisch onderzoek114116.35162559.5039.43FalseNaN2023-09-29NaN
\n", "

5 rows × 26 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", " pkey_parent fenomeentijd \\\n", "0 https://www.dov.vlaanderen.be/data/monster/202... 2021-04-03 \n", "1 https://www.dov.vlaanderen.be/data/monster/202... 2021-04-03 \n", "2 https://www.dov.vlaanderen.be/data/monster/202... 2021-04-03 \n", "3 https://www.dov.vlaanderen.be/data/monster/202... 2021-04-03 \n", "4 https://www.dov.vlaanderen.be/data/monster/202... 2021-04-03 \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_chemisch \n", "3 NaN NaN Bodem_chemisch \n", "4 NaN NaN Bodem_chemisch \n", "\n", " parameter detectieconditie resultaat \\\n", "0 Organische C - percentage (organische_c_perc) NaN 2.11 \n", "1 Organische C - percentage (organische_c_perc) NaN 2.46 \n", "2 Organische C - percentage (organische_c_perc) NaN 3.65 \n", "3 Organische C - percentage (organische_c_perc) NaN 2.82 \n", "4 Organische C - percentage (organische_c_perc) NaN 0.75 \n", "\n", " eenheid ... type waarnemingsdatum \\\n", "0 % ... boring 2021-04-03 \n", "1 % ... boring 2021-04-03 \n", "2 % ... boring 2021-04-03 \n", "3 % ... boring 2021-04-03 \n", "4 % ... boring 2021-04-03 \n", "\n", " doel x y mv_mtaw \\\n", "0 bodemchemisch en bodemfysisch onderzoek 119024.66 158973.23 27.98 \n", "1 bodemchemisch en bodemfysisch onderzoek 111423.09 161667.22 34.08 \n", "2 bodemchemisch en bodemfysisch onderzoek 111828.87 161403.19 44.25 \n", "3 bodemchemisch en bodemfysisch onderzoek 121724.11 164764.12 29.22 \n", "4 bodemchemisch en bodemfysisch onderzoek 114116.35 162559.50 39.43 \n", "\n", " erfgoed bodemstreek invoerdatum educatieve_waarde \n", "0 False Leemstreek 2023-09-29 NaN \n", "1 False Zandleemstreek 2023-09-29 NaN \n", "2 False Kunstmatige gronden 2023-09-29 NaN \n", "3 False Zandleemstreek 2023-09-29 NaN \n", "4 False NaN 2023-09-29 NaN \n", "\n", "[5 rows x 26 columns]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "# Merge the bodemlocatie information together with the observation information\n", "merged = pd.merge(df_observaties, df_bodemlocaties, on=\"pkey_bodemlocatie\", how='left')\n", "merged.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To export the results to CSV, you can use for example: \n", "```python\n", "merged.to_csv(\"test.csv\")\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can plot also the results on a map\n", "This can take some time!" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import folium\n", "from folium.plugins import MarkerCluster\n", "from pyproj import Transformer\n", "\n", "# convert the coordinates to lat/lon for folium\n", "def convert_latlon(x1, y1):\n", " transformer = Transformer.from_crs(\"epsg:31370\", \"epsg:4326\", always_xy=True)\n", " x2,y2 = transformer.transform(x1, y1)\n", " return x2, y2\n", "\n", "#convert coordinates to wgs84\n", "merged['lon'], merged['lat'] = zip(*map(convert_latlon, merged['x'], merged['y']))\n", "\n", "# Get only location and value\n", "loclist = merged[['lat', 'lon']].values.tolist()\n", "\n", "# initialize the Folium map on the centre of the selected locations, play with the zoom until ok\n", "fmap = folium.Map(location=[merged['lat'].mean(), merged['lon'].mean()], zoom_start=10)\n", "marker_cluster = MarkerCluster().add_to(fmap)\n", "for loc in range(0, len(loclist)):\n", " popup = 'Bodemlocatie: ' + merged['pkey_bodemlocatie'][loc] \n", " popup = popup + '
Observatie: ' + merged['pkey_observatie'][loc]\n", " popup = popup + '
Value: ' + merged['resultaat'][loc] + merged['eenheid'][loc]\n", " folium.Marker(loclist[loc], popup=popup).add_to(marker_cluster)\n", "fmap" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Filter Aardewerk soil locations\n", "Since we know that Aardewerk soil locations make use of a specific suffix, a query could be built filtering these out.\n", "\n", "Since we only need to match a partial string in the name, we will build a query using the *PropertyIsLike* operator to find all Aardewerk bodemlocaties.\n", "We use *max_features=10* to limit the results to 10." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[000/001] .\n", "[000/010] ..........\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", "
pkey_bodemlocatiepkey_bodemsitenaamtypewaarnemingsdatumdoelxymv_mtawerfgoedbodemstreekinvoerdatumeducatieve_waarde
0https://www.dov.vlaanderen.be/data/bodemlocati...NaNKART_PROF_001E/02profielput1954-05-31bodemprofielen en oppervlaktemonsters karterin...158367.0240397.012.5FalseKempen2019-10-11OK
1https://www.dov.vlaanderen.be/data/bodemlocati...NaNKART_PROF_007W/40profielput1955-07-07bodemprofielen en oppervlaktemonsters karterin...167292.0229988.019.0FalseKempen2019-10-11OK
2https://www.dov.vlaanderen.be/data/bodemlocati...NaNKART_PROF_037E/38profielput1952-02-01bodemprofielen en oppervlaktemonsters karterin...65969.0207819.021.0FalseZandstreek2019-10-11OK
3https://www.dov.vlaanderen.be/data/bodemlocati...NaNKART_PROF_022E/68profielput1951-03-02bodemprofielen en oppervlaktemonsters karterin...65480.0213545.02.0FalseOudlandpolders2019-10-11OK
4https://www.dov.vlaanderen.be/data/bodemlocati...NaNKART_PROF_099E/01profielput1957-10-14bodemprofielen en oppervlaktemonsters karterin...109819.0167483.081.5FalseZandleemstreek2019-10-11OK
\n", "
" ], "text/plain": [ " pkey_bodemlocatie pkey_bodemsite \\\n", "0 https://www.dov.vlaanderen.be/data/bodemlocati... NaN \n", "1 https://www.dov.vlaanderen.be/data/bodemlocati... NaN \n", "2 https://www.dov.vlaanderen.be/data/bodemlocati... NaN \n", "3 https://www.dov.vlaanderen.be/data/bodemlocati... NaN \n", "4 https://www.dov.vlaanderen.be/data/bodemlocati... NaN \n", "\n", " naam type waarnemingsdatum \\\n", "0 KART_PROF_001E/02 profielput 1954-05-31 \n", "1 KART_PROF_007W/40 profielput 1955-07-07 \n", "2 KART_PROF_037E/38 profielput 1952-02-01 \n", "3 KART_PROF_022E/68 profielput 1951-03-02 \n", "4 KART_PROF_099E/01 profielput 1957-10-14 \n", "\n", " doel x y \\\n", "0 bodemprofielen en oppervlaktemonsters karterin... 158367.0 240397.0 \n", "1 bodemprofielen en oppervlaktemonsters karterin... 167292.0 229988.0 \n", "2 bodemprofielen en oppervlaktemonsters karterin... 65969.0 207819.0 \n", "3 bodemprofielen en oppervlaktemonsters karterin... 65480.0 213545.0 \n", "4 bodemprofielen en oppervlaktemonsters karterin... 109819.0 167483.0 \n", "\n", " mv_mtaw erfgoed bodemstreek invoerdatum educatieve_waarde \n", "0 12.5 False Kempen 2019-10-11 OK \n", "1 19.0 False Kempen 2019-10-11 OK \n", "2 21.0 False Zandstreek 2019-10-11 OK \n", "3 2.0 False Oudlandpolders 2019-10-11 OK \n", "4 81.5 False Zandleemstreek 2019-10-11 OK " ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from owslib.fes2 import PropertyIsLike\n", "\n", "query = PropertyIsLike(propertyname='naam',\n", " literal='KART_PROF_%', wildCard='%')\n", "df = bodemlocatie.search(query=query, max_features=10)\n", "\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As seen in the soil data example, we can use the *pkey_bodemlocatie* as a permanent link to the information of these bodemlocaties:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "https://www.dov.vlaanderen.be/data/bodemlocatie/1958-000829\n", "https://www.dov.vlaanderen.be/data/bodemlocatie/1955-000823\n", "https://www.dov.vlaanderen.be/data/bodemlocatie/1954-000828\n", "https://www.dov.vlaanderen.be/data/bodemlocatie/1952-000824\n", "https://www.dov.vlaanderen.be/data/bodemlocatie/1952-000830\n", "https://www.dov.vlaanderen.be/data/bodemlocatie/1955-000827\n", "https://www.dov.vlaanderen.be/data/bodemlocatie/1951-000825\n", "https://www.dov.vlaanderen.be/data/bodemlocatie/1957-000826\n", "https://www.dov.vlaanderen.be/data/bodemlocatie/1949-000831\n", "https://www.dov.vlaanderen.be/data/bodemlocatie/1954-000822\n" ] } ], "source": [ "for pkey_bodemlocatie in set(df.pkey_bodemlocatie):\n", " print(pkey_bodemlocatie)" ] } ], "metadata": { "kernelspec": { "display_name": ".venv (3.13.5)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.5" } }, "nbformat": 4, "nbformat_minor": 4 }