检测Swift中的GMSPolyline?

我正在努力检测在我的Google地图上绘制的GMSPolyline上的一个水龙头,它用GMSpolygones工作得很好,但同样的方法似乎不适用于折线。 我目前的方法,适用于polygones,是:

if (GMSGeometryContainsLocation(coordinate, polygon.path!, false)) { ... } 

任何build议如何检测折线上的水龙头? 或者只是靠近它?

根据他们的API 文档 , GMSPolylineinheritance自GMSOverlay ,这意味着GMSPolyline具有属性tappable 。 所以你想要这样的东西

 let polyLine: GMSPolyline = GMSPolyline(path: newPath) polyLine.isTappable = true polyline.map = yourGoogleMap 

然后你的GMSMapViewDelegate应该用这个函数通知你在GMSPolyline层内的任何地方

 func mapView(_ mapView: GMSMapView, didTap overlay: GMSOverlay) { print("User Tapped Layer: \(overlay)") } 

您可以使用isTappable属性。

isTappable

如果这个叠加应该会导致点击通知。

polyline.isTappable = true

GMSPolylineinheritance自GMSOverlay 。 所以要检测重叠覆盖GMSMapViewDelegate提供了一个委托方法:

  • mapView:didTapOverlay:在叠加被点击之后调用。

无论何时点击多段线, didTapOverlay调用GMSMapViewDelegate方法didTapOverlay

 func mapView(_ mapView: GMSMapView, didTap overlay: GMSOverlay) { //Write your code here } 

而且,这个方法可以用于GMSPolygon因为它也是从GMSOverlayinheritance的。

有关更多信息,请参阅https://developers.google.com/maps/documentation/ios-sdk/reference/protocol_g_m_s_map_view_delegate-p.html#a3a2bf2ff4481528f931183cb364c0f4b