Example of DOV search methods for lithologische beschrijvingen

Binder

Use cases:

  • Select records in a bbox

  • Select records in a bbox with selected properties

  • Select records in a municipality

  • Get records using info from wfs fields, not available in the standard output dataframe

[1]:
%matplotlib inline
import os, sys
import inspect
[2]:
import pydov

Get information about code base

[3]:
from pydov.search.interpretaties import LithologischeBeschrijvingenSearch
ip_litho = LithologischeBeschrijvingenSearch()

# information about the HydrogeologischeStratigrafie type (In Dutch):
ip_litho.get_description()
[3]:
'Wanneer een boring wordt uitgevoerd wordt er een beschrijving gemaakt van het materiaal dat men aangeboord heeft. Men beschrijft de textuur, het soort materiaal, de kleur, mineralen, fossielen, ... per diepte-interval. Dit kan zowel op het veld gebeuren als achteraf indien de stalen bewaard worden. Deze beschrijvingen kunnen gedaan worden door bijvoorbeeld de boormeester of door een geoloog. Meestal wordt de boring beschreven per diepte-interval waarover men hetzelfde materiaal herkent. De mate van detail van de beschrijving kan afhankelijk zijn van het doeleinde waarvoor men de boring uitvoert of wie de beschrijving doet: is het om een geologische kaart te maken, dienen er monsters genomen te worden voor laboratoriumanalyses, ... In DOV worden de beschrijvingen van ontsluitingen boven het aardoppervlak, aangeduid als boringen met diepte 0 m, beschreven van 0 m tot 0 m.'
[4]:
# information about the available fields for a HydrogeologischeStratigrafie object
fields = ip_litho.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
Score_categorie
Geschiktheid_boormethode
eerste_invoer
geom
diepte_laag_van
diepte_laag_tot
beschrijving
[5]:
# print information for a certain field
fields['beschrijving']
[5]:

beschrijving - Lithologische beschrijving van de laag in vrije tekst (onbeperkt in lengte)

  • type: string
  • notnull: False
  • query: False
  • cost: 10
  • multivalue: False

The cost is an arbitrary attribute to indicate if the information is retrieved from a wfs query (cost = 1), or from an xml (cost = 10)

[6]:
# if an attribute can have several values, these are listed under 'values', e.g. for 'Type_proef':
fields['Type_proef']
[6]:

Type_proef - Het type van de proef waarvan de lithologische beschrijving een interpretatie is. Bij een lithogische beschrijving zal dit altijd 'Boring' zijn.

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

    Boring - Boring - De lithologische beschrijving is een interpretatie van een boring.

Alternatively, you can list all the fields and their details by inspecting the get_fields() output or the search instance itself in a notebook:

[7]:
ip_litho
[7]:
pydov.search.interpretaties.LithologischeBeschrijvingenSearch

Wanneer een boring wordt uitgevoerd wordt er een beschrijving gemaakt van het materiaal dat men aangeboord heeft. Men beschrijft de textuur, het soort materiaal, de kleur, mineralen, fossielen, ... per diepte-interval. Dit kan zowel op het veld gebeuren als achteraf indien de stalen bewaard worden. Deze beschrijvingen kunnen gedaan worden door bijvoorbeeld de boormeester of door een geoloog. Meestal wordt de boring beschreven per diepte-interval waarover men hetzelfde materiaal herkent. De mate van detail van de beschrijving kan afhankelijk zijn van het doeleinde waarvoor men de boring uitvoert of wie de beschrijving doet: is het om een geologische kaart te maken, dienen er monsters genomen te worden voor laboratoriumanalyses, ... In DOV worden de beschrijvingen van ontsluitingen boven het aardoppervlak, aangeduid als boringen met diepte 0 m, beschreven van 0 m tot 0 m.

pkey_interpretatie - URL die verwijst naar de gegevens van deze lithologische beschrijvingen 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 lithologische beschrijving een interpretatie is. Bij een lithogische beschrijving zal dit altijd 'Boring' zijn.

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

    Boring - Boring - De lithologische beschrijving is een interpretatie van een boring.

Proefnummer - Het proefnummer van de boring waarvan de lithologische beschrijving 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 lithologische beschrijving 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 lithologische beschrijving.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

Datum - De datum waarop de lithologische beschrijving werd beschreven.

  • type: date
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

Opdrachten - De opdracht(en) waaraan de lithologische beschrijving gekoppeld is.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

betrouwbaarheid_interpretatie - De betrouwbaarheid van het geheel van de lithologische beschrijvingen (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 lithologische beschrijving geldig is.

  • type: date
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

Geldig_tot - Het tijdstip tot wanneer de lithologische beschrijving geldig is.

  • type: date
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

Score_categorie - De score categorie is een kwalitatieve categorie op basis van een kwantitatieve score, tussen 0 en 10, van de kwaliteit van (gecodeerde) lithologische beschrijvingen. Slecht: < 4,7/10, matig: tussen 4,7/10 en 6,6/10, goed: tussen 6,6/10 en 8,5/10, zeer goed: > 8,5/10. De score is samengesteld op basis van de beschrijving van basiselementen (lithologie, kleur, korrelgrootte), voldoende detail (secundaire kenmerken zoals glauconiet, schelpen, …) en voldoende kleine intervallen. Voor goed hergebruik van de beschrijvingen is minstens categorie ‘matig’ nodig.

  • type: string
  • notnull: False
  • query: True
  • cost: 1
  • multivalue: False

Geschiktheid_boormethode - De geschiktheid van de boormethode beschrijft of de gebruikte boormethode van de boring waarop de beschrijving gebaseerd is eerder geschikt (hoog; bv. kernboring) of eerder niet geschikt (laag; bv. spoelboring) is voor het opmaken van een gedetailleerde (gecodeerde) lithologische beschrijving. Boormethodes die ongeroerde stalen opleveren zijn doorgaans geschikter dan methodes die geroerde stalen opleveren. Voor beschrijvingen met een hoge geschiktheid van de boormethode mag ook een betere score categorie verwacht worden dan van beschrijvingen met een lage geschiktheid van de boormethode.

  • type: string
  • 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 lithologische beschrijving in meter.

  • type: float
  • notnull: False
  • query: False
  • cost: 10
  • multivalue: False

diepte_laag_tot - Diepte van de onderkant van de laag lithologische beschrijving in meter.

  • type: float
  • notnull: False
  • query: False
  • cost: 10
  • multivalue: False

beschrijving - Lithologische beschrijving van de laag in vrije tekst (onbeperkt in lengte)

  • type: string
  • notnull: False
  • query: False
  • cost: 10
  • multivalue: False

Try-out of use cases

Select interpretations in a bbox

[8]:
from pydov.util.location import Within, Box

# Get all lithological descriptions in a bounding box (llx, lly, ulx, uly)
# the pkey_boring link is not available below, but is in the df
df = ip_litho.search(location=Within(Box(152145, 204930, 153150, 206935, epsg=31370)))
df = df[df.beschrijving.notnull()]
df.head()
[000/001] .
[000/024] ........................
[8]:
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/1895... goed 153007.0 206660.0 15.0 0.0 2.4 Sable quartzeux jaune,légèrement argileux,avec...
1 https://www.dov.vlaanderen.be/data/interpretat... https://www.dov.vlaanderen.be/data/boring/1895... goed 153007.0 206660.0 15.0 2.4 2.9 Sable quartzeux verdâtre argileux,très glaucon...
2 https://www.dov.vlaanderen.be/data/interpretat... https://www.dov.vlaanderen.be/data/boring/1895... goed 152195.0 205501.0 11.0 0.0 2.0 Sable limoneux
3 https://www.dov.vlaanderen.be/data/interpretat... https://www.dov.vlaanderen.be/data/boring/1895... goed 152195.0 205501.0 11.0 2.0 2.7 Sable verdâtre,fossilifère
4 https://www.dov.vlaanderen.be/data/interpretat... https://www.dov.vlaanderen.be/data/boring/1879... goed 152564.0 205750.0 11.0 0.0 0.5 Terre végétale argileuse

Select interpretations in a bbox with selected properties

[9]:
# list available query methods
methods = [i for i,j in inspect.getmembers(sys.modules['owslib.fes2'],
                                           inspect.isclass)
           if 'Property' in i]
methods
[9]:
['PropertyIsBetween',
 'PropertyIsEqualTo',
 'PropertyIsGreaterThan',
 'PropertyIsGreaterThanOrEqualTo',
 'PropertyIsLessThan',
 'PropertyIsLessThanOrEqualTo',
 'PropertyIsLike',
 'PropertyIsNotEqualTo',
 'PropertyIsNull',
 'SortProperty']
[10]:
from owslib.fes2 import PropertyIsGreaterThanOrEqualTo

The property feature methodes listed above are available from the owslib module. These were not adapted for use in pydov.

[11]:
# Get deep boreholes in a bounding box
from owslib.fes2 import PropertyIsEqualTo
# the propertyname can be any of the fields of the hydrogeological interpretations object that belong to the wfs source
# the literal is always a string, no matter what its definition is in the boring object (string, float...)
query = PropertyIsGreaterThanOrEqualTo(
        propertyname='betrouwbaarheid_interpretatie', literal='goed')
df = ip_litho.search(location=Within(Box(153145, 206930, 153150, 206935, epsg=31370)),
                        query=query
                       )
df.head()
[000/001] .
[000/001] c
[11]:
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/1974... goed 153147.0 206931.0 14.12 0.0 0.5 bruinachtige zandhoudende leem, geen kalk
1 https://www.dov.vlaanderen.be/data/interpretat... https://www.dov.vlaanderen.be/data/boring/1974... goed 153147.0 206931.0 14.12 0.5 1.0 bleekgrijze leem
2 https://www.dov.vlaanderen.be/data/interpretat... https://www.dov.vlaanderen.be/data/boring/1974... goed 153147.0 206931.0 14.12 1.0 1.5 bruingroen leemhoudend fijn zand
3 https://www.dov.vlaanderen.be/data/interpretat... https://www.dov.vlaanderen.be/data/boring/1974... goed 153147.0 206931.0 14.12 1.5 2.0 bleekgrijs leemhoudend fijn zand
4 https://www.dov.vlaanderen.be/data/interpretat... https://www.dov.vlaanderen.be/data/boring/1974... goed 153147.0 206931.0 14.12 2.0 2.5 idem, met veenresten en kalkhoudend

Select interpretations in a municipality

[12]:
query = PropertyIsEqualTo(propertyname='gemeente',
                          literal='Aartselaar')
df = ip_litho.search(query=query)
df.head()
[000/001] .
[000/061] ..................................................
[050/061] ...........
[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/1870... goed 151724.0 203063.0 16.0 0.0 0.0 Terre végétale.
1 https://www.dov.vlaanderen.be/data/interpretat... https://www.dov.vlaanderen.be/data/boring/1870... goed 151724.0 203063.0 16.0 0.0 1.0 Sable jaune, mouvant à la base
2 https://www.dov.vlaanderen.be/data/interpretat... https://www.dov.vlaanderen.be/data/boring/1870... goed 151724.0 203063.0 16.0 1.0 5.0 Sable jaune, mouvant à la base glauconifére, p...
3 https://www.dov.vlaanderen.be/data/interpretat... https://www.dov.vlaanderen.be/data/boring/1870... goed 151724.0 203063.0 16.0 5.0 10.2 Argile verte compacte, avec pyrites
4 https://www.dov.vlaanderen.be/data/interpretat... https://www.dov.vlaanderen.be/data/boring/1870... goed 151724.0 203063.0 16.0 10.2 21.0 Un separia.

Visualize results

Using Folium, we can display the results of our search on a map.

[13]:
# import the necessary modules (not included in the requirements of pydov!)
import folium
from folium.plugins import MarkerCluster
from pyproj import Transformer
[14]:
# 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()
[15]:
# 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)):
    # limit marker size for folium (:10)
    folium.Marker(loclist[loc], popup=df['beschrijving'][loc][:10]).add_to(marker_cluster)
fmap
[15]:
Make this Notebook Trusted to load map: File -> Trust Notebook