酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

最寄り駅検索API(現在地点から最寄り駅を検索するAPI)を作ってたよ

ずいぶん前に、現在地点から最寄り駅を検索するためのAPI(以下、最寄り駅検索API)を作っていました。

最寄り駅検索APIは、過去に@od_10zの「Y!乗換サーチ」に最寄り駅を選択する機能を付けたいけれど、適当なWebAPIがないということで生まれました。

僕が初めてASP.NET MVCを触るキッカケにもなったWebAPIです。ずっと@od_10z専用として稼働させてきたのですが、Azure Webサイトの無料枠のキャパが許しそうですのでブログでも紹介したいと思います。MSCCなどでどんなアプリを作ろうかまだお悩みの方もいらっしゃると思いますのでどうぞお使いください。使い勝手の悪いAPIですが……

あ、アプリやウェブサイトでこのAPIをご利用になられる際には、このブログ(http://blog.ch3cooh.jp/)にリンクを貼っておいて頂けると嬉しいです。

エンドポイント

APIのエンドポイントは以下の通りです。前述の通り、Azure Webサイトの無料モードで動かしています。

パラメータ

パラメータはこのように指定します。

パラメータ 説明 必須?
version バージョン v1
latitude 緯度 35.666815
longitude 経度 139.601426
distance (省略可能) 指定した位置情報を中心とした直径(メートル単位) 省略時は直径1,000m(1km)で検索が実行される

レスポンス

仮に以下のようにパラメータを指定した場合、得られるレスポンスを見てみましょう。

[
  {"company":"京王電鉄","line":"京王線","name":"千歳烏山","distance":149.89850571348183},
  {"company":"京王電鉄","line":"京王線","name":"芦花公園","distance":680.44878514091067}
]

本APIを呼び出すサンプルコード(C#の場合)

まずは事前に位置情報を取得する必要があります。Windows Phoneの場合は「位置情報を取得する」、Windowsストアアプリの場合は「Geolocator(GPS/位置情報測位)を使って位置座標を取得する」にて位置情報の取得方法について記載しています。

取得した緯度・経度を使って、最寄り駅を検索しましょう。

private async void LoadStationDataAsync(double lon, double lat)
{
    var baseURL = "http://moyoristation.azurewebsites.net/moyori?";
    var parms = new Dictionary<string, string>();
    parms["longitude"] = lon.ToString();
    parms["latitude"] = lat.ToString();
    parms["version"] = "v1";
    parms["distance"] = "2000"; // メートル単位

    var uri = baseURL + string.Join("&", 
        parms.Select(item => {
            return string.Format("{0}={1}", item.Key, item.Value);
        }));

    var client = new HttpClient();
    var jsonData = await client.GetStringAsync(new Uri(uri));

    var stations = Windows.Data.Json.JsonArray.Parse(jsonData)
        .Select(item => item.GetObject())
        .Select(item =>
        {
            var company = item.GetNamedString("company");
            var line = item.GetNamedString("line");
            var name = item.GetNamedString("name");
            var distance = item.GetNamedNumber("distance");

            return new { Company = company, Line = line, 
                Name = name, Distance = distance };
         });

    // 取得した最寄り駅情報をバインディングする
    this.DefaultViewModel["Items"] = stations;
}

鉄道運用会社一覧取得API

あまり需要がないと思いますが鉄道運用会社の一覧です。

免責事項

  • このAPIは突然のサービス停止など無保証で提供されます。いかなる損害も保証しません。