Na tej stronie dowiesz się, jak dodać zbiór danych do mapy i zastosować styl.
Wymagania wstępne
Zanim przejdziesz dalej, przygotuj identyfikator i styl mapy oraz identyfikator zbioru danych.
Powiązanie identyfikatora zbioru danych ze stylem mapy
Aby nadać styl elementom zbioru danych, zastosuj funkcję stylizacji do warstwy elementów zbioru danych na mapie. Warstwa cech zbioru danych jest tworzona po powiązaniu zbioru danych ze stylem mapy.
Aby powiązać zbiór danych ze stylem mapy:
- W konsoli Google Cloud otwórz stronę Zbiory danych.
- Kliknij nazwę zbioru danych. Pojawi się strona Szczegóły zbioru danych.
- Kliknij kartę Podgląd.
- W sekcji Powiązane style mapy kliknij DODAJ STYL MAPY.
- Kliknij pola wyboru obok stylów mapy, które chcesz powiązać, a potem kliknij ZAPISZ.
Stosowanie stylów do zbioru danych
Aby zastosować style do zbioru danych:
Utwórz funkcję fabryczną stylu, która implementuje interfejs
FeatureLayer.StyleFactory
. Ta funkcja definiuje logikę stylizacji zbioru danych.Wywołaj metodę
FeatureLayer.setFeatureStyle()
, aby zastosować funkcję fabryki stylu do każdej cechy w zbiorze danych.
Tworzenie funkcji fabrycznej stylu
Funkcja fabryki stylów jest stosowana do każdej cechy w warstwie zbioru danych w momencie jej ustawienia w warstwie funkcji. Ta funkcja musi zwrócić obiekt FeatureStyle
, który określa styl wielokąta.
Jeśli fabryka stylu zwraca wartość null
, dana cecha nie jest renderowana. Więcej informacji znajdziesz w artykule Usuwanie stylu z warstwy.
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 pokolorować zestaw obiektów, ta część nie powinna mieć miejsca w funkcji stylu cech, ponieważ spowodowałoby to niezamierzone zachowanie.
Ta funkcja działa na każdej funkcji w warstwie, dlatego optymalizacja jest ważna. Aby uniknąć wpływu na czasy renderowania, wywołaj funkcję FeatureLayer.setFeatureStyle(null)
, gdy warstwa cech nie jest już używana.
Aby uzyskać identyfikator zbioru danych, możesz też wywołać funkcję FeatureLayer.getDatasetId()
.
Ustawianie krzywizny, wypełnienia i promienia punktu
Podczas określania stylu elementu w funkcji fabryki stylu możesz ustawić:
Kolor kreski i przezroczystość obramowania określone przez klasę
Color
. Wartością domyślną jest przezroczysta (Color.TRANSPARENT
).Szerokość obrysu w pikselach ekranu. Wartością domyślną jest 2.
Kolor wypełnienia i przezroczystość określone przez klasę
Color
. Wartością domyślną jest przezroczystość (Color.TRANSPARENT
).Promień punktu elementu punktowego w zakresie od 0 do 128 pikseli.
Używanie prostych reguł stylów
Najprostszym sposobem na określenie stylu cech jest zdefiniowanie obiektu FeatureLayer.StyleFactory
, który zawsze tworzy taki sam obiekt FeatureStyle
niezależnie od jego cech. Zastosuj opcje stylu cech bezpośrednio do warstwy cech zbioru danych lub użyj ich w połączeniu z zasadą FeatureStyleFunction
.
Używaj reguł stylu deklaratywnego
Możesz ustawić reguły stylu deklaratywnie oparte na atrybucie cechy i stosować je do całego zbioru danych. Funkcja stylu funkcji może zwracać wartość null
, na przykład jeśli chcesz, aby podzbiór funkcji pozostał niewidoczny.
Na przykład użyj metody DatasetFeature.getDatasetAttributes()
, aby zwrócić wartość Map<String,String>
atrybutów zbioru danych dla cechy. Możesz potem dostosować styl obiektu na podstawie jego atrybutów.
W tym przykładzie określamy wartość atrybutu „highlightColor” każdej cechy w danym zbiorze danych, aby kontrolować stylizację:
Kotlin
// Get the dataset feature, so we can work with all of its attributes. val datasetFeature: DatasetFeature = feature as DatasetFeature
// Create a switch statement based on the value of the // "highlightColor" attribute of the dataset. val attributeColor: MutableMap<String, String> = datasetFeature.getDatasetAttributes() when (attributeColor["highlightColor"]) { "Black" -> { ... } "Red" -> { ... } else -> { ... } }
Java
// Get the dataset feature, so we can work with all of its attributes. DatasetFeature datasetFeature = (DatasetFeature) feature;
// Create a switch statement based on the value of the // "highlightColor" attribute of the dataset. Map<String, String> attributeColor = datasetFeature.getDatasetAttributes(); switch(attributeColor.get("highlightColor")) { case "Black": ... break; case "Red": ... break; default: // Color not defined. ... break; }
Zastosuj styl do warstwy cech zbioru danych
W tym przykładzie do wielokąta w warstwie cech zbioru danych stosuje się fabryczną funkcję stylu. Funkcja fabryki stylu stosuje do wielokąta niestandardowy styl wypełnienia i kreski:
Jeśli jeszcze tego nie zrobiono, wykonaj czynności opisane w sekcji Pierwsze kroki, aby utworzyć nowy identyfikator mapy i nowy styl mapy. Pamiętaj, aby włączyć warstwę funkcji Zbiory danych.
Początkowy odczyt warstwy danych z zbiorów danych.
Kotlin
private var datasetLayer: FeatureLayer? = null
override fun onMapReady(googleMap: GoogleMap) { // Get the DATASET feature layer. datasetLayer = googleMap.getFeatureLayer(FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID) .build())
// Apply style factory function to DATASET layer. styleDatasetsLayer() }Java
private FeatureLayer datasetLayer;
@Override public void onMapReady(GoogleMap map) { // Get the DATASET feature layer. datasetLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID) .build());
// Apply style factory function to DATASET layer. styleDatasetsLayer(); }utworzyć funkcję fabryczną stylu i zastosować ją do warstwy cech zbiorów danych,
W tym przykładzie do wszystkich obiektów w zbiorze danych zastosowano ten sam kolor wypełnienia i obrysu.
Kotlin
private fun styleDatasetsLayer() {
// Create the style factory function. val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->
// Check if the feature is an instance of DatasetFeature. if (feature is DatasetFeature) {
return@StyleFactory FeatureStyle.Builder() // Define a style with green fill at 50% opacity and // solid green border. .fillColor(0x8000ff00.toInt()) .strokeColor(0xff00ff00.toInt()) .strokeWidth(2F) .build() } return@StyleFactory null }
// Apply the style factory function to the feature layer. datasetLayer?.setFeatureStyle(styleFactory) }Java
private void styleDatasetsLayer() {
// Create the style factory function. FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {
// Check if the feature is an instance of DatasetFeature. if (feature instanceof DatasetFeature) {
return new FeatureStyle.Builder() // Define a style with green fill at 50% opacity and solid green border. .fillColor(0x8000ff00) .strokeColor(0xff00ff00) .strokeWidth(2) .build(); } return null; };
// Apply the style factory function to the feature layer. datasetLayer.setFeatureStyle(styleFactory); }
Usuwanie stylu z warstwy
Aby usunąć stylizację z warstwy, wywołaj funkcję FeatureLayer.setFeatureStyle(null)
.
Możesz też zwrócić atrybut null
ze swojej fabryki stylów, na przykład jeśli chcesz, aby część funkcji pozostała niewidoczna.