我是swift和Google Maps SDK的新手,并想知道如何使用Google Maps SDK获取用户点击的位置坐标。例如,如果用户将手指放在地图上的某个位置,则会在那里创建注释。我非常感谢你的帮助,谢谢。
答案 0 :(得分:11)
在GMSMapViewDelegate中有一个名为mapView:didLongPressAtCoordinate:
的方法,该方法在特定坐标的长按手势后调用。请参阅参考here。
通过实施此方法,您可以在地图视图中添加标记:
func mapView(mapView: GMSMapView!, didLongPressAtCoordinate coordinate: CLLocationCoordinate2D) {
let marker = GMSMarker(position: coordinate)
marker.title = "Hello World"
marker.map = mapView
}
对于点击手势,可以实现一个名为mapView:didTapAtCoordinate:
的类似委托方法,该方法可以类似的方式使用:
func mapView(mapView: GMSMapView!, didTapAtCoordinate coordinate: CLLocationCoordinate2D) {
print("Tapped at coordinate: " + String(coordinate.latitude) + " "
+ String(coordinate.longitude))
}
答案 1 :(得分:0)
尝试
extension ViewController: GMSMapViewDelegate {
func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D)
{
print("Tapped at coordinate: " + String(coordinate.latitude) + " "
+ String(coordinate.longitude))
}
}
答案 2 :(得分:0)
适用于 Swift 5.0+
<块引用>首先,确保您已将 GMSMapViewDelegate
委托添加到您的 ViewController 类
在你的类中添加这个默认函数
func mapView(_ mapView: GMSMapView, didLongPressAt coordinate: CLLocationCoordinate2D) {
debugPrint("Coordinates: ", coordinate)
}
如果你只想要坐标,那么上面的功能非常适合你但是如果你想创建标记或通过触摸获取本地地址,那么请看下面的功能
func mapView(_ mapView: GMSMapView, didLongPressAt coordinate: CLLocationCoordinate2D) {
let marker = GMSMarker(position: coordinate) //Add this line if you want to add marker
let decoder = CLGeocoder()
decoder.reverseGeocodeLocation(CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)) { placemarks, err in
if let placeMark = placemarks?.first {
let plName = placeMark.name ?? placeMark.subThoroughfare ?? placeMark.thoroughfare! //Place Name
var address : String! = "" //This will be the local address
if let subLocality = placeMark.subLocality ?? placeMark.name {
address.append(subLocality)
address.append(", ")
}
if let city = placeMark.locality ?? placeMark.subAdministrativeArea {
address.append(city)
address.append(", ")
}
if let state = placeMark.administrativeArea, let country = placeMark.country {
address.append(state)
address.append(", ")
address.append(country)
}
// Add Marker:
marker.title = plName
marker.snippet = address
marker.appearAnimation = .pop
marker.map = mapView
}
}
}
此函数不仅获取坐标,还创建一个标记,其中包含从坐标中获取的所有详细信息(例如地点名称、城市、州、国家/地区等)< /p>
如果你只想要本地地址,那么删除所有与marker
相关的代码行
我使用 CLGeocoder
而不是 GMSGeocoder
的原因来自
GoogleMapDelegate
是 Apple 的 CLGeocoder
更精确
在获取地名而 GMSGeocoder
未获取时
准确地名。