Bu bölümde, Android için Haritalar SDK'sı kullanılarak Android uygulamasına eklenen bir haritanın nasıl yapılandırılacağı açıklanmaktadır.
Genel bakış
Uygulamanıza harita ekledikten sonra, haritanın başlangıç ve çalışma zamanı ayarlarını yapılandırabilirsiniz. Başlangıç ayarlarının, harita kapsayıcısını (SupportMapFragment
veya MapView
) statik olarak mı yoksa dinamik olarak mı eklediğinize bağlı olarak yapılandırılması gerekir. Harita kapsayıcısı statik olarak eklendiyse ilk harita ayarlarını düzen dosyasında yapılandırabilirsiniz.
Dinamik olarak eklendiyse OnCreate
geri çağırmadaki başlangıç ayarlarını bir GoogleMapOptions
nesnesiyle yapılandırabilirsiniz.
Harita kapsayıcısı eklemeyle ilgili ayrıntılar için Harita ekleme başlıklı makaleyi inceleyin.
İlk harita ayarları şunları içerir:
- Konum, yakınlaştırma, yön ve yatırma dahil olmak üzere kamera konumu. Kamera konumlandırmasıyla ilgili ayrıntılar için Kamera ve Görünüm başlıklı makaleyi inceleyin.
- Harita türü.
- Yakınlaştırma düğmeleri ve pusula gibi görüntülenecek kullanıcı arayüzü bileşenleri.
- Etkinleştirilecek hareketler.
- Basit modun etkin olup olmadığı.
Çalışma zamanında onMapReady
geri çağırmasında GoogleMap
nesnesini güncelleyerek bu ayarları ve bazı ek ayarları yapılandırabilirsiniz. Ek ayarlar, trafik katmanını ve harita dolgusunu yapılandıran ayarlar gibi GoogleMap
sınıfı yöntemleri kullanılarak yapılandırılır.
Örnek
Aşağıdaki örnek kodda ve yukarıdaki ekran görüntüsünde, harita aşağıdaki ayarlarla yapılandırılmıştır.
Başlangıç ayarları, düzen dosyasında yapılandırılır:
- Yakınlaştırma kontrollerini etkinleştir.
- Döndürme hareketi kontrollerini etkinleştir.
- Harita eğimini 30'a ayarlayın.
Çalışma zamanı ayarları:
- Kamerayı Kyoto Japonya'ya ortalayın.
- Karma harita türünü etkinleştirin.
- Trafik katmanını açın.
Başlangıç ayarları
<?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:name="com.google.android.gms.maps.SupportMapFragment" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" map:uiZoomControls="true" map:uiRotateGestures="true" map:cameraTilt="30" />
Çalışma zamanı ayarları
package com.example.mapsetup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // Update the map configuration at runtime. @Override public void onMapReady(GoogleMap googleMap) { // Set the map coordinates to Kyoto Japan. LatLng kyoto = new LatLng(35.00116, 135.7681); // Set the map type to Hybrid. googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); // Add a marker on the map coordinates. googleMap.addMarker(new MarkerOptions() .position(kyoto) .title("Kyoto")); // Move the camera to the map coordinates and zoom in closer. googleMap.moveCamera(CameraUpdateFactory.newLatLng(kyoto)); googleMap.moveCamera(CameraUpdateFactory.zoomTo(15)); // Display traffic. googleMap.setTrafficEnabled(true); } }
Başlamadan önce
Başlamadan önce aşağıdaki seçenekleri kullanarak bir proje oluşturabilir ve temel bir harita ekleyebilirsiniz:
Android Studio için Haritalar şablonunu kullanarak bir uygulama oluşturun. Haritalar şablonu, projenizi otomatik olarak yapılandırır ve temel bir harita ekler. Bir parça harita kapsayıcısı olarak kullanılır ve statik olarak eklenir. Ayrıntılar için quickstart inceleyin.
SDK için manuel olarak projenizi yapılandırın ve temel harita ekleyin. Bu sayede herhangi bir Android şablonunu kullanabilir ve mevcut bir uygulamaya harita ekleyebilirsiniz.
Bir haritayı statik olarak ekledikten sonra yapılandırma
Bu bölümde, haritayı düzen dosyanıza statik olarak eklemeniz durumunda, ilk durumunun nasıl ayarlanacağı açıklanmaktadır.
Android için Haritalar SDK'sı, haritanın ilk durumunu doğrudan düzen dosyasından yapılandırmak üzere kullanabileceğiniz, SupportMapFragment
veya MapView
için bir özel XML özellikleri grubu tanımlar. Aşağıdaki özellikler şu anda tanımlanmıştır:
mapType
— Gösterilecek harita türü. Geçerli değerler şunlardır:none
,normal
,hybrid
,satellite
veterrain
.cameraTargetLat
,cameraTargetLng
,cameraZoom
,cameraBearing
,cameraTilt
- İlk kamera konumu. Ayrıntılar için kamera ve görünümler kılavuzuna bakın.uiZoomControls
,uiCompass
— Yakınlaştırma denetimlerinin ve pusulanın görüntülenip görüntülenmeyeceğini belirtir. Ayrıntılar için bkz.UiSettings
.uiZoomGestures
,uiScrollGestures
,uiRotateGestures
,uiTiltGestures
: Belirli hareketlerin etkinleştirilip etkinleştirilmediğini belirtir. Ayrıntılar için bkz.UiSettings
.zOrderOnTop
— Harita penceresinin, harita denetimlerinin ve penceredeki herhangi bir nesnenin üst kısmında harita görünümü yüzeyinin görüntülenip görüntülenmediğini belirtir. Ayrıntılar için SurfaceView.setZOrderOnTop(boolean) sayfasına bakın.useViewLifecycle
: YalnızcaSupportMapFragment
nesnesiyle geçerlidir. Haritanın yaşam döngüsünün, parçanın görünümüne mi yoksa parçanın kendisine mi bağlı olacağını belirtir. Ayrıntılar için buraya göz atın.liteMode
— Basit modu etkinleştirmek içintrue
; aksi takdirdefalse
.
Bu özel özellikleri düzen dosyanızda kullanabilmeniz için aşağıdaki ad alanı bildirimini içermesi gerekir. İstediğiniz ad alanını seçebilirsiniz. Seçtiğiniz ad alanının map
olması gerekmez:
xmlns:map="http://schemas.android.com/apk/res-auto"
Daha sonra, düzen dosyanıza map:
önekine sahip özellikleri ekleyebilirsiniz.
Aşağıdaki düzen dosyası, özel harita özelliklerine sahip bir SupportMapFragment
nesnesini yapılandırır. Aynı özellikler bir MapView
nesnesine de uygulanabilir.
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraBearing="112.5"
map:cameraTargetLat="-33.796923"
map:cameraTargetLng="150.922433"
map:cameraTilt="30"
map:cameraZoom="13"
map:mapType="normal"
map:uiCompass="false"
map:uiRotateGestures="true"
map:uiScrollGestures="false"
map:uiTiltGestures="true"
map:uiZoomControls="false"
map:uiZoomGestures="true"/>
Bir haritayı dinamik olarak ekledikten sonra yapılandırma
Bu bölümde, uygulamanıza dinamik olarak eklemeniz durumunda haritanın ilk durumunun nasıl ayarlanacağı açıklanmaktadır.
Dinamik olarak bir SupportMapFragment
veya MapView
eklediyseniz haritanın başlangıç durumunu bir GoogleMapOptions
nesnesinde ayarlayabilirsiniz. Kullanılabilen seçenekler, düzen dosyasındakilerle aynıdır.
Aşağıdaki şekilde bir GoogleMapOptions
oluşturabilirsiniz:
Kotlin
val options = GoogleMapOptions()
Java
GoogleMapOptions options = new GoogleMapOptions();
Ardından da bunu aşağıdaki gibi yapılandırın:
Kotlin
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false)
Java
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false);
Harita oluştururken bu seçenekleri uygulamak için aşağıdakilerden birini yapın:
SupportMapFragment
kullanıyorsanız parçayı oluşturmak ve ayarlarınızda aktarmak içinSupportMapFragment.newInstance(GoogleMapOptions options)
statik fabrika yöntemini kullanın.MapView
kullanıyorsanızMapView(Context, GoogleMapOptions)
oluşturucuyu kullanın ve ayarlarınızda aktarın.
Trafik katmanını oluşturma
Trafik katmanını etkinleştirerek haritadaki trafik verilerini görüntüleyebilirsiniz. setTrafficEnabled()
yöntemini çağırarak trafik katmanını etkinleştirebilir ve devre dışı bırakabilir, isTrafficEnabled()
yöntemini çağırarak trafik katmanının şu anda etkin olup olmadığını belirleyebilirsiniz. Aşağıdaki ekran görüntüsünde, trafik katmanının etkinleştirildiği bir harita görüntülenmektedir.
Harita türünü belirleme
Harita türünü ayarlamak için setMapType
yöntemini çağırın.
Örneğin, bir uydu haritasını görüntülemek için:
Kotlin
// Sets the map type to be "hybrid" map.mapType = GoogleMap.MAP_TYPE_HYBRID
Java
// Sets the map type to be "hybrid" map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
Aşağıdaki resimde normal, karma ve arazi harita türleri karşılaştırılmıştır:
3D binaları oluşturma
Yakından bakıldığında birçok şehirde, Kanada'nın Vancouver şehrinin aşağıdaki resminde görülebilen 3D binalar bulunur. GoogleMap.setBuildingsEnabled(false)
yöntemini çağırarak 3D binaları devre dışı bırakabilirsiniz.
İç mekan haritası ayarlarını yapma
Harita, yüksek yakınlaştırma düzeylerinde, havalimanları, alışveriş merkezleri, büyük perakende mağazaları ve toplu taşıma istasyonları gibi kapalı mekanlar için kat planlarını gösterir. İç mekan haritası adı verilen bu kat planları, "normal" ve "uydu" harita türleri (GoogleMap.MAP_TYPE_NORMAL
ve
GoogleMap.MAP_TYPE_SATELLITE
) için görüntülenir. Kullanıcı haritayı yakınlaştırdığında bu kat planları otomatik olarak etkinleştirilir, harita uzaklaştırıldığında ise kaybolur.
Kullanımdan kaldırma bildirimi: Gelecekteki bir sürümde iç mekan haritaları yalnızca normal
harita türünde kullanılabilecektir. Gelecekteki
sürümden itibaren iç mekan haritaları satellite
, terrain
veya hybrid
haritalarında desteklenmeyecek. İç mekan özelliğinin desteklenmediği yerlerde bile isIndoorEnabled()
, şu anda olduğu gibi setIndoorEnabled()
aracılığıyla ayarlanan değeri döndürmeye devam edecektir. setIndoorEnabled
, varsayılan olarak true
değeridir. Sürüm notları, bu harita türlerinde iç mekan desteğinin kullanımdan kalktığında sizi bilgilendirir.
Aşağıda, API'deki iç mekan haritaları işlevinin bir özeti verilmiştir:
GoogleMap.setIndoorEnabled(false)
numaralı telefonu arayarak iç mekan haritalarını devre dışı bırakabilirsiniz. Varsayılan olarak, iç mekan haritaları etkindir. İç mekan haritaları aynı anda bir haritada görüntülenir. Varsayılan olarak bu, uygulamanıza eklenen ilk haritadır. İç mekan haritalarını farklı bir haritada görüntülemek için ilk haritada bu haritaları devre dışı bırakın, ardından ikinci haritadasetIndoorEnabled(true)
çağrısı yapın.- Varsayılan seviye seçiciyi (zemin seçici) devre dışı bırakmak için
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false)
numaralı telefonu arayın. Daha fazla bilgi edinmek için Haritayla etkileşimde bulunma başlıklı yardım makalesini inceleyin. OnIndoorStateChangeListener
, bir binanın odak noktasına geldiğini veya binada bir seviyenin etkinleştirildiğini algılayan işleyicileri tanımlar. Ayrıntılar için Haritayla etkileşimde bulunma başlıklı yardım makalesini inceleyin.getFocusedBuilding
— Odaklanılan binayı getirir. Ardından,IndoorBuilding.getActiveLevelIndex()
yöntemini çağırarak etkin seviyeyi bulabilirsiniz.- Temel haritanın stilini belirlemek, iç mekan haritalarını etkilemez.
Harita dolgusunu ayarlayın
Bu videoda bir harita dolgusu örneği gösterilmektedir.
Google haritaları, kapsayıcı öğesi (genellikle bir MapView
veya SupportMapFragment
) tarafından tanımlanan tüm bölgeyi dolduracak şekilde tasarlanmıştır. Haritanın görünümü ve davranışı, kapsayıcının boyutlarıyla birçok şekilde tanımlanır:
- Kameranın hedefi, dolgulu bölgenin merkezini yansıtır.
- Harita kontrolleri, haritanın kenarlarına göre konumlandırılır.
- Telif hakkı beyanları veya Google logosu gibi yasal bilgiler, haritanın alt kenarında görünür.
GoogleMap
kullanarak haritanın kenarlarına dolgu ekleyebilirsiniz.setPadding()
yöntemini kullanın. Harita tüm kapsayıcıyı doldurmaya devam eder ancak metin ve kontrol konumu, harita hareketleri ve kamera hareketleri daha küçük bir alana yerleştirilmiş gibi davranır. Bu durum aşağıdaki değişikliklere neden olur:
- API çağrıları veya düğmelere basılarak yapılan kamera hareketleri (ör. pusula, konumum, yakınlaştırma düğmeleri) dolgulu bölgeye göre belirlenir.
getCameraPosition
yöntemi, dolgulu bölgenin ortasını döndürür.Projection
vegetVisibleRegion
yöntemleri dolgulu bölgeyi döndürür.- Kullanıcı arayüzü kontrolleri, kapsayıcının kenarından belirtilen piksel sayısı kadar uzaklığa sahiptir.
Dolgu, haritanın bir kısmıyla örtüşen kullanıcı arayüzleri tasarlarken faydalı olabilir. Aşağıdaki resimde, harita üst ve sağ kenarları boyunca dolguludur. Bölgenin kenarlarında yeşil renkte görünür harita kontrolleri ve yasal metinler gösterilir. Harita ise mavi renkle gösterilen kapsayıcının tamamını doldurmaya devam eder. Bu örnekte, harita kontrollerini gizlemeden bir menüyü haritanın sağ tarafında kaydırabilirsiniz.