2009年5月19日

地図/LatLongLab

「うごけ!道案内」で地図プログラミング

  • このエントリーをはてなブックマークに追加

こんにちは。LatLongLabの大野です。
今回はLatLongLabのβサービスの一つである「うごけ!道案内」をご紹介したいと思います。
みなさんはこのサービスをご覧になって、どんなことができるサービスだとお感じになりましたか?
“道案内を作って投稿できるサービスだよね”と思ったそこのアナタ! それは大きな間違いです!!
「うごけ!道案内」は、MS-DOSのバッチファイル風にコマンドを並べるだけで地図を思い通りに動かせるプログラミングツールなのです。


プログラミングをはじめてみよう!

「うごけ!道案内」でプログラミングをはじめるには、道案内作成ページを開き、左上の「→アドバンスモードに変更」というリンクをクリックする必要があります。
また、以下のリンクをブックマークしておくと、いきなりアドバンスモードで開くことができて便利です。

http://latlonglab.yahoo.co.jp/macro/create.rb?mode=advance

アドバンスモードにすると、地図の右側にスクリプトを入力できるエリアが現れます。ここに地図操作コマンドを並べていくことで、プログラムを作成することができます。
作成したプログラムは左にある「プレビュー」というボタンをクリックすると動作確認することができます。


コマンドを使ってみよう!

ここでは、「うごけ!道案内」で使えるコマンドをご紹介します。


-moveto, layerto, sleep

まず、最も基本的な3つのコマンドです。それぞれ以下のように使います。

moveto 緯度,経度
layerto レイヤーID
sleep ミリ秒

movetoは指定した緯度経度に地図を移動させるコマンドです。緯度経度は作成ページの地図の下に表示されていますので、それをコピペすると楽でしょう。
layertoは地図の縮尺を変更するコマンドです。レイヤーIDも地図の下に表示されいます。
sleepは指定時間待つコマンドです。そのままでは目で追えない速さで地図が動いてしまいますので、適宜sleepを挟みます。

以下のサンプルはデフォルトの位置(35/39/38.025,139/43/44.86)から2秒後に(35/39/58.098,139/43/52.526)に移動し、1秒後に縮尺を切り替えるスクリプトです。
※スクリプトの最初に書かれているmovetoおよびlayertoの位置がデフォルトの位置になります。


-smoveto

movetoは指定した場所に瞬時に移動しましたが、代わりにsmovetoを使うと滑らかに移動することができます。

smoveto 緯度,経度

使い方はmovetoとまったく同じです。smovetoを使うと、移動する前と後の位置関係がわかりやすくなります。

以下のサンプルは、先ほどのサンプルのmovetoをsmovetoに変えたものです。比べていただくと違いがわかるかと思います。


-message, messagewp

messageおよびmessagewpは地図上に吹き出しでメッセージを表示するコマンドです。

message 文字列
messagewp 文字列 FlickrID

文字列は表示したいメッセージです。messagewpはメッセージとともにFlickrの写真(画像)も表示することができますので、Flickrの写真IDを指定します。
※例えばFlickrの写真ページのURLが https://www.flickr.com/photos/latlonglab/11100001111/ なら、写真IDは 11100001111 になります。
メッセージは地図が移動すると自動的に消えてしまうため、messageの後にはsleepを挟むのが一般的です。

以下のサンプルでは、デフォルトの位置と移動先でそれぞれメッセージを表示しています。


-ask, askwp, goto, exit

askはユーザーに選択させるプロンプトを表示します。

ask 文字列 選択肢1 選択肢2 ...
askwp 文字列 FlickrID 選択肢1 選択肢2 ...
goto ラベル名
exit

askは最初の選択肢を選択した場合は次の行を実行、その次の選択肢を選択した場合はその次の行を実行、という具合に、ask行およびそれに続く選択肢の数だけの行で構成されます。
askが行うのはそれぞれの行への分岐だけであり、それぞれの行は通常のスクリプト同様に実行されます。
したがって、askはgotoとともに使われることがほとんどです。
gotoは「:ラベル名」という行にスクリプトの実行位置を移動します。
ラベル行はコロン(:)で始め、スペースを空けずラベル名を記述してください。
gotoコマンドで指定するラベル名にはコロンが付かないことに注意してください。
askwpはaskの写真つきバージョンです。写真の指定の仕方はmessagewpと同じです。

exitはスクリプトを終了するコマンドです。分岐を使用するとスクリプトの最後以外で終了したい場合がありますので、このコマンドを使用します。

以下のサンプルではユーザーの選択によって表示するメッセージを変えています。


-set, prompt

set, promptは変数に文字列を代入するコマンドです。

set 変数名 文字列
prompt 文字列 変数名

setは変数に引数の文字列を、promptはユーザーが入力した文字列を代入します。
promptの引数の文字列は表示するメッセージです。
ここで変数というものが登場しましたが、この変数は後述のswitchで利用できるほか、messageやaskコマンドなどで「%変数名%」と書くことで変数展開することができます。
変数名は英数字のみ使用可能です。

以下のサンプルではsetおよびpromptで代入した文字列をmessageコマンドで表示しています。


-swicth

swicthは変数で分岐するコマンドです。

switch 変数名 選択肢1 選択肢2 ...

変数の中身が最初の選択肢と一致したら次の行を実行、その次の選択肢と一致した場合はその次の行を実行、という具合にswitch行およびそれに続く選択肢の数だけの行で構成されます。
ただし一致しなかった場合は、最後の選択肢の次の行を実行します。

以下のサンプルでは、promptでユーザーが入力した文字列によって表示するメッセージを変えています。


-rand

randはランダムに分岐するコマンドです。

rand 数値

rand行に続く、「数値」に指定した値の数の行のうち、いずれかに分岐します。

以下のサンプルでは、3つメッセージのうちのどれかをランダムに表示します。


楽しみ方は無限大!

いかがでしたか? 意外と簡単にプログラミングできることがおわかりいただけたかと思います。
このようなコマンドを駆使すると、こののようなRPG風のゲームや、

このような地図を使ったクイズも作れます。

まさにアイデアしだいで可能性は無限大に広がります。
なお、すでに投稿された道案内はすべてスクリプトのソースを見ることが可能ですので、プログラミングの参考になると思います。
あなたも地図を使ったプログラミングにチャレンジしてみませんか?

Enjoy Map Scripting!

LatLongLab
うごけ!道案内

Yahoo! JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。

  • このエントリーをはてなブックマークに追加