k最近傍検索方法、k最近傍検索プログラム及びk最近傍検索装置
【課題】空間データベースの検索時間を短縮しながら、検索処理中のメモリ使用量を抑制することを目的とする。
【解決手段】多次元の地点データから空間インデックスを作成するDBMSで任意地点から距離の近い上位k件の地点データを検索するk最近傍検索方法であって、質問地点と質問件数を検索条件に設定し、質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定し、最下位枝の判定で最近領域が最下位枝となると、質問地点と最近領域の子領域との距離を計算し、領域距離計算の計算対象となった分割領域の情報を保持し、最近領域を取得し、最下位枝の判定で最近領域が中間枝となると質問地点と最近領域に内包される地点データの距離を計算し、距離計算の計算対象となった地点データを保持し、検索条件を満たす時点で検索処理を終了させ、DBMSから保持した地点データのレコードを結果として取得する。
【解決手段】多次元の地点データから空間インデックスを作成するDBMSで任意地点から距離の近い上位k件の地点データを検索するk最近傍検索方法であって、質問地点と質問件数を検索条件に設定し、質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定し、最下位枝の判定で最近領域が最下位枝となると、質問地点と最近領域の子領域との距離を計算し、領域距離計算の計算対象となった分割領域の情報を保持し、最近領域を取得し、最下位枝の判定で最近領域が中間枝となると質問地点と最近領域に内包される地点データの距離を計算し、距離計算の計算対象となった地点データを保持し、検索条件を満たす時点で検索処理を終了させ、DBMSから保持した地点データのレコードを結果として取得する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、任意の多次元地点データから距離の近い上位k件の地点データを、厳密かつ高速に検索するk最近傍検索技術に関する。特に、地図情報管理を想定し、2次元、または3次元空間の地点データを検索対象とする。
【背景技術】
【0002】
これまでに、地図情報管理を目的とし、空間検索機能を有するデータベース管理システムが開発されている。このようなデータベース管理システムを空間データベースと呼ぶ。空間データベースは、地物を点、線、面などの図形要素と、地物の内容を示す文字や数値などの属性要素を管理できる。空間検索機能は、任意の範囲に内包、または接触する地物を取得する範囲指定検索を実現する。範囲指定検索の高速化のため、四分木、グリッドファイル、R−treeなどの空間インデックス技術が既に提案されている。空間インデックス技術は、空間領域における地物の配置分布に応じて、空間領域を分割する。
【0003】
従来、空間データベースは、エンタープライズのアプリケーション向けに開発されてきた。ところが、近年、空間データベースが組込機器のアプリケーション向けにも開発されてきている。空間データベースを必要とする組込機器は、カーナビゲーション装置やPND(Personal Navigation System)などの地図情報を管理する機器である。カーナビゲーション装置は、現在地や目的地などユーザの指定した地点付近の飲食店や駐車場などの地点データを検索する機能をもつ。その際、ユーザの指定した地点(以下、質問地点と呼ぶ)から距離の近い上位k件(以下、質問件数と呼ぶ)の地点データを空間データベースから取得するk最近傍検索が知られている。
【0004】
従来の空間データベースにおけるk最近傍検索は、範囲指定検索を用いて、実現される。従来のk最近傍検索では、まず、質問地点を中心とした任意の大きさをもつ検索範囲が設定される。検索範囲に含まれる地点データが質問件数以上ならば、質問地点と当該地点データとの距離を計算する。そして、距離の短い順に当該地点データをソートし、距離の短い上位k件の地点データを、検索結果として取得する。一方、検索範囲に含まれる地点データが質問件数未満ならば、質問件数以上になるまで、検索範囲が大きく設定され、範囲指定検索が繰り返される。例えば、グリッドファイルによる範囲指定検索を用いた方法(例えば、特許文献1参照)や、四分木による範囲指定検索を用いる方法(例えば、特許文献2参照)などが知られている。
【特許文献1】特開2003−242151号
【特許文献2】米国特許第6、879、980号
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかしながら、上記従来技術を組込機器に適用すると、以下のような問題があった。
【0006】
まず、第1の問題として、ディスクアクセスと演算負荷により、検索時間が増大する。
【0007】
一般に組込機器は小容量の主記憶装置を備えるため、検索実行時に空間インデックスのページを外部記憶装置から主記憶装置に読込むディスクアクセスが発生する。そのため、組込機器では、検索範囲に含まれる地点データの件数が非常に多い場合、ディスクアクセスが頻発し、検索時間が長くなる。特に、この問題は、地点データの存在密度が高い地域で、検索範囲が大きい場合に発生する。一方、エンタープライズ用のサーバは、大容量の主記憶装置を備えている。そのため、サーバは、空間インデックスの大部分のページを予め主記憶装置に格納できる。この場合、検索範囲に含まれる地点データが多い場合でも、ディスクアクセスが頻発せず、検索時間が長くならない。
【0008】
また、組込機器は低速な中央処理装置を備えるため、質問地点と地点データまでの距離計算や、距離によるソート処理等の演算負荷が検索時間に影響を与える。特に、検索範囲に含まれる地点データの件数が非常に多い場合、演算負荷が増大し、検索時間が長くなる。一方、エンタープライズ用のサーバは、高速な中央処理装置を備えるため、演算負荷による検索時間の影響は小さいと言える。
【0009】
上記では、検索範囲に含まれる地点データの件数が非常に多い場合に、ディスクアクセスと演算負荷の面で、問題があることを述べた。また、検索範囲に含まれる地点データが質問件数未満の場合でも、質問件数を満たすまで、検索処理を繰り返すため、上記と同様の問題が発生する。
【0010】
この問題を解決するため、空間データベースが、質問件数と質問地点付近の地点データの存在密度に基づき、検索範囲を適切な大きさに設定する方法が考えられる。しかし、この方法は、組込機器に適切な方法とは言えない。それは、組込機器にとって、地点データの挿入や削除が発生する状況において、地点データの存在密度の管理は、負荷の大きい処理になるためである。
【0011】
以上より、組込機器で従来の範囲指定検索を用いたk最近傍検索は、検索時間が増大する、という課題が生じる。
【0012】
次に、第2の問題として、検索実行中のメモリ使用量が多くなる場合、検索処理を実行できない。または検索時間が長くなる。
【0013】
従来技術では、検索範囲に含まれる全ての地点データを主記憶装置上に保持し、質問地点からの距離を用いて、ソートする。そのため、検索範囲に含まれる地点データが多いと、メモリ使用量が増大する。この場合、組込機器は小容量の主記憶装置を備えるため、従来技術を実行できない可能性がある。
【0014】
この問題を解決するため、主記憶装置のメモリ空間から溢れた地点データを、外部記憶装置に退避する方法がある。この方法では、地点データのソート処理で、ディスクアクセスが発生するため、検索時間が長くなる。
【0015】
また、第3の問題として、従来のk最近傍検索と属性指定検索を組合せた場合、件数がk件未満の不正確な検索結果になる可能性がある。
【0016】
k最近傍検索と属性指定検索の組合せは、多種類の地点データを含むテーブルに対して、実行される。例えば、カーナビゲーション装置が管理する施設テーブルには、レストラン、駐車場、ガソリンスタンドなどが含まれる。さらに、施設の種類がレストランの場合、施設テーブルには、日本料理、イタリア料理、フランス料理など、細かい種別が含まれる。その際、ユーザは、質問地点と質問件数に加え、地点種別を設定し、k最近傍検索を実行する。通常の空間データベースでは、テーブルが属性情報と座標情報を別々の列として管理する。そのため、SQL(Structured Query Language)のWHERE句で、k最近傍検索と属性指定の条件をAND演算子で結合する。
【0017】
このとき、k最近傍検索で質問件数分の結果が得られても、属性指定で、質問件数未満に絞り込まれる場合がある。これは、k最近傍検索で得られた地点データの集合と、属性指定で得られた地点データの集合で、積集合を取るためである。
【0018】
この問題を回避するため、エンタープライズ用のデータベース管理システムでは、質問件数をk件より多く設定する方法が採用されている。つまり、検索結果が属性指定で絞り込まれても、k件以上残る仕組みになっている。しかし、組込機器では、この方法は適切ではない。それは、質問件数が多い場合、必要な空間インデクスのページ数が増え、小容量の主記憶装置を備える組込機器では、ディスクアクセスが頻発し、検索時間が長くなるためである。一方、エンタープライズ用のサーバは大容量の主記憶装置を備えている。そのため、予め空間インデクスのページを主記憶装置に格納しておけば、質問件数が多くても、ディスクアクセスが頻発しない。
【0019】
さらに、第4の問題として、上位k件の地点データが質問地点の付近に存在しない場合、検索時間が長くなる。
【0020】
従来のk最近傍検索では、質問件数が満たされるまで、検索範囲が拡大される。質問地点の付近に所望の地点データが存在しない場合、検索結果が質問地点から数十キロも離れた地点データを含む可能性がある。検索範囲が拡大されると、必要な空間インデクスのページ数が増える。そのため、先に述べたように、小容量の主記憶装置を備えた組込機器では、検索時間が長くなる。
【0021】
そこで本発明は、上記問題点に鑑みてなされたもので、空間データベースの検索時間を短縮しながら、検索処理中のメモリ使用量を抑制することを目的とする。
【課題を解決するための手段】
【0022】
本発明は、多次元の地点データと、前記地点データを含む領域を複数の領域に分割して当該領域内に子領域を設定し、前記地点データと前記領域から枝と葉を含む木構造を作成した空間インデックスと、を含むデータベースと、前記データベースを管理するデータベース管理システムにおいて、検索の始点となる質問地点を受け付けて、前記質問地点から距離の近い上位k件の質問件数の地点データを検索するk最近傍検索方法であって、前記質問地点と質問件数を検索条件に設定するステップと、前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定するステップと、前記最近領域が中間枝と判定されると、前記質問地点と最近領域の子領域との距離を領域距離として計算するステップと、前記領域距離の計算対象となった領域の情報を保持し、当該領域の最近領域を取得するステップと、前記最下位枝か中間枝かの判定結果で、前記最近領域が最下位枝と判定されると、前記質問地点と最近領域に内包される地点データの距離を地点距離として計算するステップと、前記地点距離の計算対象となった地点データの情報を保持するステップと、前記検索条件を満たすまで、前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定するステップ以降の検索処理を繰り返し、前記検索条件を満たした時点で前記検索処理を終了させるステップと、前記検索処理が終了した後に、前記保持された地点データのレコードを検索結果として前記データベース管理システムから取得するステップと、を含む。
【発明の効果】
【0023】
本発明は、範囲指定検索を用いた従来のk最近傍検索に比べ、空間インデックスのページへのディスクアクセス回数を削減できるため、検索時間を短縮できる。また、距離計算やソート処理の対象とする地点データを減らすため、プロセッサの演算負荷を軽減できる。さらに、検索実行中のメモリ使用量を抑制できる。
【発明を実施するための最良の形態】
【0024】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【0025】
<第1の実施形態>
図1は、第1の実施形態を示し、本発明を適用するカーナビゲーション装置の一例を示すブロック図である。カーナビゲーション装置1は、演算処理を行うCPU(プロセッサ)3と、データやプログラムを一時的に格納するメモリ2と、データやプログラムを格納するストレージ装置5と、演算結果などを表示する表示装置4と、ユーザからの入力を受け付ける入力装置6と、GPS(Global Positioning System)衛星からの信号を受信するレシーバ10を含んで構成される。
【0026】
ストレージ装置5には、地図を構成する地物を点、線、面などの図形要素と、地物の内容を示す文字や数値などの属性要素を含む空間データベース100が格納される。なお、空間データベース100に格納された情報のうち、店舗や施設などひとつの地点の情報を地点データとする。
【0027】
メモリ2には、空間データベース100を管理するDBMS(Database Management System)8と、DBMS8を介して空間データベース100を利用するアプリケーション9と、DBMS8とアプリケーション9を管理するOS(オペレーティングシステム)7がロードされ、CPU3により実行される。アプリケーション9は、レシーバ10で受信したGPS衛星の信号から現在の位置を演算し、現在の地点データを空間データベース100から検索し、地図情報を取得して表示装置4へ出力する。また、カーナビゲーション装置1では、入力装置6からユーザが検索の指令を受け付けると、アプリケーション9はDBMS8を介して空間データベース100を後述するように探索し、要求された検索結果を表示装置4に出力する。なお、OS7、DBMS8、アプリケーション9は記録媒体としてのストレージ装置5に格納され、カーナビゲーション装置1の起動時にメモリ2へロードされ、CPU3によって実行される。
【0028】
また、アプリケーション9は、ワークエリアとしてメモリ2上の領域を確保する。これらの領域は、後述する候補地点ヒープ91、候補領域ヒープ92、結果リスト93等である。
【0029】
ここで、本実施形態は、上記第1の問題と第2の問題を解決可能なk最近傍検索を実現する。本発明の適用範囲は、基本的に空間データの次元数と空間インデックス技術の種類によって、限定されない。本発明で利用可能な空間インデックス技術の要件は、
1.空間領域を再帰的に分割し、分割した領域の情報を記憶する枝を木構造の節とする
2.枝の領域範囲は前記枝の親の節にあたる枝の領域範囲に内包されるという階層的な構造をもつ
3.自身が小分割されない分割領域は当該分割領域が内包する地点データの情報を記憶する葉をもち、葉は木構造の最下位の節に接続していること
である。
【0030】
以下の説明では、空間データベース100に格納された2次元空間における地点データをカーナビゲーション装置1の検索対象とし、空間インデックス技術に四分木手法を適用する例を示す。
【0031】
図1に示す空間データベース100は、地図情報を構成する地点の座標と属性を格納した地点テーブル501と、地点テーブル501の索引情報を格納した空間インデックス101を含む。
【0032】
まず、空間インデックス101は、空間データベース100で管理する地点テーブル501に地点データを挿入する際に図示しない計算機によって作成される。本実施形態では、空間インデックス101の一例として、図4に示す領域分割テーブル401を採用した例を示す。また、地点テーブル501は、地点データの属性情報に加え、X座標とY座標から構成される座標情報を列に含む。例えば、カーナビゲーション装置1で管理する施設テーブルは、施設名、住所、電話番号などの属性情報と、施設の存在場所を平面直角座標系のX座標とY座標で表現した座標情報をもつことが考えられる。
【0033】
四分木手法は、空間データベース100への地点データの挿入に伴い、2次元空間のX軸とY軸に平行な面で4分割する。四分木手法では、一般に、分割領域で格納可能な地点データの最大個数を決め、地点データの挿入で、最大個数を超えた場合に、分割領域を4分割する。領域分割の方法には、4分割後の分割領域の面積を均等にする方法や、4分割後の分割領域内の地点データの個数をできるだけ均等にする方法などが提案されている。後者の方法は、例えば、分割対象の領域内の全ての地点データの重心座標で4分割することで、実現する。本発明のk最近傍検索は、領域の分割方法に依存せず、動作可能である。以下では、四分木手法のデータ構造について記載する。本発明は、空間インデックス技術の上で動作するk最近傍検索である。空間インデックス技術そのものに関する発明ではない。そのため、本実施例では、四分木の生成や探索の手順については公知の手法を適用すればよいので、これらの詳細な説明を省略する。
【0034】
図2は、2次元空間内の一つの座標で位置を特定可能な地点データについて、四分木手法により空間領域201を階層的に分割した例を示す。空間領域201は分割線204で4分割される。各分割領域は、分割領域の識別子(領域ID)202をもつ。分割領域が、当該分割領域を4分割する領域をもたない場合、地点データ202を格納する。例えば、深さ3の分割領域35は、地点データGを格納する。この空間領域201は、多次元空間で各軸を通る面で階層的に分割した分割領域0〜36を木構造で管理する空間インデックス101を構成する。
【0035】
図3は、図2の領域分割に対応した木構造を示す。図3において、木構造の節に対応するものが枝301(図中円)であり、最下位の節と隣接するのが葉302(図中四角)である。枝301と分割領域は1対1の対応関係であり、枝301の数字は図2に示した領域IDを指す。葉302内の英字は地点データIDを示す。地点データIDは、図2のA〜Mに対応する。実施形態の四分木手法は最下位の枝301が、当該枝に隣接する葉302の中に地点データの情報を格納する。
【0036】
図4は、空間データベース100の空間インデックス101に予め格納された分割領域テーブル401を示す。分割領域テーブル401は、四分木の枝301に格納される分割領域の情報を指す。図4は、分割領域テーブル401の属性411と、当該属性に対応する中間枝(図3では、分割領域0〜8に相当する)と最下位枝(図3では、分割領域25〜28、33〜36に相当する)の値を例示する。分割領域の情報は、領域ID412、領域範囲413、分割座標414、子領域ID415、子領域ポインタ416、葉ポインタ417、地点個数418を含む。
【0037】
領域ID412は、分割領域を示す一意の識別子である。領域範囲413は、領域の左下頂点と右上頂点のX−Y座標で表現する。分割座標414は領域を四分割した際の分割点の座標を示す。当該分割領域は、分割座標414を通り、かつX軸とY軸に平行な2本の直線で、4分割する。
【0038】
子領域ID415は、当該領域を四分割した分割領域の識別子を示す。子領域ポインタ416は、子領域ID415が示す分割領域に対応した枝301を格納したストレージ装置5のアドレス値(例えば、LBA(Logical Block Address))を示す。当該枝301が最下位枝である場合、当該枝301に対応した分割領域は子領域を持たない。最下位枝に対応する分割領域の分割座標414、子領域ID415、子領域ポインタ416はNULLとする。葉ポインタ417は、当該枝301に隣接する葉302を格納したストレージ装置5のアドレス値を示す。地点個数418は、当該枝301に隣接する葉302が格納する地点データの個数を示す。当該枝301が中間枝である場合、当該枝301の葉ポインタ417はNULL、地点個数は0になる。
【0039】
図5は、空間データベース100の空間インデックス101に予め格納された地点テーブル501を示す。地点テーブル501は四分木の葉302に記憶され、地点データの情報を示す。この地点データは、葉302に隣接する最下位枝に対応する分割領域が内包する地点データである。各地点データの座標情報は、地点ID511、地点座標512、地点ポインタ513を含む。地点ID511は、当該地点データの一意の識別子である。地点座標512は、当該地点データの位置を特定する座標を示す。地点ポインタ513は、当該地点データに該当するレコードを格納したストレージ装置5のアドレス値を示す。
【0040】
図6は、カーナビゲーション装置1のCPU3で実行されるk最近傍検索の手順を示すフローチャートである。この処理は、CPU3で実行されるアプリケーション9が、入力装置6から質問地点を受信すると開始される。
【0041】
k最近傍検索の処理が開始されると、まず、初期設定部111ではCPU3が、質問地点や質問件数の設定及び候補領域管理部113や候補地点管理部116で利用するメモリ2の領域確保を行う(S101)。
【0042】
次に、最下位枝判定部112では、最近領域が当該領域をさらに4分割する領域をもつか、つまり子領域をもつか否かを判定する(S102)。最近領域とは、結果候補に入るか否かを調査していない地点データを含む分割領域の中で、質問地点に距離が最も近い領域を示す。S102の条件を満たさない場合、最近領域が最下位枝でないと判定される。この場合、領域距離計算部113が、質問地点と最近領域の子領域との最短のユークリッド距離(領域距離d)を計算する(S103)。
【0043】
そして、候補領域管理部114が、最近領域の子領域を候補領域として、子領域の情報を記録する(S104)。候補領域とは、結果候補に入るか否かを調査していない地点データを含む分割領域を示す。その後、候補領域管理部114が、候補領域の中から領域距離dに基づき、次の最近領域を選択する(S105)。
【0044】
一方、上記S102の条件を満たす場合、現在着目している最近領域が最下位枝であると判定される。この場合、地点距離計算部115が、質問地点と最近領域に含まれる地点データとの距離(地点距離d’)を計算する(S106)。
【0045】
次に、候補地点管理部116は、求めた地点距離d’に基づき、質問地点に距離が近い上位k件の地点データの情報を記録する(S107)。そして、終了判定部117は、候補領域内の地点データが候補になり得ないか否かを判定する(S108)。この終了条件を満たさない場合、S105の処理へ進み、検索処理を続行する。
【0046】
一方、終了条件を満たす場合、結果取得部118は、候補地点管理部116が記憶した地点データに対応する結果レコードを取得する(S109)。
【0047】
上記処理を終了条件が成立するまで繰り返すことで、検索結果を空間データベース100から取得する。
【0048】
図7は、k最近傍検索の初期設定(S101:初期設定部111)の詳細な手順を示すサブルーチンのフローチャートである。
【0049】
図7の初期設定処理は、図6の初期設定部111によって実行される。まず、初期設定部111は、質問地点と質問件数を、k最近傍検索の入力値として設定する(S601)。質問地点と質問件数は、例えば、上記入力装置6から受け付けた値である。なお、質問地点は、入力装置6から検索指示を受け付けた時点のユーザの現在位置を用いても良い。
【0050】
次に、初期設定部111は、メモリ2から、候補領域を記憶するメモリ領域をヒープ構造(以下、候補領域ヒープ92)で確保する(S602)。ヒープ構造を用いる理由は、候補領域管理部114が最近領域の子領域の情報を記録する(S104)際の挿入操作と、次の最近領域を選択する際(S105)の選択操作で、効率の良いデータ構造だからである。
【0051】
候補領域ヒープ92は、領域ID412、領域情報ポインタ、領域距離dから構成される要素を格納する。領域情報ポインタは、当該領域に対応する枝301を格納したストレージ装置5のアドレス値を示す。領域距離dは、質問地点と当該領域までの最短距離を示す。候補領域ヒープ92は木構造で管理される。候補領域ヒープ92は、要素の挿入や削除があっても、各要素の領域距離dが、当該要素の子要素の領域距離dより小さいか等しいというヒープ条件を満たす。つまり、候補領域ヒープ92の根要素は、最小の領域距離dをもつ分割領域の情報を格納する。
【0052】
初期設定部111は、メモリ2から、候補地点を記憶するメモリ領域をヒープ構造(以下、候補地点ヒープ91)で確保する(S603)。ヒープ構造を用いる理由は、候補地点管理部116が上位k件の地点データの情報を記録する(S107)際の挿入操作で、効率の良いデータ構造だからである。候補地点ヒープ91は、地点ID511、地点ポインタ513、地点距離d’から構成される要素を格納する。候補地点ヒープ91は、要素の挿入や削除があっても、各要素の地点距離d’が、当該要素の子要素の地点距離d’より大きいか等しいというヒープ条件を満たす。つまり、候補地点ヒープ91の根要素は、最大の地点距離d’をもつ地点データの情報を格納する。この特徴により、候補地点がk件存在する状況で、k+1件目以降の地点データが候補に入るか否かを判定する場合、根要素を参照するだけで候補となるか否かを容易に判定できる。具体的には、判定対象の地点データの地点距離d’が、根要素の地点データの地点距離d’より小さければ、根要素の地点データに代わって判定対象の地点データが候補に入る。本操作により、メモリ上には常に上位k件の地点データのみが保持されることになり、検索実行中のメモリ使用量を抑制できる。
【0053】
初期設定部111は、四分木の根にあたる領域を最近領域に設定し(S204)、サブルーチンを終了する。この場合、最近領域は全体の領域となる。その後、図6に示した最近領域の最下位枝判定の処理に進む(S102)。
【0054】
図8は、最近領域に対する最下位枝判定(S102)の詳細な手順を示すサブルーチンのフローチャートである。最下位判定の処理は、最下位枝判定部(112)によって実行される。まず、初期設定部111のS604で決定した最近領域に対応する四分木の枝情報を取得する(S701)。枝情報は、ストレージ装置5の空間データベース100内に予め格納されている。次に、図4に示した分割領域テーブル401を参照して、当該枝情報の分割領域の座標がNULLか否かを判定する。この条件により、最近領域が最下位枝であるか否かを判定できる。当該条件を満たさず、最近領域が中間枝の場合、質問地点と最近領域の子領域との領域距離dを計算する処理(S103)へ進むため、次の処理として領域距離計算部113を選択する(S703)。当該条件を満たし、最近領域が最下位枝である場合は、質問地点と最近領域に内包される地点データとの距離を計算する処理(S106)に進むため、次の処理として地点距離計算部115を選択する(S704)。そして、サブルーチンを終了するとステップS703またはS704の何れかで選択した処理に分岐する。
【0055】
図9は、領域距離計算(S103)の詳細な手順を示すサブルーチンのフローチャートである。領域距離計算の処理は、領域距離計算部113よって実行される。領域距離計算部113は、分割領域テーブル401を参照して、質問地点と最近領域の子領域との領域距離dを計算する。領域距離dの計算には、子領域の領域範囲が必要になる。子領域の領域範囲は、最近領域の枝情報の領域範囲413と分割座標414の情報から求める。ここでは、図4で示したように、最近領域の左下頂点の座標を(Xmin、 Ymin)、右上頂点の座標を(Xmax、 Ymax)で表現する。また、分割座標414を(Xdiv、 Ydiv)で示す。
【0056】
まず、領域距離計算部113は、最近領域の左下子領域の領域範囲を、左下頂点の座標が(Xmin、 Ymin)、右上頂点の座標が(Xdiv、 Ydiv)とする(S801)。
【0057】
次に、最近領域の右下子領域の領域範囲を、左下頂点の座標が(Xdiv、 Ymin)、右上頂点の座標が(Xmax、 Ydiv)とする(S802)。最近領域の左上子領域の領域範囲を、左下頂点の座標が(Xmin、 Ydiv)、右上頂点の座標が(Xdiv、 Ymax)とする(S803)。最近領域の右上子領域の領域範囲を、左下頂点の座標が(Xdiv、 Ydiv)、右上頂点の座標が(Xmax、 Ymax)とする(S804)。
【0058】
次に、領域距離計算部113は、次の式(1)を用いて、左下、右下、左上、右上の子領域の領域距離dをそれぞれ計算する(S805)。
【0059】
【数1】
【0060】
ただし、
分割領域Rと質問地点(x、y)との距離値d
分割領域Rの範囲: 左下座標(Xmin、 Ymin)、右上座標(Xmax、 Ymax)
である。
【0061】
上記式(1)では、質問地点の座標を(x、y)、分割領域の左下頂点の座標を(Xmin、 Ymin)、右上頂点の座標を(Xmax、 Ymax)で表記する。式(1)は、分割領域の境界線上の点の中で、質問地点に最も近い点と、質問地点との距離dの二乗を示す。分割領域が質問地点を含む場合、当該分割領域の距離は0になる。
【0062】
図10は、上記領域距離dを例示したものである。質問地点1001から図中の分割領域1、2、3、4までの各距離d1、d2、d3、d4は矢印1002で示される。本実施形態では、式(1)で計算した距離dを用いる。なお、実環境では、dの二乗をそのまま領域距離dに用いて、計算負荷を軽減する方法もある。S806の領域距離dの計算後、領域距離計算部113は、各子領域の領域ID412、領域ポインタ、領域距離dを候補領域管理部114に渡す(S806)。これらの処理が完了するとサブルーチンを終了し、図6のステップS104に進む。
【0063】
図11は、最近領域の子領域情報の記録(S104)の詳細な手順を示すサブルーチンのフローチャートである。当該処理は、候補領域管理部114によって実行される。まず、候補領域管理部114は、領域距離計算部113から受け付けた子領域ID415、子領域ポインタ416、領域距離dから構成される候補領域ヒープ92の要素を生成する(S1101)。以下のステップでは、候補領域管理部114が子領域を一つずつ選択する。次に、候補領域管理部114は、S1102からS1104、S1107のステップで、候補領域ヒープ92の条件を満たすように、子領域の情報を挿入する。子領域の情報を挿入する操作の前に、ヒープの実現方法について説明する。
【0064】
図12は、候補領域ヒープ92に適用するヒープ木1201を一次元配列1202で実現した例を示す。図12において、ヒープ木1201の節1203内の番号は要素の識別子を示し、節付近の<>1204内の数値は予め設定した基準値を示す。ヒープ木1201は、候補領域ヒープ92と同じヒープ条件で、根要素の基準値が最小になるように管理されている。一次元配列1202は、ヒープ木1201の深さが浅いほど、深さが同じ場合は左から順に、先頭から要素を格納する。
【0065】
次に、図11において、候補領域管理部114は、まず、要素を候補領域ヒープ92の末尾に要素を挿入する(S1102)。末尾とは、一次元配列の末尾を指す。次に、候補領域管理部114は挿入要素が根に格納されているか判定する。根の格納位置は、一次元配列の0番目になる。
【0066】
当該条件を満たさない場合、挿入要素の領域距離dが親要素の領域距離dより小さいか否かを判定する(S1104)。当該条件を満たす場合、候補領域ヒープ92のヒープ条件を満たさないことになる。この場合、候補領域管理部114は、挿入要素と親要素の格納位置を交換する(S1107)。一次元配列では、挿入要素の格納位置がiの場合、格納位置がi/2を超える最小の整数に1を差し引いた値が親要素となる。
【0067】
ステップS1103の条件を満たした場合、またはS1104の条件を満たさなかった場合には、候補領域ヒープ92のヒープ条件を満たすことになる。この場合、候補領域管理部114は、全ての子領域の情報を候補領域ヒープ92に挿入したかを否かを判定する。当該条件を満たさなければ、S1101の処理へ進み、子領域の情報をヒープに挿入する。一方、当該条件を満たせばサブルーチンを終了して、図6に示す次の最近領域の選択へ処理を進める(S105)。
【0068】
図13は、最近領域の選択(S105)の詳細な手順を示すサブルーチンのフローチャートである。最近領域の選択の処理は、候補領域管理部114によって実行される。まず、候補領域管理部114は、候補領域ヒープ92の根要素に対応する領域を最近領域に設定する(S1301)。次に、候補領域管理部114は、候補領域ヒープ92の根要素を削除する(S1302)。その後、候補領域管理部114は、候補領域ヒープ92内に要素が存在するか判定する(S1303)。当該条件を満たす場合、候補領域管理部114は、ステップS1304からS1307の処理によって、根要素の削除に伴う候補領域ヒープ92の再構築を実行する。ステップS1303の上記条件を満たさない場合、候補領域管理部114は候補領域ヒープ92を再構築する必要がないためサブルーチンを終了して、図6に示した最近領域の最下位枝判定(S102)に進める。
【0069】
一方、ステップS1303で要素が候補領域ヒープ92に存在するときには、候補領域管理部114が、根要素に候補領域ヒープ92の末尾(移動要素)を移動させる(S1304)。一次元配列では、格納位置が末尾の要素を、格納位置が0の場所に移動させることになる。次に、候補領域管理部114は、移動要素が子要素をもつか否かを判定する(S1305)。当該条件を満たさない場合、候補領域ヒープ92のヒープ条件を満たす。この場合、候補領域管理部114はサブルーチンを終了して次の処理である最近領域の最下位枝判定(S102)に進む。一方、ステップS1305の当該条件を満たす場合、候補領域管理部114は、移動要素の領域距離dが子要素の領域距離dより大きい値か否かを判定する(S1306)。当該条件を満たす場合、候補領域ヒープ92のヒープ条件を満たさない。この場合、候補領域管理部114は移動要素と子要素の格納位置を交換して、ステップS1305に戻る(S1307)。なお、二つの子要素がステップS1306の条件を満たす場合、領域距離dの小さい子要素が交換対象となる。一次元配列では、移動要素の格納位置がiの場合、格納位置が2×i+1、または2×i+2の子要素と交換することになる。
【0070】
上記ステップS1306の条件を満たさない場合、候補領域ヒープ92がヒープ条件を満たす。この場合、候補領域管理部114はサブルーチンを終了して次の処理である図6に示す処理対象領域の最下位枝判定(S102)に進む。
【0071】
図14は、地点距離計算(S106)の詳細な手順を示すサブルーチンのフローチャートである。地点距離計算の処理は、地点距離計算部115によって実行される。まず、地点距離計算部115は、最近領域に隣接する葉情報を取得する(S1401)。地点距離計算部115は、分割領域テーブル401に格納された最近領域の領域情報の葉ポインタ417を参照することで、葉情報を取得できる。次に、地点距離計算部115は、葉情報における先頭の地点を座標情報読取ポインタに設定する(S1402)地点距離計算部115は、座標読取ポインタの指す地点を処理対象地点に設定する(S1403)。その後、地点距離計算部115は、ステップS1404において式(2)を用いて、質問地点と地点データの地点距離d’を計算する。
【0072】
【数2】
【0073】
式(2)において、地点距離d’は、質問地点(x、y)と処理対象地点(x’、y’)とのユークリッド距離になる。実環境では、平方根の計算が検索時間の遅延に大きく影響を及ぼす場合がある。この場合、地点距離d’と領域距離dを二乗のままで、k最近傍検索を実行しても良い。そして、地点距離計算部115は、サブルーチンを終了して図6に示した次の処理である、候補地点ヒープ91に処理対象地点を候補地点として記録する処理(S107)に進む。なお、ステップS1405の処理は、後述のステップS1508から実行される処理であり、地点データを1点ずつ距離計算し、候補地点ヒープ91に記録することを意味する。
【0074】
図15は、候補地点ヒープ91への候補地点の記録(S107)の詳細な手順を示すサブルーチンのフローチャートである。候補地点の記録処理は、候補地点管理部116によって実行される。まず、候補地点管理部116は、処理対象地点の候補地点ヒープ91用の要素を生成する(S1501)。当該要素は、処理対象地点の地点ID511、地点距離d’、地点ポインタ513から構成される。次に、候補地点管理部116は、処理対象地点ヒープの要素数が質問件数と等しいかを判定する。既に候補地点ヒープ91が上位k件の地点データを記憶しているか否かで、これ以降の処理内容が異なる。
【0075】
まず、ステップS1502の条件を満たす場合、既に候補地点ヒープ91が質問件数を満たすことになる。この場合、候補地点管理部116は、処理対象地点の地点距離d’が、候補地点ヒープ91の中で質問地点に最も遠い地点データの地点距離d’より小さいか否かを判定する(S1503)。候補地点ヒープ91の中で質問地点に最も遠い地点データは、候補地点ヒープ91の根要素になる。当該条件を満たす場合、候補地点ヒープ91の根要素に代わり、処理対象地点が新しく候補地点に入ることを意味する。
【0076】
ステップS1504からS1507までの処理で、候補地点管理部116が、ヒープ条件を満たしながら、処理対象地点を候補地点ヒープ91に記録する。一方、S1503の条件を満たさない場合、処理対象地点が候補地点に入らないことを意味する。この場合、候補地点管理部116は、ステップS1508の処理へ進む。
【0077】
次に、上記ステップS1502の条件を満たさない場合、まだ、候補地点ヒープ91が質問件数を満たしていないことになる。この場合、候補地点管理部116は、処理対象地点の要素を候補地点ヒープ91に挿入することを前提にする。候補地点管理部116は、ステップS1510からS1512の処理で、ヒープ条件を満たしながら、処理対象地点の要素を候補地点ヒープ91に格納する。
【0078】
次に、候補地点管理部116は、ステップS1508に進むと、最近領域の全ての地点データについて、候補地点になるか否かを調査したかを判定する。当該条件を満たす場合、候補地点管理部116はサブルーチンを終了して図6に示した終了判定(S108)へ進める。一方、S1508の条件を満たさない場合、候補地点管理部116は処理を図14に示したステップS1405へ進ませて、ループの度に地点データを1点ずつ距離計算し、候補地点ヒープ91に記録する。
【0079】
図16は、終了判定(S108)の手順を示すフローチャートである。終了判定の処理は、終了判定部117によって実行される。まず、終了判定部117は、候補地点ヒープ91に要素が存在するか否かを判定する。当該条件を満たさない場合、次に調査すべき分割領域が存在しないことになる。したがって、終了判定部117は、次に行う処理として図6に示した処理として検索結果の取得(S109)を選択する(S1604)。
【0080】
一方、ステップS1601の条件を満たす場合、候補領域ヒープ92の根要素の領域距離dが候補地点ヒープ91の根要素の地点距離d’より大きいか否かを判定する(S1602)。当該条件を満たす場合、検索処理を終了とみなす。終了条件は、候補領域ヒープ92の根要素の領域距離dが、候補地点ヒープ91の根要素の地点距離d’より大きいという条件である。この条件は、さらに広い範囲に存在する分割領域内の地点データを調査しても、候補地点に入る地点データを見つけることができないことを意味する。終了条件の判定は、候補領域と候補地点の記憶にヒープ構造を用いているため、候補地点ヒープ91内をO(1)の探索回数で、実現できる。ステップS1602の条件を満たす場合、終了判定部117は次の処理として図6に示した検索結果の取得(S109)を選択してサブルーチンを終了する。一方、ステップS1602の条件を満たさない場合、別の分割領域に内包される地点データを調査するため、次に行う処理を図6に示した最近領域の選択(S105)としてサブルーチンを終了する。
【0081】
図17は、検索結果の取得(S109)の詳細な手順を示すサブルーチンのフローチャートである。検索結果の取得処理は、結果取得部118によって実行される。この処理によって、結果取得部118は、質問地点から距離の近い順に地点データを取得する。
【0082】
まず、結果取得部118は、候補地点ヒープ91の根要素を結果リスト93の末尾に挿入する(S1701)。結果リスト93は、候補地点ヒープ91と同じ要素を格納可能な一次元配列であり、結果取得部118がメモリ2上に予め確保した領域である。次に、結果取得部118は、候補地点ヒープ91の根要素を削除する(S1702)。その後、結果取得部118は、要素が候補地点ヒープ91に存在するか否かを判定する(S1703)。当該条件を満たす場合、結果取得部118は、ステップS1704からS1707の処理で、根要素の削除に伴う候補地点ヒープ91の再構築を行う。ステップS1703の条件を満たさない場合、結果取得部118は、結果リスト93の末尾から先頭に向かい、地点データを一つずつ取得する(S1708)。当該地点データは、地点座標512と任意個数の属性を含む、空間データベース100で管理されるレコードとなる。
【0083】
以上より、本処理は、まず、地点距離d’の大きい順にヒープソートを行い、その結果を一次元配列で構成した結果リスト93の先頭から順に記憶しておく。そして、当該一次元配列の末尾から先頭に向かい地点データを取得することで、質問地点から距離の近い順に地点データを取得していく。地点データの要素数をNとした場合に、ヒープソートの探索回数はO(N・logN)となり、一次元配列内の探索回数はO(N)となり、結果を得るまでの探索回数をO(N・logN)に抑えることができる。結果取得部118がステップS1708の処理を終えると、k最近傍検索が終了する。
【0084】
上述したk最近傍検索の具体的なアルゴリズムの動作について、図18a〜図18c、図19、図20を用いて、説明する。
【0085】
まず、図18aは、上記図2に示した空間領域201を、図2に示した深さ0の階層の真上から鳥瞰した空間領域1803を示す。この空間領域803は、上記k最近傍検索で質問地点1804と質問件数を5に設定した場合の例を示す。図中丸印の内部の数値は領域ID412を示し、図中方形の枠内の文字は地点ID511を示す。図18bは、上記k最近傍検索の処理過程で計算した空間領域1803における領域距離dを表形式で図示したテーブル1801である。図18cは、上記k最近傍検索の処理過程で計算した空間領域1803における地点距離d’を表形式で図示したテーブル1802である。なお、テーブル1801、1802の情報は、メモリ2上の候補領域ヒープと候補地点ヒープにそれぞれ保持される。
【0086】
図19は、図18aの空間領域1803を用いて、k最近傍検索を実行した際の候補領域ヒープ92の格納状況を示す。候補領域ヒープ92を木構造で表現する。ヒープ木の節1901内の数字は領域ID412、山括弧1902内の数値は領域ID412で示す分割領域間の距離を示す。
【0087】
図20は、図18aに示した空間領域1803を用いて、k最近傍検索を実行した際の候補地点ヒープ91の格納状況を示す。候補地点ヒープ91を木構造で表現する。ヒープ木の節2001内のアルファベットは地点ID511、山括弧2002内の数値は地点ID511で示す地点データの地点距離d’を示す。
【0088】
k最近傍検索を実行すると、まず、初期設定部111が最近領域を領域0に設定する。領域距離計算部113が領域0の子領域1、2、3、4の領域距離dを計算し、子領域の領域情報を候補領域ヒープ92に格納する(図19の(1))。次に、候補領域管理部114は最近領域を領域1に設定し、候補領域ヒープ92から領域1の情報を削除する。そして、候補領域管理部114が領域1の子領域5、6、7、8の情報を候補領域ヒープ92に格納する(図19の(2))。上記と同様に候補領域管理部114は、最近領域を領域8に設定する。同様に、候補領域ヒープ92から領域8の情報を削除し、領域8の子領域33、34、35、36の情報を候補領域ヒープ92に挿入する(図19の(3))。候補領域管理部114は最近領域を最下位枝の領域33に設定する。この場合、領域33の情報を候補領域ヒープ92から削除し、領域33に内包される地点データEの情報を、候補地点ヒープ91に挿入する。この時点の候補領域ヒープ92の格納状況を図19の(4)に示し、候補地点ヒープ91の格納状況を図20の(1)に示す。最近領域を領域35に設定すると、領域33と同様に、候補領域ヒープ92と候補地点ヒープ91が更新される(図19(5)と図20(2))。
【0089】
以下、同様に処理を進めると、候補領域ヒープ92と候補地点ヒープ91の格納状況はそれぞれ図19の(11)と図20の(6)に示すようになる。このとき、候補地点ヒープ91の根要素(地点データI)の地点距離d’が、候補領域ヒープ92の根要素(領域25)の領域距離dより小さくなる。終了条件を満たすため、k最近傍検索の結果は、地点データI、F、G、E、Cとなる。
【0090】
なお、実施の形態1と同等の機能をもつk最近傍検索プログラムを記録した媒体やk最近傍検索装置も、本発明に含まれる。この点は、以降の説明で記載する実施の第2の実施形態や第3の実施形態でも同様である。
【0091】
以上のように本発明の第1の実施形態によれば、検索実行時の空間インデックス101へのディスクアクセス回数を削減することが可能となって、前記従来例のように範囲指定検索を用いたk最近傍検索に比べ、検索時間を短縮できる。さらに、第1の実施形態では、必要最低限の地点データのみ距離計算の対象とするため、従来のk最近傍検索に比べ、CPU3の演算負荷を軽減することが可能となる。
【0092】
<第2の実施形態>
第2の実施形態は、第1の実施形態を拡張し、上述の第3の問題を解決する属性指定のk最近傍検索を実現する。
【0093】
具体的には、第1の実施形態の図5に示した地点テーブル501を拡張して、図21に示す地点テーブル2101を採用する。地点テーブル2101は、地点データを格納するテーブルの座標情報に、地点ID511、X座標とY座標の地点座標512、地点ポインタ513に加え、地点種別514を追加する。例えば、カーナビゲーション装置1の施設テーブルの場合、地点種別に、レストラン、駐車場、ガソリンスタンドなどの地点データの種類を格納することが考えられる。座標情報への地点種別514の追加に伴い、四分木の葉情報において、各地点の座標情報にも地点種別514を追加する。
【0094】
第2の実施形態の処理は、基本的に第1の実施形態に示した図6のフローチャートに従う。ただし、第2の実施形態は、図6に記載の検索の初期設定S101と、地点距離d’の計算S106の処理内容の一部を変更した。以下では、本形態の実現のために変更した処理内容について説明する。
【0095】
図22は、第2の実施形態における検索の初期設定(S101)の手順を示すサブルーチンのフローチャートである。第1の実施形態の図7と異なる部分は、図7のステップS601をステップS2201のステップに変更した点である。ステップS2201において、初期設定部111は、質問地点の座標と質問件数に加えて、地点種別を設定する。本形態によるk最近傍検索の実行結果は、当該地点種別に一致する地点データのみを含む。なお、ステップS2202〜S2204は、第1の実施形態の図7のステップS602〜S604と同一である。
【0096】
図23は、第2の実施形態の地点距離計算(S106)の手順を示すサブルーチンのフローチャートである。図23は、第1の実施形態の図14のフローチャートに対して、ステップS2304とステップS2307を加え、ステップS2307の判定がYESの場合には、終了判定部117の処理(S108)へ移行するようにした点が異なる。
【0097】
ステップS2304において、地点距離計算部115は、処理対象地点の地点種別が上記初期設定部111のステップS2201で設定した地点種別に一致するか判定する。この判定の結果、NOであればステップS2306に進む、S2304により、第2の実施形態は、指定した属性値に一致する地点データのみを取得できる。なお、図23において、ステップS2301〜S2303、S2305、S2306は、第1の実施形態に示した図14のステップS1401〜S1404、S1405と同一である。
【0098】
以上、本発明の第2の実施の形態によれば、属性指定検索とk最近傍検索を組み合わせた場合でも、従来のk最近傍検索に比べ、検索実行時間を短縮できる。これは、第2実施では、空間インデックス101の探索のみで、k最近傍検索を実行できるためである。また、第2の実施の形態では、指定した属性値に一致するk件の地点データを正確に取得できる。これは、第2の実施の形態が、検索対象の地点テーブル2101において、座標情報と属性情報を含む一つの列に対して、k最近傍検索を実行できるためである。
【0099】
<第3の実施形態>
第3の実施の形態は、第1の実施形態を拡張し、上述の第4の問題を解決する最近傍検索を提供する。第3の実施形態の処理は、基本的に第1の実施形態に示した図6のフローチャートに従う。具体的には、検索処理中であっても、検索処理を中断できるように、検索条件に中断条件を設ける。例えば、中断条件は質問地点からの距離で記述する。この場合、当該距離の範囲に存在する地点データが見つからない時点で、検索処理を中断する。また、中断条件として、最大処理時間の設定も効果的である。この場合、検索処理に費やすことができる時間を最大処理時間に設定し、検索処理の経過時間が最大処理時間と等しくなった時点で、検索処理を中断する。以下では、第3の実施形態の中断条件に距離を用いた場合で説明する。
【0100】
初期設定部111で質問地点からの最大距離値(以下、質問距離と呼ぶ)を設定し、質問距離以下の地点データを発見できない時点で、質問件数を満たさずとも、検索処理を終了させる。なお、第3の実施形態による第1の実施形態への拡張は、第2の実施形態でも同様に適用でき、上述の第4の問題を解決できる。第3の実施形態は、第1の実施形態に示した図7に記載の検索の初期設定S101、領域距離dの計算を行うステップS103、地点距離d’の計算を行うステップS106の処理内容を変更する。以下では、第3の実施形態の実現のために変更した処理内容について説明する。
【0101】
図24は、第3の実施の形態における初期設定(S101)の手順を示すサブルーチンのフローチャートである。このフローチャートは、第1の実施形態に示した図7のステップS601を、ステップS2401に置き換えたものである。ステップS2401において、初期設定部111は、質問地点の座標と質問件数に加えて、質問距離を設定する。第3の実施形態によるk最近傍検索の実行結果は、質問地点からの距離値が質問距離以下の地点データのみを含む。なお、ステップS2402〜S2404は、第1の実施形態の図7のステップS602〜S604よ同一である。
【0102】
図25は、第3の実施の形態における領域距離計算の手順を示すサブルーチンのフローチャートである。このフローチャートは、第1の実施形態に示した図9のステップS806を、ステップS2506に置き換えたものである。ステップS2506の処理において、領域距離計算部113は、質問距離以下の領域距離dをもつ子領域を対象に、領域ID412、領域ポインタ、領域距離dを候補領域管理部に渡すことにしている。S2506の処理によって、候補領域ヒープ92は、質問距離以下の領域距離dをもつ分割領域の情報のみを記録することになる。質問距離以下の領域距離dをもつ分割領域は、質問距離の条件を満たし、結果候補に入る可能性のある地点データを内包する。なお、ステップS2501〜S2505は、第1の実施形態の図9に示したステップS801〜S805と同一である。
【0103】
図26は、第3の実施の形態における地点距離の計算の手順を示すサブルーチンのフローチャートである。このフローチャートは、第1の実施形態に示した図14のステップS1404以降に、ステップS2605、S2607を加えたものである。
【0104】
ステップS2604で処理対象地点の地点距離d’を計算した後で、当該地点距離d’が質問距離以下であるかを判断する処理(S2605)を追加し、該条件を満たす場合、候補地点の記録の処理(S107)へ進む。当該条件を満たさない場合、処理対象地点が検索結果に入らないため、すべての地点データを処理していなければ(S2607でNOを選択)、次の地点データの地点距離d’の計算へ進める。なお、ステップS2601〜S2604、S2606は、第1の実施形態に示した図14のステップS1401〜1404、S1405と同一である。
【0105】
以上、本発明の第3の実施の形態によれば、k最近傍検索の実行結果の近傍性を保証できる。これは、第3の実施の形態が、検索条件に中断条件を設定できるためである。中断条件は、例えば、質問地点からの最大距離や検索処理に費やすことのできる最大処理時間である。
【0106】
<第4の実施形態>
第4の実施形態は、k最近傍検索をデータベース管理システム8で実行する場合に記述する問合せ言語、または関数に関する。第4の実施形態は、例えば、アプリケーション開発者が、アプリケーションプログラムからデータベース管理システム8にk最近傍検索を要求する場合のSQLに相当する。以下では、データベース管理システム8の一般的な問合せ言語であるSQLを用いて、第4の実施形態について説明する。
【0107】
図27a〜図27dは、第1の実施形態、第2の実施形態または第3の実施形態のいずれかで実現されるk最近傍検索のためのSQLの記述方法である。なお、図27a〜図27dでは、空間データベース100が、地点データを格納する一つのテーブルに対して、k最近傍検索に合致するレコードの全ての列を取得する場合を示す。
【0108】
図27aの2701に記載のSQLは、第1の実施形態で実現したk最近傍検索のみで利用可能である。2701において、WHERE句のkNN(k−Nearest Neighbor)は、k最近傍検索のためのスカラー関数を示す。kNN関数の第1引数は検索対象テーブルの座標列名、第2引数は質問地点、第3引数は質問件数となる。
【0109】
図27bの2702に記載のSQLは、第1の実施形態または第2の実施形態で実現したk最近傍検索で利用可能である。2702のkNN関数の第1引数は検索対象テーブルの座標列名、第2引数は質問地点、第3引数は質問件数、第4引数は地点データの種別となる。なお、第1の実施形態で実現したk最近傍検索は、種別を設定する必要がないため、第4引数にNULLを設定する。
【0110】
図27cの2703に記載のSQLは、第1の実施形態または第3の実施形態で実現したk最近傍検索で利用可能である。2703のkNN関数の第1引数は検索対象テーブルの座標列名、第2引数は質問地点、第3引数は質問件数、第4引数は質問距離となる。なお、第3の実施形態で実現したk最近傍検索は、質問距離を設定する必要がないため、第4引数にNULLを設定する。
【0111】
図27cの2704に記載のSQLは、第1の実施形態、第2の実施形態、第3の実施形態のどの場合で実現したk最近傍検索でも利用可能である。2704のkNN関数の第1引数は検索対象テーブルの座標列名、第2引数は質問地点、第3引数は質問件数、第4引数は地点データの種別、第5引数は質問距離となる。また、この記載方法は、第3の実施形態2と形態3を組み合わせたk最近傍検索でも利用可能である。なお、第3の実施形態で実現したk最近傍検索は、質問距離を指定する必要がないため、第4引数と第5引数にNULLを設定する。形態2で実現したk最近傍検索は、質問距離を設定する必要がないため、第5引数にNULLを設定する。形態3で実現したk最近傍検索は、種別を設定する必要がないため、第4引数にNULLを設定する。
【0112】
以上、本発明の第4の実施の形態によれば、アプリケーションプログラム開発者がk最近傍検索をSQLで記述できることで、プログラムの開発期間を短縮できる。
【0113】
以上の四つの実施の形態では、地理空間内の地点データを対象に、k最近傍検索方法について説明した。ここで、本発明は、地理空間内の地点データへの適用に限るものではない。本発明は、テレビ番組や楽曲など、特徴ベクトルで表現可能なデータにも適用でき、類似検索を実現できる。例えば、テレビ番組の場合、第一特徴ベクトルにシリアスとバラエティを軸に取り、第二特徴ベクトルにフィクションとノンフィクションを軸に取る。そして、これらを軸とした二次元空間にテレビ番組を対応付け、指定した地点から距離の近い番組を検索できれば、特徴が類似しているテレビ番組を検索できる。
【0114】
なお、上記各実施形態では本発明をカーナビゲーション装置1へ適用した例を示したが、この他PNDや携帯電話あるいは携帯ゲーム機等の組込機器に適用することができる。また、空間データベース100としては、2次元、または3次元空間の地点データを検索対象とすることができる。
【0115】
また、上記各実施形態では、空間インデックス101に四分木を適用した例を示したが、R−tree等の他の空間インデックスを適用しても良い。
【0116】
また、上記各実施形態では、地点データを2次元空間内の座標とした例を示したが、多次元の座標で構成された地点データに本発明を適用しても良い。 例えば、多次元の地点データが3次元で構成され、3次元空間内の一つの座標で位置を特定可能な地点データである場合、空間インデックス101が八分木またはR−treeの何れか一方により地点データを複数の領域に分割して上述のような検索処理を行うことができる。
<補足>
7.前記候補領域管理部は、分割領域の情報をヒープ構造で管理し、前記ヒープ構造の節に対応する分割領域の領域距離は、前記節の子に対応する分割領域の領域距離より小さいか等しいというヒープ条件を設ける請求項6に記載のk最近傍検索方法。
【0117】
10.前記候補地点管理部は、前記地点データの情報をヒープ構造で管理し、前記ヒープ構造に、前記ヒープ構造の節に対応する地点データの地点距離は、前記節の子に対応する地点データの地点距離より大きいか等しいというヒープ条件を設ける請求項9に記載のk最近
12.前記終了判定部は、前記候補領域管理部のヒープ構造の根に位置する分割領域の領域距離が、前記候補地点管理部のヒープ構造の根に位置する地点データの地点距離より大きい場合に、検索を終了させる請求項10に記載のk最近傍検索方法。
【0118】
14.前記初期設定部は、質問地点、質問件数、中断条件を検索条件として設定し、
前記質問件数に満たない状況でも、前記中断条件を満たす場合に検索処理を中断し、
前記結果取得部が、前記質問地点に距離の近い最大k件の地点データを取得可能な請求項2に記載のk最近傍検索方法。
【0119】
15.前記中断条件は、検索結果となる地点データの最大距離を示す質問距離で記述し、
前記領域距離計算部は、前記質問距離より小さいか等しい分割領域に関する情報のみを 前記候補領域管理部に記録するように処理し、
前記地点距離計算部は、質問距離より小さいか等しい地点データに関する情報のみを前 記候補地点管理部に記録するように処理することで、
前記結果取得部が、データベース管理システムから、前記質問距離より小さいか等しく、かつ質問地点に距離の近い最大k件の地点データを取得可能な請求項14に記載のk最近傍検索方法。
【0120】
16.前記中断条件は、検索処理に費やすことができる最大時間を示す最大処理時間で記述し、
検索処理の実行経過時間が前記最大処理時間と等しくなると、前記検索処理を中断して、
前記結果取得部が、データベース管理システムから、質問地点に距離の近い最大k件の地点データを取得可能な請求項14に記載のk最近傍検索方法。
【0121】
17.前記初期設定部は、質問地点、質問件数、属性情報、中断条件を検索条件として設定し、
前記地点距離計算部は、前記検索条件の属性情報に一致する地点データのみを前記候補地点管理部に記録するように処理すると共に、
前記質問件数に満たない状況でも、前記中断条件を満たす場合に検索処理を中断し、
前記結果取得部が、前記データベース管理システムから、前記属性情報に一致する最大k件の地点データを取得可能な請求項2に記載のk最近傍検索方法。
【0122】
18.前記中断条件は、検索結果となる地点データの最大距離を示す質問距離で記述し、
前記領域距離計算部は、前記質問距離より小さいか等しい分割領域に関する情報のみを前記候補領域管理部に記録するように処理し、
前記地点距離計算部は、前記質問距離より小さいか等しい地点データに関する情報のみを前記候補地点管理部に記録するように処理することで、
前記結果取得部が、前記データベース管理システムから、前記属性情報に一致し、かつ前記質問距離より小さいか等しく、かつ質問地点に距離の近い最大k件の地点データを取得可能な請求項17に記載のk最近傍検索方法。
【0123】
19.前記中断条件は、検索処理に費やすことができる最大時間を示す最大処理時間で記述し、
検索処理の実行経過時間が前記最大処理時間と等しくなると、前記検索処理を中断して、
前記結果取得部が、前記データベース管理システムから、前記属性情報に一致し、かつ前記質問距離より小さいか等しく、かつ質問地点に距離の近い最大k件の地点データを取得可能な請求項17に記載のk最近傍検索方法。
【0124】
21.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、属性情報を引数に取る問合せ言語、または関数で記述可能な請求項13に記載のk最近傍検索方法。
【0125】
22.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、中断条件を引数に取る問合せ言語、または関数で記述可能な請求項14に記載のk最近傍検索方法。
【0126】
23.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、質問距離を引数に取る問合せ言語、または関数で記述可能な請求項15に記載のk最近傍検索方法。
【0127】
24.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、最大処理時間を引数に取る問合せ言語、または関数で記述可能な請求項16に記載のk最近傍検索方法。
【0128】
25.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、属性情報、中断条件を引数に取る問合せ言語、または関数で記述可能な請求項17に記載のk最近傍検索方法。
【0129】
26.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、属性情報、質問距離を引数に取る問合せ言語、または関数で記述可能な請求項18に記載のk最近傍検索方法。
【0130】
27.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、属性情報、最大処理時間を引数に取る問合せ言語、または関数で記述可能な請求項19に記載のk最近傍検索方法。
【産業上の利用可能性】
【0131】
以上のように、本発明は空間データベースを利用する計算機システムに適用することができ、特に、カーナビゲーション装置などの組込装置に適用することができる。
【図面の簡単な説明】
【0132】
【図1】第1の実施形態を示し、本発明を適用するカーナビゲーション装置の構成を示すブロック図。
【図2】第1の実施形態を示し、空間インデックスに適用する四分木の階層構造を示す説明図。
【図3】第1の実施形態を示し、空間インデックスに適用する四分木の木構造を示す説明図。
【図4】第1の実施形態を示し、四分木の枝情報を格納する分割領域テーブルの一例を示す説明図。
【図5】第1の実施形態を示し、四分木の葉情報を格納する地点テーブルの一例を示す説明図。
【図6】第1の実施形態を示し、カーナビゲーション装置で実行されるk最近傍検索の手順の一例を示すフローチャート。
【図7】第1の実施形態を示し、図6に示した初期設定部のサブルーチンの一例を示すフローチャート。
【図8】第1の実施形態を示し、図6に示した最下位判定部のサブルーチンの一例を示すフローチャート。
【図9】第1の実施形態を示し、図6に示した領域距離計算部のサブルーチンの一例を示すフローチャート。
【図10】第1の実施形態を示し、分割領域の領域距離の計算方法を示す説明図。
【図11】第1の実施形態を示し、図6に示した最近領域の子領域の情報を記録する処理のサブルーチンの一例を示すフローチャート。
【図12】第1の実施形態を示し、一次元配列によるヒープ木の説明図。
【図13】第1の実施形態を示し、図6に示した最近領域の子領域の情報を記録する処理のサブルーチンの一例を示すフローチャート。
【図14】第1の実施形態を示し、図6に示した地点距離計算部のサブルーチンの一例を示すフローチャート。
【図15】第1の実施形態を示し、図6に示した候補地点管理部のサブルーチンの一例を示すフローチャート。
【図16】第1の実施形態を示し、図6に示した終了判定部のサブルーチンの一例を示すフローチャート。
【図17】第1の実施形態を示し、図6に示した結果取得部のサブルーチンの一例を示すフローチャート。
【図18a】第1の実施形態を示し、図2に示した空間領域の平面図。
【図18b】第1の実施形態を示し、k最近傍検索で得られた空間領域における領域IDと領域距離dを保持するテーブルの説明図。
【図18c】第1の実施形態を示し、k最近傍検索で得られた空間領域における地点IDと地点距離d’を保持するテーブルの説明図。
【図19】第1の実施形態を示し、図18aの空間領域でk最近傍検索を実行した際の候補領域ヒープ92の木構造の一例を示す説明図。
【図20】第1の実施形態を示し、図18aの空間領域でk最近傍検索を実行した際の候補地点ヒープ91の木構造の一例を示す説明図。
【図21】第2の実施形態を示し、四分木の葉情報を格納する地点テーブルの一例を示す説明図。
【図22】第2の実施形態を示し、初期設定部のサブルーチンの一例を示すフローチャート。
【図23】第2の実施形態を示し、地点距離計算部のサブルーチンの一例を示すフローチャート。
【図24】第3の実施形態を示し、初期設定部のサブルーチンの一例を示すフローチャート。
【図25】第3の実施形態を示し、領域距離計算部のサブルーチンの一例を示すフローチャート。
【図26】第3の実施形態を示し、地点距離計算部のサブルーチンの一例を示すフローチャート。
【図27a】第4の実施形態を示し、前記第1実施形態に適用可能なSQLを示す説明図。
【図27b】第4の実施形態を示し、前記第1実施形態と第2実施形態に適用可能なSQLを示す説明図。
【図27c】第4の実施形態を示し、前記第1実施形態と第3実施形態に適用可能なSQLを示す説明図。
【図27d】第4の実施形態を示し、前記第1実施形態と第2実施形態及び第3実施形態に適用可能なSQLを示す説明図。
【符号の説明】
【0133】
1 カーナビゲーション装置
2 メモリ
3 CPU
5 ストレージ装置
7 OS
8 DBMS
9 アプリケーション
100 空間データベース
101 空間インデックス
111初期設定部
112 最下位枝判定部
113 領域距離計算部
114 候補領域管理部
115 地点距離計算部
116 候補地点管理部
117 終了判定部
118 結果取得部
501 地点テーブル
【技術分野】
【0001】
本発明は、任意の多次元地点データから距離の近い上位k件の地点データを、厳密かつ高速に検索するk最近傍検索技術に関する。特に、地図情報管理を想定し、2次元、または3次元空間の地点データを検索対象とする。
【背景技術】
【0002】
これまでに、地図情報管理を目的とし、空間検索機能を有するデータベース管理システムが開発されている。このようなデータベース管理システムを空間データベースと呼ぶ。空間データベースは、地物を点、線、面などの図形要素と、地物の内容を示す文字や数値などの属性要素を管理できる。空間検索機能は、任意の範囲に内包、または接触する地物を取得する範囲指定検索を実現する。範囲指定検索の高速化のため、四分木、グリッドファイル、R−treeなどの空間インデックス技術が既に提案されている。空間インデックス技術は、空間領域における地物の配置分布に応じて、空間領域を分割する。
【0003】
従来、空間データベースは、エンタープライズのアプリケーション向けに開発されてきた。ところが、近年、空間データベースが組込機器のアプリケーション向けにも開発されてきている。空間データベースを必要とする組込機器は、カーナビゲーション装置やPND(Personal Navigation System)などの地図情報を管理する機器である。カーナビゲーション装置は、現在地や目的地などユーザの指定した地点付近の飲食店や駐車場などの地点データを検索する機能をもつ。その際、ユーザの指定した地点(以下、質問地点と呼ぶ)から距離の近い上位k件(以下、質問件数と呼ぶ)の地点データを空間データベースから取得するk最近傍検索が知られている。
【0004】
従来の空間データベースにおけるk最近傍検索は、範囲指定検索を用いて、実現される。従来のk最近傍検索では、まず、質問地点を中心とした任意の大きさをもつ検索範囲が設定される。検索範囲に含まれる地点データが質問件数以上ならば、質問地点と当該地点データとの距離を計算する。そして、距離の短い順に当該地点データをソートし、距離の短い上位k件の地点データを、検索結果として取得する。一方、検索範囲に含まれる地点データが質問件数未満ならば、質問件数以上になるまで、検索範囲が大きく設定され、範囲指定検索が繰り返される。例えば、グリッドファイルによる範囲指定検索を用いた方法(例えば、特許文献1参照)や、四分木による範囲指定検索を用いる方法(例えば、特許文献2参照)などが知られている。
【特許文献1】特開2003−242151号
【特許文献2】米国特許第6、879、980号
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかしながら、上記従来技術を組込機器に適用すると、以下のような問題があった。
【0006】
まず、第1の問題として、ディスクアクセスと演算負荷により、検索時間が増大する。
【0007】
一般に組込機器は小容量の主記憶装置を備えるため、検索実行時に空間インデックスのページを外部記憶装置から主記憶装置に読込むディスクアクセスが発生する。そのため、組込機器では、検索範囲に含まれる地点データの件数が非常に多い場合、ディスクアクセスが頻発し、検索時間が長くなる。特に、この問題は、地点データの存在密度が高い地域で、検索範囲が大きい場合に発生する。一方、エンタープライズ用のサーバは、大容量の主記憶装置を備えている。そのため、サーバは、空間インデックスの大部分のページを予め主記憶装置に格納できる。この場合、検索範囲に含まれる地点データが多い場合でも、ディスクアクセスが頻発せず、検索時間が長くならない。
【0008】
また、組込機器は低速な中央処理装置を備えるため、質問地点と地点データまでの距離計算や、距離によるソート処理等の演算負荷が検索時間に影響を与える。特に、検索範囲に含まれる地点データの件数が非常に多い場合、演算負荷が増大し、検索時間が長くなる。一方、エンタープライズ用のサーバは、高速な中央処理装置を備えるため、演算負荷による検索時間の影響は小さいと言える。
【0009】
上記では、検索範囲に含まれる地点データの件数が非常に多い場合に、ディスクアクセスと演算負荷の面で、問題があることを述べた。また、検索範囲に含まれる地点データが質問件数未満の場合でも、質問件数を満たすまで、検索処理を繰り返すため、上記と同様の問題が発生する。
【0010】
この問題を解決するため、空間データベースが、質問件数と質問地点付近の地点データの存在密度に基づき、検索範囲を適切な大きさに設定する方法が考えられる。しかし、この方法は、組込機器に適切な方法とは言えない。それは、組込機器にとって、地点データの挿入や削除が発生する状況において、地点データの存在密度の管理は、負荷の大きい処理になるためである。
【0011】
以上より、組込機器で従来の範囲指定検索を用いたk最近傍検索は、検索時間が増大する、という課題が生じる。
【0012】
次に、第2の問題として、検索実行中のメモリ使用量が多くなる場合、検索処理を実行できない。または検索時間が長くなる。
【0013】
従来技術では、検索範囲に含まれる全ての地点データを主記憶装置上に保持し、質問地点からの距離を用いて、ソートする。そのため、検索範囲に含まれる地点データが多いと、メモリ使用量が増大する。この場合、組込機器は小容量の主記憶装置を備えるため、従来技術を実行できない可能性がある。
【0014】
この問題を解決するため、主記憶装置のメモリ空間から溢れた地点データを、外部記憶装置に退避する方法がある。この方法では、地点データのソート処理で、ディスクアクセスが発生するため、検索時間が長くなる。
【0015】
また、第3の問題として、従来のk最近傍検索と属性指定検索を組合せた場合、件数がk件未満の不正確な検索結果になる可能性がある。
【0016】
k最近傍検索と属性指定検索の組合せは、多種類の地点データを含むテーブルに対して、実行される。例えば、カーナビゲーション装置が管理する施設テーブルには、レストラン、駐車場、ガソリンスタンドなどが含まれる。さらに、施設の種類がレストランの場合、施設テーブルには、日本料理、イタリア料理、フランス料理など、細かい種別が含まれる。その際、ユーザは、質問地点と質問件数に加え、地点種別を設定し、k最近傍検索を実行する。通常の空間データベースでは、テーブルが属性情報と座標情報を別々の列として管理する。そのため、SQL(Structured Query Language)のWHERE句で、k最近傍検索と属性指定の条件をAND演算子で結合する。
【0017】
このとき、k最近傍検索で質問件数分の結果が得られても、属性指定で、質問件数未満に絞り込まれる場合がある。これは、k最近傍検索で得られた地点データの集合と、属性指定で得られた地点データの集合で、積集合を取るためである。
【0018】
この問題を回避するため、エンタープライズ用のデータベース管理システムでは、質問件数をk件より多く設定する方法が採用されている。つまり、検索結果が属性指定で絞り込まれても、k件以上残る仕組みになっている。しかし、組込機器では、この方法は適切ではない。それは、質問件数が多い場合、必要な空間インデクスのページ数が増え、小容量の主記憶装置を備える組込機器では、ディスクアクセスが頻発し、検索時間が長くなるためである。一方、エンタープライズ用のサーバは大容量の主記憶装置を備えている。そのため、予め空間インデクスのページを主記憶装置に格納しておけば、質問件数が多くても、ディスクアクセスが頻発しない。
【0019】
さらに、第4の問題として、上位k件の地点データが質問地点の付近に存在しない場合、検索時間が長くなる。
【0020】
従来のk最近傍検索では、質問件数が満たされるまで、検索範囲が拡大される。質問地点の付近に所望の地点データが存在しない場合、検索結果が質問地点から数十キロも離れた地点データを含む可能性がある。検索範囲が拡大されると、必要な空間インデクスのページ数が増える。そのため、先に述べたように、小容量の主記憶装置を備えた組込機器では、検索時間が長くなる。
【0021】
そこで本発明は、上記問題点に鑑みてなされたもので、空間データベースの検索時間を短縮しながら、検索処理中のメモリ使用量を抑制することを目的とする。
【課題を解決するための手段】
【0022】
本発明は、多次元の地点データと、前記地点データを含む領域を複数の領域に分割して当該領域内に子領域を設定し、前記地点データと前記領域から枝と葉を含む木構造を作成した空間インデックスと、を含むデータベースと、前記データベースを管理するデータベース管理システムにおいて、検索の始点となる質問地点を受け付けて、前記質問地点から距離の近い上位k件の質問件数の地点データを検索するk最近傍検索方法であって、前記質問地点と質問件数を検索条件に設定するステップと、前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定するステップと、前記最近領域が中間枝と判定されると、前記質問地点と最近領域の子領域との距離を領域距離として計算するステップと、前記領域距離の計算対象となった領域の情報を保持し、当該領域の最近領域を取得するステップと、前記最下位枝か中間枝かの判定結果で、前記最近領域が最下位枝と判定されると、前記質問地点と最近領域に内包される地点データの距離を地点距離として計算するステップと、前記地点距離の計算対象となった地点データの情報を保持するステップと、前記検索条件を満たすまで、前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定するステップ以降の検索処理を繰り返し、前記検索条件を満たした時点で前記検索処理を終了させるステップと、前記検索処理が終了した後に、前記保持された地点データのレコードを検索結果として前記データベース管理システムから取得するステップと、を含む。
【発明の効果】
【0023】
本発明は、範囲指定検索を用いた従来のk最近傍検索に比べ、空間インデックスのページへのディスクアクセス回数を削減できるため、検索時間を短縮できる。また、距離計算やソート処理の対象とする地点データを減らすため、プロセッサの演算負荷を軽減できる。さらに、検索実行中のメモリ使用量を抑制できる。
【発明を実施するための最良の形態】
【0024】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【0025】
<第1の実施形態>
図1は、第1の実施形態を示し、本発明を適用するカーナビゲーション装置の一例を示すブロック図である。カーナビゲーション装置1は、演算処理を行うCPU(プロセッサ)3と、データやプログラムを一時的に格納するメモリ2と、データやプログラムを格納するストレージ装置5と、演算結果などを表示する表示装置4と、ユーザからの入力を受け付ける入力装置6と、GPS(Global Positioning System)衛星からの信号を受信するレシーバ10を含んで構成される。
【0026】
ストレージ装置5には、地図を構成する地物を点、線、面などの図形要素と、地物の内容を示す文字や数値などの属性要素を含む空間データベース100が格納される。なお、空間データベース100に格納された情報のうち、店舗や施設などひとつの地点の情報を地点データとする。
【0027】
メモリ2には、空間データベース100を管理するDBMS(Database Management System)8と、DBMS8を介して空間データベース100を利用するアプリケーション9と、DBMS8とアプリケーション9を管理するOS(オペレーティングシステム)7がロードされ、CPU3により実行される。アプリケーション9は、レシーバ10で受信したGPS衛星の信号から現在の位置を演算し、現在の地点データを空間データベース100から検索し、地図情報を取得して表示装置4へ出力する。また、カーナビゲーション装置1では、入力装置6からユーザが検索の指令を受け付けると、アプリケーション9はDBMS8を介して空間データベース100を後述するように探索し、要求された検索結果を表示装置4に出力する。なお、OS7、DBMS8、アプリケーション9は記録媒体としてのストレージ装置5に格納され、カーナビゲーション装置1の起動時にメモリ2へロードされ、CPU3によって実行される。
【0028】
また、アプリケーション9は、ワークエリアとしてメモリ2上の領域を確保する。これらの領域は、後述する候補地点ヒープ91、候補領域ヒープ92、結果リスト93等である。
【0029】
ここで、本実施形態は、上記第1の問題と第2の問題を解決可能なk最近傍検索を実現する。本発明の適用範囲は、基本的に空間データの次元数と空間インデックス技術の種類によって、限定されない。本発明で利用可能な空間インデックス技術の要件は、
1.空間領域を再帰的に分割し、分割した領域の情報を記憶する枝を木構造の節とする
2.枝の領域範囲は前記枝の親の節にあたる枝の領域範囲に内包されるという階層的な構造をもつ
3.自身が小分割されない分割領域は当該分割領域が内包する地点データの情報を記憶する葉をもち、葉は木構造の最下位の節に接続していること
である。
【0030】
以下の説明では、空間データベース100に格納された2次元空間における地点データをカーナビゲーション装置1の検索対象とし、空間インデックス技術に四分木手法を適用する例を示す。
【0031】
図1に示す空間データベース100は、地図情報を構成する地点の座標と属性を格納した地点テーブル501と、地点テーブル501の索引情報を格納した空間インデックス101を含む。
【0032】
まず、空間インデックス101は、空間データベース100で管理する地点テーブル501に地点データを挿入する際に図示しない計算機によって作成される。本実施形態では、空間インデックス101の一例として、図4に示す領域分割テーブル401を採用した例を示す。また、地点テーブル501は、地点データの属性情報に加え、X座標とY座標から構成される座標情報を列に含む。例えば、カーナビゲーション装置1で管理する施設テーブルは、施設名、住所、電話番号などの属性情報と、施設の存在場所を平面直角座標系のX座標とY座標で表現した座標情報をもつことが考えられる。
【0033】
四分木手法は、空間データベース100への地点データの挿入に伴い、2次元空間のX軸とY軸に平行な面で4分割する。四分木手法では、一般に、分割領域で格納可能な地点データの最大個数を決め、地点データの挿入で、最大個数を超えた場合に、分割領域を4分割する。領域分割の方法には、4分割後の分割領域の面積を均等にする方法や、4分割後の分割領域内の地点データの個数をできるだけ均等にする方法などが提案されている。後者の方法は、例えば、分割対象の領域内の全ての地点データの重心座標で4分割することで、実現する。本発明のk最近傍検索は、領域の分割方法に依存せず、動作可能である。以下では、四分木手法のデータ構造について記載する。本発明は、空間インデックス技術の上で動作するk最近傍検索である。空間インデックス技術そのものに関する発明ではない。そのため、本実施例では、四分木の生成や探索の手順については公知の手法を適用すればよいので、これらの詳細な説明を省略する。
【0034】
図2は、2次元空間内の一つの座標で位置を特定可能な地点データについて、四分木手法により空間領域201を階層的に分割した例を示す。空間領域201は分割線204で4分割される。各分割領域は、分割領域の識別子(領域ID)202をもつ。分割領域が、当該分割領域を4分割する領域をもたない場合、地点データ202を格納する。例えば、深さ3の分割領域35は、地点データGを格納する。この空間領域201は、多次元空間で各軸を通る面で階層的に分割した分割領域0〜36を木構造で管理する空間インデックス101を構成する。
【0035】
図3は、図2の領域分割に対応した木構造を示す。図3において、木構造の節に対応するものが枝301(図中円)であり、最下位の節と隣接するのが葉302(図中四角)である。枝301と分割領域は1対1の対応関係であり、枝301の数字は図2に示した領域IDを指す。葉302内の英字は地点データIDを示す。地点データIDは、図2のA〜Mに対応する。実施形態の四分木手法は最下位の枝301が、当該枝に隣接する葉302の中に地点データの情報を格納する。
【0036】
図4は、空間データベース100の空間インデックス101に予め格納された分割領域テーブル401を示す。分割領域テーブル401は、四分木の枝301に格納される分割領域の情報を指す。図4は、分割領域テーブル401の属性411と、当該属性に対応する中間枝(図3では、分割領域0〜8に相当する)と最下位枝(図3では、分割領域25〜28、33〜36に相当する)の値を例示する。分割領域の情報は、領域ID412、領域範囲413、分割座標414、子領域ID415、子領域ポインタ416、葉ポインタ417、地点個数418を含む。
【0037】
領域ID412は、分割領域を示す一意の識別子である。領域範囲413は、領域の左下頂点と右上頂点のX−Y座標で表現する。分割座標414は領域を四分割した際の分割点の座標を示す。当該分割領域は、分割座標414を通り、かつX軸とY軸に平行な2本の直線で、4分割する。
【0038】
子領域ID415は、当該領域を四分割した分割領域の識別子を示す。子領域ポインタ416は、子領域ID415が示す分割領域に対応した枝301を格納したストレージ装置5のアドレス値(例えば、LBA(Logical Block Address))を示す。当該枝301が最下位枝である場合、当該枝301に対応した分割領域は子領域を持たない。最下位枝に対応する分割領域の分割座標414、子領域ID415、子領域ポインタ416はNULLとする。葉ポインタ417は、当該枝301に隣接する葉302を格納したストレージ装置5のアドレス値を示す。地点個数418は、当該枝301に隣接する葉302が格納する地点データの個数を示す。当該枝301が中間枝である場合、当該枝301の葉ポインタ417はNULL、地点個数は0になる。
【0039】
図5は、空間データベース100の空間インデックス101に予め格納された地点テーブル501を示す。地点テーブル501は四分木の葉302に記憶され、地点データの情報を示す。この地点データは、葉302に隣接する最下位枝に対応する分割領域が内包する地点データである。各地点データの座標情報は、地点ID511、地点座標512、地点ポインタ513を含む。地点ID511は、当該地点データの一意の識別子である。地点座標512は、当該地点データの位置を特定する座標を示す。地点ポインタ513は、当該地点データに該当するレコードを格納したストレージ装置5のアドレス値を示す。
【0040】
図6は、カーナビゲーション装置1のCPU3で実行されるk最近傍検索の手順を示すフローチャートである。この処理は、CPU3で実行されるアプリケーション9が、入力装置6から質問地点を受信すると開始される。
【0041】
k最近傍検索の処理が開始されると、まず、初期設定部111ではCPU3が、質問地点や質問件数の設定及び候補領域管理部113や候補地点管理部116で利用するメモリ2の領域確保を行う(S101)。
【0042】
次に、最下位枝判定部112では、最近領域が当該領域をさらに4分割する領域をもつか、つまり子領域をもつか否かを判定する(S102)。最近領域とは、結果候補に入るか否かを調査していない地点データを含む分割領域の中で、質問地点に距離が最も近い領域を示す。S102の条件を満たさない場合、最近領域が最下位枝でないと判定される。この場合、領域距離計算部113が、質問地点と最近領域の子領域との最短のユークリッド距離(領域距離d)を計算する(S103)。
【0043】
そして、候補領域管理部114が、最近領域の子領域を候補領域として、子領域の情報を記録する(S104)。候補領域とは、結果候補に入るか否かを調査していない地点データを含む分割領域を示す。その後、候補領域管理部114が、候補領域の中から領域距離dに基づき、次の最近領域を選択する(S105)。
【0044】
一方、上記S102の条件を満たす場合、現在着目している最近領域が最下位枝であると判定される。この場合、地点距離計算部115が、質問地点と最近領域に含まれる地点データとの距離(地点距離d’)を計算する(S106)。
【0045】
次に、候補地点管理部116は、求めた地点距離d’に基づき、質問地点に距離が近い上位k件の地点データの情報を記録する(S107)。そして、終了判定部117は、候補領域内の地点データが候補になり得ないか否かを判定する(S108)。この終了条件を満たさない場合、S105の処理へ進み、検索処理を続行する。
【0046】
一方、終了条件を満たす場合、結果取得部118は、候補地点管理部116が記憶した地点データに対応する結果レコードを取得する(S109)。
【0047】
上記処理を終了条件が成立するまで繰り返すことで、検索結果を空間データベース100から取得する。
【0048】
図7は、k最近傍検索の初期設定(S101:初期設定部111)の詳細な手順を示すサブルーチンのフローチャートである。
【0049】
図7の初期設定処理は、図6の初期設定部111によって実行される。まず、初期設定部111は、質問地点と質問件数を、k最近傍検索の入力値として設定する(S601)。質問地点と質問件数は、例えば、上記入力装置6から受け付けた値である。なお、質問地点は、入力装置6から検索指示を受け付けた時点のユーザの現在位置を用いても良い。
【0050】
次に、初期設定部111は、メモリ2から、候補領域を記憶するメモリ領域をヒープ構造(以下、候補領域ヒープ92)で確保する(S602)。ヒープ構造を用いる理由は、候補領域管理部114が最近領域の子領域の情報を記録する(S104)際の挿入操作と、次の最近領域を選択する際(S105)の選択操作で、効率の良いデータ構造だからである。
【0051】
候補領域ヒープ92は、領域ID412、領域情報ポインタ、領域距離dから構成される要素を格納する。領域情報ポインタは、当該領域に対応する枝301を格納したストレージ装置5のアドレス値を示す。領域距離dは、質問地点と当該領域までの最短距離を示す。候補領域ヒープ92は木構造で管理される。候補領域ヒープ92は、要素の挿入や削除があっても、各要素の領域距離dが、当該要素の子要素の領域距離dより小さいか等しいというヒープ条件を満たす。つまり、候補領域ヒープ92の根要素は、最小の領域距離dをもつ分割領域の情報を格納する。
【0052】
初期設定部111は、メモリ2から、候補地点を記憶するメモリ領域をヒープ構造(以下、候補地点ヒープ91)で確保する(S603)。ヒープ構造を用いる理由は、候補地点管理部116が上位k件の地点データの情報を記録する(S107)際の挿入操作で、効率の良いデータ構造だからである。候補地点ヒープ91は、地点ID511、地点ポインタ513、地点距離d’から構成される要素を格納する。候補地点ヒープ91は、要素の挿入や削除があっても、各要素の地点距離d’が、当該要素の子要素の地点距離d’より大きいか等しいというヒープ条件を満たす。つまり、候補地点ヒープ91の根要素は、最大の地点距離d’をもつ地点データの情報を格納する。この特徴により、候補地点がk件存在する状況で、k+1件目以降の地点データが候補に入るか否かを判定する場合、根要素を参照するだけで候補となるか否かを容易に判定できる。具体的には、判定対象の地点データの地点距離d’が、根要素の地点データの地点距離d’より小さければ、根要素の地点データに代わって判定対象の地点データが候補に入る。本操作により、メモリ上には常に上位k件の地点データのみが保持されることになり、検索実行中のメモリ使用量を抑制できる。
【0053】
初期設定部111は、四分木の根にあたる領域を最近領域に設定し(S204)、サブルーチンを終了する。この場合、最近領域は全体の領域となる。その後、図6に示した最近領域の最下位枝判定の処理に進む(S102)。
【0054】
図8は、最近領域に対する最下位枝判定(S102)の詳細な手順を示すサブルーチンのフローチャートである。最下位判定の処理は、最下位枝判定部(112)によって実行される。まず、初期設定部111のS604で決定した最近領域に対応する四分木の枝情報を取得する(S701)。枝情報は、ストレージ装置5の空間データベース100内に予め格納されている。次に、図4に示した分割領域テーブル401を参照して、当該枝情報の分割領域の座標がNULLか否かを判定する。この条件により、最近領域が最下位枝であるか否かを判定できる。当該条件を満たさず、最近領域が中間枝の場合、質問地点と最近領域の子領域との領域距離dを計算する処理(S103)へ進むため、次の処理として領域距離計算部113を選択する(S703)。当該条件を満たし、最近領域が最下位枝である場合は、質問地点と最近領域に内包される地点データとの距離を計算する処理(S106)に進むため、次の処理として地点距離計算部115を選択する(S704)。そして、サブルーチンを終了するとステップS703またはS704の何れかで選択した処理に分岐する。
【0055】
図9は、領域距離計算(S103)の詳細な手順を示すサブルーチンのフローチャートである。領域距離計算の処理は、領域距離計算部113よって実行される。領域距離計算部113は、分割領域テーブル401を参照して、質問地点と最近領域の子領域との領域距離dを計算する。領域距離dの計算には、子領域の領域範囲が必要になる。子領域の領域範囲は、最近領域の枝情報の領域範囲413と分割座標414の情報から求める。ここでは、図4で示したように、最近領域の左下頂点の座標を(Xmin、 Ymin)、右上頂点の座標を(Xmax、 Ymax)で表現する。また、分割座標414を(Xdiv、 Ydiv)で示す。
【0056】
まず、領域距離計算部113は、最近領域の左下子領域の領域範囲を、左下頂点の座標が(Xmin、 Ymin)、右上頂点の座標が(Xdiv、 Ydiv)とする(S801)。
【0057】
次に、最近領域の右下子領域の領域範囲を、左下頂点の座標が(Xdiv、 Ymin)、右上頂点の座標が(Xmax、 Ydiv)とする(S802)。最近領域の左上子領域の領域範囲を、左下頂点の座標が(Xmin、 Ydiv)、右上頂点の座標が(Xdiv、 Ymax)とする(S803)。最近領域の右上子領域の領域範囲を、左下頂点の座標が(Xdiv、 Ydiv)、右上頂点の座標が(Xmax、 Ymax)とする(S804)。
【0058】
次に、領域距離計算部113は、次の式(1)を用いて、左下、右下、左上、右上の子領域の領域距離dをそれぞれ計算する(S805)。
【0059】
【数1】
【0060】
ただし、
分割領域Rと質問地点(x、y)との距離値d
分割領域Rの範囲: 左下座標(Xmin、 Ymin)、右上座標(Xmax、 Ymax)
である。
【0061】
上記式(1)では、質問地点の座標を(x、y)、分割領域の左下頂点の座標を(Xmin、 Ymin)、右上頂点の座標を(Xmax、 Ymax)で表記する。式(1)は、分割領域の境界線上の点の中で、質問地点に最も近い点と、質問地点との距離dの二乗を示す。分割領域が質問地点を含む場合、当該分割領域の距離は0になる。
【0062】
図10は、上記領域距離dを例示したものである。質問地点1001から図中の分割領域1、2、3、4までの各距離d1、d2、d3、d4は矢印1002で示される。本実施形態では、式(1)で計算した距離dを用いる。なお、実環境では、dの二乗をそのまま領域距離dに用いて、計算負荷を軽減する方法もある。S806の領域距離dの計算後、領域距離計算部113は、各子領域の領域ID412、領域ポインタ、領域距離dを候補領域管理部114に渡す(S806)。これらの処理が完了するとサブルーチンを終了し、図6のステップS104に進む。
【0063】
図11は、最近領域の子領域情報の記録(S104)の詳細な手順を示すサブルーチンのフローチャートである。当該処理は、候補領域管理部114によって実行される。まず、候補領域管理部114は、領域距離計算部113から受け付けた子領域ID415、子領域ポインタ416、領域距離dから構成される候補領域ヒープ92の要素を生成する(S1101)。以下のステップでは、候補領域管理部114が子領域を一つずつ選択する。次に、候補領域管理部114は、S1102からS1104、S1107のステップで、候補領域ヒープ92の条件を満たすように、子領域の情報を挿入する。子領域の情報を挿入する操作の前に、ヒープの実現方法について説明する。
【0064】
図12は、候補領域ヒープ92に適用するヒープ木1201を一次元配列1202で実現した例を示す。図12において、ヒープ木1201の節1203内の番号は要素の識別子を示し、節付近の<>1204内の数値は予め設定した基準値を示す。ヒープ木1201は、候補領域ヒープ92と同じヒープ条件で、根要素の基準値が最小になるように管理されている。一次元配列1202は、ヒープ木1201の深さが浅いほど、深さが同じ場合は左から順に、先頭から要素を格納する。
【0065】
次に、図11において、候補領域管理部114は、まず、要素を候補領域ヒープ92の末尾に要素を挿入する(S1102)。末尾とは、一次元配列の末尾を指す。次に、候補領域管理部114は挿入要素が根に格納されているか判定する。根の格納位置は、一次元配列の0番目になる。
【0066】
当該条件を満たさない場合、挿入要素の領域距離dが親要素の領域距離dより小さいか否かを判定する(S1104)。当該条件を満たす場合、候補領域ヒープ92のヒープ条件を満たさないことになる。この場合、候補領域管理部114は、挿入要素と親要素の格納位置を交換する(S1107)。一次元配列では、挿入要素の格納位置がiの場合、格納位置がi/2を超える最小の整数に1を差し引いた値が親要素となる。
【0067】
ステップS1103の条件を満たした場合、またはS1104の条件を満たさなかった場合には、候補領域ヒープ92のヒープ条件を満たすことになる。この場合、候補領域管理部114は、全ての子領域の情報を候補領域ヒープ92に挿入したかを否かを判定する。当該条件を満たさなければ、S1101の処理へ進み、子領域の情報をヒープに挿入する。一方、当該条件を満たせばサブルーチンを終了して、図6に示す次の最近領域の選択へ処理を進める(S105)。
【0068】
図13は、最近領域の選択(S105)の詳細な手順を示すサブルーチンのフローチャートである。最近領域の選択の処理は、候補領域管理部114によって実行される。まず、候補領域管理部114は、候補領域ヒープ92の根要素に対応する領域を最近領域に設定する(S1301)。次に、候補領域管理部114は、候補領域ヒープ92の根要素を削除する(S1302)。その後、候補領域管理部114は、候補領域ヒープ92内に要素が存在するか判定する(S1303)。当該条件を満たす場合、候補領域管理部114は、ステップS1304からS1307の処理によって、根要素の削除に伴う候補領域ヒープ92の再構築を実行する。ステップS1303の上記条件を満たさない場合、候補領域管理部114は候補領域ヒープ92を再構築する必要がないためサブルーチンを終了して、図6に示した最近領域の最下位枝判定(S102)に進める。
【0069】
一方、ステップS1303で要素が候補領域ヒープ92に存在するときには、候補領域管理部114が、根要素に候補領域ヒープ92の末尾(移動要素)を移動させる(S1304)。一次元配列では、格納位置が末尾の要素を、格納位置が0の場所に移動させることになる。次に、候補領域管理部114は、移動要素が子要素をもつか否かを判定する(S1305)。当該条件を満たさない場合、候補領域ヒープ92のヒープ条件を満たす。この場合、候補領域管理部114はサブルーチンを終了して次の処理である最近領域の最下位枝判定(S102)に進む。一方、ステップS1305の当該条件を満たす場合、候補領域管理部114は、移動要素の領域距離dが子要素の領域距離dより大きい値か否かを判定する(S1306)。当該条件を満たす場合、候補領域ヒープ92のヒープ条件を満たさない。この場合、候補領域管理部114は移動要素と子要素の格納位置を交換して、ステップS1305に戻る(S1307)。なお、二つの子要素がステップS1306の条件を満たす場合、領域距離dの小さい子要素が交換対象となる。一次元配列では、移動要素の格納位置がiの場合、格納位置が2×i+1、または2×i+2の子要素と交換することになる。
【0070】
上記ステップS1306の条件を満たさない場合、候補領域ヒープ92がヒープ条件を満たす。この場合、候補領域管理部114はサブルーチンを終了して次の処理である図6に示す処理対象領域の最下位枝判定(S102)に進む。
【0071】
図14は、地点距離計算(S106)の詳細な手順を示すサブルーチンのフローチャートである。地点距離計算の処理は、地点距離計算部115によって実行される。まず、地点距離計算部115は、最近領域に隣接する葉情報を取得する(S1401)。地点距離計算部115は、分割領域テーブル401に格納された最近領域の領域情報の葉ポインタ417を参照することで、葉情報を取得できる。次に、地点距離計算部115は、葉情報における先頭の地点を座標情報読取ポインタに設定する(S1402)地点距離計算部115は、座標読取ポインタの指す地点を処理対象地点に設定する(S1403)。その後、地点距離計算部115は、ステップS1404において式(2)を用いて、質問地点と地点データの地点距離d’を計算する。
【0072】
【数2】
【0073】
式(2)において、地点距離d’は、質問地点(x、y)と処理対象地点(x’、y’)とのユークリッド距離になる。実環境では、平方根の計算が検索時間の遅延に大きく影響を及ぼす場合がある。この場合、地点距離d’と領域距離dを二乗のままで、k最近傍検索を実行しても良い。そして、地点距離計算部115は、サブルーチンを終了して図6に示した次の処理である、候補地点ヒープ91に処理対象地点を候補地点として記録する処理(S107)に進む。なお、ステップS1405の処理は、後述のステップS1508から実行される処理であり、地点データを1点ずつ距離計算し、候補地点ヒープ91に記録することを意味する。
【0074】
図15は、候補地点ヒープ91への候補地点の記録(S107)の詳細な手順を示すサブルーチンのフローチャートである。候補地点の記録処理は、候補地点管理部116によって実行される。まず、候補地点管理部116は、処理対象地点の候補地点ヒープ91用の要素を生成する(S1501)。当該要素は、処理対象地点の地点ID511、地点距離d’、地点ポインタ513から構成される。次に、候補地点管理部116は、処理対象地点ヒープの要素数が質問件数と等しいかを判定する。既に候補地点ヒープ91が上位k件の地点データを記憶しているか否かで、これ以降の処理内容が異なる。
【0075】
まず、ステップS1502の条件を満たす場合、既に候補地点ヒープ91が質問件数を満たすことになる。この場合、候補地点管理部116は、処理対象地点の地点距離d’が、候補地点ヒープ91の中で質問地点に最も遠い地点データの地点距離d’より小さいか否かを判定する(S1503)。候補地点ヒープ91の中で質問地点に最も遠い地点データは、候補地点ヒープ91の根要素になる。当該条件を満たす場合、候補地点ヒープ91の根要素に代わり、処理対象地点が新しく候補地点に入ることを意味する。
【0076】
ステップS1504からS1507までの処理で、候補地点管理部116が、ヒープ条件を満たしながら、処理対象地点を候補地点ヒープ91に記録する。一方、S1503の条件を満たさない場合、処理対象地点が候補地点に入らないことを意味する。この場合、候補地点管理部116は、ステップS1508の処理へ進む。
【0077】
次に、上記ステップS1502の条件を満たさない場合、まだ、候補地点ヒープ91が質問件数を満たしていないことになる。この場合、候補地点管理部116は、処理対象地点の要素を候補地点ヒープ91に挿入することを前提にする。候補地点管理部116は、ステップS1510からS1512の処理で、ヒープ条件を満たしながら、処理対象地点の要素を候補地点ヒープ91に格納する。
【0078】
次に、候補地点管理部116は、ステップS1508に進むと、最近領域の全ての地点データについて、候補地点になるか否かを調査したかを判定する。当該条件を満たす場合、候補地点管理部116はサブルーチンを終了して図6に示した終了判定(S108)へ進める。一方、S1508の条件を満たさない場合、候補地点管理部116は処理を図14に示したステップS1405へ進ませて、ループの度に地点データを1点ずつ距離計算し、候補地点ヒープ91に記録する。
【0079】
図16は、終了判定(S108)の手順を示すフローチャートである。終了判定の処理は、終了判定部117によって実行される。まず、終了判定部117は、候補地点ヒープ91に要素が存在するか否かを判定する。当該条件を満たさない場合、次に調査すべき分割領域が存在しないことになる。したがって、終了判定部117は、次に行う処理として図6に示した処理として検索結果の取得(S109)を選択する(S1604)。
【0080】
一方、ステップS1601の条件を満たす場合、候補領域ヒープ92の根要素の領域距離dが候補地点ヒープ91の根要素の地点距離d’より大きいか否かを判定する(S1602)。当該条件を満たす場合、検索処理を終了とみなす。終了条件は、候補領域ヒープ92の根要素の領域距離dが、候補地点ヒープ91の根要素の地点距離d’より大きいという条件である。この条件は、さらに広い範囲に存在する分割領域内の地点データを調査しても、候補地点に入る地点データを見つけることができないことを意味する。終了条件の判定は、候補領域と候補地点の記憶にヒープ構造を用いているため、候補地点ヒープ91内をO(1)の探索回数で、実現できる。ステップS1602の条件を満たす場合、終了判定部117は次の処理として図6に示した検索結果の取得(S109)を選択してサブルーチンを終了する。一方、ステップS1602の条件を満たさない場合、別の分割領域に内包される地点データを調査するため、次に行う処理を図6に示した最近領域の選択(S105)としてサブルーチンを終了する。
【0081】
図17は、検索結果の取得(S109)の詳細な手順を示すサブルーチンのフローチャートである。検索結果の取得処理は、結果取得部118によって実行される。この処理によって、結果取得部118は、質問地点から距離の近い順に地点データを取得する。
【0082】
まず、結果取得部118は、候補地点ヒープ91の根要素を結果リスト93の末尾に挿入する(S1701)。結果リスト93は、候補地点ヒープ91と同じ要素を格納可能な一次元配列であり、結果取得部118がメモリ2上に予め確保した領域である。次に、結果取得部118は、候補地点ヒープ91の根要素を削除する(S1702)。その後、結果取得部118は、要素が候補地点ヒープ91に存在するか否かを判定する(S1703)。当該条件を満たす場合、結果取得部118は、ステップS1704からS1707の処理で、根要素の削除に伴う候補地点ヒープ91の再構築を行う。ステップS1703の条件を満たさない場合、結果取得部118は、結果リスト93の末尾から先頭に向かい、地点データを一つずつ取得する(S1708)。当該地点データは、地点座標512と任意個数の属性を含む、空間データベース100で管理されるレコードとなる。
【0083】
以上より、本処理は、まず、地点距離d’の大きい順にヒープソートを行い、その結果を一次元配列で構成した結果リスト93の先頭から順に記憶しておく。そして、当該一次元配列の末尾から先頭に向かい地点データを取得することで、質問地点から距離の近い順に地点データを取得していく。地点データの要素数をNとした場合に、ヒープソートの探索回数はO(N・logN)となり、一次元配列内の探索回数はO(N)となり、結果を得るまでの探索回数をO(N・logN)に抑えることができる。結果取得部118がステップS1708の処理を終えると、k最近傍検索が終了する。
【0084】
上述したk最近傍検索の具体的なアルゴリズムの動作について、図18a〜図18c、図19、図20を用いて、説明する。
【0085】
まず、図18aは、上記図2に示した空間領域201を、図2に示した深さ0の階層の真上から鳥瞰した空間領域1803を示す。この空間領域803は、上記k最近傍検索で質問地点1804と質問件数を5に設定した場合の例を示す。図中丸印の内部の数値は領域ID412を示し、図中方形の枠内の文字は地点ID511を示す。図18bは、上記k最近傍検索の処理過程で計算した空間領域1803における領域距離dを表形式で図示したテーブル1801である。図18cは、上記k最近傍検索の処理過程で計算した空間領域1803における地点距離d’を表形式で図示したテーブル1802である。なお、テーブル1801、1802の情報は、メモリ2上の候補領域ヒープと候補地点ヒープにそれぞれ保持される。
【0086】
図19は、図18aの空間領域1803を用いて、k最近傍検索を実行した際の候補領域ヒープ92の格納状況を示す。候補領域ヒープ92を木構造で表現する。ヒープ木の節1901内の数字は領域ID412、山括弧1902内の数値は領域ID412で示す分割領域間の距離を示す。
【0087】
図20は、図18aに示した空間領域1803を用いて、k最近傍検索を実行した際の候補地点ヒープ91の格納状況を示す。候補地点ヒープ91を木構造で表現する。ヒープ木の節2001内のアルファベットは地点ID511、山括弧2002内の数値は地点ID511で示す地点データの地点距離d’を示す。
【0088】
k最近傍検索を実行すると、まず、初期設定部111が最近領域を領域0に設定する。領域距離計算部113が領域0の子領域1、2、3、4の領域距離dを計算し、子領域の領域情報を候補領域ヒープ92に格納する(図19の(1))。次に、候補領域管理部114は最近領域を領域1に設定し、候補領域ヒープ92から領域1の情報を削除する。そして、候補領域管理部114が領域1の子領域5、6、7、8の情報を候補領域ヒープ92に格納する(図19の(2))。上記と同様に候補領域管理部114は、最近領域を領域8に設定する。同様に、候補領域ヒープ92から領域8の情報を削除し、領域8の子領域33、34、35、36の情報を候補領域ヒープ92に挿入する(図19の(3))。候補領域管理部114は最近領域を最下位枝の領域33に設定する。この場合、領域33の情報を候補領域ヒープ92から削除し、領域33に内包される地点データEの情報を、候補地点ヒープ91に挿入する。この時点の候補領域ヒープ92の格納状況を図19の(4)に示し、候補地点ヒープ91の格納状況を図20の(1)に示す。最近領域を領域35に設定すると、領域33と同様に、候補領域ヒープ92と候補地点ヒープ91が更新される(図19(5)と図20(2))。
【0089】
以下、同様に処理を進めると、候補領域ヒープ92と候補地点ヒープ91の格納状況はそれぞれ図19の(11)と図20の(6)に示すようになる。このとき、候補地点ヒープ91の根要素(地点データI)の地点距離d’が、候補領域ヒープ92の根要素(領域25)の領域距離dより小さくなる。終了条件を満たすため、k最近傍検索の結果は、地点データI、F、G、E、Cとなる。
【0090】
なお、実施の形態1と同等の機能をもつk最近傍検索プログラムを記録した媒体やk最近傍検索装置も、本発明に含まれる。この点は、以降の説明で記載する実施の第2の実施形態や第3の実施形態でも同様である。
【0091】
以上のように本発明の第1の実施形態によれば、検索実行時の空間インデックス101へのディスクアクセス回数を削減することが可能となって、前記従来例のように範囲指定検索を用いたk最近傍検索に比べ、検索時間を短縮できる。さらに、第1の実施形態では、必要最低限の地点データのみ距離計算の対象とするため、従来のk最近傍検索に比べ、CPU3の演算負荷を軽減することが可能となる。
【0092】
<第2の実施形態>
第2の実施形態は、第1の実施形態を拡張し、上述の第3の問題を解決する属性指定のk最近傍検索を実現する。
【0093】
具体的には、第1の実施形態の図5に示した地点テーブル501を拡張して、図21に示す地点テーブル2101を採用する。地点テーブル2101は、地点データを格納するテーブルの座標情報に、地点ID511、X座標とY座標の地点座標512、地点ポインタ513に加え、地点種別514を追加する。例えば、カーナビゲーション装置1の施設テーブルの場合、地点種別に、レストラン、駐車場、ガソリンスタンドなどの地点データの種類を格納することが考えられる。座標情報への地点種別514の追加に伴い、四分木の葉情報において、各地点の座標情報にも地点種別514を追加する。
【0094】
第2の実施形態の処理は、基本的に第1の実施形態に示した図6のフローチャートに従う。ただし、第2の実施形態は、図6に記載の検索の初期設定S101と、地点距離d’の計算S106の処理内容の一部を変更した。以下では、本形態の実現のために変更した処理内容について説明する。
【0095】
図22は、第2の実施形態における検索の初期設定(S101)の手順を示すサブルーチンのフローチャートである。第1の実施形態の図7と異なる部分は、図7のステップS601をステップS2201のステップに変更した点である。ステップS2201において、初期設定部111は、質問地点の座標と質問件数に加えて、地点種別を設定する。本形態によるk最近傍検索の実行結果は、当該地点種別に一致する地点データのみを含む。なお、ステップS2202〜S2204は、第1の実施形態の図7のステップS602〜S604と同一である。
【0096】
図23は、第2の実施形態の地点距離計算(S106)の手順を示すサブルーチンのフローチャートである。図23は、第1の実施形態の図14のフローチャートに対して、ステップS2304とステップS2307を加え、ステップS2307の判定がYESの場合には、終了判定部117の処理(S108)へ移行するようにした点が異なる。
【0097】
ステップS2304において、地点距離計算部115は、処理対象地点の地点種別が上記初期設定部111のステップS2201で設定した地点種別に一致するか判定する。この判定の結果、NOであればステップS2306に進む、S2304により、第2の実施形態は、指定した属性値に一致する地点データのみを取得できる。なお、図23において、ステップS2301〜S2303、S2305、S2306は、第1の実施形態に示した図14のステップS1401〜S1404、S1405と同一である。
【0098】
以上、本発明の第2の実施の形態によれば、属性指定検索とk最近傍検索を組み合わせた場合でも、従来のk最近傍検索に比べ、検索実行時間を短縮できる。これは、第2実施では、空間インデックス101の探索のみで、k最近傍検索を実行できるためである。また、第2の実施の形態では、指定した属性値に一致するk件の地点データを正確に取得できる。これは、第2の実施の形態が、検索対象の地点テーブル2101において、座標情報と属性情報を含む一つの列に対して、k最近傍検索を実行できるためである。
【0099】
<第3の実施形態>
第3の実施の形態は、第1の実施形態を拡張し、上述の第4の問題を解決する最近傍検索を提供する。第3の実施形態の処理は、基本的に第1の実施形態に示した図6のフローチャートに従う。具体的には、検索処理中であっても、検索処理を中断できるように、検索条件に中断条件を設ける。例えば、中断条件は質問地点からの距離で記述する。この場合、当該距離の範囲に存在する地点データが見つからない時点で、検索処理を中断する。また、中断条件として、最大処理時間の設定も効果的である。この場合、検索処理に費やすことができる時間を最大処理時間に設定し、検索処理の経過時間が最大処理時間と等しくなった時点で、検索処理を中断する。以下では、第3の実施形態の中断条件に距離を用いた場合で説明する。
【0100】
初期設定部111で質問地点からの最大距離値(以下、質問距離と呼ぶ)を設定し、質問距離以下の地点データを発見できない時点で、質問件数を満たさずとも、検索処理を終了させる。なお、第3の実施形態による第1の実施形態への拡張は、第2の実施形態でも同様に適用でき、上述の第4の問題を解決できる。第3の実施形態は、第1の実施形態に示した図7に記載の検索の初期設定S101、領域距離dの計算を行うステップS103、地点距離d’の計算を行うステップS106の処理内容を変更する。以下では、第3の実施形態の実現のために変更した処理内容について説明する。
【0101】
図24は、第3の実施の形態における初期設定(S101)の手順を示すサブルーチンのフローチャートである。このフローチャートは、第1の実施形態に示した図7のステップS601を、ステップS2401に置き換えたものである。ステップS2401において、初期設定部111は、質問地点の座標と質問件数に加えて、質問距離を設定する。第3の実施形態によるk最近傍検索の実行結果は、質問地点からの距離値が質問距離以下の地点データのみを含む。なお、ステップS2402〜S2404は、第1の実施形態の図7のステップS602〜S604よ同一である。
【0102】
図25は、第3の実施の形態における領域距離計算の手順を示すサブルーチンのフローチャートである。このフローチャートは、第1の実施形態に示した図9のステップS806を、ステップS2506に置き換えたものである。ステップS2506の処理において、領域距離計算部113は、質問距離以下の領域距離dをもつ子領域を対象に、領域ID412、領域ポインタ、領域距離dを候補領域管理部に渡すことにしている。S2506の処理によって、候補領域ヒープ92は、質問距離以下の領域距離dをもつ分割領域の情報のみを記録することになる。質問距離以下の領域距離dをもつ分割領域は、質問距離の条件を満たし、結果候補に入る可能性のある地点データを内包する。なお、ステップS2501〜S2505は、第1の実施形態の図9に示したステップS801〜S805と同一である。
【0103】
図26は、第3の実施の形態における地点距離の計算の手順を示すサブルーチンのフローチャートである。このフローチャートは、第1の実施形態に示した図14のステップS1404以降に、ステップS2605、S2607を加えたものである。
【0104】
ステップS2604で処理対象地点の地点距離d’を計算した後で、当該地点距離d’が質問距離以下であるかを判断する処理(S2605)を追加し、該条件を満たす場合、候補地点の記録の処理(S107)へ進む。当該条件を満たさない場合、処理対象地点が検索結果に入らないため、すべての地点データを処理していなければ(S2607でNOを選択)、次の地点データの地点距離d’の計算へ進める。なお、ステップS2601〜S2604、S2606は、第1の実施形態に示した図14のステップS1401〜1404、S1405と同一である。
【0105】
以上、本発明の第3の実施の形態によれば、k最近傍検索の実行結果の近傍性を保証できる。これは、第3の実施の形態が、検索条件に中断条件を設定できるためである。中断条件は、例えば、質問地点からの最大距離や検索処理に費やすことのできる最大処理時間である。
【0106】
<第4の実施形態>
第4の実施形態は、k最近傍検索をデータベース管理システム8で実行する場合に記述する問合せ言語、または関数に関する。第4の実施形態は、例えば、アプリケーション開発者が、アプリケーションプログラムからデータベース管理システム8にk最近傍検索を要求する場合のSQLに相当する。以下では、データベース管理システム8の一般的な問合せ言語であるSQLを用いて、第4の実施形態について説明する。
【0107】
図27a〜図27dは、第1の実施形態、第2の実施形態または第3の実施形態のいずれかで実現されるk最近傍検索のためのSQLの記述方法である。なお、図27a〜図27dでは、空間データベース100が、地点データを格納する一つのテーブルに対して、k最近傍検索に合致するレコードの全ての列を取得する場合を示す。
【0108】
図27aの2701に記載のSQLは、第1の実施形態で実現したk最近傍検索のみで利用可能である。2701において、WHERE句のkNN(k−Nearest Neighbor)は、k最近傍検索のためのスカラー関数を示す。kNN関数の第1引数は検索対象テーブルの座標列名、第2引数は質問地点、第3引数は質問件数となる。
【0109】
図27bの2702に記載のSQLは、第1の実施形態または第2の実施形態で実現したk最近傍検索で利用可能である。2702のkNN関数の第1引数は検索対象テーブルの座標列名、第2引数は質問地点、第3引数は質問件数、第4引数は地点データの種別となる。なお、第1の実施形態で実現したk最近傍検索は、種別を設定する必要がないため、第4引数にNULLを設定する。
【0110】
図27cの2703に記載のSQLは、第1の実施形態または第3の実施形態で実現したk最近傍検索で利用可能である。2703のkNN関数の第1引数は検索対象テーブルの座標列名、第2引数は質問地点、第3引数は質問件数、第4引数は質問距離となる。なお、第3の実施形態で実現したk最近傍検索は、質問距離を設定する必要がないため、第4引数にNULLを設定する。
【0111】
図27cの2704に記載のSQLは、第1の実施形態、第2の実施形態、第3の実施形態のどの場合で実現したk最近傍検索でも利用可能である。2704のkNN関数の第1引数は検索対象テーブルの座標列名、第2引数は質問地点、第3引数は質問件数、第4引数は地点データの種別、第5引数は質問距離となる。また、この記載方法は、第3の実施形態2と形態3を組み合わせたk最近傍検索でも利用可能である。なお、第3の実施形態で実現したk最近傍検索は、質問距離を指定する必要がないため、第4引数と第5引数にNULLを設定する。形態2で実現したk最近傍検索は、質問距離を設定する必要がないため、第5引数にNULLを設定する。形態3で実現したk最近傍検索は、種別を設定する必要がないため、第4引数にNULLを設定する。
【0112】
以上、本発明の第4の実施の形態によれば、アプリケーションプログラム開発者がk最近傍検索をSQLで記述できることで、プログラムの開発期間を短縮できる。
【0113】
以上の四つの実施の形態では、地理空間内の地点データを対象に、k最近傍検索方法について説明した。ここで、本発明は、地理空間内の地点データへの適用に限るものではない。本発明は、テレビ番組や楽曲など、特徴ベクトルで表現可能なデータにも適用でき、類似検索を実現できる。例えば、テレビ番組の場合、第一特徴ベクトルにシリアスとバラエティを軸に取り、第二特徴ベクトルにフィクションとノンフィクションを軸に取る。そして、これらを軸とした二次元空間にテレビ番組を対応付け、指定した地点から距離の近い番組を検索できれば、特徴が類似しているテレビ番組を検索できる。
【0114】
なお、上記各実施形態では本発明をカーナビゲーション装置1へ適用した例を示したが、この他PNDや携帯電話あるいは携帯ゲーム機等の組込機器に適用することができる。また、空間データベース100としては、2次元、または3次元空間の地点データを検索対象とすることができる。
【0115】
また、上記各実施形態では、空間インデックス101に四分木を適用した例を示したが、R−tree等の他の空間インデックスを適用しても良い。
【0116】
また、上記各実施形態では、地点データを2次元空間内の座標とした例を示したが、多次元の座標で構成された地点データに本発明を適用しても良い。 例えば、多次元の地点データが3次元で構成され、3次元空間内の一つの座標で位置を特定可能な地点データである場合、空間インデックス101が八分木またはR−treeの何れか一方により地点データを複数の領域に分割して上述のような検索処理を行うことができる。
<補足>
7.前記候補領域管理部は、分割領域の情報をヒープ構造で管理し、前記ヒープ構造の節に対応する分割領域の領域距離は、前記節の子に対応する分割領域の領域距離より小さいか等しいというヒープ条件を設ける請求項6に記載のk最近傍検索方法。
【0117】
10.前記候補地点管理部は、前記地点データの情報をヒープ構造で管理し、前記ヒープ構造に、前記ヒープ構造の節に対応する地点データの地点距離は、前記節の子に対応する地点データの地点距離より大きいか等しいというヒープ条件を設ける請求項9に記載のk最近
12.前記終了判定部は、前記候補領域管理部のヒープ構造の根に位置する分割領域の領域距離が、前記候補地点管理部のヒープ構造の根に位置する地点データの地点距離より大きい場合に、検索を終了させる請求項10に記載のk最近傍検索方法。
【0118】
14.前記初期設定部は、質問地点、質問件数、中断条件を検索条件として設定し、
前記質問件数に満たない状況でも、前記中断条件を満たす場合に検索処理を中断し、
前記結果取得部が、前記質問地点に距離の近い最大k件の地点データを取得可能な請求項2に記載のk最近傍検索方法。
【0119】
15.前記中断条件は、検索結果となる地点データの最大距離を示す質問距離で記述し、
前記領域距離計算部は、前記質問距離より小さいか等しい分割領域に関する情報のみを 前記候補領域管理部に記録するように処理し、
前記地点距離計算部は、質問距離より小さいか等しい地点データに関する情報のみを前 記候補地点管理部に記録するように処理することで、
前記結果取得部が、データベース管理システムから、前記質問距離より小さいか等しく、かつ質問地点に距離の近い最大k件の地点データを取得可能な請求項14に記載のk最近傍検索方法。
【0120】
16.前記中断条件は、検索処理に費やすことができる最大時間を示す最大処理時間で記述し、
検索処理の実行経過時間が前記最大処理時間と等しくなると、前記検索処理を中断して、
前記結果取得部が、データベース管理システムから、質問地点に距離の近い最大k件の地点データを取得可能な請求項14に記載のk最近傍検索方法。
【0121】
17.前記初期設定部は、質問地点、質問件数、属性情報、中断条件を検索条件として設定し、
前記地点距離計算部は、前記検索条件の属性情報に一致する地点データのみを前記候補地点管理部に記録するように処理すると共に、
前記質問件数に満たない状況でも、前記中断条件を満たす場合に検索処理を中断し、
前記結果取得部が、前記データベース管理システムから、前記属性情報に一致する最大k件の地点データを取得可能な請求項2に記載のk最近傍検索方法。
【0122】
18.前記中断条件は、検索結果となる地点データの最大距離を示す質問距離で記述し、
前記領域距離計算部は、前記質問距離より小さいか等しい分割領域に関する情報のみを前記候補領域管理部に記録するように処理し、
前記地点距離計算部は、前記質問距離より小さいか等しい地点データに関する情報のみを前記候補地点管理部に記録するように処理することで、
前記結果取得部が、前記データベース管理システムから、前記属性情報に一致し、かつ前記質問距離より小さいか等しく、かつ質問地点に距離の近い最大k件の地点データを取得可能な請求項17に記載のk最近傍検索方法。
【0123】
19.前記中断条件は、検索処理に費やすことができる最大時間を示す最大処理時間で記述し、
検索処理の実行経過時間が前記最大処理時間と等しくなると、前記検索処理を中断して、
前記結果取得部が、前記データベース管理システムから、前記属性情報に一致し、かつ前記質問距離より小さいか等しく、かつ質問地点に距離の近い最大k件の地点データを取得可能な請求項17に記載のk最近傍検索方法。
【0124】
21.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、属性情報を引数に取る問合せ言語、または関数で記述可能な請求項13に記載のk最近傍検索方法。
【0125】
22.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、中断条件を引数に取る問合せ言語、または関数で記述可能な請求項14に記載のk最近傍検索方法。
【0126】
23.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、質問距離を引数に取る問合せ言語、または関数で記述可能な請求項15に記載のk最近傍検索方法。
【0127】
24.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、最大処理時間を引数に取る問合せ言語、または関数で記述可能な請求項16に記載のk最近傍検索方法。
【0128】
25.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、属性情報、中断条件を引数に取る問合せ言語、または関数で記述可能な請求項17に記載のk最近傍検索方法。
【0129】
26.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、属性情報、質問距離を引数に取る問合せ言語、または関数で記述可能な請求項18に記載のk最近傍検索方法。
【0130】
27.前記データベース管理システムで実行する前記k最近傍検索は、検索対象となるテーブルの座標列名、質問地点、質問件数、属性情報、最大処理時間を引数に取る問合せ言語、または関数で記述可能な請求項19に記載のk最近傍検索方法。
【産業上の利用可能性】
【0131】
以上のように、本発明は空間データベースを利用する計算機システムに適用することができ、特に、カーナビゲーション装置などの組込装置に適用することができる。
【図面の簡単な説明】
【0132】
【図1】第1の実施形態を示し、本発明を適用するカーナビゲーション装置の構成を示すブロック図。
【図2】第1の実施形態を示し、空間インデックスに適用する四分木の階層構造を示す説明図。
【図3】第1の実施形態を示し、空間インデックスに適用する四分木の木構造を示す説明図。
【図4】第1の実施形態を示し、四分木の枝情報を格納する分割領域テーブルの一例を示す説明図。
【図5】第1の実施形態を示し、四分木の葉情報を格納する地点テーブルの一例を示す説明図。
【図6】第1の実施形態を示し、カーナビゲーション装置で実行されるk最近傍検索の手順の一例を示すフローチャート。
【図7】第1の実施形態を示し、図6に示した初期設定部のサブルーチンの一例を示すフローチャート。
【図8】第1の実施形態を示し、図6に示した最下位判定部のサブルーチンの一例を示すフローチャート。
【図9】第1の実施形態を示し、図6に示した領域距離計算部のサブルーチンの一例を示すフローチャート。
【図10】第1の実施形態を示し、分割領域の領域距離の計算方法を示す説明図。
【図11】第1の実施形態を示し、図6に示した最近領域の子領域の情報を記録する処理のサブルーチンの一例を示すフローチャート。
【図12】第1の実施形態を示し、一次元配列によるヒープ木の説明図。
【図13】第1の実施形態を示し、図6に示した最近領域の子領域の情報を記録する処理のサブルーチンの一例を示すフローチャート。
【図14】第1の実施形態を示し、図6に示した地点距離計算部のサブルーチンの一例を示すフローチャート。
【図15】第1の実施形態を示し、図6に示した候補地点管理部のサブルーチンの一例を示すフローチャート。
【図16】第1の実施形態を示し、図6に示した終了判定部のサブルーチンの一例を示すフローチャート。
【図17】第1の実施形態を示し、図6に示した結果取得部のサブルーチンの一例を示すフローチャート。
【図18a】第1の実施形態を示し、図2に示した空間領域の平面図。
【図18b】第1の実施形態を示し、k最近傍検索で得られた空間領域における領域IDと領域距離dを保持するテーブルの説明図。
【図18c】第1の実施形態を示し、k最近傍検索で得られた空間領域における地点IDと地点距離d’を保持するテーブルの説明図。
【図19】第1の実施形態を示し、図18aの空間領域でk最近傍検索を実行した際の候補領域ヒープ92の木構造の一例を示す説明図。
【図20】第1の実施形態を示し、図18aの空間領域でk最近傍検索を実行した際の候補地点ヒープ91の木構造の一例を示す説明図。
【図21】第2の実施形態を示し、四分木の葉情報を格納する地点テーブルの一例を示す説明図。
【図22】第2の実施形態を示し、初期設定部のサブルーチンの一例を示すフローチャート。
【図23】第2の実施形態を示し、地点距離計算部のサブルーチンの一例を示すフローチャート。
【図24】第3の実施形態を示し、初期設定部のサブルーチンの一例を示すフローチャート。
【図25】第3の実施形態を示し、領域距離計算部のサブルーチンの一例を示すフローチャート。
【図26】第3の実施形態を示し、地点距離計算部のサブルーチンの一例を示すフローチャート。
【図27a】第4の実施形態を示し、前記第1実施形態に適用可能なSQLを示す説明図。
【図27b】第4の実施形態を示し、前記第1実施形態と第2実施形態に適用可能なSQLを示す説明図。
【図27c】第4の実施形態を示し、前記第1実施形態と第3実施形態に適用可能なSQLを示す説明図。
【図27d】第4の実施形態を示し、前記第1実施形態と第2実施形態及び第3実施形態に適用可能なSQLを示す説明図。
【符号の説明】
【0133】
1 カーナビゲーション装置
2 メモリ
3 CPU
5 ストレージ装置
7 OS
8 DBMS
9 アプリケーション
100 空間データベース
101 空間インデックス
111初期設定部
112 最下位枝判定部
113 領域距離計算部
114 候補領域管理部
115 地点距離計算部
116 候補地点管理部
117 終了判定部
118 結果取得部
501 地点テーブル
【特許請求の範囲】
【請求項1】
多次元の地点データと、前記地点データを含む領域を複数の領域に分割して当該領域内に子領域を設定し、前記地点データと前記領域から枝と葉を含む木構造を作成した空間インデックスと、を含むデータベースと、前記データベースを管理するデータベース管理システムにおいて、検索の始点となる質問地点を受け付けて、前記質問地点から距離の近い上位k件の質問件数の地点データを検索するk最近傍検索方法であって、
前記質問地点と質問件数を検索条件に設定するステップと、
前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定するステップと、
前記最近領域が子領域をもつ中間枝と判定されると、前記質問地点と最近領域の子領域との距離を領域距離として計算するステップと、
前記領域距離の計算対象となった領域の情報を保持し、当該領域の最近領域を取得するステップと、
前記最下位枝か中間枝かの判定結果で、前記最近領域が子領域をもたない最下位枝と判定されると、前記質問地点と最近領域に内包される地点データの距離を地点距離として計算するステップと、
前記地点距離の計算対象となった地点データの情報を保持するステップと、
前記検索条件を満たすまで、前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定するステップから前記地点距離の計算対象となった地点データの情報を保持するステップまでの検索処理を繰り返し、前記検索条件を満たした時点で前記検索処理を終了させるステップと、
前記検索処理が終了した後に、前記保持された地点データのレコードを検索結果として前記データベース管理システムから取得するステップと、
を含むことを特徴とするk最近傍検索方法。
【請求項2】
前記空間インデックスは、多次元空間を各軸を通る面で階層的に分割した領域を木構造で管理し、前記分割領域に関する情報を枝に格納し、前記枝に対応する分割領域は前記枝の子に位置する枝に対応する分割領域を内包し、最下位の枝に対応する分割領域に内包される地点データに関する情報を前記枝に隣接する葉に格納する空間インデックスである請求項1に記載のk最近傍検索方法。
【請求項3】
前記多次元の地点データは、2次元空間内の一つの座標で位置を特定可能な地点データで構成され、
前記空間インデックスが四分木またはR−treeの何れか一方により前記地点データを複数の領域に分割されたことを特徴とする請求項2に記載のk最近傍検索方法。
【請求項4】
前記多次元の地点データは、3次元空間内の一つの座標で位置を特定可能な地点データで構成され、
前記空間インデックスが八分木またはR−treeの何れか一方により前記地点データを複数の領域に分割されたことを特徴とする請求項2に記載のk最近傍検索方法。
【請求項5】
前記質問地点と最近領域の子領域との距離を計算するステップは、
前記質問地点と子領域との距離を、前記質問地点と前記子領域の境界線上の点の中で、前記質問地点に最も距離が近い点との距離を領域距離として求め、前記子領域が前記質問地点を内包する場合は、前記領域距離を0とすることを特徴とする請求項1に記載のk最近傍検索方法。
【請求項6】
前記当該領域の最近領域を取得するステップは、
前記領域に関する情報として、前記データベース管理システムにおける領域または子領域の情報の格納位置を示す領域ポインタと、前記領域の領域距離を保持して、前記最近領域が空間インデックスの最下位枝か中間枝かを判定するステップで判定の対象となる最近領域に関する情報を選択してから、当該領域を削除することを特徴とする請求項5に記載のk最近傍検索方法。
【請求項7】
前記質問地点と最近領域に内包される地点データの距離を計算するステップは、
前記質問地点と地点データの最短距離を地点距離として定義し、前記地点距離を計算することを特徴とする請求項5に記載のk最近傍検索方法。
【請求項8】
前記地点距離の計算対象となった地点データの情報を保持するステップは、
前記地点データに関する情報として、前記データベース管理システムにおける地点データの格納位置を示す地点ポインタと、前記地点距離を最大でk件まで保持し、既にk件分の地点データに関する情報を保持している状態で、地点距離を計算し終えた地点データを保持する場合、前記k+1件の地点データの中で、最大の地点距離をもつ地点データに関する情報を削除し、残りのk件分の地点データに関する情報を保持することを特徴とする請求項7に記載のk最近傍検索方法。
【請求項9】
前記検索処理を終了させるステップは、前記領域距離の計算対象となった領域の情報を保持するステップで保持されている領域の中での最短の領域距離が、前記地点距離の計算対象となった地点データの情報を保持するステップで保持されている地点データの中での最長の地点距離より大きくなる場合に、検索処理を終了させることを特徴とする請求項7に記載のk最近傍検索方法。
【請求項10】
前記空間インデックスは、前記地点データに関する情報に、前記地点データの属性情報を含めて、葉で管理し、
前記質問地点と質問件数を検索条件に設定するステップは、前記質問地点と、質問件数と、属性情報を検索条件として設定し、
前記質問地点と最近領域に内包される地点データの距離を計算するステップは、
前記検索条件の属性情報に一致する地点データのみを保持し、
前記保持された地点データのレコードを検索結果として前記データベース管理システムから取得するステップは、
前記属性情報に一致し、かつ質問地点に距離の近い上位k件の地点データを取得することを特徴とする請求項2に記載のk最近傍検索方法。
【請求項11】
前記質問地点と質問件数を検索条件に設定するステップは、検索対象となる前記データベースのテーブルの座標列名と、質問地点と、質問件数とを引数に含む問合せ言語または関数で受け付けることを特徴とする請求項2に記載のk最近傍検索方法。
【請求項12】
多次元の地点データと、前記地点データを含む領域を複数の領域に分割して当該領域内に子領域を設定し、前記地点データと前記領域から枝と葉を含む木構造を作成した空間インデックスと、を含むデータベースと、前記データベースを管理するデータベース管理システムにおいて、検索の始点となる質問地点を受け付けて、前記質問地点から距離の近い上位k件の質問件数の地点データを検索するプログラムにおいて、
前記質問地点と質問件数を検索条件に設定する手順と、
前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定する手順と、
前記最近領域が子領域をもつ中間枝と判定されると、前記質問地点と最近領域の子領域との距離を領域距離として計算する手順と、
前記領域距離の計算対象となった領域の情報を保持し、当該領域の最近領域を取得する手順と、
前記最下位枝か中間枝かの判定結果で、前記最近領域が子領域をもたない最下位枝と判定されると、前記質問地点と最近領域に内包される地点データの距離を地点距離として計算する手順と、
前記地点距離の計算対象となった地点データの情報を保持する手順と、
前記検索条件を満たすまで、前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定する手順から前記地点距離の計算対象となった地点データの情報を保持する手順の検索処理を繰り返し、前記検索条件を満たした時点で前記検索処理を終了させる手順と、
前記検索処理が終了した後に、前記保持された地点データのレコードを検索結果として前記データベース管理システムから取得する手順と、
を計算機に機能させることを特徴とするプログラム。
【請求項13】
演算処理を行うプロセッサと、
情報を記憶する記憶装置と、
多次元の地点データと、前記地点データを含む領域を複数の領域に分割して当該領域内に子領域を設定し、前記地点データと前記領域から枝と葉を含む木構造を作成した空間インデックスと、を含むデータベースと、
前記データベースを管理するデータベース管理システムと、
を備え、検索の始点となる質問地点を受け付けて、前記質問地点から距離の近い上位k件の質問件数の地点データを検索するk最近傍検索装置であって、
前記プロセッサが前記質問地点と質問件数を検索条件に設定する初期設定部と、
前記プロセッサが前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定する最下位枝判定部と、
前記プロセッサは前記最近領域が子領域をもつ中間枝であると判定すると、前記質問地点と最近領域の子領域との距離を領域距離として計算する領域距離計算部と、
前記プロセッサが前記領域距離の計算対象となった領域の情報を前記記憶装置に保持し、当該領域の最近領域を取得する候補領域管理部と、
前記最下位枝か中間枝かの判定結果で、前記プロセッサは前記最近領域が子領域をもたない最下位枝であると判定すると、前記質問地点と最近領域に内包される地点データの距離を地点距離として計算する候補地点管理部と、
前記プロセッサが前記地点距離の計算対象となった地点データの情報を前記記憶装置に保持する地点距離計算部と、
前記プロセッサが前記検索条件を満たすまで、最下位枝判定部から候補地点管理部までの検索処理を繰り返し、前記検索条件を満たした時点で前記検索処理を終了させる終了判定部と、
前記検索処理が終了した後に、前記プロセッサが前記保持された地点データのレコードを検索結果として前記データベース管理システムから取得する結果取得部と、
を備えたことを特徴とするk最近傍検索装置。
【請求項14】
前記初期設定部は、前記質問地点と、前記質問件数と、中断条件を検索条件として設定し、
前記終了判定部は、前記質問件数に満たない状況でも、前記中断条件を満たす場合に前記検索処理を中断し、
前記結果取得部が、前記質問地点に地点距離の近い最大k件の地点データを取得することを特徴とする請求項13に記載のk最近傍検索装置。
【請求項15】
前記中断条件は、前記質問地点から地点データまでの最大距離を示す質問距離または検索処理に費やすことのできる最大時間を示す最大処理時間の何れか一方を含み、
前記中断条件が質問距離のときには、
前記領域距離計算部は、前記質問距離より小さいか等しい分割領域に関する情報のみを前記候補領域管理部に保持し、
前記地点距離計算部は、前記質問距離以下の地点データに関する情報のみを前記候補地点管理部に保持し、
前記結果取得部が、前記データベース管理システムから、前記質問距離以下で、かつ質問地点から距離の近い最大k件の地点データを取得し、
前記中断条件が最大処理時間のときには、
前記終了判定部は、前記検索処理の経過時間が前記最大処理時間と等しくなると、前記検索処理を中断し、
前記結果取得部が、データベース管理システムから、質問地点から距離の近い最大k件の地点データを取得可能にする請求項14に記載のk最近傍検索装置。
【請求項1】
多次元の地点データと、前記地点データを含む領域を複数の領域に分割して当該領域内に子領域を設定し、前記地点データと前記領域から枝と葉を含む木構造を作成した空間インデックスと、を含むデータベースと、前記データベースを管理するデータベース管理システムにおいて、検索の始点となる質問地点を受け付けて、前記質問地点から距離の近い上位k件の質問件数の地点データを検索するk最近傍検索方法であって、
前記質問地点と質問件数を検索条件に設定するステップと、
前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定するステップと、
前記最近領域が子領域をもつ中間枝と判定されると、前記質問地点と最近領域の子領域との距離を領域距離として計算するステップと、
前記領域距離の計算対象となった領域の情報を保持し、当該領域の最近領域を取得するステップと、
前記最下位枝か中間枝かの判定結果で、前記最近領域が子領域をもたない最下位枝と判定されると、前記質問地点と最近領域に内包される地点データの距離を地点距離として計算するステップと、
前記地点距離の計算対象となった地点データの情報を保持するステップと、
前記検索条件を満たすまで、前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定するステップから前記地点距離の計算対象となった地点データの情報を保持するステップまでの検索処理を繰り返し、前記検索条件を満たした時点で前記検索処理を終了させるステップと、
前記検索処理が終了した後に、前記保持された地点データのレコードを検索結果として前記データベース管理システムから取得するステップと、
を含むことを特徴とするk最近傍検索方法。
【請求項2】
前記空間インデックスは、多次元空間を各軸を通る面で階層的に分割した領域を木構造で管理し、前記分割領域に関する情報を枝に格納し、前記枝に対応する分割領域は前記枝の子に位置する枝に対応する分割領域を内包し、最下位の枝に対応する分割領域に内包される地点データに関する情報を前記枝に隣接する葉に格納する空間インデックスである請求項1に記載のk最近傍検索方法。
【請求項3】
前記多次元の地点データは、2次元空間内の一つの座標で位置を特定可能な地点データで構成され、
前記空間インデックスが四分木またはR−treeの何れか一方により前記地点データを複数の領域に分割されたことを特徴とする請求項2に記載のk最近傍検索方法。
【請求項4】
前記多次元の地点データは、3次元空間内の一つの座標で位置を特定可能な地点データで構成され、
前記空間インデックスが八分木またはR−treeの何れか一方により前記地点データを複数の領域に分割されたことを特徴とする請求項2に記載のk最近傍検索方法。
【請求項5】
前記質問地点と最近領域の子領域との距離を計算するステップは、
前記質問地点と子領域との距離を、前記質問地点と前記子領域の境界線上の点の中で、前記質問地点に最も距離が近い点との距離を領域距離として求め、前記子領域が前記質問地点を内包する場合は、前記領域距離を0とすることを特徴とする請求項1に記載のk最近傍検索方法。
【請求項6】
前記当該領域の最近領域を取得するステップは、
前記領域に関する情報として、前記データベース管理システムにおける領域または子領域の情報の格納位置を示す領域ポインタと、前記領域の領域距離を保持して、前記最近領域が空間インデックスの最下位枝か中間枝かを判定するステップで判定の対象となる最近領域に関する情報を選択してから、当該領域を削除することを特徴とする請求項5に記載のk最近傍検索方法。
【請求項7】
前記質問地点と最近領域に内包される地点データの距離を計算するステップは、
前記質問地点と地点データの最短距離を地点距離として定義し、前記地点距離を計算することを特徴とする請求項5に記載のk最近傍検索方法。
【請求項8】
前記地点距離の計算対象となった地点データの情報を保持するステップは、
前記地点データに関する情報として、前記データベース管理システムにおける地点データの格納位置を示す地点ポインタと、前記地点距離を最大でk件まで保持し、既にk件分の地点データに関する情報を保持している状態で、地点距離を計算し終えた地点データを保持する場合、前記k+1件の地点データの中で、最大の地点距離をもつ地点データに関する情報を削除し、残りのk件分の地点データに関する情報を保持することを特徴とする請求項7に記載のk最近傍検索方法。
【請求項9】
前記検索処理を終了させるステップは、前記領域距離の計算対象となった領域の情報を保持するステップで保持されている領域の中での最短の領域距離が、前記地点距離の計算対象となった地点データの情報を保持するステップで保持されている地点データの中での最長の地点距離より大きくなる場合に、検索処理を終了させることを特徴とする請求項7に記載のk最近傍検索方法。
【請求項10】
前記空間インデックスは、前記地点データに関する情報に、前記地点データの属性情報を含めて、葉で管理し、
前記質問地点と質問件数を検索条件に設定するステップは、前記質問地点と、質問件数と、属性情報を検索条件として設定し、
前記質問地点と最近領域に内包される地点データの距離を計算するステップは、
前記検索条件の属性情報に一致する地点データのみを保持し、
前記保持された地点データのレコードを検索結果として前記データベース管理システムから取得するステップは、
前記属性情報に一致し、かつ質問地点に距離の近い上位k件の地点データを取得することを特徴とする請求項2に記載のk最近傍検索方法。
【請求項11】
前記質問地点と質問件数を検索条件に設定するステップは、検索対象となる前記データベースのテーブルの座標列名と、質問地点と、質問件数とを引数に含む問合せ言語または関数で受け付けることを特徴とする請求項2に記載のk最近傍検索方法。
【請求項12】
多次元の地点データと、前記地点データを含む領域を複数の領域に分割して当該領域内に子領域を設定し、前記地点データと前記領域から枝と葉を含む木構造を作成した空間インデックスと、を含むデータベースと、前記データベースを管理するデータベース管理システムにおいて、検索の始点となる質問地点を受け付けて、前記質問地点から距離の近い上位k件の質問件数の地点データを検索するプログラムにおいて、
前記質問地点と質問件数を検索条件に設定する手順と、
前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定する手順と、
前記最近領域が子領域をもつ中間枝と判定されると、前記質問地点と最近領域の子領域との距離を領域距離として計算する手順と、
前記領域距離の計算対象となった領域の情報を保持し、当該領域の最近領域を取得する手順と、
前記最下位枝か中間枝かの判定結果で、前記最近領域が子領域をもたない最下位枝と判定されると、前記質問地点と最近領域に内包される地点データの距離を地点距離として計算する手順と、
前記地点距離の計算対象となった地点データの情報を保持する手順と、
前記検索条件を満たすまで、前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定する手順から前記地点距離の計算対象となった地点データの情報を保持する手順の検索処理を繰り返し、前記検索条件を満たした時点で前記検索処理を終了させる手順と、
前記検索処理が終了した後に、前記保持された地点データのレコードを検索結果として前記データベース管理システムから取得する手順と、
を計算機に機能させることを特徴とするプログラム。
【請求項13】
演算処理を行うプロセッサと、
情報を記憶する記憶装置と、
多次元の地点データと、前記地点データを含む領域を複数の領域に分割して当該領域内に子領域を設定し、前記地点データと前記領域から枝と葉を含む木構造を作成した空間インデックスと、を含むデータベースと、
前記データベースを管理するデータベース管理システムと、
を備え、検索の始点となる質問地点を受け付けて、前記質問地点から距離の近い上位k件の質問件数の地点データを検索するk最近傍検索装置であって、
前記プロセッサが前記質問地点と質問件数を検索条件に設定する初期設定部と、
前記プロセッサが前記質問地点に最も近い最近領域が空間インデックスの最下位枝か中間枝かを判定する最下位枝判定部と、
前記プロセッサは前記最近領域が子領域をもつ中間枝であると判定すると、前記質問地点と最近領域の子領域との距離を領域距離として計算する領域距離計算部と、
前記プロセッサが前記領域距離の計算対象となった領域の情報を前記記憶装置に保持し、当該領域の最近領域を取得する候補領域管理部と、
前記最下位枝か中間枝かの判定結果で、前記プロセッサは前記最近領域が子領域をもたない最下位枝であると判定すると、前記質問地点と最近領域に内包される地点データの距離を地点距離として計算する候補地点管理部と、
前記プロセッサが前記地点距離の計算対象となった地点データの情報を前記記憶装置に保持する地点距離計算部と、
前記プロセッサが前記検索条件を満たすまで、最下位枝判定部から候補地点管理部までの検索処理を繰り返し、前記検索条件を満たした時点で前記検索処理を終了させる終了判定部と、
前記検索処理が終了した後に、前記プロセッサが前記保持された地点データのレコードを検索結果として前記データベース管理システムから取得する結果取得部と、
を備えたことを特徴とするk最近傍検索装置。
【請求項14】
前記初期設定部は、前記質問地点と、前記質問件数と、中断条件を検索条件として設定し、
前記終了判定部は、前記質問件数に満たない状況でも、前記中断条件を満たす場合に前記検索処理を中断し、
前記結果取得部が、前記質問地点に地点距離の近い最大k件の地点データを取得することを特徴とする請求項13に記載のk最近傍検索装置。
【請求項15】
前記中断条件は、前記質問地点から地点データまでの最大距離を示す質問距離または検索処理に費やすことのできる最大時間を示す最大処理時間の何れか一方を含み、
前記中断条件が質問距離のときには、
前記領域距離計算部は、前記質問距離より小さいか等しい分割領域に関する情報のみを前記候補領域管理部に保持し、
前記地点距離計算部は、前記質問距離以下の地点データに関する情報のみを前記候補地点管理部に保持し、
前記結果取得部が、前記データベース管理システムから、前記質問距離以下で、かつ質問地点から距離の近い最大k件の地点データを取得し、
前記中断条件が最大処理時間のときには、
前記終了判定部は、前記検索処理の経過時間が前記最大処理時間と等しくなると、前記検索処理を中断し、
前記結果取得部が、データベース管理システムから、質問地点から距離の近い最大k件の地点データを取得可能にする請求項14に記載のk最近傍検索装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18a】
【図18b】
【図18c】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27a】
【図27b】
【図27c】
【図27d】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18a】
【図18b】
【図18c】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27a】
【図27b】
【図27c】
【図27d】
【公開番号】特開2009−199151(P2009−199151A)
【公開日】平成21年9月3日(2009.9.3)
【国際特許分類】
【出願番号】特願2008−37362(P2008−37362)
【出願日】平成20年2月19日(2008.2.19)
【出願人】(000005108)株式会社日立製作所 (27,607)
【出願人】(000233055)日立ソフトウエアエンジニアリング株式会社 (1,610)
【Fターム(参考)】
【公開日】平成21年9月3日(2009.9.3)
【国際特許分類】
【出願日】平成20年2月19日(2008.2.19)
【出願人】(000005108)株式会社日立製作所 (27,607)
【出願人】(000233055)日立ソフトウエアエンジニアリング株式会社 (1,610)
【Fターム(参考)】
[ Back to top ]