Harita yapılandırma

Platform seçin: Android iOS

Bu makalede, 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ış Kyto haritasının ekran görüntüsü. Uygulamanıza harita ekledikten sonra haritanın ilk ve çalışma zamanı ayarlarını yapılandırabilirsiniz. İlk ayarlar, harita kapsayıcısını (SupportMapFragment veya MapView) statik veya dinamik olarak ekleyip eklemediğinize bağlı olarak yapılandırılmalıdır. Harita kapsayıcısı statik olarak eklendiyse, düzen dosyasında ilk harita ayarlarını yapılandırabilirsiniz. Dinamik olarak eklenmişse OnCreate geri çağırmasındaki ilk ayarları bir GoogleMapOptions nesnesiyle yapılandırabilirsiniz.

Harita kapsayıcı eklemeyle ilgili ayrıntılı bilgi için Harita ekleme başlıklı makaleye bakın.

İlk harita ayarları aşağıdakileri 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, trafik katmanını ve harita dolgusunu yapılandıran ayarlar gibi GoogleMap sınıfı yöntemleriyle yapılandırılır.

Örnek

Aşağıdaki örnek kodda ve yukarıdaki ekran görüntüsünde yer alan harita, aşağıdaki ayarlarla yapılandırılır.

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

  • Yakınlaştırma kontrollerini etkinleştir
  • Hareket döndürme kontrollerini etkinleştir.
  • Harita eğimini 30 olarak ayarlayın.

Çalışma zamanı ayarları:

  • Kamerayı Kyoto Japan'e 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 bir proje oluşturabilir ve aşağıdaki seçenekler üzerinden 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. Parça, harita kapsayıcısı olarak kullanılır ve statik olarak eklenir. Ayrıntılar için hızlı başlangıç sayfasına göz atın.

  • 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 eşleme ekleyebilirsiniz.

Bir haritayı statik olarak ekledikten sonra yapılandırma

Bu bölümde, düzeni düzen dosyanıza statik olarak eklediyseniz haritanın 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 özelliği 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 ve terrain.

  • cameraTargetLat, cameraTargetLng, cameraZoom, cameraBearing, cameraTilt - Başlangıçtaki kamera konumu. Ayrıntılar için kamera ve görünümler kılavuzuna bakın.

  • uiZoomControls, uiCompass — Yakınlaştırma kontrolleri ve pusulanın gösterilip gösterilmeyeceğini belirtir. Ayrıntılar için UiSettings sayfasını inceleyin.

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

  • zOrderOnTop: Harita görünümünün; harita penceresinin, harita denetimlerinin ve penceredeki herhangi bir nesnenin üst kısmında görüntülenip görüntülenmeyeceğini belirtir. Ayrıntılar için SurfaceView.setZOrderOnTop(boo) adresine bakın.

  • useViewLifecycle: Yalnızca SupportMapFragment nesne için 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ğlanması gerektiğini belirtir. Ayrıntılar için buraya göz atın.

  • liteMode - true (Basit modu etkinleştirmek için true); aksi halde false.

Bu özel özellikleri düzen dosyanızda kullanmak için aşağıdaki ad alanı beyanını içermelidir. Dilediğiniz ad alanını seçebilirsiniz. Adın map olması gerekmez:

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

Daha sonra, düzen dosyanıza map: ön eki içeren özellikler ekleyebilirsiniz.

Aşağıdaki düzen dosyası, özel eşleme özellikleriyle 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, uygulamayı uygulamanıza dinamik olarak eklediyseniz haritanın ilk durumunu nasıl ayarlayacağınız açıklanmaktadır.

Dinamik olarak bir 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. Aşağıdaki şekilde bir GoogleMapOptions oluşturabilirsiniz:

Java


GoogleMapOptions options = new GoogleMapOptions();

      

Kotlin


val options = GoogleMapOptions()

      

Ardından aşağıdaki gibi yapılandırın:

Java


options.mapType(GoogleMap.MAP_TYPE_SATELLITE)
    .compassEnabled(false)
    .rotateGesturesEnabled(false)
    .tiltGesturesEnabled(false);

      

Kotlin


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:

Trafik katmanını ayarlama

Trafik katmanını etkinleştirerek haritanızdaki trafik verilerini görüntüleyebilirsiniz. setTrafficEnabled() yöntemini çağırarak trafik katmanını etkinleştirebilir ve devre dışı bırakabilirsiniz. Ayrıca, 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 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, bir uydu haritasını görüntülemek için:

Java


// Sets the map type to be "hybrid"
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);

      

Kotlin


// Sets the map type to be "hybrid"
map.mapType = GoogleMap.MAP_TYPE_HYBRID

      

Aşağıdaki görsel normal, karma ve arazi haritası türlerini karşılaştırır:

MapType Karşılaştırma

3D binalar oluşturma

Yakından görüntülenen çoğu şehirde 3D binalar, Vancouver, Kanada'daki aşağıdaki resimde görüldüğü gibi görülebilir. GoogleMap.setBuildingsEnabled(false) numaralı telefonu arayarak 3D binaları devre dışı bırakabilirsiniz.

Vancouver, Kanada haritası

İç mekan harita ayarlarını yapma

Yüksek yakınlaştırma düzeylerinde harita; havalimanları, alışveriş merkezleri, büyük perakende mağazaları ve toplu taşıma istasyonları gibi iç mekanlar için inşaat 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ı görüntüyü yakınlaştırdığında otomatik olarak etkinleştirilir ve harita uzaklaştırıldığında uzaklaşır.

Kullanımdan kaldırma bildirimi: Gelecekteki bir sürümde iç mekan haritaları yalnızca normal harita türünde kullanılabilecektir. Bu gelecekteki sürümden sonra iç mekan haritaları satellite, terrain veya hybrid haritalarında desteklenmeyecek. İç mekanın desteklenmediği durumlarda bile isIndoorEnabled(), şimdi olduğu gibi setIndoorEnabled() aracılığıyla ayarlanan değeri döndürmeye devam eder. setIndoorEnabled varsayılan olarak true şeklindedir. Sürüm notları, bu harita türlerinde iç mekan desteğinin kullanılamadığını size bildirir.

İç mekan haritası örneği

Aşağıda, API'daki iç mekan haritaları işlevinin bir özeti verilmiştir:

  • GoogleMap.setIndoorEnabled(false) numaralı telefonu arayarak iç mekan haritalarını devre dışı bırakabilirsiniz. İç mekan haritaları varsayılan olarak etkindir. İç mekan haritaları bir kerede bir harita üzerinde görüntülenir. Bu, uygulamanıza varsayılan olarak 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) numarasını arayın.
  • Varsayılan seviye seçiciyi (kat seçici) devre dışı bırakmak için GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false) numaralı telefonu arayın. Daha ayrıntılı bilgi için Haritayla etkileşimde bulunma konusuna bakın.
  • OnIndoorStateChangeListener: Binaya odaklanıldığını veya bir binanın hangi seviyede etkinleştirildiğini algılayan dinleyicileri tanımlar. Ayrıntılar için Haritayla etkileşimde bulunma konusuna bakın.
  • getFocusedBuilding: Odaklanılmış binayı alır. Ardından IndoorBuilding.getActiveLevelIndex() numaralı telefonu arayarak etkin düzeyi bulabilirsiniz.
  • Temel haritanın stilini belirlemek, iç mekan haritalarını etkilemez.

Harita dolgusu ayarlama

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

Google haritası, kapsayıcı öğesi tarafından tanımlanan tüm bölgeyi (genellikle MapView veya SupportMapFragment) doldurmak için tasarlanmıştır. Haritanın görünümü ve davranışıyla ilgili çeşitli unsurlar, kapsayıcısının boyutlarına göre 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 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 basışları (ör. pusula, konumum, yakınlaştırma düğmeleri) kullanılarak yapılan kamera hareketleri, dolgulu bölgeye göre yapılır.
  • 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, belirtilen piksel sayısına göre container'ın kenarından uzak tutulur.

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ında bulunmaktadır. Görünür harita kontrolleri ve yasal metin, dolgulu bölgenin kenarları boyunca yeşil renkle gösterilir. Harita ise maviyle gösterilen tüm kapsayıcıyı doldurmaya devam eder. Bu örnekte, harita denetimlerini gizlemeden bir menünün sağ tarafını havalandırabilirsiniz.

Harita Dolgusu