Google Street View, kapsama alanı boyunca belirtilen yollardan 360 derecelik panoramik görüntüler sağlar.
Bu video, kullanıcılarınıza haritadaki bir adresle ilgili gerçek dünyada bir deneyim sunmak için Street View hizmetini nasıl kullanabileceğinizi gösterir. Böylece, kullanıcılara varış noktaları veya ilgilendikleri yerlerle ilgili anlamlı bir bağlam sunabilirsiniz.
Google Haritalar Android API'si v2 kapsamında kullanılabilen kapsam, Android cihazınızdaki Google Haritalar uygulamasının kapsamıyla aynıdır. Etkileşimli harita üzerinde Street View hakkında daha fazla bilgi edinebilir ve desteklenen alanları görebilirsiniz. Bunun için Street View hakkında bölümüne bakabilirsiniz.
StreetViewPanorama
sınıfı, uygulamanızdaki Street
View panoramasını modeller. Kullanıcı arayüzünüzde, bir panorama StreetViewPanoramaFragment
veya StreetViewPanoramaView
nesnesiyle temsil edilir.
Kod örnekleri
GitHub'daki ApiDemos deposu, Street View kullanımını gösteren örnekler içerir.
Kotlin örnekleri:
- StreetViewPanoramaBasicDemoActivity: Street View'ı kullanmayla ilgili temel bilgiler
- StreetViewPanoramaEventsDemoActivity: Etkinlikleri dinleme
- StreetViewPanoramaNavigationDemoActivity: Street View panoramalarını programatik olarak kontrol etme
- StreetViewPanoramaOptionsDemoActivity: Kullanıcı arayüzü ve hareket seçeneklerini değiştirme
- StreetViewPanoramaViewDemoActivity:
StreetViewPanoramaView
kullanma (Parça yerine) - SplitStreetViewPanoramaAndMapDemoActivity: Sokak görünümü ve harita görüntüleyen bir etkinlik kullanma
Java örnekleri:
- StreetViewPanoramaBasicDemoActivity: Street View'ı kullanmayla ilgili temel bilgiler
- StreetViewPanoramaEventsDemoActivity: Etkinlikleri dinleme
- StreetViewPanoramaNavigationDemoActivity: Street View panoramalarını programatik olarak kontrol etme
- StreetViewPanoramaOptionsDemoActivity: Kullanıcı arayüzü ve hareket seçeneklerini değiştirme
- StreetViewPanoramaViewDemoActivity:
StreetViewPanoramaView
kullanma (Parça yerine) - SplitStreetViewPanoramaAndMapDemoActivity: Sokak görünümü ve harita gösteren bir etkinlik oluşturma
Android için Haritalar SDK'sında Street View'a genel bakış
Android için Haritalar SDK'sı, Google Street View'da kullanılan görüntüleri elde etmek ve değiştirmek için bir Street View hizmeti sağlar. Görüntüler panorama olarak döndürülür.
Her Street View panoraması, tek bir konumdan tam 360 derece görünüm sağlayan bir resim veya resim kümesidir. Resimler, 360 derece yatay görünüm (tam sarmalama) ve 180 derece dikey görünüm (düzden tepeye doğru) içeren eş dikdörtgen (Plate Carrée) projeksiyonuna uygundur. Ortaya çıkan 360 derecelik panorama, resim bir kürenin iki boyutlu yüzeyine sarılmışken, küre üzerindeki bir projeksiyonu tanımlar.
StreetViewPanorama
, panoramayı merkezinde bir kamera olmak üzere küre şeklinde oluşturan bir görüntüleyici sağlar. Kameranın yakınlaştırma ve yönünü (yatırma ve yatış) kontrol etmek için StreetViewPanoramaCamera
düğmesini değiştirebilirsiniz.
Başlayın
Proje kurma
Android projesi için Haritalar SDK'sı oluşturmak üzere başlangıç kılavuzundaki adımları uygulayın.
Panorama eklemeden önce Street View panoramasının kullanılabilirliğini kontrol edin
Google Play Hizmetleri SDK'sı istemci kitaplığı, projenize aktarabileceğiniz ve geliştirme için temel olarak kullanabileceğiniz birkaç Street View örneği içerir. Örnekleri içe aktarmayla ilgili yönergeler için girişe bakın.
Android Yardımcı Program Kitaplığı için Haritalar SDK'sı, çeşitli uygulamalar için yararlı olan sınıfların yer aldığı açık kaynak bir kitaplıktır. GitHub deposunda, Street View meta veri yardımcı programı bulunur.
Bu yardımcı program, bir konumun Street View tarafından
desteklenip desteklenmediğini kontrol eder. Bir Android uygulamasına Street View panoraması eklerken, bu meta veri yardımcı programını çağırıp yalnızca yanıt OK
ise bir Street View panoraması ekleyerek hatalardan kaçınabilirsiniz.
API'yi kullanma
Bir Android parçasına Street View panoraması eklemek için aşağıdaki talimatları uygulayın. Uygulamanıza Street View eklemenin en basit yolu budur. Ardından 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:
- Street View panoramasını işleyecek Etkinlik'e bir Parça nesnesi ekleyin. Bunu yapmanın en kolay yolu
Activity
için düzen dosyasına bir<fragment>
öğesi eklemektir. OnStreetViewPanoramaReadyCallback
arayüzünü uygulayın veStreetViewPanorama
nesnesine herkese açık kullanıcı adı almak içinonStreetViewPanoramaReady(StreetViewPanorama)
geri çağırma yöntemini kullanın.- Geri çağırmayı kaydetmek için parçada
getStreetViewPanoramaAsync()
yöntemini çağırın.
Aşağıda her bir adımla ilgili daha fazla ayrıntı verilmiştir.
Parça ekle
Bir Parça 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, 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
arayüzünü uygulamanız ve geri çağırma örneğini StreetViewPanoramaFragment
veya StreetViewPanoramaView
nesnesinde ayarlamanız gerekir. Uygulamanıza Street View eklemenin en basit yolu bu olduğundan bu eğiticide 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ızın onCreate()
yönteminde, düzen dosyasını içerik görünümü olarak ayarlayın. Örneğin, düzen dosyasının 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); }
FragmentManager.findFragmentById()
yöntemini çağırıp <fragment>
öğenizin kaynak kimliğini ileterek parçaya bir herkese açık kullanıcı adı ekleyin.
Düzen dosyasını oluşturduğunuzda R.id.streetviewpanorama
kaynak kimliğinin otomatik olarak Android projesine eklendiğini unutmayın.
Ardından, parçaya geri çağırmayı ayarlamak için getStreetViewPanoramaAsync()
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);
StreetViewPanorama
öğesinin kullanıma hazır, boş olmayan bir örneğini almak için onStreetViewPanoramaReady(StreetViewPanorama)
geri çağırma yöntemini kullanın.
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
Haritanın aksine, Street View panoramasının ilk durumunu XML üzerinden yapılandırmak mümkün değildir. Bununla birlikte, belirttiğiniz seçenekleri içeren bir StreetViewPanoramaOptions
nesnesi ileterek panoramayı programatik olarak yapılandırabilirsiniz.
StreetViewPanoramaFragment
kullanıyorsanız parçayı oluşturmak ve özel yapılandırılmış seçeneklerinizde iletmek içinStreetViewPanoramaFragment.newInstance(StreetViewPanoramaOptions options)
statik fabrika yöntemini kullanın.StreetViewPanoramaView
kullanıyorsanızStreetViewPanoramaView(Context, StreetViewPanoramaOptions)
oluşturucuyu 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 Fragment sınıfının bir alt sınıfıdır ve bir Android parçasına Street View panoraması yerleştirmenize olanak tanır. StreetViewPanoramaFragment
nesneleri panorama için container görevi görür ve StreetViewPanorama
nesnesine erişim sağlar.
StreetViewPanoramaView
Android View
sınıfının bir alt sınıfı olan StreetViewPanoramaView
, Android View
cihaza Street View panoraması yerleştirmenize olanak tanır. Ekranın dikdörtgen bölgesini temsil eden View
, Android uygulamaları ve widget'ları için temel bir yapı taşıdır.
StreetViewPanoramaFragment
gibi StreetViewPanoramaView
, panorama için de bir kapsayıcı görevi görür. Böylece StreetViewPanorama
nesnesi aracılığıyla temel işlevleri açığa çıkarır. 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ştirin
Varsayılan olarak, kullanıcılar Street View panoramasını görüntülerken şu özelliklerden yararlanabilir: kaydırma, yakınlaştırma ve komşu panoramalara gitme. Kullanıcı tarafından kontrol edilen hareketleri, StreetViewPanorama
adresindeki yöntemlerle etkinleştirebilir ve devre dışı bırakabilirsiniz. Hareket devre dışı bırakıldığında da programatik değişiklikler yapılabilir.
Panoramanın konumunu ayarlayın
Street View panoramasının konumunu ayarlamak için bir LatLng
ileterek StreetViewPanorama.setPosition()
numaralı telefonu arayın.
radius
ve source
parametrelerini isteğe bağlı parametreler olarak da iletebilirsiniz.
Street View'ın eşleşen bir panoramayı arayacağı alanı genişletmek veya daraltmak istiyorsanız yarıçap yararlı olur. 0 yarıçapı, panoramanın tam olarak belirtilen LatLng
öğesine bağlanması gerektiği anlamına gelir.
Varsayılan yarıçap 50 metredir. Eşleşme alanında birden fazla panorama varsa API en iyi eşleşmeyi döndürür.
Street View'ı yalnızca açık havada gösterilen panoramaları arayacak şekilde kısıtlamak istiyorsanız bir kaynak faydalıdır. Varsayılan olarak, Street View panoramaları müzeler, kamu binaları, kafeler ve işletmeler 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, StreetViewPanorama.setPosition()
öğesine panoId
ileterek konumu panorama kimliğine göre ayarlayabilirsiniz.
Bitişik panoramaların panorama kimliğini almak için önce getLocation()
kullanarak StreetViewPanoramaLocation
alın.
Bu nesne, geçerli panoramanın kimliğini ve StreetViewPanoramaLink
nesne dizisini içerir. Bunların her biri, mevcut panoramaya bağlı bir panoramanın kimliğini 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
StreetViewPanoramaCamera.zoom
ayarlayarak yakınlaştırma düzeyini programatik olarak değiştirebilirsiniz.
Yakınlaştırma değeri 1,0 olarak ayarlandığında, resim 2 kat büyütülür.
Aşağıdaki snippet, mevcut kameranın yatırma ve yatağına sahip yeni bir kamera oluşturmak için StreetViewPanoramaCamera.Builder()
özelliğini kullanırken yakınlaştırma oranını yüzde elli artırı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ı) ayarlayın
Yatağı ve yatırmayı StreetViewPanoramaCamera
ayarlayarak Street View kamerasının yönünü belirleyebilirsiniz.
- dayanmak
- Kameranın doğru kuzeyden, kamera noktasının çevresinde saat yönünde derece cinsinden belirtilen yön. Gerçek kuzey 0, doğu 90, güney 180, batı 270'tir.
- yatırmak
- Y ekseni yukarı veya aşağı eğilir. Bu aralık -90 ile 0 ile 90 arasındadır. -90 değeri aşağıya, 0 değeri ufukta ortalanır ve 90 değeri tam yukarıyı ifade eder. Varyans, kameranın genellikle (her zaman olmasa da) düz yatay olan ilk varsayılan perdesinden ölçülür. Örneğin, bir tepede çekilen görüntünün yatay olmayan bir varsayılan perdesi olabilir.
Aşağıdaki snippet, mevcut kameranın yakınlaştırma ve yatırma özellikleriyle yeni bir kamera oluşturmak için StreetViewPanoramaCamera.Builder()
özelliğini kullanırken, yönü sola doğru 30 derece değiştirmektedir.
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 > 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 canlandırın
Kamera hareketlerini canlandırmak için StreetViewPanorama.animateTo()
çağrısı yapın.
Animasyon, geçerli kamera özellikleri ile yeni kamera özellikleri arasında arapolasyon 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, yukarıdaki animasyonu Handler.postDelayed()
kullanarak her 2.000 milisaniyede bir çalışacak şekilde planladığınızda sonuç gösterilmektedir: