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

Выберите платформу: 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 Places и на Google Картах. Чтобы получить идентификатор места:

Зона покрытия зависит от региона. Подробнее см. в разделе «Границы покрытия 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 . Если идентификатор места — Хана, Гавайи, функция применяет к полигону пользовательский стиль заливки и обводки:

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

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