Applicare uno stile a un poligono di confine

Seleziona la piattaforma: Android iOS JavaScript

Per applicare stili per il tratto e il riempimento ai poligoni di confine in un livello degli elementi:

  1. Crea una funzione factory di stile che implementi l'interfaccia FeatureLayer.StyleFactory. Questa funzione definisce la logica di stile per un livello degli elementi.

  2. Chiama FeatureLayer.setFeatureStyle() per applicare la funzione factory di stile al livello degli elementi.

La mappa di esempio seguente mostra l'evidenziazione del poligono di confine per una singola regione in un livello degli elementi Località.

Uno screenshot che mostra il poligono di Hana, Hawaii.

Crea una funzione factory di stile

La funzione factory di stile viene applicata a ogni poligono nel livello degli elementi interessato nel momento in cui imposti la funzione sul livello degli elementi. Questa funzione deve restituire un oggetto FeatureStyle che specifica lo stile del poligono.

Maps SDK for Android passa un'istanza Feature alla funzione factory di stile. L'istanza Feature rappresenta i metadati della caratteristica, consentendoti di accedere ai metadati nella funzione di stile factory.

La funzione factory di stile deve sempre restituire risultati coerenti quando viene applicata. Ad esempio, se vuoi colorare in modo casuale un insieme di elementi, la parte casuale non deve essere eseguita nella funzione di stile degli elementi, poiché ciò causerebbe risultati indesiderati.

Poiché questa funzione viene eseguita su ogni elemento di un livello, l'ottimizzazione è importante. Per evitare di influire sui tempi di rendering:

  • Attiva solo i livelli degli elementi di cui hai bisogno.

  • Chiama FeatureLayer.setFeatureStyle(null) quando un livello degli elementi non è più in uso.

Imposta il tratto e il riempimento del poligono

Quando applichi uno stile a un poligono di confine nella funzione di stile factory, puoi impostare:

  • Colore e opacità del tratto del bordo del poligono nel formato colore ARGB, come definito dalla classe Color. Il valore predefinito è trasparente (0x00000000).

  • Larghezza del tratto del bordo del poligono in pixel dello schermo. Il valore predefinito è 2.

  • Colore di riempimento e opacità del poligono nel formato colore ARGB, come definito dalla classe Color. Il valore predefinito è trasparente (0x00000000).

Cerca gli ID luogo per le caratteristiche target

Molte applicazioni applicano stili a un elemento in base alla sua posizione. Ad esempio, potresti voler applicare lo stile a paesi, territori o regioni diversi. La posizione della funzionalità è rappresentata da un ID luogo.

Gli ID luogo identificano in modo unico un luogo nel database di Google Places e su Google Maps. Per ottenere un ID luogo:

La copertura varia in base alla regione. Per maggiori dettagli, consulta Copertura dei confini di Google.

I nomi geografici sono disponibili da molte fonti, come l'USGS Board on Geographic Names e i file del Gazetteer degli Stati Uniti.

Utilizza PlaceFeature per ottenere un ID luogo

La classe PlaceFeature è una sottoclasse della classe Feature. Rappresenta una caratteristica del luogo (una caratteristica con un ID luogo) che include caratteristiche di tipo ADMINISTRATIVE_AREA_LEVEL_1, ADMINISTRATIVE_AREA_LEVEL_2, COUNTRY, LOCALITY, POSTAL_CODE e SCHOOL_DISTRICT.

Quando l'ID luogo è disponibile, Maps SDK for Android passa un'istanza di PlaceFeature alla funzione factory di stile in modo che tu possa determinare la posizione della caratteristica.

Esempio di factory di stile

Questo esempio applica una funzione factory di stile a un poligono nel livello degli elementi Località. La funzione factory di stile determina l'ID luogo della caratteristica utilizzando l'istanza PlaceFeature. Se l'ID luogo è Hana, Hawaii, la funzione applica uno stile di riempimento e tratto personalizzato al poligono:

  1. Se non l'hai ancora fatto, segui i passaggi descritti in Inizia per creare un nuovo ID mappa e un nuovo stile di mappa. Assicurati di attivare il livello degli elementi Località.

  2. Ottieni un riferimento al livello degli elementi Località quando la mappa viene inizializzata.

    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. Crea una funzione factory di stile e applicala al livello degli elementi Località.

    L'esempio seguente applica la funzione solo se l'ID luogo della caratteristica è Hana, Hawaii ("ChIJ0zQtYiWsVHkRk8lRoB1RNPo"). Se l'ID luogo specificato non è Hana, Hawaii, lo stile non viene applicato.

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

Rimuovi lo stile da un livello

Per rimuovere lo stile da un livello, chiama FeatureLayer.setFeatureStyle(null).