На этой странице показано, как добавить набор данных на карту и применить стили.
Предварительные условия
Прежде чем продолжить, у вас должен быть идентификатор карты и стиль карты, а также идентификатор набора данных.
Свяжите идентификатор набора данных со стилем карты
Чтобы стилизовать объекты набора данных, вы применяете функцию стиля к векторному слою набора данных на карте. Слой объектов набора данных создается, когда вы связываете набор данных со стилем карты .
Чтобы связать набор данных со стилем карты:
- В консоли Google Cloud перейдите на страницу «Наборы данных» .
- Щелкните имя набора данных. Появится страница сведений о наборе данных .
- Откройте вкладку « Предварительный просмотр» .
- В разделе «Связанные стили карты» нажмите «ДОБАВИТЬ СТИЛЬ КАРТЫ» .
- Установите флажки напротив стилей карты, которые требуется связать, а затем нажмите СОХРАНИТЬ .
Применить стили к набору данных
Чтобы применить стили к набору данных:
Создайте функцию фабрики стилей, реализующую интерфейс
FeatureLayer.StyleFactory
. Эта функция определяет логику стиля для набора данных.Вызовите
FeatureLayer.setFeatureStyle()
чтобы применить функцию фабрики стилей к каждому объекту в наборе данных.
Создайте функцию фабрики стилей
Функция фабрики стилей применяется к каждому объекту слоя набора данных в момент установки функции на слое объектов. Эта функция должна возвращать объект FeatureStyle
, который определяет стиль многоугольника.
Если фабрика стилей возвращает null
, данная функция не отображается. Дополнительную информацию см. в разделе Удаление стиля из слоя .
Maps SDK для Android передает экземпляр Feature
в функцию фабрики стилей. Экземпляр Feature
представляет метаданные объекта, предоставляя вам доступ к метаданным в функции фабрики стилей.
Функция фабрики стиля всегда должна возвращать согласованные результаты при ее применении. Например, если вы хотите случайным образом раскрасить набор объектов, случайная часть не должна использоваться в функции стиля объекта, так как это может привести к непредвиденным результатам.
Поскольку эта функция работает над каждым объектом слоя, оптимизация важна. Чтобы избежать влияния на время рендеринга, вызовите FeatureLayer.setFeatureStyle(null)
, когда векторный слой больше не используется.
Вы также можете вызвать FeatureLayer.getDatasetId()
чтобы получить идентификатор набора данных.
Установка обводки, заливки и радиуса точки
При стилизации объекта в функции фабрики стилей вы можете установить:
Цвет обводки и непрозрачность границы, определенные классом
Color
. Значение по умолчанию — прозрачное (Color.TRANSPARENT
).Ширина обводки границы в пикселях экрана. Значение по умолчанию — 2.
Цвет и непрозрачность заливки , определенные классом
Color
. Значение по умолчанию — прозрачное (Color.TRANSPARENT
).Радиус точки точечного объекта от 0 до 128 пикселей.
Используйте простые правила стиля
Самый простой способ стилизации объектов — определить FeatureLayer.StyleFactory
, который всегда создает идентичный объект FeatureStyle
, независимо от объекта. Примените параметры стиля объекта непосредственно к векторному слою набора данных или используйте их вместе с FeatureStyleFunction
.
Используйте правила декларативного стиля
Вы можете декларативно устанавливать правила стиля на основе атрибута объекта и применять их ко всему набору данных. Вы можете вернуть null
из функции стиля объекта, например, если вы хотите, чтобы подмножество объектов оставалось невидимым.
Например, используйте метод DatasetFeature.getDatasetAttributes()
, чтобы вернуть Map<String,String>
атрибутов набора данных для объекта. Затем вы можете настроить стиль объекта на основе его атрибутов.
В этом примере определяется значение атрибута «highlightColor» каждого объекта набора данных для управления стилем:
// Get the dataset feature, so we can work with all of its attributes. val datasetFeature: DatasetFeature = feature as DatasetFeature
// Create a switch statement based on the value of the // "highlightColor" attribute of the dataset. val attributeColor: MutableMap<String, String> = datasetFeature.getDatasetAttributes() when (attributeColor["highlightColor"]) { "Black" -> { ... } "Red" -> { ... } else -> { ... } }
// Get the dataset feature, so we can work with all of its attributes. DatasetFeature datasetFeature = (DatasetFeature) feature;
// Create a switch statement based on the value of the // "highlightColor" attribute of the dataset. Map<String, String> attributeColor = datasetFeature.getDatasetAttributes(); switch(attributeColor.get("highlightColor")) { case "Black": ... break; case "Red": ... break; default: // Color not defined. ... break; }
Примените стиль к векторному слою набора данных
В этом примере функция фабрики стилей применяется к полигону в векторном слое набора данных. Фабричная функция стиля применяет к многоугольнику собственный стиль заливки и обводки:
Если вы еще этого не сделали, следуйте инструкциям в разделе «Начало работы» , чтобы создать новый идентификатор карты и стиль карты. Обязательно включите векторный слой Наборы данных .
Получите ссылку на векторный слой «Наборы данных» при инициализации карты.
private var datasetLayer: FeatureLayer? = null
override fun onMapReady(googleMap: GoogleMap) { // Get the DATASET feature layer. datasetLayer = googleMap.getFeatureLayer(FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID ) .build())
// Apply style factory function to DATASET layer. styleDatasetsLayer() }private FeatureLayer datasetLayer;
@Override public void onMapReady(GoogleMap map) { // Get the DATASET feature layer. datasetLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID ) .build());
// Apply style factory function to DATASET layer. styleDatasetsLayer(); }Создайте функцию фабрики стилей и примените ее к векторному слою «Наборы данных».
В следующем примере ко всем объектам в наборе данных применяется одна и та же заливка и обводка.
private fun styleDatasetsLayer() {
// Create the style factory function. val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->
// Check if the feature is an instance of DatasetFeature. if (feature is DatasetFeature) {
return@StyleFactory FeatureStyle.Builder() // Define a style with green fill at 50% opacity and // solid green border. .fillColor(0x8000ff00.toInt()) .strokeColor(0xff00ff00.toInt()) .strokeWidth(2F) .build() } return@StyleFactory null }
// Apply the style factory function to the feature layer. datasetLayer?.setFeatureStyle(styleFactory) }private void styleDatasetsLayer() {
// Create the style factory function. FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {
// Check if the feature is an instance of DatasetFeature. if (feature instanceof DatasetFeature) {
return new FeatureStyle.Builder() // Define a style with green fill at 50% opacity and solid green border. .fillColor(0x8000ff00) .strokeColor(0xff00ff00) .strokeWidth(2) .build(); } return null; };
// Apply the style factory function to the feature layer. datasetLayer.setFeatureStyle(styleFactory); }
Удаление стиля со слоя
Чтобы удалить стиль слоя, вызовите FeatureLayer.setFeatureStyle(null)
.
Вы также можете вернуть null
из своей фабрики стилей, например, если вы хотите, чтобы подмножество функций оставалось невидимым.