Android için Haritalar SDK'sındaki haritalar, kolay hareketlerle eğilen ve döndürülebilir. Böylece, kullanıcılar, kendileri için anlamlı olan bir yönle haritayı ayarlayabilir. Herhangi bir yakınlaştırma düzeyinde, haritayı kaydırabilir veya vektör tabanlı harita karolarının daha küçük bir alanı sayesinde çok az gecikmeyle bakış açısını değiştirebilirsiniz.
Kod örnekleri
GitHub'daki ApiDemos deposu kamera özelliklerini gösteren bir örnek içerir:
- KameraDemoEtkinliği - Java: Kamera konumunu değiştirme
- KameraDemoEtkinliği - Kotlin: Kamera konumunu değiştirme
Giriş
Web'deki Google Haritalar gibi, Android için Haritalar SDK'sı da Mercator projeksiyonunu kullanarak cihazınızın ekranını (düz düzlem) kullanarak dünyanın yüzeyini (bir düzlem) temsil eder. Doğuya ve batıya doğru, dünya kendi başına sorunsuz bir şekilde dönerken harita sonsuz bir şekilde tekrarlanır. Harita, kuzey ve güney yönünde yaklaşık 85 derece, kuzey yönünde ise 85 derece ile sınırlıdır.
Not: Bir Merkatör projeksiyonu, boylamsal olarak sonsuz bir genişliğe ancak gereksiz bir şekilde yüksek bir yüksekliğe sahiptir. Elde edilen harita şekli karesini oluşturmak için Merkatör projeksiyonunu yaklaşık +/- 85 dereceden kullanan temel harita görüntülerini "kestik" ve karo seçimini daha kolay yapmanızı sağlar.
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 yapılan değişiklikler, işaretçilerde, yer paylaşımlarında veya eklediğiniz diğer grafiklerde herhangi bir değişiklik yapmaz ancak yaptığınız eklemeleri yeni görünüme daha uygun olacak şekilde değiştirmek isteyebilirsiniz.
Haritada kullanıcı hareketlerini dinleyebileceğiniz için haritayı kullanıcı isteklerine yanıt olarak değiştirebilirsiniz. Örneğin, geri çağırma yöntemi OnMapClickListener.onMapClick()
haritaya bir kez dokunarak yanıt verir. Yöntem, dokunma konumunun enlem ve boylamını aldığından, söz konusu noktayı kaydırarak veya yakınlaştırarak yanıt verebilirsiniz.
Benzer yöntemler, bir işaretçi balonunun dokunmalarına yanıt vermek veya bir işaretçi üzerindeki sürükleme hareketine yanıt vermek için kullanılabilir.
Kamera hareketlerini de dinlersiniz. Böylece uygulamanız hareket etmeye başladığında, hareket etmekte veya hareket etmekteyken bildirim alır. Ayrıntılar için kamera değişim etkinlikleri rehberini inceleyin.
Kamera konumu
Harita görünümü, düz bir düzleme bakan bir kamera olarak modellenmiştir. Kameranın konumu (dolayısıyla haritanın oluşturulması) şu özellikler tarafından belirlenir: hedef (enlem/boylam konumu), yatay, yatırma ve yakınlaştırma.

Hedef (konum)
Kamera hedefi, enlem ve boylam koordinatları olarak belirtilen, harita merkezinin bulunduğu konumdur.
Enlem, -85 ile 85 derece arasında (bu değerler dahil) olabilir. Bu aralığın üstündeki veya altındaki değerler, bu aralıktaki en yakın değere sabitlenir. Örneğin, 100'lük bir enlem değeri 85 olarak ayarlanır. Boylamlar -180 ve 180 derece arasında değişir. 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, 120 dereceye sarmalanır.Taşınma (yön)
Kamera yönü, gerçek kuzey yönünden haritanın üst kenarına karşılık gelen pusula yönünü belirtir. Haritanın ortasından üst kenarına kadar bir dikey çizgi çizerseniz, pozisyon, kuzeydeki gerçek kuzeye göre kamera başlığına (derece cinsinden) karşılık gelir.
0 konumu, haritanın üst bölümünün doğru kuzeyi işaret ettiği anlamına gelir. 90 değeri değeri, doğudaki harita noktalarının üst kısmı (pusulada 90 derece) anlamına gelir. Değer 180, güneydeki harita noktalarının üst kısmıdır.
Maps API, bir konumun konumunu değiştirmenize olanak tanır. Örneğin, sıklıkla araba kullanan biri, bir yol haritasını seyahat yönüyle uyumlu olacak şekilde dönüştürürken, yürüyüşçüler genellikle harita kullanır ve pusula kuzeye işaret eder.
Yatırma (görüntüleme açısı)
Eğme, kameranın konumunu bir kemerin doğrudan haritadaki konumunun üzerinde tanımlar ve nadir özelliğinin kameranın hemen altında olduğunu gösterir. 0 değeri, hemen aşağıyı gösteren bir kameraya karşılık gelir. 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 görünür. Aşağıdaki çizimler 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. Elde edilen harita onun altında gösterilir.
![]() |
![]() |
Aşağıdaki resimlerde görüntüleme açısı 45 derecedir. Kameranın, yay üzerinde düz bir şekilde yukarıdan (0 derece) ve yerden (90 derece) 3 konuma geleceğine dikkat edin. 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.
![]() |
![]() |
Bu ekran görüntüsündeki harita, orijinal haritadakiyle aynı noktada ortalanmaktadır, ancak haritanın üst kısmında daha fazla özellik görünmektedir. Açı 45 dereceden yüksek olduğunda, kamera ile harita konumu arasındaki özellikler orantılı olarak daha büyük görünürken harita konumu ötesindeki özellikler orantılı olarak daha küçük görünür ve üç boyutlu efekt oluşturur.
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) olacak şekilde yapılır.
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, yakınlaştırma düzeyi 2'de tüm dünya yaklaşık 1024 dp genişliktedir.
Yakınlaştırma düzeyi bir tam sayı olmamalıdır. Haritanın izin verdiği yakınlaştırma düzeyleri aralığı; hedef, harita türü ve ekran boyutu gibi bir dizi faktöre bağlıdır. Aralık dışındaki herhangi bir sayı, bir sonraki en yakın geçerli değere dönüştürülür. Bu da minimum yakınlaştırma veya maksimum yakınlaştırma düzeyi olabilir. Aşağıdaki listede, her 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
![]() |
![]() |
![]() |
Kamerayı taşıma
Maps API, dünyanın hangi kısmının harita üzerinde görüneceğini değiştirmenizi sağlar. Bunu, kamerayı hareket ettirmek yerine, kameranın konumunu değiştirerek yapabilirsiniz.
Kamerayı değiştirdiğinizde, elde edilen kamera hareketini animasyonlayabilirsiniz. Animasyon, mevcut kamera özellikleri ile yeni kamera özellikleri arasında geçiş yapıyor. Animasyonun süresini de kontrol edebilirsiniz.
Kameranın konumunu değiştirmek için CameraUpdate
kullanarak kamerayı nereye taşımak istediğinizi belirtmeniz gerekir. Maps API, CameraUpdateFactory
aracını kullanarak birçok farklı CameraUpdate
türü oluşturmanıza olanak tanır. 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()
size yakınlaştırma düzeyini 1, 0 değiştirirken diğer tüm özellikleri aynı tutarak bir CameraUpdate
sunar.
CameraUpdateFactory.zoomTo(float)
Yakınlaştırma düzeyini belirtilen değere değiştiren ve diğer tüm özellikleri aynı tutan CameraUpdate
sağlar.
CameraUpdateFactory.zoomBy(float)
ve
CameraUpdateFactory.zoomBy(float, Point)
yakınlaştırma oranını belirtilen değerle artıran (veya değer negatifse azaltan) bir CameraUpdate
sunar. İkincisi, ekranda belirli bir noktayı aynı konumda (enlem/boylam) kalacak şekilde sabitler ve bunu başarmak için kameranın konumunu değiştirebilir.
Tercih edilen bir minimum ve/veya maksimum yakınlaştırma düzeyini ayarlamak faydalı olabilir. Örneğin, uygulamanızda bir önemli noktanın etrafında tanımlı bir alan gösteriliyorsa veya sınırlı bir yakınlaştırma düzeyi 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 vermesini engelleyebilecek teknik hususlar olduğunu unutmayın. Örneğin, uydu veya arazinin boyutu, esas harita karolarından daha düşük olabilir.
Kamera konumunu değiştirme
Sık kullanılan konum değişiklikleri için iki yöntem vardır.
CameraUpdateFactory.newLatLng(LatLng)
size kameranın enlemini ve boylamını değiştiren bir CameraUpdate
sağlarken diğer tüm özellikleri korur.
CameraUpdateFactory.newLatLngZoom(LatLng, float)
size kameranın enlemini, boylamını ve yakınlaştırmasını değiştiren ve diğer tüm özellikleri koruyan bir CameraUpdate
verir.
Kameranın konumunu değiştirme konusunda tam esneklik için CameraUpdateFactory.newCameraPosition(CameraPosition)
kullanın. Bu seçenek, kamerayı belirtilen konuma hareket ettiren bir CameraUpdate
sağlar. CameraPosition
, doğrudan new CameraPosition()
kullanılarak veya CameraPosition.Builder
ile new CameraPosition.Builder()
kullanılarak elde edilebilir.
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 doğru hareket etmesini sağlar. Böylece, harita sola taşınmış gibi görünür. Pozitif bir y değeri, kameranın aşağı hareket etmesine neden olur. Böylece harita yukarı çıkar. Buna karşılık, negatif x değerleri kameranın sola hareket etmesine neden olur. Böylece, harita sağa taşınmış gibi görünür ve negatif y değerleri kameranın yukarı yönde hareket etmesine neden olur. Kaydırma, kameranın mevcut yönüne göre yapılır. Örneğin, kamera 90 derece yataktaysa doğu "yukarı"dır.
Sınır belirleme
Haritanın sınırlarını ayarlama
Kamerayı hareket ettirmek, bazen tüm önemli alanın mümkün olan en yüksek yakınlaştırma düzeyinde görünmesine neden olur. Örneğin, kullanıcının yaşadığı konumdan en fazla beş kilometre uzaklıktaki benzin istasyonlarını gösteriyorsanız kamerayı ekranda tümü görülebilecek şekilde taşımak isteyebilirsiniz. Bunun için önce ekranda görünmesini istediğiniz LatLngBounds
değerini hesaplayın. Daha sonra, belirtilen LatLngBounds
dolgusunu dikkate alarak belirtilen LatLngBounds
değerinin tamamen haritaya sığacağı şekilde kamera konumunu değiştiren bir CameraUpdate
elde etmek için CameraUpdateFactory.newLatLngBounds(LatLngBounds bounds, int
padding)
işlevini kullanabilirsiniz. Döndürülen CameraUpdate
, belirtilen sınırlar ve haritanın kenarı arasındaki boşluk (piksel cinsinden) en az belirtilen dolgu kadar olacaktır. Haritanın yatağının ve 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ı belirli bir alan içinde ortalama
Bazı durumlarda, aşırı kenarlıkları eklemek yerine kameranızı sınırların merkezine yerleştirmek isteyebilirsiniz. Örneğin, sabit bir yakınlaştırma sağlarken kamerayı
bir ülkeye ortalayın. 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
'nin 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)
dikdörtgenin piksel cinsinden genişliğini ve yüksekliğini belirtebilmenizi sağlar. Burada amaç, bu boyutların haritanın boyutlarına karşılık gelmesidir. Dikdörtgen, ortası 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üşebilir). Döndürülen CameraUpdate
, kamerayı belirtilen LatLngBounds
alanının mevcut dikdörtgen içinde mümkün olan en büyük yakınlaştırma düzeyinde ortalanması (gerekli dolguyu dikkate alarak) taşır.
Not: Yalnızca harita düzene girdikten sonra kamerayı hareket ettirmek için kullanılacaksa newLatLngBounds(boundary, padding)
adlı basit yöntemi kullanarak bir CameraUpdate
oluşturun. API, düzen sırasında sınırlama kutusunu doğru şekilde yansıtmak için gereken harita görüntüleme sınırlarını hesaplar. Diğer yandan, daha karmaşık bir yol newLatLngBounds(boundary, width, height, padding)
tarafından döndürülen CameraUpdate
özelliğini, haritada düzenlenmeden önce bile kullanabilirsiniz. Bunun nedeni, API'nın görüntüleme sınırlarını ilettiğiniz bağımsız değişkenlerden hesaplamasıdır.
Kullanıcının kaydırma özelliğini belirli bir alanla kısıtlama
Yukarıdaki senaryolarda, haritanın sınırlarını ayarlarsınız, ancak kullanıcı bu sınırların dışına kaydırılabilir veya kaydırabilir. Bunun yerine, kullanıcıların yalnızca kaydırma yapabildiği ve kaydırabileceği şekilde, haritanın odak noktasının (kamera hedefi) enlem/boylam merkezi merkezini sınırlamak isteyebilirsiniz. Örneğin, bir alışveriş merkezi veya havaalanının perakende uygulaması, haritayı belirli sınırlarla sınırlandırarak kullanıcıların kaydırma yaparak bu sınırları aşmasına izin verebilir.
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ırlı olduğu bir senaryo gösterilmektedir. Kamera hedefinin sınırlı alan içinde kalması koşuluyla kullanıcı ekranı kaydırabilir ve kaydırabilir. Çapraz çizgi, kamera hedefini temsil eder:
Görüntü alanı, belirlenen sınırların dışındaki alanların gösterilmesiyle sonuçlansa bile, harita her zaman görüntü alanını 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 ilerleyemez. Aşağıdaki şemada bu senaryo gösterilmektedir. Artı işareti, kamera hedefini temsil eder:
Aşağıdaki şemada kamera hedefinin sınırları çok sınırlıdır. Bu durum, kullanıcıya sayfayı kaydırmak veya kaydırmak için çok az fırsat sunar. Çapraz çizgi, kamera hedefini temsil eder:
Kamera görünümü güncelleniyor
Haritaya bir CameraUpdate
uygulamak için kamerayı anında hareket ettirebilir veya kamerayı sorunsuz bir şekilde hareket ettirebilirsiniz. Kamerayı söz konusu CameraUpdate
ile anında taşımak için GoogleMap.moveCamera(CameraUpdate)
numarasını arayabilirsiniz.
Değişime animasyon ekleyerek, özellikle kısa hamlelerde kullanıcı deneyimini daha iyi hale getirebilirsiniz. Bunun için
GoogleMap.moveCamera
GoogleMap.animateCamera
numarasını aramak zorunda kalmazsınız.
Harita sorunsuz bir şekilde yeni özelliklere 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örevleri yönetmek için kullanılan bu genelleştirilmiş arayüz, "onCancel()" ve "onFinished()" adlı iki yöntemi tanımlar. Animasyon için yöntemler aşağıdaki durumlarda çağrılır:onFinish()
- Animasyon, kesintisiz olarak tamamlanırsa çağrılır.
onCancel()
-
Animasyon
stopAnimation()
kesilirse 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
int
olarak animasyonun istenen süresi (milisaniye cinsinden).
Aşağıdaki kod snippet'leri, kamerayı hareket ettirmenin bazı yaygın yollarını gösterir.
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))