الأشكال

اختيار النظام الأساسي: Android iOS JavaScript

خريطة بخط متعدد الخط أحمر اللون

توفر واجهة برمجة تطبيقات خرائط Google لأجهزة Android بعض الطرق البسيطة لإضافة أشكال إلى خرائطك لتخصيصها لتطبيقك.

  • Polyline عبارة عن سلسلة من أجزاء الخطوط المتصلة التي يمكنها تشكيل أي شكل تريده والتي يمكن استخدامها لوضع علامات على المسارات والمسارات على الخريطة.
  • Polygon هو شكل مغلق يمكن استخدامه لوضع علامة على مناطق على الخريطة.
  • إنّ العلامة Circle هي إسقاط دقيق جغرافيًا لدائرة على سطح الأرض مرسومة على الخريطة.

بالنسبة إلى جميع هذه الأشكال، يمكنك تخصيص مظهرها من خلال تغيير عدد من الخصائص.

عيّنات تعليمات برمجية

يشتمل البرنامج التعليمي حول إضافة المضلّعات والخطوط المتعددة لتمثيل المناطق والمسارات على جميع التعليمات البرمجية لتطبيق Android بسيط.

بالإضافة إلى ذلك، يتضمن مستودع ApiDemos على GitHub نماذج توضح استخدام الأشكال وميزاتها:

الخطوط المتعددة

تحدد الفئة Polyline مجموعة من المقاطع الخطية المتصلة على الخريطة. يتكوّن عنصر Polyline من مجموعة من المواقع الجغرافية على LatLng، وينشئ سلسلة من القطع الخطية التي تربط تلك المواقع الجغرافية في تسلسل مرتّب.

يقدم هذا الفيديو أفكارًا حول كيفية مساعدة المستخدمين في الوصول إلى ما يذهبون إليه، باستخدام الخطوط المتعددة لرسم مسار على الخريطة.

لإنشاء خط متعدد، أنشئ أولاً كائن PolylineOptions وأضِف نقاطًا إليه. تمثّل النقاط نقطة على سطح الأرض، ويتم التعبير عنها كجسم LatLng. يتم رسم المقاطع الخطية بين النقاط حسب الترتيب الذي تضيفها بها إلى الكائن PolylineOptions.

لإضافة نقاط إلى عنصر PolylineOptions، يمكنك طلب PolylineOptions.add(). لاحظ أن هذه الطريقة تستخدم عددًا متغيرًا من المعلمات حتى تتمكّن من إضافة نقاط متعددة في الوقت نفسه (يمكنك أيضًا استدعاء الدالة PolylineOptions.addAll(Iterable<LatLng>) إذا كانت النقاط موجودة في قائمة).

يمكنك بعد ذلك إضافة الخط المتعدد إلى الخريطة من خلال طلب الرقم GoogleMap.addPolyline(PolylineOptions). تعرِض الطريقة كائن Polyline يمكنك باستخدامه تغيير الخط المتعدد في وقت لاحق.

يوضح مقتطف الرمز التالي كيفية إضافة مستطيل إلى خريطة:

Kotlin



// Instantiates a new Polyline object and adds points to define a rectangle
val polylineOptions = PolylineOptions()
    .add(LatLng(37.35, -122.0))
    .add(LatLng(37.45, -122.0)) // North of the previous point, but at the same longitude
    .add(LatLng(37.45, -122.2)) // Same latitude, and 30km to the west
    .add(LatLng(37.35, -122.2)) // Same longitude, and 16km to the south
    .add(LatLng(37.35, -122.0)) // Closes the polyline.

// Get back the mutable Polyline
val polyline = map.addPolyline(polylineOptions)

      

Java


// Instantiates a new Polyline object and adds points to define a rectangle
PolylineOptions polylineOptions = new PolylineOptions()
    .add(new LatLng(37.35, -122.0))
    .add(new LatLng(37.45, -122.0))  // North of the previous point, but at the same longitude
    .add(new LatLng(37.45, -122.2))  // Same latitude, and 30km to the west
    .add(new LatLng(37.35, -122.2))  // Same longitude, and 16km to the south
    .add(new LatLng(37.35, -122.0)); // Closes the polyline.

// Get back the mutable Polyline
Polyline polyline = map.addPolyline(polylineOptions);

      

يظهر المستطيل على الخريطة كما هو موضح أدناه:

خريطة بها خطوط متعدّدة مستطيلة

لتغيير شكل الخط المتعدد بعد إضافته، يمكنك استدعاء Polyline.setPoints() وتقديم قائمة جديدة بالنقاط للخط المتعدد.

ويمكنك تخصيص مظهر الخط المتعدد قبل إضافته إلى الخريطة وبعد إضافته إلى الخريطة. للحصول على مزيد من التفاصيل، يُرجى الاطّلاع على القسم المتعلّق بتخصيص أشكال الظهور أدناه.

تخصيص الخطوط المتعددة

هناك عدة طرق لتخصيص مظهر الخطوط المتعددة:

  • تضبط الخطوط المتعددة الألوان المقاطع المتعدّدة الألوان على ألوان مختلفة.
  • تلون الخطوط المتعددة المتدرجة خطًا متعددًا باستخدام تدرج لونين.
  • تحدد الخطوط المتعددة المختومة خطًا متعددًا باستخدام الصور النقطية المتكررة.

لاستخدام تخصيصات Polyline، يجب استخدام 18.1.0 أو إصدار أحدث من حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لنظام التشغيل Android واستخدام أحدث إصدار من حزمة تطوير البرامج (SDK) لـ "خرائط Google" لنظام التشغيل Android.

إنشاء خطوط متعدّدة الألوان

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

يمكنك استخدام الامتدادات لتلوين أجزاء الخط المتعدد بشكل فردي، عن طريق إنشاء كائنات StyleSpan، وإضافتها إلى PolylineOptions باستخدام الطريقتين addSpan() أو addSpans(). بشكل افتراضي، سيضبط كل عنصر في الصفيفة لون الجزء المقابل من الخط. يوضح المثال التالي ضبط ألوان المقاطع لإنشاء خط متعدد بأجزاء حمراء وخضراء:

Kotlin



val line = map.addPolyline(
    PolylineOptions()
        .add(LatLng(47.6677146, -122.3470447), LatLng(47.6442757, -122.2814693))
        .addSpan(StyleSpan(Color.RED))
        .addSpan(StyleSpan(Color.GREEN))
)

      

Java


Polyline line = map.addPolyline(new PolylineOptions()
        .add(new LatLng(47.6677146,-122.3470447), new LatLng(47.6442757,-122.2814693))
        .addSpan(new StyleSpan(Color.RED))
        .addSpan(new StyleSpan(Color.GREEN)));

      

إنشاء خطوط متعدّدة متدرجة

خريطة بخط متعدد متدرج

يمكنك تعريف تدرج عن طريق تحديد عددين صحيحين 32 بت-أخضر مائل إلى الأحمر والأخضر والأزرق (ARGB)، وذلك لتحديد لون بداية ونهاية الحد الخارجي. اضبط هذه السمة على كائن خيارات الشكل عن طريق استدعاء PolylineOptions.addSpan(). يوضح المثال التالي إنشاء خطوط متعددة متدرجة باللون الأحمر إلى الأصفر من حديقة حيوان "وودلاند بارك" إلى كيركلاند، واشنطن.

Kotlin



val line = map.addPolyline(
    PolylineOptions()
        .add(LatLng(47.6677146, -122.3470447), LatLng(47.6442757, -122.2814693))
        .addSpan(
            StyleSpan(
                StrokeStyle.gradientBuilder(
                    Color.RED,
                    Color.YELLOW
                ).build()
            )
        )
)

      

Java


Polyline line = map.addPolyline(new PolylineOptions()
        .add(new LatLng(47.6677146,-122.3470447), new LatLng(47.6442757,-122.2814693))
        .addSpan(new StyleSpan(StrokeStyle.gradientBuilder(Color.RED, Color.YELLOW).build())));

      

إنشاء خطوط متعدّدة مختومة

خريطة تحتوي على خطوط متعدّدة مختومة

يمكنك تعيين مظهر الخطوط المتعددة على زخرفة متكررة للصور النقطية. للقيام بذلك، أنشئ StampStyle لـ TextureStyle، ثم اضبط هذه السمة على كائن خيارات الشكل من خلال استدعاء PolylineOptions.addSpan() كما هو موضح هنا:

Kotlin



val stampStyle =
    TextureStyle.newBuilder(BitmapDescriptorFactory.fromResource(R.drawable.walking_dot)).build()
val span = StyleSpan(StrokeStyle.colorBuilder(Color.RED).stamp(stampStyle).build())
map.addPolyline(
    PolylineOptions()
        .add(LatLng(47.6677146, -122.3470447), LatLng(47.6442757, -122.2814693))
        .addSpan(span)
)

      

Java


StampStyle stampStyle =
        TextureStyle.newBuilder(BitmapDescriptorFactory.fromResource(R.drawable.walking_dot)).build();
StyleSpan span = new StyleSpan(StrokeStyle.colorBuilder(Color.RED).stamp(stampStyle).build());
map.addPolyline(new PolylineOptions()
        .add(new LatLng(47.6677146,-122.3470447), new LatLng(47.6442757,-122.2814693))
        .addSpan(span));

      

أحداث الخطوط المتعددة

بشكل افتراضي، لا يمكن النقر على الخطوط المتعددة. ويمكنك تفعيل إمكانية النقر أو إيقافها من خلال طلب الزحف إلى العنوان Polyline.setClickable(boolean)

يمكنك استخدام OnPolylineClickListener للاستماع إلى الأحداث عند النقر على خطوط متعدّدة قابلة للنقر. لضبط هذه المستمع على الخريطة، اتصل بـ GoogleMap.setOnPolylineClickListener(OnPolylineClickListener). عندما ينقر مستخدم على خط متعدد، ستتلقى معاودة الاتصال بـ onPolylineClick(Polyline).

مضلعات

تشبه الكائنات Polygon الكائنات Polyline من حيث أنها تتكون من سلسلة من الإحداثيات في تسلسل مرتَّب. ومع ذلك، بدلاً من أن تكون المضلعات مفتوحة، يتم تصميمها لتحديد المناطق داخل حلقة مغلقة مع ملء الجزء الداخلي.

يمكنك إضافة Polygon إلى الخريطة بالطريقة نفسها التي تضيف بها Polyline. أولاً، أنشئ كائن PolygonOptions وأضف بعض النقاط إليه. ستشكل هذه النقاط مخطط المضلّع. يمكنك بعد ذلك إضافة المضلّع إلى الخريطة عن طريق استدعاء GoogleMap.addPolygon(PolygonOptions) والذي سيعرض كائن Polygon.

يضيف مقتطف التعليمة البرمجية التالي مستطيلاً إلى الخريطة.

Kotlin



// Instantiates a new Polygon object and adds points to define a rectangle
val rectOptions = PolygonOptions()
    .add(
        LatLng(37.35, -122.0),
        LatLng(37.45, -122.0),
        LatLng(37.45, -122.2),
        LatLng(37.35, -122.2),
        LatLng(37.35, -122.0)
    )

// Get back the mutable Polygon
val polygon = map.addPolygon(rectOptions)

      

Java


// Instantiates a new Polygon object and adds points to define a rectangle
PolygonOptions polygonOptions = new PolygonOptions()
    .add(new LatLng(37.35, -122.0),
        new LatLng(37.45, -122.0),
        new LatLng(37.45, -122.2),
        new LatLng(37.35, -122.2),
        new LatLng(37.35, -122.0));

// Get back the mutable Polygon
Polygon polygon = map.addPolygon(polygonOptions);

      

لتغيير شكل المضلّع بعد إضافته، يمكنك استدعاء Polygon.setPoints() وتقديم قائمة جديدة بالنقاط لمخطّط المضلّع.

ويمكنك تخصيص مظهر المضلّع قبل إضافته إلى الخريطة وبعد إضافته إلى الخريطة. للحصول على مزيد من التفاصيل، يُرجى الاطّلاع على القسم المتعلّق بتخصيص أشكال الظهور أدناه.

الإكمال التلقائي للمضلّع

يتكون المضلع في المثال أعلاه من خمس إحداثيات، لكن لاحظ أن الإحداثيات الأولى والأخيرة هي نفس الموقع، وهو ما يحدد الحلقة. ومع ذلك، من الناحية العملية، نظرًا لأن المضلّعات تحدد المناطق المغلقة، فلن تحتاج إلى تحديد هذا الإحداثي الأخير. إذا اختلف الإحداثي الأخير عن الأول، ستعمل واجهة برمجة التطبيقات تلقائيًا على "إغلاق" المضلّع من خلال إلحاق الإحداثي الأول بنهاية تسلسل الإحداثيات.

المضلّعان أدناه متكافئان، وسيؤدي استدعاء polygon.getPoints() لكل منهما إلى عرض النقاط الأربع كلها.

Kotlin



val polygon1 = map.addPolygon(
    PolygonOptions()
        .add(
            LatLng(0.0, 0.0),
            LatLng(0.0, 5.0),
            LatLng(3.0, 5.0),
            LatLng(0.0, 0.0)
        )
        .strokeColor(Color.RED)
        .fillColor(Color.BLUE)
)
val polygon2 = map.addPolygon(
    PolygonOptions()
        .add(
            LatLng(0.0, 0.0),
            LatLng(0.0, 5.0),
            LatLng(3.0, 5.0)
        )
        .strokeColor(Color.RED)
        .fillColor(Color.BLUE)
)

      

Java


Polygon polygon1 = map.addPolygon(new PolygonOptions()
    .add(new LatLng(0, 0),
        new LatLng(0, 5),
        new LatLng(3, 5),
        new LatLng(0, 0))
    .strokeColor(Color.RED)
    .fillColor(Color.BLUE));

Polygon polygon2 = map.addPolygon(new PolygonOptions()
    .add(new LatLng(0, 0),
        new LatLng(0, 5),
        new LatLng(3, 5))
    .strokeColor(Color.RED)
    .fillColor(Color.BLUE));

      

إنشاء مضلّع مجوف

يمكن دمج مسارات متعددة في عنصر Polygon واحد لإنشاء أشكال معقّدة، مثل الحلقات المملوءة أو "الكعك المُحلّى" (حيث تظهر المناطق المضلّعة داخل المضلّع باسم "جزر"). إن الأشكال المعقدة دائمًا ما تكون عبارة عن مجموعة مسارات متعددة وبسيطة.

يجب تحديد مسارين في نفس المنطقة. يحدد أكبر المنطقتين منطقة التعبئة، وهو مضلّع بسيط بدون خيارات إضافية. وبعد ذلك، أدخِل مسارًا ثانيًا إلى الطريقة addHole(). عندما يكون المسار الثاني الأصغر ممتلئًا بالمسار الأكبر، سيظهر كما لو تمت إزالة جزء من المضلّع. إذا تقاطع الثقب مع مخطط المضلّع، سيتم عرض المضلع بدون أي تعبئة.

سينشئ المقتطف أدناه مستطيلاً واحدًا به ثقب مستطيل أصغر.

Kotlin



val hole = listOf(
    LatLng(1.0, 1.0),
    LatLng(1.0, 2.0),
    LatLng(2.0, 2.0),
    LatLng(2.0, 1.0),
    LatLng(1.0, 1.0)
)
val hollowPolygon = map.addPolygon(
    PolygonOptions()
        .add(
            LatLng(0.0, 0.0),
            LatLng(0.0, 5.0),
            LatLng(3.0, 5.0),
            LatLng(3.0, 0.0),
            LatLng(0.0, 0.0)
        )
        .addHole(hole)
        .fillColor(Color.BLUE)
)

      

Java


List<LatLng> hole = Arrays.asList(new LatLng(1, 1),
    new LatLng(1, 2),
    new LatLng(2, 2),
    new LatLng(2, 1),
    new LatLng(1, 1));
Polygon hollowPolygon = map.addPolygon(new PolygonOptions()
    .add(new LatLng(0, 0),
        new LatLng(0, 5),
        new LatLng(3, 5),
        new LatLng(3, 0),
        new LatLng(0, 0))
    .addHole(hole)
    .fillColor(Color.BLUE));

      

يظهر المضلّع المجوف على الخريطة كما هو موضح أدناه:

خريطة بها خطوط متعدّدة مستطيلة على شكل مستطيل

أحداث المضلّع

بشكل افتراضي، المضلعات غير قابلة للنقر. ويمكنك تفعيل إمكانية النقر أو إيقافها من خلال طلب الزحف إلى العنوان Polygon.setClickable(boolean)

استخدِم OnPolygonClickListener للاستماع إلى الأحداث عند النقر على مضلّع قابل للنقر لضبط هذه المستمع على الخريطة، اتصل بـ GoogleMap.setOnPolygonClickListener(OnPolygonClickListener). عندما ينقر المستخدم على مضلّع، ستتلقى معاودة الاتصال بقيمة onPolygonClick(Polygon).

دوائر

خريطة تحتوي على دائرة

بالإضافة إلى فئة Polygon العامة، تتضمّن Maps API أيضًا فئات خاصة بكائنات Circle لتبسيط بنائها.

لإنشاء دائرة، يجب تحديد السمتَين التاليتَين:

  • center في دور LatLng.
  • radius بالمتر.

يتم بعد ذلك تحديد الدائرة على أنها مجموعة من النقاط على سطح الأرض التي تبعد radius متر عن center المحدد. نظرًا لطريقة عرض إسقاط ماركاتور المستخدَم في واجهة برمجة تطبيقات الخرائط على سطح مستوٍ، ستظهر هذه الكرة كدائرة شبه مثالية على الخريطة عند موقعها بالقرب من خط الاستواء، وستبدو بشكل غير دائري على نحو متزايد (على الشاشة) مع تحرك الدائرة بعيدًا عن خط الاستواء.

لتغيير شكل الدائرة بعد إضافتها، يمكنك استدعاء Circle.setRadius() أو Circle.setCenter() وتقديم قيم جديدة.

ويمكنك تخصيص مظهر الدائرة قبل إضافتها إلى الخريطة وبعد إضافتها إلى الخريطة. للحصول على مزيد من التفاصيل، يُرجى الاطّلاع على القسم المتعلّق بتخصيص أشكال الظهور أدناه.

يضيف مقتطف الرمز التالي دائرة إلى الخريطة من خلال إنشاء كائن CircleOptions واستدعاء GoogleMap.addCircle(CircleOptions):

Kotlin



// Instantiates a new CircleOptions object and defines the center and radius
val circleOptions = CircleOptions()
    .center(LatLng(37.4, -122.1))
    .radius(1000.0) // In meters

// Get back the mutable Circle
val circle = map.addCircle(circleOptions)

      

Java


// Instantiates a new CircleOptions object and defines the center and radius
CircleOptions circleOptions = new CircleOptions()
    .center(new LatLng(37.4, -122.1))
    .radius(1000); // In meters

// Get back the mutable Circle
Circle circle = map.addCircle(circleOptions);

      

أحداث الدائرة

بشكل افتراضي، لا يمكن النقر على الدوائر. ويمكنك تفعيل إمكانية النقر أو إيقافها من خلال طلب الرمز على GoogleMap.addCircle() من خلال CircleOptions.clickable(boolean) أو من خلال الاتصال على Circle.setClickable(boolean).

يمكنك استخدام OnCircleClickListener للاستماع إلى النقر على الأحداث في دائرة قابلة للنقر. لضبط هذه المستمع على الخريطة، اتصل بـ GoogleMap.setOnCircleClickListener(OnCircleClickListener).

عندما ينقر مستخدم على إحدى الدوائر، ستتلقى onCircleClick(Circle) معاودة الاتصال، كما هو موضح في الرمز النموذجي التالي:

Kotlin



val circle = map.addCircle(
    CircleOptions()
        .center(LatLng(37.4, -122.1))
        .radius(1000.0)
        .strokeWidth(10f)
        .strokeColor(Color.GREEN)
        .fillColor(Color.argb(128, 255, 0, 0))
        .clickable(true)
)
map.setOnCircleClickListener {
    // Flip the r, g and b components of the circle's stroke color.
    val strokeColor = it.strokeColor xor 0x00ffffff
    it.strokeColor = strokeColor
}

      

Java


Circle circle = map.addCircle(new CircleOptions()
    .center(new LatLng(37.4, -122.1))
    .radius(1000)
    .strokeWidth(10)
    .strokeColor(Color.GREEN)
    .fillColor(Color.argb(128, 255, 0, 0))
    .clickable(true));

map.setOnCircleClickListener(new GoogleMap.OnCircleClickListener() {
    @Override
    public void onCircleClick(Circle circle) {
        // Flip the r, g and b components of the circle's stroke color.
        int strokeColor = circle.getStrokeColor() ^ 0x00ffffff;
        circle.setStrokeColor(strokeColor);
    }
});

      

تخصيص أشكال الظهور

يمكنك تغيير مظهر الشكل قبل إضافته إلى الخريطة (من خلال تحديد الخاصية المطلوبة في كائن الخيارات) أو بعد إضافته إلى الخريطة. يتم أيضًا الكشف عن الأحرف الكبيرة لجميع الخصائص بحيث يمكنك الوصول بسهولة إلى الحالة الحالية للشكل.

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

Kotlin



val polyline = map.addPolyline(
    PolylineOptions()
        .add(LatLng(-37.81319, 144.96298), LatLng(-31.95285, 115.85734))
        .width(25f)
        .color(Color.BLUE)
        .geodesic(true)
)

      

Java


Polyline polyline = map.addPolyline(new PolylineOptions()
    .add(new LatLng(-37.81319, 144.96298), new LatLng(-31.95285, 115.85734))
    .width(25)
    .color(Color.BLUE)
    .geodesic(true));

      

تظهر الخريطة كما هو موضح أدناه:

خريطة بخط متعدد خطوط من ملبورن إلى بيرث

ملاحظة: على الرغم من إمكانية تطبيق معظمها على أي من الأشكال الموصوفة، قد لا تكون بعض الخصائص منطقية لأشكال معينة (على سبيل المثال، لا يمكن أن يكون للخط المتعدد لون تعبئة لأنه ليس له تصميم داخلي).

لون الشطب

لون الشطب هو عدد صحيح 32 بت ألفا-أحمر-أخضر-أزرق (ARGB) يحدد تعتيم ولون حد الشكل. اضبط هذه الخاصية في كائن خيارات الشكل من خلال استدعاء *Options.strokeColor() (أو PolylineOptions.color() في حالة وجود خط متعدد). إذا لم يتم تحديده، يكون لون الشطب التلقائي هو الأسود (Color.BLACK).

بعد إضافة الشكل إلى الخريطة، يمكن الوصول إلى لون الشطب عن طريق استدعاء getStrokeColor() (أو getColor() للخط المتعدد) ويمكن تغييره من خلال استدعاء setStrokeColor() (setColor() for a polyline).

لون التعبئة

لا ينطبق لون التعبئة إلا على المضلّعات والدوائر. ولا ينطبق على الخطوط المتعددة لأنها ليس لها مساحات داخلية محددة. بالنسبة للمضلّع، لا تكون المناطق داخل ثقوبها جزءًا من الجزء الداخلي من المضلّع ولن يتم تلوينها إذا تم تعيين لون التعبئة.

لون التعبئة هو عدد صحيح 32 بت ألفا-أحمر-أخضر-أزرق (ARGB) يحدّد تعتيم ولون الجزء الداخلي من الشكل. اضبط هذه السمة على كائن خيارات الشكل عن طريق استدعاء *Options.fillColor(). إذا لم يتم تحديده، يكون لون الشطب التلقائي شفافًا (Color.TRANSPARENT).

بعد إضافة الشكل إلى الخريطة، يمكن الوصول إلى لون التعبئة من خلال استدعاء getFillColor() ويمكن تغييره عن طريق استدعاء setFillColor().

عرض الكتابة

عرض حد الخط، كعدد عشري بوحدة بكسل (px). لا يتم تغيير حجم العرض عند تكبير الخريطة (أي أن الشكل سيكون له نفس عرض الحد الخارجي على جميع مستويات التكبير أو التصغير). اضبط هذه الخاصية على كائن خيار الشكل من خلال استدعاء *Options.strokeWidth() (أو PolylineOptions.width() للخط المتعدد). إذا لم يتم تحديده، فيكون الحد الأقصى الافتراضي مع 10 بكسل.

بعد إضافة الشكل إلى الخريطة، يمكن الوصول إلى عرض الحد الخارجي عن طريق استدعاء getStrokeWidth() (أو getWidth() للخط المتعدد) ويمكن تغييره من خلال استدعاء setStrokeWidth() (setWidth() for a polyline).

نمط الكتابة

نمط الخط الافتراضي هو خط متصل للخطوط المتعددة ومخططات المضلعات والدوائر. يمكنك تحديد نمط شطب مخصّص لعناصر PatternItem، حيث يكون كل عنصر عبارة عن شرطة أو نقطة أو فجوة.

يضبط النموذج التالي نمط الخطوط المتعددة على تسلسل متكرر لنقطة، تليها فجوة بطول 20 بكسل، وشرطة طولها 30 بكسل، و فجوة أخرى تبلغ 20 بكسل.

Kotlin



val pattern = listOf(
    Dot(), Gap(20F), Dash(30F), Gap(20F)
)
polyline.pattern = pattern

      

Java


List<PatternItem> pattern = Arrays.asList(
    new Dot(), new Gap(20), new Dash(30), new Gap(20));
polyline.setPattern(pattern);

      

يتكرر النمط على طول الخط، بدءًا من عنصر النمط الأول في الرأس الأول المحدد للشكل.

أنواع المفاصل

بالنسبة إلى الخطوط المتعددة ومخططات المضلّعات، يمكنك تحديد ميل أو دائري JointType لاستبدال نوع وصلة ميتري الثابت التلقائي التلقائي.

تطبق العينة التالية نوع المفصل الدائري على خط متعدد:

Kotlin



polyline.jointType = JointType.ROUND

      

Java


polyline.setJointType(JointType.ROUND);

      

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

أحرف كبيرة

يمكنك تحديد نمط Cap لكل نهاية في خط متعدد. تكون الخيارات عبارة عن خلفية (تلقائية) أو مربّعة أو دائرية أو صورة نقطية مخصصة. اضبط النمط في PolylineOptions.startCap وPolylineOptions.endCap، أو استخدم طريقتي getter وsetter المناسبة.

يحدد المقتطف التالي غطاء دائري في بداية الخط المتعدد.

Kotlin



polyline.startCap = RoundCap()

      

Java


polyline.setStartCap(new RoundCap());

      

يحدد المقتطف التالي صورة نقطية مخصصة للحرف النهائي:

Kotlin



polyline.endCap = CustomCap(BitmapDescriptorFactory.fromResource(R.drawable.arrow), 16F)

      

Java


polyline.setEndCap(
    new CustomCap(BitmapDescriptorFactory.fromResource(R.drawable.arrow), 16));

      

عند استخدام صورة نقطية مخصصة، يجب تحديد عرض حد المرجع بالبكسل. تقيس واجهة برمجة التطبيقات الصورة النقطية وفقًا لذلك. عرض خط المرجع هو عرض ضغط المفاتيح الذي استخدمته عند تصميم صورة نقطية للأحرف الكبيرة، على البعد الأصلي للصورة. يبلغ عرض الحد الخارجي الافتراضي 10 بكسل. تلميح: لتحديد عرض شطب النص المرجعي، افتح الصورة النقطية بتكبير/تصغير بنسبة 100% في محرر الصور، ورسم العرض المطلوب لرسم الخط بالنسبة إلى الصورة.

إذا كنت تستخدم BitmapDescriptorFactory.fromResource() لإنشاء صورة نقطية، احرص على استخدام مورد مستقل الكثافة (nodpi).

الشرائح الجيوديسية

لا ينطبق الإعداد الجيوديسي إلا على الخطوط المتعددة والمضلّعات. ولا ينطبق على الدوائر لأنه لا يتم تعريفها على أنها مجموعة من الشرائح.

يحدد الإعداد الجيوديسي كيفية رسم أجزاء الخطوط بين الرؤوس المتتالية للخط المتعدد/المضلّع. القطع الجيوديسية هي تلك التي تتّبع أقصر مسار على طول سطح الأرض (كرة قدم) وغالبًا ما تظهر كخطوط منحنية على خريطة بإسقاط ماركاتور. يتم رسم القطاعات غير الجيوديسية كخطوط مستقيمة على الخريطة.

اضبط هذه السمة على كائن خيار الشكل من خلال استدعاء *Options.geodesic() حيث يشير true إلى ضرورة رسم الأجزاء كجيوديسية وfalse تشير إلى أنه يجب رسم الأجزاء كخطوط مستقيمة. في حال عدم تحديد ذلك، تكون القيمة التلقائية هي الشرائح غير الجيوديسية (false).

بعد إضافة الشكل إلى الخريطة، يمكن الوصول إلى الإعداد الجيوديسي عن طريق استدعاء isGeodesic() وقد يتم تغييره من خلال استدعاء setGeodesic().

مؤشر Z

يحدد فهرس z الترتيب المكدس لهذا الشكل، بالنسبة إلى التراكبات الأخرى (الأشكال الأخرى، وتراكبات الأرض وتراكبات الصور) على الخريطة. يتم رسم تراكب ذي مؤشر z مرتفع فوق تراكبات ذات فهارس z منخفضة. يتم رسم تراكبين لهما نفس مؤشر z بترتيب عشوائي.

تجدر الإشارة إلى أنه يتم رسم العلامات دائمًا فوق تراكبات أخرى، بغض النظر عن فهرس z للتراكبات الأخرى.

قم بتعيين هذه الخاصية على كائن خيارات الشكل عن طريق استدعاء *Options.zIndex(). في حال عدم تحديد قيمة، يكون مؤشر z التلقائي هو 0. بعد إضافة الشكل إلى الخريطة، يمكن الوصول إلى فهرس z عن طريق استدعاء getZIndex() ويمكن تغييره عن طريق استدعاء setZIndex().

مستوى العرض

تحدد مستوى الرؤية ما إذا كان يجب رسم الشكل على الخريطة أم لا، حيث تشير علامة true إلى أنه يجب رسمه وfalse يشير إلى أنه يجب عدم رسمه. يسمح لك بعدم عرض شكل على الخريطة مؤقتًا. لإزالة الشكل نهائيًا من الخريطة، استدعِ remove() على ذلك الشكل.

اضبط هذه السمة على كائن خيارات الشكل من خلال استدعاء *Options.visible(). في حال عدم تحديد ذلك، سيكون مستوى الظهور التلقائي هو true. بعد إضافة الشكل إلى الخريطة، يمكن الوصول إلى مستوى الرؤية عن طريق استدعاء isVisible() ويمكن تغييره عن طريق استدعاء setVisible().

ربط البيانات بشكل

يمكنك تخزين كائن بيانات عشوائي باستخدام خطوط متعدّدة أو مضلّع أو دائرة باستخدام طريقة setTag() للشكل، واسترداد الكائن باستخدام getTag(). على سبيل المثال، يمكنك استدعاء Polyline.setTag() لتخزين كائن بيانات باستخدام خطوط متعدّدة، وطلب Polyline.getTag() لاسترداد كائن البيانات.

يعرّف الرمز أدناه علامة عشوائية (A) للخط المتعدد المحدد:

Kotlin



val polyline = map.addPolyline(
    PolylineOptions()
        .clickable(true)
        .add(
            LatLng(-35.016, 143.321),
            LatLng(-34.747, 145.592),
            LatLng(-34.364, 147.891),
            LatLng(-33.501, 150.217),
            LatLng(-32.306, 149.248),
            LatLng(-32.491, 147.309)
        )
)
polyline.tag = "A"

      

Java


Polyline polyline = map.addPolyline((new PolylineOptions())
    .clickable(true)
    .add(new LatLng(-35.016, 143.321),
        new LatLng(-34.747, 145.592),
        new LatLng(-34.364, 147.891),
        new LatLng(-33.501, 150.217),
        new LatLng(-32.306, 149.248),
        new LatLng(-32.491, 147.309)));

polyline.setTag("A");

      

فيما يلي بعض الأمثلة على السيناريوهات التي يكون فيها من المفيد تخزين البيانات واستردادها باستخدام الأشكال:

  • قد يلبي تطبيقك أنواعًا مختلفة من الأشكال، وتريد أن تعاملها بشكل مختلف عندما ينقر المستخدم عليها.
  • قد تكون تواجه تقاطعًا مع نظام له معرّفات سجلات فريدة، حيث تمثل الأشكال سجلات محددة في هذا النظام.
  • قد تشير بيانات الشكل إلى أولوية لتحديد المؤشر z للشكل.