Google Street View udostępnia panoramiczne widoki 360° z wyznaczonych dróg na całym obszarze objętym usługą.
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, o ich celu podróży lub dowolnym 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 ulicę
Wyświetl panoramę w aplikacji. W interfejsie panorama jest reprezentowana przez obiekt StreetViewPanoramaFragment
lub StreetViewPanoramaView
.
Przykładowe fragmenty kodu
Repozytorium API Apigee na GitHubie zawiera: przykładowe zastosowania Street View.
Przykłady kodu Kotlin:
- StreetViewPanoramaBasicDemoActivity: podstawy korzystania ze Street View.
- StreetViewPanoramaEventsDemoActivity: nasłuchiwanie zdarzeń
- StreetViewPanoramaNavigationDemoActivity: sterowanie Automatyczne panoramy Street View
- StreetViewPanoramaOptionsDemoActivity: zmiana opcji interfejsu i gestyk
- 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 ze Street View.
- StreetViewPanoramaEventsDemoActivity: nasłuchiwanie zdarzeń
- StreetViewPanoramaNavigationDemoActivity: sterowanie Automatyczne panoramy Street View
- StreetViewPanoramaOptionsDemoActivity: zmiana opcji interfejsu i gestyk
- StreetViewPanoramaViewDemoActivity: korzystanie z elementu
StreetViewPanoramaView
(zamiast Fragment). - SplitStreetViewPanoramaAndMapDemoActivity: tworzenie aktywności wyświetlającej widok ulicy i mapę.
Omówienie Street View w Maps SDK 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 to zdjęcie lub zestaw zdjęć, które zapewniają pełny 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ół). Uzyskana panorama 360° definiuje projekcję na sferze, a obraz jest nałożony na dwuwymiarową powierzchnię tej sfery.
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
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ł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.
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 to sprawdza, czy lokalizacja jest obsługiwana przez Street View. Aby uniknąć błędów podczas dodawania panoramy Street View do aplikacji na Androida, wywołaj tę funkcję narzędzia do obsługi metadanych i dodawaj 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 dodania Street View do aplikacji. Następnie dowiedz się więcej o fragmentach, widokach i dostosowywaniu panoramy.
Dodawanie panoramy Street View
Aby dodać taką panoramę Street View:
W skrócie:
- 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ładuActivity
. - 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.
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"/>
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>
.
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
onStreetViewPanoramaReady(StreetViewPanorama)
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ć panoramę programowo, przekazując obiekt StreetViewPanoramaOptions
zawierający 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ć niestandardowe, 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. Obiekty StreetViewPanoramaFragment
działają jako kontenery panoramy i zapewniają 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
to prostokątny obszar ekranu, który jest podstawowym elementem 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 tej klasy muszą przekazać 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 przeglądania użytkownicy mają dostęp do tych funkcji
panoramę Street View: 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
. Gdy gest jest wyłączony, nadal można wprowadzać zmiany programowe.
Ustawianie lokalizacji panoramy
Aby ustawić lokalizację panoramy Street View, wybierz
StreetViewPanorama.setPosition()
, uzyskując wynik LatLng
.
Jako parametry opcjonalne możesz też podać wartości radius
i source
.
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, aby Street View szukało tylko panoram na zewnątrz. Domyślnie panoramy Street View mogą znajdować się w muzeum, budynku użyteczności publicznej, kawiarni lub firmie. 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ć programowo, ustawiając wartość StreetViewPanoramaCamera.zoom
.
Ustawienie powiększenia na 1,0 powiększy obraz
o współczynnik 2.
Ten fragment kodu używa StreetViewPanoramaCamera.Builder()
do utworzenia
z nową kamerą z przechylaniem i położeniem istniejącej kamery, a jednocześnie
przybliżenie 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.
Orientację kamery Street View możesz określić, ustawiając kierunek i przechylenie w StreetViewPanoramaCamera
.
- kierunek
- 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.
- przechylenie
- Przechyl oś Y 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 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();
Animowanie ruchów kamery
Aby animować ruchy kamery, wywołaj funkcję 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);
Na poniższym obrazie widać, co się stanie, gdy zaplanowana animacja będzie uruchamiana co 2000 ms przy użyciu Handler.postDelayed()
: