Google Street View מספק נופים פנורמיים ב-360 מעלות מכבישים ייעודיים לכל אורך אזור הכיסוי.
הסרטון הזה מראה איך אפשר להשתמש בשירות Street View כדי להעניק למשתמשים חוויה בעולם האמיתי של כתובת במפה, ולספק להם הקשר משמעותי לגבי היעד שלהם או כל מקום שבו הם מתעניינים.
הכיסוי שזמין דרך מפות Google ל-Android API גרסה 2 זהה לזה של אפליקציית מפות Google במכשיר Android. אפשר לקרוא מידע נוסף על Street View ואת האזורים הנתמכים במפה אינטראקטיבית, במאמר מידע על Street View.
הכיתה StreetViewPanorama
בונה את הפנורמה של Street View באפליקציה שלכם. בממשק המשתמש, פנורמה מיוצגת על ידי אובייקט StreetViewPanoramaFragment
או StreetViewPanoramaView
.
דוגמאות קוד
המאגר של ApiDemos ב-GitHub כולל דוגמאות שממחישות את השימוש ב-Street View.
דוגמאותKotlin:
- StreetViewPanoramaBasicDemoActivity: העקרונות הבסיסיים של השימוש ב-Street View
- StreetViewPanoramaEventsDemoActivity: האזנה לאירועים
- StreetViewPanoramaNavigationDemoActivity: שליטה פרוגרמטית בפנורמות ב-Street View
- StreetViewPanoramaOptionsDemoActivity: שינוי אפשרויות התנועות וממשק המשתמש
- StreetViewPanoramaViewDemoActivity: שימוש ב-
StreetViewPanoramaView
(במקום במקטע) - SplitStreetViewPanoramaAndMapDemoActivity: שימוש בפעילות שמציגה Street View ומפה
דוגמאות Java:
- StreetViewPanoramaBasicDemoActivity: העקרונות הבסיסיים של השימוש ב-Street View
- StreetViewPanoramaEventsDemoActivity: האזנה לאירועים
- StreetViewPanoramaNavigationDemoActivity: שליטה פרוגרמטית בפנורמות ב-Street View
- StreetViewPanoramaOptionsDemoActivity: שינוי אפשרויות התנועות וממשק המשתמש
- StreetViewPanoramaViewDemoActivity: שימוש ב-
StreetViewPanoramaView
(במקום במקטע) - SplitStreetViewPanoramaAndMapDemoActivity: יצירת פעילות שמציגה תמונות Street View ומפה
סקירה כללית של Street View ב-SDK של מפות Google ל-Android
ה-SDK של מפות ל-Android מספק שירות של Street View לאיסוף ולביצוע מניפולציות על התמונות שמוצגות ב-Google Street View. התמונות מוחזרות כפנורמות.
כל פנורמה של Street View היא תמונה, או קבוצה של תמונות, שמספקות תצוגה מלאה של 360 מעלות ממיקום יחיד. התמונות מתאימות לתצוגה מלבנית (Plate Carrée), שכוללת 360 מעלות של תצוגה אופקית ( היקפים מלאים) ותצוגה אנכית של 180 מעלות (מישור למעלה ועד למצב ישר למטה). התמונה הפנורמית ב-360 מעלות מגדירה היטל על כדור, שהתמונה ארוזה על פני השטח הדו-ממדיים של אותו כדור.
StreetViewPanorama
מספק מכשיר צפייה שמציג את התמונה הפנורמית ככדור ובמרכזה מצלמה. אפשר לשנות את הסמל StreetViewPanoramaCamera
כדי לשלוט בזום ובכיוון (הטיית המצלמה וכיווןה).
תחילת העבודה
הגדרת פרויקט
פעל לפי ההוראות במדריך לתחילת העבודה כדי להגדיר SDK של מפות Google לפרויקט Android.
לפני שמוסיפים תמונת פנורמה, יש לבדוק את הזמינות של תמונת הפנורמה ב-Street View
ספריית הלקוח של ה-SDK של שירותי Google Play כוללת כמה דוגמאות של Street View שאפשר לייבא לפרויקט ולהשתמש בהן כבסיס לפיתוח. ראו מבוא כדי לקבל הנחיות לייבוא הדוגמאות.
Maps SDK for Android Utility Library היא ספריית קוד פתוח של מחלקות, שמתאימה למגוון אפליקציות. המאגר של המטא-נתונים של Street View כלול במאגר של GitHub.
כלי העזר הזה בודק אם המיקום נתמך על ידי Street View. כדי להימנע משגיאות בהוספת פנורמה של Street View לאפליקציה ל-Android, כדאי לקרוא לכלי המטא-נתונים הזה ולהוסיף פנורמה של Street View רק אם התגובה היא OK
.
שימוש ב-API
כדי להוסיף פנורמה של Street View לחלק של Android, צריך לפעול לפי ההוראות הבאות. זו הדרך הפשוטה ביותר להוסיף את Street View לאפליקציה שלכם. לאחר מכן קראו עוד על מקטעים, תצוגות והתאמה אישית של הפנורמה.
הוספת פנורמה של Street View
כדי להוסיף תמונת פנורמה של Street View כמו זו, צריך לבצע את השלבים הבאים:
לסיכום:
- הוסף אובייקט קטע לפעילות שתטפל בפנורמה של Street View. הדרך הקלה ביותר לעשות זאת היא להוסיף רכיב
<fragment>
לקובץ הפריסה עבור ה-Activity
. - מטמיעים את הממשק
OnStreetViewPanoramaReadyCallback
ומשתמשים בשיטת הקריאה החוזרתonStreetViewPanoramaReady(StreetViewPanorama)
כדי לטפל באובייקטStreetViewPanorama
. - קוראים ל-
getStreetViewPanoramaAsync()
בקטע כדי לרשום את הקריאה החוזרת.
בהמשך תוכלו למצוא פרטים נוספים על כל שלב.
הוספת מקטע
כדי להגדיר אובייקט Fragment, מוסיפים רכיב <fragment>
לקובץ הפריסה של הפעילות. ברכיב הזה, מגדירים את המאפיין class
כ-com.google.android.gms.maps.StreetViewPanoramaFragment
(או SupportStreetViewPanoramaFragment
).
הנה דוגמה למקטע בקובץ פריסה:
<fragment android:name="com.google.android.gms.maps.StreetViewPanoramaFragment" android:id="@+id/streetviewpanorama" android:layout_width="match_parent" android:layout_height="match_parent"/>
הוספת קוד Street View
כדי להציג את הפנורמה של Street View בתוך האפליקציה, צריך להטמיע את הממשק OnStreetViewPanoramaReadyCallback
ולהגדיר מופע של הקריאה החוזרת באובייקט StreetViewPanoramaFragment
או StreetViewPanoramaView
. במדריך הזה אנחנו משתמשים ב-StreetViewPanoramaFragment
, כי זו הדרך הפשוטה ביותר להוסיף את Street View לאפליקציה. השלב הראשון הוא הטמעת הממשק של קריאה חוזרת (callback):
Kotlin
class StreetViewActivity : AppCompatActivity(), OnStreetViewPanoramaReadyCallback { // ... }
Java
class StreetViewActivity extends AppCompatActivity implements OnStreetViewPanoramaReadyCallback { // ... }
בשיטה onCreate()
של Activity
, מגדירים את קובץ הפריסה כתצוגת התוכן. לדוגמה, אם שם קובץ הפריסה הוא main.xml
, השתמשו בקוד הבא:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_street_view) val streetViewPanoramaFragment = supportFragmentManager .findFragmentById(R.id.street_view_panorama) as SupportStreetViewPanoramaFragment streetViewPanoramaFragment.getStreetViewPanoramaAsync(this) }
Java
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_street_view); SupportStreetViewPanoramaFragment streetViewPanoramaFragment = (SupportStreetViewPanoramaFragment) getSupportFragmentManager() .findFragmentById(R.id.street_view_panorama); streetViewPanoramaFragment.getStreetViewPanoramaAsync(this); }
כדי לקבל כינוי בקטע, מפעילים את הקריאה FragmentManager.findFragmentById()
ומעבירים אליו את מזהה המשאב של הרכיב <fragment>
.
שימו לב שמזהה המשאב R.id.streetviewpanorama
מתווסף באופן אוטומטי לפרויקט Android כשיוצרים את קובץ הפריסה.
לאחר מכן משתמשים ב-getStreetViewPanoramaAsync()
כדי להגדיר את הקריאה החוזרת (callback) במקטע.
Kotlin
val streetViewPanoramaFragment = supportFragmentManager .findFragmentById(R.id.street_view_panorama) as SupportStreetViewPanoramaFragment streetViewPanoramaFragment.getStreetViewPanoramaAsync(this)
Java
SupportStreetViewPanoramaFragment streetViewPanoramaFragment = (SupportStreetViewPanoramaFragment) getSupportFragmentManager() .findFragmentById(R.id.street_view_panorama); streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);
משתמשים בשיטת הקריאה החוזרת onStreetViewPanoramaReady(StreetViewPanorama)
כדי לאחזר מופע שהוא לא null של StreetViewPanorama
, שמוכן לשימוש.
Kotlin
override fun onStreetViewPanoramaReady(streetViewPanorama: StreetViewPanorama) { val sanFrancisco = LatLng(37.754130, -122.447129) streetViewPanorama.setPosition(sanFrancisco) }
Java
@Override public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) { LatLng sanFrancisco = new LatLng(37.754130, -122.447129); streetViewPanorama.setPosition(sanFrancisco); }
מידע נוסף על הגדרת מצב ראשוני
בשונה ממפה, לא ניתן להגדיר את המצב הראשוני של תמונת הפנורמה של Street View באמצעות XML. עם זאת, אפשר להגדיר את הפנורמה באופן פרוגרמטי על ידי העברת אובייקט StreetViewPanoramaOptions
שמכיל את האפשרויות שצוינו.
- אם משתמשים ב-
StreetViewPanoramaFragment
, משתמשים בשיטת היצרן הסטטיתStreetViewPanoramaFragment.newInstance(StreetViewPanoramaOptions options)
כדי ליצור את המקטע ולהעביר אפשרויות בהתאמה אישית. - אם אתם משתמשים ב-
StreetViewPanoramaView
, השתמשו ב-builder וב-pass ב-StreetViewPanoramaView(Context, StreetViewPanoramaOptions)
באפשרויות שהוגדרו בהתאמה אישית.
Kotlin
val sanFrancisco = LatLng(37.754130, -122.447129) val view = StreetViewPanoramaView( this, StreetViewPanoramaOptions().position(sanFrancisco) )
Java
LatLng sanFrancisco = new LatLng(37.754130, -122.447129); StreetViewPanoramaView view = new StreetViewPanoramaView(this, new StreetViewPanoramaOptions().position(sanFrancisco));
מידע נוסף על StreetViewPanoramaFragment
StreetViewPanoramaFragment
היא מחלקה משנית של המחלקה Android Fragment, ומאפשרת למקם פנורמה של Street View בקטע של Android. אובייקטים StreetViewPanoramaFragment
משמשים כקונטיינרים של הפנורמה ומספקים גישה לאובייקט StreetViewPanorama
.
StreetViewPanoramaView
StreetViewPanoramaView
, מחלקה משנית למחלקה View
של Android, מאפשרת למקם פנורמה של Street View ב-Android View
. View
מייצג אזור מלבני של המסך, והוא אבן בניין בסיסית לאפליקציות ולווידג'טים של Android.
בדומה ל-StreetViewPanoramaFragment
, StreetViewPanoramaView
משמש כקונטיינר של הפנורמה, וחושף את הפונקציונליות העיקרית שלו דרך האובייקט StreetViewPanorama
. המשתמשים בכיתה הזו חייבים להעביר את כל השיטות של מחזור החיים של הפעילות (כמו onCreate()
, onDestroy()
, onResume()
ו-onPause())
לשיטות המתאימות במחלקה StreetViewPanoramaView
.
התאמה אישית של פונקציונליות שבשליטת המשתמש
כברירת מחדל, הפונקציונליות הבאה זמינה למשתמשים בעת צפייה בפנורמה של Street View: צילום פנורמי, שינוי מרחק התצוגה וצילום תמונות פנורמה סמוכות. ב-StreetViewPanorama
אפשר להפעיל ולהשבית תנועות בשליטת המשתמשים. עדיין ייתכנו שינויים פרוגרמטיים אם התנועה מושבתת.
הגדרת המיקום של הפנורמה
כדי להגדיר את המיקום של הנוף ב-Street View, מתקשרים אל StreetViewPanorama.setPosition()
ומעבירים LatLng
.
אפשר גם להעביר את radius
ו-source
כפרמטרים אופציונליים.
כדאי להשתמש ברדיוס אם רוצים להרחיב או לצמצם את האזור שבו Street View יחפש תמונת פנורמה תואמת. המשמעות של רדיוס של 0 היא שהפנורמה צריכה להיות מקושרת בדיוק למיקום LatLng
שצוין.
רדיוס ברירת המחדל הוא 50 מטר. אם יש יותר מתמונה פנורמה אחת באזור ההתאמה, ה-API יחזיר את ההתאמה הטובה ביותר.
כדאי להשתמש בקוד מקור כדי להגביל את Street View לחיפוש של תמונות פנורמיות בחוץ בלבד. כברירת מחדל, תמונות פנורמיות של Street View יכולות להופיע בתוך מקומות כמו מוזיאונים, בניינים ציבוריים, בתי קפה ועסקים. שים לב שייתכן שלא קיימות תמונות פנורמיות חוץ במיקום שצוין.
Kotlin
val sanFrancisco = LatLng(37.754130, -122.447129) // Set position with LatLng only. streetViewPanorama.setPosition(sanFrancisco) // Set position with LatLng and radius. streetViewPanorama.setPosition(sanFrancisco, 20) // Set position with LatLng and source. streetViewPanorama.setPosition(sanFrancisco, StreetViewSource.OUTDOOR) // Set position with LaLng, radius and source. streetViewPanorama.setPosition(sanFrancisco, 20, StreetViewSource.OUTDOOR)
Java
LatLng sanFrancisco = new LatLng(37.754130, -122.447129); // Set position with LatLng only. streetViewPanorama.setPosition(sanFrancisco); // Set position with LatLng and radius. streetViewPanorama.setPosition(sanFrancisco, 20); // Set position with LatLng and source. streetViewPanorama.setPosition(sanFrancisco, StreetViewSource.OUTDOOR); // Set position with LaLng, radius and source. streetViewPanorama.setPosition(sanFrancisco, 20, StreetViewSource.OUTDOOR);
לחלופין, אפשר להגדיר את המיקום על סמך מזהה פנורמה על ידי העברת panoId
ל-StreetViewPanorama.setPosition()
.
כדי לאחזר את מזהה הפנורמה של תמונות פנורמה סמוכות, תחילה השתמש ב-getLocation()
כדי לאחזר StreetViewPanoramaLocation
.
האובייקט מכיל את מזהה הפנורמה הנוכחית ומערך של אובייקטים StreetViewPanoramaLink
, שכל אחד מהם מכיל את המזהה של הפנורמה שמחוברת לתמונה הנוכחית.
Kotlin
streetViewPanorama.location.links.firstOrNull()?.let { link: StreetViewPanoramaLink -> streetViewPanorama.setPosition(link.panoId) }
Java
StreetViewPanoramaLocation location = streetViewPanorama.getLocation(); if (location != null && location.links != null) { streetViewPanorama.setPosition(location.links[0].panoId); }
הגדלה והקטנה של התצוגה
אפשר לשנות את רמת הזום באופן פרוגרמטי על ידי הגדרה של StreetViewPanoramaCamera.zoom
.
אם מרחק התצוגה יהיה 1.0, התמונה תגדל פי 2.
קטע הקוד הבא משתמש ב-StreetViewPanoramaCamera.Builder()
כדי ליצור מצלמה חדשה עם ההטיה והכיוון של המצלמה הקיימת, תוך הגדלת הזום בחמישים אחוז.
Kotlin
val zoomBy = 0.5f val camera = StreetViewPanoramaCamera.Builder() .zoom(streetViewPanorama.panoramaCamera.zoom + zoomBy) .tilt(streetViewPanorama.panoramaCamera.tilt) .bearing(streetViewPanorama.panoramaCamera.bearing) .build()
Java
float zoomBy = 0.5f; StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder() .zoom(streetViewPanorama.getPanoramaCamera().zoom + zoomBy) .tilt(streetViewPanorama.getPanoramaCamera().tilt) .bearing(streetViewPanorama.getPanoramaCamera().bearing) .build();
הגדרת כיוון המצלמה (נקודת המבט)
כדי לקבוע את הכיוון של מצלמת Street View, מפעילים את כיוון הצילום וההטיה StreetViewPanoramaCamera
.
- נשיאה
- הכיוון שאליו המצלמה פונה, מצוין במעלות בכיוון השעון מהצפון האמיתי, סביב מיקום המצלמה. הצפון האמיתי הוא 0, מזרח הוא 90, דרום הוא 180, מערב הוא 270.
- הטיה
- הטיה של ציר ה-Y למעלה או למטה. הטווח הוא 90- עד 0 עד 90, כאשר -90 מסתכל ישר למטה, 0 במרכז האופק ו-90 מסתכל ישר למעלה. השונות נמדדת מגובה ברירת המחדל הראשוני של המצלמה, שהוא בדרך כלל אופקי (אבל לא תמיד) אופקי. לדוגמה, לתמונה שמצולמת על גבעה סביר להניח שיהיה גובה צליל שאינו אופקי כברירת מחדל.
קטע הקוד הבא משתמש ב-StreetViewPanoramaCamera.Builder()
כדי לבנות מצלמה חדשה עם הזום וההטיה של המצלמה הקיימת, תוך שינוי הכיוון ב-30 מעלות שמאלה.
Kotlin
val panBy = 30f val camera = StreetViewPanoramaCamera.Builder() .zoom(streetViewPanorama.panoramaCamera.zoom) .tilt(streetViewPanorama.panoramaCamera.tilt) .bearing(streetViewPanorama.panoramaCamera.bearing - panBy) .build()
Java
float panBy = 30; StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder() .zoom(streetViewPanorama.getPanoramaCamera().zoom) .tilt(streetViewPanorama.getPanoramaCamera().tilt) .bearing(streetViewPanorama.getPanoramaCamera().bearing - panBy) .build();
הקטע הבא מטים את המצלמה למעלה ב-30 מעלות.
Kotlin
var tilt = streetViewPanorama.panoramaCamera.tilt + 30 tilt = if (tilt > 90) 90f else tilt val previous = streetViewPanorama.panoramaCamera val camera = StreetViewPanoramaCamera.Builder(previous) .tilt(tilt) .build()
Java
float tilt = streetViewPanorama.getPanoramaCamera().tilt + 30; tilt = (tilt > 90) ? 90 : tilt; StreetViewPanoramaCamera previous = streetViewPanorama.getPanoramaCamera(); StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder(previous) .tilt(tilt) .build();
אנימציה של תנועות המצלמה
כדי להוסיף אנימציה לתנועות המצלמה, מתקשרים אל StreetViewPanorama.animateTo()
.
האנימציה משתלבת בין מאפייני המצלמה הנוכחיים לבין מאפייני המצלמה החדשים. אם רוצים לדלג ישירות למצלמה בלי אנימציה, אפשר להגדיר את משך הזמן ל-0.
Kotlin
// Keeping the zoom and tilt. Animate bearing by 60 degrees in 1000 milliseconds. val duration: Long = 1000 val camera = StreetViewPanoramaCamera.Builder() .zoom(streetViewPanorama.panoramaCamera.zoom) .tilt(streetViewPanorama.panoramaCamera.tilt) .bearing(streetViewPanorama.panoramaCamera.bearing - 60) .build() streetViewPanorama.animateTo(camera, duration)
Java
// Keeping the zoom and tilt. Animate bearing by 60 degrees in 1000 milliseconds. long duration = 1000; StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder() .zoom(streetViewPanorama.getPanoramaCamera().zoom) .tilt(streetViewPanorama.getPanoramaCamera().tilt) .bearing(streetViewPanorama.getPanoramaCamera().bearing - 60) .build(); streetViewPanorama.animateTo(camera, duration);
התמונה הבאה מציגה את התוצאה כשמתזמנים את האנימציה שלמעלה להרצה כל 2,000 אלפיות השנייה, באמצעות Handler.postDelayed()
: