2016-11-21 43 views
1

我已经使用google autocompelete api.With的帮助,我能够在我的搜索中获得地点。获取地址后,我想获得城市,国家,邮政编码,街道,经度,纬度。我使用下面的代码获取地址。如何获得通过完整地址后的长,拉特,城市,邮政编码国家?

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) 
      } 

回答

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

+0

我如何获得经度和地位以及地点ID。 – Techiee

+0

@deepakkumar更新了我的答案。 –

1

从google的文档看来,autocompleteQuery的结果看起来像是一组GMSAutocompletePredictions对象。

因此,它们包含以下properties

属性

- attributedFullText
预测作为NSAttributedString的完整描述。
- 归档主文本
作为NSAttributedString的预测正文,通常是地点的名称。
- 归属中间文本
作为NSAttributedString的预测的辅助文本,通常是位置的位置。
- placeID
一个可选属性,表示预测的地点ID,适用于场所详细信息请求。
- 类型
此自动完成结果的类型。

似乎没有要离开,从这里拉纬度,经度,邮编等为attributedFullTextattributedPrimaryTextattributedSecondaryTextplaceID只是字符串。 (或NSAttributtedString/NSString要准确)基于类似的问题

看来你需要做的就是使用每个GMSAutocompletePredictions对象的placeID在一个新的请求得到你需要的信息是什么。

referenced question answer

这至少应该是一个开始。

0

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

要使用您的代码和Google的API获取信息,您需要从结果中获取placeID并向其提出请求:这会为您提供所需的纬度,经度和其他信息。

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

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

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

相关问题