我使用 Swift 4 在我的项目中嵌入了谷歌地图,同时使用 SearchController 搜索位置并点击 url 以获取该位置的坐标,对某些地址的响应为零,而某些地址给出了正确的响应。我不知道为什么会这样,如果有人知道这个问题,请帮助我。提前致谢
这是我在 didSelectMethod of tableView 中使用的代码来获取地址的坐标(字符串格式(。
override func tableView(_ tableView: UITableView,
didSelectRowAt indexPath: IndexPath){
// 1
self.dismiss(animated: true, completion: nil)
// 2
let urlpath = "https://maps.googleapis.com/maps/api/geocode/json?address=(self.searchResults[indexPath.row])&sensor=false".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let url = URL(string: urlpath!)
print(url!)
let task = URLSession.shared.dataTask(with: url! as URL) { (data, response, error) -> Void in
// 3
print(data!)
print(response!)
do {
if data != nil{
let dic = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableLeaves) as! NSDictionary
let result = dic.value(forKey: "results") as! NSArray
print(result)
if result.count != 0 {
let lat = (((((dic.value(forKey: "results") as! NSArray).object(at: 0) as! NSDictionary).value(forKey: "geometry") as! NSDictionary).value(forKey: "location") as! NSDictionary).value(forKey: "lat")) as! Double
let lon = (((((dic.value(forKey: "results") as! NSArray).object(at: 0) as! NSDictionary).value(forKey: "geometry") as! NSDictionary).value(forKey: "location") as! NSDictionary).value(forKey: "lng")) as! Double
// 4
self.delegate.locateWithLongitude(lon, andLatitude: lat, andTitle: self.searchResults[indexPath.row])
}else{
print("Data Not Found")
}
}
}catch {
print("Error")
}
}
// 5
task.resume()
}
您的请求中似乎缺少 API 密钥。API 密钥现在是强制性的,Google 正在弃用无钥匙使用。现在没有API密钥的请求会被阻止一段时间,将来无密钥访问将被完全阻止。
从 6 月 11 日开始,您需要有效的 API 密钥和 Google Cloud Platform 结算帐号才能访问我们的核心产品。
来源: https://mapsplatform.googleblog.com/2018/05/introducing-google-maps-platform.html
您应该按照文档创建一个 API 密钥,并在您的 https 请求中使用它:
https://developers.google.com/maps/documentation/geocoding/get-api-key
另请注意,Web 服务的 API 密钥仅支持 IP 地址限制,因此应从中间服务器发送 Web 服务请求,以保护 API 密钥并将响应传递回 iOS 应用。
查看以下有关 API 密钥限制的文档
https://developers.google.com/maps/faq#keysystem
我希望这有帮助!