シェイプ

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。
プラットフォームを選択: Android iOS JavaScript

Maps SDK for iOS では、地図に図形を簡単に追加する方法がいくつか用意されています。サポートされている図形は、以下のとおりです。

  • ポリラインは、連結された一連の線分です。任意の形状に変更し、マップ上にパスやルートを示すために使用できます。
  • ポリゴンは閉じたシェイプです。地図上の領域をマーキングするために使用できます。
  • 円は、地表面上に円を地理的に正確に投影したものです。

各図形の外観は、さまざまな方法で変更できます。

ポリライン

ポリラインを使用すると、地図上に線を描画できます。GMSPolyline オブジェクトは、順序付けされた一連の場所を表し、一連の線分として表示されます。GMSStrokeStyle でポリラインの色を設定できます。

ポリラインを作成するには、2 つ以上の地点を含む、対応する GMSMutablePath オブジェクトを作成して、そのパスを指定する必要があります。各 CLLocationCoordinate2D は、地表面上の 1 点を表します。線分は、経路に追加する順序に従って、ポイント間に描画されます。addCoordinate: メソッドまたは addLatitude:longitude: メソッドを使用して、パスにポイントを追加できます。

Swift

let path = GMSMutablePath()
path.add(CLLocationCoordinate2D(latitude: -33.85, longitude: 151.20))
path.add(CLLocationCoordinate2D(latitude: -33.70, longitude: 151.40))
path.add(CLLocationCoordinate2D(latitude: -33.73, longitude: 151.41))
let polyline = GMSPolyline(path: path)
      

Objective-C

GMSMutablePath *path = [GMSMutablePath path];
[path addCoordinate:CLLocationCoordinate2DMake(-33.85, 151.20)];
[path addCoordinate:CLLocationCoordinate2DMake(-33.70, 151.40)];
[path addCoordinate:CLLocationCoordinate2DMake(-33.73, 151.41)];
GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];
      

ポリラインを追加する

  1. GMSMutablePath オブジェクトを作成する。
  2. addCoordinate: メソッドまたは addLatitude:longitude: メソッドを使用して、パス内のポイントを設定します。
  3. パスを引数として使用して、新しい GMSPolyline オブジェクトをインスタンス化します。
  4. 必要に応じて、strokeWidthstrokeColor などの他のプロパティを設定します。
  5. GMSPolylinemap プロパティを設定します。
  6. ポリラインが地図上に表示されます。

次のコード スニペットでは、マップに長方形を追加しています。

Swift

let rectanglePath = GMSMutablePath()
rectanglePath.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0))
rectanglePath.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.0))
rectanglePath.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.2))
rectanglePath.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.2))
rectanglePath.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0))

let rectangle = GMSPolyline(path: path)
rectangle.map = mapView
      

Objective-C

GMSMutablePath *rectanglePath = [GMSMutablePath path];
[rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)];
[rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.45, -122.0)];
[rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.45, -122.2)];
[rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.36, -122.2)];
[rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)];

GMSPolyline *rectangle = [GMSPolyline polylineWithPath:path];
rectangle.map = mapView;
      

矩形ポリライン

ポリラインの削除

GMSPolylinemap プロパティを nil に設定することで、地図からポリラインを除去できます。あるいは、GMSMapView clear メソッドを呼び出すことにより、現在マップ上にあるすべてのオーバーレイ(ポリラインやその他のシェイプを含む)を削除することもできます。

Swift

mapView.clear()
      

Objective-C

[mapView clear];
      

ポリラインをカスタマイズする

GMSPolyline オブジェクトには、ラインの外観を制御する複数のプロパティが用意されています。次のオプションを使用できます。

strokeWidth
画面ポイントを示す、行全体の幅。デフォルトは 1 です。地図が拡大されても、この幅は拡大されません。
geodesic
YES の場合、このポリラインのエッジは測地線としてレンダリングします。測地線セグメントは、地表面に沿った最短のパスに従うため、メルカトル図法を使用しているマップでは曲線として表示されます。非測地線セグメントは、マップ上に直線として描画されます。デフォルトは NO です。
spans
ポリラインの 1 つ以上のセグメントの色を指定するために使用します。spans プロパティは、GMSStyleSpan オブジェクトの配列です。ポリラインの色を変更するには、spans プロパティを設定することをおすすめします。
strokeColor
ポリラインの色を指定する UIColor オブジェクト。デフォルトは blueColor です。spans が設定されている場合、strokeColor プロパティは無視されます。

次のスニペットでは、測地線補完を使用してメルボルンからパースに太いポリラインを追加しています。

Swift

let path = GMSMutablePath()
path.addLatitude(-37.81319, longitude: 144.96298)
path.addLatitude(-31.95285, longitude: 115.85734)
let polyline = GMSPolyline(path: path)
polyline.strokeWidth = 10.0
polyline.geodesic = true
polyline.map = mapView
      

Objective-C

GMSMutablePath *path = [GMSMutablePath path];
[path addLatitude:-37.81319 longitude:144.96298];
[path addLatitude:-31.95285 longitude:115.85734];
GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];
polyline.strokeWidth = 10.f;
polyline.geodesic = YES;
polyline.map = mapView;
      

地図に追加した後でポリラインを変更するには、GMSPolyline オブジェクトを保持します。

Swift

polyline.strokeColor = .blue
      

Objective-C

polyline.strokeColor = [UIColor blueColor];
      

ポリラインの色を変更する

ポリラインは、マップ上に一連のセグメントとして描画されます。個々のセグメントまたはライン全体の色は、spans プロパティを使用して変更できます。このプロパティを使用すると、ポリラインの色の色を細かく制御できますが、ライン全体に 1 つのスタイルを簡単に適用できる便利な機能がいくつかあります。

次のスニペットでは、spanWithColor: メソッドを使用して、行全体の色を赤色に変更しています。

Swift

polyline.spans = [GMSStyleSpan(color: .red)]
      

Objective-C

polyline.spans = @[[GMSStyleSpan spanWithColor:[UIColor redColor]]];
      

または、すでに GMSStrokeStyle オブジェクトにアクセスできる場合は、spanWithStyle: メソッドを使用します。

Swift

let solidRed = GMSStrokeStyle.solidColor(.red)
polyline.spans = [GMSStyleSpan(style: solidRed)]
      

Objective-C

GMSStrokeStyle *solidRed = [GMSStrokeStyle solidColor:[UIColor redColor]];
polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed]];
      

Maps SDK for iOS のバージョン 1.7 以前は、1 つのプロパティ strokeColorGMSPolyline の色全体を設定できました。spans プロパティは strokeColor よりも優先されます。

Swift

polyline.strokeColor = .red
      

Objective-C

polyline.strokeColor = [UIColor redColor];
      

スタイル

アプリで同じストローク色を数回適用する場合は、再利用可能なスタイルを定義すると便利です。ポリラインのスタイルは、GMSStrokeStyle オブジェクトを使用して指定します。ストローク スタイルは単色でも、別の色からグラデーションでもかまいません。スタイルを作成したら、spanWithStyle: メソッドを使用して GMSStyleSpan に適用できます。

Swift

// Create two styles: one that is solid blue, and one that is a gradient from red to yellow
let solidBlue = GMSStrokeStyle.solidColor(.blue)
let solidBlueSpan = GMSStyleSpan(style: solidBlue)
let redYellow = GMSStrokeStyle.gradient(from: .red, to: .yellow)
let redYellowSpan = GMSStyleSpan(style: redYellow)
      

Objective-C

// Create two styles: one that is solid blue, and one that is a gradient from red to yellow
GMSStrokeStyle *solidBlue = [GMSStrokeStyle solidColor:[UIColor blueColor]];
GMSStyleSpan *solidBlueSpan = [GMSStyleSpan spanWithStyle:solidBlue];
GMSStrokeStyle *redYellow =
    [GMSStrokeStyle gradientFromColor:[UIColor redColor] toColor:[UIColor yellowColor]];
GMSStyleSpan *redYellowSpan = [GMSStyleSpan spanWithStyle:redYellow];
      

span のスタイルは、ポリラインの終端まで、または新しいスタイルが設定されるまで継続します。ポリラインの spans プロパティを単一の GMSStyleSpan に設定することで、ライン全体の色を変更できます。以下のスニペットは、ポリラインの全長にグラデーションを適用する方法を示しています。

Swift

polyline.spans = [GMSStyleSpan(style: redYellow)]
      

Objective-C

polyline.spans = @[[GMSStyleSpan spanWithStyle:redYellow]];
      

個々の線分の色を変更する

ポリラインの各セグメントを個別にスタイル設定するには、GMSStyleSpan オブジェクトの配列を作成し、それを spans プロパティに渡します。デフォルトでは、配列の各アイテムが対応する線分の色に設定されます。行内のセグメントよりも多くの要素が配列内にある場合、余分な要素は無視されます。配列内の要素が少ない場合、最後の GMSStyleSpan は残りの行の色を示します。

色ポリラインやグラデーション ポリラインを使用して、ポリラインに沿った高度や速度などの変化を示すことができます。以下のスニペットでは、ポリラインの最初の 2 つのセグメントの色を赤色に設定し、残りの線を赤から黄色へのグラデーションに設定しています。

Swift

polyline.spans = [
  GMSStyleSpan(style: solidRed),
  GMSStyleSpan(style: solidRed),
  GMSStyleSpan(style: redYellow)
]
      

Objective-C

polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed],
                   [GMSStyleSpan spanWithStyle:solidRed],
                   [GMSStyleSpan spanWithStyle:redYellow]];
      

spanWithStyle:segments: メソッドを使用して、複数のセグメントのスタイルを一度に設定できます。たとえば、次のコードは上記と同等です。最後の GMSStyleSpan のセグメントの長さは常に無視されます。スタイルは、残りの行を記述するために使用されるためです。

Swift

polyline.spans = [
  GMSStyleSpan(style: solidRed, segments:2),
  GMSStyleSpan(style: redYellow, segments:10)
]
      

Objective-C

polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed segments:2],
                   [GMSStyleSpan spanWithStyle:redYellow segments:10]];
      

小数セグメント

セグメントは小数値として指定することもできます。これにより、スタイルが小数部分のセグメントに適用され、単一セグメントに分割される可能性があります。各 GMSStyleSpan は、前のセグメントの直後に開始します。次の例では、灰色は 2 番目のセグメントから 1/2 に始まり、3 番目のセグメントから 1/2 まで続きます。

Swift

polyline.spans = [
  GMSStyleSpan(style: solidRed, segments: 2.5),
  GMSStyleSpan(color: .gray),
  GMSStyleSpan(color: .purple, segments: 0.75),
  GMSStyleSpan(style: redYellow)
]
      

Objective-C

polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed segments:2.5],
                   [GMSStyleSpan spanWithColor:[UIColor grayColor]],
                   [GMSStyleSpan spanWithColor:[UIColor purpleColor] segments:0.75],
                   [GMSStyleSpan spanWithStyle:redYellow]];
      

ポリラインに繰り返しのカラーパターンを追加する

ポリラインにパターンを追加する場合は、GMSGeometryUtilsGMSStyleSpans ユーティリティ メソッドを使用できます。GMSStyleSpans メソッドは、繰り返しパターンを定義する 2 つの配列を受け入れます。配列の 1 つに繰り返すスタイルを設定し、もう 1 つの配列で繰り返しの間隔を定義します。組み合わせて、ポリラインの長さや使用可能なセグメント数に関係なく、どのポリラインにも適用できるパターンを作成できます。

たとえば、次のコード スニペットでは、黒と白の交互のパターンのポリラインを定義しています。長さはメートル系に沿って扱われます(メルカトル図法では、これは直線です)。タイプは kGMSLengthRhumb で指定されます。

Swift

let styles = [
  GMSStrokeStyle.solidColor(.white),
  GMSStrokeStyle.solidColor(.black)
]
let lengths: [NSNumber] = [100000, 50000]
polyline.spans = GMSStyleSpans(
  polyline.path!,
  styles,
  lengths,
  GMSLengthKind.rhumb
)
      

Objective-C

NSArray *styles = @[[GMSStrokeStyle solidColor:[UIColor whiteColor]],
                    [GMSStrokeStyle solidColor:[UIColor blackColor]]];
NSArray *lengths = @[@100000, @50000];
polyline.spans = GMSStyleSpans(polyline.path, styles, lengths, kGMSLengthRhumb);
      

ポリゴン

ポリゴンは、ポリラインの一連の座標で構成された順序で構成されるという点で、ポリラインと似ています。ただし、ポリゴンは終端部が開いておらず、閉ループ内の実線の領域を定義するように設計されています。ポリゴンは、Maps SDK for iOS では GMSPolygon クラスによって定義されます。

GMSPolygon は、GMSPolyline を追加するのと同じ方法でマップに追加できます。まず、対応する GMSMutablePath オブジェクトを作成し、これにポイントを追加してパスを指定します。これらのポイントにより、ポリゴンのアウトラインが形成されます。各 CLLocationCoordinate2D は、地表面上の 1 点を表します。線分は、経路に追加する順序に従って、ポイント間に描画されます。

ポリゴンを追加する

  1. GMSMutablePath オブジェクトを作成する。
  2. addCoordinate: メソッドまたは addLatitude:longitude: メソッドを使用して、パス内のポイントを設定します。これらのポイントにより、ポリゴンのアウトラインが形成されます。
  3. パスを引数として使用して、新しい GMSPolygon オブジェクトをインスタンス化します。
  4. 必要に応じて、strokeWidthstrokeColorfillColor などの他のプロパティを設定します。
  5. GMSPolygon.map プロパティを設定して、GMSMapView オブジェクトにポリゴンを割り当てます。
  6. 地図上にポリゴンが表示されます。

次のコード スニペットでは、マップに長方形を追加しています。

Swift

// Create a rectangular path
let rect = GMSMutablePath()
rect.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0))
rect.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.0))
rect.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.2))
rect.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.2))

// Create the polygon, and assign it to the map.
let polygon = GMSPolygon(path: rect)
polygon.fillColor = UIColor(red: 0.25, green: 0, blue: 0, alpha: 0.05);
polygon.strokeColor = .black
polygon.strokeWidth = 2
polygon.map = mapView
      

Objective-C

// Create a rectangular path
GMSMutablePath *rect = [GMSMutablePath path];
[rect addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)];
[rect addCoordinate:CLLocationCoordinate2DMake(37.45, -122.0)];
[rect addCoordinate:CLLocationCoordinate2DMake(37.45, -122.2)];
[rect addCoordinate:CLLocationCoordinate2DMake(37.36, -122.2)];

// Create the polygon, and assign it to the map.
GMSPolygon *polygon = [GMSPolygon polygonWithPath:rect];
polygon.fillColor = [UIColor colorWithRed:0.25 green:0 blue:0 alpha:0.05];
polygon.strokeColor = [UIColor blackColor];
polygon.strokeWidth = 2;
polygon.map = mapView;
      

ポリゴンの外観は、マップに追加する前でも、マップに追加した後でもカスタマイズできます。

ポリゴンを削除する

GMSPolygon.map プロパティを nil に設定し、layer を親から切り離して、ポリゴンを削除します。

Swift

 polygon.map = nil
 polygon.layer.removeFromSuperLayer()

Objective-C

 polygon.map = nil;
 [polygon.layer removeFromSuperlayer];
 

汎用の GMSPolygon クラスに加えて、Maps SDK for iOS には GMSCircle も含まれており、地表面上に円を簡単に描画できます。

円を作成するには、次の 2 つのプロパティを指定する必要があります。

  • CLLocationCoordinate2D による position
  • radius(メートル単位)

これにより、指定された center から radius メートルの地点にある、地表面上のすべてのポイントのセットとして円が定義されます。Maps API で使用されているメルカトル図法では、地球が平面上にレンダリングされるため、この円はマップの赤道付近ではほぼ完全な円として表示されますが、円が赤道から遠ざかるにつれて、(画面上の表示では)歪んだ円となっていきます。

円を追加する

次のコード スニペットでは、マップに円を追加しています。

Swift

let circleCenter = CLLocationCoordinate2D(latitude: 37.35, longitude: -122.0)
let circle = GMSCircle(position: circleCenter, radius: 1000)
circle.map = mapView
      

Objective-C

CLLocationCoordinate2D circleCenter = CLLocationCoordinate2DMake(37.35, -122.0);
GMSCircle *circle = [GMSCircle circleWithPosition:circleCenter
                                         radius:1000];
circle.map = mapView;
      

円の外観は、マップに追加する前でも、マップに追加した後でもカスタマイズできます。

円のカスタマイズ

GMSCircle のプロパティを変更して、カスタムの色とストロークの幅を指定できます。次のオプションを使用できます。

fillColor
円の内部の色を指定する UIColor オブジェクト。デフォルトは透明です。
strokeColor
円の輪郭の色を指定する UIColor オブジェクト。デフォルトでは blackColor に設定されます。
strokeWidth
スクリーン ポイントにおける円の輪郭の太さ。デフォルトは 1 です。地図が拡大されても、太さはスケーリングされません。

次のスニペットでは、半透明の赤色の外観を持つ太い赤色の円が追加されます。

Swift

circle.fillColor = UIColor(red: 0.35, green: 0, blue: 0, alpha: 0.05)
circle.strokeColor = .red
circle.strokeWidth = 5
      

Objective-C

circle.fillColor = [UIColor colorWithRed:0.25 green:0 blue:0 alpha:0.05];
circle.strokeColor = [UIColor redColor];
circle.strokeWidth = 5;
      

中が空洞のポリゴンを作成する

1 つの GMSPolygon オブジェクトで複数のパスを組み合わせて、塗りつぶしリングやドーナツ(ポリゴンの内部にポリゴンの領域を個別のシェイプとして表示する)などの複雑なシェイプを作成できます。複雑な図形は、複数のパスから構成されます。

パスでポリゴンがカバーする最大領域を指定するポリゴンを作成します。次に、ポリゴンの holes プロパティを 1 つ以上の GMSPath オブジェクトの配列として指定します。これにより、ポリゴン内の穴が定義されます。

小さい方のパスが大きい方のパスで完全に囲まれている場合、ポリゴンの一部が削除されているかのように見えます。

次のコードサンプルは、2 つの穴を持つポリゴンを作成します。

Swift

let hydeParkLocation = CLLocationCoordinate2D(latitude: -33.87344, longitude: 151.21135)
let camera = GMSCameraPosition.camera(withTarget: hydeParkLocation, zoom: 16)
let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
mapView.animate(to: camera)

let hydePark = "tpwmEkd|y[QVe@Pk@BsHe@mGc@iNaAKMaBIYIq@qAMo@Eo@@[Fe@DoALu@HUb@c@XUZS^ELGxOhAd@@ZB`@J^BhFRlBN\\BZ@`AFrATAJAR?rAE\\C~BIpD"
let archibaldFountain = "tlvmEqq|y[NNCXSJQOB[TI"
let reflectionPool = "bewmEwk|y[Dm@zAPEj@{AO"

let hollowPolygon = GMSPolygon()
hollowPolygon.path = GMSPath(fromEncodedPath: hydePark)
hollowPolygon.holes = [GMSPath(fromEncodedPath: archibaldFountain)!, GMSPath(fromEncodedPath: reflectionPool)!]
hollowPolygon.fillColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 0.2)
hollowPolygon.strokeColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
hollowPolygon.strokeWidth = 2
hollowPolygon.map = mapView
      

Objective-C

CLLocationCoordinate2D hydeParkLocation = CLLocationCoordinate2DMake(-33.87344, 151.21135);
GMSCameraPosition *camera = [GMSCameraPosition cameraWithTarget:hydeParkLocation
                                                           zoom:16];
mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];

NSString *hydePark = @"tpwmEkd|y[QVe@Pk@BsHe@mGc@iNaAKMaBIYIq@qAMo@Eo@@[Fe@DoALu@HUb@c@XUZS^ELGxOhAd@@ZB`@J^BhFRlBN\\BZ@`AFrATAJAR?rAE\\C~BIpD";
NSString *archibaldFountain = @"tlvmEqq|y[NNCXSJQOB[TI";
NSString *reflectionPool = @"bewmEwk|y[Dm@zAPEj@{AO";

GMSPolygon *hollowPolygon = [[GMSPolygon alloc] init];
hollowPolygon.path = [GMSPath pathFromEncodedPath:hydePark];
hollowPolygon.holes = @[[GMSPath pathFromEncodedPath:archibaldFountain],
                  [GMSPath pathFromEncodedPath:reflectionPool]];
hollowPolygon.fillColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.2];
hollowPolygon.strokeColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0];
hollowPolygon.strokeWidth = 2;
hollowPolygon.map = mapView;