その5: Shapes (Google Maps SDK for iOS)
Shapes
Polylines
Polylineは地図上に線を書くためのもの。 GMSPolylineオブジェクトは座標の並びを表し、指定した色や太さで一連の線分を描画する。
Polylineを作成するには、GMSMutablePathオブジェクトを作って座標群を格納してPathを作り、それをGMSPolylineオブジェクトに設定する。
座標は地表の点を示すCLLocationCoordinate2Dで指定する。それぞれの点間は追加された順に線で結ばれる。Pathに点を追加するにはaddCoordinate:かaddLatitude:longitude:を使用する。
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];
Add a polyline
- GMSMutablePathオブジェクトを生成
- addCoordinate: か addLatitude:longitude: メソッドでPathに点を追加
- GMSPolylineオブジェクトを+polylineWithPath:で2のPathを指定して生成
- 必要に応じて線の幅や色等のプロパティを設定
- mapプロパティにGMSMapViewを設定
- マップ上にpolylineが表示される
以下はマップ上に矩形のpolylineを表示するサンプル
GMSMutablePath *path = [GMSMutablePath path];
[path addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)];
[path addCoordinate:CLLocationCoordinate2DMake(37.45, -122.0)];
[path addCoordinate:CLLocationCoordinate2DMake(37.45, -122.2)];
[path addCoordinate:CLLocationCoordinate2DMake(37.36, -122.2)];
[path addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)];
GMSPolyline *rectangle = [GMSPolyline polylineWithPath:path];
rectangle.map = mapView_;
Remove a polyline
GMSPolylineオブジェクトのmapプロパティをnilにすればマップからpolylineを削除できる。 また、GMSMapViewのclearメソッドなら、マップ上の全てのOverlay(polylineや他のshape)を消去できる。
polyline.map = nil;
[mapView_ clear];
polylineをマップに追加したあとでpolylineに変更を加えたいなら、そのpolylineオブジェクトを保持しておけばよい。後でこのオブジェクトを使って変更が可能である。
polyline.strokeColor = [UIColor blackColor];
Customize a polyline
Polylineは線分が連なったものとして地図に描画されるが、GMSPolylineオブジェクトを変更することで色と太さを変えられる。
strokeColor
UIColorオブジェクトで、線の色を指定する。デフォルトはblueColor
strokeWidth
線の太さをスクリーンのポイント(pixel)で指定する。デフォルトは1。ズームしても線の太さは一定のままスケーリングされない。
geodesic
YESならpolylineは測地線となる。測地線は、地表面に沿った線で、メルカトル図法のマップ上では、短い距離は直線で、ある程度長くなると曲線で表示されることになる。デフォルトはNO.
以下はメルボルンからパースまでの緑色のpolylineをgeodesicで設定する例
GMSMutablePath *path = [GMSMutablePath path];
[path addLatitude:-37.81319 longitude:144.96298];
[path addLatitude:-31.95285 longitude:115.85734];
GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];
polyline.strokeColor = [UIColor greenColor];
polyline.strokeWidth = 10.f;
polyline.geodesic = YES;
polyline.map = mapView_;
マップに追加したあとにpolylineを変更するなら、GMSPolylineオブジェクトを保持しておけばよい。
polyline.strokeColor = [UIColor blueColor];
Polygons
PolygonはPolylineに似ており、点が並んだもので構成されるが、最初と最後が閉じられて輪になるのが特徴。SDKではGMSPolygonクラスとして定義されている。
GMSPolygonは、GMSPolylineと同じ方法でマップに登録する。最初にGMSMutablePathでpathを作成し、それを元にGMSPolylineを生成する。
Add a polygon
- GMSMutablePathオブジェクトを生成
- addCoordinate: か addLatitude:longitude: メソッドで座標を登録。これはpolygonの外側のラインとなる。
- pathを引数としてGMSPolygonオブジェクトを生成
- 線の太さや色、塗りつぶし色を設定
- GMSPolygonのmapプロパティにGMSMapViewオブジェクトをセット
- ポリゴンが表示される
以下はマップ上に矩形のpolygonを追加するサンプル
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)];
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; // 線の太さは2ピクセル
polygon.map = mapView_;
マップに追加したあとにpolygonを変更するなら、GMSPolygonオブジェクトを保持しておけばよい。
Circles
GMSPolygonクラスに加え、Google Maps SDK for iOSでは GMSCircleも用意されており、簡単に地図上に簡単に円を表示できる。
Circleは以下の2つの値で定義される
- CLLocationCoordinate2Dで示される座標
- メートルでの半径
circleは地表での円の中心と半径で定義されるため、メルカトル投影法のGoogleMapsAPIにおいては、赤道付近では真円に近くなるが、そこから極方向へ行くにつれて楕円になっていく。
Add a circle
以下はCircleを追加する例
CLLocationCoordinate2D circleCenter = CLLocationCoordinate2DMake(37.35, -122.0);
GMSCircle* circ = [GMSCircle circleWithPosition:circleCenter radius:1000];
circ.map = mapView;
Customize a circle
Circleは、マップに追加する前でも後でもどちらでも値の変更が可能。GMSCircleで変更可能な値は以下。
fillColor
円の塗り潰し色。デフォルトは透明
strokeColor
円の周囲の線の色。デフォルトは黒
strokeWidth
円の周囲の線の幅。スクリーンのポイント(pixel)で指定。デフォルトは1。ズームしても線の太さは一定のままスケーリングされない
CLLocationCoordinate2D circleCenter = CLLocationCoordinate2DMake(37.35, -122.0); GMSCircle *circ = [GMSCircle circleWithPosition:circleCenter radius:1000]; circ.fillColor = [UIColor colorWithRed:0.25 green:0 blue:0 alpha:0.05]; circ.strokeColor = [UIColor redColor]; circ.strokeWidth = 5; circ.map = mapView;
polylineとpolygonとcircleと、マップ上に図形を描く手段の説明でした。Android版のpolygonのような穴空きはサポートされていませんが、それほど必要性がないってことでしょうか。