(57)【特許請求の範囲】
【請求項１】
コンピュータが
領域を探索する際に用いられるインデックス情報であって複数の領域を含む領域情報とともに前記領域を管理するインデックス情報をツリー構造で表したインデックスツリーを用いて、所定の位置を含む領域を検索し、
該位置を含む領域を検索できた場合、複数の領域のそれぞれについて他の領域と一部が重複する場合の当該他の領域を示す重複領域の情報を記憶した記憶部に基づいて、検索できた領域と重複する重複領域の中から該位置を含む領域を検索し、
検索できた領域の情報を出力する
ことを実行する領域検索方法。
【請求項２】
所定の位置を含む領域の問合せ要求を取得すると、該位置が前回検索できた領域に含まれるか否かを判定し、
判定の結果、該位置が前回検索できた領域に含まれると判定された場合、前記記憶部に基づいて、含まれると判定された領域の重複領域の中から該位置を含む領域を検索することを特徴とする請求項１に記載の領域検索方法。
【請求項３】
前記判定の結果、該位置が前回検索できた領域に含まれないと判定された場合、前記ツリー構造を形成するノードの中で、含まれないと判定された領域を含むインデックス情報の葉ノードから該位置を含む領域を検索し、
該位置を含む領域を検索できた場合、検索できた情報の重複領域の中から該位置を含む領域を検索することを特徴とする請求項２に記載の領域検索方法。
【請求項４】
前記領域を検索する処理において、検索できた領域が複数ある場合、複数ある領域の内、重複領域の数が最も小さい領域を選択することを特徴とする請求項２または請求項３に記載の領域検索方法。
【請求項５】
コンピュータに、
領域を探索する際に用いられるインデックス情報であって複数の領域を含む領域情報とともに前記領域を管理するインデックス情報をツリー構造で表したインデックスツリーを用いて、所定の位置を含む領域を検索し、
該位置を含む領域を検索できた場合、複数の領域のそれぞれについて他の領域と一部が重複する場合の当該他の領域を示す重複領域の情報を記憶した記憶部に基づいて、検索できた領域と重複する重複領域の中から該位置を含む領域を検索し、
検索できた領域の情報を出力する
各処理を実行させることを特徴とする領域検索プログラム。
【請求項６】
複数の領域のそれぞれについて他の領域と一部が重複する場合の当該他の領域を示す重複領域の情報を記憶した記憶部と、
領域を探索する際に用いられるインデックス情報であって複数の領域を含む領域情報とともに前記領域を管理するインデックス情報をツリー構造で表したインデックスツリーを用いて、所定の位置を含む領域を検索する第１の検索部と、
前記第１の検索部によって該位置を含む領域を検索できた場合、前記記憶部に基づいて、検索できた領域と重複する重複領域の中から該位置を含む領域を検索する第２の検索部と、
前記第１の検索部および前記第２の検索部によって検索できた領域の情報を出力する出力部と
を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、領域検索方法などに関する。
【背景技術】
【０００２】
従来、空間内に存在する大量のデータから条件に合ったデータを高速に検索するために、インデックスを用いたデータ管理が利用される。インデックスを用いたデータ管理方式には、一次元のデータを検索する場合に用いられるＢ−Ｔｒｅｅ（Ｂツリー）を利用した方式や多次元データを検索する場合に用いられるＲ−Ｔｒｅｅ（Ｒツリー）を利用した方式がある。
【０００３】
例えば、Ｒツリーを利用したデータ管理について、図２５を参照して説明する。図２５は、Ｒツリーで管理するデータと矩形領域の例を示す図である。図２５に示すように、Ｒ０は、子ノードＲ１〜Ｒ４の矩形領域を全て含む矩形領域であり、Ｒ１は、Ｒ５〜Ｒ８の矩形領域を全て含む矩形領域である。また、最下段のＲ５〜Ｒ１１は葉ノードであり、内部にデータを含む矩形領域である。すなわち、Ｒ０はＲ１のインデックス情報となり、Ｒ１は、Ｒ５のインデックス情報となっている。
【０００４】
条件に合ったデータを検索するために、かかるインデックス情報を用いて該当範囲を検索（「範囲検索」という。）していく場合、ルートノードであるＲ０の４つの子ノードＲ１〜Ｒ４から検索範囲が重なるノードを選択する。重なる部分を持つノードは再帰的に検索範囲が重なるノードを選択し、最終的に葉ノードの中から検索範囲内にあるデータを選択する。
【０００５】
かかる範囲検索の手法として、広い領域に複数のより狭い領域が含まれるというように階層化された領域に関する座標情報とＧＰＳ装置により測定された現在の位置とから、現在の位置が階層化された領域の何れに属するかを検索判定する技術が特許文献１に開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−２４９５６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、インデックスを用いた従来の範囲検索では、検索時間を要してしまうという問題があった。すなわち、Ｒツリーを利用したデータ管理方式では、検索操作を実行する都度、ルートノードから検索を開始するので、常時ｌｏｇＮオーダの検索回数が必要となり、検索時間を要してしまう。
【０００８】
階層化された領域に関する座標情報を用いて範囲検索する場合であっても、現在の位置が測定される都度、測定される現在の位置に関する検索判定を、広い領域から順番に開始するので、検索時間を要してしまうことには変わりがない。
【０００９】
開示の技術は、インデックスを用いた範囲検索の検索時間を高速化することができることを目的とする。
【課題を解決するための手段】
【００１０】
１つの側面では、領域検索方法は、領域を探索する際に用いられるインデックス情報であって複数の領域を含む領域情報とともに前記領域を管理するインデックス情報をツリー構造で表したインデックスツリーを用いて、所定の位置を含む領域を検索し、該位置を含む領域を検索できた場合、複数の領域のそれぞれについて領域と重複する重複領域の情報を記憶した記憶部に基づいて、検索できた領域の重複領域の中から該位置を含む領域を検索し、検索できた領域の情報を出力することを含む。
【発明の効果】
【００１１】
本願の開示する領域検索方法の一つの態様によれば、インデックスを用いた範囲検索の検索時間を高速化することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施例１に係る領域検索サーバの構成を示す機能ブロック図である。
【図２】図２は、領域インデックスＤＢに記憶される情報の例を示す図である。
【図３】図３は、領域インデックスＤＢに記憶されるルートノードの情報の例を示す図である。
【図４】図４は、領域インデックスＤＢに記憶される中間ノードの情報の例を示す図である。
【図５】図５は、領域インデックスＤＢに記憶される葉ノードの情報の例を示す図である。
【図６】図６は、領域データＤＢのデータ構造の一例を示す図である。
【図７】図７は、領域検索要求の内容の一例を示す図である。
【図８】図８は、領域検索応答の内容の一例を示す図である。
【図９Ａ】図９Ａは、検索に係るリクエスト受付処理の手順を示すフローチャートである。
【図９Ｂ】図９Ｂは、実施例１に係る検索処理の手順を示すフローチャートである。
【図１０】図１０は、実施例１に係る領域データ追加処理の手順を示すフローチャート（１）である。
【図１１】図１１は、実施例１に係る領域データ追加処理の手順を示すフローチャート（２）である。
【図１２】図１２は、重複領域設定処理の手順を示すフローチャートである。
【図１３】図１３は、重複領域設定の具体例を示す図である。
【図１４】図１４は、重複領域設定処理の変形例の処理手順を示すフローチャートである。
【図１５】図１５は、実施例２に係る領域検索サーバの構成を示す機能ブロック図である。
【図１６】図１６は、前回位置ＤＢのデータ構造の一例を示す図である。
【図１７】図１７は、実施例２に係る検索処理の手順を示すフローチャート（１）である。
【図１８】図１８は、実施例２に係る検索処理の手順を示すフローチャート（２）である。
【図１９】図１９は、実施例２に係る検索処理の手順を示すフローチャート（３）である。
【図２０】図２０は、実施例２に係る検索処理の変形例の処理手順を示すフローチャート（１）である。
【図２１】図２１は、実施例２に係る検索処理の変形例の処理手順を示すフローチャート（２）である。
【図２２】図２２は、最深ノードの具体例を説明する図である。
【図２３】図２３は、検索回数の比較結果を説明する図である。
【図２４】図２４は、領域検索プログラムを実行するコンピュータの一例を示す図である。
【図２５】図２５は、Ｒツリーで管理するデータと矩形領域の例を示す図である。
【発明を実施するための形態】
【００１３】
以下に、本願の開示する領域検索方法、領域検索プログラムおよび情報処理装置の実施例を図面に基づいて詳細に説明する。なお、実施例によりこの発明が限定されるものではない。
【実施例１】
【００１４】
［領域検索サーバ］
図１は、実施例１に係る領域検索サーバの構成を示す機能ブロック図である。図１に示すように、領域検索サーバ１は、通信インタフェースと１１と、記憶部１２と、制御部１３とを有する。
【００１５】
通信インタフェース１１は、各端末装置との間で通信を確立して、各端末装置から領域検索要求を受信したり、各端末装置に領域検索応答を送信したりするインタフェースである。ここで、領域検索要求とは、端末装置の位置情報がいずれの領域に含まれるかを検索する要求である。位置情報は、例えば端末装置が存在する緯度、経度の情報であるが、空間内の範囲を示す情報であっても良い。そして、領域検索要求は、例えば端末装置の位置情報や端末装置が持つセンサーの識別ＩＤを含む内容となる。領域検索応答とは、領域検索要求に対応する応答であり、検索結果を含む内容となる。なお、通信インタフェース１１は、例えば、ＬＡＮやインターネット等と接続するネットワークインタフェースカードや、無線アンテナを有する無線通信部等である。
【００１６】
記憶部１２は、制御部１３が実行するプログラム等を記憶するとともに、領域インデックスＤＢ１２１と領域データＤＢ１２２とを有する。なお、記憶部１２は、例えば、ＲＡＭ（Random Access Memory）、フラッシュメモリ（flash memory）等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置である。
【００１７】
領域インデックスＤＢ１２１は、空間内に存在する大量の領域から条件に合った領域を高速に検索するための索引情報である。例えば、領域インデックスＤＢ１２１は、どの領域がどこにあるのかを示したインデックスをＲツリーで保持する。
【００１８】
ここで、領域インデックスＤＢ１２１に記憶される情報の例を、図２を参照して説明する。図２は、領域インデックスＤＢに記憶される情報の例を示す図である。図２に示すように、領域インデックスＤＢ１２１は、ルートノード、中間ノードおよび葉ノードのいずれかを示す領域データで形成されるＲツリーを記憶する。ルートノードは、Ｒツリーに１つ存在する頂点の領域データである。また、葉ノードは、Ｒツリーの最底辺のノードであり、自らは子ノードを含まず、検索対象となる多次元の領域データを１つ以上持つ。それ以外の木の中間に存在するノードは、中間ノードであり、それぞれ子ノードを１つ以上持つ。
【００１９】
図２の例では、ルートノードがＲ１であり、Ｒ１の子ノード且つ中間ノードがＲ１０、Ｒ１１である。Ｒ１がＲ１０、Ｒ１１の矩形領域を全て含む矩形領域となっている。中間ノードＲ１０の子ノードである葉ノードがＲ１００、Ｒ１０１である。Ｒ１０がＲ１００、Ｒ１０１の矩形領域を全て含む矩形領域となっている。中間ノードＲ１１の子ノードである葉ノードがＲ１１０、Ｒ１１１である。Ｒ１１がＲ１１０、Ｒ１１１の矩形領域を全て含む矩形領域となっている。そして、葉ノードであるＲ１００は、検索対象となる領域データ１、２、３を持っている。葉ノードであるＲ１０１は、検索対象となる領域データ４、５を持っている。葉ノードであるＲ１１０は、検索対象となる領域データ６、７を持っている。葉ノードであるＲ１１１は、検索対象となる領域データ８、９を持っている。なお、領域データ１〜９とは、例えば領域データを識別可能な領域ＩＤ（IDentification）としても良い。
【００２０】
領域インデックスＤＢ１２１は、Ｒツリーの実体としてルート、中間、葉の各ノードの情報を記憶する。図３は、領域インデックスＤＢに記憶されるルートノードの情報の例を示す図である。図３に示すように、領域インデックスＤＢ１２１は、ルートノードＲ１の情報として、「ノード種別、矩形領域、子ノードリスト」を記憶する。「ノード種別」は、ノードがルート、中間、葉のいずれかであるかを示す情報である。「矩形領域」は、子ノードの担当領域を全て含む最小外接矩形の情報である。最小外接矩形とは、子ノードの領域を全て含む最小の矩形領域をいう。「子ノードリスト」は、当該ノードの子ノードへのリンクポインタのリストである。
【００２１】
図３の例では、ルートノードＲ１は、ｘ、ｙの２次元データを管理し、「ｘ１＝３５．５、ｙ１＝１３９．０」が担当領域の最小点であり、「ｘ２＝３５．９、ｙ２＝１３９．５」が担当領域の最大点であることを示す。すなわち、Ｒ１が担当する領域は、両点を頂点として各次元軸に直交した４直線で作られる領域である。また、Ｒ１は、子ノード「Ｒ１０、Ｒ１１」へのポインタのリストを記憶する。
【００２２】
図４は、領域インデックスＤＢに記憶される中間ノードの情報の例を示す図である。図４に示すように、領域インデックスＤＢ１２１は、中間ノードの情報として、「ノード種別、矩形領域、子ノードリスト」を記憶する。ここで記憶される「ノード種別」、「矩形領域」、「子ノードリスト」は、図３と同様であるので詳細な説明は省略する。領域インデックスＤＢ１２１は、Ｒ１０、Ｒ１１について、図４の情報を記憶する。
【００２３】
図４の場合、中間ノードＲ１０は、ｘ、ｙの２次元データを管理し、「ｘ１＝３５．５、ｙ１＝１３９．２」が担当領域の最小点であり、「ｘ２＝３５．７、ｙ２＝１３９．３」が担当領域の最大点であることを示す。すなわち、中間ノードＲ１０が担当する領域は、両点を頂点として各次元軸に直交した４直線で作られる領域である。また、Ｒ１０は、子ノード「Ｒ１００、Ｒ１０１」へのポインタのリストを記憶する。
【００２４】
図５は、領域インデックスＤＢに記憶される葉ノードの情報の例を示す図である。図５に示すように、領域インデックスＤＢ１２１は、葉ノードの情報として、「ノード種別、矩形領域、データリスト」を記憶する。ここで記憶される「ノード種別」、「矩形領域」は、図３と同様であるので詳細な説明は省略する。「データリスト」は、管理する多次元の領域データである。領域インデックスＤＢ１２１は、Ｒ１００、Ｒ１０１、Ｒ１１０、Ｒ１１１について、図５の情報を記憶する。
【００２５】
図５の場合、葉ノードＲ１００は、ｘ、ｙの２次元データを管理し、「ｘ１＝３５．５、ｙ１＝１３９．２」が担当領域の最小点であり、「ｘ２＝３５．６、ｙ２＝１３９．３」が担当領域の最大点であることを示す。すなわち、葉ノードＲ１００が担当する領域は、両点を頂点として各次元軸に直交した４直線で作られる領域である。また、Ｒ１００は、領域データ「Ｄ１、Ｄ２、Ｄ３、Ｄ４」へのポインタのリストを記憶する。領域データへのポインタの一例として、領域データを識別する領域ＩＤが用いられる。各領域データの実体は、領域データＤＢ１２２に格納されている。
【００２６】
図１に戻って、領域データＤＢ１２２は、複数の領域データを管理するとともに、複数の領域データのそれぞれについて、領域データの領域と重複する他の領域の領域データを管理する。
【００２７】
ここで、領域データＤＢ１２２のデータ構造の一例を、図６を参照して説明する。図６は、領域データＤＢのデータ構造の一例を示す図である。図６に示すように、領域データＤＢ１２２は、領域ＩＤ１２２ａ毎に、データ名１２２ｂ、領域情報１２２ｃおよび重複領域１２２ｄを対応付けて記憶する。領域ＩＤ１２２ａは、領域データを一意に識別可能なＩＤを示す。データ名１２２ｂは、領域ＩＤで示される領域データのデータ名を示す。領域情報１２２ｃは、領域ＩＤで示される領域データの実体である具体的な範囲を示す。重複領域１２２ｄは、領域ＩＤで示される領域データと重複する他の領域データの領域ＩＤを示す。例えば、領域ＩＤ１２２ａが「００００１」である場合、データ名１２２ｂとして「Ａ商店Ｘ店舗近辺」、領域情報１２２ｃとして「円領域：緯度３５．４９１、経度１３９．６５０、半径１００ｍ」と記憶している。そして、領域ＩＤ１２２ａが「００００１」である場合の重複領域１２２ｄとして「０００３４」の領域ＩＤを記憶している。
【００２８】
図１に戻って、制御部１３は、リクエスト受付部１３１、レスポンス転送部１３２、ツリー検索部１３３、重複データ検索部１３４および重複領域設定部１３５を有する。制御部１３は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路またはＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等の電子回路である。
【００２９】
リクエスト受付部１３１は、通信インタフェース１１によって受信された検索リクエストを受け付ける。レスポンス転送部１３２は、検索リクエストに対応する領域検索応答を通信インタフェース１１に転送する。
【００３０】
ツリー検索部１３３は、領域インデックスＤＢ１２１を用いて、所定の位置情報を含む領域を検索する。例えば、ツリー検索部１３３は、リクエスト受付部１３１によって受け付けられた領域検索要求の中から位置情報を取り出す。そして、ツリー検索部１３３は、ルートノードから子ノードへトップダウンに辿り順番にノードを選択し、選択したノードの子ノードに、取り出した位置情報を含むものがあるか否かを、領域インデックスＤＢ１２１を用いて判定する。一例として、ツリー検索部１３３は、領域インデックスＤＢ１２１を用いて、選択したノードの子ノードリストを読み出し、さらに、読み出した子ノードリストに含まれるそれぞれの子ノードの矩形領域を読み出す。そして、ツリー検索部１３３は、読み出したそれぞれの子ノードの矩形領域に、取り出した位置情報を含むものがあるか否かを判定する。
【００３１】
また、ツリー検索部１３３は、取り出した位置情報を含む子ノードを選択候補ノードとして追加する。そして、ツリー検索部１３３は、選択候補ノードとして追加されたノードを１つずつ選択し、選択したノードが葉ノードであれば、葉ノードにある領域データの内、取り出した位置情報を含むものがあるか否かを、領域インデックスＤＢ１２１を用いて判定する。一例として、ツリー検索部１３３は、領域インデックスＤＢ１２１を用いて、葉ノードであるノードのデータリストを読み出し、読み出したデータリストに含まれる領域データへのポインタを取り出す。ここでは、領域データを領域ＩＤとすると、ツリー検索部１３３は、領域データＤＢ１２２に記憶された領域情報１２２ｃを用いて、領域ＩＤに対応する領域情報１２２ｃに、取り出した位置情報を含むものがあるか否かを判定する。そして、ツリー検索部１３３は、領域ＩＤに対応する領域情報１２２ｃに、取り出した位置情報を含むものが１つでもあれば、いずれか１つの領域情報１２２ｃの領域ＩＤを検索結果に追加し、領域インデックスＤＢ１２１を用いた検索を終了する。なお、ツリー検索部１３３は、位置情報を含む領域情報が複数ある場合には、重複領域の数が最も小さい領域情報を選択することが望ましい。これは、後述する重複データ検索部１３４が、さらに位置情報を含む領域を、選択した領域情報の重複領域から検索することとなるので、検索対象となる重複領域の数を減らすためである。
【００３２】
重複データ検索部１３４は、ツリー検索部１３３によって位置情報を含む領域情報を検索できた場合、領域データＤＢ１２２に記憶された重複領域に基づいて、検索できた領域情報に対応する重複領域の中から位置情報を含む領域情報を検索する。例えば、重複データ検索部１３４は、ツリー検索部１３３によって追加された検索結果から領域ＩＤを取り出す。そして、重複データ検索部１３４は、領域データＤＢ１２２に記憶された重複領域１２２ｄに基づいて、取り出した領域ＩＤの領域情報と重複する重複領域の領域ＩＤを読み出す。そして、重複データ検索部１３４は、該当する重複領域の領域ＩＤを１つずつ選択し、選択した領域ＩＤの重複領域が位置情報を含むか否かを判定する。そして、重複データ検索部１３４は、位置情報を含む重複領域の領域ＩＤを検索結果に追加する。
【００３３】
重複領域設定部１３５は、領域データＤＢ１２２の重複領域を設定する。なお、重複領域設定部１３５は、領域インデックスＤＢ１２１に新たな領域を追加する際に、その追加領域を領域データＤＢ１２２に追加すると共に、その追加領域と重複する重複領域を設定するようにすれば良い。例えば、重複領域設定部１３５は、ルートノードから子ノードに向かって順番にノードを選択し、選択したノードの子ノードに、追加領域を含むものがあるか否かを、領域インデックスＤＢ１２１を用いて判定する。一例として、重複領域設定部１３５は、領域インデックスＤＢ１２１を用いて、選択したノードの子ノードリストを読み出し、さらに、読み出した子ノードリストに含まれるそれぞれの子ノードの矩形領域を読み出す。そして、重複領域設定部１３５は、読み出したそれぞれの子ノードの矩形領域に追加領域を含むものがあるか否かを判定する。
【００３４】
また、重複領域設定部１３５は、追加領域を含む子ノードを選択候補ノードとして追加する。そして、重複領域設定部１３５は、選択候補ノードとして追加されたノードを１つずつ選択し、選択したノードが葉ノードであれば、葉ノードにある領域データの内、追加領域と重複する部分がある領域データを重複領域として選択する。そして、重複領域設定部１３５は、重複領域として選択した領域データを、領域データＤＢ１２２の追加領域に対応する重複領域１２２ｄに追加する。さらに、重複領域設定部１３５は、追加領域を、重複領域として選択した領域データに対応する重複領域１２２ｄに追加する。
【００３５】
［領域検索要求のデータの一例］
次に、リクエスト受付部１３１が通信インタフェース１１を介して受け付ける領域検索要求の内容について、図７を参照して説明する。図７は、領域検索要求の内容の一例を示す図である。図７に示すように、領域検索要求には、センサーを識別するセンサーＩＤと、緯度および経度とを含む。緯度および経度は、位置情報の一例である。図７の例では、センサーＩＤとして「Ｓｅｎｓｏｒ０００Ｘ」、緯度として「３５．４１３４」、経度として「１３９．６２５２」と設定している。なお、領域検索要求には、センサーＩＤを含むものとしたが、これに限定されず、領域検索を要求する端末装置の装置ＩＤであっても良いし、領域検索を要求する携帯電話の携帯電話番号であっても良い。
【００３６】
［領域検索応答のデータの一例］
次に、レスポンス転送部１３２が通信インタフェース１１を介して出力する領域検索応答の内容について、図８を参照して説明する。図８は、領域検索応答の内容の一例を示す図である。図８に示すように、領域検索応答は、領域検索の結果を示す領域情報のリストであり、領域情報に対応する領域ＩＤと領域名とを含む。図８の例では、領域ＩＤとして「００００１」、領域名として「Ａ商店Ｘ店舗周辺」と設定している。また、領域ＩＤとして「０００３４」、領域名として「レストランＣ周辺」と設定している。なお、領域情報のリストには、領域ＩＤと領域名とを含むものとしたが、これに限定されず、領域の位置、大きさや形状等を含むものとしても良い。
【００３７】
［リクエスト受付処理の手順］
次に、検索に係るリクエスト受付処理の手順について、図９Ａを参照して説明する。図９Ａは、検索に係るリクエスト受付処理の手順を示すフローチャートである。
【００３８】
まず、リクエスト受付部１３１は、領域検索要求を受け付けたか否かを判定する（Ｓ１０Ａ）。そして、領域検索要求を受け付けていないと判定した場合（ステップＳ１０Ａ；Ｎｏ）、リクエスト受付部１３１は、領域検索要求を受け付けるまで、判定処理を繰り返す。一方、領域検索要求を受け付けたと判定した場合（ステップＳ１０Ａ；Ｙｅｓ）、リクエスト受付部１３１は、検索処理を実行する（ステップＳ１０Ｂ）。
【００３９】
そして、リクエスト受付部１３１は、リクエスト受付処理を終了したか否かを判定する（ステップＳ１０Ｃ）。リクエスト受付処理を終了していないと判定した場合（ステップＳ１０Ｃ；Ｎｏ）、リクエスト受付部１３１は、ステップＳ１０Ａに移行する。一方、リクエスト受付処理を終了したと判定した場合（ステップＳ１０Ｃ；Ｙｅｓ）、リクエスト受付部１３１は、処処理を終了する。
【００４０】
［検索処理の手順］
次に、図９ＡのステップＳ１０Ｂに示した検索処理について、図９Ｂを参照して説明する。図９Ｂは、実施例１に係る検索処理の手順を示すフローチャートである。なお、図９Ｂの例では、領域検索要求に含まれる位置情報を検索座標として説明する。
【００４１】
リクエスト受付部１３１によって領域検索要求が受け付けられると、ツリー検索部１３３は、領域インデックスＤＢ１２１に基づいて、ルートノードを選択する（ステップＳ１１）。そして、ツリー検索部１３３は、選択した選択ノードが葉ノードであるか否かを判定する（ステップＳ１２）。
【００４２】
選択ノードが葉ノードでないと判定した場合（ステップＳ１２；Ｎｏ）、ツリー検索部１３３は、選択ノードの子ノードに検索座標を含むものがあるか否かを、領域インデックスＤＢ１２１を用いて判定する（ステップＳ１３）。一例として、ツリー検索部１３３は、領域インデックスＤＢ１２１に基づいて、選択ノードの子ノードリストを読み出し、読み出した子ノードリストに含まれるそれぞれの子ノードの矩形領域を読み出す。そして、ツリー検索部１３３は、読み出したそれぞれの子ノードの矩形領域に、検索座標を含むものがあるか否かを判定する。
【００４３】
選択ノードの子ノードに検索座標を含むものがあると判定した場合（ステップＳ１３；Ｙｅｓ）、ツリー検索部１３３は、検索座標を含む子ノードを選択候補ノードに追加し（ステップＳ１４）、ステップＳ１５に移行する。一方、選択ノードの子ノードに検索座標を含むものがないと判定した場合（ステップＳ１３；Ｎｏ）、ツリー検索部１３３は、ステップＳ１５に移行する。
【００４４】
続いて、ツリー検索部１３３は、全ての選択候補ノードの検索を終えたか否かを判定する（ステップＳ１５）。全ての選択候補ノードの検索を終えていないと判定した場合（ステップＳ１５；Ｎｏ）、ツリー検索部１３３は、選択候補ノード内の１つの未検索ノードを選択し（ステップＳ１６）、ステップＳ１２に移行する。
【００４５】
ステップＳ１２では、選択ノードが葉ノードであると判定した場合（ステップＳ１２；Ｙｅｓ）、ツリー検索部１３３は、選択した葉ノードが持つ領域データの内、検索座標を含むものがあるか否かを判定する（ステップＳ１７）。一例として、ツリー検索部１３３は、領域インデックスＤＢ１２１に基づいて、葉ノードであるノードのデータリストを読み出し、読み出したデータリストに含まれる領域データへのポインタ、例えば領域ＩＤを取り出す。そして、ツリー検索部１３３は、領域データＤＢ１２２に基づいて、取り出した領域ＩＤに対応する領域情報１２２ｃに検索座標を含むものがあるか否かを判定する。
【００４６】
選択した葉ノードが持つ領域データの内、検索座標を含むものがないと判定した場合（ステップＳ１７；Ｎｏ）、ツリー検索部１３３は、次の選択候補ノードを検索すべく、ステップＳ１５に移行する。
【００４７】
一方、選択した葉ノードが持つ領域データの内、検索座標を含むものがあると判定した場合（ステップＳ１７；Ｙｅｓ）、ツリー検索部１３３は、該当領域データの内、重複領域の数が最小の領域データを検索結果に追加する（ステップＳ１８）。一例として、ツリー検索部１３３は、領域データＤＢ１２２に記憶された重複領域１２２ｄに基づいて、重複領域の数が最小の領域データ（領域ＩＤ）を検索結果に追加する。ここで、領域インデックスＤＢ１２１を用いた検索を終了する。
【００４８】
続いて、重複データ検索部１３４は、領域データＤＢ１２２の重複領域１２２ｄに基づいて、検索結果に追加した領域データの重複領域から未判定のものを読み出し、読み出した重複領域を１つ選択する（ステップＳ１９）。そして、重複データ検索部１３４は、選択した重複領域が検索座標を含むか否かを判定する（ステップＳ２０）。選択した重複領域が検索座標を含むと判定した場合（ステップＳ２０；Ｙｅｓ）、重複データ検索部１３４は、含むと判定した重複領域の領域ＩＤを検索結果に追加し（ステップＳ２１）、ステップＳ２２に移行する。
【００４９】
一方、選択した重複領域が検索座標を含まないと判定した場合（ステップＳ２０；Ｎｏ）、重複データ検索部１３４は、全重複領域の判定を終えていない場合（ステップＳ２２；Ｎｏ）、次の重複領域を判定すべく、ステップＳ１９に移行する。一方、重複データ検索部１３４は、全重複領域の判定を終えた場合（ステップＳ２２；Ｙｅｓ）、作成した検索結果を問合せ側へ返答すべく、レスポンス転送部１３２に出力する（ステップＳ２３）。その後、レスポンス転送部１３２は、検索結果を領域検索応答として領域検索要求の問合せ側へ送信する。
【００５０】
ステップＳ１５では、全ての選択候補ノードの検索を終えていると判定した場合（ステップＳ１５；Ｙｅｓ）、ツリー検索部１３３は、選択ノードに検索座標を含むものがないので、検索結果無しとして問合せ側へ返答すべく、レスポンス転送部１３２に出力する（ステップＳ２４）。その後、レスポンス転送部１３２は、検索結果を領域検索応答として領域検索要求の問合せ側へ送信する。
【００５１】
［領域データ追加処理の手順］
次に、実施例１に係る領域データ追加処理の手順について、図１０、図１１を参照して説明する。図１０、図１１は、実施例１に係る領域データ追加処理の手順を示すフローチャートである。
【００５２】
まず、重複領域設定部１３５は、領域インデックスＤＢ１２１に基づいて、ルートノードを選択する（ステップＳ３１）。そして、重複領域設定部１３５は、選択した選択ノードが葉ノードであるか否かを判定する（ステップＳ３２）。
【００５３】
選択ノードが葉ノードでないと判定した場合（ステップＳ３２；Ｎｏ）、重複領域設定部１３５は、領域インデックスＤＢ１２１に基づいて、選択ノードの子ノードに追加領域を包含するものがあるか否かを判定する（ステップＳ３３）。一例として、重複領域設定部１３５は、領域インデックスＤＢ１２１に基づいて、選択ノードの子ノードリストを読み出し、読み出した子ノードリストに含まれるそれぞれの子ノードの矩形領域を読み出す。そして、ツリー検索部１３３は、読み出したそれぞれの子ノードの矩形領域に、追加領域を包含する矩形領域があるか否かを判定する。
【００５４】
追加領域を包含するものがあると判定した場合（ステップＳ３３；Ｙｅｓ）、重複領域設定部１３５は、追加領域を包含する子ノードの内、矩形領域の面積が最小のものを選択ノードとする（ステップＳ３４）。そして、重複領域設定部１３５は、ステップＳ３２に移行する。
【００５５】
一方、追加領域を包含するものがないと判定した場合（ステップＳ３３；Ｎｏ）、重複領域設定部１３５は、追加領域を含めると拡大量が最小になる子ノードを選択ノードとする（ステップＳ３５）。そして、重複領域設定部１３５は、ステップＳ３２に移行する。
【００５６】
ステップＳ３２では、選択ノードが葉ノードであると判定した場合（ステップＳ３２；Ｙｅｓ）、重複領域設定部１３５は、ステップＳ４１に移行する。
【００５７】
続いて、重複領域設定部１３５は、選択した葉ノードに追加領域の領域データを追加する（ステップＳ４１）。一例として、重複領域設定部１３５は、領域インデックスＤＢ１２１の該当する葉ノードのデータリストに、追加領域の領域データへのポインタ、例えば領域ＩＤを追加する。そして、重複領域設定部１３５は、重複領域設定処理を実行する（ステップＳ４２）。
【００５８】
ここで、選択した葉ノードの持つ領域データ数が上限を超える場合がある。この場合には、重複領域設定部１３５は、以下の処理を行う。重複領域設定部１３５は、選択した葉ノードの持つ領域データ数が上限を超えるか否かを判定する（ステップＳ４３）。領域データ数が上限を超える場合（ステップＳ４３；Ｙｅｓ）、重複領域設定部１３５は、葉ノードの矩形領域を分割する場合に、分割結果の矩形領域の大きさの和が最小となるように葉ノードを２分割し、親ノードに追加する（ステップＳ４４）。一方、領域データ数が上限を超えない場合（ステップＳ４３；Ｎｏ）、重複領域設定部１３５は、領域データ追加処理を終了する。
【００５９】
さらに、追加する親ノードの持つ子ノード数が上限を超える場合がある。この場合には、重複領域設定部１３５は、以下の処理を行う。重複領域設定部１３５は、追加する親ノードの持つ子ノード数が上限を超えるか否かを判定する（ステップＳ４５）。追加する親ノードの持つ子ノード数が上限を超える場合（ステップＳ４５；Ｙｅｓ）、重複領域設定部１３５は、追加する親ノードがルートノードであるか否かを判定する（ステップＳ４６）。一方、追加する親ノードの持つ子ノード数が上限を超えない場合（ステップＳ４５；Ｎｏ）、重複領域設定部１３５は、領域データ追加処理を終了する。
【００６０】
追加する親ノードがルートノードでないと判定した場合（ステップＳ４６；Ｎｏ）、重複領域設定部１３５は、分割結果の矩形領域の大きさの和が最小となるようにノードを分割する。そして、重複領域設定部１３５は、分割後の増加したノードを分割元のノードの親ノードに追加する（ステップＳ４７）。そして、重複領域設定部１３５は、ステップＳ４５に移行する。
【００６１】
一方、追加する親ノードがルートノードであると判定した場合（ステップＳ４６；Ｙｅｓ）、重複領域設定部１３５は、現在のルートノードを分割し、現在のルートノードの上に新ルートノードを作成する（ステップＳ４８）。そして、重複領域設定部１３５は、領域データ追加処理を終了する。
【００６２】
［重複領域設定処理の手順］
次に、図１１のステップＳ４２に示した重複領域設定処理について、図１２を参照して説明する。図１２は、重複領域設定処理の手順を示すフローチャートである。
【００６３】
重複領域設定部１３５は、領域インデックスＤＢ１２１に基づいて、ルートノードを選択する（ステップＳ５１）。そして、重複領域設定部１３５は、選択した選択ノードが葉ノードであるか否かを判定する（ステップＳ５２）。
【００６４】
選択ノードが葉ノードであると判定した場合（ステップＳ５２；Ｙｅｓ）、重複領域設定部１３５は、選択ノードにある領域データの内、追加領域と重なる領域データの領域を重複領域として選択する（ステップＳ５３）。一例として、重複領域設定部１３５は、領域インデックスＤＢ１２１に基づいて、選択ノードのデータリストを読み出し、読み出したデータリストに含まれる領域データへのポインタ、例えば領域ＩＤを取り出す。そして、重複領域設定部１３５は、領域データＤＢ１２２に基づいて、取り出した領域ＩＤの内、追加領域と重なる部分がある領域ＩＤを重複領域として選択する。そして、重複領域設定部１３５は、ステップＳ５６に移行する。
【００６５】
一方、選択ノードが葉ノードでないと判定した場合（ステップＳ５２；Ｎｏ）、重複領域設定部１３５は、領域インデックスＤＢ１２１に基づいて、選択ノードの子ノードに追加領域と重なるものがあるか否かを判定する（ステップＳ５４）。選択ノードの子ノードに追加領域と重なるものがあると判定した場合（ステップＳ５４；Ｙｅｓ）、重複領域設定部１３５は、重なった子ノードを選択候補ノードに加え（ステップＳ５５）、ステップＳ５６に移行する。また、選択ノードの子ノードに追加領域と重なるものがないと判定した場合（ステップＳ５４；Ｎｏ）、重複領域設定部１３５は、ステップＳ５６に移行する。
【００６６】
続いて、重複領域設定部１３５は、全ての選択候補ノードの検索を終えたか否かを判定する（ステップＳ５６）。全ての選択候補ノードの検索を終えていないと判定した場合（ステップＳ５６；Ｎｏ）、重複領域設定部１３５は、選択候補ノード内の１つの未検索ノードを選択し（ステップＳ５７）、ステップＳ５２に移行する。
【００６７】
一方、全ての選択候補ノードの検索を終えたと判定した場合（ステップＳ５６；Ｙｅｓ）、重複領域設定部１３５は、選択済みの重複領域を追加領域の重複領域に追加する（ステップＳ５８）。一例として、重複領域設定部１３５は、重複領域として選択した領域データを、領域データＤＢ１２２の追加領域に対応する重複領域１２２ｄに追加する。
【００６８】
さらに、重複領域設定部１３５は、追加領域を各選択済みの重複領域に重複領域として追加する（ステップＳ５９）。一例として、重複領域設定部１３５は、追加領域を、領域データＤＢ１２２の重複領域として選択した各領域データに対応する重複領域１２２ｄに追加する。そして、重複領域設定部１３５は、重複領域設定処理を終了する。
【００６９】
［重複領域設定の具体例］
ここで、重複領域設定の具体例を、図１３を参照して説明する。図１３は、重複領域設定の具体例を示す図である。なお、図１３の例では、選択した葉ノードのデータリストには、領域データとして領域ＩＤ「００００１」と「００００２」とが設定されているものとする。また、追加領域を、領域ＩＤとして「０００３４」、データ名として「レストランＣ周辺」、領域情報として「円領域：緯度３５．４９２、緯度１３９．６５０、半径１００ｍ」とする。
【００７０】
重複領域設定部１３５は、選択した葉ノードにある領域データの内、追加領域と重なる領域データの領域を重複領域として選択する。ここでは、重複領域設定部１３５は、葉ノードにある領域データとしての領域ＩＤ「００００１」について、領域に重なる部分があるので、重複領域として選択する。また、重複領域設定部１３５は、葉ノードにある領域データとしての領域ＩＤ「００００２」について、領域に重なる部分がないので、重複領域として選択しない。
【００７１】
そして、重複領域設定部１３５は、重複領域として選択した領域ＩＤを、領域データＤＢ１２２の追加領域の重複領域の欄に追加する。ここでは、重複領域設定部１３５は、領域ＩＤ「００００１」を、領域データＤＢ１２２の領域ＩＤ「０００３４」に対応する重複領域Ｒ１に追加する。
【００７２】
さらに、重複領域設定部１３５は、追加領域の領域ＩＤを、領域データＤＢ１２２の各重複領域の重複領域の欄に追加する。ここでは、重複領域設定部１３５は、追加領域の領域ＩＤ「０００３４」を、領域データＤＢ１２２の重複領域の領域ＩＤ「００００１」に対応する重複領域Ｒ２に追加する。
【００７３】
このようにして、重複領域設定部１３５は、追加領域と、追加領域と重複する各重複領域とを、領域データＤＢ１２２の重複領域の欄に相互に追加するようにした。しかしながら、追加領域が例えば都心から半径１０ｋｍの領域のような広い領域であるような場合、追加領域と重複する重複領域の数が極端に多くなることがある。かかる場合には、重複領域設定部１３５は、追加領域の重複領域の欄に重複領域を追加しないようにして、検索中にその領域が検索結果になった場合にはインデックスＤＢ検索を継続しても良い。重複領域の欄に追加する重複領域の数が極端に多くなると、重複データ検索部１３４による検索処理に時間を要するからである。
【００７４】
そこで、重複領域設定部１３５の処理の変形例として、追加領域と重複する重複領域の数が所定の数以上の場合には、追加領域の重複領域の欄に重複領域を追加しない処理について説明する。なお、所定の数とは、例えば「２００」であったり、インデックスツリーの子ノード数の上限値の１０倍の数であったり、全領域データ数の０．１％の数であったりするが、これに限定されず、検索処理に遅延をきたさない重複領域の数であれば良い。
【００７５】
［重複領域設定処理の変形例の手順］
図１４は、重複領域設定処理の変形例の手順を示すフローチャートである。なお、図１２に示す重複領域設定部１３５の処理と同一の処理Ｓ５１〜Ｓ５９については同一符号を示すことで、その重複する処理の説明については省略する。図１４に示す重複領域設定部１３５の処理が図１２に示す重複領域設定部１３５の処理と異なるところは、Ｓ６１を追加した点にある。
【００７６】
重複領域設定部１３５は、全ての選択候補ノードの検索を終えたか否かを判定し、全ての選択候補ノードの検索を終えたと判定した場合（ステップＳ５６；Ｙｅｓ）、追加領域と重複する重複領域の数が所定の数以上であるか否かを判定する（ステップＳ６１）。追加領域と重複する重複領域の数が所定の数以上でない場合（ステップＳ６１；Ｎｏ）、重複領域設定部１３５は、選択済みの重複領域を追加領域の重複領域に追加する（ステップＳ５８）。続いて、重複領域設定部１３５は、追加領域を各選択済みの重複領域に重複領域として追加する（ステップＳ５９）。
【００７７】
一方、追加領域と重複する重複領域の数が所定の数以上である場合（ステップＳ６１；Ｙｅｓ）、重複領域設定部１３５は、選択済みの重複領域を追加領域の重複領域に追加せず、重複領域には特殊値である「重複数過大」と記録する（ステップＳ６２）。そして、重複領域設定部１３５は、追加領域を各選択済みの重複領域に重複領域として追加する（ステップＳ５９）。
【００７８】
なお、かかる重複領域設定処理によって重複領域に「重複数過大」と記録された領域データ（領域ＩＤ）が追加される場合がある。かかる場合に、検索処理が、この領域データを検索結果に追加した場合であっても、この領域データを使わないで領域インデックスＤＢ１２１を用いた検索を継続するようにする。具体的には、図９Ｂの検索処理のステップＳ１８では、ツリー検索部１３３は、該当領域データの内、重複領域の数が最小の領域データを検索結果に追加する。一例として、ツリー検索部１３３は、領域データＤＢ１２２に記憶された重複領域１２２ｄに基づいて、重複領域の数が最小の領域データ（領域ＩＤ）を検索結果に追加する。ここで、ツリー検索部１３３は、検索結果に「重複数過大」と記録された領域データしかない場合には、この領域データを使わないで領域インデックスＤＢ１２１を用いた検索を継続すべく、ステップＳ１５に移行すれば良い。
【００７９】
［実施例１の効果］
上記実施例１によれば、領域検索サーバ１は、領域を探索する際に用いられるインデックス情報であって複数の領域を含む領域情報とともに前記領域を管理するインデックス情報を領域インデックスＤＢ１２１として記憶部１２に記憶する。そして、領域検索サーバ１は、領域インデックスＤＢ１２１に記憶されたインデックス情報をツリー構造で表したインデックスツリーを用いて、所定の位置を含む領域を検索する。そして、領域検索サーバ１は、該位置を含む領域を検索できた場合、領域データＤＢ１２２に記憶された重複領域に基づいて、検索できた領域の重複領域の中から該位置を含む領域を検索する。そして、領域検索サーバ１は、検索できた領域の情報を出力する。かかる構成によれば、領域検索サーバ１は、インデックスツリーを用いて、所定の位置を含む領域を検索できた場合、インデックスツリーを用いた検索を終了し、検索できた領域の重複領域を用いた検索に移行することとした。このため、領域検索サーバ１は、インデックスツリーを用いて所定の位置を含む領域を１個検索できれば、検索できた領域の重複領域の中から該位置を含む領域を検索すれば良いので、該位置を含む領域検索の検索時間を高速化できる。
【実施例２】
【００８０】
ところで、実施例１に係る領域検索サーバ１では、インデックスツリーを用いて問合せ位置を含む領域を検索し、当該領域を検索できた場合、検索できた領域と重複する重複領域を検索対象として検索する場合を説明した。しかしながら、領域検索サーバ１は、これに限定されず、検索できた領域を次回の検索に活かすべく、前回検索できた領域として記録するようにしても良い。そこで、実施例２では、検索できた領域を前回検索できた領域として記録する領域検索サーバ２について説明する。
【００８１】
［実施例２に係る領域検索サーバの構成］
図１５は、実施例２に係る領域検索サーバの構成を示す機能ブロック図である。なお、図１に示す領域検索サーバ１と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例１と実施例２とが異なるところは、記憶部１２に前回位置ＤＢ２０１を追加した点にある。また、実施例１と実施例２とが異なるところは、制御部１３に前回領域検索部２０２と前回領域記録部２０３とを追加した点にある。
【００８２】
前回位置ＤＢ２０１は、前回領域検索要求があったときに検索できた位置情報を当該要求元に対応付けて管理する。ここで、前回位置ＤＢ２０１のデータ構造の一例を、図１６を参照して説明する。図１６は、前回位置ＤＢ２０１のデータ構造の一例を示す図である。図１６に示すように、前回位置ＤＢ２０１は、センサーＩＤ２０１ａ毎に、前回検索領域２０１ｂを対応付けて記憶する。センサーＩＤ２０１ａは、領域検索要求の要求元のセンサーの識別ＩＤを示す。前回検索領域２０１ｂは、前回領域検索要求があったときに検索できた領域情報を示す。例えば前回検索領域２０１ｂには、検索できた場合に検索できた領域の領域ＩＤが記憶され、検索できなかった場合に「未検出」が記憶される。例えば、センサーＩＤ２０１ａが「Ｓｅｎｓｏｒ０００１」である場合、前回検索領域２０１ｂとして「未検出」と記憶している。また、センサーＩＤ２０１ａが「Ｓｅｎｓｏｒ０００２」である場合、前回検索領域２０１ｂとして「領域ＩＤ０００３４」と記憶している。
【００８３】
図１５に戻って、前回領域検索部２０２は、前回領域検索した際に検索できた領域を用いて、所定の位置情報を含む領域を検索する。例えば、前回領域検索部２０２は、リクエスト受付部１３１によって受け付けられた領域検索要求の中からセンサーＩＤおよび位置情報を取り出す。そして、前回領域検索部２０２は、取り出したセンサーＩＤの前回検索領域を前回位置ＤＢ２０１に記憶しているか否かを判定する。そして、前回領域検索部２０２は、センサーＩＤの前回検索領域を記憶している場合、領域検索要求の中から取り出した位置情報が前回検索領域に含まれるか否かを判定する。そして、前回領域検索部２０２は、取り出した位置情報が前回検索領域に含まれる場合、当該前回検索領域を検索結果に追加し、前回領域検索部２０２の検索処理を終了する。その後、重複データ検索部１３４が、領域データＤＢ１２２に記憶された重複領域に基づいて、検索結果に対応する重複領域の中から当該位置情報を含む重複領域を検索する。そして、重複データ検索部１３４は、検索できた重複領域の領域ＩＤを検索結果に追加する。
【００８４】
また、前回領域検索部２０２は、取り出した位置情報が前回検索領域に含まれない場合、当該位置情報を含む領域をツリー検索部１３３に検索させる。すなわち、ツリー検索部１３３が、領域インデックスＤＢ１２１を用いて、前回検索領域を領域データに持つ葉ノードから当該位置情報を含む領域を検索する。
【００８５】
ツリー検索部１３３は、葉ノードが持つ領域データの内、当該位置情報を含む領域データがあれば、検索できた領域データを検索結果に追加する。その後、重複データ検索部１３４が、領域データＤＢ１２２に記憶された重複領域に基づいて、検索結果に対応する重複領域の中から当該位置情報を含む重複領域を検索する。一方、ツリー検索部１３３は、葉ノードが持つ領域データの内、当該位置情報を含む領域データがなければ、子ノードからルートノードへノードをボトムアップにノードを順番に辿り、当該位置情報を含むノードを選択する。そして、ツリー検索部１３３は、選択したノードの子ノードに、当該位置情報を含むものがあるか否かを、領域インデックスＤＢ１２を用いて判定する。そして、ツリー検索部１３３は、当該位置情報を含む子ノードを選択候補ノードとして追加する。そして、ツリー検索部１３３は、選択候補ノードとして追加されたノードを１つずつ選択し、選択したノードが葉ノードであれば、葉ノードにある領域データの内、当該位置情報を含む領域データがあるか否かを、領域インデックスＤＢ１２１を用いて判定する。そして、ツリー検索部１３３は、当該位置情報を含む領域データが１つでもあれば、いずれか１つの領域データを検索結果に追加し、領域インデックスＤＢ１２１を用いた検索を終了する。その後、重複データ検索部１３４が、領域データＤＢ１２２に記憶された重複領域に基づいて、検索結果に対応する重複領域の中から当該位置情報を含む重複領域を検索する。そして、重複データ検索部１３４は、検索できた重複領域の領域ＩＤを検索結果に追加する。
【００８６】
また、前回領域検索部２０２は、センサーＩＤの前回検索領域を記憶していない場合、ツリー検索部１３３および重複データ検索部１３４による検索処理に移行する。なお、ツリー検索部１３３および重複データ検索部１３４によって行われる検索処理については、実施例１で説明したとおりであるので、その説明を省略する。
【００８７】
前回領域記録部２０３は、領域検索要求があった要求元のセンサーＩＤに対応付けて検索結果を前回位置ＤＢ２０１に記録する。ここで、検索結果に検索できた領域ＩＤが複数ある場合がある。かかる場合には、前回領域記録部２０３は、複数ある領域ＩＤの内、重複領域の数が最小の領域ＩＤを選択し、選択した領域ＩＤを前回位置ＤＢ２０１に記録すれば良い。これにより、次回の領域検索要求で、当該領域検索要求の位置情報が前回記録された領域ＩＤの領域に含まれていれば、続いて行われる当該領域と重複する重複領域に係る検索回数を減らせるからである。
【００８８】
［検索処理の手順］
次に、実施例２に係る検索処理の手順について、図１７〜図１９を参照して説明する。図１７〜図１９は、実施例２に係る検索処理の手順を示すフローチャートである。なお、図１７〜図１９の例では、領域検索要求に含まれる位置情報を検索座標として説明する。
【００８９】
まず、リクエスト受付部１３１によって領域検索要求が受け付けられると、前回領域検索部２０２は、問合せのセンサーＩＤの前回データ（前回検索領域）を前回位置ＤＢ２０１に記憶しているか否かを判定する（ステップＳ７１）。問合せのセンサーＩＤの前回データを前回位置ＤＢ２０１に記憶していると判定した場合（ステップＳ７１；Ｙｅｓ）、前回領域検索部２０２は、検索座標が前回データ内にあるか否かを判定する（ステップＳ７２）。検索座標が前回データ内にある場合（ステップＳ７２；Ｙｅｓ）、前回領域検索部２０２は、前回データを該当データとして検索結果に追加する（ステップＳ７３）。
【００９０】
続いて、重複データ検索部１３４は、領域データＤＢ１２２の重複領域１２２ｄに基づいて、検索結果に追加した領域データの重複領域から未判定のものを読み出し、読み出した重複領域を１つ選択する（ステップＳ７４）。そして、重複データ検索部１３４は、選択した重複領域が検索座標を含むか否かを判定する（ステップＳ７５）。選択した重複領域が検索座標を含むと判定した場合（ステップＳ７５；Ｙｅｓ）、重複データ検索部１３４は、含むと判定した重複領域の領域ＩＤを検索結果に追加し（ステップＳ７６）、ステップＳ７７に移行する。
【００９１】
一方、選択した重複領域が検索座標を含まないと判定した場合（ステップＳ７５；Ｎｏ）、重複データ検索部１３４は、全重複領域の判定を終えていない場合（ステップＳ７７；Ｎｏ）、次の重複領域を判定すべく、ステップＳ７４に移行する。一方、重複データ検索部１３４は、全重複領域の判定を終えた場合（ステップＳ７７；Ｙｅｓ）、作成された検索結果を問合せ側へ返答すべく、レスポンス転送部１３２に出力する（ステップＳ７８）。そして、前回領域記録部２０３は、重複データ検索部１３４によって作成された検索結果の内１つの領域ＩＤを問合せのセンサーＩＤに対応付けて前回位置ＤＢ２０１に記録し（ステップＳ７９）、検索処理を終了する。
【００９２】
ステップＳ７１では、問合せのセンサーＩＤの前回データを前回位置ＤＢ２０１に記憶していない場合（ステップＳ７１；Ｎｏ）、前回領域検索部２０２は、ノードをルートノードからトップダウンに辿る検索処理に移行すべく、ステップＳ１１に移行する。
【００９３】
ステップＳ７２では、検索座標が前回データ内にない場合（ステップＳ７２；Ｎｏ）、前回領域検索部２０２は、ノードをボトムアップに辿る検索処理に移行すべく、ステップＳ８０に移行する。
【００９４】
ステップＳ８０では、ツリー検索部１３３が、領域インデックスＤＢ１２１に基づいて、前回データを領域データとしてデータリストに持つ葉ノードまたは親ノードを選択する（ステップＳ８０）。そして、ツリー検索部１３３は、選択した選択ノードが検索座標を含むか否かを、領域インデックスＤＢ１２１を用いて判定する（ステップＳ８１）。選択ノードが検索座標を含むと判定した場合（ステップＳ８１；Ｙｅｓ）、ツリー検索部１３３は、さらにノードを選択ノードからトップダウンに辿る検索処理に移行すべく、ステップＳ９１に移行する。
【００９５】
一方、選択ノードが検索座標を含まないと判定した場合（ステップＳ８１；Ｎｏ）、ツリー検索部１３３は、選択ノードがルートノードであるか否かを、領域インデックスＤＢ１２１を用いて判定する（ステップＳ８２）。選択ノードがルートノードでなければ（ステップＳ８２；Ｎｏ）、ツリー検索部１３３は、親ノードを検索すべく、ステップＳ８０に移行する。
【００９６】
一方、選択ノードがルートノードであれば（ステップＳ８２；Ｙｅｓ）、ツリー検索部１３３は、検索結果無しとして問合せ側へ返答すべく、レスポンス転送部１３２に出力する（ステップＳ８３）。そして、前回領域記録部２０３は、問合せのセンサーＩＤに対応付けて未検出である旨を前回位置ＤＢ２０１に記録し（ステップＳ８４）、検索処理を終了する。
【００９７】
［前回位置ＤＢに前回データを記憶していない場合の検索処理の手順］
次に、図１７のステップＳ７１に示した前回位置ＤＢ２０１に前回データを記憶していない場合の検索処理の手順について、図１８を参照して説明する。なお、図１８に示すように、ステップＳ１１〜ステップＳ２４については、図９と同様の処理手順であるので、その説明を省略する。図９と図１８とが異なる点は、前回領域記録部２０３が検索結果を記録する点にある。
【００９８】
重複データ検索部１３４が全重複領域の判定を終えると（ステップＳ２２；Ｙｅｓ）、作成された検索結果を問合せ側へ返答すべく、レスポンス転送部１３２に出力する（ステップＳ２３）。そして、前回領域記録部２０３は、重複データ検索部１３４によって作成された検索結果の内１つの領域ＩＤを問合せのセンサーＩＤに対応付けて前回位置ＤＢ２０１に記録し（ステップＳ２３Ａ）、検索処理を終了する。
【００９９】
また、ツリー検索部１３３が全ての選択候補ノードの検索を終えると（ステップＳ１５；Ｙｅｓ）、検索結果無しとして問合せ側へ返答すべく、レスポンス転送部１３２に出力する（ステップＳ２４）。そして、前回領域記録部２０３は、問合せのセンサーＩＤに対応付けて未検出である旨を前回位置ＤＢ２０１に記録し（ステップＳ２４Ａ）、検索処理を終了する。
【０１００】
［選択ノードが検索座標を含む場合の検索処理の手順］
次に、図１７のステップＳ８１に示した選択ノードが検索座標を含む場合の検索処理の手順について、図１９を参照して説明する。
【０１０１】
ツリー検索部１３３は、検索座標を含む選択ノードが葉ノードであるか否かを、領域インデックスＤＢ１２１を用いて判定する（ステップＳ９１）。
【０１０２】
選択ノードが葉ノードでないと判定した場合（ステップＳ９１；Ｎｏ）、ツリー検索部１３３は、選択ノードの子ノードに検索座標を含むものがあるか否かを、領域インデックスＤＢ１２１を用いて判定する（ステップＳ９２）。一例として、ツリー検索部１３３は、領域インデックスＤＢ１２１に基づいて、選択ノードの子ノードリストを読み出し、読み出した子ノードリストに含まれるそれぞれの子ノードの矩形領域を読み出す。そして、ツリー検索部１３３は、読み出したそれぞれの子ノードの矩形領域に、検索座標を含むものがあるか否かを判定する。
【０１０３】
選択ノードの子ノードに検索座標を含むものがあると判定した場合（ステップＳ９２；Ｙｅｓ）、ツリー検索部１３３は、検索座標を含む子ノードを選択候補ノードに追加し（ステップＳ９３）、ステップＳ９４に移行する。一方、選択ノードの子ノードに検索座標を含むものがないと判定した場合（ステップＳ９２；Ｎｏ）、ツリー検索部１３３は、ステップＳ９４に移行する。
【０１０４】
続いて、ツリー検索部１３３は、全ての選択候補ノードの検索を終えたか否かを判定する（ステップＳ９４）。全ての選択候補ノードの検索を終えていないと判定した場合（ステップＳ９４；Ｎｏ）、ツリー検索部１３３は、選択候補ノード内の１つの未検索ノードを選択し（ステップＳ９５）、ステップＳ９１に移行する。
【０１０５】
ステップＳ９１では、選択ノードが葉ノードであると判定した場合（ステップＳ９１；Ｙｅｓ）、ツリー検索部１３３は、選択した葉ノードが持つ領域データの内、検索座標を含むものがあるか否かを判定する（ステップＳ９６）。一例として、ツリー検索部１３３は、領域インデックスＤＢ１２１に基づいて、葉ノードであるノードのデータリストを読み出し、読み出したデータリストに含まれる領域データへのポインタ、例えば領域ＩＤを取り出す。そして、ツリー検索部１３３は、領域データＤＢ１２２に基づいて、取り出した領域ＩＤに対応する領域情報１２２ｃに検索座標を含むものがあるか否かを判定する。
【０１０６】
選択した葉ノードが持つ領域データの内、検索座標を含むものがないと判定した場合（ステップＳ９６；Ｎｏ）、ツリー検索部１３３は、次の選択候補ノードを検索すべく、ステップＳ９４に移行する。
【０１０７】
一方、選択した葉ノードが持つ領域データの内、検索座標を含むものがあると判定した場合（ステップＳ９６；Ｙｅｓ）、ツリー検索部１３３は、該当領域データの内の１つを該当データとして検索結果に追加する（ステップＳ９７）。ここで、領域インデックスＤＢ１２１を用いた検索を終了し、ステップＳ７４に移行する。なお、ツリー検索部１３３は、該当領域データの内の１つとして、重複領域の数が最小の領域データを検索結果に追加しても良い。これは、ステップＳ７４以降の重複データ検索部１３４の処理において、さらに検索座標を含む領域を検索する際、検索対象となる重複領域の数を減らすためである。
【０１０８】
ステップＳ９４では、全ての選択候補ノードの検索を終えたと判定した場合（ステップＳ９４；Ｙｅｓ）、ツリー検索部１３３は、選択ノードに検索座標を含むものがないので、さらに親ノードから検索すべく、ステップＳ８０に移行する。
【０１０９】
このようにして、重複領域設定部１３５は、領域検索要求の検索座標（位置情報）を領域データに含む場合に、当該領域データを前回位置ＤＢ２０１に記録するようにした。また、ツリー検索部１３３は、検索座標（位置情報）を領域データに全く含まない場合に、未検出である旨を前回位置ＤＢ２０１に記録するようにした。しかしながら、ツリー検索部１３３は、検索座標（位置情報）を領域データに全く含まない場合であっても、検索座標を含むノードがあれば、当該ノードの内最も深いノード（最深ノード）を前回位置ＤＢ２０１に記録するようにしても良い。これは、次回の領域検索要求の際、前回の検索座標を含むノードの内最深ノードから領域検索を行うことで、領域検索にヒットする確率を高くできるとともに、且つ検索回数を減らすことができる可能性があるからである。
【０１１０】
［検索処理の変形例の手順］
図２０、図２１は、実施例に係る検索処理の変形例の手順を示すフローチャートである。なお、図１７に示す検索処理と同一の処理Ｓ７１〜Ｓ８３については同一符号を示すことで、その重複する処理の説明については省略する。また、図１９に示す、選択ノードが検索座標を含む場合の検索処理と同一の処理Ｓ９１〜Ｓ９７については同一符号を示すことで、その重複する処理の説明については省略する。
【０１１１】
図２０に示す検索処理が図１７に示す検索処理と異なる点は、Ｓ９１、Ｓ９２を追加した点にある。図２０に示すように、前回領域検索部２０２は、問合せのセンサーＩＤの前回データ（前回検索領域）を前回位置ＤＢ２０１に記憶しているか否かを判定する（ステップＳ７１）。問合せのセンサーＩＤの前回データを前回位置ＤＢ２０１に記憶していると判定した場合（ステップＳ７１；Ｙｅｓ）、前回領域検索部２０２は、前回データが領域データ（領域ＩＤ）か否かを判定する（ステップＳ９１）。前回データが領域データである場合には（ステップＳ９１；Ｙｅｓ）、前回領域検索部２０２は、ステップＳ７２に移行する。一方、前回データが領域データでない場合には（ステップＳ９１；Ｎｏ）、前回領域検索部２０２は、前回データのノードを選択し（ステップＳ９２）、ステップＳ８１に移行する。
【０１１２】
また、図２０に示す検索処理が図１７に示す検索処理と異なる点は、Ｓ１２１〜Ｓ１２３を追加した点にある。図２０に示すように、ツリー検索部１３３は、選択ノードがルートノードであるか否かを、領域インデックスＤＢ１２１を用いて判定する（ステップＳ８２）。選択ノードがルートノードでなければ（ステップＳ８２；Ｎｏ）、ツリー検索部１３３は、親ノードを検索すべく、ステップＳ８０に移行する。一方、選択ノードがルートノードであれば（ステップＳ８２；Ｙｅｓ）、ツリー検索部１３３は、検索結果無しとして問合せ側へ返答すべく、レスポンス転送部１３２に出力する（ステップＳ８３）。そして、前回領域記録部２０３は、最深該当ノードがあるか否かを判定する（ステップＳ１２１）。最深該当ノードがあれば（ステップＳ１２１；Ｙｅｓ）、前回領域記録部２０３は、前回位置ＤＢ２０１に最深該当ノードを問合せのセンサーＩＤに対応付けて記録し（ステップＳ１２２）、検索処理を終了する。一方、最深該当ノードがなければ（ステップＳ１２１；Ｎｏ）、前回領域記録部２０３は、問合せのセンサーＩＤに対応付けて未検出である旨を前回位置ＤＢ２０１に記録し（ステップＳ１２３）、検索処理を終了する。
【０１１３】
図２１に示す、選択ノードが検索座標を含む場合の検索処理が図１９に示す、同様の検索処理と異なる点は、Ｓ１０１、Ｓ１０２を追加した点にある。図２１に示すように、ツリー検索部１３３は、選択ノードが最深該当ノードより深いか否かを判定する（ステップＳ１０１）。選択ノードが最深該当ノードより深い場合には（ステップＳ１０１；Ｙｅｓ）、ツリー検索部１３３は、選択ノードを最深該当ノードとして一時的に記憶部１２に記録し（ステップＳ１０２）、ステップＳ９１に移行する。一方、選択ノードが最深該当ノードより深くない場合には（ステップＳ１０１；Ｎｏ）、ツリー検索部１３３は、ステップＳ９１に移行する。
【０１１４】
また、図２１に示す、選択ノードが検索座標を含む場合の検索処理が図１９に示す、同様の検索処理と異なる点は、Ｓ１０３、Ｓ１０４を追加した点にある。図２１に示すように、選択ノードが葉ノードでない場合（ステップＳ９１；Ｎｏ）且つ選択ノードの子ノードに検索座標を含むものがある場合（ステップＳ９２；Ｙｅｓ）、ツリー検索部１３３は、以下の処理を行う。ツリー検索部１３３は、検索座標を含む子ノードを選択候補ノードに追加し（ステップＳ９３）、当該子ノードが最深該当ノードより深いか否かを判定する（ステップＳ１０３）。そして、当該子ノードが最深該当ノードより深い場合（ステップＳ１０３；Ｙｅｓ）、ツリー検索部１３３は、子ノードを最深該当ノードとして一時的に記憶部１２に記録し（ステップＳ１０４）、ステップＳ９４に移行する。一方、当該子ノードが最深該当ノードより深くない場合（ステップＳ１０３；Ｎｏ）、ツリー検索部１３３は、ステップＳ９４に移行する。
【０１１５】
［最深ノードの説明］
ここで、最深ノードの具体例について、図２２を参照して説明する。図２２は、最深ノードの具体例を説明する図である。図２２に示すように、ルートノードＲ０は、中間ノードＲ１〜Ｒ４の矩形領域を全て含む矩形領域であり、中間ノードＲ１は、子ノードＲ５〜Ｒ８の矩形領域を全て含む矩形領域である。領域検索要求の位置情報をＰ０で示す検索座標とすると、検索座標Ｐ０は、ルートノードＲ０に含まれ、且つ中間ノードＲ１に含まれている。ところが、検索座標Ｐ０は、中間ノードＲ２〜Ｒ４や、中間ノードＲ１に含まれる子ノードＲ５〜Ｒ８に含まれない。そこで、ツリー検索部１３３は、最深ノードを、検索座標Ｐ０を含むノードの内最も深いノードであるＲ１とする。そして、前回領域記録部２０３は、前回位置ＤＢ２０１に最深ノードＲ１を領域検索要求のセンサーＩＤに対応付けて記録する。
【０１１６】
［実施例２の効果］
上記実施例２によれば、領域検索サーバ２は、所定の位置を含む領域検索要求を取得すると、該位置が前回検索できた領域に含まれるか否かを判定する。そして、領域検索サーバ２は、判定の結果、該位置が前回検索できた領域に含まれると判定された場合、領域データＤＢ１２２に基づいて、含まれると判定された領域の重複領域の中から該位置を含む領域を検索する。かかる構成によれば、領域検索サーバ２は、次回の領域検索を前回検索できた領域から行うこととした。仮に、領域検索要求を行う要求元が領域の大きさに対して小さい移動距離しか移動しないような場合には、次回の領域検索要求の位置が前回検索できた領域の近傍にある可能性が高くなる。このため、領域検索サーバ２は、前回検索できた領域から次回の領域検索を行うことにより次回の位置を含む領域検索の検索時間を高速化できる。
【０１１７】
また、上記実施例２によれば、領域検索サーバ２は、所定の位置を含む領域検索要求を取得すると、該位置が前回検索できた領域に含まれるか否かを判定する。そして、領域検索サーバ２は、判定の結果、該位置が前回検索できた領域に含まれないと判定された場合、ツリー構造を形成するノードの中で、含まれないと判定された領域を含むインデックスの葉ノードから該位置を含む領域を検索する。そして、領域検索サーバ２は、該位置を含む領域を検索できた場合、検索できた情報の重複領域の中から該位置を含む領域を検索する。かかる構成によれば、領域検索サーバ２は、次回の領域検索を前回検索できた領域から行うこととした。仮に、領域検索要求を行う要求元が領域の大きさに対して小さい移動距離しか移動しないような場合には、次回の領域検索要求の位置が前回検索できた領域の近傍にある可能性が高くなる。このため、領域検索サーバ２は、次回の領域検索要求の位置が前回検索できた領域に含まれていなくても、当該位置が前回検索できた領域の近傍を含むインデックスの葉ノードから次回の領域検索を行うことにより次回の位置を含む領域検索の検索時間を高速化できる。
【０１１８】
［領域検索の検索回数の比較結果］
ここで、ルートノードから検索を開始した場合と、前回検索できた領域から検索を開始した場合との領域検索の検索回数の比較結果を、図２３を参照して説明する。図２３は、検索回数の比較結果を説明する図である。図２３に示すように、Ｒツリーは、深さ５のインデックスツリーである。そして、ルートノードＲ０は、深さが１のノードＲ１等の矩形領域を全て含む矩形領域である。ノードＲ１は、深さが２のノードＲ２等の矩形領域を全て含む矩形領域である。ノードＲ２は、深さが３のノードＲ３等の矩形領域を全て含む矩形領域である。ノードＲ３は、深さが４のノードＲＡ、ＲＢの矩形領域を全て含む矩形領域である。ノードＲＡは、Ａ１、Ａ２、Ａ３の領域データを含む。ノードＲＢは、Ｂ１、Ｂ２、Ｂ３の領域データを含む。そして、Ａ２は、Ａ１、Ａ３、Ｂ１と重複する重複領域である。Ａ３は、Ａ１、Ａ２、Ｂ１と重複する重複領域である。
【０１１９】
まず、領域検索サーバ２は、最初にＰ２の位置を含む領域検索要求の領域検索を行った結果、Ｐ２の位置を含む領域データＡ２、Ｂ１の内、Ａ２を前回検索領域として前回位置ＤＢ２０１に記録したものとする。そして、領域検索サーバ２は、次回、Ｐ３の位置を含む領域検索要求の領域検索を行うとする。すると、領域検索サーバ２によって行われる検索回数Ｎ１は、以下のようになる。
Ｎ１＝１（Ａ２）＋３（Ａ２の重複領域）＝４
すなわち、Ｎ１は、Ｐ３の位置がＡ２の領域に含まれるかを検索する１回と、Ｐ３の位置がＡ２の領域に含まれているので、Ａ２の領域と重複する重複領域Ａ１、Ａ３、Ｂ１にＰ３の位置が含まれているかを検索する３回とを加算した値４となる。
【０１２０】
一方、ルートノードから検索を開始した場合には、検索回数Ｏ１は、以下のようになる。なお、各ノードの子ノードが３であるとする。
Ｏ１＝４×３（Ｒ０〜Ｒ３）＋３（ＲＡ）＋３（ＲＢ）＝１８
すなわち、Ｏ１には、Ｒ０〜Ｒ３の４個のノードについて各子ノードの数（３）分Ｐ３の位置が各ノードに含まれるかを検索する１２回が設定される。さらに、Ｐ３の位置がＲＡ、ＲＢに含まれているので、ＲＡに含まれる３個の領域データにＰ３の位置が含まれているかを検索する３回をＯ１に加算した１５回が設定される。さらに、ＲＢに含まれる３個の領域データにＰ３の位置が含まれているかを検索する３回をＯ１に加算した１８回が設定される。
【０１２１】
領域検索サーバ２が次回の領域検索を行った結果、Ｐ３の位置を含む領域データＡ１、Ａ２、Ａ３、Ｂ１の内、Ａ２を前回検索領域として前回位置ＤＢ２０１に記録したものとする。そして、領域検索サーバ２は、さらに次回、Ｐ４の位置を含む領域検索要求の領域検索を行うとする。すると、領域検索サーバ２によって行われる検索回数Ｎ２は、以下のようになる。
Ｎ２＝１（Ａ２）＋３（ＲＡ）＋３（Ａ３の重複領域）＝７
すなわち、Ｎ２には、Ｐ４の位置がＡ２の領域に含まれるかを検索する１回が設定される。さらに、Ｐ４の位置がＡ２の領域に含まれていないので、Ａ２のノードＲＡに含まれる３個の領域データにＰ４の位置が含まれているかを検索する３回をＮ２に加算した４回が設定される。さらに、Ｐ４の位置がＡ３の領域に含まれているので、Ａ３の領域と重複する重複領域Ａ１、Ａ２、Ｂ１にＰ４の位置が含まれているかを検索する３回をＮ２に加算した７回が設定される。一方、ルートノードから検索を開始した場合には、検索回数Ｏ１、すなわち１８回となる。
【０１２２】
このようにして、領域検索サーバ２は、前回検索領域から次回の領域検索を行うことにより次回の位置を含む領域検索の検索回数を、ルートノードから検索を開始した場合の検索回数より少なくでき、検索時間を高速化できる。
【０１２３】
なお、重複領域設定部１３５の処理の変形例として、追加領域と重複する重複領域が所定の数以上の場合には、追加領域の重複領域の欄に重複領域を追加しないようにした。しかしながら、重複領域設定部１３５は、これに限定されず、追加領域と重複する重複領域が所定の数以上の場合には、追加領域の重複領域の欄に「重複領域数過多」である旨の情報を追加するようにしても良い。
【０１２４】
また、前回位置ＤＢ２０１は、センサーＩＤ２０１ａと前回検索領域２０１とを対応付けるものとして説明した。しかしながら、前回位置ＤＢ２０１は、センサーＩＤ２０１ａを、例えば、領域検索を要求する端末装置の装置ＩＤに代えても良いし、領域検索を要求する携帯電話の携帯電話番号に代えても良い。すなわち、センサーＩＤ２０１ａに相当するＩＤは、ユースケース毎に変えることができる。
【０１２５】
また、ツリー検索部１３３は、検索座標（位置情報）を領域データに全く含まない場合であっても、検索座標を含むノードがあれば、当該ノードの内最も深いノード（最深ノード）を前回位置ＤＢ２０１に記録するようにした。ここで、同じ深さで複数の最深ノードが存在する場合がある。かかる場合には、ツリー検索部１３３は、例えば最深ノード毎に有する子ノードの数が最小の最深ノードを前回位置ＤＢ２０１に記録すれば良い。また、別の例では、ツリー検索部１３３は、最深ノード毎に有する矩形領域の面積あたりの子ノードの数が最小の最深ノードを前回位置ＤＢ２０１に記録する。具体的には、ツリー検索部１３３は、最深ノード毎に、子ノードリストの子ノード数を矩形領域の面積で割った値を算出し、算出した値が最小の最深ノードを選択し、選択した最深ノードを前回位置ＤＢ２０１に記録する。つまり、次回の検索量が少なくなるノードであることが望ましいのである。
【０１２６】
［プログラムなど］
なお、領域検索サーバ１、２は、既知のパーソナルコンピュータ、ワークステーションなどの情報処理装置に、上記したツリー検索部１３３、重複データ検索部１３４などの各機能を搭載することによって実現することができる。
【０１２７】
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、ツリー検索部１３３と重複データ検索部１３４とを１個の部として統合しても良い。一方、ツリー検索部１３３を、葉ノードにおける検索処理と葉ノード以外のノードにおける検索処理とに分散しても良い。また、領域データＤＢ１２２などの記憶部を領域検索サーバ１、２の外部装置としてネットワーク経由で接続するようにしても良い。
【０１２８】
また、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図１に示した領域検索サーバ１と同様の機能を実現する領域検索プログラムを実行するコンピュータの一例を説明する。図２４は、領域検索プログラムを実行するコンピュータの一例を示す図である。
【０１２９】
図２４に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０１と、ユーザからのデータの入力を受け付ける入力装置２０２と、ディスプレイ２０３を有する。また、コンピュータ２００は、記憶媒体からプログラム等を読取る読み取り装置２０４と、ネットワークを介して他のコンピュータとの間でデータの授受を行うインタフェース装置２０５とを有する。また、コンピュータ２００は、各種情報を一時記憶するＲＡＭ２０６と、ハードディスク装置２０７を有する。そして、各装置２０１〜２０７は、バス２０８に接続される。
【０１３０】
ハードディスク装置２０７は、領域検索プログラム２０７ａ、重複領域設定プログラム２０７ｂを記憶する。ＣＰＵ２０１は、各プログラム２０７ａ〜２０７ｂを読み出して、ＲＡＭ２０６に展開する。領域検索プログラム２０７ａは、領域検索プロセス２０６ａとして機能する。重複領域設定プログラム２０７ｂは、重複領域設定プロセス２０６ｂとして機能する。
【０１３１】
例えば、領域検索プロセス２０６ａは、ツリー検索部１３３および重複データ検索部１３４に対応する。重複領域設定プロセス２０６ｂは、重複領域設定部１３５に対応する。
【０１３２】
なお、各プログラム２０７ａ〜２０７ｂについては、必ずしも最初からハードディスク装置２０７に記憶させておかなくてもよい。例えば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ２００がこれらから各プログラム２０７ａ〜２０７ｂを読み出して実行するようにしても良い。
【０１３３】
以上の実施例１〜２を含む実施形態に関し、さらに以下の付記を開示する。
【０１３４】
（付記１）コンピュータが
領域を探索する際に用いられるインデックス情報であって複数の領域を含む領域情報とともに前記領域を管理するインデックス情報をツリー構造で表したインデックスツリーを用いて、所定の位置を含む領域を検索し、
該位置を含む領域を検索できた場合、複数の領域のそれぞれについて領域と重複する重複領域の情報を記憶した記憶部に基づいて、検索できた領域の重複領域の中から該位置を含む領域を検索し、
検索できた領域の情報を出力する
ことを実行する領域検索方法。
【０１３５】
（付記２）所定の位置を含む領域の問合せ要求を取得すると、該位置が前回検索できた領域に含まれるか否かを判定し、
判定の結果、該位置が前回検索できた領域に含まれると判定された場合、前記記憶部に基づいて、含まれると判定された領域の重複領域の中から該位置を含む領域を検索することを特徴とする付記１に記載の領域検索方法。
【０１３６】
（付記３）前記判定の結果、該位置が前回検索できた領域に含まれないと判定された場合、前記ツリー構造を形成するノードの中で、含まれないと判定された領域を含むインデックス情報の葉ノードから該位置を含む領域を検索し、
該位置を含む領域を検索できた場合、検索できた情報の重複領域の中から該位置を含む領域を検索することを特徴とする付記２に記載の領域検索方法。
【０１３７】
（付記４）前記領域を検索する処理において、検索できた領域が複数ある場合、複数ある領域の内、重複領域の数が最も小さい領域を選択することを特徴とする付記２または付記３に記載の領域検索方法。
【０１３８】
（付記５）前記記憶部に記憶する処理は、領域と重複する重複領域が所定の値を超える場合、当該領域に関する重複領域の情報を記憶しないことを特徴とする付記１に記載の領域検索方法。
【０１３９】
（付記６）コンピュータに、
領域を探索する際に用いられるインデックス情報であって複数の領域を含む領域情報とともに前記領域を管理するインデックス情報をツリー構造で表したインデックスツリーを用いて、所定の位置を含む領域を検索し、
該位置を含む領域を検索できた場合、複数の領域のそれぞれについて領域と重複する重複領域の情報を記憶した記憶部に基づいて、検索できた領域の重複領域の中から該位置を含む領域を検索し、
検索できた領域の情報を出力する
各処理を実行させることを特徴とする領域検索プログラム。
【０１４０】
（付記７）複数の領域のそれぞれについて領域と重複する重複領域の情報を記憶した記憶部と、
領域を探索する際に用いられるインデックス情報であって複数の領域を含む領域情報とともに前記領域を管理するインデックス情報をツリー構造で表したインデックスツリーを用いて、所定の位置を含む領域を検索する第１の検索部と、
前記第１の検索部によって該位置を含む領域を検索できた場合、前記記憶部に基づいて、検索できた領域の重複領域の中から該位置を含む領域を検索する第２の検索部と、
前記第１の検索部および前記第２の検索部によって検索できた領域の情報を出力する出力部と
を有することを特徴とする情報処理装置。
【符号の説明】
【０１４１】
１、２  領域検索サーバ
１１  通信インタフェース
１２  記憶部
１２１  領域インデックスＤＢ
１２２  領域データＤＢ
１３  制御部
１３１  リクエスト受付部
１３２  レスポンス転送部
１３３  ツリー検索部
１３４  重複データ検索部
１３５  重複領域設定部
２０１  前回位置ＤＢ
２０２  前回領域検索部
２０３  前回領域記録部
【図１】
0005776403.tif 000002
【図２】
0005776403.tif 000003
【図３】
0005776403.tif 000004
【図４】
0005776403.tif 000005
【図５】
0005776403.tif 000006
【図６】
0005776403.tif 000007
【図７】
0005776403.tif 000008
【図８】
0005776403.tif 000009
【図９Ａ】
0005776403.tif 000010
【図９Ｂ】
0005776403.tif 000011
【図１０】
0005776403.tif 000012
【図１１】
0005776403.tif 000013
【図１２】
0005776403.tif 000014
【図１３】
0005776403.tif 000015
【図１４】
0005776403.tif 000016
【図１５】
0005776403.tif 000017
【図１６】
0005776403.tif 000018
【図１７】
0005776403.tif 000019
【図１８】
0005776403.tif 000020
【図１９】
0005776403.tif 000021
【図２０】
0005776403.tif 000022
【図２１】
0005776403.tif 000023
【図２２】
0005776403.tif 000024
【図２３】
0005776403.tif 000025
【図２４】
0005776403.tif 000026
【図２５】
0005776403.tif 000027