الأشكال

اختَر النظام الأساسي: 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() وتقديم قائمة جديدة بالنقاط للخط المتعدد.

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

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

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

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

لاستخدام عمليات تخصيص الخطوط المتعددة، يجب استخدام الإصدار 18.1.0 أو الإصدارات الأحدث من حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لنظام التشغيل Android واستخدام أحدث إصدار من حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط 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 الشكل من خلال استدعاء *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، أو استخدام طريقتي التجميع والضبط المناسبة.

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

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 للشكل.