如何快速从Google Places接收国家代码

时间:2018-10-04 06:46:06

标签: ios swift google-places-api google-places googleplacesautocomplete

我想从Google Places API中获取国家/地区代码,但我不知道怎么做。

if let addressComponents = place?.addressComponents {
   for addressComponent in addressComponents {
       print("Name: \(addressComponent.name) Type: \(addressComponent.type)")
   }
}

我总是得到这样的结果

Name: Sassnitzer Straße Type: route
Name: Lütten Klein Type: sublocality_level_1
Name: Rostock Type: locality
Name: Rostock Type: administrative_area_level_3
Name: Mecklenburg-Vorpommern Type: administrative_area_level_1
Name: Deutschland Type: country
Name: 18107 Type: postal_code

在API中,您可以为自动补全设置不同的过滤器,例如nofilter, geocode, address, establishment, region, city,其中一些过滤器会为我提供其他结果,例如administrative_area_level_3,但没有国家/地区代码。

这个想法是,用户输入他的地址,而我只是用不同的语言保存国家代码而不是国家名称。 在另一种编程语言中,国家代码是简称。例如这样的place.address_components[i].short_name

2 个答案:

答案 0 :(得分:1)

国家/地区名称不取决于编程语言,而是取决于API。如果您使用Google的反向地理编码API,则会在docs中发现将result_type设置为国家/地区会产生您想要的结果。您先前打印的结果已经包含address_component,内容为Deutschland。那个人有type country。在该地址组件中,您应该可以在short_name中找到它。

答案 1 :(得分:-1)

尝试此操作以获取国家/地区名称,然后即可隐藏国家/地区代码

 if let addressComponents = place.addressComponents,let countryComponent = (addressComponents.filter { $0.type == "country" }.first) {
  let countryName = countryComponent.name
   print("Country::::::::\(countryName)")
}

将国家/地区名称转换为国家/地区代码

private func locale(for fullCountryName : String) -> String {

    for localeCode in NSLocale.isoCountryCodes {
        let identifier = NSLocale(localeIdentifier: localeCode)
        let countryName = identifier.displayName(forKey: NSLocale.Key.countryCode, value: localeCode)
        if fullCountryName.lowercased() == countryName?.lowercased() {
            return localeCode
        }
    }
    return ""
}