Swift 4 从 Google Places API 获取多个地点

标签 swift api google-places gmsmapview gmsplace

我无法从 Google Places API 获取多个地点。问题是...如果我只获取一种引脚类型,如 Bars,没问题,没问题。但是,如果我尝试获取餐厅、酒吧、赌场...多种类型,它只会让我获得第一名,在我们的例子中是餐厅。

我尝试通过下面的链接向 Postman 发出相同的请求...但是例如

  • 餐厅 1030 行 JSON
  • 政治83行
  • 尝试获取餐厅 + 政治 = 965 行 JSON。

我使用此代码获取我想要的位置:

func fetchPlacesNearCoordinate(_ coordinate: CLLocationCoordinate2D, radius: Double, types:[String], completion: @escaping PlacesCompletion) -> Void {

    var urlString = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=\(coordinate.latitude),\(coordinate.longitude)&radius=\(50000)&rankby=prominence&sensor=true&key=\(googleApiKey)"
    let typesString = types.count > 0 ? types.joined(separator: "|") : "food"
    urlString += "&types=\(typesString)"
    urlString = urlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) ?? urlString

    guard let url = URL(string: urlString) else { completion([]); return }

    if let task = placesTask, task.taskIdentifier > 0 && task.state == .running {
        task.cancel()
    }

    DispatchQueue.main.async {
        UIApplication.shared.isNetworkActivityIndicatorVisible = true
    }

    placesTask = session.dataTask(with: url) { data, response, error in

        if data != nil{
            for el in data!{
                //print(el)
            }
        }
        var placesArray: [PlaceContent] = []
        defer {
            DispatchQueue.main.async {
                UIApplication.shared.isNetworkActivityIndicatorVisible = false
                completion(placesArray)
            }
        }

        guard let data = data else { return }

        do{
            let decode = try JSONDecoder().decode(GooglePlacesAnswer.self, from: data)
            placesArray = (decode.results?.map{ $0.toPlaceContent() }) ?? []
        } catch let value{
            print(value.localizedDescription)
        }
    }
    placesTask?.resume()
}

最佳答案

如官方文档所述,您无法获得多种类型的位置。您必须发出多个请求并合并结果。

https://developers.google.com/maps/documentation/javascript/places

type — Restricts the results to places matching the specified type. Only one type may be specified (if more than one type is provided, all types following the first entry are ignored). See the list of supported types.

关于Swift 4 从 Google Places API 获取多个地点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55568576/

相关文章:

swift - 相邻的不规则形状图像

python - 为 Django 模板定义 API?

google-places-api - 谷歌将自动完成 API 限制为仅大学

ios - 当 UIPickerView 与 TextField 的 inputView 相关联时,如何重置它?

xcode - 快速获取 UITableViewCell 内单元格的索引路径

api - 推特 API : allow authenticated user to post tweets on another user's behalf

iphone - iPhone 中的数据保护 API 未加密

Android Places SDK 从可能性中获取地点 ID

java - 如何在 map 上显示地点可能性?

swift - AVPlayer 不允许我访问 URL