Amazon Location Service を使って、オフィスからランチ先までの歩行距離を計算してみた

Amazon Location Service を使って、オフィスからランチ先までの歩行距離を計算してみた

オフィスから今日行ったランチ先までの歩行距離/時間を計算してみました。これでお昼時間に間に合うか、心配しなくても良さそうです。
Clock Icon2025.01.30

Amazon Location Service を使って、オフィスからランチ先までの歩行距離を計算してみた

こんにちは、クラウド事業本部コンサルティング部のたかくに(@takakuni_)です。

みなさん、普段ランチはどこにいってますでしょうか。私はよくオフィスから外に出ています。

たまには遠出したくなるのですが、はじめていってみる場所や、若干距離が遠い場所だと、お昼休みの終了時刻に間に合うか少し心配です。

そこで、今回は Amazon Location Service を利用して、オフィスからランチ先へのルート計算を行ってみようと思います。(スマホのマップアプリ?なんのことでしょうか。)

ルート計算

Amazon Location Service ではルート計算に ルート計算リソース が利用できます。

ルート計算リソースを利用することで、出発地点から到着地点までの距離や時間を計算できます。

レスポインス例
{
	"Legs": [
		{
			"Distance": 178.5,
			"DurationSeconds": 6480,
			"EndPosition": [-122.3394, 47.6159],
			"Geometry": {
				"LineString": [
					[-122.7565, 49.0021],
					[-122.3394, 47.6159]
				]
			},
			"StartPosition": [-122.7565, 49.0021],
			"Steps": [
				{
					"Distance": 178.5,
					"DurationSeconds": 6480,
					"EndPosition": [-122.3394, 47.6159],
					"GeometryOffset": 0,
					"StartPosition": [-122.7565, 49.0021]
				}
			]
		}
	],
	"Summary": {
		"DataSource": "Esri",
		"Distance": 178.5,
		"DistanceUnit": "Kilometers",
		"DurationSeconds": 6480,
		"RouteBBox": [-122.7565, 49.0021, -122.3394, 47.6159]
	}
}

https://docs.aws.amazon.com/ja_jp/location/latest/developerguide/calculate-route.html#example-response-calculate-route

移動の計算は API または、 AWS CLI を利用して行います。出発地点と到着地点の緯度と経度から計算します。

aws location \
    calculate-route-matrix \
        --calculator-name ExampleCalculator \
        --departure-positions "[[-122.7565,49.0021],[-122.2014,47.6101]]" \
	    --destination-positions "[[-122.3394,47.6159],[-122.4813,48.7511]]"

https://docs.aws.amazon.com/ja_jp/location/latest/developerguide/calculate-route-matrix.html

BicycleCarWalking など交通機関別の移動モードも用意されており、興味深いですね。

TravelMode – ルートを計算するとき、交通手段を指定します。例えば、Bicycle、Car、Motorcycle、Truck、Walking などです。

https://docs.aws.amazon.com/ja_jp/location/latest/developerguide/travel-mode.html

ルートの計算方法がわかりました。

ただ、出発地点と到着地点の緯度と経度はあまりパッとイメージできないですね。(住所はなんとなく出てきますが。)

ジオコーディング

ジオコーディングは、住所や地名などを緯度/経度に変換する技術です。

Location Service ではジオコーディング API がサポートされています。こちらで緯度/経度を計算すれば、ルートが計算できそうです。

aws location \
    search-place-index-for-text \
        --index-name ExamplePlaceIndex \
        --text "Any Town" \
        --max-results 10

https://docs.aws.amazon.com/ja_jp/location/latest/developerguide/search-place-index-geocoding.html

やってみる

それではさっそくやってみましょう。まずはプレースインデックスの作成です。

プレースインデックスの作成

プレースインデックスは、ジオコーディング、リバースジオコーディング、検索のクエリを行うプロバイダーを登録する機能です。

今回、プロバイダーは Esri を選択しました。

aws location \
  create-place-index \
  --data-source "Esri" \
  --description "Sapporo Office place index" \
  --index-name "SapporoOffice"

ジオコーディング

それではジオコーディングを行います。

出発地点と到着地点の住所の緯度/経度を計算します。

出発地点

aws location \
  search-place-index-for-text \
    --index-name SapporoOffice \
    --text "北海道札幌市中央区北3条西1丁目1−1 札幌ブリックキューブ 10階" \
    --max-results 10

以下が出力されました。

Relevance(関連性)が 0.9576 だった 141.354520349463, 43.065726916802 を利用します。

{
	"Summary": {
		"Text": "北海道札幌市中央区北3条西1丁目1−1 札幌ブリックキューブ 10階",
		"MaxResults": 10,
		"ResultBBox": [
			141.354520349463, 43.06540906, 141.35504728, 43.065726916802
		],
		"DataSource": "Esri"
	},
	"Results": [
		{
			"Place": {
				"Label": "北海道札幌市中央区北3条西1-1-1",
				"Geometry": {
					"Point": [141.354520349463, 43.065726916802]
				},
				"AddressNumber": "1",
				"Neighborhood": "1",
				"Municipality": "中央区",
				"Region": "北海道",
				"Country": "JPN",
				"PostalCode": "0600003",
				"Interpolated": false,
				"Categories": ["AddressType"],
				"SubMunicipality": "北3条西"
			},
			"Relevance": 0.9576
		},
		{
			"Place": {
				"Label": "北海道札幌市中央区北3条西1",
				"Geometry": {
					"Point": [141.35504728, 43.06540906]
				},
				"Neighborhood": "1",
				"Municipality": "中央区",
				"Region": "北海道",
				"Country": "JPN",
				"Interpolated": false,
				"Categories": ["NeighborhoodType"],
				"SubMunicipality": "北3条西"
			},
			"Relevance": 0.8234
		}
	]
}

到着地点

aws location \
  search-place-index-for-text \
    --index-name SapporoOffice \
    --text "札幌市中央区南2条西1丁目6-1" \
    --max-results 10

結果が一個しか出なかったですが、こちらも 141.356548099479, 43.058044860632 を利用します。

{
	"Summary": {
		"Text": "札幌市中央区南2条西1丁目6-1",
		"MaxResults": 10,
		"ResultBBox": [
			141.356548099479, 43.058044860632, 141.356548099479, 43.058044860632
		],
		"DataSource": "Esri"
	},
	"Results": [
		{
			"Place": {
				"Label": "北海道札幌市中央区南2条西1-6-1",
				"Geometry": {
					"Point": [141.356548099479, 43.058044860632]
				},
				"AddressNumber": "1",
				"Neighborhood": "1",
				"Municipality": "中央区",
				"Region": "北海道",
				"Country": "JPN",
				"PostalCode": "0600062",
				"Interpolated": false,
				"Categories": ["AddressType"],
				"SubMunicipality": "南2条西"
			},
			"Relevance": 1
		}
	]
}

緯度/経度が求まったため、ルート計算を行います。

ルート計算リソースの作成

計算を行うためにルート計算リソースを作成します。

ルート計算リソースは、プレースインデックスと同じように、計算を行うためのプロバイダーの登録を行う機能です。

aws location \
  create-route-calculator \
    --calculator-name "SapporoOffice" \
    --data-source "Esri"
~ $ aws location \
>   create-route-calculator \
>     --calculator-name "SapporoOffice" \
>     --data-source "Esri"
{
    "CalculatorName": "SapporoOffice",
    "CalculatorArn": "arn:aws:geo:ap-northeast-1:622809842341:route-calculator/SapporoOffice",
    "CreateTime": "2025-01-30T14:41:39.185000+00:00"
}

ルートの計算

ルートの計算を行います。--travel-mode Walking がポイントです。(デフォルトは車での走行距離が求められます。)

aws location \
  calculate-route \
    --calculator-name SapporoOffice \
    --departure-position 141.354520349463 43.065726916802 \
    --destination-position 141.356548099479 43.058044860632 \
    --travel-mode Walking

おおよそ、1 キロメートル。片道 12 分の経路でした。今日のランチとおおよそ同じ時間で到着でした。素晴らしいですね。

{
	"Legs": [
		{
			"StartPosition": [141.35483705135047, 43.065810114540746],
			"EndPosition": [141.35681028408754, 43.058113133178026],
			"Distance": 0.9988212603743133,
			"DurationSeconds": 719.1788182380001,
			"Steps": [
				{
					"StartPosition": [141.35483706621102, 43.065810095521876],
					"EndPosition": [141.35507264883734, 43.064911406056375],
					"Distance": 0.10165379097188795,
					"DurationSeconds": 73.183093534
				},
				{
					"StartPosition": [141.3550726650559, 43.06491145293646],
					"EndPosition": [141.35589671534436, 43.06501591557786],
					"Distance": 0.068115234375,
					"DurationSeconds": 49.04296875
				},
				{
					"StartPosition": [141.35589671520654, 43.065015904778676],
					"EndPosition": [141.35644220056972, 43.06270014267401],
					"Distance": 0.261077880859375,
					"DurationSeconds": 187.992187499
				},
				{
					"StartPosition": [141.35644221559485, 43.062700151982376],
					"EndPosition": [141.35721229737467, 43.05963555693816],
					"Distance": 0.3462066650390625,
					"DurationSeconds": 249.29296875
				},
				{
					"StartPosition": [141.35647071763867, 43.05953477950378],
					"EndPosition": [141.356810306655, 43.05811316601559],
					"Distance": 0.2217676891289878,
					"DurationSeconds": 159.667599705
				}
			]
		}
	],
	"Summary": {
		"RouteBBox": [
			141.35483705135047, 43.058113133178026, 141.35721229737467,
			43.065810114540746
		],
		"DataSource": "Esri",
		"Distance": 0.9988212603743133,
		"DurationSeconds": 719.1788182380001,
		"DistanceUnit": "Kilometers"
	}
}

まとめ

以上、「Amazon Location Service を使って、オフィスからランチ先までの歩行距離を計算してみた」でした。

これで、行ったことない or 若干距離が遠い場所でも、所用時間の計算ができますね。めでたし、めでたし。

このブログがどなたかの参考になれば幸いです。クラウド事業本部コンサルティング部のたかくに(@takakuni_)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.