来自 Google Places 地址的核心位置地理编码不适用于意大利城市

Core Location geocoding from Google Places address does not work for Italian cities

我正在使用 Google 个地点 API 来搜索城市名称。在我的视图控制器中,我符合 GMSAutocompleteResultsViewControllerDelegate:

func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
                       didSelect prediction: GMSAutocompletePrediction) -> Bool {
    let geocoder = CLGeocoder()
    geocoder.geocodeAddressString(prediction.attributedFullText.string) { (placemark, error) in }
    return true
}

我需要 CLGeocoder 以便从我从 Google 地点 API 获得的地址字符串中提取 CLLocation。这对除意大利城市以外的大多数情况都适用。 Geocoder 无法处理完整地址(来自 Google Places 结果的示例:Roma, Metropolitan City of Rome, Italy)。发生的事情是您收到 CLGeocoder 错误。

我试过的:

我试过只提取城市+国家名称。这适用于意大利城市,但不适用于同名城市:New York, NY 和 New York, IA 等(你会得到错误的结果)。

另一种解决方案是尝试使用 prediction.attributedFullText.string,如果它不起作用,请重试上述解决方法。

有人遇到过同样的问题或知道如何更优雅地处理它吗?我知道这是一种边缘情况,但我相信 Google Places 应该考虑使用 CLGeocoder 的结果。

您可以使用回调函数轻松获取coordinatesformattedAddress

func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
    print("Place name: \(String(describing: place.name))")
    print("Place address: \(String(describing: place.formattedAddress))")
    print("Place attributions: \(String(describing: place.attributions))")
    dismiss(animated: true, completion: nil)

    // get the selected coordinates and address like this
    let yourCordniates = place.coordinate
    let yourAddress = place.formattedAddress ?? ""


}