jarinosuke blog

about software engineering, mostly about iOS

Yahoo!地図SDK for iPhone、触ってみました。

Yahoo!地図 SDK for iPhone

先日公開されたYahoo!地図 SDK for iPhoneのチュートリアルを行いました。
このSDKはYMapKitとして配布されているので、それをプロジェクトに追加して使用します。
チュートリアルについての詳細は付属のドキュメントが分かりやすいので、そちらを参照しましょう。
以降Yahoo!地図 SDK for iPhoneのことを省略してYMapKitと呼びます。
このSDKを触ってみて、iOS SDK付属のMapKitとの違いなども含めて気がついた特徴を書きたいと思います。
また、ここに書いてあるYMapKitに関する感想などは個人の感想です。

個人的感想

MapKit互換がすごい

ほぼiOS SDK付属フレームワークのMapKitフレームワークと互換しています。
戸惑うことはほとんどありません。クラス名なども基本的にYが頭に付くだけです。
ただ一点気になることがあったとすれば、地図のプロパティ宣言の方法です。
以下のように、MapViewを定義します。

map = [[YMKMapView alloc] initWithFrame:CGRectMake(0, 0, 400, 400) appid:appID];
  
     NSMutableArray* ary=[NSMutableArray array];
  
     [ary addObject:[NSString stringWithFormat:@"off:figure"]];
     [ary addObject:[NSString stringWithFormat:@"off:label"]];
     [ary addObject:[NSString stringWithFormat:@"on:road"]];
     [ary addObject:[NSString stringWithFormat:@"on:rail"]];
     [ary addObject:[NSString stringWithFormat:@"on:station"]];
     [ary addObject:[NSString stringWithFormat:@"on:water"]];
     [ary addObject:[NSString stringWithFormat:@"on:pref_boundary"]];
     [ary addObject:[NSString stringWithFormat:@"on:railway_name"]];
     [ary addObject:[NSString stringWithFormat:@"on:station_name"]];
     [ary addObject:[NSString stringWithFormat:@"off:shading"]];
  
     [map setMapType:YMKMapTypeStyle MapStyle:@"standard" MapStyleParam:ary];

どのオブジェクトを表示するか、表示しないか、などの設定を、

[on | off] : <property_name>

で配列にappendします。順番なども関係ありません。
Web APIを基準で考えられたなのか詳しくは分かりませんが、このような設定方法だと表示非表示を変えるだけでも、文字列の置換などを行わなければならず、少し難しいなぁと感じてしまいました。

地図がオブジェクトで管理されている

触ってみて一番印象に残ったのは、これでした。
たとえばYMapKitでは地図のStyleを変更できます。
この機能はもちろんGoogle Mapを用いているMapKitでも、

enum {
   MKMapTypeStandard,
   MKMapTypeSatellite,
   MKMapTypeHybrid
};
typedef NSUInteger MKMapType;

と、三種類ありました。
YMapKitもtypeは、StandardとSatelliteとChikaの三つですが、StandardTypeでは多くのStyleを設定することが出来ます。
これも地図がオブジェクト指向で管理されているからだと思います。
またChikaマップについてもカバーする範囲こそ狭いものの、標準MapKitには無い機能です。
そのStyleですが、以下の通りです。見本としていくつか画像として残しました。これ以外にもたくさんあります。

f:id:jarinosuke0808:20110211184503p:image

次にその肝心のオブジェクトについても書きます。
地図上で管理されているオブジェクトは大きく三つのツリーに分けられていて、Label(表記)、Figure(表面)、Shading(画像)になります。
全て挙げていくとキリが無いので、以下に簡単な図を載せてみました。

f:id:jarinosuke0808:20110211184504p:image

このような感じで管理されており、親オブジェクトをONにすれば子は全てONになり地図上に表示されます。
ちなみにLabelとShadingでは同じオブジェクト名(たとえばstore01など)があるのですが、これは表記と画像が別々で管理されているためです。

終わりに

まだまだ触り始めたばかりですが、なかなか良いと思います。
特に地図の表示部分がカスタマイズしやすいので、デベロッパーにはありがたいですね。
もう少し触ってみたいと思いました。