Borehole Research (BHR)

The BRO database contains several types of borehole research:

  • Geotechnical Borehole Research

  • Pedological Borehole Research

  • Geological Borehole Research

Geotechnical Borehole Research (BHR-GT)

Geotechnical Borehole Research helps determine the bearing capacity of the subsurface (onshore and offshore). It may include drill-sample descriptions and laboratory analyses.

import os
import matplotlib.pyplot as plt
import brodata
download_dir = "download"
if not os.path.isdir(download_dir):
    os.makedirs(download_dir)
to_file = os.path.join(download_dir, "BHR000000353924.xml")
bhr_gt = brodata.bhr.GeotechnicalBoreholeResearch.from_bro_id(
    "BHR000000353924", to_file=to_file
)
bhr_gt
GeotechnicalBoreholeResearch(broId='BHR000000353924', x=118550.903, y=439975.134)

There are 2 descriptive borehole logs in this Geotechnical Borehole Research. Let’s look at the data from the first.

bhr_gt.descriptiveBoreholeLog[0]["layer"]
upperBoundary upperBoundaryDetermination lowerBoundary lowerBoundaryDetermination anthropogenic geotechnicalSoilName tertiaryConstituent colour dispersedInhomogeneity organicMatterContentClass sandMedianClass sizeFraction angularity sphericity
0 0.0 afgeleid 1.0 afgeleid nee sterkGrindigZand [puin] lichtbruin [geen] nietOrganisch fijn zand subhoekig bol
1 1.0 afgeleid 1.2 afgeleid nee sterkGrindigZand [puin] lichtbruin [geen] nietOrganisch fijn zand subhoekig bol
2 1.2 afgeleid 2.2 afgeleid nee klei [puin] standaardGrijs [geen] nietOrganisch NaN NaN NaN NaN
3 2.2 afgeleid 3.2 afgeleid nee klei [puin] standaardGrijs [geen] nietOrganisch NaN NaN NaN NaN
4 3.2 afgeleid 3.5 afgeleid nee klei [puin] donkergrijs [geen] nietOrganisch NaN NaN NaN NaN
5 3.5 afgeleid 4.0 afgeleid nee klei [puin] standaardGrijs [geen] nietOrganisch NaN NaN NaN NaN
6 4.0 afgeleid 5.0 afgeleid nee veen [geen] donkerbruin [geen] NaN NaN NaN NaN NaN
7 5.0 afgeleid 5.2 afgeleid nee veen [geen] donkerbruin [geen] NaN NaN NaN NaN NaN
8 5.2 afgeleid 6.2 afgeleid nee zwakZandigeKlei [geen] standaardGrijs [geen] zwakOrganisch NaN NaN NaN NaN
9 6.2 afgeleid 6.5 afgeleid nee zwakZandigeKlei [geen] standaardGrijs [geen] zwakOrganisch NaN NaN NaN NaN
10 6.5 afgeleid 7.2 afgeleid nee zwakZandigeKlei [geen] standaardGrijs [geen] zwakOrganisch NaN NaN NaN NaN
11 7.2 afgeleid 8.2 afgeleid nee zand [geen] standaardGrijs [geen] nietOrganisch fijn zand subhoekig bol
12 8.2 afgeleid 9.2 afgeleid nee zand [geen] standaardGrijs [geen] nietOrganisch fijn zand subhoekig bol
13 9.2 afgeleid 10.0 afgeleid nee zand [geen] standaardGrijs [geen] nietOrganisch fijn zand subhoekig bol

Plot the descriptive borehole logs. Some soil types are not yet supported, and mixed soil types (e.g. kleiigVeen) may not render as intended.

f, ax = plt.subplots()
xticks = []
xticklabels = []
for x, bl in enumerate(bhr_gt.descriptiveBoreholeLog):
    brodata.plot.bro_lithology(bl["layer"], x=x, z=bhr_gt.offset, ax=ax)
    xticks.append(x)
    xticklabels.append(bl["descriptionQuality"])
ax.set_xlim(-0.5, x + 0.5)
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels)
ax.set_ylabel("z (m t.o.v. NAP)");
No color defined for hoofdgrondsoort kleiigVeen
No color defined for hoofdgrondsoort siltigZand
../_images/6b270228b5657bcea317f3f594ffa1ba7830b1ae9d708d461c7a33288b61ccab.png

The function brodata.plot.bro_lithology_advanced supports mixed soil types.

f, ax = plt.subplots()
xticks = []
xticklabels = []
for x, bl in enumerate(bhr_gt.descriptiveBoreholeLog):
    df = bl["layer"]
    brodata.plot.bro_lithology_advanced(df, x=x, width=0.2, z=bhr_gt.offset, ax=ax)
    xticks.append(x)
    xticklabels.append(bl["descriptionQuality"])
ax.set_xlim(-0.5, x + 0.5)
ax.set_ylim(bhr_gt.offset - bhr_gt.boredInterval['endDepth'].max(), bhr_gt.offset)
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels)
ax.set_ylabel("z (m t.o.v. NAP)");
../_images/c3b88b116952b3db58cbf33afd8eeb9142c1745c6f8123147aac695bd24913de.png

We can also call the BRO-service to generate the figure for us. This sends a request to the BRO-webservice, and returns a graphical representation of the drilling.

brodata.bhr.bhrgt_graph(to_file, language="en")
../_images/0417d4ba12df5836a806b8ce25c003d1b9b2c08ab5cf53dfcd522f0ee5df898d.svg

Show the rest of the contents of the Geotechnical Borehole Research.

bhr_gt.boredInterval
beginDepth endDepth boringTechnique boredDiameter
0 0.0 10.0 mechanischPulsen 133
bhr_gt.completedInterval
beginDepth endDepth permanentCasingPresent backfillMaterial backfillMaterialCertified
0 0.0 10.0 nee kleiZwelklasse2 nee
bhr_gt.sampledInterval
beginDepth endDepth preTreatment samplingMethod samplingQuality orientatedSampled samplerType sampleContainerDiameter sampleContainerLength cuttingShoeInsideDiameter stockingUsed rightAngledCuttingShoe taperAngle cuttingShoeOutsideDiameter lubricationFluidUsed coreCatcherPresent pistonPresent
0 0.0 10.0 geen opDiepteLosroeren klasseE NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 1.2 1.6 geen opDiepteUitsteken klasseB nee steekbus 67 0.44 67 nee nee 30 69 nee nee ja
2 2.2 2.6 geen opDiepteUitsteken klasseB nee steekbus 67 0.44 67 nee nee 30 69 nee nee ja
3 3.2 3.6 geen opDiepteUitsteken klasseB nee steekbus 67 0.44 67 nee nee 30 69 nee nee ja
4 4.2 4.6 geen opDiepteUitsteken klasseB nee steekbus 67 0.44 67 nee nee 30 69 nee nee ja
5 5.2 5.6 geen opDiepteUitsteken klasseB nee steekbus 67 0.44 67 nee nee 30 69 nee nee ja
6 6.2 6.6 geen opDiepteUitsteken klasseB nee steekbus 67 0.44 67 nee nee 30 69 nee nee ja
7 7.2 7.6 geen opDiepteUitsteken klasseB nee steekbus 67 0.44 67 nee nee 30 69 nee nee ja
8 8.2 8.6 geen opDiepteUitsteken klasseB nee steekbus 67 0.44 67 nee nee 30 69 nee nee ja
9 9.2 9.6 geen opDiepteUitsteken klasseB nee steekbus 67 0.44 67 nee nee 30 69 nee nee ja
bhr_gt.to_dict()
bhr_data = bhr_gt.to_dict()
bhr_data.pop("boredInterval")
bhr_data.pop("completedInterval")
bhr_data.pop("descriptiveBoreholeLog")
bhr_data.pop("sampledInterval")
bhr_data
{'boreholeCompleted': 'ja',
 'boringEndDate': Timestamp('2021-12-07 00:00:00'),
 'boringProcedure': 'SIKB2101vanafV3.3',
 'boringStartDate': Timestamp('2021-12-07 00:00:00'),
 'broId': 'BHR000000353924',
 'coordinateTransformation': 'RDNAPTRANS2018',
 'corrected': 'nee',
 'date': '2022-03-25',
 'deliveredLocation': <POINT (118550.903 439975.134)>,
 'deliveryAccountableParty': '30276831',
 'deliveryContext': 'publiekeTaak',
 'deregistered': 'nee',
 'descriptionProcedure': 'ISO14688d1v2019c2020',
 'descriptionReportDate': Timestamp('2022-01-17 00:00:00'),
 'discipline': 'geotechniek',
 'eventName': 'volledigGerapporteerd',
 'finalDepthBoring': 10.0,
 'finalDepthSampling': 10.0,
 'groundwaterLevel': 1.2,
 'horizontalPositioningDate': Timestamp('2021-10-18 00:00:00'),
 'horizontalPositioningMethod': 'RTKGPS0tot2cm',
 'id': 'BRO_0003',
 'localVerticalReferencePoint': 'maaiveld',
 'objectRegistrationTime': '2022-04-08T11:22:45+02:00',
 'offset': 1.008,
 'preparation': 'geen',
 'qualityRegime': 'IMBRO',
 'registrationCompletionTime': '2022-04-08T11:22:45+02:00',
 'registrationStatus': 'voltooid',
 'reregistered': 'nee',
 'researchReportDate': Timestamp('2022-03-25 00:00:00'),
 'rockReached': 'nee',
 'samplingProcedure': 'ISO22475d1v2019',
 'siteCharacteristicDetermined': 'ja',
 'soilUse': 'geenBodemgebruik',
 'standardizedLocation': <POINT (4.857 51.947)>,
 'stopCriterion': 'einddoel',
 'subsurfaceContaminated': 'nee',
 'surveyProcedure': 'EN1997d2v2007',
 'surveyPurpose': 'waterkering',
 'trajectoryExcavated': 'nee',
 'underReview': 'nee',
 'verticalDatum': 'NAP',
 'verticalPositioningDate': Timestamp('2021-10-18 00:00:00'),
 'verticalPositioningMethod': 'RTKGPS0tot4cm'}

Pedological Borehole Research (BHR-P)

Pedological Borehole Research is important for understanding the composition and structure of the soil. It describes the soil structure of the shallowest part of the soil and subsurface based on a borehole. This research may consist of a soil science borehole description and a borehole analysis.

bhr_p = brodata.bhr.PedologicalBoreholeResearch.from_bro_id("BHR000000175723")
df = bhr_p.boreholeSampleDescription
df
upperBoundary lowerBoundary anthropogenic numberOfLayerComponents horizonCode standardSoilName soilTypeLoamBased pedologicalSoilName organicMatterClass carbonateClass ripingClass containsGravel containsShellMatter organicMatterContent clayContent peatType
0 0.0 0.4 nee 1 Aa sterkSiltigeKlei nee lichteKlei matigHumeus kalkloos geheelGerijpt nee nee 4.0 33.0 NaN
1 0.4 1.0 nee 1 Cg matigSiltigeKlei nee matigZwareKlei zwakHumeus kalkloos geheelGerijpt nee nee NaN 40.0 NaN
2 1.0 1.3 nee 1 Cu mineraalarmVeen nee veen NaN kalkloos NaN nee nee 60.0 NaN bosveen
3 1.3 1.7 nee 1 Cr mineraalarmVeen nee veen NaN kalkloos NaN nee nee 60.0 NaN bosveen
f, ax = plt.subplots()
z = bhr_p.offset
brodata.plot.bro_lithology_advanced(df, z=z, ax=ax, soil_name_column="standardSoilName")
ax.set_ylim(bhr_p.offset - bhr_p.endDepth, bhr_p.offset)
ax.set_ylabel("z (m t.o.v. NAP)");
../_images/2ebc135e0a6d0ea3e6b41663c9a19685b01cf69a9d66f16d2ec8ddf4e5872441.png

Geological Borehole Research (BHR-G)

Geological Borehole Research almost always focus on mapping or modeling. They consist of a geological core description and a geological core analysis.

bhr_g = brodata.bhr.GeologicalBoreholeResearch.from_bro_id("BHR000000429481")
df = bhr_g.descriptiveBoreholeLog[0]['layer']
df
upperBoundary upperBoundaryDetermination lowerBoundary lowerBoundaryDetermination anthropogenic rooted soilNameNEN5104 gravelContentClass organicMatterContentClassNEN5104 carbonateContentClass colour sandMedianClass sandSorting
0 0.0 waargenomen 1.2 onbekend onbekend onbekend zwakSiltigZand onbekend onbekend onbekend grijs matigFijnNEN5104 onbekend
1 1.2 onbekend 1.5 onbekend onbekend ja zwakZandigeKlei onbekend onbekend onbekend donkergrijs NaN NaN
2 1.5 onbekend 1.9 onbekend onbekend onbekend grondNietGespecificeerd onbekend onbekend onbekend onbekend NaN NaN
3 1.9 onbekend 2.8 onbekend onbekend onbekend zwakSiltigeKlei onbekend onbekend onbekend grijsBruin NaN NaN
4 2.8 onbekend 3.0 onbekend onbekend onbekend zwakSiltigeKlei onbekend onbekend onbekend grijs NaN NaN
5 3.0 onbekend 3.4 onbekend onbekend onbekend grondNietGespecificeerd onbekend onbekend onbekend onbekend NaN NaN
6 3.4 onbekend 4.5 onbekend onbekend onbekend zwakSiltigeKlei onbekend onbekend onbekend grijs NaN NaN
7 4.5 onbekend 4.9 onbekend onbekend onbekend grondNietGespecificeerd onbekend onbekend onbekend onbekend NaN NaN
8 4.9 onbekend 5.5 onbekend onbekend onbekend matigSiltigeKlei onbekend onbekend onbekend grijs NaN NaN
9 5.5 onbekend 5.9 onbekend onbekend onbekend grondNietGespecificeerd onbekend onbekend onbekend onbekend NaN NaN
10 5.9 onbekend 6.0 voorbepaald onbekend onbekend matigSiltigeKlei onbekend onbekend onbekend grijs NaN NaN
f, ax = plt.subplots()
z = bhr_g.offset
brodata.plot.bro_lithology_advanced(df, soil_name_column="soilNameNEN5104", ax=ax, z=z)
ax.set_ylim(z - df["lowerBoundary"].max(), z)
ax.set_ylabel("z (m t.o.v. NAP)");
../_images/ed8c28288076e7fce8753f3200b2dd3894c11fc4bc5bf88401955ac9097bf9f4.png