Google Street View, kapsam alanındaki belirli yollardan panoramik 360 derece görünümler sunar.
Bu videoda, kullanıcılarınıza haritadaki bir adresle ilgili gerçekçi bir deneyim sunmak için Street View hizmetini nasıl kullanabileceğiniz gösterilmektedir. Bu sayede kullanıcılarınız, gidecekleri yer veya ilgilendikleri herhangi bir yerle ilgili anlamlı bir bağlam bilgisi edinebilir.
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 panoramalar StreetViewPanoramaFragment
veya StreetViewPanoramaView
nesnesiyle temsil edilir.
Kod örnekleri
GitHub'daki ApiDemos deposu, Street View'un kullanımını gösteren örnekler içerir.
Kotlin örnekleri:
- StreetViewPanoramaBasicDemoActivity: Sokak Görünümü
- StreetViewPanoramaEventsDemoActivity: Etkinlikleri dinleme
- StreetViewPanoramaNavigationDemoActivity: Kontrol Etme Programatik olarak Street View panoramaları
- StreetViewPanoramaOptionsDemoActivity: Kullanıcı arayüzü ve hareket seçeneklerini değiştirme
- StreetViewPanoramaViewDemoActivity:
StreetViewPanoramaView
(parça yerine) kullanılarak - SplitStreetViewPanoramaAndMapDemoActivity: Street View ve harita gösteren bir etkinlik kullanma
Java örnekleri:
- StreetViewPanoramaBasicDemoActivity: Sokak Görünümü
- StreetViewPanoramaEventsDemoActivity: Etkinlikleri dinleme
- StreetViewPanoramaNavigationDemoActivity: Kontrol Etme Programatik olarak Street View panoramaları
- StreetViewPanoramaOptionsDemoActivity: Kullanıcı arayüzü ve hareket seçeneklerini değiştirme
- StreetViewPanoramaViewDemoActivity:
StreetViewPanoramaView
(parça yerine) kullanılarak - SplitStreetViewPanoramaAndMapDemoActivity: Street View ve harita gösteren etkinlik
Android için Haritalar SDK'sındaki 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. Resimler panorama olarak döndürülür.
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. Görüntüler, 360 derece yatay görünüm (tam bir sarma) ve 180 derece dikey görünüm (doğrudan yukarıdan doğrudan aşağıya) içeren eş dikdörtgen (Plate Carrée) projeksiyonuna uygundur. Elde edilen 360 derecelik panorama, resmin söz konusu kürenin iki boyutlu yüzeyine sarıldığı bir küre üzerinde bir projeksiyon tanımlar.
StreetViewPanorama
, panoramayı merkezinde kamera bulunan bir küre olarak oluşturan bir görüntüleyici sağlar. Kameranın yakınlaştırma özelliğini ve yönünü (eğilme ve yön) kontrol etmek için StreetViewPanoramaCamera
düğmesini kullanabilirsiniz.
Başlayın
Proje kurma
Android için Haritalar SDK'sı projesi oluşturmak üzere başlangıç kılavuzunu uygulayın.
Panorama eklemeden önce Street View panoramalarının kullanılabilirliğini kontrol etme
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. Sana Özel'deki içerikleri içe aktarmayla ilgili yönergeler için giriş bölümüne bakın.
Android Yardımcı Program Kitaplığı için Haritalar SDK'sı
açık kaynak kodlu bir kitaplıktır.
izin verir. GitHub deposuna Street View meta veri aracı dahildir.
Bu yardımcı program bir konumun Google tarafından
Street View. Bu meta veri yardımcı programını çağırarak ve yalnızca yanıt OK
ise bir Android uygulamasına Street View panoraması ekleyerek hatalardan kaçınabilirsiniz.
API'yi kullanma
Android fragmanına Street View panoraması eklemek için aşağıdaki talimatları uygulayın. Bu, Street View'u uygulamanıza eklemenin en kolay yoludur. Ardından, parçalar, görünümler ve panoramayı özelleştirme hakkında daha fazla bilgi edinin.
Street View panoraması ekleme
Aşağıdaki adımları uygulayarak aşağıdaki gibi bir Street View panoraması ekleyin:
Özet olarak:
- Street View panoramasını işleyen bir etkinlik alanına Fragment nesnesi ekleyin. 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.
Her adımla ilgili daha fazla bilgiyi aşağıda bulabilirsiniz.
Parça ekle
Fragment nesnesi tanımlamak için etkinliğin düzen dosyasına bir <fragment>
öğesi ekleyin. Bu öğede class
özelliğini com.google.android.gms.maps.StreetViewPanoramaFragment
(veya SupportStreetViewPanoramaFragment
) olarak ayarlayın.
Aşağıda, bir düzen dosyasında yer alan bir parça ö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 ekleme
Uygulamanızda Street View panoramasıyla çalışmak için OnStreetViewPanoramaReadyCallback
arayüzünü uygulamanız ve StreetViewPanoramaFragment
veya StreetViewPanoramaView
nesnesinde geri çağırma işlevinin bir örneğini ayarlamanız gerekir. Bu eğitimde, uygulamanıza Street View'u eklemenin en basit yolu olan StreetViewPanoramaFragment
kullanılmaktadır. İlk adım, geri çağırma arayüzünü uygulamaktır:
Kotlin
class StreetViewActivity : AppCompatActivity(), OnStreetViewPanoramaReadyCallback { // ... }
Java
class StreetViewActivity extends AppCompatActivity implements OnStreetViewPanoramaReadyCallback { // ... }
Activity
'ın onCreate()
yönteminde, 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, düzen dosyasını derlediğinizde Android projesine otomatik olarak eklendiğini unutmayın.
Ardından, parçada geri çağırma işlevini ayarlamak için getStreetViewPanoramaAsync()
simgesini kullanı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
Haritalarda olduğu gibi, Street View panoramasının ilk durumunu XML üzerinden yapılandırmak mümkün değildir. 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)
yapıcısını kullanın ve özel yapılandırılmış seçeneklerinizi iletin.
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
nesneleri, panorama için kapsayıcı görevi görür ve StreetViewPanorama
nesnesine erişim sağlar.
StreetViewPanoramaView
Android View
sınıfının alt sınıfı olan StreetViewPanoramaView
, Android View
'e Street View panoraması yerleştirmenize olanak tanır. View
, bir dikdörtgen bölgesini
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 etkinlik yaşam döngüsü yöntemlerini (onCreate()
, onDestroy()
, onResume()
ve onPause())
gibi) StreetViewPanoramaView
sınıfındaki ilgili yöntemlere yönlendirmelidir.
Kullanıcı tarafından kontrol edilen işlevleri özelleştirme
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. Hareket devre dışı bırakıldığında programatik değişiklikler yine de yapılabilir.
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.
Street View'un eşleşen bir panorama aradığı alanı genişletmek veya daraltmak istiyorsanız yarıçap kullanın. 0 yarıçapı, panoramanın tam olarak belirtilen LatLng
'ye bağlı olması 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 panoramaları müze, kamu binası, kafe ve işletme gibi yerlerin içinde olabilir. 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, panoId
değerini StreetViewPanorama.setPosition()
değerine ileterek konumu bir panorama kimliğine göre ayarlayabilirsiniz.
Bitişik panoramaların panorama kimliğini almak için önce şunu kullanın:
getLocation()
almak için StreetViewPanoramaLocation
kullanın.
Bu nesne, geçerli panoramanın kimliğini ve her biri geçerli panoramaya bağlı bir panoramanın kimliğini içeren bir StreetViewPanoramaLink
nesnesi dizisi içerir.
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ırmayı 1,0 olarak ayarladığınızda resim 2 kat büyütülür.
Aşağıdaki snippet'te, mevcut kameranın eğimini ve yönünü içeren yeni bir kamera oluşturmak için StreetViewPanoramaCamera.Builder()
kullanılırken yakınlaştırma yüzde elli artırılır.
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ı) ayarlama
StreetViewPanoramaCamera
'da yön ve eğimi ayarlayarak Street View kamerasının yönünü belirleyebilirsiniz.
- dayanmak
- Kamera konumunun etrafında, gerçek kuzeyden saat yönünde derece cinsinden belirtilen, kameranın baktığı yön. Gerçek kuzey 0, doğu 90, güney 180, batı 270 derecedir.
- Eğme
- Y ekseni yukarı veya aşağı eğilir. Aralık -90 ile 0 ila 90 arasındadır. -90 değeri doğrudan aşağı, 0 değeri ufukta merkezlenmiş ve 90 değeri doğrudan yukarı bakar. Varyans, kameranın ilk varsayılan eğiminden ölçülür. Bu eğim genellikle (ancak her zaman değil) düz yataydır. Örneğin, bir tepeden çekilen bir görüntünün varsayılan eğimi muhtemelen yatay değildir.
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ı doğru yatırır.
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();
Kamera hareketlerini animasyonlu hale getirme
Kamera hareketlerini canlandırmak için şunu arayın:
StreetViewPanorama.animateTo()
.
Animasyon, mevcut kamera özellikleri ile yeni kamera özellikleri arasında geçiş yapar. 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, Handler.postDelayed()
kullanarak yukarıdaki animasyonun 2.000 milisaniyede bir çalışacak şekilde planlanması sonucunda elde edilen sonuç gösterilmektedir: