谷歌地理编码不断返回不同地方的市中心位置

时间:2016-10-20 20:44:33

标签: ios swift google-maps geocoding

我正在使用谷歌自动完成(GMSAutocompletePrediction)来获取attributionFullText(result.attributedFullText.string),所选建议用于以下代码,这是从attributionFullText获取纬度和经度的地理编码。对于许多不同的地方,返回的起源是我正在寻找的城市的市中心。

知道使用的语言是阿拉伯语

if let correctedAddress = self.allAddresses[0][(indexPath as NSIndexPath).row].full.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {
                if let url = URL(string: "https://maps.googleapis.com/maps/api/geocode/json?address=\(correctedAddress)&sensor=false") {
                    print(correctedAddress)
                    print(self.allAddresses[0][(indexPath as NSIndexPath).row].full)
                    let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) -> Void in
                        // 3
                        do {
                            if data != nil{
                                if let jsonObject = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:Any],
                                    let results = jsonObject["results"] as? [[String:Any]], !results.isEmpty,
                                    let geometry = results[0]["geometry"] as? [String:Any],
                                    let location = geometry["location"] as? [String:Double],
                                    let lat = location["lat"], let lng = location["lng"] {
                                     print("\(lat) - \(lng)")
                                    let newAddress = Address(name: self.allAddresses[0][(indexPath as NSIndexPath).row].name , detail: self.allAddresses[0][(indexPath as NSIndexPath).row].detail, latitude: String(lat), longitude: String(lng))
                                    // go back to the previous view controller
                                    self.delegate?.userDidChooseLocation(newAddress)
                                    self.dismiss(animated: true, completion: nil)

                                }

                            }

                        }catch {
                            print("Error")
                        }
                    }) 
                    // 5
                    task.resume()
                }
            }


        }

1 个答案:

答案 0 :(得分:0)

您可以更好地使用地方ID:

https://developers.google.com/places/ios-api/reference/interface_g_m_s_autocomplete_prediction.html#a1c5f68fbd615425c3dcc5cb60b8b16c7

您还可以使用自动填充中的地点ID查询Google Maps Geocoding API网络服务:

https://maps.googleapis.com/maps/api/geocode/json?place_id=(placeId)&key=YOUR_API_KEY

请注意,此类请求需要API密钥。

此外,传感器参数很久以前就退役了。