Harita yapılandırma

Platform seçin: Android iOS

Bu konuda, 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ının yapılandırıldığı Kyoto haritasının ekran görüntüsü. Uygulamanıza bir harita ekledikten sonra haritanın ilk ve çalışma zamanı ayarlarını yapılandırabilirsiniz. İlk ayarların, harita kapsayıcısını (SupportMapFragment veya MapView) statik mi yoksa dinamik mi eklediğinize göre 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 ilk ayarları OnCreate geri çağırma işlevinde GoogleMapOptions nesnesi ile 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ı şunlardır:

Çalışma zamanında, onMapReady geri çağırma işlevinde GoogleMap nesnesini güncelleyerek bu ayarları ve bazı ek ayarları yapılandırabilirsiniz. Ek ayarlar, GoogleMap sınıfının yöntemleri (ör. trafik katmanını ve harita dolgusunu yapılandıranlar) aracılığıyla 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.

İlk ayarlar düzen dosyası içinde yapılandırılır:

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

Çalışma zamanı ayarları:

  • Kamerayı Japonya'nın Kyoto kentine ortalayın.
  • Karma harita türünü etkinleştirin.
  • 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 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. Harita kapsayıcısı olarak bir parça kullanılır ve bu parça statik olarak eklenir. Ayrıntılar için hızlı başlangıç bölümüne bakın.

  • SDK için projenizi 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 bir SupportMapFragment veya MapView için bir dizi özel XML özelliği tanımlar. Şu anda aşağıdaki özellikler tanımlanmıştır:

  • mapType: Gösterilecek 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üntüler kılavuzuna bakın.

  • uiZoomControls, uiCompass: Yakınlaştırma denetimlerinin 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 etkin olup olmadığını belirtir. Ayrıntılar için UiSettings bölümüne bakın.

  • zOrderOnTop: Harita görünümünün yüzeyinin harita penceresinin, harita kontrollerinin ve penceredeki herhangi bir nesnenin üzerinde gösterilip gösterilmediğini belirtir. Ayrıntılar için SurfaceView.setZOrderOnTop(boolean) işlevine bakın.

  • useViewLifecycle: Yalnızca SupportMapFragment nesnesi ile 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 buraya göz atın.

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

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

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

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

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

Aşağıdaki düzen dosyası, özel harita özellikleriyle 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, haritayı uygulamanıza dinamik olarak eklediyseniz haritanın ilk durumunun nasıl ayarlanacağı açıklanmaktadır.

Dinamik olarak bir SupportMapFragment veya MapView eklediyseniz haritanın ilk durumunu bir GoogleMapOptions nesnesinde ayarlayabilirsiniz. Kullanılabilir seçenekler, düzen dosyasında bulunan seçeneklerle aynıdır. GoogleMapOptions öğesini aşağıdaki gibi oluşturabilirsiniz:

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 dosya boyutunu da azaltı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ırakabilir, isTrafficEnabled() yöntemini çağırarak da trafik katmanının şu anda açık olup olmadığını belirleyebilirsiniz. Aşağıdaki ekran görüntüsünde, trafik katmanının etkin olduğu bir harita gösterilmektedir.

Harita türünü ayarlama

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

MapType Karşılaştırma

3D binalar oluşturma

Birçok şehir, yakın planda görüntülendiğinde 3D binalar gösterir. Kanada'nın Vancouver şehrinin aşağıdaki resminde bu binaları görebilirsiniz. GoogleMap.setBuildingsEnabled(false) çağrısını yaparak 3D binaları devre dışı bırakabilirsiniz.

Kanada&#39;nın Vancouver kentinin haritası

Kapalı alan haritası ayarlarını yapma

Yüksek yakınlaştırma düzeylerinde 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.

Destek sonu bildirimi: İleride yayınlanacak bir sürümde kapalı alan haritaları yalnızca normal harita türünde kullanılabilecektir. Bu sürümden itibaren satellite, terrain veya hybrid haritalarında kapalı alan haritaları desteklenmeyecek. Kapalı desteklenmeyen yerlerde bile isIndoorEnabled(), şu anda olduğu gibi setIndoorEnabled() üzerinden ayarlanan değeri döndürmeye devam edecektir. Varsayılan olarak setIndoorEnabled, true değerini alır. Bu harita türlerinde kapalı alan desteğinin ne zaman kaldırılacağını sürüm notlarından öğrenebilirsiniz.

İç mekan haritası örneği

API'deki iç mekan haritaları işlevinin özetini aşağıda bulabilirsiniz:

  • GoogleMap.setIndoorEnabled(false) numaralı telefonu arayarak kapalı mekan haritalarını devre dışı bırakabilirsiniz. İç mekan haritaları varsayılan olarak etkindir. İç mekan haritaları aynı anda tek bir haritada gösterilir. Bu, varsayılan olarak uygulamanıza eklenen ilk haritadır. Kapalı 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) işlevini çağırın.
  • Varsayılan seviye seçiciyi (zemin seçici) devre dışı bırakmak için GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false) çağrısı yapın. Daha fazla bilgi için Haritada etkileşim başlıklı makaleyi inceleyin.
  • OnIndoorStateChangeListener: Bir binanın odağa girdiğini veya bir binanın bir katında etkinleşme olduğunu algılayan dinleyicileri tanımlar. Ayrıntılar için Haritada etkileşimde bulunma bölümüne bakın.
  • getFocusedBuilding: Odaktaki binayı alır. Ardından IndoorBuilding.getActiveLevelIndex() işlevini çağırarak etkin düzeyi bulabilirsiniz.
  • Temel haritanın stili, kapalı mekan haritalarını etkilemez.

Harita alan ayarlaması yapma

Bu videoda, harita dolgusu örneği gösterilmektedir.

Google haritası, kapsayıcı öğesi (genellikle MapView veya SupportMapFragment) tarafından tanımlanan bölgenin tamamını dolduracak şekilde tasarlanmıştır. Haritanın görünümü ve davranışının çeşitli yönleri, 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 simgesini kullanarak haritanın kenarlarına dolgu ekleyebilirsiniz.setPadding() yöntemini kullanın. Harita, kapsayıcının tamamını doldurmaya devam eder ancak metin ve kontrol konumlandırması, 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üğme basma işlemleri (ör. pusula, konumum, yakınlaştırma düğmeleri) aracılığıyla yapılan kamera hareketleri, dolgu bölgesine göredir.
  • getCameraPosition yöntemi, doldurulmuş bölgenin merkezini döndürür.
  • Projection ve getVisibleRegion yöntemleri, doldurulmuş bölgeyi döndürür.
  • Kullanıcı arayüzü kontrolleri, kapsayıcının kenarından belirtilen piksel sayısı kadar ofsetlenir.

Boşluk, haritanın bir kısmıyla örtüşen kullanıcı arayüzleri tasarlarken yararlı olabilir. Aşağıdaki resimde harita, üst ve sağ kenarlarında boşluk bırakılarak oluşturulmuştur. Görünür harita kontrolleri ve yasal metin, yeşil renkli dolgulu bölgenin kenarlarında gösterilir. Harita ise mavi renkli kapsayıcının tamamını doldurmaya devam eder. Bu örnekte, harita denetimlerini gizlemeden haritanın sağ tarafına bir menü yerleştirebilirsiniz.

Harita Alan Ayarlaması

Harita renk şeması

Normal ve arazi türündeki haritalar için 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 kapalı ya da açık alanda kullanılmasına göre harita renk şemasını koyulaştırmak ya da açmak için bu özelliği kullanabilirsiniz.

Harita varsayılan olarak açık modu kullanır. Mevcut sistem ayarı değeri, UI_NIGHT_MODE_MASK için cihaz ayarına dayanır.

Kotlin

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

Java

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

Mevcut stili koyu mod, açık mod veya sistem ayarlarına göre ayarlamak 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);

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 yararlı olabilir. Bu, harita seçenekleri backgroundColor mülkü ayarlanarak yapılabilir.

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 stili için Uygulama arka plan rengini değiştirme başlıklı makaleyi inceleyin.