Aby zastosować style obrysu i wypełnienia do poligonów granicznych w warstwie obiektów:
Utwórz funkcję fabryki stylów, która implementuje interfejs
FeatureLayer.StyleFactory
. Ta funkcja definiuje logikę stylizacji warstwy funkcji.Wywołaj funkcję
FeatureLayer.setFeatureStyle()
, aby zastosować funkcję fabryki stylów do warstwy funkcji.
Na przykładowej mapie poniżej pokazano wyróżnienie wielokąta granicznego pojedynczego regionu w warstwie obiektu Miejscowość.
Tworzenie funkcji fabrycznej stylu
Funkcja fabryczna stylu jest stosowana do każdego wielokąta w warstwie cech, której dotyczy problem podczas ustawiania funkcji w warstwie cech. Ta funkcja musi zwracać obiekt FeatureStyle
, który określa styl wielokąta.
Pakiet SDK Map na Androida przekazuje do funkcji fabryki stylów instancję Feature
. Instancja Feature
reprezentuje metadane funkcji, co daje dostęp do metadanych w funkcji fabryki stylu.
Funkcja style factory powinna zawsze zwracać spójne wyniki po jej zastosowaniu. Jeśli na przykład chcesz losowo zabarwić zestaw cech, część losowa nie powinna być uwzględniana w funkcji stylu cech, ponieważ może to spowodować niezamierzone wyniki.
Ta funkcja działa na każdej funkcji w warstwie, dlatego optymalizacja jest ważna. Aby uniknąć problemów z czasem renderowania:
Włącz tylko potrzebne warstwy cech.
Funkcja
FeatureLayer.setFeatureStyle(null)
jest wywoływana, gdy warstwa funkcji nie jest już używana.
Ustawianie wypełnienia i kreski wielokąta
Podczas nadawania stylu wielokątowi granicy w funkcji fabryki stylów możesz ustawić:
Kolor i przezroczystość kreski krawędzi wielokąta w formacie kolorów ARGB, zgodnie z klasą
Color
. Wartością domyślną jest przezroczystość (0x00000000).Szerokość obrysu krawędzi wielokąta w pikselach ekranu. Wartość domyślna to 2.
Kolor wypełnienia i nieprzezroczystość wielokąta w formacie kolorów ARGB zdefiniowanym przez klasę
Color
. Wartością domyślną jest przezroczysty (0x00000000).
Wyszukiwanie identyfikatorów miejsc docelowych funkcji
Wiele aplikacji stosuje style do funkcji na podstawie jej lokalizacji. Możesz na przykład zastosować stylizację do różnych krajów, terytoriów lub regionów. Lokalizacja obiektu jest reprezentowana przez identyfikator miejsca.
Identyfikatory miejsc jednoznacznie identyfikują miejsce w bazie danych Miejsc Google i w Mapach Google. Aby uzyskać identyfikator miejsca:
- Użyj interfejsów Places API i geokodowania, aby wyszukać regiony według nazwy i uzyskać identyfikatory miejsc w określonych granicach.
- Uzyskiwanie danych ze zdarzeń kliknięcia Zwraca obiekt odpowiadający klikniętemu regionowi i 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 ograniczeń Google.
Nazwy geograficzne są dostępne w wielu źródłach, takich jak Komisja USGS ds. nazw geograficznych i pliki amerykańskiego urzędu geodezyjnego (Gazetteer).
Uzyskiwanie identyfikatora miejsca za pomocą obiektu PlaceFeature
Klasa PlaceFeature
jest podklasą klasy Feature
.
Reprezentuje obiekt miejsca (element z identyfikatorem miejsca), który obejmuje cechy 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ę tej funkcji.
Przykład fabryki stylów
W tym przykładzie funkcja fabryki stylów jest stosowana do wielokąta w warstwie obiektu Lokalizacja. Funkcja stylu fabrycznego określa identyfikator miejsca funkcji za pomocą instancji PlaceFeature
. Jeśli identyfikator miejsca to „Hana”, Hawaje, funkcja zastosuje niestandardowy styl wypełnienia i obrysu do wielokąta:
Jeśli nie zostało to jeszcze zrobione, wykonaj czynności opisane w artykule Pierwsze kroki, aby utworzyć nowy identyfikator i styl mapy. Pamiętaj, aby włączyć warstwę obiektów Locality.
Pobieranie odwołania do warstwy obiektu Lokalizacja 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 Lokalizacja.
Poniższy przykład stosuje tę funkcję tylko wtedy, gdy identyfikator miejsca obiektu dotyczy Hana na Hawajach („ChIJ0zQtYiWsVHkRk8lRoB1RNPo”). Jeśli podany identyfikator miejsca nie odnosi się do 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 stylizacji z warstwy
Aby usunąć stylizację z warstwy, wywołaj funkcję FeatureLayer.setFeatureStyle(null)
.