Example of DOV search methods for interpretations (informele hydrogeologische stratigrafie)
Use cases explained below
Get ‘informele hydrogeologische stratigrafie’ in a bounding box
Get ‘informele hydrogeologische stratigrafie’ with specific properties
Get ‘informele hydrogeologische stratigrafie’ in a bounding box based on specific properties
Select ‘informele hydrogeologische stratigrafie’ in a municipality and return date
Get ‘informele hydrogeologische stratigrafie’ based on fields not available in the standard output dataframe
Get ‘informele hydrogeologische stratigrafie’ data, returning fields not available in the standard output dataframe
[1]:
%matplotlib inline
import inspect, sys
[2]:
# check pydov path
import pydov
Get information about the datatype ‘Informele hydrogeologische stratigrafie’
[3]:
from pydov.search.interpretaties import InformeleHydrogeologischeStratigrafieSearch
itp = InformeleHydrogeologischeStratigrafieSearch()
A description is provided for the ‘Informele stratigrafie’ datatype:
[4]:
itp.get_description()
[4]:
'Een informele hydrogeologische stratigrafie van een boring geeft, op basis van de (gecodeerde) lithologie, een indeling weer naar de al dan niet watervoerende eigenschappen van een bepaald beschreven diepte-interval. \r\nHet verschil met de hydrogeologische stratigrafie is dat voor de informele hydrogeologische stratigrafie geen algemene standaard gebruikt wordt. Bij de hydrogeologische stratigrafie wordt de Hydrogeologische Codering van de Ondergrond van Vlaanderen (HCOV). Deze kan beschouwd worden als de officiele hydrogeologische codering voor het Vlaams Gewest.'
The different fields that are available for objects of the ‘Informele hydrogeologische stratigrafie’ datatype can be requested with the get_fields() method:
[5]:
fields = itp.get_fields()
# print available fields
for f in fields.values():
print(f['name'])
pkey_interpretatie
Type_proef
Proefnummer
pkey_boring
x
y
start_interpretatie_mtaw
diepte_tot_m
gemeente
Auteurs
Datum
Opdrachten
betrouwbaarheid_interpretatie
Geldig_van
Geldig_tot
eerste_invoer
geom
diepte_laag_van
diepte_laag_tot
beschrijving
You can get more information of a field by requesting it from the fields dictionary:
name: name of the field
definition: definition of this field
cost: currently this is either 1 or 10, depending on the datasource of the field. It is an indication of the expected time it will take to retrieve this field in the output dataframe.
notnull: whether the field is mandatory or not
type: datatype of the values of this field
Alternatively, you can list all the fields and their details by inspecting the get_fields() output or the search instance itself in a notebook:
[6]:
itp
[6]:
Een informele hydrogeologische stratigrafie van een boring geeft, op basis van de (gecodeerde) lithologie, een indeling weer naar de al dan niet watervoerende eigenschappen van een bepaald beschreven diepte-interval. Het verschil met de hydrogeologische stratigrafie is dat voor de informele hydrogeologische stratigrafie geen algemene standaard gebruikt wordt. Bij de hydrogeologische stratigrafie wordt de Hydrogeologische Codering van de Ondergrond van Vlaanderen (HCOV). Deze kan beschouwd worden als de officiele hydrogeologische codering voor het Vlaams Gewest.
pkey_interpretatie - URL die verwijst naar de gegevens van deze informele hydrogeologische stratigrafie op de website. Voeg '.xml' toe om een XML voorstelling van deze gegevens te verkrijgen.
- type: string
- notnull: False
- query: True
- cost: 1
- multivalue: False
Type_proef - Het type van de proef waarvan de informele hydrogeologische stratigrafie een interpretatie is. Bij een informele hydrogeologische stratigrafie zal dit altijd 'Boring' zijn.
- type: string
- notnull: False
- query: True
- cost: 1
- multivalue: False
- codelist:
Boring - Boring - De informele hydrogeologische stratigrafie is een interpretatie van een boring.
Proefnummer - Het proefnummer van de boring waarvan de informele hydrogeologische stratigrafie een interpretatie is.
- type: string
- notnull: False
- query: True
- cost: 1
- multivalue: False
pkey_boring - URL die verwijst naar de gegevens van de boring op de website. Voeg '.xml' toe om een XML voorstelling van deze gegevens te verkrijgen.
- type: string
- notnull: False
- query: True
- cost: 1
- multivalue: False
x - De x-coördinaat van de boring in het Lambert72 coördinaatsysteem (in meter, EPSG:31370).
- type: float
- notnull: False
- query: True
- cost: 1
- multivalue: False
y - De y-coördinaat van de boring in het Lambert72 coördinaatsysteem (in meter, EPSG:31370).
- type: float
- notnull: False
- query: True
- cost: 1
- multivalue: False
start_interpretatie_mtaw - De hoogte van het aanvangspeil van de boring in het TAW stelsel (in meter).
- type: float
- notnull: False
- query: True
- cost: 1
- multivalue: False
diepte_tot_m - De maximumdiepte van de informele hydrogeologische stratigrafie in meter. Dit is de 'tot' van de diepste geïnterpreteerde laag.
- type: float
- notnull: False
- query: True
- cost: 1
- multivalue: False
gemeente - De gemeente waarin de boring van deze interpretatie gelegen is.
- type: string
- notnull: False
- query: True
- cost: 1
- multivalue: False
Auteurs - De auteur of auteurs van de informele hydrogeologische stratigrafie.
- type: string
- notnull: False
- query: True
- cost: 1
- multivalue: False
Datum - De datum waarop de informele hydrogeologische stratigrafie werd beschreven.
- type: date
- notnull: False
- query: True
- cost: 1
- multivalue: False
Opdrachten - De opdracht(en) waaraan de informele hydrogeologische stratigrafie gekoppeld is.
- type: string
- notnull: False
- query: True
- cost: 1
- multivalue: False
betrouwbaarheid_interpretatie - De betrouwbaarheid van het geheel van de informele hydrogeologische stratigrafie (goed, twijfelachtig of onbekend). Deze wordt toegekend door een DOV-medewerker verantwoordelijk voor de ingave.
- type: string
- notnull: False
- query: True
- cost: 1
- multivalue: False
Geldig_van - Het tijdstip vanaf wanneer de informele hydrogeologische stratigrafie geldig is.
- type: date
- notnull: False
- query: True
- cost: 1
- multivalue: False
Geldig_tot - Het tijdstip tot wanneer de informele hydrogeologische stratigrafie geldig is.
- type: date
- notnull: False
- query: True
- cost: 1
- multivalue: False
eerste_invoer - Het tijdstip waarop deze interpretatie voor het eerst in DOV ingevoerd werd.
- type: datetime
- notnull: True
- query: True
- cost: 1
- multivalue: False
geom - None
- type: geometry
- notnull: False
- query: False
- cost: 1
- multivalue: False
diepte_laag_van - Diepte van de bovenkant van de laag informele hydrostratigrafie in meter.
- type: float
- notnull: False
- query: False
- cost: 10
- multivalue: False
diepte_laag_tot - Diepte van de onderkant van de laag informele hydrostratigrafie in meter.
- type: float
- notnull: False
- query: False
- cost: 10
- multivalue: False
beschrijving - Benoeming van de eenheid van de laag informele hydrostratigrafie in vrije tekst (onbeperkt in lengte).
- type: string
- notnull: False
- query: False
- cost: 10
- multivalue: False
Example use cases
Get ‘informele hydrogeologische stratigrafie’ in a bounding box
Get data for all the ‘informele hydrogeologisch stratigrafie’ interpretations that are geographically located within the bounds of the specified box.
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.
[7]:
from pydov.util.location import Within, Box
df = itp.search(location=Within(Box(100000, 100000, 200000, 200000, epsg=31370)))
df.head()
[000/001] .
[000/001] .
[7]:
| pkey_interpretatie | pkey_boring | betrouwbaarheid_interpretatie | x | y | start_interpretatie_mtaw | diepte_laag_van | diepte_laag_tot | beschrijving | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 0.0 | 2.5 | QUARTAIR |
| 1 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 2.5 | 13.6 | FORMATIE VAN MALDEGEM |
| 2 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 13.6 | 25.5 | FORMATIE VAN MALDEGEM (Lid van Wemmel) |
| 3 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 25.5 | 33.2 | FORMATIE VAN LEDE |
| 4 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 33.2 | 67.3 | FORMATIE VAN BRUSSEL |
The dataframe contains one ‘informele stratigrafie’ interpretation where three layers (‘laag’) were identified. The available data are flattened to represent unique attributes per row of the dataframe.
Using the pkey_interpretatie field one can request the details of this interpretation in a webbrowser:
[8]:
for pkey_interpretatie in set(df.pkey_interpretatie):
print(pkey_interpretatie)
https://www.dov.vlaanderen.be/data/interpretatie/1981-217464
Get ‘informele hydrogeologische stratigrafie’ with specific properties
Next to querying interpretations based on their geographic location within a bounding box, we can also search for interpretations matching a specific set of properties. For this we can build a query using a combination of the ‘InformeleHydrogeologischeStratigrafie’ fields and operators provided by the WFS protocol.
A list of possible operators can be found below:
[9]:
[i for i,j in inspect.getmembers(sys.modules['owslib.fes2'], inspect.isclass) if 'Property' in i]
[9]:
['PropertyIsBetween',
'PropertyIsEqualTo',
'PropertyIsGreaterThan',
'PropertyIsGreaterThanOrEqualTo',
'PropertyIsLessThan',
'PropertyIsLessThanOrEqualTo',
'PropertyIsLike',
'PropertyIsNotEqualTo',
'PropertyIsNull',
'SortProperty']
In this example we build a query using the PropertyIsEqualTo operator to find all interpretations that are within the community (gemeente) of ‘Herstappe’:
[10]:
from owslib.fes2 import PropertyIsEqualTo
query = PropertyIsEqualTo(propertyname='gemeente',
literal='Rotselaar')
df = itp.search(query=query)
df.head()
[000/001] .
[000/001] c
[10]:
| pkey_interpretatie | pkey_boring | betrouwbaarheid_interpretatie | x | y | start_interpretatie_mtaw | diepte_laag_van | diepte_laag_tot | beschrijving | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 0.0 | 2.5 | QUARTAIR |
| 1 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 2.5 | 13.6 | FORMATIE VAN MALDEGEM |
| 2 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 13.6 | 25.5 | FORMATIE VAN MALDEGEM (Lid van Wemmel) |
| 3 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 25.5 | 33.2 | FORMATIE VAN LEDE |
| 4 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 33.2 | 67.3 | FORMATIE VAN BRUSSEL |
Once again we can use the pkey_interpretatie as a permanent link to the information of these interpretations:
[11]:
for pkey_interpretatie in set(df.pkey_interpretatie):
print(pkey_interpretatie)
https://www.dov.vlaanderen.be/data/interpretatie/1981-217464
Get ‘informele hydrogeologische stratigrafie’ in a bounding box based on specific properties
We can combine a query on attributes with a query on geographic location to get the interpretations within a bounding box that have specific properties.
The following example requests the interpretations of boreholes only, within the given bounding box.
(Note that the datatype of the literal parameter should be a string, regardless of the datatype of this field in the output dataframe.)
[12]:
from owslib.fes2 import PropertyIsEqualTo
query = PropertyIsEqualTo(
propertyname='Type_proef',
literal='Boring')
df = itp.search(
location=Within(Box(100000, 100000, 200000, 200000, epsg=31370)),
query=query
)
df.head()
[000/001] .
[000/001] c
[12]:
| pkey_interpretatie | pkey_boring | betrouwbaarheid_interpretatie | x | y | start_interpretatie_mtaw | diepte_laag_van | diepte_laag_tot | beschrijving | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 0.0 | 2.5 | QUARTAIR |
| 1 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 2.5 | 13.6 | FORMATIE VAN MALDEGEM |
| 2 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 13.6 | 25.5 | FORMATIE VAN MALDEGEM (Lid van Wemmel) |
| 3 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 25.5 | 33.2 | FORMATIE VAN LEDE |
| 4 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | goed | 172148.5 | 182587.5 | 10.94 | 33.2 | 67.3 | FORMATIE VAN BRUSSEL |
We can look at one of the interpretations in a webbrowser using its pkey_interpretatie:
[13]:
for pkey_interpretatie in set(df.pkey_interpretatie):
print(pkey_interpretatie)
https://www.dov.vlaanderen.be/data/interpretatie/1981-217464
Select ‘informele hydrogeologische stratigrafie’ in a municipality and return date
We can limit the columns in the output dataframe by specifying the return_fields parameter in our search.
In this example we query all the ‘informele stratigrafie’ interpretations in the community of Rotselaar and return their date:
[14]:
query = PropertyIsEqualTo(propertyname='gemeente',
literal='Rotselaar')
df = itp.search(query=query,
return_fields=('Datum',))
df.head()
[000/001] .
[14]:
| Datum | |
|---|---|
| 0 | 1981-01-01 |
[15]:
df.describe()
[15]:
| Datum | |
|---|---|
| count | 1 |
| unique | 1 |
| top | 1981-01-01 |
| freq | 1 |
Get ‘informele hydrogeologische stratigrafie’ based on fields not available in the standard output dataframe
To keep the output dataframe size acceptable, not all available WFS fields are included in the standard output. However, one can use this information to select interpretations as illustrated below.
For example, make a selection of the interpretations in the municipality of Rotselaar, before 1/1/1990:
[16]:
from owslib.fes2 import And, PropertyIsEqualTo, PropertyIsLessThan
query = And([PropertyIsEqualTo(propertyname='gemeente',
literal='Rotselaar'),
PropertyIsLessThan(propertyname='Datum',
literal='1990-01-01')]
)
df = itp.search(query=query,
return_fields=('pkey_interpretatie', 'Datum'))
df.head()
[000/001] .
[16]:
| pkey_interpretatie | Datum | |
|---|---|---|
| 0 | https://www.dov.vlaanderen.be/data/interpretat... | 1981-01-01 |
Get ‘informele hydrogeologische stratigrafie’ data, returning fields not available in the standard output dataframe
As denoted in the previous example, not all available fields are available in the default output frame to keep its size limited. However, you can request any available field by including it in the return_fields parameter of the search:
[17]:
query = PropertyIsEqualTo(
propertyname='gemeente',
literal='Rotselaar')
df = itp.search(query=query,
return_fields=('pkey_interpretatie', 'pkey_boring',
'x', 'y', 'start_interpretatie_mtaw', 'gemeente', 'Auteurs', 'Proefnummer'))
df.head()
[000/001] .
[17]:
| pkey_interpretatie | pkey_boring | x | y | start_interpretatie_mtaw | gemeente | Auteurs | Proefnummer | |
|---|---|---|---|---|---|---|---|---|
| 0 | https://www.dov.vlaanderen.be/data/interpretat... | https://www.dov.vlaanderen.be/data/boring/1981... | 172148.5 | 182587.5 | 10.94 | Rotselaar | Onbekend - Vlaamse Maatschappij voor Watervoor... | B/3005-016 |
Visualize results
Using Folium, we can display the results of our search on a map.
[18]:
# import the necessary modules (not included in the requirements of pydov!)
import folium
from folium.plugins import MarkerCluster
from pyproj import Transformer
[19]:
# convert the coordinates to lat/lon for folium
def convert_latlon(x1, y1):
transformer = Transformer.from_crs("epsg:31370", "epsg:4326", always_xy=True)
x2,y2 = transformer.transform(x1, y1)
return x2, y2
df['lon'], df['lat'] = zip(*map(convert_latlon, df['x'], df['y']))
# convert to list
loclist = df[['lat', 'lon']].values.tolist()
[20]:
# initialize the Folium map on the centre of the selected locations, play with the zoom until ok
fmap = folium.Map(location=[df['lat'].mean(), df['lon'].mean()], zoom_start=12)
marker_cluster = MarkerCluster().add_to(fmap)
for loc in range(0, len(loclist)):
folium.Marker(loclist[loc], popup=df['Proefnummer'][loc]).add_to(marker_cluster)
fmap
[20]: