Чтобы применить стили обводки и заливки к граничным полигонам в слое объектов:
Создайте функцию фабрики стилей, реализующую интерфейс
FeatureLayer.StyleFactory
. Эта функция определяет логику стилизации для слоя объектов.Вызовите
FeatureLayer.setFeatureStyle()
чтобы применить функцию фабрики стилей к слою объектов.
На следующем примере карты показано выделение граничного полигона для одного региона в слое объектов Locality.
Создать функцию фабрики стилей
Функция фабрики стилей применяется к каждому полигону в соответствующем слое объектов в момент её установки на слое объектов. Эта функция должна возвращать объект FeatureStyle
, определяющий стиль полигона.
Maps SDK для Android передаёт экземпляр Feature
в функцию фабрики стилей. Экземпляр Feature
представляет метаданные объекта, предоставляя доступ к метаданным в функции фабрики стилей.
Функция фабрики стилей должна всегда возвращать согласованные результаты при применении. Например, если вы хотите случайным образом раскрасить набор объектов, случайная часть не должна выполняться в функции стиля объектов, так как это приведёт к непредвиденным результатам.
Поскольку эта функция обрабатывает каждый объект в слое, оптимизация важна. Чтобы избежать влияния на время рендеринга:
Включите только те слои объектов, которые вам нужны.
Вызовите
FeatureLayer.setFeatureStyle(null)
, когда слой объектов больше не используется.
Установить обводку и заливку многоугольника
При стилизации граничного полигона в функции фабрики стилей вы можете задать:
Цвет обводки и прозрачность границы многоугольника в цветовом формате ARGB, как определено классом
Color
. Значение по умолчанию — прозрачный (0x00000000).Ширина обводки границы многоугольника в пикселях экрана. Значение по умолчанию — 2.
Цвет заливки и непрозрачность многоугольника в цветовом формате ARGB, как определено классом
Color
. Значение по умолчанию — прозрачный (0x00000000).
Поиск идентификаторов мест для определения целевых объектов
Многие приложения применяют стили к объекту в зависимости от его местоположения. Например, может потребоваться применить стили к разным странам, территориям или регионам. Местоположение объекта представлено идентификатором места .
Идентификаторы мест однозначно идентифицируют место в базе данных Google Places и на Google Картах. Чтобы получить идентификатор места:
- Используйте API Places и Geocoding для поиска регионов по названию и получения идентификаторов мест для регионов в указанных границах.
- Получайте данные о событиях щелчков . Возвращает объект, соответствующий региону, на который нажали, предоставляя доступ к идентификатору места и категории типа объекта.
Зона покрытия зависит от региона. Подробнее см. в разделе «Границы покрытия Google» .
Географические названия доступны во многих источниках, таких как Совет по географическим названиям Геологической службы США (USGS Board on Geographic Names ) и Файлы географического справочника США (US Gazetteer Files ).
Используйте PlaceFeature для получения идентификатора места
Класс PlaceFeature
является подклассом класса Feature
. Он представляет собой объект местоположения (объект с идентификатором места), включающий объекты типов ADMINISTRATIVE_AREA_LEVEL_1
, ADMINISTRATIVE_AREA_LEVEL_2
, COUNTRY
, LOCALITY
, POSTAL_CODE
и SCHOOL_DISTRICT
.
Если идентификатор места доступен, Maps SDK для Android передает экземпляр PlaceFeature
функции фабрики стилей, чтобы вы могли определить местоположение объекта.
Пример фабрики стилей
В этом примере функция фабрики стилей применяется к полигону в слое объектов Locality. Функция фабрики стилей определяет идентификатор места объекта, используя экземпляр PlaceFeature
. Если идентификатор места — Хана, Гавайи, функция применяет к полигону пользовательский стиль заливки и обводки:
Если вы ещё этого не сделали, следуйте инструкциям в разделе «Начало работы» , чтобы создать новый идентификатор и стиль карты. Не забудьте включить слой объектов «Населённый пункт» .
Получите ссылку на слой объектов Locality при инициализации карты.
Ява
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(); }Котлин
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() }Создайте функцию фабрики стилей и примените ее к слою объектов Locality.
В следующем примере функция применяется только в том случае, если идентификатор местоположения объекта соответствует Хане, Гавайи («ChIJ0zQtYiWsVHkRk8lRoB1RNPo»). Если указанный идентификатор местоположения не соответствует Хане, Гавайи, стиль не применяется.
Ява
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); }Котлин
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) }
Удалить стилизацию слоя
Чтобы удалить стиль из слоя, вызовите FeatureLayer.setFeatureStyle(null)
.