したがって、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];
}
作成した文字列のコンポーネント パス (「/」で区切られた) を使用して、ポリラインから緯度と経度の座標を取得できます。次に、オーバーレイ アイテムに情報をポップアップするマーカーを割り当てます。