所以你不能让 didTapAtCoordinateMethod 触发覆盖点击。但是我确实找到了一个稍微肮脏的解决方法。
使用叠加层来绘制折线,我们需要一种方法来识别折线被点击的位置。所以在绘制折线时,我们可以像这样构建它们。
//draw line
GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];
polyline.strokeColor = [UIColor purpleColor];
polyline.tappable = TRUE;
polyline.map = self.googleMapView;
polyline.title = routestring;
其中 routestring 是来自的内置字符串
routestring = [NSString stringWithFormat:@"%@/%@/%@",lat,lng,[annnotationobject objectForKey:@"linkId"]];
lat 和 lng 是我们坐标的字符串值。最后一部分是折线的 ID。
路由字符串存储了坐标和一个以“/”分隔的 ID,以便我们以后可以使用字符串的组件路径来查找它们。这分配给折线标题。
现在,当点击覆盖时:
-(void)mapView:(GMSMapView *)mapView didTapOverlay:(GMSOverlay *)overlay{
NSString *path = overlay.title;
//Finding componentpaths of string
NSArray *pathparts = [path pathComponents];
NSString *lat = [pathparts objectAtIndex:0];
NSString *lng = [pathparts objectAtIndex:1];
NSString *linkID = [pathparts objectAtIndex:2];
//Here we are building a marker to place near the users tap location on the polyline.
GMSMarker *marker = [GMSMarker markerWithPosition:CLLocationCoordinate2DMake([lat doubleValue],[lng doubleValue])];
marker.title = overlay.title;
marker.snippet = @"ROUTE DATA";
marker.map = self.googleMapView;
//This will popup a marker window
[self.googleMapView setSelectedMarker:marker];
}
我们可以使用我们构建的字符串的组件路径(用“/”分隔)从折线中获取纬度和经度坐标。然后为他们分配一个标记以弹出叠加项目上的信息。