Kształty

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Wybierz platformę: Android iOS JavaScript

Mapa z linią linią ciągłą

Interfejs Google Maps API na Androida oferuje kilka prostych sposobów na dodawanie kształtów do map, aby dostosować je do aplikacji.

  • Polyline to seria połączonych segmentów, które mogą mieć dowolny kształt i służyć do oznaczania ścieżek i tras na mapie.
  • Polygon to zamknięty kształt, którego można używać do oznaczania obszarów na mapie.
  • Circle to geograficzne odwzorowanie okręgu na powierzchni Ziemi zaznaczonej na mapie.

W przypadku wszystkich tych kształtów możesz dostosowywać ich wygląd, zmieniając liczbę właściwości.

Przykładowe fragmenty kodu

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

Dodatkowo w repozytorium ApiDemos na GitHubie znajdują się przykłady, które pokazują użycie kształtów i ich funkcji:

Linie łamane

Klasa Polyline definiuje na mapie zestaw połączonych segmentów linii. Obiekt Polyline składa się z zestawu lokalizacji LatLng i tworzy serię segmentów linii łączących te lokalizacje w ułożonej kolejności.

Ten film zawiera pomysły, jak pomóc użytkownikom dotrzeć do celu, korzystając z wielu linii na mapie.

Aby utworzyć linię łamaną, najpierw utwórz obiekt PolylineOptions i dodaj do niego punkty. Punkty reprezentują punkt na powierzchni Ziemi i są wyrażane jako obiekty LatLng. Segmenty linii są rysowane między punktami zgodnie z kolejnością dodawania ich do obiektu PolylineOptions.

Aby dodać punkty do obiektu PolylineOptions, wywołaj PolylineOptions.add(). Uwaga: ta metoda wykorzystuje zmienną parametrów, by można było dodać wiele punktów naraz (możesz też wywołać metodę PolylineOptions.addAll(Iterable<LatLng>), jeśli punkty znajdują się już na liście).

Możesz dodać tę linię do mapy, wywołując GoogleMap.addPolyline(PolylineOptions). Metoda zwraca obiekt Polyline, który można zmienić w późniejszym czasie.

Ten fragment kodu pokazuje, jak dodać prostokąt do mapy:

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

      

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)

      

Prostokąt pojawi się na mapie, tak jak pokazano poniżej:

Mapa z prostokątną linią

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

Możesz dostosować wygląd linii łamanej przed dodaniem jej do mapy oraz po dodaniu jej do mapy. Więcej informacji znajdziesz w sekcji na temat dostosowywania wyglądu poniżej.

Dostosowanie linii łamanej

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

  • Wielokolorowe linie sylwetki mają ustawione różne kolory.
  • Polisy w postaci gradientu używają 2 kolorów: gradientu.
  • Ostemplowane linie łamane mają styl linii łamanych, powtarzające się.

Aby korzystać z personalizacji Polyline, musisz korzystać z wersji 18.1.0 lub nowszej pakietu Maps Maps na Androida i korzystać z najnowszego mechanizmu renderowania Map Google na Androida.

Tworzenie wielokolorowej linii łamanej

Mapa z wielokolorową linią łamaną

Możesz użyć rozpiętości, aby kolorować poszczególne segmenty linii łamanej. W tym celu utwórz obiekty StyleSpan i dodaj je do metody PolylineOptions za pomocą metod addSpan() lub addSpans(). Domyślnie każdy element w tablicy ustawia kolor odpowiedniego segmentu linii. Poniższy przykład przedstawia ustawienie kolorów segmentu w celu utworzenia linii z czerwonymi i zielonymi segmentami:

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

      

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

      

Tworzenie linii łamanej gradientu

Mapa z linią gradientową

Gradient możesz zdefiniować, podając dwie 32-bitowe całkowite wartości alfa-czerwone-zielone (ARGB), aby określić początkowy i końcowy kolor kreski. Ustaw tę właściwość w obiekcie kształtów opcji, wywołując PolylineOptions.addSpan(). Poniższy przykład pokazuje utworzenie linii łamanej od czerwonego do żółtego w zoo w parku Waloland w Kirkland w Waszyngtonie.

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

      

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

      

Tworzenie sterylicznej linii łamanej

Mapa ze stemplowaną linią

Wygląd linii łamanej możesz ustawić na powtarzającą się bitwę mapy. Aby to zrobić, utwórz StampStyle z TextureStyle, a następnie ustaw tę właściwość na obiekcie opcji kształtu, wywołując PolylineOptions.addSpan() w ten sposób:

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

      

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

      

Zdarzenia na linii łamanej

Domyślnie linie łamane nie można kliknąć. Aby włączyć lub wyłączyć klikalność, wywołaj funkcję Polyline.setClickable(boolean).

Aby wskazać zdarzenia kliknięcia na klikalnej linii łamanej, użyj narzędzia OnPolylineClickListener. Aby ustawić ten detektor 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 określonej kolejności. Jednak wielokąty nie są otwarte, ale służą do definiowania regionów w ramach zamkniętej pętli z wypełnionym wnętrzem.

Możesz dodać do mapy element Polygon tak samo jak Polyline. Najpierw utwórz obiekt PolygonOptions i dodaj do niego punkty. Punkty te stanowią konspekt wielokąta. Następnie dodajesz do mapy wielokąt, wywołując GoogleMap.addPolygon(PolygonOptions), który zwraca obiekt Polygon.

Fragment kodu poniżej dodaje prostokąt do mapy.

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

      

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)

      

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

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

Autouzupełnianie wielokątów

Wielokąt w powyższym przykładzie składa się z 5 współrzędnych, ale pamiętaj, że pierwsza i ostatnia współrzędna to ta sama lokalizacja, która definiuje pętlę. W praktyce jednak wielokąty definiują zamknięte obszary, więc nie musisz określać tej ostatniej współrzędnych. Jeśli ostatnia współrzędne różnią się od pierwszej, interfejs API automatycznie połączy się z wielokątem na końcu kolejności współrzędnych.

Poniższe dwa wielokąty są równoważne, a wywołanie polygon.getPoints() dla każdego z nich zwróci wszystkie 4 punkty.

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

      

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

      

Utwórz pusty wielokąt

W jednym obiekcie Polygon można łączyć wiele ścieżek, aby tworzyć złożone kształty, takie jak wypełnione pierścienie lub &pączki; (gdzie wielokąty są widoczne w obrębie wielokąta jako &"islands"). Złożone kształty zawsze mają postać wielu, prostszych ścieżek.

W tym samym obszarze muszą być zdefiniowane 2 ścieżki. Większy z tych dwóch obszarów definiuje obszar wypełnienia. Jest to prosty wielokąt bez żadnych dodatkowych opcji. Następnie prześlij drugą ścieżkę do metody addHole(). Po drugie, mniejsza ścieżka jest pełna większa ścieżka, wygląda tak, jakby element wielokąta został usunięty. Jeśli otwór przejdzie przez obrys wielokąta, wielokąt zostanie wyrenderowany bez wypełnienia.

Fragment kodu poniżej powoduje utworzenie pojedynczego prostokąta z mniejszym prostokątnym otworem.

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

      

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

      

Pusty wielokąt wyświetla się na mapie, jak pokazano poniżej:

Mapa z pustą prostokątą

Zdarzenia w kształcie wielokąta

Domyślnie wielokątów nie można klikać. Aby włączyć lub wyłączyć klikalność, wywołaj funkcję Polygon.setClickable(boolean).

Aby wskazać zdarzenia kliknięcia w klikalnym wielokątze, użyj narzędzia OnPolygonClickListener. Aby ustawić ten detektor na mapie, wywołaj GoogleMap.setOnPolygonClickListener(OnPolygonClickListener). Gdy użytkownik kliknie wielokąt, otrzymasz wywołanie zwrotne onPolygonClick(Polygon).

Okręgi

Mapa z kółkiem

Oprócz ogólnej klasy Polygon interfejs Maps API zawiera też określone klasy obiektów Circle, które upraszczają ich konstrukcję.

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

  • center jako LatLng.
  • Metry: radius.

Następnie definiuje się okrąg, który określa zbiór wszystkich punktów na powierzchni Ziemi w odległości radius m od danego center. Ze względu na to, jak odwzorowanie Mercatora przez interfejs API Map Google renderuje sferę na płaskiej powierzchni, gdy pojawi się w pobliżu równika, na mapie pojawi się prawie jak okrąg i pojawi się na ekranie coraz bardziej okrągłe (na ekranie), gdy okrąg odbiega od równika.

Aby zmienić kształt koła po jego dodaniu, możesz wywołać funkcję Circle.setRadius() lub Circle.setCenter() i podać nowe wartości.

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

Ten fragment kodu dodaje do mapy okrąg, tworząc obiekt CircleOptions i wywołując GoogleMap.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);

      

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)

      

Wydarzenia dla kręgów

Domyślnie kółek nie można klikać. Aby włączyć i wyłączyć możliwość klikania reklamy, możesz zadzwonić pod numer GoogleMap.addCircle(), używając właściwości CircleOptions.clickable(boolean) lub dzwoniąc pod numer Circle.setClickable(boolean).

Aby wskazać zdarzenia kliknięcia w kółku, które można kliknąć, użyj narzędzia OnCircleClickListener. Aby ustawić ten detektor na mapie, wywołaj GoogleMap.setOnCircleClickListener(OnCircleClickListener).

Gdy użytkownik kliknie kółko, otrzymasz wywołanie zwrotne onCircleClick(Circle), jak w tym przykładowym kodzie:

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

      

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
}

      

Dostosowywanie wyglądu

Wygląd kształtu możesz zmienić, zanim zostanie on dodany do mapy (określając odpowiednią właściwość w obiekcie opcji) lub po dodaniu go do mapy. Moduł pobierania jest też widoczny dla wszystkich właściwości, dzięki czemu masz łatwy dostęp do bieżącego stanu kształtu.

Fragment kodu poniżej dodaje gęstą niebieską linię z segmentami geodezyjnymi z Melbourne do Perth. Szczegółowo opisujemy to w poniższych sekcjach.

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

      

Kotlin


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

      

Mapa jest widoczna poniżej:

Mapa z linią z Melbourne do Perth

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

Kolor kreski

Kolor kreski to 32-bitowa alfa-czerwona-niebieska liczba (ARGB), która określa przezroczystość i kolor kreski. Ustaw tę właściwość na obiekcie opcji kształtu, wywołując *Options.strokeColor() (lub PolylineOptions.color() w przypadku linii łamanej). Jeśli nie podano tego ustawienia, domyślnym kolorem kreski jest czarny (Color.BLACK).

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

Kolor wypełnienia

Kolor wypełnienia dotyczy tylko wielokątów i okręgów. Nie dotyczy to linii łamanych, ponieważ nie mają one zdefiniowanych wnętrz. W przypadku wielokąta regiony, które znajdują się w tych otworach, nie są częścią wnętrza wielokąta, więc nie zostaną pokolorowane, jeśli zostanie ustawiony kolor wypełnienia.

Kolor wypełnienia to 32-bitowa liczba całkowita alfa-czerwony-zielony (ARGB), która określa przezroczystość i kolor wnętrza kształtu. Ustaw tę właściwość w obiekcie opcji kształtu i wywołaj *Options.fillColor(). Jeśli nie podano tego ustawienia, domyślny kolor kreski jest przezroczysty (Color.TRANSPARENT).

Po dodaniu kształtu do mapy kolor wypełnienia można uzyskać, wywołując metodę getFillColor(). Możesz go zmienić, wywołując właściwość setFillColor().

Szerokość kreski

Szerokość kreski linii jako liczba zmiennoprzecinkowa w pikselach (piksele). Szerokość nie jest skalowana 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 *Options.strokeWidth() (lub PolylineOptions.width() w przypadku linii łamanej). Jeśli nie określono inaczej, domyślny kreski to 10 pikseli.

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

Wzór kreski

Domyślnym wzorcem kreski jest linia liniowa oraz kontury wielokątów i okręgów. Możesz określić niestandardowy wzorzec kreski w obiektach PatternItem, w których każdy element to łącznik, kropka lub przerwa.

W poniższym przykładzie ustawiamy wzór dla linii łamanej w powtarzającej się kropce kropki, po której następuje przerwa 20 pikseli, 30 pikseli i 20 pikseli.

Java


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

      

Kotlin


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

      

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

Rodzaje złączy

W przypadku linii łamanych i kontury wielokątów możesz określić skośne lub okrągłe elementy JointType, aby zastąpić domyślny typ połączenia ukośnego.

Poniższy przykład pokazuje okrągły typ złącza dla linii łamanej:

Java


polyline.setJointType(JointType.ROUND);

      

Kotlin


polyline.jointType = JointType.ROUND

      

Typ złącza wpływa na zakręty wewnątrz linii. W przypadku linii, które mają wzór kreski, kreski mają też zastosowanie wtedy, gdy łącznik znajduje się wzdłuż stawu. Typy złączeń nie mają wpływu na kropki, ponieważ zawsze są okrągłe.

Limity linii

Dla każdego końca linii łamanej możesz określić styl Cap. Dostępne opcje to Butt (domyślnie), Kwadratowy, Okrągły i Niestandardowa mapa bitowa. Ustaw styl w elementach PolylineOptions.startCap i PolylineOptions.endCap lub użyj odpowiednich metod pobierania i ustawiania.

Fragment z poniższym fragmentem określa okrągły limit na początku linii łamanej.

Java


polyline.setStartCap(new RoundCap());

      

Kotlin


polyline.startCap = RoundCap()

      

Ten fragment kodu określa niestandardową mapę bitową dla zakończenia:

Java


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

      

Kotlin


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

      

Korzystając z niestandardowej mapy bitowej, musisz określić szerokość kreski odniesienia w pikselach. Interfejs API odpowiednio skaluje bitmapę. Szerokość kreski odniesienia to szerokość kreski użytaj podczas projektowania obrazu bitmapowego dla nakładki w pierwotnym wymiarze. Domyślna szerokość kreski odniesienia to 10 pikseli. Podpowiedź: aby określić szerokość kreski referencyjnej, otwórz w edytorze obrazów obraz bitmapy na 100%, a następnie narysuj odpowiednią szerokość kreski linii względem obrazu.

Jeśli tworzysz bitmapę za pomocą BitmapDescriptorFactory.fromResource(), upewnij się, że używasz zasobu niezależnego od gęstości (nodpi).

Segmenty geograficzne

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

Ustawienie geometryczne określa sposób rysowania segmentów linii między kolejnymi wierzchołkami linii łamanej/wielokąta. Segmenty geoprzestrzenne to te, które przesuwają się wzdłuż najkrótszej ścieżki na powierzchni Ziemi (czyli do kuli), a często wyświetlają się jako zakrzywione linie na mapie i odwzorowanie Merkatora. Segmenty niegeometryczne są rysowane na mapie jako proste linie.

Ustaw tę właściwość w obiekcie opcji kształtu przez wywołanie *Options.geodesic(), w którym true wskazuje, że segmenty powinny być rysowane jako geometryki, a false – jako linie proste. Jeśli nie określono inaczej, domyślnie są to segmenty niegeometryczne (false).

Po dodaniu kształtu na mapie dostęp do ustawień geometrycznych można uzyskać, wywołując metodę isGeodesic() i zmieniając ją przez wywołanie setGeodesic().

Kolejność nakładania elementów

Kolejność nakładania elementów określa położenie stosu tego kształtu względem innych nakładek (innych kształtów, nawierzchni (nakładek) i nakładek mapy”. Nakładka o wysokim kolejności nakładania elementów jest rysowana nad nakładkimi o niższym kolejności nakładania elementów. Dwie nakładki z tym samym kolejności nakładania elementów są ułożone w dowolnej kolejności.

Pamiętaj, że znaczniki są zawsze rysowane nad innymi nakładkami, niezależnie od kolejności nakładania się elementów.

Ustaw tę właściwość w obiekcie kształtów, wywołując *Options.zIndex(). Jeśli nie określono inaczej, domyślna wartość kolejności nakładania elementów wynosi 0. Po dodaniu kształtu do mapy można uzyskać dostęp do kolejności nakładania elementów za pomocą metody getZIndex(). Działanie może zostać zmienione przez wywołanie setZIndex().

Widoczność

Widoczność wskazuje, czy kształt powinien być rysowany na mapie. Parametr true wskazuje, czy należy go narysować, a false wskazuje, że nie należy go rysować. Pozwala tymczasowo wyświetlić kształt na mapie, Aby trwale usunąć kształt z mapy, wywołaj na nim kształt remove().

Ustaw tę właściwość w obiekcie opcji kształtu, wywołując *Options.visible(). Jeśli nie określono inaczej, domyślną widocznością jest true. Po dodaniu kształtu do mapy dostęp do widoczności można uzyskać przez wywołanie isVisible() i zmianę przez wywołanie setVisible().

Powiąż dane z kształtem

Możesz przechowywać dowolny obiekt danych za pomocą linii łamanej, wielokąta lub okręgu przy użyciu metody setTag() i pobrać obiekt za pomocą getTag(). Na przykład wywołaj Polyline.setTag(), by zapisać obiekt danych z linią, i wywołaj Polyline.getTag(), by go pobrać.

Kod poniżej określa dowolny tag (A) dla określonej linii łamanej:

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

      

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"

      

Oto kilka przykładowych sytuacji, w których przechowywanie i pobieranie danych o kształtach jest przydatne:

  • Aplikacja może obsługiwać różne typy kształtów, więc chcesz, aby były one traktowane inaczej w zależności od tego, kiedy użytkownik je kliknie.
  • Być może wchodzisz w interakcję z systemem, który ma unikalne identyfikatory rekordów, w których kształty odpowiadają konkretnym rekordom w tym systemie.
  • Dane kształtu mogą wskazywać priorytet określania kolejności nakładania się kształtów.