بيانات الخريطة والمخاطر
بيانات الخريطة والمخاطر
كل ما يُركَّب فوق خريطة الأساس: بيان إعداد الخريطة، أنماط علامات الفئات، صور الأيقونات المركَّبة، الطبقات العلوية المتجهية/بصيغة GeoJSON، الطقس، وتقييم مخاطر المسار الذي يدمج حركة المرور والطقس والحوادث ومناطق اللوجستيات وأصول الإنفاذ.
النطاق المطلوب: tiles للإعداد والطبقات العلوية والطقس؛ و**routing** لنقاط نهاية POST الخاصة بمخاطر المسار/الإنفاذ.
[lng, lat]؛ وbbox هو west,south,east,north. الطبقات العلوية الثقيلة تدعم مرشِّح bbox/zoom/limit ومخطِّط تغطية بالبلاطات للتحميل المحدود. تتعامل معظم نقاط النهاية مع المدخلات السيئة بسلاسة (FeatureCollection فارغة مع hasData:false) بدلًا من إصدار خطأ.GET /map/config
بيان إعداد الخريطة الكامل من المصدر الأول: الأنماط الأساسية، الطبقات العلوية، الفئات، الأيقونات، الطقس، النمط ثلاثي الأبعاد، مناطق اللوجستيات، وكتلة capabilities التي تصف نقاط النهاية العامة وحدود الأداء. اجلب هذا مرة واحدة عند بدء التشغيل لاكتشاف ما هو متاح وكيفية تحميله.
المفاتيح من المستوى الأعلى: layers، baseStyles، overlays، categories، icons، iconSpriteUrl، iconSpriteManifestUrl، categoryStyleManifest، threeD، logisticsZones، capabilities.
{
"baseStyles": [ { "key": "standard", "name": "Navvo", "kind": "base", "endpoint": "/api/v1/tiles/style?style=standard" } ],
"overlays": [ { "key": "traffic", "kind": "overlay", "layerType": "traffic", "tileUrl": "/api/v1/traffic/lines/tiles/{z}/{x}/{y}" } ],
"iconSpriteUrl": "/api/v1/map/icons/sprite.svg",
"capabilities": {
"publicEndpoints": { "config": "/api/v1/map/config", "routeRisk": "/api/v1/map/route-risk" },
"performance": { "defaultTileCoverCap": 64, "maxTileCoverCap": 256, "tileAddressedOverlays": true },
"vectorOverlays": { "enabled": true, "format": "mvt" }
}
}
GET /map/layers
فهرس مسطَّح لجميع الطبقات المُعدَّة: { items, baseStyles, overlays, total, requiredOverlays }. يسرد requiredOverlays أنواع طبقات الطبقات العلوية التي يتوقعها Navvo (مثل traffic، transit، incidents، weather، logistics_zones).
GET /map/category-styles
تنسيق جاهز للعرض لفئات الأماكن — ألوان العلامات، أنماط الدبابيس، الأيقونات، الأسماء متعددة اللغات، والأسماء البديلة. استخدمه لرسم علامات ملوَّنة حسب الفئة تطابق خريطة Navvo نفسها.
{
"version": 1,
"iconSpriteUrl": "/api/v1/map/icons/sprite.svg",
"categories": [
{
"slug": "restaurants",
"name": { "en": "Restaurants", "ar": "مطاعم" },
"color": "#F97316",
"pinStyle": "teardrop",
"zoomRange": { "min": 11, "max": 22 },
"icon": { "name": "utensils", "href": "/api/v1/map/icons/sprite.svg#navvo-icon-utensils" }
}
]
}
GET /map/icons/sprite.svg & sprite.json
sprite.svg تُعيد صورة رموز مركَّبة بصيغة SVG (image/svg+xml) لجميع الأيقونات النشطة (<symbol id="navvo-icon-…">). وsprite.json تُعيد البيان الذي يصف كل أيقونة (name، id، href، الحجم).
GET /map/readiness
تدقيق ذاتي لسطح الخريطة — قائمة من الفحوص المنطقية checks إضافةً إلى summary (أعداد الأنماط الأساسية، الطبقات العلوية، الفئات، الأيقونات). مفيد للتشخيص.
الطبقات العلوية
تقدِّم الطبقات العلوية العامة عناصر الخريطة المخزَّنة على هيئة GeoJSON، أو بلاطات متجهية، أو نقطية. تشمل أنواع الطبقات المعروفة traffic، transit، biking، terrain، incidents، speed_cameras، traffic_cameras، traffic_lights، weather، وlogistics_zones.
GET /map/overlays/{layerType}
FeatureCollection بصيغة GeoJSON لطبقة علوية واحدة. يقبل bbox، limit، zoom.
{
"type": "FeatureCollection",
"features": [
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [35.91, 31.95] },
"properties": { "id": 12, "name": "Amman central speed camera", "layerType": "speed_cameras", "color": "#B91C1C" } }
],
"metadata": { "layerType": "speed_cameras", "name": "Speed cameras", "hasData": true }
}
biking (شبكة الدراجات) و**transit** تُعيدان بيانات شبكة حيّة مرتبطة بالمنطقة المعروضة (مُخزَّنة مؤقتًا لكل منطقة). في biking يحمل كل خط network (protected | shared | trail) وsurface وlit وoneway وcolor. في transit تحمل المعالم kind (line | stop) وmode (bus | metro | tram | rail) وcolor و(للخطوط) routeRef وlineName وnetwork. مرِّر bbox لتحديد نطاق الطلب.الوصول المُبلَّط للطبقات العلوية
| نقطة النهاية | تُعيد |
|---|---|
GET /map/overlays/{layerType}/tile-cover | روابط البلاطات التي تغطي نطاق bbox (bbox، zoom، maxTiles). |
GET /map/overlays/{layerType}/tiles/{z}/{x}/{y} | بلاطة واحدة على هيئة GeoJSON. |
GET /map/overlays/{layerType}/vector/{z}/{x}/{y} | بلاطة واحدة على هيئة بلاطة متجهية ثنائية (application/x-protobuf، الطبقة navvo). |
GET /map/logistics-zones.geojson
مضلَّعات مناطق اللوجستيات / اتفاقية مستوى الخدمة (SLA) على هيئة GeoJSON. يحمل كل عنصر zoneType، وriskScore، وcostMultiplier، وroutingPolicy — وهي المناطق نفسها التي تظهر في نتائج /routing/plan.
الطقس
طبقات الطقس العلوية هي مضلَّعات مخزَّنة إضافةً إلى بحث نقطي حي. type ∈ precipitation, temperature, clouds, storms, alerts؛ وtime ∈ -1h, now, +1h, +3h.
| نقطة النهاية | تُعيد |
|---|---|
GET /map/weather/geojson | مضلَّعات الطقس على هيئة GeoJSON (المرشِّحات: type، time، bbox، limit، zoom). |
GET /map/weather/geojson/tiles/{z}/{x}/{y} | الطقس بصيغة GeoJSON لبلاطة واحدة. |
GET /map/weather/vector/{z}/{x}/{y} | الطقس على هيئة MVT ثنائية (الطبقة navvo_weather). |
GET /map/weather/tiles/{z}/{x}/{y} | بلاطة طقس نقطية مُصيَّرة بصيغة SVG (image/svg+xml). |
GET /map/weather/tile-cover | روابط البلاطات التي تغطي نطاق bbox. |
GET /map/weather-risk | معاينة مجمَّعة لمخاطر الطقس (score، severity، warnings). |
GET /map/weather/point
الطقس النقطي الحالي (من خدمة الطقس الخاصة بـ Navvo).
lon مقبول أيضًا).metric (افتراضي) أو imperial.{
"ok": true, "lat": 31.95, "lon": 35.91, "city": "Amman",
"temperature": 28, "unit": "C", "feelsLike": 30, "humidity": 35,
"windSpeed": 12, "windUnit": "km/h", "visibility": 16, "visibilityUnit": "km",
"condition": "Clear sky",
"aqi": 40, "aqiCategory": "Good", "pm25": 9, "pm10": 16, "dust": 1,
"source": "Navvo weather point service"
}
تحمل الاستجابة أيضاً جودة هواء حيّة: aqi (مؤشر AQI الأمريكي)، وaqiCategory (Good…Hazardous)، وpm25/pm10 (ميكروغرام/م³)، وdust (ميكروغرام/م³، تركيز الغبار الصحراوي). وتكون null إذا تعذّر مصدر جودة الهواء مؤقتاً. تُعيد نقطة النهاية هذه 400 عند إحداثيات غير صالحة؛ بينما تُعيد إخفاقات المصدر الأعلى 200 مع ok:false.
GET /map/weather/forecast
توقّعات الطقس بالساعة لنقطة — الساعات N القادمة (افتراضي 24، أقصى 72).
lon أيضاً).metric (افتراضي) أو imperial.{
"ok": true, "lat": 31.95, "lon": 35.91, "city": "Amman",
"units": "metric", "unit": "C", "windUnit": "km/h", "hours": 6,
"forecast": [
{ "time": "2026-06-27T19:00:00.000Z", "temperature": 22.8, "condition": "Clear", "precipitationMm": 0, "windSpeed": 9, "humidity": 38 },
{ "time": "2026-06-27T20:00:00.000Z", "temperature": 22, "condition": "Clear", "precipitationMm": 0, "windSpeed": 8, "humidity": 41 }
]
}
| الحقل | النوع | ملاحظات |
|---|---|---|
forecast[].time | string | ساعة ISO |
forecast[].temperature | number | بوحدة unit (C/F) |
forecast[].condition | string | تسمية بشرية |
forecast[].precipitationMm | number | null | المطر في الساعة |
forecast[].windSpeed | number | بوحدة windUnit |
400 عند إحداثيات غير صالحة؛ وإخفاقات المصدر الأعلى تُعيد 200 مع ok:false وforecast فارغة.
GET /map/weather/alerts
تحذيرات طقس مُشتقّة لنقطة — تفحص الساعات N القادمة من التوقّعات وتعيد تنبيهات عند تجاوز العتبات: حرارة (≥37°م، مهمّة خصوصاً للمنطقة)، برد/تجمّد (≤1°م)، مطر غزير (≥4مم/س)، ورياح قوية (≥40كم/س). يحمل كل تنبيه severity (moderate/high/severe) وقيمة الذروة والساعة التي يقع فيها.
?lat=&lng=&hours= (افتراضي 24، أقصى 72).
{
"ok": true, "provider": "navvo-weather", "lat": 24.63, "lon": 46.72, "city": "…",
"checkedHours": 48, "count": 1,
"alerts": [
{ "type": "heat", "severity": "severe", "message": "High temperatures up to 43°C", "valueC": 43, "at": "2026-06-28T12:00:00.000Z" }
]
}
count: 0 (وalerts فارغة) يعني عدم تجاوز أي عتبة في النافذة. و400 عند إحداثيات غير صالحة.
GET /map/weather/cities
دبابيس طقس للمدن والبلدات داخل المنطقة المعروضة — تُستخدم لعرض الأحوال الحالية على الخريطة عند تكبير مستوى المدينة. تُعيد FeatureCollection من النقاط؛ ولا تكون ذات معنى إلا عند zoom ≥ 7 (المستويات الأقل تُعيد مجموعة فارغة بسرعة)، والعدد محدود ليبقى المشهد مقروءًا.
west,south,east,north.< 7 يُعيد فارغًا).metric (افتراضي) أو imperial.{
"type": "FeatureCollection",
"features": [
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [35.93, 31.95] },
"properties": { "name": "Amman", "temperature": 30, "unit": "C", "condition": "Clear",
"code": 0, "icon": "clear", "color": "#386BFF" } }
],
"metadata": { "layerType": "weather_cities", "name": "Weather", "hasData": true }
}
الحقل icon عائلة محايدة — إحدى clear أو cloud أو rain أو storm أو snow أو fog — وcode مكافئها الرقمي (0–5).
GET /map/airquality/cities
دبابيس جودة الهواء (مؤشر AQI الأمريكي + الغبار) للمدن والبلدات داخل المنطقة المعروضة — وهي نظير /map/weather/cities لعرض جودة الهواء على الخريطة عند تكبير مستوى المدينة. تُعيد FeatureCollection من النقاط؛ ولا تكون ذات معنى إلا عند zoom ≥ 7، والعدد محدود (الحد الأقصى 20). القيم مخزَّنة مؤقتًا ~15 دقيقة لكل خلية.
west,south,east,north.< 7 يُعيد فارغًا).{
"type": "FeatureCollection",
"features": [
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [35.92, 31.95] },
"properties": { "name": "Amman", "aqi": 40, "aqiCategory": "Good",
"pm25": 10, "pm10": 16, "dust": 1 } }
],
"metadata": { "layerType": "air_quality_cities", "name": "Air quality", "hasData": true }
}
aqi هو مؤشر جودة الهواء الأمريكي؛ وaqiCategory فئته (Good، Moderate، Unhealthy (sensitive)، Unhealthy، Very unhealthy، Hazardous). أما pm25/pm10/dust فبوحدة µg/m³. والقيم نفسها لكل نقطة تغذّي حقلَي aqi/dust في /map/weather/point.
مخاطر المسار والإنفاذ
قيِّم مسارًا مقابل الأحوال الحية عبر خمس طبقات — حركة المرور، الطقس، الحوادث، مناطق اللوجستيات، وأصول الإنفاذ (الكاميرات/الإشارات) — باستخدام تقاطع الهندسة.
POST /map/route-risk
النطاق: routing.
جسم الطلب
LineString/Feature/FeatureCollection بصيغة GeoJSON، أو مصفوفة خام من أزواج [lng, lat]، أو أي كائن يحوي حقل coordinates. (يُقبَل route كاسم بديل.)preview.-1h، أو now (افتراضي)، أو +1h، أو +3h — أي لقطة طقس يُقيَّم مقابلها.{
"routeId": "trip-42",
"timeOffset": "+1h",
"geometry": { "type": "LineString", "coordinates": [[35.91,31.95],[35.93,31.97],[35.95,31.99]] }
}
الاستجابة (200)
{
"ok": true,
"routeId": "trip-42",
"hasRouteGeometry": true,
"timeOffset": "+1h",
"scores": { "overall": 24, "traffic": 40, "weather": 10, "incidents": 0, "logistics": 32, "cameras": 16 },
"severity": "low",
"stack": [
{ "key": "traffic", "label": "Traffic speed", "score": 40, "severity": "medium", "detail": "Moderate congestion exposure on this route.", "count": 3 }
],
"warnings": [
{ "type": "traffic", "severity": "high", "title": "Heavy traffic segment", "detail": "18 km/h average · 42 samples", "location": { "lng": 35.93, "lat": 31.97 } },
{ "type": "logistics", "severity": "medium", "title": "Amman core congestion SLA", "location": { "lng": 35.91, "lat": 31.97 } }
]
}
| الحقل | الوصف |
|---|---|
scores | 0–100 لكل طبقة إضافةً إلى overall مرجَّح. |
severity | low / medium / high مشتقة من الدرجة الإجمالية. |
stack[] | تفصيل لكل طبقة (score، severity، detail، count، source). |
warnings[] | مخاطر محددة على امتداد المسار، لكل منها مرساة موقع location على هيئة { lng, lat }. |
GET /map/route-risk (النطاق tiles) يأخذ المسار عبر سلسلة استعلام coords من أزواج lng,lat مفصولة بـ ; — مفيد للمعاينات السريعة دون جسم طلب.POST /map/route-enforcement
النطاق: routing. تُعيد فقط نقاط تفتيش الإنفاذ (كاميرات السرعة، كاميرات حركة المرور، إشارات المرور) على امتداد المسار. جسم الطلب نفسه الخاص بمخاطر المسار.
{
"ok": true,
"routeId": "trip-42",
"count": 2,
"items": [
{ "id": "speed_camera-0", "type": "speed_camera", "title": "Amman central speed camera", "detail": "Speed camera on or near route · 60 km/h", "confidence": 0.84, "location": { "lng": 35.92, "lat": 31.96 } }
]
}