Groundwater monitoring network (GMN)

In this example we download the metadata for the wells in the Groundwater Monitoring Network of Oudewater (BRO ID: GMN000000003996).

import brodata

First, request the GroundwaterMonitoringNetwork object.

gmn = brodata.gmn.GroundwaterMonitoringNetwork.from_bro_id("GMN000000003996")
gmn
GroundwaterMonitoringNetwork(broId='GMN000000003996')

The measuringPoint attribute contains the BRO IDs of all Groundwater Monitoring Wells in this network.

gmn.measuringPoint
measuringPointCode date
broId tubeNumber
GMW000000018258 1 PB001 2024-11-27
GMW000000018257 1 PB002 2024-11-27
GMW000000018255 1 PB003 2024-11-27
GMW000000018256 1 PB004 2024-11-27
GMW000000018254 1 PB005 2024-11-27
GMW000000018251 1 PB006 2024-11-27
GMW000000018259 1 PB007 2024-11-27
GMW000000018267 1 PB008 2024-11-27
GMW000000018268 1 PB009 2024-11-27
GMW000000018266 1 PB010 2024-11-27
GMW000000018265 1 PB012 2024-11-27
GMW000000018261 1 PB013 2024-11-27
GMW000000018263 1 PB014 2024-11-27
GMW000000018252 1 PB015 2024-11-27
GMW000000018260 1 PB016 2024-11-27
GMW000000018262 1 PB017 2024-11-27
GMW000000018269 1 PB018 2024-11-27
GMW000000018250 1 PB019 2024-11-27
GMW000000018253 1 PB020 2024-11-27
GMW000000018270 1 PB021 2024-11-27
GMW000000018264 1 PB011 2024-11-27
GMW000000088931 1 PB122 2024-11-27
GMW000000088930 1 PB123 2024-11-27

The gmn-object also contains some metadata, for example the name of the network and the monitoring-purpose.

gmn_data = gmn.to_dict()
gmn_data.pop("measuringPoint")
gmn_data
{'broId': 'GMN000000003996',
 'corrected': 'nee',
 'deliveryAccountableParty': '53878388',
 'deliveryContext': 'waterwetGrondwaterzorgplicht',
 'deregistered': 'nee',
 'groundwaterAspect': 'kwantiteit',
 'id': 'BRO_0047',
 'monitoringPurpose': 'beheersingStedelijkGebied',
 'name': 'Oudewater grondwatermeetnet',
 'objectRegistrationTime': '2025-06-24T13:55:15+02:00',
 'qualityRegime': 'IMBRO',
 'registrationStatus': 'geregistreerd',
 'reregistered': 'nee',
 'startDateMonitoring': Timestamp('2024-11-27 00:00:00'),
 'underReview': 'nee'}

To retrieve detailed information for the wells, download them with brodata.gmw.get_data_for_bro_ids (this may take time). The method returns a dictionary keyed by BRO ID with GroundwaterMonitoringWell objects as values.

gmw_ids = gmn.measuringPoint.index.levels[0].unique()
gmws = brodata.gmw.get_data_for_bro_ids(gmw_ids)
gmws
{'GMW000000018250': GroundwaterMonitoringWell(broId='GMW000000018250', x=119571.0, y=448141.0),
 'GMW000000018251': GroundwaterMonitoringWell(broId='GMW000000018251', x=118904.0, y=448887.0),
 'GMW000000018252': GroundwaterMonitoringWell(broId='GMW000000018252', x=119796.0, y=448056.0),
 'GMW000000018253': GroundwaterMonitoringWell(broId='GMW000000018253', x=119147.0, y=448392.0),
 'GMW000000018254': GroundwaterMonitoringWell(broId='GMW000000018254', x=118990.0, y=448675.0),
 'GMW000000018255': GroundwaterMonitoringWell(broId='GMW000000018255', x=115275.0, y=447735.0),
 'GMW000000018256': GroundwaterMonitoringWell(broId='GMW000000018256', x=115312.0, y=447619.0),
 'GMW000000018257': GroundwaterMonitoringWell(broId='GMW000000018257', x=118322.0, y=450875.0),
 'GMW000000018258': GroundwaterMonitoringWell(broId='GMW000000018258', x=118330.0, y=451082.0),
 'GMW000000018259': GroundwaterMonitoringWell(broId='GMW000000018259', x=119186.0, y=448757.0),
 'GMW000000018260': GroundwaterMonitoringWell(broId='GMW000000018260', x=119959.0, y=448591.0),
 'GMW000000018261': GroundwaterMonitoringWell(broId='GMW000000018261', x=119759.0, y=448371.0),
 'GMW000000018262': GroundwaterMonitoringWell(broId='GMW000000018262', x=120252.0, y=448319.0),
 'GMW000000018263': GroundwaterMonitoringWell(broId='GMW000000018263', x=119705.0, y=448221.0),
 'GMW000000018264': GroundwaterMonitoringWell(broId='GMW000000018264', x=119490.0, y=448831.0),
 'GMW000000018265': GroundwaterMonitoringWell(broId='GMW000000018265', x=119427.0, y=448486.0),
 'GMW000000018266': GroundwaterMonitoringWell(broId='GMW000000018266', x=119334.0, y=449131.0),
 'GMW000000018267': GroundwaterMonitoringWell(broId='GMW000000018267', x=119077.0, y=449770.0),
 'GMW000000018268': GroundwaterMonitoringWell(broId='GMW000000018268', x=119511.0, y=449298.0),
 'GMW000000018269': GroundwaterMonitoringWell(broId='GMW000000018269', x=121832.0, y=448942.0),
 'GMW000000018270': GroundwaterMonitoringWell(broId='GMW000000018270', x=118973.0, y=448285.0),
 'GMW000000088930': GroundwaterMonitoringWell(broId='GMW000000088930', x=119916.34, y=448955.51),
 'GMW000000088931': GroundwaterMonitoringWell(broId='GMW000000088931', x=119204.69, y=448400.88)}

We want to plot them on a map, so we transform this dictionary to a GeoDataFrame using the method brodata.bro.objects_to_gdf.

gdf = brodata.bro.objects_to_gdf(gmws)
gdf
constructionStandard coordinateTransformation corrected deliveredLocation deliveryAccountableParty deliveryContext deregistered groundLevelPosition groundLevelPositioningMethod groundLevelStable ... removed reregistered standardizedLocation underReview verticalDatum wellCode wellConstructionDate wellHeadProtector wellStability withPrehistory
broId
GMW000000018250 NEN5104 RDNAPTRANS2018 ja POINT (119571 448141) 53878388 publiekeTaak nee 2.050 RTKGPS0tot4cm nee ... nee nee POINT (4.871048467 52.020488547) nee NAP GMW38B116712 2019-06-03 potWaterdicht instabiel nee
GMW000000018251 NEN5104 RDNAPTRANS2018 ja POINT (118904 448887) 53878388 publiekeTaak nee -1.010 RTKGPS0tot4cm nee ... nee nee POINT (4.861252917 52.027150517) nee NAP GMW38B116713 2019-06-03 potWaterdicht instabiel nee
GMW000000018252 NEN5104 RDNAPTRANS2018 ja POINT (119796 448056) 53878388 publiekeTaak nee 0.350 RTKGPS0tot4cm nee ... nee nee POINT (4.874335017 52.019738893) nee NAP GMW38B116714 2019-06-03 potWaterdicht instabiel nee
GMW000000018253 NEN5104 RDNAPTRANS2018 ja POINT (119147 448392) 53878388 publiekeTaak nee 0.240 RTKGPS0tot4cm nee ... nee nee POINT (4.864845337 52.022717277) nee NAP GMW38B116715 2019-06-03 potWaterdicht instabiel nee
GMW000000018254 NEN5104 RDNAPTRANS2018 ja POINT (118990 448675) 53878388 publiekeTaak nee -0.870 RTKGPS0tot4cm nee ... nee nee POINT (4.862528267 52.025250679) nee NAP GMW38B116716 2019-06-03 potWaterdicht instabiel nee
GMW000000018255 NEN5104 RDNAPTRANS2018 ja POINT (115275 447735) 53878388 publiekeTaak nee -0.950 RTKGPS0tot4cm nee ... nee nee POINT (4.808511444 52.016548633) nee NAP GMW38B116717 2019-06-03 potWaterdicht instabiel nee
GMW000000018256 NEN5104 RDNAPTRANS2018 ja POINT (115312 447619) 53878388 publiekeTaak nee -1.050 RTKGPS0tot4cm nee ... nee nee POINT (4.809063857 52.015508693) nee NAP GMW38B116718 2019-06-03 potWaterdicht instabiel nee
GMW000000018257 NEN5104 RDNAPTRANS2018 ja POINT (118322 450875) 53878388 publiekeTaak nee -1.710 RTKGPS0tot4cm nee ... nee nee POINT (4.852559775 52.044980153) nee NAP GMW31D116719 2019-06-03 potWaterdicht instabiel nee
GMW000000018258 NEN5104 RDNAPTRANS2018 ja POINT (118330 451082) 53878388 publiekeTaak nee -1.030 RTKGPS0tot4cm nee ... nee nee POINT (4.852654162 52.046841157) nee NAP GMW31D116720 2019-06-03 potWaterdicht instabiel nee
GMW000000018259 NEN5104 RDNAPTRANS2018 ja POINT (119186 448757) 53878388 publiekeTaak nee -0.900 RTKGPS0tot4cm nee ... nee nee POINT (4.86537532 52.026000367) nee NAP GMW38B116721 2019-06-03 potWaterdicht instabiel nee
GMW000000018260 NEN5104 RDNAPTRANS2018 ja POINT (119959 448591) 53878388 publiekeTaak nee -1.060 RTKGPS0tot4cm nee ... nee nee POINT (4.876654807 52.024557728) nee NAP GMW38B116722 2019-06-03 potWaterdicht instabiel nee
GMW000000018261 NEN5104 RDNAPTRANS2018 ja POINT (119759 448371) 53878388 publiekeTaak nee 0.560 RTKGPS0tot4cm nee ... nee nee POINT (4.873763584 52.02256773) nee NAP GMW38B116723 2019-06-03 potWaterdicht instabiel nee
GMW000000018262 NEN5104 RDNAPTRANS2018 ja POINT (120252 448319) 53878388 publiekeTaak nee 0.150 RTKGPS0tot4cm nee ... nee nee POINT (4.880951247 52.022131446) nee NAP GMW38E116724 2019-06-03 potWaterdicht instabiel nee
GMW000000018263 NEN5104 RDNAPTRANS2018 ja POINT (119705 448221) 53878388 publiekeTaak nee 1.640 RTKGPS0tot4cm nee ... nee nee POINT (4.872992338 52.021216116) nee NAP GMW38B116725 2019-06-03 potWaterdicht instabiel nee
GMW000000018264 NEN5104 RDNAPTRANS2018 ja POINT (119490 448831) 53878388 publiekeTaak nee -1.260 RTKGPS0tot4cm nee ... nee nee POINT (4.869796867 52.026685005) nee NAP GMW38B116726 2019-06-03 potWaterdicht instabiel nee
GMW000000018265 NEN5104 RDNAPTRANS2018 ja POINT (119427 448486) 53878388 publiekeTaak nee 0.850 RTKGPS0tot4cm nee ... nee nee POINT (4.868914822 52.023580156) nee NAP GMW38B116727 2019-06-03 potWaterdicht instabiel nee
GMW000000018266 NEN5104 RDNAPTRANS2018 ja POINT (119334 449131) 53878388 publiekeTaak nee -1.250 RTKGPS0tot4cm nee ... nee nee POINT (4.867492662 52.029371358) nee NAP GMW38B116728 2019-06-03 potWaterdicht instabiel nee
GMW000000018267 NEN5104 RDNAPTRANS2018 ja POINT (119077 449770) 53878388 publiekeTaak nee -1.230 RTKGPS0tot4cm nee ... nee nee POINT (4.863680821 52.035098016) nee NAP GMW38B116729 2019-06-03 potWaterdicht instabiel nee
GMW000000018268 NEN5104 RDNAPTRANS2018 ja POINT (119511 449298) 53878388 publiekeTaak nee -1.360 RTKGPS0tot4cm nee ... nee nee POINT (4.870054389 52.030883679) nee NAP GMW38B116730 2019-06-03 potWaterdicht instabiel nee
GMW000000018269 NEN5104 RDNAPTRANS2018 ja POINT (121832 448942) 53878388 publiekeTaak nee 0.310 RTKGPS0tot4cm nee ... nee nee POINT (4.903909284 52.02782759) nee NAP GMW38E116731 2019-06-03 potWaterdicht instabiel nee
GMW000000018270 NEN5104 RDNAPTRANS2018 ja POINT (118973 448285) 53878388 publiekeTaak nee 0.360 RTKGPS0tot4cm nee ... nee nee POINT (4.862321634 52.021744306) nee NAP GMW38B116732 2019-06-03 potWaterdicht instabiel nee
GMW000000088930 geen RDNAPTRANS2018 nee POINT (119916.34 448955.51) 53878388 publiekeTaak nee -1.011 RTKGPS20tot100cm ja ... nee nee POINT (4.875995898 52.027831202) nee NAP GMW38B148073 2024-11-27 potNietWaterdicht NaN nee
GMW000000088931 geen RDNAPTRANS2018 nee POINT (119204.69 448400.88) 53878388 publiekeTaak nee 0.285 RTKGPS20tot100cm ja ... nee nee POINT (4.86568488 52.022800813) nee NAP GMW38B148074 2024-11-27 potNietWaterdicht NaN nee

23 rows × 32 columns

Finally, plot these wells on an interactive map.

import folium
tooltip = ["broId","wellCode", "groundLevelPosition", "wellConstructionDate", "numberOfMonitoringTubes"]
m = gdf.explore(tooltip=tooltip)
m
Make this Notebook Trusted to load map: File -> Trust Notebook