chore: add build artifacts, map assets, and routing data
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user