(57)【要約】【課題】空間領域に配置されたオブジェクトの検索処理について、高速かつ小容量で実施すること。【解決手段】空間データ管理装置１のオブジェクト検索部３０は、領域索引ツリー２１のルートノードから順に、検索範囲の代表点をスカラ値に写像した検索符号値と、領域索引ツリー２１の各ノードの空間領域のキー値とを照合することにより、非リーフノード、リーフノード、オブジェクトへのリンクと辿ることで、検索範囲の代表点が含まれる空間領域と、その空間領域からリンクするオブジェクトとを抽出する手順について、一巡ごとに検索範囲から辿った空間領域を除外した領域の代表点を新たな検索符号値として更新することで繰り返すことで、検索範囲に交わるオブジェクトを検索する。【選択図】図１
2010160591.tif 000002
【特許請求の範囲】
【請求項１】
多次元空間上にオブジェクトが配置される空間データを管理する空間データ管理装置であって、
前記空間データ管理装置は、空間データを格納する記憶部と、指定された検索範囲内に存在するオブジェクトを前記空間データから検索するオブジェクト検索部と、を有し、
前記記憶部には、各ノードからの子ノードの数を制限するバランス木として前記空間データを格納する領域索引ツリーが記憶され、
前記記憶された領域索引ツリーの各ノードには、前記空間データを１回以上等分割した空間領域の情報が所定数以下だけ格納され、その空間領域の情報は、空間領域の多次元空間上の位置を一意に示すスカラ値に写像した結果であるキー値が含まれ、
前記領域索引ツリーの子ノードを持つ非リーフノードには、その各子ノードのとりうるキー値の範囲に応じて、各子ノードへのリンクが対応づけられており、前記領域索引ツリーの子ノードを持たないリーフノードには、空間領域の情報から、その空間領域に外接矩形が交わるオブジェクトへのリンクが対応づけられており、
前記オブジェクト検索部は、
入力装置を介して前記検索範囲が指定されると、
前記領域索引ツリーのルートノードから順に、前記検索範囲の代表点をスカラ値に写像した検索符号値と、前記領域索引ツリーの各ノードの空間領域のキー値とを照合することにより、非リーフノード、リーフノード、オブジェクトへのリンクと辿ることで、前記検索範囲の代表点が含まれる空間領域と、その空間領域からリンクするオブジェクトとを抽出する手順について、一巡ごとに前記検索範囲から辿った空間領域を除外した領域の代表点を新たな検索符号値として更新することで繰り返し、
前記検索範囲から辿った空間領域を除外した領域が無くなると、前記領域索引ツリーの各ノードを辿る処理により抽出される各オブジェクトについて、オブジェクトの外接矩形と前記検索範囲とを照合し、少なくとも一部が交わるオブジェクトを、前記検索範囲に交わるオブジェクトとして出力することを特徴とする
空間データ管理装置。
【請求項２】
前記空間データ管理装置は、前記領域索引ツリーのキー値および前記検索範囲の代表点を示す検索符号値をそれぞれ示す空間データ上のスカラ値として、モートン符号値を計算することを特徴とする
請求項１に記載の空間データ管理装置。
【請求項３】
前記空間データ管理装置は、前記領域索引ツリーのキー値および前記検索範囲の代表点を示す検索符号値をそれぞれ示す空間データ上のスカラ値を格納するためのメモリ容量として、空間領域の多次元空間上の位置を一意に示すスカラ値のとりうる値を表現するための最小限の容量を決定することを特徴とする
請求項１または請求項２に記載の空間データ管理装置。
【請求項４】
前記オブジェクト検索部は、さらに、オブジェクトの外接矩形と前記検索範囲とで少なくとも一部が交わるオブジェクトについて、前記記憶部に格納されているオブジェクトの実形状と、入力されている前記検索範囲の実形状とを照合し、少なくとも一部が交わるオブジェクトを、前記検索範囲に交わるオブジェクトとして出力することを特徴とする
請求項１ないし請求項３のいずれか１項に記載の空間データ管理装置。
【請求項５】
空間データを格納する前記記憶部には、前記領域索引ツリーからリンクされる各オブジェクトについて、そのオブジェクトの種別を示す種別ＩＤが対応づけられており、
前記オブジェクト検索部は、検索条件として前記検索範囲および種別ＩＤが指定されると、前記領域索引ツリーから辿ることで抽出されるオブジェクトの内、検索条件の種別ＩＤと一致するオブジェクトを選択して、出力することを特徴とする
請求項１ないし請求項４のいずれか１項に記載の空間データ管理装置。
【請求項６】
空間データを格納する前記記憶部には、複数の空間領域に対応する複数の前記領域索引ツリーが記憶されており、
前記オブジェクト検索部は、検索条件として前記検索範囲が指定されると、その前記検索範囲が示す空間データ上の位置情報をもとに、複数の前記領域索引ツリーから１つの前記領域索引ツリーを選択することを特徴とする
請求項１ないし請求項５のいずれか１項に記載の空間データ管理装置。
【請求項７】
前記空間データ管理装置は、さらに、前記領域索引ツリーにオブジェクトを登録するオブジェクト登録部を有し、
前記オブジェクト登録部は、前記入力装置を介して登録対象のオブジェクトが指定されると、
登録対象のオブジェクトの位置情報を基に、登録対象のオブジェクトが交わる前記領域索引ツリーの空間領域を１つ以上特定し、その特定した空間領域の情報を格納する各ノードから、登録対象のオブジェクトへのリンクを対応づけ、
１つの空間領域からリンクされるオブジェクトが所定数を超えたときには、その空間領域を等分割することで、複数の空間領域へと領域分割して前記領域索引ツリーを更新することを特徴とする
請求項１ないし請求項５のいずれか１項に記載の空間データ管理装置。
【請求項８】
前記空間データ管理装置は、さらに、前記領域索引ツリーに登録されたオブジェクトを削除するオブジェクト削除部を有し、
前記オブジェクト削除部は、
前記入力装置を介して削除対象のオブジェクトが指定されると、前記領域索引ツリーの各ノードからリンクされているオブジェクトのうち、削除対象のオブジェクトを削除し、
削除したオブジェクトのリンク元である前記領域索引ツリーの各ノードについて、隣接する等分割された複数の領域からそれぞれリンクされるオブジェクトが所定数を下回ったときには、それらの空間領域を１つの空間領域へと領域統合して前記領域索引ツリーを更新することを特徴とする
請求項１ないし請求項６のいずれか１項に記載の空間データ管理装置。
【請求項９】
多次元空間上にオブジェクトが配置される空間データを管理する空間データ管理装置による空間データ管理方法であって、
前記空間データ管理装置は、空間データを格納する記憶部と、指定された検索範囲内に存在するオブジェクトを前記空間データから検索するオブジェクト検索部と、を有し、
前記記憶部には、各ノードからの子ノードの数を制限するバランス木として前記空間データを格納する領域索引ツリーが記憶され、
前記記憶された領域索引ツリーの各ノードには、前記空間データを１回以上等分割した空間領域の情報が所定数以下だけ格納され、その空間領域の情報は、空間領域の多次元空間上の位置を一意に示すスカラ値に写像した結果であるキー値が含まれ、
前記領域索引ツリーの子ノードを持つ非リーフノードには、その各子ノードのとりうるキー値の範囲に応じて、各子ノードへのリンクが対応づけられており、前記領域索引ツリーの子ノードを持たないリーフノードには、空間領域の情報から、その空間領域に外接矩形が交わるオブジェクトへのリンクが対応づけられており、
前記オブジェクト検索部は、
入力装置を介して前記検索範囲が指定されると、
前記領域索引ツリーのルートノードから順に、前記検索範囲の代表点をスカラ値に写像した検索符号値と、前記領域索引ツリーの各ノードの空間領域のキー値とを照合することにより、非リーフノード、リーフノード、オブジェクトへのリンクと辿ることで、前記検索範囲の代表点が含まれる空間領域と、その空間領域からリンクするオブジェクトとを抽出する手順について、一巡ごとに前記検索範囲から辿った空間領域を除外した領域の代表点を新たな検索符号値として更新することで繰り返し、
前記検索範囲から辿った空間領域を除外した領域が無くなると、前記領域索引ツリーの各ノードを辿る処理により抽出される各オブジェクトについて、オブジェクトの外接矩形と前記検索範囲とを照合し、少なくとも一部が交わるオブジェクトを、前記検索範囲に交わるオブジェクトとして出力することを特徴とする
空間データ管理方法。
【請求項１０】
前記空間データ管理装置は、前記領域索引ツリーのキー値および前記検索範囲の代表点を示す検索符号値をそれぞれ示す空間データ上のスカラ値として、モートン符号値を計算することを特徴とする
請求項９に記載の空間データ管理方法。
【請求項１１】
前記空間データ管理装置は、前記領域索引ツリーのキー値および前記検索範囲の代表点を示す検索符号値をそれぞれ示す空間データ上のスカラ値を格納するためのメモリ容量として、空間領域の多次元空間上の位置を一意に示すスカラ値のとりうる値を表現するための最小限の容量を決定することを特徴とする
請求項９または請求項１０に記載の空間データ管理方法。
【請求項１２】
前記オブジェクト検索部は、さらに、オブジェクトの外接矩形と前記検索範囲とで少なくとも一部が交わるオブジェクトについて、前記記憶部に格納されているオブジェクトの実形状と、入力されている前記検索範囲の実形状とを照合し、少なくとも一部が交わるオブジェクトを、前記検索範囲に交わるオブジェクトとして出力することを特徴とする
請求項９ないし請求項１１のいずれか１項に記載の空間データ管理方法。
【請求項１３】
空間データを格納する前記記憶部には、前記領域索引ツリーからリンクされる各オブジェクトについて、そのオブジェクトの種別を示す種別ＩＤが対応づけられており、
前記オブジェクト検索部は、検索条件として前記検索範囲および種別ＩＤが指定されると、前記領域索引ツリーから辿ることで抽出されるオブジェクトの内、検索条件の種別ＩＤと一致するオブジェクトを選択して、出力することを特徴とする
請求項９ないし請求項１２のいずれか１項に記載の空間データ管理方法。
【請求項１４】
空間データを格納する前記記憶部には、複数の空間領域に対応する複数の前記領域索引ツリーが記憶されており、
前記オブジェクト検索部は、検索条件として前記検索範囲が指定されると、その前記検索範囲が示す空間データ上の位置情報をもとに、複数の前記領域索引ツリーから１つの前記領域索引ツリーを選択することを特徴とする
請求項９ないし請求項１３のいずれか１項に記載の空間データ管理方法。
【請求項１５】
前記空間データ管理装置は、さらに、前記領域索引ツリーにオブジェクトを登録するオブジェクト登録部を有し、
前記オブジェクト登録部は、前記入力装置を介して登録対象のオブジェクトが指定されると、
登録対象のオブジェクトの位置情報を基に、登録対象のオブジェクトが交わる前記領域索引ツリーの空間領域を１つ以上特定し、その特定した空間領域の情報を格納する各ノードから、登録対象のオブジェクトへのリンクを対応づけ、
１つの空間領域からリンクされるオブジェクトが所定数を超えたときには、その空間領域を等分割することで、複数の空間領域へと領域分割して前記領域索引ツリーを更新することを特徴とする
請求項９ないし請求項１４のいずれか１項に記載の空間データ管理方法。
【請求項１６】
前記空間データ管理装置は、さらに、前記領域索引ツリーに登録されたオブジェクトを削除するオブジェクト削除部を有し、
前記オブジェクト削除部は、
前記入力装置を介して削除対象のオブジェクトが指定されると、前記領域索引ツリーの各ノードからリンクされているオブジェクトのうち、削除対象のオブジェクトを削除し、
削除したオブジェクトのリンク元である前記領域索引ツリーの各ノードについて、隣接する等分割された複数の領域からそれぞれリンクされるオブジェクトが所定数を下回ったときには、それらの空間領域を１つの空間領域へと領域統合して前記領域索引ツリーを更新することを特徴とする
請求項１ないし請求項１５のいずれか１項に記載の空間データ管理方法。
【請求項１７】
請求項９ないし請求項１６のいずれか１項に記載の空間データ管理方法を、コンピュータである前記空間データ管理装置に実行させるための
空間データ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、空間データ管理装置、空間データ管理方法、および、空間データ管理プログラムに関する。
【背景技術】
【０００２】
近年、二次元、または三次元の空間に存在する建築物などのオブジェクトを管理可能なデータベース管理システム（空間ＤＢ管理システム）が開発されている。このようなオブジェクトの検索は、ナビゲーション機能に特化した地図検索システム、都市計画や防災などの行政システム、ガスや水道などの施設管理を応用とする地理情報システムに必要とされる。そのため、空間ＤＢ管理システムは、地理情報システムのデータ管理ミドルウェアとして利用されている。
【０００３】
オブジェクトは、その位置や形状を表現する図形要素と、その内容を表現する文字や数値等の属性要素から構成される。空間ＤＢ管理システムでは、大容量の二次記憶装置に格納された多量のオブジェクトの中から、図形要素を含む検索条件に合致したオブジェクトを高速に検索することが求められる。
【０００４】
空間ＤＢ管理システムでは、オブジェクトの検索として、範囲検索やｋ最近傍検索を備えている。範囲検索では、任意の形状の図形を指定し、その図形に包含される、または交差するオブジェクトを検索する。地理情報システムでは、範囲検索は、地図を画面に描画する際に用いられる。この場合、画面の範囲に含まれるオブジェクトを検索することになる。ユーザが描画範囲を移動させる際、または描画範囲の拡大や縮小を行う際に、範囲検索の処理が頻発する。
【０００５】
一方、ｋ最近傍検索では、任意の地点を指定し、その地点から距離の近い上位ｋ件のオブジェクトを検索する。ｋ最近傍検索は、例えば、地図検索システムにおいて、観光先の目的地から距離の近い上位１０件の飲食店を検索する場合に用いられる。また、地図情報システムにおいて、図形データの編集を行う際に、マウスポインタで最近接のオブジェクトを指定する場合に、最近傍検索が利用される。
【０００６】
また、空間ＤＢ管理システムは、地図を利用する組込機器のソフトウェア（組込ソフトウェア）の開発でも、利用されつつある。その代表例は、カーナビゲーション装置やＰＮＤ（Personal Navigation Device）などの車載情報端末や携帯情報端末のナビゲーションソフトウェアである。ナビゲーションソフトウェアの主な機能は、画面への地図表示、店舗や施設などの地図検索、現在地から目的地までの経路検索などである。これらの機能の内部処理は、オブジェクトの検索を基本処理とする。開発者が空間ＤＢ管理システムを用いると、機能ごとにオブジェクトの検索の処理を実装する必要がないため、ソフトウェアの開発工数を削減できる。
【０００７】
空間ＤＢ管理システムは、オブジェクトの検索を高速に処理するため、空間索引を作成する。空間ＤＢ管理システムは、空間索引を用いることで、検索対象となるオブジェクトを空間的に絞り込むことができる。その結果、検索処理時間の大部分を占める二次記憶装置と主記憶装置の間のディスクアクセス処理の回数を削減できる。このディスクアクセス処理は、二次記憶装置から主記憶装置にオブジェクトを読み込むときに発生する。
【０００８】
非特許文献１には、代表的な空間索引として、ＰＭＲ４分木をデータ構造とする手法が開示されている。ＰＭＲ４分木では、再帰的に空間領域を４分割した領域をＺオーダの順位で符号化し、その領域の符号値をキー値とした１次元のツリー構造索引で管理する。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】「Speeding up construction of PMR quadtree-based spatial indexes」VLDB Journal、 Vol.11、 Issue.2、 pp.109-137 (2002)
【発明の概要】
【発明が解決しようとする課題】
【００１０】
組込ソフトウェアなどのハードウェア資源の使用制約が厳しいプラットフォーム上での開発では、次の２つの制約を考慮する必要がある。
【００１１】
１つ目の制約は、組込ソフトウェアのサイズの制約である。組込ソフトウェアのプログラム、データ、索引を事前に決められた二次記憶装置や主記憶装置の容量に合わせる必要がある。組込システムの開発では、ハードウェアの部品を短小軽薄にしたいというニーズが高いため、開発者は、組込システムのハードウェアの部品に小容量の二次記憶装置や主記憶装置を用いる。その結果、組込ソフトウェアのサイズの制約を考慮し、空間ＤＢのサイズを削減する必要がある。空間ＤＢは、管理プログラム、オブジェクト、空間索引から構成される。これらの中で、大きな割合を占める空間索引の格納に必要な容量の削減が求められる。
【００１２】
２つ目の制約は、組込ソフトウェアの処理時間の制約である。組込システムでは、ある処理を実行してから、決められた時間内にその処理を終了させることが求められる。
範囲検索は、オブジェクトの検索の中で、最もよく利用される。そこで、容量削減後の空間索引を用いた場合でも、容量削減前の空間索引と同等に、高速に範囲検索を実現できる必要がある。
【００１３】
前記した非特許文献１で使用されるＰＭＲ４分木で空間データを管理する手法では、ＰＭＲ４分木のデータ構造に冗長な部分が存在するため、２つの制約（小容量かつ高速）を充分に満たしているとはいえない。
例えば、ＰＭＲ４分木のデータ構造は、B木などの一次元のツリー構造索引となり、リーフノードに空間領域の情報とオブジェクトの情報を組とした要素を格納する。この空間領域は、オブジェクトを内包または交差する領域となる。ここで、１つの空間領域に複数のオブジェクトが内包また交差する場合、同じ空間領域の情報をもつ要素が重複して、格納されることになる。
【００１４】
そこで、本発明は、前記した問題を解決し、空間領域上に配置されたオブジェクトの検索処理について、小容量かつ高速で実施することを、主な目的とする。
【課題を解決するための手段】
【００１５】
前記課題を解決するために、本発明は、多次元空間上にオブジェクトが配置される空間データを管理する空間データ管理装置であって、
前記空間データ管理装置は、空間データを格納する記憶部と、指定された検索範囲内に存在するオブジェクトを前記空間データから検索するオブジェクト検索部と、を有し、
前記記憶部には、各ノードからの子ノードの数を制限するバランス木として前記空間データを格納する領域索引ツリーが記憶され、
前記記憶された領域索引ツリーの各ノードには、前記空間データを１回以上等分割した空間領域の情報が所定数以下だけ格納され、その空間領域の情報は、空間領域の多次元空間上の位置を一意に示すスカラ値に写像した結果であるキー値が含まれ、
前記領域索引ツリーの子ノードを持つ非リーフノードには、その各子ノードのとりうるキー値の範囲に応じて、各子ノードへのリンクが対応づけられており、前記領域索引ツリーの子ノードを持たないリーフノードには、空間領域の情報から、その空間領域に外接矩形が交わるオブジェクトへのリンクが対応づけられており、
前記オブジェクト検索部が、
入力装置を介して前記検索範囲が指定されると、
前記領域索引ツリーのルートノードから順に、前記検索範囲の代表点をスカラ値に写像した検索符号値と、前記領域索引ツリーの各ノードの空間領域のキー値とを照合することにより、非リーフノード、リーフノード、オブジェクトへのリンクと辿ることで、前記検索範囲の代表点が含まれる空間領域と、その空間領域からリンクするオブジェクトとを抽出する手順について、一巡ごとに前記検索範囲から辿った空間領域を除外した領域の代表点を新たな検索符号値として更新することで繰り返し、
前記検索範囲から辿った空間領域を除外した領域が無くなると、前記領域索引ツリーの各ノードを辿る処理により抽出される各オブジェクトについて、オブジェクトの外接矩形と前記検索範囲とを照合し、少なくとも一部が交わるオブジェクトを、前記検索範囲に交わるオブジェクトとして出力することを特徴とする。
その他の手段は、後記する。
【発明の効果】
【００１６】
本発明によれば、空間領域上に配置されたオブジェクトの検索処理について、小容量かつ高速で実施することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の一実施形態に関する空間データ管理装置を示す構成図である。
【図２】本発明の一実施形態に関する領域索引ツリーを示す説明図である。図２（ａ）は、空間領域の展開図を示し、図２（ｂ）は、その展開図を作成するためのツリー構造を示す。
【図３】本発明の一実施形態に関する局所的な地域における領域索引ツリーを示す説明図である。図３（ａ）は、空間領域の展開図を示し、図３（ｂ）は、その展開図を作成するためのツリー構造を示す。
【図４】本発明の一実施形態に関するオブジェクト検索部が実行する領域索引ツリーの検索処理の概要を示す説明図である。図４（ａ）は、空間領域の展開図を示し、図４（ｂ）は、その展開図を作成するためのツリー構造を示す。
【図５】本発明の一実施形態に関するオブジェクト登録部が実行する領域索引ツリーの登録処理の概要を示す説明図である。図５（ａ）は、空間領域の展開図を示し、図５（ｂ）は、その展開図を作成するためのツリー構造を示す。
【図６】本発明の一実施形態に関するオブジェクト削除部が実行する領域索引ツリーの削除処理の概要を示す説明図である。図６（ａ）は、空間領域の展開図を示し、図６（ｂ）は、その展開図を作成するためのツリー構造を示す。
【図７】本発明の一実施形態に関するオブジェクト検索部が実行する領域索引ツリーの検索処理を示すフローチャートである。
【図８】本発明の一実施形態に関する領域索引ツリーの検索処理における空間領域の検索処理を示すフローチャートである。
【図９】本発明の一実施形態に関する領域索引ツリーの検索処理におけるオブジェクトの交差判定処理を示すフローチャートである。
【図１０】本発明の一実施形態に関する領域索引ツリーの検索処理における検索符号値の更新処理を示すフローチャートである。
【図１１】本発明の一実施形態に関するオブジェクト登録部が実行する領域索引ツリーの登録処理を示すフローチャートである。
【図１２】本発明の一実施形態に関するオブジェクト登録部が実行する領域索引ツリーの登録処理の詳細を示すフローチャートである。図１２（ａ）が登録のメイン処理であり、図１２（ｂ）はそのメイン処理から呼び出されるサブルーチン処理である。
【図１３】本発明の一実施形態に関するオブジェクト削除部が実行する領域索引ツリーの削除処理を示すフローチャートである。図１３（ａ）が削除のメイン処理であり、図１３（ｂ）はそのメイン処理から呼び出されるサブルーチン処理である。
【発明を実施するための形態】
【００１８】
以下、本発明の一実施形態について、図面を参照して説明する。
【００１９】
図１は、空間データ管理装置１を示す構成図である。なお、本実施形態の「空間データ」における「空間」とは、３次元の立体空間だけに限定するのではなく、ｎ次元（ｎは２以上の自然数）のベクトル空間全般を指す。以下、本実施形態は、ｎ＝２の平面ベクトル空間を例示して説明するが、本実施形態はｎ＝２だけに限定するものではなく、ｎ次元に拡張可能である。なお、ｎ次元空間において、１回の空間分割処理により、１つの空間が（２のｎ乗）個の空間に等分割される。
【００２０】
空間データ管理装置１は、中央処理装置９１、主記憶装置９２、二次記憶装置９３、入力装置９４、および、出力装置９５を含むコンピュータとして構成される。
中央処理装置９１は、主記憶装置９２に格納されたプログラムの処理を行い、各種処理を実行する。
主記憶装置９２は、中央処理装置９１で実行されるプログラムやデータを格納するメモリとして構成される。主記憶装置９２には、処理部として、オブジェクト検索部３０、オブジェクト登録部４０、オブジェクト削除部５０、および、データ切替部６０を構成するためのプログラムが記憶されている。
二次記憶装置９３は、ハードディスクドライブやフラッシュメモリディスクなどの大容量の記憶装置として構成される。二次記憶装置９３には、主記憶装置９２の各処理部が扱う空間データとして、領域索引ツリー２１と、領域内オブジェクトテーブル２２と、オブジェクト詳細テーブル２３とを、対応づけて空間データベースとして記憶する。
入力装置９４は、オブジェクトの検索に必要な検索条件などを入力する装置である。例えば、車載情報端末では、ハードウェアキーボードの他に、タッチパネルによるソフトウェアキーボードなどで構成される。
出力装置９５は、オブジェクトの検索結果を表示する装置であり、液晶ディスプレイなどにより構成される。
【００２１】
二次記憶装置９３が格納するデータについて、説明する。
領域索引ツリー２１には、空間索引の情報が、低データ量かつ高速検索が可能なツリー構造として格納される（詳細は図２参照）。
領域内オブジェクトテーブル２２には、領域索引ツリー２１が示す各領域について、オブジェクトが含まれているか否かの情報が格納される。
オブジェクト詳細テーブル２３には、領域内オブジェクトテーブル２２で示されたオブジェクトの詳細情報が格納される。詳細情報には、オブジェクトの実形状を表現する座標値のリスト、および、オブジェクトの属性情報が含まれる。
【００２２】
オブジェクト検索部３０は、領域索引ツリー２１を用いて、任意の範囲（検索範囲）に含まれるオブジェクトを範囲検索する。
範囲検索には、次の二種類が存在する。１つは、検索範囲に内包するオブジェクトを検索する場合である。もう１つは、検索範囲に内包または交差するオブジェクトを検索する場合である。本実施形態のオブジェクト検索部３０は、交差関係も含めた後者の範囲検索を対象とする。後者の範囲検索は、車載情報端末の例では、自車位置や目的地の周辺の地図を車載情報端末に表示させる処理に用いられる。なお、前者の範囲検索は後者の範囲検索の条件を厳しくしたもので、基本的には同様の処理で実現できる。
範囲検索を実行するため、オブジェクト検索部３０は、検索初期設定部３１、交差判定部３２、検索起点設定部３３、および、絶対座標値変換部３４を含めて構成される。
【００２３】
オブジェクト登録部４０は、二次記憶装置９３の空間データ（領域索引ツリー２１、領域内オブジェクトテーブル２２、オブジェクト詳細テーブル２３）に対して、新たにオブジェクトを登録（追加）する。
オブジェクト登録部４０は、相対座標値変換部４１と、領域分割部４２とを含めて構成される。
相対座標値変換部４１は、オブジェクトの外接矩形を絶対座標値から相対座標値に変換する。
領域分割部４２は、オブジェクトの挿入で領域索引ツリー２１のオブジェクトノードが溢れた場合に、空間領域を４分割する。
【００２４】
オブジェクト削除部５０は、二次記憶装置９３の空間データ（領域索引ツリー２１、領域内オブジェクトテーブル２２、オブジェクト詳細テーブル２３）に対して、既に登録されているオブジェクトを削除する。オブジェクト削除部５０は、領域併合部５１を含めて構成される。
領域併合部５１は、オブジェクトの削除によって領域索引ツリー２１のオブジェクトノードを併合できる場合に、４つの空間領域を１つにまとめる。
【００２５】
データ切替部６０は、オブジェクトの各処理（検索処理、登録処理、削除処理）の対象となる空間データ（領域索引ツリー２１、領域内オブジェクトテーブル２２、オブジェクト詳細テーブル２３）のセットを、切り替える。空間データのセットは、二次記憶装置９３内に複数組格納されている。
データ切替部６０は、例えば、各空間データのセットが扱う空間範囲（日本全国版、関東版、東京都版など）をあらかじめ記憶し、入力装置９４を介して指定される検索条件が示す位置（例えば、東京駅）が内包される空間データのセットの内、もっとも詳細な地図縮尺に対応する空間データのセット（例えば、東京都版）を選択する。
【００２６】
このように、空間データのセットを複数個用意することによって、二次記憶装置の容量を消費するものの、範囲検索を高速化させることができる。なお、空間データのセット（詳細地図）には、例えば、ドライバが普段頻繁に運転する地域が設定される。
一方、空間データのセットを１つ（例えば、日本全国版）だけ用意してもよい。そのときには、データ切替部６０を空間データ管理装置１から省略することができる。
【００２７】
図２（ａ）は、領域索引ツリー２１が示す情報を、説明用に理解しやすいように展開した展開図である。この展開図では、横（ｘ）１６区画×縦（ｙ）１６区画の空間領域を、上方（ｚ軸）から見下ろした形式で示しており、７つのオブジェクト（Ａ〜Ｇ）が配置されている。
展開図内の数字（例えば、原点「０」や中央点「１９２」など）は、その数字の記載位置に対応するZオーダの順位で符号化したモートン符号値を示す。なお、モートン符号値は、ｎ次元の空間領域上の位置を１次元のスカラ値に写像する写像値の一例である。本実施形態では、モートン符号値を例示したが、その代わりにヒルベルト曲線で符号化したヒルベルト符号値などの他の写像演算値を用いてもよい。
展開図内の灰色矩形は、各オブジェクトが外接する矩形を示しており、その内部にオブジェクトＩＤ（Ａ〜Ｆ）が記述されている。
展開図内の点線は、空間領域を各軸の垂直２等分線で等面積に４分割することで生成される各空間領域の境界を示す。例えば、モートン符号値「１９２」を起点（左下点）とする右上の領域は、１６区画の空間領域を１分割した結果の大きめの（８ｘ８区画）領域である。一方、モートン符号値「６０」を起点（左下点）とする中央付近の領域は、１６区画の空間領域を３分割した結果の小さめの（２ｘ２区画）領域である。
【００２８】
空間データ管理装置１は、各空間領域の位置を、その代表点（左下点）を変換したモートン符号値と分割回数（分割数）の組で表現する。空間領域を再帰的に等面積で４分割するため、モートン符号値と分割数の組で空間領域の位置と形状を一意に特定できる。空間領域の代表点は、領域内のｘ座標とｙ座標の最小値を組とする座標値とする。
【００２９】
以下、座標値（７，１０）をモートン符号値「１５７」に変換する計算方法を示す。
（手順１）座標値として、（x，y）＝（７，１０）が入力される。
（手順２）入力された１０進数の座標値（７，１０）を、２進数の座標値（０１１１，１０１０）に変換する。
（手順３）２進数の座標値（０１１１，１０１０）を、ｙ座標とｘ座標の順番で、２進数の先頭ビットから順に交互に並べ、「１００１１１０１」とする。
「１００１１１０１」の先頭の「１」は、ｙ座標「１０１０」の先頭の「１」である。
「１００１１１０１」の２桁目の「０」は、ｘ座標「０１１１」の先頭の「０」である。
「１００１１１０１」の３桁目の「０」は、ｙ座標「１０１０」の２桁目の「０」である。
（手順４）「１００１１１０１」を１０進数に変換すると、モートン符号値「１５７」となる。
【００３０】
モートン符号値の性質より、空間領域内の任意の矩形の左下座標に対応したモートン符号値は、必ずその矩形の右上座標に対応したモートン符号値より小さくなる。また、矩形内部の座標に対応したモートン符号値は、矩形の左下座標と右上座標のモートン符号値の間に含まれることになる。多次元の範囲検索にモートン符号値のこれらの性質を利用すると、検索条件となる多次元の範囲を１次元のスカラ値の範囲に簡単化できる。さらに、モートン符号値は、空間的に近い座標値の間で、近い符号値を割り当てることができるため、１次元のスカラ値の範囲を狭め、範囲検索を高速化できる。
【００３１】
前記の例では、２次元平面（ｘ，ｙ）上でのモートン符号値の計算方法を示したが、モートン符号値は、２次元に限定されることはなく、３次元以上のｎ次元にも拡張することができる。ｎ次元のモートン符号値の計算は、前記した（手順３）を、以下の（手順３ｂ）に置き換えることで、実現できる。
（手順３ｂ）２進数で表記したｎ次元の座標値を、以下の順序で交互に並べる。
（ｎ次元座標値の先頭ビット）→（ｎ−１次元座標値の先頭ビット）→（略）→（１次元座標値の先頭ビット）→（ｎ次元座標値の２桁目のビット）→（ｎ−１次元座標値の２桁目のビット）→（略）→（１次元座標値の２桁目のビット）→（略）→（１次元座標値の最終ビット）
【００３２】
図２（ｂ）は、図２（ａ）が示す領域索引ツリー２１の情報を、ツリー構造として示した構成図である。領域索引ツリー２１は、各ノードと、ノード間を接続するリンクとがツリー構造になっている。領域索引ツリー２１は、バランス木（Ｂ木、Ｂ＋木など）のツリー構造であり、非リーフノード、リーフノード、オブジェクトノードから構成される。これらのノードは、ページという単位で１対１の関係で二次記憶装置に格納される。ページは、データベース管理システムにおいて、二次記憶装置と主記憶装置の間の最小の入出力単位である。
以下の説明では、バランス木の一例として、Ｂ＋木を用いる例を説明する。Ｂ＋木は、検索と更新の処理を高速に行えるという点で、データベース管理システムで最もよく用いられている索引構造である。Ｂ＋木では、非リーフノードにはキー値と子ノードへのポインタ、リーフノードにはキー値とレコードポインタが含まれる。そして、隣接するリーフノードの間を片方向のリンクで連結する。
【００３３】
領域索引ツリー２１のリーフノード、非リーフノードには、キー値であるモートン符号値（図中では数値で示す）と、そのモートン符号値が示す左下座標からの空間領域を作成するための分割数（図中では括弧内の数値で示す）と、の組（図中では各ノードの灰色部で示す）が、最大３組分格納できる。例えば、図２（ａ）の左上の空間領域は、「モートン符号値＝１２８，分割数＝１」の組として表現される。
このモートン符号値と分割数との組が図２（ａ）の１つ分の空間領域を示すので、以下の説明では、モートン符号値と分割数との組を「ノード内の空間領域情報」と表記する。
このように、空間領域を等面積で４分割することで生成される空間領域を、モートン符号値と分割数との組で一意に表現する。モートン符号値は、一次元のスカラ値なので、空間領域の次数（２次元平面、３次元空間）などに依存せず大小関係を定義でき、Ｂ＋木のノードのキー値（一次元のキー値）として機能する。
【００３４】
領域索引ツリー２１の非リーフ（幹）ノードは、最大３件の空間領域情報を格納する。非リーフノードは、非リーフノードまたはリーフノードを子ノードとしてリンクする。非リーフノード内の空間領域情報は、降順または昇順に配置されており、空間領域情報間の白色部には、子ノードへのポインタが矢印で表記される。子ノードへのポインタは、子ノードに対応したページを格納しているディスク上の物理的アドレスを示す。
なお、空間領域情報の最大個数を３件とするのは、あくまで一例である。空間領域情報の最大個数は、ページサイズ、空間領域情報のサイズ、子ノードへのポインタのサイズなどで決定される。また、B＋木のデータ構造上、空間領域情報の最大個数が「ｉ」個の場合、子ノードへのポインタは「ｉ＋１」個となる。
親ノードの第１空間領域情報と第２空間領域情報との間に設定されるポインタは、そのポインタが示す子ノードを指し示す。このとき、子ノードの各空間領域情報のモートン符号値は、第１空間領域情報のモートン符号値から第２空間領域情報のモートン符号値までの範囲に収まる。
【００３５】
領域索引ツリー２１のリーフ（葉）ノードは、最大３件の空間領域情報を格納する。リーフノードは、オブジェクトノードにリンクする。リーフノードの空間領域情報は、降順または昇順に配置されている。リーフノードの各空間領域情報（例えば、モートン符号値「３２」）からは、その空間領域情報が示す空間領域に重なるオブジェクトを示すオブジェクトノードへのリンク（例えば、オブジェクト「Ａ」）が存在する。
なお、空間領域情報の最大個数を３件とするのは、あくまで一例であり、最大個数を「ｉ」個とすると、「ｉ」個のオブジェクトノードへのポインタが格納される。
【００３６】
さらに、同じリーフノード内に格納される複数の空間領域情報は、互いに空間領域情報のモートン符号値が重複しないように、リーフノードを構成する。
これにより、領域索引ツリー２１に必要なディスク容量を、以下の比較例よりも削減することができる。その比較例とは、キー値とオブジェクトの情報の組を領域索引のリーフノードの要素として、ＰＭＲ４分木を構成する例である。この比較例では、１つの空間領域が複数のオブジェクトを内包するため、同じキー値の要素がリーフノードに複数格納され、冗長になる。
【００３７】
領域索引ツリー２１のオブジェクトノードは、リンクされるリーフノードが示す空間領域の情報1件と、その空間領域に重なる（一部接触または全部内包）複数のオブジェクトの情報（この場合、最大３件）を格納する。オブジェクトの情報は、後述する領域内オブジェクトテーブル２２内の空間領域（モートン符号値と分割数）、オブジェクト（IDと領域内位置）を含む。
【００３８】
【表１】
2010160591.tif 000003
【００３９】
表１は、領域内オブジェクトテーブル２２を示す。領域内オブジェクトテーブル２２は、空間領域情報（モートン符号値および分割数の組）と、オブジェクト情報（オブジェクトＩＤおよびオブジェクトの領域内位置の組）とを対応づけて管理する。１つの空間領域の情報と、その空間領域に対応する複数のオブジェクトの情報は、領域索引ツリーのオブジェクトノードに含まれる。１つのオブジェクトノードに１ページを割り当てるため、同じ空間領域に重なるオブジェクトの情報は１ページにまとめて格納される。これにより、同じ領域に重なるオブジェクトの情報を１回のディスクアクセスで取得できるため、範囲検索の高速化に寄与する。
領域内オブジェクトテーブル２２の空間領域情報は、領域索引ツリー２１の非リーフノードおよびリーフノード内の空間領域情報と同じである。
【００４０】
領域内オブジェクトテーブル２２のオブジェクトＩＤは、領域索引ツリー２１のオブジェクトノードのオブジェクトＩＤと同じである。オブジェクトＩＤとは、オブジェクトを一意に特定するための情報であり、たとえば、オブジェクトのレコードポインタである。オブジェクトのレコードポインタは、テーブル内のレコードを格納したディスク上の物理的アドレスを示す。
【００４１】
領域内オブジェクトテーブル２２のオブジェクトの領域内位置は、オブジェクトＩＤが示すオブジェクトの外接矩形（左下座標〜右上座標）の相対座標値を示す。
例えば、空間領域（モートン符号値＝１６、分割数＝２）に含まれるオブジェクト（オブジェクトＩＤ＝Ｅ）は、外接位置が「(０，２)〜(２，２)」である。
そして、図２（ａ）を参照すると、オブジェクト「Ｅ」は、左下座標（４，０）〜右上座標（７，３）の空間領域に内包されている。
オブジェクト「Ｅ」の左下座標は、内包される空間領域の左下座標（４，０）に、領域内オブジェクトテーブル２２の左下座標（０，２）を加算することで、（４，２）と計算できる。
オブジェクト「Ｅ」の右上座標は、内包される空間領域の左下座標（４，０）に、領域内オブジェクトテーブル２２の右上座標（２，２）を加算することで、（６，２）と計算できる。
【００４２】
ここで、各パラメータの表現に必要な最低限のビット数を事前に定めておくことにより、ディスク容量を削減できる。
例えば、モートン符号値の表現に必要な最低限のビット数は、図２の例では、空間領域の範囲が１６×１６なので、１６（２の４乗）が２つ分で８ビットとなる。つまり、地図の範囲を示す空間領域の大きさをもとに、モートン符号値を格納する変数の容量を特定することができる。
一方、領域内位置の座標の表現に必要な最低限のビット数は、例えば、空間領域（モートン符号値＝１２８、分割数＝１）の場合、８×８の領域であるため、ｘ座標とｙ座標とでそれぞれ３ビットであるので合計６ビットとなる。オブジェクトの領域内位置を、内包される空間領域の代表点（左下座標）からの差分形式（相対座標）で表現することで、ＰＭＲ４分木が必要とするデータ容量と比べ、領域内位置の格納に必要なディスク容量を削減できる。このディスク容量の削減効果は、適用するハードウェア部品やアプリケーションにより、二次記憶装置が非常に小さい組込機器への適用に、特に有効である。
このように、扱う領域の大きさに応じて、変数のビット数を規定することができる。なお、ビット数単位とする代わりに、バイト数単位としてもよい。
【００４３】
【表２】
2010160591.tif 000004
【００４４】
表２は、領域内オブジェクトテーブル２２を示す。表１と比較すると、オブジェクトの情報に「種別ＩＤ」列が追加されている。
種別ＩＤは、オブジェクトの種類を示す。例えば、種別ＩＤには、銀行「０」、ガソリンスタンド「１」、飲食店「２」、学校「３」などが含まれる。これらの種別ＩＤは、入力装置９４を介して入力されるユーザからの検索条件において、指定される。例えば、ユーザは、自車から半径５００ｍ以内の施設の内、「ガソリンスタンド」だけを選択する旨の検索条件を入力する。
種別ＩＤの表現に必要な最低限のビット数は、種別ＩＤのとりうる値の範囲を元に、設定される。例えば、種別ＩＤが１００通り存在するときには、２の８乗＝１２８通りの値を格納できる変数に種別ＩＤを格納するため、８ビットが最低限のビット数となる。
【００４５】
【表３】
2010160591.tif 000005
【００４６】
表３は、オブジェクト詳細テーブル２３を示す。オブジェクト詳細テーブル２３は、個々のオブジェクトに関する詳細な情報として、オブジェクトＩＤと、種別ＩＤと、実形状と、を対応づけて格納する。
オブジェクト詳細テーブル２３の種別ＩＤは、領域内オブジェクトテーブル２２の種別ＩＤと同じ意味である。
オブジェクト詳細テーブル２３の実形状はオブジェクトの実際の形状を示し、例えば、オブジェクトの形状を座標の列で表現できる。オブジェクトの実形状は、オブジェクトの検索処理において、高精度な検索をするために用いられる。例えば、オブジェクトの外接矩形が検索範囲内に収まっていたとしても、オブジェクトが円であるときには、外接矩形の角が少し検索範囲内に重なるだけでは、オブジェクトの円は検索範囲内に収まっていないことになる。
【００４７】
【表４】
2010160591.tif 000006
【００４８】
以上説明した空間データ（領域索引ツリー２１、領域内オブジェクトテーブル２２、オブジェクト詳細テーブル２３）のセットは、二次記憶装置９３内に１組以上格納されている。データ切替部６０は、オブジェクトの各処理（検索処理、登録処理、削除処理）の対象となる空間データのセットを切り替える。
図３は、図２の左下座標値（３，３）から右上座標値（１０，１０）までの矩形領域を局所的な地域とした、領域索引ツリー２１とその展開図を示す。
表４は、図３の領域索引ツリー２１とセットになる領域内オブジェクトテーブル２２の一例を示す。このように、空間データのセットを局所化することにより、各データ構造の扱う範囲が狭まり、検索対象のデータ量が少なくなる。その結果、範囲検索で二次記憶装置から主記憶装置に読み込むノード（ページ）が少なくなり、検索処理時間を短縮できる。
【００４９】
図４は、オブジェクト検索部３０が実行する、検索範囲を、太い点線で囲む矩形の左下座標（５，２）〜右上座標（７，５）としたときの、図２の領域索引ツリー２１を検索する様子を示す。以下に、この場合の手順について、図４（ａ）および図４（ｂ）を併せて参照しつつ、説明する。
【００５０】
まず、図４（ｂ）における１回目の検索処理（一番左の点線矢印）について、説明する。検索初期設定部３１は、検索範囲の左下座標（５，２）をモートン符号値「２８」に変換し、検索符号値Ｍに設定する。領域索引ツリーを探索する際、検索符号値Ｍに対応した座標を含む空間領域を辿る。モートン符号値の性質から、検索符号値Ｍ以下で最大のモートン符号値を含む部分木を辿ることになる。この場合、領域索引ツリー２１のルートノードを参照すると、モートン符号値「６０」の左の子ノードへのリンクを辿る。これは、このリンクは、検索符号値Ｍ「２８」以下で最大のモートン符号値をもつ部分木を指し示すためである。
ルートノードの子ノードでは、同様にモートン符号値「３２」の左のポインタが指し示す孫ノードを辿る。さらに、この孫ノードでは、検索符号値Ｍ「２８」は空間領域情報のモートン符号値「１６」を代表点とする空間領域に含まれるため（空間領域の右上座標のモートン符号値は３１であるため）、そのノードからのリンク先であるオブジェクトノード「Ｅ」を概略判定リストに入れる。
【００５１】
検索起点設定部３３は、領域索引ツリー２１をリーフノード（およびその下のオブジェクトノード）まで辿った後、検索符号値Ｍを更新する。次回の検索符号値Ｍは、今回の検索符号値Ｍに対応する検索範囲から、今回の検索符号値Ｍから検索された空間領域を除外（領域として切り取る）した後の、残りの検索範囲の座標に対応したモートン符号値の中で最小値になる。
例えば、今回の検索範囲（５，２）〜（７，５）に対して、検索された空間領域の範囲（４，０）〜（７，３）を除外すると、残りの検索範囲は（５，４）〜（７，５）となる。よって、検索起点設定部３３は、座標（５，４）のモートン符号値「４９」を次の検索対象Ｍとする。
【００５２】
次に、図４（ｂ）における２回目の検索処理（中央の点線矢印）について、説明する。領域索引ツリー２１のルートノードを参照すると、検索符号値Ｍ「４９」以下で最大のモートン符号値をもつ部分木を指し示すモートン符号値「６０」の左の子ノードへのリンクを辿る。その子ノードでは、空間領域情報のモートン符号値「３２」以上で、「５２」よりも小さい左から２つめの子ノードへのリンクを辿る。その子ノード（ルートノードの孫ノード）では、検索符号値Ｍ「４９」は空間領域情報のモートン符号値「４８」を代表点とする空間領域に含まれるため、そのノードからのリンク先であるオブジェクトノード「Ａ」を概略判定リストに入れる。
今回の検索範囲（５，４）〜（７，５）に対して、検索された空間領域の範囲（４，４）〜（５，５）を除外すると、残りの検索範囲は（６，４）〜（７，５）となる。よって、検索起点設定部３３は、座標（６，４）のモートン符号値「５２」を次の検索対象Ｍとする。
【００５３】
そして、図４（ｂ）における３回目の検索処理（一番右の点線矢印）について、説明する。領域索引ツリー２１のルートノードを参照すると、検索符号値Ｍ「５２」はルートノードの空間領域情報のモートン符号値「６０」よりも小さいので、左下の子ノードへのリンクを辿る。その子ノードでは、検索符号値Ｍ「５２」は空間領域情報のモートン符号値「５２」以上なので、さらに左から３つめの子ノードへのリンクを辿る。その子ノード（ルートノードの孫ノード）では、検索符号値Ｍ「５２」は空間領域情報のモートン符号値「５２」を代表点とする空間領域に含まれるため、そのノードからのリンク先であるオブジェクトノード「Ｆ，Ｇ」を概略判定リストに入れる。
今回の検索範囲（６，４）〜（７，５）に対して、検索された空間領域の範囲（６，４）〜（７，５）を除外すると、残りの検索範囲が無くなる。よって、検索符号値Ｍは更新せず、領域索引ツリー２１を対象とした検索を終了する。
【００５４】
以上の結果、オブジェクト「Ｅ，Ａ，Ｆ，Ｇ」が、領域索引ツリー２１からリンクを辿ることにより検索される。この後の詳細判定（詳細は後記する交差判定部３２の処理を参照）により、オブジェクト「Ａ」は、検索範囲外として除外され、オブジェクト「Ｅ，Ｆ，Ｇ」が、図４（ａ）の太い破線の枠で囲んだ検索範囲（５，２）〜（７，５）に適合する検索結果として、出力装置９５から出力される。
【００５５】
図５は、オブジェクト登録部４０が実行する、図２の領域索引ツリー２１の状態から、オブジェクトＨ，Ｉを登録する旨を示す説明図である。
図５（ａ）において、オブジェクトＨ（６，１１）〜（８，１２）と、オブジェクトＩ（２，１５）〜（６，１５）と、を順に空間領域（０，８）〜（７，１５）付近に挿入すると、その空間領域には４つのオブジェクトＣ，Ｄ，Ｈ，Ｉが含まれてしまい、許容量の３つを超過する。
そこで、領域分割部４２は、許容量が超過した１つの空間領域（０，８）〜（７，１５）を、４分割し、４つの空間領域（モートン符号値＝１２８、１４４、１６０、１７６）を作成する。これにより、４つの空間領域にそれぞれ含まれるオブジェクトの個数を、許容量の３つ以内にすることができる。
図５（ｂ）に示す領域索引ツリー２１は、領域分割部４２による領域分割処理に伴い、図２における１つの空間領域（モートン符号値＝１２８、分割数＝１）が、分割数＝２とする４つの空間領域（モートン符号値＝１２８、１４４、１６０、１７６）へと分割されている。この分割に伴い、領域索引ツリー２１のモートン符号値＝１２８の空間領域情報を含むリーフノードも、許容量である３つの空間領域情報を超過したため、領域索引ツリー２１のリーフノードも２つに分割されている。
さらに、領域索引ツリー２１のリーフノードの更新に伴い、そのリーフノードのリンク先となるオブジェクトノードも、併せて更新される。
【００５６】
図６は、オブジェクト削除部５０が実行する、図２の領域索引ツリー２１の状態から、オブジェクトＡを削除する旨を示す説明図である。
図６（ａ）において、オブジェクトＡ（３，４）〜（４，７）を削除することにより、そのオブジェクトＡが位置していた近辺の４つ組の空間領域（モートン符号値＝４８、５２、５６、６０）は、それぞれオブジェクトの許容量（３つ）に余裕ができる。
そこで、領域併合部５１は、４つ組の空間領域を、１つの空間領域（モートン符号値＝４８，分割数＝２）に併合する。これにより、領域索引ツリー２１のノード数を削減し、領域索引ツリーの格納に必要な二次記憶装置の容量を抑制できる。
図６（ｂ）に示す領域索引ツリー２１は、領域併合部５１による領域併合処理に伴い、図２における４つの空間領域（モートン符号値＝４８、５２、５６、６０）が、１つの空間領域（モートン符号値＝４８）へと併合されている。この併合に伴い、領域索引ツリー２１の併合されたリーフノードのリンク先となるオブジェクトノードも、併合された空間領域内のオブジェクトＤ、Ｇ、Ｆを示すオブジェクトノードへと、併せて更新される。
【００５７】
図７は、図４で示した、範囲指定された検索範囲内に存在するオブジェクトの検索処理を示すフローチャートである。このフローチャートは、オブジェクト検索部３０によって実行される。
【００５８】
Ｓ１０１において、検索初期設定部３１は、入力装置９４を介して、検索条件となる検索範囲の入力を受け付ける。検索範囲の形状は、円、矩形、多角形など任意である。例えば、「現在値を中心に半径５００ｍ以内に存在するガソリンスタンドを検索」が選択されたとき、以下の処理を行う。
・現在値を中心とした半径５００ｍの円に外接する矩形を求め、その矩形の左下座標値をモートン符号値「M_min」に変換し、その矩形の右上座標値をモートン符号値「M_max」に変換する。
・モートン符号値「M_min」を、検索符号値Ｍの初期値にする。
【００５９】
Ｓ１０２において、オブジェクト検索部３０は、検索符号値Ｍを起点とする矩形領域と少なくとも一部が交わる空間領域を、領域索引ツリー２１から検索する（その詳細は、図８を参照して後記する）。
Ｓ１０３において、交差判定部３２は、Ｓ１０２で検索された空間領域内のオブジェクトの形状（領域内オブジェクトテーブル２２、オブジェクト詳細テーブル２３から取得）と、Ｓ１０１で指定された検索範囲の形状とを比較することで、検索範囲内に少なくとも一部が交わるオブジェクトを検索する（その詳細は、図９を参照して後記する）。
【００６０】
Ｓ１０４において、検索起点設定部３３は、Ｓ１０１で初期化されて、このＳ１０４で更新される検索符号値Ｍについて、Ｓ１０２で検索された空間領域を除外した後の検索範囲を示す検索符号値Ｍに更新する（その詳細は、図１０を参照して後記する）。
Ｓ１０５において、オブジェクト検索部３０は、Ｓ１０４で更新された検索符号値Ｍが、Ｓ１０１で入力されたモートン符号値「M_max」より大きいか否かを判定する。判定条件を満たすときには処理を終了し、判定条件を満たさないときにはＳ１０２へ戻る。
【００６１】
図８は、オブジェクト検索部３０が実行する、Ｓ１０２の処理の詳細を示すフローチャートである。本フローチャートでは、領域索引ツリーを用いて、検索符号値Mに対応した座標を含む空間領域を探す。このとき、検索符号値M以下で最大のモートン符号値をもつ空間領域を探すことになる。
【００６２】
Ｓ２０１において、領域索引ツリー２１のルートノードを検索対象ノードＮに設定する。
Ｓ２０２において、検索対象ノードＮが非リーフノードであるか否かを判定する。判定条件を満たすときにはＳ２０３へ、判定条件を満たさないときにはＳ２１１へ、それぞれ進む。
【００６３】
Ｓ２０３において、非リーフノードのポインタを１件取得する。このとき、非リーフノードのポインタは先頭から順に取得される。
Ｓ２０４において、ポインタの指すノードに対応した空間領域のモートン符号値の範囲を算出する。モートン符号値の範囲は、当該非リーフノードに含まれるキー値（モートン符号値、分割数）から算出できる。
Ｓ２０５において、検索符号値ＭがＳ２０４で算出したモートン符号値の範囲に含まれるか否かを判定する。Ｓ２０５は、検索符号値以下で最大のモートン符号値を探す処理になる。判定条件を満たすときにはＳ２０６へ、判定条件を満たさないときにはＳ２０３へ、それぞれ進む。
Ｓ２０６において、ポインタの指すノードを検索対象ノードＮに設定し、Ｓ２０２に戻る。
【００６４】
Ｓ２１１において、リーフノードの要素を１件取得する。このとき、リーフノードの要素を先頭から順に取得する。
Ｓ２１２において、Ｓ２１１で取得した要素に対応する空間領域のモートン符号値の範囲を算出する。空間領域のモートン符号値の範囲は、当該リーフノードのキー値（モートン符号値、分割数）から算出できる。
Ｓ２１３において、検索符号値ＭがＳ２１２で算出したモートン符号値の範囲に含まれるか否かを判定する。判定条件を満たすときにはＳ２１４へ、判定条件を満たさないときにはＳ２１１へ、それぞれ進む。
Ｓ２１４において、当該リーフノードの要素を検索された空間領域として保持し、処理をＳ１０３に戻す。
【００６５】
図９は、主に交差判定部３２（Ｓ３０４は絶対座標値変換部３４）が実行する、Ｓ１０３の処理の詳細を示すフローチャートである。
【００６６】
Ｓ３０１において、Ｓ１０２で保持された空間領域の要素の指すオブジェクトノードを取得する。
Ｓ３０２において、オブジェクトノードの要素をすべて取得したか否かを判定する。判定条件を満たすときにはＳ１０４に処理を戻し、判定条件を満たさないときにはＳ３０３へ進む。
Ｓ３０３において、オブジェクトノードの要素を１件取得する。このとき、オブジェクトノードの要素を先頭から順に取得する。以下、取得したオブジェクトノードの要素を、「選択オブジェクト」と呼ぶ。
【００６７】
Ｓ３０３ｂにおいて、領域内オブジェクトテーブル２２の「種別ＩＤ」を参照し、選択オブジェクトの種別が、検索条件の種別と一致するか否かを判定する。判定条件を満たすときにはＳ３０４へ、判定条件を満たさないときにはＳ３０２へ、それぞれ進む。
なお、このＳ３０３ｂの判定処理は、領域内オブジェクトテーブル２２に種別ＩＤが含まれている場合（表２参照）に実行されるが、領域内オブジェクトテーブル２２に種別ＩＤが含まれていない場合（表１参照）は、省略可能である。
【００６８】
Ｓ３０４において、絶対座標値変換部３４は、以下の手順により、選択オブジェクトの外接矩形の絶対座標値の変換を行う。
・領域内オブジェクトテーブル２２のモートン符号値を、Ｓ１０２で求めた空間領域の左下座標値（ａ，ｂ）に変換する。
・選択オブジェクトの領域内位置の左下座標値（x'_min，y'_min）に、空間領域の左下座標値（ａ，ｂ）を加算して、選択オブジェクトの左下座標の絶対座標値（x_min，y_min）を求める（例えば、x_min＝x'_min＋ａ、y_min＝y'_min＋b）。
・選択オブジェクトの領域内位置の右上座標値（x'_max，y'_max）に、空間領域の左下座標値（ａ，ｂ）を加算して、選択オブジェクトの右上座標の絶対座標値（x_max，y_max）を求める（例えば、x_max＝x'_max＋ａ、y_max＝y'_max＋b）。
【００６９】
Ｓ３０５において、Ｓ３０４で求めた選択オブジェクトの外接矩形（x_min，y_min）〜（x_max，y_max）が、Ｓ１０２で求めた空間領域と交差するか否かを判定する。判定条件を満たすときにはＳ３０６へ、判定条件を満たさないときにはＳ３０２へ、それぞれ進む。
なお、Ｓ３０５の交差判定処理は、２つの矩形（第１矩形と第２矩形）の間に重複箇所が存在するか否かの判定処理であり、例えば、第１矩形と第２矩形との間の位置関係を示す判定式をあらかじめ用意し、その判定式に代入することにより、実現される。判定式の一例として、「（第１矩形の右端のｘ座標）＜（第２矩形の左端のｘ座標）」なら、第１矩形と第２矩形とは重複しない旨の判定式が例示される。
【００７０】
Ｓ３０６において、Ｓ３０４で求めた選択オブジェクトの実形状をオブジェクト詳細テーブル２３から読み取り、Ｓ１０１で入力された空間領域の実形状と交差するか否かを判定する。判定条件を満たすときにはＳ３０７へ、判定条件を満たさないときにはＳ３０２へ、それぞれ進む。
なお、Ｓ３０６の交差判定処理は、オブジェクト詳細テーブル２３の「実形状」データをもとに行われる詳細な交差判定である。この交差判定処理は、例えば、選択オブジェクトの実形状上の絶対位置を順に網羅するように走査し、選択オブジェクトの各走査点のうち、空間領域内に存在する選択オブジェクトの走査点が１つ以上発見されたときには、交差すると判定する方法がある。
ここで、Ｓ３０６の交差判定処理は、実形状という大きいデータ量を対象とする判定処理であるので、計算量が大きくなってしまう。そこで、Ｓ３０６の交差判定処理を実行するか否かをオプションとしてユーザに選択させ、ユーザが選択しないときには、Ｓ３０６の交差判定処理を省略し、Ｓ３０５を満たすときにはＳ３０７に進むようにしてもよい。
【００７１】
Ｓ３０７において、空間領域と交差すると判断された選択オブジェクトを検索結果として出力装置９５を介して出力し、処理をＳ３０２に戻す。
【００７２】
図１０は、検索起点設定部３３が実行する、Ｓ１０４の検索符号値Ｍの更新処理の詳細を示すフローチャートである。本フローチャートでは、検索範囲の矩形が含むモートン符号値の中で、Ｓ１０２で検索された空間領域を除外した検索範囲のうちの最小のモートン符号値を求める。
【００７３】
Ｓ４０１において、検索符号値Ｍを座標値（ａ，ｂ）に変換する。
Ｓ４０２において、Ｓ１０２で検索された空間領域の右上座標（x_max，y_max）に設定する。
Ｓ４０３において、Ｓ１０２で検索された空間領域の右辺よりｘ軸方向に１だけ大きいｙ軸に平行な線が検索範囲の矩形に交差するか否かを判定する。判定条件を満たすときにはＳ４０４へ、判定条件を満たさないときにはＳ４０５へ、それぞれ進む。
Ｓ４０４において、Ｓ１０２で検索された空間領域の近接点（x_max＋１，ｂ）のモートン符号値を、検索符号値リストに挿入する。なお、検索符号値リストは、例えば、モートン符号値を優先度とした優先度付きキューとして実装される。
【００７４】
Ｓ４０５において、Ｓ１０２で検索された空間領域の上辺よりｙ軸方向に１だけ大きいｘ軸に平行な線が検索範囲の矩形に交差するか否かを判定する。判定条件を満たすときにはＳ４０６へ、判定条件を満たさないときにはＳ４０７へ、それぞれ進む。
Ｓ４０６において、Ｓ１０２で検索された空間領域の近接点（ａ，y_max＋１）のモートン符号値を、検索符号値リストに挿入する。
Ｓ４０７において、Ｓ４０４およびＳ４０６で挿入された検索符号値リストのモートン符号値のうちの最小のモートン符号値を、検索符号値Ｍに設定する。
【００７５】
図１１は、オブジェクト登録部４０が実行する、オブジェクトを空間データに登録する処理を示すフローチャートである。
【００７６】
Ｓ５０１において、オブジェクト登録部４０は、登録対象のオブジェクトの詳細情報を取得する。
詳細情報とは、例えば、オブジェクト詳細テーブル２３に登録される情報（オブジェクトの地図上の位置、種別ＩＤ、実形状）である。さらに、詳細情報として、カーナビゲーションの施設情報として提供される任意の情報（住所、電話番号など）を付加してもよい。
【００７７】
Ｓ５０２において、オブジェクト登録部４０は、Ｓ５０１で入力されたオブジェクトの詳細情報を、空間データ（オブジェクト詳細テーブル２３）に登録する。なお、登録対象のオブジェクトが既にオブジェクト詳細テーブル２３に登録済みであるときには、２重登録を避けるため、Ｓ５０２を省略してもよいし、Ｓ５０１で入力された詳細情報に変更があれば、登録済みのオブジェクト詳細テーブル２３のレコードを、変更後の値に書き換えてもよい。
【００７８】
Ｓ５０３において、オブジェクト登録部４０は、Ｓ５０２でのオブジェクト詳細テーブル２３への登録データをもとに、関連する他の空間データ（領域索引ツリー２１、領域内オブジェクトテーブル２２）への登録データを作成する。
例えば、オブジェクト登録部４０は、オブジェクト詳細テーブル２３に新たに登録されたオブジェクトを、領域内オブジェクトテーブル２２に登録されている各空間領域に沿って分割し、分割されたオブジェクトの地図上の絶対位置を、各空間領域の代表点からの相対位置に変換する。
各空間領域に沿って分割する処理は、例えば、オブジェクトＡがオブジェクト詳細テーブル２３では１レコード分存在するが、領域内オブジェクトテーブル２２では３つの空間領域に分割されている。
【００７９】
Ｓ５０４において、オブジェクト登録部４０は、作成した空間データ（領域索引ツリー２１、領域内オブジェクトテーブル２２）への登録データを、各空間データへと登録する（詳細は、図１２）。
【００８０】
図１２（ａ）は、オブジェクト登録部４０が実行する、空間データ（領域索引ツリー２１、領域内オブジェクトテーブル２２）への登録処理（Ｓ５０４）の詳細を示すフローチャートである。
【００８１】
Ｓ６０１において、オブジェクト登録部４０は、Ｓ５０３で作成された登録対象のオブジェクトの外接矩形を検索範囲としたオブジェクト検索部３０の処理（図７参照）を呼び出すことにより、登録対象の外接矩形のオブジェクトと交差する空間領域（交差領域）を求め、交差領域リストに挿入する。
Ｓ６０２において、オブジェクト登録部４０は、交差領域リストの要素をすべて取得したか否かを判定する。判定条件を満たすときには本処理を終了し、判定条件を満たさないときにはＳ６０３へ進む。
【００８２】
Ｓ６０３において、オブジェクト登録部４０は、交差領域リストの先頭から順に、空間領域を１件取り出す。以下、取り出した空間領域を、選択領域と呼ぶ。
Ｓ６０４において、オブジェクト登録部４０は、領域索引ツリー２１の選択領域に対応するリーフノードからリンクする、登録済みのオブジェクトノードを取得する。
Ｓ６０５において、登録済みのオブジェクトの数と、今回の登録対象のオブジェクトの数との合計が、各空間領域のオブジェクトの容量（例えば、図２の場合、最大３つ）を超過するか否かを判定する。判定条件を満たすときにはＳ６０６へ、判定条件を満たさないときにはＳ６０７へ、それぞれ進む。
【００８３】
Ｓ６０６において、領域分割部４２は、１つの選択領域を４つの空間領域へと分割する。具体的には、まず、分割対象の選択領域を等面積に４分割した場合の４つの空間領域について、それぞれの代表点のモートン符号値を算出する。そして、領域索引ツリー２１のリーフノードに登録されている選択領域の空間領域情報を削除するとともに、そのリーフノードにＳ６１１で算出した４つの空間領域の空間領域情報を追加する。
ここで、領域索引ツリー２１のリーフノードの許容量（図２の場合、空間領域情報は最大３つまで）を超過したときには、図５に示すように、その超過したリーフノードを複数のリーフノードに分割することで、リーフノードの許容量を遵守する。このＳ６０６の処理により、空間領域の数が増えたことで、各空間領域のオブジェクトの容量に余裕が生まれ、Ｓ６０５の判定条件を満たしやすくなる。そして、処理をＳ５０３に戻す。
【００８４】
Ｓ６０７において、相対座標値変換部４１は、登録対象のオブジェクトノードが示すオブジェクトの外接矩形の位置を、絶対座標値から相対座標値に変換する（図１２（ｂ）参照）。
Ｓ６０８において、オブジェクト登録部４０は、登録対象のオブジェクトを選択領域に登録する。具体的には、領域索引ツリー２１の選択領域のリーフノードからリンクされるオブジェクトノードに登録対象のオブジェクトを追加するとともに、領域内オブジェクトテーブル２２の選択領域を示すレコードに、登録対象のオブジェクトを追加する。
【００８５】
図１２（ｂ）は、相対座標値変換部４１が実行する、座標変換処理（Ｓ６０７）の詳細を示すフローチャートである。
【００８６】
Ｓ６１１において、オブジェクトの外接矩形の絶対座標値である、左下座標値を（x_min，y_min）、右下座標値を（x_max，y_max）に設定する。
Ｓ６１２において、Ｓ６１１のオブジェクトが含まれる空間領域の代表点のモートン符号値および分割数を領域内オブジェクトテーブル２２から読み取り、その空間領域の左下座標値（x'_min，y'_min）と右上座標値（x'_max，y'_max）とを算出する。
【００８７】
Ｓ６１３において、Ｓ６１１の左下座標値（x_min，y_min）からＳ６１２の左下座標値（x'_min，y'_min）を減算することで、オブジェクトの左下座標値の相対座標値（x''_min，y''_min）を計算する。例えば、「x''_min＝x_min−x'_min」である。
【００８８】
Ｓ６１４において、Ｓ６１１の右上座標値（x_max，y_max）からＳ６１２の左下座標値（x'_min，y'_min）を減算することで、オブジェクトの右上座標値の相対座標値（x''_max，y''_max）を計算する。例えば、「x''_max＝x_max−x'_min」である。
【００８９】
図１３（ａ）は、オブジェクト削除部５０が実行する、オブジェクトの削除のフローチャートを示す。
【００９０】
Ｓ７０１において、オブジェクト削除部５０は、削除対象のオブジェクトの情報を取得する。Ｓ７０１の入力データは、登録対象のオブジェクトのＩＤが少なくとも入力されればよい。
【００９１】
Ｓ７０２において、オブジェクト削除部５０は、Ｓ７０１で入力された削除対象のオブジェクトを、オブジェクト詳細テーブル２３から削除する。具体的には、削除対象のオブジェクトのＩＤを検索キーとして、オブジェクト詳細テーブル２３を検索し、該当するレコードをオブジェクト詳細テーブル２３（表３参照）から削除する。
【００９２】
Ｓ７０３において、オブジェクト削除部５０は、空間データ（領域索引ツリー２１、領域内オブジェクトテーブル２２）から、図６に示すように、削除対象のオブジェクトを削除する（図１３（ｂ）参照）。
【００９３】
図１３（ｂ）は、オブジェクト削除部５０が実行する、空間データ（領域索引ツリー２１、領域内オブジェクトテーブル２２）からの削除処理（Ｓ７０３）の詳細を示すフローチャートである。
【００９４】
Ｓ７１１において、削除対象のオブジェクトの外接矩形に交差する空間領域の情報を交差領域リストに挿入する。なお、挿入する空間領域の情報は、領域内オブジェクトテーブル２２（表１など参照）から削除対象のオブジェクトのＩＤをキーとして検索し、該当するレコードとして取得した情報である。
Ｓ７１２において、交差領域リストの要素（空間領域）をすべて取得したか否かを判定する。判定条件を満たすときには本フローチャートを終了し、判定条件を満たさないときにはＳ７１３へ進む。
Ｓ７１３において、交差領域リストから要素を１件取得し、選択領域とする。この選択領域に交差するオブジェクトは、領域内オブジェクトテーブル２２の選択領域に対応するオブジェクトの列から取得することができる。
【００９５】
Ｓ７１４において、領域内オブジェクトテーブル２２内の選択領域に対応する削除対象のオブジェクトを、領域内オブジェクトテーブル２２から削除する。さらに、領域索引ツリー２１の選択領域のリーフノードからリンクされるオブジェクトノードから、削除対象のオブジェクトを削除する。この削除処理により、選択領域内のオブジェクトの容量に１つ分余裕ができる。
【００９６】
Ｓ７１５において、選択領域を含む分割数が等しい、隣接する４つ組の空間領域（例えば、図６ではモートン符号値＝４８、５２、５６、６０の４つ組の空間領域）に対応づけられているオブジェクト数の総和が容量数（例えば、３つ）以下に収まるか否かを判定する。判定条件を満たすときにはＳ７１６へ、判定条件を満たさないときにはＳ７１２へ、それぞれ進む。
【００９７】
Ｓ７１６において、領域併合部５１は、Ｓ７１５で判定した４つ組の空間領域を１つの空間領域へと併合する。具体的には、以下の処理を行う。
・４つ組の各空間領域（例えば、図６ではモートン符号値＝４８、５２、５６、６０の４つ組の空間領域）からリンクされるオブジェクトノードを、１つのオブジェクトノードに併合するとともに、その併合前の各オブジェクトノードに含まれる各オブジェクトを（図６では、オブジェクトＤ，Ｆ，Ｇ）、併合したオブジェクトノードにまとめる。
・４つ組の空間領域のうち、左下以外に存在する３つの空間領域情報（図６ではモートン符号値＝５２、５６、６０の空間領域）を、領域索引ツリー２１のリーフノードから削除する。その結果、空間領域情報をもたない（空の）リーフノードができたときには、そのリーフノードを削除するように、ツリー構造を変更する。
・４つ組の空間領域のうち、左下に存在する空間領域情報（図６ではモートン符号値＝４８の空間領域）を更新する。具体的には、空間領域情報からリンクされるオブジェクトノードを併合したオブジェクトノードとし、空間領域情報における分割数から１を減算する（図６では、分割数（空間領域情報の括弧内の数字）を「３」から「２」に減算している）。
【００９８】
以上説明した本実施形態によれば、オブジェクト登録部４０がオブジェクトの形状および位置を多次元空間上に配置し、オブジェクト削除部５０が配置されたオブジェクトを削除し、オブジェクト検索部３０が入力された検索条件に該当するオブジェクトを検索する。そして、空間データ管理装置１は、オブジェクトが配置される空間データを、空間領域として領域索引ツリー２１というバランス木のデータ構造で管理する。領域索引ツリー２１のリーフノードでは、１つの空間領域に対し１件の空間領域の情報が格納され、オブジェクトノードでは、オブジェクトの外接矩形がそのオブジェクトに重なる空間領域の代表点からの相対座標で表現されている。
これにより、領域索引ツリーの２１の格納に必要なディスク容量を削減すると共に、オブジェクトの検索、登録、削除の各処理を高速で実現できる。よって、領域索引ツリー２１の効果に伴う高速性かつ小容量性は、ハードウェア資源の使用制約が厳しい組込ソフトウェアにおいて、特に効果を発揮する。
【符号の説明】
【００９９】
１      空間データ管理装置
２１    領域索引ツリー
２２    領域内オブジェクトテーブル
２３    オブジェクト詳細テーブル
３０    オブジェクト検索部
３１    検索初期設定部
３２    交差判定部
３３    検索起点設定部
３４    絶対座標値変換部
４０    オブジェクト登録部
４１    相対座標値変換部
４２    領域分割部
５０    オブジェクト削除部
５１    領域併合部
６０    データ切替部
９１    中央処理装置
９２    主記憶装置
９３    二次記憶装置
９４    入力装置
９５    出力装置
Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇ，Ｈ，Ｉ  オブジェクト
【図１】
2010160591.tif 000007
【図２】
2010160591.tif 000008
【図３】
2010160591.tif 000009
【図４】
2010160591.tif 000010
【図５】
2010160591.tif 000011
【図６】
2010160591.tif 000012
【図７】
2010160591.tif 000013
【図８】
2010160591.tif 000014
【図９】
2010160591.tif 000015
【図１０】
2010160591.tif 000016
【図１１】
2010160591.tif 000017
【図１２】
2010160591.tif 000018
【図１３】
2010160591.tif 000019