Google Street View, belirlenen yollardan 360 derecelik panoramik görünümler sunar kapsama alanında kullanılabilir.
Bu videoda, kullanıcılarınıza yüksek kaliteli içerikler sunmak için Street View hizmetini haritada bir adresin gerçek dünya deneyimini varış noktaları veya ilgilendikleri yerlerle ilgili anlamlı bir bağlam sunabilir.
Google Haritalar üzerinden sunulan kapsama alanı Android API v2, Android cihazınızda Google Haritalar uygulamasınınkiyle aynıdır. olanak tanır. Street View hakkında daha fazla bilgi edinmek ve desteklenen alanları görmek için etkileşimli harita için Street View hakkında başlıklı makaleye göz atın.
StreetViewPanorama
sınıfı, Street'i modeller
Panoramayı uygulamanızda görüntüleyin. Kullanıcı arayüzünüzde, bir panorama temsil edilir.
StreetViewPanoramaFragment
veya
StreetViewPanoramaView
nesne olarak tanımlar.
Kod örnekleri
GitHub'daki ApiDemos deposu şunları içerir: Street View kullanımını gösteren örnekler.
Kotlin örnekleri:
- StreetViewPanoramaBasicDemoActivity: Sokak Görünümü
- StreetViewPanoramaEventsDemoActivity: Etkinlikleri dinleme
- StreetViewPanoramaNavigationDemoActivity: Kontrol Etme Programatik olarak Street View panoramaları
- StreetViewPanoramaOptionsDemoActivity: Kullanıcı arayüzünü ve hareket seçenekleri
- StreetViewPanoramaViewDemoActivity:
StreetViewPanoramaView
(bir Parça yerine) - SplitStreetViewPanoramaAndMapDemoActivity: Street View ve harita gösteren etkinlik
Java örnekleri:
- StreetViewPanoramaBasicDemoActivity: Sokak Görünümü
- StreetViewPanoramaEventsDemoActivity: Etkinlikleri dinleme
- StreetViewPanoramaNavigationDemoActivity: Kontrol Etme Programatik olarak Street View panoramaları
- StreetViewPanoramaOptionsDemoActivity: Kullanıcı arayüzünü ve hareket seçenekleri
- StreetViewPanoramaViewDemoActivity:
StreetViewPanoramaView
(bir Parça yerine) - SplitStreetViewPanoramaAndMapDemoActivity: Street View ve harita gösteren etkinlik
Android için Haritalar SDK'sında Street View'a genel bakış
Android için Haritalar SDK'sı, Google Haritalar API'larını kullanarak Google Street View'da kullanılan görüntülerin değiştirilmesi. Görüntüler panoramalar.
Her Street View panoraması, tüm ayrıntıları gösteren bir resim veya resim kümesidir. Tek bir konumdan 360 derece görünüm. Resimler eş dikdörtgene uygun 360 derece yatay görünüm içeren (Plate Carrée) projeksiyonu (tamamen sarmala) ve 180 derece dikey görünüm (düzden köşeye kadar) tepeden tırnağa). Ortaya çıkan 360 derecelik panorama, bir yüzeyin üzerinde bir projeksiyonu kürenin iki boyutlu yüzeyine sarmalanmış görüntüyle bir küre.
StreetViewPanorama
, otomatik olarak oluşturulan
merkezinde kamera bulunan bir küre gibi panorama oluşturun. Kullanıcılarınızın
StreetViewPanoramaCamera
kameranın yakınlaştırma ve yönünü (yatırma ve yönü) kontrol edin.
Başlayın
Proje kurma
Başlangıç kılavuzundaki talimatları uygulayarak Android projesi için Haritalar SDK'sı.
Panorama eklemeden önce Street View panoramasının kullanılabilirliğini kontrol edin
Google Play Hizmetleri SDK'sı istemci kitaplığında birkaç Projenize aktarabileceğiniz Street View örnekleri bir temel olarak kullanmak için harika bir fırsattır. Aşağıdaki girişe göz atın yönergelerine de uymanız gerekir.
Android Yardımcı Program Kitaplığı için Haritalar SDK'sı
açık kaynak kodlu bir kitaplıktır.
izin verir. GitHub deposunda bulunan
Street View meta veri yardımcı programı.
Bu yardımcı program bir konumun Google tarafından
Street View. Etiket eklerken hatalardan kaçınabilirsiniz:
Street View panoramasını bir Android uygulamasına yüklemek için şunu çağırın:
meta veri yardımcı programı ve yalnızca Street View panoraması ekleme
yanıt OK
ise
API'yi kullanma
Android cihaza Street View panoraması eklemek için aşağıdaki talimatları uygulayın olabilir. Uygulamanıza Street View eklemenin en basit yolu budur. Sonra parçalar, görünümler ve panoramayı özelleştirme hakkında daha fazla bilgi edinin.
Street View panoraması ekleyin
Bunun gibi bir Street View panoraması eklemek için aşağıdaki adımları uygulayın:
Özet olarak:
- Etkinlik'e bir Parça nesnesi ekleyin
Street View panoramasını işleyecek. Bunu yapmanın en kolay yolu
Activity
için düzen dosyasına bir<fragment>
öğesi ekleyin. - Şunu uygulayın:
OnStreetViewPanoramaReadyCallback
arayüzünü veonStreetViewPanoramaReady(StreetViewPanorama)
geri çağırma yöntemini kullanarakStreetViewPanorama
nesnesini tanımlayın. - Şu telefondan
getStreetViewPanoramaAsync()
numaralı telefonu arayın: parçasını kullanır.
Aşağıda her bir adımla ilgili daha fazla ayrıntı verilmiştir.
Parça ekle
Bir <fragment>
öğesi tanımlamak için etkinliğin düzen dosyasına bir
Parça nesnesi. Bu öğede class
özelliğini com.google.android.gms.maps.StreetViewPanoramaFragment
(veya
SupportStreetViewPanoramaFragment
).
Aşağıda, düzen dosyasındaki bir parçanın örneği verilmiştir:
<fragment android:name="com.google.android.gms.maps.StreetViewPanoramaFragment" android:id="@+id/streetviewpanorama" android:layout_width="match_parent" android:layout_height="match_parent"/>
Street View kodu ekleyin
Uygulamanızda Street View panoraması ile çalışmak için
OnStreetViewPanoramaReadyCallback
bir geri çağırma örneğini
StreetViewPanoramaFragment
veya
StreetViewPanoramaView
nesnesini tanımlayın. Bu eğiticide
StreetViewPanoramaFragment
, çünkü Street View eklemenin en basit yolu budur
ekleyin. İlk adım, geri çağırma arayüzünü uygulamaktır:
Kotlin
class StreetViewActivity : AppCompatActivity(), OnStreetViewPanoramaReadyCallback { // ... }
Java
class StreetViewActivity extends AppCompatActivity implements OnStreetViewPanoramaReadyCallback { // ... }
Activity
cihazınızdaki onCreate()
yöntemini kullanıyorsanız, düzen dosyasını içerik görünümü olarak ayarlayın. Örneğin, düzen dosyası
adı main.xml
ise şu kodu kullanın:
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); }
Çağrı yaparak parçaya bir herkese açık kullanıcı adı ekleyin
FragmentManager.findFragmentById()
<fragment>
öğenizin kaynak kimliğini iletin.
R.id.streetviewpanorama
kaynak kimliğinin otomatik olarak
Android projesini anlatacağım.
Ardından getStreetViewPanoramaAsync()
kullanın.
için geri çağırmayı unutmayın.
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);
Şunu kullanın:
onStreetViewPanoramaReady(StreetViewPanorama)
şunun boş olmayan bir örneğini almak için geri çağırma yöntemi:
StreetViewPanorama
, kullanıma hazır.
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); }
İlk durumu yapılandırma hakkında daha fazla bilgi
Bir haritadan farklı olarak,
XML üzerinden Street View panoraması. Ancak her bir yapılandırmanın
bu panoramayı programlı bir şekilde
StreetViewPanoramaOptions
nesne
belirttiğiniz seçenekleri içerir.
StreetViewPanoramaFragment
kullanıyorsanızStreetViewPanoramaFragment.newInstance(StreetViewPanoramaOptions options)
parçayı oluşturup özel yapılandırma seçenekleri.StreetViewPanoramaView
kullanıyorsanızStreetViewPanoramaView(Context, StreetViewPanoramaOptions)
oluşturucuyu ve özel yapılandırılmış seçeneklerinizi aktarın.
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));
StreetViewPanoramaFragment hakkında daha fazla bilgi
StreetViewPanoramaFragment
Android Parçası sınıfını kullanır ve bir Street View yerleştirmenize olanak tanır
bir Android parçasına yerleştiriyoruz. StreetViewPanoramaFragment
nesne şu şekilde hareket eder:
ve StreetViewPanorama
nesnesine erişim sağlar.
StreetViewPanoramaView
StreetViewPanoramaView
, Android'in bir alt sınıfıdır
View
sınıfı, Street View yerleştirmenize olanak tanır
Android View
'de panorama yapın. Bir View
, aşağıdaki dikdörtgen bölgesini temsil eder:
Android uygulamaları ve widget'ları için temel bir yapı taşıdır.
StreetViewPanoramaFragment
gibi, StreetViewPanoramaView
de
panorama için bir kapsayıcı oluşturur. Bu kapsayıcı,
StreetViewPanorama
nesne. Bu sınıfın kullanıcıları tüm etkinliği yönlendirmelidir
yaşam döngüsü yöntemleri (ör. onCreate()
, onDestroy()
, onResume()
ve
StreetViewPanoramaView
sınıfındaki ilgili yöntemlere onPause())
.
Kullanıcı tarafından kontrol edilen işlevleri özelleştirin
Varsayılan olarak, kullanıcı aşağıdaki işlevler
Street View panoraması: kaydırma, yakınlaştırma ve seyahat etme
bu özelliği kullanabilirsiniz. Kullanıcı tarafından kontrol edilen hareketleri etkinleştirebilir ve devre dışı bırakabilirsiniz
StreetViewPanorama
adresindeki yöntemlerle. Programatik
Hareket devre dışı bırakıldığında da değiştirilebilir.
Panoramanın konumunu ayarlayın
Street View panoramasının konumunu ayarlamak için şu numarayı arayın:
StreetViewPanorama.setPosition()
, LatLng
geçti.
radius
ve source
parametrelerini isteğe bağlı parametreler olarak da iletebilirsiniz.
Yarıçap, bir alanı genişletmek ya da alanı genişletmek istiyorsanız
Street View'ın eşleşen bir panorama arayacağı alanı daraltın. Yarıçap
0 değeri, panoramanın tam olarak belirtilen LatLng
öğesine bağlanması gerektiği anlamına gelir.
Varsayılan yarıçap 50 metredir. Aynı ekranda birden fazla panorama varsa
eşleşen alan varsa API en iyi eşleşmeyi döndürür.
Street View'ı yalnızca aşağıdakilerle kısıtlamak istiyorsanız bir kaynak yararlıdır: Yalnızca açık havadaki panoramaları arar. Varsayılan olarak, Street View Müzeler, kamu binaları, kafeler ve işletmeler gibi yerlerin içinde de panoramalar bulunabilir. Belirtilen konum için dış mekan panoramalarının mevcut olmayabileceğini unutmayın.
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);
Alternatif olarak, bir
panoId
- StreetViewPanorama.setPosition()
.
Bitişik panoramaların panorama kimliğini almak için önce şunu kullanın:
getLocation()
almak için StreetViewPanoramaLocation
kullanın.
Bu nesne,
mevcut panoramayı ve her biri StreetViewPanoramaLink
nesneden oluşan bir diziyi
mevcut panoramaya bağlı bir panoramanın kimliğini içeren iletiler.
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); }
Yakınlaştırma ve uzaklaştırma
Yakınlaştırma düzeyini programlı bir şekilde değiştirmek için
StreetViewPanoramaCamera.zoom
.
Yakınlaştırma seviyesi 1,0 olarak ayarlanırsa resim büyütülür
2 katlayın.
Aşağıdaki snippet, StreetViewPanoramaCamera.Builder()
kullanarak bir
mevcut kameranın yatırma ve yatağına sahip yeni bir kameranın yanı sıra
yakınlaştırmayı yüzde elli oranında artırdık.
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();
Kamera yönünü (bakış açısı) ayarlayın
Street View kamerasının yönünü belirlemek için
StreetViewPanoramaCamera
üzerinde yatay konuma getirin ve eğin.
- dayanmak
- Kameranın baktığı yön (derece cinsinden belirtilir) kamera karesinin çevresinde saat yönünde. Gerçek kuzey 0, doğu 90, güney 180, batı 270.
- yatırmak
- Y ekseni yukarı veya aşağı eğilir. Aralık -90 ile 0 ile 90 arasındadır, -90 ise tam aşağı bakıyor, 0 ufukta ortalanmış ve 90 tanesi yukarıya doğru. Varyans, kameranın ilk varsayılan perdesine göre ölçülür. genellikle (ancak her zaman değil) düz yataydır. Örneğin, Yeşil Ofis’te tepenin yatay olmayan bir varsayılan perdesi olabilir.
Aşağıdaki snippet, StreetViewPanoramaCamera.Builder()
kullanarak bir
mevcut kameranın yakınlaştırma ve eğme özelliklerini ayarlarken yeni kameranın
sola doğru 30 derece duyuyorum.
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();
Aşağıdaki snippet kamerayı 30 derece yukarı yatırır.
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();
Kamera hareketlerini canlandırın
Kamera hareketlerini canlandırmak için şunu arayın:
StreetViewPanorama.animateTo()
.
Animasyon, mevcut kamera özellikleri ile yeni kamera özellikleri arasında interpolasyon yapar
kamera özellikleriyle değiştirebilirsiniz. Animasyon olmadan doğrudan kameraya atlamak isterseniz
süreyi 0 olarak ayarlayabilirsiniz.
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);
Aşağıdaki resimde, yukarıdaki animasyonu çalıştırılmak üzere programladığınızda sonuç gösterilmektedir
Handler.postDelayed()
kullanılarak her 2.000 milisaniyede bir: