【问题标题】:Get LAT and LONG from tapped overlay in Google Maps从 Google 地图中的点击叠加层获取 LAT 和 LONG
【发布时间】:2018-07-25 17:10:47
【问题描述】:

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

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


    }

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

谢谢!

【问题讨论】:

  • 检查我的答案

标签: swift google-maps-sdk-ios


【解决方案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

确保polylinespolygonsisTappable = false

但请记住,即使是overlaped,每个overlay 都会触发此事件,您可以在if 成功时将return 放在第一个overlay

【讨论】:

  • 为我工作。但是我认为 self.mapView(mapView, didTap: polyline) 不是必需的。谷歌回答。 @wajeeh
【解决方案2】:

您也可以使用 didTapAt 委托方法。

@wajih,当您点击地标名称或标题时,您是否调用了 didTapAt 方法?对我来说,它没有被调用。 在我的情况下,地标标题在多边形上方,并且没有调用 didTapAt 方法,但是如果我将 tappable 设置为 true,则可以完美调用 didTap(overlay)。

【讨论】:

    【解决方案3】:

    如果您只想在无论是否在 Overlay 上点击的任何位置都获得准确的坐标,那么每当我们点击 GoogleMaps 时都会调用 GMSMapViewDelegate 的另一个代表。在此委托中,您可以获取您在地图上点击的确切坐标,而与点击叠加层无关。

    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
    

    参考见here

    【讨论】:

    • 我在地图上画了一条折线,我需要让它可以点击。所以我需要overlay.isTappable = true
    • @JaysonTamayo 我猜GoogleMapsSDK 中没有任何方法可以在点击覆盖时为您提供准确的坐标。您只能收到点击叠加层的事件,但不会在点击叠加层时获得坐标,因为GMSOverlay 类没有坐标选项。
    • 应该有别的办法。是否有可能拥有didTapAt 同时还监听覆盖点击?
    • 我不这么认为。如果您将overlay 设为可点击true,则永远不会调用didTapAt
    • didTapAt 永远不会在您点击overlay 时被调用。当您在overlay外部点击时会调用它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多