Street View

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Platform seçin: Android iOS JavaScript

Google Street View, belirli yolların kapsam alanının tamamından 360 derece panoramik manzaralar sağlar.

Bu videoda, kullanıcılarınıza haritadaki bir adresle ilgili gerçek bir deneyim yaşatmak için Street View hizmetini nasıl kullanabileceğiniz açıklanır. Gösterilen bilgilerle, kullanıcılara varış noktaları veya ilgilendikleri herhangi bir yer hakkında anlamlı bir bağlam sunulur.

Google Haritalar Android API'si v2 üzerinden kullanılabilen kapsam, Android cihazınızdaki Google Haritalar uygulamasının kapsamıyla aynıdır. Street View hakkında başlıklı makalede, Street View hakkında daha fazla bilgi edinebilir ve etkileşimli bir harita üzerinde desteklenen alanları görebilirsiniz.

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.

Java örnekleri:

Kotlin ö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 almak ve değiştirmek için bir Street View hizmeti sağlar. Resimler panorama olarak döndürülür.

Her bir 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ünüm (tam sarma) ve 180 derece dikey görünüm (dikten yükseğe doğru) içeren dik eşgen dikdörtgene (Plate Carrée) projeksiyona uygundur. 360 derecelik panoramik görüntü, kürenin iki boyutlu yüzeyine sarmalanmış bir projeksiyonu tanımlar.

StreetViewPanorama ortada bir kamera bulunan panoramayı oluşturan bir izleyici sağlar. Kameranın yakınlaştırmasını ve yönünü (yatırıp eğilmesini) kontrol etmek için StreetViewPanoramaCamera özelliğini değiştirebilirsiniz.

Başlarken

Android için Haritalar SDK'sı oluşturmak üzere başlangıç kılavuzunu inceleyin. Ardından aşağıda açıklandığı şekilde bir Street View panoraması ekleyin.

Google Play Hizmetleri SDK'sı istemci kitaplığı, projenize aktarabileceğiniz ve geliştirme için bir temel olarak kullanabileceğiniz birkaç Street View örneği içerir. Örneklerin içe aktarılmasıyla ilgili yönergeler için girişe bakın.

API'yi kullanma

Android parçasına Street View panoraması eklemek için aşağıdaki talimatları uygulayın. Uygulamanıza Street View eklemenin en kolay yolu budur. Daha sonra parçalar, görünümler ve panoramayı özelleştirme hakkında daha fazla bilgi edinin.

Street View panoraması ekleme

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. StreetViewPanorama nesnesine bir tutma yeri almak için OnStreetViewPanoramaReadyCallback arayüzünü uygulayın ve onStreetViewPanoramaReady(StreetViewPanorama) geri çağırma yöntemini kullanın.
  3. Geri çağırmayı kaydetmek için parçaya getStreetViewPanoramaAsync() çağırın.

Her adımla ilgili daha ayrıntılı bilgiyi aşağıda bulabilirsiniz.

Parça ekleme

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.

Düzen dosyasındaki bir parça örneğini burada bulabilirsiniz:

<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ızın Street View panoramasıyla çalışmak için OnStreetViewPanoramaReadyCallback arayüzünü uygulamanız ve bir StreetViewPanoramaFragment veya StreetViewPanoramaView nesnesinde geri çağırma örneği ayarlamanız gerekir. Bu eğitimde, uygulamanıza Street View eklemenin en kolay yolu olduğu için bir StreetViewPanoramaFragment kullanılır. İlk adım, geri çağırma arayüzünü uygulamaktır:

Java


class StreetViewActivity extends AppCompatActivity implements OnStreetViewPanoramaReadyCallback {
    // ...
}

      

Kotlin


class StreetViewActivity : AppCompatActivity(), OnStreetViewPanoramaReadyCallback {
    // ...
}

      

Activity's onCreate() yönteminizde düzen dosyasını içerik görünümü olarak ayarlayın. Örneğin, düzen dosyasının adı main.xml ise aşağıdaki kodu kullanın:

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);
}

      

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)
}

      

Parçayı işlenmek için FragmentManager.findFragmentById() öğesini çağırıp <fragment> öğenizin kaynak kimliğini iletin. Düzen dosyasını oluştururken R.id.streetviewpanorama kaynak kimliğinin Android projesine otomatik olarak eklendiğini unutmayın.

Parçanın geri çağırmasını ayarlamak için getStreetViewPanoramaAsync() özelliğini kullanın.

Java


SupportStreetViewPanoramaFragment streetViewPanoramaFragment =
    (SupportStreetViewPanoramaFragment) getSupportFragmentManager()
        .findFragmentById(R.id.street_view_panorama);
streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);

      

Kotlin


val streetViewPanoramaFragment =
    supportFragmentManager
        .findFragmentById(R.id.street_view_panorama) as SupportStreetViewPanoramaFragment
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.

Java


@Override
public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) {
    LatLng sanFrancisco = new LatLng(37.754130, -122.447129);
    streetViewPanorama.setPosition(sanFrancisco);
}

      

Kotlin


override fun onStreetViewPanoramaReady(streetViewPanorama: StreetViewPanorama) {
    val sanFrancisco = LatLng(37.754130, -122.447129)
    streetViewPanorama.setPosition(sanFrancisco)
}

      

İlk durumu yapılandırma hakkında daha fazla bilgi

Bir haritanın aksine, Street View panoramasının başlangıç durumunu XML yoluyla yapılandırmak mümkün değildir. Ancak, belirttiğiniz seçenekleri içeren bir StreetViewPanoramaOptions nesnesinden geçirerek panoramayı programatik olarak yapılandırabilirsiniz.

Java


LatLng sanFrancisco = new LatLng(37.754130, -122.447129);
StreetViewPanoramaView view = new StreetViewPanoramaView(this,
    new StreetViewPanoramaOptions().position(sanFrancisco));

      

Kotlin


val sanFrancisco = LatLng(37.754130, -122.447129)
val view = StreetViewPanoramaView(
    this,
    StreetViewPanoramaOptions().position(sanFrancisco)
)

      

StreetViewPanoramaFragment hakkında daha fazla bilgi

StreetViewPanoramaFragment, Android Parça sınıfının bir alt sınıfıdır ve Android parçasına 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 bir alt sınıfı olan StreetViewPanoramaView, Street View panoramasını Android View aracına yerleştirmenize olanak tanır. View, ekranın dikdörtgen biçimli bir bölgesini temsil eder ve Android uygulamaları ile widget'larının temel yapı taşıdır. StreetViewPanoramaFragment özelliğine çok benzer bir şekilde StreetViewPanoramaView, panoramanın kapsayıcısı olarak hareket eder ve temel işlevleri StreetViewPanorama nesnesi aracılığıyla ortaya çı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

Street View panoraması görüntülenirken varsayılan olarak şu işlevler kullanılabilir: kaydırma, yakınlaştırma ve bitişik panoramalara gitme. StreetViewPanorama'teki yöntemlerle kullanıcı tarafından kontrol edilen hareketleri etkinleştirebilir ve devre dışı bırakabilirsiniz. Hareket devre dışıyken de programatik değişiklikler yapılabilir.

Panoramanın konumunu ayarla

Street View panoramasının konumunu ayarlamak için bir LatLng ileterek StreetViewPanorama.setPosition() numaralı telefonu arayın. Dilerseniz radius ve source parametrelerini parametre olarak aktarabilirsiniz.

Yarıçap, Street View'un eşleşen bir panorama arayacağı alanı genişletmek veya daraltmak istediğinizde kullanışlıdır. Yarıçapın 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'yu yalnızca açık hava panoramalarını arayacak şekilde kısıtlamak istiyorsanız kaynak yararlı olabilir. Street View panoramaları varsayılan olarak müzeler, kamu binaları, kafeler ve işletmeler gibi yerlerin içinde olabilir. Belirtilen konum için açık hava panoraması bulunmayabileceğini unutmayın.

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);

      

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)

      

Alternatif olarak, StreetViewPanorama.setPosition() konumuna panoId ileterek konumu bir panoramik kimliğe göre ayarlayabilirsiniz.

Yandaki panoramaların panorama kimliğini almak için önce getLocation() kullanarak StreetViewPanoramaLocation alın. Bu nesne, mevcut panoramanın kimliğini ve geçerli nesneye bağlı bir panoramanın kimliğini içeren bir StreetViewPanoramaLink nesne dizisi içerir.

Java


StreetViewPanoramaLocation location = streetViewPanorama.getLocation();
if (location != null && location.links != null) {
    streetViewPanorama.setPosition(location.links[0].panoId);
}

      

Kotlin


streetViewPanorama.location.links.firstOrNull()?.let { link: StreetViewPanoramaLink ->
    streetViewPanorama.setPosition(link.panoId)
}

      

Yakınlaştırma ve uzaklaştırma

Yakınlaştırma düzeyini programatik olarak değiştirmek için StreetViewPanoramaCamera.zoom özelliğini ayarlayabilirsiniz. Yakınlaştırma değeri 1,0 olarak ayarlandığında resim 2 kat büyür.

Aşağıdaki snippet'te StreetViewPanoramaCamera.Builder() ile mevcut kameranın eğimi ve yatağıyla yeni bir fotoğraf makinesi oluşturulurken yakınlaştırma oranı yüzde elli artırılıyor.

Java


float zoomBy = 0.5f;
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
    .zoom(streetViewPanorama.getPanoramaCamera().zoom + zoomBy)
    .tilt(streetViewPanorama.getPanoramaCamera().tilt)
    .bearing(streetViewPanorama.getPanoramaCamera().bearing)
    .build();

      

Kotlin


val zoomBy = 0.5f
val camera = StreetViewPanoramaCamera.Builder()
    .zoom(streetViewPanorama.panoramaCamera.zoom + zoomBy)
    .tilt(streetViewPanorama.panoramaCamera.tilt)
    .bearing(streetViewPanorama.panoramaCamera.bearing)
    .build()

      

Kameranın yönünü (bakış açısı) ayarlama

Street View kamerasının yönünü, yatağı ve yatırmayı StreetViewPanoramaCamera ayarlayarak ayarlayabilirsiniz.

rulman
Kameranın, kuzeyden saat yönünde dereceleri, kamera çemberinin çevresinde belirlendiği yön. Doğru kuzey 0, doğu 90, güney 180, batı 270'tir.
yatır
Y eksenini yukarı veya aşağı yatırın. Aralık; -90 ile 90 arasıdır; -90 değeri aşağıya doğru, 0'ı ufuk çizgisine odaklı ve 90'ı yukarıya doğrudur. Varyant, kameranın başlangıçtaki varsayılan perdesi üzerinden ölçülür. Bu değer genellikle düz (ancak her zaman değil) düz yatay olur. Örneğin, tepe üzerinde çekilen bir resim, yatay olmayan bir varsayılan alana sahip olabilir.

Aşağıdaki snippet'te mevcut kameranın yakınlaştırma ve eğimleriyle yeni bir kamera oluşturmak için StreetViewPanoramaCamera.Builder() kullanılır. Sol ise 30 derece sola döner.

Java


float panBy = 30;
StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
    .zoom(streetViewPanorama.getPanoramaCamera().zoom)
    .tilt(streetViewPanorama.getPanoramaCamera().tilt)
    .bearing(streetViewPanorama.getPanoramaCamera().bearing - panBy)
    .build();

      

Kotlin


val panBy = 30f
val camera = StreetViewPanoramaCamera.Builder()
    .zoom(streetViewPanorama.panoramaCamera.zoom)
    .tilt(streetViewPanorama.panoramaCamera.tilt)
    .bearing(streetViewPanorama.panoramaCamera.bearing - panBy)
    .build()

      

Aşağıdaki snippet, kamerayı 30 derece yatırır.

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();

      

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()

      

Kamera hareketlerini canlandırın

Kamera hareketlerini hareket ettirmek için StreetViewPanorama.animateTo() numaralı telefonu arayın. Animasyon, mevcut kamera özellikleri ile yeni kamera özellikleri arasında kesişiyor. Animasyon olmadan doğrudan kameraya atlamak istiyorsanız süreyi 0 olarak ayarlayabilirsiniz.

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);

      

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)

      

Aşağıdaki animasyon, yukarıdaki animasyonu Handler.postDelayed() kullanarak 2.000 milisaniyede bir çalışacak şekilde planladığınızda sonucu gösterir:

Street View panorama animasyonu demosu