בנושא הזה מוסבר איך להגדיר מפה שנוספה לאפליקציה ל-Android באמצעות ה-SDK של מפות ל-Android.
סקירה כללית
אחרי שמוסיפים מפה לאפליקציה, אפשר להגדיר את ההגדרות הראשוניות וההגדרות בסביבת זמן הריצה של המפה. יש לקבוע את ההגדרות הראשוניות בהתאם
הוספתם את מאגר המפה (SupportMapFragment
או
MapView
) באופן סטטי או דינמי. אם מאגר המפות נוסף באופן סטטי, אפשר להגדיר את הגדרות המפה הראשוניות בקובץ הפריסה.
אם היא נוספה באופן דינמי, ניתן לקבוע את ההגדרות הראשוניות
OnCreate
התקשרות חזרה עם GoogleMapOptions
לאובייקט.
לפרטים על הוספת מאגר תגים של מפות, ניתן לעיין במאמר הוספת מפה.
ההגדרות הראשוניות של המפה כוללות את הדברים הבאים:
- מיקום המצלמה, כולל: מיקום, זום, כיוון והטיה. פרטים על מיקום המצלמה זמינים בקטע מצלמה ותצוגה.
- סוג המפה.
- רכיבי ממשק המשתמש להצגה, כמו שינוי מרחק התצוגה לחצנים ומצפן.
- התנועות להפעלה.
- האם מצב Lite מופעל.
בזמן הריצה ניתן לקבוע את ההגדרות האלה והגדרות מסוימות להוספה, על ידי
עדכון האובייקט 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
. מה ההגדרה קובעת האם לקשר את מחזור החיים של המפה לתצוגת המקטע או הקטע עצמו. כאן יש פרטים נוספים.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
, צריך להשתמש ב-method הסטטי של המפעלSupportMapFragment.newInstance(GoogleMapOptions options)
כדי ליצור את ה-fragment ולהעביר את ההגדרות. - אם משתמשים ב-
MapView
, צריך constructor שלMapView(Context, GoogleMapOptions)
ולהעביר אותו בהגדרות.
התאמת המפה לשוק המקומי (לוקליזציה)
כשמוסיפים MapView
או SupportMapFragment
לאפליקציה, רכיבי טקסט
במפה מוצגות בשפה המתאימה בהתאם למכשיר של המשתמש.
ההגדרות והמיקום. כדי להגביל את השפות שבהן האפליקציה תשתמש לקבוצת משנה של כל השפות הנתמכות, מוסיפים פריט resConfigs
לקובץ Gradle. פעולה זו שימושית להסרת שפות שאינן בשימוש, וגם מצמצמת את
את הגודל הבינארי של האפליקציה. לדוגמה:
defaultConfig {
resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}
מידע נוסף על התאמה לשוק המקומי של אפליקציה ל-Android
הגדרת שכבת התנועה
ניתן להציג נתוני תנועה במפה על ידי הפעלת שכבת התנועה. אפשר להפעיל ולהשבית את שכבת התנועה על ידי קריאה לשיטה setTrafficEnabled()
, ולבדוק אם שכבת התנועה מופעלת כרגע על ידי קריאה לשיטה isTrafficEnabled()
. בצילום המסך הבא מוצגת מפה שבה שכבת התנועה מופעלת.
הגדרת סוג המפה
כדי להגדיר את סוג המפה, קוראים לשיטה 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
מפות. גם אם אין תמיכה במיקום פנימי, השדה 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 או לחיצות על לחצנים (למשל, מצפן, מיקום, לחצני זום) הם ביחס לאזור המרופד.
- ה-method
getCameraPosition
מחזירה את המרכז של האזור המרופד. - באמצעות ה-method
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);