chore: add build artifacts, map assets, and routing data

This commit is contained in:
Hamza-Ayed
2026-09-19 12:34:24 +03:00
parent aa2b9f131f
commit 43ad2e0ad4
327 changed files with 52421 additions and 1810 deletions
@@ -44,6 +44,26 @@ class RoadEdge {
});
}
/// مناورة حقيقية من محرك التوجيه (Valhalla) مع تعليمات عربية وأسماء شوارع فعلية
class RouteManeuver {
/// Numeric Valhalla maneuver type (see valhalla ManeuverType enum)
final int type;
final String instructionAr;
final List<String> streetNames;
final double lengthKm;
final LatLng location;
const RouteManeuver({
required this.type,
required this.instructionAr,
required this.streetNames,
required this.lengthKm,
required this.location,
});
bool get hasStreetName => streetNames.isNotEmpty;
}
class OfflineRoutePlan {
final List<LatLng> polylinePoints;
final double totalDistanceKm;
@@ -56,6 +76,13 @@ class OfflineRoutePlan {
final double averageInclinePercent;
final double maxInclinePercent;
/// True when the route follows the real downloaded road network
/// (on-device Valhalla graph) instead of a synthetic fallback path.
final bool usesRealRoadNetwork;
/// Real turn-by-turn maneuvers from the routing engine (empty on fallbacks).
final List<RouteManeuver> maneuvers;
const OfflineRoutePlan({
required this.polylinePoints,
required this.totalDistanceKm,
@@ -67,6 +94,8 @@ class OfflineRoutePlan {
this.elevationLossMeters = 0,
this.averageInclinePercent = 0.0,
this.maxInclinePercent = 0.0,
this.usesRealRoadNetwork = false,
this.maneuvers = const [],
});
String get inclineSummaryArabic {
@@ -91,22 +120,37 @@ class OfflineRoutingEngine {
// ── Strategic Road Network Nodes Across Jordan with Elevation (DEM) ──
final nodeList = const [
// Amman Urban Hubs & Rings
// ── Amman Urban Hubs & Arterial Corridors ──────────────────
RoadNode(id: 'amm_center', name: 'وسط عمان / العبدلي', lat: 31.9615, lng: 35.9130, elevationM: 760),
RoadNode(id: 'amm_citadel', name: 'جبل القلعة / المدرج الروماني', lat: 31.9540, lng: 35.9350, elevationM: 850),
RoadNode(id: 'amm_1st', name: 'الدوار الأول / جبل عمان', lat: 31.9510, lng: 35.9220, elevationM: 850),
RoadNode(id: 'amm_2nd', name: 'الدوار الثاني / جبل عمان', lat: 31.9525, lng: 35.9120, elevationM: 870),
RoadNode(id: 'amm_3rd', name: 'الدوار الثالث / زهران', lat: 31.9545, lng: 35.9015, elevationM: 890),
RoadNode(id: 'amm_4th', name: 'الدوار الرابع / رئاسة الوزراء', lat: 31.9560, lng: 35.8910, elevationM: 900),
RoadNode(id: 'amm_5th', name: 'الدوار الخامس / وادي صقرة', lat: 31.9570, lng: 35.8810, elevationM: 910),
RoadNode(id: 'amm_6th', name: 'الدوار السادس / أبراج بوابة الأردن', lat: 31.9580, lng: 35.8680, elevationM: 930),
RoadNode(id: 'amm_7th', name: 'الدوار السابع / طريق المطار', lat: 31.9530, lng: 35.8580, elevationM: 920),
RoadNode(id: 'amm_8th', name: 'الدوار الثامن / وادي السير', lat: 31.9515, lng: 35.8350, elevationM: 940),
RoadNode(id: 'amm_dabouq', name: 'دابوق / قاعدة القيادة الغربية', lat: 31.9960, lng: 35.8285, elevationM: 1045),
RoadNode(id: 'amm_sweileh', name: 'صويلح / تقاطع الشمال', lat: 32.0220, lng: 35.8450, elevationM: 1030),
RoadNode(id: 'amm_abdoun', name: 'عبدون / جسر عبدون المعلق', lat: 31.9420, lng: 35.8910, elevationM: 860),
RoadNode(id: 'amm_shmeisani', name: 'الشميساني / مجمع النقابات والبنك المركزي', lat: 31.9680, lng: 35.9010, elevationM: 890),
RoadNode(id: 'amm_sports_city', name: 'دوار المدينة الرياضية / صرح الشهيد', lat: 31.9850, lng: 35.8980, elevationM: 920),
RoadNode(id: 'amm_gardens', name: 'شارع وصفي التل (الجاردنز) / الواحة', lat: 31.9820, lng: 35.8750, elevationM: 950),
RoadNode(id: 'amm_medina', name: 'شارع المدينة المنورة / مستشفى ابن الهيثم', lat: 31.9910, lng: 35.8720, elevationM: 970),
RoadNode(id: 'amm_mecca', name: 'شارع مكة / مجمع الحرمين', lat: 31.9690, lng: 35.8550, elevationM: 960),
RoadNode(id: 'amm_khalda', name: 'خلدا / دوار الواحة وصدا', lat: 31.9890, lng: 35.8580, elevationM: 990),
RoadNode(id: 'amm_tlaa', name: 'طلاء العلي / سوق السلطان', lat: 31.9980, lng: 35.8650, elevationM: 1010),
RoadNode(id: 'amm_univ', name: 'الجامعة الأردنية / البوابة الرئيسية', lat: 32.0120, lng: 35.8710, elevationM: 1005),
RoadNode(id: 'amm_sweileh', name: 'صويلح / تقاطع الشمال', lat: 32.0220, lng: 35.8450, elevationM: 1030),
RoadNode(id: 'amm_jubaiha', name: 'الجبيهة / الدوريات الخارجية والتعليم العالي', lat: 32.0280, lng: 35.8620, elevationM: 1040),
RoadNode(id: 'amm_dabouq', name: 'دابوق / قاعدة القيادة الغربية', lat: 31.9960, lng: 35.8285, elevationM: 1045),
RoadNode(id: 'amm_tabarbour', name: 'طبربور / تقاطع المشاغل والزرقاء', lat: 31.9920, lng: 35.9450, elevationM: 880),
RoadNode(id: 'amm_jordan_st', name: 'شارع الأردن / تقاطع ياجوز', lat: 32.0150, lng: 35.9220, elevationM: 930),
RoadNode(id: 'amm_marka', name: 'ماركا / مطار عمان المدني', lat: 31.9720, lng: 35.9910, elevationM: 770),
RoadNode(id: 'amm_sahab', name: 'سحاب / مدينة الملك عبدالله الثاني الصناعية', lat: 31.8710, lng: 36.0040, elevationM: 820),
RoadNode(id: 'amm_marj', name: 'مرج الحمام / تقاطع ناعور والمطار', lat: 31.8950, lng: 35.8520, elevationM: 910),
RoadNode(id: 'amm_airport', name: 'مطار الملكة علياء الدولي (الجيزة)', lat: 31.7200, lng: 35.9880, elevationM: 720),
// Desert Highway Corridor (Route 15 - الطريق الصحراوي الرئيسي)
// ── Desert Highway Corridor (Route 15) ───────────────────────
RoadNode(id: 'dabaa', name: 'محطة ضبعة / الطريق الصحراوي', lat: 31.5420, lng: 36.0150, elevationM: 700),
RoadNode(id: 'qatrana', name: 'القطرانة / جسر القطرانة العسكري', lat: 31.2450, lng: 36.0420, elevationM: 790),
RoadNode(id: 'sultani', name: 'محطة السلطاني / سد السلطاني', lat: 31.0520, lng: 35.9980, elevationM: 820),
@@ -118,7 +162,7 @@ class OfflineRoutingEngine {
RoadNode(id: 'quwayra', name: 'القويرة / مدخل وادي رم', lat: 29.8050, lng: 35.3120, elevationM: 800),
RoadNode(id: 'aqaba_port', name: 'ميناء العقبة الجنوبي / الساحل', lat: 29.4120, lng: 34.9810, elevationM: 15),
// King's Highway Corridor (Route 35 - الطريق الملوكي الجبلي)
// ── King's Highway Corridor (Route 35) ───────────────────────
RoadNode(id: 'madaba_nebo', name: 'مادبا / جبل نيبو', lat: 31.7450, lng: 35.7750, elevationM: 780),
RoadNode(id: 'dhiban_mujib', name: 'ذيبان / وادي الموجب الشاهق', lat: 31.5020, lng: 35.7820, elevationM: 720),
RoadNode(id: 'qasr_karak', name: 'القصر / شمال الكرك', lat: 31.3150, lng: 35.7480, elevationM: 920),
@@ -129,21 +173,21 @@ class OfflineRoutingEngine {
RoadNode(id: 'petra_wadi_musa', name: 'البتراء / وادي موسى وجبل هارون', lat: 30.3200, lng: 35.4750, elevationM: 1150),
RoadNode(id: 'wadi_rum', name: 'محمية وادي رم / رم والديسة', lat: 29.5740, lng: 35.4190, elevationM: 950),
// Dead Sea & Jordan Valley Corridor (Route 65 - طريق الأغوار والبحر الميت)
// ── Dead Sea & Jordan Valley Corridor (Route 65) ─────────────
RoadNode(id: 'dead_sea_north', name: 'شمال البحر الميت / السويمة', lat: 31.7200, lng: 35.5800, elevationM: -390),
RoadNode(id: 'zara_hotsprings', name: 'منطقة الزارة / شاطئ البحر الميت', lat: 31.5950, lng: 35.5620, elevationM: -420),
RoadNode(id: 'ghor_safi', name: 'غور الصافي / مصانع البوتاس', lat: 31.0350, lng: 35.4850, elevationM: -385),
RoadNode(id: 'feifa_araba', name: 'فيفا / وادي عربة الأوسط', lat: 30.7250, lng: 35.3950, elevationM: -180),
RoadNode(id: 'rahma_border', name: 'الرحمة / طريق وادي عربة الجنوبي', lat: 29.9150, lng: 35.1520, elevationM: 90),
// Zarqa & Eastern Desert Corridor (Route 30 - طريق الأزرق وبغداد الدولي)
// ── Zarqa & Eastern Desert Corridor (Route 30) ───────────────
RoadNode(id: 'zrq_city', name: 'الزرقاء / الهاشمية ومعسكرات الجيش', lat: 32.0720, lng: 36.0880, elevationM: 610),
RoadNode(id: 'azraq_junction', name: 'تقاطع مثلث الأزرق / واحة الأزرق', lat: 31.8380, lng: 36.8120, elevationM: 520),
RoadNode(id: 'azraq_airbase', name: 'قاعدة الشهيد موفق السلطي الجوية', lat: 31.8320, lng: 36.7860, elevationM: 515),
RoadNode(id: 'safawi', name: 'الصفاوي / تقاطع طريق بغداد', lat: 32.2010, lng: 37.1230, elevationM: 680),
RoadNode(id: 'ruwaished', name: 'الرويشد / طريبيل والحدود الشرقية', lat: 32.5020, lng: 38.2040, elevationM: 700),
// North Strategic Corridor (Jerash, Ajloun, Irbid, Mafraq)
// ── North Strategic Corridor ─────────────────────────────────
RoadNode(id: 'salt_city', name: 'السلط / جبال البلقاء', lat: 32.0390, lng: 35.7280, elevationM: 850),
RoadNode(id: 'jerash', name: 'جرش / جسر سيل جرش', lat: 32.2780, lng: 35.8950, elevationM: 580),
RoadNode(id: 'ajloun', name: 'عجلون / قلعة الربض وغابات عجلون', lat: 32.3250, lng: 35.7350, elevationM: 1100),
@@ -167,7 +211,6 @@ class OfflineRoutingEngine {
final dense = coords ?? _generateDenseRoadCurve(p1, p2, distKm);
// Incline % = (Elevation Change in meters / Distance in meters) * 100
final elevDiffM = n2.elevationM - n1.elevationM;
final distM = distKm * 1000.0;
final incline = (elevDiffM / (distM > 0 ? distM : 1000.0)) * 100.0;
@@ -193,23 +236,65 @@ class OfflineRoutingEngine {
));
}
// 1. Amman Ring & Urban Arterials
// 1. Amman Inner Grid & Zahran Spine (1st Circle to 8th Circle)
addEdge('amm_center', 'amm_citadel', 1.2, 'primary', 45.0);
addEdge('amm_center', 'amm_1st', 1.5, 'primary', 50.0);
addEdge('amm_1st', 'amm_2nd', 1.0, 'primary', 50.0);
addEdge('amm_2nd', 'amm_3rd', 1.1, 'primary', 55.0);
addEdge('amm_3rd', 'amm_4th', 1.0, 'primary', 55.0);
addEdge('amm_4th', 'amm_5th', 1.2, 'primary', 60.0);
addEdge('amm_5th', 'amm_6th', 1.3, 'primary', 60.0);
addEdge('amm_6th', 'amm_7th', 1.2, 'primary', 65.0);
addEdge('amm_7th', 'amm_8th', 2.2, 'primary', 65.0);
// 2. Abdoun & Shmeisani Links
addEdge('amm_4th', 'amm_abdoun', 2.0, 'primary', 60.0);
addEdge('amm_5th', 'amm_abdoun', 2.2, 'primary', 60.0);
addEdge('amm_7th', 'amm_abdoun', 3.8, 'primary', 70.0);
addEdge('amm_center', 'amm_shmeisani', 2.5, 'primary', 55.0);
addEdge('amm_3rd', 'amm_shmeisani', 2.0, 'primary', 55.0);
addEdge('amm_4th', 'amm_shmeisani', 1.8, 'primary', 55.0);
addEdge('amm_shmeisani', 'amm_sports_city', 2.4, 'primary', 65.0);
// 3. Mecca St & Medina St & Gardens St Corridors
addEdge('amm_5th', 'amm_gardens', 2.8, 'primary', 60.0);
addEdge('amm_sports_city', 'amm_gardens', 2.5, 'primary', 60.0);
addEdge('amm_gardens', 'amm_medina', 1.8, 'primary', 60.0);
addEdge('amm_gardens', 'amm_khalda', 2.2, 'primary', 60.0);
addEdge('amm_mecca', 'amm_medina', 2.2, 'primary', 65.0);
addEdge('amm_mecca', 'amm_khalda', 2.5, 'primary', 65.0);
addEdge('amm_mecca', 'amm_8th', 3.0, 'primary', 65.0);
addEdge('amm_6th', 'amm_mecca', 1.5, 'primary', 60.0);
// 4. University St & Sweileh & Tlaa Al-Ali
addEdge('amm_sports_city', 'amm_univ', 3.2, 'primary', 65.0);
addEdge('amm_medina', 'amm_univ', 2.6, 'primary', 65.0);
addEdge('amm_khalda', 'amm_tlaa', 1.5, 'primary', 60.0);
addEdge('amm_tlaa', 'amm_univ', 1.8, 'primary', 60.0);
addEdge('amm_univ', 'amm_jubaiha', 2.0, 'primary', 65.0);
addEdge('amm_univ', 'amm_sweileh', 3.0, 'primary', 70.0);
addEdge('amm_tlaa', 'amm_sweileh', 3.2, 'primary', 65.0);
addEdge('amm_khalda', 'amm_dabouq', 3.5, 'primary', 65.0);
addEdge('amm_dabouq', 'amm_sweileh', 4.5, 'primary', 70.0);
addEdge('amm_sweileh', 'amm_khalda', 5.0, 'primary', 65.0);
addEdge('amm_khalda', 'amm_8th', 6.5, 'primary', 65.0);
addEdge('amm_8th', 'amm_7th', 2.8, 'primary', 65.0);
addEdge('amm_7th', 'amm_5th', 3.2, 'primary', 65.0);
addEdge('amm_5th', 'amm_3rd', 2.5, 'primary', 60.0);
addEdge('amm_3rd', 'amm_1st', 2.2, 'primary', 55.0);
addEdge('amm_1st', 'amm_center', 2.0, 'primary', 50.0);
addEdge('amm_dabouq', 'amm_center', 11.0, 'primary', 65.0);
addEdge('amm_sweileh', 'amm_jubaiha', 2.5, 'primary', 65.0);
// 5. Jordan St & Tabarbour & Marka
addEdge('amm_center', 'amm_tabarbour', 9.5, 'primary', 65.0);
addEdge('amm_sports_city', 'amm_jordan_st', 3.5, 'highway', 80.0);
addEdge('amm_jordan_st', 'amm_jubaiha', 4.0, 'highway', 80.0);
addEdge('amm_tabarbour', 'amm_jordan_st', 3.2, 'primary', 65.0);
addEdge('amm_tabarbour', 'zrq_city', 18.0, 'highway', 85.0);
addEdge('amm_tabarbour', 'amm_marka', 6.5, 'primary', 60.0);
addEdge('amm_marka', 'amm_sahab', 14.0, 'primary', 75.0);
// 6. Airport Highway & Marj Al-Hamam
addEdge('amm_7th', 'amm_marj', 6.5, 'highway', 90.0);
addEdge('amm_8th', 'amm_marj', 7.0, 'primary', 75.0);
addEdge('amm_marj', 'amm_airport', 22.0, 'highway', 100.0);
addEdge('amm_7th', 'amm_airport', 28.0, 'highway', 100.0);
addEdge('amm_sahab', 'amm_airport', 24.0, 'highway', 95.0);
addEdge('amm_dabouq', 'salt_city', 16.0, 'primary', 65.0);
addEdge('amm_marj', 'madaba_nebo', 22.0, 'primary', 75.0);
addEdge('amm_7th', 'madaba_nebo', 26.0, 'primary', 75.0);
addEdge('salt_city', 'dead_sea_north', 32.0, 'secondary', 55.0);