Google Street View zapewnia panoramiczne widoki 360-stopniowe z wyznaczonych dróg na całym obszarze zasięgu.
Ten film pokazuje, jak za pomocą usługi Street View pokazać użytkownikom adres widoczny na mapie w świecie rzeczywistym i zapewnić im sensowny kontekst dotyczący miejsca docelowego lub dowolnego miejsca, które ich interesują.
Zasięg interfejsu API Map Google na Androida w wersji 2 jest taki sam jak w przypadku aplikacji Mapy Google na urządzeniu z Androidem. W artykule Street View znajdziesz więcej informacji o Street View i obsługiwanych obszarach na interaktywnej mapie.
Klasa StreetViewPanorama
modeluje panoramę Street View w Twojej aplikacji. Panorama w interfejsie jest reprezentowana przez obiekt StreetViewPanoramaFragment
lub StreetViewPanoramaView
.
Przykładowe fragmenty kodu
Repozytorium AIDemos na GitHubie zawiera przykłady przedstawiające korzystanie ze Street View.
Przykłady w języku Java:
- StreetViewPanoramaBasicDemoActivity: podstawy korzystania ze Street View
- StreetViewPanoramaEventsDemoActivity: nasłuchiwanie zdarzeń
- StreetViewPanoramaNavigationDemoActivity: kontrolowanie panoram Street View w sposób zautomatyzowany.
- StreetViewPanoramaOptionsDemoActivity: zmiana opcji interfejsu i gestu.
- StreetViewPanoramaViewDemoActivity: użycie
StreetViewPanoramaView
(zamiast fragmentu kodu). - SplitStreetViewPanoramaAndMapDemoActivity: tworzenie aktywności obejmującej widok Street View i mapę.
Próbki z Kotlina:
- StreetViewPanoramaBasicDemoActivity: podstawy korzystania ze Street View
- StreetViewPanoramaEventsDemoActivity: nasłuchiwanie zdarzeń
- StreetViewPanoramaNavigationDemoActivity: kontrolowanie panoram Street View w sposób zautomatyzowany.
- StreetViewPanoramaOptionsDemoActivity: zmiana opcji interfejsu i gestu.
- StreetViewPanoramaViewDemoActivity: użycie
StreetViewPanoramaView
(zamiast fragmentu kodu). - SplitStreetViewPanoramaAndMapDemoActivity: za pomocą aktywności polegającej na wyświetleniu widoku ulicy i mapie.
Omówienie funkcji Street View w pakiecie Maps SDK na Androida
Pakiet Maps SDK na Androida obejmuje usługę Street View, która pozwala uzyskiwać zdjęcia wykorzystywane w Google Street View i nimi manipulować. Obrazy są zwracane jako panoramy.
Każda panorama Street View to zdjęcie lub zestaw zdjęć zapewniających pełny widok 360 stopni z jednego miejsca. Obrazy są zgodne z odwzorowaniem walcowym równoodległościowym (Plate Carrée), które obejmuje widok w poziomie 360 stopni (pełny obraz) i 180 stopni w pionie (od pozycji pionowej do pionowej). Powstała w ten sposób panorama 360 stopni definiuje odwzorowanie kuli z obrazem nałożonym na dwuwymiarową powierzchnię tej kuli.
StreetViewPanorama
udostępnia gogle, które renderują panoramę jako sferę, a kamera znajduje się pośrodku. Możesz sterować powiększeniem oraz orientacją (pochyleniem i kierunkiem) kamery, używając elementu StreetViewPanoramaCamera
.
Rozpocznij
Konfigurowanie projektu
Postępuj zgodnie z przewodnikiem dla początkujących, aby skonfigurować projekt pakietu Maps SDK na Androida.
Zanim dodasz panoramę, sprawdź dostępność panoramy Street View
Biblioteka klienta pakietu SDK Usług Google Play zawiera kilka przykładów kodu Street View, które możesz zaimportować do projektu i wykorzystać jako podstawy do programowania. Wskazówki dotyczące importowania przykładów znajdziesz we wprowadzeniu.
Biblioteka narzędziowa pakietu Maps SDK na Androida to biblioteka typu open source z klasami pomocnymi w wielu różnych aplikacjach. W repozytorium GitHub znajduje się narzędzie do metadanych Street View.
To narzędzie sprawdza, czy Street View obsługuje daną lokalizację. Podczas dodawania panoramy Street View do aplikacji na Androida możesz uniknąć błędów, wywołując to narzędzie do edytowania metadanych i dodając panoramę Street View tylko wtedy, gdy odpowiedź to OK
.
Korzystanie z interfejsu API
Wykonaj poniższe instrukcje, aby dodać panoramę Street View do fragmentu Androida. To najprostszy sposób dodania Street View do aplikacji. Następnie przeczytaj więcej o fragmentach, widokach i dostosowywaniu panoramy.
Dodawanie panoramy Street View
Aby dodać panoramę Street View w ten sposób:

W skrócie:
- Dodaj obiekt Fragment do pola Activity,
który będzie obsługiwać panoramę Street View. Najprostszym sposobem jest dodanie elementu
<fragment>
do pliku układu elementuActivity
. - Zaimplementuj interfejs
OnStreetViewPanoramaReadyCallback
i użyj metody wywołania zwrotnegoonStreetViewPanoramaReady(StreetViewPanorama)
, aby uzyskać uchwyt obiektuStreetViewPanorama
. - Wywołaj
getStreetViewPanoramaAsync()
na fragmencie, aby zarejestrować wywołanie zwrotne.
Poniżej znajdziesz więcej informacji o poszczególnych krokach.
Dodaj fragment
Aby zdefiniować obiekt Fragment, dodaj element <fragment>
do pliku układu działania. W tym elemencie ustaw atrybut class
na com.google.android.gms.maps.StreetViewPanoramaFragment
(lub SupportStreetViewPanoramaFragment
).
Oto przykład fragmentu w pliku układu:
<fragment android:name="com.google.android.gms.maps.StreetViewPanoramaFragment" android:id="@+id/streetviewpanorama" android:layout_width="match_parent" android:layout_height="match_parent"/>
Dodaj kod Street View
Aby korzystać w aplikacji z panoramy Street View, musisz zaimplementować interfejs OnStreetViewPanoramaReadyCallback
i ustawić wystąpienie wywołania zwrotnego w obiekcie StreetViewPanoramaFragment
lub StreetViewPanoramaView
. W tym samouczku używamy interfejsu StreetViewPanoramaFragment
, ponieważ to najprostszy sposób dodania Street View do aplikacji. Pierwszym krokiem jest zaimplementowanie interfejsu wywołania zwrotnego:
Java
class StreetViewActivity extends AppCompatActivity implements OnStreetViewPanoramaReadyCallback { // ... }
Kotlin
class StreetViewActivity : AppCompatActivity(), OnStreetViewPanoramaReadyCallback { // ... }
W metodzie onCreate()
metody Activity
ustaw plik układu jako widok treści. Jeśli na przykład plik układu ma nazwę main.xml
, użyj tego kodu:
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) }
Pobierz nick dla fragmentu, wywołując metodę FragmentManager.findFragmentById()
, przekazując mu identyfikator zasobu elementu <fragment>
.
Zauważ, że identyfikator zasobu R.id.streetviewpanorama
jest automatycznie dodawany do projektu Androida podczas tworzenia pliku układu.
Następnie użyj getStreetViewPanoramaAsync()
, aby ustawić wywołanie zwrotne dla danego fragmentu.
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)
Aby pobrać niepustą instancję StreetViewPanorama
, która jest gotowa do użycia, użyj metody wywołania zwrotnego onStreetViewPanoramaReady(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) }
Więcej informacji o konfigurowaniu stanu początkowego
W przeciwieństwie do mapy nie można skonfigurować początkowego stanu panoramy Street View za pomocą kodu XML. Możesz jednak skonfigurować panoramę automatycznie, przekazując obiekt StreetViewPanoramaOptions
z określonymi opcjami.
- Jeśli używasz obiektu
StreetViewPanoramaFragment
, użyj statycznej metody fabrycznejStreetViewPanoramaFragment.newInstance(StreetViewPanoramaOptions options)
, aby utworzyć fragment i przekazać niestandardowe skonfigurowane opcje. - Jeśli używasz obiektu
StreetViewPanoramaView
, użyj konstruktoraStreetViewPanoramaView(Context, StreetViewPanoramaOptions)
i podaj opcje skonfigurowane niestandardowe.
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) )
Więcej o StreetViewPanoramaFragment
StreetViewPanoramaFragment
to podklasa klasy Android Fragment, która umożliwia umieszczenie panoramy Street View we fragmencie Androida. Obiekty StreetViewPanoramaFragment
działają jako kontenery na panoramę i zapewniają dostęp do obiektu StreetViewPanorama
.
Widok panoramiczny Street View
StreetViewPanoramaView
, podklasa klasy Android View
, umożliwia umieszczanie panoramy Street View w Androidzie View
. View
reprezentuje prostokątny obszar ekranu i jest podstawowym elementem składowym aplikacji i widżetów na Androida.
StreetViewPanoramaView
, podobnie jak StreetViewPanoramaFragment
, działa jako kontener na panoramę, ujawnia główne funkcje obiektu StreetViewPanorama
. Użytkownicy tej klasy muszą przekazywać wszystkie metody cyklu życia aktywności (takie jak onCreate()
, onDestroy()
, onResume()
i onPause())
do odpowiednich metod w klasie StreetViewPanoramaView
).
Dostosowywanie funkcji kontrolowanych przez użytkownika
Domyślnie podczas oglądania panoramy Street View użytkownik ma dostęp do tych funkcji: przesuwania, powiększania i przechodzenia do sąsiednich panoram. Gesty zarządzane przez użytkownika możesz włączać i wyłączać, korzystając z metod na stronie StreetViewPanorama
. Po wyłączeniu gestu nadal można wprowadzać zmiany zautomatyzowane.
Ustaw lokalizację panoramy
Aby ustawić lokalizację panoramy Street View, zadzwoń pod numer StreetViewPanorama.setPosition()
, mijając LatLng
.
Możesz też przekazywać parametry radius
i source
jako parametry opcjonalne.
Promień jest przydatny, gdy chcesz poszerzyć lub
zawęzić obszar, na którym Street View będzie szukać pasującej panoramy. Promień 0 oznacza, że panorama musi być połączona dokładnie z określonym LatLng
.
Domyślny promień to 50 metrów. Jeśli w obszarze dopasowania jest więcej niż jedna panorama, interfejs API zwróci najlepszą odpowiedź.
Źródło jest przydatne, gdy chcesz ograniczyć widok Street View do przeglądania panoram znajdujących się na zewnątrz. Domyślnie panoramy Street View mogą znajdować się w muzeach, budynkach publicznych, kawiarniach i firmach. Panoramy zewnętrzne mogą nie istnieć dla podanej lokalizacji.
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)
Możesz też ustawić lokalizację na podstawie identyfikatora panoramy, przekazując panoId
do StreetViewPanorama.setPosition()
.
Aby pobrać identyfikator sąsiedniej panoramy, najpierw użyj getLocation()
, by pobrać StreetViewPanoramaLocation
.
Ten obiekt zawiera identyfikator bieżącej panoramy i tablicę obiektów StreetViewPanoramaLink
, z których każdy zawiera identyfikator połączonej z bieżącą panoramą.
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) }
Powiększanie i pomniejszanie
Poziom powiększenia możesz zmieniać automatycznie, ustawiając StreetViewPanoramaCamera.zoom
.
Po ustawieniu powiększenia na 1,0
obraz będzie powiększony 2-krotnie.
W poniższym fragmencie kodu użyto funkcji StreetViewPanoramaCamera.Builder()
do skonstruowania nowej kamery, zmieniając ustawienia jej położenia i nachylania, zwiększając przy tym powiększenie o pięćdziesiąt procent.
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()
Ustawienie orientacji aparatu (punktu widzenia)
Możesz określić orientację kamery Street View, ustawiając kierowanie i pochylenie na StreetViewPanoramaCamera
.
- dźwigając
- Kierunek, w którym skierowany jest aparat, określony w stopniach, od rzeczywistej północy rzeczywistej w kierunku ruchu wskazówek zegara, wokół miejsca kamery. Prawdziwa północ to 0, wschód to 90, południe to 180, zachód – 270.
- przechyl
- Oś Y przechyla się w górę lub w dół. Zakres wynosi od –90 do 90, przy czym -90 patrz prosto w dół, 0 wyśrodkowuje na horyzoncie, a 90 patrz prosto w górę. Wariancja jest mierzona na podstawie początkowego domyślnego nachylenia kamery, które często (ale nie zawsze) jest płaskie w poziomie. Na przykład zdjęcie wykonane na wzniesieniu ma prawdopodobnie domyślne kąty nachylenia, które nie są poziome.
Poniższy fragment kodu korzysta z funkcji StreetViewPanoramaCamera.Builder()
, aby utworzyć nową kamerę z powiększeniem i nachyleniem istniejącej kamery oraz przesunięciem obrotu o 30 stopni w lewo.
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()
Ten fragment przechyla kamerę w górę o 30 stopni.
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()
Animuj ruchy kamery
Aby animować ruch kamery, wywołaj metodę StreetViewPanorama.animateTo()
.
Animacja interpoluje między bieżącymi atrybutami kamery i nowymi atrybutami. Jeśli chcesz przejść bezpośrednio do kamery bez animacji, możesz ustawić czas trwania na 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)
Poniższy obraz przedstawia wynik, gdy zaplanujesz uruchamianie powyższej animacji co 2000 milisekund z użyciem metody Handler.postDelayed()
:
