通过Google地图中的点按覆盖获取LAT和LONG

时间:2016-10-11 12:34:27

标签: swift google-maps-sdk-ios

当用户点击叠加层时,会触发以下代码:

func mapView(_ mapView: GMSMapView, didTap overlay: GMSOverlay) {


    }

我想知道我们是否可以提取已经点击的叠加层的确切LAT和LONG坐标?

谢谢!

3 个答案:

答案 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是否包含在我们之前定义的任何PolylinePolygon中,所以我们fire的事件didTap overlay overlay

请确保polylinespolygons 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

有关参考,请参阅the implementation of shadowsocks