Xamarinで使える、かも、しれない、マルチプラットフォーム地図エンジンが充実しそうです


3度目の登場、kochizufanです。
今回はXamarin要素薄いですが、専門の地図、位置情報サービス、FOSS4G側に引き寄せた話を。

11月、[FOSS4G OSAKA 2013](http://www.osgeo.jp/イベント/foss4g2013osaka/foss4g2013osakacore/)の懇親会で、下記のようなネタライトニングトークをしゃべらせてもらいました。

[スマホ地図エンジンソムリエの独断偏見地図SDKガイド](http://www.slideshare.net/kokogiko/foss4-g2013-lt)

Xamarinでマルチプラットフォーム地図アプリ作ろうとしてる奴が、マルチプラットフォームで使える高機能の地図エンジン探して、結局オープンソースでも何でもないGoogle Maps SDKに落ち着いたと、Xamarinラッパもあるし、という話だったのですが、その後記事の中で紹介した各エンジンにも各々動きがあり、どうも近いうちに複数の高性能地図エンジンがマルチプラットフォーム環境で充実しそうです。
Xamarinで使えるようになるには、マルチプラットフォーム環境で使えるようになる＋各プラットフォーム環境でのc#バインディングが必要であり、なお一筋縄ではいきませんが、
それでも前提であるマルチプラットフォーム化が進まないとそもそもXamarinでの利用も夢のまた夢ですし、また情報が共有されていれば、興味のある人を募ってみんなでバインディングという事も可能かと思いますので、ここで紹介します。

## Nutiteq maps API

いきなりSDKとしてはオープンソースではないのですが、FOSS4G界の有名な会社、[Nutiteq](http://www.nutiteq.com/)社のmaps APIです。
[Android版SDKサンプル](https://github.com/nutiteq/hellomap3d)がgithubで公開されており、また自社で[Xamarin.Android版のバインディングサンプル](https://github.com/nutiteq/xamarin-map-3d)も公開されている等、Xamarin的には一番利用可能な状況に近いところにあるSDKです。
Xamarin版サンプルは、地図SDKだけではなく、proj.4等のGIS APIのバインディングとしても動作するようです。

デモ動画等は[こちら](http://www.youtube.com/watch?v=gqNeuFI0_VA)。

機能は一般の地図エンジンとしてラスタタイルやベクタデータ、またGISフォーマットに対応して、スマホ特有のマルチタッチによる回転や離散でない連続ズームにも対応する他、鳥瞰的な2.5D表示や、スケッチアップで作成されるような3D立体モデルの表示にも対応しています。

ライセンスは有償商用ライセンスですが、OpenStreetMapをベースマップに使う場合のみ、オープンライセンスとして無償で使う事ができます。
筆者の使いたいユースケースの場合、どうしてもベースマップなしで古地図を単独で呼び出さないといけないような場合があるのですが、そう言う場合は有償じゃないとダメだねー、と直接確認してダメだったのですが、そんな特殊な使い方でなければ、OSMを使えば無償で十分使えるのではないでしょうか。
ベースマップとしてOSMを使い、除去/置き換え可能なI/Fさえ設けておいてやれば上に別の地図をオーバーレイするのは構わない（確認済み）なので、地理院地図も使いたいなあ、みたいなケースもOKです。
有償の場合の価格目安は、以前居た会社でライセンス購入した事があるのですが、その頃は6000ユーロぐらいの額が提示されていましたので、そのレベルのオーダーかと思います（確かサブスクリプションじゃなく買い切りだったはず…）。

Nutiteq APIのマルチプラットフォーム状況ですが、最近[こちらの記事](http://stackoverflow.com/questions/19151324/nutiteq-altusmappingengine-android-mbtiles-mobile-atlas-creator-tilemill)を見つけました。
NutiteqとAltusMappingEngine何が違うの？mbtiles生成ツールの差って何？という質問に、Nutiteq棟梁のJaakさんが答えられていますが、その中で「2013年末までにはiOS」と述べられています。
もう現時点で2013年末ですし、NutiteqはAndroid APIも年単位で開発が遅れた過去があるので、公開時期の正確さは不明ですが、確実にiOSについて動きがある事は間違いないようです。
もし公開されれば、Android版SDKは手づからXamarin対応してくれた実績があるので、Xamarin.iOSへの対応も期待できそうです。

## Altus Mapping Engine

これは、先のライトニングトークの時から特に新しい動きはないのですが、その頃から既にiOS、Androidマルチ対応していた地図エンジンです。
[BA3, LLC社](http://www.ba3.us/)の製品で、[Android版](https://github.com/ba3llc/BA3MappingEngineTutorials)、[iOS版](https://github.com/ba3llc/BA3MappingEngineTutorials)共にgithubで公開されています。
これもオープンソースではありませんが、無償アプリの開発については無償利用ライセンスがあり、また有償の場合も買い切りの他にレベニューシェアが選べるという、面白いライセンス体系になってます。

デモ動画等は[こちら](http://www.ba3.us/?page=pages/gallery)。

この地図エンジンの面白い特徴は、平面地図ではなく球面地図オンリーで勝負しているところです。
大縮尺に拡大すればもちろん平面と大差ないのですが、小縮尺にしていくとどんどん「地図」ではなく「地球」になっていきます。
また、ラスタ画像、ベクタデータ、マーカー、カメラ視点等、あらゆるものがアニメーションしたり動いたりさせる事ができるという特徴があります。
地図画像そのものが動いたり、無数の飛行機マーカーが一斉に動いたりするのを見るのはなかなかに圧巻です。
先のJaakさんの[比較記事](http://stackoverflow.com/questions/19151324/nutiteq-altusmappingengine-android-mbtiles-mobile-atlas-creator-tilemill)でも書かれていましたが、航空、宇宙等用途の視点で作られているようで、そのための機能が多いようです。
確かに、たくさんの航空機や宇宙機の場所をリアルタイム把握したり、気象衛星写真や天気図の移り変わりをダイナミック表示するには、アニメーションや小縮尺地球化は必須でしょう。

Xamarin対応についてですが、現在のところ、既にマルチプラットフォーム対応した「モノ」があるという意味では、c#ラッパーさえ準備すれば使えるのでもっとも利用可能に近いソリューションですが、御製c#ラッパーの作成自体は、直近では予定にないとの事でした。
が、ロードマップにWindows Phoneへのc# API提供が明確に示されていますので、そこまでマルチプラットフォームにこだわるのであれば、いずれXamarin対応もしてくるのではないかと思います。
してくれればいいな…。

## WhirlyGlobe-Maply

[mousebird-consulting](http://mousebirdconsulting.com/)の地図エンジンで、[iOS版](https://github.com/mousebird/WhirlyGlobe)がgithubで公開されています。
なんか2つの名前がくっついたような製品になってますが、同じ技術を元にした球面地図エンジン(WhirlyGlobe)と平面地図エンジン(Maply)がセットになっているためです。
平面地図のみのNutiteq、球面地図のみのAltusに比して、両方入りのがW-Mという感じですが、双方をシームレスに切り替えられるのか、とかまでは確認できていません。
わざわざ別の名前を与えているくらいなのですから、途中での切り替えとかは無理なのかもしれませんね。

デモ動画等は[こちら](http://mousebird.github.io/WhirlyGlobe/)。
十分、他の2エンジンと比較しても抗し得る多機能さです。

またこれは完全に、Apache2.0ライセンスのオープンソースで公開されています。
ブラボー！

マルチプラットフォーム対応ですが、高機能なエンジンだけにAndroidポートの要望も多かったようで、[資金出してくれれば作るよ！という記事](http://mousebirdconsulting.blogspot.jp/2013/06/android-port-begging-for-money.html)を出して話題になりました。…なりました？私が話題にしました。反響は…日本国内では特に…。
で、今回、晴れて[匿名の出資者が出た](http://mousebirdconsulting.blogspot.jp/2013/12/whirlyglobe-maply-for-android.html)ようで、基本部分の開発はそれで賄えて、残機能の開発にもお金はいるけどその間をプライベートベータにした後は、WhirlyGlobe-Maply 3.0の頃にはiOS/Android両方対応でApache2.0に戻すよ、と言われています。
オープンソースとしての公開時期は未定ですが、現在のスポンサーから依頼の基本機能は、冬の終わりには出るとの事です。

マルチプラットフォーム化して後のXamarin対応は未定ですが、ニーズとお金があればやるよ、という感じの方のようなので、スポンサーがつくぐらいニーズと人気が高まれば、あり得るかと思います。
また、上記3 APIどれでも、自分たちでバインディング作れば公式対応してくれなくてもいいわけですが、その野良バインディング作成も、大元がオープンソース＆オープンライセンスなのでやり易いといった面もあるでしょう。

## まとめ

以上、Xamarinあまり関係なかったですが、Xamarinでも使えるようになる可能性のある（バインディングすれば確実に使える）マルチプラットフォーム地図エンジンの最新動向のご紹介でした。
結局投稿は翌日になってしまった…。