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:
- StreetViewPanoramaBasicDemoActivity: Street View kullanımıyla 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
öğesini kullanma (Fragment yerine) - SplitStreetViewPanoramaAndMapDemoActivity: Sokak görünümü ve harita görüntüleyen bir etkinliği kullanma
Java örnekleri:
- StreetViewPanoramaBasicDemoActivity: Street View kullanımıyla 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
öğesini kullanma (Fragment yerine) - SplitStreetViewPanoramaAndMapDemoActivity: Sokak görünümü ve harita görüntüleyen bir etkinlik oluşturma
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:
Özet olarak:
- 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. OnStreetViewPanoramaReadyCallback
arayüzünü uygulayın veStreetViewPanorama
nesnesinin işleyicisini almak içinonStreetViewPanoramaReady(StreetViewPanorama)
geri çağırma yöntemini kullanın.- 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.
StreetViewPanoramaFragment
kullanıyorsanız parçayı oluşturmak ve özel olarak yapılandırılmış seçeneklerinizde geçirmek içinStreetViewPanoramaFragment.newInstance(StreetViewPanoramaOptions options)
statik fabrika yöntemini kullanın.StreetViewPanoramaView
kullanıyorsanızStreetViewPanoramaView(Context, StreetViewPanoramaOptions)
oluşturucuyu kullanın ve özel yapılandırılmış seçeneklerinizi aktarın.
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: