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. Böylece kullanıcılarınıza varış noktaları veya ilgilendikleri yerlerle ilgili anlamlı bir bağlam sunabilirsiniz.
Google Haritalar Android API v2 üzerinden sunulan kapsam, Android cihazınızdaki Google Haritalar uygulamasıyla aynıdır. Street View hakkında başlıklı makalede Street View hakkında daha fazla bilgi edinebilir ve desteklenen bölgeleri etkileşimli bir haritada görebilirsiniz.
StreetViewPanorama
sınıfı, uygulamanızdaki Street View panoramasını modeller. 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: Street View'u 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
(parça yerine) kullanılarak - SplitStreetViewPanoramaAndMapDemoActivity: Street View ve harita gösteren bir etkinlik kullanma
Java örnekleri:
- StreetViewPanoramaBasicDemoActivity: Street View'u 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
(parça yerine) kullanılarak - SplitStreetViewPanoramaAndMapDemoActivity: Street View ve harita gösteren bir etkinlik oluşturma
Android için Haritalar SDK'sındaki Street View'a genel bakış
Android için Haritalar SDK'sı, Google Street View'da kullanılan görüntüleri elde etmek ve işlemek için bir Street View hizmeti sağlar. Resimler panorama olarak döndürülür.
Her Street View panoraması, tek bir konumdan 360 derecelik tam görünüm sağlayan bir resim veya resim grubudur. Resimler, 360 derece yatay görüntü (tam bir sarma) ve 180 derece dikey görüntü (doğrudan yukarıdan doğrudan aşağıya) içeren eş dikdörtgen (Plate Carrée) projeksiyonuna uygundur. Elde edilen 360 derecelik panorama, görüntünün 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. Yakınlaştırmayı ve kameranın yönünü (eğilme ve yön) kontrol etmek için StreetViewPanoramaCamera
simgesini 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 panoramasının kullanılabilirliğini kontrol etme
Google Play Hizmetleri SDK istemci kitaplığı, projenize içe aktarıp geliştirme için temel olarak kullanabileceğiniz birkaç Street View örneği içerir. Sana Özel'deki içerikleri içe aktarmayla ilgili kurallar için giriş bölümüne bakın.
Android için Haritalar SDK'sı Yardımcı Kitaplığı, çeşitli uygulamalarda faydalı olan sınıflardan oluşan açık kaynak bir kitaplıktır. GitHub deposuna Street View meta veri aracı dahildir.
Bu yardımcı program, bir konumun Street View tarafından desteklenip desteklenmediğini kontrol eder. Bu meta veri yardımcı programını çağırarak ve yalnızca yanıt OK
ise bir Street View panoraması ekleyerek Android uygulamasına Street View panoraması eklerken hatalardan kaçınabilirsiniz.
API'yi kullanma
Android fragmanına Street View panoraması eklemek için aşağıdaki talimatları uygulayın. Bu, uygulamanıza Street View eklemenin en basit 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 Fragment nesnesini etkinliğe ekleyin. Bunu yapmanın en kolay yolu,
Activity
öğesinin düzen dosyasına bir<fragment>
öğesi eklemektir. OnStreetViewPanoramaReadyCallback
arayüzünü uygulayın veStreetViewPanorama
nesnesinin tutamacını almak içinonStreetViewPanoramaReady(StreetViewPanorama)
geri arama yöntemini kullanın.- Geri aramayı kaydetmek için parçada
getStreetViewPanoramaAsync()
işlevini çağırın.
Her adımla ilgili daha fazla bilgiyi aşağıda bulabilirsiniz.
Parça ekleme
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, Street View'u uygulamanıza eklemenin en basit yolu olan StreetViewPanoramaFragment
kullanılmaktadır. İlk adım, geri çağırma arayüzünü uygulamaktır:
class StreetViewActivity : AppCompatActivity(), OnStreetViewPanoramaReadyCallback { // ... }
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ının adı main.xml
ise şu kodu kullanın:
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) }
@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()
işlevini çağırarak <fragment>
öğenizin kaynak kimliğini ileterek parçanın adını alın.
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.
val streetViewPanoramaFragment = supportFragmentManager .findFragmentById(R.id.street_view_panorama) as SupportStreetViewPanoramaFragment streetViewPanoramaFragment.getStreetViewPanoramaAsync(this)
SupportStreetViewPanoramaFragment streetViewPanoramaFragment = (SupportStreetViewPanoramaFragment) getSupportFragmentManager() .findFragmentById(R.id.street_view_panorama); streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);
Kullanılmaya hazır, boş olmayan bir StreetViewPanorama
örneği almak için onStreetViewPanoramaReady(StreetViewPanorama)
geri çağırma yöntemini kullanın.
override fun onStreetViewPanoramaReady(streetViewPanorama: StreetViewPanorama) { val sanFrancisco = LatLng(37.754130, -122.447129) streetViewPanorama.setPosition(sanFrancisco) }
@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, belirttiğiniz seçenekleri içeren bir StreetViewPanoramaOptions
nesnesi göndererek panoramayı programatik olarak yapılandırabilirsiniz.
StreetViewPanoramaFragment
kullanıyorsanız parçayı oluşturmak ve özel yapılandırılmış seçeneklerinizi iletmek içinStreetViewPanoramaFragment.newInstance(StreetViewPanoramaOptions options)
statik fabrika yöntemini kullanın.StreetViewPanoramaView
kullanıyorsanızStreetViewPanoramaView(Context, StreetViewPanoramaOptions)
yapıcısını kullanın ve özel yapılandırılmış seçeneklerinizi iletin.
val sanFrancisco = LatLng(37.754130, -122.447129) val view = StreetViewPanoramaView( this, StreetViewPanoramaOptions().position(sanFrancisco) )
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 alt sınıfıdır ve bir Android fragmentine Street View panoraması yerleştirmenize olanak tanır.
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
'a Street View panoraması yerleştirmenize olanak tanır. View
, ekranın dikdörtgen bir bölgesini temsil eder ve Android uygulamaları ile widget'lar için temel yapı taşıdır. StreetViewPanoramaFragment
'e benzer şekilde StreetViewPanoramaView
, panorama için kapsayıcı görevi görür ve temel özellikleri StreetViewPanorama
nesnesi aracılığıyla gösterir. Bu sınıfın kullanıcıları, onCreate()
, onDestroy()
, onResume()
ve onPause())
gibi tüm etkinlik yaşam döngüsü yöntemlerini StreetViewPanoramaView
sınıfındaki ilgili yöntemlere yönlendirmelidir.
Kullanıcı tarafından kontrol edilen özelliği özelleştirme
Kullanıcı, Street View panoramasını görüntülerken varsayılan olarak aşağıdaki özellikleri kullanabilir: kaydırma, yakınlaştırma ve bitişik panoramalara gitme. Kullanıcı tarafından kontrol edilen hareketleri StreetViewPanorama
'daki yöntemlerle etkinleştirebilir ve devre dışı bırakabilirsiniz. Hareket devre dışı bırakıldığında programatik değişiklikler yapmaya devam edebilirsiniz.
- setPanningGesturesEnabled()
- Kullanıcının sürükleyerek kamerayı yeniden yönlendirip yönlendiremeyeceğini belirler.
mStreetViewPanorama.setPanningGesturesEnabled(false);
- setUserNavigationEnabled()
- Kullanıcının farklı bir panoramaya geçip geçemeyeceğini belirler.
Kullanıcılar, yeni bir panoramaya gitmek için gezinme bağlantılarına tek dokunabilir veya görünüme iki kez dokunabilir.
mStreetViewPanorama.setUserNavigationEnabled(false);
- setZoomGesturesEnabled()
- Kullanıcının yakınlaştırmak için iki parmağını yakınlaştırıp uzaklaştırıp uzaklaştıramayacağını belirler.
mStreetViewPanorama.setZoomGesturesEnabled(false);
- setStreetNamesEnabled()
- Kullanıcının, zeminde gösterilen sokak adlarını görüp göremeyeceğini belirler.
mStreetViewPanorama.setStreetNamesEnabled(false);
- isPanningGesturesEnabled()
- Kullanıcının sürükleyerek kamerayı yeniden yönlendirip yönlendiremeyeceğini belirler.
streetViewPanorama.isPanningGesturesEnabled = false
- isUserNavigationEnabled
- Kullanıcının farklı bir panoramaya geçip geçemeyeceğini belirler.
Kullanıcılar, yeni bir panoramaya gitmek için gezinme bağlantılarına tek dokunabilir veya görünüme iki kez dokunabilir.
streetViewPanorama.isUserNavigationEnabled = false
- isZoomGesturesEnabled
- Kullanıcının yakınlaştırmak için iki parmağını yakınlaştırıp uzaklaştırıp uzaklaştıramayacağını belirler.
streetViewPanorama.isZoomGesturesEnabled = false
- isStreetNamesEnabled
- Kullanıcının, zeminde gösterilen sokak adlarını görüp göremeyeceğini belirler.
streetViewPanorama.isStreetNamesEnabled = false
Panoramanın konumunu ayarlama
Street View panoramasının konumunu ayarlamak için LatLng
göndererek StreetViewPanorama.setPosition()
işlevini çağırın.
radius
ve source
'yi 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ı kullanabilirsiniz. 0 yarıçapı, panoramanın tam olarak belirtilen LatLng
'ye bağlı olması gerektiği anlamına gelir.
Varsayılan yarıçap 50 metredir. Eşleşen alanda birden fazla panorama varsa API en iyi eşleşmeyi döndürür.
Street View'u yalnızca açık havadaki panoramaları arayacak şekilde kısıtlamak istiyorsanız kaynak kullanışlıdır. Varsayılan olarak, Street View panoramaları müze, kamu binası, kafe ve işletme gibi yerlerin içinde olabilir. Belirtilen konum için açık hava panoramalarının bulunmayabileceğini unutmayın.
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)
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 StreetViewPanoramaLocation
almak üzere getLocation()
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.
streetViewPanorama.location.links.firstOrNull()?.let { link: StreetViewPanoramaLink -> streetViewPanorama.setPosition(link.panoId) }
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
ayarını yaparak yakınlaştırma düzeyini programatik olarak değiştirebilirsiniz.
Yakınlaştırmayı 1,0 olarak ayarladığınızda resim 2 kat büyütülür.
Aşağıdaki snippet, mevcut kameranın eğimini ve yönünü kullanarak yeni bir kamera oluşturmak ve yakınlaştırmayı yüzde elli artırmak için StreetViewPanoramaCamera.Builder()
öğesini kullanır.
val zoomBy = 0.5f val camera = StreetViewPanoramaCamera.Builder() .zoom(streetViewPanorama.panoramaCamera.zoom + zoomBy) .tilt(streetViewPanorama.panoramaCamera.tilt) .bearing(streetViewPanorama.panoramaCamera.bearing) .build()
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
cihazında yön ve eğimi ayarlayarak Street View kamerasının yönünü belirleyebilirsiniz.
- rulman
- 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 doğrudan aşağı, 0 ufukta merkezlenmiş ve 90 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'te, mevcut kameranın yakınlaştırma ve eğme özelliklerine sahip yeni bir kamera oluşturmak için StreetViewPanoramaCamera.Builder()
kullanılırken yön 30 derece sola değiştirilir.
val panBy = 30f val camera = StreetViewPanoramaCamera.Builder() .zoom(streetViewPanorama.panoramaCamera.zoom) .tilt(streetViewPanorama.panoramaCamera.tilt) .bearing(streetViewPanorama.panoramaCamera.bearing - panBy) .build()
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.
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()
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 animasyonlu olarak görmek için StreetViewPanorama.animateTo()
simgesini çağırın.
Animasyon, mevcut kamera özellikleri ile yeni kamera özellikleri arasında geçiş yapar. Animasyon olmadan doğrudan kameraya atlamak istiyorsanız süreyi 0 olarak ayarlayabilirsiniz.
// 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)
// 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 animasyonu 2.000 milisaniyede bir çalışacak şekilde planladığınızda elde edilen sonuç gösterilmektedir:
