(57)【特許請求の範囲】
【請求項１】
車両の移動に伴って車両位置周辺の地図をスクリーンに表示するナビゲーション装置の地図スクロール方法において、
地図データを地図記録媒体より読み取って地図バッファに既に記憶されているデータを更新するデータ更新制御、地図バッファに記憶されている地図データに基づいて地図画像を発生してＶＲＡＭに描画する地図描画制御、ＶＲＡＭから車両位置周辺の地図画像を切り出してスクリーンに表示する画面表示制御のそれぞれを並列処理により実行可能なデータ更新スレッド、地図描画スレッド、画面表示スレッドを用意し、
これらスレッドの優先度を低くすると共に、データ更新完了前は上記各スレッドのうち、データ更新スレッドの優先度を最高にし、データ更新完了後であって地図描画完了前は地図描画スレッドの優先度を最高にし、
地図描画完了後であって画面表示完了前は画面表示スレッドの優先度を最高にし、地図スクロール処理に際して優先度が最高のスレッドを実行する、
ことを特徴とする地図スクロール方法。
【請求項２】
車両が属する領域に応じた中心図葉に隣接する８つの隣接図葉に対して先読みスレッドを用意し、
車両が進入した隣接図葉の先読みスレッドを前記データ更新スレッドとして扱うことで該図葉データを読みだし、
車両が進入した図葉の隣接図葉に関しては、前記地図更新スレッド、地図描画スレッド、画面表示スレッドより優先度を低く設定した先読みスレッドにより地図データを先読みする、
ことを特徴とする請求項１記載の地図スクロール方法。
【請求項３】
中心図葉を４分割し、画面に表示されている中心点がいずれの分割領域に属するか判断し、
該所属分割領域に隣接する領域に応じた隣接図葉の先読みスレッドの優先度を他の隣接図葉の先読みスレッドの優先度より高くし、優先度の高い隣接図葉をより早く先読みする、
ことを特徴とする請求項２記載の地図スクロール方法。
【請求項４】
既に地図バッファに読み込まれている隣接図葉以外の隣接図葉のみを先読みする、
ことを特徴とする請求項２記載の地図スクロール方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は地図データの先読み方法及び地図スクロール方法に係わり、特に、車両の移動に伴って車両位置周辺の地図をスクリーンに表示するナビゲーション装置における地図データの先読み方法及び地図スクロール方法に関する。
【０００２】
【従来の技術】
車両の走行案内を行い、運転者が所望の目的地に容易に到達できるようにしたナビゲーション装置は、車両の位置を検出して地図記録媒体（例えばＣＤ−ＲＯＭ）から車両位置周辺の地図データを読み出し、地図画像をディスプレイ画面に描画するとともに自車位置マークを重ねて描画する。かかるナビゲーション装置では、自車位置マークをディスプレイ画面上の所定位置に固定表示し、地図を車両の移動に従ってスクロールするのが普通であり、常に車両位置周辺の地図が一目で判るようになっている。このため、ナビゲーション装置では、円滑に地図スクロールができるように適時に車両位置に応じた地図データを地図記録媒体より読み取る必要がある。
【０００３】
地図データは地図を図葉単位に分割して作成されて地図記録媒体に記録、管理されている。この図葉は、一般に表示できる画面の大きさに比べて十分大きい。かかる図葉１枚分のデータだけをメモリにロードしておく方法は、車両が現図葉の境界にさしかかった時に新規地図データの更新が必要になる。図１８はかかる地図データ更新タイミングの説明図であり、４は現在車両が属する領域に応じた図葉、０〜８（４は除く）は周辺の隣接図葉、ＷＤは車両周辺の１画面分のサイズに応じたウィンドウである。車両の移動に応じてウィンドウＷＤが隣接図葉の境界線に到達した時、新規地図データの更新が必要になる。しかし、かかる地図データ更新方法では境界を越える部分で地図データの更新に時間がかかり、地図スクロールが不連続になり、また、画面がチラついているように見えるようになる。
【０００４】
そこで、車両が次に進入する隣接領域を予測し、車両が実際に該隣接領域に進入する前に隣接図葉の地図データを地図記録媒体より先読みする方法が考えられる。例えば、自車が現在走行している方向に道路を延長して中心図葉の境界に接している隣接図葉を先読みする手法や、中心図葉を対角線で４つの三角形に分割し、どの三角形内を自車が走行しているかで対応する隣接図葉を予測して先読みする手法が考えられる。しかし、日本国内の道路網はアメリカのように縦横の道路が碁盤目状に張り巡らされたような画一的なものは稀で、ほとんどの道路は比較的範囲の狭い図葉内においても歪曲している。つまり、上記のような手法を用いて次の図葉を予測しようとしても、確実な予測ができず、予測を誤った場合には、そ都度、再度の予測をしなおす必要があり、最終的には隣接図葉のほとんどを先読みすることになる。これでは、結局のところ予測に要した多大な計算時間が無駄になり、効率が悪く、プロセッサ（ＣＰＵ）のスループットを低下する。
【０００５】
コンピュータシステムにおいて、ＣＰＵがプログラムに基づいて演算処理を実行するタイミングには偏りがあり、頻繁な演算と閑散としたアイドルタイムが混在する。ナビゲーション装置の地図スクロール表示では、ＣＰＵが活発に演算している時間は総ＣＰＵ時間の３割と云われ、残りの７割はつまりアイドルタイムであり、ＣＰＵは活動していない。一方では、地図スクロール表示は地図データを地図記録媒体より読み込む時間がネックとなり、体感的に遅く感じられる。これはＣＤ−ＲＯＭなどの地図記録媒体にアクセスして地図データを主記憶上に読み込む速度がハードディスクなどに比べて遅いことに起因している。
【０００６】
【発明が解決しようとする課題】
以上のように、従来の地図データの先読み法では、ＣＰＵ処理に無駄があり、しかも、ＣＰＵのアイドルタイムが多い問題があった。
また、従来の地図スクロール方法では、地図スクロールが不連続になり、画面がチラツク問題があった。
更に従来の地図スクロール方法では、地図スクロール表示におけるデータ更新がその他の処理に比べて非常に重く、長いデータ更新時間によりその他の重要な処理の実行が遅れ、ユーザからの要求を受け付けられなくなったり、経路探索の実行速度が極端にダウンしたりするなどの問題があった。
【０００７】
従って本発明の目的は、隣接図葉を予測せず、ＣＰＵのアイドルタイムを有効に利用し、該アイドルタイムにおいて現図葉及び周辺の８つの図葉を先読みできるようにすることである。
本発明の別の目的は、並列処理により実行可能なデータ更新スレッド、地図描画スレッド、画面表示スレッドを設け、これらスレッドの優先度を状況に応じてダイナミックに割り当て、かつ、変更することにより地図スクロールを円滑に行えるようにすることである。
本発明の別の目的は、先読みと動的な割り当て可能な優先度を用いた地図描画アルゴリズムによりＣＰＵの負荷がそれほど大きくない時に優先度を低くセットしたスレッドでデータ更新をするようにし、従来再描画のデータ更新時に一時的に発生する大きな負荷を回避し、他の重要な処理の実行が遅れないようにすることである。
【０００９】
【課題を解決するための手段】
上記課題は本発明によれば、車両の移動に伴って車両位置周辺の地図をスクリーンに表示するナビゲーション装置の地図スクロール方法において、(1) 地図データを地図記録媒体より読み取って地図バッファに記憶されているデータを更新するデータ更新制御、地図バッファに記憶されている地図データに基づいて地図画像を発生してＶＲＡＭに描画する地図描画制御、ＶＲＡＭから車両位置周辺の地図画像を切り出してスクリーンに表示する画面表示制御のそれぞれを並列処理により実行可能なデータ更新スレッド、地図描画スレッド、画面表示スレッドを用意し、(2) これらスレッドの優先度を低くすると共に、データ更新完了前は上記各スレッドのうち、データ更新スレッドの優先度を最高にし、データ更新完了後であって地図描画完了前は地図描画スレッドの優先度を最高にし、地図描画完了後であって画面表示完了前は画面表示スレッドの優先度を最高にし、(3) 地図スクロール処理に際して優先度が最高のスレッドを実行する地図スクロール方法により達成される。
【００１０】
かかる方法によれば、地図スクロール制御の各段階において最も重要な役割を担うスレッドを最優先とすることで円滑なスクロールが可能になる。スレッドの優先度の概念を用いることにより、各制御（データ更新制御、地図描画制御、画面表示制御）間の綿密な負荷計算に基づくスケジューリングをカーナビ開発者は行う必要がなくなる。
また、（１）  車両が属する領域に応じた中心図葉に隣接する８つの隣接図葉に対して先読みスレッドを用意し、（２）  車両が進入した隣接図葉の先読みスレッドを前記データ更新スレッドとして地図データを読み出し、（３）  車両が進入した図葉に対する隣接図葉に対しては、前記データ更新スレッド、地図描画スレッド、画面表示スレッドより優先度を低く設定した先読みスレッドにより地図データを先読みさせることで、車両が進入した図葉のデータを最優先で読み出すことができ、その結果、車両位置周辺の地図画像を高速に表示でき、地図スクロールを円滑に行なうことができる。
【００１１】
更に、地図スクロールに必要なデータを用意する先読みスレッドの優先度を低くすることでＣＰＵ負荷が小さい時に地図データの先読みが行なわれるようになり、その結果、再描画時に一時的に大きな負荷が発生することで他の処理が遅延してしまうことを防止でき、システム全体の効率を大幅に改善できる。
また、この場合、（１）  車両が属する領域に応じた中心図葉を４分割し、（２）  画面に表示されている中心点がいずれの分割領域に属するか判断し、（３）  該所属分割領域に隣接する領域に応じた隣接図葉の先読みスレッドの優先度を他の隣接図葉の先読みスレッドの優先度より高くし、（４）  優先度の高い隣接図葉をより早く先読みするようにすれば、車両が次に進入する可能性の高い隣接図葉を早めに先読みできるため、車両位置周辺の地図画像を確実に表示でき、地図スクロールを円滑に行うことができる。
また、既に地図バッファに読み込まれている隣接図葉以外の隣接図葉のみを先読みすることにより、先読みの負荷を小さくでき、先読みに要する時間を短縮でき、確実に中心図葉及び周辺８個の隣接図葉を先読みして地図バッファに格納できる。
【００１２】
【発明の実施の形態】
（Ａ）地図データの先読み（第１実施例）
（ａ）本発明の描画手法
Ｊａｖａ言語を実装言語とし、優先度を低くした（例えば最低にした）スレッドをＣＰＵ空き時間に自動的に起動するようにし、該スレッドにデータの先読み機能を付加する。これにより、ＣＰＵのアイドルタイムに自動的に地図データを先読みして主記憶にバッファリングする先読みスレッドを実現する。スレッドは、処理を並列に実行する。先読みスレッドは、優先度が低いため起動してもシステムの応答性にはほとんど影響を与えない。
【００１３】
（ｂ）地図データ管理
図１（ａ）の実線で示すように中心図葉及び隣接図葉よりなる３×３（＝９）枚の図葉に番号０〜８を付し、該図葉番号を用いて地図データの管理を行う。すなわち、図葉番号０〜８のＨａｓｈｔａｂｌｅを設け、該Ｈａｓｈｔａｂｌｅにより地図データの管理を行う。このため、車両が移動して隣接図葉に進入すると図葉番号の振り替えが必要になる。例えば、図１（ａ）に示すように自車が移動して中心図葉の真下の隣接図葉番号７の図葉に進入した場合、中心図葉は隣接図葉番号７の図葉に更新される。この時、元の中心図葉４は図１（ｂ）に示すように隣接図葉番号１の図葉になる。また、元の隣接図葉番号３の図葉は０になり、５は２になり、６は３に、７は４に、８は５になる。すなわち、自車が移動して中心図葉の真下の隣接図葉番号７の図葉に進入すると、図１（ｃ）に示すように旧図葉番号を新図葉番号に振り替える必要がある。一般的に、自車が進入した図葉の旧図葉番号をＣ、着目している図葉の旧図葉番号をＢ、着目している図葉の新図葉番号をＡとすれば次式
Ａ＝Ｂ＋（４−Ｃ）      （１）
が成立する。図１（ｃ）の場合、Ｃ＝７として（１）式の計算をすれば、新図葉番号Ａが求まる。
【００１４】
ところで、図１（ａ）に示すように自車が中心図葉の真下の隣接図葉番号７の図葉に進入した場合、進入後も利用できる図葉（地図データ）の旧図葉番号は３，４，５，６，７，８であり、進入後に先読みしなければならない図葉（地図データ）の新図葉番号は６，７，８である（図１（ｄ））。すなわち、旧図葉番号３，４，５，６，７，８に（１）式を適用して新図葉番号に振り替えれば新たに地図データを読み込む必要はなく、また、新図葉番号６，７，８の図葉（地図データ）のみを先読みすればよいことになる。図１（ｄ）に示す関係が判っていれば、新図葉番号への振り替え処理及び先読み処理の効率をあげることができる。
そこで、自車が進入する隣接図葉の旧図葉番号Ｃに対応させて、▲１▼進入後も利用できる図葉（地図データ）の旧図葉番号の配列ＡＲ１と、▲２▼進入後に先読みすべき図葉（地図データ）の新図葉番号の配列ＡＲ１を保存しておき、Ｈａｓｈｕｔａｂｌｅの変更操作の計算コストを削減する。図２は、ＣとＡＲ１，ＡＲ２の関係
Ｃ＝｛｛ＡＲ１｝，｛ＡＲ２｝｝
を示すテーブルである。
【００１５】
図３はハッシュテーブルの説明図である。図１の実線で示す状態において、ハッシュテーブルＨＴは図３（ａ）に示すように図葉番号０〜８に対応して地図データｕとしてＧ０〜Ｇ８を対応つける。かかる状態において自車が中心図葉の真下の隣接図葉番号７の図葉に進入すると、ハッシュテーブルＨＴは図３（ｂ）に示すように更新される。すなわち、新図葉番号０〜５に対応して地図データｕとしてＧ３〜Ｇ８を対応つける。また、新図葉番号６〜８に対応する地図データは主記憶装置に読出されていないから、ｕ＝０とする。
【００１６】
（ｃ）ナビゲーション装置の要部構成
図４はナビゲーション装置の描画系の機能構成図であり、１０は地図データを記憶する地図記録媒体（例えばＣＤ−ＲＯＭ）、１１は自車位置等に基づいてＣＤ−ＲＯＭ１０より所定の地図データを読み出すと共に、自車位置に応じてディスプレイ画面に表示される地図上の画面中心位置を計算する地図読出制御部、１２はＣＤ−ＲＯＭから読み出された地図データを記憶する地図バッファ、１３は地図描画部であり、地図バッファに記憶された地図情報を用いて地図画像を発生するもの、１４は地図画像を記憶するＶＲＡＭ、１５は地図読出制御部１１より入力される画面中心位置に基づいてＶＲＡＭ１４より１画面分の地図画像を切り出す地図切出し制御部、１６はディスプレイ装置、１７は自車の位置を測定する位置測定装置である。地図読出制御部１１、地図描画部１３、地図切出し制御部１５は実際にはＣＰＵ（図５）により構成される。
【００１７】
図５はＣＰＵ構成のナビゲーション装置のブロック図であり、図４と同一部分には同一符号を付している。１０は地図記録媒体（ＣＤ−ＲＯＭ）、１４はＶＲＡＭ、１６はディスプレイ装置、１７は位置測定装置、２０はナビゲーション制御を行うプロセッサ（ＣＰＵ）、２１はＣＤ−ＲＯＭ制御部、２２はリモコンインタフェース部、２３は外部メモリ、２４はバスである。ＣＰＵ２０において、３１は演算処理ハードウェア部、３２はプログラムメモリ（ＲＯＭ）で、ナビゲーション制御用の各種プログラム（経路誘導制御、マップマッチング制御、地図スクロール制御等のプログラム）を記憶するもの、３３は主記憶装置（ＲＡＭ）で、ＣＤ−ＲＯＭから読み取った地図データやハッシュテーブル、その他処理結果を記憶するものである。地図スクロール用のプログラムには、図３に示す地図読出し制御、地図描画制御、地図切り出し制御を行うようにプログラミングされている。
【００１８】
（ｄ）先読みアルゴリズム
図６は本発明の先読み制御処理の流れ図であり、（ａ）はメイン処理のフロー、（ｂ）は先読みスレッドの処理フローである。先読みスレッドの優先度を最低にしておき、ＣＰＵが空きになった時にのみ該先読みスレッドを起動して先読みを行うようにする。先読みスレッドの優先度を最低にしてもＣＰＵのアイドル時間は総ＣＰＵ時間の７割であるから、余裕をもって隣接図葉の地図データをＣＤ−ＲＯＭ１１から読出して主記憶装置３３に格納することができる。
【００１９】
ＣＰＵ２０は管理プログラムの制御でナビゲーションのメイン処理を実行すると共に、自分が空きになったか監視する（ステップ１０１〜１０２）。空きになれば、地図先読みが必要か、すなわち、車両が隣接領域に進入して地図の先読みが必要になっているか調べる（ステップ１０３）。隣接領域に進入しておらず先読みが不要であればステップ１０１に戻る。一方、先読みが必要であれば、先読みスレッドを起動し（ステップ１０４）、以後、高優先度のイベント発生を待つ（ステップ１０５）。高優先度のイベントが発生すれば、すなわち、ＣＰＵの空きが解消すれば、先読みスレッドを停止し（ステップ１０６）、メイン処理を実行する（ステップ１０１）。
【００２０】
先読みスレッドは、起動されると初期化する（ステップ２０１）。ついで、ＣＰＵが空きかチェックし、空きでなければ所定時間（例えば１秒間）待って、ＣＰＵの空きをチェックする（ステップ２０２〜２０３）。ＣＰＵが空きであれば、すなわち、停止が指示されていなければ、ハッシュテーブルＨＴ（図３）を参照して先読みすべき隣接図葉を識別し、該隣接図葉をＣＤ−ＲＯＭ１０より読出して主記憶装置３３に格納する（ステップ２０４）。以後、全隣接地図の読み出しが完了したかチェックし（ステップ２０５）、完了してなければ、ステップ２０２以降の処理を繰り返し、全隣接地図の読み出しが完了すれば先読み処理を終了する。
【００２１】
以下は先読みスレッドのアルゴリズムをプログラム化したものである。
（１）．  ｉｆ（ＣＰＵがアイドル）
（２）．              ｆｏｒ（隣接８図葉ｕに対して）
（３）．                  ｉｆ（隣接図葉ｕの先読みスレッドを初期化されていない）
（４）．                    隣接図葉ｕの先読みスレッドを初期化
（５）．                  ｉｆ（隣接図葉ｕの地図データ読み込みが終了していない）
（６）．                    隣接図葉ｕの先読みスレッドを起動
（７）．  ｅｌｓｅ
（８）．              先読みスレッドを停止
（９）．              ｗａｉｔ  １  ｓｅｃｏｎｄ
（１）において、ＣＰＵに空き時間があるかどうかチェックされる。ＣＰＵが空き時間の場合（２）〜（６）が実行される。まず、対応する隣接８図葉に対して先読みスレッドが初期化されているかどうかチェックする（３）。初期化されていない場合には、先読みスレッドを初期化する（４）。すでに対応する先読みスレッドが初期化されており、先読みがまだ終了していないのであれば（５）、その先読みスレッドを起動し、隣接図葉の先読みを実行する（６）。ＣＰＵに空き時間がない場合は、先読みスレッドを１秒間休ませる。
【００２２】
以上では、地図データの先読み（データ更新）に重点をおいて説明したが、地図スクロールする場合には、データ更新制御のほかに、地図描画制御、画面表示制御が必要である。以下では、これら制御用にスレッドを用意し、これらを並列処理する実施例について説明する。
【００２３】
（Ｂ）マルチスレッドによる地図の並列描画制御（第２実施例）
（ａ）概要
一般的な、地図描画手法では再描画時にＣＰＵに多大な負荷が一時的にかかる。これにより、再描画だけでなくシステム全体のパフォーマンスもダウンさせてしまう。このため、結果として、画面がちらついたり、システムダウンしたかのようになり、一時的にユーザからの操作を受け付けなくなる。このような問題を解決するために、再描画時に必要となる部分の地図データをあらかじめ再描画が呼び出される前に先読みする手法が有効であり、（Ａ）で説明した。
ところで、スクリーンに地図を描画するためには、（１）  先読みによる地図データの更新制御（データ更新制御）、（２）  ＶＲＡＭへの地図画像の描画制御（地図描画制御）、（３）  ＶＲＡＭから地図画像を読み取ってスクリーンに表示する制御（画面表示制御）が必要であり、これらの制御を連携し、効率よく地図をスクリーン上でスクロール表示する必要がある。そこで、（Ｂ）においては、スレッドプログラミングを基本にした並列処理により地図スクロール表示を実現する。スレッドプログラミングは並列処理を実現するためのもので、マルチタスクＯＳによってサポートされているものである。以下では、並列処理の優先度設定が容易にできるＪａｖａ言語を用いて説明する。
【００２４】
ＣＰＵの負荷が比較的小さい時間（例えばアイドルタイム）に地図データを先読みをするにあたって、たとえば、「このタスクとあのタスクを同時に行なうとどれだけの計算量を必要とし・・・」というように、あらかじめプログラマーがきっちりしたＣＰＵ使用のスケジューリングを作るのは非常に困難である。一方、スレッドの優先度の概念を用いると、あるタスクＡと別のタスクＢについて、相対的な数値を与えるだけで、ＣＰＵ使用のスケジューリングを自動的に行なってくれる。プログラマーはタスクの優先度を指定するだけで、その実行スケジューリングを考える必要がなくなる。つまり、Ａが優先度１０、Ｂが優先度１と宣言するだけで、ＡはＢに対して１０倍の時間、ＣＰＵを使用することができる。本発明は、以上のようなスレッドの優先度を用いて、必要に応じてその優先度を動的に変化させると同時に、低い優先度で地図データの先読みを行なうことで、地図描画のみならずシステム全体のパフォーマンスをあげる。
【００２５】
（ｂ）マルチスレッドによる描画手法
ナビゲーション装置（図４参照）において地図データを使ってスクリーンに地図を描画するには、次の３つのステップが必要である。
ｓｔｅｐ  １：地図データが保存されている記憶媒体１０から地図データを読み出し、メモリ（地図バッファ）１２にロードする（データ更新）。
ｓｔｅｐ  ２：メモリ１２にロードされたデータを地図として画面に表示できるようにオフスクリーンで加工する。すなわち、地図データを用いてビットイメージの地図画像をＶＲＡＭ１４に描画する（地図描画）。
ｓｔｅｐ  ３：ｓｔｅｐ  ２でＶＲＡＭに描画した画像データを用いて地図を画面（スクリーン）１６に表示する（画面表示）。
【００２６】
一般に、これらｓｔｅｐの処理コストの関係は、
ｓｔｅｐ  ３  ＜＜  ｓｔｅｐ  ２  ＜  ｓｔｅｐ  １
となる。ｓｔｅｐ  １とｓｔｅｐ  ２の処理時間を比較した場合、ｓｔｅｐ  １はｓｔｅｐ  ２の約１．５倍の時間が必要であることが実験により確認されている。また、ｓｔｅｐ  １，  ｓｔｅｐ  ２にくらべｓｔｅｐ  ３は無視できる程度の処理時間しか必要としない。
以上から、システムから描画の要求があって、はじめて上記の３つのステップを実行するのではなく、ｓｔｅｐ  １をＣＰＵの暇な時間にあらかじめ処理しておくという方法（先読み）が有効である。この処理方法については、後述する。まず、先読みを除いた基本的な描画部分について述べる。
【００２７】
（ｃ）描画モデル
描画を行うために、まず図７のような描画モデルを考える。このモデルでは、Ｊａｖａ言語に代表されるスレッドが利用されており、以下の４つのスレッドが同時実行される。４１はデータ管理スレッドであり、描画スレッド群（データ更新スレッド、地図描画スレッド、画面表示スレッド）の管理を行なうもので、具体的には、状況に応じて描画スレッド群の優先度を動的に割り当てる。４２はデータ更新スレッドであり、地図データが保存されている記憶媒体（ＣＤ−ＲＯＭ）  １０から地図データを読み出し、地図バッファ１２にロードする。このデータ更新スレッドは図３における地図読み出制御部１１に相当するものである。４３は地図描画スレッドであり、地図バッファ１２にロードされた地図データを用いてビットイメージの地図画像を発生してＶＲＡＭ１４に格納する。この地図描画スレッドは図３の地図描画部１３に相当するものである。４４は画面表示スレッドで、地図描画スレッドによりＶＲＡＭ１４に描画された地図のうち自車位置に応じた地図部分を切り出してスクリーン１６に表示する。この地図描画スレッド４４は図３の地図切り出し制御部１５に相当するものである。
【００２８】
データ管理スレッド４１は、描画に関するすべてを管理するスレッドであり、最も優先して実行されなければならない。このデータ管理スレッド４１のもと、前述のｓｔｅｐ  １〜ｓｔｅｐ  ３に対応する描画スレッド群（データ更新スレッド４２、地図描画スレッド４３、画面表示スレッド４４）が存在する。描画スレッド群はそれぞれが連鎖的に動作するのではなく、マルチスレッドにより独立、並行に動作する。
これによりデータ更新スレッド４２がデータを収集しながら、地図描画スレッド４３が更新された部分を描画するといった並行作業が可能となる。しかしながら、何らかのルールを定めないと、それぞれのスレッドは独立に自分のタスクを遂行しようとする。このため、地図描画スレッド４３によるＶＲＡＭ１４への地図描画が完成していないのに、画面表示スレッド４４が地図を切り出して画面表示を行なおうとするなど、スレッド間の競合が生じる場合がある。
【００２９】
そこで、本発明では、描画命令が発生した場合、状況に応じてデータ管理スレッド４１の制御で描画スレッド群４２〜４４の優先度を動的に割り当て、かつ、変更できるようにする。この場合、当然のことであるが、描画スレッド群４２〜４４の優先度は、データ管理スレッド４１の優先度よりも小さいものとする。又、ＣＰＵの負荷が低いときに実行されるように各スレッドの優先度を低く設定する。図８はかかる優先度の状況を示す説明図である。
優先度とはスレッド間でＣＰＵ占有時間を変化させるためのものである。すなわち、優先度が高くなるほど実行されやすくなり、また低くなるほど実行は後回しにされる。この特性を利用することにより、必要な処理を優先的に行なわせ、ＣＰＵの空き時間にその他の処理を行なわせることが可能になる。以下では、この優先度割り当てを用いた地図の再描画方法を説明する。
【００３０】
（ｄ）動的な優先度の割り当て
データ管理スレッド４１が描画スレッド群４２〜４４に対して動的な優先度を割り当てる場合、次の状況を考えなければならない。
▲１▼状況１：描画に必要な部分のデータ更新が完了しているか否か。
▲２▼状況２：地図描画が完了しているか否か。
▲３▼状況３：画面表示が完了しているか否か。
これら状況の組み合わせは、全部で８通りある。しかし、描画というものがデータ更新→地図描画→画面表示のステップで進むことを考慮すると、例えばデータ更新が終了していないのに地図描画が終了しているといった状況はなくなるので、次の４通りが残る。
▲１▼状況１：データ更新、地図描画、画面表示の全てが終了していない。
▲２▼状況２：データ更新は終了しているが、地図描画、画面表示が終了していない。
▲３▼状況３：データ更新、地図描画は終了しているが画面表示が終了していない。
▲４▼状況４：データ更新、地図描画、画面表示のすべてが終了している。
【００３１】
そして、これら４つの状況の間には時間的な関係も存在する。つまり、状況４の前の状況というのは状況３しかなく、また状況３の前の状況は状況２しかなく、状況２の前には状況１しかない。よって、その時の処理アルゴリズムも、状況１→状況２→状況３→状況４の順でチェックし、動的な優先度の割当を行えばよいということになる。その時の優先度の割り当て基準は、図９（ａ）〜（ｄ）のようになる。
【００３２】
図９（ａ）は状況１における優先度割当基準であり、優先度は
データ更新スレッド４２＞地図描画スレッド４３＞画面表示スレッド４４
の順にする。
図９（ｂ）は状況２における優先度割当基準であり、優先度は
地図描画スレッド４３＞画面表示スレッド４４＞データ更新スレッド４２
の順にする。
図９（ｃ）は状況３における優先度割当基準であり、優先度は
画面表示スレッド４４＞データ更新スレッド４２＞地図描画スレッド４３
の順にする。
図９（ｄ）は状況４における優先度割当基準であり、優先度は
データ更新スレッド４２＝地図描画スレッド４３＝画面表示スレッド４４
とする。
以上のように各状況に応じて各スレッドの優先度を動的に割り当てることにより矛盾なく、しかも、効率よく地図スクロール制御が可能になる。
【００３３】
以上よりデータ管理スレッド４１による描画スレッド群４２〜４４の動的な優先度割り当てアルゴリズムは図１０のようになる。このアルゴリズムでは、状況１→状況２→状況３→状況４の順で状況が変化することを利用した構造になっている。つまり、“描画部分のデータ更新未完了”は状況１に対応し、“地図描画未完了”は状況２に、“画面表示未完了”は状況３にそれぞれ対応し、“画面表示完了”は状況４に対応している。アルゴリズムでは例えば、再描画命令が新たに発生した場合、まず、データ管理スレッド４１は、描画部分のデータがすでに更新されているかどうかを確認する（ステップ３０１）。更新されていれば次の段階に移行するが、更新過程であった場合は、データ更新スレッド４２を最優先とし、地図描画スレッド４３、画面表示スレッド４４の順に優先度を割り当てる。そして、データの更新が終了すると（ステップ３０２、３０３）、地図の描画が終了したかどうかの確認を行ない（ステップ３０４）、終了していなければ、今度は地図描画スレッド４２を最優先した優先度の変更を行う（ステップ３０５、３０６）。このようにして、各描画段階において最も重要な役割を担うスレッドを最優先とするで、スレッド間の同期を取ることなく競合の回避を実現する。
【００３４】
（ｅ）描画への先読みの導入
以上の方法により、地図は一応、描画できる。しかし、データ更新は地図描画、画面表示に比べて非常に大きな処理コストを必要とする。たとえ、マルチスレッドで▲１▼ユーザとのやりとり（リモコンインタフェース制御）、▲２▼ＧＰＳデータ獲得、▲３▼経路探索等を実装したとしても、地図スクロール表示におけるデータ更新はその他の処理に比べて非常に重く、長いデータ更新時間によりその他のスレッドの実行速度を遅延する。その結果ユーザからの要求を受け付けなくなったり、経路探索の実行速度が極端にダウンしたりする。
【００３５】
このような、問題を解決するために地図の再描画の要求が発生していない場合、つまりＣＰＵに余裕がある時に、あらかじめ再描画要求の発生を見込んでおいて、そのための準備をする先読み処理が有効である。
地図スクロール表示に際して、データ更新コストが最も大きく、データ更新さえできていれば地図描画、および画面表示はわずかなコストで実現できる。よって最もコストの大きい地図更新のためのデータ保存をあらかじめ準備して行なう。このデータの保存とは、未知の地図部分のデジタルデータをＣＤ−ＲＯＭより先読みしていることに他ならない。まず、この先読みすべき地図の部分について説明し、先読みの方法および全体のシステムにおける先読みの位置付けを明確にする。
【００３６】
（ｅ−１）  先読みすべき部分
ナビゲーション等の地図データは、地図を図葉単位で分割して作成してＣＤ−ＲＯＭ等の地図記録媒体に記憶、管理されている。この図葉は、一般に表示できる画面の大きさに比べて十分大きく、かつ図葉１枚のデータだけをメモリにロードしておく方法において、新規地図データ更新の要求が発生するのは、図１１のように図葉の境界にさしかかった時である。そして、この境界を越える部分でデータの更新に時間がかかり、それが原因で画面がチラついているように見えるのである。そこで本発明では、現在画面に表示している部分の中心点が含まれている図葉（中心図葉）に隣接する８つの図葉（隣接図葉）のデータを先読みする。ちょうどこの部分は図１１の隣接図葉１，２，３，４，５，６，７，８を示す。
【００３７】
（ｅ−２）  先読みの方法
先読みでは、それぞれ１つの隣接図葉に先読みスレッドを１つ用意する。つまり、先読みスレッドは全部で８つあることになる。この先読みスレッドにも前述までの優先度の概念を利用する。つまり、これら８つの図葉データのうち、次に描画される可能性の高い図葉ほど高い優先度を設定する。具体的には図１２に示すように８つの先読みスレッドの優先度を決定する。すなわち、中心図葉を４つの領域に分割し、現在画面に表示している部分の中心点が、この領域のどこに含まれているかで、各隣接図葉の先読みスレッドの優先度を決定する。図１３は画面表示部分の中心が属する領域と各隣接図葉の優先度の関係説明図表である。このように隣接図葉の先読みスレッドに優先度を割り当てることで、先読みの中でも特に将来使用される可能性の高い図葉のデータを優先的に読み取って早めに保存することが可能になる。
【００３８】
（ｅ−３）  先読みスレッドの優先度の位置付け
先読みスレッドは補助的な役割を果たすものであり、その優先度はデータ管理スレッド４１、データ更新スレッド４２、地図描画スレッド４３、画面表示スレッド４４よりも低い優先度でなければならない。図１４は先読みスレッドの優先度の位置付け説明図である。
データ更新スレッド４２と先読みスレッド５１〜５８は、機能的に同じである。しかし、データ更新スレッド４１の起動時に全ての先読みスレッド５１〜５８が起動するのではない。再描画時に先読みスレッドにより次に表示すべき部分のデータが準備されていない場合に限り、そのデータの先読みを行っていた先読みスレッドがデータ更新スレッド４２として扱われる。それ以外の先読みスレッドは他のスレッド群４３，４４より低い優先度で実行される。すなわち、車両が所定の領域に進入した場合、該領域に対応する隣接図葉の先読みスレッドをデータ更新スレッド４２として実行し、以後、地図描画スレッド４３、画面表示スレッド４４を実行し、これらスレッド４３、４４の実行完了後に他の先読みスレッドを起動して他の隣接図葉を先読みする。
【００３９】
（ｅ−４）  差分情報を用いることによる先読みの効率性の向上
自車の移動により中心図葉が変化する毎に、新たな隣接８図葉の地図データを先読みするためのスレッドを用意するが、ここでは、その際の効率を向上させる方法について述べる。
例えば、図１５のように１〜２５までの図葉があり、自車の中心図葉が９から１３に移動したとする。自車が図葉９にいた時にすでに、図葉３，４，５，８，９，１０，１３，１４，１５の地図データは完全ではなくともその一部分は先読みとデータ更新（データ更新で読まれるのは９だけ）により地図バッファ１２（図７）に保存されている。次に、自車が図葉１３に移動すると該図葉１３の先読みスレッドがデータ更新スレッド４１として扱われ、新たに図葉７，８，９，１２，１４，１７，１８，１９に関する先読みスレッドが準備される。
【００４０】
しかし、この先読みスレッドのうち８，９，１４は既に中心図葉が９であった時にある程度その地図データが地図バッファ１２に取り込まれているはずである。つまり、新規の中心図葉１３で先読みすべき部分は、▲１▼すでに地図バッファ１２にある程度保存されている図葉８，９，１４と、▲２▼新しい先読みスレッド７，１２，１７，１８，１９ということになる。以上をまとめると、中心図葉がｐからｃに変更される時、
0003621572.tif 000002
ということになる。このような差分情報を用いれば先読み時間を短縮できる
【００４１】
。図１６は差分情報を用いた再描画アルゴリズムのフロー図であり、図１０のアルゴリズムに少し変更を加えた形のアルゴリズムになっている。アルゴリズム中のステップ４０１では、（３）式を満足する図葉（前回の中心図葉ｐに対する先読み部分と新規の中心図葉ｃでの先読み部分との差分となる部分）に対してのみ新しい先読みスレッドを用意し開始する。（２）式を満足する図葉は（重複する部分）は前回の先読みスレッドをそのまま使用する。
以上、先読みと動的な優先度を用いたカーナビ用の描画アルゴリズム（図１６）により、再描画のデータ更新時に一時的にかかる大きな負荷をＣＰＵの負荷がそれほど大きくない時に優先度を低くセットしたスレッドで更新しておくことで、回避することができる。
【００４２】
（Ｃ）評価実験
本手法の有効性を示すために、実際に市販のナビ研ＣＤ−ＲＯＭを使用し、一定方向に画面スクロールさせることで強制的に再描画を発生させ、データ更新・地図描画・地図表示の各必要処理時間をそれぞれ先読みがある場合と、ない場合とで比較を行った。尚、評価はＳｕｎ  Ｕｌｔｒａｌ上で行った。
図１７（ａ），（ｂ）は実験結果のグラフで、（ａ）は先読みしない場合、（ｂ）は先読みした場合である。先読みがある場合も、ない場合も、スクロール時の再描画におけるＶＲＡＭへの地図描画時間、ＶＲＡＭから読み取ってスクリーンに表示する地図表示時間はある範囲内に収まって大差がない。しかし、ＣＤ−ＲＯＭより地図データを読み取って更新するデータ更新時間は、先読みなしの場合において再描画の時、ａ〜ｆで示すように突出している。これは一時的に非常に大きな負荷がＣＰＵにかかっていることを意味している。一方、先読み有りの場合には、突出はなくなっており、データ更新時間はほとんど目立たなくなっている（グラフでは０にかなり近い値になっている）。これは、先読みしない場合において一時的に突出したＣＰＵ負荷が一定に分散されていることを意味し、先読みの利点が明らかである。このように先読みにより、再描画時の処理コストを分散し、これにより、再描画時のシステムへの一時的な負荷を軽減することができた。
【００４３】
つぎに、先読みを用いた時のシステム全体のパフォーマンスの向上について次の図１７（ｃ）に示す。先読みがない場合に比べ、先読みがある場合はシステムの負荷が分散されただけでなく、全体として再描画時のパフォーマンスも約２３％向上したことになる。つまり、先読みは負荷分散だけでなく、システム全体のパフォーマンスを向上させることができる。
以上、本発明を実施例により説明したが、本発明は請求の範囲に記載した本発明の主旨に従い種々の変形が可能であり、本発明はこれらを排除するものではない。
【００４４】
【発明の効果】
以上本発明によれば、（１）  地図データの先読みを行う先読みスレッドを用意すると共に該先読みスレッドの優先度を低くし、（２）  ＣＰＵの空き時間を監視し、（３）  該ＣＰＵ空き時間に先読みスレッドを起動し、（４）  先読みスレッドにより中心図葉及び周辺の隣接図葉を地図記録媒体より読出してメモリに格納するようにしたから、進入する隣接図葉を予測する必要がなく、また、ＣＰＵのアイドルタイムを有効に利用でき、該アイドルタイムにおいて中心図葉及び周辺の図葉を地図バッファに先読みすることができる。
【００４５】
本発明によれば、（１）  地図データを地図記録媒体より読み取って地図バッファに既に記憶されているデータを更新するデータ更新制御、地図バッファに記憶されている地図データに基づいて地図画像を発生してＶＲＡＭに描画する地図描画制御、ＶＲＡＭから車両位置周辺の地図画像を切り出してスクリーンに表示する画面表示制御のそれぞれを並列処理により実行可能なデータ更新スレッド、地図描画スレッド、画面表示スレッドを用意し、（２）  これらスレッドの優先度を低くすると共に、データ更新完了前は上記各スレッドのうち、データ更新スレッドの優先度を最高にし、データ更新完了後であって地図描画完了前は地図描画スレッドの優先度を最高にし、地図描画完了後であって画面表示完了前は画面表示スレッドの優先度を最高にし、（３）  地図スクロール処理に際して優先度が最高のスレッドを実行するようにしたから、地図スクロール制御の各描画段階において最も重要な役割を担うスレッドを最優先に実行でき、スレッド間の同期を取ることなく各スレッドの競合回避を実現でき、円滑な地図スクロールが可能になった。
【００４６】
また、本発明によれば、（１）  車両が属する領域に応じた中心図葉に隣接する８つの隣接図葉に対応して先読みスレッドを用意し、（２）  車両が進入した隣接図葉の先読みスレッドを前記データ更新スレッドとして該隣接図葉を先読みし、（３）  他の隣接図葉に応じた先読みスレッドの優先度を前記地図描画スレッド、画面表示スレッドの優先度より低くして該他の隣接図葉を先読みするようにしたから、車両が進入した隣接図葉を最優先で先読みできるため車両位置周辺の地図画像を確実に表示でき、地図スクロールを円滑に行うことができる。
【００４７】
また、本発明によれば、地図スクロールに必要なデータ更新スレッドの優先度を低くし、ＣＰＵ負荷が低いときに、地図データの先読みを行うようにしたから、従来再描画のデータ更新時に一時的にかかる大きな負荷を回避でき、これにより、他の重要な処理の遅延を防止でき、システム効率を大幅に改善できる。
また、本発明によれば、（１）  車両が属する領域に応じた中心図葉を４分割し、（２）  画面に表示されている中心点がいずれの分割領域に属するか判断し、（３）  該所属分割領域に隣接する領域に応じた隣接図葉の先読みスレッドの優先度を他の隣接図葉の先読みスレッドの優先度より高くし、（４）  優先度の高い隣接図葉をより早く先読みするようにしたから、車両が次に進入する可能性の高い隣接図葉を早めに先読みできるため、車両位置周辺の地図画像を確実に表示でき、地図スクロールを円滑に行うことができる。
【００４８】
また、本発明によれば、既に地図バッファに読み込まれている隣接図葉以外の隣接図葉（差分図葉）のみを先読みするようにしたから、先読みの負荷を小さくでき、先読みに要する時間を短縮でき、確実に中心図葉及び周辺８個の隣接図葉を先読みして地図バッファに格納できる。
【図面の簡単な説明】
【図１】地図データ管理説明図である。
【図２】進入先の旧図葉番号Ｃと進入後利用可能な旧図葉番号配列ＡＲ１及び進入後先読みが必要な新図葉配列ＡＲ２の対応図表である。
【図３】ハッシュテーブルの内容説明図である。
【図４】ナビゲーション装置の要部構成図である。
【図５】ＣＰＵを備えたナビゲーション装置の構成図である。
【図６】先読み制御処理フローである。
【図７】マルチスレッドによる描画モデル説明図である。
【図８】スレッド間の優先度に関する位置付け説明図である。
【図９】各状況における優先度割り当て説明図である。
【図１０】動的優先度の割り当て処理フローである。
【図１１】データ更新要求発生のタイミング説明図である。
【図１２】予測のために中心図葉を４つに分割した分割領域説明図である。
【図１３】先読みスレッド間の優先度割り当て説明図である。
【図１４】先読みスレッドの優先度に関する位置付け説明図である。
【図１５】先読みの差分説明図である。
【図１６】差分情報を用いた再描画アルゴリズムである。
【図１７】評価実験結果説明図である。
【図１８】従来の地図データの更新タイミング説明図である。
【符号の説明】
１０・・地図記録媒体（ＣＤ−ＲＯＭ）
１４・・ＶＲＡＭ
１６・・ディスプレイ装置
１７・・位置測定装置
２０・・プロセッサ（ＣＰＵ）
３１・・演算処理ハードウェア部
３２・・プログラムメモリ
３３・・主記憶装置
【図１】
0003621572.tif 000003
【図２】
0003621572.tif 000004
【図３】
0003621572.tif 000005
【図４】
0003621572.tif 000006
【図５】
0003621572.tif 000007
【図６】
0003621572.tif 000008
【図７】
0003621572.tif 000009
【図８】
0003621572.tif 000010
【図９】
0003621572.tif 000011
【図１０】
0003621572.tif 000012
【図１１】
0003621572.tif 000013
【図１２】
0003621572.tif 000014
【図１３】
0003621572.tif 000015
【図１４】
0003621572.tif 000016
【図１５】
0003621572.tif 000017
【図１６】
0003621572.tif 000018
【図１７】
0003621572.tif 000019
【図１８】
0003621572.tif 000020