Para aplicar diseños de trazo y relleno a los polígonos de límite en una capa de componentes, sigue estos pasos:
Crea una función Style Factory que implemente el
FeatureLayer.StyleFactory
interfaz de usuario. Esta función define la lógica de diseño de una capa de componentes.Llamada
FeatureLayer.setFeatureStyle()
para aplicar la función de fábrica de diseños a la capa de componentes.
El siguiente mapa de ejemplo muestra cómo se destaca el polígono de límite de una región única en una capa del componente Localidad.
Crea una función de fábrica de diseño
La función de fábrica de diseño se aplica a cada polígono del componente afectado.
cuando establezcas la función en la capa de componentes. Esta función debe
mostrar un FeatureStyle
que especifica cómo aplicar diseño al polígono.
El SDK de Maps para Android pasa un
Feature
a la función Style Factory. La instancia Feature
representa la
metadatos de la función, lo que te da acceso a los metadatos en la fábrica de estilo
.
La función Style Factory siempre debe devolver resultados coherentes cuando se aplicó. Por ejemplo, si quieres colorear de forma aleatoria un conjunto de atributos, parte al azar no debería ocurrir en la función de diseño de componentes, como causar resultados imprevistos.
Dado que esta función se ejecuta en todos los componentes de una capa, la optimización es importante. Para evitar que se vean afectados los tiempos de renderización, haz lo siguiente:
Habilita solo las capas de componentes que necesitas.
Llama a
FeatureLayer.setFeatureStyle(null)
cuando una capa de componentes ya no esté disponible. en uso.
Cómo establecer el trazo y el relleno del polígono
Al definir el diseño de un polígono de límite en la función de diseño de fábrica, puedes configurar lo siguiente:
Color y opacidad del trazo del borde del polígono en formato de color ARGB según lo define el
Color
clase. El valor predeterminado es transparente (0x00000000).Ancho del trazo del borde del polígono en píxeles de la pantalla. El valor predeterminado es 2.
Color del relleno y opacidad del polígono en formato de color ARGB, como definidas por el
Color
clase. El valor predeterminado es transparente (0x00000000).
Cómo buscar IDs de lugar para segmentar componentes
Muchas aplicaciones aplican estilos a un componente según su ubicación. Para Por ejemplo, es posible que desees aplicar diseños a diferentes países, territorios o regiones. La ubicación del elemento se representa con un ID de lugar:
Los IDs de lugar identifican de forma exclusiva un sitio en la base de datos de Google Places y en Google Maps Para obtener un ID de lugar, haz lo siguiente:
- Cómo usar las APIs de Places y Geocoding para buscar regiones por nombre y obtener IDs de lugar de regiones dentro límites específicos.
- Obtén los datos de los eventos de clic. De esta manera, se mostrará el atributo que corresponde a una región en la que se hizo clic, el cual proporciona acceso al ID de lugar y a la categoría del tipo de componente.
La cobertura varía según la región. Consulta Cobertura de límites de Google para conocer los detalles.
Los nombres geográficos se encuentran disponibles a partir de muchas fuentes, como el Consejo de Nombres Geográficos de USGS, y las EE.UU. Archivos Gazetteer.
Cómo usar PlaceFeature para obtener un ID de lugar
La PlaceFeature
es una subclase de la clase Feature
.
Representa un componente de lugar (un componente con un ID de lugar) que incluye lo siguiente:
atributos de tipo ADMINISTRATIVE_AREA_LEVEL_1
, ADMINISTRATIVE_AREA_LEVEL_2
,
COUNTRY
, LOCALITY
, POSTAL_CODE
y SCHOOL_DISTRICT
.
Cuando el id. de sitio está disponible, el
El SDK de Maps para Android pasa una instancia de PlaceFeature
a la fábrica de estilo
para determinar la ubicación del elemento.
Ejemplo de fábrica de estilos
En este ejemplo, se aplica una función de diseño de fábrica a un polígono de la localidad.
capa de componentes. La función Style Factory determina el ID de lugar del componente
mediante la instancia PlaceFeature
. Si el ID de lugar es Hana, Hawái,
la función aplica un estilo de relleno y trazo personalizado al polígono:
Si aún no lo has hecho, sigue los pasos en Primeros pasos para crear un nuevo ID y diseño de mapa. Asegúrate de habilitar la capa del componente Localidad.
Obtén una referencia a la capa del componente Localidad cuando se inicialice el mapa.
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() }Crea una función de fábrica de estilo y aplícala a la localidad capa de componentes.
El siguiente ejemplo solo aplica la función si el nombre El ID del atributo es para Hana, Hawái ("ChIJ0zQtYiWsVHkRk8lRoB1RNPo"). Si el ID de lugar especificado no es para Hana, Hawái, el estilo no es se aplicó.
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) }
Cómo quitar el diseño aplicado a una capa
Para quitar el diseño aplicado a una capa, llama a FeatureLayer.setFeatureStyle(null)
.