Swift-谷歌地图SDK通过触摸获取坐标

Swift-谷歌地图SDK通过触摸获取坐标,swift,google-maps,google-maps-markers,google-maps-sdk-ios,Swift,Google Maps,Google Maps Markers,Google Maps Sdk Ios,我不熟悉swift和Google Maps SDK,我想知道如何使用Google Maps SDK获取用户点击位置的坐标。例如,如果用户将手指按住地图上的某个位置,则会在该位置创建注释。非常感谢您的帮助,谢谢。在GMSMapViewDelegate中,有一个方法名为:mapView:didLongPressAtCoordinate:,在特定坐标上长按手势后调用该方法。请参阅参考资料 通过实现此方法,您可以向地图视图添加标记: func mapView(mapView: GMSMapView!,

我不熟悉swift和Google Maps SDK,我想知道如何使用Google Maps SDK获取用户点击位置的坐标。例如,如果用户将手指按住地图上的某个位置,则会在该位置创建注释。非常感谢您的帮助,谢谢。

在GMSMapViewDelegate中,有一个方法名为:
mapView:didLongPressAtCoordinate:
,在特定坐标上长按手势后调用该方法。请参阅参考资料

通过实现此方法,您可以向地图视图添加标记:

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))
}
试试这个

    extension ViewController: GMSMapViewDelegate {

    func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D)    
      {

        print("Tapped at coordinate: " + String(coordinate.latitude) + " "
                + String(coordinate.longitude))
      }

    }

适用于Swift 5.0+

首先,确保已将
GMSMapViewDelegate
委托添加到ViewController类中

此函数不仅可以获取坐标,还可以创建一个标记,其中包含从坐标中获取的所有详细信息(如地名、城市、州、国家等)


如果用户长按现有标记,会发生什么情况?如何识别用户按下标记或地图?可以使用GMSMapViewDelegate mapView:didTapMarker:方法检测标记上的点击。不幸的是,没有一种方法可以检测委托中标记的长按。因此,您需要使用mapView:didLongPressAtCoordinate:方法,然后根据标记的位置属性识别标记,方法可能是循环并比较标记的坐标与用户长期按下的代理提供的坐标。请看这里:
func mapView(_ mapView: GMSMapView, didLongPressAt coordinate: CLLocationCoordinate2D) {
     let marker = GMSMarker(position: coordinate)
    
    let decoder = CLGeocoder()
    decoder.reverseGeocodeLocation(CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)) { placemarks, err in
        if let placeMark = placemarks?.first {
            let placeName = placeMark.name ?? placeMark.subThoroughfare ?? placeMark.thoroughfare!   
            //Formatting for Marker Snippet/Subtitle       
            var address : String! = ""
            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)
            }

            // Adding Marker Details
            marker.title = placeName
            marker.snippet = address
            marker.appearAnimation = .pop
            marker.map = mapView
        }
    }
}