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