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

如何在Android版Google Maps Autocomplete API中识别品牌或连锁场所?

如何在Android版Google Maps Autocomplete API中识别品牌或连锁场所?

嘿,我来给你唠唠怎么在Android的Google Maps Autocomplete API里识别品牌或者连锁场所哈~其实API本身就藏着对应的方法,咱结合代码一步步来:

首先,你得知道Autocomplete返回的预测结果里,每个AutocompletePrediction对象能给你一些初步线索,然后再通过Place ID去拉取详细信息,就能确认是不是品牌/连锁场所了。

第一步:先从Autocomplete预测结果里筛选潜在目标

当你发起Autocomplete请求拿到响应后,先给每个预测项做个初步筛选:看它的placeTypes里有没有Place.TYPE_ESTABLISHMENT(商业场所)、Place.TYPE_RESTAURANT这类类型——有这些类型的,大概率是我们要找的场所类地点,先把它们挑出来。

第二步:通过Place ID获取品牌详情

光靠预测结果的类型还不够精准,咱得用预测项里的placeId调用Fetch Place API,专门请求Place.Field.BRAND这个字段。如果返回的Place对象里brand属性不为空,那妥妥就是品牌/连锁场所了,还能直接拿到品牌的官方名称~

咱把你给的代码补全一下,看看具体怎么实现:

fun autocomplete(
    query: String,
    latLng: LatLng?,
    onSuccessListener: OnSuccessListener? = null,
    onFailureListener: OnFailureListener? = null,
) {
    val client = Places.createClient(applicationContext)
    val nearby = biasDistanceMeters?.let { distance ->
        latLng?.let {
            val kilometers = distance / 1_000.0
            rectangularBounds(latLng, kilometers)
        }
    }

    val request = FindAutocompletePredictionsRequest.builder()
        .setQuery(query)
        .setOrigin(latLng)
        .setLocationBias(nearby) // 把附近区域作为搜索偏向
        .build()

    // 发起Autocomplete请求
    client.findAutocompletePredictions(request)
        .addOnSuccessListener { response ->
            // 遍历所有预测结果
            for (prediction in response.autocompletePredictions) {
                val placeId = prediction.placeId
                // 先判断类型,筛选潜在场所
                if (prediction.placeTypes.contains(Place.TYPE_ESTABLISHMENT)) {
                    // 拉取详细场所信息,确认品牌
                    fetchBrandPlaceDetails(client, placeId)
                }
            }
            onSuccessListener?.onSuccess(response)
        }
        .addOnFailureListener { exception ->
            onFailureListener?.onFailure(exception)
        }
}

// 拉取场所详细信息,提取品牌
private fun fetchBrandPlaceDetails(client: PlacesClient, placeId: String) {
    // 指定需要拉取的字段,必须包含BRAND
    val requiredFields = listOf(
        Place.Field.ID,
        Place.Field.NAME,
        Place.Field.BRAND,
        Place.Field.TYPES
    )
    val fetchRequest = FetchPlaceRequest.newInstance(placeId, requiredFields)

    client.fetchPlace(fetchRequest)
        .addOnSuccessListener { response ->
            val targetPlace = response.place
            // 检查是否有品牌信息
            targetPlace.brand?.let { brandInfo ->
                // 这里就是识别到的品牌/连锁场所啦
                println("找到品牌场所:${targetPlace.name},所属品牌:${brandInfo.name}")
            } ?: run {
                // 没有品牌信息,大概率是独立场所
                println("这是独立场所:${targetPlace.name}")
            }
        }
        .addOnFailureListener { exception ->
            println("拉取场所详情失败:${exception.message}")
        }
}

小提醒

有些小连锁可能没有完善的品牌信息,这时候你也可以结合场所名称来辅助判断(比如名称里重复出现的品牌关键词),但最靠谱的还是依赖Place.Field.BRAND返回的官方数据,毕竟这是Google Places数据库里的权威信息。

备注:内容来源于stack exchange,提问作者Shreyas S Y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:05:29