Spaces:
Running on Zero
Running on Zero
Upload folder using huggingface_hub
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +26 -0
- README.md +547 -279
- datasets/bdcavites/cavite_localisee.geojson +3 -0
- datasets/bdcharm50/GEO050K_HARM_027.zip +3 -0
- datasets/bdcharm50/GEO050K_HARM_028.zip +3 -0
- datasets/bdcharm50/GEO050K_HARM_061.zip +3 -0
- datasets/bdcharm50/dept_027/Descriptif des cartes géologiques à 1_50 000 vecteur.pdf +3 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_DIVERS_2154.dbf +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_DIVERS_2154.lyr +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_DIVERS_2154.prj +1 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_DIVERS_2154.qml +2 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_DIVERS_2154.shp +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_DIVERS_2154.shx +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.dbf +3 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.lyr +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.prj +1 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.qml +2 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.shp +3 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.shx +3 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_STRUCT_2154.dbf +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_STRUCT_2154.lyr +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_STRUCT_2154.prj +1 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_STRUCT_2154.qml +2 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_STRUCT_2154.shp +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_STRUCT_2154.shx +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.dbf +3 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.lyr +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.prj +1 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.qml +2 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.shp +3 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.shx +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_STRUCT_2154.dbf +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_STRUCT_2154.lyr +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_STRUCT_2154.prj +1 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_STRUCT_2154.qml +2 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_STRUCT_2154.shp +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_STRUCT_2154.shx +0 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.dbf +3 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.lyr +3 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.prj +1 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.qml +2 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.shp +3 -0
- datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.shx +0 -0
- datasets/bdcharm50/dept_028/Descriptif des cartes géologiques à 1_50 000 vecteur.pdf +3 -0
- datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.dbf +3 -0
- datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.lyr +0 -0
- datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.prj +1 -0
- datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.qml +2 -0
- datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.shp +3 -0
- datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.shx +0 -0
.gitattributes
CHANGED
|
@@ -187,3 +187,29 @@ datasets/draft/era5_2009.nc filter=lfs diff=lfs merge=lfs -text
|
|
| 187 |
datasets/draft/era5_2010.nc filter=lfs diff=lfs merge=lfs -text
|
| 188 |
datasets/draft/era5_2011.nc filter=lfs diff=lfs merge=lfs -text
|
| 189 |
datasets/draft/era5_2012.nc filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 187 |
datasets/draft/era5_2010.nc filter=lfs diff=lfs merge=lfs -text
|
| 188 |
datasets/draft/era5_2011.nc filter=lfs diff=lfs merge=lfs -text
|
| 189 |
datasets/draft/era5_2012.nc filter=lfs diff=lfs merge=lfs -text
|
| 190 |
+
datasets/bdcavites/cavite_localisee.geojson filter=lfs diff=lfs merge=lfs -text
|
| 191 |
+
datasets/bdcharm50/dept_027/Descriptif[[:space:]]des[[:space:]]cartes[[:space:]]géologiques[[:space:]]à[[:space:]]1_50[[:space:]]000[[:space:]]vecteur.pdf filter=lfs diff=lfs merge=lfs -text
|
| 192 |
+
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.dbf filter=lfs diff=lfs merge=lfs -text
|
| 193 |
+
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.shp filter=lfs diff=lfs merge=lfs -text
|
| 194 |
+
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.shx filter=lfs diff=lfs merge=lfs -text
|
| 195 |
+
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.dbf filter=lfs diff=lfs merge=lfs -text
|
| 196 |
+
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.shp filter=lfs diff=lfs merge=lfs -text
|
| 197 |
+
datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.dbf filter=lfs diff=lfs merge=lfs -text
|
| 198 |
+
datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.lyr filter=lfs diff=lfs merge=lfs -text
|
| 199 |
+
datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.shp filter=lfs diff=lfs merge=lfs -text
|
| 200 |
+
datasets/bdcharm50/dept_028/Descriptif[[:space:]]des[[:space:]]cartes[[:space:]]géologiques[[:space:]]à[[:space:]]1_50[[:space:]]000[[:space:]]vecteur.pdf filter=lfs diff=lfs merge=lfs -text
|
| 201 |
+
datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.dbf filter=lfs diff=lfs merge=lfs -text
|
| 202 |
+
datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.shp filter=lfs diff=lfs merge=lfs -text
|
| 203 |
+
datasets/bdcharm50/dept_028/GEO050K_HARM_028_S_FGEOL_2154.dbf filter=lfs diff=lfs merge=lfs -text
|
| 204 |
+
datasets/bdcharm50/dept_028/GEO050K_HARM_028_S_FGEOL_2154.shp filter=lfs diff=lfs merge=lfs -text
|
| 205 |
+
datasets/bdcharm50/dept_061/Descriptif[[:space:]]des[[:space:]]cartes[[:space:]]géologiques[[:space:]]à[[:space:]]1_50[[:space:]]000[[:space:]]vecteur.pdf filter=lfs diff=lfs merge=lfs -text
|
| 206 |
+
datasets/bdcharm50/dept_061/GEO050K_HARM_061_L_FGEOL_2154.dbf filter=lfs diff=lfs merge=lfs -text
|
| 207 |
+
datasets/bdcharm50/dept_061/GEO050K_HARM_061_L_FGEOL_2154.shp filter=lfs diff=lfs merge=lfs -text
|
| 208 |
+
datasets/bdcharm50/dept_061/GEO050K_HARM_061_L_FGEOL_2154.shx filter=lfs diff=lfs merge=lfs -text
|
| 209 |
+
datasets/bdcharm50/dept_061/GEO050K_HARM_061_L_STRUCT_2154.dbf filter=lfs diff=lfs merge=lfs -text
|
| 210 |
+
datasets/bdcharm50/dept_061/GEO050K_HARM_061_L_STRUCT_2154.shp filter=lfs diff=lfs merge=lfs -text
|
| 211 |
+
datasets/bdcharm50/dept_061/GEO050K_HARM_061_P_DIVERS_2154.dbf filter=lfs diff=lfs merge=lfs -text
|
| 212 |
+
datasets/bdcharm50/dept_061/GEO050K_HARM_061_P_STRUCT_2154.dbf filter=lfs diff=lfs merge=lfs -text
|
| 213 |
+
datasets/bdcharm50/dept_061/GEO050K_HARM_061_S_FGEOL_2154.dbf filter=lfs diff=lfs merge=lfs -text
|
| 214 |
+
datasets/bdcharm50/dept_061/GEO050K_HARM_061_S_FGEOL_2154.lyr filter=lfs diff=lfs merge=lfs -text
|
| 215 |
+
datasets/bdcharm50/dept_061/GEO050K_HARM_061_S_FGEOL_2154.shp filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -13,8 +13,10 @@ pinned: true
|
|
| 13 |
|
| 14 |
A physics-informed graph neural network that predicts streamflow (discharge,
|
| 15 |
water level) at gauged and ungauged points along two Normandy rivers, La Eure
|
| 16 |
-
and La Risle
|
| 17 |
-
|
|
|
|
|
|
|
| 18 |
|
| 19 |
```mermaid
|
| 20 |
flowchart LR
|
|
@@ -22,29 +24,31 @@ flowchart LR
|
|
| 22 |
ades["ADES<br/>groundwater levels"]
|
| 23 |
era5["Copernicus ERA5<br/>climate reanalysis"]
|
| 24 |
otd["Open Topo Data<br/>station elevation"]
|
| 25 |
-
brgm["BRGM<br/>IDPR"]
|
| 26 |
-
bdtopo["IGN BD TOPO<br/>
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
|
|
|
|
|
|
| 48 |
```
|
| 49 |
|
| 50 |
---
|
|
@@ -53,20 +57,29 @@ flowchart LR
|
|
| 53 |
|
| 54 |
```
|
| 55 |
PoC_v1/
|
| 56 |
-
├── scripts/ # one-off download / extraction scripts
|
| 57 |
│ ├── download_hubeau.py # discharge + water level, Hub'Eau API v2
|
| 58 |
│ ├── download_elevation.py # point elevations, Open Topo Data
|
| 59 |
│ ├── download_era5_sample.py # ERA5 sanity-check pull (Jan 2020 only)
|
| 60 |
│ ├── download_era5_full.py # ERA5 1960–2026, split instant/accum vars
|
| 61 |
│ ├── extract_era5.py # unzips CDS API's zipped NetCDF output
|
| 62 |
-
│ ├──
|
| 63 |
│ ├── download_bdtopo_hydro.py # IGN WFS -> tronçons, surfaces, catchments
|
| 64 |
│ ├── analyze_bdtopo_hydro.py # centerline export + karst check
|
| 65 |
│ ├── run_bdtopo_checks.py # karst + catchment cross-check, one shot
|
| 66 |
-
│
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
│
|
| 68 |
├── src/
|
| 69 |
-
│ ├── app.py # Streamlit river explorer
|
| 70 |
│ ├── generate_plots.py # batch plot generation across all loaders
|
| 71 |
│ ├── test_build_graph.py # graph-construction test/validation suite
|
| 72 |
│ ├── extract_river_centerline.py # digitizes a traced map image into a centerline
|
|
@@ -76,7 +89,7 @@ PoC_v1/
|
|
| 76 |
│ │ │ ├── base.py # BaseDataLoader — shared load()/get_metadata()
|
| 77 |
│ │ │ ├── hydrometric.py # discharge & water level (Hub'Eau)
|
| 78 |
│ │ │ ├── ades.py # groundwater levels (ADES)
|
| 79 |
-
│ │ │ ├── safran.py # ERA5 reanalysis,
|
| 80 |
│ │ │ ├── idpr.py # infiltration/runoff tendency (BRGM)
|
| 81 |
│ │ │ ├── catchment.py # per-station catchment area (Hub'Eau)
|
| 82 |
│ │ │ ├── bdtopo_hydro.py # IGN BD TOPO hydrography (GeoJSON)
|
|
@@ -88,8 +101,10 @@ PoC_v1/
|
|
| 88 |
│ │ └── river_centerline.py # real-centerline interpolation + gauge snapping
|
| 89 |
│ │
|
| 90 |
│ └── graph/
|
| 91 |
-
│ ├── build_graph.py #
|
| 92 |
-
│
|
|
|
|
|
|
|
| 93 |
│
|
| 94 |
├── datasets/ # not checked in; populated by the scripts above
|
| 95 |
│ ├── station_list.csv # raw station roster (X, Y, names, INSEE, etc.)
|
|
@@ -100,10 +115,13 @@ PoC_v1/
|
|
| 100 |
│ ├── hydrometric/
|
| 101 |
│ ├── safran/
|
| 102 |
│ ├── bdtopo_hydro/
|
| 103 |
-
│
|
|
|
|
|
|
|
|
|
|
| 104 |
```
|
| 105 |
|
| 106 |
-
`scripts/` talks to the outside world (APIs, WFS);
|
| 107 |
`src/` doesn't — nothing under `src/` makes a network call, and a script
|
| 108 |
under `src/` that wants one is a bug. Most of `src/data/loaders/` predates
|
| 109 |
the graph work — general-purpose readers/plotters for each dataset, with
|
|
@@ -115,82 +133,200 @@ way around.
|
|
| 115 |
## 2. The graph
|
| 116 |
|
| 117 |
This is the part everything else in the repo exists to feed. Two graphs, one
|
| 118 |
-
per river — `H4xx…` stations feed the La Eure graph
|
| 119 |
-
|
| 120 |
-
|
| 121 |
|
| 122 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 123 |
|
| 124 |
-
|
| 125 |
|
| 126 |
-
|
| 127 |
|
| 128 |
-
|
| 129 |
-
`test_build_graph.py` run against real data, is 16 columns wide across all 27
|
| 130 |
-
stations combined (15 per basin, once `basin_id` is dropped — see §2.3):
|
| 131 |
-
|
| 132 |
-
| Feature | Source | What it is |
|
| 133 |
|---|---|---|
|
| 134 |
-
|
|
| 135 |
-
|
|
| 136 |
-
|
|
| 137 |
-
|
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 145 |
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
|
|
|
| 151 |
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
flag, that looks identical to a station whose real groundwater level happens
|
| 155 |
-
to be close to average. Given how unevenly some of these datasets cover the
|
| 156 |
-
two basins (the Eure's southern reach has essentially no ADES wells within
|
| 157 |
-
range at all), pretending "filled with the mean" and "actually near the mean"
|
| 158 |
-
are the same thing would be a real information loss, not just tidiness.
|
| 159 |
|
| 160 |
-
|
|
|
|
|
|
|
| 161 |
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 165 |
|
| 166 |
| Feature | Meaning |
|
| 167 |
|---|---|
|
| 168 |
-
| `distance_km` | along-river distance between the two
|
| 169 |
-
| `elevation_drop_m` | elevation difference, upstream minus downstream
|
| 170 |
-
| `verified_continuous` | `False` for any edge deliberately flagged via `known_losing_reaches` |
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
them
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 194 |
|
| 195 |
`build_pyg_graphs_per_basin()` returns `{0: eure_graph, 1: risle_graph}`,
|
| 196 |
each with its own local `0..n-1` node indexing, rather than one merged `Data`
|
|
@@ -200,26 +336,15 @@ PyTorch Geometric's own batching (`Batch.from_data_list`) expects a list of
|
|
| 200 |
separate small graphs — building two graphs from the start matches that
|
| 201 |
convention directly.
|
| 202 |
|
| 203 |
-
### 2.
|
| 204 |
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
above, get appended after standardization so they stay honest 0/1 values
|
| 213 |
-
rather than being z-scored into something less interpretable.
|
| 214 |
-
|
| 215 |
-
### 2.5 What it looks like
|
| 216 |
-
|
| 217 |
-
The Streamlit explorer (`src/app.py`) renders both graphs directly — real
|
| 218 |
-
course geometry, gauges colored by elevation, ADES wells layered underneath
|
| 219 |
-
for context. Clicking anywhere on the line resolves to the nearest gauge and
|
| 220 |
-
pulls up its actual discharge/water-level/rating-curve plots:
|
| 221 |
-
|
| 222 |
-

|
| 223 |
|
| 224 |
---
|
| 225 |
|
|
@@ -230,18 +355,20 @@ materially affect what the data means.
|
|
| 230 |
|
| 231 |
### 3.1 Station roster (`station_list.csv`, `station_elevations.csv`)
|
| 232 |
|
| 233 |
-
27 stations across the two basins,
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
|
|
|
|
|
|
| 237 |
`eudem25m` endpoint (`scripts/download_elevation.py`), queried per station
|
| 238 |
-
coordinate —
|
| 239 |
-
|
| 240 |
|
| 241 |
The row order in `station_list.csv` does **not** follow the river's course —
|
| 242 |
verified directly, it jumps around in both latitude and elevation. Anything
|
| 243 |
that needs upstream/downstream ordering has to derive it from elevation,
|
| 244 |
-
latitude, or real centerline position; never from file order.
|
| 245 |
|
| 246 |
Not every station in this list is actively gauged. Cross-referencing station
|
| 247 |
names against the hydrometric data turned up three categories worth knowing
|
|
@@ -255,9 +382,10 @@ about:
|
|
| 255 |
- Everything else with no data is unexplained from the name alone and worth a
|
| 256 |
direct check on Hub'Eau's site before assuming it's just a gap.
|
| 257 |
|
| 258 |
-
|
| 259 |
-
|
| 260 |
-
|
|
|
|
| 261 |
|
| 262 |
### 3.2 Hydrometric data (`hydrometric/`, via `scripts/download_hubeau.py`)
|
| 263 |
|
|
@@ -269,6 +397,15 @@ has `HIXnJ`/`HIXM` (water-level codes) sitting right alongside `QmnJ`
|
|
| 269 |
down to its intended `grandeur` code explicitly (`QmnJ` from the discharge
|
| 270 |
file, `HIXnJ` from the water-level file) rather than trusting the filename.
|
| 271 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 272 |
Only 8 of the 27 stations have any `QmnJ` (daily mean discharge) rows at all.
|
| 273 |
Several others report water level only. This isn't evenly distributed and
|
| 274 |
matters a lot for anything downstream that assumes "gauged" means "has both
|
|
@@ -283,18 +420,28 @@ merges the levels file against the stations file on `code_bss` and renames
|
|
| 283 |
`x`/`y` to `lon`/`lat` — those columns are already in degrees in this dataset,
|
| 284 |
not a projected CRS, so no reprojection happens or is needed.
|
| 285 |
|
| 286 |
-
|
| 287 |
-
`aggregate_to_stations`
|
| 288 |
-
|
| 289 |
-
|
| 290 |
-
|
| 291 |
-
|
| 292 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 293 |
|
| 294 |
Well coverage is not uniform across the two basins. The Eure's southern reach
|
| 295 |
(south of roughly 48.68°N, toward Chartres) has essentially zero wells within
|
| 296 |
-
range in this extract
|
| 297 |
-
empty, and that's a property of the source data, not a bug in the interpolation.
|
| 298 |
|
| 299 |
### 3.4 Climate (`safran/`, via `download_era5_sample.py` / `download_era5_full.py`)
|
| 300 |
|
|
@@ -305,107 +452,203 @@ instantaneous variables (temperature, wind) from accumulated ones
|
|
| 305 |
(precipitation, evaporation, radiation, snowfall, runoff) at the API level —
|
| 306 |
`download_era5_full.py` downloads each set separately per year and merges them,
|
| 307 |
because the CDS API rejects mixed requests. The full pull spans 1960–2026 and
|
| 308 |
-
is genuinely slow
|
| 309 |
-
reason).
|
| 310 |
|
| 311 |
-
`SAFRANLoader` interpolates the ERA5 grid to
|
| 312 |
-
|
| 313 |
-
|
| 314 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 315 |
|
| 316 |
### 3.5 IDPR (`idpr.csv`)
|
| 317 |
|
| 318 |
BRGM's *Indice de Développement et de Persistance des Réseaux* — an
|
| 319 |
infiltration-vs-runoff tendency index, and the closest thing this project has
|
| 320 |
-
to a real soil/drainage covariate.
|
| 321 |
-
|
| 322 |
-
|
| 323 |
-
|
| 324 |
-
possible rather than nearest-neighbor search
|
| 325 |
-
|
| 326 |
-
|
| 327 |
-
|
| 328 |
-
|
| 329 |
-
|
| 330 |
-
|
| 331 |
-
|
| 332 |
-
|
| 333 |
-
|
| 334 |
-
|
| 335 |
-
|
| 336 |
-
not
|
| 337 |
-
|
| 338 |
-
|
| 339 |
-
|
| 340 |
-
|
| 341 |
-
|
| 342 |
-
|
|
|
|
|
|
|
|
|
|
| 343 |
This number is **cumulative** — the total catchment area draining to that
|
| 344 |
-
point, all the way to the source.
|
| 345 |
-
|
| 346 |
-
|
| 347 |
-
|
| 348 |
-
|
| 349 |
-
|
| 350 |
-
|
| 351 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 352 |
|
| 353 |
### 3.7 BD TOPO hydrography (`bdtopo_hydro/`, via `scripts/download_bdtopo_hydro.py`)
|
| 354 |
|
| 355 |
IGN's BD TOPO / BD TOPAGE hydrographic network, pulled from the Geoplateforme
|
| 356 |
WFS (`https://data.geopf.fr/wfs`) rather than downloaded as a national bulk
|
| 357 |
file — the download script queries a bounding box around the two basins
|
| 358 |
-
instead. Three layers, all scoped to
|
| 359 |
-
|
| 360 |
-
|
| 361 |
-
|
| 362 |
-
|
| 363 |
-
|
|
|
|
|
|
|
| 364 |
- `surface_hydrographique.geojson` — hydrographic surfaces, including a
|
| 365 |
`Nature` attribute that's supposed to flag karst-influenced reaches. IGN
|
| 366 |
-
documents this attribute as **provisional and incomplete**
|
| 367 |
-
a limited, sometimes-default set of values pending refinement by the water
|
| 368 |
-
agencies. A negative karst search here is not strong evidence of anything;
|
| 369 |
-
it may just mean that stretch hasn't been annotated yet.
|
| 370 |
- `bassin_versant_topographique.geojson` — catchment polygons, incremental
|
| 371 |
-
(see §3.6).
|
| 372 |
-
|
| 373 |
-
**WFS axis order**: when a `BBOX` parameter's CRS is given via the URN form
|
| 374 |
-
|
| 375 |
-
|
| 376 |
-
|
| 377 |
-
|
| 378 |
-
|
| 379 |
-
|
| 380 |
-
|
| 381 |
-
|
| 382 |
-
**
|
| 383 |
-
|
| 384 |
-
|
| 385 |
-
|
| 386 |
-
|
| 387 |
-
|
| 388 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 389 |
|
| 390 |
**The bétoire finding**: two stations in the roster are explicitly named
|
| 391 |
*"[amont bétoire]"* and *"[aval bétoire]"* in Hub'Eau's own site names —
|
| 392 |
-
*bétoire* being the Normandy dialect term for a karst swallow-hole.
|
| 393 |
-
|
| 394 |
-
|
| 395 |
-
|
| 396 |
-
|
| 397 |
-
|
| 398 |
-
|
| 399 |
-
|
| 400 |
-
|
| 401 |
-
|
| 402 |
-
|
| 403 |
-
|
| 404 |
-
|
| 405 |
-
|
| 406 |
-
|
| 407 |
-
|
| 408 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 409 |
|
| 410 |
`centerlines/eure_centerline.csv` and `centerlines/risle_centerline.csv` — the
|
| 411 |
geometry `build_surface_edges` orders stations against — are generated by
|
|
@@ -433,80 +676,82 @@ vector source isn't available, not the method used for the current
|
|
| 433 |
|
| 434 |
## 4. Applications
|
| 435 |
|
| 436 |
-
|
|
|
|
|
|
|
| 437 |
river, click (or slide) along its course, see interpolated elevation,
|
| 438 |
estimated groundwater level, and — for whichever real gauge is nearest that
|
| 439 |
point — water level, discharge, and rating-curve plots pulled directly from
|
| 440 |
`HydrometricLoader`'s own plotting methods rather than reimplemented.
|
| 441 |
|
| 442 |
Click support uses Streamlit's native chart-selection
|
| 443 |
-
(`st.plotly_chart(..., on_select="rerun")`,
|
| 444 |
-
|
| 445 |
-
|
| 446 |
-
|
| 447 |
-
|
| 448 |
-
|
| 449 |
-
|
| 450 |
-
controls in sync. It also de-duplicates incoming click events, since
|
| 451 |
Streamlit's chart-selection state persists across reruns caused by *other*
|
| 452 |
-
widgets and would otherwise re-fire on every unrelated interaction
|
| 453 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 454 |
|
| 455 |
---
|
| 456 |
|
| 457 |
## 5. Testing (`src/test_build_graph.py`)
|
| 458 |
|
| 459 |
-
Not a unit test suite in the pytest sense — a
|
| 460 |
-
|
| 461 |
-
|
| 462 |
-
|
| 463 |
-
|
| 464 |
-
|
| 465 |
-
|
| 466 |
-
|
| 467 |
-
|
| 468 |
-
|
| 469 |
-
|
| 470 |
-
centerline is currently in `centerlines/`
|
| 471 |
-
|
| 472 |
-
|
| 473 |
-
|
| 474 |
-
|
| 475 |
-
|
| 476 |
-
|
| 477 |
-
|
| 478 |
-
|
| 479 |
-
|
| 480 |
-
|
| 481 |
-
-
|
| 482 |
-
|
| 483 |
-
|
| 484 |
-
|
| 485 |
-
|
| 486 |
-
|
| 487 |
-
|
| 488 |
-
|
| 489 |
-
|
| 490 |
-
|
| 491 |
-
|
| 492 |
-
this project can resolve unilaterally.
|
| 493 |
-
- **Catchment area exists in two incompatible forms** (Hub'Eau cumulative vs.
|
| 494 |
-
BD TOPO incremental) and nothing currently derives a true independent
|
| 495 |
-
cumulative catchment from BD TOPO alone by summing incremental polygons
|
| 496 |
-
upstream of each gauge. Doable, not done.
|
| 497 |
-
- **13 of 27 stations have some hydrometric data; 8 have discharge
|
| 498 |
-
specifically.** Any model trained on discharge as a target has a real,
|
| 499 |
-
uneven gauge-density problem to contend with, not just a "some nodes are
|
| 500 |
-
unlabeled" abstraction.
|
| 501 |
-
- **No true soil or permeability dataset.** IDPR is a tendency index, useful
|
| 502 |
-
but not a substitute.
|
| 503 |
-
- **The groundwater-well BDLISA aquifer-unit field is unused.** If a
|
| 504 |
-
subsurface connectivity edge is ever justified with real evidence rather
|
| 505 |
-
than proximity, this is the first place to look.
|
| 506 |
|
| 507 |
---
|
| 508 |
|
| 509 |
-
##
|
| 510 |
|
| 511 |
Data acquisition (from repo root, in roughly dependency order):
|
| 512 |
|
|
@@ -515,12 +760,35 @@ python -m scripts.download_hubeau
|
|
| 515 |
python -m scripts.download_elevation
|
| 516 |
python -m scripts.download_era5_full # slow; download_era5_sample.py first if just testing
|
| 517 |
python -m scripts.extract_era5
|
| 518 |
-
python -m scripts.
|
| 519 |
python -m scripts.download_bdtopo_hydro --check # verify typeNames before the real pull
|
| 520 |
python -m scripts.download_bdtopo_hydro
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 521 |
```
|
| 522 |
|
| 523 |
-
Validate
|
| 524 |
|
| 525 |
```bash
|
| 526 |
python -m src.test_build_graph --data-root datasets
|
|
|
|
| 13 |
|
| 14 |
A physics-informed graph neural network that predicts streamflow (discharge,
|
| 15 |
water level) at gauged and ungauged points along two Normandy rivers, La Eure
|
| 16 |
+
and La Risle — each modeled as a real reach-based network (confluences,
|
| 17 |
+
braided splits/rejoins, ~4,500 nodes per basin including virtual infill
|
| 18 |
+
points), not a single chain of gauges, with covariates pulled from nine
|
| 19 |
+
independent data sources.
|
| 20 |
|
| 21 |
```mermaid
|
| 22 |
flowchart LR
|
|
|
|
| 24 |
ades["ADES<br/>groundwater levels"]
|
| 25 |
era5["Copernicus ERA5<br/>climate reanalysis"]
|
| 26 |
otd["Open Topo Data<br/>station elevation"]
|
| 27 |
+
brgm["BRGM<br/>IDPR · BD Charm-50 geology"]
|
| 28 |
+
bdtopo["IGN BD TOPO<br/>real reach topology + catchment polygons"]
|
| 29 |
+
bdcav["Géorisques<br/>BDCavités (sinkholes)"]
|
| 30 |
+
wc["ESA WorldCover<br/>landcover · NDVI"]
|
| 31 |
+
|
| 32 |
+
bdtopo --> brg["build_reach_graph.py<br/>real confluences, splits/rejoins,<br/>gauge snapping"]
|
| 33 |
+
brg --> brgs["build_reach_graphs.py<br/>~4,500 nodes/basin"]
|
| 34 |
+
|
| 35 |
+
hubeau --> nf
|
| 36 |
+
ades --> nf
|
| 37 |
+
era5 --> nf
|
| 38 |
+
otd --> nf
|
| 39 |
+
brgm --> nf
|
| 40 |
+
bdcav --> nf
|
| 41 |
+
wc --> nf
|
| 42 |
+
brgs --> nf["node_features.py /<br/>enrich_reach_graph.py<br/>date-filtered 2013-2026"]
|
| 43 |
+
|
| 44 |
+
bdtopo --> cc["compute_cumulative_catchment.py<br/>graph-wide catchment area"]
|
| 45 |
+
cc --> nf
|
| 46 |
+
|
| 47 |
+
nf --> pyg["build_pyg_graph<br/>x_static / x_dynamic split"]
|
| 48 |
+
pyg --> phys["physics_losses.py<br/>confluence · split-rejoin ·<br/>routing · water balance"]
|
| 49 |
+
|
| 50 |
+
pyg --> app["src/app.py<br/>Streamlit explorer +<br/>network validation view"]
|
| 51 |
+
pyg --> testsuite["test_build_graph.py<br/>validation"]
|
| 52 |
```
|
| 53 |
|
| 54 |
---
|
|
|
|
| 57 |
|
| 58 |
```
|
| 59 |
PoC_v1/
|
| 60 |
+
├── scripts/ # one-off download / extraction / build scripts
|
| 61 |
│ ├── download_hubeau.py # discharge + water level, Hub'Eau API v2
|
| 62 |
│ ├── download_elevation.py # point elevations, Open Topo Data
|
| 63 |
│ ├── download_era5_sample.py # ERA5 sanity-check pull (Jan 2020 only)
|
| 64 |
│ ├── download_era5_full.py # ERA5 1960–2026, split instant/accum vars
|
| 65 |
│ ├── extract_era5.py # unzips CDS API's zipped NetCDF output
|
| 66 |
+
│ ├── download_catchment.py # Hub'Eau referentiel/sites -> surface_bv
|
| 67 |
│ ├── download_bdtopo_hydro.py # IGN WFS -> tronçons, surfaces, catchments
|
| 68 |
│ ├── analyze_bdtopo_hydro.py # centerline export + karst check
|
| 69 |
│ ├── run_bdtopo_checks.py # karst + catchment cross-check, one shot
|
| 70 |
+
│ ├── cross_check_catchments.py # spatial join: station -> containing polygon
|
| 71 |
+
│ ├── build_reach_graphs.py # real reach-based topology, both basins
|
| 72 |
+
│ ├── enrich_reach_graph.py # runs node_features.py against the reach graph
|
| 73 |
+
│ ├── compute_cumulative_catchment.py # graph-wide catchment area from BD TOPO polygons
|
| 74 |
+
│ ├── diagnose_confluences.py # verify real vs. artifact confluences
|
| 75 |
+
│ ├── download_bdcavites.py # Géorisques BDCavités (sinkhole/cavity inventory)
|
| 76 |
+
│ ├── download_bdcharm.py # BRGM BD Charm-50 harmonized geology, per department
|
| 77 |
+
│ ├── fetch_idpr_brgm.py # (unused — see §3.5) live IDPR re-fetch attempt
|
| 78 |
+
│ ├── fetch_landcover.py # ESA WorldCover landcover class, real gauges
|
| 79 |
+
│ └── fetch_worldcover_ndvi.py # ESA WorldCover NDVI percentile composite
|
| 80 |
│
|
| 81 |
├── src/
|
| 82 |
+
│ ├── app.py # Streamlit river explorer + network validation view
|
| 83 |
│ ├── generate_plots.py # batch plot generation across all loaders
|
| 84 |
│ ├── test_build_graph.py # graph-construction test/validation suite
|
| 85 |
│ ├── extract_river_centerline.py # digitizes a traced map image into a centerline
|
|
|
|
| 89 |
│ │ │ ├── base.py # BaseDataLoader — shared load()/get_metadata()
|
| 90 |
│ │ │ ├── hydrometric.py # discharge & water level (Hub'Eau)
|
| 91 |
│ │ │ ├── ades.py # groundwater levels (ADES)
|
| 92 |
+
│ │ │ ├── safran.py # ERA5 reanalysis, vectorized station interpolation
|
| 93 |
│ │ │ ├── idpr.py # infiltration/runoff tendency (BRGM)
|
| 94 |
│ │ │ ├── catchment.py # per-station catchment area (Hub'Eau)
|
| 95 |
│ │ │ ├── bdtopo_hydro.py # IGN BD TOPO hydrography (GeoJSON)
|
|
|
|
| 101 |
│ │ └── river_centerline.py # real-centerline interpolation + gauge snapping
|
| 102 |
│ │
|
| 103 |
│ └── graph/
|
| 104 |
+
│ ├── build_graph.py # PyG conversion: x_static/x_dynamic split, structural columns
|
| 105 |
+
│ ├── build_reach_graph.py # real reach topology: confluences, splits/rejoins, MultiDiGraph
|
| 106 |
+
│ ├── node_features.py # pulls every loader into one feature table
|
| 107 |
+
│ └── physics_losses.py # confluence/split-rejoin/routing/water-balance loss terms
|
| 108 |
│
|
| 109 |
├── datasets/ # not checked in; populated by the scripts above
|
| 110 |
│ ├── station_list.csv # raw station roster (X, Y, names, INSEE, etc.)
|
|
|
|
| 115 |
│ ├── hydrometric/
|
| 116 |
│ ├── safran/
|
| 117 |
│ ├── bdtopo_hydro/
|
| 118 |
+
│ ├── bdcavites/
|
| 119 |
+
│ ├── bdcharm50/
|
| 120 |
+
│ ├── centerlines/
|
| 121 |
+
│ └── reach_graph/ # {eure,risle}_{nodes,edges}.csv, _nodes_enriched.csv
|
| 122 |
```
|
| 123 |
|
| 124 |
+
`scripts/` talks to the outside world (APIs, WFS, S3);
|
| 125 |
`src/` doesn't — nothing under `src/` makes a network call, and a script
|
| 126 |
under `src/` that wants one is a bug. Most of `src/data/loaders/` predates
|
| 127 |
the graph work — general-purpose readers/plotters for each dataset, with
|
|
|
|
| 133 |
## 2. The graph
|
| 134 |
|
| 135 |
This is the part everything else in the repo exists to feed. Two graphs, one
|
| 136 |
+
per river — `H4xx…` stations feed the La Eure graph, `H6xx…` feed La Risle —
|
| 137 |
+
built with no edge between them, because there's no surface connection
|
| 138 |
+
between the two basins to model.
|
| 139 |
|
| 140 |
+
The graph is now built from **real reach topology**, not a single ordered
|
| 141 |
+
chain of gauges. `build_reach_graph.py` constructs it directly from BD TOPO's
|
| 142 |
+
own tronçon-to-node linkage (`lien_vers_noeud_hydrographique_ini/fin`) — the
|
| 143 |
+
NEXT_DOWN-equivalent approach — rather than inferring station order from
|
| 144 |
+
position along a digitized line. That means real branching, real confluences,
|
| 145 |
+
and real braided-channel structure fall directly out of the data instead of
|
| 146 |
+
needing to be modeled separately.
|
| 147 |
|
| 148 |
+
### 2.1 Node types
|
| 149 |
|
| 150 |
+
Four kinds of node, not one:
|
| 151 |
|
| 152 |
+
| Type | What it is | Column |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 153 |
|---|---|---|
|
| 154 |
+
| Real gauge | one of the 27 hydrometric stations | `is_gauged` |
|
| 155 |
+
| Real confluence | a genuinely different, independently-sourced river joins | `is_confluence` |
|
| 156 |
+
| Split / rejoin | a channel divides and later recombines (braiding, an anabranch) — same water, no new mass | `is_split_point` / `is_rejoin_point`, paired via `braid_id` |
|
| 157 |
+
| Virtual (infill) | inserted along long confluence-free stretches so "predict at any point" has real spatial resolution | none of the above |
|
| 158 |
+
|
| 159 |
+
A **confluence** requires more than a shared node with in-degree ≥ 2 — BD
|
| 160 |
+
TOPO's fine tronçon segmentation produces plenty of same-river multi-inflow
|
| 161 |
+
points with no real branching involved (confirmed against real data:
|
| 162 |
+
incoming-edge distances as short as 4.6 m at some falsely-flagged
|
| 163 |
+
"confluences"). The real test (`find_real_confluences` in
|
| 164 |
+
`build_reach_graph.py`) requires (a) more than one distinct *normalized* river
|
| 165 |
+
name among the incoming edges — river-name normalization strips articles,
|
| 166 |
+
parenthetical qualifiers, and "bras de/du/d'" (arm-of) prefixes, since a named
|
| 167 |
+
secondary channel of the same river ("Bras de la Charentonne") isn't a
|
| 168 |
+
different river — and (b) that those branches don't trace back to a common
|
| 169 |
+
upstream **split** within 15 km, which would mean it's a rejoin, not a
|
| 170 |
+
confluence. Splits themselves need no such disambiguation: out-degree ≥ 2 is
|
| 171 |
+
an unambiguous physical definition on its own, since a split by construction
|
| 172 |
+
has exactly one thing flowing in.
|
| 173 |
+
|
| 174 |
+
Real branching topology also meant the underlying graph had to move from a
|
| 175 |
+
plain `DiGraph` to a `MultiDiGraph` — two distinct tronçons directly
|
| 176 |
+
connecting the same two hydrographic nodes (exactly the shape a short braid
|
| 177 |
+
takes) is real data, not a collision, and a plain `DiGraph` was silently
|
| 178 |
+
**overwriting** the second such edge's data on `add_edge` rather than keeping
|
| 179 |
+
both. Confirmed as a real bug with real impact, not just a synthetic-test
|
| 180 |
+
concern: fixing it recovered dozens of previously-invisible parallel edges
|
| 181 |
+
per basin on the actual data.
|
| 182 |
+
|
| 183 |
+
### 2.2 Node and edge features
|
| 184 |
+
|
| 185 |
+
The feature set now spans several independent sources, each merged onto the
|
| 186 |
+
node table by `node_features.py`'s `add_*_features` functions. Every column
|
| 187 |
+
lands in exactly one of four places once `build_pyg_graph` processes it:
|
| 188 |
|
| 189 |
+
```mermaid
|
| 190 |
+
flowchart TD
|
| 191 |
+
raw["Enriched node table<br/>(node_features.py)"]
|
| 192 |
+
|
| 193 |
+
raw --> struct{"structural /<br/>graph-role column?"}
|
| 194 |
+
struct -->|"is_gauged, is_confluence,<br/>is_split_point, is_rejoin_point,<br/>braid_id, snap_distance_km"| structout["data.is_gauged, data.is_confluence, ...<br/>own Data attribute — never in x"]
|
| 195 |
|
| 196 |
+
raw --> tgt{"target_* column?"}
|
| 197 |
+
tgt -->|"target_discharge_m3s_*<br/>target_waterlevel_mm_*"| y["data.y<br/>never in x — label leakage otherwise"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 198 |
|
| 199 |
+
raw --> feat{"real model input"}
|
| 200 |
+
feat -->|"static: elevation_m, idpr_*,<br/>catchment_area_km2, landcover_*,<br/>geology_*, cavites distance/count"| xstatic["data.x_static"]
|
| 201 |
+
feat -->|"dynamic: climate_*,<br/>avg_groundwater_*, ndvi_*<br/>(period-aggregate, not a real series yet)"| xdynamic["data.x_dynamic"]
|
| 202 |
|
| 203 |
+
xstatic --> x["data.x — full combined tensor,<br/>z-scored"]
|
| 204 |
+
xdynamic --> x
|
| 205 |
+
|
| 206 |
+
edges["Edge table<br/>(build_reach_graph_tables)"] --> eattr{"numeric edge<br/>attribute?"}
|
| 207 |
+
eattr -->|"distance_km,<br/>elevation_drop_m,<br/>verified_continuous"| edgeattr["data.edge_attr<br/>[n_edges, 3]"]
|
| 208 |
+
eattr -->|"toponym, cleabs<br/>(diagnostic metadata)"| meta["not used by build_pyg_graph —<br/>stays in edges_df only"]
|
| 209 |
+
```
|
| 210 |
+
|
| 211 |
+
**Node features:**
|
| 212 |
+
|
| 213 |
+
| Feature | Source | Coverage |
|
| 214 |
+
|---|---|---|
|
| 215 |
+
| `latitude`, `longitude`, `elevation_m` | station coords / real BD TOPO tronçon Z | every node |
|
| 216 |
+
| `idpr_value`, `idpr_nearest_point_distance` | BRGM IDPR | every node (spatial fallback for non-gauge codes) |
|
| 217 |
+
| `catchment_area_km2` | Hub'Eau, cumulative, real gauges only | 27 stations |
|
| 218 |
+
| `cumulative_catchment_area_km2` | BD TOPO incremental polygons, summed upstream via real graph topology | graph-wide (~98% of nodes) |
|
| 219 |
+
| `landcover_*` (one-hot) | ESA WorldCover 10 m classification | real gauges only, for now |
|
| 220 |
+
| `ndvi_p10`, `ndvi_p50`, `ndvi_p90` | ESA WorldCover NDVI percentile composite | real gauges only, for now |
|
| 221 |
+
| `geology_*` (one-hot) | BRGM BD Charm-50, point-in-polygon | real gauges only, for now |
|
| 222 |
+
| `distance_to_nearest_cavity_km`, `n_cavities_within_20km` | Géorisques BDCavités, KD-tree + haversine | real gauges only, for now |
|
| 223 |
+
| `avg_groundwater_level_m`, `avg_groundwater_depth_m`, `n_nearby_wells` | ADES, radius-averaged, KD-tree + exact haversine | every node |
|
| 224 |
+
| `climate_*` (temp/wind/solar/precip/evap/snow/runoff) | ERA5, vectorized station interpolation | every node (needs `safran_path`) |
|
| 225 |
+
| `{col}__was_missing` | auto-generated | any feature column with real gaps |
|
| 226 |
+
|
| 227 |
+
**Edge features** — three numeric attributes per edge, from
|
| 228 |
+
`build_reach_graph.py`'s `build_reach_graph_tables`:
|
| 229 |
|
| 230 |
| Feature | Meaning |
|
| 231 |
|---|---|
|
| 232 |
+
| `distance_km` | along-river distance between the two endpoint nodes |
|
| 233 |
+
| `elevation_drop_m` | elevation difference, upstream minus downstream — negated on the reverse edge when `bidirectional=True` |
|
| 234 |
+
| `verified_continuous` | `False` for any edge deliberately flagged via `known_losing_reaches` (the bétoire stretch — §3.7) |
|
| 235 |
+
|
| 236 |
+
`toponym` and `cleabs` also live on the real edges table (the tronçon's river
|
| 237 |
+
name and unique BD TOPO ID) but are diagnostic metadata, not model input —
|
| 238 |
+
`build_pyg_graph` selects `edge_attr` columns by explicit name, so extra
|
| 239 |
+
columns like these pass through harmlessly rather than needing to be
|
| 240 |
+
stripped out first.
|
| 241 |
+
|
| 242 |
+
**Structural columns never enter `x`.** `is_gauged`, `is_confluence`,
|
| 243 |
+
`is_split_point`, `is_rejoin_point`, `snap_distance_km`, `braid_id` describe
|
| 244 |
+
node *role*, not a physical covariate — `build_pyg_graph`'s auto-detection
|
| 245 |
+
excludes them explicitly (confirmed as a real, not hypothetical, bug once:
|
| 246 |
+
pandas treats `bool` as a numeric dtype, so without this exclusion these
|
| 247 |
+
columns were being silently z-scored and fed to the model as if they were
|
| 248 |
+
elevation or precipitation). They're still attached to the returned `Data`
|
| 249 |
+
object as their own typed attributes, for masking supervised loss to gauged
|
| 250 |
+
nodes and for the physics-loss index builders.
|
| 251 |
+
|
| 252 |
+
**Landcover and geology are one-hot, not a raw class code.** Both are
|
| 253 |
+
nominal categories (10 = Tree cover, 50 = Built-up; a geological formation
|
| 254 |
+
code), not an ordered quantity — leaving either as a raw integer would let
|
| 255 |
+
auto-detection z-score it as if one category were numerically "more" than
|
| 256 |
+
another, the same class of error as the structural-column bug, just subtler
|
| 257 |
+
since these *are* meant to be real model input.
|
| 258 |
+
|
| 259 |
+
**Targets are not features.** `target_discharge_m3s_mean/std/count` and
|
| 260 |
+
`target_waterlevel_mm_mean/std/count` exist on the enriched table but never
|
| 261 |
+
enter `x` — they're pulled out into `data.y` separately, and attach only to
|
| 262 |
+
real gauge rows (verified: gauge codes, BD TOPO hydrographic node IDs, and
|
| 263 |
+
virtual-node marker strings occupy structurally distinct namespaces, so a
|
| 264 |
+
left-merge on `station_code` can never mislabel a confluence or virtual node).
|
| 265 |
+
|
| 266 |
+
### 2.3 Static vs. dynamic features
|
| 267 |
+
|
| 268 |
+
`build_pyg_graph` also splits every feature by physical temporal nature:
|
| 269 |
+
|
| 270 |
+
- **`data.x_static`** / **`data.static_feature_names`** — genuinely
|
| 271 |
+
time-invariant: elevation, IDPR, catchment area, landcover, coordinates.
|
| 272 |
+
- **`data.x_dynamic`** / **`data.dynamic_feature_names`** — physically
|
| 273 |
+
time-varying quantities: climate, groundwater level/depth, NDVI.
|
| 274 |
+
|
| 275 |
+
`data.x` remains the full combined tensor unchanged; the split is additional,
|
| 276 |
+
not a replacement. **Important limitation, stated plainly**: "dynamic" here
|
| 277 |
+
still means *one period-aggregated number per node* (mean/sum over the whole
|
| 278 |
+
date range, or a single well reading), not a real `[n_nodes, T]` time series.
|
| 279 |
+
The split makes the physical distinction explicit and gives a clean seam for
|
| 280 |
+
a future temporal pipeline to slot into, but building that pipeline — genuine
|
| 281 |
+
daily/whatever-resolution series per node, aligned across sources — is
|
| 282 |
+
separate, larger, unbuilt work. `physics_losses.py`'s `routing_consistency_loss`
|
| 283 |
+
specifically needs that real time dimension and has nothing to consume yet.
|
| 284 |
+
|
| 285 |
+
### 2.4 Date-range filtering
|
| 286 |
+
|
| 287 |
+
`build_node_features`/`enrich_reach_graph.py` accept a `date_range` applied
|
| 288 |
+
to every time-varying source (groundwater, climate, hydrometric targets)
|
| 289 |
+
together, so all three describe the same period rather than each silently
|
| 290 |
+
aggregating over its own full, differently-shaped history (ADES wells
|
| 291 |
+
reporting from the 1970s to 2026 on wildly different schedules; ERA5 spanning
|
| 292 |
+
1960–2026; hydrometric records with their own per-station ranges entirely).
|
| 293 |
+
|
| 294 |
+
Default: **2013-01-01 to 2026-12-31** — computed, not guessed, via a
|
| 295 |
+
brute-force interval-overlap check across all 8 discharge-gauged stations'
|
| 296 |
+
real date ranges. This is the window that maximizes simultaneous station
|
| 297 |
+
coverage: 6 of 8 stations, **8,923 real, quality-filtered observations**
|
| 298 |
+
(`code_qualification >= 16`, the same threshold `HydrometricLoader` itself
|
| 299 |
+
applies — a naive raw count that skips this filter gives 13,084, which is
|
| 300 |
+
what an earlier pass at this analysis originally reported before the
|
| 301 |
+
discrepancy was traced and corrected). Two stations (`H403301101`: 1969–1985,
|
| 302 |
+
`H605022010`: 1970–1980) are permanently excluded by any reasonable window —
|
| 303 |
+
a ~35–40 year dead gap separates them from every other station's record, so
|
| 304 |
+
including them would mean spanning six mostly-empty decades, not a genuine
|
| 305 |
+
improvement.
|
| 306 |
+
|
| 307 |
+
### 2.5 Physics-informed loss terms (`physics_losses.py`)
|
| 308 |
+
|
| 309 |
+
Four constraints, each tied to real graph structure, not generic:
|
| 310 |
+
|
| 311 |
+
| Term | Constraint | Applies to |
|
| 312 |
+
|---|---|---|
|
| 313 |
+
| `confluence_mass_balance_loss` | `Q_confluence ≈ sum(Q_upstream_branches)` — new mass genuinely enters | `is_confluence` nodes |
|
| 314 |
+
| `split_rejoin_conservation_loss` | `Q_split ≈ Q_rejoin` — same water, no new mass | paired `braid_id` nodes |
|
| 315 |
+
| `routing_consistency_loss` | `Q_downstream[t] ≈ Q_upstream[t - lag]`, lag from real `distance_km`/slope | every edge (needs `[n_nodes, T]` — see §2.3) |
|
| 316 |
+
| `water_balance_loss` | `P - ET - Q - ΔS ≈ 0` in volume terms | nodes with `cumulative_catchment_area_km2` |
|
| 317 |
+
|
| 318 |
+
Confluence and split/rejoin are deliberately different constraints, not one
|
| 319 |
+
generic "conserve mass everywhere" rule — a model that only learned "sum the
|
| 320 |
+
inflows" would get a split/rejoin wrong, since a rejoin's two branches
|
| 321 |
+
together should equal the *split's* value, not add something new on top.
|
| 322 |
+
All four apply graph-wide, not just at the 27 labeled gauges — that's the
|
| 323 |
+
actual mechanism by which sparse supervision generalizes to the ~4,500
|
| 324 |
+
ungauged nodes, not an incidental detail. `ΔS` (storage change) defaults to
|
| 325 |
+
zero, a named steady-state approximation — this project has no direct
|
| 326 |
+
basin-wide storage measurement, only sparse well *levels*, which aren't the
|
| 327 |
+
same thing.
|
| 328 |
+
|
| 329 |
+
### 2.6 Two graphs, not one
|
| 330 |
|
| 331 |
`build_pyg_graphs_per_basin()` returns `{0: eure_graph, 1: risle_graph}`,
|
| 332 |
each with its own local `0..n-1` node indexing, rather than one merged `Data`
|
|
|
|
| 336 |
separate small graphs — building two graphs from the start matches that
|
| 337 |
convention directly.
|
| 338 |
|
| 339 |
+
### 2.7 What it looks like
|
| 340 |
|
| 341 |
+
The Streamlit explorer (`src/app.py`) has two views. "Explore" renders the
|
| 342 |
+
original click-to-read interface over real course geometry. "Network
|
| 343 |
+
validation" renders the full reach graph — confluences as diamonds, gauges as
|
| 344 |
+
elevation-colored circles, every edge as one line trace regardless of edge
|
| 345 |
+
count (verified fast at real scale: 0.29s to build a figure for ~2,900
|
| 346 |
+
edges) — specifically for visually confirming the topology looks like a real
|
| 347 |
+
river network before trusting it as model input.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 348 |
|
| 349 |
---
|
| 350 |
|
|
|
|
| 355 |
|
| 356 |
### 3.1 Station roster (`station_list.csv`, `station_elevations.csv`)
|
| 357 |
|
| 358 |
+
27 stations across the two basins, spanning three French departments —
|
| 359 |
+
verified directly against the real roster: 12 in Eure (27), 10 in
|
| 360 |
+
Eure-et-Loir (28, the Eure's southern tributaries near Chartres/Dreux — Voise,
|
| 361 |
+
Drouette, and others), 2 in Orne (61). Split roughly by Hub'Eau code prefix
|
| 362 |
+
(`H4xx…` for La Eure, `H6xx…` for La Risle — a heuristic based on observed
|
| 363 |
+
codes, not a documented rule). Elevation comes from Open Topo Data's
|
| 364 |
`eudem25m` endpoint (`scripts/download_elevation.py`), queried per station
|
| 365 |
+
coordinate — a point lookup, not a raster, so there's no slope or catchment
|
| 366 |
+
information hiding in it.
|
| 367 |
|
| 368 |
The row order in `station_list.csv` does **not** follow the river's course —
|
| 369 |
verified directly, it jumps around in both latitude and elevation. Anything
|
| 370 |
that needs upstream/downstream ordering has to derive it from elevation,
|
| 371 |
+
latitude, or real centerline/graph position; never from file order.
|
| 372 |
|
| 373 |
Not every station in this list is actively gauged. Cross-referencing station
|
| 374 |
names against the hydrometric data turned up three categories worth knowing
|
|
|
|
| 382 |
- Everything else with no data is unexplained from the name alone and worth a
|
| 383 |
direct check on Hub'Eau's site before assuming it's just a gap.
|
| 384 |
|
| 385 |
+
Of the 8 stations with any `QmnJ` discharge data at all, only **6 have real
|
| 386 |
+
observations within the project's 2013–2026 date window** (§2.4) — worth
|
| 387 |
+
knowing before assuming "8 gauged stations" translates directly into training
|
| 388 |
+
examples.
|
| 389 |
|
| 390 |
### 3.2 Hydrometric data (`hydrometric/`, via `scripts/download_hubeau.py`)
|
| 391 |
|
|
|
|
| 397 |
down to its intended `grandeur` code explicitly (`QmnJ` from the discharge
|
| 398 |
file, `HIXnJ` from the water-level file) rather than trusting the filename.
|
| 399 |
|
| 400 |
+
`HydrometricLoader` also filters on Hub'Eau's own `code_qualification` field,
|
| 401 |
+
keeping only `>= 16` (their "acceptable"/"good" threshold) and dropping lower-
|
| 402 |
+
quality/provisional readings. This is real and meaningful, not a rounding
|
| 403 |
+
detail — traced directly against the raw discharge file for the 2013–2026
|
| 404 |
+
window (§2.4): 13,084 raw `QmnJ` rows in range, of which 4,022 have
|
| 405 |
+
`code_qualification == 12` (below the threshold) and get correctly excluded,
|
| 406 |
+
leaving 8,923. Any manual read of the raw CSVs that skips this filter will
|
| 407 |
+
overcount real usable observations by close to a third.
|
| 408 |
+
|
| 409 |
Only 8 of the 27 stations have any `QmnJ` (daily mean discharge) rows at all.
|
| 410 |
Several others report water level only. This isn't evenly distributed and
|
| 411 |
matters a lot for anything downstream that assumes "gauged" means "has both
|
|
|
|
| 420 |
`x`/`y` to `lon`/`lat` — those columns are already in degrees in this dataset,
|
| 421 |
not a projected CRS, so no reprojection happens or is needed.
|
| 422 |
|
| 423 |
+
`node_features.py`'s `add_groundwater_features` does **not** use
|
| 424 |
+
`ADESLoader.aggregate_to_stations` — that method loops per station and does a
|
| 425 |
+
full haversine `.apply()` over the entire groundwater dataframe for each one.
|
| 426 |
+
At 27 stations against ~272k readings that's slow but tolerable; at the reach
|
| 427 |
+
graph's ~4,500 nodes it's over a billion row-wise Python calls, confirmed as a
|
| 428 |
+
genuine, not hypothetical, multi-hour hang. The fix (reduce to each well's
|
| 429 |
+
latest reading first, then a KD-tree coarse prefilter + exact haversine on the
|
| 430 |
+
small candidate set) turned out to also fix a real accuracy bug: the old
|
| 431 |
+
method required wells to share the *exact same reporting date* before
|
| 432 |
+
averaging, but real wells report on wildly different schedules (18 real
|
| 433 |
+
wells within 20 km of one station spanned 13 different "latest dates," one
|
| 434 |
+
from 1972) — silently discarding most real coverage every time.
|
| 435 |
+
|
| 436 |
+
Groundwater is used as a **station-level input covariate**, not as a graph
|
| 437 |
+
edge. Well proximity alone isn't sufficient grounds for a subsurface/karst
|
| 438 |
+
connectivity edge — that would need either correlated well hydrographs over
|
| 439 |
+
time or a shared BDLISA aquifer-unit code (`groundwater_stations.csv` has a
|
| 440 |
+
`codes_bdlisa` column available for exactly this kind of check; still unused).
|
| 441 |
|
| 442 |
Well coverage is not uniform across the two basins. The Eure's southern reach
|
| 443 |
(south of roughly 48.68°N, toward Chartres) has essentially zero wells within
|
| 444 |
+
range in this extract.
|
|
|
|
| 445 |
|
| 446 |
### 3.4 Climate (`safran/`, via `download_era5_sample.py` / `download_era5_full.py`)
|
| 447 |
|
|
|
|
| 452 |
(precipitation, evaporation, radiation, snowfall, runoff) at the API level —
|
| 453 |
`download_era5_full.py` downloads each set separately per year and merges them,
|
| 454 |
because the CDS API rejects mixed requests. The full pull spans 1960–2026 and
|
| 455 |
+
is genuinely slow.
|
|
|
|
| 456 |
|
| 457 |
+
`SAFRANLoader` interpolates the ERA5 grid to every station **in one
|
| 458 |
+
vectorized xarray call per file**, not one `.sel()` + `.to_dataframe()` call
|
| 459 |
+
per station — the per-station loop version does real per-call work (an index
|
| 460 |
+
lookup, then a full DataFrame conversion) that's tolerable at 27 stations
|
| 461 |
+
(~1,800 calls across ~67 year-files) but was confirmed to actually hang at the
|
| 462 |
+
reach graph's ~4,500 nodes (~193,000 calls). Vectorized indexing with
|
| 463 |
+
DataArray indexers sharing a `station` dimension does every station in one
|
| 464 |
+
call per file instead.
|
| 465 |
|
| 466 |
### 3.5 IDPR (`idpr.csv`)
|
| 467 |
|
| 468 |
BRGM's *Indice de Développement et de Persistance des Réseaux* — an
|
| 469 |
infiltration-vs-runoff tendency index, and the closest thing this project has
|
| 470 |
+
to a real soil/drainage covariate (see §3.9 for why it's standing in for soil
|
| 471 |
+
data specifically, not just conveniently similar). The file used here is
|
| 472 |
+
already one row per station (`station_id` matching `station_code` exactly,
|
| 473 |
+
verified 1:1 against all 27 stations), so `node_features.py` does a direct ID
|
| 474 |
+
join when possible rather than nearest-neighbor search, falling back to
|
| 475 |
+
spatial nearest-neighbor for any station code that isn't an exact match
|
| 476 |
+
(which is every non-gauge reach-graph node, and — a real, minor precision
|
| 477 |
+
trade-off worth knowing — every gauge too, once the table also contains
|
| 478 |
+
non-gauge codes, since the exact-match path requires the *entire* table to
|
| 479 |
+
match IDPR's station list).
|
| 480 |
+
|
| 481 |
+
A live re-fetch from BRGM's own geoservice (`scripts/fetch_idpr_brgm.py`,
|
| 482 |
+
`geoservices.brgm.fr/geologie`, `GetFeatureInfo` point queries against the
|
| 483 |
+
`IDPR_50M` raster layer) was attempted, to get fresher values and eventually
|
| 484 |
+
cover the full reach graph rather than just the 27 gauges. **It failed** in
|
| 485 |
+
testing and the project is currently using the original, already-uploaded
|
| 486 |
+
`idpr.csv` instead — not resolved further, since the existing file already
|
| 487 |
+
gives real, usable IDPR coverage for every gauge.
|
| 488 |
+
|
| 489 |
+
### 3.6 Catchment area — two independent sources
|
| 490 |
+
|
| 491 |
+
**Hub'Eau (`catchment_area.csv`, via `scripts/download_catchment.py`)**:
|
| 492 |
+
published on the **site** referentiel, not the station referentiel —
|
| 493 |
+
`surface_bv` on `hydrometrie/referentiel/sites`, in km². Since one site can
|
| 494 |
+
have several stations, the download script does two passes: station →
|
| 495 |
+
`code_site`, then `code_site` → `surface_bv`. 16 of 27 stations have a value.
|
| 496 |
This number is **cumulative** — the total catchment area draining to that
|
| 497 |
+
point, all the way to the source.
|
| 498 |
+
|
| 499 |
+
**BD TOPO, graph-wide (`cumulative_catchment_area_km2`, via
|
| 500 |
+
`scripts/compute_cumulative_catchment.py`)**: sums BD TOPO's incremental
|
| 501 |
+
catchment polygons upstream of any node, via the real graph topology —
|
| 502 |
+
distinct polygons counted once even when many nodes/edges share the same
|
| 503 |
+
coarse polygon (verified with a hand-computed test case specifically checking
|
| 504 |
+
this). Covers ~98% of nodes graph-wide, not just the 27 gauges — the actual
|
| 505 |
+
fix for the "confluences and virtual nodes have no catchment area at all" gap.
|
| 506 |
+
|
| 507 |
+
**Cross-checked against Hub'Eau's real values on real gauges — and there's a
|
| 508 |
+
real, identified bias, not a clean match.** Ratio (BD-TOPO-summed ÷ Hub'Eau)
|
| 509 |
+
runs from about 0.75 to 1.25 for smaller catchments (< ~800 km², plausibly
|
| 510 |
+
normal polygon-boundary/digitization precision) but drops to 0.75–0.89 for
|
| 511 |
+
the largest catchments (> ~3,500 km²) — a clean, monotonic pattern, not noise.
|
| 512 |
+
Most likely cause: **bounding-box truncation** — the original BD TOPO pull
|
| 513 |
+
bbox had only a 9.6 km margin on its southern edge (the tightest of all four
|
| 514 |
+
directions, and south is exactly where the Eure's longest upstream
|
| 515 |
+
tributaries run, toward Chartres/Dreux), not a safe margin for real watershed
|
| 516 |
+
extent. The bbox in `download_bdtopo_hydro.py` was widened afterward (from
|
| 517 |
+
`(0.3, 48.3, 1.7, 49.5)` to `(-0.1, 47.7, 2.1, 49.9)`, ~2.9x the area) — the
|
| 518 |
+
full `download_bdtopo_hydro.py → build_reach_graphs.py → enrich_reach_graph.py
|
| 519 |
+
→ compute_cumulative_catchment.py` chain needs re-running against the wider
|
| 520 |
+
box to actually resolve this, which had not yet happened as of the last
|
| 521 |
+
verified run in this project.
|
| 522 |
|
| 523 |
### 3.7 BD TOPO hydrography (`bdtopo_hydro/`, via `scripts/download_bdtopo_hydro.py`)
|
| 524 |
|
| 525 |
IGN's BD TOPO / BD TOPAGE hydrographic network, pulled from the Geoplateforme
|
| 526 |
WFS (`https://data.geopf.fr/wfs`) rather than downloaded as a national bulk
|
| 527 |
file — the download script queries a bounding box around the two basins
|
| 528 |
+
instead (see §3.6 for why that box was widened). Three layers, all scoped to
|
| 529 |
+
that bbox:
|
| 530 |
+
|
| 531 |
+
- `troncon_hydrographique.geojson` — river centerline reaches, now the
|
| 532 |
+
primary source for graph *topology* too (§2), via `lien_vers_noeud_
|
| 533 |
+
hydrographique_ini/fin` and `sens_de_l_ecoulement`. Real per-vertex
|
| 534 |
+
altitude data doubles as a fine-grained elevation profile, denser than
|
| 535 |
+
anything derivable from the 27 gauge points alone.
|
| 536 |
- `surface_hydrographique.geojson` — hydrographic surfaces, including a
|
| 537 |
`Nature` attribute that's supposed to flag karst-influenced reaches. IGN
|
| 538 |
+
documents this attribute as **provisional and incomplete**.
|
|
|
|
|
|
|
|
|
|
| 539 |
- `bassin_versant_topographique.geojson` — catchment polygons, incremental
|
| 540 |
+
(see §3.6).
|
| 541 |
+
|
| 542 |
+
**WFS axis order**: when a `BBOX` parameter's CRS is given via the URN form,
|
| 543 |
+
the OGC spec requires latitude, longitude axis order — the opposite of the
|
| 544 |
+
lon,lat order most GIS tools use by default. Getting this backwards doesn't
|
| 545 |
+
raise an error; it silently matches zero real features. `download_bdtopo_hydro.py`
|
| 546 |
+
and `scripts/download_bdcavites.py` both try lon,lat first and automatically
|
| 547 |
+
retry with the axes swapped if that comes back empty.
|
| 548 |
+
|
| 549 |
+
**Real branching topology fixed a naive assumption.** Filtering 30,045
|
| 550 |
+
tronçons down to a single named river and building a graph from their
|
| 551 |
+
endpoints does **not** give one connected line — for "Risle" alone, 1,195
|
| 552 |
+
name-matched tronçons split into 132 disconnected components. Broadening the
|
| 553 |
+
name filter to include known tributaries (§2.1) initially made this *worse*
|
| 554 |
+
(487/214 components), traced to short/generic tributary names ("Bec", "Avre")
|
| 555 |
+
matching unrelated streams elsewhere within the ~100×130 km bbox — fixed by
|
| 556 |
+
requiring every name-matched tronçon to also fall within a real distance of a
|
| 557 |
+
known gauge (`load_troncons_for_basin`'s `anchor_radius_km`), and by selecting
|
| 558 |
+
the connected component actually containing the most real gauges rather than
|
| 559 |
+
the component with the most raw tronçons (`best_component_for_stations`) —
|
| 560 |
+
proven to matter, not just theoretically: a synthetic adversarial test showed
|
| 561 |
+
the naive "biggest component" approach picking a larger but entirely
|
| 562 |
+
unrelated decoy network over the real one.
|
| 563 |
|
| 564 |
**The bétoire finding**: two stations in the roster are explicitly named
|
| 565 |
*"[amont bétoire]"* and *"[aval bétoire]"* in Hub'Eau's own site names —
|
| 566 |
+
*bétoire* being the Normandy dialect term for a karst swallow-hole. Three
|
| 567 |
+
edges spanning that stretch on La Risle (`H605641101 → H605022010 →
|
| 568 |
+
H605641401 → H605641201`) are flagged `verified_continuous=False`. BD TOPO's
|
| 569 |
+
own karst attribute doesn't currently confirm it (see the provisional-
|
| 570 |
+
attribute note above) — `scripts/download_bdcavites.py` (§3.8) exists
|
| 571 |
+
specifically to get an independent, purpose-built second check on this,
|
| 572 |
+
rather than relying only on naming inference.
|
| 573 |
+
|
| 574 |
+
### 3.8 BDCavités (`bdcavites/`, via `scripts/download_bdcavites.py`)
|
| 575 |
+
|
| 576 |
+
BRGM's national underground cavity inventory (sinkholes, quarries, natural
|
| 577 |
+
cavities), via Géorisques' WFS (`georisques.gouv.fr/services`, typeName
|
| 578 |
+
`CAVITE_LOCALISEE`, confirmed live and GeoJSON-capable directly against the
|
| 579 |
+
real service). Built specifically as an independent check on the bétoire
|
| 580 |
+
finding (§3.7) — a purpose-built cavity dataset, not inference from station
|
| 581 |
+
naming or a provisional BD TOPO attribute. One real caveat: departments
|
| 582 |
+
75/78/91/92/93/94/95 (Paris region, unrelated to this project) are excluded
|
| 583 |
+
from BDCavités entirely, and the Eure department's own inventory was among
|
| 584 |
+
the later batches of the national 2001–2013 completion program — worth
|
| 585 |
+
checking coverage density before treating a sparse result as a negative
|
| 586 |
+
finding rather than incomplete data.
|
| 587 |
+
|
| 588 |
+
### 3.9 Geology (`bdcharm50/`, via `scripts/download_bdcharm.py`)
|
| 589 |
+
|
| 590 |
+
BRGM's BD Charm-50, harmonized 1:50,000 geological maps — free, open
|
| 591 |
+
(Licence Ouverte), no authentication, direct per-department ZIP download from
|
| 592 |
+
InfoTerre (a genuinely different access pattern than the WFS sources
|
| 593 |
+
elsewhere in this project: fixed URL per department, no bbox query, no axis-
|
| 594 |
+
order ambiguity). Departments **27 (Eure), 28 (Eure-et-Loir), 61 (Orne)** —
|
| 595 |
+
verified directly against the real, complete station roster (§3.1), not
|
| 596 |
+
guessed. A separate, CIGAL-membership-gated distribution of similar data
|
| 597 |
+
exists for at least one other French region; this project only uses the free
|
| 598 |
+
InfoTerre path.
|
| 599 |
+
|
| 600 |
+
### 3.10 Landcover and NDVI (`scripts/fetch_landcover.py`, `scripts/fetch_worldcover_ndvi.py`)
|
| 601 |
+
|
| 602 |
+
ESA WorldCover, sampled at real gauge points from the public AWS S3 Cloud-
|
| 603 |
+
Optimized GeoTIFFs — **not** the Terrascope WMS, which a source dated within
|
| 604 |
+
the last month of this project's active development reported actively resets
|
| 605 |
+
connections from non-browser HTTP clients (TLS fingerprinting, confirmed
|
| 606 |
+
across multiple tools and User-Agents, not a coding problem to work around),
|
| 607 |
+
and separately was slated for full phase-out already past by the time this
|
| 608 |
+
was checked.
|
| 609 |
+
|
| 610 |
+
Landcover classification uses the product's 3°×3° tile grid; every real
|
| 611 |
+
station coordinate falls inside exactly one tile (`N48E000`), verified
|
| 612 |
+
directly against all 27 real coordinates. NDVI uses the *annual composites'*
|
| 613 |
+
1°×1° tile grid instead — genuinely different from the classification grid,
|
| 614 |
+
looked up per-station via VITO's own authoritative tile-index grid file
|
| 615 |
+
(`esa_worldcover_grid_composites.fgb`) rather than a second hand-guessed S3
|
| 616 |
+
key pattern. Both need `AWS_NO_SIGN_REQUEST=YES` for `s3://`-scheme tile URLs
|
| 617 |
+
specifically — a plain HTTPS URL to the same public bucket needs no signing
|
| 618 |
+
at all, which is why the landcover script (HTTPS) worked without this while
|
| 619 |
+
the NDVI grid's returned URLs (`s3://`) initially failed on AWS credential
|
| 620 |
+
errors despite the bucket being fully public.
|
| 621 |
+
|
| 622 |
+
Both currently cover only the 27 real gauges (exact `station_code` match),
|
| 623 |
+
same limitation as Hub'Eau's `catchment_area_km2` before the cumulative-BD-
|
| 624 |
+
TOPO fix (§3.6) — extending either script to the full reach graph is
|
| 625 |
+
unstarted work, not a design decision.
|
| 626 |
+
|
| 627 |
+
### 3.11 What was tried and didn't work
|
| 628 |
+
|
| 629 |
+
**SoilGrids (ISRIC)** — confirmed non-functional directly, not from a stale
|
| 630 |
+
search result: even a bare `lon`/`lat` query to the live REST API returned
|
| 631 |
+
`422` consistently, consistent with ISRIC's own currently-posted "temporarily
|
| 632 |
+
paused" service notice.
|
| 633 |
+
|
| 634 |
+
**INRAE's national soil survey (RRP/BDGSF)** — not a uniformly-accessible
|
| 635 |
+
source at all. Access is explicitly described as depending on regional/
|
| 636 |
+
departmental "référents" (varies by department, sometimes needs a formal
|
| 637 |
+
agreement with the regional chamber of agriculture), and INRAE's own
|
| 638 |
+
documentation states outright that the more detailed scale "n'est pas encore
|
| 639 |
+
en accès libre." IDPR (§3.5) and BD Charm-50 geology (§3.9) are this
|
| 640 |
+
project's actual substitutes for the hydrologically-relevant part of what
|
| 641 |
+
soil data would otherwise provide — not literal soil texture data, but IDPR
|
| 642 |
+
specifically is an *integrated hydrological behavior* indicator (infiltration
|
| 643 |
+
tendency), arguably more directly useful for a streamflow model than a raw
|
| 644 |
+
soil property map would be on its own.
|
| 645 |
+
|
| 646 |
+
### 3.12 Centerline generation
|
| 647 |
+
|
| 648 |
+
**Only relevant to the older single-chain pipeline** (`build_surface_edges`,
|
| 649 |
+
still available for direct comparison/debugging) — the reach graph (§2)
|
| 650 |
+
derives its topology directly from BD TOPO's own node linkage and doesn't use
|
| 651 |
+
these centerline files at all.
|
| 652 |
|
| 653 |
`centerlines/eure_centerline.csv` and `centerlines/risle_centerline.csv` — the
|
| 654 |
geometry `build_surface_edges` orders stations against — are generated by
|
|
|
|
| 676 |
|
| 677 |
## 4. Applications
|
| 678 |
|
| 679 |
+
`src/app.py` (Streamlit) has two views, selected by a radio at the top:
|
| 680 |
+
|
| 681 |
+
**Explore** — the original click-to-read UI over real course geometry: pick a
|
| 682 |
river, click (or slide) along its course, see interpolated elevation,
|
| 683 |
estimated groundwater level, and — for whichever real gauge is nearest that
|
| 684 |
point — water level, discharge, and rating-curve plots pulled directly from
|
| 685 |
`HydrometricLoader`'s own plotting methods rather than reimplemented.
|
| 686 |
|
| 687 |
Click support uses Streamlit's native chart-selection
|
| 688 |
+
(`st.plotly_chart(..., on_select="rerun")`), not a third-party click-handling
|
| 689 |
+
package. The click handler and the position slider share a single source of
|
| 690 |
+
truth by design: Streamlit only honors a slider's `value=` argument the first
|
| 691 |
+
time that widget is created, and on every later rerun returns whatever's
|
| 692 |
+
stored under that widget's own session-state key — so the click handler
|
| 693 |
+
writes directly into the slider's own key before it's instantiated, rather
|
| 694 |
+
than a separate key. It also de-duplicates incoming click events, since
|
|
|
|
| 695 |
Streamlit's chart-selection state persists across reruns caused by *other*
|
| 696 |
+
widgets and would otherwise re-fire on every unrelated interaction.
|
| 697 |
+
|
| 698 |
+
**Network validation** — renders the full reach graph (§2): every edge as one
|
| 699 |
+
Plotly line trace regardless of edge count (a trace-per-edge approach doesn't
|
| 700 |
+
hold up at ~5,000+ edges; verified fast at real scale — 0.29s to build a
|
| 701 |
+
figure for ~2,900 edges), real confluences as diamond markers, real gauges as
|
| 702 |
+
elevation-colored circles. Metrics card reports node/edge/confluence/gauge
|
| 703 |
+
counts and, when available, IDPR and cumulative-catchment coverage. Virtual
|
| 704 |
+
infill nodes are deliberately not drawn individually — at ~2,400 per basin,
|
| 705 |
+
markers for each would bury the actual validation signal (do confluences sit
|
| 706 |
+
where a tributary visibly joins the line? do gauges sit on the network, not
|
| 707 |
+
offset from it?) rather than help it. Reads directly from `reach_graph/
|
| 708 |
+
{basin}_nodes_enriched.csv`, keyed on file modification time so a re-run of
|
| 709 |
+
`build_reach_graphs.py`/`enrich_reach_graph.py` is picked up automatically —
|
| 710 |
+
`st.cache_data` otherwise keys purely on function arguments, not file
|
| 711 |
+
contents, and this was confirmed to actually cause stale numbers once during
|
| 712 |
+
development, not just a theoretical risk.
|
| 713 |
|
| 714 |
---
|
| 715 |
|
| 716 |
## 5. Testing (`src/test_build_graph.py`)
|
| 717 |
|
| 718 |
+
Not a unit test suite in the pytest sense — a script with two independent
|
| 719 |
+
sections, both run from `main()`.
|
| 720 |
+
|
| 721 |
+
**`run_checks`** — the original single-chain pipeline: runs `node_features →
|
| 722 |
+
build_surface_edges → build_pyg_graph(s)` against real data and checks the
|
| 723 |
+
result is sane — no NaN/Inf in the feature tensor, no accidental cross-basin
|
| 724 |
+
edges, targets genuinely excluded from the model input, edge indices within
|
| 725 |
+
bounds, bidirectional edge count exactly double the directed count, per-basin
|
| 726 |
+
node counts summing to the combined total, standardized features actually
|
| 727 |
+
landing near zero mean / unit variance, the `known_losing_reaches` flag
|
| 728 |
+
actually taking effect, and mean/max `snap_distance_km` per basin against
|
| 729 |
+
whatever centerline is currently in `centerlines/`.
|
| 730 |
+
|
| 731 |
+
**`run_reach_graph_checks`** — the reach graph pipeline, gracefully skipped
|
| 732 |
+
(not a failure) if `reach_graph/` doesn't exist yet. Mostly regression tests
|
| 733 |
+
for three bugs found and fixed during development, kept here specifically so
|
| 734 |
+
they can't silently reintroduce themselves:
|
| 735 |
+
|
| 736 |
+
- structural columns (`is_gauged`/`is_confluence`/etc.) never leak into
|
| 737 |
+
`feature_names`, but remain accessible as their own `Data` attributes
|
| 738 |
+
- target values never attach to a non-gauge node, and target coverage never
|
| 739 |
+
exceeds the real gauge count
|
| 740 |
+
- `edge_attr` stays exactly 3 columns despite extra edge metadata
|
| 741 |
+
(`toponym`, `cleabs`) sitting on the real edges table
|
| 742 |
+
- `physics_losses.py`'s `build_confluence_index`/`build_braid_index` produce
|
| 743 |
+
counts matching `is_confluence`/`is_rejoin_point` sums, with every index
|
| 744 |
+
within node bounds and every confluence having ≥ 2 upstream branches
|
| 745 |
+
- IDPR and `cumulative_catchment_area_km2` presence/coverage are reported
|
| 746 |
+
explicitly (the latter compared against the Hub'Eau-only baseline it's
|
| 747 |
+
meant to exceed)
|
| 748 |
+
|
| 749 |
+
Exits 0 on a clean pass across both sections, 1 otherwise — usable as a
|
| 750 |
+
pre-commit or CI gate if that's ever set up.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 751 |
|
| 752 |
---
|
| 753 |
|
| 754 |
+
## 6. Running things
|
| 755 |
|
| 756 |
Data acquisition (from repo root, in roughly dependency order):
|
| 757 |
|
|
|
|
| 760 |
python -m scripts.download_elevation
|
| 761 |
python -m scripts.download_era5_full # slow; download_era5_sample.py first if just testing
|
| 762 |
python -m scripts.extract_era5
|
| 763 |
+
python -m scripts.download_catchment
|
| 764 |
python -m scripts.download_bdtopo_hydro --check # verify typeNames before the real pull
|
| 765 |
python -m scripts.download_bdtopo_hydro
|
| 766 |
+
python -m scripts.download_bdcavites --check
|
| 767 |
+
python -m scripts.download_bdcavites
|
| 768 |
+
python -m scripts.download_bdcharm
|
| 769 |
+
```
|
| 770 |
+
|
| 771 |
+
Build and validate the reach graph:
|
| 772 |
+
|
| 773 |
+
```bash
|
| 774 |
+
python -m scripts.build_reach_graphs --data-root datasets
|
| 775 |
+
python -m scripts.enrich_reach_graph --data-root datasets # --skip-climate if that step hangs
|
| 776 |
+
python -m scripts.compute_cumulative_catchment --data-root datasets
|
| 777 |
+
python -m scripts.diagnose_confluences --data-root datasets --basin eure
|
| 778 |
+
python -m scripts.diagnose_confluences --data-root datasets --basin risle
|
| 779 |
+
```
|
| 780 |
+
|
| 781 |
+
Landcover / NDVI, real gauges only (needs `rasterio`, and `geopandas` for NDVI's
|
| 782 |
+
tile lookup):
|
| 783 |
+
|
| 784 |
+
```bash
|
| 785 |
+
python -m scripts.fetch_landcover --check
|
| 786 |
+
python -m scripts.fetch_landcover
|
| 787 |
+
python -m scripts.fetch_worldcover_ndvi --check
|
| 788 |
+
python -m scripts.fetch_worldcover_ndvi
|
| 789 |
```
|
| 790 |
|
| 791 |
+
Validate everything against whatever's actually in `datasets/`:
|
| 792 |
|
| 793 |
```bash
|
| 794 |
python -m src.test_build_graph --data-root datasets
|
datasets/bdcavites/cavite_localisee.geojson
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d9ad0770c09a15992f31f3ece16afeb9097f3a048f66c431379a78c9305bc204
|
| 3 |
+
size 24931685
|
datasets/bdcharm50/GEO050K_HARM_027.zip
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ef28692e01362400bb0201d0fa5940f1a20f7630f90b9258f4d99bc0744ea944
|
| 3 |
+
size 16009427
|
datasets/bdcharm50/GEO050K_HARM_028.zip
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:4d486b6bea0b24b2004adad79afc7be2ddef86b67567467b015cf663ddeadeb7
|
| 3 |
+
size 21530663
|
datasets/bdcharm50/GEO050K_HARM_061.zip
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c900e51ff795863b505c3545f8bd8068aa7591f039d69f7e3b135812b35f0947
|
| 3 |
+
size 24293693
|
datasets/bdcharm50/dept_027/Descriptif des cartes géologiques à 1_50 000 vecteur.pdf
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d1c5773cc3af2552b4a21629d05bed2195293a7b924a5d696e1d0e250fbf3e86
|
| 3 |
+
size 465834
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_DIVERS_2154.dbf
ADDED
|
Binary file (47.1 kB). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_DIVERS_2154.lyr
ADDED
|
Binary file (9.22 kB). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_DIVERS_2154.prj
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
PROJCS["RGF93_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",44.0],PARAMETER["Standard_Parallel_2",49.0],PARAMETER["Latitude_Of_Origin",46.5],UNIT["Meter",1.0]]
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_DIVERS_2154.qml
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version='1.0' encoding='utf8'?>
|
| 2 |
+
<qgis hasScaleBasedVisibilityFlag="0" maximumScale="1000000000" minimumScale="0" version="3.4.10-Madeira" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><transparencyLevelInt>255</transparencyLevelInt><renderer-v2 symbollevels="0" type="RuleRenderer"><rules><rule filter="CODE='1'" label="1, Front de taille d'exploitation à ciel ouvert, carrière de grande dimension à ciel ouvert, gravière" symbol="0" /><rule filter="CODE='7'" label="7, Niveau-repère lithologique" symbol="1" /><rule filter="CODE='10'" label="10, Direction de l'écoulement par gravité dans cône de déjection" symbol="2" /><rule filter="CODE='21'" label="21, Limite d'extension de formation lithostratigraphique, limite d'épandage détritique" symbol="3" /><rule filter="ELSE" symbol="4" /></rules><symbols><symbol alpha="1" clip_to_extent="1" name="0" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="0" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer><layer class="MarkerLine" locked="0" pass="0"><prop k="interval" v="1.2" /><prop k="interval_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_along_line" v="0" /><prop k="offset_along_line_unit" v="MM" /><prop k="offset_along_line_unit" v="MM" /><prop k="offset_unit" v="MM" /><prop k="placement" v="interval" /><prop k="rotate" v="1" /><symbol alpha="1" clip_to_extent="1" name="@0@1" outputUnit="MM" type="marker"><layer class="SvgMarker" locked="0" pass="0"><prop k="angle" v="0" /><prop k="color" v="0,0,0,255" /><prop k="horizontal_anchor_point" v="1" /><prop k="name" v="/P04_002E.svg" /><prop k="offset" v="0.375, -0.375" /><prop k="offset_unit" v="MM" /><prop k="scale_method" v="diameter" /><prop k="size" v="0.75" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="1" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="1" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="0.6;0.6" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="1" /><prop k="joinstyle" v="bevel" /><prop k="color" v="255,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="2" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="0" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="3" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="0.36;0.36" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="1" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></symbols></renderer-v2></qgis>
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_DIVERS_2154.shp
ADDED
|
Binary file (44.7 kB). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_DIVERS_2154.shx
ADDED
|
Binary file (940 Bytes). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.dbf
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:7919155134fb9c8fcce3ba7f4a4e47a75a6d02499efb82215bc9375ed8a67d34
|
| 3 |
+
size 6620665
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.lyr
ADDED
|
Binary file (8.7 kB). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.prj
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
PROJCS["RGF93_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",44.0],PARAMETER["Standard_Parallel_2",49.0],PARAMETER["Latitude_Of_Origin",46.5],UNIT["Meter",1.0]]
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.qml
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version='1.0' encoding='utf8'?>
|
| 2 |
+
<qgis hasScaleBasedVisibilityFlag="0" maximumScale="1000000000" minimumScale="0" version="3.4.10-Madeira" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><transparencyLevelInt>255</transparencyLevelInt><renderer-v2 symbollevels="0" type="RuleRenderer"><rules><rule filter="CODE='1'" label="1, Limite de la carte ou du projet" symbol="0" /><rule filter="CODE='3'" label="3, Limite réseau hydrographique (lacs, canaux ou rivières délimitant une zone)" symbol="1" /><rule filter="CODE='11'" label="11, Contour géologique observé, visible" symbol="2" /><rule filter="CODE='12'" label="12, Contour géologique supposé, probable, masqué" symbol="3" /><rule filter="CODE='20'" label="20, Elément linéaire structural (contour géologique superposé à une faille)" symbol="4" /><rule filter="CODE='21'" label="21, Elément linéaire divers (contour géologique superposé à un élément linéaire divers)" symbol="5" /><rule filter="CODE='26'" label="26, Limite de faciès, limite de biozone, passage progressif entre deux faciès (sédimentaire, magmatique, etc)" symbol="6" /><rule filter="ELSE" symbol="7" /></rules><symbols><symbol alpha="1" clip_to_extent="1" name="0" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="0" /><prop k="joinstyle" v="bevel" /><prop k="color" v="76,76,76,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="1" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="0" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,127,255,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="2" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="0" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="3" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="0;0.6;1.8;0" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="1" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="4" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="0" /><prop k="joinstyle" v="bevel" /><prop k="color" v="255,255,255,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="5" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="0" /><prop k="joinstyle" v="bevel" /><prop k="color" v="255,255,255,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="6" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="0.5;1" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="1" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></symbols></renderer-v2></qgis>
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.shp
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:15626b809bc52ed27ba554c0c6ebae2933d42f4795f2ae4fd0bb7e5974f0d380
|
| 3 |
+
size 7438780
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_FGEOL_2154.shx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:573e2b4d674d42526cbf89a2295f2571cdf4ac7fe1615f308bea04bf5ec66564
|
| 3 |
+
size 154060
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_STRUCT_2154.dbf
ADDED
|
Binary file (30.7 kB). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_STRUCT_2154.lyr
ADDED
|
Binary file (10.8 kB). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_STRUCT_2154.prj
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
PROJCS["RGF93_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",44.0],PARAMETER["Standard_Parallel_2",49.0],PARAMETER["Latitude_Of_Origin",46.5],UNIT["Meter",1.0]]
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_STRUCT_2154.qml
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version='1.0' encoding='utf8'?>
|
| 2 |
+
<qgis hasScaleBasedVisibilityFlag="0" maximumScale="1000000000" minimumScale="0" version="3.4.10-Madeira" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><transparencyLevelInt>255</transparencyLevelInt><renderer-v2 symbollevels="0" type="RuleRenderer"><rules><rule filter="CODE='1'" label="1, Faille observée, visible, de nature non distinguée" symbol="0" /><rule filter="CODE='2'" label="2, Faille supposée, masquée, hypothétique, de nature non distinguée" symbol="1" /><rule filter="CODE='3'" label="3, Axe anticlinal ou antiforme, cartographique" symbol="2" /><rule filter="CODE='4'" label="4, Axe synclinal ou synforme, cartographique" symbol="3" /><rule filter="CODE='5'" label="5, Flexure" symbol="4" /><rule filter="CODE='6'" label="6, Faille profonde" symbol="5" /><rule filter="ELSE" symbol="6" /></rules><symbols><symbol alpha="1" clip_to_extent="1" name="0" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="0" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="1" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="0;1;3;0" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="1" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="2" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="1;4;1;1" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="1" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.16" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer><layer class="MarkerLine" locked="0" pass="0"><prop k="interval" v="7.0" /><prop k="interval_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_along_line" v="2" /><prop k="offset_along_line_unit" v="MM" /><prop k="offset_along_line_unit" v="MM" /><prop k="offset_unit" v="MM" /><prop k="placement" v="interval" /><prop k="rotate" v="1" /><symbol alpha="1" clip_to_extent="1" name="@0@3" outputUnit="MM" type="marker"><layer class="SvgMarker" locked="0" pass="0"><prop k="angle" v="0" /><prop k="color" v="0,0,0,255" /><prop k="horizontal_anchor_point" v="1" /><prop k="name" v="/P01_007E.svg" /><prop k="offset" v="1.0, -0" /><prop k="offset_unit" v="MM" /><prop k="scale_method" v="diameter" /><prop k="size" v="2.0" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="1" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="3" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="1;4;1;1" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="1" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.16" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer><layer class="MarkerLine" locked="0" pass="0"><prop k="interval" v="7.0" /><prop k="interval_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_along_line" v="2" /><prop k="offset_along_line_unit" v="MM" /><prop k="offset_along_line_unit" v="MM" /><prop k="offset_unit" v="MM" /><prop k="placement" v="interval" /><prop k="rotate" v="1" /><symbol alpha="1" clip_to_extent="1" name="@0@4" outputUnit="MM" type="marker"><layer class="SvgMarker" locked="0" pass="0"><prop k="angle" v="0" /><prop k="color" v="0,0,0,255" /><prop k="horizontal_anchor_point" v="1" /><prop k="name" v="/P05_004E.svg" /><prop k="offset" v="1.0, -0" /><prop k="offset_unit" v="MM" /><prop k="scale_method" v="diameter" /><prop k="size" v="2.0" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="1" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="4" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="joinstyle" v="bevel" /><prop k="line_style" v="no" /><prop k="line_color" v="255,0,255,255" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /></layer><layer class="MarkerLine" locked="0" pass="0"><prop k="interval" v="2.5" /><prop k="interval_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_along_line" v="0" /><prop k="offset_along_line_unit" v="MM" /><prop k="offset_along_line_unit" v="MM" /><prop k="offset_unit" v="MM" /><prop k="placement" v="interval" /><prop k="rotate" v="1" /><symbol alpha="1" clip_to_extent="1" name="@0@5" outputUnit="MM" type="marker"><layer class="SvgMarker" locked="0" pass="0"><prop k="angle" v="0" /><prop k="color" v="0,0,0,255" /><prop k="horizontal_anchor_point" v="1" /><prop k="name" v="/P06_002E.svg" /><prop k="offset" v="1.2, -0" /><prop k="offset_unit" v="MM" /><prop k="scale_method" v="diameter" /><prop k="size" v="2.4" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="1" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="5" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="4;1;0.5;1" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="1" /><prop k="joinstyle" v="bevel" /><prop k="color" v="255,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></symbols></renderer-v2></qgis>
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_STRUCT_2154.shp
ADDED
|
Binary file (52.9 kB). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_L_STRUCT_2154.shx
ADDED
|
Binary file (812 Bytes). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.dbf
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d7f9f02aa66fdd0a0df715a6ff43d48fd3030dc42895747976c584edff25d196
|
| 3 |
+
size 3125317
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.lyr
ADDED
|
Binary file (19.5 kB). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.prj
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
PROJCS["RGF93_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",44.0],PARAMETER["Standard_Parallel_2",49.0],PARAMETER["Latitude_Of_Origin",46.5],UNIT["Meter",1.0]]
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.qml
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version='1.0' encoding='utf8'?>
|
| 2 |
+
<qgis hasScaleBasedVisibilityFlag="0" maximumScale="1000000000" minimumScale="0" version="3.4.10-Madeira" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><transparencyLevelInt>255</transparencyLevelInt><renderer-v2 symbollevels="0" type="RuleRenderer"><rules><rule filter="CODE='1'" label="1, Gîte fossilifère" symbol="0" /><rule filter="CODE='2'" label="2, Gisement, indice de microfossiles" symbol="1" /><rule filter="CODE='4'" label="4, Carrière à ciel ouvert" symbol="2" /><rule filter="CODE='8'" label="8, Gouffre, aven" symbol="3" /><rule filter="CODE='9'" label="9, Mardelle, bétoire, doline, fontis" symbol="4" /><rule filter="CODE='10'" label="10, Puits de mine" symbol="5" /><rule filter="CODE='12'" label="12, Exploitation souterraine, ancienne mine, ou cave" symbol="6" /><rule filter="CODE='13'" label="13, Source" symbol="7" /><rule filter="CODE='14'" label="14, Source captée" symbol="8" /><rule filter="CODE='15'" label="15, Menhir" symbol="9" /><rule filter="CODE='32'" label="32, Minéralisation disséminée" symbol="10" /><rule filter="CODE='33'" label="33, Indication ponctuelle de formation affleurante, ou de niveau lithologique interstratifié, niveau-repère, faciès, etc." symbol="11" /><rule filter="CODE='35'" label="35, Entonnoir, puits d'absorpsion" symbol="12" /><rule filter="CODE='41'" label="41, Carrière souterraine" symbol="13" /><rule filter="CODE='50'" label="50, Localisation d'un point de cote NGF (isobathe, isohypse) ou d'épaisseur (isopaque, en m) d'une formation" symbol="14" /><rule filter="CODE='69'" label="69, Exploitation par dragage, carrière noyée, ballastière, etc." symbol="15" /><rule filter="CODE='77'" label="77, Site préhistorique paléolithique" symbol="16" /><rule filter="CODE='79'" label="79, Substances utiles non métalliques, matériaux" symbol="17" /><rule filter="CODE='91'" label="91, Haldes, déblais d'exploitation minière" symbol="18" /><rule filter="ELSE" symbol="19" /></rules><symbols><symbol alpha="1" clip_to_extent="1" name="0" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="!" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.0" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="1" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v=""" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.0" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="2" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="$" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,-0.352778" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="3" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="(" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.352778" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="4" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v=")" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.0" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="5" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="*" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.0" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="6" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="," /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.6350004" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="7" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="-" /><prop k="color" v="0,112,255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.0" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="8" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="." /><prop k="color" v="0,112,255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.0" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="9" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="/" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,1.76389" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="10" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="@" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.0" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="11" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="v" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.0" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="12" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="B" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.0" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="13" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="&" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.6350004" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="14" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="y" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.0" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="15" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="T" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.0" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="16" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.0" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="17" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="#" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.0" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="18" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="a" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PDivers" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,0.352778" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol></symbols></renderer-v2></qgis>
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.shp
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e7696bc4eeeaf7d2b499040cba69508aca65b5493e7ab9c99b7bd41c44c9a35a
|
| 3 |
+
size 153064
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_DIVERS_2154.shx
ADDED
|
Binary file (43.8 kB). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_STRUCT_2154.dbf
ADDED
|
Binary file (21 kB). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_STRUCT_2154.lyr
ADDED
|
Binary file (7.68 kB). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_STRUCT_2154.prj
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
PROJCS["RGF93_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",44.0],PARAMETER["Standard_Parallel_2",49.0],PARAMETER["Latitude_Of_Origin",46.5],UNIT["Meter",1.0]]
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_STRUCT_2154.qml
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version='1.0' encoding='utf8'?>
|
| 2 |
+
<qgis hasScaleBasedVisibilityFlag="0" maximumScale="1000000000" minimumScale="0" version="3.4.10-Madeira" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><transparencyLevelInt>255</transparencyLevelInt><renderer-v2 symbollevels="0" type="RuleRenderer"><rules><rule filter="CODE='1'" label="1, Stratification So avec pendage (polarité normale ou indéterminée)" symbol="0" /><rule filter="ELSE" symbol="1" /></rules><symbols><symbol alpha="1" clip_to_extent="1" name="0" outputUnit="MM" type="marker"><layer class="FontMarker" locked="0" pass="0"><prop k="angle" v="0.0" /><prop k="angle_dd_active" v="1" /><prop k="angle_dd_expression" /><prop k="angle_dd_field" v="AZIMUT" /><prop k="angle_dd_useexpr" v="0" /><prop k="chr" v="!" /><prop k="color" v="-255,-255,-255,255" /><prop k="font" v="BRGM_PStruct" /><prop k="horizontal_anchor_point" v="1" /><prop k="offset" v="0.0,-0.5291669999999999" /><prop k="offset_unit" v="MM" /><prop k="size" v="3.52778" /><prop k="size_unit" v="MM" /><prop k="vertical_anchor_point" v="2" /></layer></symbol></symbols></renderer-v2></qgis>
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_STRUCT_2154.shp
ADDED
|
Binary file (1.05 kB). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_P_STRUCT_2154.shx
ADDED
|
Binary file (372 Bytes). View file
|
|
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.dbf
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c1da5e6b0d60c08a41862a83b94606d31ef06ec729883a7a0f2ce465fb923443
|
| 3 |
+
size 3622421
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.lyr
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0874de865d408583ecfc7048837e63bb65046e6eb3b5892e3f2fb4272744a8f6
|
| 3 |
+
size 143360
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.prj
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
PROJCS["RGF93_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",44.0],PARAMETER["Standard_Parallel_2",49.0],PARAMETER["Latitude_Of_Origin",46.5],UNIT["Meter",1.0]]
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.qml
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version='1.0' encoding='utf8'?>
|
| 2 |
+
<qgis hasScaleBasedVisibilityFlag="0" maximumScale="1000000000" minimumScale="0" version="3.4.10-Madeira" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><transparencyLevelInt>255</transparencyLevelInt><renderer-v2 symbollevels="0" type="RuleRenderer"><rules><rule filter="CODE_LEG='1'" label="X, Dépôts anthropiques et remblais divers - 1" symbol="0" /><rule filter="CODE_LEG='2'" label="qE, Eboulis - 2" symbol="1" /><rule filter="CODE_LEG='3'" label="Fz, Alluvions récentes : silts argileux, sables, argiles, tourbes - 3" symbol="2" /><rule filter="CODE_LEG='4'" label="Fy-z, Alluvions anciennes de fond de vallées (Fy) et récentes (Fz) . Silex et graviers, limons et sables - 4" symbol="3" /><rule filter="CODE_LEG='5'" label="F, Alluvions anciennes indifférenciées : silts argileux, sables, graviers et galets - 5" symbol="4" /><rule filter="CODE_LEG='6'" label="Fyd, Alluvions anciennes de basse terrasse (1 à 15 m) - 6" symbol="5" /><rule filter="CODE_LEG='7'" label="Fyc-d, Alluvions anciennes, basse et moyenne terrasses : galets, graviers, sables, blocs de grès et meulières - 7" symbol="6" /><rule filter="CODE_LEG='8'" label="Fyc, Alluvions anciennes de moyenne terrasse (20 à 30 m) - 8" symbol="7" /><rule filter="CODE_LEG='9'" label="Fyb-c, Alluvions anciennes de moyenne et haute terrasse - 9" symbol="8" /><rule filter="CODE_LEG='10'" label="Fyb, Alluvions anciennes de haute terrasse (40 à 50 m) - 10" symbol="9" /><rule filter="CODE_LEG='11'" label="Fya, Alluvions anciennes de très haute terrasse (55 m ou plus). - 11" symbol="10" /><rule filter="CODE_LEG='12'" label="qU, Tufs - 12" symbol="11" /><rule filter="CODE_LEG='13'" label="qOE, Limons des plateaux - 13" symbol="12" /><rule filter="CODE_LEG='14'" label="qOEV, Limons de pentes et de bas-versants - 14" symbol="13" /><rule filter="CODE_LEG='15'" label="qC, Colluvions diverses : limons, sables, argiles, fragments de silex et de craie - 15" symbol="14" /><rule filter="CODE_LEG='16'" label="FC, Colluvions de fonds de vallons - 16" symbol="15" /><rule filter="CODE_LEG='17'" label="qCRS, Colluvions alimentées principalement par les formations résiduelles à silex - 17" symbol="16" /><rule filter="CODE_LEG='18'" label="RS, Formations résiduelles à silex : silex anguleux, argiles et sables. Souvent solifluée sur les versants - 18" symbol="17" /><rule filter="CODE_LEG='19'" label="ReP, Cailloutis des régions de Gisors et de Mesnil-Verclives : galets, silex, matrice argilo-sableuse - 19" symbol="18" /><rule filter="CODE_LEG='20'" label="Rm-pAM, Argile brune, limoneuse et sableuse, à dalles et plaquettes silicifiées résiduelles, rarement fossilifères - 20" symbol="19" /><rule filter="CODE_LEG='21'" label="Rg1SF, Zone riche en poches de lambeaux résiduels de sables et grès de Fontainebleau (Oligocène probable, résiduel) - 21" symbol="20" /><rule filter="CODE_LEG='23'" label="Rg1CBr, Formation de Brie résiduelle (meulières, calcaires et marnes) sur Stampien inférieur argileux - 23" symbol="21" /><rule filter="CODE_LEG='24'" label="RPe-g, Galets marins résiduels (Stampien possible ou Yprésien) - 24" symbol="22" /><rule filter="CODE_LEG='25'" label="Re6-g1, Formation résiduelle à meulière et grès, Stampien et Bartonien : fragments ou blocs de meulières et de grès, matrice argilo-sableuse brune à brun-noir - 25" symbol="23" /><rule filter="CODE_LEG='26'" label="Re4P, Galets résiduels issus de l'Yprésien inférieur : galets de silex avellanaires dans matrice argilo-sableuse - 26" symbol="24" /><rule filter="CODE_LEG='27'" label="Re3P, Galets résiduels issus du Thanétien - 27" symbol="25" /><rule filter="CODE_LEG='28'" label="pSLo, Sables de Lozère : sables argileux grossiers ou fins (Pliocène). - 28" symbol="26" /><rule filter="CODE_LEG='29'" label="g1SF, Sables de Fontainebleau (Stampien), 50m. - 29" symbol="27" /><rule filter="CODE_LEG='30'" label="g1CBr, Formation de Brie (meulières, calcaires et marnes, 1 à 5 m) et calcaire de Sannois. Stampien inférieur, Sannoisien - 30" symbol="28" /><rule filter="CODE_LEG='31'" label="g1S, Stampien inférieur "faciès Sannoisien" : Argile verte de Romainville et, calcaires et meulière de Brie - 31" symbol="29" /><rule filter="CODE_LEG='32'" label="g1AvR, Argiles vertes de Romainville et Marnes supragypseuses. Ludien à Stampien inférieur (Sannoisien). - 32" symbol="30" /><rule filter="CODE_LEG='33'" label="e7-g1CSept, Calcaire de Septeuil (ou de Champigny), de 0 à 12 m d'épaisseur. Sépiolites supérieures et" Marnes à Pholadomyes" (calcaires et marnes, 0 à 6 m). Ludien (Eocène supérieur) - 33" symbol="31" /><rule filter="CODE_LEG='34'" label="e6, Bartonien moyen et supérieur non différencié - 34" symbol="32" /><rule filter="CODE_LEG='35'" label="e6S, Bartonien moyen = Marinésien : Sables de Mortefontaine. Bartonien inférieur = Auversien : Sables de Beauchamps - 35" symbol="33" /><rule filter="CODE_LEG='36'" label="e6CS-O, Marinésien : Calcaires et marnes de Saint-Ouen, de 0 à 15 m d'épaisseur. Auversien : calcaires marins, saumâtres ou lacustres, Sables et grès de Beauchamp, Sépiolites inférieures (1 à 5 m). - 36" symbol="34" /><rule filter="CODE_LEG='37'" label="e5C, Calcaires à Cérithes, Marnes et caillasses. Calcaire grossier supérieur - 37" symbol="35" /><rule filter="CODE_LEG='38'" label="e5b, Poudingue de Thionville-sur-Opton, Glauconie de base et calcaires grossiers (sables calcaires et calcaires bioclastiques) - 38" symbol="36" /><rule filter="CODE_LEG='39'" label="e5CG, Calcaire grossier (Lutétien), marnes et caillasses. - 39" symbol="37" /><rule filter="CODE_LEG='40'" label="e4SCui, Yprésien supérieur-Cuisien : Sables de Cuise - 40" symbol="38" /><rule filter="CODE_LEG='41'" label="e1-4, Yprésien indifférencié : Argile plastique et argiles à silex ("Sparnacien"), de 0 à 30 m d'épaisseur, et Sables de Cuise ou assimilés (0 à 10 m), du Cuisien - 41" symbol="39" /><rule filter="CODE_LEG='42'" label="e4A, Yprésien inférieur-Sparnacien : Argile plastique et Argiles à silex - 42" symbol="40" /><rule filter="CODE_LEG='43'" label="e3-4A-S, Sparnacien et Thanétien indifférenciés. Sparnacien e3 : argile plastique grise ; Thanétien e2 : sable gris, grès et poudingue - 43" symbol="41" /><rule filter="CODE_LEG='44'" label="e3-4S, Thanétien à Yprésien basal, 0 à 7 m : sables fins, parfois argileux, gris, beiges ou verdâtres ; sables fins à grossiers, à éclats de silex et galets, sables fins, argileux, beiges ou verdâtres, et silex "verdis". - 44" symbol="42" /><rule filter="CODE_LEG='45'" label="e3P, Thanétien : sable gris, grès et poudingue - 45" symbol="43" /><rule filter="CODE_LEG='46'" label="e1-2CBr, Dano-Montien, 0 à 15 m : calcaires argileux supérieur de Bray et Lû. Calcaire jaunâtre grossier de Bray et Lû et d'Ambleville - 46" symbol="44" /><rule filter="CODE_LEG='47'" label="eS, Sables, grès, argiles éocènes indifférenciées - 47" symbol="45" /><rule filter="CODE_LEG='48'" label="c5Cr, Campanien : craie blanche à silex parfois dolomitisée, biozone de foraminifères g, h, i - 48" symbol="46" /><rule filter="CODE_LEG='49'" label="c4-5Cr, Santonien-Campanien : craie blanche à silex - 49" symbol="47" /><rule filter="CODE_LEG='50'" label="c4-5CrD, Santonien-Campanien : craie dolomitisée à silex - 50" symbol="48" /><rule filter="CODE_LEG='51'" label="c4Cr, Santonien : craie blanche à silex, parfois indurée. Biozone de foraminifères d, e, f - 51" symbol="49" /><rule filter="CODE_LEG='52'" label="c3-4Cr, Coniacien-Santonien : craie blanche à silex parfois indurée, biozone de foraminifères - 52" symbol="50" /><rule filter="CODE_LEG='53'" label="c3Cr, Coniacien : craie blanche à silex, localement indurée, biozone de foraminifères a, b, c - 53" symbol="51" /><rule filter="CODE_LEG='54'" label="c2-3Cr, Turonien inférieur à Coniacien inférieur : craie souvent indurée, petits silex gris-noirs - 54" symbol="52" /><rule filter="CODE_LEG='55'" label="c2Cr, Turonien : craie grise, marneuse, pauvre en silex - 55" symbol="53" /><rule filter="CODE_LEG='57'" label="c1CrG, Cénomanien : craie glauconieuse à silex gris et noirs - 57" symbol="54" /><rule filter="CODE_LEG='58'" label="c1G, Glauconie sableuse d'Eauplet. Sables glauconieux à lits d'argiles vertes et granules de Qz. Au sommet bancs durcis perforés et nodules phosphatés. - 58" symbol="55" /><rule filter="CODE_LEG='59'" label="n6MS, Albien : Marnes silteuses et sables ferrugineux - 59" symbol="56" /><rule filter="CODE_LEG='60'" label="j6AC, Kimméridgien : argile et calcaire marneux - 60" symbol="57" /><rule filter="CODE_LEG='61'" label="j5AV, Argiles de Villerville ou de Cricqueboeuf - 61" symbol="58" /><rule filter="CODE_LEG='62'" label="j5SGl, Oxfordien supérieur. Sables de Glos - 62" symbol="59" /><rule filter="CODE_LEG='999'" label="hydro, Réseau hydrologique - 999" symbol="60" /><rule filter="ELSE" symbol="61" /></rules><symbols><symbol alpha="1" clip_to_extent="1" name="0" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="315" /><prop k="svgFile" v="/S01_002.svg" /><prop k="svgFillColor" v="0,0,0,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="19.6" /><symbol alpha="1" clip_to_extent="1" name="@0@1" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="1" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="178,178,178,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="2" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="229,255,229,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="3" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="191,229,229,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="4" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S10_011.svg" /><prop k="svgFillColor" v="127,191,191,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="17.80" /><symbol alpha="1" clip_to_extent="1" name="@0@5" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="5" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="191,255,229,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="6" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="127,255,229,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="7" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="127,229,229,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="8" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="0,255,229,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="9" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S10_011.svg" /><prop k="svgFillColor" v="0,229,229,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="17.80" /><symbol alpha="1" clip_to_extent="1" name="@0@10" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="10" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S10_011.svg" /><prop k="svgFillColor" v="0,191,229,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="17.80" /><symbol alpha="1" clip_to_extent="1" name="@0@11" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="11" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S05_003.svg" /><prop k="svgFillColor" v="255,0,0,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="12.50" /><symbol alpha="1" clip_to_extent="1" name="@0@12" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="12" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,191,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="13" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,229,191,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="14" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="229,229,191,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S05_003.svg" /><prop k="svgFillColor" v="255,0,0,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="12.50" /><symbol alpha="1" clip_to_extent="1" name="@0@15" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="15" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="229,229,191,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S05_003.svg" /><prop k="svgFillColor" v="0,0,255,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="12.50" /><symbol alpha="1" clip_to_extent="1" name="@0@16" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="16" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="229,229,191,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S05_002.svg" /><prop k="svgFillColor" v="255,0,0,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="18.40" /><symbol alpha="1" clip_to_extent="1" name="@0@17" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="17" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,191,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="18" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S02_011.svg" /><prop k="svgFillColor" v="229,191,191,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="14.00" /><symbol alpha="1" clip_to_extent="1" name="@0@19" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="19" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,191,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S01_002.svg" /><prop k="svgFillColor" v="255,0,0,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="19.6" /><symbol alpha="1" clip_to_extent="1" name="@0@20" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="20" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S02_011.svg" /><prop k="svgFillColor" v="255,127,229,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="14.00" /><symbol alpha="1" clip_to_extent="1" name="@0@21" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="21" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S02_011.svg" /><prop k="svgFillColor" v="191,255,0,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="14.00" /><symbol alpha="1" clip_to_extent="1" name="@0@22" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="22" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S02_011.svg" /><prop k="svgFillColor" v="63,191,0,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="14.00" /><symbol alpha="1" clip_to_extent="1" name="@0@23" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="23" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S02_011.svg" /><prop k="svgFillColor" v="255,191,191,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="14.00" /><symbol alpha="1" clip_to_extent="1" name="@0@24" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="24" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S02_011.svg" /><prop k="svgFillColor" v="255,178,76,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="14.00" /><symbol alpha="1" clip_to_extent="1" name="@0@25" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="25" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer><layer class="SVGFill" locked="0" pass="0"><prop k="angle" v="0" /><prop k="svgFile" v="/S02_011.svg" /><prop k="svgFillColor" v="255,127,0,255" /><prop k="svgOutlineColor" v="#000000" /><prop k="svgOutlineWidth" v="1" /><prop k="width" v="14.00" /><symbol alpha="1" clip_to_extent="1" name="@0@26" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="joinstyle" v="bevel" /><prop k="use_custom_dash" v="0" /><prop k="line_color" v="0,0,0,255" /><prop k="line_style" v="no" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></layer></symbol><symbol alpha="1" clip_to_extent="1" name="26" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,76,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="27" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,127,229,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="28" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="191,255,0,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="29" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="0,255,127,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="30" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="0,229,127,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="31" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="229,153,76,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="32" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="229,102,76,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="33" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,229,76,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="34" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="63,191,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="35" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="229,191,0,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="36" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="191,191,0,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="37" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,191,0,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="38" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,229,127,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="39" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,178,76,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="40" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,191,127,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="41" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,153,76,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="42" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="229,127,191,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="43" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,63,127,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="44" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,127,0,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="45" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="191,63,127,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="46" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="191,255,127,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="47" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="191,229,127,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="48" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="127,255,127,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="49" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="127,229,127,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="50" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="204,255,76,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="51" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="63,229,0,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="52" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="127,229,0,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="53" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="0,255,0,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="54" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="63,191,0,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="55" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="0,229,0,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="56" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="127,229,191,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="57" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="191,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="58" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="127,127,229,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="59" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="63,229,229,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="60" outputUnit="MM" type="fill"><layer class="SimpleFill" locked="0" pass="0"><prop k="color" v="255,255,255,255" /><prop k="color_border" v="0,0,0,255" /><prop k="offset" v="0,0" /><prop k="style" v="solid" /><prop k="style_border" v="no" /><prop k="width_border" v="1" /></layer></symbol></symbols></renderer-v2></qgis>
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.shp
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:06a8f10eee38b43494ed457c05c416cbbf07e024911858815ee1151d1068e802
|
| 3 |
+
size 12602632
|
datasets/bdcharm50/dept_027/GEO050K_HARM_027_S_FGEOL_2154.shx
ADDED
|
Binary file (64.2 kB). View file
|
|
|
datasets/bdcharm50/dept_028/Descriptif des cartes géologiques à 1_50 000 vecteur.pdf
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d1c5773cc3af2552b4a21629d05bed2195293a7b924a5d696e1d0e250fbf3e86
|
| 3 |
+
size 465834
|
datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.dbf
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:869d8ce6ca5b251aa03cb61066ffdba2325874bd785dc9755bfb0821bfe53c2f
|
| 3 |
+
size 3912353
|
datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.lyr
ADDED
|
Binary file (8.19 kB). View file
|
|
|
datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.prj
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
PROJCS["RGF93_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",44.0],PARAMETER["Standard_Parallel_2",49.0],PARAMETER["Latitude_Of_Origin",46.5],UNIT["Meter",1.0]]
|
datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.qml
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version='1.0' encoding='utf8'?>
|
| 2 |
+
<qgis hasScaleBasedVisibilityFlag="0" maximumScale="1000000000" minimumScale="0" version="3.4.10-Madeira" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><transparencyLevelInt>255</transparencyLevelInt><renderer-v2 symbollevels="0" type="RuleRenderer"><rules><rule filter="CODE='1'" label="1, Limite de la carte ou du projet" symbol="0" /><rule filter="CODE='3'" label="3, Limite réseau hydrographique (lacs, canaux ou rivières délimitant une zone)" symbol="1" /><rule filter="CODE='10'" label="10, Limite interprétée sur la carte (arrêts couleur)" symbol="2" /><rule filter="CODE='11'" label="11, Contour géologique observé, visible" symbol="3" /><rule filter="CODE='12'" label="12, Contour géologique supposé, probable, masqué" symbol="4" /><rule filter="CODE='20'" label="20, Elément linéaire structural (contour géologique superposé à une faille)" symbol="5" /><rule filter="ELSE" symbol="6" /></rules><symbols><symbol alpha="1" clip_to_extent="1" name="0" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="0" /><prop k="joinstyle" v="bevel" /><prop k="color" v="76,76,76,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="1" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="0" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,127,255,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="2" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="0" /><prop k="joinstyle" v="bevel" /><prop k="color" v="255,255,255,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="3" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="0" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="4" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="0;0.6;1.8;0" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="1" /><prop k="joinstyle" v="bevel" /><prop k="color" v="0,0,0,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0.1" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol><symbol alpha="1" clip_to_extent="1" name="5" outputUnit="MM" type="line"><layer class="SimpleLine" locked="0" pass="0"><prop k="capstyle" v="square" /><prop k="customdash" v="5;2" /><prop k="customdash_unit" v="MM" /><prop k="use_custom_dash" v="0" /><prop k="joinstyle" v="bevel" /><prop k="color" v="255,255,255,255" /><prop k="line_style" v="solid" /><prop k="line_style_unit" v="MM" /><prop k="line_width" v="0" /><prop k="line_width_unit" v="MM" /><prop k="offset" v="0" /><prop k="offset_unit" v="MM" /><prop k="draw_inside_polygon" v="0" /></layer></symbol></symbols></renderer-v2></qgis>
|
datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.shp
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d0d181998e534cee707edf55432f83031accf30b73bbe6f80ccc55b452106c6f
|
| 3 |
+
size 9529460
|
datasets/bdcharm50/dept_028/GEO050K_HARM_028_L_FGEOL_2154.shx
ADDED
|
Binary file (91.1 kB). View file
|
|
|