- u_turn_costs: 60 (was infinite -> U-turns forbidden -> huge detours) - distance_influence 70 -> 20, de-prioritise service/living_street/track - restore safe ignored_highways (was "" -> footways imported, bad snapping) - profiles_ch -> profiles_lm (edge-based CH too heavy with turn_costs) - server port 8989 -> 8080 to match compose mapping, healthcheck and API - add normalize-oneway + check-bidirectional tooling
77 lines
4.3 KiB
YAML
77 lines
4.3 KiB
YAML
# --------------------------------------------------------------------------
|
|
# GraphHopper v11 — إعدادات محرك التوجيه
|
|
#
|
|
# ملاحظة جوهرية عن الاتجاهات (oneway):
|
|
# الاتجاه المسموح لكل حافة (edge) يُحسب مرة واحدة أثناء الاستيراد من وسوم OSM
|
|
# (oneway / oneway:motorcar / junction=roundabout ...). لا يمكن لأي custom_model
|
|
# هنا أن يفتح اتجاهاً مغلقاً في البيانات. لذلك أي طريق رئيسي ثنائي الاتجاه يظهر
|
|
# كأحادي الاتجاه = مشكلة بيانات، وتُعالج قبل البناء عبر:
|
|
# infrastructure/scripts/normalize-oneway.sh
|
|
# أما الالتفافات الطويلة "للعودة من نفس الطريق" فهي مشكلة إعدادات، وتُعالج هنا
|
|
# بواسطة turn_costs.u_turn_costs (كانت لانهائية = ممنوع الالتفاف نهائياً).
|
|
# --------------------------------------------------------------------------
|
|
graphhopper:
|
|
datareader.file: /data/master_map.osm.pbf
|
|
graph.location: /data/graph-cache
|
|
|
|
# كانت "" أي: لا تتجاهل شيئاً — فتُستورد الأرصفة والمسارات كحافات ويقفز عليها
|
|
# الـ snapping فيخرج مسار غريب بجانب الشارع. نعيد القيمة الافتراضية الآمنة.
|
|
import.osm.ignored_highways: "footway,cycleway,path,pedestrian,steps"
|
|
|
|
# قائمة واحدة بلا مسافات — GraphHopper يفصل على الفاصلة فقط
|
|
graph.encoded_values: road_class,road_environment,max_speed,road_access,surface,roundabout,lanes
|
|
|
|
profiles:
|
|
- name: car
|
|
# قيود الدوران الحقيقية من OSM (no_left_turn ...) مع تكلفة محدودة
|
|
# للالتفاف 180°. بدون u_turn_costs تكون التكلفة لانهائية، فيرفض المحرك
|
|
# أي عودة على نفس الطريق ويولّد التفافات ضخمة.
|
|
turn_costs:
|
|
vehicle_types: [motorcar, motor_vehicle]
|
|
u_turn_costs: 60 # ثانية — يسمح بالالتفاف عند فتحات الجزيرة الوسطية دون تفضيله
|
|
custom_model:
|
|
# 70 ث/كم كانت تدفع المحرك لاختيار الأقصر جغرافياً (حواري وطرق خدمة)
|
|
# على حساب الشارع الرئيسي. 20 توازن بين الزمن والمسافة.
|
|
distance_influence: 20
|
|
speed:
|
|
# القاعدة العامة أولاً ثم التخصيص؛ limit_to يأخذ الأدنى دائماً.
|
|
# (قاعدة MOTORWAY/TRUNK القديمة بـ 60 كانت بلا أثر لأن العام 60 أصلاً)
|
|
- if: "true"
|
|
limit_to: 60
|
|
- if: "road_class == PRIMARY"
|
|
limit_to: 45
|
|
- if: "road_class == SECONDARY"
|
|
limit_to: 28
|
|
- if: "road_class == TERTIARY"
|
|
limit_to: 20
|
|
- if: "road_class == RESIDENTIAL || road_class == UNCLASSIFIED"
|
|
limit_to: 14
|
|
- if: "road_class == LIVING_STREET || road_class == SERVICE"
|
|
limit_to: 14
|
|
priority:
|
|
# تفضيل الشرايين الرئيسية بدل قصّ الطريق عبر الأحياء
|
|
- if: "road_class == LIVING_STREET"
|
|
multiply_by: 0.5
|
|
- if: "road_class == SERVICE"
|
|
multiply_by: 0.6
|
|
- if: "road_class == TRACK"
|
|
multiply_by: 0.3
|
|
|
|
# CH مُعطّل: مع turn_costs يصبح البناء edge-based ويستهلك ذاكرة كبيرة على
|
|
# ملف مدمج (الأردن+سوريا+مصر)، كما أن الـ API يرسل ch.disable في كل طلب
|
|
# يحتوي custom_model أو alternative_route أصلاً. LM يعطي السرعة المطلوبة.
|
|
profiles_ch: []
|
|
profiles_lm:
|
|
- profile: car
|
|
|
|
routing.non_ch.max_visited_nodes: 2000000
|
|
|
|
server:
|
|
application_connectors:
|
|
- type: http
|
|
# 8080 داخل الحاوية: docker-compose يعرّض 8989:8080، والـ healthcheck
|
|
# و GRAPH_HOPPER_URL في الـ API يستهدفان 8080. القيمة القديمة (8989)
|
|
# كانت تخالف الثلاثة.
|
|
port: 8080
|
|
bind_host: 0.0.0.0
|