أشكال

اختَر النظام الأساسي: 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 يمكنك من خلاله تغيير الخط المتعدد في وقت لاحق.

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

لغة 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);

      

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)

      

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

خريطة بخط متعدد مستطيل

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

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

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

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

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

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

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

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

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

لغة 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)));

      

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))
)

      

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

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

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

لغة 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())));

      

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()
            )
        )
)

      

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

خريطة تتضمّن خطًا متعددًا مختومًا

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

لغة 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));

      

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)
)

      

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

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

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

مضلعات

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

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

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

لغة 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);

      

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)

      

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

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

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

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

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

لغة 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));

      

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)
)

      

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

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

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

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

لغة 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));

      

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)
)

      

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

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

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

بشكل افتراضي، لا يمكن النقر على المضلعات. ويمكنك تفعيل إمكانية النقر وإيقافها بطلب الاتصال بـ 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):

لغة 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);

      

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)

      

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

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

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

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

لغة 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 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


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));

      

Kotlin


val polyline = map.addPolyline(
    PolylineOptions()
        .add(LatLng(-37.81319, 144.96298), LatLng(-31.95285, 115.85734))
        .width(25f)
        .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().

عرض الكتابة

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

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

نمط الشطب

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

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

لغة Java


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

      

Kotlin


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

      

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

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

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

يستخدم النموذج التالي نوع مفصل دائري على خط متعدد:

لغة Java


polyline.setJointType(JointType.ROUND);

      

Kotlin


polyline.jointType = JointType.ROUND

      

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

أحرف استهلالية

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

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

لغة Java


polyline.setStartCap(new RoundCap());

      

Kotlin


polyline.startCap = RoundCap()

      

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

لغة Java


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

      

Kotlin


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

      

عند استخدام صورة نقطية مخصصة، يجب تحديد عرض حد المرجع بالبكسل. تقيس واجهة برمجة التطبيقات الصورة النقطية وفقًا لذلك. عرض الحد الخارجي هو عرض الحد الخارجي الذي استخدمته عند تصميم صورة الصورة النقطية للأحرف القصوى، وذلك في البُعد الأصلي للصورة. العرض الافتراضي لخط المرجع هو 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) للخطوط المتعددة المحددة:

لغة 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");

      

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"

      

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

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