Navvo
مرجع الواجهة البرمجية

بيانات الخريطة والمخاطر

إعداد الخريطة، أنماط الفئات، الطبقات العلوية، الطقس، وتقييم مخاطر المسار المراعي للأحوال.

بيانات الخريطة والمخاطر

كل ما يُركَّب فوق خريطة الأساس: بيان إعداد الخريطة، أنماط علامات الفئات، صور الأيقونات المركَّبة، الطبقات العلوية المتجهية/بصيغة GeoJSON، الطقس، وتقييم مخاطر المسار الذي يدمج حركة المرور والطقس والحوادث ومناطق اللوجستيات وأصول الإنفاذ.

النطاق المطلوب: tiles للإعداد والطبقات العلوية والطقس؛ و**routing** لنقاط نهاية POST الخاصة بمخاطر المسار/الإنفاذ.

الإحداثيات بصيغة GeoJSON على هيئة [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.


الطقس

طبقات الطقس العلوية هي مضلَّعات مخزَّنة إضافةً إلى بحث نقطي حي. typeprecipitation, 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).

lat
number required
خط العرض.
lng
number required
خط الطول (lon مقبول أيضًا).
units
string
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 (GoodHazardous)، وpm25/pm10 (ميكروغرام/م³)، وdust (ميكروغرام/م³، تركيز الغبار الصحراوي). وتكون null إذا تعذّر مصدر جودة الهواء مؤقتاً. تُعيد نقطة النهاية هذه 400 عند إحداثيات غير صالحة؛ بينما تُعيد إخفاقات المصدر الأعلى 200 مع ok:false.

GET /map/weather/forecast

توقّعات الطقس بالساعة لنقطة — الساعات N القادمة (افتراضي 24، أقصى 72).

lat
number required
خط العرض.
lng
number required
خط الطول (يُقبَل lon أيضاً).
hours
number
عدد الساعات المُعادة (افتراضي 24، أقصى 72).
units
string
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[].timestringساعة ISO
forecast[].temperaturenumberبوحدة unit (C/F)
forecast[].conditionstringتسمية بشرية
forecast[].precipitationMmnumber | nullالمطر في الساعة
forecast[].windSpeednumberبوحدة 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: 0alerts فارغة) يعني عدم تجاوز أي عتبة في النافذة. و400 عند إحداثيات غير صالحة.

GET /map/weather/cities

دبابيس طقس للمدن والبلدات داخل المنطقة المعروضة — تُستخدم لعرض الأحوال الحالية على الخريطة عند تكبير مستوى المدينة. تُعيد FeatureCollection من النقاط؛ ولا تكون ذات معنى إلا عند zoom ≥ 7 (المستويات الأقل تُعيد مجموعة فارغة بسرعة)، والعدد محدود ليبقى المشهد مقروءًا.

bbox
string required
حدود المنطقة west,south,east,north.
zoom
number required
مستوى التكبير الحالي (< 7 يُعيد فارغًا).
units
string
metric (افتراضي) أو imperial.
limit
number
أقصى عدد دبابيس (يتدرّج تلقائيًا مع التكبير؛ الحد الأقصى 24).
{
  "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 مكافئها الرقمي (05).

GET /map/airquality/cities

دبابيس جودة الهواء (مؤشر AQI الأمريكي + الغبار) للمدن والبلدات داخل المنطقة المعروضة — وهي نظير /map/weather/cities لعرض جودة الهواء على الخريطة عند تكبير مستوى المدينة. تُعيد FeatureCollection من النقاط؛ ولا تكون ذات معنى إلا عند zoom ≥ 7، والعدد محدود (الحد الأقصى 20). القيم مخزَّنة مؤقتًا ~15 دقيقة لكل خلية.

bbox
string required
حدود المنطقة west,south,east,north.
zoom
number required
مستوى التكبير الحالي (< 7 يُعيد فارغًا).
limit
number
أقصى عدد دبابيس (يتدرّج تلقائيًا مع التكبير؛ الحد الأقصى 20).
{
  "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.

جسم الطلب

geometry
object | array required
هندسة المسار. تقبل LineString/Feature/FeatureCollection بصيغة GeoJSON، أو مصفوفة خام من أزواج [lng, lat]، أو أي كائن يحوي حقل coordinates. (يُقبَل route كاسم بديل.)
routeId
string
يُعاد ذكره في الاستجابة. القيمة الافتراضية preview.
timeOffset
string
-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 } }
  ]
}
الحقلالوصف
scores0–100 لكل طبقة إضافةً إلى overall مرجَّح.
severitylow / 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 } }
  ]
}
Copyright © 2026