要为地图项图层中的边界多边形应用描边和填充样式,请执行以下操作:
创建一个用于实现
FeatureLayer.StyleFactory
界面。此函数用于定义地图项图层的样式设置逻辑。致电
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,请执行以下操作:
- 使用 Places API 和地理编码 按名称搜索区域,并获取区域内各区域的地点 ID 指定边界。
- 从点击事件中获取数据。 这将返回与所点击区域相对应的地图项, 访问其地点 ID 和地图项类型类别。
覆盖范围因区域而异。请参阅 Google 边界覆盖范围 了解详情。
您可以从许多来源获取地理位置名称,例如 USGS Board on Geos Names, 和 美国地名簿文件。
使用 PlaceFeature 获取地点 ID
PlaceFeature
类是 Feature
类的子类。
它表示地点地图项(具有地点 ID 的地图项),其中包括
ADMINISTRATIVE_AREA_LEVEL_1
、ADMINISTRATIVE_AREA_LEVEL_2
、
COUNTRY
、LOCALITY
、POSTAL_CODE
和 SCHOOL_DISTRICT
。
当地点 ID 可用时,
Maps SDK for Android 将 PlaceFeature
的实例传递给样式工厂
函数,以确定地图项的位置。
样式工厂示例
此示例将样式工厂函数应用于 Locality 中的多边形
地图项图层。样式工厂函数用于确定地图项的地点 ID
PlaceFeature
实例。如果地点 ID 是夏威夷哈纳的 ID,则
函数会对多边形应用自定义填充和描边样式:
按照 开始 以创建新的地图 ID 和地图样式。请务必启用 Locality(市行政区)地图项图层。
在地图初始化时获取对市行政区地图项图层的引用。
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() }创建样式工厂函数,并将其应用到地点 地图项图层。
以下示例仅在地点 地图项的 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)
。