Street View

Wybierz platformę: Android iOS JavaScript

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:

Próbki z Kotlina:

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:

Wersja demonstracyjna panoramy Street View

W skrócie:

  1. 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 elementu Activity.
  2. Zaimplementuj interfejs OnStreetViewPanoramaReadyCallback i użyj metody wywołania zwrotnego onStreetViewPanoramaReady(StreetViewPanorama), aby uzyskać uchwyt obiektu StreetViewPanorama.
  3. 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.

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

Wersja demonstracyjna animacji panoramy Street View