cassini-team-todo/eea-river-proximity
EEA Industrial Emissions - River Proximity Dataset This dataset links 160,576 industrial facilities from the European Environment Agency (EEA) to nearby rivers, with upstream/downstream flow analysis based on HydroRIVERS network data. Why This Dataset? Industrial facilities that discharge pollutants into water bodies affect downstream ecosystems and communities. This dataset enables: Impact assessment: Which communities/ecosystems are downstream of polluting… See the full description on the dataset page: https://huggingface.co/datasets/cassini-team-todo/eea-river-proximity.
EEA Industrial Emissions - River Proximity Dataset
This dataset links 160,576 industrial facilities from the European Environment Agency (EEA) to nearby rivers, with upstream/downstream flow analysis based on HydroRIVERS network data.
Why This Dataset?
Industrial facilities that discharge pollutants into water bodies affect downstream ecosystems and communities. This dataset enables:
- Impact assessment: Which communities/ecosystems are downstream of polluting facilities?
- Source tracing: Where does a facility's water supply come from?
- Regulatory analysis: Mapping industrial emissions to affected river networks
- Environmental research: Studying relationships between industry and water quality
How It Works
┌─────────────┐
│ UPSTREAM │ ← Source water (green)
│ (5 parts) │ flowing TOWARD facility
└──────┬──────┘
│
───────●─────── ← Split point (closest to facility)
│
┌──────┴──────┐
│ FACILITY │ ← Industrial facility (orange)
│ (211m) │ within 1km of river
└─────────────┘
│
┌──────┴──────┐
│ DOWNSTREAM │ → Affected water (red)
│ (4 parts) │ flowing AWAY from facility
└─────────────┘For each facility:
- Find the closest river segment within 1km
- Split the river at the closest point
- Trace upstream 10km (source water)
- Trace downstream 10km (potentially affected)
- Clip water surface polygons to match
Dataset Files
river_data_facilities.geoparquet (2.6 GB)
Main dataset with 160,576 facilities matched to rivers.
river_data_segments.geoparquet (1.7 MB)
River segments with direction labels (28,434 entries).
Usage
Load the dataset
import geopandas as gpd
from shapely import wkb
# Load facilities
facilities = gpd.read_parquet("river_data_facilities.geoparquet")
print(f"Loaded {len(facilities):,} facilities")
# Example: Find facilities in Germany
german = facilities[facilities['countryName'] == 'Germany']
print(f"Germany has {len(german):,} facilities near rivers")Extract river geometries
# Get a specific facility
facility = facilities[facilities['facilityName'].str.contains('PRECHEZA')].iloc[0]
# Parse WKB geometries
upstream_line = wkb.loads(facility['upstream_line_wkb'])
downstream_line = wkb.loads(facility['downstream_line_wkb'])
upstream_poly = wkb.loads(facility['upstream_poly_wkb'])
downstream_poly = wkb.loads(facility['downstream_poly_wkb'])
print(f"Upstream: {facility['n_upstream']} segments")
print(f"Downstream: {facility['n_downstream']} segments")Visualize a facility
python visualize_single_facility.py "PRECHEZA"
# Opens facility_map.html in browserVisualize multiple facilities
python visualize_facilities_rivers.py
# Opens facilities_rivers_map.html with 200 sampled facilitiesScripts
river_proximity.py
Main pipeline that:
- Loads EEA facilities, HydroRIVERS segments, and EU-Hydro polygons
- Builds river network graph from NEXT_DOWN field
- For each facility, finds closest river and splits at nearest point
- Traces upstream (BFS) and downstream (linear) within distance limits
- Clips water surface polygons to match river geometries
- Outputs geoparquet files
visualize_single_facility.py
Creates an interactive Folium map for a single facility showing:
- Green: upstream river and water surface
- Red: downstream river and water surface
- Orange marker: facility location
visualize_facilities_rivers.py
Creates an overview map with sampled facilities and their river associations.
Source Data
Parameters
Statistics
- Total facilities processed: 254,027
- Facilities near rivers: 160,576 (63%)
- Unique upstream segments: 18,498
- Unique downstream segments: 9,936
- Average upstream parts: 7.1
- Average downstream parts: 3.7
Sentinel visibility (EU-Hydro River_Net_p overlap ≥ 30 %)
- Facilities with `has_sentinel_visible_river = True`: 59,568 / 160,576 (37.1 %)
- *Facilities where the closest reach is visible*: 23,507 / 160,576 (14.6 %)
Lower-order rates (~20–25 %) are driven by upstream/downstream propagation: a headwater facility may drain into a wider river within the 10 km trace window.
facility_timeseries.parquet (210 MB)
Sentinel-2 water-quality time series for Sentinel-visible industrial facilities (both upstream and downstream polygons detectable in 10 m imagery). Produced by fetching the Sentinel Hub Statistical API in P10D bins over 2017–2023 and merging three shards. One row per (facility, direction, 10-day bin).
Coverage: 9.2 M rows · 23,158 unique facility IDs · 20,755 paired (both directions) · 2017-01-01 → 2023-12-16
facility_anomalies_per_bin.parquet (216 MB)
Per-bin anomaly detection output. One row per paired (facility, 10-day bin) where both upstream and downstream data exist. Produced by scripts/compute_facility_anomalies.py.
Pipeline steps applied:
- Inner-join upstream + downstream on (facility_id, date)
- Pixel-count quality flags
- Raw downstream-minus-upstream delta
- Spatial detrending: subtract cross-facility median delta per date to remove regional Sentinel-2 artifacts
- Robust z-score per (facility_id, quarter) using median + MAD × 1.4826
- Previous-bin z (persistence check)
- High-confidence anomaly flag (detrended delta > 0, z > 3, prev-z > 1.5)
Coverage: 4.26 M rows · 20,755 facilities · 255 unique dates
facility_anomalies_events.parquet (tiny)
Consolidated pollution events — one row per unique (upstream polygon, downstream polygon, time window) after deduplication. Single-bin events and events where the downstream signal is not worse than upstream are excluded.
Coverage: 42 events · 36 unique polygon pairs · 2017–2023
Thresholds used: z > 3.0, prev-bin z > 1.5, ≥ 2 consecutive bins, detrended delta > 0, seasonal MAD baseline requires ≥ 8 bins per quarter.
License
CC-BY-4.0. See source datasets for their respective licenses.
Citation
If you use this dataset, please cite the source datasets:
- Lehner, B., Grill G. (2013): Global river hydrography and network routing: baseline data and new approaches to study the world's large river systems. Hydrological Processes, 27(15): 2171–2186.
- European Environment Agency (EEA) Industrial Emissions Database
- Copernicus EU-Hydro River Network Database
