You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Mapbox Android v10 RenderedQueryOptions的使用咨询及示例需求

Mapbox Android v10 RenderedQueryOptions 用法详解

核心参数说明

RenderedQueryOptions 是约束 queryRenderedFeatures 查询范围的配置类,核心控制参数为 layerIds 和 filters,以下是具体用法及示例:


1. layerIds:指定查询的目标图层

该参数用于限定只查询指定ID的图层要素,避免返回无关图层结果,提升查询效率。若不设置,默认返回当前地图所有可见图层的渲染要素。

示例代码:
仅查询名为 poi-label(POI标签图层)和 road-primary(主干道图层)的要素:

// 构建目标图层ID列表
val targetLayers = listOf("poi-label", "road-primary")

// 创建RenderedQueryOptions实例
val queryOptions = RenderedQueryOptions.builder()
    .layerIds(targetLayers)
    .build()

2. filters:基于要素属性的精确过滤

过滤器采用Mapbox表达式语法(与地图样式中的图层过滤器语法完全一致),可根据要素的自定义属性(如类型、名称、等级等)进行精准筛选。常见操作符包括 eq(等于)、gt(大于)、contains(包含)、all(多条件与)等。

常见过滤场景示例

场景1:等值过滤(仅获取类型为餐厅的POI)

假设POI图层要素包含 type 属性,值为 restaurant 代表餐厅:

// 构建过滤器:要素type属性等于"restaurant"
val restaurantFilter = eq(get("type"), literal("restaurant"))

val queryOptions = RenderedQueryOptions.builder()
    .layerIds(listOf("poi-label"))
    .filters(restaurantFilter)
    .build()

场景2:范围过滤(仅获取道路等级≥3的主干道)

假设道路图层要素包含 class 属性,值越大代表道路等级越高:

// 构建过滤器:道路class属性大于等于3
val roadFilter = gte(get("class"), literal(3))

val queryOptions = RenderedQueryOptions.builder()
    .layerIds(listOf("road-primary"))
    .filters(roadFilter)
    .build()

场景3:多条件组合过滤(获取名称含"超市"的商铺)

同时满足要素类型为 shop 且名称包含"超市":

// 多条件与:类型为shop 并且 名称包含"超市"
val shopFilter = all(
    eq(get("type"), literal("shop")),
    contains(get("name"), literal("超市"))
)

val queryOptions = RenderedQueryOptions.builder()
    .layerIds(listOf("poi-label"))
    .filters(shopFilter)
    .build()

完整查询示例(结合ScreenBox)

将上述配置与 ScreenBox 结合完成区域查询:

// 定义屏幕查询区域(示例为屏幕中心附近的矩形)
val screenBox = ScreenBox(
    ScreenCoordinate(500f, 500f), // 左上角坐标
    ScreenCoordinate(1000f, 1000f) // 右下角坐标
)

// 执行查询并处理结果
mapboxMap.queryRenderedFeatures(screenBox, queryOptions)
    .addOnSuccessListener { renderedFeatures ->
        renderedFeatures.forEach { feature ->
            val featureName = feature.getStringProperty("name") ?: "无名称"
            val featureType = feature.getStringProperty("type") ?: "无类型"
            Log.d("QueryResult", "找到要素:$featureName,类型:$featureType")
        }
    }
    .addOnFailureListener { e ->
        Log.e("QueryError", "查询失败:${e.message}")
    }

注意事项

  • 过滤器中使用的属性名必须与目标图层要素的实际属性一致,可通过地图样式编辑器查看图层的属性字段
  • 表达式语法需遵循Mapbox规范,所有常量值需用 literal() 包裹,属性获取用 get()
  • 同时设置 layerIds 和 filters 时,会先按图层过滤,再按属性过滤,进一步缩小结果集范围

内容的提问来源于stack exchange,提问作者robot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:25:25