הגדרת מפה

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

בנושא הזה מוסבר איך להגדיר מפה שנוספה לאפליקציה ל-Android באמצעות ה-SDK של מפות ל-Android.

סקירה כללית

צילום מסך של מפה של קיטו שבו נקבעו הגדרות המפה. אחרי שמוסיפים מפה לאפליקציה, אפשר להגדיר את זמן הריצה הראשוני ואת סביבת זמן הריצה הגדרות המפה. יש לקבוע את ההגדרות הראשוניות בהתאם הוספתם את מאגר המפה (SupportMapFragment או MapView) באופן סטטי או דינמי. אם מאגר המפות נוסף באופן סטטי, אפשר להגדיר את הגדרות המפה הראשוניות בקובץ הפריסה. אם היא נוספה באופן דינמי, ניתן לקבוע את ההגדרות הראשוניות OnCreate התקשרות חזרה עם GoogleMapOptions לאובייקט.

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

ההגדרות הראשוניות של המפה כוללות את הדברים הבאים:

בזמן הריצה ניתן לקבוע את ההגדרות האלה והגדרות מסוימות להוספה, על ידי עדכון האובייקט GoogleMap בעמודה onMapReady קריאה חוזרת. ההגדרות הנוספות נקבעות באמצעות השיטות של מחלקה GoogleMap, כמו אלו שמגדירות את שכבת התנועה והמרווח הפנימי במפה.

דוגמה

בקוד לדוגמה שבהמשך ובצילום המסך שלמעלה, המפה נקבעו עם ההגדרות הבאות.

ההגדרות הראשוניות נקבעות בקובץ הפריסה:

  • מפעילים את פקדי שינוי המרחק מהתצוגה.
  • הפעלת הסיבוב של פקדי התנועות.
  • מגדירים את הטיית המפה ל-30.

הגדרות זמן הריצה:

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

הגדרות ראשוניות


<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    map:uiZoomControls="true"
    map:uiRotateGestures="true"
    map:cameraTilt="30" />
    

הגדרות זמן ריצה

package com.example.mapsetup;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

    }

    // Update the map configuration at runtime.
    @Override
    public void onMapReady(GoogleMap googleMap) {
        // Set the map coordinates to Kyoto Japan.
        LatLng kyoto = new LatLng(35.00116, 135.7681);
        // Set the map type to Hybrid.
        googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        // Add a marker on the map coordinates.
        googleMap.addMarker(new MarkerOptions()
                .position(kyoto)
                .title("Kyoto"));
        // Move the camera to the map coordinates and zoom in closer.
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(kyoto));
        googleMap.moveCamera(CameraUpdateFactory.zoomTo(15));
        // Display traffic.
        googleMap.setTrafficEnabled(true);

    }
}

לפני שמתחילים

לפני שמתחילים, אפשר להגדיר פרויקט ולהוסיף מפה בסיסית דרך האפשרויות הבאות:

  • יוצרים אפליקציה באמצעות התבנית של מפות Google ל-Android Studio. התבנית של מפות Google מגדיר את הפרויקט שלך באופן אוטומטי ומוסיף מפה בסיסית. משתמשים בקטע כמאגר המפה, והוא מתווסף באופן סטטי. פרטים נוספים זמינים במאמר מדריך למתחילים.

  • מגדירים את הפרויקט באופן ידני עבור ה-SDK ומוסיפים מפה בסיסית. כך אפשר להשתמש בכל תבנית של Android ולהוסיף למפות לאפליקציה קיימת.

הגדרת מפה אחרי הוספה סטטית

בקטע הזה מתואר איך להגדיר את המצב הראשוני של המפה, אם הוספתם אותה באופן סטטי לקובץ הפריסה.

ה-SDK של מפות Google ל-Android מגדיר קבוצה של מאפייני XML מותאמים אישית SupportMapFragment או MapView שאפשר להשתמש בהם כדי להגדיר את מצב המפה ישירות מקובץ הפריסה. המאפיינים הבאים מוגדרים כרגע:

  • mapType – סוג המפה להצגה. הערכים החוקיים כוללים: none, normal, hybrid, satellite וגם terrain.

  • cameraTargetLat, cameraTargetLng, cameraZoom, cameraBearing cameraTilt – המיקום הראשוני של המצלמה. פרטים נוספים זמינים במדריך בנושא מצלמה ותצוגות.

  • uiZoomControls, uiCompass – קובעים אם פקדי המרחק מהתצוגה והמצפן יוצגו. פרטים נוספים זמינים במאמר UiSettings.

  • uiZoomGestures, uiScrollGestures, uiRotateGestures, uiTiltGestures – קובעות אם תנועות ספציפיות מופעלות. צפייה UiSettings לפרטים.

  • zOrderOnTop — מציין אם פני השטח של תצוגת המפה מוצגים מעל חלון המפה, פקדי המפה וכל אובייקט בחלון. פרטים נוספים זמינים במאמר SurfaceView.setZOrderOnTop(boolean).

  • useViewLifecycle – תקף רק עם אובייקט SupportMapFragment. מציין אם מחזור החיים של המפה צריך להיות קשור לתצוגה של החלק או לחלק עצמו. כאן יש פרטים נוספים.

  • liteModetrue כדי להפעיל את מצב הטעינה המהירה. אחרת, false.

  • mapColorScheme — מציין את ערכת הצבעים של מפה רגילה ומפה של פני השטח. הערכים כוללים את light (ברירת המחדל), dark ו-follow_system, כלומר משתמשים בפונקציה הגדרת המערכת הנוכחית על סמך ההגדרה במכשיר UI_NIGHT_MODE_MASK. למידע נוסף, ראו ערכת צבעים במפה.

כדי להשתמש במאפיינים המותאמים אישית האלה בקובץ הפריסה, צריך צריך לכלול את הצהרת מרחב השמות הבאה. אפשר לבחור כל מרחב שמות, הוא לא חייב להיות map:

xmlns:map="http://schemas.android.com/apk/res-auto"

לאחר מכן תוכלו להוסיף את המאפיינים עם הקידומת map: לקובץ הפריסה.

קובץ הפריסה הבא מגדיר אובייקט SupportMapFragment עם מאפייני מפה מותאמים אישית. אפשר להחיל את אותם מאפיינים גם על אובייקט MapView.

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:map="http://schemas.android.com/apk/res-auto"
  android:name="com.google.android.gms.maps.SupportMapFragment"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  map:cameraBearing="112.5"
  map:cameraTargetLat="-33.796923"
  map:cameraTargetLng="150.922433"
  map:cameraTilt="30"
  map:cameraZoom="13"
  map:mapType="normal"
  map:mapColorScheme="dark"
  map:uiCompass="false"
  map:uiRotateGestures="true"
  map:uiScrollGestures="false"
  map:uiTiltGestures="true"
  map:uiZoomControls="false"
  map:uiZoomGestures="true"/>

הגדרת מפה אחרי הוספה שלה באופן דינמי

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

אם הוספתם SupportMapFragment או MapView באופן דינמי, תוכלו להגדיר את המצב הראשוני של המפה באובייקט GoogleMapOptions. האפשרויות הזמינות הן אותן אפשרויות שזמינות בקובץ הפריסה. אפשר ליצור GoogleMapOptions באופן הבא:

Kotlin



val options = GoogleMapOptions()

      

Java


GoogleMapOptions options = new GoogleMapOptions();

      

ואז מגדירים אותו באופן הבא:

Kotlin



options.mapType(GoogleMap.MAP_TYPE_SATELLITE)
    .compassEnabled(false)
    .rotateGesturesEnabled(false)
    .tiltGesturesEnabled(false)

      

Java


options.mapType(GoogleMap.MAP_TYPE_SATELLITE)
    .compassEnabled(false)
    .rotateGesturesEnabled(false)
    .tiltGesturesEnabled(false);

      

כדי להחיל את האפשרויות האלה כשיוצרים מפה, מבצעים את אחת מהפעולות הבאות:

התאמת המפה לשוק המקומי (לוקליזציה)

כשמוסיפים MapView או SupportMapFragment לאפליקציה, רכיבי טקסט במפה מוצגות בשפה המתאימה בהתאם למכשיר של המשתמש. ההגדרות והמיקום. כדי להגביל את השפות שבהן האפליקציה תשתמש לקבוצת משנה של כל השפות הנתמכות, מוסיפים פריט resConfigs לקובץ Gradle. פעולה זו שימושית להסרת שפות שאינן בשימוש, וגם מצמצמת את את הגודל הבינארי של האפליקציה. לדוגמה:

defaultConfig {
    resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}

מידע נוסף על התאמה לשוק המקומי של אפליקציה ל-Android

הגדרת שכבת התנועה

ניתן להציג נתוני תנועה במפה על ידי הפעלת שכבת התנועה. אפשר להפעיל ולהשבית את שכבת התנועה על ידי קריאה לשיטה setTrafficEnabled(), ולבדוק אם שכבת התנועה מופעלת כרגע על ידי קריאה לשיטה isTrafficEnabled(). בצילום המסך הבא מוצגת מפה שבה שכבת התנועה מופעלת.

הגדרת סוג המפה

כדי להגדיר את סוג המפה, צריך לבצע קריאה ל-method‏ setMapType. לדוגמה, כדי להציג מפת לוויין:

Kotlin



// Sets the map type to be "hybrid"
map.mapType = GoogleMap.MAP_TYPE_HYBRID

      

Java


// Sets the map type to be "hybrid"
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);

      

בתמונה הבאה מוצגת השוואה בין סוגי המפות: רגילה, היברידית ופני שטח:

השוואת MapType

הגדרת בניינים תלת-ממדיים

בערים רבות, כשמציגים אותן מקרוב, אפשר לראות בניינים תלת-ממדיים, כמו בתמונה של ונקובר שבקנדה שבהמשך. כדי להשבית את התצוגה של בניינים בתלת-ממד, צריך להקיש על GoogleMap.setBuildingsEnabled(false).

מפה של ונקובר, קנדה

קביעת הגדרות של מפת הפנים

ברמות זום גבוהות, מוצגים במפה תוכניות קומה של מתחמים פנימיים כגון נמלי תעופה, מרכזי קניות, חנויות קמעונאיות גדולות ותחבורה ציבורית תחנות שונות. תוכניות הקומה האלה, שנקראות מפות פנים, מוצגות עבור ו'לוויין' סוגי המפה (GoogleMap.MAP_TYPE_NORMAL וגם GoogleMap.MAP_TYPE_SATELLITE). הן מופעלות באופן אוטומטי כשהמשתמשים התצוגה מגדילה את התצוגה והם נעלמים כשהמפה מוקטנת.

הודעה על הוצאה משימוש: בגרסה עתידית, במקומות סגורים מפות יהיו זמינות רק בסוג המפה normal. מכאן בגרסה עתידית, לא תהיה תמיכה במפות פנים ב-satellite. terrain או hybrid מפות. גם אם אין תמיכה במיקום פנימי, הערך של isIndoorEnabled() ימשיך להיות זה שהוגדר דרך setIndoorEnabled(), כמו שהוא עושה עכשיו. על ידי ברירת המחדל, setIndoorEnabled היא true. נתוני הגרסה מאפשרים ידוע לך כשהתמיכה בפנים הופכת לבלתי זמינה בסוגי המפות האלה.

דוגמה למפת פנים

הנה סיכום של הפונקציונליות של מפות פנים ב-API:

  • כדי להשבית את המפות הפנימיות, אפשר להתקשר למספר GoogleMap.setIndoorEnabled(false). כברירת מחדל, מפות הפנים מופעלות. מפות הפנים מוצגות במפה אחת במיקום בו זמנית. כברירת מחדל, זו המפה הראשונה שנוספה לאפליקציה שלך. שפת תרגום להציג מפות פנים במפה אחרת, להשבית אותן במפה הראשונה, ואז להתקשר אל setIndoorEnabled(true) במפה השנייה.
  • כדי להשבית את הכלי לבחירת רמה שמוגדרת כברירת מחדל (כלי לבחירת רמה מינימלית), צריך להפעיל את הפונקציה GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false). למידע נוסף, ראו אינטראקציה עם המפה.
  • OnIndoorStateChangeListener – מגדיר מאזינים שמזהה מתי בניין מסוים נמצא בפוקוס או מצב שבו מופעל רמה בבניין. לפרטים נוספים, ראו אינטראקציה עם המפה.
  • getFocusedBuilding – אחזור המבנה שבמרכז התצוגה. כדי למצוא את הרמה הפעילה, צריך להתקשר. IndoorBuilding.getActiveLevelIndex()
  • עיצוב מפת הבסיס לא משפיע על מפות פנים.

הגדרת מרווח פנימי במפה

בסרטון הזה מוצגת דוגמה למרווח פנימי במפה.

מפת Google תוכננה למלא את כל האזור שמוגדר על ידי רכיב המארז שלה, בדרך כלל MapView או SupportMapFragment. כמה היבטים של המראה וההתנהגות של המפה מוגדרים לפי המימדים של המארז שלה:

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

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

  • תנועות המצלמה באמצעות קריאות API או לחיצות על לחצנים (למשל, מצפן, מיקום, לחצני זום) הם ביחס לאזור המרופד.
  • השיטה getCameraPosition מחזירה את מרכז האזור המרופד.
  • השיטות Projection ו-getVisibleRegion מחזירות את האזור עם המילוי.
  • הפקדים של ממשק המשתמש מיסטים מהקצה של הקונטיינר על ידי הרכיב שצוין במספר הפיקסלים.

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

שוליים של המפה

ערכת הצבעים של המפה

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

כברירת מחדל, המפה משתמשת במצב בהיר. ערך ההגדרה הנוכחי של המערכת מבוסס על ההגדרה של המכשיר עבור UI_NIGHT_MODE_MASK.

Kotlin

mapFragment = SupportMapFragment.newInstance(GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2))

Java

mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2));

אפשר להחליף את ערכת הצבעים באמצעות GoogleMap.setMapColorScheme() להגדיר את הסגנון הנוכחי למצב כהה או למצב בהיר, או לפעול לפי הגדרות.

Kotlin

googleMap.setMapColorScheme(MapColorScheme.DARK)
googleMap.setMapColorScheme(MapColorScheme.LIGHT)
googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM)

Java

googleMap.setMapColorScheme(MapColorScheme.DARK);
googleMap.setMapColorScheme(MapColorScheme.LIGHT);
googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM);

הגדרת צבע הרקע

כשעובדים במצב כהה או עוברים בין תצוגות המפה, כדאי להגדיר את צבע ברירת המחדל של הרקע במפה. אפשר לעשות זאת על ידי הגדרת המאפיין backgroundColor של אפשרויות המפה.

Kotlin

private val googleMapOptions: GoogleMapOptions =
    GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));

Java

private GoogleMapOptions options = new GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));

אפשר גם להשתמש בעיצוב מפות מבוסס-ענן כדי להגדיר את צבע הרקע. צבע הרקע שמוגדר בסגנון המפות מקבל עדיפות גבוהה יותר מצבע הרקע המקומי. מידע נוסף על עיצוב מפות מבוססות-ענן זמין במאמר שינוי צבע הרקע של האפליקציה.