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