Harita yapılandırma

Platform seçin: Android iOS

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ış

Harita ayarları yapılandırılmış bir Kyto haritasının ekran görüntüsü. 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:

Ç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 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 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ı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ı olacağını belirtir. Ayrıntılar için buraya göz atın.

  • liteModeBasit modu etkinleştirmek için true; aksi takdirde false.

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:

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:

Harita Türü Karşılaştırması

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.

Vancouver, Kanada haritası

İç 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.

İç mekan haritası örneği

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 haritada setIndoorEnabled(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 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 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.

Harita Dolgusu