Ios 通过完整地址后,如何获取长、纬度、城市、邮政编码国家/地区?

Ios 通过完整地址后,如何获取长、纬度、城市、邮政编码国家/地区?,ios,swift,google-places-api,geocoding,reverse-geocoding,Ios,Swift,Google Places Api,Geocoding,Reverse Geocoding,我使用了谷歌自动完成api。有了它的帮助,我可以在搜索中找到位置。在得到地址后,我想得到城市、国家、邮政编码、街道、经度、纬度。我用下面的代码得到地址 let placesClient = GMSPlacesClient() print("text is \(textFieldAddress.text!)") placesClient.autocompleteQuery(textFieldAddress.text!, bounds: nil, filter:

我使用了谷歌自动完成api。有了它的帮助,我可以在搜索中找到位置。在得到地址后,我想得到城市、国家、邮政编码、街道、经度、纬度。我用下面的代码得到地址

let placesClient = GMSPlacesClient()
        print("text is \(textFieldAddress.text!)")
        placesClient.autocompleteQuery(textFieldAddress.text!, bounds: nil, filter:
        filter){ results, error in
          self.arr_addressSearch.removeAll()

          if results == nil
          {
            return
          }

          for result in results!
          {

            print("resut is \(result.attributedFullText.string)")
            print("address count  is \(self.arr_addressSearch.count)")

            self.arr_addressSearch.append(result.attributedFullText.string)
          }

您可以从代码中获取placeId,如下所示

result.placeID
然后使用下面的代码获取该位置的详细信息,您将收到GMSPlace对象。从中您将找到坐标属性,它将保存纬度和经度

从上面对结果的响应中,您将获得所选地点的地点id,然后您可以使用地点id获取该地点的所有详细信息,如下所示

let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs"

placesClient!.lookUpPlaceID(placeID, callback: { (place: GMSPlace?, error: NSError?) -> Void in   if let error = error {
    print("lookup place id query error: \(error.localizedDescription)")
    return   }

  if let place = place {
    print("Place name \(place.name)")
    print("Place address \(place.formattedAddress)")
    print("Place placeID \(place.placeID)")
    print("Place attributions \(place.attributions)")   } else {
    print("No place details for \(placeID)")   
}
})

有关更多详细信息,您可以访问。

从谷歌的文档中可以看出,
自动完成查询的结果是一组
GMSAutocompletePredictions
对象

因此,它们包含以下内容

性质

-attributedFullText
作为NSAttribute字符串的预测的完整描述
-attributedPrimaryText
作为NSAttributed字符串的预测的主文本,通常是地点的名称
-attributedSecondaryText
作为NSAttribute字符串的预测的次要文本,通常是位置
-placeID
表示预测的地点ID的可选属性,适用于地点详细信息请求
-类型
此自动完成结果的类型

似乎没有从这里提取lat、long、post代码等,因为
attributedFullText
attributedPrimaryText
attributedSecondaryText
placeID
只是字符串。(或者准确地说是
nsattributedstring
/
NSString

基于类似的问题,您需要做的似乎是在新请求中使用每个
GMSAutocompletePredictions
对象的placeID来获取所需的信息


这至少应该是一个开始。

您希望从用户输入的自由格式地址获取纬度、经度、城市和邮政编码。自由形式意味着可以有不同的大小写、标点符号、缩写和拼写。因此,您应该考虑解析、标准化和验证地址的必要性。 要使用您的代码和Google的API获取信息,您需要从结果中获取placeID并使用它发出请求:这将为您提供纬度、经度和其他您正在查找的信息

我不确定你是否见过这个,但谷歌的这个可能会帮上大忙

事实上,谷歌不是地址验证服务。他们不专注于解决标准化和验证问题。如果验证的地址对您很重要(如果您希望确保在搜索时拥有真实的地址和真实的位置),您可能需要尝试其他服务,例如。他们也有一个。他们使用您的搜索结果找到一个有效地址,并将其解析为地址组件,然后返回正确的位置信息(如纬度和经度),这是一项非常出色的工作。他们将自己的地址与来自邮政服务的数据相匹配


公平披露:我是SmartyStreets的员工。

如何获得经度、格度和地点id。@deepakkumar更新了我的答案。