Как задать стиль территории, ограниченной многоугольником

Выберите платформу: Android iOS JavaScript

Чтобы применить стили обводки и заливки к граничным полигонам в векторном слое:

  1. Создайте функцию фабрики стилей, реализующую интерфейс FeatureLayer.StyleFactory . Эта функция определяет логику стиля векторного слоя.

  2. Вызовите FeatureLayer.setFeatureStyle() чтобы применить функцию фабрики стилей к векторному слою.

На следующем примере карты показано выделение граничного полигона для одного региона в векторном слое Locality.

Скриншот, показывающий полигон Ханы, Гавайи.

Создайте функцию фабрики стилей

Функция фабрики стилей применяется к каждому полигону в затронутом векторном слое в тот момент, когда вы устанавливаете функцию на векторном слое. Эта функция должна возвращать объект FeatureStyle , который определяет стиль многоугольника.

Maps SDK для Android передает экземпляр Feature в функцию фабрики стилей. Экземпляр Feature представляет метаданные функции, предоставляя вам доступ к метаданным в функции фабрики стилей.

Функция фабрики стиля всегда должна возвращать согласованные результаты при ее применении. Например, если вы хотите случайным образом раскрасить набор объектов, случайная часть не должна использоваться в функции стиля объекта, так как это может привести к непредвиденным результатам.

Поскольку эта функция работает над каждым объектом слоя, оптимизация важна. Чтобы не влиять на время рендеринга:

  • Включите только те векторные слои, которые вам нужны.

  • Вызовите FeatureLayer.setFeatureStyle(null) когда векторный слой больше не используется.

Установить обводку и заливку многоугольника

При стилизации граничного многоугольника в функции фабрики стилей вы можете установить:

  • Цвет обводки и непрозрачность границы многоугольника в цветовом формате ARGB, как определено классом Color . Значение по умолчанию — прозрачное (0x00000000).

  • Ширина обводки границы полигона в пикселях экрана. Значение по умолчанию — 2.

  • Цвет заливки и непрозрачность многоугольника в цветовом формате ARGB, как определено классом Color . Значение по умолчанию — прозрачное (0x00000000).

Поиск идентификаторов мест для таргетинга на объекты

Многие приложения применяют стили к объекту в зависимости от его местоположения. Например, вы можете применить стиль к разным странам, территориям или регионам. Местоположение объекта представлено идентификатором места .

Идентификаторы мест однозначно идентифицируют место в базе данных Google Адресов и на Картах Google. Чтобы получить идентификатор места:

Охват варьируется в зависимости от региона. Подробности см. в разделе «Покрытие границ Google» .

Географические названия доступны из многих источников, таких как Совет Геологической службы США по географическим названиям и Файлы справочника США .

Используйте PlaceFeature, чтобы получить идентификатор места

Класс PlaceFeature является подклассом класса Feature . Он представляет объект места (объект с идентификатором места), который включает объекты типа ADMINISTRATIVE_AREA_LEVEL_1 , ADMINISTRATIVE_AREA_LEVEL_2 , COUNTRY , LOCALITY , POSTAL_CODE и SCHOOL_DISTRICT .

Когда идентификатор места доступен, Maps SDK для Android передает экземпляр PlaceFeature в функцию фабрики стилей, чтобы вы могли определить местоположение объекта.

Пример фабрики стилей

В этом примере функция фабрики стилей применяется к полигону в векторном слое Locality. Функция фабрики стилей определяет идентификатор места объекта с помощью экземпляра PlaceFeature . Если идентификатор места указан для Ханы, Гавайи, функция применяет к многоугольнику собственный стиль заливки и обводки:

  1. Если вы еще этого не сделали, следуйте инструкциям в разделе «Начало работы», чтобы создать новый идентификатор карты и стиль карты. Обязательно включите векторный слой Locality .

  2. Получите ссылку на векторный слой 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() }

  3. Создайте функцию фабрики стилей и примените ее к векторному слою 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) .