Google Street View rozciąga się z wyznaczonych ulic w panoramicznym widoku 360°.
Ten film pokazuje, jak korzystać z usługi Street View, by udostępniać użytkownikom rzeczywistość w adresie na mapie, dostarczając mu istotny kontekst dotyczący miejsca docelowego lub miejsca, które ich interesuje.
Pokrycie dostępne w interfejsie API Map Google na Androida w wersji 2 jest takie samo jak w aplikacji Mapy Google na urządzeniu z Androidem. Więcej informacji o Street View i obsługiwanych obszarach znajdziesz na interaktywnej mapie w artykule Informacje o Street View.
Klasa StreetViewPanorama
modeluje panoramę Street View w Twojej aplikacji. W interfejsie użytkownika panorama jest reprezentowana przez obiekt StreetViewPanoramaFragment
lub StreetViewPanoramaView
.
Przykładowe fragmenty kodu
Repozytorium ApiDemos w serwisie GitHub zawiera przykłady, które pokazują użycie Street View.
Przykłady w języku Java:
- Street ViewPanoramaBasicDemoActivity: podstawy korzystania ze Street View
- StreetViewPanoramaEventsDemoActivity: nasłuchiwanie zdarzeń
- StreetViewPanoramaDemoActivity: automatyczne zarządzanie panoramami Street View.
- StreetViewPanoramaOptionsDemoActivity: zmienianie opcji interfejsu i gestów
- StreetViewPanoramaViewDemoActivity: za pomocą
StreetViewPanoramaView
(zamiast fragmentu) - SplitStreetViewPanoramaAndMapDemoActivity: aktywność, w której wyświetlane są zdjęcia Street View i mapa.
Przykłady Kotlina:
- Street ViewPanoramaBasicDemoActivity: podstawy korzystania ze Street View
- StreetViewPanoramaEventsDemoActivity: nasłuchiwanie zdarzeń
- StreetViewPanoramaDemoActivity: automatyczne zarządzanie panoramami Street View.
- StreetViewPanoramaOptionsDemoActivity: zmienianie opcji interfejsu i gestów
- StreetViewPanoramaViewDemoActivity: za pomocą
StreetViewPanoramaView
(zamiast fragmentu) - SplitStreetViewPanoramaAndMapDemoActivity: aktywność, w której wyświetlane są zdjęcia Street View i mapa.
Omówienie Street View w pakiecie Maps SDK na Androida
Pakiet SDK Map na Androida oferuje usługę Street View do pobierania zdjęć i manipulowania nimi w Google Street View. Obrazy są zwracane jako panoramy.
Każda panorama Street View to obraz lub zbiór zdjęć, które zapewniają pełny widok 360 stopni z jednego miejsca. Obrazy są zgodne z odwzorowaniem walcowym równoodległościowym (Plate Carrée), który obejmuje 360 stopni w poziomie i 180 stopni w pionie (od prostej do prostej w dół). Otrzymana panorama 360° definiuje odwzorowanie na sferze, a obraz owinięty jest w dwuwymiarową powierzchnię tej kuli.
StreetViewPanorama
udostępnia go jako sferę, na której umieszczony jest aparat. Możesz zmieniać StreetViewPanoramaCamera
, aby kontrolować powiększenie i orientację (przechylanie i nośnik) kamery.
Pierwsze kroki
Aby skonfigurować pakiet SDK Map na Androida, postępuj zgodnie z przewodnikiem dla początkujących. Następnie dodaj panoramę Street View w sposób opisany poniżej.
Biblioteka klienta SDK usług Google Play zawiera kilka przykładów Street View, które możesz zaimportować do swojego projektu i użyć ich do programowania. Wskazówki dotyczące importowania próbek znajdziesz we wprowadzeniu.
Korzystanie z interfejsu API
Aby dodać panoramę Street View do fragmentu Androida, wykonaj poniższe czynności. To najprostsza metoda dodania Street View do aplikacji. Następnie przeczytaj o fragmentach, widokach i dostosowywaniu panoramy.
Dodaj panoramę Street View
Aby dodać panoramę Street View w ten sposób:

Podsumowanie:
- Dodaj obiekt Fragment do Aktywności, która obsługuje panoramę Street View. Najłatwiej to zrobić, dodając element
<fragment>
do pliku układuActivity
. - Zaimplementuj interfejs
OnStreetViewPanoramaReadyCallback
i użyj metody wywołania zwrotnegoonStreetViewPanoramaReady(StreetViewPanorama)
, aby uzyskać identyfikator obiektuStreetViewPanorama
. - Wywołaj
getStreetViewPanoramaAsync()
we fragmencie, aby zarejestrować wywołanie zwrotne.
Poniżej znajdziesz więcej informacji o każdym kroku.
Dodaj fragment
Dodaj element <fragment>
do pliku układu aktywności, aby zdefiniować obiekt Fragment. W tym elemencie ustaw dla atrybutu class
wartość 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ć z panoramy Street View w aplikacji, musisz wdrożyć interfejs OnStreetViewPanoramaReadyCallback
i ustawić instancję wywołania zwrotnego w obiekcie StreetViewPanoramaFragment
lub StreetViewPanoramaView
. W tym samouczku używamy StreetViewPanoramaFragment
, ponieważ jest to najprostsza metoda dodawania Street View do aplikacji. Pierwszym krokiem jest wdrożenie 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) }
Uchwyć fragment, wywołując FragmentManager.findFragmentById()
, przekazując mu identyfikator zasobu elementu <fragment>
.
Zwróć uwagę, że identyfikator zasobu R.id.streetviewpanorama
jest automatycznie dodawany do projektu na Androida podczas tworzenia pliku układu.
Następnie użyj wywołania getStreetViewPanoramaAsync()
, aby ustawić wywołanie zwrotne we fragmencie.
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ć niepuste wystąpienie StreetViewPanorama
, które jest gotowe 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 Street View w formacie XML. Można ją jednak skonfigurować automatycznie, przesyłając obiekt StreetViewPanoramaOptions
zawierający określone opcje.
- Jeśli używasz
StreetViewPanoramaFragment
, użyj statycznej metodyStreetViewPanoramaFragment.newInstance(StreetViewPanoramaOptions options)
, aby utworzyć fragment i przekazać konfigurowane opcje niestandardowe. - Jeśli używasz
StreetViewPanoramaView
, użyj konstruktoraStreetViewPanoramaView(Context, StreetViewPanoramaOptions)
i przekaż niestandardowe ustawienia.
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 i pozwala umieścić panoramę Street View we fragmencie Androida. Obiekty StreetViewPanoramaFragment
pełnią funkcję kontenerów i umożliwiają dostęp do obiektu StreetViewPanorama
.
Widok Street View
StreetViewPanoramaView
, podklasa klasy Android View
, umożliwia umieszczenie 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.
Podobnie jak StreetViewPanoramaFragment
, StreetViewPanoramaView
pełni funkcję kontenera na panoramę, ujawniając główną funkcję za pomocą obiektu StreetViewPanorama
. Użytkownicy tej klasy muszą przekazać wszystkie metody cyklu życia aktywności (takie jak onCreate()
, onDestroy()
, onResume()
i onPause())
) do odpowiednich metod z klasy StreetViewPanoramaView
.
Dostosowywanie funkcji kontrolowanych przez użytkownika
Domyślnie w widoku Street View użytkownik ma do dyspozycji następujące funkcje: panorama, powiększenie i podróżowanie do sąsiednich. Możesz włączać i wyłączać gesty kontrolowane przez użytkownika za pomocą metod w StreetViewPanorama
. Zautomatyzowane zmiany są nadal możliwe, nawet gdy gest jest wyłączony.
Ustaw lokalizację panoramy
Aby ustawić lokalizację panoramy Street View, wywołaj
StreetViewPanorama.setPosition()
, przekazując LatLng
.
Parametry radius
i source
możesz też przekazywać jako parametry opcjonalne.
Promień jest przydatny, gdy chcesz poszerzyć lub zawęzić
zakres, dla którego Street View będzie szukać pasującej panoramy. Promień 0 oznacza, że panorama musi być dokładnie połączona z określoną wartością LatLng
.
Domyślny promień to 50 metrów. Jeśli w obszarze dopasowania jest więcej niż jedna panorama, API zwróci najlepsze dopasowanie.
Źródło jest przydatne, jeśli chcesz ograniczyć widok Street View do zdjęć panoramicznych znajdujących się na zewnątrz. Domyślnie widoki Street View mogą się znajdować w takich miejscach jak muzea, budynki publiczne, kawiarnie i firmy. Pamiętaj, że w przypadku danej lokalizacji mogą nie być dostępne panoramy na zewnątrz.
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ąsiednich panoram, najpierw użyj metody getLocation()
do pobrania StreetViewPanoramaLocation
.
Ten obiekt zawiera identyfikator bieżącej panoramy i tablicę obiektów StreetViewPanoramaLink
, z których każdy zawiera identyfikator połączony z bieżącą.
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 zmienić automatycznie przy użyciu ustawienia StreetViewPanoramaCamera.zoom
.
Ustawienie powiększenia na 1,0 powoduje powiększenie obrazu o współczynniku 2.
Fragment kodu poniżej wykorzystuje fragment StreetViewPanoramaCamera.Builder()
, aby utworzyć nowy aparat z pochyleniem i pozycją istniejącego aparatu, a jednocześnie zwiększyć 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()
Ustawianie orientacji kamery (punkt widzenia)
Orientację kamery Street View możesz określić, ustawiając odpowiednio pochylenie i nachylenie StreetViewPanoramaCamera
.
- dźwigając
- Kierunek, w którym kamera jest skierowana, podana w stopniach od prawej do prawej, w pobliżu jej położenia. Prawdziwa północ to 0, wschód – 90, południe – 180, zachód – 270.
- przechyl
- Oś Y przechyla do góry lub do dołu. Zakres wynosi od -90 do 90, gdzie -90 to widok pionowy, 0 jest wyśrodkowany na horyzoncie, a 90 to pionowy. Wariant jest mierzony z początkowego domyślnego ustawienia kamery, czyli często (choć nie zawsze) płaskiego poziomego poziomu. Na przykład obraz wykonany na wzgórzu prawdopodobnie będzie miał domyślny ton, który nie jest poziomy.
Fragment kodu poniżej wykorzystuje StreetViewPanoramaCamera.Builder()
, aby stworzyć nowy aparat z powiększeniem i kątem nachylenia istniejącej kamery o 30 stopni zmieniający się 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 kodu 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()
Animacja ruchu kamery
Aby animować ruchy kamery, wywołaj
StreetViewPanorama.animateTo()
.
Animacja nakłada się na bieżące atrybuty kamery. 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ższa ilustracja przedstawia wynik, jeśli zgodnie z harmonogramem animacja powyżej ma być uruchamiana co 2000 milisekund za pomocą Handler.postDelayed()
:
