将数据集添加到地图和样式数据集

请选择平台: Android iOS JavaScript

此页面介绍了如何将数据集添加到地图以及如何应用样式设置。

显示已设定样式的多边形数据的屏幕截图。

前提条件

在继续操作之前,您应备好地图 ID、地图样式和数据集 ID。

将数据集 ID 与地图样式相关联

如需为数据集地图项设置样式,您可以将样式函数应用于地图的数据集地图项图层。当您将数据集与地图样式相关联时,系统会创建数据集地图项图层。

如需将数据集与地图样式相关联,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往数据集页面
  2. 点击相应数据集的名称。系统随即会显示数据集详细信息页面。
  3. 点击预览标签页。
  4. 关联的地图样式部分中,点击添加地图样式
    显示“添加地图样式”按钮的屏幕截图。
  5. 勾选要关联的地图样式对应的复选框,然后点击保存

将样式应用于数据集

如需将样式应用于数据集,请执行以下操作:

  1. 创建一个实现 FeatureLayer.StyleFactory 接口的样式工厂函数。此函数用于定义数据集的样式设置逻辑。

  2. 调用 FeatureLayer.setFeatureStyle() 以将样式工厂函数应用于数据集中的每个地图项。

创建样式工厂函数

当您在地图项图层上设置函数时,样式工厂函数会应用于数据集图层中的每个地图项。此函数必须返回一个 FeatureStyle 对象,用于指定如何设置多边形的样式。

如果样式工厂返回 null,则系统不会渲染给定地图项。如需了解详情,请参阅移除图层的样式

Maps SDK for Android 会将 Feature 实例传递给样式工厂函数。Feature 实例表示地图项的元数据,让您能够访问样式工厂函数中的元数据。

应用样式工厂函数时,样式工厂函数应始终返回一致的结果。例如,如果要随机为一组地图项着色,不应针对随机部分应用地图项样式函数,否则会导致意外结果。

由于此函数会针对图层中的每个地图项运行,因此优化至关重要。为避免影响渲染时间,请在不再使用地图项图层时调用 FeatureLayer.setFeatureStyle(null)

您还可以调用 FeatureLayer.getDatasetId() 来获取数据集的 ID。

设置描边、填充和点半径

在样式工厂函数中为地图项设置样式时,您可以设置以下属性:

  • 边框的描边颜色和不透明度,由 Color 类定义。默认值为透明 (Color.TRANSPARENT)。

  • 边框的描边宽度(以屏幕像素为单位)。默认值为 2。

  • Color 类定义的填充颜色和不透明度。默认值为透明 (Color.TRANSPARENT)。

  • 点地图项的点半径,该值介于 0 到 128 像素之间。

使用简单的样式规则

若要设置地图项样式,最简单的方式是定义一个 FeatureLayer.StyleFactory,无论地图项是什么,始终构建相同的 FeatureStyle 对象。您可以直接将地图项样式选项应用于数据集地图项图层,也可以将这些选项与 FeatureStyleFunction 结合使用。

使用声明式样式规则

您可以根据地图项属性以声明方式设置样式规则,并将其应用于整个数据集。您可以从地图项样式函数返回 null(例如,需要让部分地图项保持不可见状态时)。

例如,使用 DatasetFeature.getDatasetAttributes() 方法返回地图项的数据集属性的 Map<String,String>。然后,您可以根据地图项的属性自定义地图项的样式。

以下示例确定数据集的每个地图项的“highlightColor”属性的值,以控制样式:

Kotlin

// 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 -> { ... } }

Java

// 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; }

将样式应用于数据集地图项图层

此示例将样式工厂函数应用于数据集地图项图层中的多边形。样式工厂函数会对多边形应用自定义填充和描边样式:

  1. 按照使用入门中的步骤创建新的地图 ID 和地图样式(如果您尚未执行此操作)。请务必启用数据集地图项图层。

  2. 在地图初始化时获取对数据集地图项图层的引用。

    Kotlin

    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() }

    Java

    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(); }

  3. 创建样式工厂函数,并将其应用于数据集地图项图层。

    以下示例会将相同的填充和描边应用于数据集中的所有地图项。

    Kotlin

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

    Java

    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(例如,需要让部分地图项保持不可见状态时)。