本発明の実施の形態について、図面に基づいて以下に説明する。
<地図情報処理装置の構成>
まず、本発明の実施の形態に係る地図情報処理装置の構成について説明する。
図1は、本発明の実施の形態に係る地図情報処理装置の構成の一例を示すブロック図である。図1に示すように、本実施の形態に係る地図情報処理装置は、以下に説明する入力部1、位置検出部2、地図情報記憶部3、プロセッサ4、表示部5および音声出力部6を備えている。
入力部1は、使用者の操作または指示に基づく指示信号をプロセッサ4に伝達する操作スイッチ群であり、入力手段として機能する。
位置検出部2は、例えば、GPS(Global Positioning System)受信機、車速センサ、加速度センサ、角速度センサ等を用いて位置検出を行う位置検出手段として機能する。位置検出部2は、本実施の形態に係る地図情報処理装置を保持する移動体の現在位置を検出し、検出した現在位置を示す位置情報をプロセッサ4に伝達する。
地図情報記憶部3(地図情報記憶手段)は、例えば、地図情報を記録する媒体としてハードディスクドライブにより構成される地図情報記憶手段として機能する。地図情報記憶部3には、後述の地図情報が予め記憶されている。
プロセッサ4は、入力部1から取得した指示信号、位置検出部2から取得した位置情報、および地図情報記憶部3から読み出した地図情報に基づき、各種の地図情報処理を行う地図情報処理手段として機能する。また、プロセッサ4は、表示部5における表示処理も行い、その制御に用いるための描画メモリ(図示せず)、描画処理部(図示せず)および表示制御部(図示せず)を有している。描画処理部がその画像を描画メモリに描画し、表示制御部が描画メモリに描画された画像を読み出して表示部5へ送ることにより、表示部5にその画像が表示される。
プロセッサ4にて行われる各種の地図情報処理としては、位置検出部2から取得した位置情報と地図情報記憶部3から読み出した地図情報とに基づいて移動体の現在位置を推定するマップマッチング処理や、出発地から目的地までの経路を算出する経路探索処理や、経路探索処理によって得られた経路に従って出発地から目的地まで案内を行う経路誘導処理や、現在位置周辺の地図表示処理や、都市、道路、施設、住所、電話番号、交差点等の各種情報を検索する各種検索処理などが含まれる。
また、地図情報記憶部3から読み出した地図情報に基づき、マップマッチング処理により推定された現在位置を中心とした地図の描画や、当該描画された地図上に上記の地図情報処理によって得られた移動体の現在位置、経路探索処理によって得られた好適な経路、当該経路に従って出発地から目的地まで案内を行うための案内情報の描画や、各種入力情報の描画や、検索によって得られた各種情報の描画等、プロセッサ4の描画処理部による描画処理も上記の地図情報処理に含まれる。
表示部5は、例えば、液晶ディスプレイからなる表示装置であり、表示手段として機能する。表示部5は、プロセッサ4の描画処理部による上記各種の描画処理に従って描画メモリに描画された内容を、プロセッサ4の表示制御部の制御に基づいて表示する。
音声出力部6は、プロセッサ4によって行われた各種の地図情報処理の結果として得られた情報を音声で使用者に伝える音声出力手段として機能する。音声出力部6は、例えば、経路探索処理によって得られた好適な経路に従って出発地から目的地まで案内を行うための情報や、検索によって得られた各種情報等を音声で使用者に伝える。
<地図情報>
地図情報記憶部3に記憶される地図情報について説明する。地図情報記憶部3に記憶される地図情報は、所定の間隔の緯度および経度によって囲まれた4辺形の領域で区画されたメッシュごとに管理される。すなわち、地図情報記憶部3は、地図情報をメッシュに分割して記憶している。また、地図情報は、情報の詳細さの度合いによって階層化され、各階層で区画されたメッシュごとに管理される。
それぞれの階層を識別するために、最も詳細な情報を有する階層から順に0,1,2,・・・と、各階層に対して番号(階層番号)が付与される。また、各階層において、それぞれのメッシュを識別するために、各メッシュに対して固有の番号(メッシュ番号)が付与される。
例えば、ある階層のメッシュが、地図における緯度方向に16分割、かつ、経度方向に16分割して得られる256個の領域として規定されているとすると、当該階層の各メッシュには0〜255のいずれかのメッシュ番号が付与される。なお、以下では、処理の対象となるメッシュを「対象メッシュ」と称し、対象メッシュに隣接するメッシュを「隣接メッシュ」と称することもある。
図2は、本実施の形態に係る地図情報記憶部3に記憶された地図情報のデータ構造の一例を示す図である。図2に示すように、地図情報は、地図管理情報、地図データ、並びに検索情報(都市、道路、施設、住所、電話番号、交差点等の各種情報を検索するためのデータ)を有している。
地図管理情報は、地図情報のバージョンを示すバージョン情報や、階層ごとに各地図データを管理する階層管理情報や、各種の検索情報を管理する検索管理情報等を有している。階層管理情報は、各メッシュのメッシュ番号、地図情報における各地図データの格納位置、データサイズ等の情報を階層ごとに有している。
地図データは、地図データヘッダ、道路網データ、背景データ、名称データ、経路誘導データを有しており、各階層の各メッシュごとに用意される。地図データヘッダは、地図データ内の各データを管理する情報を有している。道路網データは、各メッシュにおける道路網を示す情報を有している。背景データは、河川、海等を示す面データや、線状の河川、鉄道等を示す線データや、施設シンボル等を示す点データを有している。名称データは、地名、河川名、施設名等を示す文字列データを有する。経路誘導データは、交差点等での経路案内に必要な情報を有している。
<道路網データ>
地図情報の地図データに含まれる道路網データについて、より詳細に説明する。図3は、道路網データの構造の一例を示す図である。道路網データは、交差点や道路上の特定地点を示すノードの情報と、ノード間を接続する道路を示すリンクの情報とで規定される道路網のデータである。図3に示すように、道路網データは、道路網データヘッダ、ノードリスト、リンクリストおよび形状リストを有する。
(a)道路網データヘッダ
道路網データに含まれる道路網データヘッダは、都市計画法に基づいて計画された道路の有無を示す計画道路有無情報と、メッシュ内に存在するノードの数を示すノード数と、メッシュ内に存在するリンクの数を示すリンク数と、道路網データにおけるノードリスト、リンクリスト、および形状リストの格納位置やデータサイズを示すリスト管理情報といった、道路網データの管理に必要な情報を有する。
(b)ノードリスト
道路網データに含まれるノードリストは、メッシュ内に存在する各ノードに対応して設けられたノードレコードを有する。各ノードレコードには、ノードリストにおけるノードレコードの並び順に対応するノード番号が付されているものとする。
各ノードのノードレコードは、ノードの地理的位置を示すノード座標と、当該ノードに接続するリンクの数を示す接続リンク数と、当該ノードに接続するリンクの情報である接続リンク情報を有する接続リンクテーブルとから構成される。接続リンクテーブルには、当該ノードに接続するリンクと同じ数の接続リンク情報が含まれている。
接続リンク情報は、当該ノードに接続するリンクが属するメッシュを表す接続リンクメッシュ情報と、当該ノードに接続するリンクの接続方向と、そのリンクを特定する番号(接続リンク番号)とを有する。以下では、ノードに接続するリンクのことを「接続リンク」とも称する。
接続リンクメッシュ情報は、当該ノードの接続リンクが属するメッシュを特定する情報である。本実施の形態において、接続リンクメッシュ情報は、接続リンクが属するメッシュを、当該ノードが属するメッシュ(対象メッシュ)との相対位置で特定する「隣接メッシュコード」で示すものとする。隣接メッシュコードは、対象メッシュおよび隣接メッシュのそれぞれに対応づけられた値を持つ。
図4は、隣接メッシュコードの一例を示す図である。隣接メッシュは、対象メッシュの上、右上、右、右下、下、左下、左、左上に隣接する各メッシュであり、対象メッシュおよび隣接メッシュは、隣接メッシュコード「0」〜「8」で示される。図4に示すように、本実施の形態では、対象メッシュの隣接メッシュコードを「0」で示し、各隣接メッシュの隣接メッシュコードは、対象メッシュの上、右上、右、右下、下、左下、左、左上の順に「1」〜「8」で示す。なお、ここで言う「上」、「下」、「左」、「右」、は、地図上の平面的な方向を表しており、例えば、それぞれ「北」、「南」、「西」、「東」に対応する。
このように本実施の形態の地図情報処理装置では、道路網データにおいて、各接続リンクの属するメッシュが、対象メッシュとの相対位置を示す隣接メッシュコードを用いて特定される。この場合、各接続メッシュを、各メッシュ固有のメッシュ番号で示すのに比べて情報量を削減することができる。
但し、この手法では、接続リンクが複数のメッシュに跨る場合を考慮する必要がある。例えば、接続リンクが2つのメッシュに跨っている場合、その接続リンクがどちらのメッシュに属するのかを規定する必要がある。本実施の形態では、各リンクに方向の属性を持たせることによって、各リンクの属するメッシュが1つに定まるようにしている。つまり、リンクの片方の端を始点(始点ノード)、もう片方の端を終点(終点ノード)と仮定し、各リンクは、その始点を含む側のメッシュに属するものとして規定する(もちろん、終点を含む側のメッシュに属するものと規定してもよい)。これにより、接続リンクが複数のメッシュに跨っていても、それが属するメッシュは1つに決まる。なお、各リンクの方向(始点および終点)は、道路網データの作成時に予め決定されるものとする。
また、図4に示した隣接メッシュコードは、対象メッシュから2つ以上離れたメッシュ(隣接メッシュよりも外側のメッシュ)は特定の対象となっていないので、接続リンクが3つ以上のメッシュに跨っている場合には、その接続リンクの属するメッシュを特定できない場合がある。例えば、対象メッシュに位置するノードに接続リンクの終点が接続しており、且つ、その接続リンクが3つ以上のメッシュに跨っている場合、その接続リンクの始点は隣接メッシュよりも外側のメッシュに位置する。この場合、その接続リンクの属するメッシュ(始点ノードが位置するメッシュ)は、隣接メッシュコードを用いて表すことができない。
本実施の形態では、その対策として、3つ以上のメッシュに跨るリンクを複数に分割する。例えば、図5(a)に示すように3つのメッシュに跨るリンク(接続リンク)Laが存在し、その3つのメッシュのうち左側のメッシュが対象メッシュであると仮定する。つまり、中央のメッシュは隣接メッシュであり、右側のメッシュは隣接メッシュよりも外側のメッシュである。図5(a)の如く、リンクLaの一端のノードは対象メッシュ内に存在し、他端のノードは隣接メッシュよりも外側のメッシュ内に存在している。
本実施の形態では、このように3つのメッシュに跨るリンクLaが存在する場合、図5(b)のように、隣接メッシュ内に新たにノードを生成して、リンクLaを2つのリンクLa1,La2に分割する。その結果得られたリンクLa1,La2は、2つのメッシュに跨るため、それらが属するメッシュは隣接メッシュコードで特定することができる。この分割処理は、道路網データの作成時に予め行っておく。4つ以上のメッシュに跨るリンクが存在する場合も、上記の手法を繰り返して、複数のリンクに分割すればよい。
このように3つ以上のメッシュに跨るリンクを、2つのメッシュに跨る複数のリンクに分割する手法には、他の利点もある。例えば、現在地が対象メッシュ内に存在し、現在地周辺でマップマッチング処理や経路探索処理を行う場合に、図5(a)のように、リンクが3つのメッシュに跨って存在すると、対象メッシュおよび隣接メッシュの道路網データに加え、対象メッシュから2つ離れたメッシュ(図5(a)の右端のメッシュ)の道路網データまで地図情報記憶部3から取得して処理を行う必要が生じる。
一方、図5(b)のように、2つのメッシュに跨るリンクだけが存在するのであれば、対象メッシュおよび隣接メッシュの道路網データのみを地図情報記憶部3から取得すれば処理を行うことができる。つまり、3つ以上のメッシュに跨るリンクを、2つのメッシュに跨るリンクに分割することによって、対象メッシュから2つ以上離れたメッシュの道路網データを地図情報記憶部3から取得する必要がなくなり、道路網データの効率的な読み出しが可能となる。また、地図情報記憶部3から読み出す道路網データのデータ量が削減されるため、地図情報記憶部3に対するアクセスが早くなる。
以下では、説明の簡単のため、3つ以上のメッシュに跨るリンクは存在しない(もしくは、3つ以上のメッシュに跨るリンクの分割処理が予め行われている)という前提で説明する。
上記したように、本実施の形態では各リンクが方向の属性(始点および終点)を有している。図3に示した接続リンク情報に含まれる「接続方向」は、当該ノードが接続リンクの始点側に接続しているか、終点側に接続しているかを示す情報である。当該ノードが接続リンクの始点である場合の接続方向を「順方向」と定義し、当該ノードが接続リンクの終点である場合の接続方向を「逆方向」と定義する。
例えば図6に示すように、リンクLxが、ノードNx1とノードNx2との間を接続しており(矢印はリンクLxの方向を表している)、ノードNx1が始点ノード、ノードNx2を終点ノードとなっているとする。この場合、始点ノードNx1に対するリンクLxの接続方向は順方向であり、終点ノードNx2に対するリンクLxの接続方向は逆方向である。なお、各リンクのどちらを始点(または終点)にするのかは、道路網データの作成時に、各リンクの方向に合わせて定められるものとする。
(c)リンクリスト
道路網データに含まれるリンクリストは、メッシュ内に存在する各リンクに対応して設けられたリンクレコードを有する。リンクレコードは、リンクの道路種別、幅員、リンク長等の各種属性を示すリンク属性情報と、リンクに対応する形状レコードの、形状リスト内での格納位置を示す形状レコード格納位置とを有する。各リンクレコードには、リンクリストにおけるリンクレコードの並び順に対応した、リンク番号が付与されるものとする。
本実施の形態において、リンクレコードには、リンクからノードへの接続関係を示す情報(始点ノードおよび終点ノードを表すノード番号)が格納されていない。これにより、地図情報記憶部3に記憶させる道路網データのデータ量を従来よりも削減することができる。
リンクが複数のメッシュに跨る場合、当該リンクは、その始点ノードが存在するメッシュに属するものとする。また、リンクレコードは、当該リンクが属するメッシュに対応したリンクリストに格納されるものとする。それにより、リンクが複数のメッシュを跨る場合でも、当該リンクのリンクレコードを格納するリンクリストが1つに決まる。その結果、リンクレコードが、当該リンクの両端のノードが存在する2つのメッシュのリンクリストに重複して格納されることがなく(すなわち、当該リンクの一端のノードが存在するメッシュのリンクリストのみに格納される)、地図情報記憶部3に記憶される道路網データのデータ量を削減することができる。
(d)形状リスト
形状リストは、メッシュ内に存在するリンクに対応して設けられた形状レコードを有する。形状レコードは、リンクの道路形状の形状点の数を示す形状点数と、リンクの道路形状を折れ線近似で表し、表された折れ線の頂点である形状点の地理的位置を示す形状点リストとを有する。
(e)道路網データの具体例
ここでは、道路網データに含まれるノードリストとリンクリストの具体例を示す。
図7は、リンクおよびノードで表した道路網の一例を示す図である。図7には3つのメッシュMA,MB,MC内のリンクおよびノードが示されている(矢印はリンクの方向を示す)。例えば、メッシュMAを対象メッシュとした場合、メッシュMBは対象メッシュMAの右側に隣接する隣接メッシュである。また、メッシュMCは隣接メッシュMBの右側に隣接しているが、対象メッシュMAに隣接していない。すなわち、メッシュMCは対象メッシュMAの隣接メッシュではない。
図8は、図7のメッシュMAのノードリストに格納される各ノードレコードの一例を示す図である。図8の如く、メッシュMAのノードリストには、ノード番号0,1,2,3がそれぞれ付与されたノードNA0,NA1,NA2,NA3の各ノードレコードが格納されている。また、先に図3を用いて説明したように、各ノードレコードには、ノード座標、接続リンク数、接続リンクテーブルが格納されており、さらに、接続リンクテーブルには、接続リンク情報として、接続リンクメッシュ情報、接続方向および接続リンク番号が格納されている。
ここで、接続リンクメッシュ情報は、図4に示した隣接メッシュコードで表すものとする。接続リンクの接続方向の情報は、リンクの接続方向が順方向の場合を0、逆方向の場合を1と表すものとする。また、メッシュMAにおいて、始点がメッシュMAに位置するリンクLA0,LA1,LA2のそれぞれに0,1,2のリンク番号が付されているものとする(これらは図9に示す各リンクレコードのリンク番号に対応する)。同様に、メッシュMBでは、始点がメッシュMBに位置するリンクLB0,LB1,LB2,LB3のそれぞれに0,1,2,3のリンク番号が付されているものとする(これらは図11に示す各リンクレコードのリンク番号に対応する)。
図9は、図7のメッシュMAのリンクリストに格納されるリンクレコードの一例を示す図である。図9の如く、メッシュMAのリンクリストには、メッシュMAに属する(メッシュMAに始点が位置する)リンクLA0,LA1,LA2のリンクレコードA0,A1,A2が、それぞれリンク番号0,1,2を付与されて格納されている。なお、リンクLB0は、メッシュMA内のノードNA0に接続するが、メッシュMBに属する(始点がメッシュMBに位置する)ものであるため、リンクLB0のリンクレコードはメッシュMAのリンクリストには格納されていない。
図10は、図7のメッシュMBのノードリストに格納される各ノードレコードの一例を示す図である。図10の如く、メッシュMBのノードリストには、ノード番号0,1,2がそれぞれ付与されたノードNB0,NB1,NB2のノードレコードが格納されている。また、図8と同様に、各ノードレコードには、ノード座標、接続リンク数、接続リンクテーブルが格納されており、さらに、接続リンクテーブルには、接続リンク情報として、接続リンクメッシュ情報、接続方向および接続リンク番号が格納されている。
図11は、図7のメッシュMBのリンクリストに格納されるリンクレコードの一例を示す図である。図11に示すように、メッシュMBのリンクリストには、メッシュMBに属するリンクLB0,LB1,LB2,LB3のリンクレコードが、それぞれリンク番号0,1,2,3を付されて格納されている。
このように本実施の形態では、道路網が、メッシュに設けられたノードと、ノード間を接続するリンクとで規定される。地図情報処理装置の地図情報記憶部3(地図情報記憶手段)には、ノードに接続するリンクの情報、および当該リンクが属するメッシュの情報を含む接続リンク情報を含む道路網データ(地図情報)が、メッシュごとに分割されて記憶される。
<道路網補助データ>
マップマッチングや経路探索の処理において道路網を辿る場合、辿るノード毎に、そのノードから1つのリンクを介して繋がる他のノード(隣接ノード)を求める必要がある。本実施の形態に係る地図情報処理装置では、隣接ノードを求める処理の効率よく(高速に)実行するための道路網補助データが作成される。道路網補助データは、プロセッサ4が、地図情報記憶部3から読み取った道路網データに基づいて生成し、道路網データと共にプロセッサ4のメモリに格納される。
道路網補助データは、以下に説明するノードオフセットテーブル、リンクオフセットテーブル、隣接リスト、隣接オフセットテーブル、隣接関係テーブルから構成される。
(a)ノードオフセットテーブル
図12は、ノードオフセットテーブルのデータ構成の一例を示す図である。ノードオフセットテーブルは、ノードリスト内における各ノードのノードレコードの記録位置を表すノードレコードオフセット(ノードリストの先頭から各ノードレコードの先頭までのバイト数)を格納したものである。ノードレコードオフセットのそれぞれは固定長のレコードあるため、各ノードのノード番号から当該ノードに対応するノードレコードオフセットの格納位置が分かる。よって、プロセッサ4は、ノードオフセットテーブルを参照することにより、所望のノードのノードレコードに直ちにアクセスして、当該ノードレコードを取得することができる。
(b)リンクオフセットテーブル
図13は、リンクオフセットテーブルのデータ構成の一例を示す図である。リンクオフセットテーブルは、リンクリスト内における各リンクのリンクレコードの記録位置を表すリンクレコードオフセット(リンクリストの先頭から各リンクレコードの先頭までのバイト数)を格納したものである。リンクレコードオフセットのそれぞれは固定長のレコードあるため、各リンクのリンク番号から当該リンクに対応するリンクレコードオフセットの格納位置が分かる。よって、プロセッサ4は、リンクオフセットテーブルを参照することにより、所望のリンクのリンクレコードに直ちにアクセスして、当該リンクレコードを取得することができる。
(c)隣接リスト
図14は、隣接リストのデータ構成の一例を示す図である。隣接リストは、各ノードに対応する隣接ノードテーブルを含んでいる。隣接ノードテーブルは、対応するノードの各隣接ノードを特定するための情報である隣接ノードレコードが、その隣接ノードに繋がる接続リンクに対応付けされて、並べて格納される。
隣接ノードレコードは、隣接ノードが属するメッシュを隣接メッシュコードで表した隣接ノードメッシュ情報と、隣接ノードのノード番号である隣接ノード番号とを含んでおり、その隣接ノードに繋がる接続リンクと対応づけされている。よって、プロセッサ4は、隣接リストを参照することにより、任意のノードについて、その隣接ノードを直ちに求めることができる。
但し、図3に示したように、本実施の形態の道路網データにおいては、ノードリストにはノードからリンクへの接続関係を示す情報(接続リンク情報)が格納されているが、リンクリストにはリンクからノードへの接続関係を示す情報が格納されていない。つまり、道路網データには、各リンクの片側に接続したノードの情報しか記述されておらず、そのノードにどのノードが隣接するのかという情報は記述されていない。そのため、プロセッサ4は、予め各ノードの隣接ノードを検索して、その検索結果に基づいて隣接リストを作成する。
ここで、プロセッサ4が道路網データから、隣接リストを作成する方法(各ノードの隣接ノードを検索する方法)の概略を説明する。以下では、あるノードが「隣接ノード」として特定されるとき、それを隣接ノードとして特定する基準となったノードを「元ノード」と呼ぶこととする。
例えば、あるリンクL1の両端にノードN1,N2が接続している場合、ノードN1を基準とすると、ノードN2はリンクL1を介したノードN1の隣接ノードであり、ノードN1がその元ノードになる。この場合、ノードN1を「リンクL1の元ノード」、ノードN2を「リンクL1の隣接ノード」と称することもある。
逆に、ノードN2を基準とすると、ノードN1はリンクL1を介したノードN2の隣接ノードであり、ノードN2がその元ノードになる。この場合、ノードN2を「リンクL1の元ノード」、ノードN1を「リンクL1の隣接ノード」と称することもある。
このように、リンクL1に繋がる2つのノードN1,N2は、どちらもリンクL1の元ノードにも隣接ノードにもなることができる。つまり、リンクL1の両端のノードを入れ替えたときに、それぞれ元ノード(または隣接ノード)として現れる2つのノードは、リンクL1を介して隣接関係にあると判断できる。
従って、例えばノードN1がリンクL1の元ノードとして記述された第1のレコードと、ノードN2がリンクL1の元ノードとして記述された第2のレコードとが、それぞれメモリに格納されている場合、そのレコードを入れ替えると、それらの格納箇所のそれぞれに、隣接ノードが記述されたレコードが得られる。つまり、第1のレコードが格納されていた箇所に、ノードN2がリンクL1の元ノードとして記述された第3のレコードが得られ、第2のレコードが格納されていた箇所に、ノードN1がリンクL1の元ノードとして記述された第4のレコードが得られる。
第1および第3のレコード(または第2および第4のレコード)を参照すると、リンクL1の一端はノードN1に接続し、他端はノードN2に接続していることが分かる。つまり、ノードN1とノードN2とが、リンクL1を介して隣接関係にあると判断できる。
プロセッサ4は、この性質を利用して、ノードリストの接続リンク情報から、各ノードの隣接ノードを検索して、その検索結果に基づいて隣接リストを作成する。
(d)隣接オフセットテーブル
図15は、隣接オフセットテーブルのデータ構成の一例を示す図である。隣接オフセットテーブルは、隣接リスト内における各隣接ノードテーブルの記録位置を表す隣接ノードテーブルオフセット(隣接リストの先頭から各隣接ノードテーブルの先頭までのバイト数)を格納したものである。隣接ノードテーブルオフセットのそれぞれは固定長のレコードあるため、各ノードのノード番号から当該ノードの隣接ノードテーブルオフセットの格納位置が分かる。よって、プロセッサ4は、隣接オフセットテーブルを参照することにより、所望のノードの隣接ノードテーブルに直ちにアクセスして、当該隣接ノードテーブルを取得することができる。
(e)隣接リストの具体例
図16は、図7のメッシュMAに対応する隣接リストの隣接ノードテーブル、および、それに対応付けされる隣接オフセットテーブルの一例を示す図である。図16の如く、メッシュMAの隣接リストには、メッシュMAに属するノードNA0,NA1,NA2,NA3のそれぞれに対応する隣接ノードテーブルが設けられる。また、メッシュMAの隣接オフセットテーブルには、ノードNA0,NA1,NA2,NA3に対応する隣接ノードテーブルそれぞれの格納位置を示す隣接ノードテーブルオフセットが格納される。
ノードNA0の隣接ノードテーブルは、ノードNA0の接続リンクLA0,LA1,LA2,LB0のそれぞれに対応する隣接ノードレコードNNRA00,NNRA01,NNRA02,NNRA03から構成される。これらの隣接ノードレコードNNRA00,NNRA01,NNRA02,NNRA03は、ノードリスト(図8)においてノードNA0のノードレコードに記述されている接続リンク情報A00,A01,A02,A03に対応している。隣接ノードレコードNNRA00,NNRA01,NNRA02,NNRA03のそれぞれは、接続リンクLA0,LA1,LA2,LB0を介してノードNA0に繋がる隣接ノードNA1,NA2,NA3,NB0を表している。
また、ノードNA1の隣接ノードテーブルは、その接続リンクLA0に対応する隣接ノードレコードNNRA10から構成される。隣接ノードレコードNNRA10は、ノードリスト(図8)においてノードNA1のノードレコードに記述されている接続リンク情報A10に対応しており、接続リンクLA1を介してノードNA0に繋がる隣接ノードNA0を表している。同様に、ノードNA2の隣接ノードテーブルは、接続リンクLA1に対応付けされ隣接ノードNA0を表す隣接ノードレコードNNRA20から構成される。ノードNA3の隣接ノードテーブルは、接続リンクLA2に対応付けされ隣接ノードNA0を表す隣接ノードレコードNNRA30から構成される。
また、図17は、図7のメッシュMBに対応する隣接リストの隣接ノードテーブル、および、それに対応付けされる隣接オフセットテーブルの一例を示す図である。図17の如く、メッシュMBの隣接リストには、メッシュMBに属するノードNB0,NB1,NB2のそれぞれに対応する隣接ノードテーブルが設けられる。また、メッシュMBの隣接オフセットテーブルは、ノードNB0,NB1,NB2に対応する隣接ノードテーブルそれぞれの格納位置を示す隣接ノードテーブルオフセットが格納される。
ノードNB0の隣接ノードテーブルには、ノードNB0の接続リンクLB0,LB1,LB2,LB3のそれぞれに対応する隣接ノードレコードNNRB00,NNRB01,NNRB02,NNRB03から構成される。これらの隣接ノードレコードNNRB00,NNRB01,NNRB02,NNRB03は、ノードリスト(図10)においてノードNB0のノードレコードに記述されている接続リンク情報B00,B01,B02,B03に対応している。隣接ノードレコードNNRB00,NNRB01,NNRB02,NNRB03のそれぞれは、接続リンクLB0,LB1,LB2,LB3を介してノードNB0に繋がる隣接ノードNA0,NB1,NC0,NB2を表している。
同様に、ノードNB1の隣接ノードテーブルは、接続リンクLB1に対応付けされ隣接ノードNB0を表す隣接ノードレコードNNRB10から構成される。ノードNB2の隣接ノードテーブルは、接続リンクLB3対応付けされ隣接ノードNB0を表す隣接ノードレコードNNRB20から構成される。
上記したように、ノード番号からそれに対応するノードの隣接ノードテーブルのオフセットが分かるため、プロセッサ4は、隣接オフセットテーブルを参照することによって、その隣接ノードテーブルを直ちに取得できる。そして、取得した隣接ノードテーブルから、当該所望のノードの隣接ノードを直ちに求めることができる。よって、プロセッサ4は、隣接ノードを求める処理を効率よく(高速に)実行することができる。
(f)隣接関係テーブル
図18は、隣接関係テーブルの構成を示す図である。隣接関係テーブルは、互いに隣接関係にある2つのノードを表す各隣接ノードレコードの、プロセッサ4のメモリにおける格納位置を示すものである。
隣接関係テーブルは、各リンクに対応付けされた隣接関係レコードから構成される。隣接関係レコードとリンクとの対応付けは、隣接関係レコードをそれに対応するリンクのリンク番号で特定することにより成される。
隣接関係レコードの各々は、第1の隣接ノードレコードオフセットと第2の隣接ノードレコードオフセットとを含んでいる。第1および第2の隣接ノードレコードオフセットは、互いに隣接関係にある2つのノードに対応する隣接ノードレコードのオフセットを示す。隣接ノードレコードのオフセットは、各隣接ノードレコードの格納位置を示す情報であり、例えば、隣接リストが隣接メッシュコードの昇順に並べてメモリに格納されている場合には、隣接メッシュコードが「0」の隣接リストの先頭から、該当する隣接ノードレコードまでのバイト数で表すことができる。従って、第1および第2の隣接ノードレコードオフセットは、どのメッシュの隣接リストの隣接ノードレコードでも指し示すことができる。
(g)隣接関係テーブルの具体例
図19は、図7のメッシュMAに対応する隣接関係テーブルを示す図である。メッシュMAの隣接関係テーブルには、メッシュMAに属するリンクLA0、LA1,LA2に対応する隣接関係レコード(第1および第2の隣接ノードレコードオフセット)が格納される。
例えば、リンクLA0は、隣接関係にあるノードNA0とノードNA1とを繋ぐものである。よって、リンクLA0に対応する隣接関係レコードには、第1の隣接ノードレコードオフセットとして、リンクLA0に対応付けされノードNA1を表す隣接ノードレコードNNRA00のオフセットが格納され、第2の隣接ノードレコードオフセットとして、リンクLA0に対応付けされノードNA0を表す隣接ノードレコードNNRA10のオフセットが格納される。
同様に、リンクLA1に対応する隣接関係レコードには、第1の隣接ノードレコードオフセットとして、リンクLA1に対応付けされノードNA2を表す隣接ノードレコードNNRA01のオフセットが格納され、第2の隣接ノードレコードオフセットとして、リンクLA1に対応付けされノードNA0を表す隣接ノードレコードNNRA20のオフセットが格納される。
さらに、リンクLA2に対応する隣接関係レコードには、第1の隣接ノードレコードオフセットとして、リンクLA2に対応付けされノードNA3を表す隣接ノードレコードNNRA02のオフセットが格納され、第2の隣接ノードレコードオフセットとして、リンクLA2に対応付けされノードNA0を表す隣接ノードレコードNNRA30のオフセットが格納される。
図20は、図7のメッシュMBに対応する隣接関係テーブルを示す図である。メッシュMBの隣接関係テーブルには、当該メッシュMBに属するリンクLB0,LB1,LB2,LB3に対応する隣接関係レコード(第1および第2の隣接ノードレコードオフセット)が格納される。
例えば、リンクLB2は隣接関係にあるノードNB0とノードNC0との間に介在するが、対象メッシュがノードMAの場合、ノードNC0の属するメッシュMCは隣接メッシュではない。プロセッサ4が、対象メッシュと隣接メッシュ以外のノードレコードを取得しない場合、ノードNC0のノードレコードが取得されていないため、ノードNC0の接続リンクとしてのリンクLB2に対応する隣接ノードレコードは作成されていない。その場合、リンクLB2に対応する隣接関係レコードの第2の隣接ノードレコードオフセットを特定することができないので、図20に示すように、第2の隣接ノードレコードオフセットは「無効」を表す値に設定される。
<地図情報処理装置の動作>
(a)道路網補助データの生成処理
図21は、本実施の形態に係る地図情報処理装置のプロセッサ4における、道路網補助データの生成処理を示すフローチャートであり、経路探索処理やマップマッチング処理において、現在地を含む対象メッシュと、対象メッシュに隣接する隣接メッシュとの道路網補助データを生成する動作を示している。
図22は、道路網補助データの生成処理に使用する、プロセッサ4のメモリの内容の一例を示す図である。なお、プロセッサ4のメモリには、図22に示すデータ、リストおよびテーブルを管理するために、それらの格納位置およびレコード数なども格納されるが、それらの図示は省略する。
以下では、地図情報処理装置が作成する道路網補助データの具体例として、図7に示した道路網において、メッシュMAが現在地の存在する対象メッシュ(隣接メッシュコード=0)である場合の道路網補助データを示す。この具体例において、隣接メッシュに対する処理については、メッシュMAの右側に隣接するメッシュMB(隣接メッシュコード=3)に関してのみ説明する。メッシュMB以外の隣接メッシュ(隣接メッシュコード=1,2,4〜8)に対する処理は、メッシュMBに対する処理と同様であるため説明を省略する。
道路網補助データの生成処理が開始されると、プロセッサ4は、現在地が位置する対象メッシュおよびその隣接メッシュに対し、道路網データの読み取り処理(ステップST100)と、それに対応する道路網補助データの初期化処理(ステップST110)とを実行する。これらの処理は、隣接メッシュコードの番号順に実行される。つまり、各処理を実行するメッシュの順番は、最初が対象メッシュ、それ以降は対象メッシュの上、右上、右、右下、下、左下、左、左上の隣接メッシュの順となる。
ステップST100では、プロセッサ4が、対象メッシュとその隣接メッシュの道路網データ(図3)を、隣接メッシュコードの番号順に、地図情報記憶部3から読み取り、さらにその順番で、図22のようにプロセッサ4のメモリに格納する。
例えば、図7に示す対象メッシュMAに対しては、図8のノードリスト、図9のリンクリスト、形状リスト(図示せず)を地図情報記憶部3から読み取り、図22のようにプロセッサ4のメモリに格納する。隣接メッシュMBに対しても、図10のノードリスト、図11のリンクリスト、形状リスト(図示せず)を読み取り、図22のようにプロセッサ4のメモリに格納する。
なお、該当するメッシュが存在しない場合や、読み取りエラーなどにより道路網データが取得できない場合には、ノード数、リンク数を0とした道路網ヘッダのみからなる道路網データをメモリに格納する。
ステップST110では、ステップST100で読み取った道路網データに対応するノードオフセットテーブル(図12)、リンクオフセットテーブル(図13)、隣接リスト(図14)、隣接オフセットテーブル(図15)、および隣接関係テーブル(図18)を、図22に示すようにプロセッサ4のメモリ内に作成し、それらを道路網データに基づいて以下のように初期化する。
ノードオフセットテーブルに対しては、各ノードレコードのオフセットを設定する。リンクオフセットテーブルに対しては、各リンクレコードのオフセットを設定する。隣接オフセットテーブルに対しては、各隣接ノードテーブルのオフセットを設定する。
隣接リストに対しては、各隣接ノードテーブルの全ての隣接ノードレコード(隣接ノードメッシュ情報および隣接ノード番号)を次のように設定する。すなわち、隣接ノードメッシュ情報を「無効」を表す値(例えば0xF)に設定し、隣接ノード番号も「無効」を表す値(例えば0xFFFF)に設定する。
隣接関係テーブルに対しては、全ての隣接関係レコード(第1および第2の隣接ノードレコードオフセット)を次のように設定する。すなわち、第1および第2の隣接ノードレコードオフセットの両方を「無効」を表す値(例えば0xFFFFFFFF)に設定する。
なお、読み取り対象となるメッシュが存在しない場合や、読み取りエラーなどにより道路網データ(図3)が取得できない場合(道路網ヘッダのノード数およびリンク数が0の場合)には、上記の各リストおよびテーブルは作成しない。
ステップST100,ST110の処理が、対象メッシュおよび隣接メッシュの全てに対して終了すると(ステップST120にてYES)、ステップST130へと進む。
ステップST130では、対象メッシュおよび隣接メッシュのそれぞれに対し、プロセッサ4は、以下の処理を行う。このステップST130の処理も、隣接メッシュコードの番号順に実行される。ここで、処理の対象になっているメッシュを「当該メッシュ」と呼ぶこととする。
ステップST130において、プロセッサ4は、当該メッシュのノードリストに基づいて、当該メッシュの隣接関係テーブルに、当該メッシュに属する各リンクを介して隣接関係にある2つのノードの隣接ノードレコードのオフセットを、第1および第2の隣接ノードレコードオフセットとして格納する。つまり、隣接リストの中から、当該メッシュに属する同一のリンクに対応付けされている一組の隣接ノードレコードを、それらの各オフセットを、第1および第2の隣接ノードレコードオフセットとして格納する。またそれと共に、第1および第2の隣接ノードレコードオフセットに登録した隣接ノードレコードのそれぞれに、その接続リンクの元ノードを登録する。なお、該当するメッシュが存在しない場合や、該当するメッシュの道路網データ(図3)が読み取れなかった場合は、上記処理を行わずに処理の対象を次のメッシュへ移行させる。
図23は、道路網補助データの生成処理に係る地図情報処理装置の動作を説明するための図であり、ステップST130およびステップST150における隣接リストの隣接ノードテーブルの登録内容の具体例を示している。例えば、図7に示す道路網データの場合、隣接関係テーブルには、図19および図20のように、各リンクに対応する第1および第2の隣接ノードレコードオフセットが格納され、隣接ノードテーブルの隣接ノードレコードに、図23の「登録ノード(ST130)」の列に示すように、各リンクの元ノードが登録される。
なお、ステップST130の処理については、後でより詳しく説明する。
ステップST130の処理が、対象メッシュおよび隣接メッシュの全てに対して終了すると(ステップST140にてYES)、ステップST150へ移行する。
ステップST150では、プロセッサ4が、各メッシュに対し、隣接関係レコード(第1および第2の隣接ノードレコードオフセット)が示す2つの隣接ノードレコードに登録されているノード(元ノード)を入れ替える処理を行う。ステップST150の処理も、隣接メッシュコードの番号順に実行される。ここでも、処理の対象になっているメッシュを「当該メッシュ」と呼ぶこととする。
上記のステップST130にて、隣接関係レコード(第1および第2の隣接ノードレコードオフセット)が示す2つの隣接ノードレコードには、互いに隣接関係にある2つのノードが登録されている。この2つのノードは共に隣接関係レコードに対応するリンクの元ノードであるため、それを入れ替えて登録すれば、それぞれの隣接ノードレコードに、元ノードの隣接ノードが登録されることになる。
なお、該当するメッシュが存在しない場合や、該当するメッシュの道路網データ(図3)が読み取れなかった場合は、上記処理の対象を次のメッシュに移行させる。
例えば、図7に示す道路網データの場合、ステップST150の処理により、隣接ノードテーブルの隣接ノードレコードには、図23の「登録ノード(ST150)」列に示すノードが登録されることになる。図23から分かるように、このとき登録されたノードは、ステップST130で登録したノード(元ノード)に対して隣接関係にある。つまり、ステップST150の処理によって、隣接ノードレコードの登録内容が、各ノードの隣接ノードとなっていることが分かる。
なお、ステップST150の処理については、後でより詳しく説明する。
ステップST150の処理が、対象メッシュおよび隣接メッシュの全てに対して終了すると(ステップST160にてYES)、道路網補助データの生成処理が終了する。
この結果、図22のように、現在地が位置する対象メッシュおよびその隣接メッシュの各道路網データと、その道路網データに基づいて得られた、対象メッシュおよびその隣接メッシュの道路網補助データとが、プロセッサ4のメモリ内の所定の位置に格納される。
このように、プロセッサ4は、道路網データの接続リンク情報に基づき、特定のノード(対象ノード)の隣接ノードを示す隣接ノードレコード(隣接ノード情報)を求める隣接ノード算出手段としても機能する。
本実施の形態では、リンクが2以上のメッシュを跨がないように分割されているため、対象メッシュとその隣接メッシュの道路網データのみを地図情報記憶部3から取得すれば足りる。つまり、2メッシュ以上離れたメッシュの道路網データの取得する必要がないため、取り扱うデータ量を少なく、処理の効率化が図られている。
(b)ステップST130の詳細
図21のステップST130の処理についてより詳細に説明する。図24はステップST130における処理の詳細を示すフローチャートである。プロセッサ4は、ステップ130において、以下の処理を行う。
まず、ステップST200において、当該メッシュのノードリストのノードレコードをノード番号の順に選択する。すなわち、当該メッシュ内に位置するノードがノード番号の順に選択される。以下では、ステップST200で選択されたノードを「当該ノード」と呼ぶ。
例えば、当該メッシュが図7のメッシュMAの場合、ステップST200が実行されるごとに、図8に示すノード番号0,1,2,3のノードレコードが順に選択される。当該メッシュがMBの場合も同様に、図10に示すノード番号0,1,2のノードレコードが順に選択される。
次のステップST210では、当該ノードの接続リンク情報を、接続リンクテーブルに格納された順に選択する。以下では、ステップST210で選択された接続リンク情報を「当該接続リンク情報」と呼び、当該接続リンク情報に対応するリンクを「当該接続リンク」と呼ぶ。
例えば、当該メッシュがMAの場合は、ステップST210が実行されるごとに、図8の接続リンク情報A00,A01,A02,A03,A10,A20,A30が順に選択される。当該メッシュがMBの場合も同様に、図10に示す接続リンク情報B00,B01,B02,B03,B10,B20が順に選択される。
次のステップST220では、当該接続リンクが所属するメッシュの有無を判断する。つまり、道路網データにおいて、当該接続リンク情報の接続リンクメッシュ情報が示すメッシュに対応するノード数が0の場合、又は、当該接続リンク情報の接続リンクメッシュ情報が示すメッシュが隣接メッシュよりも外側のメッシュ(例えば図7のメッシュMC)である場合には、当該接続リンクの所属メッシュが無いと判断する。
また、隣接メッシュの道路網データを読み取れなかった場合にも、当該接続リンクの所属メッシュが無いと判断する。例えば、当該ノードがノードNA0であるとき、その接続リンクLB0は隣接メッシュMBに所属するが、メッシュMBの道路網データを読み取れなかったときは、接続リンクLB0の所属メッシュが無いと判断する。
当該接続リンクの所属メッシュが無いと判断された場合は(ステップST220にてYES)、後述のステップST260へ進む。そうでない場合は、以下のステップST230〜ST250を実行した後に、ステップST260へ進む。
ステップST230では、当該接続リンク情報の接続リンクメッシュ情報が示すメッシュの隣接関係テーブルを選択し、その隣接関係テーブルから、当該接続リンク情報の接続リンク番号が特定する隣接関係レコードを選択する。
例えば、当該メッシュがMAで、当該ノードがNA0である場合、当該接続リンクがLA0のときは、メッシュMAの隣接関係テーブル(図19)から、接続リンク情報A00が示すリンクLA0に対応する隣接関係レコードが選択される。当該接続リンクがLA1のときは、接続リンク情報A01が示すリンクLA1に対応する隣接関係レコードが選択される。当該接続リンクがLA2のときは、接続リンク情報A02が示すリンクLA2に対応する隣接関係レコードが選択される。また、当該接続リンクがLB0であれば、メッシュMBの隣接関係テーブル(図20)から、接続リンク情報A03が示すリンクLB0に対応する隣接関係レコードが選択される。他の場合も同様である。
続いて、ステップST240へと進み、当該接続リンクに対応する隣接ノードレコードのオフセットを、ステップST230で選択した隣接関係レコードに格納する。このとき、第1の隣接ノードレコードオフセットが「無効」となっている場合は、上記オフセットを第1の隣接ノードレコードオフセットとして格納し、第1の隣接ノードレコードオフセットが「無効」となっていない場合(第1の隣接ノードオフセットとして既に他のオフセットが格納されている場合)は、上記オフセットを第2の隣接ノードレコードオフセットとして格納する。
図19、図20は、メッシュMA,MBの全てのノードとその接続リンクに対してステップST240が実行された後における、隣接関係レコード(第1および第2の隣接ノードレコードオフセット)の格納結果である。
上記したように、ステップST130の処理対象である当該メッシュは、隣接メッシュコードの順で変わり、ステップST200で選択される当該ノードは、ノード番号の順に変わる。よって、当該メッシュがMAで、当該ノードがNA0である場合、当該接続リンクがLA0,LA1,LA2になったとき、それらに対応する隣接関係レコードの第1および第2の隣接ノードレコードオフセットは共に「無効」となっている。従って、メッシュMAの隣接関係テーブルの、接続リンクLA0,LA1,LA2に対応する隣接関係レコードには、図19の如く、それらの第1の隣接ノードレコードオフセットとして、接続リンクLA0,LA1,LA2に対応する隣接ノードレコードNNRA00,NNRA01,NNRA02のオフセットが格納される。
また、当該接続リンクがLB0のときも、それに対応する隣接関係レコードの第1および第2の隣接ノードレコードオフセットは共に「無効」となっている。従って、図20の如く、その接続リンク対応するメッシュMBの隣接関係レコードの第1の隣接ノードレコードオフセットに、第1の隣接ノードレコードオフセットとして、接続リンクLB0に対応する隣接ノードレコードNNRA03のオフセットが格納される。
一方、当該ノードNA1の接続リンクLA0、当該ノードNA2の接続リンクLA1および当該ノードNA3の接続リンクLA2がそれぞれ当該接続リンクとなったときには、上記の処理によって第1の隣接ノードレコードオフセットは「無効」ではなくなっている(既に他のオフセットが格納されている)。従って、図19の如く、それらに対応する隣接関係レコードNNRA10,NNRA20,NNRA30のオフセットは、第2の隣接ノードレコードオフセットとして格納される。
当該メッシュがメッシュMBとなった場合も同様であり、各隣接関係レコードの内容(第1および第2の隣接ノードレコードオフセット)は、図20に示すようになる。当該ノードがNB0で当該接続リンクがLB0のときは、上記により第1の隣接ノードレコードオフセットには、隣接ノードレコードNNRA03が格納されている。従って、メッシュMBで当該接続リンクがLB0のときは、それに対応する隣接関係レコードNNRB00のオフセットは、第2の隣接ノードレコードオフセットとして格納される。
なお、リンクLB2に対応する隣接関係レコードは、ノードNC0がメッシュMCに属し、メッシュMCに対してはステップST130の処理は実行されないため、図20の如く、第2の隣接ノードレコードオフセットは「無効」のままとなる。
このようにステップST240では、隣接関係レコードのそれぞれに、その隣接関係レコードに対応するリンクを介して隣接関係にある2つのノードに対応する隣接ノードレコードのオフセットが格納される。
例えば、リンクLA0を介してはノードNA0とノードNA1とが隣接関係にあるが、図19の如く、リンクLA0に対応付けされた隣接関係レコードには、その隣接関係と一致するように、ノードNA1を表す隣接ノードレコードNNRA00のオフセットと、ノードNA0を表す隣接ノードレコードNNRA10とのオフセットとが、格納される。
続くステップST250では、当該接続リンクに対応する隣接ノードレコードに、当該ノードを登録する処理が行われる。すなわち、当該接続リンクに対応する隣接ノードレコードに、隣接ノードメッシュ情報として対象メッシュから見た当該メッシュの隣接メッシュコードを格納し、隣接ノード番号として当該ノードのノード番号を格納する。
この時点では、隣接ノードレコードには当該接続リンクの隣接ノードではなく、当該接続リンクの元ノードである当該ノードが登録されている。各隣接ノードレコードのオフセットは、ステップST240において、当該接続リンクに対応する隣接関係レコードに格納されているため、接続リンクに対応する隣接関係レコードを参照すれば、その接続リンクの元ノードが登録されている隣接ノードレコードが分かる。
図23の「登録ノード(ST130)」の列は、メッシュMA,MBの全てのノードと、その接続リンクに対してステップST250が実行されたときに隣接ノードレコードに登録されたノードとが示されている。
例えば、当該メッシュがMAで、当該ノードがNA0の場合、当該接続リンクがLA0,LA1,LA2,LB0に対して、それぞれの接続リンクに対応する隣接ノードレコードに元ノードである当該ノードNA0が登録される。当該メッシュがMAで、当該ノードがその他の場合も同様である。
また、当該メッシュがMBで、当該ノードがNB0の場合、当該接続リンクがLB0,LB1,LB2,LB3に対して、それぞれの接続リンクに対応する隣接ノードレコードに元ノードである当該ノードNB0が登録される。当該メッシュがMBで、当該ノード他その他の場合も同様である。
このように、ステップST250では、接続リンクに対応する隣接ノードレコードに、その接続リンクの元ノードが登録される。
例えば図23に示すように、接続リンクLA0を介するノードNA0の隣接ノードNA1を表す隣接ノードレコードNNRA00には、元ノードであるノードNA0が登録される。逆に、リンクLA0介するノードNA1の隣接ノードNA0を表す隣接ノードレコードNNRA10には、元ノードであるノードNA1が登録される。また、上記のステップST240によって、隣接関係テーブルには、リンクLA0に対応する隣接関係レコードとして、それらノードNA0,NA1に対応する隣接ノードレコードのオフセットが格納されている。
なお、先のステップST220において、当該接続リンクの所属メッシュが無いと判断された場合は、ステップST230〜ST250は実行されない。その場合、接続リンクLB0に対応する隣接関係レコードは「無効」のままとなる。
続いて、ステップST260において、当該ノードの全ての接続リンク情報について、以上の処理が終了しているかを判断する。全て終了していればステップST270へと進み、終了していなければステップST210へと戻る。
さらに、ステップST270では、当該メッシュの全てのノードリストの全てのノードレコードについて、以上の処理が終了しているかを判断する。全て終了しなければステップST200へ戻り、全て終了していればステップST130の処理を終了し、図21のステップ140へと進む。
ステップ130では、このような処理が行われることにより、互いに隣接関係にあるノードの隣接ノードレコードのオフセットが隣接関係テーブルに格納され、さらに、各接続リンクの元ノードが隣接ノードテーブルに登録される。
(c)ステップST150の詳細
図21のステップST150の処理についてより詳細に説明する。図25はステップST150の詳細の動作を示すフローチャートである。
まず、ステップST300において、プロセッサ4は、当該メッシュの隣接関係テーブルから所定の隣接関係レコードを選択する。選択される隣接関係レコードは、ステップST300が実行されるごとに変わり、当該メッシュの隣接関係テーブルの先頭のものから順に選択される。
続いてステップST310において、ステップST300選択された隣接関係レコードの第1の隣接ノードレコードオフセットが「無効」か否かを調べる。「無効」であればステップST340へ進み、「無効」でなければステップST320へと進む。
ステップST320では、ステップST300で選択された隣接関係レコードの第2の隣接ノードレコードオフセットが「無効」か否かを調べる。「無効」であればステップST325へと進み、「無効」でなければステップST330へと進む。
ステップST325では、第1の隣接ノードレコードオフセットが示す隣接ノードレコードが有する隣接ノードメッシュ情報および隣接ノード番号に「無効」を表す値を格納する。例えば、図20のリンクLB2に対応する隣接関係レコードでは、第2の隣接ノードレコードオフセットが「無効」である。この場合、図23のように、第1の隣接ノードレコードオフセットが示す隣接ノードレコードオフセットNNRB02を「無効」にする。ステップST325の処理の後は、ステップST340へと進む。
ステップST330では、ステップST300で選択された隣接関係レコードの、第1の隣接ノードレコードオフセットが示す隣接ノードレコードに登録されたノードと、第2の隣接ノードレコードオフセットが示す隣接ノードレコードに登録されたノードとの入れ替えを行う。
隣接関係レコードの第1および第2の隣接ノードレコードオフセットが示す隣接ノードレコードには、その隣接関係レコードに対応するリンクの元ノードが登録されている。上記したように、各リンクの両端のノードは、どちらも元ノードにも隣接ノードにもなることができるので、リンクの両端のノードを入れ替えたときに、それぞれ元ノードとして現れる2つのノードは、そのリンクを介して隣接関係にあると判断できる。従って、同じリンクに対応する隣接ノードレコードに登録されている元ノードを入れ替えると、各隣接ノードレコードの登録内容はその隣接ノードになる。
例えば、当該メッシュがMAであり、ステップST300で選択された隣接関係レコードが、リンクLA0に対応する隣接関係レコードである場合、図19のように、第1の隣接ノードレコードオフセットは隣接ノードレコードNNRA00を示し、第2の隣接ノードレコードオフセットは隣接ノードレコードNNRA10を示している。ステップST330の処理前には、図23の「登録ノード(ST130)」の列に示すように、隣接ノードレコードNNRA00にノードNA0が登録され、隣接ノードレコードNNRA10にノードNA1が登録されている。ステップST330では、それを入れ替え、隣接ノードレコードNNRA00にノードNA1を登録し、隣接ノードレコードNNRA10にノードNA0を登録する。
この結果、図23の「登録ノード(ST150)」の列に示すように、隣接ノードレコードNNRA00は、ノードNA0のリンクLA0を介した隣接ノードNA1を示すようになり、隣接ノードレコードNNRA10は、ノードNA1のリンクLA0を介した隣接ノードNA0を示すようになる。ステップST330の処理の後は、ステップST340へと進む。
ステップST340では、当該メッシュの全ての隣接関係レコードについて以上の処理が終了しているかを判断する。全て終了していれば、ステップST150の処理を終了して図21のステップST160へと進み、全て終了していなければ、ステップST300へと戻る。
このようにして、図23の「登録ノード(ST150)」の列に示すように、各ノードに対応付けられた隣接ノードテーブルに、そのノードの隣接ノードが登録される。つまり、当該メッシュの隣接リストは、当該メッシュ内に位置する各ノードに対応付けられて、その全ての隣接ノードが登録される。その結果、プロセッサ4のメモリ(隣接ノード情報格納手段)には、プロセッサ4が取得した道路網データ(対象メッシュおよび全ての隣接メッシュの道路網データ)に含まれる全てのノードに対する、全ての隣接ノードの隣接ノードレコードが格納された隣接リストが作成される。よって、プロセッサ4は、隣接リストを参照すれば、各ノードの隣接ノードを直接的に求めることができる。
なお、以上の処理において、リンクLB0は2つのメッシュMA,MBに跨っているため、ノードNB0の接続リンクLB0を介した隣接ノードNA0は、メッシュMA及びメッシュMBの片方のノードリストのみからは求めることができない。そのため、ステップ130におけるステップST240、ST250(図24)では、メッシュMAのノードリストを用いて第1の隣接リードレコードオフセットと元ノードNA0を求め、さらに、メッシュMBのノードリストを用いて第2の隣接リードレコードオフセットと元ノードNB0とを求めている。つまり、メッシュMA,MBに跨るリンクLB0を介する隣接ノードは、それらメッシュMA,MBの両方のノードリストを使用して求められている。
(d)隣接ノード算出処理
地図情報処理装置が行う経路探索やマップマッチングの処理では、道路網を辿る処理が行われる。道路網を辿る処理は、現在辿り着いているノードを対象ノードと規定して、その対象ノードと隣接関係にある隣接ノード(次ノード)を求め、その後いずれかの隣接ノードに辿りつけば、そのノードを新たな対象ノードと規定して、その対象ノードと隣接関係にある隣接ノードを求める、という処理を繰り返しながら、次々と道路網のノードを辿っていくことにより行われる。
図26は、本実施の形態に係る地図情報処理装置が隣接ノードを算出する動作を示すフローチャートである。図26に示す動作は、現在辿りついているノードを対象ノードと規定してその隣接ノードを算出し、プロセッサ4のメモリ(図22)に設けられた「次ノードリスト」に登録する処理を行うものである。
次ノードリストは、図14に示した隣接リストと同様のデータ構造である。すなわち、次ノードリストは、対象ノードの接続リンクに対応付けされた隣接ノードレコードを有しており、隣接ノードレコードには、その接続リンクを介して対象ノードに隣接する隣接ノードを特定する隣接ノードメッシュ情報および隣接ノード番号が格納される。隣接ノードメッシュ情報は、隣接ノードが属するメッシュを隣接メッシュコードで表したものであり、隣接ノード番号は、隣接ノードのノード番号である。次ノードレコードは、対象ノードの隣接ノードの数だけ、次ノードレコードを有する。
道路網を辿る処理が、任意のノードに辿り着くと、そのノードが対象ノードと規定されて、隣接ノードの算出処理が開始される。
まず、ステップST400において、次ノードリストを初期化する。つまり、次ノードリストに登録されている隣接ノード数を0にする。
そして、以下のステップST410〜ステップST450の処理を、対象ノードのノードレコードが有する接続リンク情報を順に参照して行う。例えば、対象ノードが図7のメッシュMAに位置するノードNAであるとき、対象ノードのノードレコードは、図8に示すノードリストのノード番号0のノードレコードである。この場合、ステップST410〜ステップST450の処理が、接続リンク情報A00,A01,A02,A03に対してこの順番で行われる。
ステップST410では、対象ノードの隣接ノードテーブルを選択する。つまり、対象ノードが属するメッシュ(対象メッシュ)の隣接リストにおける、対象ノードの隣接ノードテーブルのオフセットを、対象メッシュの隣接オフセットテーブルを参照して求める。
ステップST420では、対象ノードの接続リンクに対応する隣接ノードレコードを、ステップST410で選択した隣接ノードテーブルの中から選択する。例えば、対象ノードが図7のノードNA(図8のノード番号0のノードレコードに対応)であるとき、接続リンク情報A00(接続リンクLA0)に対して図16の隣接ノードレコードNNRA00(LA0)が選択され、接続リンク情報A01(接続リンクLA1)に対して図16の隣接ノードレコードNNRA01(LA1)が選択され、接続リンク情報A02(接続リンクLA2)に対して図16の隣接ノードレコードNNRA02(LA2)が選択され、接続リンク情報A03(接続リンクLB0)に対して図16の隣接ノードレコードNNRA03(LB0)が選択される。
ステップST430では、ステップST420で選択した隣接ノードレコードを、隣接ノードを表す次ノードレコードとして、次ノードリストに格納する。なお、隣接ノードレコードの隣接ノード番号が「無効」(0xFFFF)の場合は、次ノードリストに格納しないものとする。それにより、これ以上先を辿ることができないノードが次ノードとして登録されることが防止される。
ステップST440では、対象ノードの接続リンク情報の全てに対してステップST410〜ステップST430の処理が終了したかを調べる。つまり、対象ノードのノードレコードに記述されている接続リンク数だけの接続リンク情報について、ステップST410〜ステップST430の処理が終了したかを確認する。終了していれば隣接ノードの算出処理が終わり、終了していなければステップST410へ戻る。
例えば、道路網を辿る処理において、対象ノードが図7のノードNA(図8のノード番号0のノードレコードに対応)になると、以上の処理により、次ノードリストには、対象メッシュのMAの隣接リスト(図16)から選択された、対象メッシュMA内の隣接ノード表す隣接ノードレコードNNRA00(LA0),NNRA01(LA1),NNRA02(LA2)が格納され、また隣接メッシュMB内の隣接ノード表す隣接ノードレコードNNRA03(LB0)が格納される。よって、プロセッサ4は、次ノードリストを参照することにより、対象メッシュMA内の隣接ノードNA1,NA2,NA3と、隣接メッシュMB内の隣接ノードNB0とを直ちに得ることができる。
このように、道路網補助データとして、プロセッサ4が取得した道路網データ(対象メッシュおよび全ての隣接メッシュの道路網データ)に含まれる全てのノードに対する、全ての隣接ノードの隣接ノードレコードが格納された隣接リストを用いることにより、プロセッサ4は、接続リンクがメッシュを跨る場合でも、そうでない場合でも、対象ノードの隣接ノードを直ちに求めることができ、道路網を迅速に辿ることができる。
<変形例>
なお、本実施の形態に係る地図情報処理装置の入力部1(図1参照)は、操作スイッチ群であるものとして説明したが、操作スイッチ群以外にも、表示部5の表示面に装着されたタッチパネル(図示せず)、リモートコントロールスイッチ(図示せず)、音声認識装置(図示せず)等を入力手段として使用してもよい。
また、本実施の形態において、各リンクに対応するリンクレコードは、その始点ノードが属するメッシュのリンクリストのみに格納されるが、終点ノードが属するメッシュのリンクリストのみに格納するようにしてもよい。
また、本実施の形態では、接続リンクが属するメッシュを示す接続リンクメッシュ情報を隣接メッシュコードで示したが、隣接メッシュコードに代えて、各メッシュに固有のメッシュ番号などで示してもよい。
また、本実施の形態において、隣接ノードメッシュ情報および隣接ノード番号を含む隣接ノードレコードを、ノードリストとは別の隣接リストとして設けたが、リンクリストのリンクレコード内に設けるようにしてもよい。
また、本実施の形態において、リンクが3つ以上のメッシュに跨って存在する場合は、予め2つのメッシュに跨るようにリンクを分割したが、リンクを分割しなくてもよい。このとき、リンクが所属するメッシュの接続リンクメッシュ情報として隣接メッシュコードが使用できないため、隣接メッシュコードに代えてメッシュ番号を接続リンクメッシュ情報として示してもよい。
なお、本発明は、その発明の範囲内において、実施の形態を適宜、変形、省略することが可能である。