设置边界多边形的样式

请选择平台: Android iOS JavaScript

要为地图项图层中的边界多边形应用描边和填充样式,请执行以下操作:

  1. 创建一个用于实现 FeatureLayer.StyleFactory 界面。此函数用于定义地图项图层的样式设置逻辑。

  2. 致电 FeatureLayer.setFeatureStyle() 将样式工厂函数应用到地图项图层。

以下示例地图演示了如何突出显示 市行政区地图项图层中的单个区域。

显示哈纳夏威夷多边形的屏幕截图。

创建样式工厂函数

样式工厂函数会应用于受影响地图项中的每个多边形 图层。此函数必须 返回 FeatureStyle 对象。

Maps SDK for Android 会将 Feature 实例添加到样式工厂函数。Feature 实例代表 地图项的元数据,让您可以访问样式工厂中的元数据 函数。

在以下情况下,样式工厂函数应始终返回一致的结果: 。例如,如果您希望随机为一组地图项着色, 地图项样式函数中不应出现随机部分, 意想不到的后果。

由于此函数会针对图层中的每个地图项运行,因此优化至关重要。为避免影响渲染次数,请执行以下操作:

  • 仅启用所需的地图项图层。

  • 当地图项图层不再存在时调用 FeatureLayer.setFeatureStyle(null) 使用中。

设置多边形的描边和填充

在样式工厂函数中设置边界多边形的样式时,您可以设置:

  • 多边形边框的描边颜色和不透明度(采用 ARGB 颜色格式); 由 Color 类。默认值为透明 (0x00000000)。

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

  • 采用 ARGB 颜色格式的多边形的填充颜色和不透明度,如 由 Color 类。默认值为透明 (0x00000000)。

查找地点 ID 以定位地图项

许多应用会根据地图项位置将样式应用于地图项。对于 例如,您可能想将样式应用于不同的国家、地区或 区域。特征位置由 地点 ID

地点 ID 可唯一标识 Google Places 数据库中和 Google 上的地点 地图。如需获取地点 ID,请执行以下操作:

覆盖范围因区域而异。请参阅 Google 边界覆盖范围 了解详情。

您可以从许多来源获取地理位置名称,例如 USGS Board on Geos Names, 和 美国地名簿文件

使用 PlaceFeature 获取地点 ID

PlaceFeature 类是 Feature 类的子类。 它表示地点地图项(具有地点 ID 的地图项),其中包括 ADMINISTRATIVE_AREA_LEVEL_1ADMINISTRATIVE_AREA_LEVEL_2COUNTRYLOCALITYPOSTAL_CODESCHOOL_DISTRICT

当地点 ID 可用时, Maps SDK for Android 将 PlaceFeature 的实例传递给样式工厂 函数,以确定地图项的位置。

样式工厂示例

此示例将样式工厂函数应用于 Locality 中的多边形 地图项图层。样式工厂函数用于确定地图项的地点 ID PlaceFeature 实例。如果地点 ID 是夏威夷哈纳的 ID,则 函数会对多边形应用自定义填充和描边样式:

  1. 按照 开始 以创建新的地图 ID 和地图样式。请务必启用 Locality(市行政区)地图项图层。

  2. 在地图初始化时获取对市行政区地图项图层的引用。

    Java

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

    Kotlin

    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 地图项图层。

    以下示例仅在地点 地图项的 ID 是夏威夷哈纳的 ID(“ChIJ0zQtYiWsVHkRk8lRoB1RNPo”)。 如果指定的地点 ID 不是针对夏威夷哈纳的,则样式无效 。

    Java

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

    Kotlin

    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)