ルート線の描画方法

tips_地図へのルート線描画

ルート形状取得 API (/shape_XXX) は、ルート検索した結果を形状として取得することができるAPIです。APIで返却される形式は、他のAPIの返却形式と同じ「JSON」と、地図スクリプトでそのまま利用できる「GeoJSON」の2種類あります。

本稿では「GeoJSON」を使ったルート線の描画方法を紹介します。

GeoJSONとは

地理形状を表現する一般的なフォーマットです。地理情報をJSON形式で表現したもので、ジオメトリ(形状)、フィーチャー(地物)、フィーチャーの集まりで構成されています。

ジオメトリ (Geometry オブジェクト)

形状そのものの情報が含まれています。このオブジェクトのメンバには、type とcoordinates があります。
一般的に、type に設定できる値はいろいろありますが、ルート形状取得 API では「LineString」のみサポートしています。coordinates には緯度経度の配列が返却されます。

フィーチャー (Feature オブジェクト)

上記のジオメトリとそのプロパティが含まれています。このオブジェクトのメンバには、ジオメトリ (geometry) のほかに、type、bbox、propertiesがあります。
type に設定できる値は「Feature」です。properties には、地図スクリプトの描画情報が設定されており、主に線の色、太さ、属性などのメタ情報が返却されます。また、bbox はジオメトリ (geometry) のバウンディングボックスが返却されます。バウンディングボックスとは、図形全体を囲う矩形のことで、緯度経度を最高値から最低値に向かって記述しています。これにより、形状全体が描画される尺度を決定します。

フィーチャーの集まり (FeatureCollection オブジェクト)

上記フィーチャーの集合体です。このオブジェクトのメンバには、フィーチャー (features) のほかに、type、bboxがあります。
type に設定できる値は「FeatureCollection」です。bbox は、ルート形状全体のバウンディングボックスが返却されます。

ルート線の書き方

1.NAVITIME APIのタイル地図スクリプト取得API(/map_script) を用いて地図を表示

※参考: アイコンや図形の描画方法

2.ルート形状取得 API (/shape_XXX) を用いてルート形状を取得

パラメータ構成例

  • 表参道駅から原宿駅のルート形状を取得
/shape_transit?start=35.6652464,139.712327&goal=35.6701678,139.7026999&start_time=2020-06-30T08:00:00&format=geojson

レスポンス例

{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "bbox": [
                139.712293,
                35.665246,
                139.712327,
                35.665263
            ],
            "geometry": {
                "type": "LineString",
                "coordinates": [
                    [
                        139.712327,
                        35.665246
                    ],
                    [
                        139.712293,
                        35.665263
                    ]
                ]
            },
            "properties": {
                "ways": "walk",
                "section": "0001,0002,0003",
                "inline": {
                    "line_style": "auxiliary",
                    "width": 5,
                    "color": "#D3D3D3",
                    "opacity": 1.0,
                    "strokelinecap": "round",
                    "strokelinejoin": "round"
                },
                "outline": {
                    "line_style": "solid",
                    "width": 10,
                    "color": "#898989",
                    "opacity": 1.0,
                    "strokelinecap": "round",
                    "strokelinejoin": "round"
                },
                "route_no": "1"
            }
        },{...},{...},{...},{...},{...},{...}
    ],
    "bbox": [
        139.702677,
        35.665246,
        139.712409,
        35.670168
    ]
}

3.取得したルート形状 (GeoJSON) を地図スクリプトAPIの引数に指定

<!-- map生成した地図インスタンス -->
<!-- route取得したルート形状 (GeoJSON) -->
navitime.geo.GeoJSON.draw({map: map, json: route});

複数ルート候補がある場合の指定方法

複数のルート候補がある場合、ルート形状取得 API のデフォルトでは、最初の経路のみ出力されます。 第2経路、第3経路のルート形状を取得したい場合は「no」パラメータをご利用ください。

レスポンスの先頭と末尾の要素について

features配列の先頭と末尾には、ルートの端点から出発地と目的地を結ぶ「補助線(引き出し線)」が出力されています。
河川や線路など、実際には通行できない箇所をまたぐ線となることがあります。
(line_styleがauxiliaryの場合は補助線、solidの場合はルート線を表します)

スポット検索API(/spot)や住所検索API(/address)などと組み合わせることで、スポットや住所までのルート線の描画、 複数のルート線を切り替え可能です。

tips_最寄りコンビニまでのルートを地図表示
▲最寄りコンビニまでのルート表示イメージ

ルート線を地図上に可視化することでサービスの利便性向上につながります。
ルート形状取得APIを使って是非試してみてください。