Kamera ve görünüm

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

Android için Haritalar SDK'sındaki haritalar, kolay hareketlerle eğilerek döndürülebilir ve böylece kullanıcılara kendileri için anlamlı bir yönde harita ayarlama olanağı sağlanır. Herhangi bir yakınlaştırma düzeyinde, vektör tabanlı harita karolarının daha küçük ayak izi sayesinde haritayı yatay kaydırabilir veya çok az bir gecikmeyle görünümü değiştirebilirsiniz.

Kod örnekleri

GitHub'daki ApiDemos deposu, kamera özelliklerini gösteren bir örnek içerir:

Giriş

Web'deki Google Haritalar gibi, Android için Haritalar SDK'sı da Mercator projeksiyonu kullanarak cihazınızın yüzeyindeki (düz bir düzlem) dünyanın yüzeyini (bir düzlem) temsil eder. Doğu ve batı yönünde, dünya kendi etrafında sorunsuz bir şekilde ilerledikçe harita sonsuza dek tekrar edilir. Kuzey ve güney yönünde harita yaklaşık 85 derece kuzey ve 85 derece güneyle sınırlıdır.

Not: Merkatör projeksiyonu sonsuz bir uzunluğa sahip, ancak mantıksal olarak sonsuz bir yüksekliğe sahip. Sonuçta ortaya çıkan harita şeklinin kare şeklinde olması için yaklaşık olarak +/- 85 derecede Mercator projeksiyonunu kullanan temel harita görüntüleri "kestik". Böylece karo seçimi için daha kolay bir mantık sağlandı.

Android için Haritalar SDK'sı, haritanın kamerasını değiştirerek kullanıcının haritadaki bakış açısını değiştirmenize olanak tanır.

Kamerada yaptığınız değişiklikler işaretçiler, yer paylaşımları veya eklediğiniz diğer grafiklerde herhangi bir değişiklik yapmaz ancak yaptığınız düzenlemeleri yeni görünüme daha iyi uyacak şekilde değiştirmek isteyebilirsiniz.

Haritadaki kullanıcı hareketlerini dinleyebildiğinizden, kullanıcı isteklerine yanıt olarak haritayı değiştirebilirsiniz. Örneğin, geri çağırma yöntemi OnMapClickListener.onMapClick() haritaya tek bir dokunuşla yanıt verir. Yöntem, dokunma konumunun enlem ve boylamını aldığından, o noktaya kaydırma yaparak veya yakınlaştırarak yanıt verebilirsiniz. Benzer yöntemler işaretçi balonunun dokunmalarına yanıt vermek veya işaretçi üzerindeki bir sürükleme hareketine yanıt vermek için kullanılabilir.

Ayrıca kamera hareketlerini dinleyebilir, böylece kamera hareket etmeye başladığında, şu anda hareket ettiğinde veya hareket etmeyi durdurduğunda uygulamanızın bildirim almasını sağlayabilirsiniz. Ayrıntılar için kamera değişiklik etkinlikleri kılavuzuna bakın.

Kamera konumu

Harita görünümü, düz bir düzlemde aşağıya bakan bir kamera olarak modellenmiştir. Kameranın konumu (ve dolayısıyla harita görünümü), şu özellikler tarafından belirlenir: hedef (enlem/boylam konumu), yön, yatırma ve yakınlaştırma.

Kamera özellikleri şeması

Hedef (konum)

Kamera hedefi, enlem ve boylam koordinatları olarak belirtilen harita merkezinin konumudur.

Enlem, -85 ila 85 derece (dahil) olabilir. Bu aralığın üstündeki veya altındaki değerler, bu aralıktaki en yakın değere ayarlanır. Örneğin, 100 enlem değeri 85 olarak ayarlanır. Boylam (-180 ve 180 derece dahil) arasındadır. Bu aralığın üstündeki veya altındaki değerler, (-180, 180) aralığına denk gelecek şekilde sarmalanır. Örneğin, 480, 840 ve 1200 öğelerinin tümü 120 dereceye kaydırılır.

Rulman (yön)

Kamera yatağı, gerçek kuzeyden derece cinsinden ve haritanın üst kenarına karşılık gelen pusula yönünü belirtir. Haritanın ortasından üst kenarına bir dikey çizgi çizerseniz rulman, kameranın doğru kuzeye doğru başlığına (derece cinsinden) karşılık gelir.

0 değeri, haritanın üst kısmının doğru kuzeyi gösterdiği anlamına gelir. 90 numaralı değer, doğudaki en yüksek harita noktaları (pusulada 90 derece) anlamına gelir. Değer 180, haritanın üst noktasının güneydeki noktasıdır.

Maps API, bir haritanın konumunu değiştirmenize olanak sağlar. Örneğin, sıklıkla araba kullanan bir kişi, yol haritasını seyahat yönüyle uyumlu hale getirmek için dönüştürürken yürüyüşçüler, genellikle haritayı kullanıp pusulayı kullanıp kuzeye dikey bir çizgi çizer.

Yatırma (görüntüleme açısı)

Eğme, kameranın doğrudan yaydaki konumunun üzerindeki konumunu belirler ve nadir derecesinden itibaren (kameranın hemen altına işaret eden yön) derece olarak ölçülür. 0 değeri, bir kameranın doğrudan aşağı olduğunu gösterir. 0'dan büyük değerler, belirtilen derece cinsinden ufuğa doğru yerleştirilmiş bir kameraya karşılık gelir. Görüntüleme açısını değiştirdiğinizde, harita, uzak özellikler daha küçük, yakındaki özellikler ise daha büyük, perspektif olarak görünür. Aşağıdaki resimler bunu göstermektedir.

Aşağıdaki resimlerde görüntüleme açısı 0 derecedir. İlk resimde bunun bir şeması gösterilmektedir. 1 konumu kamera konumu, 2 konumu ise mevcut harita konumudur. Açılan harita onun altında gösterilir.

0 derece görüntüleme açısında ve 18 yakınlaştırma düzeyinde park edilmiş bir kameranın gösterildiği ekran görüntüsü.
Kameranın varsayılan görüntüleme açısıyla birlikte gösterilen harita.
Kameranın varsayılan konumunu, doğrudan harita konumunun üzerinde, 0 derecelik açıyla gösteren şema.
Kameranın varsayılan görüntüleme açısı.

Aşağıdaki resimlerde görüntüleme açısı 45 derecedir. Kameranın, yukarıdan aşağı (0 derece) zemin (90 derece) arasında bir yay boyunca 3 konumuna geleceğini unutmayın. Kamera hâlâ haritanın merkez noktasını işaret ediyor, ancak çizginin 4. konumunda temsil ettiği alan artık görünür durumda.

Kameranın 15 yakınlaştırma düzeyinde 45 derece görüntüleme açısına sahip olduğu bir haritanın ekran görüntüsü.
45 derece görüş açısıyla görüntülenen harita.
Kameranın görüş açısını 45 dereceye, yakınlaştırma düzeyinin ise 18 olarak ayarlandığını gösteren şema.
45 derece kamera görüş açısı.

Bu ekran görüntüsündeki harita hâlâ orijinal haritadakiyle aynı noktada yer almaktadır ancak haritanın üst kısmında daha fazla özellik görünmektedir. Açı 45 dereceden büyük olduğunda, kamera ile harita konumu arasındaki özellikler orantılı olarak daha büyük görünürken, harita konumu dışındaki özellikler ise orantılı olarak daha küçük görünerek üç boyutlu bir etki sağlar.

Tarih aralığını

Kameranın yakınlaştırma düzeyi, haritanın ölçeğini belirler. Büyük yakınlaştırma düzeylerinde ekranda daha fazla ayrıntı, daha küçük yakınlaştırma düzeylerinde ise dünyanın daha büyük bir kısmı görülebilir. Yakınlaştırma düzeyi 0'da, haritanın ölçeği tüm dünyanın yaklaşık 256 dp genişliğinde (yoğunluktan bağımsız pikseller) olur.

Yakınlaştırma düzeyini 1 artırmak, ekranın dünya genişliğini iki katına çıkarır. Dolayısıyla, yakınlaştırma düzeyi N'de dünyanın genişliği yaklaşık 256 * 2N dp'dir. Örneğin, 2. yakınlaştırma düzeyinde, tüm dünya yaklaşık 1024 dp genişliğindedir.

Yakınlaştırma düzeyi bir tam sayı olmamalıdır. Haritanın izin verdiği yakınlaştırma düzeylerinin aralığı, hedef, harita türü ve ekran boyutu gibi çeşitli etmenlere bağlıdır. Aralık dışındaki tüm sayılar, bir sonraki en yakın geçerli değere dönüştürülür. Bu değer, minimum yakınlaştırma düzeyi veya maksimum yakınlaştırma düzeyi olabilir. Aşağıdaki listede, her bir yakınlaştırma düzeyinde görmeyi bekleyebileceğiniz yaklaşık ayrıntı düzeyi gösterilmektedir:

  • 1: Dünya
  • 5: Karalar/kıta
  • 10: Şehir
  • 15: Sokaklar
  • 20: Binalar
Aşağıdaki resimlerde farklı yakınlaştırma düzeylerinin görsel görünümü gösterilmektedir:
Bir haritanın 5 yakınlaştırma düzeyinde ekran görüntüsü
5. seviyedeki bir harita.
15 yakınlaştırma düzeyinde haritanın ekran görüntüsü
Yakınlaştırma düzeyi 15'teki harita.
20. seviyedeki bir haritanın ekran görüntüsü
20. seviyedeki bir harita.

Kamerayı hareket ettirme

Maps API, dünyanın hangi kısmının haritada görüneceğini değiştirmenizi sağlar. Bunu, kameranın konumunu değiştirmek yerine kameranın konumunu değiştirerek yapabilirsiniz.

Kamerayı değiştirdiğinizde, elde edilen kamera hareketini canlandırma seçeneğiniz vardır. Animasyon, mevcut kamera özellikleri ile yeni kamera özellikleri arasında geçiş yapar. Ayrıca, animasyonun süresini de kontrol edebilirsiniz.

Kameranın konumunu değiştirmek için CameraUpdate kullanarak kamerayı taşımak istediğiniz yeri belirtmeniz gerekir. Maps API sayesinde CameraUpdateFactory kullanarak birçok farklı türde CameraUpdate oluşturabilirsiniz. Aşağıdaki seçenekler kullanılabilir:

Yakınlaştırma düzeyini değiştirme ve minimum/maksimum yakınlaştırmayı ayarlama

CameraUpdateFactory.zoomIn() ve CameraUpdateFactory.zoomOut() Diğer tüm özellikleri aynı tutarken yakınlaştırma düzeyini 1, 0 değiştiren bir CameraUpdate.

CameraUpdateFactory.zoomTo(float) size, yakınlaştırma düzeyini belirtilen değerle değiştiren ve diğer tüm özellikleri aynı tutan bir CameraUpdate sunar.

CameraUpdateFactory.zoomBy(float) ve CameraUpdateFactory.zoomBy(float, Point) yakınlaştırma düzeyini verilen değerle birlikte artıran (veya değer negatifse azaltan) bir CameraUpdate sunar. Sonuncu, ekranda belirli bir noktayı (enlem/boylam) aynı kalacak şekilde düzeltir. Bu nedenle, bunu sağlamak için kameranın konumunu değiştirebilir.

Tercih ettiğiniz bir minimum ve/veya maksimum yakınlaştırma düzeyini ayarlamak yararlı olabilir. Örneğin, uygulamanızda önemli bir yerin çevresinde tanımlanmış bir alan gösteriliyorsa veya sınırlı bir yakınlaştırma seviyesi grubuna sahip özel bir karo kullanıyorsanız kullanıcı deneyimini kontrol etmek yararlı olur.

Java


private GoogleMap map;
    map.setMinZoomPreference(6.0f);
    map.setMaxZoomPreference(14.0f);

      

Kotlin


private lateinit var map: GoogleMap

    map.setMinZoomPreference(6.0f)
    map.setMaxZoomPreference(14.0f)

      

API'nin, kullanıcıların çok düşük veya çok yüksek yakınlaştırma yapmasına izin vermemesi gereken teknik hususlar olduğunu unutmayın. Örneğin, uydu veya arazinin haritası, esas harita karolarından daha düşük olabilir.

Kamera konumunu değiştirme

Sık karşılaşılan konum değişiklikleri için iki kolay yöntem vardır. CameraUpdateFactory.newLatLng(LatLng) size, diğer tüm özellikleri korurken kameranın enlemini ve boylamını değiştiren bir CameraUpdate verir. CameraUpdateFactory.newLatLngZoom(LatLng, float) size, diğer tüm özellikleri korurken kameranın enlemini, boylamını ve yakınlaştırmasını değiştiren bir CameraUpdate sunar.

Kamera konumunu değiştirme konusunda tam esneklik için CameraUpdateFactory.newCameraPosition(CameraPosition) kullanın. Bu seçenek, kamerayı belirtilen konuma taşıyan bir CameraUpdate sunar. CameraPosition elde edilebilir (doğrudan, new CameraPosition() kullanılarak veya CameraPosition.Builder ile new CameraPosition.Builder() kullanılarak).

Kaydırma (kaydırma)

CameraUpdateFactory.scrollBy(float, float) size, haritanın belirtilen piksel sayısı kadar hareket etmesi için kameranın enlem ve boylamını değiştiren bir CameraUpdate sunar. Pozitif bir x değeri, kameranın sağa hareket etmesine neden olur. Dolayısıyla, harita sola gelmiş gibi görünür. Pozitif y değeri, kameranın aşağı hareket etmesine neden olur. Dolayısıyla harita yukarı taşınmıştır. Ters negatif x değerleri ise kameranın sola hareket etmesine neden olur. Dolayısıyla harita sağa kaydırılmış, negatif y değerleri ise kameranın yukarı gitmesine neden olur. Kaydırma, kameranın mevcut yönüyle ilgilidir. Örneğin, kamera 90 derece rulman içeriyorsa doğuda "yukarı" kelimesi görünür.

Sınır ayarlama

Haritanın sınırlarını ayarlama

Kamerayı bazen, ilgi alanının tamamı mümkün olan en yüksek yakınlaştırma düzeyinde görünecek şekilde hareket ettirmek yararlıdır. Örneğin, benzin istasyonlarının tümünü kullanıcının şu anki konumundan beş kilometre önce görüntülüyorsanız kamerayı kameranın tümünü ekranda görünecek şekilde taşımak isteyebilirsiniz. Bunu yapmak için önce ekranda görünmesini istediğiniz LatLngBounds değerini hesaplayın. Daha sonra, belirtilen LatLngBounds dolgusunu dikkate alarak, LatLngBounds konumunu tam olarak haritaya sığacak şekilde değiştiren bir CameraUpdate değeri elde etmek için CameraUpdateFactory.newLatLngBounds(LatLngBounds bounds, int padding) özelliğini kullanabilirsiniz. Döndürülen CameraUpdate, belirtilen sınırlar ve haritanın kenarı arasındaki boşluğun (piksel cinsinden) en az belirtilen dolgu kadar olmasını sağlar. Haritayı hem eğip hem de yatağının 0 olacağını unutmayın.

Java


LatLngBounds australiaBounds = new LatLngBounds(
    new LatLng(-44, 113), // SW bounds
    new LatLng(-10, 154)  // NE bounds
);
map.moveCamera(CameraUpdateFactory.newLatLngBounds(australiaBounds, 0));

      

Kotlin


val australiaBounds = LatLngBounds(
    LatLng((-44.0), 113.0),  // SW bounds
    LatLng((-10.0), 154.0) // NE bounds
)
map.moveCamera(CameraUpdateFactory.newLatLngBounds(australiaBounds, 0))

      

Haritayı bir alanın merkezine yerleştirme

Bazı durumlarda, kameranızı aşırı sınırların yer aldığı bir sınır yerine ortalamak isteyebilirsiniz. Örneğin, sabit bir yakınlaştırma düzeyini korurken kamerayı bir ülkede ortalamak. Bu durumda, LatLngBounds oluşturup LatLngBounds ile CameraUpdateFactory.newLatLngZoom(LatLng latLng, float zoom) kullanarak benzer bir yöntem kullanabilirsiniz.getCenter() yöntemi. getCenter() yöntemi, LatLngBounds coğrafi merkezini döndürür.

Java


LatLngBounds australiaBounds = new LatLngBounds(
    new LatLng(-44, 113), // SW bounds
    new LatLng(-10, 154)  // NE bounds
);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(australiaBounds.getCenter(), 10));

      

Kotlin


val australiaBounds = LatLngBounds(
    LatLng((-44.0), 113.0),  // SW bounds
    LatLng((-10.0), 154.0) // NE bounds
)
map.moveCamera(CameraUpdateFactory.newLatLngZoom(australiaBounds.center, 10f))

      

Yöntemin aşırı yüklenmesi newLatLngBounds(boundary, width, height, padding), bir dikdörtgen için piksel cinsinden bir genişlik ve yükseklik belirtmenizi sağlar. Amaç, bunların haritanın boyutlarına karşılık gelmesidir. Dikdörtgen, merkezi harita görünümüyle aynı olacak şekilde konumlandırılır (böylece, belirtilen boyutlar harita görünümünün boyutlarıyla aynıysa, dikdörtgen harita görünümüyle örtüşür). Döndürülen CameraUpdate işlevi, kamerayı belirtilen LatLngBounds öğesinin, belirtilen dolgunun içinde mümkün olan en büyük yakınlaştırma düzeyinde ortalamasını alacak şekilde, gereken dolguyu dikkate alarak hareket ettirir.

Not: Yalnızca, düzenden sonra kamerayı hareket ettirmek için kullanılacak daha basit bir yöntem olarak newLatLngBounds(boundary, padding) oluşturun. Düzen sırasında API, haritanın sınır sınırını doğru şekilde yansıtmak için gereken görüntüleme sınırlarını hesaplar. API daha önce ilettiğiniz bağımsız değişkenlerden görüntüleme sınırlarını hesapladığı için, daha karmaşık bir yöntem olan newLatLngBounds(boundary, width, height, padding) tarafından döndürülen CameraUpdate değerini, haritada öğe düzenlenmeden önce bile istediğiniz zaman kullanabilirsiniz.

Kullanıcının kaydırmayı belirli bir alanla sınırlandırma

Yukarıdaki senaryolarda, haritanın sınırlarını belirlersiniz ancak kullanıcı bu sınırların dışına kaydırabilir veya kaydırabilir. Bunun yerine, haritanın yalnızca odak noktasındaki (kamera hedefi) enlem/boylam merkezi sınırlarını sınırlamak isteyebilirsiniz. Böylece kullanıcılar yalnızca bu sınırlar içinde gezinebilir ve kaydırma yapabilir. Örneğin, bir alışveriş merkezinin veya havaalanının perakende uygulaması, haritayı belirli sınırlarla sınırlamak isteyebilir. Böylece kullanıcılar bu sınırlar arasında gezinebilir ve ekranı kaydırabilir.

Java


// Create a LatLngBounds that includes the city of Adelaide in Australia.
LatLngBounds adelaideBounds = new LatLngBounds(
    new LatLng(-35.0, 138.58), // SW bounds
    new LatLng(-34.9, 138.61)  // NE bounds
);

// Constrain the camera target to the Adelaide bounds.
map.setLatLngBoundsForCameraTarget(adelaideBounds);

      

Kotlin


// Create a LatLngBounds that includes the city of Adelaide in Australia.
val adelaideBounds = LatLngBounds(
    LatLng(-35.0, 138.58),  // SW bounds
    LatLng(-34.9, 138.61) // NE bounds
)

// Constrain the camera target to the Adelaide bounds.
map.setLatLngBoundsForCameraTarget(adelaideBounds)

      

Aşağıdaki şemada, kamera hedefinin görüntü alanından biraz daha büyük bir alanla sınırlandırılması durumu örnek olarak verilmiştir. Kamera hedefinin sınırlı alan içinde kalması şartıyla, kullanıcı kaydırabilir ve kaydırabilir. Artı işareti, kamera hedefini temsil eder:

Görüntü alanından daha büyük olan bir LatLngBounds kamerası gösteren şema.

Harita, görüntü alanını tanımlanan sınırların dışında kalan alanlarla göstermesine neden olsa bile her zaman görünümü doldurur. Örneğin, kamera hedefini sınırlı alanın bir köşesine konumlandırırsanız köşenin dışındaki alan görüntü alanında görünür ancak kullanıcılar bu alana daha fazla kayamaz. Aşağıdaki şemada bu senaryo gösterilmektedir. Çapraz, kamera hedefini temsil eder:

Kameranın LatLngBounds sağ alt köşesine yerleştirilen kamera hedefini gösteren şema.

Aşağıdaki şemada, kamera hedefinin sınırları çok düşüktür ve kullanıcıya sayfayı kaydırmak veya kaydırmak için çok az fırsat vardır. Artı işareti, kamera hedefini temsil eder:

Görüntü alanından daha küçük bir kamera olan LatLngBounds'u gösteren şema.

Kamera görünümü güncelleniyor

Haritaya bir CameraUpdate uygulamak için kamerayı anında hareket ettirebilir veya kamerayı sorunsuz bir şekilde canlandırabilirsiniz. Belirtilen CameraUpdate ile kamerayı hemen hareket ettirmek için GoogleMap.moveCamera(CameraUpdate) numarasını arayabilirsiniz.

Değişikliği canlandırarak özellikle kısa hareketlerde kullanıcı deneyimini daha hoş hale getirebilirsiniz. Bunun için GoogleMap.moveCamera GoogleMap.animateCamera numaralı telefonu aramak yerine. Harita yeni özelliklere sorunsuz bir şekilde taşınır. Bu yöntemin en ayrıntılı biçimi olan GoogleMap.animateCamera(cameraUpdate, duration, callback) üç bağımsız değişken sunar:

cameraUpdate
Kameranın nereye taşınacağını açıklayan CameraUpdate.
callback
GoogleMap.CancellableCallback etiketini uygulayan bir nesne. Görevlerin işlenmesine yönelik bu genelleştirilmiş arayüz "onCancel()" ve "onFinished()" yöntemlerini tanımlar. Animasyon için yöntemler şu durumlarda çağrılır:
onFinish()
Animasyon kesintisiz olarak tamamlanırsa çağrılır.
onCancel()

Animasyon, stopAnimation() çağrısıyla veya yeni bir kamera hareketi başlatılarak kesintiye uğrarsa çağrılır.

Bu durum, GoogleMap.stopAnimation() numaralı telefonu aradığınızda da ortaya çıkabilir.

duration
Animasyonun istenen süresi (milisaniye cinsinden int olarak).

Aşağıdaki kod snippet'leri, kamerayı hareket ettirmenin yaygın yollarından bazılarını göstermektedir.

Java


LatLng sydney = new LatLng(-33.88,151.21);
LatLng mountainView = new LatLng(37.4, -122.1);

// Move the camera instantly to Sydney with a zoom of 15.
map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 15));

// Zoom in, animating the camera.
map.animateCamera(CameraUpdateFactory.zoomIn());

// Zoom out to zoom level 10, animating with a duration of 2 seconds.
map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);

// Construct a CameraPosition focusing on Mountain View and animate the camera to that position.
CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(mountainView )      // Sets the center of the map to Mountain View
    .zoom(17)                   // Sets the zoom
    .bearing(90)                // Sets the orientation of the camera to east
    .tilt(30)                   // Sets the tilt of the camera to 30 degrees
    .build();                   // Creates a CameraPosition from the builder
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

      

Kotlin


val sydney = LatLng(-33.88, 151.21)
val mountainView = LatLng(37.4, -122.1)

// Move the camera instantly to Sydney with a zoom of 15.
map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 15f))

// Zoom in, animating the camera.
map.animateCamera(CameraUpdateFactory.zoomIn())

// Zoom out to zoom level 10, animating with a duration of 2 seconds.
map.animateCamera(CameraUpdateFactory.zoomTo(10f), 2000, null)

// Construct a CameraPosition focusing on Mountain View and animate the camera to that position.
val cameraPosition = CameraPosition.Builder()
    .target(mountainView) // Sets the center of the map to Mountain View
    .zoom(17f)            // Sets the zoom
    .bearing(90f)         // Sets the orientation of the camera to east
    .tilt(30f)            // Sets the tilt of the camera to 30 degrees
    .build()              // Creates a CameraPosition from the builder
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition))