Kształty

Wybierz platformę: Android iOS JavaScript

Mapa z ciągłą czerwoną linią łamaną

Interfejs API Map Google na Androida oferuje kilka prostych sposobów dodawania kształtów do map w celu dostosowania ich do własnych potrzeb.

  • Polyline to seria połączonych fragmentów linii, które mogą tworzyć dowolny kształt. Można ich używać do zaznaczania ścieżek i tras na mapie.
  • Polygon to zamknięty kształt, którego można używać do zaznaczania obszarów na mapie.
  • Circle to wierne geograficznie odwzorowanie okręgu na powierzchni Ziemi, narysowanego na mapie.

Możesz dostosować wygląd wszystkich tych kształtów, modyfikując kilka właściwości.

Przykładowe fragmenty kodu

Samouczek dotyczący dodawania wielokątów i linii łamanych reprezentujących obszary i trasy zawiera cały kod prostej aplikacji na Androida.

Dodatkowo repozytorium API Apigee na GitHubie zawiera przykłady, które pokazują wykorzystanie kształtów i ich funkcji:

Linie łamane

Klasa Polyline definiuje zestaw połączonych ze sobą segmentów linii na mapie. Obiekt Polyline składa się ze zbioru lokalizacji LatLng i tworzy serię segmentów linii, które łączą te lokalizacje w uporządkowanej kolejności.

Ten film zawiera pomysły na to, jak pomóc użytkownikom dotrzeć do celu, wykorzystując linie łamane do rysowania ścieżki na mapie.

Aby utworzyć linię łamaną, najpierw utwórz obiekt PolylineOptions i dodaj do niego punkty. Punkty to punkt na powierzchni Ziemi i przedstawiony w postaci obiektu LatLng. Odcinki linii są rysowane między punktami zgodnie z kolejnością, w jakiej dodajesz je do obiektu PolylineOptions.

Aby dodać punkty do obiektu PolylineOptions, wywołaj PolylineOptions.add(). Zwróć uwagę, że ta metoda przyjmuje zmienną liczbę parametrów, dzięki czemu możesz dodawać wiele punktów naraz (możesz też wywołać funkcję PolylineOptions.addAll(Iterable<LatLng>), jeśli punkty są już na liście).

Następnie możesz dodać linię łamaną do mapy, wywołując metodę GoogleMap.addPolyline(PolylineOptions). Ta metoda zwraca obiekt Polyline, za pomocą którego możesz później zmienić linię łamaną.

Następujący fragment kodu pokazuje, jak dodać prostokąt do mapy:

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)

      

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);

      

Prostokąt pojawi się na mapie w następujący sposób:

Mapa z prostokątną linią łamaną

Aby zmienić kształt dodanej linii łamanej, możesz wywołać funkcję Polyline.setPoints() i podać nową listę punktów dla linii łamanej.

Możesz dostosować wygląd linii łamanej zarówno przed dodaniem jej do mapy, jak i po jej dodaniu. Więcej informacji znajdziesz w sekcji dotyczącej dostosowywania wyglądu poniżej.

Dostosowanie linii łamanej

Wygląd linii łamanych można dostosować na kilka sposobów:

  • Wielokolorowe linie łamane ustawiają segmenty linii łamanych w różnych kolorach.
  • Linie łamane gradientu określają kolor linii łamanej za pomocą gradientu dwóch kolorów.
  • Stemplowane linie łamane określają styl linii łamanej za pomocą powtarzających się map bitowych.

Aby korzystać z dostosowań linii łamanych, musisz korzystać z pakietu SDK Maps na Androida w wersji 18.1.0 lub nowszej i najnowszego mechanizmu renderowania dostępnego w pakiecie Maps SDK na Androida.

Tworzenie wielokolorowej linii łamanej

Mapa z wielokolorową linią łamaną

Za pomocą spanów możesz pojedynczo oznaczyć segmenty linii łamanej kolorami, tworząc obiekty StyleSpan i dodając je do PolylineOptions za pomocą metod addSpan() lub addSpans(). Domyślnie każdy element w tablicy ustawia kolor odpowiedniego segmentu linii. Poniższy przykład pokazuje ustawianie kolorów segmentów w celu utworzenia linii łamanej z segmentami czerwonym i zielonym:

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)));

      

Tworzenie linii łamanej gradientu

Mapa z linią łamaną gradientu

Aby zdefiniować gradient, podaj dwie 32-bitowe liczby całkowite w formacie alfa-czerwony-zielony-niebieski (ARGB), by określić kolor początkowy i końcowy kreski. Ustaw tę właściwość w obiekcie opcji kształtu, wywołując funkcję PolylineOptions.addSpan(). Poniższy przykład pokazuje proces tworzenia linii łamanej z gradientem od czerwonego do żółtego, od ogrodu zoologicznego Woodland Park do Kirkland w stanie Waszyngton.

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())));

      

Tworzenie linii łamanej z pieczęciami

Mapa z podstemplowaną linią łamaną

Możesz ustawić wygląd linii łamanej na powtarzające się tekstury bitmapy. Aby to zrobić, utwórz StampStyle o wartości TextureStyle, a następnie ustaw tę właściwość w obiekcie opcji kształtu, wywołując PolylineOptions.addSpan() w następujący sposób:

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));

      

Zdarzenia linii łamanej

Domyślnie linii łamanych nie można klikać. Aby włączyć lub wyłączyć klikalność, wywołaj Polyline.setClickable(boolean).

Użyj parametru OnPolylineClickListener, aby nasłuchiwać zdarzeń kliknięcia na klikalnej linii łamanej. Aby ustawić ten odbiornik na mapie, wywołaj GoogleMap.setOnPolylineClickListener(OnPolylineClickListener). Gdy użytkownik kliknie linię łamaną, otrzymasz wywołanie zwrotne onPolylineClick(Polyline).

Wielokąty

Obiekty Polygon są podobne do obiektów Polyline, ponieważ składają się z serii współrzędnych w uporządkowanej sekwencji. Wielokąty nie są jednak uważane za otwarte, ponieważ służą do definiowania regionów w zamkniętej pętli z wypełnionym wnętrzem.

Możesz dodać do mapy obiekt Polygon w taki sam sposób, jak dodawanie Polyline. Najpierw utwórz obiekt PolygonOptions i dodaj do niego kilka punktów. Punkty te utworzą kontur wielokąta. Potem dodaj wielokąt do mapy, wywołując metodę GoogleMap.addPolygon(PolygonOptions), która zwraca obiekt Polygon.

Następujący fragment kodu dodaje prostokąt do mapy.

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);

      

Aby zmienić kształt wielokąta po jego dodaniu, możesz wywołać funkcję Polygon.setPoints() i podać nową listę punktów dla konturu wielokąta.

Możesz dostosować wygląd wielokąta zarówno przed dodaniem go do mapy, jak i po jego dodaniu. Więcej informacji znajdziesz w sekcji dotyczącej dostosowywania wyglądu poniżej.

Autouzupełnianie wielokątów

Wielokąt w przykładzie powyżej składa się z 5 współrzędnych, ale pamiętaj, że pierwsza i ostatnia współrzędna znajdują się w tej samej lokalizacji, która definiuje pętlę. W praktyce jednak, ponieważ wielokąty wyznaczają zamknięte obszary, nie musisz określać tej ostatniej współrzędnej. Jeśli ostatnia współrzędna różni się od pierwszej, interfejs API automatycznie „zamknie” wielokąt, dołączając pierwszą współrzędną na końcu sekwencji współrzędnych.

Dwa poniższe wielokąty są równoważne i wywołanie polygon.getPoints() w każdym z nich zwróci wszystkie 4 punkty.

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));

      

Tworzenie pustego wielokąta

W jednym obiekcie Polygon można połączyć wiele ścieżek, by utworzyć złożone kształty, takie jak wypełnione pierścienie lub „pierścienie” (gdzie wielokąty są widoczne wewnątrz wielokąta jako „wyspy”). Złożone kształty zawsze stanowią kompozycję wielu prostszych ścieżek.

Dwie ścieżki muszą być zdefiniowane w tym samym obszarze. Większa z tych opcji określa obszar wypełnienia i jest to prosty wielokąt bez dodatkowych opcji. Następnie przekaż drugą ścieżkę do metody addHole(). Gdy druga, mniejsza ścieżka zostanie w pełni otoczona większą ścieżką, wydaje się, że fragment wielokąta został usunięty. Jeśli otwór przecina kontur wielokąta, wielokąt zostanie wyświetlony bez żadnego wypełnienia.

Poniższy fragment kodu utworzy pojedynczy prostokąt z mniejszym prostokątnym otworem.

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)
)

      

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));

      

Pusty wielokąt jest widoczny na mapie w następujący sposób:

Mapa z pustym prostokątem z linią łamaną

Wydarzenia Polygon

Domyślnie wielokąty nie są klikalne. Aby włączyć lub wyłączyć klikalność, wywołaj Polygon.setClickable(boolean).

Użyj symbolu OnPolygonClickListener, aby nasłuchiwać zdarzeń kliknięcia na klikalnym wielokątie. Aby ustawić ten odbiornik na mapie, wywołaj GoogleMap.setOnPolygonClickListener(OnPolygonClickListener). Gdy użytkownik kliknie wielokąt, otrzymasz wywołanie zwrotne onPolygonClick(Polygon).

Kółka

Mapa z okręgiem

Oprócz ogólnej klasy Polygon interfejs API Map Google zawiera też określone klasy obiektów Circle, aby ułatwić ich tworzenie.

Aby utworzyć okrąg, musisz określić dwie następujące właściwości:

  • center jako LatLng.
  • radius w metrach.

Okrąg określa się jako zbiór wszystkich punktów na powierzchni Ziemi, które znajdują się w odległości radius metrów od określonej wartości center. Ze względu na sposób, w jaki rzut Mercator używany w interfejsie API Map Google renderuje kulę na płaskiej powierzchni, w pobliżu równika będzie się on pojawiać prawie idealnie okrąg, a w miarę oddalania się od niego będzie coraz bardziej nieokrągły (na ekranie).

Aby zmienić kształt dodanego okręgu, wywołaj Circle.setRadius() lub Circle.setCenter() i wpisz nowe wartości.

Możesz dostosować wygląd okręgu zarówno przed dodaniem go do mapy, jak i po jego dodaniu. Więcej informacji znajdziesz w sekcji dotyczącej dostosowywania wyglądu poniżej.

Ten fragment kodu dodaje do mapy okrąg przez utworzenie obiektu CircleOptions i wywołanie GoogleMap.addCircle(CircleOptions):

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)

      

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);

      

Wydarzenia związane z kręgiem

Domyślnie kręgi nie są klikalne. Aby włączyć lub wyłączyć klikalność, wywołaj GoogleMap.addCircle(), używając CircleOptions.clickable(boolean) lub Circle.setClickable(boolean).

Użyj elementu OnCircleClickListener, aby nasłuchiwać zdarzeń kliknięcia w klikalnym okręgu. Aby ustawić ten odbiornik na mapie, wywołaj GoogleMap.setOnCircleClickListener(OnCircleClickListener).

Gdy użytkownik kliknie krąg, otrzymasz wywołanie zwrotne onCircleClick(Circle), jak pokazano w tym przykładowym kodzie:

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);
    }
});

      

Dostosowywanie wyglądu

Możesz zmienić wygląd kształtu zarówno przed dodaniem go do mapy (określając żądaną właściwość w obiekcie options), jak i po dodaniu go do mapy. Obiekty pobierające są też widoczne dla wszystkich właściwości, dzięki czemu można łatwo uzyskać dostęp do bieżącego stanu kształtu.

Ten fragment kodu dodaje grubą niebieską linię łamaną z segmentami geodezyjnymi z Melbourne do Perth. Właściwości te zostały szczegółowo wyjaśnione w sekcjach poniżej.

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));

      

Mapa wygląda tak:

Mapa z linią łamaną z Melbourne do Perth

Uwaga: większość z nich można zastosować do dowolnych opisanych kształtów, jednak niektóre właściwości mogą nie mieć znaczenia dla określonych kształtów (np. linia łamana nie może mieć koloru wypełnienia, ponieważ nie ma wnętrza).

Kolor kreski

Kolor kreski to 32-bitowa liczba całkowita w formacie alfa-czerwony-zielony-niebieski (ARGB) określająca przezroczystość i kolor kreski kształtu. Ustaw tę właściwość dla obiektu opcji kształtu, wywołując funkcję *Options.strokeColor() (lub PolylineOptions.color() w przypadku linii łamanej). Jeśli nie określono tego koloru, domyślny kolor kreski jest czarny (Color.BLACK).

Po dodaniu kształtu do mapy można uzyskać dostęp do koloru kreski, wywołując funkcję getStrokeColor() (lub getColor() w przypadku linii łamanej) i można go zmienić, wywołując funkcję setStrokeColor() (setColor() for a polyline).

Kolor wypełnienia

Kolor wypełnienia dotyczy tylko wielokątów i okręgów. Nie dotyczy linii łamanych, ponieważ nie mają one zdefiniowanych wnętrz. W przypadku wielokąta obszary wewnątrz jego otworów nie wchodzą w skład wnętrza wielokąta i nie będą pokolorowane, jeśli ustawisz kolor wypełnienia.

Kolor wypełnienia to 32-bitowa liczba całkowita w formacie alfa-czerwony-zielony-niebieski (ARGB) określająca przezroczystość i kolor wnętrza kształtu. Ustaw tę właściwość w obiekcie opcji kształtu, wywołując funkcję *Options.fillColor(). Jeśli nie określono tego koloru, domyślny kolor kreski jest przezroczysty (Color.TRANSPARENT).

Po dodaniu kształtu do mapy można uzyskać dostęp do koloru wypełnienia, wywołując funkcję getFillColor(). Można go zmienić, wywołując funkcję setFillColor().

Grubość kreski

Szerokość kreski linii wyrażona jako liczba zmiennoprzecinkowa w pikselach (piks.). Szerokość nie skaluje się po powiększeniu mapy (tzn. kształt ma taką samą szerokość kreski na wszystkich poziomach powiększenia). Ustaw tę właściwość w obiekcie opcji kształtu, wywołując funkcję *Options.strokeWidth() (lub PolylineOptions.width() w przypadku linii łamanej). Jeśli nie określono inaczej, domyślna kreska ma 10 pikseli.

Po dodaniu kształtu do mapy można uzyskać dostęp do szerokości kreski, wywołując funkcję getStrokeWidth() (lub getWidth() w przypadku linii łamanej) i można ją zmienić, wywołując funkcję setStrokeWidth() (setWidth() for a polyline).

Styl kreski

Domyślny wzór kreski to linia ciągła dla linii łamanych oraz konturów wielokątów i okręgów. Możesz określić niestandardowy wzorzec kreski obiektów PatternItem, gdzie każdy element to myślnik, kropka lub kropka.

Poniższy przykład przedstawia wzór dla linii łamanej na powtórzony sekwencję kropki, po której następuje przerwa o długości 20 pikseli, kreska długości 30 pikseli i kolejna 20-pikselowa luka.

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);

      

Wzór powtarza się wzdłuż linii, zaczynając od pierwszego elementu wzorca na pierwszym wierzchołku określonym dla kształtu.

Typy połączeń

W przypadku linii łamanych i obrysów wielokątów możesz wybrać ścięcie lub okrąg JointType, aby zastąpić domyślny stały typ połączenia ściętego.

W przykładzie poniżej zastosowano typ złączenia okrągłego do linii łamanej:

Kotlin



polyline.jointType = JointType.ROUND

      

Java


polyline.setJointType(JointType.ROUND);

      

Typ połączenia wpływa na wewnętrzne zginania linii. Jeśli linia ma wzór kreski i kreski, typ połączenia ma zastosowanie również wtedy, gdy kreska oplata się o przełączenie. Typy połączeń nie mają wpływu na kropki, ponieważ są one zawsze okrągłe.

Limity tekstu

Możesz określić styl Cap dla każdego końca linii łamanej. Dostępne opcje to „but” (domyślnie), „kwadratowy”, „okrągły” i „niestandardowa mapa bitowa”. Ustaw styl w PolylineOptions.startCap i PolylineOptions.endCap lub użyj odpowiednich metod pobierania i ustawiania.

Ten fragment kodu określa okrągłe ograniczenie na początku linii łamanej.

Kotlin



polyline.startCap = RoundCap()

      

Java


polyline.setStartCap(new RoundCap());

      

Ten fragment kodu określa niestandardową mapę bitową dla reklamy po zakończeniu filmu:

Kotlin



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

      

Java


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

      

Jeśli używasz niestandardowej mapy bitowej, musisz określić referencyjną szerokość kreski w pikselach. Interfejs API odpowiednio skaluje bitmapę. Szerokość kreski referencyjnej to szerokość kreski użyta podczas projektowania obrazu bitmapy dla ograniczenia w pierwotnych wymiarach obrazu. Domyślna szerokość kreski referencyjnej wynosi 10 pikseli. Wskazówka: aby określić szerokość kreski referencyjnej, otwórz w edytorze obrazów obraz bitmapy z powiększeniem 100% i narysuj odpowiednią szerokość linii w stosunku do obrazu.

Jeśli do utworzenia bitmapy używasz BitmapDescriptorFactory.fromResource(), użyj zasobu niezależnego od gęstości (nodpi).

Fragmenty geodezyjne

Ustawienie geodezyjne dotyczy tylko linii łamanych i wielokątów. Nie dotyczy to kręgów, ponieważ nie są one zbiorem segmentów.

Ustawienie geodezyjne określa sposób rysowania odcinków linii między kolejnymi wierzchołkami linii/wielokąta. Odcinki geodezyjne to takie, które przebiegają najkrótszą ścieżką wzdłuż powierzchni Ziemi (kulą) i często są wyświetlane na mapie jako zakrzywione linie z rzutem Merkatora. Odcinki niegeodezyjne są rysowane na mapie jako linie proste.

Ustaw tę właściwość w obiekcie opcji kształtu, wywołując funkcję *Options.geodesic(), gdzie true wskazuje, że segmenty powinny być rysowane jako obiekty geodezyjne, a false wskazuje, że mają być rysowane jako linie proste. Jeśli nie określono inaczej, wartość domyślna to segmenty niegeodezyjne (false).

Po dodaniu kształtu do mapy ustawienia geodezyjne można uzyskać, wywołując funkcję isGeodesic(). Można je zmienić, wywołując funkcję setGeodesic().

Kolejność nakładania elementów

Kolejność nakładania elementów określa porządek nakładania się kształtu względem innych nakładek (innych kształtów, warstw i kafelków) na mapie. Nakładka o wysokim z-indeksie jest rysowana nad nakładkami o niższych wartościach z-index. Dwie nakładki o tej samej kolejności nakładania elementów są rysowane w dowolnej kolejności.

Pamiętaj, że znaczniki są zawsze rysowane nad innymi nakładkami, niezależnie od kolejności nakładania pozostałych nakładek.

Ustaw tę właściwość w obiekcie opcji kształtu, wywołując funkcję *Options.zIndex(). Jeśli nie określono inaczej, domyślna wartość z-index to 0. Po dodaniu kształtu do mapy można uzyskać dostęp do kolejności nakładania elementów, wywołując funkcję getZIndex(). Można ją zmienić, wywołując funkcję setZIndex().

Widoczność

Widoczność określa, czy kształt ma być rysowany na mapie, gdzie true wskazuje, że powinien być narysowany, a false – nie. Pozwala tymczasowo nie wyświetlać kształtu na mapie. Aby trwale usunąć kształt z mapy, wywołaj dla niego funkcję remove().

Ustaw tę właściwość w obiekcie opcji kształtu, wywołując funkcję *Options.visible(). Jeśli nie określono inaczej, widoczność domyślna to true. Po dodaniu kształtu do mapy można uzyskać dostęp do widoczności, wywołując funkcję isVisible(). Można ją zmienić, wywołując funkcję setVisible().

Powiąż dane z kształtem

Możesz przechowywać dowolny obiekt danych z linią łamaną, wielokątem lub okręgiem, korzystając z metody setTag() kształtu, a pobierać go za pomocą getTag(). Na przykład wywołaj Polyline.setTag(), by zapisać obiekt danych z linią łamaną, i Polyline.getTag(), by go pobrać.

Poniższy kod definiuje dowolny tag (A) dla określonej linii łamanej:

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");

      

Oto kilka przykładów sytuacji, w których warto przechowywać i pobierać dane za pomocą kształtów:

  • Twoja aplikacja może obsługiwać różne rodzaje kształtów i chcesz, by były traktowane inaczej, gdy użytkownik je kliknie.
  • Być może łączysz się z systemem, który ma unikalne identyfikatory rekordów, gdzie kształty reprezentują określone rekordy w tym systemie.
  • Dane kształtu mogą wskazywać priorytet określający kolejność nakładania kształtu dla kształtu.