התנהגות התנגשות

בחירת פלטפורמה: Android iOS JavaScript

בדף הזה מוסבר איך לשלוט בהתנהגות של סמן במקרה של התנגשות.

הגדרת אופן הפעולה של סמן במקרה של התנגשות

התנהגות ההתנגשות קובעת איך סמן מוצג אם הוא מתנגש (חופף) עם סמן אחר. האופן שבו יוצרים סמנים מתקדמים קובע את אופן הפעולה של התנגשויות:

  • סמנים מתקדמים שנוצרו באמצעות BitmapDescriptorFactory נקראים סמני מפת סיביות. הסמנים האלה מצוירים על ידי המפה הבסיסית.

  • כל הסמנים המתקדמים האחרים, כולל אלה שנוצרו באמצעות השיטה AdvancedMarkerOptions.iconView(), נקראים סמני תצוגה והם מצוירים בשכבה מעל מפת הליבה.

כדי להגדיר את אופן הפעולה במקרה של התנגשות, מגדירים את הערך של AdvancedMarkerOptions.collisionBehavior לאחד מהערכים הבאים:

  • CollisionBehavior.REQUIRED: (ברירת מחדל) הסמן תמיד מוצג, ללא קשר לחפיפה.
  • CollisionBehavior.REQUIRED_AND_HIDES_OPTIONAL הסמן תמיד יוצג, גם אם הוא חופף לסמנים או לתוויות אחרים. במקרה כזה, הסמנים או התוויות האחרים יוסתרו.OPTIONAL_AND_HIDES_LOWER_PRIORITY
  • CollisionBehavior.OPTIONAL_AND_HIDES_LOWER_PRIORITY הצגת הסמן רק אם הוא לא חופף לסמנים אחרים.

    • אם שני סמני מפת סיביות חופפים, הסמן עם הערך הגבוה יותר של zIndex מוצג. אם יש להם אותו zIndex, מוצג המבצע עם המיקום האנכי הנמוך יותר במסך. מידע נוסף על zIndex זמין במאמר Marker z-index.

    • אם שני סמני צפייה חופפים, מוצג הסמן עם הערך הגבוה יותר של zIndex. אם יש להם את אותו zIndex, הסמן האחרון שנוצר חופף לכל הסמנים שנוצרו לפניו.

    • הסמנים של תצוגות מצוירים בשכבה מעל הסמנים של מפת הביטים, ולכן הם חופפים לסמנים של מפת הביטים. לכן, כדאי להשתמש בסמנים מאותו סוג כדי לשלוט טוב יותר בהתנגשויות.

בדוגמה הבאה מוצגת הגדרת התנהגות במקרה של התנגשות לסמן:

Kotlin

// Collision behavior can only be changed in the AdvancedMarkerOptions object.
// Changes to collision behavior after a marker has been created are not possible
val collisionBehavior: Int = CollisionBehavior.REQUIRED_AND_HIDES_OPTIONAL
val advancedMarkerOptions: AdvancedMarkerOptions = AdvancedMarkerOptions()
    .position(LatLng(10.0, 10.0))
    .collisionBehavior(collisionBehavior)

val marker: Marker = map.addMarker(advancedMarkerOptions) ?: error("Failed to add marker")

      

Java

// Collision behavior can only be changed in the AdvancedMarkerOptions object.
// Changes to collision behavior after a marker has been created are not possible
int collisionBehavior = AdvancedMarkerOptions.CollisionBehavior.REQUIRED_AND_HIDES_OPTIONAL;
AdvancedMarkerOptions options = new AdvancedMarkerOptions()
        .position(new LatLng(10.0, 10.0))
        .collisionBehavior(collisionBehavior);

Marker marker = map.addMarker(options);