Street View

Platform seçin: Android iOS JavaScript

Google Street View, kapsama alanı boyunca belirlenen yollardan 360 derece panoramik manzaralar sunar.

Bu videoda, kullanıcılarınıza haritada bir adresle ilgili gerçek dünya deneyimi sunmak için Street View hizmetini nasıl kullanabileceğiniz gösterilmektedir.

Google Haritalar Android API'si v2'deki kapsam, Android cihazınızdaki Google Haritalar uygulamasının kapsamıyla aynıdır. Street View Hakkında bölümünden Street View hakkında daha fazla bilgi edinebilir ve etkileşimli haritada desteklenen alanları görebilirsiniz.

StreetViewPanorama sınıfı, uygulamanızda 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'ın 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 almak ve değiştirmek için Street View hizmeti sunar. Görüntüler panorama olarak döndürülür.

Her Street View panoraması, tek bir konumdan tam 360 derecelik görünüm sağlayan bir resim veya görüntü kümesidir. Resimler, 360 derece yatay görünüm (tam sarmalama) ve 180 derece dikey görünüm (düzden en doğruya) içeren eş dikdörtgen (Plate Carrée) projeksiyonuna uygundur. Ortaya çıkan 360 derecelik panorama, küre üzerindeki görüntünün iki boyutlu yüzeyine sarmalandığı bir projeksiyon tanımlar.

StreetViewPanorama, panoramayı merkezinde bir kamera bulunan küre biçiminde görüntüleyen bir görüntüleyici sağlar. Kameranın yakınlaştırmasını ve yönünü (yatış ve yön) kontrol etmek için StreetViewPanoramaCamera aracını kullanabilirsiniz.

Başlayın

Proje kurma

Android için Haritalar SDK'sı projesi oluşturmak istiyorsanız başlangıç kılavuzundaki adımları uygulayın.

Panorama eklemeden önce Street View panoramalarının kullanılabilirliğini kontrol edin

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

Android Utility Library için Haritalar SDK'sı çeşitli uygulamalar için faydalı olan sınıflardan oluşan 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. Bu meta veri yardımcı programını çağırarak ve yalnızca yanıt OK olduğunda Street View panoraması ekleyerek bir Android uygulamasına Street View panoraması eklerken hataları önleyebilirsiniz.

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. Parçalar, görünümler ve panoramanın özelleştirilmesi 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. Etkinlik'e, Street View panoramasını işleyecek bir Pragment nesnesi ekleyin. Bunu yapmanın en kolay yolu, Activity düzen dosyasına bir <fragment> öğesi eklemektir.
  2. OnStreetViewPanoramaReadyCallback arayüzünü uygulayın ve StreetViewPanorama nesnesinin işleyicisini almak için onStreetViewPanoramaReady(StreetViewPanorama) geri çağırma yöntemini kullanın.
  3. Geri çağırmayı kaydetmek için parçada getStreetViewPanoramaAsync() çağrısı yapın.

Aşağıda her bir adımla ilgili daha fazla ayrıntı verilmiştir.

Parça ekle

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

Bir düzen dosyasındaki parça örneği:

<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 bir StreetViewPanoramaFragment veya StreetViewPanoramaView nesnesinde geri çağırma örneğini ayarlamanız gerekir. Bu eğiticide, uygulamanıza Street View eklemenin en basit yolu olduğu için 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'inizin 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çanın bir tanıtıcısını alın. Düzen dosyasını oluşturduğunuzda kaynak kimliğinin R.id.streetviewpanorama otomatik olarak Android projesine eklendiğine dikkat edin.

Ardından, parçadaki 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);

      

Boş olmayan, kullanıma hazır bir StreetViewPanorama ö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);
}

      

Başlangıç durumunu yapılandırma hakkında daha fazla bilgi

Haritadan farklı olarak, Street View panoramasının ilk durumunu XML yoluyla yapılandırmak mümkün değildir. Ancak belirttiğiniz seçenekleri içeren bir StreetViewPanoramaOptions nesnesini geçirerek 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 Parçası 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 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, Android View cihazına Street View panoraması yerleştirmenize olanak tanır. View, ekranın dikdörtgen bir alanını temsil eder ve Android uygulamaları ile widget'lar için temel bir yapı taşıdır. StreetViewPanoramaFragment özelliğine çok benzer şekilde StreetViewPanoramaView de panorama için bir kapsayıcı görevi görür ve temel işlevleri StreetViewPanorama nesnesi aracılığıyla açığa çıkarır. Bu sınıfın kullanıcıları, tüm etkinlik yaşam döngüsü yöntemlerini (ör. onCreate(), onDestroy(), onResume() ve onPause())) StreetViewPanoramaView sınıfındaki ilgili yöntemlere iletmelidir.

Kullanıcı tarafından kontrol edilen işlevleri özelleştirin

Varsayılan olarak, Street View panoramasını görüntülerken kullanıcı şu işlevlerden yararlanabilir: yatay kaydırma, yakınlaştırma ve bitişik panoramalara gitme. Kullanıcı tarafından kontrol edilen hareketleri StreetViewPanorama'teki çeşitli yöntemlerle etkinleştirebilir ve devre dışı bırakabilirsiniz. Hareket devre dışı bırakıldığında programlı değişiklikler yapmaya devam edebilir.

Panoramanın konumunu ayarlayın

Street View panoramasının konumunu ayarlamak için bir LatLng geçtikten sonra StreetViewPanorama.setPosition() numaralı telefonu arayın. radius ve source parametrelerini de isteğe bağlı parametreler olarak geçirebilirsiniz.

Yarıçap, Street View'ın eşleşen bir panoramayı arayacağı alanı genişletmek veya daraltmak istediğinizde kullanışlıdır. Yarıçapın 0 olması, panoramanın belirtilen LatLng ile tam olarak bağlanması 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'ı yalnızca açık hava panoramalarını arayacak şekilde kısıtlamak istiyorsanız ilgili kaynak kullanabilirsiniz. Varsayılan olarak, Street View panoramaları müze, kamu binaları, kafeler ve işletmeler gibi yerlerin içinde olabilir. Belirtilen konum için açık hava panoramalarının var 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() konumuna panoId ileterek konumu panorama kimliğine göre de 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 dizisinden oluşur. Bu nesnelerin her biri, mevcut panoramaya bağlı panoramaları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 ayarını yaparak yakınlaştırma düzeyini programatik olarak değiştirebilirsiniz. Yakınlaştırma seviyesi 1,0 olarak ayarlandığında resmi 2 kat büyütür.

Aşağıdaki snippet, mevcut kameranın eğimi ve açısıyla 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ış noktası) ayarlayın

Street View kamerasının yönünü belirlemek için yön değiştirme ve eğme özelliklerini StreetViewPanoramaCamera üzerine getirin.

dayanmak
Kameranın baktığı yön. Gerçek kuzeyden saat yönünde, kamera konumunun çevresinde saat yönünde derece cinsinden belirtilir. Gerçek kuzey 0, doğu 90, güney 180, batı 270'tir.
yatırmak
Y eksenini yukarı veya aşağı yatırır. Aralık, -90 ile 0 ile 90 arasındadır. -90 düz aşağı, 0 ufuk ortalanmış ve 90 dimdik yukarı bakmaktadır. Varyans, kameranın genellikle (ancak her zaman değil) düz yatay olan ilk varsayılan perdesinden ölçülür. Örneğin, bir tepede çekilen bir görüntüde muhtemelen yatay olmayan varsayılan bir perde olacaktır.

Aşağıdaki snippet, mevcut kameranın yakınlaştırma ve eğme ayarlarıyla yeni bir kamera oluşturmak için StreetViewPanoramaCamera.Builder() hareketini kullanır ve yatağı sola doğru 30 derece değiştirir.

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

Kamera hareketlerini canlandırmak için StreetViewPanorama.animateTo() çağrısı yapın. Animasyon, mevcut kamera özellikleri ile yeni kamera özellikleri arasında interpolasyon yapar. Animasyon olmadan doğrudan kameraya geçmek 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, 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