// في ملف: constant/country_polygons.dart import 'package:intaleq_maps/intaleq_maps.dart'; class CountryPolygons { // ========================================================== // 1. الأردن: عمان، الزرقاء، إربد، السلط ومساحة كبيرة داخل الأردن // ========================================================== static final List jordanBoundary = [ const LatLng(32.70, 35.80), // شمال إربد const LatLng(32.35, 36.30), // المفرق const LatLng(32.10, 36.30), // الزرقاء const LatLng(31.85, 36.20), // شرق عمان const LatLng(31.50, 36.00), // مادبا const LatLng(30.80, 35.80), // الكرك / الطفيلة const LatLng(30.20, 35.60), // معان const LatLng(29.50, 35.00), // العقبة const LatLng(29.50, 34.90), // الحدود الغربية للعقبة const LatLng(30.50, 35.20), // وادي عربة const LatLng(31.50, 35.50), // البحر الميت const LatLng(32.05, 35.60), // السلط const LatLng(32.70, 35.60), // غرب إربد ]; // ========================================================== // 2. سوريا: دمشق، ريف دمشق، حمص، حلب، اللاذقية (استثناء الصحراء) // ========================================================== static final List syriaBoundary = [ const LatLng(32.60, 36.00), // درعا const LatLng(32.70, 36.60), // السويداء const LatLng(33.50, 36.50), // ريف دمشق الشرقي const LatLng(34.10, 36.80), // النبك const LatLng(34.70, 36.80), // حمص const LatLng(35.10, 36.80), // حماة const LatLng(36.20, 37.30), // حلب الشرقية const LatLng(36.60, 37.00), // شمال حلب const LatLng(36.00, 36.00), // إدلب / الجبال const LatLng(35.70, 35.80), // اللاذقية const LatLng(34.80, 35.80), // طرطوس const LatLng(34.50, 36.20), // تلكلخ const LatLng(33.50, 36.00), // دمشق الغربية ]; // ========================================================== // 3. مصر: القاهرة كاملة، الإسكندرية، ومراكز المحافظات // ========================================================== static final List egyptBoundary = [ const LatLng(29.50, 30.80), // جنوب الفيوم const LatLng(29.80, 31.40), // شرق القاهرة الكبرى const LatLng(30.10, 31.80), // العاشر من رمضان const LatLng(30.60, 32.30), // الإسماعيلية const LatLng(31.30, 31.80), // بورسعيد const LatLng(31.50, 31.25), // دمياط const LatLng(31.30, 29.80), // الإسكندرية const LatLng(30.80, 29.80), // وادي النطرون const LatLng(30.00, 30.80), // 6 أكتوبر / غرب القاهرة ]; // ========================================================== // 4. العراق: بغداد ومساحة واسعة من وسط وجنوب وشمال العراق // ========================================================== static final List iraqBoundary = [ const LatLng(37.30, 42.00), // الشمال const LatLng(37.00, 46.00), // الشمال الشرقي const LatLng(34.00, 46.50), // شرق بغداد const LatLng(29.50, 48.50), // البصرة const LatLng(29.00, 46.00), // الجنوب const LatLng(31.00, 43.00), // الجنوب الغربي const LatLng(33.00, 39.00), // الغرب const LatLng(35.00, 41.00), // الشمال الغربي ]; /// دالة للتحقق مما إذا كان الموقع ضمن نطاق الخدمة المدعوم static bool isServiceSupported(LatLng? point) { if (point == null) return false; if (_isPointInPolygon(point, jordanBoundary)) return true; if (_isPointInPolygon(point, syriaBoundary)) return true; if (_isPointInPolygon(point, egyptBoundary)) return true; if (_isPointInPolygon(point, iraqBoundary)) return true; return false; } // دالة تُرجع رابط API بناءً على اسم الدولة static String getRoutingApiUrl(String countryName) { switch (countryName) { case 'Jordan': return 'https://routec.intaleq.xyz/route-jo'; case 'Syria': return 'https://routec.intaleq.xyz/route'; case 'Egypt': return 'https://routec.intaleq.xyz/route-eg'; case 'Iraq': return 'https://routec.intaleq.xyz/route'; // You can update this if Iraq has a specific routing API default: // الافتراضي في حالة لم يقع الموقع ضمن أي من المضلعات return 'https://routec.intaleq.xyz/route'; } } /// دالة تحدد اسم الدولة (باللغة الإنجليزية للـ API) بناءً على الإحداثيات static String getCountryName(LatLng? point) { if (point == null) return "unsupported"; if (_isPointInPolygon(point, jordanBoundary)) return "Jordan"; if (_isPointInPolygon(point, syriaBoundary)) return "Syria"; if (_isPointInPolygon(point, egyptBoundary)) return "Egypt"; if (_isPointInPolygon(point, iraqBoundary)) return "Iraq"; return "unsupported"; } /// خوارزمية Ray Casting للتحقق من وقوع نقطة داخل مضلع static bool _isPointInPolygon(LatLng p, List polygon) { bool isInside = false; int j = polygon.length - 1; for (int i = 0; i < polygon.length; i++) { if (((polygon[i].latitude > p.latitude) != (polygon[j].latitude > p.latitude)) && (p.longitude < (polygon[j].longitude - polygon[i].longitude) * (p.latitude - polygon[i].latitude) / (polygon[j].latitude - polygon[i].latitude) + polygon[i].longitude)) { isInside = !isInside; } j = i; } return isInside; } }