Şekiller

Platform seçin: Android iOS JavaScript

Düz kırmızı çoklu çizgi içeren harita

Android için Google Haritalar API'si, haritalarınızı uygulamanıza göre özelleştirmek amacıyla haritalarınıza şekil eklemenin basit yollarını sunar.

  • Polyline, istediğiniz şekli oluşturabilen ve haritadaki yolları ve rotaları işaretlemek için kullanılabilen bir dizi bağlantılı çizgi segmentidir.
  • Polygon, haritadaki alanları işaretlemek için kullanılabilen kapalı bir şekildir.
  • Circle, harita üzerinde çizilen, Dünya yüzeyindeki bir dairenin coğrafi olarak doğru bir projeksiyonudur.

Tüm bu şekillerin görünümünü, çeşitli özellikleri değiştirerek özelleştirebilirsiniz.

Kod örnekleri

Alanları ve rotaları temsil etmek için poligon ve çoklu çizgi ekleme ile ilgili eğitimde basit bir Android uygulaması için gereken tüm kodlar yer alır.

Ayrıca GitHub'daki ApiDemos deposu, şekillerin ve özelliklerinin kullanımını gösteren örnekler içerir:

Çoklu çizgiler

Polyline sınıfı, haritada bağlı bir çizgi segmentleri kümesini tanımlar. Polyline nesnesi, bir dizi LatLng konumundan oluşur ve bu konumları sıralı bir şekilde bağlayan bir dizi çizgi segmenti oluşturur.

Bu videoda, haritada bir yol çizmek için çoklu çizgileri kullanarak kullanıcılarınızın gitmek istedikleri yere ulaşmalarına nasıl yardımcı olabileceğinizle ilgili fikirler verilmektedir.

Çoklu çizgi oluşturmak için önce bir PolylineOptions nesnesi oluşturun ve bu nesneye noktalar ekleyin. Noktalar, Dünya yüzeyindeki bir noktayı temsil eder ve LatLng nesnesi olarak ifade edilir. Çizgi segmentleri, noktalar arasında, noktaları PolylineOptions nesnesine eklediğiniz sıraya göre çizilir.

PolylineOptions nesnesine nokta eklemek için PolylineOptions.add() yöntemini çağırın. Bu yöntemin değişken sayıda parametre aldığını unutmayın. Bu nedenle, aynı anda birden fazla nokta ekleyebilirsiniz (noktalar zaten bir listede yer alıyorsa PolylineOptions.addAll(Iterable<LatLng>) yöntemini de çağırabilirsiniz).

Ardından, GoogleMap.addPolyline(PolylineOptions) yöntemini çağırarak çoklu çizgiyi haritaya ekleyebilirsiniz. Yöntem, çoklu çizgiyi daha sonra değiştirebileceğiniz bir Polyline nesnesi döndürür.

Aşağıdaki kod snippet'inde, haritaya nasıl dikdörtgen ekleneceği gösterilmektedir:

Kotlin

// Instantiates a new Polyline object and adds points to define a rectangle
val polylineOptions = PolylineOptions()
    .add(LatLng(37.35, -122.0))
    .add(LatLng(37.45, -122.0)) // North of the previous point, but at the same longitude
    .add(LatLng(37.45, -122.2)) // Same latitude, and 30km to the west
    .add(LatLng(37.35, -122.2)) // Same longitude, and 16km to the south
    .add(LatLng(37.35, -122.0)) // Closes the polyline.

// Get back the mutable Polyline
val polyline = map.addPolyline(polylineOptions)
polyline?.let {
    val isClickable = it.isClickable
    val isGeodesic = it.isGeodesic
    val isVisible = it.isVisible
    val color = it.color
    val width = it.width
    val zIndex = it.zIndex
    val points = it.points
}

      

Java

// Instantiates a new Polyline object and adds points to define a rectangle
PolylineOptions polylineOptions = new PolylineOptions()
    .add(new LatLng(37.35, -122.0))
    .add(new LatLng(37.45, -122.0))  // North of the previous point, but at the same longitude
    .add(new LatLng(37.45, -122.2))  // Same latitude, and 30km to the west
    .add(new LatLng(37.35, -122.2))  // Same longitude, and 16km to the south
    .add(new LatLng(37.35, -122.0)); // Closes the polyline.

// Get back the mutable Polyline
Polyline polyline = map.addPolyline(polylineOptions);

      

Dikdörtgen, haritada aşağıdaki gibi görünür:

Dikdörtgen çoklu çizgi içeren harita

Çoklu çizgi eklendikten sonra şeklini değiştirmek için Polyline.setPoints() yöntemini çağırabilir ve çoklu çizgi için yeni bir nokta listesi sağlayabilirsiniz.

Çoklu çizginin görünümünü hem haritaya eklemeden önce hem de haritaya eklendikten sonra özelleştirebilirsiniz. Daha fazla bilgi için aşağıdaki görünümleri özelleştirme bölümüne bakın.

Çoklu çizgi özelleştirme

Çoklu çizgilerin görünümünü özelleştirmenin çeşitli yolları vardır:

  • Çok renkli çoklu çizgiler, çoklu çizgi segmentlerini farklı renklere ayarlar.
  • Geçişli çoklu çizgiler, iki rengin geçişini kullanarak çoklu çizgiyi renklendirir.
  • Damgalı çoklu çizgiler, yinelenen bitmap'ler kullanarak çoklu çizgileri stillendirir.

Çoklu çizgi özelleştirmelerini kullanmak için Android için Haritalar SDK'sının 18.1.0 veya sonraki bir sürümünü ve Android için Haritalar SDK'sının en yeni oluşturucusunu kullanmanız gerekir.

Çok renkli çoklu çizgi oluşturma

Çok renkli bir poliline içeren harita

StyleSpan nesneleri oluşturup addSpan() veya addSpans() yöntemlerini kullanarak PolylineOptions öğesine ekleyerek çoklu çizginin segmentlerini ayrı ayrı renklendirmek için aralıkları kullanabilirsiniz. Varsayılan olarak, dizideki her öğe ilgili çizgi segmentinin rengini ayarlar. Aşağıdaki örnekte, kırmızı ve yeşil segmentlere sahip bir çoklu çizgi oluşturmak için segment renklerinin nasıl ayarlanacağı gösterilmektedir:

Kotlin

val line = map.addPolyline(
    PolylineOptions()
        .add(LatLng(47.6677146, -122.3470447), LatLng(47.6442757, -122.2814693))
        .addSpan(StyleSpan(Color.RED))
        .addSpan(StyleSpan(Color.GREEN))
)

      

Java

Polyline line = map.addPolyline(new PolylineOptions()
        .add(new LatLng(47.6677146,-122.3470447), new LatLng(47.6442757,-122.2814693))
        .addSpan(new StyleSpan(Color.RED))
        .addSpan(new StyleSpan(Color.GREEN)));

      

Gradyan çoklu çizgi oluşturma

Gradyan çoklu çizgi içeren harita

Konturun başlangıç ve bitiş renklerini belirtmek için iki adet 32 bit alfa-kırmızı-yeşil-mavi (ARGB) tam sayı belirterek bir gradyan tanımlayabilirsiniz. PolylineOptions.addSpan() işlevini çağırarak bu özelliği şeklin seçenekler nesnesinde ayarlayın. Aşağıdaki örnekte, Woodland Park Hayvanat Bahçesi'nden Kirkland, Washington'a kırmızıdan sarıya geçişli bir çoklu çizgi oluşturma işlemi gösterilmektedir.

Kotlin

val line = map.addPolyline(
    PolylineOptions()
        .add(LatLng(47.6677146, -122.3470447), LatLng(47.6442757, -122.2814693))
        .addSpan(
            StyleSpan(
                StrokeStyle.gradientBuilder(
                    Color.RED,
                    Color.YELLOW
                ).build()
            )
        )
)

      

Java

Polyline line = map.addPolyline(new PolylineOptions()
        .add(new LatLng(47.6677146,-122.3470447), new LatLng(47.6442757,-122.2814693))
        .addSpan(new StyleSpan(StrokeStyle.gradientBuilder(Color.RED, Color.YELLOW).build())));

      

Damgalı bir çoklu çizgi oluşturma

Damgalı çoklu çizgi içeren harita

Çoklu çizginin görünümünü tekrarlanan bir bit eşlem dokusu olarak ayarlayabilirsiniz. Bunu yapmak için TextureStyle türünde bir StampStyle oluşturun, ardından burada gösterildiği gibi PolylineOptions.addSpan() yöntemini çağırarak bu özelliği şeklin seçenekler nesnesinde ayarlayın:

Kotlin

val stampStyle =
    TextureStyle.newBuilder(BitmapDescriptorFactory.fromResource(R.drawable.walking_dot)).build()
val span = StyleSpan(StrokeStyle.colorBuilder(Color.RED).stamp(stampStyle).build())
map.addPolyline(
    PolylineOptions()
        .add(LatLng(47.6677146, -122.3470447), LatLng(47.6442757, -122.2814693))
        .addSpan(span)
)

      

Java

StampStyle stampStyle =
        TextureStyle.newBuilder(BitmapDescriptorFactory.fromResource(R.drawable.walking_dot)).build();
StyleSpan span = new StyleSpan(StrokeStyle.colorBuilder(Color.RED).stamp(stampStyle).build());
map.addPolyline(new PolylineOptions()
        .add(new LatLng(47.6677146,-122.3470447), new LatLng(47.6442757,-122.2814693))
        .addSpan(span));

      

Çoklu çizgi etkinlikleri

Çoklu çizgiler varsayılan olarak tıklanabilir değildir. Polyline.setClickable(boolean) yöntemini çağırarak tıklanabilirliği etkinleştirebilir ve devre dışı bırakabilirsiniz.

Tıklanabilir bir çoklu çizgi üzerindeki tıklama etkinliklerini dinlemek için OnPolylineClickListener kullanın. Bu dinleyiciyi haritada ayarlamak için GoogleMap.setOnPolylineClickListener(OnPolylineClickListener) yöntemini çağırın. Kullanıcı bir çoklu çizgiyi tıkladığında onPolylineClick(Polyline) geri çağırması alırsınız.

Poligonlar

Polygon nesneleri, sıralı bir dizideki bir dizi koordinattan oluştuğu için Polyline nesnelerine benzer. Ancak çokgenler, açık uçlu olmak yerine kapalı bir döngü içindeki bölgeleri tanımlamak için tasarlanmıştır ve içleri doludur.

Haritaya Polyline eklediğiniz şekilde Polygon da ekleyebilirsiniz. Öncelikle bir PolygonOptions nesnesi oluşturun ve bu nesneye bazı noktalar ekleyin. Bu noktalar poligonun ana hatlarını oluşturur. Ardından, GoogleMap.addPolygon(PolygonOptions) yöntemini çağırarak poligonu haritaya eklersiniz. Bu yöntem, bir Polygon nesnesi döndürür.

Aşağıdaki kod snippet'i, haritaya dikdörtgen ekler.

Kotlin

// Instantiates a new Polygon object and adds points to define a rectangle
val rectOptions = PolygonOptions()
    .add(
        LatLng(37.35, -122.0),
        LatLng(37.45, -122.0),
        LatLng(37.45, -122.2),
        LatLng(37.35, -122.2),
        LatLng(37.35, -122.0)
    )

// Get back the mutable Polygon
val polygon = map.addPolygon(rectOptions)

      

Java

// Instantiates a new Polygon object and adds points to define a rectangle
PolygonOptions polygonOptions = new PolygonOptions()
    .add(new LatLng(37.35, -122.0),
        new LatLng(37.45, -122.0),
        new LatLng(37.45, -122.2),
        new LatLng(37.35, -122.2),
        new LatLng(37.35, -122.0));

// Get back the mutable Polygon
Polygon polygon = map.addPolygon(polygonOptions);

      

Çokgen eklendikten sonra şeklini değiştirmek için Polygon.setPoints() yöntemini çağırabilir ve çokgenin ana hattı için yeni bir nokta listesi sağlayabilirsiniz.

Çokgenin görünümünü hem haritaya eklemeden önce hem de haritaya eklendikten sonra özelleştirebilirsiniz. Daha fazla bilgi için aşağıdaki görünümleri özelleştirme bölümüne bakın.

Poligonu otomatik tamamlama

Yukarıdaki örnekte yer alan poligon beş koordinattan oluşuyor ancak ilk ve son koordinatların aynı konumda olduğunu ve döngüyü tanımladığını unutmayın. Ancak uygulamada, çokgenler kapalı alanları tanımladığından bu son koordinatı tanımlamanız gerekmez. Son koordinat ilk koordinattan farklıysa API, koordinat dizisinin sonuna ilk koordinatı ekleyerek çokgeni otomatik olarak "kapatır".

Aşağıdaki iki çokgen eşdeğerdir ve her biri için polygon.getPoints() çağrısı yapıldığında 4 nokta da döndürülür.

Kotlin

val polygon1 = map.addPolygon(
    PolygonOptions()
        .add(
            LatLng(0.0, 0.0),
            LatLng(0.0, 5.0),
            LatLng(3.0, 5.0),
            LatLng(0.0, 0.0)
        )
        .strokeColor(Color.RED)
        .fillColor(Color.BLUE)
)
val polygon2 = map.addPolygon(
    PolygonOptions()
        .add(
            LatLng(0.0, 0.0),
            LatLng(0.0, 5.0),
            LatLng(3.0, 5.0)
        )
        .strokeColor(Color.RED)
        .fillColor(Color.BLUE)
)

      

Java

Polygon polygon1 = map.addPolygon(new PolygonOptions()
    .add(new LatLng(0, 0),
        new LatLng(0, 5),
        new LatLng(3, 5),
        new LatLng(0, 0))
    .strokeColor(Color.RED)
    .fillColor(Color.BLUE));

Polygon polygon2 = map.addPolygon(new PolygonOptions()
    .add(new LatLng(0, 0),
        new LatLng(0, 5),
        new LatLng(3, 5))
    .strokeColor(Color.RED)
    .fillColor(Color.BLUE));

      

İçi boş poligon oluşturma

Dolgulu halkalar veya "simitler" (çokgen alanların çokgen içinde "adalar" olarak göründüğü) gibi karmaşık şekiller oluşturmak için birden fazla yol tek bir Polygon nesnesinde birleştirilebilir. Karmaşık şekiller her zaman birden fazla, daha basit yolun birleşiminden oluşur.

Aynı alanda iki yol tanımlanmalıdır. İki bölgeden büyük olanı, dolgu alanını tanımlar ve ek seçenekleri olmayan basit bir çokgendir. Ardından, addHole() yöntemine ikinci bir yol iletin. İkinci, daha küçük yol, daha büyük yol tarafından tamamen kapatıldığında, çokgenin bir parçası kaldırılmış gibi görünür. Delik, poligonun ana hattıyla kesişiyorsa poligon dolgu olmadan oluşturulur.

Aşağıdaki snippet, daha küçük dikdörtgen bir deliği olan tek bir dikdörtgen oluşturur.

Kotlin

val hole = listOf(
    LatLng(1.0, 1.0),
    LatLng(1.0, 2.0),
    LatLng(2.0, 2.0),
    LatLng(2.0, 1.0),
    LatLng(1.0, 1.0)
)
val hollowPolygon = map.addPolygon(
    PolygonOptions()
        .add(
            LatLng(0.0, 0.0),
            LatLng(0.0, 5.0),
            LatLng(3.0, 5.0),
            LatLng(3.0, 0.0),
            LatLng(0.0, 0.0)
        )
        .addHole(hole)
        .fillColor(Color.BLUE)
)
hollowPolygon?.let {
    val isClickable = it.isClickable
    val isGeodesic = it.isGeodesic
    val isVisible = it.isVisible
    val fillColor = it.fillColor
    val strokeColor = it.strokeColor
    val strokeWidth = it.strokeWidth
    val zIndex = it.zIndex
    val points = it.points
    val holes = it.holes
}

      

Java

List<LatLng> hole = Arrays.asList(new LatLng(1, 1),
    new LatLng(1, 2),
    new LatLng(2, 2),
    new LatLng(2, 1),
    new LatLng(1, 1));
Polygon hollowPolygon = map.addPolygon(new PolygonOptions()
    .add(new LatLng(0, 0),
        new LatLng(0, 5),
        new LatLng(3, 5),
        new LatLng(3, 0),
        new LatLng(0, 0))
    .addHole(hole)
    .fillColor(Color.BLUE));

      

İçi boş poligon, haritada aşağıdaki gibi görünür:

İçi boş dikdörtgen çoklu çizgi içeren harita

Poligon etkinlikleri

Varsayılan olarak, çokgenler tıklanamaz. Polygon.setClickable(boolean) yöntemini çağırarak tıklanabilirliği etkinleştirebilir ve devre dışı bırakabilirsiniz.

Tıklanabilir bir poligondaki tıklama etkinliklerini dinlemek için OnPolygonClickListener kullanın. Bu dinleyiciyi haritada ayarlamak için GoogleMap.setOnPolygonClickListener(OnPolygonClickListener) yöntemini çağırın. Kullanıcı bir poligonu tıkladığında onPolygonClick(Polygon) geri çağırma işlevi alırsınız.

Daireler

Daire içeren harita

Maps API, genel bir Polygon sınıfının yanı sıra Circle nesnelerinin oluşturulmasını basitleştirmek için belirli sınıflar da içerir.

Daire oluşturmak için aşağıdaki iki özelliği belirtmeniz gerekir:

  • center, LatLng olarak.
  • radius (metre cinsinden).

Ardından, Dünya yüzeyinde belirtilen center noktasından radius metre uzaklıktaki tüm noktaların kümesi olarak bir daire tanımlanır. Maps API tarafından kullanılan Mercator projeksiyonu, küreyi düz bir yüzeyde oluşturduğundan, ekvatorun yakınında bulunan bir daire haritada neredeyse mükemmel bir daire olarak görünür ve daire ekvatordan uzaklaştıkça (ekranda) giderek daha az dairesel görünür.

Dairenin şeklini eklendikten sonra değiştirmek için Circle.setRadius() veya Circle.setCenter() işlevini çağırıp yeni değerler sağlayabilirsiniz.

Dairenin görünümünü hem haritaya eklemeden önce hem de haritaya eklendikten sonra özelleştirebilirsiniz. Daha fazla bilgi için aşağıdaki görünümleri özelleştirme bölümüne bakın.

Aşağıdaki kod snippet'i, CircleOptions nesnesi oluşturup GoogleMap.addCircle(CircleOptions) işlevini çağırarak haritaya daire ekler:

Kotlin

// Instantiates a new CircleOptions object and defines the center and radius
val circleOptions = CircleOptions()
    .center(LatLng(37.4, -122.1))
    .radius(1000.0) // In meters

// Get back the mutable Circle
val circle = map.addCircle(circleOptions)
circle?.let {
    val isClickable = it.isClickable
    val isVisible = it.isVisible
    val center = it.center
    val radius = it.radius
    val fillColor = it.fillColor
    val strokeWidth = it.strokeWidth
    val zIndex = it.zIndex
}

      

Java

// Instantiates a new CircleOptions object and defines the center and radius
CircleOptions circleOptions = new CircleOptions()
    .center(new LatLng(37.4, -122.1))
    .radius(1000); // In meters

// Get back the mutable Circle
Circle circle = map.addCircle(circleOptions);

      

Çevre etkinlikleri

Varsayılan olarak daireler tıklanamaz. CircleOptions.clickable(boolean) ile GoogleMap.addCircle() yöntemini çağırarak veya Circle.setClickable(boolean) yöntemini çağırarak tıklanabilirliği etkinleştirebilir ve devre dışı bırakabilirsiniz.

Tıklanabilir bir dairedeki tıklama etkinliklerini dinlemek için OnCircleClickListener kullanın. Bu dinleyiciyi haritada ayarlamak için GoogleMap.setOnCircleClickListener(OnCircleClickListener) işlevini çağırın.

Kullanıcı bir daireyi tıkladığında aşağıdaki kod örneğinde gösterildiği gibi bir onCircleClick(Circle) geri çağırma işlevi alırsınız:

Kotlin

val circle = map.addCircle(
    CircleOptions()
        .center(LatLng(37.4, -122.1))
        .radius(1000.0)
        .strokeWidth(10f)
        .strokeColor(Color.GREEN)
        .fillColor(Color.argb(128, 255, 0, 0))
        .clickable(true)
)
map.setOnCircleClickListener {
    // Flip the r, g and b components of the circle's stroke color.
    val strokeColor = it.strokeColor xor 0x00ffffff
    it.strokeColor = strokeColor
}

      

Java

Circle circle = map.addCircle(new CircleOptions()
    .center(new LatLng(37.4, -122.1))
    .radius(1000)
    .strokeWidth(10)
    .strokeColor(Color.GREEN)
    .fillColor(Color.argb(128, 255, 0, 0))
    .clickable(true));

map.setOnCircleClickListener(new GoogleMap.OnCircleClickListener() {
    @Override
    public void onCircleClick(Circle circle) {
        // Flip the r, g and b components of the circle's stroke color.
        int strokeColor = circle.getStrokeColor() ^ 0x00ffffff;
        circle.setStrokeColor(strokeColor);
    }
});

      

Görünümleri özelleştirme

Bir şeklin görünümünü hem haritaya eklenmeden önce (seçenekler nesnesinde istenen özelliği belirterek) hem de haritaya eklendikten sonra değiştirebilirsiniz. Şeklin mevcut durumuna kolayca erişebilmeniz için tüm özellikler için getter'lar da kullanıma sunulur.

Aşağıdaki snippet, Melbourne'den Perth'e jeodezik segmentler içeren kalın mavi bir çoklu çizgi ekler. Aşağıdaki bölümlerde bu özellikler daha ayrıntılı olarak açıklanmaktadır.

Kotlin

val polyline = map.addPolyline(
    PolylineOptions()
        .add(LatLng(-37.81319, 144.96298), LatLng(-31.95285, 115.85734))
        .width(25f)
        .color(Color.BLUE)
        .geodesic(true)
)

      

Java

Polyline polyline = map.addPolyline(new PolylineOptions()
    .add(new LatLng(-37.81319, 144.96298), new LatLng(-31.95285, 115.85734))
    .width(25)
    .color(Color.BLUE)
    .geodesic(true));

      

Harita aşağıdaki gibi görünür:

Melbourne'den Perth'e giden çoklu çizginin yer aldığı harita

Not: Bu özelliklerin çoğu, açıklanan şekillerin herhangi birine uygulanabilir ancak bazı özellikler belirli şekiller için anlamlı olmayabilir (ör. çoklu çizginin içi olmadığı için dolgu rengi olamaz).

Fırça rengi

Kontur rengi, şeklin konturunun opaklığını ve rengini belirten 32 bitlik bir alfa-kırmızı-yeşil-mavi (ARGB) tam sayıdır. *Options.strokeColor() (veya çoklu çizgi söz konusu olduğunda PolylineOptions.color()) çağırarak bu özelliği şeklin options nesnesinde ayarlayın. Belirtilmezse varsayılan çizgi rengi siyah (Color.BLACK) olur.

Şekil haritaya eklendikten sonra getStrokeColor() (veya çoklu çizgi için getColor()) çağrılarak kontur rengine erişilebilir ve setStrokeColor() (setColor() for a polyline) çağrılarak değiştirilebilir.

Dolgu rengi

Dolgu rengi yalnızca poligonlar ve daireler için geçerlidir. İç kısımları tanımlanmadığı için çoklu çizgiler için geçerli değildir. Bir poligon için, deliklerinin içindeki bölgeler poligonun iç kısmının parçası değildir ve dolgu rengi ayarlanmışsa renklendirilmez.

Dolgu rengi, şeklin iç kısmının opaklığını ve rengini belirten 32 bitlik bir alfa-kırmızı-yeşil-mavi (ARGB) tam sayıdır. *Options.fillColor() yöntemini çağırarak bu özelliği şeklin seçenekler nesnesinde ayarlayın. Belirtilmezse varsayılan kontur rengi şeffaf (Color.TRANSPARENT) olur.

Şekil haritaya eklendikten sonra dolgu rengine getFillColor() çağrılarak erişilebilir ve setFillColor() çağrılarak değiştirilebilir.

Çizgi genişliği

Piksel (px) cinsinden kayan nokta olarak çizgi kalınlığı. Harita yakınlaştırıldığında genişlik ölçeklenmez (ör. bir şeklin tüm yakınlaştırma seviyelerinde aynı kontur genişliği olur). *Options.strokeWidth() (veya çoklu çizgi için PolylineOptions.width()) işlevini çağırarak bu özelliği şeklin seçenek nesnesinde ayarlayın. Belirtilmezse varsayılan kontur genişliği 10 pikseldir.

Şekil haritaya eklendikten sonra, getStrokeWidth() (veya çoklu çizgi için getWidth()) çağrılarak kontur genişliğine erişilebilir ve setStrokeWidth() (setWidth() for a polyline) çağrılarak değiştirilebilir.

Çizgi deseni

Varsayılan kontur deseni, çoklu çizgiler ve çokgenlerin ve dairelerin ana hatları için düz bir çizgidir. PatternItem nesnelerin özel bir kontur deseni belirtebilirsiniz. Bu desende her öğe bir tire, nokta veya boşluktur.

Aşağıdaki örnekte, bir çoklu çizginin deseni tekrarlanan bir nokta dizisi, ardından 20 piksel uzunluğunda bir boşluk, 30 piksel uzunluğunda bir çizgi ve 20 piksellik başka bir boşluk olarak ayarlanmaktadır.

Kotlin

val pattern = listOf(
    Dot(), Gap(20F), Dash(30F), Gap(20F)
)
polyline?.pattern = pattern

      

Java

List<PatternItem> pattern = Arrays.asList(
    new Dot(), new Gap(20), new Dash(30), new Gap(20));
polyline.setPattern(pattern);

      

Desen, şekil için belirtilen ilk tepe noktasındaki ilk desen öğesinden başlayarak çizgi boyunca tekrarlanır.

Eklem türleri

Çoklu çizgiler ve poligonların dış hatları için varsayılan sabit gönye eklem türünü değiştirmek üzere eğim veya yuvarlak JointType belirtebilirsiniz.

Aşağıdaki örnekte, çoklu çizgiye yuvarlak birleşim türü uygulanmaktadır:

Kotlin

polyline?.jointType = JointType.ROUND

      

Java

polyline.setJointType(JointType.ROUND);

      

Eklem türü, çizgideki iç bükümleri etkiler. Çizgide kısa çizgiler içeren bir kontur deseni varsa kısa çizgi bir birleşme noktasını kapsadığında da birleşme türü uygulanır. Birleştirme türleri, her zaman dairesel oldukları için noktaları etkilemez.

Çizgi başlıkları

Çoklu çizginin her bir ucu için bir Cap stili belirtebilirsiniz. Seçenekler; düz (varsayılan), kare, yuvarlak veya özel bir bit eşlem şeklindedir. Stili PolylineOptions.startCap ve PolylineOptions.endCap içinde ayarlayın veya uygun getter ve setter yöntemlerini kullanın.

Aşağıdaki snippet, bir çoklu çizginin başlangıcında yuvarlak bir uç belirtir.

Kotlin

polyline?.startCap = RoundCap()

      

Java

polyline.setStartCap(new RoundCap());

      

Aşağıdaki snippet, kapanış resmi için özel bir bit eşlem belirtir:

Kotlin

polyline?.endCap = CustomCap(BitmapDescriptorFactory.fromResource(R.drawable.arrow), 16F)

      

Java

polyline.setEndCap(
    new CustomCap(BitmapDescriptorFactory.fromResource(R.drawable.arrow), 16));

      

Özel bir bit eşlem kullandığınızda, piksel cinsinden bir referans kontur genişliği belirtmeniz gerekir. API, bit eşlemi buna göre ölçeklendirir. Referans kontur genişliği, başlık için bitmap resmini tasarlarken resmin orijinal boyutunda kullandığınız kontur genişliğidir. Varsayılan referans kontur genişliği 10 pikseldir. İpucu: Referans kontur genişliğini belirlemek için bit eşlem resminizi bir resim düzenleyicide% 100 yakınlaştırmayla açın ve çizgi konturunun istediğiniz genişliğini resme göre çizin.

Bit eşlemi oluşturmak için BitmapDescriptorFactory.fromResource() kullanıyorsanız yoğunluktan bağımsız bir kaynak (nodpi) kullandığınızdan emin olun.

Jeodezik segmentler

Jeodezik ayarı yalnızca çoklu çizgiler ve çokgenler için geçerlidir. Segment koleksiyonu olarak tanımlanmadıkları için daireler için geçerli değildir.

Jeodezik ayar, çoklu çizgi/poligonun ardışık köşeleri arasındaki çizgi parçalarının nasıl çizileceğini belirler. Jeodezik segmentler, Dünya yüzeyindeki (küre) en kısa yolu takip eden ve genellikle Mercator projeksiyonlu bir haritada eğri çizgiler olarak görünen segmentlerdir. Jeodezik olmayan segmentler haritada düz çizgiler olarak çizilir.

Bu özelliği, şeklin seçenek nesnesinde *Options.geodesic() yöntemini çağırarak ayarlayın. Burada true, segmentlerin jeodezik olarak çizilmesi gerektiğini, false ise segmentlerin düz çizgiler olarak çizilmesi gerektiğini belirtir. Belirtilmezse varsayılan olarak jeodezik olmayan segmentler (false) kullanılır.

Şekil haritaya eklendikten sonra, jeodezik ayara isGeodesic() çağrılarak erişilebilir ve setGeodesic() çağrılarak değiştirilebilir.

Z-endeksi

Z dizini, bu şeklin haritadaki diğer yer paylaşımlarına (diğer şekiller, yer üstü katmanları ve karo yer paylaşımları) göre yığın sırasını belirtir. Yüksek z-dizini olan bir yer paylaşımı, daha düşük z-dizini olan yer paylaşımlarının üzerinde çizilir. Aynı z-index'e sahip iki yer paylaşımı rastgele bir sırada çizilir.

İşaretçiler, diğer yer paylaşımlarının z-dizininden bağımsız olarak her zaman diğer yer paylaşımlarının üzerinde çizilir.

*Options.zIndex() çağırarak bu özelliği şeklin seçenekler nesnesinde ayarlayın. Belirtilmezse varsayılan z-index 0 olur. Şekil haritaya eklendikten sonra, z-index'e getZIndex() çağrılarak erişilebilir ve setZIndex() çağrılarak değiştirilebilir.

Görünürlük

Görünürlük, şeklin haritada çizilip çizilmeyeceğini belirtir. Burada true çizilmesi gerektiğini, false ise çizilmemesi gerektiğini gösterir. Bu yöntem, bir şekli haritada geçici olarak gizlemenize olanak tanır. Şekli haritadan kalıcı olarak kaldırmak için ilgili şekil üzerinde remove() yöntemini çağırın.

*Options.visible() yöntemini çağırarak bu özelliği şeklin seçenekler nesnesinde ayarlayın. Belirtilmezse varsayılan görünürlük true olur. Şekil haritaya eklendikten sonra, isVisible() çağrılarak görünürlüğe erişilebilir ve setVisible() çağrılarak görünürlük değiştirilebilir.

Verileri bir şekille ilişkilendirme

Şeklin setTag() yöntemini kullanarak çoklu çizgi, poligon veya daire ile rastgele bir veri nesnesi depolayabilir ve getTag() kullanarak nesneyi alabilirsiniz. Örneğin, çoklu çizgi içeren bir veri nesnesini depolamak için Polyline.setTag(), veri nesnesini almak için ise Polyline.getTag() yöntemini çağırın.

Aşağıdaki kod, belirtilen çoklu çizgi için rastgele bir etiket (A) tanımlar:

Kotlin

val polyline = map.addPolyline(
    PolylineOptions()
        .clickable(true)
        .add(
            LatLng(-35.016, 143.321),
            LatLng(-34.747, 145.592),
            LatLng(-34.364, 147.891),
            LatLng(-33.501, 150.217),
            LatLng(-32.306, 149.248),
            LatLng(-32.491, 147.309)
        )
)
polyline?.tag = "A"

      

Java

Polyline polyline = map.addPolyline((new PolylineOptions())
    .clickable(true)
    .add(new LatLng(-35.016, 143.321),
        new LatLng(-34.747, 145.592),
        new LatLng(-34.364, 147.891),
        new LatLng(-33.501, 150.217),
        new LatLng(-32.306, 149.248),
        new LatLng(-32.491, 147.309)));

polyline.setTag("A");

      

Aşağıda, verileri şekillerle saklamanın ve almanın faydalı olduğu bazı senaryo örnekleri verilmiştir:

  • Uygulamanız farklı şekil türlerine hitap edebilir ve kullanıcı tıkladığında bunları farklı şekilde ele almak isteyebilirsiniz.
  • Şekillerin, ilgili sistemdeki belirli kayıtları temsil ettiği benzersiz kayıt tanımlayıcılarına sahip bir sistemle etkileşim kuruyor olabilirsiniz.
  • Şekil verileri, şeklin z-indeksini belirlemek için bir önceliği gösterebilir.