Skip to main content

نمط عرض الخريطة - ‎.render.xml

إذا كنت ترغب في تعديل نمط العرض الافتراضي، فستحتاج إلى مراجعة التعريف على GitHub. ستجد جميع أنواع الأنماط على هذا الرابط، لذا إذا كنت ستقوم بإنشاء نمط خاص بك، فيمكنك العثور على أسهل مثال.

في حال قررت إنشاء نمط عرض مخصص خاص بك، قد تحتاج إلى إنشاء خرائطك الخاصة لإضافة عرض ميزات مخصصة.

أقسام نمط الخريطة

يتكون ملف نمط الخريطة من عدة أقسام.

القسمالوصف
الرأسيتكون من name (اسم النمط)، defaultColor (لون الخريطة الافتراضي يمكن تجاوزه بواسطة السمة defaultColor) و depends (يرث جميع الخصائص من النمط الأصلي).
المعلماتتُعرّف كـ <renderingProperty> ولها attr الذي سيُستخدم في النمط كاسم معلمة، و name و description سيُعرضان للمستخدم.
السمات و الثوابتتُعرّف كـ <renderingAttribute> و <renderingConstant> تسمح بإعادة استخدام نفس كتل أنماط العرض لكائنات الخريطة المختلفة
قسم الترتيبيُعرّف ككتلة <order>. يُبحث عن كل كائن خريطة في قسم الترتيب لتحديد ما إذا كان سيُعرض كنقطة أو خط أو مضلع (objectType) وبأي order يجب عرضه. معلمات البحث (الإدخال): tag، value، zoom، point (صحيح أو خطأ)، area (نوع OSM)، cycle (نقطة البداية والنهاية متطابقتان). نتيجة البحث (الإخراج): objectType (نقطة = 1، خط = 2، مضلع = 3)، order (0-255). يُعرّف ترتيب العرض كالتالي: المضلعات، ظلال الخطوط، الخطوط، النقاط. إذا كان order متطابقًا للمضلعات، فسيتم عرض المضلعات من الأكبر إلى الأصغر. ملاحظة: يجب ألا تتداخل المضلعات جزئيًا وإلا فإن السلوك غير محدد.
قسم النصيُعرّف ككتلة <text>. يُبحث عن كل كائن خريطة معروض لتحديد ما إذا كان يجب عرض النص وكيف يجب عرضه. معلمات البحث (الإدخال): tag، value، zoom، nameTag (يتم فحص كل علامة نصية). نتيجة البحث (الإخراج): textOnPath، textMinDistance (الهامش بين النصوص المتشابهة مثل أسماء الطرق، المراجع)، textSize، textColor، textHaloRadius، textOrder، textDy، textBold، nameTag2 (اسم إضافي بين قوسين إذا كان موجودًا)، textShield (خلفية حول النص)، icon (أيقونة بدلاً من النص)، textItalic، textWrapWidth، intersectionMargin (هامش إضافي لتجنب تداخل النص).
قسم النقطةيُعرّف ككتلة <point>. يُبحث عن كل كائن خريطة نقطي معروض (مُعرّف في قسم order) في هذا القسم لتحديد كيفية عرضه. معلمات البحث (الإدخال): tag، value، zoom، e. نتيجة البحث (الإخراج): shield (درع الأيقونة)، icon، iconVisibleSize (مساحة إضافية لتجنب ازدحام الأيقونات)، iconOrder، intersectionSizeFactor.
قسم المضلعيُعرّف ككتلة <polygon>. يُبحث عن كل كائن خريطة مضلع معروض (مُعرّف في قسم order) في هذا القسم لتحديد كيفية عرضه. معلمات البحث (الإدخال): tag، value، zoom. نتيجة البحث (الإخراج): color (لون لملء المضلع)، shader (ملء المضلع بنفس الأيقونة)، color_2, color_N (لون الحد حول المضلع)، strokeWidth_2 (عرض الحد)، pathEffect_2، cap_2.
قسم الخطيُعرّف ككتلة <line>. يُبحث عن كل كائن خريطة خطي معروض (مُعرّف في قسم order) في هذا القسم لتحديد كيفية عرضه. يمكن عرض كائن خط واحد كخطوط متعددة مدمجة تصل إلى -2 طبقة أسفل و 7 طبقات أعلى. معلمات البحث (الإدخال): tag، value، zoom، nameTag (يتم فحص كل علامة نصية). نتيجة البحث (الإخراج): color, color_* (لون الحد حول المضلع)، strokeWidth, strokeWidth_* (عرض الحد)، pathEffect, pathEffect_* (تأثير المسار)، cap, cap_* (BUTT، ROUND، SQUARE)، pathIcon، pathIconStep، shadowRadius (ظل حول الخط).

محددات ميزات الخريطة

لتحديد السمات التي يجب استردادها من نمط العرض، يتم إكمال إجراء البحث التالي:

  • ابحث عن <case> الداخلي الذي يتوافق مع معلمات إدخال البحث tag/value/zoom، على سبيل المثال لـ highway=primary - سيتم العثور على <case tag="highway" value="primary">.
  • يتم تطبيق جميع الأجزاء الداخلية لـ <case> بالتسلسل العميق ويتم جمع معلمات الإخراج
  • <case><apply output="1"/><apply_if zoom="15" output="2"> <case> - سيكون الإخراج 2 في حالة zoom=15 وسيكون الإخراج 1 بخلاف ذلك.
  • يتم التحقق مما إذا كان <case> جزءًا من أي <switch>، وإذا كان كذلك، فسيتم تقييم جميع apply و apply_if لهذا التبديل أيضًا

قواعد التقييم:

  • في كل 'case' و 'apply_if' و 'switch' و 'apply'، يتم التحقق من سمات الإدخال لمطابقتها (تقييمها إلى صحيح)، وإلا يتم تخطي القسم ولا يتم جمع سمات الإخراج.
  • يتم تقييم جميع القواعد بالتسلسل ويمكن تجاوز معلمات الإخراج بواسطة القواعد التالية
  • additional=? هي سمة إدخال خاصة تتحقق من علامات إضافية للكائن
  • معلمات نمط الخريطة هي معلمات بحث إدخال بالإضافة إلى tag/value/zoom
    • مثال: <apply_if nightMode="false" streetLightingNight="false" shield="street_lamp_lit_no_shield"/>. معلمات الإدخال: nightMode، streetLightingNight؛ معلمات الإخراج - shield.

السمات (الخاصة) والثوابت

يمكن تبادل ثوابت العرض وسمات العرض ويمكن استخدامها لتبسيط نمط العرض وتجنب النسخ/اللصق للقيم أو كتل التعليمات البرمجية. في حالة كون السمة مثل color قيمة واحدة، فمن المفضل استخدام ثابت العرض لأنه يسرع بشكل كبير من أداء نمط العرض.

يمكن استخدام ثوابت العرض بقيمة واحدة فقط: <renderingConstant name="motorwayShadowRadius" value="1.6"/> ولاحقًا في محددات الميزات كـ <apply_if shadowRadius="$motorwayShadowRadius"/>.

يمكن أن تحتوي سمات العرض على بنية مضمنة مع محددات إضافية وإخراج إحدى السمات التالية (attrColorValue، attrBoolValue، attrFloatValue، attrIntValue، attrStringValue). مثال:

    <renderingAttribute name="motorroadShadowColor">
<case attrColorValue="#5f5fff"/>
</renderingAttribute>
.....
<case showAccess="true" additional="motorroad=yes" attrColorValue="$motorroadShadowColor"/>

السمات الخاصة

السمات الخاصة هي <renderingAttribute > التي لا تستخدمها المحددات ولكن يستخدمها الكود مباشرة للاستعلام عن ميزة معينة يتم رسمها في التطبيق مثل مسار التنقل، المسطرة، مسار GPX، إلخ.

السمة الخاصةالوصف
measureDistanceLineعرض الخط لميزة تخطيط المسار
markerGuideline, markerPlanRoutelineعرض الخطوط إلى العلامات
routeعرض مسار تنقل
gpxعرض مسار GPX
publicTransportLineعرض مسار تنقل النقل العام
walkingRouteLineعرض تنقل النقل العام: مسار المشاة بين المحطات
rulerLineFont, rulerLine, rulerCircleAlt, rulerCircleكيفية عرض أداة قياس نصف القطر وقياس المسافة بالنقر
defaultColorاللون الافتراضي لملء الخريطة (يغير وضع الليل / النهار)
shadowRenderingداخليًا كيفية عرض الظل باستخدام Skia
routeInfo_*مثال: routeInfo_surface، routeInfo_roadClass تنتج فئات الطرق التي سيتم عرضها في أسطورة المسار.
polygonMinSizeToDisplayداخليًا كيفية عرض الخطوط الصغيرة والمضلعات الصغيرة
roadDensityZoomTileداخليًا كيفية عرض الخطوط الصغيرة والمضلعات الصغيرة
roadsDensityLimitPerTileداخليًا كيفية عرض الخطوط الصغيرة والمضلعات الصغيرة
defaultSymbolPathSpacingداخليًا كيفية عرض الخطوط الصغيرة والمضلعات الصغيرة
defaultBlockPathSpacingداخليًا كيفية عرض الخطوط الصغيرة والمضلعات الصغيرة
globalPathPaddingداخليًا كيفية عرض الخطوط الصغيرة والمضلعات الصغيرة
debugTextDisplayBBoxسمات لتصحيح أخطاء عرض النص وتحديد المواقع
debugTextDisplayShieldBBoxسمات لتصحيح أخطاء عرض النص وتحديد المواقع
debugTextDoNotFindIntersectionsسمات لتصحيح أخطاء عرض النص وتحديد المواقع
debugTextDoNotFindIntersectionsSameNameسمات لتصحيح أخطاء عرض النص وتحديد المواقع
debugTextDisplayShortRoadNamesسمات لتصحيح أخطاء عرض النص وتحديد المواقع

معلمات نمط الخريطة

تسمح معلمات نمط الخريطة بدمج أنماط عرض متعددة ضمن تعريف ملف واحد، أي لا توجد حاجة لامتلاك ملف "my_custom_style_night_mode.render.xml" منفصل، فمن الممكن تعريف معلمة مثل night_mode (ممكنة افتراضيًا) وتخصيص قواعد معينة (مثل الألوان) باستخدام هذه المعلمة. لاحقًا في واجهة المستخدم، من الممكن تبديل هذه المعلمة بسهولة والحصول على نمط خريطة مختلف في OsmAnd.

هنا تعريف لمعلمة baseAppMode. possibleValues هي القيم التي ستعرض في واجهة مستخدم OsmAnd، وتساعد category في تحديد فئة واجهة المستخدم التي تنتمي إليها هذه الخاصية.

<renderingProperty attr="baseAppMode" name="Default Rendering mode" description="Map optimization for respective User Profile based on base (parent) profile"
type="string" possibleValues="default, car, bicycle, pedestrian, public_transport, boat, ski"/>

لاحقًا في نمط التحديد، يمكنك تحديد متى يمكن تطبيق هذا المحدد، أي لوضع التطبيق الذي يحدده المستخدم

<renderingAttribute name="roadsDensityLimitPerTile">
<!-- Number of roads to display per tile -->
<case moreDetailed="true" attrIntValue="55"/>
<case baseAppMode="pedestrian" attrIntValue="40"/>
<case baseAppMode="bicycle" attrIntValue="40"/>
<case attrIntValue="60"/>
</renderingAttribute>

لذا، إذا اختار المستخدم moreDetailed=true، فستكون قيمة الإخراج للكثافة 55، وإذا كان baseAppMode=pedestrian (معلمة أخرى)، فستكون 40، وإلا فستكون 60.