Google Places API获取地点类型名称异常:返回数字而非文本
解决Google Places API返回类型数字而非文本名称的问题
嘿,我懂你遇到的这个问题!你现在拿到的[69, 1013, 34]这些数字其实是Google Places API定义的地点类型枚举常量,而不是你想要的可读性强的文本名称(比如park、square)。下面给你两种实用的解决思路:
方法一:利用Google Places SDK的内置转换方法(推荐,适用于Android)
如果你是在Android平台上使用Places SDK,其实有现成的方法可以把数字类型码转成文本名称,还支持本地化。直接调用PlaceTypes.getName()方法就行:
// 假设你已经拿到了types列表 List<Integer> types = placeLikelihood.getPlace().getPlaceTypes(); List<String> typeNames = new ArrayList<>(); for (Integer typeCode : types) { // 传入上下文和类型码,就能拿到对应的文本名称 String typeName = PlaceTypes.getName(context, typeCode); typeNames.add(typeName); } // 现在typeNames里就是你想要的"park"、"square"这类文本啦
方法二:手动创建映射表
如果没法用内置方法,你可以自己创建一个映射关系,把数字和对应的文本名称对应起来。首先需要查Google Places API文档找到每个数字对应的类型名称(比如69对应park,34对应square,1013对应natural_feature),然后用HashMap来实现:
// 先创建类型码和名称的映射 HashMap<Integer, String> typeCodeToName = new HashMap<>(); typeCodeToName.put(69, "park"); typeCodeToName.put(34, "square"); typeCodeToName.put(1013, "natural_feature"); // 可以根据需求添加更多类型映射 // 转换类型列表 List<Integer> types = placeLikelihood.getPlace().getPlaceTypes(); List<String> typeNames = new ArrayList<>(); for (Integer typeCode : types) { // 用getOrDefault避免找不到对应值时返回null String typeName = typeCodeToName.getOrDefault(typeCode, "unknown"); typeNames.add(typeName); }
小提示:你可以在Google Places API的官方文档里找到所有地点类型的枚举值和对应名称的对照表,方便你补充完整映射关系。
内容的提问来源于stack exchange,提问作者Gastón Saillán
相关产品推荐
相关产品推荐

