Google Street View, belirlenen yollardan 360 derecelik panoramik görünümler sunar kapsama alanında kullanılabilir.
Bu videoda, kullanıcılarınıza yüksek kaliteli içerikler sunmak için Street View hizmetini haritada bir adresin gerçek dünya deneyimini varış noktaları veya ilgilendikleri yerlerle ilgili anlamlı bir bağlam sunabilir.
Google Haritalar üzerinden sunulan kapsama alanı Android API v2, Android cihazınızda Google Haritalar uygulamasınınkiyle aynıdır. olanak tanır. Street View hakkında daha fazla bilgi edinmek ve desteklenen alanları görmek için etkileşimli harita için Street View hakkında başlıklı makaleye göz atın.
StreetViewPanorama
sınıfı, Street'i modeller
Panoramayı uygulamanızda görüntüleyin. Kullanıcı arayüzünüzde, bir panorama temsil edilir.
StreetViewPanoramaFragment
veya
StreetViewPanoramaView
nesne olarak tanımlar.
Kod örnekleri
GitHub'daki ApiDemos deposu şunları içerir: Street View kullanımını gösteren örnekler.
Kotlin örnekleri:
- StreetViewPanoramaBasicDemoActivity: Street View'u kullanmayla ilgili temel bilgiler
- StreetViewPanoramaEventsDemoActivity: Etkinlikleri dinleme
- StreetViewPanoramaNavigationDemoActivity: Kontrol Etme Programatik olarak Street View panoramaları
- StreetViewPanoramaOptionsDemoActivity: Kullanıcı arayüzünü ve hareket seçenekleri
- StreetViewPanoramaViewDemoActivity:
StreetViewPanoramaView
(parça yerine) kullanılarak - SplitStreetViewPanoramaAndMapDemoActivity: Street View ve harita gösteren etkinlik
Java örnekleri:
- StreetViewPanoramaBasicDemoActivity: Street View'u kullanmayla ilgili temel bilgiler
- StreetViewPanoramaEventsDemoActivity: Etkinlikleri dinleme
- StreetViewPanoramaNavigationDemoActivity: Kontrol Etme Programatik olarak Street View panoramaları
- StreetViewPanoramaOptionsDemoActivity: Kullanıcı arayüzü ve hareket seçeneklerini değiştirme
- StreetViewPanoramaViewDemoActivity:
StreetViewPanoramaView
(bir Parça yerine) - SplitStreetViewPanoramaAndMapDemoActivity: Street View ve harita gösteren etkinlik
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 işlemek için bir Street View hizmeti sağlar. Görüntüler panoramalar.
Her Street View panoraması, tüm ayrıntıları gösteren bir resim veya resim kümesidir. Tek bir konumdan 360 derece görünüm. Resimler eş dikdörtgene uygun 360 derece yatay görünüm içeren (Plate Carrée) projeksiyonu (tam bir sarma) ve 180 derece dikey görünüm (dümdüzden tepeden tırnağa). 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
, otomatik olarak oluşturulan
merkezinde kamera bulunan bir küre gibi panorama oluşturun. Kullanıcılarınızın
StreetViewPanoramaCamera
kameranın yakınlaştırma ve yönünü (yatırma ve yönü) kontrol edin.
Başlayın
Proje kurma
Başlangıç kılavuzundaki talimatları uygulayarak Android projesi için Haritalar SDK'sı.
Panorama eklemeden önce Street View panoramasının kullanılabilirliğini kontrol edin
Google Play Hizmetleri SDK'sı istemci kitaplığında birkaç Projenize aktarabileceğiniz Street View örnekleri bir temel olarak kullanmak için harika bir fırsattır. Aşağıdaki girişe göz atın yönergelerine de uymanız gerekir.
Android Yardımcı Program Kitaplığı için Haritalar SDK'sı
açık kaynak kodlu bir kitaplıktır.
izin verir. GitHub deposunda bulunan
Street View meta veri yardımcı programı.
Bu yardımcı program bir konumun Google tarafından
Street View. Bu meta veri yardımcı programını çağırarak ve yalnızca yanıt OK
ise bir Street View panoraması ekleyerek Android uygulamasına Street View panoraması eklerken hatalardan kaçınabilirsiniz.
API'yi kullanma
Android cihaza Street View panoraması eklemek için aşağıdaki talimatları uygulayın olabilir. 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:
Özet olarak:
- Etkinlik'e bir Parça nesnesi ekleyin
Street View panoramasını işleyecek. Bunu yapmanın en kolay yolu
Activity
için düzen dosyasına bir<fragment>
öğesi ekleyin. - Şunu uygulayın:
OnStreetViewPanoramaReadyCallback
arayüzünü veonStreetViewPanoramaReady(StreetViewPanorama)
geri çağırma yöntemini kullanarakStreetViewPanorama
nesnesini tanımlayın. - 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 ekle
Bir <fragment>
öğesi tanımlamak için etkinliğin düzen dosyasına bir
Parça nesnesi. Bu öğede class
özelliğini com.google.android.gms.maps.StreetViewPanoramaFragment
(veya
SupportStreetViewPanoramaFragment
).
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ı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ğiticide
StreetViewPanoramaFragment
, çünkü Street View eklemenin en basit yolu budur
ekleyin. İlk adım, geri çağırma arayüzünü uygulamaktır:
Kotlin
class StreetViewActivity : AppCompatActivity(), OnStreetViewPanoramaReadyCallback { // ... }
Java
class StreetViewActivity extends AppCompatActivity implements OnStreetViewPanoramaReadyCallback { // ... }
Activity
cihazınızdaki onCreate()
yöntemini kullanıyorsanız, 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); }
<fragment>
öğenizin kaynak kimliğini FragmentManager.findFragmentById()
'a ileterek parçanın adını alın.
R.id.streetviewpanorama
kaynak kimliğinin otomatik olarak
Android projesini anlatacağım.
Ardından getStreetViewPanoramaAsync()
kullanın.
için geri çağırmayı unutmayı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);
Şunu kullanın:
onStreetViewPanoramaReady(StreetViewPanorama)
şunun boş olmayan bir örneğini almak için geri çağırma yöntemi:
StreetViewPanorama
, kullanıma hazır.
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
Haritalarda olduğu gibi, Street View panoramasının ilk durumunu XML üzerinden yapılandırmak mümkün değildir. Ancak her bir yapılandırmanın
bu panoramayı programlı bir şekilde
StreetViewPanoramaOptions
nesne
belirttiğiniz seçenekleri içerir.
StreetViewPanoramaFragment
kullanıyorsanız parçayı oluşturmak ve özel yapılandırılmış seçeneklerinizi iletmek içinStreetViewPanoramaFragment.newInstance(StreetViewPanoramaOptions options)
statik fabrika yöntemini kullanın.StreetViewPanoramaView
kullanıyorsanızStreetViewPanoramaView(Context, StreetViewPanoramaOptions)
yapıcısını kullanın ve özel yapılandırılmış seçeneklerinizi iletin.
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ı kullanır ve bir Street View yerleştirmenize olanak tanır
bir Android parçasına yerleştiriyoruz. StreetViewPanoramaFragment
nesne şu şekilde hareket eder:
ve StreetViewPanorama
nesnesine erişim sağlar.
StreetViewPanoramaView
StreetViewPanoramaView
, Android'in bir alt sınıfıdır
View
sınıfı, Street View yerleştirmenize olanak tanır
Android View
'de panorama yapın. View
, bir dikdörtgen bölgesini
Android uygulamaları ve widget'ları için temel bir 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 etkinliği yönlendirmelidir
yaşam döngüsü yöntemleri (ör. onCreate()
, onDestroy()
, onResume()
ve
StreetViewPanoramaView
sınıfındaki ilgili yöntemlere onPause())
.
Kullanıcı tarafından kontrol edilen işlevleri özelleştirin
Varsayılan olarak, kullanıcı aşağıdaki işlevler
Street View panoraması: kaydırma, yakınlaştırma ve seyahat etme
bu özelliği kullanabilirsiniz. Kullanıcı tarafından kontrol edilen hareketleri etkinleştirebilir ve devre dışı bırakabilirsiniz
StreetViewPanorama
adresindeki yöntemlerle. Hareket devre dışı bırakıldığında programatik değişiklikler yine de yapılabilir.
Panoramanın konumunu ayarlayın
Street View panoramasının konumunu ayarlamak için şu numarayı arayın:
StreetViewPanorama.setPosition()
, LatLng
geçti.
radius
ve source
parametrelerini isteğe bağlı parametreler olarak da iletebilirsiniz.
Yarıçap, bir alanı genişletmek ya da alanı genişletmek istiyorsanız
Street View'ın eşleşen bir panorama arayacağı alanı daraltın. Yarıçap
0 değeri, panoramanın tam olarak belirtilen LatLng
öğesine bağlanması gerektiği anlamına gelir.
Varsayılan yarıçap 50 metredir. Aynı ekranda birden fazla panorama varsa
eşleşen alan varsa API en iyi eşleşmeyi döndürür.
Street View'ı yalnızca şurada sınırlamak istiyorsanız bir kaynak yararlıdır: Yalnızca açık havadaki panoramaları arar. Varsayılan olarak Street View panoramaları müze, kamu binası, kafe ve işletme 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, bir
panoId
- StreetViewPanorama.setPosition()
.
Bitişik panoramaların panorama kimliğini almak için önce şunu kullanın:
getLocation()
almak için StreetViewPanoramaLocation
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
Yakınlaştırma düzeyini programlı bir şekilde değiştirmek için
StreetViewPanoramaCamera.zoom
.
Yakınlaştırmayı 1,0 olarak ayarladığınızda resim 2 kat büyütülür.
Aşağıdaki snippet, StreetViewPanoramaCamera.Builder()
kullanarak bir
mevcut kameranın yatırma ve yatağına sahip yeni bir kameranın yanı sıra
yakınlaştırmayı yüzde elli oranında artırdık.
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
Street View kamerasının yönünü belirlemek için
StreetViewPanoramaCamera
üzerinde yön ve yatırma.
- dayanmak
- Kameranın baktığı yön (derece cinsinden belirtilir) kamera karesinin çevresinde saat yönünde. Gerçek kuzey 0, doğu 90, güney 180, batı 270.
- yatırmak
- Y ekseni yukarı veya aşağı eğilir. Aralık -90 ile 0 ile 90 arasındadır, -90 ise tam aşağı bakıyor, 0 ufukta ortalanmış ve 90 tanesi yukarıya doğru. 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 görüntünün varsayılan eğimi muhtemelen yatay değildir.
Aşağıdaki snippet, StreetViewPanoramaCamera.Builder()
kullanarak bir
mevcut kameranın yakınlaştırma ve eğme özelliklerini ayarlarken yeni kameranın
sola doğru 30 derece duyuyorum.
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 şunu arayın:
StreetViewPanorama.animateTo()
.
Animasyon, mevcut kamera özellikleri ile yeni kamera özellikleri arasında interpolasyon yapar
kamera özellikleriyle değiştirebilirsiniz. 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 çalıştırılmak üzere programladığınızda sonuç gösterilmektedir
Handler.postDelayed()
kullanılarak her 2.000 milisaniyede bir: