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 obszarów na mapie.
  • Circle to wierne odwzorowanie okręgu geograficznie na powierzchni Ziemi, która jest zaznaczona na mapie.

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

Przykładowe fragmenty kodu

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

Dodatkowo w repozytorium ApiDemos na GitHubie znajdziesz przykłady, które pokazują, jak używać kształtów i ich właściwości:

Linie łamane

Klasa Polyline definiuje zestaw połączonych segmentów linii na mapie. Obiekt Polyline składa się ze zbioru LatLng oraz tworzy serię segmentów liniowych, połącz te lokalizacje w ułożonej kolejności.

Ten film zawiera pomysły na to, jak pomóc użytkownikom dotrzeć do miejsca za pomocą linii łamanych do rysowania ścieżki 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 polilinii po jej dodaniu, możesz wywołać funkcję Polyline.setPoints() i podać nową listę punktów dla polilinii.

Przed dodaniem linii łamanej możesz dostosować jej wygląd do mapy i po dodaniu jej do mapy. Więcej informacji znajdziesz w sekcji dotyczącej dostosowywania wyglądu.

Dostosowanie linii łamanej

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

  • Wielokolorowe linie łamane mają segmenty w różnych kolorach.
  • Gradienty na poliliniach wypełniają polilinie za pomocą gradientu 2 kolorów.
  • Linie łamane ze pieczęciami określają styl linii łamanej za pomocą powtarzających się map bitowych.

Aby korzystać z dostosowań linii łamanej, 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 łamanej

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 ustawia kolor odpowiedniego fragmentu linii. W tym przykładzie pokazano ustawienie kolorów segmentów w celu utworzenia łamany z czerwonymi i zielonymi segmentami:

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 gradientową linią łamaną

Możesz zdefiniować gradient, podając 2 32-bitowe liczby całkowite typu alpha-red-green-blue (ARGB), aby określić kolory 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 ścieżki wielokąta z gradientem od czerwonego do żółtego od Woodland Park Zoo 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 podstemplowaną linią łamaną

Wygląd łamany może mieć 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ć i wyłączyć możliwość kliknięcia, wywołując funkcję Polyline.setClickable(boolean).

Użyj elementu OnPolylineClickListener, aby odbierać zdarzenia kliknięcia na klikalnej polilinii. Aby ustawić ten odbiornik na mapie, Zadzwoń pod numer GoogleMap.setOnPolylineClickListener(OnPolylineClickListener). Gdy użytkownik kliknie polilinię, otrzymasz wywołanie zwrotneonPolylineClick(Polyline).

Wielokąty

Obiekty Polygon są podobne do obiektów Polyline, ponieważ składają się z szeregu współrzędnych w uporządkowanej sekwencji. Jednak zamiast być otwarte, są one zaprojektowane w taki sposób, aby definiować obszary w zamkniętej pętli 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.

Ten 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 konturu wielokąta.

Przed dodaniem wielokąta możesz dostosować jego wygląd do mapy i po dodaniu jej do mapy. Więcej informacji znajdziesz w sekcji dotyczącej dostosowywania wyglądu.

Autouzupełnianie wielokątów

Wielokąt w tym przykładzie składa się z 5 współrzędnych, ale zwróć uwagę, że pierwsze i ostatnie współrzędne są takie same, co definiuje pętlę. W praktyce jednak, ponieważ wielokąty definiują obszary zamknięte, nie musisz definiować tej ostatniej współrzędnej. 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

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

Dwie ścieżki muszą być zdefiniowane w tym samym obszarze. Większy z tych regionów określa obszar wypełnienia i jest prostym wielokątem bez dodatkowych opcji. Następnie prześlij drugą ścieżkę do metody addHole(). Gdy druga, mniejsza ścieżka jest całkowicie otoczona przez większą ścieżkę, wygląda to tak, jakby część wielokąta została usunięta. Jeśli otwór przecina kontur wielokąta, wielokąt zostanie wyrenderowany bez wypełnienia.

Podany niżej 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));

      

Na mapie pusty wielokąt wygląda tak:

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

Zdarzenia Polygon

Domyślnie wielokąty nie są klikalne. Możesz włączyć i wyłączyć możliwość kliknięcia, wywołując funkcję Polygon.setClickable(boolean).

Użyj OnPolygonClickListener, aby: nasłuchują zdarzeń kliknięcia klikalnego wielokąta. Aby ustawić ten odbiornik na mapie, Zadzwoń pod numer 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 Maps API zawiera też konkretne klasy dla obiektów Circle, aby uprościć ich konstrukcję.

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. w odległości 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 koła po jego dodaniu, możesz wywołać metodę Circle.setRadius() lub Circle.setCenter() i podać 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.

Następujący fragment kodu dodaje do mapy okrąg przez utworzenie Obiekt 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. 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ć tego odbiornika na mapie, wywołaj funkcję GoogleMap.setOnCircleClickListener(OnCircleClickListener).

Gdy użytkownik kliknie krąg, otrzymasz Wywołanie zwrotne onCircleClick(Circle) widoczne 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.

Następujący fragment kodu dodaje grubą niebieską linię łamaną z segmentami geodezyjnymi z 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: większość z nich można zastosować do dowolnego z opisanych kształtów, ale niektóre właściwości mogą nie mieć sensu w przypadku niektórych kształtów (np. linia złożona 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ść dla kształtu przez wywołanie *Options.strokeColor() (lub PolylineOptions.color() w przypadku linii łamanej). 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 kół. 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 alfa-czerwony-zielony-niebieski (ARGB), która określa przezroczystość i kolor wnętrza kształtu. Ustaw tę właściwość na obiektu opcji kształtu przez wywołanie funkcji *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 zmienia się, gdy powiększasz mapę (czyli kształt będzie miał tę sam obrys na wszystkich poziomach powiększenia). Ustaw tę właściwość dla kształtu obiekt opcji przez wywołanie metody *Options.strokeWidth() (lub PolylineOptions.width() dla linii łamanej). 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 konturu przez: wywołuje getStrokeWidth() (lub getWidth() w przypadku linii łamanej) i może zostać zmieniony aby zadzwonić do: setStrokeWidth() (setWidth() for a polyline).

Styl kreski

Domyślny wzór obrysu to ciągła linia w przypadku wielolinii, konturów wielokątów i kół. Możesz określić własny wzorzec kreski PatternItem, gdzie każdy element jest myślnikiem, kropką lub

W tym przykładzie wzór ścieżki złożonej z wielu odcinków ustawiono tak, aby zawierała powtarzającą się sekwencję kropek, a po niej odstęp o długości 20 pikseli, kreska o długości 30 pikseli i jeszcze jeden odstęp o długości 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 na pierwszy wierzchołek określony dla kształtu.

Typy połączeń

W przypadku łańcuchów wielokątów i konturów wielokątów możesz określić ścięcie lub zaokrąglenie JointType, aby zastąpić domyślny typ stałego 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 złącza wpływa na wewnętrzne wygięcia linii. Jeśli linia ma szew z wzorem, który zawiera łączniki, typ połączenia jest stosowany również wtedy, gdy łącznik znajduje się na styku. 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. Dostępne opcje to: stykowe (domyślne), kwadratowe, okrągłe lub niestandardowe bitmapy. Ustaw styl w PolylineOptions.startCapPolylineOptions.endCap albo użyj odpowiednich metod gettera i settera.

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, określ szerokość kreski w argumencie pikseli. Interfejs API odpowiednio skaluje bitmapę. Domyślna szerokość obrysu to szerokość obrysu użyta podczas projektowania bitmapy na nasadkę w początkowych wymiarach obrazu. Domyślna szerokość kreski referencyjnej 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, w jaki odcinki linii między kolejnymi zostaną narysowane wierzchołki linii łamanej/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 określono inaczej, wartość domyślna to segmenty niegeodezyjne (false).

Po dodaniu kształtu do mapy można uzyskać dostęp do ustawienia geodezyjnego, wywołując funkcję isGeodesic(), a jego wartość można zmienić, wywołując funkcję setGeodesic().

Z-index

Kolejność nakładania elementów określa porządek stosu różnych kształtów względem innych (inne kształty, nakładki na powierzchnię i nakładki z kafelkami) na mapie. Nakładka o wysokim z-indeksie jest rysowana nad nakładkami o niższych wartościach z-index. 2 nakładki o tej samej kolejności nakładania elementów są wyświetlane w dowolnej kolejności.

Pamiętaj, że znaczniki są zawsze wyświetlane nad innymi nakładkami, niezależnie od indeksu z- innych 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ż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 kształt ma być narysowany na mapie. Wartość true oznacza, że tak, a false – że nie. it pozwala tymczasowo nie wyświetlać kształtu na mapie. Aby na stałe usunąć kształt z mapy, wywołaj metodę remove() tego kształtu.

Ustaw tę właściwość w obiekcie opcji kształtu, wywołując *Options.visible() Jeśli nie określono inaczej, widoczność domyślna to true. Po dodaniu kształtu do mapy opcje widoczności mogą być dostępne przez: isVisible(). Można to zmienić, dzwoniąc pod numer setVisible().

Powiąż dane z kształtem

Możesz przechowywać dowolny obiekt danych za pomocą łamany, wielokąta lub okręgu za pomocą metody setTag() kształtu i pobierać 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 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 przydatne jest przechowywanie i pobieranie danych za pomocą kształtów:

  • Twoja aplikacja może obsługiwać różne typy kształtów i chcesz je traktować inaczej, gdy użytkownik kliknie jeden z nich.
  • 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, który służy do określenia z-indexu kształtu.