توفّر 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) لـ "خرائط 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);
أحداث "دائرة Google"
بشكل افتراضي، لا تكون الدوائر قابلة للنقر. يمكنك تفعيل ميزة
النقر وإيقافها من خلال الاتصال بالرقم 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 بكسل. ملاحظة: لتحديد عرض الخطوط المرجعية، افتح صورة النقطة المرقّطة عند magnification 100% في محرِّر صور، وارسم العرض المطلوب للخط المرجعي بالنسبة إلى الصورة.
إذا كنت تستخدِم
BitmapDescriptorFactory.fromResource()
لإنشاء الصورة النقطية، تأكَّد من استخدام مورد مستقل عن الكثافة
(nodpi).
الأجزاء الجيوديسية
لا ينطبق الإعداد الجيوديسي إلا على الخطوط المتعددة والمضلّعات. ولا ينطبق على الدوائر لأنّها غير محدّدة كمجموعة من الشرائح.
يحدّد الإعداد الجيوديزى كيفية رسم أجزاء الخط بين القمم المتعاقبة للخط المتعدّد/الشكل المتعدّد الأضلاع. الأجزاء الجيوديسية هي الأجزاء التي يليه المسار الأقصر على سطح الأرض (الكرة الأرضية)، وغالبًا ما تظهر كخطوط منحنية على خريطة باستخدام إسقاط Mercator. يتم رسم الأجزاء غير الجيوديسية كخطوط مستقيمة على الخريطة.
اضبط هذه السمة على عنصر خيار الشكل من خلال استدعاء
*Options.geodesic()
حيث يشير true
إلى أنّه يجب رسم الأجزاء على شكل
خطوط هندسية وfalse
يشير إلى أنّه يجب رسم الأجزاء على شكل خطوط مستقيمة.
في حال عدم تحديد ذلك، تكون القيمة التلقائية هي المقاطع غير الجيوفضائية (false
).
بعد إضافة الشكل إلى الخريطة، يمكن الوصول إلى الإعدادات الهندسية
من خلال استدعاء isGeodesic()
ويمكن تغييرها من خلال استدعاء setGeodesic()
.
فهرس Z
يحدِّد "فهرس z" ترتيب تجميع هذا الشكل، مقارنةً بالعناصر الأخرى التي يتمّ تطبيقها على سطح الخريطة (الأشكال الأخرى والعناصر التي يتمّ تطبيقها على سطح الأرض والعناصر التي يتمّ تطبيقها على سطح المربّعات) على الخريطة. يتم رسم تراكب بمؤشر z مرتفع فوق تراكبات ذات مؤشرات z منخفضة. يتم رسم عنصرَي تراكب بمؤشر z-index نفسه بترتيب عشوائي.
يُرجى العِلم أنّه يتم دائمًا رسم العلامات فوق العناصر المركّبة الأخرى، بغض النظر عن ملفه الشخصي z للعناصر المركّبة الأخرى.
اضبط هذه السمة على كائن خيارات الشكل من خلال استدعاء *Options.zIndex()
.
إذا لم يتم تحديده، يكون مؤشر z التلقائي هو 0
. بعد إضافة الشكل إلى
الخريطة، يمكن الوصول إلى مؤشر z من خلال
استدعاء getZIndex()
ويمكن تغييره من خلال استدعاء setZIndex()
.
مستوى الرؤية
يحدّد نطاق العرض ما إذا كان يجب رسم الشكل على الخريطة، حيث يشيرtrue
إلى أنّه يجب رسمه ويشيرfalse
إلى أنّه لا يجب رسمه. أُنشأها جون هنتر، الذي كان متخصصًا
يسمح لك بعدم عرض شكل مؤقتًا على الخريطة. لإزالة الشكل نهائيًا
من الخريطة، استخدِم remove()
مع هذا الشكل.
اضبط هذه السمة على كائن خيارات الشكل من خلال استدعاء
*Options.visible()
. إذا لم يتم تحديد إذن الوصول، يكون إذن الوصول التلقائي هو true
.
بعد إضافة الشكل إلى الخريطة، يمكن الوصول إلى مستوى الرؤية عن طريق
يتم الآن الاتصال بالرقم isVisible()
وقد يتم تغييره من خلال الاتصال بالرقم setVisible()
.
ربط البيانات بشكل
يمكنك تخزين كائن بيانات عشوائي باستخدام خط متعدد أو مضلّع أو دائرة
باستخدام طريقة setTag()
للشكل، ونسترد الكائن باستخدام getTag()
.
على سبيل المثال، استخدِم Polyline.setTag()
لتخزين ملف data
باستخدام خط متعدد الخطوط، واستخدِم Polyline.getTag()
ل retrievingملف data.
يحدد الرمز أدناه علامة عشوائية (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 الشكل.