Google Street View מציג תמונות פנורמיות של 360 מעלות מדרכים ייעודיות, לאורך אזור הכיסוי שלו.
הסרטון הזה מראה איך אפשר להשתמש בשירות Street View כדי לספק למשתמשים חוויה אמיתית בעולם של כתובת במפה, ומספק להם הקשר משמעותי לגבי היעד שלהם או כל מקום שבו הם מתעניינים.
הכיסוי הזמין דרך מפות Google ל-Android API v2 זהה לאופן השימוש באפליקציית מפות Google במכשיר Android. אפשר לקרוא עוד על Street View ולראות את האזורים הנתמכים במפה אינטראקטיבית, במאמר מידע על Street View.
הכיתה StreetViewPanorama
יוצרת מודלים לפנורמה של Street View באפליקציה שלכם. בממשק המשתמש, פנורמה מיוצגת על ידי אובייקט StreetViewPanoramaFragment
או StreetViewPanoramaView
.
דוגמאות קוד
מאגר ApiDemos ב-GitHub כולל דוגמאות שממחישות את השימוש ב-Street View.
דוגמאות ל-Java:
- StreetViewPanoramaBasicDemoActivity: העקרונות הבסיסיים של השימוש ב-Street View
- StreetViewPanoramaEventsDemoActivity: האזנה לאירועים
- StreetViewPanoramaNavigationDemoActivity: שליטה על תמונות פנורמה ב-Street View באופן פרוגרמטי
- StreetViewPanoramaOptionsDemoActivity: שינוי אפשרויות ממשק המשתמש והתנועות
- StreetViewPanoramaViewDemoActivity: באמצעות הפונקציה
StreetViewPanoramaView
(ולא Fragment) - SplitStreetViewPanoramaAndMapsDemoActivity: יצירת פעילות שמציגה Street View ומפה
דוגמאות ל-Kotlin:
- StreetViewPanoramaBasicDemoActivity: העקרונות הבסיסיים של השימוש ב-Street View
- StreetViewPanoramaEventsDemoActivity: האזנה לאירועים
- StreetViewPanoramaNavigationDemoActivity: שליטה על תמונות פנורמה ב-Street View באופן פרוגרמטי
- StreetViewPanoramaOptionsDemoActivity: שינוי אפשרויות ממשק המשתמש והתנועות
- StreetViewPanoramaViewDemoActivity: באמצעות הפונקציה
StreetViewPanoramaView
(ולא Fragment) - SplitStreetViewPanoramaAndMapsDemoActivity: באמצעות פעילות שמציגה Street View ומפה
סקירה כללית של Street View ב-Maps SDK ל-Android
ערכת ה-SDK של מפות Google ל-Android מספקת שירות Street View, שבו אפשר לקבל תמונות ולשנות אותן ב-Google Street View. התמונות מוחזרות כפנורמה.
כל פנורמה ב-Street View היא תמונה או קבוצה של תמונות, שמספקת תצוגה מלאה של 360 מעלות ממיקום יחיד. התמונות תואמות לצפיה המלבנית (Plate Carrée), שמכילה 360 מעלות של תצוגה אופקית (wrapper מלא) ו-180 מעלות של תצוגה אנכית (ישירות עד ישר). התמונה הפנורמית שנוצרת ב-360 מעלות מגדירה תחזית של כדור הארץ, כשהתמונה עטופה במשטח הדו-מימדי של אותו כדור הארץ.
ב-StreetViewPanorama
מוצג מכשיר שמעבד את הפנורמה כעין כדור עם מצלמה במרכז. אפשר לשנות את StreetViewPanoramaCamera
כדי לשלוט בזום ובכיוון (ההטיה והמסב) של המצלמה.
כדי להתחיל:
יש לפעול לפי המדריך לתחילת העבודה כדי להגדיר פרויקט SDK של Android ל-Android. לאחר מכן, מוסיפים את התמונה פנורמית של Street View, כפי שמתואר בהמשך.
ספריית הלקוח של Google Play Services SDK כוללת כמה דוגמאות ל-Street View שתוכלו לייבא לפרויקט ולהשתמש בהן כבסיס לפיתוח. מומלץ לעיין במבוא לקבלת הנחיות לייבוא הדוגמאות.
שימוש ב-API
בצעו את ההוראות הבאות כדי להוסיף קטע פנורמה של Street View לקטע Android. זו הדרך הפשוטה ביותר להוסיף Street View לאפליקציה. לאחר מכן, קראו עוד על קטעים, תצוגות והתאמה אישית של הפנורמה.
הוספת תמונת פנורמה ב-Street View
כדי להוסיף תמונת פנורמה ל-Street View כמו בדוגמה הבאה:

לסיכום:
- מוסיפים אובייקט Fragment לפעילות שיטפל בפנורמה של Street View. הדרך הקלה ביותר לעשות זאת היא להוסיף אלמנט
<fragment>
לקובץ הפריסה שלActivity
. - מטמיעים את הממשק של
OnStreetViewPanoramaReadyCallback
ומשתמשים בשיטת הקריאה החוזרתonStreetViewPanoramaReady(StreetViewPanorama)
כדי לקבל אובייקטStreetViewPanorama
. - צריך לבצע קריאה ל-
getStreetViewPanoramaAsync()
בקטע כדי לרשום את הקריאה החוזרת.
בהמשך תמצאו פרטים נוספים על כל שלב.
הוספת שבר
מוסיפים רכיב <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
ולהגדיר מופע של הקריאה החוזרת (callback) באובייקט StreetViewPanoramaFragment
או ב-StreetViewPanoramaView
. במדריך הזה נשתמש ב-StreetViewPanoramaFragment
, כי זו הדרך הפשוטה ביותר להוסיף את Street View לאפליקציה. השלב הראשון הוא להטמיע את ממשק הקריאה החוזרת (callback):
Java
class StreetViewActivity extends AppCompatActivity implements OnStreetViewPanoramaReadyCallback { // ... }
Kotlin
class StreetViewActivity : AppCompatActivity(), OnStreetViewPanoramaReadyCallback { // ... }
בשיטה של onCreate()
Activity
, מגדירים את קובץ הפריסה כתצוגת התוכן. לדוגמה, אם שם הפריסה הוא main.xml
, תוכלו להשתמש בקוד הזה:
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); }
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) }
כדי לקבל מזהה קטע, אפשר לקרוא לו FragmentManager.findFragmentById()
ולהעביר לו את מזהה המשאב של הרכיב <fragment>
.
שימו לב שמזהה המשאב R.id.streetviewpanorama
מתווסף באופן אוטומטי לפרויקט ב-Android כשבונים את קובץ הפריסה.
לאחר מכן משתמשים ב-getStreetViewPanoramaAsync()
כדי להגדיר את הקריאה החוזרת בקטע.
Java
SupportStreetViewPanoramaFragment streetViewPanoramaFragment = (SupportStreetViewPanoramaFragment) getSupportFragmentManager() .findFragmentById(R.id.street_view_panorama); streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);
Kotlin
val streetViewPanoramaFragment = supportFragmentManager .findFragmentById(R.id.street_view_panorama) as SupportStreetViewPanoramaFragment streetViewPanoramaFragment.getStreetViewPanoramaAsync(this)
משתמשים ב-method onStreetViewPanoramaReady(StreetViewPanorama)
כדי לאחזר מופע שאינו Null של StreetViewPanorama
.
Java
@Override public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) { LatLng sanFrancisco = new LatLng(37.754130, -122.447129); streetViewPanorama.setPosition(sanFrancisco); }
Kotlin
override fun onStreetViewPanoramaReady(streetViewPanorama: StreetViewPanorama) { val sanFrancisco = LatLng(37.754130, -122.447129) streetViewPanorama.setPosition(sanFrancisco) }
מידע נוסף על הגדרת מצב ראשוני
בניגוד למפה, לא ניתן להגדיר את המצב הראשוני של הפנורמה ב-Street View באמצעות XML. עם זאת, אפשר להגדיר את הפנורמה באופן פרוגרמטי על ידי העברת אובייקט StreetViewPanoramaOptions
שמכיל את האפשרויות שצוינו.
- אם משתמשים ב-
StreetViewPanoramaFragment
, אפשר להשתמש בשיטה הסטטיתStreetViewPanoramaFragment.newInstance(StreetViewPanoramaOptions options)
כדי לבנות את קטע הקוד ולהעביר את האפשרויות המותאמות אישית שהוגדרו. - אם אתם משתמשים ב-
StreetViewPanoramaView
, תוכלו להשתמש בבנייהStreetViewPanoramaView(Context, StreetViewPanoramaOptions)
ולהעביר את האפשרויות המותאמות אישית שהגדרתם.
Java
LatLng sanFrancisco = new LatLng(37.754130, -122.447129); StreetViewPanoramaView view = new StreetViewPanoramaView(this, new StreetViewPanoramaOptions().position(sanFrancisco));
Kotlin
val sanFrancisco = LatLng(37.754130, -122.447129) val view = StreetViewPanoramaView( this, StreetViewPanoramaOptions().position(sanFrancisco) )
מידע נוסף על StreetViewPanoramaFragment
StreetViewPanoramaFragment
היא קבוצת משנה במחלקה Android 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 יכולות להופיע במקומות כמו מוזיאונים, בניינים ציבוריים, בתי קפה ועסקים. לידיעתך, ייתכן שתמונות פנורמה בחוץ אינן קיימות במיקום שצוין.
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);
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)
לחלופין, אפשר להגדיר את המיקום לפי מזהה פנורמה על ידי העברה של השדה panoId
אל StreetViewPanorama.setPosition()
.
כדי לאחזר את מזהה הפנורמה לתצוגות פנורמה סמוכות, השתמשו תחילה ב-getLocation()
כדי לאחזר StreetViewPanoramaLocation
.
האובייקט מכיל את המזהה של הפנורמה הנוכחית ומערך של StreetViewPanoramaLink
אובייקטים, שכל אחד מהם מכיל את המזהה של פנורמה שמחוברת לאובייקט הנוכחי.
Java
StreetViewPanoramaLocation location = streetViewPanorama.getLocation(); if (location != null && location.links != null) { streetViewPanorama.setPosition(location.links[0].panoId); }
Kotlin
streetViewPanorama.location.links.firstOrNull()?.let { link: StreetViewPanoramaLink -> streetViewPanorama.setPosition(link.panoId) }
הגדלה והקטנה של התצוגה
אפשר לשנות את רמת הזום באופן פרוגרמטי על ידי הגדרת הערך StreetViewPanoramaCamera.zoom
.
שינוי מרחק התצוגה ל-1.0 יגדיל את התמונה בגורם של 2.
קטע הקוד הבא משמש את StreetViewPanoramaCamera.Builder()
ליצירת מצלמה חדשה, עם ההטיה והנושא של המצלמה הקיימת והגדלת הזום ב-50 אחוזים.
Java
float zoomBy = 0.5f; StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder() .zoom(streetViewPanorama.getPanoramaCamera().zoom + zoomBy) .tilt(streetViewPanorama.getPanoramaCamera().tilt) .bearing(streetViewPanorama.getPanoramaCamera().bearing) .build();
Kotlin
val zoomBy = 0.5f val camera = StreetViewPanoramaCamera.Builder() .zoom(streetViewPanorama.panoramaCamera.zoom + zoomBy) .tilt(streetViewPanorama.panoramaCamera.tilt) .bearing(streetViewPanorama.panoramaCamera.bearing) .build()
הגדרת הכיוון של המצלמה (נקודת מבט)
אפשר לזהות את הכיוון של המצלמה ב-Street View על ידי הגדרת הכיוון וההטיה של StreetViewPanoramaCamera
.
- נושאת
- הכיוון שאליו המצלמה מכוונת, שצוין במעלות בכיוון השעון מצפון אמיתי, מסביב ללוקוס של המצלמה. צפון אמיתי הוא 0, מזרח הוא 90, דרום הוא 180, מערב הוא 270.
- הטיה
- ציר ה-Y פונה למעלה או למטה. הטווח נע בין 00- ל-90, כאשר 90- מביט למטה, 0 ממורכז באופק ו-90 מסתכל ישירות למעלה. השונות נמדדת מגובה ברירת המחדל הראשוני של המצלמה, שהוא לעיתים קרובות אופקי (אבל לא תמיד אופקי). לדוגמה, בתמונה שצולמה על גבעה סביר להניח שגובה ברירת המחדל שלה יהיה לא אופקי.
קטע הקוד הבא משתמש ב-StreetViewPanoramaCamera.Builder()
כדי לבנות מצלמה חדשה עם הזום וההטיה של המצלמה הקיימת, תוך שינוי הכיוון של 30 מעלות שמאלה.
Java
float panBy = 30; StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder() .zoom(streetViewPanorama.getPanoramaCamera().zoom) .tilt(streetViewPanorama.getPanoramaCamera().tilt) .bearing(streetViewPanorama.getPanoramaCamera().bearing - panBy) .build();
Kotlin
val panBy = 30f val camera = StreetViewPanoramaCamera.Builder() .zoom(streetViewPanorama.panoramaCamera.zoom) .tilt(streetViewPanorama.panoramaCamera.tilt) .bearing(streetViewPanorama.panoramaCamera.bearing - panBy) .build()
קטע הקוד הבא פונה את המצלמה למעלה ב-30 מעלות.
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();
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()
אנימציה של תנועות המצלמה
כדי להגדיר אנימציה לתנועות המצלמה, צריך להתקשר אל StreetViewPanorama.animateTo()
.
האנימציה מבצעת אינטרפולציה בין מאפייני המצלמה הנוכחית לבין מאפייני המצלמה החדשה. אם רוצים לקפוץ ישירות למצלמה בלי אנימציה, אפשר להגדיר את משך הזמן כ-0.
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);
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)
התמונה הבאה מציגה את התוצאה כאשר מתזמנים את האנימציה שלמעלה כך שתשתמש בכל 2,000 אלפיות השנייה, באמצעות Handler.postDelayed()
:
