İşaretçiler

Platform seçin: Android iOS JavaScript

İşaretçiler haritada tek tek konumları gösterir. Varsayılan rengi değiştirerek veya işaretçi simgesini özel bir resimle değiştirerek işaretçilerinizi özelleştirebilirsiniz. Bilgi pencereleri, bir işaretçi için ek içerik sağlayabilir.

Kod örnekleri

GitHub'daki ApiDemos deposu, çeşitli işaretçi özelliklerini gösteren bir örnek içerir:

Kotlin

Java

Giriş

İşaretçiler haritada konumları tanımlar. Varsayılan işaretçi, Google Haritalar'ın görünüm ve tarzında yaygın olan standart bir simge kullanır. API aracılığıyla simgenin rengini, resmini veya sabitleme noktasını değiştirmek mümkündür. İşaretçiler Marker türünde nesnelerdir ve GoogleMap.addMarker(markerOptions) yöntemiyle haritaya eklenir.

İşaretçiler etkileşimli olacak şekilde tasarlanmıştır. Bunlar varsayılan olarak click etkinliklerini alır ve genellikle bilgi pencerelerini görüntülemek için etkinlik işleyicilerle birlikte kullanılır. Bir işaretçinin draggable özelliğinin true olarak ayarlanması, kullanıcının işaretçinin konumunu değiştirmesine olanak tanır. İşaretçiyi taşıma özelliğini etkinleştirmek için uzun basın.

Varsayılan olarak, kullanıcı bir işaretçiye dokunduğunda, harita araç çubuğu haritanın sağ alt kısmında görünür ve kullanıcıya Google Haritalar mobil uygulamasına hızlı erişim sağlar. Araç çubuğunu devre dışı bırakabilirsiniz. Daha fazla bilgi için denetimler kılavuzuna bakın.

İşaretçileri kullanmaya başlama

Maps Live'ın bu bölümünde, Android için Haritalar SDK'sını kullanarak haritanıza işaretçi eklemeyle ilgili temel bilgiler ele alınmaktadır.

İşaretçi ekleyin

Aşağıdaki örnekte, bir haritaya nasıl işaretçi ekleneceği gösterilmektedir. İşaretçi -33.852,151.211 koordinatlarında (Sidney, Avustralya) oluşturulur ve tıklandığında "İşaretçi Sydney" dizesini bir bilgi penceresinde görüntüler.

Kotlin



override fun onMapReady(googleMap: GoogleMap) {
    // Add a marker in Sydney, Australia,
    // and move the map's camera to the same location.
    val sydney = LatLng(-33.852, 151.211)
    googleMap.addMarker(
        MarkerOptions()
            .position(sydney)
            .title("Marker in Sydney")
    )
    googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))
}

      

Java


@Override
public void onMapReady(GoogleMap googleMap) {
    // Add a marker in Sydney, Australia,
    // and move the map's camera to the same location.
    LatLng sydney = new LatLng(-33.852, 151.211);
    googleMap.addMarker(new MarkerOptions()
        .position(sydney)
        .title("Marker in Sydney"));
    googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}

      

Bir işaretçi hakkında ek bilgi görüntüleme

Kullanıcı haritada bir işaretçiye dokunduğunda bir yer veya konum hakkında ek bilgi göstermek yaygın bir gereksinimdir. Bilgi pencereleri ile ilgili rehberi inceleyin.

Verileri işaretçiyle ilişkilendirme

Marker.setTag() aracılığıyla işaretçiyle rastgele bir veri nesnesi depolayabilir ve Marker.getTag() ile bu veri nesnesini alabilirsiniz. Aşağıdaki örnekte, etiketleri kullanarak bir işaretçinin tıklanma sayısını nasıl sayabileceğiniz gösterilmektedir:

Kotlin



/**
 * A demo class that stores and retrieves data objects with each marker.
 */
class MarkerDemoActivity : AppCompatActivity(),
    OnMarkerClickListener, OnMapReadyCallback {
    private val PERTH = LatLng(-31.952854, 115.857342)
    private val SYDNEY = LatLng(-33.87365, 151.20689)
    private val BRISBANE = LatLng(-27.47093, 153.0235)

    private var markerPerth: Marker? = null
    private var markerSydney: Marker? = null
    private var markerBrisbane: Marker? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_markers)
        val mapFragment =
            supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
        mapFragment!!.getMapAsync(this)
    }

    /** Called when the map is ready.  */
    override fun onMapReady(map: GoogleMap) {
        // Add some markers to the map, and add a data object to each marker.
        markerPerth = map.addMarker(
            MarkerOptions()
                .position(PERTH)
                .title("Perth")
        )
        markerPerth?.tag = 0
        markerSydney = map.addMarker(
            MarkerOptions()
                .position(SYDNEY)
                .title("Sydney")
        )
        markerSydney?.tag = 0
        markerBrisbane = map.addMarker(
            MarkerOptions()
                .position(BRISBANE)
                .title("Brisbane")
        )
        markerBrisbane?.tag = 0

        // Set a listener for marker click.
        map.setOnMarkerClickListener(this)
    }

    /** Called when the user clicks a marker.  */
    override fun onMarkerClick(marker: Marker): Boolean {

        // Retrieve the data from the marker.
        val clickCount = marker.tag as? Int

        // Check if a click count was set, then display the click count.
        clickCount?.let {
            val newClickCount = it + 1
            marker.tag = newClickCount
            Toast.makeText(
                this,
                "${marker.title} has been clicked $newClickCount times.",
                Toast.LENGTH_SHORT
            ).show()
        }

        // Return false to indicate that we have not consumed the event and that we wish
        // for the default behavior to occur (which is for the camera to move such that the
        // marker is centered and for the marker's info window to open, if it has one).
        return false
    }
}

      

Java


/**
 * A demo class that stores and retrieves data objects with each marker.
 */
public class MarkerDemoActivity extends AppCompatActivity implements
    GoogleMap.OnMarkerClickListener,
    OnMapReadyCallback {

    private final LatLng PERTH = new LatLng(-31.952854, 115.857342);
    private final LatLng SYDNEY = new LatLng(-33.87365, 151.20689);
    private final LatLng BRISBANE = new LatLng(-27.47093, 153.0235);

    private Marker markerPerth;
    private Marker markerSydney;
    private Marker markerBrisbane;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_markers);
        SupportMapFragment mapFragment =
            (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    /** Called when the map is ready. */
    @Override
    public void onMapReady(GoogleMap map) {
        // Add some markers to the map, and add a data object to each marker.
        markerPerth = map.addMarker(new MarkerOptions()
            .position(PERTH)
            .title("Perth"));
        markerPerth.setTag(0);

        markerSydney = map.addMarker(new MarkerOptions()
            .position(SYDNEY)
            .title("Sydney"));
        markerSydney.setTag(0);

        markerBrisbane = map.addMarker(new MarkerOptions()
            .position(BRISBANE)
            .title("Brisbane"));
        markerBrisbane.setTag(0);

        // Set a listener for marker click.
        map.setOnMarkerClickListener(this);
    }

    /** Called when the user clicks a marker. */
    @Override
    public boolean onMarkerClick(final Marker marker) {

        // Retrieve the data from the marker.
        Integer clickCount = (Integer) marker.getTag();

        // Check if a click count was set, then display the click count.
        if (clickCount != null) {
            clickCount = clickCount + 1;
            marker.setTag(clickCount);
            Toast.makeText(this,
                marker.getTitle() +
                    " has been clicked " + clickCount + " times.",
                Toast.LENGTH_SHORT).show();
        }

        // Return false to indicate that we have not consumed the event and that we wish
        // for the default behavior to occur (which is for the camera to move such that the
        // marker is centered and for the marker's info window to open, if it has one).
        return false;
    }
}

      

İşaretçilerle veri depolamanın ve almanın yararlı olduğu senaryolara ilişkin bazı örnekleri burada bulabilirsiniz:

  • Uygulamanız farklı işaretçi türlerini sağlıyor olabilir ve kullanıcı bunları tıkladığında bunlara farklı bir şekilde davranmak istersiniz. Bunu yapmak için türü belirten işaretçiyle birlikte bir String kaydedebilirsiniz.
  • Benzersiz kayıt tanımlayıcılarına sahip bir sistemle çalışıyor olabilirsiniz. Bu durumda, işaretçiler sistemdeki belirli kayıtları temsil eder.
  • İşaretçi verileri, bir işaretçinin Z-endeksine karar verilirken kullanılacak bir önceliği gösterebilir.

İşaretçiyi sürüklenebilir yap

Haritaya eklendikten sonra, draggable özelliği true olarak ayarlandığı sürece işaretçiyi yeniden konumlandırabilirsiniz. Sürüklemeyi etkinleştirmek için işaretçiye uzun basın. Parmağınızı ekrandan kaldırdığınızda, işaretçi bu konumda kalır.

İşaretçiler varsayılan olarak sürüklenebilir değildir. İşaretçiyi, haritaya eklemeden önce MarkerOptions.draggable(boolean) veya haritaya eklendikten sonra Marker.setDraggable(boolean) ile sürüklenebilir şekilde ayarlamanız gerekir. İşaretçi sürükleme etkinlikleri konusunda açıklandığı gibi işaretçide sürükleme etkinliklerini dinleyebilirsiniz.

Aşağıdaki snippet, Avustralya'nın Perth şehrinde sürüklenebilir bir işaretçi ekler.

Kotlin



val perthLocation = LatLng(-31.90, 115.86)
val perth = map.addMarker(
    MarkerOptions()
        .position(perthLocation)
        .draggable(true)
)

      

Java


final LatLng perthLocation = new LatLng(-31.90, 115.86);
Marker perth = map.addMarker(
    new MarkerOptions()
        .position(perthLocation)
        .draggable(true));

      

İşaretçiyi özelleştirme

Bu videoda, konumları harita üzerinde görselleştirmek için işaretçileri kullanmanın yolları gösterilmektedir.

İşaretçiler, varsayılan simge yerine gösterilecek özel bir resim tanımlayabilir. Simge tanımlama işlemi, işaretçinin görsel davranışını etkileyen bir dizi özellik ayarlamayı içerir.

İşaretçiler, özelleştirmeyi aşağıdaki özellikler aracılığıyla destekler:

Pozisyon (Zorunlu)
İşaretçinin haritadaki konumu için LatLng değeri. Bir Marker nesnesi için gerekli tek özelliktir.
Çapa
Resimde, işaretçinin EnlBoy konumuna yerleştirilecek nokta. Bu varsayılan olarak resmin alt kısmının orta kısmıdır.
Alfa
İşaretçinin opaklığını ayarlar. Varsayılan olarak 1,0 değerine ayarlanır.
Başlık
Kullanıcı işaretçiye dokunduğunda bilgi penceresinde gösterilen bir dize.
Snippet
Başlığın altında görüntülenen ek metin.
Simge
Varsayılan işaretçi resminin yerine gösterilen bir bit eşlem.
Sürüklenebilir
Kullanıcının işaretçiyi taşımasına izin vermek istiyorsanız true olarak ayarlayın. Varsayılan olarak false değerine ayarlanır.
Gösteriliyor
İşaretçiyi görünmez yapmak için false olarak ayarlayın. Varsayılan olarak true değerine ayarlanır.
Düz veya İlan tahtası yönü
İşaretçiler varsayılan olarak ilan tahtasının yönünü kullanır. Diğer bir deyişle, harita yüzeyine değil, cihaz ekranına doğru çizilirler. Haritayı döndürmek, yatırmak veya yakınlaştırmak, işaretçinin yönünü değiştirmez. İşaretçinin yönünü dünyaya göre düz olacak şekilde ayarlayabilirsiniz. Düz işaretçiler, harita döndürüldüğünde döner ve harita yatırıldığında perspektifi değiştirir. İlan tahtası işaretçilerinde olduğu gibi, harita yakınlaştırıldığında veya uzaklaştırıldığında düz işaretçilerin boyutlarını korur.
Döndürme
İşaretçinin yönü, saat yönünde derece cinsinden belirtilir. İşaretçi düzse varsayılan konum değişir. Düz bir işaretçi için varsayılan konum kuzeye hizalıdır. İşaretçi düz değilse varsayılan konum yukarıyı gösterir ve döndürme, işaretçi her zaman kameraya bakacak şekildedir.

Aşağıdaki snippet, varsayılan simgeyle basit bir işaretçi oluşturur.

Kotlin



val melbourneLocation = LatLng(-37.813, 144.962)
val melbourne = map.addMarker(
    MarkerOptions()
        .position(melbourneLocation)
)

      

Java


final LatLng melbourneLocation = new LatLng(-37.813, 144.962);
Marker melbourne = map.addMarker(
    new MarkerOptions()
        .position(melbourneLocation));

      

İşaretçi rengini özelleştirin

icon() yöntemine bir BitmapDescriptor nesnesi geçirerek varsayılan işaretçi resminin rengini özelleştirmek mümkündür. BitmapDescriptorFactory nesnesinde önceden tanımlanmış bir renk grubu kullanabilir veya BitmapDescriptorFactory.defaultMarker(float hue) yöntemiyle özel bir işaretçi rengi ayarlayabilirsiniz. Ton, 0 ile 360 arasında bir değerdir ve renk çemberindeki noktaları temsil eder.

Kotlin



val melbourneLocation = LatLng(-37.813, 144.962)
val melbourne = map.addMarker(
    MarkerOptions()
        .position(melbourneLocation)
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
)

      

Java


final LatLng melbourneLocation = new LatLng(-37.813, 144.962);
Marker melbourne = map.addMarker(
    new MarkerOptions()
        .position(melbourneLocation)
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));

      

İşaretçi opaklığını özelleştirin

Bir işaretçinin opaklığını, MarkerOptions.alpha() yöntemiyle kontrol edebilirsiniz. Alfa, 0,0 ile 1,0 arasında bir hareketli değer olarak belirtilmelidir. Burada 0 tamamen şeffaf, 1 tamamen opaktır.

Kotlin



val melbourneLocation = LatLng(-37.813, 144.962)
val melbourne = map.addMarker(
    MarkerOptions()
        .position(melbourneLocation)
        .alpha(0.7f)
)

      

Java


final LatLng melbourneLocation = new LatLng(-37.813, 144.962);
Marker melbourne = map.addMarker(new MarkerOptions()
    .position(melbourneLocation)
    .alpha(0.7f));

      

İşaretçi resmini özelleştirin

Varsayılan işaretçi resmini, genellikle simge adı verilen özel bir işaretçi resmiyle değiştirebilirsiniz. Özel simgeler her zaman BitmapDescriptor olarak ayarlanır ve BitmapDescriptorFactory sınıfındaki yöntemlerden biri kullanılarak tanımlanır.

fromAsset(String assetName)
Asset dizininde bir Bit Eşlem resminin adını kullanarak özel işaretçi oluşturur.
fromBitmap(Bitmap image)
Bit Eşlem görüntüsünden özel işaretçi oluşturur.
fromFile(String fileName)
Dahili depolama alanındaki Bit eşlem görüntü dosyasının adını kullanarak özel simge oluşturur.
fromPath(String absolutePath)
Bit Eşlem görüntüsünün mutlak dosya yolundan özel işaretçi oluşturur.
fromResource(int resourceId)
Bit Eşlem görüntüsünün kaynak kimliğini kullanarak özel işaretçi oluşturur.

Aşağıdaki snippet, özel simge içeren bir işaretçi oluşturur.

Kotlin



val melbourneLocation = LatLng(-37.813, 144.962)
val melbourne = map.addMarker(
    MarkerOptions()
        .position(melbourneLocation)
        .title("Melbourne")
        .snippet("Population: 4,137,400")
        .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow))
)

      

Java


final LatLng melbourneLocation = new LatLng(-37.813, 144.962);
Marker melbourne = map.addMarker(
    new MarkerOptions()
        .position(melbourneLocation)
        .title("Melbourne")
        .snippet("Population: 4,137,400")
        .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)));

      

İşaretçiyi düzleştirme

İşaretçi simgeleri normalde ekrana göre çizilir. Haritayı döndürmek, eğmek veya yakınlaştırmak işaretçinin yönünü değiştirmez. İşaretçinin yönünü dünyaya göre düz olacak şekilde ayarlayabilirsiniz. Yönleri bu şekilde olan işaretçiler, harita döndürüldüğünde döner ve harita yatırıldığında perspektifi değiştirir. Harita yakınlaştırıldığında veya uzaklaştırıldığında düz işaretçilerin boyutu korunur.

İşaretçinin yönünü değiştirmek için işaretçinin flat özelliğini true olarak ayarlayın.

Kotlin



val perthLocation = LatLng(-31.90, 115.86)
val perth = map.addMarker(
    MarkerOptions()
        .position(perthLocation)
        .flat(true)
)

      

Java


final LatLng perthLocation = new LatLng(-31.90, 115.86);
Marker perth = map.addMarker(
    new MarkerOptions()
        .position(perthLocation)
        .flat(true));

      

İşaretçiyi döndürme

Marker kullanarak işaretçiyi sabitleme noktası etrafında döndürebilirsiniz.setRotation() yöntemini çağırın. Döndürme, varsayılan konumdan saat yönünde derece cinsinden ölçülür. İşaretçi haritada düz olduğunda, varsayılan konum Kuzey'dir. İşaretçi düz olmadığında varsayılan konum yukarıyı gösterir ve döndürme de işaretçi her zaman kameraya bakacak şekilde olur.

Aşağıdaki örnek işaretçiyi 90° döndürür. Sabitleme noktasının 0.5,0.5 olarak ayarlanması, işaretçinin tabanı yerine kendi merkezi çevresinde döndürülmesine neden olur.

Kotlin



val perthLocation = LatLng(-31.90, 115.86)
val perth = map.addMarker(
    MarkerOptions()
        .position(perthLocation)
        .anchor(0.5f, 0.5f)
        .rotation(90.0f)
)

      

Java


final LatLng perthLocation = new LatLng(-31.90, 115.86);
Marker perth = map.addMarker(
    new MarkerOptions()
        .position(perthLocation)
        .anchor(0.5f,0.5f)
        .rotation(90.0f));

      

İşaretçi z-endeksi

Z-endeksi, haritadaki diğer işaretçilere göre bu işaretçinin yığın sırasını belirtir. Düşük Z-endeksli işaretçilerin üzerine yüksek Z-endeksine sahip bir işaretçi çizilir. Varsayılan Z-endeksi değeri 0 değeridir.

Aşağıdaki kod snippet'inde gösterildiği gibi MarkerOptions.zIndex() yöntemini çağırarak işaretçinin seçenekler nesnesindeki Z-endeksini ayarlayın:

Kotlin



map.addMarker(
    MarkerOptions()
        .position(LatLng(10.0, 10.0))
        .title("Marker z1")
        .zIndex(1.0f)
)

      

Java


map.addMarker(new MarkerOptions()
    .position(new LatLng(10, 10))
    .title("Marker z1")
    .zIndex(1.0f));

      

İşaretçinin Z-endeksine Marker.getZIndex() yöntemini çağırarak erişebilir, Marker.setZIndex() yöntemini çağırarak da değiştirebilirsiniz.

İşaretçiler, diğer bindirmelerin z endeksinden bağımsız olarak her zaman karo katmanlarının ve işaretleyici olmayan diğer bindirmelerin (zemin yer paylaşımları, çoklu çizgiler, poligonlar ve diğer şekiller) üzerinde çizilir. İşaretçiler, diğer yer paylaşımlarına kıyasla etkin bir şekilde ayrı bir Z-endeksi grubunda kabul edilir.

Aşağıdaki Z-endeksinin tıklama etkinlikleri üzerindeki etkisi hakkında bilgi edinin.

İşaretçi etkinliklerini işleme

Maps API, işaretçi etkinliklerini dinlemenize ve bunlara yanıt vermenize olanak tanır. Bu etkinlikleri dinlemek için işaretçilerin ait olduğu GoogleMap nesnesinde karşılık gelen işleyiciyi ayarlamanız gerekir. Etkinlik haritadaki işaretleyicilerden birinde meydana geldiğinde dinleyicinin geri çağırması, parametre olarak geçirilen karşılık gelen Marker nesnesiyle çağrılır. Bu Marker nesnesini bir Marker nesnesine yaptığınız referansla karşılaştırmak için == değil equals() kullanmanız gerekir.

Aşağıdaki etkinlikleri dinleyebilirsiniz:

İşaretçi tıklama etkinlikleri

İşaretçideki tıklama etkinliklerini dinlemek için OnMarkerClickListener kullanabilirsiniz. Bu işleyiciyi haritada ayarlamak için GoogleMap.setOnMarkerClickListener(OnMarkerClickListener) numaralı telefonu arayın. Kullanıcı bir işaretçiyi tıkladığında, onMarkerClick(Marker) çağrılır ve işaretçi, bağımsız değişken olarak aktarılır. Bu yöntem, etkinliği tüketip tüketmediğinizi (yani varsayılan davranışı bastırmak isteyip istemediğinizi) belirten bir boole döndürür. false döndürürse özel davranışınıza ek olarak varsayılan davranış da gerçekleşir. İşaretçi tıklama etkinliğinin varsayılan davranışı, bilgi penceresini (varsa) göstermek ve kamerayı, işaretçi haritanın merkezinde olacak şekilde hareket ettirmektir.

Z-endeksinin tıklama etkinlikleri üzerindeki etkisi:

  • Kullanıcı bir işaretçi kümesini tıkladığında, en yüksek Z-endeksine sahip işaretçi için tıklama etkinliği tetiklenir.
  • Tıklama başına en fazla bir etkinlik tetiklenir. Başka bir deyişle, tıklama daha düşük Z-endeksi değerlerine sahip işaretçilere veya diğer yer paylaşımlarına iletilmez.
  • Bir işaretçi kümesini tıklamak, sonraki tıklamaların kümede döngüye girmesine ve her birini sırayla seçmesine neden olur. Döngünün sırası önce Z-endeksine, daha sonra tıklama noktasına yakınlığa öncelik verir.
  • Kullanıcı kümenin yakınlığının dışına tıklama yaparsa API, kümeyi yeniden hesaplar ve tıklama döngüsünün durumunu sıfırlayarak baştan başlar.
  • Tıklama etkinliği, döngüyü yeniden başlatmadan önce işaretçi kümelerinden diğer şekillere ve yer paylaşımlarına düşer.
  • İşaretçiler, diğer bindirmelerin z-endeksinden bağımsız olarak, diğer bindirmelere veya şekillere (çoklu çizgiler, poligonlar, daireler ve/veya zemin yer paylaşımları) kıyasla ayrı bir Z-endeksi grubunda yer alırlar. Birden çok işaretçi, bindirme veya şekil birbirinin üzerine yerleştirilirse, tıklama etkinliği önce işaretçi kümesi içinde döner ve ardından Z-endeksi değerlerine göre diğer tıklanabilir yer paylaşımları veya şekiller için tetiklenir.

İşaretçi sürükleme etkinlikleri

Etkinlikleri bir işaretçi üzerinde sürüklemek için OnMarkerDragListener kullanabilirsiniz. Bu işleyiciyi haritada ayarlamak için GoogleMap.setOnMarkerDragListener numaralı telefonu arayın. İşaretçiyi sürüklemek için kullanıcının işaretçiye uzun basması gerekir. Kullanıcı parmağını ekrandan kaldırdığında, işaretçi bu konumda kalır. Bir işaretçi sürüklendiğinde başlangıçta onMarkerDragStart(Marker) çağrılır. İşaretçi sürüklenirken onMarkerDrag(Marker) sürekli olarak çağrılır. Sürüklemenin sonuna onMarkerDragEnd(Marker) çağrılır. Marker.getPosition() numaralı telefonu arayarak işaretçinin konumunu istediğiniz zaman öğrenebilirsiniz.