feat(tactical): integrate cross-country terrain slope, basalt rocks, and off-road mobility analysis into Isochrone engine

This commit is contained in:
Hamza-Ayed
2026-08-18 15:40:18 +03:00
parent 9088af0534
commit ad231c6f20
2 changed files with 219 additions and 19 deletions
+62 -1
View File
@@ -3300,10 +3300,71 @@ ${terrainResult.tacticalRecommendations.map((r, i) => `${i + 1}. ${r}`).join('\n
<div style={{ fontSize: '0.72rem', color: '#94a3b8', marginBottom: 2 }}>مؤشر الامتثال للساعة الذهبية (Golden Hour Index)</div>
<div style={{ fontSize: '1.6rem', fontWeight: 900, color: '#4ade80' }}>96.4%</div>
<div style={{ fontSize: '0.72rem', color: '#cbd5e1' }}>
تغطية سريعة ضمن المحاور المرورية الرئيسية في الأردن
تغطية سريعة هجينة (شبكة الطرق + عبور تكتيكي خارج الطرق)
</div>
</div>
{/* Terrain & Cross-Country Mobility Analysis Card */}
{isochroneData.terrainPassability && (
<div style={{
background: 'rgba(255, 255, 255, 0.03)',
border: '1px solid rgba(255, 255, 255, 0.1)',
borderRadius: 8,
padding: '10px',
display: 'flex',
flexDirection: 'column',
gap: 6
}}>
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
<span style={{ fontSize: '0.75rem', fontWeight: 800, color: '#38bdf8', display: 'flex', alignItems: 'center', gap: 4 }}>
<span>⛰️</span> دراسة عبور الأرض والانحدار والبازلت
</span>
<span style={{
fontSize: '0.68rem',
fontWeight: 800,
padding: '2px 6px',
borderRadius: 4,
background: isochroneData.terrainPassability.passabilityScore > 70 ? 'rgba(34,197,94,0.2)' : 'rgba(234,179,8,0.2)',
color: isochroneData.terrainPassability.passabilityScore > 70 ? '#4ade80' : '#facc15',
border: `1px solid ${isochroneData.terrainPassability.passabilityScore > 70 ? '#22c55e' : '#eab308'}`
}}>
جاهزية العبور: {isochroneData.terrainPassability.passabilityScore}%
</span>
</div>
<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 6, marginTop: 2 }}>
<div style={{ background: 'rgba(0,0,0,0.25)', padding: '6px 8px', borderRadius: 6 }}>
<div style={{ fontSize: '0.62rem', color: '#94a3b8' }}>متوسط ميل الأرض</div>
<div style={{ fontSize: '0.85rem', fontWeight: 800, color: '#f8fafc' }}>
{isochroneData.terrainPassability.avgSlopeDeg}°
</div>
</div>
<div style={{ background: 'rgba(0,0,0,0.25)', padding: '6px 8px', borderRadius: 6 }}>
<div style={{ fontSize: '0.62rem', color: '#94a3b8' }}>تغطية الطرق المعبدة</div>
<div style={{ fontSize: '0.85rem', fontWeight: 800, color: '#38bdf8' }}>
{isochroneData.terrainPassability.roadCoveragePct}%
</div>
</div>
</div>
{isochroneData.terrainPassability.basaltZoneDetected && (
<div style={{ fontSize: '0.65rem', color: '#f59e0b', background: 'rgba(245, 158, 11, 0.12)', padding: '4px 8px', borderRadius: 4, border: '1px solid rgba(245, 158, 11, 0.3)' }}>
⚠️ تم رصد حقول صخور بازلتية - تم تطبيق معامل إبطاء لحماية الإطارات
</div>
)}
{isochroneData.terrainPassability.cliffBarriersCount > 0 && (
<div style={{ fontSize: '0.65rem', color: '#ef4444', background: 'rgba(239, 68, 68, 0.12)', padding: '4px 8px', borderRadius: 4, border: '1px solid rgba(239, 68, 68, 0.3)' }}>
⛔ تم رصد {isochroneData.terrainPassability.cliffBarriersCount} قواطع وجروف صخرية حادة (انحدار شديد يعيق المركبات)
</div>
)}
<div style={{ fontSize: '0.68rem', color: '#94a3b8', borderTop: '1px solid rgba(255,255,255,0.06)', paddingTop: 5 }}>
{isochroneData.terrainPassability.mobilityConditionAr}
</div>
</div>
)}
{/* Tiers Breakdown Cards */}
<div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>
{isochroneData.tiers.map((tier: any, idx: number) => (