エアロトヨタコラムColumn

QGIS

QGISを使って観光の最適巡回ルートを探そう【巡回セールスマン分析】

この記事でわかること

・QGISで複数地点を効率的に巡回するための【巡回セールスマン分析】を行うことができる

この記事は、執筆時の安定版(LTR)であるQGIS Ver3.44で作成しています。


観光地を効率的に回りたい!

弊社のある埼玉県川越市は「小江戸」とも呼ばれ、観光施設が市内にたくさんあります。
ゴールデンウイークや夏休みに「川越観光に行きたい~!」と思われている方もいらっしゃるかもしれません。
しかし川越市の市街地は細い路地や斜めに走る道路などあり、歩いて回ろうとすると、どのルートを通れば効率的にすべての観光施設を回ることができるか、地図を見てもなかなか難しいです。

そこで、QGISの登場です。
QGISには「巡回セールスマン分析」という機能(正確にはGRASSという別の地理情報システムの機能をQGISで使うことができる)があります。
巡回セールスマン分析を使うと、道路に沿って複数の地点を効率的に巡回できるルートを、素早く検索することができます

[図:川越市の観光施設のルートを巡回セールスマン分析した結果]

※この記事で使用しているデータは、道路データは「© OpenStreetMap contributors」を加工して使用、
観光施設データは、川越市オープンデータ 観光施設一覧を加工して使用しています。


巡回セールスマン分析を使うと、
・効率的に営業先を回りたい
・ポ◯
◯カード買うために、コンビニを効率的に回りたい
・北海道のすべての道の駅に自動車で効率的に行きたい

などの問題を解決することができます。


QGISでの巡回セールスマン分析で気をつけること

QGISでGRASSの巡回セールスマン分析(v.net.salesman)を実行するためにはいくつか気をつけることがあります。

・データ分析には、巡回地点のポイントレイヤと道路のラインレイヤが必要。
・ポイント、ラインレイヤの保存フォルダ、ファイル名は、半角英数のみにする。
・ポイント、ラインレイヤの座標参照系は同じにしておく(できれば平面直角座標系)。
 ※プロジェクトの座標参照系は何でもOK
・ポイントレイヤの地物はすべてラインレイヤの範囲内にあること(一部選択して実行することができない、バグかも)。
・ポイントレイヤには、重複しない整数値が記録された「cat」というフィールドが必要。
・ポイントレイヤのフィールド名はすべて半角英数字にしておく。
・ラインレイヤは地理院ベクタだと接続してされていないエラーが出るので、OpenStreetMapの道路データがベスト。
・ラインレイヤは「v.clean」を実行して修復してから処理をする


以上のことに気をつけて行う必要があります。


観光施設一覧CSVをダウンロードする

川越市のオープンデータから、埼玉県オープンデータポータルサイトにアクセスし、観光施設一覧をダウンロードします。

文字コード別にCSVをダウンロードできるのでは、Excelで文字化けしないように今回は「【川越市】観光施設一覧(令和7年4月1日現在)Shift_JIS」をダウンロードします。
埼玉県オープンデータポータルサイト
データセット「【川越市】観光施設一覧」

観光施設一覧CSVを編集する

観光施設一覧CSVをExcelで開き、次の編集を行います。

[図:編集後のCSVファイル]

・「cat」列を追加して、重複しない連番を入力する
・不要な列は削除する。※「cat」「名称」「緯度」「経度」以外は削除
・フィールド名を半角英数に変更する。※「名称」→「name」、「緯度」→「Y」、「経度」→「X」
・CSVで保存する

OpenStreetMapの道路データをダウンロードする

OpenStreetMapの道路データをダウンロードします。ダウンロードは「BBBike.org」というWebサイトで行うことができます。

Webサイトにアクセスし、ダウンロードしたい場所に地図を移動します。
Name of area to extract」にダウンロードする地図の名前を半角で入力します。
Your email address」にメールアドレスを入力します。
here」ボタンをクリックすると、次の図のような青い枠が地図に表示されます。

ダウンロードする範囲を決定したら、「Extract」ボタンをクリックします。
しばらくすると、入力したメールアドレスにデータのダウンロードリンクが送られてきます。

メールのダウンロードリンクをクリックすると、ZIPファイルがダウンロードできます。

ZIPファイルを展開すると、道路以外のファイルも保存されています。
roads」という名前の5つのファイルをコピーして、半角英数文字のみの作業フォルダに保存してください。

===========================
2026年4月1日 追記
国土数値情報 道路データ

2026年4月に、国土数値情報で道路データが更新されました。
主に車道の中心線ですので、自動車を使用する場合のルート検索を行うことができます。
ラインが図郭ごとに分割されていますので、2つ以上の図郭のデータを使用する場合には、あらかじめ結合しておきましょう。

歩道を含めたルート検索はOpenStreetMap(すべての歩道があるわけではない)、車道のみであれば国土数値情報を利用するといいかと思います。

===========================

QGISを起動して、観光施設一覧CSVを地図に表示する

QGISを起動して、「データソースマネージャ」で観光施設一覧CSVを地図に表示します。

ツールバーの「データソースマネージャ」をクリックします。

CSVテキスト」を選択します。
「ファイル名」の右の「・・・」ボタンをクリックして、CSVファイルを指定します。
サンプルデータが文字化けしている場合は、「文字コード」を「Shift_JIS」にします。
「ジオメトリ定義」の「X値」に「経度(X)」、「Y値」に「緯度(Y)」を選択します。
「ジオメトリのCRS」は「EPSG:4326‐WGS84」を選択します。
設定できたら「追加」ボタンをクリックしてレイヤに追加します。

道路データを地図に表示する

道路データをQGISの地図に表示します。

ファイルエクスプローラーから、前の手順で保存した「roads.shp」をQGIS上にドラッグ&ドロップします。

道路データが地図に表示されます。
レイヤの順番は、道路レイヤをポイントレイヤの下に移動します。

今回は、ポイントレイヤ、道路レイヤともにレイヤの座標参照系が「EPSG:4326‐WGS84」で同じであるため、このまま作業を進めます。
もし、ポイントレイヤと道路レイヤの座標参照系が違う場合には、どちらかのレイヤをエクスポートして、座標参照系を合わせておきます


道路データを修復する

QGISのプロセシングツールボックスで「GRASS」の「v.clean」を実行して、道路レイヤの修復を行います。

ツールバーの「プロセシング」→「ツールボックス」を選択して、プロセシングツールボックスパネルを表示します。
検索欄に「clean」と入力して、「GRASS」→「ベクタ」→「v.clean」をダブルクリックします。

「入力レイヤ」に「roads」(道路レイヤ)を選択し、「実行」ボタンをクリックします。
しばらくすると新しいレイヤが作成されるので、「閉じる」ボタンでダイアログを閉じます。

元の「roads」(道路レイヤ)と「エラー要素の出力ファイル」は不要ですので、選択してレイヤを削除します。

巡回セールスマン分析を実行する

QGISのプロセシングツールボックスで「GRASS」の「v.net.salesman」を実行して、巡回セールスマン分析を行います。

プロセシングツールボックスの検索欄に「sale」と入力して、「GRASS」→「ベクタ」→「v.net.salesman」をダブルクリックします。

「線の入力レイヤ」に「クリーニング済み出力」を選択します。
「中央の点レイヤ」に「112011_tourism(SJIS)」(観光施設ポイントレイヤ)を選択します。
「実行」ボタンをクリックすると処理が始まり、しばらくすると新しいレイヤが作成されるので「閉じる」ボタンでダイアログを閉じます。

「最適ルートの出力」レイヤが、巡回セールスマン分析の結果です。
レイヤスタイルを設定して、地図を見やすくしましょう。

プロジェクトファイルも保存しておきましょう。

レイヤの右にメモリマークのアイコンが表示されているレイヤは一時スクラッチレイヤなので、QGISを終了したら、ファイルが消えてしまいます。
必要であれば、メモリマークをクリックして、ファイルに保存しておいてください。

モデルデザイナーで一括処理する

QGISのモデルデザイナーを使用すると、「v.clean」と「v.net.salesman」を一括処理することができます。
モデルデザイナーは、メニュー「プロセシング」→「モデルデザイナー」で実行できます。

図を参考に、作ってみてください。

まとめ

QGISで巡回セールスマン分析を行うことで、複数の地点を効率的に巡回するためのルートを検索することができました。
検索した結果を、QFieldなどでスマートフォンに表示して、観光やショッピング、ビジネスなどに役立ててみてはいかがでしょうか?

今回使用したデータとプロジェクトがファイルは下のリンクからダウンロードすることができます。
展開したフォルダは、半角英数のみのフォルダに保存してから利用してください。

 

記事編集:喜多耕一

Other Columnその他のコラム

コラム一覧を見る

TOP