Street View

Platform seçin: Android iOS JavaScript

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:

Java örnekleri:

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:

Street View panorama demosu

Özet olarak:

  1. 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.
  2. OnStreetViewPanoramaReadyCallback arayüzünü uygulayın ve StreetViewPanorama nesnesine herkese açık kullanıcı adı almak için onStreetViewPanoramaReady(StreetViewPanorama) geri çağırma yöntemini kullanın.
  3. 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.

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:

Street View panorama animasyonu demosu