Paste or describe an oral tradition with geographic claims. Provide structured metadata and extract each testable geographic claim.
Review your auto-generated predictions. Define confirmation and falsification criteria for each, then timestamp and hash the document.
Based on your geographic coordinates and claim types, here are the relevant remote sensing datasets. Highlighted datasets are especially relevant to your claim types.
Download or copy these Python analysis templates. Replace the placeholder values with your coordinates and data file paths.
""" Directional Bearing Test Extracts depth profiles along 8 compass bearings from a central point. Tests whether a predicted bearing is the shallowest corridor. Replace LATITUDE, LONGITUDE, BEARING_DEGREES, and DATA_FILE. """ import numpy as np from scipy import ndimage import rasterio # ── Configuration ── LAT, LON = LATITUDE, LONGITUDE # Center point PREDICTED_BEARING = BEARING_DEGREES # Predicted shallowest (deg) DATA_FILE = "DATA_FILE.tif" # GeoTIFF bathymetry TRANSECT_LEN_KM = 50 # Transect length N_POINTS = 200 # Points per transect # ── Extract 8 bearings ── bearings = np.arange(0, 360, 45) with rasterio.open(DATA_FILE) as src: for b in bearings: rad = np.radians(b) dists = np.linspace(0, TRANSECT_LEN_KM, N_POINTS) lats = LAT + (dists / 111.32) * np.cos(rad) lons = LON + (dists / (111.32 * np.cos(np.radians(LAT)))) * np.sin(rad) depths = [list(src.sample([(x, y)]))[0][0] for x, y in zip(lons, lats)] mean_d = np.nanmean(depths) print(f"Bearing {b:3d}°: mean depth = {mean_d:.1f}m") # ── Rank test ── # Compare predicted bearing rank against 8 bearings # p-value = 1/8 = 0.125 for random correct pick
""" Submerged Feature Detection Runs a transect between two points and identifies ridges or plateaux that break the depth gradient. Replace START_LAT/LON, END_LAT/LON, and DATA_FILE. """ import numpy as np from scipy.signal import find_peaks import rasterio START_LAT, START_LON = LATITUDE, LONGITUDE END_LAT, END_LON = END_LATITUDE, END_LONGITUDE DATA_FILE = "DATA_FILE.tif" N_POINTS = 500 lats = np.linspace(START_LAT, END_LAT, N_POINTS) lons = np.linspace(START_LON, END_LON, N_POINTS) with rasterio.open(DATA_FILE) as src: depths = np.array([list(src.sample([(x, y)]))[0][0] for x, y in zip(lons, lats)]) # ── Find ridges (local maxima = shallower points) ── inverted = -depths peaks, props = find_peaks(inverted, prominence=5, distance=20) print(f"Found {len(peaks)} candidate ridges/features") for i, p in enumerate(peaks): print(f" Feature {i+1}: lat={lats[p]:.4f} lon={lons[p]:.4f} depth={depths[p]:.1f}m")
""" Geomorphological Feature Matching Compares DEM/bathymetry features against a predicted description. Computes slope, aspect, and curvature to identify matching terrain. Replace LATITUDE, LONGITUDE, RADIUS_KM, and DATA_FILE. """ import numpy as np import rasterio from rasterio.windows import from_bounds LAT, LON = LATITUDE, LONGITUDE RADIUS_KM = 10 DATA_FILE = "DATA_FILE.tif" # ── Extract window around target ── d = RADIUS_KM / 111.32 with rasterio.open(DATA_FILE) as src: win = from_bounds(LON - d, LAT - d, LON + d, LAT + d, src.transform) elev = src.read(1, window=win).astype(float) # ── Compute terrain derivatives ── dy, dx = np.gradient(elev) slope = np.degrees(np.arctan(np.sqrt(dx**2 + dy**2))) aspect = np.degrees(np.arctan2(-dx, dy)) % 360 print(f"Elevation range: {np.nanmin(elev):.1f} to {np.nanmax(elev):.1f}m") print(f"Mean slope: {np.nanmean(slope):.2f}°") print(f"Dominant aspect: {np.nanmedian(aspect):.0f}°")
Record the outcome of each prediction after running your analysis. The tool auto-computes summary statistics and generates a methods paragraph.
Track resolution upgrades and their effect on predictions.
| Date | Old Resolution | New Resolution | Predictions Affected | Upgrades / Downgrades |
|---|