Nadawanie stylu wielokątowi granicy

Wybierz platformę: Android iOS JavaScript

Aby zastosować style obrysu i wypełnienia do wielokątów granic na warstwie mapy:

  1. Utwórz funkcję fabryki stylów, która implementuje interfejs FeatureLayer.StyleFactory. Ta funkcja definiuje logikę stylizacji warstwy mapy.

  2. Wywołaj funkcję FeatureLayer.setFeatureStyle(), aby zastosować funkcję fabryki stylów do warstwy mapy.

Poniższa przykładowa mapa pokazuje wyróżnienie wielokąta granicznego dla jednego regionu w warstwie mapy Miejscowość.

Zrzut ekranu przedstawiający wielokąt Hana Hawaii.

Tworzenie funkcji fabryki stylów

Funkcja fabryki stylów jest stosowana do każdego wielokąta w warstwie mapy, gdy ustawisz funkcję w warstwie mapy. Ta funkcja musi zwracać obiekt FeatureStyle, który określa sposób stylizowania wielokąta.

Pakiet Maps SDK na Androida przekazuje do funkcji fabryki stylów instancję Feature. Instancja Feature reprezentuje metadane funkcji, dając Ci dostęp do metadanych w funkcji fabryki stylów.

Funkcja fabryki stylu powinna zawsze zwracać spójne wyniki po zastosowaniu. Jeśli na przykład chcesz losowo pokolorować zestaw obiektów, losowanie nie powinno odbywać się w funkcji stylu obiektu, ponieważ spowodowałoby to niezamierzone wyniki.

Ta funkcja jest uruchamiana dla każdego obiektu w warstwie, dlatego optymalizacja jest ważna. Aby uniknąć wpływu na czas renderowania:

  • Włącz tylko te warstwy mapy, których potrzebujesz.

  • Wywołaj FeatureLayer.setFeatureStyle(null), gdy warstwa mapy nie jest już używana.

Ustawianie obrysu i wypełnienia wielokąta

Podczas określania stylu wielokąta granicy w funkcji fabrycznej stylu możesz ustawić:

  • Kolor i przezroczystość obrysu granicy wielokąta w formacie kolorów ARGB, zgodnie z definicją klasy Color. Wartość domyślna to przezroczysty (0x00000000).

  • Szerokość obrysu obramowania wielokąta w pikselach ekranu. Wartością domyślną jest 2.

  • Kolor wypełnienia i przezroczystość wielokąta w formacie koloru ARGB, zgodnie z definicją klasy Color. Wartość domyślna to przezroczysty (0x00000000).

Wyszukiwanie identyfikatorów miejsc na potrzeby kierowania na obiekty

Wiele aplikacji stosuje style do obiektów na podstawie ich lokalizacji. Możesz na przykład zastosować styl do różnych krajów, terytoriów lub regionów. Lokalizacja funkcji jest reprezentowana przez identyfikator miejsca.

Identyfikatory miejsc jednoznacznie identyfikują miejsce w bazie danych Miejsc Google i w Mapach Google. Aby uzyskać identyfikator miejsca:

Dostępność danych zależy od regionu. Szczegółowe informacje znajdziesz w artykule Zasięg granic Google.

Nazwy geograficzne są dostępne z wielu źródeł, takich jak USGS Board on Geographic Names i U.S. Gazetteer Files.

Używanie PlaceFeature do uzyskiwania identyfikatora miejsca

Klasa PlaceFeature jest podklasą klasy Feature. Reprezentuje obiekt miejsca (obiekt z identyfikatorem miejsca), który obejmuje obiekty typu ADMINISTRATIVE_AREA_LEVEL_1, ADMINISTRATIVE_AREA_LEVEL_2, COUNTRY, LOCALITY, POSTAL_CODE i SCHOOL_DISTRICT.

Gdy identyfikator miejsca jest dostępny, pakiet SDK Map na Androida przekazuje instancję PlaceFeature do funkcji fabryki stylów, aby można było określić lokalizację elementu.

Przykład fabryki stylów

W tym przykładzie funkcja fabryczna stylu jest stosowana do wielokąta w warstwie mapy Miejscowość. Funkcja fabryczna stylu określa identyfikator miejsca elementu za pomocą instancji PlaceFeature. Jeśli identyfikator miejsca dotyczy Hana na Hawajach, funkcja stosuje do wielokąta niestandardowy styl wypełnienia i obrysu:

  1. Jeśli jeszcze nie masz identyfikatora mapy i stylu mapy, wykonaj czynności opisane w sekcji Pierwsze kroki, aby je utworzyć. Pamiętaj, aby włączyć warstwę obiektów Locality.

  2. Pobierz odwołanie do warstwy mapy Miejscowość podczas inicjowania mapy.

    Java

    private FeatureLayer localityLayer;
    @Override public void onMapReady(GoogleMap map) { // Get the LOCALITY feature layer. localityLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder() .featureType(FeatureType.LOCALITY) .build());
    // Apply style factory function to LOCALITY layer. styleLocalityLayer(); }

    Kotlin

    private var localityLayer: FeatureLayer? = null
    override fun onMapReady(googleMap: GoogleMap) { // Get the LOCALITY feature layer. localityLayer = googleMap.getFeatureLayer(FeatureLayerOptions.Builder() .featureType(FeatureType.LOCALITY) .build())
    // Apply style factory function to LOCALITY layer. styleLocalityLayer() }

  3. Utwórz funkcję fabryki stylów i zastosuj ją do warstwy mapy Miejscowość.

    W tym przykładzie funkcja jest stosowana tylko wtedy, gdy identyfikator miejsca obiektu odpowiada Hana na Hawajach („ChIJ0zQtYiWsVHkRk8lRoB1RNPo”). Jeśli podany identyfikator miejsca nie dotyczy Hana na Hawajach, styl nie zostanie zastosowany.

    Java

    private void styleLocalityLayer() {
    // Create the style factory function. FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {
    // Check if the feature is an instance of PlaceFeature, // which contains a place ID. if (feature instanceof PlaceFeature) { PlaceFeature placeFeature = (PlaceFeature) feature;
    // Determine if the place ID is for Hana, HI. if (placeFeature.getPlaceId().equals("ChIJ0zQtYiWsVHkRk8lRoB1RNPo")) {
    // Use FeatureStyle.Builder to configure the FeatureStyle object // returned by the style factory function. return new FeatureStyle.Builder() // Define a style with purple fill at 50% opacity and solid purple border. .fillColor(0x80810FCB) .strokeColor(0xFF810FCB) .build(); } } return null; };
    // Apply the style factory function to the feature layer. localityLayer.setFeatureStyle(styleFactory); }

    Kotlin

    private fun styleLocalityLayer() {
    // Create the style factory function. val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->
    // Check if the feature is an instance of PlaceFeature, // which contains a place ID. if (feature is PlaceFeature) { val placeFeature: PlaceFeature = feature as PlaceFeature
    // Determine if the place ID is for Hana, HI. if (placeFeature.getPlaceId().equals("ChIJ0zQtYiWsVHkRk8lRoB1RNPo")) {
    // Use FeatureStyle.Builder to configure the FeatureStyle object // returned by the style factory function. return@StyleFactory FeatureStyle.Builder() // Define a style with purple fill at 50% opacity and // solid purple border. .fillColor(0x80810FCB.toInt()) .strokeColor(0xFF810FCB.toInt()) .build() } } return@StyleFactory null }
    // Apply the style factory function to the feature layer. localityLayer?.setFeatureStyle(styleFactory) }

Usuwanie stylu z warstwy

Aby usunąć styl z warstwy, wywołaj funkcję FeatureLayer.setFeatureStyle(null).