refactor(tactical): remove ridge lines to keep map uncluttered and focused strictly on wadi flows

This commit is contained in:
Hamza-Ayed
2026-08-18 12:54:35 +03:00
parent 13ff137359
commit f1e31cb721
-80
View File
@@ -1131,87 +1131,7 @@ export async function calculateTerrainStudy(
}
}
// 7. Trace Natural Ridge Watershed Divides (Dominant High Crests)
// Crest cells: high elevation, local peak curvature, divergent flow (low flow accumulation)
const ridgeCandidates: Array<{ r: number; c: number; elev: number; tpi: number }> = [];
for (let r = 1; r < gridSize - 1; r++) {
for (let c = 1; c < gridSize - 1; c++) {
const el = elevationGrid[r][c];
if (el >= minElev + relief * 0.45 && flowAcc[r][c] <= 2) {
// Compute 3x3 local mean
let sum = 0;
let count = 0;
for (let dr = -1; dr <= 1; dr++) {
for (let dc = -1; dc <= 1; dc++) {
sum += elevationGrid[r + dr][c + dc];
count++;
}
}
const localMean = sum / count;
const tpi = el - localMean;
if (tpi >= 1.5) {
ridgeCandidates.push({ r, c, elev: el, tpi });
}
}
}
}
// Group connected ridge candidates into crest lines
const visitedRidge = Array(gridSize).fill(false).map(() => Array(gridSize).fill(false));
for (const rc of ridgeCandidates) {
if (visitedRidge[rc.r][rc.c]) continue;
const ridgeLine: [number, number][] = [];
let currR = rc.r;
let currC = rc.c;
while (currR >= 0 && currR < gridSize && currC >= 0 && currC < gridSize) {
visitedRidge[currR][currC] = true;
const pt = gridCoords[currR * gridSize + currC];
const distFromCenter = calculateDistance(centerLat, centerLng, pt.lat, pt.lng);
if (distFromCenter <= radiusMeters * 1.05) {
ridgeLine.push([pt.lng, pt.lat]);
}
// Find best unvisited ridge neighbor
let bestNext: { r: number; c: number } | null = null;
let highestNeighborElev = -9999;
for (let dr = -1; dr <= 1; dr++) {
for (let dc = -1; dc <= 1; dc++) {
if (dr === 0 && dc === 0) continue;
const nr = currR + dr;
const nc = currC + dc;
if (nr >= 0 && nr < gridSize && nc >= 0 && nc < gridSize && !visitedRidge[nr][nc]) {
const isCand = ridgeCandidates.some(c => c.r === nr && c.c === nc);
if (isCand && elevationGrid[nr][nc] > highestNeighborElev) {
highestNeighborElev = elevationGrid[nr][nc];
bestNext = { r: nr, c: nc };
}
}
}
}
if (!bestNext) break;
currR = bestNext.r;
currC = bestNext.c;
}
if (ridgeLine.length >= 3) {
spatialFeatures.push({
type: 'Feature',
properties: {
layerType: 'ridge',
category: 'key-terrain',
title: `⛰️ سلسلة تلال وقمم حاكمة (خط تقسيم مياه)`,
color: '#d97706',
width: 2.5
},
geometry: {
type: 'LineString',
coordinates: ridgeLine
}
});
}
}
// 8. Regional Sector Intelligence Context
let sectorName = 'قطاع عمليات ميداني';