我无法从 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/