Aby zastosować style obrysu i wypełnienia do wielokątów granicznych w warstwie obiektów:
Utwórz funkcję fabryczną stylu, która implementuje interfejs
FeatureLayer.StyleFactory
. Ta funkcja definiuje logikę stylizacji warstwy z obiektami.Wywołaj funkcję Call
FeatureLayer.setFeatureStyle()
, aby zastosować funkcję fabryki stylów do warstwy obiektu.
Przykładowa mapa poniżej pokazuje wyróżniony wielokąt graniczny dla pojedynczego regionu w warstwie funkcji lokalizacji.
Tworzenie funkcji fabryki stylów
Funkcja fabryki stylów jest stosowana do każdego wielokąta w warstwie cech, której dotyczy, w momencie ustawienia funkcji w tej warstwie. Ta funkcja musi zwracać obiekt FeatureStyle
, który określa sposób stylizowania wielokąta.
Pakiet Maps SDK na Androida przekazuje do funkcji fabryki stylu instancję Feature
. Obiekt Feature
reprezentuje metadane funkcji, co umożliwia dostęp do metadanych w funkcji fabryki stylów.
Funkcja fabryczna stylu powinna zawsze zwracać spójne wyniki. Jeśli na przykład chcesz losowo pokolorować zestaw obiektów, losowanie nie powinno odbywać się w funkcji stylu obiektu, ponieważ spowoduje to niepożądane wyniki.
Ponieważ ta funkcja jest uruchamiana dla każdej cechy w warstwie, optymalizacja jest ważna. Aby nie wpływać na czas renderowania:
Włącz tylko te warstwy obiektów, których potrzebujesz.
Wywołaj funkcję
FeatureLayer.setFeatureStyle(null)
, gdy warstwa obiektowa nie jest już używana.
Ustawianie kreski i wypełnienia wielokąta
Podczas stylizowania wielokąta granicznego w funkcji fabryki stylów możesz ustawić:
Kolor i przezroczystość konturu obramowania wielokąta w formacie koloru ARGB, zgodnie z definicją w klasie
Color
. Wartością domyślną jest kolor przezroczysty (0x00000000).Szerokość linii 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ścią domyślną jest kolor przezroczysty (0x00000000).
Wyszukiwanie identyfikatorów miejsc do kierowania reklam na funkcje
Wiele aplikacji stosuje style do obiektu na podstawie jego lokalizacji. Możesz na przykład zastosować stylizację w różnych krajach, regionach lub terytoriach. 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:
- Używaj interfejsów Places API i geokodowania, aby wyszukiwać regiony według nazwy i uzyskiwać identyfikatory miejsc dla regionów w określonych granicach.
- Pobieranie danych ze zdarzeń kliknięcia Zwraca to obiekt Feature odpowiadający klikniętemu regionowi, który zapewnia dostęp do identyfikatora miejsca i kategorii typu obiektu.
Zasięg różni się w zależności od regionu. Więcej informacji znajdziesz w artykule Zasięg granic Google.
Nazwy geograficzne są dostępne w wielu źródłach, np. w 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 Google na Androida przekazuje instancję PlaceFeature
do funkcji fabryki stylów, aby można było określić lokalizację obiektu.
Przykład fabryki stylów
W tym przykładzie funkcja fabryki stylów jest stosowana do wielokąta w warstwie funkcji Locality. Funkcja fabryki stylu określa identyfikator miejsca obiektu za pomocą instancji PlaceFeature
. Jeśli identyfikator miejsca dotyczy miejscowości Hana na Hawajach, funkcja zastosuje do wielokąta niestandardowy styl wypełnienia i linii:
Jeśli jeszcze tego nie zrobiono, wykonaj czynności opisane w sekcji Pierwsze kroki, aby utworzyć nowy identyfikator mapy i styl mapy. Upewnij się, że warstwa obiektów Lokalizacja jest włączona.
Uzyskaj odniesienie do warstwy obiektów Locality 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() }Utwórz funkcję fabryki stylów i zastosuj ją do warstwy funkcji Locality.
W tym przykładzie funkcja jest stosowana tylko wtedy, gdy identyfikator miejsca cechy dotyczy miejscowości Hana na Hawajach („ChIJ0zQtYiWsVHkRk8lRoB1RNPo”). Jeśli podany identyfikator miejsca nie dotyczy miejscowości 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 FeatureLayer.setFeatureStyle(null)
.