הוספת מפה

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

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

סקירה כללית

ה-SDK של מפות Google ל-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"));
      }
  }

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

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

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

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

    1. הגדרה במסוף Google Cloud

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

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

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

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

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

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

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

  7. מקבלים נקודת אחיזה לאובייקט GoogleMap.

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

אפשר להוסיף אובייקט 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. שומרים עסקה שמוסיפה את הקטע לפעילות. למידע נוסף, לראות עסקאות קטעים.

לדוגמה:

Kotlin



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

      

Java


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

      

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

צריך לעדכן את הצהרת הפעילות באופן הבא:

Kotlin



class MainActivity : AppCompatActivity(), OnMapReadyCallback {

    // ...
}

      

Java


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

      

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

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

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

Kotlin



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

      

Java


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

      

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

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

  2. מפעילים את ה-method getMapAsync כדי להגדיר את הקריאה החוזרת (callback) מקטע.

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

Kotlin



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

      

Java


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

      

אחזור של נקודת אחיזה לאובייקט GoogleMap

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

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

Kotlin



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

      

Java


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

      

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

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

הצגת הקוד של הפעילות המלאה:

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


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

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