הוספת מפה

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

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

סקירה כללית

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

הממשק והמחלקות העיקריות לטיפול במפות:

  • GoogleMap – נקודת הכניסה לניהול התכונות והנתונים הבסיסיים במפה. האפליקציה שלך יכולה לגשת לאובייקט GoogleMap רק לאחר שאוחזר מאובייקט SupportMapFragment או MapView.

  • SupportMapFragmentקטע לניהול מחזור החיים של אובייקט GoogleMap.

  • MapViewתצוגה לניהול מחזור החיים של אובייקט GoogleMap.

  • OnMapReadyCallback — ממשק קריאה חוזרת (callback) שמטפל באירועים ובאינטראקציות של משתמשים עבור האובייקט GoogleMap.

אובייקט GoogleMap מבצע באופן אוטומטי את הפעולות הבאות:

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

כדי להשתמש באובייקט GoogleMap באפליקציה, צריך להשתמש באובייקט SupportMapFragment או ב-MapView כאובייקט מאגר במפה, ולאחר מכן לאחזר את האובייקט GoogleMap מתוך מאגר התגים. מכיוון שהמאגרים נגזרים מקטע תצוגה או מקטע Android, הם מספקים למפה יכולות לניהול מחזור חיים וממשק משתמש בכיתות הבסיס שלהם ב-Android. המחלקה SupportMapFragment היא המאגר המודרני והנפוץ יותר לאובייקט GoogleMap.

להצגת הקוד

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

  package com.example.mapsetup;

  import androidx.appcompat.app.AppCompatActivity;

  import android.os.Bundle;

  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;

  // Implement OnMapReadyCallback.
  public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          // Set the layout file as the content view.
          setContentView(R.layout.activity_main);

          // Get a handle to the fragment and register the callback.
          SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                  .findFragmentById(R.id.map);
          mapFragment.getMapAsync(this);

      }

      // Get a handle to the GoogleMap object and display marker.
      @Override
      public void onMapReady(GoogleMap googleMap) {
          googleMap.addMarker(new MarkerOptions()
                  .position(new LatLng(0, 0))
                  .title("Marker"));
      }
  }

כדי להוסיף מפה

בסעיף הזה מתואר איך מוסיפים מפה בסיסית באמצעות קטע בצורת מאגר של מפות. עם זאת, אפשר להשתמש בתצוגה מפורטת במקום זאת. לדוגמה, ראו RawmapViewDemoActivity ב-GitHub.

השלבים הבסיסיים:

  1. כדי לקבל את ה-SDK, להשיג מפתח API, ולהוסיף את המסגרות הנדרשות, יש לפעול לפי השלבים הבאים:

    1. הגדרה ב-Google Cloud Console

    2. שימוש במפתח API

    3. הגדרת פרויקט ב-Android Studio

  2. הוספת אובייקט SupportMapFragment לפעילות שתטפל במפה. אפשר להוסיף את הקטע באופן סטטי או דינמי.

  3. מטמיעים את הממשק של OnMapReadyCallback.

  4. מגדירים את קובץ הפריסה כתצוגת תוכן.

  5. אם הוספתם את הקטע באופן סטטי, תקבלו נקודת אחיזה למקטע.

  6. רישום השיחה החוזרת.

  7. ידית עבור האובייקט GoogleMap.

הוספת אובייקט SupportMapsFragment

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

כדי להוסיף קטע באופן סטטי

בקובץ הפריסה של הפעילות לטיפול במפה:

  1. הוספת רכיב fragment.
  2. מוסיפים את הצהרת השם xmlns:map="http://schemas.android.com/apk/res-auto". כך אפשר להשתמש ב-maps מאפייני XML מותאמים אישית.
  3. ברכיב fragment, מגדירים את המאפיין android:name כ- com.google.android.gms.maps.SupportMapFragment.
  4. ברכיב fragment, מוסיפים את המאפיין android:id ומגדירים אותו ל-R.id.map מזהה המשאב (@+id/map).

לדוגמה, כאן הוא קובץ פריסה מלא שכולל רכיב fragment:

<?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"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

כדי להוסיף שבר באופן דינמי

בפעילות:

  1. יצירה של מופע SupportMapFragment.
  2. מבצעים עסקה שמוסיפה את הקטע לפעילות. למידע נוסף, ראו פירוט עסקאות.

למשל:

Java


SupportMapFragment mapFragment = SupportMapFragment.newInstance();
getSupportFragmentManager()
    .beginTransaction()
    .add(R.id.my_container, mapFragment)
    .commit();

      

Kotlin


val mapFragment = SupportMapFragment.newInstance()
supportFragmentManager
    .beginTransaction()
    .add(R.id.my_container, mapFragment)
    .commit()

      

הטמעת הממשק של OnMapReadyCallback

מעדכנים את הצהרת הפעילות באופן הבא:

Java


class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
    // ...
}

      

Kotlin


class MainActivity : AppCompatActivity(), OnMapReadyCallback {

    // ...
}

      

הגדרה של תצוגת תוכן

בשיטה onCreate של הפעילות, יש לקרוא למתודה setContentView ולהגדיר את קובץ הפריסה כתצוגת התוכן.

למשל, אם שם הפריסה של הקובץ הוא main.xml:

Java


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

      

Kotlin


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)
}

      

קבל נקודת אחיזה למקטע ורשום את הקריאה החוזרת (callback)

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

  2. קראו לשיטה getMapAsync כדי להגדיר את הקריאה החוזרת (callback) בקטע המקטע.

לדוגמה, אם הוספתם את הקטע באופן סטטי:

Java


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

      

Kotlin


val mapFragment = supportFragmentManager
    .findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)

      

ידית עבור האובייקט GoogleMap

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

בדוגמה הבאה, הקריאה החוזרת (callback) של onMapReady מאחזרת כינוי לאובייקט GoogleMap ולאחר מכן מתווספת סמן למפה:

Java


@Override
public void onMapReady(GoogleMap googleMap) {
    googleMap.addMarker(new MarkerOptions()
        .position(new LatLng(0, 0))
        .title("Marker"));
}

      

Kotlin


override fun onMapReady(googleMap: GoogleMap) {
    googleMap.addMarker(
        MarkerOptions()
            .position(LatLng(0.0, 0.0))
            .title("Marker")
    )
}

      

צילום מסך עם המפה והסמן שבמרכזו האי נול.

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

כדי לראות את הפעילות המלאה:

הצגת הפעילות המלאה


המאמרים הבאים

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