通过完整地址后如何获得长,拉特,城市,邮政编码国家?

时间:2016-11-21 11:19:45

标签: ios swift google-places-api geocoding reverse-geocoding

我使用了google autocompelete 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)
          }

3 个答案:

答案 0 :(得分:2)

您可以从代码中获取placeId,例如

result.placeID

然后使用以下代码获取该地点的详细信息,您将收到GMSPlace对象。从那里你会发现坐标属性,它将保持纬度和经度。

从上面的结果回复中,您将获得所选地点的place_id,然后您可以使用place_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)")   
}
})

有关详细信息,请访问Here

答案 1 :(得分:1)

从Google的文档中可以看出,autocompleteQuery的结果是GMSAutocompletePredictions个对象的数组。

因此,它们包含以下properties

  

属性

     

- attributedFullText
  预测的完整描述为NSAttributedString。
   - attributionPrimaryText
  预测的主要文本为NSAttributedString,通常是该地方的名称。
   - attributionSecondaryText
  预测的辅助文本作为NSAttributedString,通常是地点的位置。
   - placeID
  表示预测的地点ID的可选属性,适用于地点详细信息请求。
   - 类型
  此自动填充结果的类型。

由于attributedFullTextattributedPrimaryTextattributedSecondaryTextplaceID只是字符串,所以似乎没有从这里拉出lat,long,post code等。 (或准确地说NSAttributtedString / NSString

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

referenced question answer

这至少应该是一个开始。

答案 2 :(得分:0)

您想从用户输入的自由格式地址中获取纬度,经度,城市和邮政编码。自由形式意味着可能存在不同的大写,标点符号,缩写和拼写。因此,您应该考虑解析,标准化和验证地址的必要性。

要使用您的代码和Google的API获取信息,您需要从结果中获取placeID并使用它发出请求:这将为您提供您正在寻找的纬度,经度和其他信息。

我不确定你是否看过这个,但谷歌的这个Address Form Autocomplete Tutorial可能会有很大的帮助。

事实上,Google不是地址验证服务。他们不关注地址标准化和验证。如果经过验证的地址对您很重要(如果您想确保在搜索时确实拥有真实地址和真实位置),则可能需要尝试其他服务,例如SmartyStreets。他们也有iOS SDK。他们可以很好地使用您的搜索结果查找有效地址并将其解析为地址组件,然后返回正确的地点信息,如纬度和经度。它们将地址与邮政服务中的数据相匹配。

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