2017-06-27 30 views
1

我已经在使用方法GMSGeometryContainsLocation来确定坐标(来自抽头用户)是否在GMSPolygon内,但是我无法使它适用于GMSPolyline。如果抽头点是不完全的多线则GMSGeometryIsLocationOnPath条件将永远不会返回trueiOS - 确定坐标是否在GMSPolyline内

-(void) mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate 
{ 
    if (_myMarker) 
     _myMarker.map = nil; 

    [self didTapOnPolygon:coordinate andMap:mapView]; 
    [self didTapOnPolyline:coordinate andMap:mapView]; 
} 
+0

如果您的'didTapOnPolyline'委托触发,那么用户正在点击'多段线'权利?那么为什么检查点是否在线? – Subramanian

+0

这是我的自定义方法。查看编辑 – Balanced

+0

如果分接点不完全在多义线上,那么它将不起作用。你可以通过使用'GMSGeometryIsLocationOnPathTolerance'来检查点在多边线上还是附近。 – Subramanian

回答

1

-(void) didTapOnPolyline:(CLLocationCoordinate2D)coordinate andMap:(GMSMapView *)mapView { 
    if (_pathVS != nil) { 
     for (id key in _pathVS) { 
      if (GMSGeometryIsLocationOnPath(coordinate, [_pathVS objectForKey:key], YES)) { 
       _myMarker = [GMSMarker markerWithPosition:coordinate]; 
       _myMarker.opacity = 1.f; 
       // _myMarker.icon = [UIImage imageNamed:@"marker-maps"]; 

       _myMarker.map = mapView; 
       _myMarker.userData = key; 
       [_mapView setSelectedMarker:_myMarker]; 
      } 
     } 
    } 
} 

我打电话从触发委托方法这个方法。所以,你必须使用GMSGeometryIsLocationOnPathTolerance

谷歌地图SDK文件说

不等于到顶点的一点是在一方或其他任何路径段的 - 它绝不可能 “恰好在边境”

BOOL GMSGeometryIsLocationOnPathTolerance (CLLocationCoordinate2D point, GMSPath *path, BOOL geodesic, CLLocationDistance tolerance) 

返回点是否位于指定的容差范围内(以米为单位)或位于路径附近。