ageraustine commited on
Commit
a74054f
Β·
verified Β·
1 Parent(s): d1c0b76

Upload folder using huggingface_hub

Browse files
This view is limited to 50 files because it contains too many changes. Β  See raw diff
Files changed (50) hide show
  1. .env +3 -0
  2. .gitattributes +101 -0
  3. CLAUDE.md +31 -0
  4. README.md +519 -10
  5. datasets/ADES/ADES_data_fetching.py +158 -0
  6. datasets/ADES/groundwater_levels_watershed.csv +3 -0
  7. datasets/ADES/groundwater_stations.csv +114 -0
  8. datasets/ADES/stations_metadata.csv +0 -0
  9. datasets/IDPR_values.csv +28 -0
  10. datasets/README.md +320 -0
  11. datasets/Risle_Eure_watershed/Risle_Eure_Watershed.cpg +1 -0
  12. datasets/Risle_Eure_watershed/Risle_Eure_Watershed.dbf +0 -0
  13. datasets/Risle_Eure_watershed/Risle_Eure_Watershed.gpkg +3 -0
  14. datasets/Risle_Eure_watershed/Risle_Eure_Watershed.prj +1 -0
  15. datasets/Risle_Eure_watershed/Risle_Eure_Watershed.shp +0 -0
  16. datasets/Risle_Eure_watershed/Risle_Eure_Watershed.shx +0 -0
  17. datasets/River Images/Carte-de-la_Seine-390x305.png +3 -0
  18. datasets/River Images/Eure_(rivière).png +3 -0
  19. datasets/River Images/Risle.png +3 -0
  20. datasets/Watershed_Eure/Watershed_Eure.cpg +1 -0
  21. datasets/Watershed_Eure/Watershed_Eure.dbf +0 -0
  22. datasets/Watershed_Eure/Watershed_Eure.prj +1 -0
  23. datasets/Watershed_Eure/Watershed_Eure.qmd +27 -0
  24. datasets/Watershed_Eure/Watershed_Eure.shp +0 -0
  25. datasets/Watershed_Eure/Watershed_Eure.shx +0 -0
  26. datasets/Watershed_risle/Watershed_Risle.cpg +1 -0
  27. datasets/Watershed_risle/Watershed_Risle.dbf +0 -0
  28. datasets/Watershed_risle/Watershed_Risle.prj +1 -0
  29. datasets/Watershed_risle/Watershed_Risle.qmd +44 -0
  30. datasets/Watershed_risle/Watershed_Risle.shp +0 -0
  31. datasets/Watershed_risle/Watershed_Risle.shx +0 -0
  32. datasets/bdtopo_hydro/bassin_versant_topographique.geojson +0 -0
  33. datasets/bdtopo_hydro/surface_hydrographique.geojson +3 -0
  34. datasets/bdtopo_hydro/troncon_hydrographique.geojson +3 -0
  35. datasets/catchment_area.csv +28 -0
  36. datasets/centerlines/eure_centerline.csv +121 -0
  37. datasets/centerlines/risle_centerline.csv +0 -0
  38. datasets/hydrometric/discharge_observations.csv +3 -0
  39. datasets/hydrometric/discharge_observations.json +3 -0
  40. datasets/hydrometric/download_log.txt +105 -0
  41. datasets/hydrometric/download_pid.txt +1 -0
  42. datasets/hydrometric/download_summary.json +14 -0
  43. datasets/hydrometric/waterlevel_observations.csv +3 -0
  44. datasets/hydrometric/waterlevel_observations.json +3 -0
  45. datasets/reach_graph/eure_edges.csv +0 -0
  46. datasets/reach_graph/eure_nodes.csv +0 -0
  47. datasets/reach_graph/risle_edges.csv +0 -0
  48. datasets/reach_graph/risle_nodes.csv +0 -0
  49. datasets/safran/download_log.txt +0 -0
  50. datasets/safran/download_pid.txt +1 -0
.env ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ CDS_API_KEY="be996a06-0af8-4b7e-bb36-f2ce09efd774"
2
+ # url: https://cds.climate.copernicus.eu/api
3
+ # key: be996a06-0af8-4b7e-bb36-f2ce09efd774
.gitattributes CHANGED
@@ -33,3 +33,104 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ datasets/ADES/groundwater_levels_watershed.csv filter=lfs diff=lfs merge=lfs -text
37
+ datasets/Risle_Eure_watershed/Risle_Eure_Watershed.gpkg filter=lfs diff=lfs merge=lfs -text
38
+ datasets/River[[:space:]]Images/Carte-de-la_Seine-390x305.png filter=lfs diff=lfs merge=lfs -text
39
+ datasets/River[[:space:]]Images/Eure_(rivière).png filter=lfs diff=lfs merge=lfs -text
40
+ datasets/River[[:space:]]Images/Risle.png filter=lfs diff=lfs merge=lfs -text
41
+ datasets/bdtopo_hydro/surface_hydrographique.geojson filter=lfs diff=lfs merge=lfs -text
42
+ datasets/bdtopo_hydro/troncon_hydrographique.geojson filter=lfs diff=lfs merge=lfs -text
43
+ datasets/hydrometric/discharge_observations.csv filter=lfs diff=lfs merge=lfs -text
44
+ datasets/hydrometric/discharge_observations.json filter=lfs diff=lfs merge=lfs -text
45
+ datasets/hydrometric/waterlevel_observations.csv filter=lfs diff=lfs merge=lfs -text
46
+ datasets/hydrometric/waterlevel_observations.json filter=lfs diff=lfs merge=lfs -text
47
+ datasets/safran/era5_1960.nc filter=lfs diff=lfs merge=lfs -text
48
+ datasets/safran/era5_1961.nc filter=lfs diff=lfs merge=lfs -text
49
+ datasets/safran/era5_1962.nc filter=lfs diff=lfs merge=lfs -text
50
+ datasets/safran/era5_1963.nc filter=lfs diff=lfs merge=lfs -text
51
+ datasets/safran/era5_1964.nc filter=lfs diff=lfs merge=lfs -text
52
+ datasets/safran/era5_1965.nc filter=lfs diff=lfs merge=lfs -text
53
+ datasets/safran/era5_1966.nc filter=lfs diff=lfs merge=lfs -text
54
+ datasets/safran/era5_1967.nc filter=lfs diff=lfs merge=lfs -text
55
+ datasets/safran/era5_1968.nc filter=lfs diff=lfs merge=lfs -text
56
+ datasets/safran/era5_1969.nc filter=lfs diff=lfs merge=lfs -text
57
+ datasets/safran/era5_1970.nc filter=lfs diff=lfs merge=lfs -text
58
+ datasets/safran/era5_1971.nc filter=lfs diff=lfs merge=lfs -text
59
+ datasets/safran/era5_1972.nc filter=lfs diff=lfs merge=lfs -text
60
+ datasets/safran/era5_1973.nc filter=lfs diff=lfs merge=lfs -text
61
+ datasets/safran/era5_1974.nc filter=lfs diff=lfs merge=lfs -text
62
+ datasets/safran/era5_1975.nc filter=lfs diff=lfs merge=lfs -text
63
+ datasets/safran/era5_1976.nc filter=lfs diff=lfs merge=lfs -text
64
+ datasets/safran/era5_1977.nc filter=lfs diff=lfs merge=lfs -text
65
+ datasets/safran/era5_1978.nc filter=lfs diff=lfs merge=lfs -text
66
+ datasets/safran/era5_1979.nc filter=lfs diff=lfs merge=lfs -text
67
+ datasets/safran/era5_1980.nc filter=lfs diff=lfs merge=lfs -text
68
+ datasets/safran/era5_1981.nc filter=lfs diff=lfs merge=lfs -text
69
+ datasets/safran/era5_1982.nc filter=lfs diff=lfs merge=lfs -text
70
+ datasets/safran/era5_1983.nc filter=lfs diff=lfs merge=lfs -text
71
+ datasets/safran/era5_1984.nc filter=lfs diff=lfs merge=lfs -text
72
+ datasets/safran/era5_1985.nc filter=lfs diff=lfs merge=lfs -text
73
+ datasets/safran/era5_1986.nc filter=lfs diff=lfs merge=lfs -text
74
+ datasets/safran/era5_1987.nc filter=lfs diff=lfs merge=lfs -text
75
+ datasets/safran/era5_1988.nc filter=lfs diff=lfs merge=lfs -text
76
+ datasets/safran/era5_1989.nc filter=lfs diff=lfs merge=lfs -text
77
+ datasets/safran/era5_1990.nc filter=lfs diff=lfs merge=lfs -text
78
+ datasets/safran/era5_1991.nc filter=lfs diff=lfs merge=lfs -text
79
+ datasets/safran/era5_1992.nc filter=lfs diff=lfs merge=lfs -text
80
+ datasets/safran/era5_1993.nc filter=lfs diff=lfs merge=lfs -text
81
+ datasets/safran/era5_1994.nc filter=lfs diff=lfs merge=lfs -text
82
+ datasets/safran/era5_1995.nc filter=lfs diff=lfs merge=lfs -text
83
+ datasets/safran/era5_1996.nc filter=lfs diff=lfs merge=lfs -text
84
+ datasets/safran/era5_1997.nc filter=lfs diff=lfs merge=lfs -text
85
+ datasets/safran/era5_1998.nc filter=lfs diff=lfs merge=lfs -text
86
+ datasets/safran/era5_1999.nc filter=lfs diff=lfs merge=lfs -text
87
+ datasets/safran/era5_2000.nc filter=lfs diff=lfs merge=lfs -text
88
+ datasets/safran/era5_2001.nc filter=lfs diff=lfs merge=lfs -text
89
+ datasets/safran/era5_2002.nc filter=lfs diff=lfs merge=lfs -text
90
+ datasets/safran/era5_2003.nc filter=lfs diff=lfs merge=lfs -text
91
+ datasets/safran/era5_2004.nc filter=lfs diff=lfs merge=lfs -text
92
+ datasets/safran/era5_2005.nc filter=lfs diff=lfs merge=lfs -text
93
+ datasets/safran/era5_2006.nc filter=lfs diff=lfs merge=lfs -text
94
+ datasets/safran/era5_2007.nc filter=lfs diff=lfs merge=lfs -text
95
+ datasets/safran/era5_2008.nc filter=lfs diff=lfs merge=lfs -text
96
+ datasets/safran/era5_2009.nc filter=lfs diff=lfs merge=lfs -text
97
+ datasets/safran/era5_2010.nc filter=lfs diff=lfs merge=lfs -text
98
+ datasets/safran/era5_2011.nc filter=lfs diff=lfs merge=lfs -text
99
+ datasets/safran/era5_2012.nc filter=lfs diff=lfs merge=lfs -text
100
+ datasets/safran/era5_2013.nc filter=lfs diff=lfs merge=lfs -text
101
+ datasets/safran/era5_2014.nc filter=lfs diff=lfs merge=lfs -text
102
+ datasets/safran/era5_2015.nc filter=lfs diff=lfs merge=lfs -text
103
+ datasets/safran/era5_2016.nc filter=lfs diff=lfs merge=lfs -text
104
+ datasets/safran/era5_2017.nc filter=lfs diff=lfs merge=lfs -text
105
+ datasets/safran/era5_2018.nc filter=lfs diff=lfs merge=lfs -text
106
+ datasets/safran/era5_2019.nc filter=lfs diff=lfs merge=lfs -text
107
+ datasets/safran/era5_2020.nc filter=lfs diff=lfs merge=lfs -text
108
+ datasets/safran/era5_2021.nc filter=lfs diff=lfs merge=lfs -text
109
+ datasets/safran/era5_2022.nc filter=lfs diff=lfs merge=lfs -text
110
+ datasets/safran/era5_2023.nc filter=lfs diff=lfs merge=lfs -text
111
+ datasets/safran/era5_2024.nc filter=lfs diff=lfs merge=lfs -text
112
+ datasets/safran/era5_2025.nc filter=lfs diff=lfs merge=lfs -text
113
+ datasets/safran/era5_2026.nc filter=lfs diff=lfs merge=lfs -text
114
+ docs/images/La_Eure.png filter=lfs diff=lfs merge=lfs -text
115
+ docs/images/La_Risle_Graph.png filter=lfs diff=lfs merge=lfs -text
116
+ docs/images/eure_overview.png filter=lfs diff=lfs merge=lfs -text
117
+ docs/images/risle_detail.png filter=lfs diff=lfs merge=lfs -text
118
+ docs/images/risle_full.png filter=lfs diff=lfs merge=lfs -text
119
+ docs/images/station_timeseries.png filter=lfs diff=lfs merge=lfs -text
120
+ plots/ades/groundwater_levels.png filter=lfs diff=lfs merge=lfs -text
121
+ plots/graph/La_Eure.png filter=lfs diff=lfs merge=lfs -text
122
+ plots/graph/La_Risle_Graph.png filter=lfs diff=lfs merge=lfs -text
123
+ plots/graph/eure_overview.png filter=lfs diff=lfs merge=lfs -text
124
+ plots/graph/risle_detail.png filter=lfs diff=lfs merge=lfs -text
125
+ plots/graph/risle_full.png filter=lfs diff=lfs merge=lfs -text
126
+ plots/graph/station_timeseries.png filter=lfs diff=lfs merge=lfs -text
127
+ plots/hydrometric/climatology_discharge.png filter=lfs diff=lfs merge=lfs -text
128
+ plots/hydrometric/discharge_comparison.png filter=lfs diff=lfs merge=lfs -text
129
+ plots/hydrometric/rating_curve.png filter=lfs diff=lfs merge=lfs -text
130
+ plots/hydrometric/station_deepdive.png filter=lfs diff=lfs merge=lfs -text
131
+ plots/hydrometric/waterlevel_comparison.png filter=lfs diff=lfs merge=lfs -text
132
+ plots/river_topology.mov filter=lfs diff=lfs merge=lfs -text
133
+ plots/safran/precipitation_cumulative.png filter=lfs diff=lfs merge=lfs -text
134
+ plots/safran/temperature.png filter=lfs diff=lfs merge=lfs -text
135
+ plots/station_elevations/elevation_bar.png filter=lfs diff=lfs merge=lfs -text
136
+ plots/station_elevations/station_map.png filter=lfs diff=lfs merge=lfs -text
CLAUDE.md ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ### Project deliverables β†’ instructions/project.md
2
+
3
+ ### CURRENT STATUS
4
+
5
+ **Phase 1 - Data Fusion & Graph Construction: βœ… COMPLETE**
6
+
7
+ - βœ… Data downloads (Hub'Eau hydrometric, ERA5 meteorological, elevations)
8
+ - βœ… Data loaders (hydrometric.py, safran.py) - aligned with actual API structures
9
+ - βœ… Fusion pipeline (fusion_engine.py) - merges Hub'Eau + ERA5
10
+ - βœ… Graph construction (graph_from_fused.py) - PyTorch Geometric compatible
11
+ - βœ… Graph visualization (visualize.py) - 7 plot types
12
+
13
+ **Working Pipeline:**
14
+ ```
15
+ Hub'Eau (53K obs) + ERA5 (10K obs) β†’ Fusion β†’ Graphs β†’ Visualization β†’ Ready for GNN
16
+ ```
17
+
18
+ **Datasets:**
19
+ - Hub'Eau: 101,218 observations, 14 stations (1969-2026)
20
+ - ERA5: Sample data (Jan 2020), full download ready (1960-2026, 67 years)
21
+ - Station elevations: 27 stations from EU-DEM
22
+ - ADES groundwater: 113 wells, 272K measurements
23
+ - IDPR KARST indicators: 27 stations
24
+
25
+ **Next:** GNN model training or full ERA5 download
26
+
27
+ ### INSTRUCTIONS
28
+ - Role: Elite ML engineer, efficient, direct, best practices
29
+ - Focus: Graph construction for PyTorch Geometric compatible with spatial-temporal data
30
+ - Datasets: Located in `datasets/`
31
+ - Code: All implementation in `src/`
README.md CHANGED
@@ -1,13 +1,522 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
- title: River Network
3
- emoji: πŸ“š
4
- colorFrom: pink
5
- colorTo: green
6
- sdk: gradio
7
- sdk_version: 6.24.0
8
- python_version: '3.12'
9
- app_file: app.py
10
- pinned: false
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  ---
12
 
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # La Eure / La Risle Hydrometric GNN
2
+
3
+ A physics-informed graph neural network that predicts streamflow (discharge,
4
+ water level) at gauged and ungauged points along two Normandy rivers, La Eure
5
+ and La Risle, treated as two separate surface-hydrology graphs with
6
+ station-level covariates pulled from half a dozen independent data sources.
7
+
8
+ ```mermaid
9
+ flowchart LR
10
+ hubeau["Hub'Eau<br/>discharge Β· water level<br/>catchment area"]
11
+ ades["ADES<br/>groundwater levels"]
12
+ era5["Copernicus ERA5<br/>climate reanalysis"]
13
+ otd["Open Topo Data<br/>station elevation"]
14
+ brgm["BRGM<br/>IDPR"]
15
+ bdtopo["IGN BD TOPO<br/>river centerline geometry"]
16
+
17
+ hubeau --> loaders
18
+ ades --> loaders
19
+ era5 --> loaders
20
+ otd --> loaders
21
+ brgm --> loaders
22
+ bdtopo --> loaders
23
+
24
+ loaders["src/data/loaders/"] --> nf["node_features.py<br/>one row per station<br/>inputs kept separate from targets"]
25
+ loaders --> bg["build_graph.py<br/>surface edges, ordered by<br/>real river course"]
26
+
27
+ nf --> pyg
28
+ bg --> pyg["build_pyg_graphs_per_basin"]
29
+
30
+ pyg --> eure["La Eure graph"]
31
+ pyg --> risle["La Risle graph"]
32
+
33
+ eure --> app["src/app.py<br/>Streamlit explorer"]
34
+ risle --> app
35
+ eure --> testsuite["test_build_graph.py<br/>validation"]
36
+ risle --> testsuite
37
+ ```
38
+
39
+ ---
40
+
41
+ ## 1. Repository layout
42
+
43
+ ```
44
+ PoC_v1/
45
+ β”œβ”€β”€ scripts/ # one-off download / extraction scripts
46
+ β”‚ β”œβ”€β”€ download_hubeau.py # discharge + water level, Hub'Eau API v2
47
+ β”‚ β”œβ”€β”€ download_elevation.py # point elevations, Open Topo Data
48
+ β”‚ β”œβ”€β”€ download_era5_sample.py # ERA5 sanity-check pull (Jan 2020 only)
49
+ β”‚ β”œβ”€β”€ download_era5_full.py # ERA5 1960–2026, split instant/accum vars
50
+ β”‚ β”œβ”€β”€ extract_era5.py # unzips CDS API's zipped NetCDF output
51
+ β”‚ β”œβ”€β”€ download_catchment_area.py # Hub'Eau referentiel/sites -> surface_bv
52
+ β”‚ β”œβ”€β”€ download_bdtopo_hydro.py # IGN WFS -> tronΓ§ons, surfaces, catchments
53
+ β”‚ β”œβ”€β”€ analyze_bdtopo_hydro.py # centerline export + karst check
54
+ β”‚ β”œβ”€β”€ run_bdtopo_checks.py # karst + catchment cross-check, one shot
55
+ β”‚ └── cross_check_catchments.py # spatial join: station -> containing polygon
56
+ β”‚
57
+ β”œβ”€β”€ src/
58
+ β”‚ β”œβ”€β”€ app.py # Streamlit river explorer (main UI)
59
+ β”‚ β”œβ”€β”€ generate_plots.py # batch plot generation across all loaders
60
+ β”‚ β”œβ”€β”€ test_build_graph.py # graph-construction test/validation suite
61
+ β”‚ β”œβ”€β”€ extract_river_centerline.py # digitizes a traced map image into a centerline
62
+ β”‚ β”‚
63
+ β”‚ β”œβ”€β”€ data/
64
+ β”‚ β”‚ β”œβ”€β”€ loaders/
65
+ β”‚ β”‚ β”‚ β”œβ”€β”€ base.py # BaseDataLoader β€” shared load()/get_metadata()
66
+ β”‚ β”‚ β”‚ β”œβ”€β”€ hydrometric.py # discharge & water level (Hub'Eau)
67
+ β”‚ β”‚ β”‚ β”œβ”€β”€ ades.py # groundwater levels (ADES)
68
+ β”‚ β”‚ β”‚ β”œβ”€β”€ safran.py # ERA5 reanalysis, interpolated to stations
69
+ β”‚ β”‚ β”‚ β”œβ”€β”€ idpr.py # infiltration/runoff tendency (BRGM)
70
+ β”‚ β”‚ β”‚ β”œβ”€β”€ catchment.py # per-station catchment area (Hub'Eau)
71
+ β”‚ β”‚ β”‚ β”œβ”€β”€ bdtopo_hydro.py # IGN BD TOPO hydrography (GeoJSON)
72
+ β”‚ β”‚ β”‚ β”œβ”€β”€ shapefile.py # watershed boundary polygon
73
+ β”‚ β”‚ β”‚ └── station_elevations.py # station coordinates + elevation
74
+ β”‚ β”‚ β”‚
75
+ β”‚ β”‚ β”œβ”€β”€ river_graph.py # basin assignment, elevation ordering, edges
76
+ β”‚ β”‚ β”œβ”€β”€ river_line.py # straight-line interpolation between gauges
77
+ β”‚ β”‚ └── river_centerline.py # real-centerline interpolation + gauge snapping
78
+ β”‚ β”‚
79
+ β”‚ └── graph/
80
+ β”‚ β”œβ”€β”€ build_graph.py # surface edges + PyTorch Geometric conversion
81
+ β”‚ └── node_features.py # pulls every loader into one feature table
82
+ β”‚
83
+ β”œβ”€β”€ datasets/ # not checked in; populated by the scripts above
84
+ β”‚ β”œβ”€β”€ station_list.csv # raw station roster (X, Y, names, INSEE, etc.)
85
+ β”‚ β”œβ”€β”€ station_elevations.csv # station_code, lat, lon, elevation_m
86
+ β”‚ β”œβ”€β”€ idpr.csv
87
+ β”‚ β”œβ”€β”€ catchment_area.csv
88
+ β”‚ β”œβ”€β”€ ades/
89
+ β”‚ β”œβ”€β”€ hydrometric/
90
+ β”‚ β”œβ”€β”€ safran/
91
+ β”‚ β”œβ”€β”€ bdtopo_hydro/
92
+ β”‚ └── centerlines/
93
+ ```
94
+
95
+ `scripts/` talks to the outside world (APIs, WFS);
96
+ `src/` doesn't β€” nothing under `src/` makes a network call, and a script
97
+ under `src/` that wants one is a bug. Most of `src/data/loaders/` predates
98
+ the graph work β€” general-purpose readers/plotters for each dataset, with
99
+ `node_features.py` stitching them together afterward rather than the other
100
+ way around.
101
+
102
+ ---
103
+
104
+ ## 2. The graph
105
+
106
+ This is the part everything else in the repo exists to feed. Two graphs, one
107
+ per river β€” `H4xx…` stations feed the La Eure graph (196 km of real BD TOPO
108
+ course), `H6xx…` feed La Risle (150 km) β€” built with no edge between them,
109
+ because there's no surface connection between the two basins to model.
110
+
111
+ ![La Eure and its ADES wells, real BD TOPO course, elevation-colored gauges](docs/images/eure_overview.png)
112
+
113
+ ![La Risle, same view β€” note the tight cluster of gauges around the karst bΓ©toire stretch](docs/images/risle_full.png)
114
+
115
+ ### 2.1 Nodes
116
+
117
+ A node is one hydrometric station. The full feature set, as of the last
118
+ `test_build_graph.py` run against real data, is 16 columns wide across all 27
119
+ stations combined (15 per basin, once `basin_id` is dropped β€” see Β§2.3):
120
+
121
+ | Feature | Source | What it is |
122
+ |---|---|---|
123
+ | `latitude`, `longitude` | `station_elevations.csv` | station coordinates |
124
+ | `elevation_m` | Open Topo Data (`scripts/download_elevation.py`) | point elevation at the station |
125
+ | `idpr_value` | BRGM IDPR | infiltration-vs-runoff tendency; direct ID join, not interpolated, for this dataset |
126
+ | `avg_groundwater_level_m`, `avg_groundwater_depth_m` | ADES, radius-averaged | nearest-well groundwater condition |
127
+ | `n_nearby_wells` | ADES | how many wells contributed to the average above β€” worth checking before trusting the groundwater value, since some stations have zero |
128
+ | `climate_temp_C`, `climate_wind_speed_ms`, `climate_solar_Wm2`, `climate_precip_mm`, `climate_evap_mm`, `climate_snow_mm`, `climate_runoff_mm` | ERA5, interpolated to the station point | mean/sum over the record, by variable |
129
+ | `avg_groundwater_level_m__was_missing`, `avg_groundwater_depth_m__was_missing`, (and similarly for any other feature with real gaps) | auto-generated | 1 if that station had no data for the column before mean-filling, 0 otherwise |
130
+
131
+ `basin_id` is also computed but excluded from each per-basin graph's own
132
+ feature set, since it's constant there and would just be a zero-variance
133
+ column sitting in `x` for no reason.
134
+
135
+ **Targets are not features.** `target_discharge_m3s_mean/std/count` and
136
+ `target_waterlevel_mm_mean/std/count` exist on the enriched table but never
137
+ enter `x` β€” they're pulled out into `data.y` separately. A model that could
138
+ see these as inputs would be reading the answer off the label, not learning
139
+ anything.
140
+
141
+ **The missingness flags aren't decorative.** A station with zero nearby wells
142
+ gets its groundwater value silently filled with the basin mean β€” without the
143
+ flag, that looks identical to a station whose real groundwater level happens
144
+ to be close to average. Given how unevenly some of these datasets cover the
145
+ two basins (the Eure's southern reach has essentially no ADES wells within
146
+ range at all), pretending "filled with the mean" and "actually near the mean"
147
+ are the same thing would be a real information loss, not just tidiness.
148
+
149
+ ### 2.2 Edges
150
+
151
+ An edge is "these two gauges are consecutive along the river," in the
152
+ direction water actually flows β€” upstream to downstream. Three attributes per
153
+ edge:
154
+
155
+ | Feature | Meaning |
156
+ |---|---|
157
+ | `distance_km` | along-river distance between the two stations |
158
+ | `elevation_drop_m` | elevation difference, upstream minus downstream (should be positive; negative would flag a real problem) |
159
+ | `verified_continuous` | `False` for any edge deliberately flagged via `known_losing_reaches` |
160
+
161
+ That last one exists because of a specific, real finding: two stations on La
162
+ Risle are named *"[amont bΓ©toire]"* and *"[aval bΓ©toire]"* in Hub'Eau's own
163
+ data β€” *bΓ©toire* being the Normandy term for a karst swallow-hole, where a
164
+ river can vanish underground and resurface downstream. Three consecutive
165
+ edges spanning that stretch (`H605641101 β†’ H605022010 β†’ H605641401 β†’
166
+ H605641201`) are flagged `verified_continuous=False` rather than the graph
167
+ silently assuming water flows continuously through a reach that might not
168
+ carry it at the surface at all. An edge existing in this graph means "these
169
+ stations are sequential along the mapped course," not "surface flow between
170
+ them is guaranteed."
171
+
172
+ Ordering within a basin comes from the station's position along the real
173
+ digitized river course where one's available (both basins now have real BD
174
+ TOPO-derived centerlines β€” see Β§3.8), falling back to elevation or latitude
175
+ otherwise. Every edge is built between *consecutive* stations in that order,
176
+ which means each basin is currently a single chain, not a branching network.
177
+ Tributaries aren't represented. That's the single biggest structural
178
+ simplification in the graph as it stands β€” see Β§6.
179
+
180
+ ![La Risle, position at 50% along its 150 km real course, reading elevation and estimated groundwater level](docs/images/risle_detail.png)
181
+
182
+ ### 2.3 Two graphs, not one
183
+
184
+ `build_pyg_graphs_per_basin()` returns `{0: eure_graph, 1: risle_graph}`,
185
+ each with its own local `0..n-1` node indexing, rather than one merged `Data`
186
+ object with two disconnected components. La Eure and La Risle are distinct
187
+ hydrographic systems with nothing connecting them at the surface, and
188
+ PyTorch Geometric's own batching (`Batch.from_data_list`) expects a list of
189
+ separate small graphs β€” building two graphs from the start matches that
190
+ convention directly.
191
+
192
+ ### 2.4 What actually goes into `x`
193
+
194
+ `build_pyg_graph()` auto-detects feature columns from whatever table it's
195
+ given, so it works whether that's the plain 4-column base table or the fully
196
+ enriched one. Every column gets z-scored (mean 0, unit variance β€” verified in
197
+ `test_build_graph.py`, including a check that this used the same `ddof=1`
198
+ convention as the pandas `.std()` call that actually does the standardizing,
199
+ since numpy's default `ddof=0` gives a spuriously "wrong-looking" answer for
200
+ small station counts that isn't actually a bug). Missingness flags, described
201
+ above, get appended after standardization so they stay honest 0/1 values
202
+ rather than being z-scored into something less interpretable.
203
+
204
+ ### 2.5 What it looks like
205
+
206
+ The Streamlit explorer (`src/app.py`) renders both graphs directly β€” real
207
+ course geometry, gauges colored by elevation, ADES wells layered underneath
208
+ for context. Clicking anywhere on the line resolves to the nearest gauge and
209
+ pulls up its actual discharge/water-level/rating-curve plots:
210
+
211
+ ![Clicking along La Risle resolves to the nearest gauge (H605022010, 1.7 km away) and shows its real water level record back to 1972](docs/images/station_timeseries.png)
212
+
213
+ ---
214
+
215
+ ## 3. Datasets
216
+
217
+ Every dataset here has its own quirks, and in a couple of cases the quirks
218
+ materially affect what the data means.
219
+
220
+ ### 3.1 Station roster (`station_list.csv`, `station_elevations.csv`)
221
+
222
+ 27 stations across the two basins, split roughly by Hub'Eau code prefix
223
+ (`H4xx…` for La Eure, `H6xx…` for La Risle β€” this is a heuristic based on
224
+ observed codes, not a documented rule, so it's worth re-checking if new
225
+ stations show up outside that pattern). Elevation comes from Open Topo Data's
226
+ `eudem25m` endpoint (`scripts/download_elevation.py`), queried per station
227
+ coordinate β€” it's a point lookup, not a raster, so there's no slope or
228
+ catchment information hiding in it.
229
+
230
+ The row order in `station_list.csv` does **not** follow the river's course β€”
231
+ verified directly, it jumps around in both latitude and elevation. Anything
232
+ that needs upstream/downstream ordering has to derive it from elevation,
233
+ latitude, or real centerline position; never from file order.
234
+
235
+ Not every station in this list is actively gauged. Cross-referencing station
236
+ names against the hydrometric data turned up three categories worth knowing
237
+ about:
238
+
239
+ - **Manual "observateur" stations** β€” read by a person, not telemetered, so
240
+ there's no digital time series to have. Four of these in the current roster.
241
+ - **Partner-network ("SEBV") stations** β€” operated outside the standard Hub'Eau
242
+ telemetry network, likely need a different data source entirely if you want
243
+ their readings. `H431021010` is one of these.
244
+ - Everything else with no data is unexplained from the name alone and worth a
245
+ direct check on Hub'Eau's site before assuming it's just a gap.
246
+
247
+ In total, **14 of the 27 stations have no discharge or water-level records at
248
+ all** in the current Hub'Eau export. That's not a bug in the loader β€” it's
249
+ confirmed against the raw files, not just the merged table.
250
+
251
+ ### 3.2 Hydrometric data (`hydrometric/`, via `scripts/download_hubeau.py`)
252
+
253
+ Discharge and water level from Hub'Eau's `obs_elab` endpoint. One thing that
254
+ trips up a naive read: **both files contain a mix of `grandeur_hydro_elab`
255
+ codes**, not just the variable implied by the filename. `discharge_observations.csv`
256
+ has `HIXnJ`/`HIXM` (water-level codes) sitting right alongside `QmnJ`
257
+ (discharge) rows for the same stations β€” `HydrometricLoader` filters each file
258
+ down to its intended `grandeur` code explicitly (`QmnJ` from the discharge
259
+ file, `HIXnJ` from the water-level file) rather than trusting the filename.
260
+
261
+ Only 8 of the 27 stations have any `QmnJ` (daily mean discharge) rows at all.
262
+ Several others report water level only. This isn't evenly distributed and
263
+ matters a lot for anything downstream that assumes "gauged" means "has both
264
+ variables" β€” it usually doesn't.
265
+
266
+ ### 3.3 Groundwater (`ades/`)
267
+
268
+ ADES piezometer data: 113 wells in the watershed extract, 102 of them with
269
+ actual level readings, going back as far as 1967 for some wells and to
270
+ 2026-07-05 for the most recent reading at time of writing. `ADESLoader.load()`
271
+ merges the levels file against the stations file on `code_bss` and renames
272
+ `x`/`y` to `lon`/`lat` β€” those columns are already in degrees in this dataset,
273
+ not a projected CRS, so no reprojection happens or is needed.
274
+
275
+ Groundwater is used as a **station-level input covariate** (radius-averaged via
276
+ `aggregate_to_stations`), not as a graph edge. Well proximity alone isn't
277
+ sufficient grounds for a subsurface/karst connectivity edge between the two
278
+ basins β€” two wells being close together doesn't mean they're hydraulically
279
+ connected. That would need either correlated well hydrographs over time or a
280
+ shared BDLISA aquifer-unit code (the `groundwater_stations.csv` file has a
281
+ `codes_bdlisa` column available for exactly this kind of check).
282
+
283
+ Well coverage is not uniform across the two basins. The Eure's southern reach
284
+ (south of roughly 48.68Β°N, toward Chartres) has essentially zero wells within
285
+ range in this extract β€” any groundwater estimate south of there will come back
286
+ empty, and that's a property of the source data, not a bug in the interpolation.
287
+
288
+ ### 3.4 Climate (`safran/`, via `download_era5_sample.py` / `download_era5_full.py`)
289
+
290
+ Despite the `safran` naming throughout this codebase (a holdover from an
291
+ earlier plan to use MΓ©tΓ©o-France's SAFRAN reanalysis), the actual data is ERA5
292
+ from Copernicus's Climate Data Store, pulled via `cdsapi`. ERA5 splits
293
+ instantaneous variables (temperature, wind) from accumulated ones
294
+ (precipitation, evaporation, radiation, snowfall, runoff) at the API level β€”
295
+ `download_era5_full.py` downloads each set separately per year and merges them,
296
+ because the CDS API rejects mixed requests. The full pull spans 1960–2026 and
297
+ is genuinely slow (a `time.sleep` and per-year retry loop is in there for a
298
+ reason).
299
+
300
+ `SAFRANLoader` interpolates the ERA5 grid to each station's coordinate
301
+ (nearest or linear, configurable) rather than requiring stations to sit
302
+ exactly on a grid cell β€” this is standard practice for reanalysis data at
303
+ 0.25Β° resolution, not an approximation specific to this project.
304
+
305
+ ### 3.5 IDPR (`idpr.csv`)
306
+
307
+ BRGM's *Indice de DΓ©veloppement et de Persistance des RΓ©seaux* β€” an
308
+ infiltration-vs-runoff tendency index, and the closest thing this project has
309
+ to a real soil/drainage covariate. The actual file used here is already
310
+ one row per station (`station_id` matching `station_code` exactly, verified
311
+ 1:1 against all 27 stations, no duplicates, no nulls), not a raw spatial point
312
+ cloud. `node_features.py` checks for this and does a direct ID join when
313
+ possible rather than nearest-neighbor search β€” nearest-neighbor is only the
314
+ fallback path for a generic IDPR export that doesn't come pre-matched to
315
+ stations.
316
+
317
+ There is no soil texture, permeability, or hydraulic conductivity dataset in
318
+ this project. IDPR is a tendency index, not a texture measurement β€” worth
319
+ keeping that distinction in mind if it ever gets described as "soil data" in a
320
+ writeup.
321
+
322
+ ### 3.6 Catchment area (`catchment_area.csv`, via `scripts/download_catchment_area.py`)
323
+
324
+ Hub'Eau publishes catchment (drainage basin) area on the **site** referentiel,
325
+ not the station referentiel β€” `surface_bv` on `hydrometrie/referentiel/sites`,
326
+ in kmΒ². Since one site can have several stations, the download script does two
327
+ passes: station β†’ `code_site`, then `code_site` β†’ `surface_bv`, and joins them
328
+ back. 16 of 27 stations have a value; Hub'Eau simply doesn't publish this field
329
+ for every site, and the missing ones correlate with the observer/SEBV stations
330
+ from Β§3.1 but aren't identical to that set.
331
+
332
+ This number is **cumulative** β€” the total catchment area draining to that
333
+ point, all the way to the source. That distinction matters once you bring BD
334
+ TOPO into the picture (Β§3.7), because BD TOPO's catchment polygons are the
335
+ opposite: incremental, reach-by-reach areas. Comparing the two directly without
336
+ accounting for that gives area ratios that look like measurement error but
337
+ aren't β€” a spatial join between the 27 stations and the 135 BD TOPO polygons
338
+ gave ratios from about 0.015 near the river mouth up to 0.67 near the source,
339
+ which is exactly the pattern you'd expect from cumulative-vs-incremental, not
340
+ a data quality problem.
341
+
342
+ ### 3.7 BD TOPO hydrography (`bdtopo_hydro/`, via `scripts/download_bdtopo_hydro.py`)
343
+
344
+ IGN's BD TOPO / BD TOPAGE hydrographic network, pulled from the Geoplateforme
345
+ WFS (`https://data.geopf.fr/wfs`) rather than downloaded as a national bulk
346
+ file β€” the download script queries a bounding box around the two basins
347
+ instead. Three layers, all scoped to that bbox:
348
+
349
+ - `troncon_hydrographique.geojson` β€” river centerline reaches. 30,045 features
350
+ in the current pull, which sounds like a lot for two rivers because it
351
+ includes every stream, ditch, and canal in the box, not just the Eure and
352
+ Risle.
353
+ - `surface_hydrographique.geojson` β€” hydrographic surfaces, including a
354
+ `Nature` attribute that's supposed to flag karst-influenced reaches. IGN
355
+ documents this attribute as **provisional and incomplete** β€” filled in with
356
+ a limited, sometimes-default set of values pending refinement by the water
357
+ agencies. A negative karst search here is not strong evidence of anything;
358
+ it may just mean that stretch hasn't been annotated yet.
359
+ - `bassin_versant_topographique.geojson` β€” catchment polygons, incremental
360
+ (see Β§3.6). 135 polygons in the current bbox.
361
+
362
+ **WFS axis order**: when a `BBOX` parameter's CRS is given via the URN form
363
+ (`urn:ogc:def:crs:EPSG::4326`), the OGC spec requires latitude, longitude axis
364
+ order β€” the opposite of the lon,lat order most GIS tools use by default.
365
+ Getting this backwards doesn't raise an error; it silently matches zero real
366
+ features, which looks identical to "no data in this area." `download_bdtopo_hydro.py`
367
+ tries lon,lat first and automatically retries with the axes swapped if that
368
+ comes back empty β€” for this project's bounding box, lat,lon is the order that
369
+ returns real data.
370
+
371
+ **Z-coordinate in tronΓ§on geometry**: `troncon_hydrographique` geometries
372
+ carry a third coordinate β€” real altitude at every vertex β€” not just lon/lat.
373
+ Code handling this data needs to account for 3D coordinates explicitly (e.g.
374
+ slicing to the first two values before building a 2-column DataFrame from
375
+ `geometry.coords`). This altitude data doubles as a genuinely useful
376
+ fine-grained elevation profile along the river, denser than anything
377
+ derivable from the 27 gauge points alone (`BDTopoHydroLoader.get_elevation_profile`).
378
+
379
+ **The bΓ©toire finding**: two stations in the roster are explicitly named
380
+ *"[amont bΓ©toire]"* and *"[aval bΓ©toire]"* in Hub'Eau's own site names β€”
381
+ *bΓ©toire* being the Normandy dialect term for a karst swallow-hole. That's
382
+ independent, deliberate naming from the data provider, not a guess. It's the
383
+ strongest evidence in this project for a real losing reach on La Risle around
384
+ Grosley-sur-Risle/Ajou (`H605641101` β†’ `H605641201`), even though the BD TOPO
385
+ karst layer doesn't currently confirm it (see the provisional-attribute note
386
+ above). `build_surface_edges`'s `known_losing_reaches` parameter exists
387
+ specifically for this β€” the current recommendation is to flag all three edges
388
+ spanning that stretch as `verified_continuous=False`, not just guess at one.
389
+
390
+ Also worth knowing: filtering the 30,045 tronΓ§ons down to a named river and
391
+ building a graph from their endpoints does **not** give one connected line.
392
+ For "Risle," 1,195 name-matched tronΓ§ons split into 132 disconnected
393
+ components; the extraction keeps only the largest. That's a real topology gap
394
+ in the source data (tile boundaries, tributaries sharing a base name without
395
+ literally connecting), not a bug in the graph-walking code.
396
+
397
+ ### 3.8 Centerline generation
398
+
399
+ `centerlines/eure_centerline.csv` and `centerlines/risle_centerline.csv` β€” the
400
+ geometry `build_surface_edges` orders stations against β€” are generated by
401
+ `scripts/analyze_bdtopo_hydro.py --export-centerline`. It filters
402
+ `troncon_hydrographique.geojson` (Β§3.7) down to the named river, builds a
403
+ graph from the tronΓ§on endpoints, and walks the longest path through it via
404
+ double-BFS shortest-path to get one continuous, correctly-ordered sequence of
405
+ real coordinates. This is the accurate method: real BD TOPO vector geometry
406
+ snaps stations to within 0.05 km on average.
407
+
408
+ `scripts/extract_river_centerline.py` is a separate, standalone technique for
409
+ deriving a centerline directly from a traced map image, for a river or region
410
+ without BD TOPO coverage: color-threshold the image to isolate a traced route,
411
+ skeletonize it, walk the end-to-end path the same double-BFS way, then
412
+ georeference by fitting a least-squares affine transform from a handful of
413
+ manually-read reference-point pixel positions to their known coordinates.
414
+ This produces a reliable *shape*, but the **absolute position** is only as
415
+ good as the georeferencing step β€” residuals at the reference points run to a
416
+ few kilometers with a handful of manually-read points, giving roughly a 0.88
417
+ km average snap distance rather than 0.05 km. It's the fallback when a real
418
+ vector source isn't available, not the method used for the current
419
+ `centerlines/` files.
420
+
421
  ---
422
+
423
+ ## 4. Applications
424
+
425
+ Click-to-explore UI over the river network (`src/app.py`, Streamlit): pick a
426
+ river, click (or slide) along its course, see interpolated elevation,
427
+ estimated groundwater level, and β€” for whichever real gauge is nearest that
428
+ point β€” water level, discharge, and rating-curve plots pulled directly from
429
+ `HydrometricLoader`'s own plotting methods rather than reimplemented.
430
+
431
+ Click support uses Streamlit's native chart-selection
432
+ (`st.plotly_chart(..., on_select="rerun")`, requires `plotly` alongside
433
+ `streamlit`), not a third-party click-handling package. The click handler and
434
+ the position slider share a single source of truth by design: Streamlit only
435
+ honors a slider's `value=` argument the first time that widget is created, and
436
+ on every later rerun returns whatever's stored under that widget's own
437
+ session-state key β€” so the click handler writes directly into the slider's
438
+ own key before it's instantiated, rather than a separate key, keeping the two
439
+ controls in sync. It also de-duplicates incoming click events, since
440
+ Streamlit's chart-selection state persists across reruns caused by *other*
441
+ widgets and would otherwise re-fire on every unrelated interaction, not just
442
+ the click that caused it.
443
+
444
  ---
445
 
446
+ ## 5. Testing (`src/test_build_graph.py`)
447
+
448
+ Not a unit test suite in the pytest sense β€” a single script that runs the full
449
+ `node_features β†’ build_surface_edges β†’ build_pyg_graph(s)` pipeline against
450
+ real data under `--data-root` and checks the result is actually sane: no
451
+ NaN/Inf in the feature tensor, no accidental cross-basin edges, targets
452
+ genuinely excluded from the model input, edge indices within bounds,
453
+ bidirectional edge count exactly double the directed count, per-basin node
454
+ counts summing to the combined total, standardized features actually landing
455
+ near zero mean / unit variance, and the `known_losing_reaches` flag actually
456
+ taking effect on the edge it's supposed to.
457
+
458
+ It also prints mean/max `snap_distance_km` per basin against whatever
459
+ centerline is currently in `centerlines/` β€” this is the number that would
460
+ catch "one basin got a real BD TOPO centerline and the other is still on the
461
+ old digitized approximation" without anyone having to notice by eye. As of the
462
+ last run, that threshold is deliberately loose (2 km) so it won't hard-fail on
463
+ a legitimately-imperfect-but-usable centerline; it's a reported number to
464
+ watch, not yet an enforced standard. Worth tightening once both basins are on
465
+ real geometry.
466
+
467
+ Exits 0 on a clean pass, 1 otherwise, so it's usable as a pre-commit or CI
468
+ gate if that's ever set up.
469
+
470
+ ---
471
+
472
+ ## 6. Known limitations and open questions
473
+
474
+ - **Each basin is modeled as a single chain, not a branching network.** Tributaries
475
+ aren't represented. Fixing this means pulling BD TOPO's confluence-node
476
+ layer and reworking `build_surface_edges`'s core assumption, not a small
477
+ patch.
478
+ - **The karst losing-reach flag is based on naming evidence, not a confirmed
479
+ BD TOPO classification.** The provisional state of the `Nature` attribute
480
+ means this may firm up (or not) as IGN's data matures β€” it's not something
481
+ this project can resolve unilaterally.
482
+ - **Catchment area exists in two incompatible forms** (Hub'Eau cumulative vs.
483
+ BD TOPO incremental) and nothing currently derives a true independent
484
+ cumulative catchment from BD TOPO alone by summing incremental polygons
485
+ upstream of each gauge. Doable, not done.
486
+ - **13 of 27 stations have some hydrometric data; 8 have discharge
487
+ specifically.** Any model trained on discharge as a target has a real,
488
+ uneven gauge-density problem to contend with, not just a "some nodes are
489
+ unlabeled" abstraction.
490
+ - **No true soil or permeability dataset.** IDPR is a tendency index, useful
491
+ but not a substitute.
492
+ - **The groundwater-well BDLISA aquifer-unit field is unused.** If a
493
+ subsurface connectivity edge is ever justified with real evidence rather
494
+ than proximity, this is the first place to look.
495
+
496
+ ---
497
+
498
+ ## 7. Running things
499
+
500
+ Data acquisition (from repo root, in roughly dependency order):
501
+
502
+ ```bash
503
+ python -m scripts.download_hubeau
504
+ python -m scripts.download_elevation
505
+ python -m scripts.download_era5_full # slow; download_era5_sample.py first if just testing
506
+ python -m scripts.extract_era5
507
+ python -m scripts.download_catchment_area
508
+ python -m scripts.download_bdtopo_hydro --check # verify typeNames before the real pull
509
+ python -m scripts.download_bdtopo_hydro
510
+ ```
511
+
512
+ Validate the graph pipeline against whatever's actually in `datasets/`:
513
+
514
+ ```bash
515
+ python -m src.test_build_graph --data-root datasets
516
+ ```
517
+
518
+ Run the explorer:
519
+
520
+ ```bash
521
+ streamlit run src/app.py -- --data-root datasets
522
+ ```
datasets/ADES/ADES_data_fetching.py ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ import pandas as pd
3
+ import geopandas as gpd
4
+ from shapely.geometry import Point
5
+ from tqdm import tqdm
6
+
7
+ # Departments intersecting the study area
8
+ departments = ["27", "61", "76"]
9
+
10
+ url = "https://hubeau.eaufrance.fr/api/v1/niveaux_nappes/stations"
11
+
12
+ stations = []
13
+
14
+ for dep in departments:
15
+
16
+ params = {
17
+ "code_departement": dep,
18
+ "size": 20000,
19
+ "format": "json"
20
+ }
21
+
22
+ r = requests.get(url, params=params)
23
+
24
+ if r.status_code == 200:
25
+ stations.extend(r.json()["data"])
26
+
27
+ stations = pd.DataFrame(stations)
28
+
29
+ print(f"{len(stations)} stations downloaded.")
30
+
31
+ print(stations.columns)
32
+
33
+ stations = gpd.GeoDataFrame(
34
+ stations.drop(columns="geometry", errors="ignore"),
35
+ geometry=gpd.points_from_xy(
36
+ stations["x"],
37
+ stations["y"]
38
+ ),
39
+ crs="EPSG:4326"
40
+ )
41
+
42
+
43
+ # Watershed Merging
44
+
45
+ # Read shapefiles
46
+ risle = gpd.read_file("data/Watershed_Risle.shp")
47
+ eure = gpd.read_file("data/Watershed_Eure.shp")
48
+
49
+ # Same CRS
50
+ eure = eure.to_crs(risle.crs)
51
+
52
+ # Combine
53
+ watersheds = pd.concat([risle, eure], ignore_index=True)
54
+ watersheds = gpd.GeoDataFrame(watersheds, crs=risle.crs)
55
+
56
+ # Create one merged geometry
57
+ watershed = gpd.GeoDataFrame(
58
+ geometry=[watersheds.unary_union],
59
+ crs=watersheds.crs
60
+ )
61
+
62
+ # Convert to station CRS
63
+ watershed = watershed.to_crs("EPSG:2154")
64
+ stations = stations.to_crs("EPSG:2154")
65
+
66
+ print(stations.total_bounds)
67
+ print(watershed.total_bounds)
68
+
69
+
70
+
71
+ stations_clip = gpd.clip(stations, watershed)
72
+
73
+ print(f"Total stations downloaded: {len(stations)}")
74
+ print(f"Stations inside Risle + Eure watersheds: {len(stations_clip)}")
75
+
76
+ watershed.to_file(
77
+ "output/shapefile/Risle_Eure_Watershed.gpkg",
78
+ driver="GPKG"
79
+ )
80
+
81
+ watershed.to_file(
82
+ "output/shapefile/Risle_Eure_Watershed.shp"
83
+ )
84
+
85
+
86
+ # Save station list
87
+
88
+ stations_clip.to_file(
89
+ "output/shapefile/groundwater_stations.gpkg",
90
+ driver="GPKG"
91
+ )
92
+
93
+ stations_clip.to_file(
94
+ "output/shapefile/groundwater_stations.shp"
95
+ )
96
+
97
+ stations_clip.drop(columns="geometry").to_csv(
98
+ "output/csv/groundwater_stations.csv",
99
+ index=False
100
+ )
101
+
102
+ # Download ground water levels
103
+ #levels_all = []
104
+
105
+ #for code in tqdm(stations_clip["code_bss"]):
106
+ #
107
+ # url = "https://hubeau.eaufrance.fr/api/v1/niveaux_nappes/chroniques"
108
+ #
109
+ # params = {
110
+ # "code_bss": code,
111
+ # "format": "json",
112
+ # "size": 20000
113
+ # }
114
+ #
115
+ # r = requests.get(url, params=params)
116
+ #
117
+ # if r.status_code == 200:
118
+ # data = r.json().get("data", [])
119
+ # if data:
120
+ # df = pd.DataFrame(data)
121
+ # df["code_bss"] = code
122
+ # levels_all.append(df)
123
+
124
+ ## Combine
125
+ #levels_df = pd.concat(levels_all, ignore_index=True)
126
+
127
+ ## Save
128
+ #levels_df.to_csv("output/csv/groundwater_levels_watershed.csv", index=False)
129
+
130
+ #print("Groundwater levels downloaded:", len(levels_df))
131
+
132
+ # Download groundwater quality
133
+ quality_all = []
134
+
135
+ for code in tqdm(stations_clip["code_bss"]):
136
+
137
+ url = "https://hubeau.eaufrance.fr/api/v1/qualite_nappes/analyses"
138
+
139
+ params = {
140
+ "bss_id": code,
141
+ "format": "json",
142
+ "size": 20000
143
+ }
144
+
145
+ r = requests.get(url, params=params)
146
+
147
+ if r.status_code == 200:
148
+ data = r.json().get("data", [])
149
+ if data:
150
+ df = pd.DataFrame(data)
151
+ df["code_bss"] = code
152
+ quality_all.append(df)
153
+
154
+ quality_df = pd.concat(quality_all, ignore_index=True)
155
+
156
+ quality_df.to_csv("output/csv/groundwater_quality_watershed.csv", index=False)
157
+
158
+ print("Groundwater quality records:", len(quality_df))
datasets/ADES/groundwater_levels_watershed.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:87e2a5e7a87676bd7caa4d80ecd8c88849c2192a9444319c9ddf64d8746d891e
3
+ size 74555439
datasets/ADES/groundwater_stations.csv ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ code_bss,urn_bss,date_debut_mesure,date_fin_mesure,code_commune_insee,nom_commune,x,y,codes_bdlisa,urns_bdlisa,bss_id,altitude_station,nb_mesures_piezo,code_departement,nom_departement,libelle_pe,profondeur_investigation,codes_masse_eau_edl,noms_masse_eau_edl,urns_masse_eau_edl,date_maj
2
+ 02532X0012/F1,http://services.ades.eaufrance.fr/pointeau/02532X0012/F1,1988-01-18,2000-01-13,61242,Le Mage,0.830353365,48.537604015,,[],BSS000TTRG,231.0,137,61,Orne,,38.0,,,[],Fri Jun 28 07:31:38 CEST 2024
3
+ 02532X0007/F,http://services.ades.eaufrance.fr/pointeau/02532X0007/F,1987-01-26,1987-09-11,61230,Longny les Villages,0.807853497,48.547016865,,[],BSS000TTRB,235.0,9,61,Orne,,55.0,,,[],Fri Jun 28 07:31:38 CEST 2024
4
+ BSS002PTKW/SR1,http://services.ades.eaufrance.fr/pointeau/BSS002PTKW/SR1,2016-04-28,2026-01-05,61230,Longny les Villages,0.852492411,48.572531639,['123AC01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/123AC01.pdf'],BSS002PTKW,266.0,3538,61,Orne,,42.0,,,[],Wed Dec 11 22:13:50 CET 2024
5
+ 02155X1040/F,http://services.ades.eaufrance.fr/pointeau/02155X1040/F,1999-03-25,2026-01-05,61429,Charencey,0.72928814,48.624381056,['123AC01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/123AC01.pdf'],BSS000RFVG,230.0,9412,61,Orne,La bourgoiserie,67.0,['GG081'],['Sables et gres du Cenomanien sarthois libres'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/GG081'],Wed Dec 04 14:26:33 CET 2024
6
+ 02142X0005/S1,http://services.ades.eaufrance.fr/pointeau/02142X0005/S1,1974-01-31,1976-03-17,61389,Sainte-Gauburge-Sainte-Colombe,0.452987737,48.710522474,,[],BSS000RERG,250.0,21,61,Orne,,21.5,,,[],Fri Jun 28 07:31:38 CEST 2024
7
+ 01785X0011/S1,http://services.ades.eaufrance.fr/pointeau/01785X0011/S1,1974-01-30,1975-12-23,61385,Saint-Evroult-de-Montfort,0.366094021,48.811152891,,[],BSS000MRJL,285.0,19,61,Orne,,19.35,,,[],Fri Jun 28 07:31:38 CEST 2024
8
+ 01788X0049/PZ5,http://services.ades.eaufrance.fr/pointeau/01788X0049/PZ5,2013-11-28,2016-08-18,27502,Rugles,0.707840313,48.808532028,,[],BSS000MRQG,181.94,995,27,Eure,,15.0,,,[],Fri Jun 28 07:31:38 CEST 2024
9
+ 01795X0011/S1,http://services.ades.eaufrance.fr/pointeau/01795X0011/S1,1972-11-09,2023-09-21,27069,Bois-Arnault,0.747209827,48.824862061,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000MRYC,205.0,6031,27,Eure,Puits Les Siaulles (Bois-Arnault) - 27,32.0,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Tue Sep 23 19:34:49 CEST 2025
10
+ 01796X0020/P,http://services.ades.eaufrance.fr/pointeau/01796X0020/P,2022-07-27,2026-07-04,27054,BΓ©mΓ©court,0.813455882,48.829452768,,[],BSS000MRZZ,185.0,1439,27,Eure,,23.0,,,[],Fri Jun 28 07:31:38 CEST 2024
11
+ 01791X0002/P,http://services.ades.eaufrance.fr/pointeau/01791X0002/P,2013-11-28,2016-08-18,27427,Neaufles-Auvergny,0.726099,48.874798,,[],BSS000MRRG,174.0,995,27,Eure,,30.0,,,[],Fri Jun 28 07:31:38 CEST 2024
12
+ 01784X0024/P,http://services.ades.eaufrance.fr/pointeau/01784X0024/P,2013-11-28,2016-08-18,27075,Bois-Normand-près-Lyre,0.695379051,48.898940517,,[],BSS000MRHF,198.0,956,27,Eure,,37.0,,,[],Fri Jun 28 07:31:38 CEST 2024
13
+ 01792X0010/P,http://services.ades.eaufrance.fr/pointeau/01792X0010/P,2013-11-28,2016-08-18,27565,Le Lesme,0.840012,48.912698,,[],BSS000MRTG,178.5,995,27,Eure,,28.85,,,[],Fri Jun 28 07:31:38 CEST 2024
14
+ 01784X0005/S1,http://services.ades.eaufrance.fr/pointeau/01784X0005/S1,1972-11-07,1981-12-21,27068,Bois-Anzeray,0.68803551,48.92077842,,[],BSS000MRGL,198.0,92,27,Eure,,36.6,,,[],Fri Jun 28 07:31:38 CEST 2024
15
+ 01792X0005/S1,http://services.ades.eaufrance.fr/pointeau/01792X0005/S1,1972-11-09,1984-11-29,27242,Le Fidelaire,0.83188,48.955478,,[],BSS000MRTB,168.0,133,27,Eure,,40.7,,,[],Fri Jun 28 07:31:38 CEST 2024
16
+ 01495X0013/P,http://services.ades.eaufrance.fr/pointeau/01495X0013/P,2013-11-28,2016-08-18,27049,Mesnil-en-Ouche,0.74118,48.970609,,[],BSS000LBPP,178.0,995,27,Eure,,33.3,,,[],Fri Jun 28 07:31:38 CEST 2024
17
+ 01495X0067/F1,http://services.ades.eaufrance.fr/pointeau/01495X0067/F1,2013-11-28,2017-07-11,27049,Mesnil-en-Ouche,0.774535905,48.973418753,,[],BSS000LBRL,129.69,1309,27,Eure,,32.27,,,[],Fri Jun 28 07:31:38 CEST 2024
18
+ 02144X0005/S1,http://services.ades.eaufrance.fr/pointeau/02144X0005/S1,1974-01-31,2026-07-04,61456,Saint-Sulpice-sur-Risle,0.658047665,48.766362664,['123BW01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/123BW01.pdf'],BSS000REWL,230.0,10774,61,Orne,Puits du ChΓ’teau du Souchey (l'Aigle) - 61,29.8,['HG212'],['Craie du Lieuvin-Ouche - bassin versant de la Risle'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG212'],Fri Dec 06 23:13:34 CET 2024
19
+ 01788X0012/P,http://services.ades.eaufrance.fr/pointeau/01788X0012/P,1972-11-07,1984-11-29,27359,Juignettes,0.642436631,48.855171449,,[],BSS000MRNU,218.0,125,27,Eure,,17.35,,,[],Fri Jun 28 07:31:38 CEST 2024
20
+ 01487X0001/S1,http://services.ades.eaufrance.fr/pointeau/01487X0001/S1,1982-01-28,2026-07-03,27049,Mesnil-en-Ouche,0.585971387,48.963156874,['121AW30'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AW30.pdf'],BSS000LBFR,199.0,7845,27,Eure,Puits ChÒteau d'eau (la Roussière) - 27,29.0,['HG212'],['Craie du Lieuvin-Ouche - bassin versant de la Risle'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG212'],Mon Sep 23 20:25:44 CEST 2024
21
+ 01486X0013/P,http://services.ades.eaufrance.fr/pointeau/01486X0013/P,1972-11-07,1976-03-08,27514,Saint-Aubin-du-Thenney,0.489017767,49.021904842,,[],BSS000LBEK,182.0,36,27,Eure,,31.74,,,[],Fri Jun 28 07:31:38 CEST 2024
22
+ 01484X0002/P,http://services.ades.eaufrance.fr/pointeau/01484X0002/P,1972-11-07,1981-12-21,27523,Saint-Clair-d'Arcey,0.663997278,49.065071526,,[],BSS000LBAE,162.0,97,27,Eure,,63.27,,,[],Fri Jun 28 07:31:38 CEST 2024
23
+ 01482X0009/S1,http://services.ades.eaufrance.fr/pointeau/01482X0009/S1,1972-11-07,1984-11-29,27460,Plainville,0.511204226,49.08792668,,[],BSS000LAUD,170.0,135,27,Eure,,42.1,,,[],Fri Jun 28 07:31:38 CEST 2024
24
+ 01483X0011/S1,http://services.ades.eaufrance.fr/pointeau/01483X0011/S1,1972-11-07,1981-12-18,27056,Bernay,0.562260863,49.115443807,,[],BSS000LAWS,171.0,102,27,Eure,,40.14,,,[],Fri Jun 28 07:31:38 CEST 2024
25
+ 01227X0022/P,http://services.ades.eaufrance.fr/pointeau/01227X0022/P,2001-04-05,2026-07-04,27079,Boissy-Lamberville,0.57749099,49.163125496,['121AW30'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AW30.pdf'],BSS000JGKA,169.0,7997,27,Eure,Puits de Boissy Lamberville (Boissy-Lamberville) - 27,19.15,['HG212'],['Craie du Lieuvin-Ouche - bassin versant de la Risle'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG212'],Tue Aug 05 20:51:33 CEST 2025
26
+ 01227X0038/S22,http://services.ades.eaufrance.fr/pointeau/01227X0038/S22,1982-02-16,2023-09-06,27367,Lieurey,0.538445122,49.223631521,['123BW01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/123BW01.pdf'],BSS000JGKS,149.0,8138,27,Eure,Forage de Lieurey (Lieurey) - 27,101.0,['HG212'],['Craie du Lieuvin-Ouche - bassin versant de la Risle'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG212'],Tue Sep 23 19:41:29 CEST 2025
27
+ 01786X0001/S1,http://services.ades.eaufrance.fr/pointeau/01786X0001/S1,1974-01-31,2000-01-13,61167,La FertΓ©-en-Ouche,0.448642005,48.861125488,,[],BSS000MRKF,250.0,284,61,Orne,,32.55,,,[],Fri Jun 28 07:31:38 CEST 2024
28
+ 01482X0055/P,http://services.ades.eaufrance.fr/pointeau/01482X0055/P,2003-01-21,2026-05-19,27564,Saint-Mards-de-Fresne,0.465573501,49.077212428,['121AW01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AW01.pdf'],BSS000LAWB,182.5,8062,27,Eure,PUITS LE CHESNEY (SAINT-MARDS-DE-FRESNE) - 27,18.7,['HG212'],['Craie du Lieuvin-Ouche - bassin versant de la Risle'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG212'],Mon Dec 01 18:41:54 CET 2025
29
+ 00985X0040/S1,http://services.ades.eaufrance.fr/pointeau/00985X0040/S1,1971-01-19,2025-04-16,27561,Saint-Maclou,0.411508411,49.360505521,['123BW01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/123BW01.pdf'],BSS000GKSW,120.0,6595,27,Eure,Puits du ChΓ’teau (Saint-Maclou) - 27,39.8,['HG212'],['Craie du Lieuvin-Ouche - bassin versant de la Risle'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG212'],Tue Sep 24 20:10:22 CEST 2024
30
+ 00986X0069/S1,http://services.ades.eaufrance.fr/pointeau/00986X0069/S1,1971-01-26,1980-10-27,27655,Tourville-sur-Pont-Audemer,0.530532488,49.327504978,,[],BSS000GKXL,105.0,104,27,Eure,,69.35,,,[],Fri Jun 28 07:31:38 CEST 2024
31
+ 00987X0010/S1,http://services.ades.eaufrance.fr/pointeau/00987X0010/S1,1971-01-26,1976-03-08,27385,Manneville-sur-Risle,0.554346718,49.353961325,,[],BSS000GLBC,94.0,54,27,Eure,,95.0,,,[],Fri Jun 28 07:31:38 CEST 2024
32
+ 00987X0009/S1,http://services.ades.eaufrance.fr/pointeau/00987X0009/S1,1971-01-26,2026-07-02,27263,Le Perrey,0.580959003,49.380233794,['121AW01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AW01.pdf'],BSS000GLBB,112.0,10006,27,Eure,Puits ChΓ’teau du Hamel (Fourmetot) - 27,67.5,['HG212'],['Craie du Lieuvin-Ouche - bassin versant de la Risle'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG212'],Mon Sep 23 22:50:13 CEST 2024
33
+ 02155X2001/P,http://services.ades.eaufrance.fr/pointeau/02155X2001/P,2013-03-21,2026-04-01,27155,Chennebrun,0.781516532,48.679507786,,[],BSS000RFVK,197.0,1310,27,Eure,,31.0,,,[],Fri Jun 28 07:31:38 CEST 2024
34
+ 02152X0051/P,http://services.ades.eaufrance.fr/pointeau/02152X0051/P,2007-02-23,2026-07-03,27521,Saint-Christophe-sur-Avre,0.816238041,48.700275823,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000RFLV,198.0,6719,27,Eure,Puits Mairie (Saint-Christophe-sur-Avre) - 27,38.2,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Wed Sep 25 12:40:12 CEST 2024
35
+ 02152X0002/P,http://services.ades.eaufrance.fr/pointeau/02152X0002/P,2016-05-25,2026-04-01,27521,Saint-Christophe-sur-Avre,0.816264023,48.700335028,['121AS30'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS30.pdf'],BSS000RFJU,188.0,115,27,Eure,,26.3,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Fri Jun 28 07:31:38 CEST 2024
36
+ 02152X0031/P,http://services.ades.eaufrance.fr/pointeau/02152X0031/P,2015-07-24,2026-04-01,27610,Saint-Victor-sur-Avre,0.854449841,48.702517981,,[],BSS000RFKZ,200.0,124,27,Eure,,42.65,,,[],Fri Jun 28 07:31:38 CEST 2024
37
+ 02151X0030/S1,http://services.ades.eaufrance.fr/pointeau/02151X0030/S1,1982-02-02,2016-08-31,27038,Les Barils,0.802934996,48.725041118,,[],BSS000RFHT,202.0,714,27,Eure,,22.6,,,[],Fri Jun 28 07:31:38 CEST 2024
38
+ 02151X0006/P,http://services.ades.eaufrance.fr/pointeau/02151X0006/P,2013-11-06,2026-04-01,27108,Bourth,0.801471889,48.740388423,,[],BSS000RFGT,210.0,133,27,Eure,,21.9,,,[],Fri Jun 28 07:31:38 CEST 2024
39
+ 02151X0008/P,http://services.ades.eaufrance.fr/pointeau/02151X0008/P,2013-03-21,2026-04-01,27108,Bourth,0.796843045,48.755000708,,[],BSS000RFGV,208.0,928,27,Eure,,28.87,,,[],Fri Jun 28 07:31:38 CEST 2024
40
+ 02151X0031/MW1,http://services.ades.eaufrance.fr/pointeau/02151X0031/MW1,2013-11-06,2015-01-28,27108,Bourth,0.782124702,48.766917776,,[],BSS000RFHU,190.0,7,27,Eure,,,,,[],Fri Jun 28 07:31:38 CEST 2024
41
+ 02151X0032/MW2,http://services.ades.eaufrance.fr/pointeau/02151X0032/MW2,2013-11-06,2015-01-28,27108,Bourth,0.78503102,48.767504137,,[],BSS000RFHV,186.0,7,27,Eure,,,,,[],Fri Jun 28 07:31:38 CEST 2024
42
+ 02151X0033/MW3,http://services.ades.eaufrance.fr/pointeau/02151X0033/MW3,2013-11-06,2015-01-28,27108,Bourth,0.78543428,48.767662229,,[],BSS000RFHW,186.0,7,27,Eure,,,,,[],Fri Jun 28 07:31:38 CEST 2024
43
+ 02153X0046/P,http://services.ades.eaufrance.fr/pointeau/02153X0046/P,2015-10-01,2026-04-01,27679,Verneuil d'Avre et d'Iton,0.974506593,48.736421888,,[],BSS000RFPF,163.0,124,27,Eure,,,,,[],Fri Jun 28 07:31:38 CEST 2024
44
+ 02153X0055/PZ4,http://services.ades.eaufrance.fr/pointeau/02153X0055/PZ4,2013-09-05,2026-04-01,27036,BΓ’lines,0.970326001,48.743448699,,[],BSS000RFPQ,157.0,637,27,Eure,,50.0,,,[],Fri Jun 28 07:31:38 CEST 2024
45
+ 02153X0023/S1,http://services.ades.eaufrance.fr/pointeau/02153X0023/S1,1985-04-23,2005-08-31,27036,BΓ’lines,0.967602875,48.753403654,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000RFNG,163.0,2851,27,Eure,,16.0,,,[],Fri Jun 28 07:31:38 CEST 2024
46
+ 02154X0001/F,http://services.ades.eaufrance.fr/pointeau/02154X0001/F,2016-06-01,2026-04-01,27643,Tillières-sur-Avre,1.056359525,48.75807598,"['121AS01', '121AS30']","['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf', 'http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS30.pdf']",BSS000RFRF,135.0,114,27,Eure,,40.2,['HG211'],['Craie altérée du Neubourg-Iton-plaine de Saint-André'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Fri Jun 28 07:31:38 CEST 2024
47
+ 02153X0040/F1,http://services.ades.eaufrance.fr/pointeau/02153X0040/F1,2013-11-06,2015-06-09,27457,Piseux,0.943895883,48.76939577,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000RFNZ,173.0,8,27,Eure,,55.0,,,[],Fri Jun 28 07:31:38 CEST 2024
48
+ 02153X0054/P,http://services.ades.eaufrance.fr/pointeau/02153X0054/P,2013-09-05,2026-04-01,27457,Piseux,0.952677587,48.771201837,,[],BSS000RFPP,177.0,1192,27,Eure,,22.0,,,[],Fri Jun 28 07:31:38 CEST 2024
49
+ 02153X0002/P,http://services.ades.eaufrance.fr/pointeau/02153X0002/P,2013-09-05,2026-04-01,27457,Piseux,0.975275315,48.773517651,['119AE05'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/119AE05.pdf'],BSS000RFMK,168.2,364,27,Eure,,19.4,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Fri Jun 28 07:31:38 CEST 2024
50
+ 02153X0034/F,http://services.ades.eaufrance.fr/pointeau/02153X0034/F,2013-09-05,2023-04-03,27457,Piseux,0.953846447,48.773654317,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000RFNT,179.0,1171,27,Eure,,55.0,,,[],Fri Jun 28 07:31:38 CEST 2024
51
+ 01797X0044/P,http://services.ades.eaufrance.fr/pointeau/01797X0044/P,2013-09-05,2026-04-01,27457,Piseux,0.953756311,48.786694835,,[],BSS000MSDG,168.0,767,27,Eure,,18.77,,,[],Fri Jun 28 07:31:38 CEST 2024
52
+ 01797X0094/P,http://services.ades.eaufrance.fr/pointeau/01797X0094/P,2013-09-06,2026-04-01,27578,Sainte-Marie-d'Attez,0.95479,48.80363,,[],BSS000MSFJ,166.0,766,27,Eure,,12.2,,,[],Fri Jun 28 07:31:38 CEST 2024
53
+ 01798X0036/S1,http://services.ades.eaufrance.fr/pointeau/01798X0036/S1,1972-11-09,1984-11-29,27198,Mesnils-sur-Iton,0.992426731,48.816388455,,[],BSS000MSHA,175.0,126,27,Eure,,28.15,,,[],Fri Jun 28 07:31:38 CEST 2024
54
+ 01796X0028/S1,http://services.ades.eaufrance.fr/pointeau/01796X0028/S1,1972-11-09,1984-11-29,27054,BΓ©mΓ©court,0.873483904,48.854949487,,[],BSS000MSAH,186.0,127,27,Eure,,26.95,,,[],Fri Jun 28 07:31:38 CEST 2024
55
+ 01792X0020/PZ2,http://services.ades.eaufrance.fr/pointeau/01792X0020/PZ2,2003-01-23,2026-07-04,27565,Le Lesme,0.872630829,48.893151651,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000MRTR,155.0,7596,27,Eure,Forage de Sainte Marguerite de l'Autel (Sainte-Marguerite-de-l'Autel) ,30.6,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Mon May 05 19:51:13 CEST 2025
56
+ 01794X0035/S1,http://services.ades.eaufrance.fr/pointeau/01794X0035/S1,1985-04-23,2026-07-04,27436,Nogent-le-Sec,1.026343918,48.920072687,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000MRWS,159.0,11140,27,Eure,Puits Les Grands Gomberts (Nogent-le-Sec) - 27,37.2,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Mon Jun 23 20:50:31 CEST 2025
57
+ 01498X0031/S1,http://services.ades.eaufrance.fr/pointeau/01498X0031/S1,1969-07-10,2026-07-05,27281,Gaudreville-la-Rivière,1.04392487,48.962417631,,[],BSS000LBVX,100.0,4189,27,Eure,,9.55,,,[],Fri Jun 28 07:31:38 CEST 2024
58
+ 01498X0005/SO,http://services.ades.eaufrance.fr/pointeau/01498X0005/SO,2022-07-27,2026-07-03,27287,Glisolles,1.02592822,48.981819906,,[],BSS000LBUV,85.0,1438,27,Eure,,0.0,,,[],Fri Dec 19 18:58:10 CET 2025
59
+ 01493X0001/P,http://services.ades.eaufrance.fr/pointeau/01493X0001/P,1968-12-10,2026-07-04,27298,Graveron-SΓ©merville,0.973304193,49.094539328,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000LBME,138.0,11231,27,Eure,Puits Ferme du ChΓ’teau (Graveron-Semerville) - 27,43.35,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Mon Sep 23 20:34:56 CEST 2024
60
+ 01237X0004/S1,http://services.ades.eaufrance.fr/pointeau/01237X0004/S1,1971-01-27,1984-11-29,27389,Marbeuf,0.966545269,49.157680019,,[],BSS000JKJG,141.0,151,27,Eure,,71.8,,,[],Fri Jun 28 07:31:38 CEST 2024
61
+ 01237X0012/S1,http://services.ades.eaufrance.fr/pointeau/01237X0012/S1,1971-01-27,1972-07-25,27011,Amfreville-Saint-Amand,0.931937141,49.212486229,,[],BSS000JKJQ,157.0,18,27,Eure,,52.7,,,[],Fri Jun 28 07:31:38 CEST 2024
62
+ 01232X0006/P,http://services.ades.eaufrance.fr/pointeau/01232X0006/P,2006-03-02,2026-07-04,27320,La Haye-du-Theil,0.87606716,49.23438244,['123BW01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/123BW01.pdf'],BSS000JGQF,160.0,6814,27,Eure,Puits de la Haye du Theil (la Haye-du-Theil) - 27,50.2,['HG212'],['Craie du Lieuvin-Ouche - bassin versant de la Risle'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG212'],Thu Oct 03 21:33:02 CEST 2024
63
+ 01495X0063/PZ1,http://services.ades.eaufrance.fr/pointeau/01495X0063/PZ1,2013-11-28,2020-02-25,27049,Mesnil-en-Ouche,0.788512047,48.986917574,,[],BSS000LBRG,130.0,2281,27,Eure,Puits de Mancelles (Ajou - 27),9.33,,,[],Fri Jun 28 07:31:38 CEST 2024
64
+ 01495X0064/PZ2,http://services.ades.eaufrance.fr/pointeau/01495X0064/PZ2,2013-11-28,2020-02-25,27049,Mesnil-en-Ouche,0.788524354,48.986962674,,[],BSS000LBRH,130.0,2281,27,Eure,,20.6,,,[],Fri Jun 28 07:31:38 CEST 2024
65
+ 01496X0011/S1,http://services.ades.eaufrance.fr/pointeau/01496X0011/S1,1972-11-08,1976-05-11,27162,Collandres-Quincarnon,0.846685,48.99336,,[],BSS000LBSC,158.0,40,27,Eure,,41.4,,,[],Fri Jun 28 07:31:38 CEST 2024
66
+ 01495X0066/P,http://services.ades.eaufrance.fr/pointeau/01495X0066/P,2013-11-28,2016-08-18,27300,Grosley-sur-Risle,0.802739402,49.045486931,,[],BSS000LBRK,99.0,995,27,Eure,Puits de Grosley-sur-Risle (Grosley-sur-Risle - 27),6.3,,,[],Fri Jun 28 07:31:38 CEST 2024
67
+ 01492X0012/S1,http://services.ades.eaufrance.fr/pointeau/01492X0012/S1,1972-11-08,2016-08-18,27466,Le Plessis-Sainte-Opportune,0.835938,49.058272,,[],BSS000LBLW,151.0,959,27,Eure,CHATEAU DE ST LEGER,33.1,,,[],Fri Jun 28 07:31:38 CEST 2024
68
+ 01491X0016/SO,http://services.ades.eaufrance.fr/pointeau/01491X0016/SO,2014-09-04,2017-07-11,27051,Beaumont-le-Roger,0.790233623,49.061872751,,[],BSS000LBJE,98.0,701,27,Eure,,,,,[],Fri Jun 28 07:31:38 CEST 2024
69
+ 01491X0009/S1,http://services.ades.eaufrance.fr/pointeau/01491X0009/S1,1972-11-08,2026-07-03,27290,Goupil-Othon,0.769762038,49.114406798,['121AW01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AW01.pdf'],BSS000LBHX,150.0,10617,27,Eure,Puits Ferme de la Pommeraie (Goupillières) - 27,47.4,['HG212'],['Craie du Lieuvin-Ouche - bassin versant de la Risle'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG212'],Mon Sep 23 21:07:32 CEST 2024
70
+ 01235X0048/S1,http://services.ades.eaufrance.fr/pointeau/01235X0048/S1,1985-09-24,2002-12-09,27425,Nassandres sur Risle,0.716682371,49.157574837,['924AC01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/924AC01.pdf'],BSS000JKGZ,61.0,3123,27,Eure,,6.2,,,[],Fri Jun 28 07:31:38 CEST 2024
71
+ 01235X0006/S1,http://services.ades.eaufrance.fr/pointeau/01235X0006/S1,1971-01-27,1973-12-11,27311,Harcourt,0.756969871,49.171448189,,[],BSS000JKFF,138.0,31,27,Eure,,53.5,,,[],Fri Jun 28 07:31:38 CEST 2024
72
+ 01236X0008/S1,http://services.ades.eaufrance.fr/pointeau/01236X0008/S1,1971-01-26,2006-02-24,27302,Le Bosc du Theil,0.846921461,49.227245985,['121AW01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AW01.pdf'],BSS000JKHQ,147.0,2898,27,Eure,,51.1,,,[],Fri Jun 28 07:31:38 CEST 2024
73
+ 01245X0010/S1,http://services.ades.eaufrance.fr/pointeau/01245X0010/S1,1967-10-12,2026-07-04,27412,Terres de Bord,1.089270969,49.224047153,"['080AA58', '121AZ01', '119AE07']","['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/080AA58.pdf', 'http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AZ01.pdf', 'http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/119AE07.pdf']",BSS000JNAH,136.0,11690,27,Eure,PUITS ECROSVILLE (MONTAURE) - 27,42.4,['HG220'],"[""Craie altΓ©rΓ©e de l'estuaire de la Seine hors pointe de Caux""]",['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG220'],Mon Jun 23 22:57:35 CEST 2025
74
+ BSS003CLUO/X,http://services.ades.eaufrance.fr/pointeau/BSS003CLUO/X,2018-11-23,2023-12-06,27188,Criquebeuf-sur-Seine,1.110748,49.285246,['924AA01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/924AA01.pdf'],BSS003CLUO,57.75,1780,27,Eure,PIEZO AMONT,62.0,,,[],Fri Oct 18 22:45:29 CEST 2024
75
+ 01241X0357/F,http://services.ades.eaufrance.fr/pointeau/01241X0357/F,2018-11-19,2023-12-07,27188,Criquebeuf-sur-Seine,1.104868973,49.301520559,"['040AB75', '121AZ01']","['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/040AB75.pdf', 'http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AZ01.pdf']",BSS000JLBQ,24.0,1844,27,Eure,,17.0,['HG220'],"[""Craie altΓ©rΓ©e de l'estuaire de la Seine hors pointe de Caux""]",['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG220'],Fri Oct 18 20:50:13 CEST 2024
76
+ BSS003HDQA/X,http://services.ades.eaufrance.fr/pointeau/BSS003HDQA/X,2019-09-05,2026-07-03,27090,Bosroumois,0.898249094,49.286552893,['121AU'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AU.pdf'],BSS003HDQA,160.92,2494,27,Eure,PZ2,117.0,['HG220'],"[""Craie altΓ©rΓ©e de l'estuaire de la Seine hors pointe de Caux""]",['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG220'],Tue Sep 24 13:55:00 CEST 2024
77
+ 01224X0014/S1,http://services.ades.eaufrance.fr/pointeau/01224X0014/S1,1972-11-08,1984-11-29,27468,Pont-Authou,0.701825472,49.24596246,,[],BSS000JGAU,65.0,134,27,Eure,,19.8,,,[],Fri Jun 28 07:31:38 CEST 2024
78
+ 00995X0003/S1,http://services.ades.eaufrance.fr/pointeau/00995X0003/S1,1967-09-22,1978-10-25,27102,Bouquetot,0.763507647,49.353767078,,[],BSS000GNNN,135.0,324,27,Eure,,74.22,,,[],Fri Jun 28 07:31:38 CEST 2024
79
+ 02163X2004/P,http://services.ades.eaufrance.fr/pointeau/02163X2004/P,2015-11-20,2026-04-01,27423,Muzy,1.330715358,48.776075971,,[],BSS000RGMG,105.0,123,27,Eure,,27.3,,,[],Fri Jun 28 07:31:38 CEST 2024
80
+ 01807X0023/P,http://services.ades.eaufrance.fr/pointeau/01807X0023/P,2015-12-01,2026-04-01,27423,Muzy,1.345107787,48.784476137,,[],BSS000MTBN,110.0,122,27,Eure,,34.4,,,[],Fri Jun 28 07:31:38 CEST 2024
81
+ 01807X0059/P,http://services.ades.eaufrance.fr/pointeau/01807X0059/P,2015-07-23,2026-04-01,27181,Courdemanche,1.269163896,48.800892937,,[],BSS000MTDA,137.0,125,27,Eure,,20.0,,,[],Fri Jun 28 07:31:38 CEST 2024
82
+ 01807X0051/S1,http://services.ades.eaufrance.fr/pointeau/01807X0051/S1,1985-05-28,2026-07-04,27391,Marcilly-sur-Eure,1.342297655,48.823719553,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000MTCS,75.0,10862,27,Eure,PUITS DE L'ANCIENNE GARE (MARCILLY-SUR-EURE),12.0,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Mon Sep 23 19:38:51 CEST 2024
83
+ 01805X0036/S1,http://services.ades.eaufrance.fr/pointeau/01805X0036/S1,1982-01-26,2026-07-04,27411,Moisville,1.165839057,48.83983924,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000MSYC,153.0,11378,27,Eure,Puits Mairie Ecole (Moisville) - 27,18.0,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Sat Jun 21 20:19:20 CEST 2025
84
+ 01807X0001/S1,http://services.ades.eaufrance.fr/pointeau/01807X0001/S1,1972-11-09,1976-03-10,27073,Bois-le-Roi,1.338444312,48.8656293,,[],BSS000MTAQ,133.0,31,27,Eure,,110.0,,,[],Fri Jun 28 07:31:38 CEST 2024
85
+ 01803X0004/P,http://services.ades.eaufrance.fr/pointeau/01803X0004/P,2002-05-29,2026-07-04,27507,Saint-AndrΓ©-de-l'Eure,1.297264849,48.889721586,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000MSPF,136.5,8271,27,Eure,Puits Touvoye (Saint-AndrΓ©-de-l'Eure) - 27,120.0,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Tue Apr 15 22:57:18 CEST 2025
86
+ 01803X0007/S1,http://services.ades.eaufrance.fr/pointeau/01803X0007/S1,1972-11-09,1984-11-29,27277,La Baronnie,1.265760794,48.955356533,,[],BSS000MSPJ,145.0,132,27,Eure,,67.0,,,[],Fri Jun 28 07:31:38 CEST 2024
87
+ 01508X0134/S1,http://services.ades.eaufrance.fr/pointeau/01508X0134/S1,1985-05-24,2000-01-14,27114,Breuilpont,1.409401757,48.963986168,['924AC07'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/924AC07.pdf'],BSS000LDTK,47.0,1930,27,Eure,,4.6,,,[],Fri Jun 28 07:31:38 CEST 2024
88
+ 01508X0133/S1,http://services.ades.eaufrance.fr/pointeau/01508X0133/S1,1985-04-26,2023-10-10,27231,Fains,1.388574729,48.994531044,['040AB11'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/040AB11.pdf'],BSS000LDTJ,43.0,9706,27,Eure,Puits de Fains (Fains) - 27,2.05,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Fri Jun 28 07:31:38 CEST 2024
89
+ 01805X0008/P,http://services.ades.eaufrance.fr/pointeau/01805X0008/P,2015-12-01,2026-04-01,27206,Droisy,1.160337037,48.799626936,,[],BSS000MSWY,147.0,121,27,Eure,,21.8,,,[],Fri Jun 28 07:31:38 CEST 2024
90
+ 01805X0019/P,http://services.ades.eaufrance.fr/pointeau/01805X0019/P,2015-10-01,2026-04-01,27416,Buis-sur-Damville,1.086203267,48.834993519,,[],BSS000MSXK,158.0,123,27,Eure,,33.4,,,[],Fri Jun 28 07:31:38 CEST 2024
91
+ 01801X0010/S1,http://services.ades.eaufrance.fr/pointeau/01801X0010/S1,1985-05-09,2026-07-04,27693,Sylvains-Lès-Moulins,1.086499072,48.881862606,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000MSJQ,132.0,10538,27,Eure,Puits de Coulonges (Sylvains-les-Moulins) - 27,32.0,['HG211'],['Craie altérée du Neubourg-Iton-plaine de Saint-André'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Fri Oct 10 14:25:57 CEST 2025
92
+ 01801X0013/S1,http://services.ades.eaufrance.fr/pointeau/01801X0013/S1,1971-01-08,1978-05-02,27693,Sylvains-Lès-Moulins,1.078231289,48.896964303,,[],BSS000MSJT,128.0,2343,27,Eure,,17.65,,,[],Fri Jun 28 07:31:38 CEST 2024
93
+ 01801X0042/F,http://services.ades.eaufrance.fr/pointeau/01801X0042/F,2022-07-25,2026-07-03,27693,Sylvains-Lès-Moulins,1.089638993,48.919040203,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000MSKY,119.0,1440,27,Eure,,37.5,['HG211'],['Craie altérée du Neubourg-Iton-plaine de Saint-André'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Fri Jun 28 07:31:38 CEST 2024
94
+ 01801X0004/S1,http://services.ades.eaufrance.fr/pointeau/01801X0004/S1,1968-02-27,1978-10-26,27301,GrossΕ“uvre,1.161142159,48.953800384,,[],BSS000MSJJ,138.5,117,27,Eure,,42.25,,,[],Sun Apr 12 13:00:02 CEST 2026
95
+ 01501X0046/S1,http://services.ades.eaufrance.fr/pointeau/01501X0046/S1,1985-05-10,1985-12-13,27439,Normanville,1.150697855,49.078335891,,[],BSS000LBZQ,48.0,8,27,Eure,,4.4,,,[],Fri Jun 28 07:31:38 CEST 2024
96
+ 01494X0004/S1,http://services.ades.eaufrance.fr/pointeau/01494X0004/S1,1968-02-22,1984-11-29,27504,Sacquenville,1.073747163,49.083989626,,[],BSS000LBNH,143.0,184,27,Eure,,127.6,,,[],Fri Jun 28 07:31:38 CEST 2024
97
+ 01245X0016/S1,http://services.ades.eaufrance.fr/pointeau/01245X0016/S1,1968-01-30,1972-07-26,27127,Canappeville,1.118898374,49.15768802,,[],BSS000JNAP,145.0,53,27,Eure,,55.2,,,[],Fri Jun 28 07:31:38 CEST 2024
98
+ 01245X0030/S1,http://services.ades.eaufrance.fr/pointeau/01245X0030/S1,1968-01-30,1981-12-24,27403,Le Mesnil-Jourdain,1.120613701,49.177132849,,[],BSS000JNBD,137.98,154,27,Eure,,61.05,,,[],Fri May 01 07:06:06 CEST 2026
99
+ 01811X2035/S1,http://services.ades.eaufrance.fr/pointeau/01811X2035/S1,1985-05-24,1989-01-28,27278,Garennes-sur-Eure,1.450771854,48.918987646,['924AC07'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/924AC07.pdf'],BSS000MTJZ,57.0,413,27,Eure,,5.8,,,[],Fri Jun 28 07:31:38 CEST 2024
100
+ 01515X2033/S1,http://services.ades.eaufrance.fr/pointeau/01515X2033/S1,1968-12-06,1984-11-29,27696,Villiers-en-DΓ©sΕ“uvre,1.502640162,48.975046439,,[],BSS000LESR,148.0,685,27,Eure,,34.27,,,[],Fri Jun 28 07:31:38 CEST 2024
101
+ 01515X2036/F,http://services.ades.eaufrance.fr/pointeau/01515X2036/F,1993-05-06,1993-05-06,27689,Villegats,1.460860339,48.992990627,,[],BSS000LESU,95.0,1,27,Eure,,112.0,,,[],Fri Jun 28 07:31:38 CEST 2024
102
+ 01515X2015/S1,http://services.ades.eaufrance.fr/pointeau/01515X2015/S1,1968-09-26,2026-07-03,27136,Chaignes,1.445393268,49.014101938,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000LERX,144.0,10979,27,Eure,Puits de Chaignes (Chaignes) - 27,120.8,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Mon Sep 23 20:55:42 CEST 2024
103
+ 01508X0100/P,http://services.ades.eaufrance.fr/pointeau/01508X0100/P,2002-01-21,2026-07-04,27203,Douains,1.430497927,49.040770323,['113AK03'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/113AK03.pdf'],BSS000LDRZ,133.0,6396,27,Eure,PUITS DE DOUAINS (DOUAINS) - 27,34.33,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Thu Oct 03 19:42:36 CEST 2024
104
+ 01506X0016/P1,http://services.ades.eaufrance.fr/pointeau/01506X0016/P1,2001-11-22,2026-07-04,27158,Cierrey,1.249032003,49.003128233,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000LDJZ,130.5,7291,27,Eure,Puits Ferme de la Pommeraie (Cierrey) - 27,71.95,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Mon Sep 23 21:37:11 CEST 2024
105
+ 01506X0013/S1,http://services.ades.eaufrance.fr/pointeau/01506X0013/S1,1968-12-06,2001-10-16,27410,Miserey,1.240227843,49.016901105,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000LDJW,134.0,1954,27,Eure,,77.0,,,[],Fri Jun 28 07:31:38 CEST 2024
106
+ 01508X0006/S1,http://services.ades.eaufrance.fr/pointeau/01508X0006/S1,1977-05-05,2000-01-14,27190,Croisy-sur-Eure,1.347846259,49.030202233,['924AC07'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/924AC07.pdf'],BSS000LDNB,39.0,1880,27,Eure,,2.45,,,[],Fri Jun 28 07:31:38 CEST 2024
107
+ BSS004GCQN/X,http://services.ades.eaufrance.fr/pointeau/BSS004GCQN/X,2024-01-19,2026-07-03,27299,Gravigny,1.161723019,49.057505801,,[],BSS004GCQN,54.49,881,27,Eure,PIΓ‰ZOMÈTRE,30.0,,,[],Fri Jun 28 07:31:38 CEST 2024
108
+ BSS004AFBP/X,http://services.ades.eaufrance.fr/pointeau/BSS004AFBP/X,2022-07-28,2024-01-19,27439,Normanville,1.163554262,49.05835226,,[],BSS004AFBP,52.8,540,27,Eure,,30.0,,,[],Fri Jun 28 07:31:38 CEST 2024
109
+ 01502X0089/F,http://services.ades.eaufrance.fr/pointeau/01502X0089/F,2012-12-20,2026-07-04,27439,Normanville,1.180364522,49.070200354,['121AS30'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS30.pdf'],BSS000LCEZ,86.0,4852,27,Eure,FORAGE DE NORMANVILLE (NORMANVILLE) - 27,67.0,['HG211'],['Craie altΓ©rΓ©e du Neubourg-Iton-plaine de Saint-AndrΓ©'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG211'],Thu Feb 19 22:09:02 CET 2026
110
+ 01501X0002/F,http://services.ades.eaufrance.fr/pointeau/01501X0002/F,1967-04-02,2008-12-10,27439,Normanville,1.161462521,49.077376226,['121AS01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AS01.pdf'],BSS000LBXU,49.0,4746,27,Eure,Puits de Normanville (Normanville) - 27,16.0,,,[],Fri Jun 28 07:31:38 CEST 2024
111
+ 01501X0037/S1,http://services.ades.eaufrance.fr/pointeau/01501X0037/S1,1968-03-27,1981-12-24,27147,La Chapelle-du-Bois-des-Faulx,1.164508343,49.113733537,,[],BSS000LBZF,132.0,153,27,Eure,,90.0,,,[],Fri Jun 28 07:31:38 CEST 2024
112
+ 01242X0116/S1,http://services.ades.eaufrance.fr/pointeau/01242X0116/S1,1985-05-24,2008-02-18,27528,Le Vaudreuil,1.22147949,49.252530003,['121AZ01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AZ01.pdf'],BSS000JLHW,9.0,4739,27,Eure,,34.25,,,[],Fri Jun 28 07:31:38 CEST 2024
113
+ BSS003FBUG/X,http://services.ades.eaufrance.fr/pointeau/BSS003FBUG/X,2018-11-19,2023-12-06,27701,Val-de-Reuil,1.236998,49.28483,['924AA01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/924AA01.pdf'],BSS003FBUG,9.76,1843,27,Eure,PZ CEMEX,9.55,['HG001'],['Alluvions de la Seine moyenne et aval'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG001'],Fri Oct 18 22:44:31 CEST 2024
114
+ 01242X0530/FN3,http://services.ades.eaufrance.fr/pointeau/01242X0530/FN3,2008-01-10,2026-07-04,27701,Val-de-Reuil,1.212018314,49.305417373,['121AZ01'],['http://reseau.eaufrance.fr/geotraitements/bdlisa/files/entite/121AZ01.pdf'],BSS000JMAM,8.0,6692,27,Eure,FORAGE DE LA BASE DE LOISIRS (VAL-DE-REUIL),20.5,['HG201'],['Craie du Vexin normand et picard'],['http://www.sandre.eaufrance.fr/geo/MasseDEauSouterraine/HG201'],Mon Sep 23 22:01:21 CEST 2024
datasets/ADES/stations_metadata.csv ADDED
The diff for this file is too large to render. See raw diff
 
datasets/IDPR_values.csv ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ο»Ώfid,X,Y,X_lambert,Y_lambert,station_id,basin_name,latitude,longitude,IDPR
2
+ 1,522210.5142,6852566.356,522210.5142,6852566.356,H602021010,La Risle,48.74870522,0.58156195,2000
3
+ 2,539761.0001,6883805.004,539761.0001,6883805.004,H605641401,La Risle,49.03411899,0.808378297,885
4
+ 3,533400.0001,6900649.005,533400.0001,6900649.005,H620021010,La Risle,49.18388271,0.714759598,1000
5
+ 4,532138.0001,6907155.004,532138.0001,6907155.004,H623021010,La Risle,49.24201812,0.694854113,1000
6
+ 5,511031.0001,6849508.005,511031.0001,6849508.005,H600021010,La Risle,48.71803654,0.430946285,1212
7
+ 6,531904.0001,6860441.004,531904.0001,6860441.004,H603021010,La Risle,48.82209534,0.710239413,1000
8
+ 7,534773.0001,6874894.005,534773.0001,6874894.005,H605021010,La Risle,48.9527593,0.743674684,1117
9
+ 8,540227.0001,6883351.005,540227.0001,6883351.005,H605022010,La Risle,49.03015442,0.814920403,237
10
+ 9,538193.0001,6878375.005,538193.0001,6878375.005,H605641101,La Risle,48.98491874,0.789022568,1000
11
+ 10,539177.0002,6885262.005,539177.0002,6885262.005,H605641201,La Risle,49.04706878,0.799839826,237
12
+ 11,536394.5252,6890311.1,536394.5252,6890311.1,H606000101,La Risle,49.09174604,0.759834916,1000
13
+ 12,524179.0001,6918393.004,524179.0001,6918393.004,H623022010,La Risle,49.34085604,0.58089832,545
14
+ 13,567277.0001,6817949.004,567277.0001,,H402021010,L'Eure,48.44823808,1.205047075,1159
15
+ 14,587267.0001,6810648.005,587267.0001,,H403301101,L'Eure,48.38634694,1.477223775,545
16
+ 15,588995.0001,6816797.004,588995.0001,,H404021010,L'Eure,48.441954,1.498980903,547
17
+ 16,580935.0001,6854187.004,580935.0001,6854187.004,H420021010,L'Eure,48.77678274,1.379648722,545
18
+ 17,580952.6709,6854179.489,580952.6709,6854179.489,H420021011,L'Eure,48.77671842,1.379891235,1134
19
+ 18,573648.0001,6817910.005,573648.0001,,H403021010,L'Eure,48.44915882,1.291192655,2000
20
+ 19,587926,6819632.004,587926,6819632.004,H404021101,L'Eure,48.46726995,1.483793322,925
21
+ 20,592634.4399,6839392.744,592634.4399,6839392.744,H414000201,L'Eure,48.64579381,1.542543476,1292
22
+ 21,585363.0001,6845654.004,585363.0001,6845654.004,H416021010,L'Eure,48.70085268,1.442183941,1172
23
+ 22,580914.8963,6854220.871,580914.8963,6854220.871,H420021012,L'Eure,48.77708356,1.379365749,586
24
+ 23,580769.0001,6855886.004,580769.0001,6855886.004,H426021010,L'Eure,48.7920293,1.376915068,1010
25
+ 24,580753.7573,6855893.107,580753.7573,6855893.107,H426021201,L'Eure,48.79209035,1.37670564,1000
26
+ 25,581370.0001,6880459.004,581370.0001,6880459.004,H431021010,L'Eure,49.01307446,1.378224742,1000
27
+ 26,569235.0001,6891991.005,569235.0001,6891991.005,H432021010,L'Eure,49.11438207,1.208807304,695
28
+ 27,567244.3975,6904232.773,567244.3975,6904232.773,H438021010,L'Eure,49.22400387,1.177680812,1055
datasets/README.md ADDED
@@ -0,0 +1,320 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Datasets Documentation
2
+
3
+ **Project:** Physics-Informed KARST-Aware GNN for Streamflow Prediction
4
+ **Study Area:** La Risle and La Eure River Systems, Seine Basin, France
5
+ **Period:** 1960-2026 (historical data)
6
+
7
+ ## Directory Structure
8
+
9
+ ```
10
+ datasets/
11
+ β”œβ”€β”€ station_list.csv # 27 stations metadata (coordinates, names)
12
+ β”œβ”€β”€ selected_stations.csv # 27 selected station codes
13
+ β”œβ”€β”€ IDPR_values.csv # BRGM infiltration/runoff index (27 stations)
14
+ β”œβ”€β”€ ADES/ # Groundwater data (KARST connectivity)
15
+ β”‚ β”œβ”€β”€ groundwater_stations.csv # 114 groundwater monitoring wells
16
+ β”‚ β”œβ”€β”€ groundwater_levels_watershed.csv# 272,379 groundwater level measurements
17
+ β”‚ β”œβ”€β”€ stations_metadata.csv # 10,001 stations (full ADES database)
18
+ β”‚ └── ADES_data_fetching.py # Data collection script
19
+ β”œβ”€β”€ Watersehd_risle/ # La Risle watershed boundary
20
+ β”‚ └── Watershed_Risle.shp # Shapefile (EPSG:2154)
21
+ β”œβ”€β”€ Watershed_Eure/ # La Eure watershed boundary
22
+ β”‚ └── Watershed_Eure.shp # Shapefile (EPSG:2154)
23
+ β”œβ”€β”€ Risle_Eure_watershed/ # Merged watershed boundary
24
+ β”‚ └── Risle_Eure_Watershed.shp # Combined shapefile (EPSG:2154)
25
+ └── River Images/ # Reference maps
26
+ β”œβ”€β”€ Carte-de-la_Seine-390x305.png
27
+ β”œβ”€β”€ Eure_(riviΓ¨re).png
28
+ └── Risle.png
29
+ ```
30
+
31
+ ## Available Data
32
+
33
+ ### 1. Hydrometric Stations (`station_list.csv`)
34
+
35
+ **File:** `station_list.csv`
36
+ **Rows:** 27 stations
37
+ **Columns:**
38
+ - `X`, `Y` - Lambert 93 coordinates (EPSG:2154)
39
+ - `station_code` - Unique station identifier (e.g., H602021010)
40
+ - `region_name` - NORMANDIE
41
+ - `departament_name` - ORNE or EURE
42
+ - `station_name` - Full station name
43
+ - `municipality` - Municipality name
44
+ - `INSEE` - INSEE code
45
+ - `id_root` - Root identifier
46
+ - `lon`, `lat` - WGS84 coordinates
47
+ - `lon-lat-ID` - Combined identifier
48
+
49
+ **Basin Distribution:**
50
+ - **La Risle:** 12 stations (e.g., La Risle Γ  Rai, La Risle Γ  Brionne, etc.)
51
+ - **La Eure:** 13 stations (e.g., L'Eure Γ  Chartres, L'Eure Γ  Louviers, etc.)
52
+ - **Tributary:** 1 station (Le bras de l'Eure Γ  Lormaye)
53
+
54
+ **Sample Stations:**
55
+ ```
56
+ H602021010 - La Risle Γ  Rai (48.749Β°N, 0.582Β°E)
57
+ H605641401 - La Risle Γ  Barquet (49.034Β°N, 0.808Β°E)
58
+ H620021010 - La Risle Γ  Brionne
59
+ H4202010 - L'Eure Γ  Chartres
60
+ H4522010 - L'Eure Γ  Louviers
61
+ ```
62
+
63
+ ### 2. Selected Stations (`selected_stations.csv`)
64
+
65
+ **File:** `selected_stations.csv`
66
+ **Rows:** 27 stations
67
+ **Content:** List of selected station codes for analysis
68
+
69
+ ### 3. IDPR Data (`IDPR_values.csv`)
70
+
71
+ **File:** `IDPR_values.csv`
72
+ **Source:** BRGM (Bureau de Recherches Géologiques et Minières)
73
+ **Rows:** 27 stations
74
+ **Purpose:** Infiltration vs runoff tendency (KARST indicator)
75
+
76
+ **Columns:**
77
+ - `fid` - Feature ID
78
+ - `X`, `Y` - Original coordinates
79
+ - `X_lambert`, `Y_lambert` - Lambert 93 coordinates
80
+ - `station_id` - Station identifier
81
+ - `basin_name` - "La Risle" or "La Eure"
82
+ - `latitude`, `longitude` - WGS84 coordinates
83
+ - `IDPR` - **Infiltration Dominance vs Precipitation Runoff index**
84
+ - Higher values β†’ More infiltration (karst behavior)
85
+ - Lower values β†’ More surface runoff
86
+
87
+ **IDPR Range in Dataset:**
88
+ - La Risle: 885 - 2000
89
+ - Indicates varying karst influence across the basin
90
+
91
+ ### 4. ADES Groundwater Data
92
+
93
+ **Source:** ADES (Accès aux Données sur les Eaux Souterraines)
94
+ **Purpose:** Karst groundwater connectivity, subsurface flow pathways
95
+
96
+ #### 4.1 Groundwater Stations (`ADES/groundwater_stations.csv`)
97
+
98
+ **Rows:** 114 groundwater monitoring wells in watershed
99
+ **Columns:**
100
+ - `code_bss` - BSS code (unique well identifier)
101
+ - `urn_bss` - URN identifier
102
+ - `date_debut_mesure`, `date_fin_mesure` - Measurement period
103
+ - `code_commune_insee`, `nom_commune` - Municipality
104
+ - `x`, `y` - Coordinates
105
+ - `bss_id` - Short BSS ID
106
+ - `altitude_station` - Well altitude (m)
107
+ - `nb_mesures_piezo` - Number of piezometric measurements
108
+ - `code_departement`, `nom_departement` - Department (61=Orne, 27=Eure)
109
+ - `profondeur_investigation` - Investigation depth (m)
110
+
111
+ **Sample Wells:**
112
+ - BSS000TTRG (Le Mage, Orne) - 137 measurements, depth 38m, altitude 231m
113
+ - BSS000TTRB (Longny les Villages) - 9 measurements, depth 55m, altitude 235m
114
+
115
+ #### 4.2 Groundwater Levels (`ADES/groundwater_levels_watershed.csv`)
116
+
117
+ **Rows:** 272,379 piezometric measurements
118
+ **Period:** Various (e.g., 2013-present for some wells)
119
+ **Columns:**
120
+ - `code_bss`, `bss_id`, `urn_bss` - Well identifiers
121
+ - `date_mesure` - Measurement date
122
+ - `timestamp_mesure` - Unix timestamp
123
+ - `niveau_nappe_eau` - Groundwater level (m above reference)
124
+ - `profondeur_nappe` - Depth to water table (m below surface)
125
+ - `mode_obtention` - Measurement method
126
+ - `statut` - Data status ("DonnΓ©e contrΓ΄lΓ©e niveau 2")
127
+ - `qualification` - Data quality ("Correcte", etc.)
128
+ - `code_producteur`, `nom_producteur` - Data producer
129
+
130
+ **Note:** This is time series data for groundwater levels, crucial for understanding subsurface karst connectivity.
131
+
132
+ #### 4.3 ADES Metadata (`ADES/stations_metadata.csv`)
133
+
134
+ **Rows:** 10,001 stations (full ADES database, not filtered)
135
+ **Purpose:** Reference metadata for all groundwater stations in France
136
+
137
+ ### 5. Watershed Shapefiles
138
+
139
+ #### 5.1 La Risle Watershed (`Watersehd_risle/Watershed_Risle.shp`)
140
+
141
+ **CRS:** EPSG:2154 (Lambert 93 - French national projection)
142
+ **Features:** 1 multipolygon
143
+ **Attributes:**
144
+ - `ID_INTERNE` - Internal ID (e.g., Sav21_226)
145
+ - `ID_FONCTIO` - Functional ID
146
+ - `NOM` - Watershed name
147
+ - `SITUATION_` - Situation/status
148
+
149
+ #### 5.2 La Eure Watershed (`Watershed_Eure/Watershed_Eure.shp`)
150
+
151
+ **CRS:** EPSG:2154 (Lambert 93)
152
+ **Features:** 1 multipolygon
153
+ **Attributes:** Same as La Risle
154
+
155
+ #### 5.3 Merged Watershed (`Risle_Eure_watershed/Risle_Eure_Watershed.shp`)
156
+
157
+ **CRS:** EPSG:2154 (Lambert 93)
158
+ **Features:** 1 multipolygon (merged boundary)
159
+ **Attributes:**
160
+ - `FID` - Feature ID
161
+ - `geometry` - Geometry
162
+
163
+ **Note:** This merged shapefile covers both La Risle and La Eure basins for basin-wide analysis.
164
+
165
+ ### Hydrometric Data (Hub'Eau API)
166
+
167
+ **Status:** Downloaded and available datasets/hydrometric
168
+ **Expected:** JSON and CSV files for 27 stations (1960-2026)
169
+
170
+ **Historical Statistics (Daily/Monthly):**
171
+ - `QmnJ` / `QmM` - Mean discharge (mΒ³/s)
172
+ - `QIXnJ` / `QIXM` - Maximum instantaneous discharge (mΒ³/s)
173
+ - `QINnJ` / `QINM` - Minimum instantaneous discharge (mΒ³/s)
174
+ - `HIXnJ` / `HIXM` - Maximum water level (m)
175
+
176
+ **Real-Time Observations (5-min interval, ~1 month):**
177
+ - `H` - Water level (m)
178
+ - `Q` - River discharge (mΒ³/s)
179
+
180
+ ### Meteorological Data (SAFRAN Reanalysis)
181
+
182
+ **Status:** datasets/safran
183
+ **Expected:** JSON and CSV files for 27 stations (1960-2026)
184
+
185
+ **Variables (12):**
186
+ - `DLI_Q` - Atmospheric radiation (W/mΒ²)
187
+ - `DRAINC_Q` - Drainage (mm)
188
+ - `ETP_Q` - Potential evapotranspiration (mm)
189
+ - `FF_Q` - Wind speed (m/s)
190
+ - `HU_Q` - Relative humidity (%)
191
+ - `PRELIQ_Q` - Liquid precipitation (mm)
192
+ - `PRENEI_Q` - Solid precipitation (mm)
193
+ - `RESR_NEIGE_Q` - Snowpack water equivalent (mm)
194
+ - `RUNC_Q` - Runoff (mm)
195
+ - `SSI_Q` - Visible radiation (W/mΒ²)
196
+ - `SWI_Q` - Soil moisture index
197
+ - `T_Q` - Average air temperature (Β°C)
198
+
199
+ ### DEM and Topographic Data
200
+
201
+ **Status:** datasets/station_elevations.csv
202
+ **Required for:**
203
+ - Elevation statistics (mean, min, max)
204
+ - Basin slope calculation
205
+ - Drainage density
206
+ - Topographic Wetness Index (TWI)
207
+ - River network topology extraction (QGIS hydrology tools)
208
+
209
+ **Recommended Source:**
210
+ - IGN RGE ALTI (French national DEM, 1m or 5m resolution)
211
+ - EU-DEM (25m resolution)
212
+
213
+ ### River Network Topology
214
+
215
+ **Status:** ❌ Not yet in repository
216
+ **Required:** `station_edges.csv` for graph construction
217
+
218
+ **Expected Format:**
219
+ ```csv
220
+ source,target,distance,elevation_gradient,basin_id
221
+ H602021010,H605641401,15.2,10.0,0
222
+ H605641401,H620021010,12.5,-5.0,0
223
+ ...
224
+ ```
225
+
226
+ **Generation Method:**
227
+ - Use QGIS DEM hydrology processing tools
228
+ - Extract upstream-downstream relationships
229
+ - Calculate river distances and elevation gradients
230
+ - Ensure no cross-basin edges (La Risle β‰  La Eure)
231
+
232
+ ### Basin Attributes (To Be Extracted)
233
+
234
+ **Status:** ❌ Not yet extracted from shapefiles/DEM
235
+
236
+ **Topological:**
237
+ - Elevation, slope, drainage density, TWI, basin area
238
+
239
+ **Soil Properties:**
240
+ - Soil type, texture, hydraulic conductivity, porosity, depth
241
+
242
+ **Land Use:**
243
+ - Forest/agricultural/urban cover %, NDVI
244
+
245
+ **Geological/KARST:**
246
+ - Aquifer characteristics, lithology, permeability, sinkhole density
247
+
248
+ ## Data Processing Notes
249
+
250
+ ### Basin Assignment
251
+
252
+ Based on station names in `station_list.csv`:
253
+
254
+ **La Risle Stations (basin_id = 0):**
255
+ - 12 stations with names starting with "La Risle"
256
+ - Station codes: H60*, H62*
257
+
258
+ **La Eure Stations (basin_id = 1):**
259
+ - 13 stations with names starting with "L'Eure"
260
+ - Station codes: H42*, H45*, H46*, H47*
261
+ - Includes tributary: "Le bras de l'Eure"
262
+
263
+ ### Coordinate Systems
264
+
265
+ **All geospatial data uses:**
266
+ - **Projected:** EPSG:2154 (Lambert 93) for distances/areas
267
+ - **Geographic:** EPSG:4326 (WGS84) for lat/lon
268
+
269
+ **Conversion needed for:**
270
+ - Station coordinates (already in both systems in `station_list.csv`)
271
+ - Shapefiles (already in EPSG:2154)
272
+
273
+ ### Data Size Summary
274
+
275
+ | File | Rows | Size | Notes |
276
+ |------|------|------|-------|
277
+ | `station_list.csv` | 27 | 4.1 KB | Station metadata |
278
+ | `selected_stations.csv` | 27 | 338 B | Station codes only |
279
+ | `IDPR_values.csv` | 27 | 2.6 KB | KARST infiltration index |
280
+ | `ADES/groundwater_stations.csv` | 114 | ~50 KB | Groundwater wells |
281
+ | `ADES/groundwater_levels_watershed.csv` | 272,379 | ~50 MB | **Large!** Time series |
282
+ | `ADES/stations_metadata.csv` | 10,001 | ~2 MB | Full ADES database |
283
+
284
+ **⚠️ Note:** `groundwater_levels_watershed.csv` is the largest file (272K rows). Use efficient processing (chunking, filtering by date range).
285
+
286
+ ## Next Steps
287
+
288
+ 1. **Collect Hydrometric Data**
289
+ - Use Hub'Eau API to download discharge/water level data
290
+ - Store in `datasets/hydrometric/` (JSON and CSV)
291
+
292
+ 2. **Collect SAFRAN Data**
293
+ - Download meteorological reanalysis for 27 station coordinates
294
+ - Store in `datasets/safran/` (JSON and CSV)
295
+
296
+ 3. **Acquire DEM**
297
+ - Download IGN RGE ALTI or EU-DEM for study area
298
+ - Store in `datasets/DEM/`
299
+
300
+ 4. **Extract River Topology**
301
+ - Use QGIS DEM hydrology tools
302
+ - Generate `datasets/station_edges.csv`
303
+
304
+ 5. **Extract Basin Attributes**
305
+ - Use DEM to calculate topological features
306
+ - Use soil/land use databases for additional features
307
+ - Store in `datasets/basin_features/`
308
+
309
+ 6. **Process Data Through Pipeline**
310
+ - Run `example_pipeline.py` once all data is available
311
+ - Generate fused datasets, graphs, and tensors
312
+
313
+ ## Data Sources & References
314
+
315
+ - **Hub'Eau API:** https://hubeau.eaufrance.fr/
316
+ - **SAFRAN Reanalysis:** MΓ©tΓ©o-France
317
+ - **ADES:** https://ades.eaufrance.fr/ (groundwater data)
318
+ - **BRGM IDPR:** Bureau de Recherches Géologiques et Minières
319
+ - **IGN:** https://geoservices.ign.fr/ (DEM, elevation data)
320
+ - **Watersheds:** Digitized from official French hydrographic boundaries
datasets/Risle_Eure_watershed/Risle_Eure_Watershed.cpg ADDED
@@ -0,0 +1 @@
 
 
1
+ UTF-8
datasets/Risle_Eure_watershed/Risle_Eure_Watershed.dbf ADDED
Binary file (78 Bytes). View file
 
datasets/Risle_Eure_watershed/Risle_Eure_Watershed.gpkg ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:86803343cf5cbc718b8e956f72baa485ffef43243ff1f58f88fda7f286350c3d
3
+ size 163840
datasets/Risle_Eure_watershed/Risle_Eure_Watershed.prj ADDED
@@ -0,0 +1 @@
 
 
1
+ PROJCS["RGF_1993_Lambert_93",GEOGCS["GCS_RGF_1993",DATUM["D_RGF_1993",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",700000.0],PARAMETER["False_Northing",6600000.0],PARAMETER["Central_Meridian",3.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",44.0],PARAMETER["Latitude_Of_Origin",46.5],UNIT["Meter",1.0]]
datasets/Risle_Eure_watershed/Risle_Eure_Watershed.shp ADDED
Binary file (68.7 kB). View file
 
datasets/Risle_Eure_watershed/Risle_Eure_Watershed.shx ADDED
Binary file (108 Bytes). View file
 
datasets/River Images/Carte-de-la_Seine-390x305.png ADDED

Git LFS Details

  • SHA256: ca2dd0fd08b9a8be4bf964ab9337d5131bf700955824dee5c1e2be5f7c8e6650
  • Pointer size: 131 Bytes
  • Size of remote file: 199 kB
datasets/River Images/Eure_(rivière).png ADDED

Git LFS Details

  • SHA256: aa79789ca39fd5cc6e9f8ee2989416fcae200798f875aa219389a90201b5ee83
  • Pointer size: 131 Bytes
  • Size of remote file: 864 kB
datasets/River Images/Risle.png ADDED

Git LFS Details

  • SHA256: 9d2721cedd5c539a36e5acc26a10f313c580fbaf5ab0e24413cd9f0bf9a893b2
  • Pointer size: 131 Bytes
  • Size of remote file: 510 kB
datasets/Watershed_Eure/Watershed_Eure.cpg ADDED
@@ -0,0 +1 @@
 
 
1
+ UTF-8
datasets/Watershed_Eure/Watershed_Eure.dbf ADDED
Binary file (1.18 kB). View file
 
datasets/Watershed_Eure/Watershed_Eure.prj ADDED
@@ -0,0 +1 @@
 
 
1
+ PROJCS["RGF_1993_Lambert_93",GEOGCS["GCS_RGF_1993",DATUM["D_RGF_1993",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",700000.0],PARAMETER["False_Northing",6600000.0],PARAMETER["Central_Meridian",3.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",44.0],PARAMETER["Latitude_Of_Origin",46.5],UNIT["Meter",1.0]]
datasets/Watershed_Eure/Watershed_Eure.qmd ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
2
+ <qgis version="3.34.4-Prizren">
3
+ <identifier></identifier>
4
+ <parentidentifier></parentidentifier>
5
+ <language></language>
6
+ <type></type>
7
+ <title></title>
8
+ <abstract></abstract>
9
+ <links/>
10
+ <dates/>
11
+ <fees></fees>
12
+ <encoding></encoding>
13
+ <crs>
14
+ <spatialrefsys nativeFormat="Wkt">
15
+ <wkt></wkt>
16
+ <proj4></proj4>
17
+ <srsid>0</srsid>
18
+ <srid>0</srid>
19
+ <authid></authid>
20
+ <description></description>
21
+ <projectionacronym></projectionacronym>
22
+ <ellipsoidacronym></ellipsoidacronym>
23
+ <geographicflag>false</geographicflag>
24
+ </spatialrefsys>
25
+ </crs>
26
+ <extent/>
27
+ </qgis>
datasets/Watershed_Eure/Watershed_Eure.shp ADDED
Binary file (52.2 kB). View file
 
datasets/Watershed_Eure/Watershed_Eure.shx ADDED
Binary file (108 Bytes). View file
 
datasets/Watershed_risle/Watershed_Risle.cpg ADDED
@@ -0,0 +1 @@
 
 
1
+ UTF-8
datasets/Watershed_risle/Watershed_Risle.dbf ADDED
Binary file (1.18 kB). View file
 
datasets/Watershed_risle/Watershed_Risle.prj ADDED
@@ -0,0 +1 @@
 
 
1
+ PROJCS["RGF_1993_Lambert_93",GEOGCS["GCS_RGF_1993",DATUM["D_RGF_1993",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",700000.0],PARAMETER["False_Northing",6600000.0],PARAMETER["Central_Meridian",3.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",44.0],PARAMETER["Latitude_Of_Origin",46.5],UNIT["Meter",1.0]]
datasets/Watershed_risle/Watershed_Risle.qmd ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
2
+ <qgis version="3.34.4-Prizren">
3
+ <identifier></identifier>
4
+ <parentidentifier></parentidentifier>
5
+ <language></language>
6
+ <type>dataset</type>
7
+ <title></title>
8
+ <abstract></abstract>
9
+ <contact>
10
+ <name></name>
11
+ <organization></organization>
12
+ <position></position>
13
+ <voice></voice>
14
+ <fax></fax>
15
+ <email></email>
16
+ <role></role>
17
+ </contact>
18
+ <links/>
19
+ <dates/>
20
+ <fees></fees>
21
+ <encoding></encoding>
22
+ <crs>
23
+ <spatialrefsys nativeFormat="Wkt">
24
+ <wkt>PROJCRS["RGF93 v1 / Lambert-93",BASEGEOGCRS["RGF93 v1",DATUM["Reseau Geodesique Francais 1993 v1",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4171]],CONVERSION["Lambert-93",METHOD["Lambert Conic Conformal (2SP)",ID["EPSG",9802]],PARAMETER["Latitude of false origin",46.5,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8821]],PARAMETER["Longitude of false origin",3,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8822]],PARAMETER["Latitude of 1st standard parallel",49,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8823]],PARAMETER["Latitude of 2nd standard parallel",44,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8824]],PARAMETER["Easting at false origin",700000,LENGTHUNIT["metre",1],ID["EPSG",8826]],PARAMETER["Northing at false origin",6600000,LENGTHUNIT["metre",1],ID["EPSG",8827]]],CS[Cartesian,2],AXIS["easting (X)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["northing (Y)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["Engineering survey, topographic mapping."],AREA["France - onshore and offshore, mainland and Corsica (France mΓ©tropolitaine including Corsica)."],BBOX[41.15,-9.86,51.56,10.38]],ID["EPSG",2154]]</wkt>
25
+ <proj4>+proj=lcc +lat_0=46.5 +lon_0=3 +lat_1=49 +lat_2=44 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs</proj4>
26
+ <srsid>145</srsid>
27
+ <srid>2154</srid>
28
+ <authid>EPSG:2154</authid>
29
+ <description>RGF93 v1 / Lambert-93</description>
30
+ <projectionacronym>lcc</projectionacronym>
31
+ <ellipsoidacronym>EPSG:7019</ellipsoidacronym>
32
+ <geographicflag>false</geographicflag>
33
+ </spatialrefsys>
34
+ </crs>
35
+ <extent>
36
+ <spatial dimensions="2" miny="179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368" minx="179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368" maxy="-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368" maxz="0" minz="0" crs="EPSG:2154" maxx="-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368"/>
37
+ <temporal>
38
+ <period>
39
+ <start></start>
40
+ <end></end>
41
+ </period>
42
+ </temporal>
43
+ </extent>
44
+ </qgis>
datasets/Watershed_risle/Watershed_Risle.shp ADDED
Binary file (30.7 kB). View file
 
datasets/Watershed_risle/Watershed_Risle.shx ADDED
Binary file (108 Bytes). View file
 
datasets/bdtopo_hydro/bassin_versant_topographique.geojson ADDED
The diff for this file is too large to render. See raw diff
 
datasets/bdtopo_hydro/surface_hydrographique.geojson ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:395d23bcebaed920bc3d08eed967175ff568302373d8ab5c0a43176e61af3422
3
+ size 59749521
datasets/bdtopo_hydro/troncon_hydrographique.geojson ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5de1f23eeb8226037d2dbcb7a9553d60bd55c713f0e6c49cf999bd1238494b6b
3
+ size 69428336
datasets/catchment_area.csv ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ station_code,code_site,catchment_area_km2
2
+ H602021010,H6020210,149.0
3
+ H605641401,H6056414,486.0
4
+ H620021010,H6200210,1300.0
5
+ H623021010,H6230210,1800.0
6
+ H600021010,H6000210,
7
+ H603021010,H6030210,
8
+ H605021010,H6050210,381.0
9
+ H605022010,H6050220,487.0
10
+ H605641101,H6056411,
11
+ H605641201,H6056412,
12
+ H606000101,H6060001,729.0
13
+ H623022010,H6230220,2063.0
14
+ H402021010,H4020210,
15
+ H403301101,H4033011,568.0
16
+ H404021010,H4040210,
17
+ H420021010,H4200210,
18
+ H420021011,H4200210,
19
+ H403021010,H4030210,330.0
20
+ H404021101,H4040211,756.0
21
+ H414000201,H4140002,
22
+ H416021010,H4160210,2050.0
23
+ H420021012,H4200210,
24
+ H426021010,H4260210,3580.0
25
+ H426021201,H4260212,
26
+ H431021010,H4310210,4200.0
27
+ H432021010,H4320210,4598.0
28
+ H438021010,H4380210,5935.0
datasets/centerlines/eure_centerline.csv ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ seq,longitude,latitude
2
+ 0,1.0310692020964396,49.2754679621714
3
+ 1,1.0475855701878436,49.282883471448834
4
+ 2,1.0700613033138326,49.28506533718692
5
+ 3,1.0897144762701085,49.28719674316829
6
+ 4,1.112294957627817,49.2876004212221
7
+ 5,1.1321576270475313,49.28617545183493
8
+ 6,1.1548428566369593,49.28480094220448
9
+ 7,1.1749150225201124,49.27981959744876
10
+ 8,1.1926883693921488,49.26589685451497
11
+ 9,1.1990667273536113,49.25355046023854
12
+ 10,1.1942595928679394,49.239224039250935
13
+ 11,1.1752349093019798,49.226423507163965
14
+ 12,1.1618553460754475,49.213723894590444
15
+ 13,1.154225651420062,49.19934701384611
16
+ 14,1.1577814492118113,49.18695015981296
17
+ 15,1.1501517545564255,49.17257327906862
18
+ 16,1.1649977930270288,49.16037826406237
19
+ 17,1.1714808992202108,49.14625368210168
20
+ 18,1.1750366970119601,49.133856828068524
21
+ 19,1.1815198032051422,49.11973224610783
22
+ 20,1.1908254695680376,49.10565812390386
23
+ 21,1.2028489478689277,49.09341264914088
24
+ 22,1.2228163655203614,49.090209492069434
25
+ 23,1.2427837831717952,49.08700633499799
26
+ 24,1.2576298216423987,49.074811319991746
27
+ 25,1.2777019875255515,49.069829975236026
28
+ 26,1.2982978945673014,49.05595769205897
29
+ 27,1.3186843051456127,49.04564178425045
30
+ 28,1.333530343616216,49.0334467692442
31
+ 29,1.3511989422565334,49.02130221399468
32
+ 30,1.3575773002179958,49.00895581971825
33
+ 31,1.38089101919774,48.99691218398219
34
+ 32,1.4012774297760513,48.986596276173664
35
+ 33,1.4162282164783742,48.97262307348315
36
+ 34,1.414138893930696,48.96012529993654
37
+ 35,1.4121543196147375,48.94584933870566
38
+ 36,1.4212504895141944,48.93533159187023
39
+ 37,1.4332739678150843,48.92308611710726
40
+ 38,1.436934513838553,48.90891107538983
41
+ 39,1.4515710558457176,48.90027243575213
42
+ 40,1.466102849621163,48.893411983798686
43
+ 41,1.4751990195206197,48.88289423696325
44
+ 42,1.4703918850349478,48.86856781597565
45
+ 43,1.456907573576696,48.8576463910864
46
+ 44,1.4345365886824262,48.853686337664044
47
+ 45,1.4149881639578699,48.84977674399841
48
+ 46,1.3987860405616241,48.83702667166816
49
+ 47,1.3768340485942319,48.82595386750873
50
+ 48,1.3661722973056936,48.81508290237621
51
+ 49,1.3698328433291622,48.80090786065878
52
+ 50,1.3818563216300521,48.78866238589581
53
+ 51,1.3855168676535206,48.77448734417839
54
+ 52,1.3947177857846969,48.76219140965868
55
+ 53,1.4175077636058444,48.759038712343965
56
+ 54,1.4267086817370207,48.74674277782427
57
+ 55,1.4275466675907755,48.732517276350116
58
+ 56,1.4340297737839576,48.718392694389415
59
+ 57,1.4375855715757067,48.705995840356266
60
+ 58,1.4580767303857374,48.693901744863474
61
+ 59,1.4672776485169137,48.68160581034377
62
+ 60,1.4848414989255114,48.67123944277852
63
+ 61,1.50219585287067,48.66442945058181
64
+ 62,1.5249858306918176,48.66127675326709
65
+ 63,1.5425496811004151,48.65091038570184
66
+ 64,1.5655491553850012,48.644201313018584
67
+ 65,1.574854821747897,48.63012719081461
68
+ 66,1.5755880593699323,48.617679877024734
69
+ 67,1.5820711655631143,48.603555295064034
70
+ 68,1.5969172040337178,48.591360280057785
71
+ 69,1.609045430566327,48.57733661761055
72
+ 70,1.6182463486975034,48.56504068309084
73
+ 71,1.613439214211831,48.55071426210324
74
+ 72,1.6141724518338667,48.53826694831336
75
+ 73,1.6065427571784814,48.52389006756902
76
+ 74,1.5844860169793695,48.51459545109386
77
+ 75,1.5767515740922642,48.50199675803379
78
+ 76,1.5606541989277378,48.487468498019275
79
+ 77,1.5411057742031815,48.48355890435365
80
+ 78,1.5220810906372222,48.47075837226667
81
+ 79,1.5228143282592579,48.458311058476795
82
+ 80,1.52929743445244,48.444186476516094
83
+ 81,1.5272081119047618,48.43168870296949
84
+ 82,1.5167558570796627,48.41726136246842
85
+ 83,1.520416403103131,48.403086320751
86
+ 84,1.5183270805554532,48.39058854720439
87
+ 85,1.495851347429464,48.3884066814663
88
+ 86,1.4794397275697793,48.37921298450459
89
+ 87,1.4591580652231875,48.38775070462884
90
+ 88,1.438981151108315,48.39451023706883
91
+ 89,1.4160864250554484,48.39944112206782
92
+ 90,1.4097080670939857,48.41178751634425
93
+ 91,1.3870228375045577,48.4131620259747
94
+ 92,1.3637091185248136,48.42520566171076
95
+ 93,1.3461452681162158,48.43557202927601
96
+ 94,1.32314579383163,48.44228110195927
97
+ 95,1.3030736279484767,48.44726244671498
98
+ 96,1.283734699687359,48.439796477680815
99
+ 97,1.263976778499364,48.43944325938372
100
+ 98,1.2413962971416557,48.43903958132991
101
+ 99,1.2295823153042047,48.44772868072434
102
+ 100,1.2147362768336012,48.45992369573059
103
+ 101,1.1945593627187288,48.466683228170574
104
+ 102,1.1773097570052893,48.471715032683015
105
+ 103,1.1545197791841417,48.47486772999773
106
+ 104,1.1346571097644276,48.47629269938491
107
+ 105,1.1116576354798415,48.48300177206817
108
+ 106,1.0915854695966885,48.487983116823884
109
+ 107,1.0685859953121022,48.49469218950714
110
+ 108,1.048723325892388,48.49611715889432
111
+ 109,1.0285464117775156,48.5028766913343
112
+ 110,1.005756433956368,48.50602938864902
113
+ 111,0.9885068282429286,48.51106119316147
114
+ 112,0.9657168504217813,48.514213890476185
115
+ 113,0.9455399363069089,48.52097342291617
116
+ 114,0.9226452102540422,48.525904307915155
117
+ 115,0.9028872890660473,48.52555108961806
118
+ 116,0.8797830665497418,48.53403834998559
119
+ 117,0.8597109006665887,48.539019694741306
120
+ 118,0.8372351675405996,48.53683782900322
121
+ 119,0.8146546861828909,48.5364341509494
datasets/centerlines/risle_centerline.csv ADDED
The diff for this file is too large to render. See raw diff
 
datasets/hydrometric/discharge_observations.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bdc0c09df588962065b029d2a46ca149654a1bb6ae3c7ddfec81564de96be2fc
3
+ size 15544423
datasets/hydrometric/discharge_observations.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:378b64b0e3f7d76880449af583f2e5ccff1a759d8ce79dacc80de0aaa4caa7ca
3
+ size 51952533
datasets/hydrometric/download_log.txt ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
0
 
1
 
2
 
3
 
4
 
5
 
6
 
7
 
8
 
9
 
10
 
11
 
12
 
13
 
14
 
15
 
16
 
17
 
18
 
19
 
20
 
21
 
22
 
23
 
24
 
25
 
26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
 
29
 
30
 
31
 
32
 
33
 
34
 
35
 
36
 
37
 
38
 
39
 
40
 
41
 
42
 
43
 
44
 
45
 
46
 
47
 
48
 
49
 
50
 
51
 
52
 
53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Downloading hydrometric data for 27 stations...
2
+ Output: datasets/hydrometric
3
+
4
+ ================================================================================
5
+ DOWNLOADING DISCHARGE (Q)
6
+ ================================================================================
7
+
8
 
9
 
10
 
11
 
12
 
13
 
14
 
15
 
16
 
17
 
18
 
19
 
20
 
21
 
22
 
23
 
24
 
25
 
26
 
27
 
28
 
29
 
30
 
31
 
32
 
33
 
34
 
35
+ Error 206
36
+ βœ— H602021010: No data
37
+ βœ“ H605641401: 8824 observations
38
+ βœ“ H620021010: 8050 observations
39
+ Error 206
40
+ βœ— H623021010: No data
41
+ βœ— H600021010: No data
42
+ βœ— H603021010: No data
43
+ βœ“ H605021010: 7654 observations
44
+ βœ“ H605022010: 11689 observations
45
+ βœ“ H605641101: 5278 observations
46
+ βœ“ H605641201: 5888 observations
47
+ βœ“ H606000101: 57 observations
48
+ βœ“ H623022010: 5163 observations
49
+ βœ— H402021010: No data
50
+ βœ“ H403301101: 7190 observations
51
+ βœ“ H404021010: 947 observations
52
+ βœ— H420021010: No data
53
+ βœ“ H420021011: 12427 observations
54
+ Error 206
55
+ βœ— H403021010: No data
56
+ βœ“ H404021101: 13673 observations
57
+ βœ— H414000201: No data
58
+ Error 206
59
+ βœ— H416021010: No data
60
+ βœ“ H420021012: 4557 observations
61
+ Error 206
62
+ βœ— H426021010: No data
63
+ βœ— H426021201: No data
64
+ βœ“ H431021010: 9821 observations
65
+ Error 206
66
+ βœ— H432021010: No data
67
+ Error 206
68
+ βœ— H438021010: No data
69
+
70
+ βœ“ Discharge: 101218 total observations
71
+ Stations: 14
72
+ Date range: 1969-01-01 to 2026-08-12
73
+
74
+ ================================================================================
75
+ DOWNLOADING WATER LEVEL (H)
76
+ ================================================================================
77
+
78
 
79
 
80
 
81
 
82
 
83
 
84
 
85
 
86
 
87
 
88
 
89
 
90
 
91
 
92
 
93
 
94
 
95
 
96
 
97
 
98
 
99
 
100
 
101
 
102
 
103
 
104
 
105
+ Error 206
106
+ βœ— H602021010: No data
107
+ βœ“ H605641401: 8824 observations
108
+ βœ“ H620021010: 8050 observations
109
+ Error 206
110
+ βœ— H623021010: No data
111
+ βœ— H600021010: No data
112
+ βœ— H603021010: No data
113
+ βœ“ H605021010: 7654 observations
114
+ βœ“ H605022010: 11689 observations
115
+ βœ“ H605641101: 5278 observations
116
+ βœ“ H605641201: 5888 observations
117
+ βœ“ H606000101: 57 observations
118
+ βœ“ H623022010: 5163 observations
119
+ βœ— H402021010: No data
120
+ βœ“ H403301101: 7190 observations
121
+ βœ“ H404021010: 947 observations
122
+ βœ— H420021010: No data
123
+ βœ“ H420021011: 12427 observations
124
+ Error 206
125
+ βœ— H403021010: No data
126
+ βœ“ H404021101: 13673 observations
127
+ βœ— H414000201: No data
128
+ Error 206
129
+ βœ— H416021010: No data
130
+ βœ“ H420021012: 4557 observations
131
+ Error 206
132
+ βœ— H426021010: No data
133
+ βœ— H426021201: No data
134
+ Error 500
135
+ βœ— H431021010: No data
136
+ Error 206
137
+ βœ— H432021010: No data
138
+ Error 206
139
+ βœ— H438021010: No data
140
+
141
+ βœ“ Water level: 91397 total observations
142
+ Stations: 13
143
+ Date range: 1969-01-01 to 2026-08-12
144
+
145
+ ================================================================================
146
+ DOWNLOAD COMPLETE
147
+ ================================================================================
148
+ Files saved to: datasets/hydrometric
149
+
150
+ Files created:
151
+ - station_metadata.csv (0.0 MB)
152
+ - waterlevel_observations.csv (13.4 MB)
153
+ - download_summary.json (0.0 MB)
154
+ - discharge_observations.json (49.5 MB)
155
+ - download_pid.txt (0.0 MB)
156
+ - station_metadata.json (0.0 MB)
157
+ - discharge_observations.csv (14.8 MB)
158
+ - waterlevel_observations.json (44.7 MB)
159
+ - download_log.txt (0.0 MB)
datasets/hydrometric/download_pid.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ 43075
datasets/hydrometric/download_summary.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "download_date": "2026-08-13T22:11:14.029275",
3
+ "num_stations": 27,
4
+ "stations_with_metadata": 0,
5
+ "historical_data": {
6
+ "QmJ": 0,
7
+ "QIJ": 0,
8
+ "HIJ": 0,
9
+ "QmM": 0,
10
+ "QIM": 0,
11
+ "HIM": 0
12
+ },
13
+ "realtime_observations": 0
14
+ }
datasets/hydrometric/waterlevel_observations.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6d65f98eb9c9e9f8d4b02acfb329133c722acbc72b0e8c83c0df18375bd61bc4
3
+ size 14030867
datasets/hydrometric/waterlevel_observations.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8899387fe06ebdd592b96f7f20e7c1d6f6e08248c245c29d928150b6085834ee
3
+ size 46900156
datasets/reach_graph/eure_edges.csv ADDED
The diff for this file is too large to render. See raw diff
 
datasets/reach_graph/eure_nodes.csv ADDED
The diff for this file is too large to render. See raw diff
 
datasets/reach_graph/risle_edges.csv ADDED
The diff for this file is too large to render. See raw diff
 
datasets/reach_graph/risle_nodes.csv ADDED
The diff for this file is too large to render. See raw diff
 
datasets/safran/download_log.txt ADDED
The diff for this file is too large to render. See raw diff
 
datasets/safran/download_pid.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ 26979