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:
- StreetViewPanoramaBasicDemoActivity: podstawy korzystania z Street View
- StreetViewPanoramaEventsDemoActivity: odsłuchiwanie zdarzeń
- StreetViewPanoramaNavigationDemoActivity: sterowanie Automatyczne panoramy Street View
- StreetViewPanoramaOptionsDemoActivity: zmiana interfejsu użytkownika i opcje gestów
- StreetViewPanoramaViewDemoActivity: korzystanie z
StreetViewPanoramaView
(zamiast fragmentu) - SplitStreetViewPanoramaAndMapDemoActivity: za pomocą tagu aktywność, która wyświetla Street View i mapę
Przykłady w języku Java:
- StreetViewPanoramaBasicDemoActivity: podstawy korzystania z Street View
- StreetViewPanoramaEventsDemoActivity: odsłuchiwanie zdarzeń
- StreetViewPanoramaNavigationDemoActivity: sterowanie Automatyczne panoramy Street View
- StreetViewPanoramaOptionsDemoActivity: zmiana interfejsu użytkownika i opcje gestów
- StreetViewPanoramaViewDemoActivity: korzystanie z
StreetViewPanoramaView
(zamiast fragmentu) - SplitStreetViewPanoramaAndMapDemoActivity: utworzenie aktywność, która wyświetla Street View i mapę
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:
W skrócie:
- 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 dlaActivity
. - Zaimplementuj tag
OnStreetViewPanoramaReadyCallback
i użyj funkcjionStreetViewPanoramaReady(StreetViewPanorama)
wywołania zwrotnego, aby pobrać uchwyt dlaStreetViewPanorama
obiekt. - 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.
- Jeśli używasz parametru
StreetViewPanoramaFragment
,StreetViewPanoramaFragment.newInstance(StreetViewPanoramaOptions options)
. statyczna metoda fabryczna, by utworzyć fragment i przekazać go skonfigurowane opcje. - Jeśli używasz parametru
StreetViewPanoramaView
,StreetViewPanoramaView(Context, StreetViewPanoramaOptions)
. za pomocą konstruktora i przekazać własne, skonfigurowane 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
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 9>0) 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()
: