Street View

Platform seçin: Android iOS JavaScript

Google Street View, kapsama alanındaki belirli yollardan panoramik 360 derece görüntüler 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ız, varış noktaları veya ilgilendikleri herhangi bir yerle ilgili anlamlı bir bağlam bilgisi edinebilir.

Google Haritalar Android API v2 aracılığıyla sunulan kapsam, Android cihazınızdaki Google Haritalar uygulamasıyla aynıdır. Street View hakkında daha fazla bilgi edinmek ve desteklenen alanları etkileşimli bir haritada görmek için Street View hakkında başlıklı makaleyi inceleyin.

StreetViewPanorama sınıfı, uygulamanızdaki Street View panoramasını modeller. Kullanıcı arayüzünüzde panoramalar StreetViewPanoramaFragment veya StreetViewPanoramaView nesnesi ile temsil edilir.

Kod örnekleri

GitHub'daki ApiDemos deposu, Street View'un kullanımını gösteren örnekler içerir.

Kotlin örnekleri:

Java örnekleri:

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 bir görünüm sunan bir resim veya resim grubudur. Resimler, 360 derece yatay görüntü (tam çevre) 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, 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 gösteren 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 inceleyin.

Panorama eklemeden önce Street View panoramaları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 yönergeler 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 deposunda Street View meta veri yardımcı programı da yer alır. 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 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, Street View'u uygulamanıza 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 bu tür bir Street View panoraması ekleyin:

Street View panorama demosu

Özet olarak:

  1. Sokak Görünüm panoramasını işleyen bir Fragment nesnesi ekleyin. Bunu yapmanın en kolay yolu, Activity öğesinin düzen dosyasına bir <fragment> öğesi eklemektir.
  2. OnStreetViewPanoramaReadyCallback arayüzünü uygulayın ve StreetViewPanorama nesnesinin adını almak için onStreetViewPanoramaReady(StreetViewPanorama) geri çağırma yöntemini kullanın.
  3. 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 snippet ö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 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, içerik görünümü olarak düzen dosyasını 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);
}

      

<fragment> öğenizin kaynak kimliğini FragmentManager.findFragmentById()'a ileterek parçanın bir 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() öğesini 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);

      

Kullanılmaya hazır, boş olmayan bir StreetViewPanorama örneği 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

Haritalardan farklı olarak, 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.

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 alt sınıfıdır ve bir Android fragment'ine 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, bir Android View'e 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 bir kapsayıcı görevi görür ve temel işlevleri StreetViewPanorama nesnesi aracılığıyla gösterir. 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ı Street View panoramasını görüntülerken aşağıdaki işlevleri kullanabilir: kaydırma, yakınlaştırma ve bitişik panoramalara gitme. Kullanıcı tarafından kontrol edilen hareketleri StreetViewPanorama'teki yöntemlerle etkinleştirebilir ve devre dışı bırakabilirsiniz. Hareket devre dışıyken programatik değişiklikler yapmaya devam edebilirsiniz.

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 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 ile 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ın. 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.

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 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.

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 değerini ayarlayarak yakınlaştırma düzeyini programatik olarak değiştirebilirsiniz. Yakınlaştırmayı 1,0 olarak ayarlamak resmi 2 kat büyütür.

Aşağıdaki snippet'te, mevcut kameranın eğimini ve yönünü kullanarak yeni bir kamera oluşturmak ve yakınlaştırma oranını yüzde elli artırmak için StreetViewPanoramaCamera.Builder() kullanı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'te yön ve eğimi ayarlayarak Street View kamerasının yönünü belirleyebilirsiniz.

yön
Kamera odağının 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ğim
Y ekseni yukarı veya aşağı yatırılır. 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 resimde muhtemelen yatay olmayan bir varsayılan eğim bulunur.

Aşağıdaki snippet'te, mevcut kameranın yakınlaştırma ve eğme özelliklerini taşıyan yeni bir kamera oluşturmak için StreetViewPanoramaCamera.Builder() kullanılırken yön 30 derece sola değiştirilir.

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 animasyonlu hale getirmek için StreetViewPanorama.animateTo() işlevini ç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.

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 animasyonu 2.000 milisaniyede bir çalışacak şekilde planladığınızda elde edilen sonuç gösterilmektedir:

Street View panorama animasyon demosu