Harita yapılandırma

Platform seçin: Android iOS

Bu belgede, 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ış

Harita ayarları yapılandırılmış bir Kyoto haritası. Uygulamanıza harita ekledikten sonra haritanın başlangıç ve çalışma zamanı ayarlarını yapılandırabilirsiniz. İlk ayarlar, harita kapsayıcısını (SupportMapFragment veya MapView) statik olarak mı yoksa dinamik olarak mı eklediğinize göre yapılandırılmalıdır. Harita kapsayıcısı statik olarak eklendiyse ilk harita ayarlarını düzen dosyası üzerinden yapılandırabilirsiniz. Dinamik olarak eklendiyse ilk ayarları OnCreate geri çağırmada bir GoogleMapOptions nesnesiyle yapılandırabilirsiniz.

Harita kapsayıcısı ekleme hakkında ayrıntılı bilgi için Harita ekleme başlıklı makaleyi inceleyin.

İlk harita ayarları şunları içerir:

Çalışma zamanında, onMapReady geri çağırmasındaki GoogleMap nesnesini güncelleyerek bu ayarları ve bazı ek ayarları yapılandırabilirsiniz. Ek ayarlar, GoogleMap sınıfının yöntemleri aracılığıyla yapılandırılır. Örneğin, trafik katmanını ve harita alan ayarlamasını yapılandıran yöntemler bu sınıfta yer alı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.

İlk ayarlar düzen dosyasında yapılandırılır:

  • Yakınlaştırma kontrollerini etkinleştirin.
  • Döndürme hareketi kontrollerini etkinleştirin.
  • Harita eğimini 30 olarak ayarlayın.

Çalışma zamanı ayarları:

  • Kamerayı Kyoto, Japonya'ya ortalayın.
  • Karma harita türünü etkinleştirir.
  • Trafik katmanını açın.

İlk 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 bir proje oluşturabilir ve aşağıdaki seçenekleri kullanarak 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. Harita kapsayıcısı olarak bir fragment kullanılır ve bu fragment statik olarak eklenir. Ayrıntılar için hızlı başlangıç kılavuzuna bakın.

  • Projenizi SDK için manuel olarak yapılandırın ve temel bir harita ekleyin. Bu sayede, herhangi bir Android şablonunu kullanabilir ve mevcut bir uygulamaya harita ekleyebilirsiniz.

Statik olarak ekledikten sonra haritayı yapılandırma

Bu bölümde, haritayı düzen dosyanıza statik olarak eklediyseniz haritanın ilk durumunu nasıl ayarlayacağınız açıklanmaktadır.

Android için Haritalar SDK'sı, haritanın ilk durumunu doğrudan düzen dosyasından yapılandırmak için kullanabileceğiniz SupportMapFragment veya MapView için bir dizi özel XML özelliği tanımlar. Aşağıdaki özellikler tanımlanmıştır:

  • mapType: Görüntülenecek harita türü. Geçerli değerler şunlardır: none, normal, hybrid, satellite ve terrain.

  • 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 kontrollerinin ve pusulanın gösterilip gösterilmeyeceğini belirtir. Ayrıntılar için UiSettings sayfasına bakın.

  • uiZoomGestures, uiScrollGestures, uiRotateGestures, uiTiltGestures: Belirli hareketlerin etkinleştirilip etkinleştirilmediğini belirtir. Ayrıntılar için UiSettings sayfasına bakın.

  • zOrderOnTop: Harita görünümü yüzeyinin harita penceresinin, harita kontrollerinin ve penceredeki nesnelerin üzerinde gösterilip gösterilmeyeceğini belirtir. Ayrıntılar için SurfaceView.setZOrderOnTop(boolean) sayfasına bakın.

  • useViewLifecycle: Yalnızca SupportMapFragment 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ı olması gerektiğini belirtir. Ayrıntılar için referans belgelerini inceleyin.

  • liteMode: Hafif modu etkinleştirmek için true, aksi takdirde false.

  • mapColorScheme: Normal ve arazi haritasının renk şemasını belirtir. Değerler arasında light, dark ve follow_system (varsayılan) bulunur. Bu değerler, UI_NIGHT_MODE_MASK için cihaz ayarına göre mevcut sistem ayarının kullanılacağı anlamına gelir. Daha fazla bilgi için Harita renk şeması bölümüne bakın.

Bu özel özellikleri düzen dosyanızda kullanabilmek için dosyanın aşağıdaki ad alanı beyanını içermesi gerekir. İstediğiniz ad alanını seçebilirsiniz. map olması gerekmez:

xmlns:map="http://schemas.android.com/apk/res-auto"

Ardından, map: ön ekine sahip özellikleri düzen dosyanıza ekleyebilirsiniz.

Aşağıdaki düzen dosyası, özel harita özelliklerine sahip bir SupportMapFragment nesnesini yapılandırır. Aynı özellikler 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:mapColorScheme="dark"
  map:uiCompass="false"
  map:uiRotateGestures="true"
  map:uiScrollGestures="false"
  map:uiTiltGestures="true"
  map:uiZoomControls="false"
  map:uiZoomGestures="true"/>

Dinamik olarak ekledikten sonra haritayı yapılandırma

Bu bölümde, uygulamanıza dinamik olarak eklediğiniz haritanın başlangıç durumunu nasıl ayarlayacağınız açıklanmaktadır.

Dinamik olarak SupportMapFragment veya MapView eklediyseniz haritanın ilk durumunu bir GoogleMapOptions nesnesinde ayarlayabilirsiniz. Kullanılabilen seçenekler, düzen dosyasında bulunan seçeneklerle aynıdır. GoogleMapOptions oluşturmak için aşağıdaki adımları uygulayabilirsiniz:

Kotlin

val options = GoogleMapOptions()

      

Java

GoogleMapOptions options = new GoogleMapOptions();

      

Ardından 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:

Haritanızı yerelleştirme

Uygulamanıza MapView veya SupportMapFragment eklediğinizde haritadaki metin öğeleri, kullanıcının cihaz ayarlarına ve konumuna göre uygun dilde gösterilir. Gradle dosyanıza bir resConfigs öğesi ekleyerek uygulamanızın kullandığı dilleri, desteklenen tüm dillerin bir alt kümesiyle kısıtlayabilirsiniz. Bu, kullanılmayan dilleri kaldırmak için kullanışlıdır ve uygulamanızın ikili program boyutunu da küçültür. Örneğin:

defaultConfig {
    resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}

Android uygulamanızı yerelleştirme hakkında daha fazla bilgi edinin.

Trafik katmanını ayarlama

Trafik katmanını etkinleştirerek haritanızda trafik verilerini görüntüleyebilirsiniz. setTrafficEnabled() yöntemini çağırarak trafik katmanını etkinleştirebilir ve devre dışı bırakabilirsiniz. Trafik katmanının açık olup olmadığını ise isTrafficEnabled() yöntemini çağırarak belirleyebilirsiniz. Aşağıdaki ekran görüntüsünde, trafik katmanının etkin olduğu bir harita gösterilmektedir.

Trafik Katmanı

Toplu taşıma katmanını ayarlama

Toplu taşıma katmanını etkinleştirerek haritanızda toplu taşıma verilerini görüntüleyebilirsiniz. setTransitEnabled() yöntemini çağırarak toplu taşıma katmanını etkinleştirebilir ve devre dışı bırakabilirsiniz. Toplu taşıma katmanının açık olup olmadığını belirlemek için isTransitEnabled() yöntemini çağırabilirsiniz. Aşağıdaki ekran görüntüsünde, toplu taşıma katmanının etkin olduğu bir harita gösterilmektedir.

Toplu Taşıma Katmanı

Harita türünü ayarlama

Harita türünü ayarlamak için setMapType yöntemini çağırın. Örneğin, 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 haritası türleri karşılaştırılmaktadır:

Üç harita türünün karşılaştırması: normal, karma ve arazi haritaları.

3D binaları ayarlama

Birçok şehirde, yakından bakıldığında 3D binalar görünür. Aşağıdaki Kanada'nın Vancouver şehrine ait resimde bu durum görülebilir. GoogleMap.setBuildingsEnabled(false) yöntemini çağırarak 3D binaları devre dışı bırakabilirsiniz.

Vancouver, Kanada haritası

İç mekan haritası ayarlarını yapma

Yüksek yakınlaştırma seviyelerinde harita; havaalanları, alışveriş merkezleri, büyük perakende mağazaları ve toplu taşıma istasyonları gibi kapalı alanların kat planlarını gösterir. İç mekan haritaları olarak adlandırılan bu kat planları, "normal" ve "uydu" harita türleri (GoogleMap.MAP_TYPE_NORMAL ve GoogleMap.MAP_TYPE_SATELLITE) için gösterilir. Kullanıcı yakınlaştırdığında otomatik olarak etkinleştirilir ve harita uzaklaştırıldığında kaybolur.

Desteğin sonlandırılmasıyla ilgili bildirim: Gelecekteki bir sürümde, iç mekan haritaları yalnızca normal harita türünde kullanılabilecek. Bu gelecekteki sürümden itibaren iç mekan haritaları satellite, terrain veya hybrid haritalarında desteklenmeyecek. İç mekan desteklenmese bile isIndoorEnabled(), şu anda olduğu gibi setIndoorEnabled() kullanılarak ayarlanan değeri döndürmeye devam eder. Varsayılan olarak setIndoorEnabled, true değerine sahiptir. Bu harita türlerinde bina içi desteği kullanılamaz hale geldiğinde sürüm notları aracılığıyla bilgilendirilirsiniz.

Bir alışveriş merkezinin çıkışları ve ürün bölümlerini gösteren iç mekan haritası.

API'deki iç mekan haritaları özelliklerinin özeti aşağıda verilmiştir:

  • GoogleMap.setIndoorEnabled(false) yöntemini çağırarak iç mekan haritalarını devre dışı bırakabilirsiniz. İç mekan haritaları varsayılan olarak etkindir. İç mekan haritaları aynı anda tek bir haritada gösterilir. Varsayılan olarak bu, uygulamanıza eklenen ilk haritadır. İç mekan haritalarını farklı bir haritada görüntülemek için ilk haritada devre dışı bırakın, ardından ikinci haritada setIndoorEnabled(true) yöntemini çağırın.
  • Varsayılan kat seçiciyi devre dışı bırakmak için GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false) yöntemini çağırın. Daha fazla bilgi için Haritayla etkileşim kurma başlıklı makaleyi inceleyin.
  • OnIndoorStateChangeListener: Bir binanın odağa alındığını veya bir binada bir katın etkinleştirildiğini algılayan dinleyicileri tanımlar. Ayrıntılar için Harita ile etkileşim kurma başlıklı makaleyi inceleyin.
  • getFocusedBuilding: Odaklanılan binayı alır. Ardından, IndoorBuilding.getActiveLevelIndex() işlevini çağırarak etkin seviyeyi bulabilirsiniz.
  • Temel haritayı stillendirme, iç mekan haritalarını etkilemez.

Harita alan ayarlamasını yapma

Bu videoda, harita alan ayarlaması örneği gösterilmektedir.

Google Haritalar, genellikle MapView veya SupportMapFragment olan kapsayıcı öğesi tarafından tanımlanan bölgenin tamamını dolduracak şekilde tasarlanmıştır. Haritanın görünümü ve davranışıyla ilgili çeşitli özellikler, kapsayıcısının boyutlarına göre belirlenir:

  • 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öntemi. Harita, kapsayıcının tamamını doldurmaya devam eder ancak metin ve kontrol konumlandırma, harita hareketleri ve kamera hareketleri, daha küçük bir alana yerleştirilmiş gibi davranır. Bu durum aşağıdaki değişikliklere yol açar:

  • API çağrıları veya düğme basışları (ör. pusula, konumum, yakınlaştırma düğmeleri) kullanılarak yapılan kamera hareketleri, dolgulu bölgeye göredir.
  • getCameraPosition yöntemi, dolgulu bölgenin merkezini döndürür.
  • Projection ve getVisibleRegion 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 kaydırılır.

Dolgu, haritanın bir kısmıyla çakışan kullanıcı arayüzleri tasarlarken yararlı olabilir. Aşağıdaki resimde harita, üst ve sağ kenarlar boyunca dolgulanmıştır. Görünür harita kontrolleri ve yasal metin, yeşil renkle gösterilen dolgulu bölgenin kenarları boyunca gösterilirken harita, mavi renkle gösterilen kapsayıcının tamamını doldurmaya devam eder. Bu örnekte, harita kontrollerini gizlemeden haritanın sağ tarafında bir menü gösterebilirsiniz.

Harita Alan Ayarlaması

Harita renk şeması

Normal ve arazi türündeki haritalarda, harita renk şemasını dinamik olarak koyu, açık veya mevcut sistem ayarını kullanacak şekilde ayarlayabilirsiniz. Örneğin, günün saatine veya cihazın iç ya da dış mekanda kullanımına göre harita renk şemasını koyulaştırabilir veya açabilirsiniz.

Android için Haritalar SDK'sının 20.1.0 sürümünden itibaren harita, varsayılan olarak mevcut sistem ayarını kullanır. Önceki sürümlerde harita varsayılan olarak açık modu kullanır. Mevcut sistem ayarı değeri, UI_NIGHT_MODE_MASK için cihaz ayarını temel alır.

Kotlin

mapFragment = SupportMapFragment.newInstance(GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2))

Java

mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2));

Geçerli stili koyu mod veya açık mod olarak ayarlamak ya da sistem ayarlarını uygulamak için GoogleMap.setMapColorScheme() yöntemini kullanarak renk şemasını değiştirebilirsiniz.

Kotlin

googleMap.setMapColorScheme(MapColorScheme.DARK)
googleMap.setMapColorScheme(MapColorScheme.LIGHT)
googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM)

Java

googleMap.setMapColorScheme(MapColorScheme.DARK);
googleMap.setMapColorScheme(MapColorScheme.LIGHT);
googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM);

Haritalarınız için özel açık ve koyu stiller oluşturmak istiyorsanız bulut tabanlı harita stillerini kullanın.

Arka plan rengini yapılandırma

Koyu modda çalışırken veya harita görünümleri arasında geçiş yaparken varsayılan harita arka plan rengini yapılandırmak faydalı olabilir. Bunu yapmak için harita seçenekleri backgroundColor özelliğini ayarlayabilirsiniz.

Kotlin

private val googleMapOptions: GoogleMapOptions =
    GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));

Java

private GoogleMapOptions options = new GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));

Arka plan rengini yapılandırmak için bulut tabanlı harita stillerini de kullanabilirsiniz. Harita stilinde ayarlanan arka plan rengi, yerel arka plan renginden daha yüksek önceliğe sahiptir. Daha fazla bilgi için bulut tabanlı harita stilleri için Uygulama arka plan rengini değiştirme başlıklı makaleyi inceleyin.