スポット(地図上の場所)は、対応するアイコンとともに基本地図にデフォルトで表示されます。公園、学校、政府機関などもスポットに該当します。また、地図タイプが kGMSTypeNormal
の場合は、ビジネス スポットがデフォルトで地図に表示されます。ビジネス スポットは、店舗、レストラン、ホテルなどを表します。
スポットは、Places SDK for iOS で定義されるプレイス ID に対応しています。たとえば、遊園地はスポットですが、噴水などの物体は、通常は(国民的または歴史的に重要と認められていない限り)スポットではありません。
スポットに対するクリック イベントをリッスンする
ユーザーによるスポットへのタップに応答するには、次の例に示すように GMSMapViewDelegate
を実装し、mapView(_:didTapPOIWithPlaceID:name:location:)
メソッドを実装します。
Swift
import GoogleMaps class POI: UIViewController, GMSMapViewDelegate { override func loadView() { let camera = GMSCameraPosition.camera( withLatitude: 47.603, longitude:-122.331, zoom:14 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) mapView.delegate = self self.view = mapView } func mapView( _ mapView: GMSMapView, didTapPOIWithPlaceID placeID: String, name: String, location: CLLocationCoordinate2D ) { print("You tapped \(name): \(placeID), \(location.latitude)/\(location.longitude)") } }
Objective-C
#import "POI.h" @import GoogleMaps; @interface POI () <GMSMapViewDelegate> @end @implementation POI - (void)loadView { GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:47.603 longitude:-122.331 zoom:14]; GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; mapView.delegate = self; self.view = mapView; } #pragma mark - GMSMapViewDelegate - (void)mapView:(GMSMapView *)mapView didTapPOIWithPlaceID:(NSString *)placeID name:(NSString *)name location:(CLLocationCoordinate2D)location { NSLog(@"You tapped %@: %@, %f/%f", name, placeID, location.latitude, location.longitude); } @end
情報ウィンドウに詳細を表示する
POI はデフォルトでマップに表示されますが、デフォルトの on-click UI は存在しません(ユーザーが POI をタップしたときに、API が自動的に情報ウィンドウなどのユーザー インターフェースを表示することはありません)。次の例は、マーカーを使用して POI の情報ウィンドウを表示する方法を示しています。
Swift
// Declare GMSMarker instance at the class level. let infoMarker = GMSMarker() // Attach an info window to the POI using the GMSMarker. func mapView( _ mapView: GMSMapView, didTapPOIWithPlaceID placeID: String, name: String, location: CLLocationCoordinate2D ) { infoMarker.snippet = placeID infoMarker.position = location infoMarker.title = name infoMarker.opacity = 0; infoMarker.infoWindowAnchor.y = 1 infoMarker.map = mapView mapView.selectedMarker = infoMarker }
Objective-C
// Declare a GMSMarker instance at the class level. GMSMarker *infoMarker; // Attach an info window to the POI using the GMSMarker. - (void)mapView:(GMSMapView *)mapView didTapPOIWithPlaceID:(NSString *)placeID name:(NSString *)name location:(CLLocationCoordinate2D)location { infoMarker = [GMSMarker markerWithPosition:location]; infoMarker.snippet = placeID; infoMarker.title = name; infoMarker.opacity = 0; CGPoint pos = infoMarker.infoWindowAnchor; pos.y = 1; infoMarker.infoWindowAnchor = pos; infoMarker.map = mapView; mapView.selectedMarker = infoMarker; }
地図にスポットが表示されないようにする
スポットを非表示にするには、すべてのスポットまたは該当のカテゴリのスポットにカスタム スタイルを適用します。
次の JSON スタイル宣言を使用すると、地図上のすべてのビジネス スポットを非表示にすることができます。
[
{
"featureType": "poi.business",
"stylers": [
{ "visibility": "off" }
]
}
]
別の例として、次の JSON を使用してすべてのカテゴリのスポットの表示を簡素化することもできます。
[
{
"featureType": "poi",
"stylers": [
{ "visibility": "simplified" }
]
}
]
詳しくは、スタイル設定でマップの地物を非表示にするためのガイドをご覧ください。