الأشكال

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

خريطة عليها خطوط متعددة حمراء ثابتة

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

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

بالنسبة لكل هذه الأشكال، يمكنك تخصيص مظهرها عن طريق تغيير عدد المواقع.

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

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

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

  • CircleDemoActivity (Java / Kotlin): دائرة
  • PolygonDemoActivity (Java / Kotlin): مضلّع
  • PolylineDemoActivity (Java وKotlin): خطوط متعدّدة

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

تحدّد فئة 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 أو إصدار أحدث من "حزمة تطوير البرامج (SDK) لـ "خرائط Google" لتطبيقات Android استخدام أحدث إصدار من حزمة تطوير البرامج (SDK) للخرائط في عارض 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)));

      

إنشاء خط متعدد التدرج

خريطة تتضمّن خطًا متعدد الأضلاع متدرّجًا

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

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

لون التعبئة

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

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

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

عرض الكتابة

عرض خط الخط، كعدد عائم بالبكسل (بكسل). لا يتم تغيير العرض عند تكبير الخريطة (أي أنّ الشكل سيحتوي على عرض خطوطه نفسه في جميع مستويات التكبير). اضبط هذه السمة على عنصر الخيار للشكل من خلال استدعاء *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، أو استخدِم طُرق الحصول على القيم وضبطها المناسبة.

يحدد المقتطف التالي حدًا مستديرًا في بداية الخطوط المتعددة.

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 البكسل. ملاحظة: لتحديد عرض الخطوط المرجعية، افتح صورة البكسل عند magnification ‎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 الشكل.