gpt4 book ai didi

swift - GMSPlace 返回无效坐标 (-180, -180),但名称和地点 ID 正确

转载 作者:搜寻专家 更新时间:2023-10-30 22:36:31 25 4
gpt4 key购买 nike

我正在尝试在 Google map 上实现自动完成搜索,该搜索将使用标记显示用户在 map 上选择的位置。

搜索工作正常。问题如下。当我从搜索结果中选择一个位置时,我得到一个 GMSPlace 对象,该对象具有正确的名称作为所选值、正确的地点 ID(使用此 link 确认),但坐标不正确(-180.0,-180.0,或 kCLLocationCoordinate2DInvalid 常量)。我在多个位置对此进行了测试。

大部分代码是从 documentation 借来的用于 Places API。

import UIKit
import GoogleMaps
import GooglePlaces

class ViewController: UIViewController, UISearchBarDelegate {

@IBOutlet weak var mapContainer: UIView!
var mapView: GMSMapView!

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.mapView = GMSMapView(frame: self.mapContainer.frame)
self.view.addSubview(self.mapView)
}

// Code from https://developers.google.com/places/ios-sdk/autocomplete#add_an_autocomplete_ui_control
@IBAction func searchByAddress(_ sender: Any) {
// Present the Autocomplete view controller when the button is pressed.
let autocompleteController = GMSAutocompleteViewController()
autocompleteController.delegate = self

// Specify the place data types to return.
let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
UInt(GMSPlaceField.placeID.rawValue))!
autocompleteController.placeFields = fields

// Display the autocomplete view controller.
present(autocompleteController, animated: true, completion: nil)
}
}

extension ViewController: GMSAutocompleteViewControllerDelegate {

// Handle the user's selection.
func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
let position: CLLocationCoordinate2D = place.coordinate

let camera = GMSCameraPosition.camera(withLatitude: position.latitude, longitude: position.longitude, zoom: 10)
let newMapView = GMSMapView.map(withFrame: self.mapContainer.frame, camera: camera)
self.mapView = newMapView
self.view.addSubview(newMapView)

let marker = GMSMarker()
marker.position = position
marker.title = place.name
marker.map = self.mapView

viewController.dismiss(animated: true, completion: nil)
}

func viewController(_ viewController: GMSAutocompleteViewController, didFailAutocompleteWithError error: Error) {
// TODO: handle the error.
print("Error: ", error.localizedDescription)
}

// User canceled the operation.
func wasCancelled(_ viewController: GMSAutocompleteViewController) {
viewController.dismiss(animated: true, completion: nil)
}

// Turn the network activity indicator on and off again.
func didRequestAutocompletePredictions(_ viewController: GMSAutocompleteViewController) {
UIApplication.shared.isNetworkActivityIndicatorVisible = true
}

func didUpdateAutocompletePredictions(_ viewController: GMSAutocompleteViewController) {
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}

}

如有任何帮助,我们将不胜感激!

最佳答案

我遇到了同样的问题并浏览了 Place SDK 文档,该文档清楚地说明我们应该事先向 GMSPlaceField 定义我们究竟需要哪些细节,如果您完全遵循文档,结果只会是正在填充的名称和 placeId。 因此,在实例化您的 GMSAutoCompleteViewController 时,请按以下方式定义。

**let fields: GMSPlaceField = GMSPlaceField(rawValue:UInt(GMSPlaceField.name.rawValue) |
UInt(GMSPlaceField.placeID.rawValue) |
UInt(GMSPlaceField.coordinate.rawValue) |
GMSPlaceField.addressComponents.rawValue |
GMSPlaceField.formattedAddress.rawValue)!
autocompleteController.placeFields = fields**

关于swift - GMSPlace 返回无效坐标 (-180, -180),但名称和地点 ID 正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55978576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com