図1は、実施の形態にかかる経路探索装置の機能的構成の一例を示すブロック図である。図1に示すように、経路探索装置100は、記憶部101、取得部102、設定部103、検出部104、抽出部105及び提示部106を有する。
記憶部101は、道路網のノード及びリンクを含んだ地図データを記憶する。ノードは、例えば三叉路、十字路、五叉路など複数の道路が交差する交差点を示している。リンクは、例えばノード間を連結する道路を示している。各ノードは、自ノードに接続するリンクの進行可能方向の情報を有していてもよい。
取得部102は、ユーザにより地図データに基づく地図上に示された閉曲線状の目標経路図形を取得する。目標経路図形は、単純閉曲線の形状が望ましい。例えば、地図データに基づいてタッチパネルに地図が提示される装置の場合、取得部102は、ユーザが指やスタイラスペンなどでタッチパネルをなぞった単純閉曲線の形状を取得してもよい。また、ユーザが目標経路図形の進行方向を指定した場合、取得部102は、その進行方向のベクトル情報を取得してもよい。
設定部103は、目標経路図形を包含する位置に探索図形を設定する。探索図形は、目標経路図形を拡大した図形である。探索図形は、目標経路図形と相似した図形であってもよい。設定部103は、探索図形の重心が目標経路図形の重心に一致するような位置に探索図形を設定してもよい。また、取得部102が目標経路図形の進行方向のベクトル情報を取得した場合、設定部103は、そのベクトル情報を探索図形に設定してもよい。
検出部104は、対象ノードを検出する。対象ノードは、探索図形の内側に存在するノードのうち、探索図形の内側の他の複数のノードにそれぞれ接続する複数のリンクを有するノードのことである。従って、探索図形の外側に存在するノードや、探索図形の内側において自ノードに接続するリンクが一つであるノードは、対象ノードとして検出されない。また、各ノードがリンクの進行可能方向の情報を有しており、かつ探索図形に進行方向のベクトル情報が設定されていた場合、検出部104は、そのベクトル情報及び進行可能方向の情報に基づいて、侵入できないリンクを有するノードを除外して対象ノードを検出してもよい。
抽出部105は、両端が対象ノードに接続されるリンクからなるリンク群の中から最も外側の輪郭を成すリンクを抽出する。つまり、抽出部105は、上記リンク群の中から最も探索図形に近いリンクを抽出する。
提示部106は、抽出部105により抽出されたリンクにより構成される経路を提示する。この経路は、スタート地点から出発してスタート地点に戻ってくる周回コースとなる。
図2は、実施の形態にかかる経路探索装置の経路探索処理手順の一例を示すフローチャートである。図2に示すように、経路探索処理が開始されると、まず、道路網のノード及びリンクを含んだ地図データが記憶部101から読み出される。そして、取得部102は、記憶部101から読み出された地図データに基づく地図上にユーザにより示された閉曲線状の目標経路図形を取得する(ステップS201)。取得部102は、ユーザが指定した目標経路図形の進行方向のベクトル情報を取得してもよい。
次いで、設定部103は、目標経路図形を拡大した探索図形を、目標経路図形を包含する位置に設定する(ステップS202)。設定部103は、目標経路図形の進行方向のベクトル情報を探索図形に設定してもよい。
次いで、検出部104は、探索図形の内側に存在するノードであって、探索図形の内側の他の複数のノードにそれぞれ接続する複数のリンクを有するノードを、対象ノードとして検出する(ステップS203)。検出部104は、リンクの進行可能方向の情報に基づいて、侵入できないリンクを有するノードを除外して対象ノードを検出してもよい。
以上の実施の形態によれば、ユーザにより地図上に目標経路図形が示されることによって、目標経路図形を拡大した探索図形が、目標経路図形を含むように設定され、その探索図形内で最も外側の輪郭を成すリンクによって経路が構成されるため、ユーザがイメージするコース形状に近い実際の経路を探索することができる。また、ユーザにより指定された目標経路図形の進行方向の情報に基づいて侵入できないリンクが除外されるため、実際の経路に従って移動する場合に侵入できない経路によって移動が妨げられるのを防ぐことができる。
次に、本発明の実施例1について説明する。実施例1では、例えばユーザに目的地までの経路を案内するナビゲーション装置300が上記の経路探索装置100の機能を実行する場合の一例について説明する。
(ナビゲーション装置300のハードウェア構成)
図3は、ナビゲーション装置のハードウェア構成の一例を示すブロック図である。図3において、ナビゲーション装置300は、CPU301、ROM302、RAM303、磁気ディスクドライブ304、磁気ディスク305、光ディスクドライブ306、光ディスク307、音声I/F(インターフェース)308、マイク309、スピーカ310、入力デバイス311、映像I/F312、ディスプレイ313、通信I/F314、GPSユニット315、各種センサ316及びカメラ317を備えている。各構成部301〜317は、バス320によってそれぞれ接続されている。
CPU301は、ナビゲーション装置300の全体の制御を司る。ROM302は、ブートプログラム、経路探索プログラムを記録している。RAM303は、CPU301のワークエリアとして使用される。すなわち、CPU301は、RAM303をワークエリアとして使用しながら、ROM302に記録された各種プログラムを実行することによって、ナビゲーション装置300の全体の制御を司る。
磁気ディスクドライブ304は、CPU301の制御に従って磁気ディスク305に対するデータの読み取り/書き込みを制御する。磁気ディスク305は、磁気ディスクドライブ304の制御で書き込まれたデータを記録する。磁気ディスク305としては、例えば、HD(ハードディスク)やFD(フレキシブルディスク)を用いることができる。
また、光ディスクドライブ306は、CPU301の制御に従って光ディスク307に対するデータの読み取り/書き込みを制御する。光ディスク307は、光ディスクドライブ306の制御に従ってデータが読み出される着脱自在な記録媒体である。光ディスク307は、書き込み可能な記録媒体を利用することもできる。着脱可能な記録媒体として、光ディスク307のほか、MO、メモリカードなどを用いることができる。
磁気ディスク305及び光ディスク307に記録される情報の一例としては、地図データ、車両情報、道路情報、走行履歴などが挙げられる。地図データは、カーナビゲーションシステムにおいて経路探索するときに用いられ、建物、河川、地表面、エネルギー補給施設などの地物(フィーチャ)を表す背景データ、道路の形状をリンクやノードなどで表す道路形状データなどを含むベクタデータである。磁気ディスク305または光ディスク307は、記憶部101の機能を実現する。
音声I/F308は、音声入力用のマイク309及び音声出力用のスピーカ310に接続される。マイク309に入力した音声は、音声I/F308内でA/D変換される。マイク309は、例えば、車両のダッシュボード部などに設置され、その数は単数でも複数でもよい。スピーカ310からは、所定の音声信号を音声I/F308内でD/A変換した音声が出力される。
入力デバイス311は、文字、数値、各種指示などの入力のための複数のキーを備えたリモコン、キーボード、タッチパネルなどが挙げられる。入力デバイス311は、リモコン、キーボード、タッチパネルのうちいずれか一つの形態によって実現されてもよいが、複数の形態によって実現することも可能である。タッチパネルは、取得部102の機能を実現する。
映像I/F312は、ディスプレイ313に接続される。映像I/F312は、具体的には、例えば、ディスプレイ313全体を制御するグラフィックコントローラと、即時表示可能な画像情報を一時的に記録するVRAM(Video RAM)などのバッファメモリと、グラフィックコントローラから出力される画像データに基づいてディスプレイ313を制御する制御ICなどによって構成される。
ディスプレイ313には、アイコン、カーソル、メニュー、ウインドウ、あるいは文字や画像などの各種データが表示される。ディスプレイ313としては、例えば、TFT液晶ディスプレイ、有機ELディスプレイなどを用いることができる。ディスプレイ313は、提示部106の機能を実現する。
カメラ317は、車両外部の道路を含む映像を撮影する。映像は静止画あるいは動画のどちらでもよく、例えば、カメラ317によって車両外部を撮影し、撮影した画像をCPU301において画像解析したり、映像I/F312を介して磁気ディスク305や光ディスク307などの記録媒体に出力したりする。
通信I/F314は、無線を介してネットワークに接続され、ナビゲーション装置300及びCPU301のインターフェースとして機能する。ネットワークとして機能する通信網には、CANやLIN(Local Interconnect Network)などの車内通信網や、公衆回線網や携帯電話網、DSRC(Dedicated Short Range Communication)、LAN、WANなどがある。通信I/F314は、例えば、公衆回線用接続モジュールやETC(ノンストップ自動料金支払いシステム)ユニット、FMチューナー、VICS(Vehicle Information and Communication System:登録商標)/ビーコンレシーバなどである。
GPSユニット315は、GPS衛星からの電波を受信し、車両の現在位置を示す情報を出力する。このGPSユニット315の出力情報は、後述する各種センサ316の出力値とともに、CPU301による車両の現在位置の算出に際して利用される。現在位置を示す情報は、例えば、緯度・経度、高度などの、地図データ上の1点を特定する情報である。
各種センサ316は、車速センサ、加速度センサ、角速度センサ、傾斜センサなどの、車両の位置や挙動を判断するための情報を出力する。各種センサ316の出力値は、CPU301による車両の現在位置の算出や、速度や方位の変化量の算出に用いられる。
(経路探索処理内容)
実施例の経路探索処理及びパス選択処理の内容について、図6〜図20に示す具体例を参照しながら説明する。図4は、実施例の経路探索処理内容を示すフローチャートである。図5は、実施例のパス選択処理内容を示すフローチャートである。
図6〜図20は、経路探索処理及びパス選択処理の処理段階における様子を模式的に示す説明図である。目標経路図形及び探索図形は、円形や楕円形、三角形や矩形などの多角形、あるいは卵形状やひょうたん形状など、単純閉曲線であればよい。図6〜図20において、特に限定しないが、本実施例では目標経路図形及び探索図形を円形として説明する。また、図6〜図20において、太い実線の円は目標経路図形601であり、細い破線の円は探索図形602であり、星印はスタート地点603であり、白丸はノード604であり、ノード604間を結ぶ線はリンク605である。また、図6〜図20において、「A」〜「K」はノードの識別子を表し、「(a)」〜「(n)」はリンクの識別子を表す。
図4に示すように、ナビゲーション装置等の経路探索装置100において、経路探索処理が開始されると、まず、経路探索装置100は、例えば記憶部101から地図データを読み出して、例えばタッチパネルと一体となったディスプレイに地図を表示する。そして、経路探索装置100は、ユーザにより目標経路図形が入力されたか否かを判定する(ステップS401)。例えば、目標経路図形は、ユーザにより指やスタイラスペンなどでタッチパネルがなぞられることにより、入力されてもよい。
目標経路図形が入力されない場合(ステップS401:No)には、経路探索装置100は、目標経路図形が入力されるまで待機する。目標経路図形が入力されると(ステップS401:Yes)、取得部102は、目標経路図形を取得する。
なお、目標経路図形の入力にあたって、ユーザが指やスタイラスペンなどでタッチパネルをなぞる代わりに、ユーザが周回コースの目標距離と周回コースを探索する方向をリモコンやキーボードなど入力デバイスから入力してもよい。例えば、ユーザが目標距離として「5km」、探索方向として「西」を入力すると、経路探索装置100は、外周が5kmとなる目標経路図形、例えば円形を、その円内にスタート地点を含み、かつ円の中心をスタート地点よりも西にオフセットして設定してもよい。
目標経路図形の入力に続いて、設定部103は、目標経路図形を例えば所定の倍率で相似拡大した探索図形を、目標経路図形を包含する位置、例えば探索図形の重心と目標経路図形の重心とが一致するような位置に設定する。あるいは、目標経路図形を相似拡大することなく、そのまま探索図形として設定してもよい。
次いで、検出部104は、探索図形内に存在するノードを対象ノードの候補としてリストアップする(ステップS402)。
図6に示す例では、円形の目標経路図形601と、目標経路図形601よりも大きい円形の探索図形602とが、互いの重心、すなわち中心が一致するような位置に設定される。そして、A〜Kのノードがリストアップされる。
そして、検出部104は、リストアップされたノードのうち、探索図形内のノードに対して1本しかリンクを持たないノードを対象外のノードとして、対象ノードの候補のリストから除外する(ステップS403)。
図6に示す例では、Kのノード606がリストから除外される。図7には、対象外のノード(Kのノード606)がリストから除外され、対象ノード(A〜Jのノード)がリストアップされた状態が示されている。
次いで、抽出部105は、探索図形を仮ルートと想定し、探索図形を縮め、それと連動して仮ルートを縮めていく(ステップS404)。今回は、探索図形が仮ルートであるため、探索図形を縮めることによって仮ルートも縮められる。
次いで、抽出部105は、探索図形上の仮ルートと交差するノードが有るか否かを判定する(ステップS405)。該当するノードがない場合(ステップS405:No)、該当するノードが見つかるまで、探索図形及び仮ルートをさらに縮めていく(ステップS404)。該当するノードがある場合(ステップS405:Yes)、パス選択処理を行う(ステップS406)。
図5に示すように、パス選択処理が開始されると、抽出部105は、探索図形と交差したノードとそのノードに繋がる2本のリンクをそれぞれ待機ノード及び待機パスとしてリストアップする(ステップS501)。そして、抽出部105は、最も仮ルートに近いノードに繋がる待機パスをルート候補として選択する(ステップS502)。なお、3本以上の待機パスが発見された場合には、仮ルートに近い待機パスがルート候補として選択される。
図8に示す例では、探索図形602を縮めると、まずAのノード801が発見される。それに伴って、Aのノード801にそれぞれ繋がるBのノード802及びIのノード803が待機ノードとなり、Aのノード801とBのノード802とを繋ぐ(a)のリンク804、及びAのノード801とIのノード803とを繋ぐ(i)のリンク805がそれぞれ待機パスとなる。そして、(a)のリンク804及び(i)のリンク805がルート候補となる。この時点では、仮ルートはまだ探索図形602と一致している。
次いで、抽出部105は、ルート候補として選択したパスが既存のPath_classと接するか否かを判定する(ステップS503)。Path_classは、ルート候補の集合である。例えば、図8に示す例では、(a)のリンク804及び(i)のリンク805は、ルート候補の一つの集合であるため、一つのPath_classの構成要素となる。
この時点では、ステップS502で初めてルート候補が選択されたため、既存のPath_classは存在しない。従って、初めてルート候補として選択された待機パスは、既存のPath_classには接しない(ステップS503:No)。そこで、抽出部105は、初めてルート候補として選択したパスを構成するリンクを新たにPath_classとして保持する。そして、抽出部105は、新たにPath_classとして保持したパスの両端のノードをこのPath_classの端点に設定する(ステップS504)。
図9に示す例では、初めてルート候補として選択された(a)のリンク804及び(i)のリンク805は、既存のPath_classには接しないため、(a)のリンク804と(i)のリンク805とからなるパスがPath_classAとして保持される。また、(a)のリンク804と(i)のリンク805とからなるパスの両端のノード、すなわちBのノード802とIのノード803とがPath_classAの端点に設定される。なお、図9において、太実線で示すリンク((a)のリンク804及び(i)のリンク805)は、ルート候補として確定済みのリンクである。
次いで、抽出部105は、仮ルート上の、Path_classの両端点の近傍となる2点を連結点として選択する(ステップS505)。仮ルート上の連結点の選び方については、特に限定しない。一例として、Path_classの両端点とそれぞれ緯度が一致する点を選んでもよいし、経度が一致する点を選んでもよいし、Path_classの端点と連結点との距離が最短になる点を選んでもよい。本実施例では、緯度が一致する点を選ぶものとする。
図9に示す例では、Bのノード802に対応する連結点として、探索図形602上の、Bのノード802と緯度が一致するS1の連結点901が選択される。また、Iのノード803に対応する連結点として、探索図形602上の、Iのノード803と緯度が一致するS2の連結点902が選択される。「S1」及び「S2」は連結点の識別子を表す。
そして、抽出部105は、Path_classの両端点と、各端点に対応する連結点とをそれぞれ接続する(ステップS506)。
図9に示す例では、Bのノード802とこれに対応するS1の連結点901とが接続され、Iのノード803とこれに対応するS2の連結点902とが接続される。
次いで、抽出部105は、ステップS505で選択した2つの連結点間の仮ルートのうち、ステップS502で選択したルート候補に並走する部分を、選択したPath_classで置き換える(ステップS507)。
図9に示す例では、仮ルート(探索図形602)上のS1−A−S2の経路が、Path_classAのルート候補B−A−Iを含むS1−B−A−I−S2の経路に置き換えられる。
そして、図4に示すフローチャートに戻り、抽出部105は、仮ルートの全ての部分がルート候補に置き換わったか否かを判定する(ステップS407)。仮ルートの全ての部分がルート候補に置き換わった場合(ステップS407:Yes)、ステップS408のルート候補にスタート地点が含まれているか否かの判定処理へ進む。一方、仮ルートにおいて、ルート候補に置き換わっていない部分が残っている場合(ステップS407:No)、仮ルートの全ての部分がルート候補に置き換わるまで上述したステップS404〜ステップS407の処理を繰り返す。
図9に示す例では、仮ルート上の、S1−B−A−I−S2を除く部分は、未だルート候補に置き換わっていない。そのため、さらに探索図形602が縮められ、それと連動して仮ルート、及びルート候補で置き換えられていない探索図形602上のS1−S2の部分も縮められる(ステップS404)。それによって、探索図形602上の仮ルートと交差するノードが新たに発見される(ステップS405:Yes)。そして、パス選択処理が行われる(ステップS406)。
パス選択処理が開始されると、まず、上述したステップS501〜ステップS502の処理が行われる。
図10に示す例では、Iのノード803が新たに発見される。それに伴って、Iのノード803にそれぞれ繋がるAのノード801及びHのノード1001が待機ノードとしてリストアップされ、Iのノード803とHのノード1001とを繋ぐ(h)のリンク1002が待機パスとしてリストアップされる(ステップS501)。Iのノード803とAのノード801とを繋ぐ(i)のリンク805は、既にルート候補として確定済みである。
(h)のリンク1002は、最も仮ルートに近いノードに繋がる待機パスであるため、ルート候補として選択される(ステップS502)。ルート候補として選択されたパス、すなわち(h)のリンク1002は、既存のPath_class、ここではPath_classAに接する。
ルート候補として選択されたパスが既存のPath_classに接する場合(ステップS503:Yes)、抽出部105は、その選択したパスと、そのパスが接する既存のPath_classとを連結する。また、抽出部105は、この更新されたPath_classの端点を、ルート候補として選択したパスの端点に更新する(ステップS508)。
図10に示す例では、(a)のリンク804と(i)のリンク805とからなる既存のPath_classAに(h)のリンク1002が連結されて新たなPath_classAとなる。また、既存のPath_classAの端点であるIのノード803の代わりに、Hのノード1001が新たなPath_classAの端点となる。
次いで、抽出部105は、ステップS508で更新した新たな端点が別のPath_classに接するか否かを判定する(ステップS509)。別のPath_classに接する場合(ステップS509:Yes)、ステップS512のPath_class同士の統合処理へ進む。一方、別のPath_classに接しない場合(ステップS509:No)、抽出部105は、仮ルート上の、ルート候補との連結点を、ステップS508で更新した新たなPath_classの端点の近傍までシフトする(ステップS510)。
図11に示す例では、Path_classAしか存在しないため、新たなPath_classAの新たな端点であるHのノード1001は、別のPath_classに接しない。従って、S2の連結点902は、探索図形602の仮ルート上の、Hのノード1001と緯度が一致する点までシフトされる。
次いで、抽出部105は、ステップS508で更新した新たな端点と、ステップS510でこの新たな端点の近傍にシフトされた連結点とを接続する。そして、抽出部105は、仮ルートのうち、ステップS510でシフトされた連結点のシフト分に対応する部分を、今回のステップS502で選択されたルート候補で置き換える(ステップS511)。
図11に示す例では、Hのノード1001とこれに対応するS2の連結点902とが接続される。そして、仮ルート上のI−S2の経路が、Path_classAのルート候補I−Hを含むI−H−S2の経路に置き換えられる。以上により、仮ルート上のS1−I−S2の経路が、S1−B−A−I−H−S2の経路に置き換えられたことになる。
そして、図4に示すフローチャートに戻り、抽出部105は、仮ルートの全ての部分がルート候補に置き換わったか否かを判定する(ステップS407)。
図11に示す例では、仮ルート上の、S1−B−A−I−H−S2を除く部分は、未だルート候補に置き換わっていない。そのため、さらに探索図形602が縮められ、それと連動して仮ルート、及びルート候補で置き換えられていない探索図形602上のS1−S2の部分も縮められる(ステップS404)。それによって、探索図形602上の仮ルートと交差するノードが新たに発見され(ステップS405:Yes)、パス選択処理が行われる(ステップS406)。
パス選択処理が開始されると、まず、上述したステップS501〜ステップS502の処理が行われる。
図12に示す例では、Dのノード1201が新たに発見される。それに伴って、Dのノード1201にそれぞれ繋がるCのノード1202及びEのノード1203が待機ノードとしてリストアップされる。また、Dのノード1201とCのノード1202とを繋ぐ(c)のリンク1204、及びDのノード1201とEのノード1203とを繋ぐ(d)のリンク1205が待機パスとしてリストアップされる(ステップS501)。
(c)のリンク1204及び(d)のリンク1205は、最も仮ルートに近いノードに繋がる待機パスであるため、ルート候補として選択される(ステップS502)。ルート候補として選択されたパス、すなわち(c)のリンク1204及び(d)のリンク1205は、ともに既存のPath_class、ここではPath_classAに接しない。
ルート候補として選択されたパスが既存のPath_classに接しないため(ステップS503:No)、抽出部105は、今回のステップS502でルート候補として選択したパスを構成するリンクを新たなPath_classとして保持する。そして、抽出部105は、新たなPath_classとして保持したパスの両端のノードをこのPath_classの端点に設定する(ステップS504)。
次いで、抽出部105は、仮ルート上の、新たなPath_classの両端点の近傍となる2点を連結点として選択し(ステップS505)、新たなPath_classの両端点と、各端点に対応する連結点とをそれぞれ接続する(ステップS506)。次いで、抽出部105は、今回のステップS505で選択した2つの連結点間の仮ルートのうち、今回のステップS502で選択したルート候補に並走する部分を、新たなPath_classで置き換える(ステップS507)。
図13に示す例では、今回、ルート候補として選択された(c)のリンク1204及び(d)のリンク1205は、既存のPath_classAには接しないため、(c)のリンク1204と(d)のリンク1205とからなるパスがPath_classBとして保持される。また、(c)のリンク1204と(d)のリンク1205とからなるパスの両端のノード、すなわちCのノード1202とEのノード1203とがPath_classBの端点に設定される。
そして、Cのノード1202に対応する連結点として、探索図形602上の、Cのノード1202と緯度が一致するS3の連結点1301が選択される。また、Eのノード1203に対応する連結点として、探索図形602上の、Eのノード1203と緯度が一致するS4の連結点1302が選択される。「S3」及び「S4」は連結点の識別子を表す。
そして、Cのノード1202とこれに対応するS3の連結点1301とが接続され、Eのノード1203とこれに対応するS4の連結点1302とが接続される。そして、仮ルート(探索図形602)上のS3−D−S4の経路が、Path_classBのルート候補C−D−Eを含むS3−C−D−E−S4の経路に置き換えられる。ここまでで、仮ルート上のS1−S2及びS3−D−S4の経路が、それぞれS1−B−A−I−H−S2及びS3−C−D−E−S4の経路に置き換えられたことになる。
次いで、図4に示すフローチャートに戻り、抽出部105は、仮ルートの全ての部分がルート候補に置き換わったか否かを判定する(ステップS407)。
図13に示す例では、仮ルート上の、S1−B−A−I−H−S2とS3−C−D−E−S4とを除く部分は、未だルート候補に置き換わっていない。そのため、さらに探索図形602が縮められ、それと連動して仮ルート、及びルート候補で置き換えられていない探索図形602上のS1−S3及びS2−S4の部分も縮められる(ステップS404)。それによって、探索図形602上の仮ルートと交差するノードが新たに発見され(ステップS405:Yes)、パス選択処理が行われる(ステップS406)。
パス選択処理が開始されると、まず、上述したステップS501〜ステップS503の処理が行われる。
図14に示す例では、Eのノード1203が新たに発見される。それに伴って、Eのノード1203に繋がるFのノード1401が待機ノードとしてリストアップされ、Eのノード1203とFのノード1401とを繋ぐ(e)のリンク1402が待機パスとしてリストアップされる(ステップS501)。
(e)のリンク1402は、最も仮ルートに近いノードに繋がる待機パスであるため、ルート候補として選択される(ステップS502)。(e)のリンク1402は、既存のPath_class、ここではPath_classBに接する(ステップS503:Yes)。そのため、上述したステップS508以降の処理が行われる。
従って、既存のPath_classBに(e)のリンク1402が連結されて新たなPath_classBとなる。また、既存のPath_classBの端点であるEのノード1203の代わりに、Fのノード1401が新たなPath_classBの端点となる(ステップS508)。
図15に示す例では、Path_classA及びPath_classBが存在する。新たなPath_classBの新たな端点であるFのノード1401は、別のPath_class、すなわちPath_classAに接しない(ステップS509:No)。従って、S4の連結点1302は、探索図形602の仮ルート上の、Fのノード1401と緯度が一致する点までシフトされる(ステップS510)。
そして、Fのノード1401とこれに対応するS4の連結点1302とが接続され、仮ルート上のE−S4の経路が、Path_classBのルート候補E−Fを含むE−F−S4の経路に置き換えられる(ステップS511)。ここまでで、仮ルート上のS1−S2及びS3−E−S4の経路が、それぞれS1−B−A−I−H−S2及びS3−C−D−E−F−S4の経路に置き換えられたことになる。
次いで、図4に示すフローチャートに戻り、抽出部105は、仮ルートの全ての部分がルート候補に置き換わったか否かを判定する(ステップS407)。
図15に示す例では、仮ルート上の、S1−B−A−I−H−S2とS3−C−D−E−F−S4とを除く部分は、未だルート候補に置き換わっていない。そのため、さらに探索図形602が縮められ、それと連動して仮ルート、及びルート候補で置き換えられていない探索図形602上のS1−S3及びS2−S4の部分も縮められる(ステップS404)。それによって、探索図形602上の仮ルートと交差するノードが新たに発見され(ステップS405:Yes)、パス選択処理が行われる(ステップS406)。
パス選択処理が開始されると、まず、上述したステップS501〜ステップS503の処理が行われる。
図16に示す例では、Gのノード1601が新たに発見される。それに伴って、Gのノード1601にそれぞれ繋がるFのノード1401、Cのノード1202及びHのノード1001が待機ノードとしてリストアップされる。また、Gのノード1601とFのノード1401とを繋ぐ(f)のリンク1602、Gのノード1601とCのノード1202とを繋ぐ(l)のリンク1603、及びGのノード1601とHのノード1001とを繋ぐ(g)のリンク1604が待機パスとしてリストアップされる(ステップS501)。
(f)のリンク1602及び(g)のリンク1604は、ルート候補に置き換えられた部分を含む仮ルートに最も近いノードに繋がる待機パスであるため、ルート候補として選択される(ステップS502)。Cのノード1202は待機ノードを解除され、(l)のリンク1603は待機パスを解除される。(g)のリンク1604は既存のPath_classAに接し、(f)のリンク1602は既存のPath_classBに接する(ステップS503:Yes)。そのため、上述したステップS508以降の処理が行われる。
従って、既存のPath_classAに(g)のリンク1604が連結されて新たなPath_classAとなり、既存のPath_classBに(f)のリンク1602が連結されて新たなPath_classBとなる。また、既存のPath_classAの端点であるHのノード1001の代わりに、Gのノード1601が新たなPath_classAの端点となり、既存のPath_classBの端点であるFのノード1401の代わりに、Gのノード1601が新たなPath_classBの端点となる(ステップS508)。
Path_classの新たな端点が別のPath_classに接する場合(ステップS509:Yes)、抽出部105は、互いに接するPath_class同士を統合し、統合されて一つとなったPath_classの両端点をそれぞれ新しいPath_classの端点とする(ステップS512)。また、抽出部105は、Path_class同士の統合によって端点ではなくなったノード、すなわち互いに接するPath_class同士の接続点となったノードに対応する連結点を消滅させる。
図17に示す例では、新たなPath_classA(B−A−I−H−G)と新たなPath_classB(C−D−E−F−G)とがGのノード1601において接する。そこで、(f)のリンク1602がPath_classAに接続され、(g)のリンク1604がPath_classBに接続されることによって、Path_classAとPath_classBとが統合される。
統合後のPath_classを新たなPath_classAとし、Path_classBが消滅してもよい。新たなPath_classAの両端点は、Bのノード802及びCのノード1202となる。また、図16に示すS2の連結点902及びS4の連結点1302は消滅する。ここまでで、仮ルート上のS1−G−S3の経路が、S1−B−A−I−H−G−F−E−D−C−S3の経路に置き換えられたことになる。
次いで、図4に示すフローチャートに戻り、抽出部105は、仮ルートの全ての部分がルート候補に置き換わったか否かを判定する(ステップS407)。
図17に示す例では、仮ルート上の、S1−B−A−I−H−G−F−E−D−C−S3を除く部分は、未だルート候補に置き換わっていない。そのため、さらに探索図形602が縮められ、それと連動して仮ルート、及びルート候補で置き換えられていない探索図形602上のS1−S3の部分も縮められる(ステップS404)。それによって、探索図形602上の仮ルートと交差するノードが新たに発見され(ステップS405:Yes)、パス選択処理が行われる(ステップS406)。
パス選択処理が開始されると、まず、上述したステップS501〜ステップS503の処理が行われる。
図18に示す例では、Bのノード802が新たに発見される。それに伴って、Bのノード802にそれぞれ繋がるAのノード801、Jのノード1801及びCのノード1202が待機ノードとしてリストアップされる。また、Bのノード802とAのノード801とを繋ぐ(a)のリンク804、Bのノード802とJのノード1801とを繋ぐ(k)のリンク1802、及びBのノード802とCのノード1202とを繋ぐ(b)のリンク1803が待機パスとしてリストアップされる(ステップS501)。(a)のリンク804は、既にルート候補として確定済みである。
(b)のリンク1803は、ルート候補に置き換えられた部分を含む仮ルートに最も近いノードに繋がる待機パスであるため、ルート候補として選択される(ステップS502)。(b)のリンク1803はPath_classAに接する(ステップS503:Yes)。そのため、上述したステップS508以降の処理が行われる。
従って、Path_classAに(b)のリンク1803が連結される。また、Path_classAの端点がBのノード802からCのノード1202に置き換えられる(ステップS508)。
図18に示す例では、Cのノード1202は、Path_classAのもう一方の端点である。従って、図18に示す仮ルート上のS1−S3の経路が、図19に示すように、(b)のリンク1803で置き換えられてルート候補が完成する。ルート候補が完成したため、図18に示すS1の連結点901及びS3の連結点1301は消滅する。そして、パス選択処理を抜けて、図4に示すフローチャートに戻る。
図4に示すフローチャートに戻ると、抽出部105は、仮ルートの全ての部分がルート候補に置き換わったか否かを判定する(ステップS407)。全てルート候補に置き換わっている場合(ステップS407:Yes)、抽出部105は、ルート候補にスタート地点が含まれるか否かを判定する(ステップS408)。
スタート地点が含まれない場合(ステップS408:No)、見つかったルート候補を除外し(ステップS409)、ステップS404へ戻る。そして、完成したルート候補にスタート地点が含まれるようになるまで、ステップS404〜ステップS409の処理を繰り返す。一方、スタート地点が含まれる場合(ステップS408:Yes)、例えば提示部106に完成した周回コースを提示して、一連の経路探索処理を終了する。
図20には、G−H−I−A−B−C−D−E−F−G(逆回りでもよい)という周回コースのルート候補2001が完成した様子が示されている。図20に示す例では、スタート地点603であるGのノードが含まれている。
なお、提示部106に完成した周回コースを提示する際に、完成した周回コースのパス長を集計してユーザに提示してもよい。また、目標とした距離と探索された周回コースの距離との差分があれば、その差分をユーザに提示するようにしてもよい。例えば、完成した周回コース上で、スタート地点から目標とした距離だけ周回コース上を進んだ位置までの経路の表示色を変えることによって、差分を提示するようにしてもよい。
実施例1によれば、ユーザにより入力された目標経路図形601を相似拡大した探索図形602を、相似の関係を維持しながら縮めていきながら、探索図形602内で最も外側の輪郭を成すリンクをルート候補としていくことによって、ユーザがイメージするコース形状に近い実際の経路を探索することができる。