Street View

Wybierz platformę: Android iOS JavaScript

Google Street View umożliwia oglądanie panoramicznych zdjęć w 360° z wyznaczonych dróg na całym obszarze objętym zasięgiem.

W tym filmie pokazujemy, jak używać usługi Street View, aby przekazywać użytkownikom możliwość zapoznania się z adresem na mapie w prawdziwym świecie, istotne informacje na temat ich celu lub miejsca, które ich interesuje.

zasięg dostępny w Mapach Google, Interfejs Android API w wersji 2 jest taki sam jak w przypadku aplikacji Mapy Google na Androida. urządzenia. Możesz dowiedzieć się więcej o Street View i zobaczyć obsługiwane obszary na interaktywnej mapy w artykule Street View – informacje.

Klasa StreetViewPanorama modeluje ulicę Wyświetl panoramę w aplikacji. W Twoim interfejsie reprezentowana jest panorama autor: StreetViewPanoramaFragment lub StreetViewPanoramaView.

Przykładowe fragmenty kodu

Repozytorium API Apigee na GitHubie zawiera: przykładowe zastosowania Street View.

Przykłady z usługi Kotlin:

Przykłady w języku Java:

Omówienie funkcji Street View w pakiecie SDK Map Google na Androida

Maps SDK na Androida zapewnia usługę Street View w zakresie na zdjęciach używanych w Google Street View. Obrazy są zwracane jako i panoramy.

Każda panorama Street View jest obrazem lub zestawem zdjęć przedstawiających pełen Widok 360° z jednego miejsca. Obrazy są dopasowane do kształtu walcowego równoodległościowego Odwzorowanie (Plate Carrée) obejmujące 360 stopni w poziomie. (pełne zawinięcie) i od 180 stopni w pionie (od prosto w dół). Powstała w ten sposób panorama 360 stopni przedstawia odwzorowanie z obrazem „zwiniętym w dwuwymiarową powierzchnię” tej kuli.

StreetViewPanorama udostępnia przeglądający, który renderuje i robić sferę z aparatem pośrodku. Możesz manipulować StreetViewPanoramaCamera aby sterować powiększeniem i orientacją (pochyleniem i położeniem kamery).

Rozpocznij

Konfigurowanie projektu

Postępuj zgodnie z przewodnikiem dla początkujących, aby skonfigurować Projekt Google Maps SDK na Androida.

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

Biblioteka klienta pakietu SDK Usług Google Play zawiera kilka Przykłady ze Street View, które możesz zaimportować do swojego projektu i wykorzystywać je jako podstawę do rozwoju. We wprowadzeniu znajdziesz wytycznych na temat importowania próbek.

biblioteki narzędziowej pakietu Maps SDK na Androida, to biblioteka klas typu open source, która przydaje się aplikacji. Repozytorium GitHub zawiera Narzędzie do edytowania metadanych Street View To narzędzie sprawdza, czy lokalizacja jest obsługiwana przez Street View Można uniknąć błędów podczas dodawania Panorama Street View z aplikacją na Androida po wywołaniu metadanych i dodawać tylko panoramę Street View jeśli odpowiedź to OK.

Korzystanie z interfejsu API

Wykonaj te instrukcje, aby dodać panoramę Street View na urządzeniu z Androidem fragment. To najprostszy sposób dodania Street View do aplikacji. Potem dowiedz się więcej o fragmentach, widokach i dostosowywaniu panoramy.

Dodawanie panoramy Street View

Aby dodać taką panoramę Street View:

Wersja demonstracyjna panoramy Street View

W skrócie:

  1. Dodaj obiekt Fragment do obiektu Activity. który będzie przetwarzać panoramę Street View. Najłatwiej to zrobić, dodaj element <fragment> do pliku układu dla Activity.
  2. Zaimplementuj tag OnStreetViewPanoramaReadyCallback i użyj funkcji onStreetViewPanoramaReady(StreetViewPanorama) wywołania zwrotnego, aby pobrać uchwyt dla StreetViewPanorama obiekt.
  3. Zadzwoń pod numer getStreetViewPanoramaAsync() na aby zarejestrować wywołanie zwrotne.

Poniżej znajdziesz więcej informacji o poszczególnych krokach.

Dodaj fragment

Dodaj element <fragment> do pliku układu aktywności, aby zdefiniować Obiekt Fragment. W tym elemencie ustaw class do 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 edytować panoramę Street View w aplikacji, musisz zaimplementować OnStreetViewPanoramaReadyCallback i ustawić wystąpienie wywołania zwrotnego w argumencie StreetViewPanoramaFragment lub StreetViewPanoramaView obiekt. W tym samouczku użyto StreetViewPanoramaFragment, ponieważ to najprostszy sposób dodawania Street View do Twojej aplikacji. Pierwszym krokiem jest wdrożenie interfejsu wywołania zwrotnego:

Kotlin



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

      

Java


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

      

W: Activity: onCreate() 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);
}

      

Uzyskaj uchwyt fragmentu, wywołując FragmentManager.findFragmentById() przez przekazywanie jej identyfikatora zasobu elementu <fragment>. Zwróć uwagę, że identyfikator zasobu R.id.streetviewpanorama jest dodawany automatycznie do w projekcie Androida podczas tworzenia pliku układu.

Następnie użyj narzędzia getStreetViewPanoramaAsync() aby ustawić wywołanie zwrotne dla fragmentu.

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 onStreetViewPanoramaReady(StreetViewPanorama) metody wywołania zwrotnego do pobrania niepustej instancji StreetViewPanorama, gotowy 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 przeciwieństwie do mapy nie można skonfigurować początkowego stanu Panorama Street View utworzona w pliku XML. Możesz jednak skonfigurować programowo, przesyłając panoramę StreetViewPanoramaOptions obiekt zawierające 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 klasy Fragment Androida i umożliwiają umieszczanie zdjęć Street View we fragmencie Androida. StreetViewPanoramaFragment obiektów działa jako kontenery na panoramę oraz dostęp do obiektu StreetViewPanorama.

StreetViewPanoramaView

StreetViewPanoramaView, podklasa Androida View, możesz umieścić zdjęcia Street View panoramę w aplikacji View na urządzeniu z Androidem. View reprezentuje prostokątny obszar ekranu i jest podstawowym elementem składowym aplikacji i widżetów na Androida. Podobnie jak StreetViewPanoramaFragment, element StreetViewPanoramaView działa jako kontenera na panoramę, prezentując najważniejsze funkcje za pomocą StreetViewPanorama obiekt. Użytkownicy tych zajęć muszą przekazać całą aktywność metod cyklu życia (np. onCreate(), onDestroy(), onResume() i onPause()) do odpowiednich metod w klasie StreetViewPanoramaView.

Dostosowywanie funkcji kontrolowanej przez użytkownika

Domyślnie podczas przeglądania użytkownicy mają dostęp do tych funkcji panoramę Street View: przesuwanie, powiększanie i podróżowanie do sąsiednich panoram. Możesz włączać i wyłączać gesty kontrolowane przez użytkowników za pomocą metod na stronie StreetViewPanorama. Zautomatyzowana obsługa reklam i zmiany nadal są możliwe, nawet jeśli gest jest wyłączony.

Ustaw lokalizację panoramy

Aby ustawić lokalizację panoramy Street View, wybierz StreetViewPanorama.setPosition(), uzyskując wynik LatLng. Parametr radius i source możesz też przekazywać jako parametry opcjonalne.

Promień jest przydatny, jeśli chcesz poszerzyć lub zawęzić obszar, w którym Street View będzie szukać pasującej panoramy. Promień Wartość 0 oznacza, że panorama musi być połączona z konkretnym obiektem LatLng. Domyślny promień to 50 metrów. Jeśli w pasujący obszar, interfejs API zwróci najlepszy wynik.

Źródło jest przydatne, jeśli chcesz ograniczyć widok Street View do wyszukiwać tylko panoramy na zewnątrz. Domyślnie Street View można robić zdjęcia wnętrz obiektów, takich jak muzea, budynki publiczne, kawiarnie czy firmy. W danej lokalizacji mogą nie być dostępne panoramy na zewnątrz.

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 w ten sposób panoId do StreetViewPanorama.setPosition().

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

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ć automatycznie, ustawiając StreetViewPanoramaCamera.zoom Ustawienie powiększenia na 1,0 spowoduje powiększenie obrazu 2-krotnie.

Ten fragment kodu używa StreetViewPanoramaCamera.Builder() do utworzenia z nową kamerą z przechylaniem i ustawieniem dotychczasowej kamery, a jednocześnie zwiększyć powiększenie o pięćdziesiąt procent.

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

      

Ustaw orientację (punkt widzenia) aparatu.

Możesz określić orientację aparatu Street View, ustawiając wartości położenie i przechylenie na StreetViewPanoramaCamera.

dźwigając
Kierunek, w którym skierowany jest aparat, podany w stopniach w prawo od prawdziwej północy, wokół lokalizacji kamery. Rzeczywista północ to 0, wschód to 90, południe to 180, a zachód to 270.
przechyl
Oś Y pochyla się w górę lub w dół. Zakres wynosi od -90 do 0–90 (przy tym -90) patrzy prosto w dół, 0 na środku horyzontu, 90 patrzące prosto w górę. Wariancję jest mierzona na podstawie początkowego domyślnego tonu kamery, który jest często (ale nie zawsze) płaska w poziomie. Na przykład zdjęcie zrobione prawdopodobnie będzie mieć domyślne odchylenie inne niż poziome.

Ten fragment kodu używa StreetViewPanoramaCamera.Builder() do utworzenia z zoomem i przechyleniem dotychczasowej kamery, jednocześnie zmieniając przesunęliśmy go 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 przechyla kamerę w górę 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();

      

Animuj ruchy kamery

Aby animować ruchy kamery, wywołaj funkcję StreetViewPanorama.animateTo() Animacja interpoluje między bieżącymi atrybutami kamery a nowym atrybutów aparatu. 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 pokazuje wynik, gdy zaplanujesz uruchomienie powyższej animacji co 2000 milisekund przy użyciu Handler.postDelayed():

Demonstracja animacji panoramicznej Street View