במאמר הזה מוסבר איך להגדיר מפה שנוספה לאפליקציה ל-Android באמצעות ה-SDK של מפות ל-Android.
סקירה כללית
אחרי שמוסיפים מפה לאפליקציה, אפשר לקבוע את ההגדרות הראשוניות וההגדרות בזמן הריצה של המפה. צריך לקבוע את ההגדרות הראשוניות בהתאם לאופן שבו הוספתם את מאגר המפה (SupportMapFragment או MapView) – באופן סטטי או דינמי. אם מאגר המפות נוסף באופן סטטי, אפשר לקבוע את הגדרות המפה הראשוניות בקובץ הפריסה.
אם הוא נוסף באופן דינמי, אפשר לקבוע את ההגדרות הראשוניות בקריאה החוזרת (callback) של OnCreate באמצעות אובייקט GoogleMapOptions.
פרטים נוספים על הוספת מאגר מפות זמינים במאמר הוספת מפה.
הגדרות המפה הראשוניות כוללות את האפשרויות הבאות:
- מיקום המצלמה, כולל: מיקום, זום, כיוון והטיה. בקטע מצלמה ותצוגה מוסבר איך למקם את המצלמה.
- סוג המפה.
- רכיבי ממשק המשתמש שיוצגו, כמו לחצני הזום והמצפן.
- התנועות שרוצים להפעיל.
- אם המצב הבסיסי מופעל.
בזמן הריצה, אפשר לקבוע את ההגדרות האלה והגדרות נוספות על ידי עדכון האובייקט GoogleMap בקריאה החוזרת (callback) של 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 של מפות ל-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. מציין אם מחזור החיים של המפה צריך להיות קשור לתצוגה של החלק או לחלק עצמו. פרטים נוספים זמינים במאמרי העזרה.
liteMode–trueכדי להפעיל את המצב הבסיסי, אחרת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);
כדי להחיל את האפשרויות האלה כשיוצרים מפה, פועלים באחת מהדרכים הבאות:
- אם אתם משתמשים ב-
SupportMapFragment, השתמשו בשיטת המפעל הסטטיתSupportMapFragment.newInstance(GoogleMapOptions options)כדי ליצור את המקטע ולהעביר את ההגדרות שלכם. - אם אתם משתמשים ב-
MapView, השתמשו ב-constructorMapView(Context, GoogleMapOptions)והעבירו את ההגדרות שלכם.
התאמת המפה לשוק המקומי
כשמוסיפים MapView או SupportMapFragment לאפליקציה, רכיבי הטקסט במפה מוצגים בשפה המתאימה לפי הגדרות המכשיר והמיקום של המשתמש. אתם יכולים להגביל את השפות שבהן האפליקציה משתמשת לקבוצת משנה של כל השפות הנתמכות, על ידי הוספת פריט resConfigs לקובץ Gradle. האפשרות הזו שימושית להסרת שפות שלא בשימוש, וגם מקטינה את הגודל הבינארי של האפליקציה. לדוגמה:
defaultConfig {
resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}
מידע נוסף על התאמה לשוק המקומי של אפליקציה ל-Android
הגדרת שכבת התנועה
כדי להציג נתוני תנועה במפה, צריך להפעיל את שכבת התנועה. כדי להפעיל ולהשבית את שכבת התנועה, קוראים ל-method setTrafficEnabled(). כדי לבדוק אם שכבת התנועה מופעלת, קוראים ל-method isTrafficEnabled(). בצילום המסך הבא מוצגת מפה שבה שכבת התנועה מופעלת.
הגדרת שכבת התחבורה הציבורית
כדי להציג נתוני תחבורה ציבורית במפה, צריך להפעיל את שכבת התחבורה הציבורית. כדי להפעיל ולהשבית את שכבת התחבורה הציבורית, קוראים ל-method setTransitEnabled(). כדי לקבוע אם שכבת התחבורה הציבורית מופעלת, קוראים ל-method isTransitEnabled(). בצילום המסך הבא מוצגת מפה שבה שכבת התחבורה הציבורית מופעלת.
הגדרת סוג המפה
כדי להגדיר את סוג המפה, מפעילים את ה-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);
בתמונה הבאה מוצגת השוואה בין סוגי המפות: רגילה, משולבת ופני השטח:
הגדרת בניינים בתלת-ממד
בערים רבות, כשמסתכלים מקרוב, אפשר לראות בניינים בתלת-ממד, כמו בתמונה הבאה של ונקובר, קנדה. כדי להשבית את הבניינים בתלת-ממד, מפעילים את הפונקציה GoogleMap.setBuildingsEnabled(false).
איך קובעים את ההגדרות של מפות פנים
ברמות זום גבוהות, המפה מציגה תוכניות קומה של חללים פנימיים כמו שדות תעופה, קניונים, חנויות קמעונאיות גדולות ותחנות של תחבורה ציבורית. תוכניות הקומה האלה, שנקראות מפות פנים, מוצגות בסוגי המפות "רגילה" ו"לוויין" (GoogleMap.MAP_TYPE_NORMAL ו-GoogleMap.MAP_TYPE_SATELLITE). הן מופעלות באופן אוטומטי כשהמשתמש מגדיל את התצוגה, ונעלמות כשהוא מקטין אותה.
הודעה על הוצאה משימוש: בגרסה עתידית, מפות פנימיות יהיו זמינות רק בסוג המפה normal. החל מהגרסה העתידית הזו, לא תהיה תמיכה במפות פנים במפות satellite, terrain או hybrid. גם במקומות שבהם אין תמיכה ב-indoor, הפונקציה 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מחזירות את האזור המרופד. - הרכיבים האינטראקטיביים מוסטים מקצה המאגר במספר הפיקסלים שצוין.
הוספת מרווחים יכולה לעזור כשמעצבים ממשקי משתמש שחופפים לחלק מהמפה. בתמונה הבאה, המפה מרופדת לאורך הקצוות העליונים והימניים. הפקדים הגלויים של המפה והטקסט המשפטי יוצגו לאורך הקצוות של האזור המרופד, שמוצג בירוק, והמפה תמשיך למלא את כל המאגר, שמוצג בכחול. בדוגמה הזו, אפשר להציב תפריט צף מעל הצד הימני של המפה בלי להסתיר את פקדי המפה.

ערכת הצבעים של המפה
במפות מסוג "רגילה" ו"פני שטח", אתם יכולים להגדיר את ערכת הצבעים של המפה באופן דינמי לכהה, לבהירה או להשתמש בהגדרת המערכת הנוכחית. לדוגמה, אפשר להכהות או להבהיר את ערכת הצבעים של המפה בהתאם לשעה ביום או לשימוש במכשיר בתוך מבנה או בחוץ.
החל מגרסה 20.1.0 של SDK של מפות ל-Android, המפה פועלת בהתאם להגדרת המערכת הנוכחית כברירת מחדל. בגרסאות קודמות, המפה מוצגת במצב בהיר כברירת מחדל. ערך הגדרת המערכת הנוכחי מבוסס על הגדרת המכשיר של 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));
אפשר להחליף את ערכת הצבעים באמצעות ה-method 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));
אפשר גם להשתמש בעיצוב מפות מבוסס-ענן כדי להגדיר את צבע הרקע. צבע הרקע שמוגדר בעיצוב המפות הוא בעדיפות גבוהה יותר מצבע הרקע המקומי. מידע נוסף זמין במאמר שינוי צבע הרקע של האפליקציה בנושא עיצוב מפות מבוסס-ענן.