File size: 3,051 Bytes
a74054f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
"""
Run this against your real downloaded BD TOPO data to:
1. Actually answer the karst/bétoire question with real data.
2. Cross-validate the new catchment polygons against Hub'Eau's surface_bv
   numbers (from catchment_area.csv, built earlier via download_catchment_area.py).
"""
import sys
sys.path.insert(0, ".")
from pathlib import Path
from src.data.loaders.bdtopo_hydro import BDTopoHydroLoader

loader = BDTopoHydroLoader(data_path=Path("datasets/bdtopo_hydro"))

# --- 1. The karst question, for real this time ---
print("=" * 70)
print("KARST CHECK near amont/aval bétoire stations")
print("=" * 70)
BETOIRE_STATIONS = {
    "H605641101": ("Ajou [amont bétoire]", 48.98492, 0.78902),
    "H605641201": ("Grosley-sur-Risle [aval bétoire]", 49.04707, 0.79984),
}
surfaces = loader.load_surfaces()
any_found = False
for code, (name, lat, lon) in BETOIRE_STATIONS.items():
    results = loader.check_karst_near_point(lat, lon, search_radius_km=3.0, surfaces_geojson=surfaces)
    print(f"\n{code} ({name}):")
    if results:
        any_found = True
        for r in results:
            print(f"  -> {r['nature']!r} at {r['distance_km']:.2f} km")
    else:
        print("  -> no karst-classified feature within 3 km")

print()
if any_found:
    print("VERDICT: CONFIRMED by real BD TOPO data -- the bétoire naming is backed "
          "by an actual mapped karst feature.")
else:
    print("VERDICT: No karst feature found within 3km. Try a wider search radius, "
          "or this may just be historical/informal naming not reflected in the "
          "current BD TOPO classification.")

# --- 2. Cross-validate catchment polygons against Hub'Eau surface_bv ---
print()
print("=" * 70)
print("CATCHMENT POLYGON CROSS-CHECK vs Hub'Eau surface_bv")
print("=" * 70)
try:
    import geopandas as gpd
    import pandas as pd

    catchments = loader.load_catchments()
    print(f"Loaded {len(catchments)} catchment polygon(s)")
    print(f"Columns: {list(catchments.columns)}")

    hubeau_path = Path("datasets/catchment_area.csv")
    if hubeau_path.exists():
        hubeau = pd.read_csv(hubeau_path).dropna(subset=["catchment_area_km2"])
        print(f"\nLoaded {len(hubeau)} Hub'Eau reference values from {hubeau_path}")
        # Compute polygon areas in km^2 (reproject to a metric CRS for accurate area)
        catchments_metric = catchments.to_crs(epsg=2154)  # Lambert-93, standard for France
        catchments["area_km2_computed"] = catchments_metric.geometry.area / 1e6
        print(catchments[["area_km2_computed"]].describe())
        print("\n(Match these against datasets/catchment_area.csv's real Hub'Eau values "
              "by whichever ID field the polygons carry -- check catchments.columns "
              "above for a station/site code to join on.)")
    else:
        print(f"\n{hubeau_path} not found -- skipping cross-check. "
              f"(Run download_catchment_area.py first if you want this comparison.)")
except ImportError:
    print("geopandas not installed -- skipping catchment polygon check.")