Street View

Wybierz platformę: Android iOS JavaScript

Google Street View udostępnia panoramiczne widoki 360° z wybranych dróg na całym obszarze objętym usługą.

Ten film pokazuje, jak możesz korzystać z usługi Street View, aby zapewnić użytkownikom realistyczne wrażenia z oglądania adresu na mapie i uzyskać przydatne informacje o miejscu docelowym lub dowolnym innym miejscu, które ich interesuje.

Zakres dostępności Map Google w interfejsie API Androida w wersji 2 jest taki sam jak w aplikacji Mapy Google na urządzeniu z Androidem. Więcej informacji o Street View oraz interaktywną mapę z obsługiwanymi obszarami znajdziesz na stronie Street View – informacje.

Klasa StreetViewPanorama modeluje w aplikacji panoramę Street View. W Twoim interfejsie panorama jest reprezentowana przez obiekt StreetViewPanoramaFragment lub StreetViewPanoramaView.

Przykładowe fragmenty kodu

Repozytorium API Apigee na GitHubie zawiera przykłady, które pokazują wykorzystanie Street View.

Przykłady kodu Kotlin:

Przykłady w języku Java:

Omówienie Street View w Maps SDK na Androida

Pakiet SDK Map na Androida udostępnia usługę Street View, która umożliwia pobieranie i modyfikowanie zdjęć używanych w Google Street View. Obrazy są zwracane jako panoramy.

Każda panorama Street View to zdjęcie lub zestaw zdjęć, które zapewniają pełny widok 360° z jednego miejsca. Obrazy są zgodne z projekcją równokątną (Plate Carrée), która obejmuje widok poziomy o 360° (pełny obrót) i widok pionowy o 180° (od góry do dołu). Uzyskana panorama 360° definiuje projekcję na sferze, a obraz jest nałożony na dwuwymiarową powierzchnię tej sfery.

StreetViewPanorama umożliwia renderowanie panoramy z aparatem umieszczonym w jej środku. Możesz manipulować StreetViewPanoramaCamera, aby kontrolować powiększenie i orientację (przechylenie i kierunek) kamery.

Rozpocznij

Konfigurowanie projektu

Aby skonfigurować projekt pakietu SDK Map na Androida, postępuj zgodnie z przewodnikiem po rozpoczęciu.

Zanim dodasz panoramę, sprawdź dostępność panoramy Street View

Biblioteka klienta pakietu SDK Usług Google Play zawiera kilka przykładów Street View, które możesz zaimportować do swojego projektu i wykorzystać jako podstawę podczas programowania. Więcej informacji o importowaniu próbek znajdziesz w wprowadzeniu.

Biblioteka narzędziowa pakietu SDK Map na Androida to biblioteka open source zawierająca klasy przydatne w różnych aplikacjach. W repozytorium GitHub znajduje się narzędzie do obsługi metadanych Street View. Narzędzie sprawdza, czy lokalizacja jest obsługiwana przez Street View. Możesz uniknąć błędów podczas dodawania panoramy Street View do aplikacji na Androida, wywołując to narzędzie do metadanych i dodając panoramę Street View tylko wtedy, gdy odpowiedź to OK.

Korzystanie z interfejsu API

Aby dodać panoramę Street View do fragmentu na Androidzie, wykonaj podane niżej czynności. To najprostszy sposób dodawania Street View do aplikacji. Następnie dowiedz się więcej o fragmentach, widokach i dostosowywaniu panoramy.

Dodawanie panoramy Street View

Aby dodać panoramę Street View, taką jak ta:

Demonstracja panoramy Street View

W skrócie:

  1. Dodaj do działalności obiekt Fragment, który będzie obsługiwać panoramę Street View. Najłatwiej to zrobić, dodając element <fragment> do pliku układu Activity.
  2. Zaimplementuj interfejs OnStreetViewPanoramaReadyCallback i użyj metody wywołania zwrotnego onStreetViewPanoramaReady(StreetViewPanorama), aby uzyskać uchwyt do obiektu StreetViewPanorama.
  3. Aby zarejestrować wywołanie zwrotne, wywołaj funkcję getStreetViewPanoramaAsync() w fragmentach.

Poniżej znajdziesz więcej informacji o każdym z tych kroków.

Dodawanie fragmentu

Dodaj element <fragment> do pliku układu aktywności, aby zdefiniować obiekt Fragment. 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"/>

Dodawanie kodu Street View

Aby korzystać z panoramy Street View w aplikacji, musisz zaimplementować interfejs OnStreetViewPanoramaReadyCallback i ustawić instancję wywołania zwrotnego w obiekcie StreetViewPanoramaFragment lub StreetViewPanoramaView. W tym samouczku używamy interfejsu StreetViewPanoramaFragment, ponieważ jest to najprostszy sposób dodania Street View do aplikacji. Pierwszym krokiem jest wdrożenie interfejsu wywołania zwrotnego:

Kotlin

class StreetViewActivity : AppCompatActivity(), OnStreetViewPanoramaReadyCallback {
    // ...
}

      

Java

class StreetViewActivity extends AppCompatActivity implements OnStreetViewPanoramaReadyCallback {
    // ...
}

      

onCreate()metodzie 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:

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);
}

      

Aby uzyskać uchwyt do fragmentu, wywołaj funkcję FragmentManager.findFragmentById(), przekazując jej identyfikator zasobu elementu <fragment>. Podczas kompilowania pliku układu identyfikator zasobu R.id.streetviewpanorama jest automatycznie dodawany do projektu Androida.

Następnie użyj getStreetViewPanoramaAsync(), aby ustawić wywołanie zwrotne w fragmentach.

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);

      

Użyj metody wywołania zwrotnego onStreetViewPanoramaReady(StreetViewPanorama), aby pobrać instancję StreetViewPanorama, która nie jest równa NULL i jest gotowa do użycia.

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);
}

      

Więcej informacji o konfigurowaniu stanu początkowego

W odróżnieniu od mapy nie można skonfigurować początkowego stanu panoramy Street View za pomocą pliku XML. Możesz jednak skonfigurować panoramę automatycznie, przekazując obiekt StreetViewPanoramaOptions zawierający określone opcje.

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));

      

Więcej o StreetViewPanoramaFragment

StreetViewPanoramaFragment jest podklasą klasy Android Fragment i pozwala umieszczać panoramy Street View w fragmentach Androida. Obiekty StreetViewPanoramaFragment działają jako kontenery panoramy i zapewniają dostęp do obiektu StreetViewPanorama.

StreetViewPanoramaView

StreetViewPanoramaView, podklasa klasy Android View, pozwala umieścić panoramę Street View w urządzeniu View Androida. View reprezentuje prostokątny obszar ekranu i jest podstawowym elementem składowym aplikacji i widżetów na Androida. Podobnie jak StreetViewPanoramaFragment, obiekt StreetViewPanoramaView działa jako kontener dla panoramy, udostępniając podstawowe funkcje za pomocą obiektu StreetViewPanorama. Użytkownicy tej klasy muszą przekazać wszystkie metody cyklu życia aktywności (takie jak onCreate(), onDestroy(), onResume()onPause())) do odpowiednich metod w klasie StreetViewPanoramaView.

Dostosowywanie funkcji kontrolowanych przez użytkownika

Podczas wyświetlania panoramy Street View użytkownik domyślnie ma dostęp do tych funkcji: przesuwanie, powiększanie i podróżowanie do sąsiednich panoram. Gesty sterowane przez użytkownika możesz włączać i wyłączać za pomocą metod w StreetViewPanorama. Zmiany programowe są nadal możliwe, gdy gest jest wyłączony.

Ustawianie lokalizacji panoramy

Aby ustawić lokalizację panoramy Street View, wywołaj funkcję StreetViewPanorama.setPosition(), przekazując wartość LatLng. Parametry radius i source możesz też przekazywać jako parametry opcjonalne.

Promień jest przydatny, gdy chcesz poszerzyć lub zawęzić obszar, na którym Street View ma szukać pasującej panoramy. Promień równy 0 oznacza, że panorama musi być połączona dokładnie z określonym elementem LatLng. Domyślny promień to 50 metrów. Jeśli w pasującym obszarze znajduje się więcej niż 1 panoram, interfejs API zwróci najlepszą z nich.

Źródło jest przydatne, jeśli chcesz, aby Street View wyświetlał tylko panoramy na zewnątrz. Domyślnie panoramy Street View mogą znajdować się w muzeum, budynku użyteczności publicznej, kawiarni lub firmie. Pamiętaj, że w przypadku wybranej lokalizacji panoramy zewnętrzne mogą nie istnieć.

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);

      

Możesz też ustawić lokalizację na podstawie identyfikatora panoramy, przekazując parametr panoId do StreetViewPanorama.setPosition().

Aby pobrać identyfikator panoramy dla sąsiednich panoram, najpierw użyj metody getLocation(), aby pobrać StreetViewPanoramaLocation. Ten obiekt zawiera identyfikator bieżącej panoramy oraz tablicę obiektów StreetViewPanoramaLink, z których każdy zawiera identyfikator panoramy połączonej z bieżącą panoramą.

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);
}

      

Powiększanie i pomniejszanie

Poziom powiększenia możesz zmienić programowo, ustawiając wartość StreetViewPanoramaCamera.zoom. Ustawienie powiększenia na 1,0 powiększy obraz o współczynnik 2.

Ten fragment kodu używa funkcji StreetViewPanoramaCamera.Builder() do tworzenia nowej kamery z pochyleniem i kierunkiem istniejącej kamery, zwiększając przy tym powiększenie o 50%.

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();

      

Ustawianie orientacji kamery (punkt widzenia)

Orientację kamery Street View możesz określić, ustawiając kierunek i przechylenie w StreetViewPanoramaCamera.

dźwigając
Kierunek, w którym skierowana jest kamera, podany w stopniach w kole dookoła punktu kamery, licząc w prawo od geograficznego północy. Prawdziwa północ to 0, wschód to 90, południe to 180, a zachód to 270.
przechylenie
Oś Y pochyla się w górę lub w dół. Zakres wynosi od -90 do 0 do 90, przy czym -90 to spojrzenie w dół, 0 to środek horyzontu, a 90 to spojrzenie w górę. Odchylenie jest mierzone od początkowego domyślnego pochylenia kamery, które często (ale nie zawsze) jest w poziomie. Na przykład obraz zrobiony na wzgórzu będzie prawdopodobnie mieć domyślny kąt nachylenia, który nie będzie poziomy.

Ten fragment kodu używa funkcji StreetViewPanoramaCamera.Builder() do tworzenia nowej kamery z zoomem i pochyleniem z istniejącej kamery, przy czym zmienia kierunek o 30 stopni w lewo.

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();

      

Ten fragment kodu podnosi kamerę o 30 stopni.

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();

      

animować ruchy kamery,

Aby animować ruchy kamery, wywołaj StreetViewPanorama.animateTo(). Animacja interpoluje między bieżącymi atrybutami kamery a nowymi atrybutami kamery. Jeśli chcesz przejść bezpośrednio do kamery bez animacji, możesz ustawić czas trwania na 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);

      

Poniższy obraz przedstawia wynik, jeśli zaplanujesz uruchamianie powyższej animacji co 2000 milisekund z użyciem metody Handler.postDelayed():

Animacja panoramy Street View