当用户点击叠加层时,会触发以下代码:
func mapView(_ mapView: GMSMapView, didTap overlay: GMSOverlay) {
}
我想知道我们是否可以提取已经点击的叠加层的确切LAT和LONG坐标?
谢谢!
答案 0 :(得分:1)
要解决这个问题,我们需要两种方法, 所以我把它们结合起来,我希望它能帮助解决这个问题:
func mapView(_ mapView: GMSMapView, didTap overlay: GMSOverlay) {
print(overlay)
}
func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {
print(coordinate)
for polyline in polylines {
if GMSGeometryIsLocationOnPath(coordinate, polyline.path!, true) {
self.mapView(mapView, didTap: polyline)
}
}
for polygon in polygons {
if GMSGeometryContainsLocation(coordinate, polygon.path!, true) {
self.mapView(mapView, didTap: polygon)
}
}
}
如果用户点击coordinate
我们会处理此问题,那么请检查此coordinate
是否包含在我们之前定义的任何Polyline
或Polygon
中,所以我们fire
的事件didTap overlay
overlay
。
请确保polylines
和polygons
isTappable = false
但是请记住,每次点击overlay
时都会触发此事件,即使它们是overlaped
,您可以在return
成功时放置if
仅使用第一个overlay
答案 1 :(得分:1)
您可以使用didTapAt委托方法。
@wajih,因为您在点击地标名称或标题时是否调用了didTapAt方法?对我来说,它没有被调用。 对于我来说,地标标题位于多边形上方,并且didTapAt方法没有被调用,但是如果我将tappable设置为true,那么didTap(overlay)会被完美调用。
答案 2 :(得分:0)
如果您只想获取精确的坐标,无论您是否在Overlay上点击,那么只要我们点击GMSMapViewDelegate
,就会调用GoogleMaps
的另一位代表。在这个代表中,您可以获得在地图上点击的精确坐标,无论是否在点击覆盖图上。
Swift 3.0
func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {
print(coordinate.latitude)
print(coordinate.longitude)
}
如果您只想在点击标记上获取坐标,请使用此委托方法
func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
print(marker.position.latitude)
print(marker.position.longitude)
return true
}
确保将叠加层设为不可点击
overlay.isTappable = false