Kształty

Wybierz platformę: Android iOS JavaScript

Mapa z czerwoną linią ciągłą

Interfejs API Map Google na Androida oferuje kilka prostych sposobów dodawania kształtów do swoich map, aby dostosować je do swojej aplikacji.

  • Polyline to seria połączonych fragmentów liniowych, które mogą tworzyć dowolne kształty. 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 obszary na mapie.
  • Circle to geograficznie dokładna projekcja koła na powierzchni Ziemi narysowanego na mapie.

Możesz dostosować wygląd wszystkich tych kształtów przez zmianę szeregu właściwości.

Przykładowe fragmenty kodu

Samouczek dotyczący dodawania wielokątów i wielokątów otwartych do reprezentowania obszarów i tras zawiera cały kod prostej aplikacji na Androida.

Dodatkowo repozytorium API Apigee na GitHubie zawiera: przykładowe zastosowania kształtów i ich cech:

Linie łamane

Klasa Polyline definiuje zbiór połączonych wierszy. segmentów na mapie. Obiekt Polyline składa się z szeregu lokalizacji LatLng i tworzy serię odcinków linii, które łączą te lokalizacje w uporządkowanej sekwencji.

Z tego filmu dowiesz się, jak pomóc użytkownikom w dotarciu do celu za pomocą ścieżek wielokątnych na mapie.

Aby utworzyć linię łamaną, najpierw utwórz obiekt PolylineOptions. i dodać do niego punkty. Punkty reprezentują punkt na powierzchni Ziemi i są wyrażane jako obiekt LatLng. Odcinki linii są rysowane między punktami w kolejności, w jakiej zostały dodane do obiektu PolylineOptions.

Aby dodać punkty do obiektu PolylineOptions, wywołaj funkcję 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 znajdują się już na liście).

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

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

      

Na mapie prostokąt będzie wyglądał tak:

Mapa z linią łamaną w kształcie prostokąta

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

Przed dodaniem linii łamanej możesz dostosować jej wygląd do mapy i po dodaniu jej do mapy. Zapoznaj się z sekcją na temat: Dostosowywanie wyglądu poniżej, aby dowiedzieć się więcej.

Dostosowywanie linii łamanej

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

  • Wielokolorowe linie łamane mają segmenty w różnych kolorach.
  • Linie łamane gradientu określają kolor linii łamanej za pomocą gradientu dwóch kolorów.
  • Znakowane linie poligonalne – stylizowanie linii poligonalnej za pomocą powtarzających się bitmap.

Aby korzystać z dostosowań linii łamanych, musisz korzystać z pakietu SDK Maps na Androida w wersji 18.1.0 lub nowszej oraz użyj najnowszego pakietu Maps SDK na Androida.

Tworzenie wielokolorowej linii złożonej

Mapa z wielokolorową linią łamaną

Za pomocą rozpiętości możesz pojedynczo kolorować segmenty linii łamanej przez utworzenie StyleSpan obiektów i dodaję je do PolylineOptions za pomocą addSpan() lub addSpans(). Domyślnie każdy element w tablicy będzie określał kolor odpowiadającego mu odcinka linii. Poniżej znajduje się przykład konfigurowania segmentu aby utworzyć linię łamaną 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 dwa 32-bitowe wartości: 2 32-bitowe: alfa-czerwony-zielony-niebieski (ARGB) liczb całkowitych, aby 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(). Ten przykład pokazuje tworzenie polilinii z gradientem od czerwonego do żółtego na trasie z zoo w 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 oznaczeniem

Mapa z wydrukowaną linią łamaną

Wygląd ścieżki złożonej możesz ustawić jako powtarzającą się teksturę bitmapy. Aby to zrobić, utwórz obiekt StampStyle z wartością TextureStyle, a potem ustaw tę właściwość w obiekcie opcji kształtu, wywołując funkcję PolylineOptions.addSpan() w ten 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 związane z linią łamaną

Domyślnie ścieżek wielokątów nie można kliknąć. Możesz włączyć lub wyłączyć klikalność dzięki wywołaniu funkcji Polyline.setClickable(boolean).

Użyj OnPolylineClickListener, aby: nasłuchuj zdarzeń kliknięcia na klikalnej linii łamanej. Aby ustawić ten odbiornik na mapie, Zadzwoń pod numer GoogleMap.setOnPolylineClickListener(OnPolylineClickListener). Gdy użytkownik kliknie linię łamaną, wyświetli się onPolylineClick(Polyline) oddzwonienie.

Wielokąty

Obiekty Polygon są podobne do obiektów Polyline, ponieważ składają się z szeregu współrzędnych w uporządkowanej sekwencji. Jednak wielokąty nie są otwarte, a jedynie zdefiniuj regiony w pętli zamkniętej z wypełnionym wnętrzem.

Możesz dodać Polygon do mapy w taki sam sposób jak Polyline. Najpierw utwórz obiekt PolygonOptions i dodaj do niego punkty. Te punkty utworzą kontur wielokąta. Następnie dodaj wielokąt do mapy, wywołując funkcję GoogleMap.addPolygon(PolygonOptions), która zwróci 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ć Polygon.setPoints() i podaj nową listę punktów do konspektu wielokąta.

Przed dodaniem wielokąta możesz dostosować jego wygląd do mapy i po dodaniu jej do mapy. Zapoznaj się z sekcją na temat: Dostosowywanie wyglądu poniżej, aby dowiedzieć się więcej.

Autouzupełnianie w Polygon

Wielokąt w tym przykładzie składa się z 5 współrzędnych, ale zwróć uwagę, że pierwsza i ostatnia współrzędna to ta sama lokalizacja, która definiuje pętlę. W praktyce jednak, ponieważ wielokąty wyznaczają zamknięte obszary, nie trzeba zdefiniować ostatnią współrzędną. Jeśli ostatnia współrzędna różni się od pierwszej, funkcja Interfejs API automatycznie się zamknie wielokąt, dołączając pierwszą współrzędną przy na końcu ciągu współrzędnych.

Dwa poniższe wielokąty są równoważne i funkcja polygon.getPoints() za każdą odpowiedź 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

Wiele ścieżek można połączyć w jeden obiekt Polygon, aby tworzyć złożone kształty, takie jak wypełnione pierścienie lub „pączki” (gdzie obszary wielokąta są widoczne wewnątrz wielokąta jako „wyspy”). Złożone kształty są zawsze z kilku prostszych ścieżek.

Dwie ścieżki muszą być zdefiniowane w tym samym obszarze. Większa z 2 regionów 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 opcja jest mniejsza, jest w pełni otoczona większą ścieżką, wydaje się, że fragment wielokąt 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 jeden prostokąt o mniejszym, prostokątnym dziura.

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 półprzezroczystą linią łamaną w kształcie prostokąta

Zdarzenia Polygon

Domyślnie wielokąty nie są klikalne. Możesz włączyć lub wyłączyć klikalność dzięki wywołaniu funkcji Polygon.setClickable(boolean).

Użyj OnPolygonClickListener, aby: nasłuchują zdarzeń kliknięcia klikalnego wielokąta. Aby ustawić tego odbiornika na mapie, wywołaj funkcję GoogleMap.setOnPolygonClickListener(OnPolygonClickListener). Gdy użytkownik kliknie wielokąt, otrzymaszonPolygonClick(Polygon) połączenie zwrotne.

Kręgi

Mapa z kręgiem

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

Aby utworzyć okrąg, musisz określić te 2 właściwości:

  • center jako LatLng.
  • radius w metrach.

Następnie definiowany jest okrąg jako zbiór wszystkich punktów na powierzchni Ziemi. co znajduje się radius metrów od wskazanego miejsca: center. Z jakiegoś powodu odwzorowanie Mercator używane w interfejsie API Map Google renderuje kulę na płaskiej powierzchni. Gdy znajdziesz się w pobliżu i będzie coraz bardziej nieokrągły (na ekranie), oddala się od równika.

Aby zmienić kształt dodanego okręgu, możesz wywołać Circle.setRadius() lub Circle.setCenter() i podaj nowe wartości.

Przed dodaniem kręgu możesz dostosować jego wygląd do mapy i po dodaniu jej do mapy. Zapoznaj się z sekcją na temat: Dostosowywanie wyglądu poniżej, aby dowiedzieć się więcej.

Ten fragment kodu dodaje do mapy okrąg, tworząc obiekt CircleOptions i wywołując funkcję 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 kółka nie są klikalne. Możesz włączyć lub wyłączyć klikalność, wywołując metodę GoogleMap.addCircle() z CircleOptions.clickable(boolean) lub telefonicznie Circle.setClickable(boolean)

Użyj elementu OnCircleClickListener, aby odbierać zdarzenia kliknięcia w przypadku klikalnego koła. Aby ustawić ten odbiornik na mapie, Zadzwoń pod numer GoogleMap.setOnCircleClickListener(OnCircleClickListener).

Gdy użytkownik kliknie okrą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 przed dodaniem go do mapy (przez określenie żądanej właściwości w obiekcie options) lub po dodaniu go do mapy. Gettery są również dostępne we wszystkich właściwościach, dzięki czemu możesz łatwo uzyskać dostęp do bieżącego stanu kształtu.

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

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: chociaż większość z nich ma zastosowanie do kształtów, niektóre właściwości mogą nie sensu 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ści i koloru linii kształtu. Ustaw tę właściwość w obiekcie opcji kształtu, wywołując funkcję *Options.strokeColor() (lub PolylineOptions.color() w przypadku ścieżki wielosegmentowej). Jeśli nie określono inaczej, parametr Domyślny kolor kreski to czarny (Color.BLACK).

Po dodaniu kształtu do mapy możesz uzyskać dostęp do koloru obrysu, wywołując funkcję getStrokeColor() (lub getColor() w przypadku ścieżki złożonej) i zmienić go, 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ą zdefiniowanych wnętrz. W przypadku wielokąta obszary wewnątrz otworów nie są częścią wnętrza wielokąta i nie będą zabarwione, 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ści i koloru wewnątrz kształtu. Ustaw tę właściwość w obiekcie opcji kształtu, wywołując funkcję *Options.fillColor(). Jeśli nie określono inaczej, parametr domyślny kolor kreski jest przezroczysty (Color.TRANSPARENT),

Po dodaniu kształtu do mapy kolor wypełnienia może być dostępny przez getFillColor(). Można to zmienić, dzwoniąc pod numer setFillColor().

Szerokość kreski

Szerokość kreski linii wyrażona w pikselach jako liczba zmiennoprzecinkowa. (piks.). Szerokość nie skaluje się po powiększeniu mapy (tzn. kształt takiej samej szerokości kreślenia 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 wielokąta). Jeśli nie określono inaczej, domyślna kreska ma 10 pikseli.

Po dodaniu kształtu do mapy możesz uzyskać dostęp do szerokości obrysu, wywołując funkcję getStrokeWidth() (lub getWidth() w przypadku łańcucha wielokątów) i zmienić ją, wywołując funkcję setStrokeWidth() (setWidth() for a polyline).

Wzór obrysu

Domyślny wzór kreski to linia ciągła dla linii łamanych i kontur wielokąty i okręgi. Możesz określić niestandardowy wzór obrysu obiektów PatternItem, w którym każdy element jest kreską, kropką lub przerwą.

Poniższy przykład ustawia wzór linii łamanej na powtórzony sekwencja kropki, po której następuje przerwa o długości 20 pikseli, łącznik długości i kolejne 20 pikseli.

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 wzoru w pierwszym wierzchołku określonym dla kształtu.

Typy połączeń

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

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 zawiera przekreślenie, z wzorcem zawierającym łączniki, typ połączenia ma zastosowanie również wtedy, gdy kreska pojawia się w kreskach wspólnej. Typy połączeń nie mają wpływu na kropki, ponieważ są one zawsze okrągłe.

Ograniczenia prędkości

Możesz określić styl Cap dla każdego końca polilinii. Opcje to elementy (domyślnie), kwadratowe, okrągłe lub niestandardowe mapy bitowe. Ustaw styl w PolylineOptions.startCapPolylineOptions.endCap albo użyj odpowiednich metod gettera i settera.

Poniższy fragment kodu określa zaokrąglony początek polilinii.

Kotlin

polyline.startCap = RoundCap()

      

Java

polyline.setStartCap(new RoundCap());

      

Ten fragment kodu określa niestandardową mapę bitową dla końcowego ogranicznika:

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 bitmapy, musisz określić referencyjny rozmiar obrysu w pikselach. Interfejs API odpowiednio skaluje bitmapę. Szerokość kreski referencyjnej to tę szerokość kreski użytej przy projektowaniu obrazu bitmapy oryginalne wymiary obrazu. Domyślna szerokość odniesienia obrysu to 10 pikseli. Wskazówka: aby określić szerokość kreski referencyjnej, otwórz obraz bitmapy w Powiększ 100% w edytorze obrazów i narysuj odpowiednią szerokość linii linii. względem obrazu.

Jeśli używasz BitmapDescriptorFactory.fromResource() aby utworzyć bitmapę, użyj zasobu niezależnego od gęstości (nodpi).

Segmenty geodezyjne

Ustawienie geodezyjne dotyczy tylko linii łamanych i wielokątów. Nie dotyczy w kręgach, ponieważ nie są one zdefiniowane jako zbiór segmentów.

Ustawienie geodezyjne określa sposób rysowania odcinków linii między kolejnymi wierzchołkami polilinii lub wielokąta. Segmenty geodezyjne to takie, które pokonuj najkrótszą drogę (sferę) na powierzchni Ziemi i często są wyświetlane na mapie jako krzywe linie z odwzorowaniem Merkatora. Niegeodezyjna segmenty są rysowane na mapie jako linie proste.

Ustaw tę właściwość na obiekcie opcji kształtu, wywołując *Options.geodesic(), gdzie true wskazuje, że odcinki powinny być rysowane jako geodezja, a false wskazuje, że odcinki powinny być narysowane jako linie proste. Jeśli nie podasz żadnej wartości, domyślnie zostaną użyte segmenty niegeodezyjne (false).

Po dodaniu kształtu do mapy można uzyskać dostęp do ustawień geodezyjnych przez wywołanie isGeodesic(). Można to zmienić, dzwoniąc pod numer setGeodesic().

Z-index

Kolejność nakładania elementów określa kolejność nakładania tego kształtu względem innych nakładek (innych kształtów, nakładek na grunt i nakładek na kafelki) na mapie. Nakładka o wysokiej wartości wskaźnika z-index jest wyświetlana nad nakładkami o niższej wartości tego parametru. 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 z-index innych nakładek.

Ustaw tę właściwość w obiekcie opcji kształtu, wywołując funkcję *Options.zIndex(). Jeśli nie określisz tego ustawienia, zostanie użyty domyślny indeks z równym 0. Po dodaniu kształtu do mapy możesz uzyskać dostęp do indeksu Z, wywołując metodę getZIndex(), a jego wartość możesz zmienić, wywołując metodę setZIndex().

Widoczność

Widoczność określa, czy na mapie ma być narysowany kształt, gdzie true oznacza, że powinien być narysowany, a false oznacza, że nie powinien. Pozwala na tymczasowe ukrycie kształtu na mapie. Aby na stałe usuń kształt z mapy, wywołaj remove() dla tego kształtu.

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żesz uzyskać dostęp do widoczności, wywołując funkcję isVisible(), a jego zmianę, wywołując funkcję setVisible().

Powiązanie danych z kształtem

Możesz przechowywać dowolny obiekt danych z linią łamaną, wielokątem lub kołem za pomocą metody setTag() kształtu, a potem pobierz obiekt za pomocą getTag(). Na przykład wywołaj Polyline.setTag(), aby zapisać dane obiekt z linią łamaną i wywołaj funkcję Polyline.getTag() w celu pobierze obiekt danych.

Poniższy kod definiuje dowolny tag (A) dla określonej ścieżki wielokąta:

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 przydatne jest przechowywanie i pobieranie danych za pomocą kształtów:

  • Twoja aplikacja może obsługiwać różne typy kształtów, a Ty chcesz na nie wpływać gdy użytkownik je kliknie.
  • Możesz mieć do czynienia z systemem, który ma unikalne identyfikatory rekordów, a kształty reprezentują konkretne rekordy w tym systemie.
  • Dane kształtu mogą wskazywać priorytet określający kolejność nakładania elementów kształtu.