如需为地图项图层中的边界多边形应用描边和填充样式,请执行以下操作:
创建一个用于实现
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 中的多边形
地图项图层。样式工厂函数使用 PlaceFeature
实例确定地图项的地点 ID。如果地点 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() }创建一个样式工厂函数,并将其应用于“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)
。