设置边界多边形的样式

请选择平台: 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 中的多边形 地图项图层。样式工厂函数使用 PlaceFeature 实例确定地图项的地点 ID。如果地点 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 为夏威夷州哈纳(“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)