2017-06-27 31 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) 

返回點是否位於指定的容差範圍內(以米爲單位)或位於路徑附近。