(57)【特許請求の範囲】
【請求項１】
ｎ次元部分空間内の領域を示す座標データを、所定の領域コードに基づいてソートした状態で複数領域分格納したインデクスと、このインデクス中から所定の領域を示す座標データを探索する探索手段と、前記インデクスを生成するインデクス生成手段を備え、
前記インデクス中における各領域を示す各座標データは、有限で離散的なｎ次元部分空間内の点または領域を表す座標データを、各次元の座標をそれぞれ２進表示した固定長ビット列によって表示し、各次元の座標の上位桁である前方列から成る数字列によって、それと同一の上位桁を有するｎ次元座標データを全て含み、かつ、上位桁が異なる座標データは全く含まないｎ次元部分空間内の領域である部分集合に対応づけて構成され、
前記インデクス生成手段は、前記インデクスに含まれる各領域を示す座標データについて、各座標データを構成する固定長ビット列の上位桁から各次元ごとに予め定めておいた所定桁数ずつ順次取り出して成る複数の部分列を、予め定めておいた各次元の順に連接することにより新たな２進表示の固定長ビット列の数値からなる領域コードを生成し、この領域コードを所定の辞書順にソートすることにより、前記インデクスを生成することを特徴とするデータ管理装置。
【請求項２】
前記インデクス生成手段は、前記インデクスに含まれる各次元の座標データを構成するそれぞれの固定長ビット列について、その上位桁からある前方列が一致しているものを相続くように並べた上で、それらの前方列がさらにどこまで一致するかを決定し、（新たに一致した長さ＋１）の値に基づいて領域コードを生成することを特徴とする請求項１に記載のデータ管理装置。
【請求項３】
前記インデクスへの座標の追加及び削除を行うインデクス変更手段を備え、前記インデクス変更手段は、前記領域コードに基づいてインデクスを二分探索し、領域コードによるソート順に矛盾しない位置に新たな座標を挿入することにより、前記インデクスに座標を追加することを特徴とする請求項１に記載のデータ管理装置。
【請求項４】
前記探索手段が、指定された範囲に含まれる座標を探索する範囲探索手段である請求項１乃至請求項３のいずれか一に記載のデータ管理装置。
【請求項５】
前記探索手段が、指定された座標に最も近い座標を探索する最近座標探索手段である請求項１乃至請求項３のいずれか一に記載のデータ管理装置。
【請求項６】
前記インデクスが、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらのうちの少なくとも一つを決定する機能を備えていることを特徴とする請求項１乃至請求項５のいずれか一に記載のデータ管理装置。
【請求項７】
前記インデクスが、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらをすべて列挙する機能を備えていることを特徴とする請求項１乃至請求項５のいずれか一に記載のデータ管理装置。
【請求項８】
前記インデクスが、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらの数を計数する機能を備えていることを特徴とする請求項１乃至請求項５のいずれか一に記載のデータ管理装置。
【請求項９】
前記インデクスに座標を格納する際、座標または領域コードと、座標から領域コードを生成しあるいは領域コードから座標を復元するための元分割とを格納することを特徴とする請求項１乃至請求項５のいずれか一に記載のデータ管理装置。
【請求項１０】
前記範囲探索手段が、インデクス中のある座標の前方列を前方列とする座標が、すべて指定範囲に含まれている場合に、インデクス中でそれを前方列とする座標は、一括して指定範囲に含まれていると判定することを特徴とする請求項４に記載のデータ管理装置。
【請求項１１】
前記範囲探索手段が、インデクス中のある座標の前方列を前方列とする座標で、指定範囲に含まれるものがあり得る場合に、インデクス中でそれを前方列とする座標の数が所定の数以下ならば、それらすべての座標について指定範囲に含まれているか否かの判定を実行することを特徴とする請求項４に記載のデータ管理装置。
【請求項１２】
前記最近座標探索手段が、インデクス中のある座標の前方列を前方列とする座標が、すべて指定座標から最近座標候補との距離以内にある場合に、インデクス中でそれを前方列とする座標のいずれか一つを新たな最近座標候補とすることを特徴とする請求項５に記載のデータ管理装置。
【請求項１３】
前記最近座標探索手段が、インデクス中のある座標の前方列を前方列とする座標で、指定座標から最近座標候補との距離以内のものがあり得る場合に、インデクス中でそれを前方列とする座標の数が所定の数以下ならば、それらすべての座標について新たな最近座標候補になり得るか否かを判定し、判定の結果、より指定座標に近い座標があれば、最も近いものを新たな最近座標候補とすることを特徴とする請求項５に記載のデータ管理装置。
【請求項１４】
前記最近座標探索手段が、インデクス中の座標の前方列を最近座標候補を探索すべき領域を表すものとしてスタックに格納しておき、スタックから取り出した前方列に関して、それを前方列とする座標で、指定座標から最近座標候補との距離より近いものがあり得ない場合には、それらを探索の対象としないことを特徴とする請求項５に記載のデータ管理装置。
【請求項１５】
前記最近座標探索手段が、インデクス中の座標の前方列を最近座標候補を探索すべき領域を表すものとして、それを前方列とする座標で指定座標から最も近い座標との距離と共に格納しておき、その距離が最小の前方列を最近座標候補を探索すべき対象として選択し、その距離が指定座標と最近座標候補との距離以上の場合には探索を終了することを特徴とする請求項５に記載のデータ管理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、２次元またはそれ以上の多次元空間中での位置を表す座標データ等のデータの管理に適したデータ管理装置、データ管理方法及びデータ管理プログラムを記録した媒体に関するものである。より具体的には、平面あるいは空間内における座標データについて、登録、削除、変更、探索（例えば、範囲探索、最近座標探索）などの処理を、単独で、あるいは適宜組み合わせて実施することのできるデータ管理装置に関する。
【０００２】
【従来の技術】
従来から、複数の属性を有するデータをコンピュータを用いて管理する手法が数多く提案されている。例えば、画像処理、コンピュータビジョン、図面管理などの分野においては、ベクトル、点、記号などの大量の図形要素により表される膨大な図面をコンピュータにより管理し、データの登録、削除を行ったり、所望の図面を探索し、変更する作業が必要とされている。
【０００３】
このようなデータ管理方法として、従来から知られているものにｑｕａｄ−ｔｒｅｅ法がある。
このｑｕａｄ−ｔｒｅｅ法では、領域を２次元平面の各軸に平行な面で４等分割する。分割された１つの空間に含まれるデータ数がＰ以下になるまで再帰的に分割を繰り返し、この過程を４分木として記憶する。このｑｕａｄ−ｔｒｅｅ法は、例えば、ＡＣＭ  Ｃｏｍｐｕｔｉｎｇ  Ｓｕｒｖｅｙｓ，  Ｖｏｌ，２０，Ｎｏ．４  Ｄｅｃｅｍｂｅｒ  １９８８に記載されている。
【０００４】
この分割法では、葉の分割時にそれに対応する子ノードを新設するだけであるため、木構造の管理は容易となる。また、領域を等分割するため、分割位置は簡単に特定でき、個々の分割軸を記憶しておく必要はないといった利点がある。  一方、ｑｕａｄ−ｔｒｅｅ法では、データの分布を無視した等面積分割が行われるため、データの分布が一様でない場合に、木のバランス性およびメモリの利用効率が極端に低下するという欠点がある。
【０００５】
ここで、ｑｕａｄ−ｔｒｅｅ法を用いた場合のデータの格納方法について説明する。
すなわち、図１３（Ａ）に示した各領域は、図１３（Ｂ）に示した木構造において、それぞれ同一の番号を付したノードに対応づけられている。従って、図１３（Ａ）の斜線で示した領域は、図１３（Ｂ）の黒いノードに対応している。なお、この図１３は、前記の文献第２７４頁のＦｉｇｕｒｅ  ３を転記したものである。
【０００６】
しかしながら、このようなデータ構造において、図１３（Ａ）の斜線で示した領域（あるいは、その領域に含まれるデータ）を列挙するには、部分木全体をｔｒａｖｅｒｓｅする必要がある。
【０００７】
【発明が解決しようとする課題】
上述したように、ｑｕａｄ−ｔｒｅｅ法のような従来のデータ管理方法において、データを格納するインデクスとして木構造を用いた場合、ある部分範囲に含まれる点データを、あるノードを根とする部分木の内部ノード（ｉｎｔｅｒｎａｌ  ｎｏｄｅ）や／または（ａｎｄ／ｏｒ）外部ノード（ｅｘｔｅｒｎａｌ  ｎｏｄｅ）に登録された点データとして決定することはできるが、それらを列挙するには、部分木全体をｔｒａｖｅｒｓｅする必要がある。
【０００８】
また、このような木構造のインデクスでは、含まれている点データが多い部分範囲は大きな部分木に対応するという傾向は不可避であるから、１つの点データを列挙するのに要するｔｒａｖａｒｓｅの時間的ｏｖｅｒｈｅａｄは、点データの数が多い場合でも軽減されない。そればかりか、かえって大きな部分木を効率的にｔｒａｖｅｒｓｅしようとすれば、スタックやフラグ領域（各ノードに設けて、そのノードをｔｒａｖｅｒｓｅした状況を表す）のような余分な記憶領域が必要になる。
【０００９】
このように、従来のデータ構造は記憶領域が余分に必要になるだけでなく、その量がデータの性質によって左右される。しかも、ある範囲に含まれていることが明らかになったデータを列挙するのに、そのデータ構造を逐一たどってデータに到達しなければならないため、効率が良くないという欠点があった。
【００１０】
また、多くの場合、変更に容易に対応し得る反面、変更が生じない、あるいは変更の頻度が低いデータに対しては、効率的なデータ構造とはいえない。
さらに、従来のデータ構造は、狭い範囲のあまりばらつきの大きくないデータを扱うのには向いているが、制限のゆるい、ダイナミックレンジ（精度のばらつき）が大きいデータを扱うのには、効率的ではない。例えば、ｘ軸とｙ軸で値の精度が違う場合、正規化しなければならないが、その基準がないという問題があった。
【００１１】
また、従来のデータ管理方法においては、範囲探索に関して、ある範囲に含まれていることが明らかになったデータに対する効率的なアクセスの手段が開示されておらず、最近座標探索手段に関しても、効率的なものが具体的に開示されていなかった。
【００１２】
本発明は、上記のような従来技術の問題点を解決するために提案されたもので、その目的は、データ領域を効率的に使用でき、探索効率を大幅に向上させることができるデータ管理装置を提供することにある。
【００１３】
【課題を解決するための手段】
前記の目的を達成するため、請求項１に記載のデータ管理装置は、ｎ次元部分空間内の領域を示す座標データを、所定の領域コードに基づいてソートした状態で複数領域分格納したインデクスと、このインデクス中から所定の領域を示す座標データを探索する探索手段と、前記インデクスを生成するインデクス生成手段を備え、前記インデクス中における各領域を示す各座標データは、有限で離散的なｎ次元部分空間内の点または領域を表す座標データを、各次元の座標をそれぞれ２進表示した固定長ビット列によって表示し、各次元の座標の上位桁である前方列から成る数字列によって、それと同一の上位桁を有するｎ次元座標データを全て含み、かつ、上位桁が異なる座標データは全く含まないｎ次元部分空間内の領域である部分集合に対応づけて構成され、前記インデクス生成手段は、前記インデクスに含まれる各領域を示す座標データについて、各座標データを構成する固定長ビット列の上位桁から各次元ごとに予め定めておいた所定桁数ずつ順次取り出して成る複数の部分列を、予め定めておいた各次元の順に連接することにより新たな２進表示の固定長ビット列の数値からなる領域コードを生成し、この領域コードを所定の辞書順にソートすることにより、前記インデクスを生成することを特徴とする。
【００１６】
上記のような構成を有する請求項１に記載の発明によれば、インデクスの各座標データが、各次元の座標を前方から特定の長さ取り、これを一定の次元順に連接して成る領域コードの辞書順にソートされているので、この領域コードに基づいて、座標データを探索することができるので、探索処理の効率が大幅に向上する。
【００１７】
本発明の実施の態様の一つは、前記インデクスに含まれる各次元の座標データを構成するそれぞれの固定長ビット列について、その上位桁からある前方列が一致しているものを相続くように並べた上で、それらの前方列がさらにどこまで一致するかを決定し、（新たに一致した長さ＋１）の値に基づいて領域コードを生成することを特徴とする。
【００２０】
このような構成によれば、インデクス生成手段によって、ｎ次元の座標データのそれぞれについて、所定のルールに基づいて領域コードを生成し、前記座標データをこの領域コードの辞書順にソートすることにより、インデクスを生成することができる。
【００２１】
本発明の実施の態様の一つは、前記インデクスへの座標の追加及び削除を行うインデクス変更手段を備え、前記インデクス変更手段は、前記領域コードに基づいてインデクスを二分探索し、領域コードによるソート順に矛盾しない位置に新たな座標を挿入することにより、前記インデクスに座標を追加することを特徴とするものである。
【００２４】
このような構成によれば、インデクス変更手段により、インデクスへの座標の追加・削除が可能となる。また、この場合、座標の追加・削除に伴って必要となるインデクスの修正もなされるので、探索の精度は保持される。なお、空のインデクスに対して、探索対象となる座標をインデクス変更手段を用いて逐次追加すれば、インデクスを生成できるから、インデクス変更手段はインデクス生成機能も兼ね備えているということができる。
【００２５】
本発明の実施の態様の一つは、前記探索手段が、指定された範囲に含まれる座標を探索する範囲探索手段であることを特徴とするものである。
【００２８】
このような構成によれば、データ管理装置に範囲探索手段を備えることにより、左下及び右上の座標を示すことによって指定された所望の矩形範囲内に含まれる座標データを、インデクス中より探索することができる。
【００２９】
本発明の実施の態様の一つは、指定された座標に最も近い座標を探索する最近座標探索手段であることを特徴とするものである。
【００３２】
このような構成によれば、データ管理装置に最近座標探索手段を備えることにより、所望の指定座標に最も近い座標データを、インデクス中より探索することができる。
【００３３】
本発明の実施の態様の一つは、前記インデクスが、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらのうちの少なくとも一つを決定する機能を備えていることを特徴とするものである。
【００３５】
このような構成によれば、インデクスが上記機能を備えることにより、領域コードをキーとして、それを前方列とする領域コードを持つ領域群を、少なくとも一つ決定することができるので、特に最近座標探索手段による探索に資する。
【００３６】
本発明の実施の態様の一つは、前記インデクスが、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらをすべて列挙する機能を備えていることを特徴とするものである。
【００３８】
このような構成によれば、インデクスが上記機能を備えることにより、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらをすべて列挙することができるので、特に範囲探索に資する。
【００３９】
本発明の実施の態様の一つは、前記インデクスが、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合には、それらの数を計数する機能を備えていることを特徴とするものである。
【００４１】
このような構成によれば、インデクスが上記機能を備えることにより、各次元の座標の前方列が指定され、それらを前方列とする座標がインデクス中に存在する場合に、それらの数を数えることができるので、特に範囲探索に資する。
【００４２】
本発明の実施の態様の一つは、前記インデクスに座標を格納する際、座標または領域コードと、座標から領域コードを生成しあるいは領域コードから座標を復元するための元分割とを格納することを特徴とするものである。
【００４４】
このような構成によれば、インデクスに座標を格納する際に、座標と元分割、または領域コードと元分割を格納すれば良いので、データ領域が大幅に縮小される。
【００４５】
本発明の実施の態様の一つは、前記範囲探索手段が、インデクス中のある座標の前方列を前方列とする座標が、すべて指定範囲に含まれている場合に、インデクス中でそれを前方列とする座標は、一括して指定範囲に含まれていると判定することを特徴とするものである。
【００４７】
このような構成によれば、上記の判断基準に基づいて範囲探索を行う結果、インデクス中の各座標に対して、逐一探索を行う必要がなくなるので、探索効率が大幅に向上する。
【００４８】
本発明の実施の態様の一つは、前記範囲探索手段が、インデクス中のある座標の前方列を前方列とする座標で、指定範囲に含まれるものがあり得る場合に、インデクス中でそれを前方列とする座標の数が所定の数以下ならば、それらすべての座標について指定範囲に含まれているか否かの判定を実行することを特徴とするものである。
【００５０】
このような構成によれば、指定範囲内に含まれている可能性の高い座標の数が所定の数以下の場合には、それらのすべてについて判定を行うことにより、それらを含む領域をそれ以上分割せず、最終的な判定操作を行なうことで、分割に伴うオーバーヘッドを回避することができる。
【００５１】
本発明の実施の態様の一つは、前記最近座標探索手段が、インデクス中のある座標の前方列を前方列とする座標が、すべて指定座標から最近座標候補との距離以内にある場合に、インデクス中でそれを前方列とする座標のいずれか一つを新たな最近座標候補とすることを特徴とするものである。
【００５３】
このような構成によれば、インデクス中のある座標の前方列を前方列とする座標が、すべて指定座標から最近座標候補との距離以内にある場合に、そのうちの一つを選択して新たな最近座標候補とすることにより、探索の効率を向上することができる。
【００５４】
本発明の実施の態様の一つは、前記最近座標探索手段が、インデクス中のある座標の前方列を前方列とする座標で、指定座標から最近座標候補との距離以内のものがあり得る場合に、インデクス中でそれを前方列とする座標の数が所定の数以下ならば、それらすべての座標について新たな最近座標候補になり得るか否かを判定し、判定の結果、より指定座標に近い座標があれば、最も近いものを新たな最近座標候補とすることを特徴とするものである。
【００５６】
このような構成によれば、インデクス中のある座標の前方列を前方列とする座標で、指定座標から最近座標候補との距離以内のものが複数あり得る場合に、インデクス中でそれを前方列とする座標の数が所定の数以下ならば、それらのすべてについて判定を行うことにより、それらを含む領域をそれ以上分割せず、最終的な判定操作を行なうことで、分割に伴うオーバーヘッドを回避することができる。
【００５７】
本発明の実施の態様の一つは、前記最近座標探索手段が、インデクス中の座標の前方列を最近座標候補を探索すべき領域を表すものとしてスタックに格納しておき、スタックから取り出した前方列に関して、それを前方列とする座標で、指定座標から最近座標候補との距離より近いものがあり得ない場合には、それらを探索の対象としないことを特徴とするものである。
【００５９】
このような構成によれば、要調査とされた領域をスタックに保持するとともに、処理の当初から最近座標候補を設定し、新たな最近座標候補が見い出された場合、直ちに最近座標候補を更新するので、新たに最近座標候補となる座標に関して、それが最近座標候補となり得るか否かを判定する手続を要しない。また、インデクスの特徴的な作用によって、新たな最近座標候補にし得る座標データは、すでに少なくとも一つは得られており、改めてそれを選択・探索する手続を要しない。従って、極めて迅速に“ｒ”を減少させることができるので、スタックから取り出される領域に関して、処理不要と判定する割合が向上し、無駄な探索を減少させて、効率よく最近座標を決定することができる。
【００６０】
本発明の実施の態様の一つは、前記最近座標探索手段が、インデクス中の座標の前方列を最近座標候補を探索すべき領域を表すものとして、それを前方列とする座標で指定座標から最も近い座標との距離と共に格納しておき、その距離が最小の前方列を最近座標候補を探索すべき対象として選択し、その距離が指定座標と最近座標候補との距離以上の場合には探索を終了することを特徴とするものである。
【００６２】
このような構成によれば、指定座標との距離が最小であることが保証されている座標を探索対象とし、この距離が指定座標と最近座標候補との距離以上の場合には、直ちに探索処理を終了するので、さらに効率的に最近座標を決定することができる。
【００６３】
【発明の実施の形態】
以下、本発明の実施形態について、図面を参照して具体的に説明する。
【００６４】
［１．用語の説明］
各実施形態について説明する前に、本明細書中で用いられる種々の用語について説明する。
【００６５】
（ａ）座標データの管理
「座標データの管理」とは、座標データの登録、削除、変更、探索（例えば、範囲探索、最近座標探索）などの、座標データを処理する１つあるいは複数の手続きをいう。
【００６６】
（ｂ）座標データ
以下の実施形態においては、有限で離散的な２次元部分空間内（部分平面上）の点または領域を表す座標データとして、そのｘ座標、ｙ座標をそれぞれ固定小数点２進表示した固定長ビット列を扱う。
【００６７】
（ｃ）座標データの固定小数点表示の前方列（上位桁）による領域の表現
座標の固定小数点表示の桁数が定まっている場合に、各次元の座標の固定小数点表示の上位桁（前方列）から成る数字列によって、それと同一の上位桁を有する多次元座標データを全て含み、かつ、上位桁が異なる座標データは全く含まない多次元部分空間内の部分集合に対応づける。
このような部分集合及びその表現を「領域」と呼ぶ。また、各次元の桁数字列を「領域座標」と呼ぶ。また、以下で「各（領域）座標」と言えば「各次元の（領域）座標」のことである。
【００６８】
扱うデータが２次元の座標データで、そのｘ座標、ｙ座標が共に１２ビットの固定小数点表示である場合、図１４に示したように、領域（Ｔ−１）は、（Ｔ−２）の座標データの集合を表す。
なお、この座標によって表される領域は、１０進法で示すと、ｘ座標が２５６以上５１１以下、ｙ座標が６４以上１２７以下の領域である。
【００６９】
また、各領域座標がより長いビット列から成る領域（Ｔ−３）は、（Ｔ−４）の座標データの集合を表す。
なお、この座標によって表される領域は、１０進法で示すと、ｘ座標が２８８以上３１９以下、ｙ座標が６４以上７９以下の領域である。
【００７０】
このように、後者の座標データが全て前者に含まれていることは、前者の各領域座標のビット列“０００１”，“０００００１”が、それぞれ後者の各領域座標のビット列“０００１００１”，“０００００１００”の前方列（上位桁）になっていることに対応している。
【００７１】
なお、定められた長さのビット列から成る座標データ自体も、その座標データのみを含む領域とみなすことができ、その上位桁（前方列）から成る領域座標となんら本質的な差異はない。それゆえ、以下では、特に断らない限り、座標データの座標も含めた領域座標を「座標」という。
座標データ（座標）が点を表すか領域を表すかは、本発明を応用する際の解釈に依存し、本発明の主旨には影響しない。
【００７２】
（ｄ）全領域
定まった座標データの表現形式（方法）に関して、座標データとして表現され得るすべての座標（データ）の集合を「全領域」と呼ぶ。これは、座標データとして表現され得るすべての点または領域を含む部分空間（部分平面）に対応する。
「全領域」は、各座標が一定長以下のビット列で表される場合、それらがすべて空（長さ０）のビット列である座標によって表される。２次元の場合は、（
，    ）である。
【００７３】
（ｅ）分割と領域コード
各領域座標またはその部分列を、一定の次元の順に交互に連接した桁数字列を「領域コード」と呼ぶ。与えられた座標に対して、各次元について座標から取るべき部分列の長さ（０以上の整数値）を上位桁（前方）に関するものから順に並べた数列の組を指定すれば、「領域コード」は一意に生成される。この数列の組を「分割」と呼ぶ。各次元の個々の数列に言及する際にも、「分割」という言葉をそのまま用いる。また、ｘ座標、ｙ座標と言うのと同様に、ｘ分割、ｙ分割という呼び方も用いる。
【００７４】
なお、各分割はその和が各座標の長さ（桁数）以下である。但し、数列の項数は各分割で共通とする。数列の項は０でもよいので、この条件は任意の分割を表すのを妨げない。
【００７５】
上述したように、「領域コード」は、各分割の初項から順次その長さの部分列を各座標の前方からとっては、一定の順序（例えば、ｘ、ｙの順）で交互に連接して生成される。
２次元の場合にこの手続を一般的な形で述べれば次のようになる。すなわち、座標（ｘ，ｙ）  ｘ＝ｘ１  …ｘ１ｘ，ｙ＝ｙ１  …ｙ１ｙと、分割（ｉ，ｊ）  ｉ＝ｉ１  …ｉｍ  ，ｊ＝ｊ１  …ｊｍ  ，ｉ１  ＋…＋ｉｍ  ＝ｌｉ  ，ｊ１  ＋…＋ｊｍ  ＝ｌｊ  から、次の手続によって、領域コードｃ＝ｃ１  ｃ２  …ｃ１ｉ＋１ｊ  を生成する。（但し、ｍ＝０の場合も含む）。
【００７６】
（１）ｐ＝０，ｑ＝０，ｋ＝１，ｃを空（長さ０）の桁数字列とする。
（２）ｋ＞ｍなら終了。
（３）ｋ≦ｍなら、
（３−１）  ｘｐ＋１  …ｘｐ＋ｉｋをｃｐ＋ｑ＋１  …ｃｐ＋ｑ＋ｉｋとし、ｐ＝ｐ＋ｉｋ  とする。
（３−２）  ｙｑ＋１  …ｙｑ＋ｊｋをｃｐ＋ｑ＋１  …ｃｐ＋ｑ＋ｊｋとし、ｑ＝ｑ＋ｊｋ  とする。
（４）ｋ＝ｋ＋１とし（２）へ戻る。
【００７７】
この手続は、分割（ｉ，ｊ）が与えられれば、座標（ｘ，ｙ）から一意に領域コードｃを生成できることを示している。
ここで、上記（０００１００１          ，  ０００００１００        ）について、（ｘ分割，ｙ分割）が（４３，６２）である場合に、領域コードを生成する手順を具体的に示す。すなわち、まず、ｘ分割の“４”により、ｘ座標の前方から４ビット（０００１）をとり、続いて、ｙ分割の“６”により、ｙ座標の前方から６ビット（０００００１）をとって、先の４ビットに連接する。この段階で、領域コードは（０００１０００００１）となっている。
続いて、ｘ分割の“３”により、ｘ座標の次の３ビット（００１）  をとって、先の１０ビットに連接し、続いて、ｙ分割の“２”により、ｙ座標の次の２ビット（００）をとって、先の１３ビットに連接する。その結果、図１５に示したように、領域コードは（Ｔ−５）となる。
【００７８】
また、図１５の（Ｔ−６）は、上記（０００１        ，０００００１        ）  及び（０００１００１        ，０００００１００        ）について、（ｘ分割，ｙ分割）と生成される領域コードの例を示したものである。
【００７９】
なお、部分列を連接する「一定の順序」とは、上記のように常にｘ，ｙの順に限られるものではなく、例えば、分割の第１項によって取られた部分列はｘ，ｙの順、第２項によって取られた部分列はｙ，ｘの順…というものでも良い。
さらには、分割の第１項によって取られた部分列はｘ，ｙの順で連接し、第１項によって取られた部分列がそれぞれ“００００”，“０００００１”の場合は、第２項によって取られた部分列をｙ，ｘの順で連接し、また、第１項によって取られた部分列がそれぞれ“０００１”，“０００００１”の場合は、第２項によって取られた部分列をｘ，ｙの順で連接するというように、曖昧になることなく順序が決定できれば、いかなる順序を用いても良い。
【００８０】
また、２組の分割と領域コードについて、一方の各分割が他方の各分割の前方列になっている場合、前者の領域コードが後者の領域コードの前方列になっていれば、またその場合に限り、後者を生成した領域は前者を生成した領域に含まれていると判定できる。
すなわち、領域コードを用いれば、各座標毎に前者が後者の前方列になっているか否かを調べる代わりに、領域コードのみを比較するだけで、各座標毎に、後者を生成した領域が前者を生成した領域に含まれるか否かを判定することができる。
【００８１】
上記の例で、図１５の（Ｔ−７）及び図１６の（Ｔ−８）にみるように、前者の各座標は後者の各座標の前方列になるからである。なお、前者が後者の前方列となっている部分にアンダーラインを付して示した。
同様に、図１６の（Ｔ−９）は（Ｔ−１０）を含み、さらに、全領域（      ，      ）（    ，    ）は全ての領域を含んでいる。
【００８２】
このように、領域コードは座標と分割から一意に計算できるが、以下では、わかりやすさのために座標と分割で表現された領域には、領域コードを付けて表示する。
【００８３】
（ｆ）座標と分割による一連の領域（領域群）の表現
「領域コード」は、座標の前方から「分割」に従って部分列をとって生成されるから、各座標が各分割の和より長くても、領域コードの生成には支障がない。また、表すべき領域の各座標の長さは各分割の和として入手できるから、各座標が、表すべき領域の各座標を前方列としてそれより長くても、座標と分割の組がどの領域を表すかは一意に定まる。
例えば、図１７の（Ｔ−１１）と同じ座標を用いて、その領域を含む領域（Ｔ−１２）を（Ｔ−１３）と表現することができる。さらには、全領域を（Ｔ−１４）で表してもよい。
【００８４】
このように、同一の座標に対して、一方の各分割が他方の各分割の前方列である複数の分割を組み合わせて、後者が前者を含む関係にある複数の領域を表すことができる。これらの分割は、最も長い分割（元分割）とその前方列の長さ（項数）を組み合わせれば表現できる。
例えば、図１７の（Ｔ−１５）で表す。また、これを座標と組み合わせて、図１８の（Ｔ−１６）の４つの領域が表される。
【００８５】
このように、座標と、各分割の和が各座標の長さ以下のｎ項から成る元分割と項数によって表された分割を組み合わせ、この項数を変化させることによって、全領域も含めてｎ＋１個の領域を表すことができる。
それゆえ、このような座標と元分割の組を「領域群」と呼ぶ。この領域群に対して０以上ｎ以下の項数ｍを指定することによって、ｎ＋１個の領域のうちの一つを表すことができる。これを、その領域群の「項数ｍの領域」と呼ぶ。
また、項数が小さいもので表される領域は、項数が大きいもので表される領域を含んでいる。さらに、元分割の和よりも座標が長い場合は、その座標自体が表す領域は、上記ｎ＋１個の領域のいずれにも含まれている、さらに小さいもうひとつの領域である。
【００８６】
また、前記「項数ｍの領域」の各座標を、分割の第ｍ項が０でない次元について、１桁だけ短い前方列で置き換えた座標によって表される領域を、「項数ｍの共有領域」と呼ぶ。各座標が２進表現のｋ次元データで、分割の第ｍ項がいずれも０でない場合、「項数ｍの領域」は「項数ｍの共有領域」の各座標に１ビットづつ追加した座標で表される２のｋ乗個の領域の１つである。
なお、以下においては、分割とは項数も含めた表現を用いる。
【００８７】
（ｇ）座標データの所属領域群の表現
上述したように、座標データにｎ項からなる元分割を組合せて、その座標データを含むｎ＋１個の領域を表すことができる。また、上述したように、より小さい項数で表現された領域は、より大きな項数で表現された領域を必ず含んでいる。
例えば、図１８の（Ｔ−１７）は、座標データと項数２の元分割の組が表す、全領域を含む３つの領域を、項数を指定して列挙したものである。
なお、後述するように、本発明のインデクスは、座標データを元分割と組み合わせて、その所属領域群として格納する。
【００８８】
（ｈ）領域群の格納番地と項数による領域の表現
以下で説明する探索手段においては、探索操作の途上で種々の領域を扱う必要があるが、それらの領域は、インデクス中の領域群の「項数ｍの領域」及び「共有領域」として表し得る。そこで、これらの領域を記憶したり、参照したりするのに、その領域群が格納されている番地及び項数の組を用いる。
すなわち、［番地，項数］でもって、指定番地に格納された領域群の指定項数の領域及び共有領域を表す。例えば、「領域［番地，項数］」と言えばその領域を、「共有領域［番地，項数］」と言えばその共有領域を指す。
【００８９】
また、各探索手段においては、その処理ステップの対象となる複数の領域を一時的に記憶しておくために、領域を要素とするキューまたはスタックを使用する。これらのキューまたはスタックの要素の具体的な表現としては、上記の［番地，項数］の対を用いる。
【００９０】
なお、各探索手段による探索結果は、インデクス中の座標データであるから、これもその格納番地によって表すこととする。また、インデクスは０番地から格納されており、各番地には少なくとも１つの領域群を含んでいるものとする。  また、以下の実施形態においては、簡明のために、これまで用いてきた２次元部分空間内（部分平面上）の座標を２進表現した座標データを扱う場合に即して説明する。
【００９１】
［２．各実施形態とコンピュータ］
本発明の各実施形態はコンピュータ上に実現され、実施形態の各機能は、所定の手順（プログラム）がこのコンピュータを制御することで実現される。
本明細書における各「手段」は、実施形態の各機能に対応する概念的なもので、必ずしも特定のハードウェアやソフトウェア・ルーチンに１対１には対応しない。同一のハードウェア要素が、場合によって異なった手段を構成する。例えば、コンピュータは、ある命令を実行するときにある手段となり、別の命令を実行するときは別の手段となりうる。また、一つの手段が、わずか１命令によって実現される場合もあれば、多数の命令によって実現される場合もある。したがって、本明細書では、以下、実施形態の各機能を有する仮想的回路ブロック（手段）を想定して実施形態を説明する。また、本実施形態における各手順の各ステップは、その性質に反しない限り、実行順序を変更し、複数同時に実行し、また、実行ごとに異なった順序で実行してもよい。このような順序の変更は、例えば、ユーザが実行可能な処理を選択するなどメニュー形式のインターフェース手法によって実現することができる。
【００９２】
［３．第１実施形態］
［３−１．第１実施形態の全体構成］
図１は、第１実施形態の構成を示す機能ブロック図である。
すなわち、本実施形態のデータ管理装置は、座標データ１を格納するインデクス２、座標データからインデクスを生成するインデクス生成手段３、２次元空間内（平面上）の所定の範囲、すなわち全領域内に存在する１つ以上の座標データのうちで、指定した矩形範囲に含まれる座標データをすべて列挙する範囲探索手段４、及び、指定した座標データに最も近い座標データを決定する最近座標探索手段５を備えている。
なお、前記インデクス、インデクス生成手段、範囲探索手段及び最近座標探索手段のそれぞれの構成については、以下に詳述する。また、前記インデクスは、上記の２つの探索手段を構成するのに共通に用いられる。
【００９３】
［３−１−１．インデクスの構成］
本実施形態におけるインデクスとしては、探索対象である各座標データに元分割を付与したものを、この座標と元分割から生成される領域コードの辞書順（昇順）に並べ、これを記憶装置の連続する番地に格納したものを用いる。図２は、本実施形態のインデクスにおける領域群の格納形式の一例を示したものである。
なお、前記［１．用語の説明］で述べたように、座標と元分割の組を「領域群」と呼ぶ。また、この領域群は、さらに項数との組み合わせにより、その座標を含む複数の「領域」を表す。
【００９４】
（元分割）
ここで、元分割について説明する。
各座標データに付与する元分割は、次の条件を満たすように設定されている。すなわち、「項数ｍの領域が一致する領域群が複数存在するとき、それらの項数ｍ＋１の共有領域は一致し、かつ、それらの項数ｍ＋１の領域には少なくとも２つ以上の異なる領域がある。」という条件である。
【００９５】
但し、これらの領域群に関しては、元分割のｍ＋１項までは一致している。また、すべての領域群について、項数ｍ＝０の領域は「全領域」で一致するから、各元分割のｍ＋１＝１項目は同一である。さらに、すべての領域群について、「項数１の共有領域」は同一である。
【００９６】
図１９に示した（Ｔ−１８）は、ｘ座標，ｙ座標が共に１２ビットの固定小数点表示から成る１０個の座標データ及び元分割を格納したインデクスの例である。右に座標と元分割から生成される「領域コード」を示してあるが、これは各領域群から計算によって求めることができるものである。
【００９７】
上述したように、このインデクス中においては、各領域群は座標と元分割から生成される領域コードの辞書順（昇順）にソートされている。
また、上記［１．用語の説明］の（ｆ）で述べたように、各領域群の「項数１の共有領域」は、「項数１の領域」の各座標より１桁だけ短い前方列で置き換えた座標によって表されるから、そのｘ分割は（４−１＝）３、ｙ分割は（６−１＝）５となる。
【００９８】
従って、各領域群の「項数１の共有領域」は、図１９の（Ｔ−１９）ですべて一致しており、かつ、項数１の領域は、０番地から５番地までが図１９の（Ｔ−２０）、６番地が図２０の（Ｔ−２１）、７番地から９番地までが（Ｔ−２２）と、３つの異なる領域に分かれている。
【００９９】
さらに、例えば「項数１の領域」が一致する７番地から９番地の３つの領域群について、「項数２の共有領域」は、そのｘ分割が（４３−１＝）４２、ｙ分割が（６２−１＝）６１となり、図２０の（Ｔ−２３）と互いに一致するが、「項数２の領域」は、図２０の（Ｔ−２４）とそれぞれ異なっている。
【０１００】
これを図示すると、図３に示すようになる。
すなわち、上記［１．用語の説明］の（ｃ）で述べたように、座標データの固定小数点表示の前方列（上位桁）によってある領域が表される。例えば、上記「項数２の共有領域」が、図２１の（Ｔ−２５）である場合、このｘ座標及びｙ座標によって表される領域は、図２１の（Ｔ−２６）の座標データの集合を表す。
なお、この座標によって表される領域は、１０進法で示すと、ｘ座標が２５６以上３１９以下、ｙ座標が６４以上９５以下の領域である。
【０１０１】
一方、７番地の座標によって表される領域は、図２１の（Ｔ−２７）の座標データの集合を表す。
なお、この７番地の座標によって表される領域は、１０進法で示すと、ｘ座標が２５６以上２８７以下、ｙ座標が６４以上７９以下の領域である。
【０１０２】
同様に、８番地の座標によって表される領域は、図２１の（Ｔ−２８）の座標データの集合を表す。
なお、この８番地の座標によって表される領域は、１０進法で示すと、ｘ座標が２８８以上３１９以下、ｙ座標が６４以上７９以下の領域である。
【０１０３】
同様に、９番地の座標によって表される領域は、図２１の（Ｔ−２９）の座標データの集合を表す。
なお、この９番地の座標によって表される領域は、１０進法で示すと、ｘ座標が２８８以上３１９以下、ｙ座標が８０以上９５以下の領域である。
従って、これを図示すると、図３に示すようになる。
【０１０４】
すなわち、本例の場合、「項数１の領域が一致する領域群が複数存在するとき（７番地〜９番地の３つ）、それらの項数２の共有領域は一致し、かつ、それらの項数２の領域には、少なくとも２つ以上の異なる領域がある。」ので、上記「項数ｍの領域が一致する領域群が複数存在するとき、それらの項数ｍ＋１の共有領域は一致し、かつ、それらの項数ｍ＋１の領域には、少なくとも２つ以上の異なる領域がある。」という条件が満たされている。
【０１０５】
［３−１−２．インデクス生成手段の構成］
本実施形態におけるインデクス生成手段は、主記憶上のＡ番地からＢ番地までに格納された座標データに対して元分割を設定するとともに、それらの領域群を領域コードの昇順（辞書順）に並べ替えてインデクスとする手続きから成っている。
なお、上述したように、１つの番地には座標だけでなく（元）分割も同時に格納できるものとする。また、初期状態においては、これらの分割は（  ，  ）に設定されている。また、Ｂ＞Ａ（領域群は少なくとも２個以上）とする。
【０１０６】
以下の手続きでは、番地の対｛ａ，ｂ｝を可変個数記憶できるキューを使用する。
（１）キューを初期化し、｛Ａ，Ｂ｝を追加する。
（２）キューが空なら終了、空でなければ、その先頭を｛ａ，ｂ｝として取り出し、キューから削除する。
（３）番地ａ以上ｂ以下に格納された座標について、各座標の最大値、最小値を求め、両者が一致している上位桁の数（一致前方列長）を次元毎に決定する。
（４）全ての次元において、一致前方列長＝座標長（座標の桁数）ならば、（２）に戻る。
（５）番地ａ以上ｂ以下に格納された同一の元分割の各次元について、（各一致前方列長＋１）と（各分割の和）との差を新たな項として、各分割の末尾に追加する。但し、一致前方列長が座標長に等しい次元については、分割の末尾には０を追加する。
（６）番地ａ以上ｂ以下に格納された領域群を、上記（５）で更新された元分割に従って生成される領域コードの順に並べ替える。
（７）（７−１）ｐ＝ａとする。
（７−２）番地ｐの領域コードと同一の領域コードを持つ連続する番地の最大のものを求めて“ｑ”とする。
（７−３）ｐ＜ｑならば｛ｐ，ｑ｝をキューに追加する。
（７−４）ｐ＝ｑ＋１とする。
（７−５）ｐ＜ｂならば（７−２）に戻る。
ｐ＞＝ｂならば（２）に戻る。
【０１０７】
ステップ（３）で求めた各一致前方列長は、番地ａ以上ｂ以下に格納された全ての各座標の一致前方列長になっている。各座標の最大値及び最小値からこれを決定するのは、その具体的な方法の一つにすぎない。
また、（７−２）においては、同一の領域コードを有する領域群を格納した連続する番地の最大のものを求める方法について具体的に述べていないが、この方法としては、領域コードが一致しなくなるまで逐次番地を増加させても良いし、二分探索によって求める等、種々の方法をとりうる。
このようにして生成したインデクスの例を、図２２の（Ｔ−３０）に示す。
【０１０８】
［３−１−３．範囲探索手段の構成］
本実施形態における範囲探索手段は、次のようなステップから成っている。  （１）結果リストを初期化する。
（２）領域キューを初期化する。
（３）インデクスの任意のデータ、例えば０番地を選び、項数０と組み合わせて［０，０］を処理対象とする。
（３−１）共有領域［０，１］が計算できない場合（元分割の項が０個）、０番地の座標が指定範囲に含まれていれば、結果リストに加える。
（３−２）共有領域［０，１］が指定範囲に含まれている場合、インデクス中の全データ（番地）を結果リストに加える。
（３−３）共有領域［０，１］が指定範囲に含まれてはいないが、指定範囲と共通部分を有する場合、［０，１］を領域キューに追加する。
（４）領域キューが空なら終了。空でなければ先頭要素を処理対象［ａ，ｍ］として取り出し、領域キューから削除する。
（５）共有領域［ａ，ｍ］の各座標の末尾に、桁数字０、１をそれぞれ追加して生成される２の２乗＝４つの領域のそれぞれについて、次の（６）を行う。
（６）その領域を項数ｍの領域とする領域群がインデクス中に存在する場合に限り、その１つの番地を“ｂ”として次の条件付きステップのいずれかを行なう。
（６−１）共有領域［ｂ，ｍ＋１］が計算できない場合（元分割の項がｍ個）、ｂ番地の座標が指定範囲に含まれていれば、結果リストに加える。
（６−２）共有領域［ｂ，ｍ＋１］が指定範囲に含まれている場合、ｂ番地と同じく、領域［ｂ，ｍ］を項数ｍの領域とする領域群を格納した番地を全て結果リストに加える。
（６−３）共有領域［ｂ，ｍ＋１］が指定範囲に含まれてはいないが、指定範囲と共通部分を有する場合、［ｂ，ｍ＋１］を領域キューに追加する。
（６−４）共有領域［ｂ，ｍ＋１］が指定範囲と共通部分を有しない場合は、その領域に関して行うべき処理はない。
（７）（４）へ戻る。
【０１０９】
［３−１−４．最近座標探索手段の構成］
本実施形態における最近座標探索手段は、次のようなステップから成っている。
（１）インデクス中の任意のデータ、例えば、０番地を最近座標候補ｐとし、その座標データと指定点との距離をｒとする。
（２）領域スタックを初期化する。
（３）０番地を項数０と組み合わせて［０，０］を処理対象とする。共有領域［０，１］が計算できる場合（元分割の項が１個以上）、［０，１］を領域スタックに追加する。
（４）領域スタックが空なら終了。空でなければ先頭要素を処理対象［ａ，ｍ］として取り出し、領域スタックから削除する。
（５）共有領域［ａ，ｍ］と指定座標との距離がｒ以上の場合、（４）に戻る。一方、ｒ未満の場合には、共有領域［ａ，ｍ］の各座標の末尾に、桁数字０、１をそれぞれ追加して生成される２の２乗＝４つの領域のそれぞれについて、次の（６）を行う。
（６）その領域を項数ｍの領域とする領域群がインデクス中に存在する場合に限り、その１つの番地を“ｂ”として、次の条件付きステップのいずれかを行なう。
（６−１）共有領域［ｂ，ｍ＋１］が計算できない場合（元分割の項がｍ個）、ｂ番地の座標データと指定座標との距離がｒ未満であれば、“ｂ”を新たな最近座標候補ｐとし、その距離を新たなｒとする。このとき、さらにｒ＝０なら処理を終了する。
（６−２）共有領域［ｂ，ｍ＋１］が指定座標から距離ｒ未満（以内）の範囲に含まれている場合、“ｂ”を新たな最近座標候補ｐとし、ｂ番地の座標データと指定座標との距離を新たなｒとする。さらに、共有領域［ｂ，ｍ＋１］を領域スタックに追加する。
（６−３）共有領域［ｂ，ｍ＋１］が指定座標から距離ｒ未満（以内）の範囲に含まれてはいないが、指定座標との距離はｒ未満である場合、［ｂ，ｍ＋１］を領域スタックに追加する。
（６−４）共有領域［ｂ，ｍ＋１］と指定座標との距離がｒ以上である場合は、その領域に関して行うべき処理はない。
（７）（４）へ戻る。
【０１１０】
［３−２．第１実施形態の作用・効果］
［３−２−１．インデクス生成手段の作用・効果］
インデクス生成手段が、図２３に示した（Ｔ−３１）のように０番地から９番地までに格納された２次元座標及び空列に初期設定された２次元分割に作用してインデクスを生成する過程を、図４及び図５に示したフローチャートに従って説明する。
なお、分かりやすくするために、当初、０〜９番地に格納された座標にａ〜ｊの符号を付し、これらの座標がどのように並べ替えられるかを追跡できるようにした。
【０１１１】
まず、ステップ４０１において初期化したキューに｛０，９｝を追加する。これは直ちにステップ４０３で｛ａ，ｂ｝として取り出され、キューから削除される。
続いて、ステップ４０４において、０番地以上９番地以下に格納された座標について、ｘ座標及びｙ座標の最大値・最小値を求めると、ｘ座標の最大値・最小値は    ０００  １１１０１００００・０００  ００００１０００１  で一致前方列長は“３”、ｙ座標の最大値・最小値は    ０００００  １１００１１０・０００００  ００００１１１  で一致前方列長は“５”と決定される（ステップ４０５）。これらはいずれも座標長“１２”より短いから、ステップ４０７に進む。このとき、各分割は空列で、その和は０だから、各分割の第１項として、「上記各一致前方列長＋１」が設定される。すなわち、本例では、ｘ分割は“４”、ｙ分割は“６”と設定される。
【０１１２】
ステップ４０８において、この元分割（４，６）に従って領域コードを生成すると、図２４の（Ｔ−３２）のようになる。
続いて、ステップ４０９において、これらの領域群を領域コードの順に並べ替えると、図２５の（Ｔ−３３）のようになる。
【０１１３】
ステップ４１０に進み、まず、ｐ＝ａ＝０番地とする。続いて、ステップ４１１において、番地０の領域コード０００００００００１と同一の領域コードを有する領域群を調べると、番地５まで続いているからｑ＝５とする。また、ステップ４１２において、ｐ＜ｑか否かが調べられ、ｐ＜ｑだから、｛０，５｝をキューに追加する（ステップ４１３）。次に、ｐ＝５＋１＝６とし（ステップ４１４）、ｐ＜９なのでステップ４１１に戻る（ステップ４１５）。
【０１１４】
続いて、ステップ４１１において、番地６の領域コードを調べると、これと等しい領域コードは他にないから、ｑ＝ｐ＝６となり、ステップ４１３を通過してステップ４１４でｐ＝６＋１＝７とし、ｐ＜９なので再びステップ４１１に戻る（ステップ４１５）。
【０１１５】
次に、番地７の領域コード０００１０００００１と同一の領域コードを有する領域群を調べると、９番地まで続いているからｑ＝９とする（ステップ４１１）。また、ｐ＜ｑなので｛７，９｝をキューに追加する（ステップ４１２，ステップ４１３）。ステップ４１４において、ｐ＝９＋１＝１０＞９なので、ステップ４０２に戻る（ステップ４１５）。この結果、キューの内容（左が先頭）は、図２５の（Ｔ−３４）のようになっている。
【０１１６】
続いて、ステップ４０３で、この先頭要素｛０，５｝を｛ａ，ｂ｝として取り出し、キューから削除する。続くステップ４０４において、０番地から５番地までの座標について、ｘ座標及びｙ座標の最大値・最小値を求めると、ｘ座標の最大値・最小値は    ００００００１０１１１０・  ０００００００１０００１で一致前方列長は“６”、ｙ座標の最大値・最小値は    ０００００１１００１００・  ０００００１００００００で一致前方列長は“６”と決定される（ステップ４０５）。これらは座標長“１２”より短いからステップ４０７に進み、ｘ分割の第２項として（６＋１）−４＝３を、また、ｙ分割の第２項として（６＋１）−６＝１を、０番地から５番地までの各分割に追加する。
【０１１７】
ステップ４０８において、この元分割（４３，６１）に従って領域コードを生成すると、図２６の（Ｔ−３５）のようになる。
続いて、ステップ４０９において、０番地から５番地までの領域群を領域コードの順に並べ替えると、図２７の（Ｔ−３６）のようになる。
【０１１８】
ステップ４１０〜ステップ４１３において、０番地の領域コード０００００００００１０００１は２番地まで、３番地の領域コード０００００００００１００１０は５番地まで同一であると判定され、｛０，２｝及び｛３，５｝がキューに追加される。この結果、再びステップ４０２に戻ったとき、キューの内容は、図２７の（Ｔ−３７）のようになっている。
【０１１９】
続いて、ステップ４０３で、この先頭要素｛７，９｝を｛ａ，ｂ｝として取り出し、キューから削除する。続くステップ４０４では、同様にして、７番地から９番地までの各座標の一致前方列長は、ｘ次元が“６”、ｙ次元が“７”と決定される（ステップ４０５）。これらは座標長“１２”より短いからステップ４０７に進み、ｘ分割の第２項として（６＋１）−４＝３を、また、ｙ分割の第２項として（７＋１）−６＝２を７番地から９番地までの各分割に追加する。
【０１２０】
ステップ４０８において、７番地から９番地までに格納された座標について、この元分割（４３，６２）に従って領域コードを生成すると、図２８の（Ｔ−３８）のようになる。
続いて、ステップ４０９において、７番地から９番地までの領域群を領域コードの順に並べ替えると、図２９の（Ｔ−３９）のようになる。
７、８、９番地の領域群はいずれも領域コードが異なるから、番地の対をキューに追加することなくステップ４０２に戻る。このとき、キューの内容は図２９の（Ｔ−４０）のようになっている。
【０１２１】
続いて、ステップ４０３で、この先頭要素｛０，２｝を｛ａ，ｂ｝として取り出し、キューから削除する。続くステップ４０４では、同様にして、０番地から２番地までの各座標の一致前方列長は、ｘ次元が“８”、ｙ次元が“９”と決定される（ステップ４０５）。これらは座標長“１２”より短いからステップ４０７に進み、ｘ分割の第３項として（８＋１）−（４＋３）＝２を、ｙ分割の第３項として（９＋１）−（６＋１）＝３を０番地から２番地までの各分割に追加する。
【０１２２】
ステップ４０８において、０番地から２番地までに格納された座標について、この元分割（４３２，６１３）に従って領域コードを生成すると、図３０の（Ｔ−４１）のようになる。
続いて、ステップ４０９において、０番地から２番地までの領域群を領域コードの順に並べ替えると、図３１の（Ｔ−４２）のようになる。
０、１、２番地の領域群はいずれも領域コードが異なるから、番地の対をキューに追加することなく、ステップ４０２に戻る。このとき、キューの内容は図３１の（Ｔ−４３）のようになっている。
【０１２３】
続いて、ステップ４０３で、この先頭要素｛３，５｝を｛ａ，ｂ｝として取り出し、キューから削除する。続くステップ４０４では、３番地から５番地までの各座標の一致前方列長は、ｘ次元が“１０”、ｙ次元が“８”と決定される（ステップ４０５）。これらは座標長“１２”より短いからステップ４０７に進み、ｘ分割の第３項として（１０＋１）−（４＋３）＝４を、ｙ分割の第３項として（８＋１）−（６＋１）＝２を３番地から５番地までの各分割に追加する。
【０１２４】
ステップ４０８において、３番地から５番地までに格納された座標について、この元分割（４３４，６１２）に従って領域コードを生成すると、図３２の（Ｔ−４４）のようになる。
続いて、ステップ４０９において、３番地から５番地までの領域群を領域コードの順に並べ替えると、図３３の（Ｔ−４５）のようになる。
３、４、５番地の領域群はいずれも領域コードが異なるから、番地の対をキューに追加することなく、ステップ４０２に戻る。このとき、キューは既に空になっているので、それを検出して処理を終了する。
このようにして、インデクスが生成される。
【０１２５】
［３−２−２．探索手段に対するインデクスの作用］
探索手段は次の３通りの方法でインデクスを使用する。すなわち、
（１）番地ａを指定してそこに格納された領域群のデータ（点の座標ａｎｄ／ｏｒ分割）を得る。
（２）ある番地ａの領域群のある項数ｍの共有領域の各座標の末尾に、任意の桁数字を追加した領域を、同じ項数ｍの領域とする領域群を探し、もし存在すればその１つの番地を得る。
（３）ある番地ａの領域群のある項数ｍの領域を、同じ項数ｍの領域とする領域群を探し、それらすべての番地（ａを含む）を得る。
【０１２６】
これらのうち、（１）は通常の記憶装置の作用を用いて実現される。
また、（２）は、まず指定番地に格納されている元分割と指定項数を組合せて定まる各分割の和の長さだけ、格納されている点の各座標の前方列をとり、その各座標の末尾１桁を追加すべき桁数字に変更した座標と前記分割とを用いて領域コードを作成する。この領域コードと前方列が一致する領域コードを持つ領域群が格納された番地を、インデクスを二分探索することによって決定する。
【０１２７】
さらに、インデクスの各領域群は、元分割の項数以下の任意のｍについて、項数ｍ−１の領域が一致するすべての領域、すなわち各座標の、元分割のｍ−１項までの和を長さとする前方列が一致するものは、項数ｍの共有領域、すなわち各座標の元分割のｍ項までの和−１を長さとする前方列が一致し、かつ、項数ｍの領域、すなわち各座標の元分割のｍ項までの和の位置の桁数字の組に相異なるものがあって、それらが一定の次元の順（例えば、ｘ座標、ｙ座標の順）で比較して、昇順に並ぶように構成されている。
【０１２８】
この配列順序は、それぞれの領域コードを１つの桁数字（ビット）列として先頭から比較した辞書順（昇順）に一致する。
したがって、インデクス中の領域群の元分割の項数ｍの分割と任意の座標とによって表される領域を、同じ項数ｍの領域とする領域群の有無を決定する手続、および、このような領域群が存在する場合、その１つを決定する手続は、前記分割と座標から生成される領域コードをキーとして、それを前方列とする領域コードを持つ領域群を二分探索することによって実現できる。
【０１２９】
例えば、上記のインデクス例において、共有領域［４，２］の各座標の末尾に“０”または“１”を追加した座標と、４番地の元分割（４３４，６１２）の項数２の分割（４３，６１）によって表される４つの領域、すなわち、図３３の（Ｔ−４６）の４つの領域のうち、（Ｔ−４７）を項数２の領域とする領域群をインデクス中で探す場合について説明する。
【０１３０】
二分探索の手続により、まずインデクスのほぼ中央、すなわち（０＋９）÷２＝４番地の領域群、すなわち、図３４の（Ｔ−４８）の領域コードと、上記探索対象領域＃１の領域コードをキーとして比較する。なお、この領域コードを「キーとなる領域コード」という。
【０１３１】
この比較においては、２つの数字列を先頭から逐次比較して、最初に異なるビットが現れたとき、“０”の方を“１”の方より小さいとする比較結果が得られれば、実際にどのような比較手続をとってもよい。また、一方が尽きるまで両者の領域コードが一致していれば、一方が他方の前方列になっていると判定する。
【０１３２】
本例の場合、キーとなる領域コード（０００００００００１００００）を４番地の領域コード（０００００００００１００１００１１００１）と比較すると、キーとなる領域コードの１３ビット目が“０”で、４番地の領域コードの１３ビット目の“１”と異なるから、探索はさらに、３番地以前のインデクスのほぼ中央（０＋３）÷２＝１番地の領域群（Ｔ−４９）の領域コードと、キーとなる領域コード（０００００００００１００００）を比較する。
【０１３３】
この場合もキーとなる領域コードの方が小さいので、さらに０番地以下のインデクスの唯一の領域群（Ｔ−５０）の領域コードと、キーとなる領域コード（０００００００００１００００）を比較する。
この場合もキーとなる領域コードの方が小さいので、二分探索は終了して、キーとなる領域コードを前方列とする領域コードを持つ領域群、すなわち、前記領域を項数２の領域とする領域群はインデクス中には存在しないと判定される。
【０１３４】
一方、もう１つの領域＃２、すなわち、図３４の（Ｔ−５１）の領域コードをキーとして、インデクスを二分探索すると、（Ｔ−５２）との比較においては、最初の領域の場合と同様に、キーとなる領域コード（０００００００００１０００１）の方が小さいと判定される。しかし、（Ｔ−５３）との比較においては、キーとなる領域コード（０００００００００１０００１）が１番地の領域群の領域コードの前方列になっている。すなわち、上記領域を項数２の領域とする領域群がインデクス中に存在し、その１つが番地１に格納されていると判定される。
【０１３５】
本実施形態におけるインデクスの構成上の特徴的な利点は、以下の通りである。すなわち、上記のような二分探索の過程で用いられる領域コードの比較において、比較対象となる領域コード同士の大小比較の判定に必要な長さの前方列の比較が行なえれば十分であり、必ずしも分割あるいは元分割を参照しなくてもよい点である。
【０１３６】
すなわち、例えば、事前にインデクスの各領域群に領域コードも含めて格納してあれば、キーとなる領域コードと各番地に格納された領域コードのみを、分割及び元分割を参照することなく、単なるビット列として比較すればよい。このように、ある程度の長さのビット列をまとめて比較する機能は、通常の計算機によって提供されるから、これを利用して効率的な比較を実現することができる。  一方、事前にインデクスに領域コードを格納しない場合でも、一括して比較可能なビット長（以内）毎に領域コードを計算し、これらをまとめて比較することで、効率を向上しうる。
【０１３７】
（３）については、ａ番地の領域群の「項数ｍの領域」を、同じく「項数ｍの領域」とする領域群がその他にも存在するとすれば、それらは必ずａ番地の前後の相続く番地に格納されているはずである。
したがって、ａ番地より前の番地を逐次調べ、インデクスに格納された領域群がキーとなる領域コードを前方列とする領域コードを持つ限り列挙する手続、及び、ａ番地より後の番地を逐次調べ、インデクスに格納された領域群がキーとなる領域コードを前方列とする領域コードを持つ限り列挙する手続の結果得られた番地と“ａ”を合わせれば、（３）の結果を得ることができる。
【０１３８】
例えば、領域［１，２］を項数２の領域とする領域群の格納番地は、１番地の前後の相続く番地に格納されているはずであり、本例のインデクスにおいては、０番地及び２番地に格納されている。
すなわち、１番地より小さい０番地をまず調べて、図３５の（Ｔ−５４）に示した領域［１，２］の領域コードが、（Ｔ−５５）の領域コードの前方列になっていると確認できる。なお、一致前方列にアンダーラインを付した。それより前の番地は、このインデクス中にはないから、１番地より前の番地の列挙はここで終了する。
【０１３９】
一方、１番地より後の２番地についても、図３５の（Ｔ−５６）に示したように、その領域コードが、領域［１，２］の領域コードを前方列としていることが確認されるが、次の３番地については、図３５の（Ｔ−５７）に示したように、その領域コードが、領域［１，２］の領域コードを前方列としていないことが判明する。したがって１番地より後の番地の列挙は２番地までで終了する。
以上の列挙の結果にもとの２番地を加えて、領域［１，２］を項数２の領域とする領域群を格納した番地は、０，１，２番地であるという結果を得る。
【０１４０】
以上説明したように、本実施形態におけるインデクスは、その構成上の特徴に基づいて、探索手段が使用する（１），（２），（３）の作用を効率的に提供することができる。
すなわち、（１）に関しては、領域コードを格納した場合には、（２），（３）における領域コードの比較が高速に行なえるという利点があり、領域コードを格納せずに座標と元分割のみを格納する場合には、長大な桁数字（ビット）列を格納する記憶領域を節約できるという利点がある。
【０１４１】
さらには、座標と元分割から領域コードを生成するのと逆の手順によって、領域コードから元分割を使用して各座標の前方列を復元できるので、各座標の残余の後方列を一定の次元順に領域コードの末尾に追加したもの（拡張領域コード）と元分割を使用すれば、座標を復元することができる。この場合、もちろん、各座標の長さ（桁数）は所与である。
【０１４２】
したがって、座標の方を必要な都度計算して復元することにして、インデクスとしては拡張領域コードと元分割のみを格納するという構成も可能である。これに要する記憶容量は座標と元分割を格納する場合と同等で済む。
【０１４３】
［３−２−３．範囲探索手段の作用・効果］
次に、上述のインデクスの例を用いて、指定範囲の左下、右上の座標がそれぞれ図３６の（Ｔ−５８）と与えられた場合の範囲探索手段の動作を、図６及び図７に示したフローチャートに従って説明する。
【０１４４】
まず、ステップ６０３，６０４において、共有領域［０，１］は（Ｔ−５９）と計算される。続いて、ステップ６０５において、この共有領域が上記指定範囲に含まれているか否かが判断され、指定範囲に含まれてはいないが共通部分を有するので（ステップ６０９）、共有領域［０，１］はステップ６０２で初期化された空の領域キューに追加される（ステップ６１０）。
【０１４５】
続いて、領域キューが空か否かが判断され（ステップ６１１）、ステップ６１０で追加された共有領域［０，１］が、直ちに先頭要素［ａ，ｍ］＝［０，１］として領域キューから取り出される（ステップ６１２）。
【０１４６】
ステップ６１３において、共有領域［０，１］の各座標の末尾に“０”または“１”を追加することにより、図３６の（Ｔ−６０）の４つの領域が生成される。
ステップ６１５において、これら４つの領域のうち、第１の領域である＃１（Ｔ−６１）が取り出され、この領域を項数１の領域とする領域群がインデクス中に存在するか否かが判断される（ステップ６１６）。この領域を項数１の領域とする領域群はインデクス中に存在しないから、この領域は本範囲探索の対象にならず、ステップ６１４に戻る。
【０１４７】
次に、ステップ６１５において、第２の領域である＃２（Ｔ−６２）が取り出され、同様に、この領域を項数１の領域とする領域群がインデクス中に存在するか否かが判断される（ステップ６１６）。この領域を項数１の領域とする領域群は、番地０，１，２，３，４，５に存在するので、ステップ６１７に進む。そこで、ｂ＝４として共有領域［４，２］は、図３７の（Ｔ−６３）と計算され、ステップ６１８において、この共有領域が上記指定範囲に含まれているか否かが判断され、指定範囲に含まれてはいないが共通部分を有するので（ステップ６２２）、共有領域［４，２］を領域キューに追加し（ステップ６２３）、ステップ６１４に戻る。
【０１４８】
次に、ステップ６１５において、第３の領域である＃３（Ｔ−６４）が取り出され、同様に、この領域を項数１の領域とする領域群がインデクス中に存在するか否かが判断される（ステップ６１６）。この領域を項数１の領域とする領域群は、番地６に存在する。そこで、ｂ＝６として共有領域［６，２］は計算できないから、ステップ６２０に進み、６番地の座標が指定範囲に含まれているか否かを調べると、含まれていないと判定され、ステップ６１４に戻る。
【０１４９】
続いて、ステップ６１５において、第４の領域である＃４（Ｔ−６５）が取り出され、同様に、この領域を項数１の領域とする領域群がインデクス中に存在するか否かが判断される（ステップ６１６）。この領域を項数１の領域とする領域群は、番地７，８，９に存在する。そこで、ｂ＝７として共有領域［７，２］は（Ｔ−６６）と計算され、ステップ６１８において、この共有領域が上記指定範囲に含まれているか否かが判断され、指定範囲に含まれてはいないが共通部分を有するので（ステップ６２２）、共有領域［７，２］を領域キューに追加し（ステップ６２３）、ステップ６１４に戻る。ステップ６１４において、４つの探索対象領域はすべて処理済みなので、ステップ６１１に戻る。
以上の結果、領域キューの内容は、（Ｔ−６７）となっている。
【０１５０】
次に、ステップ６１２において、この先頭要素［４，２］が［ａ，ｍ］として取り出される。
ステップ６１３において、共有領域［４，２］の各座標の末尾に“０”または“１”を追加して生成されるのは、図３８の（Ｔ−６８）の４つの領域である。
ステップ６１５以下の処理によって、これら４つの領域のうち、第１の領域である＃５と第４の領域である＃８（Ｔ−６９）を項数２の領域とする領域群はインデクス中に存在しないから、これらの領域は本範囲探索の対象にならず、ステップ６１４に戻る。
【０１５１】
次に、第２の領域である＃６（Ｔ−７０）を項数２の領域とする領域群は、番地０，１，２に存在する（ステップ６１６）。そこで、ｂ＝１として共有領域［１，３］は、（Ｔ−７１）と計算され、これは指定範囲に含まれているので（ステップ６１８）、ステップ６１９に進み、領域［１，２］を項数２の領域とする領域群を格納している番地０，１，２を、全て結果リストに加える。
【０１５２】
続いて、第３の領域である＃７（Ｔ−７２）を項数２の領域とする領域群は、番地３，４，５に存在する（ステップ６１６）。そこで、ｂ＝４として共有領域［４，３］は、図３９の（Ｔ−７３）と計算され、これは指定範囲に含まれてはいないが共通部分を有する（ステップ６２２）。したがって、共有領域［４，３］を領域キューに追加し（ステップ６２３）、ステップ６１４に戻る。ステップ６１４において、４つの探索対象領域はすべて処理済みなので、ステップ６１１に戻る。
以上の結果、領域キューの内容及び結果リストの内容は、左を先頭として（Ｔ−７４）となっている。
【０１５３】
続いて、ステップ６１２において、この先頭要素［７，２］が［ａ，ｍ］として取り出される。
ステップ６１３において、共有領域［７，２］の各座標の末尾に“０”または“１”を追加して生成されるのは、図３９の（Ｔ−７５）の４つの領域である。
ステップ６１５以下の処理によって、これら４つの領域のうち、第２の領域である＃１０（Ｔ−７６）を項数２の領域とする領域群はインデクス中に存在しないから、この領域は本範囲探索の対象にならず、ステップ６１４に戻る。
【０１５４】
次に、第１の領域である＃９、第３の領域である＃１１、第４の領域である＃１２（Ｔ−７７）を項数２の領域とする領域群は、それぞれ番地７、番地８、番地９に存在する（ステップ６１６）。しかし、共有領域［７，３］、共有領域［８，３］、共有領域［９，３］はいずれも計算できないので、これらの番地の座標が指定範囲に含まれているか否かが調べられる（ステップ６２０）。
【０１５５】
その結果、７番地の座標は指定範囲に含まれているが、８番地及び９番地の座標は指定範囲に含まれていないと判定されるから、７番地を結果リストに加え（ステップ６２１）、ステップ６１４に戻る。ステップ６１４において、４つの探索対象領域はすべて処理済みなので、ステップ６１１に戻る。
以上の結果、領域キューの内容及び結果リストの内容は、左を先頭として、図４０の（Ｔ−７８）となっている。
【０１５６】
続いて、ステップ６１２において、この先頭要素［４，３］が［ａ，ｍ］として取り出される。
ステップ６１３において、共有領域［４，３］の各座標の末尾に“０”または“１”を追加して生成されるのは、図４０の（Ｔ−７９）の４つの領域である。
ステップ６１５以下の処理によって、これら４つの領域のうち、第４の領域である＃１６（Ｔ−８０）を項数３の領域とする領域群はインデクス中に存在しないから、この領域は本範囲探索の対象にならず、ステップ６１４に戻る。
【０１５７】
次に、第１の領域である＃１３、第２の領域である＃１４、第３の領域である＃１５（Ｔ−８１）を項数３の領域とする領域群は、それぞれ番地３、番地４、番地５に存在する（ステップ６１６）。しかし、共有領域［３，４］、共有領域［４，４］、共有領域［５，４］はいずれも計算できないので、これらの番地の座標が指定範囲に含まれているか否かが調べられる（ステップ６２０）。
【０１５８】
その結果、３番地及び４番地の座標は指定範囲に含まれているが、５番地の座標は指定範囲に含まれていないと判定されるから、３番地及び４番地を結果リストに加え（ステップ６２１）、ステップ６１４に戻る。ステップ６１４において、４つの探索対象領域はすべて処理済みなので、ステップ６１１に戻る。
ステップ６１１に戻り、領域キューが空であるか否かを判断し、領域キューが空であることを検出して、本範囲探索処理を終了する。
以上の結果、結果リストの内容は（Ｔ−８２）となっており、インデクス中に格納された０〜９番地の座標のうち、指定範囲に含まれる座標は、０番地，１番地，２番地，３番地，４番地及び７番地の座標であると決定される。
【０１５９】
このように、本実施形態の範囲探索手段は、上記の手続によって、指定範囲に含まれる点をもれなく列挙することができる。また、本実施形態のインデクスを使用すれば、座標データが領域コードに従ってソートされた順に主記憶上に連続して配置されていることによって、各種提案されている木構造等とは異なって、余分なポインタ領域を使うことなく、かつ迅速に、その指定範囲に含まれている座標データをもれなく列挙することができる。
【０１６０】
なお、上述の説明においては、左下及び右上の座標で指定される矩形範囲に含まれる座標の探索について、その作用を述べたが、範囲と座標及び領域の包含関係、共通部分の有無が判定できれば、指定範囲は矩形に限られるものではない。
【０１６１】
［３−２−４．最近座標探索手段の作用］
次に、上述のインデクスの例を用いて、指定座標が図４１の（Ｔ−８３）と与えられた場合の最近座標探索手段の動作を、図８及び図９に示したフローチャートに従って説明する。
【０１６２】
まず、ステップ８０１において、最近座標候補ｐを０番地の座標とする。ｐには座標データそのものの代りに番地０を設定しておく。座標ｐ＝（１７，９６）と指定座標（１００，５０）との距離は、ｒ＝ｓｑｒｔ（（１００−１７）２  ＋（５０−９６）２  ）＝ｓｑｒｔ（９００５）に設定される（ステップ８０２）。
【０１６３】
ステップ８０５において、共有領域［０，１］は、図４１の（Ｔ−８４）と計算できるので、［０，１］はステップ８０３で初期化された空の領域スタックに追加される（ステップ８０６）。
【０１６４】
続いて、領域スタックが空か否かが判断され（ステップ８０７）、ステップ８０６で追加された共有領域［０，１］が、直ちに先頭要素［ａ，ｍ］＝［０，１］として領域スタックから取り出される（ステップ８０８）。
【０１６５】
ステップ８０９において、共有領域［０，１］と指定座標との距離が“ｒ”以上であるか否かが判断されるが、本例の場合、指定座標は共有領域［０，１］に含まれているので、それらの間の距離は“０”で、上記“ｒ”より小さい。
従って、ステップ８１０に進み、共有領域［０，１］の各座標の末尾に“０”または“１”を追加することにより、図４１の（Ｔ−８５）の４つの領域が生成される。
ステップ８１２において、これら４つの領域のうち、第１の領域である＃１（Ｔ−８６）が取り出され、この領域を項数１の領域とする領域群がインデクス中に存在するか否かが判断される（ステップ８１３）。この領域を項数１の領域とする領域群はインデクス中に存在しないから、この領域は本探索の対象にならず、ステップ８１１に戻る。
【０１６６】
次に、ステップ８１２において、第２の領域である＃２（Ｔ−８７）が取り出され、同様に、この領域を項数１の領域とする領域群がインデクス中に存在するか否かが判断される（ステップ８１３）。この領域を項数１の領域とする領域群は、０番地から５番地まで存在するので、ステップ８１４に進む。そこで、ｂ＝４として共有領域［４，２］は、図４２の（Ｔ−８８）と計算される（ステップ８１５）。
【０１６７】
続いて、ステップ８１６において、この共有領域が上記指定座標から“ｒ”未満（以内）の範囲に含まれているか否かが判断される。
すなわち、この共有領域［４，２］と指定座標との距離のうち、その共有領域中で指定座標から最も近い右下の座標（６３，６４）と指定座標との距離は、ｓｑｒｔ（（６３−１００）２  ＋（６４−５０）２  ）＝ｓｑｒｔ（１５６５）で上記“ｒ”より小さく、また、領域中で指定座標から最も遠い左上の座標（０，１２７）と指定座標との距離は、ｓｑｒｔ（（０−１００）２  ＋（１２７−５０）２  ）＝ｓｑｒｔ（１５９２９）で上記“ｒ”より大きいから、この領域は指定座標から距離ｒ未満（以内）の部分を有するが含まれてはいないと判断される（ステップ８１６、ステップ８２１）。
そして、ステップ８２２に進み、共有領域［４，２］を領域スタックに追加し、ステップ８１１に戻る。
【０１６８】
次に、ステップ８１２において、第３の領域である＃３（Ｔ−８９）が取り出され、同様に、この領域を項数１の領域とする領域群がインデクス中に存在するか否かが判断される（ステップ８１３）。この領域を項数１の領域とする領域群は、６番地に存在するので、ステップ８１４に進む。
【０１６９】
そこで、ｂ＝６として共有領域［６，２］は計算できないから、ステップ８１９に進み、６番地の座標（４６４，７）と指定座標との距離を計算する。これはｓｑｒｔ（（４６４−１００）２  ＋（７−５０）２  ）＝ｓｑｒｔ（１３４３４５）で“ｒ”より大きいから、最近座標候補ｐの更新は行われず、ステップ８１１に戻る。
【０１７０】
続いて、ステップ８１２において、第４の領域である＃４（Ｔ−９０）が取り出され、同様に、この領域を項数１の領域とする領域群がインデクス中に存在するか否かが判断される（ステップ８１３）。この領域を項数１の領域とする領域群は、７番地から９番地まで存在するので、ステップ８１４に進む。
そこで、ｂ＝７として共有領域［７，２］は、（Ｔ−９１）と計算される（ステップ８１５）。
【０１７１】
続いて、ステップ８１６において、この共有領域が上記指定座標から“ｒ”未満（以内）の範囲に含まれているか否かが判断される。
すなわち、指定座標との距離は、領域中で指定座標から最も近い左下の座標（２５６，６４）と指定座標との距離ｓｑｒｔ（（２５６−１００）２  ＋（６４−５０）２  ）＝ｓｑｒｔ（２４５３２）で“ｒ”より大きいから、この領域に対しては何も処理を行わず、ステップ８２１を経てステップ８１１に戻る。ステップ８１１において、４つの探索対象領域はすべて処理済みなので、ステップ８０７に戻る。
以上の結果、領域スタックの内容（右を先頭として）、及びｐ、ｒの値は、図４２の（Ｔ−９２）のようになっている。
【０１７２】
次に、ステップ８０８において、この先頭要素［４，２］が［ａ，ｍ］として取り出される。続いて、ステップ８０９において、共有領域［４，２］と指定座標との距離が“ｒ”以上であるか否かが判断される。
本例の場合、共有領域［４，２］と指定座標との距離はｓｑｒｔ（１５６５）で“ｒ”より小さいから、ステップ８１０に進み、共有領域［４，２］の各座標の末尾に“０”または“１”を追加して、図４３の（Ｔ−９３）の４つの領域が生成される。
【０１７３】
ステップ８１２以下の処理によって、これら４つの領域のうち、第１の領域である＃５と第４の領域である＃８（Ｔ−９４）を項数２の領域とする領域群はインデクス中に存在しないから、これらの領域は本探索の対象にならず、ステップ８１１に戻る。
【０１７４】
次に、第２の領域である＃６（Ｔ−９５）を項数２の領域とする領域群は、番地０，１，２に存在する（ステップ８１３）。そこで、ｂ＝１として共有領域［１，３］は、（Ｔ−９６）と計算される（ステップ８１５）。
【０１７５】
続いて、ステップ８１６において、この共有領域が上記指定座標から“ｒ”未満（以内）の範囲に含まれているか否かが判断される。
すなわち、指定座標との距離は、領域中で指定座標から最も近い右下の座標（３１，９６）と指定座標との距離がｓｑｒｔ（（３１−１００）２  ＋（９６−５０）２  ）＝ｓｑｒｔ（６８７７）で“ｒ”より小さく、また領域中で指定座標から最も遠い左上の座標（０，１２７）と指定座標との距離がｓｑｒｔ（（０−１００）２  ＋（１２７−５０）２  ）＝ｓｑｒｔ（１５９２９）で“ｒ”より大きいから、この領域は指定座標から距離ｒ未満（以内）の部分を有するが含まれてはいないと判断される（ステップ８１６、ステップ８２１）。
そして、ステップ８２２に進み、共有領域［１，３］を領域スタックに追加し、ステップ８１１に戻る。
【０１７６】
次に、第３の領域である＃７、すなわち、図４４の（Ｔ−９７）を項数２の領域とする領域群は番地３，４，５に存在する。そこで、ｂ＝４として共有領域［４，３］は、（Ｔ−９８）と計算される（ステップ８１５）。
【０１７７】
続いて、ステップ８１６において、この共有領域が上記指定座標から“ｒ”未満（以内）の範囲に含まれているか否かが判断される。
すなわち、領域中で指定座標から最も遠い左上の座標（３２，９５）と指定座標との距離がｓｑｒｔ（（３２−１００）２  ＋（９５−５０）２  ）＝ｓｑｒｔ（６６４９）で“ｒ”より小さいから、この領域は指定座標から距離ｒ未満（以内）の範囲に含まれている。
【０１７８】
従って、ステップ８１７に進み、ｂ＝４番地を新たな“ｐ”とし、４番地の座標（４４，７６）と指定座標との距離ｓｑｒｔ（（４４−１００）２  ＋（７６−５０）２  ）＝ｓｑｒｔ（３８１２）を新たな“ｒ”とする。さらに［４，３］を領域スタックに追加し（ステップ８１８）、ステップ８１１に戻る。ステップ８１１において、４つの探索対象領域はすべて処理済みなので、ステップ８０７に戻る。
以上の結果、領域スタックの内容（右を先頭として）、及びｐ、ｒの値は、図４４の（Ｔ−９９）のようになっている。
【０１７９】
次に、ステップ８０８において、この先頭要素［４，３］が［ａ，ｍ］として取り出される。続いて、ステップ８０９において、共有領域［４，３］と指定座標との距離が“ｒ”以上であるか否かが判断される。
すなわち、共有領域［４，３］と指定座標との距離はｓｑｒｔ（１５６５）で、新たな“ｒ”より小さいから、ステップ８１０に進み、共有領域［４，３］の各座標の末尾に“０”または“１”を追加して、図４４の（Ｔ−１００）の４つの領域が生成される。
ステップ８１２以下の処理によって、これら４つの領域のうち、第４の領域である＃１２、すなわち、図４５の（Ｔ−１０１）を項数３の領域とする領域群はインデクス中に存在しないから、この領域は本探索の対象にならず、ステップ８１１に戻る。
【０１８０】
一方、図４５の（Ｔ−１０２）を項数３の領域とする領域群は、それぞれ番地３、番地４、番地５に存在する（ステップ８１３）。しかし、共有領域［３，４］、共有領域［４，４］、共有領域［５，４］はいずれも計算できないので（ステップ８１５）、ステップ８１９に進み、これらの各番地の座標と指定座標との距離が“ｒ”未満か否かが判断される。
【０１８１】
まず、番地３の座標（４４，６４）と指定座標との距離は、ｓｑｒｔ（（４４−１００）２  ＋（６４−５０）２  ）＝ｓｑｒｔ（３３３２）で“ｒ”より小さいから、ステップ８２０に進み、最近座標候補をこれに更新し、ｐ＝３、ｒ＝ｓｑｒｔ（３３３２）とする。
【０１８２】
次に、番地４の座標（４４，７６）と指定座標との距離は、ｓｑｒｔ（（４４−１００）２  ＋（７６−５０）２  ）＝ｓｑｒｔ（３８１２）で“ｒ”より大きいから、最近座標候補の更新は行われない。
【０１８３】
さらに、番地５の座標（４６，６８）と指定座標との距離は、ｓｑｒｔ（（４６−１００）２  ＋（６８−５０）２  ）＝ｓｑｒｔ（３２４０）で“ｒ”より小さいから、最近座標候補をこれに更新し、ｐ＝５、ｒ＝ｓｑｒｔ（３２４０）としてステップ８１１に戻る。ステップ８１１において、４つの探索対象領域はすべて処理済みなので、ステップ８０７に戻る。
以上の結果、領域スタックの内容（右を先頭として）及びｐ、ｒの値は、図４５の（Ｔ−１０３）のようになっている。
【０１８４】
次に、ステップ８０８において、この先頭要素［１，３］が［ａ，ｍ］として取り出される。続いて、ステップ８０９において、共有領域［１，３］と指定座標との距離が“ｒ”以上であるか否かが判断される。
すなわち、共有領域［１，３］と指定座標との距離はｓｑｒｔ（６８７７）で“ｒ”より大きいから、その領域には処理を加えず、ステップ８０７に戻る。  ステップ８０７において、領域スタックが空であることを検出して、本最近座標探索処理を終了する。
【０１８５】
以上の結果、最近座標候補ｐ及びその指定座標との距離ｒの値は、図４５の（Ｔ−１０４）となっており、インデクス中に格納された０〜９番地の座標のうち、指定座標に最も近い座標は５番地の座標（４６，６８）であり、その距離ｒ＝ｓｑｒｔ（３２４０）であると決定される。
【０１８６】
上述したように、本実施形態の最近座標探索手段は、所定の座標データによって表される領域を再帰的に分割しながら、最近座標候補および指定座標との距離を更新していくので、上記の手続を実行するだけで、確実に指定座標に最も近い座標データを決定することができる。
【０１８７】
これに対して、従来は、まず最近座標の候補として妥当なものを１つ決定し、しかる後に、上述の範囲探索と類似の方法で、指定座標から距離ｒ未満の範囲にある座標データを列挙し、もしそのような点が存在すればそれらのうちで指定座標に最も近いものを結果とし、なければ候補として決定したものを結果とするという２段階の方法を用いていた。
【０１８８】
しかし、本実施形態の最近座標探索手段の特徴は、要調査とされた領域をスタックに保持するとともに、処理の当初から最近座標候補を設定し、新たな最近座標候補が見い出された場合、直ちに最近座標候補を更新することである。この際、新たに最近座標候補となる座標に関して、それが最近座標候補となり得るか否かを判定する手続を要しない。
また、インデクスの特徴的な作用によって、新たな最近座標候補にし得る座標データは、すでに少なくとも一つは得られており、改めてそれを選択・探索する手続を要しない。
このようにして、極めて迅速に“ｒ”を減少させることができるので、スタックから取り出される領域に関して、処理不要と判定する割合が向上し、無駄な探索を減少させて、効率よく最近座標を決定することができる。
【０１８９】
［３−３．第１実施形態の変形例］
［３−３−１．座標の浮動小数点表示］
第１実施形態においては、固定小数点表示された座標を扱ったが、浮動小数点表示の座標も、固定小数点表示に変換する手段を付加することによって、同様に扱うことができる。
例えば、上記インデクスの具体例で扱った１０個の座標は、いずれも仮数部５ビット、指数部３ビットの非正規浮動小数点表現で格納することができる。すなわち、上記各座標を上位３ビットの指数部、下位５ビットの仮数部から成る８ビットで表したインデクスは、図４６に示した（Ｔ−１０５）のように構成できる。
また、上記インデクス生成手段、範囲探索手段及び最近座標探索手段は、各座標に関して、固定小数点表示された場合の
（１）上位ｋ桁（長さｋの前方列）
（２）上位ｐ＋１桁目からｐ＋ｋ桁目までのｋ桁（先頭からｐ＋１文字目から始まる長さｋの部分列）
を得る操作を使用する。なお、（１）は、（２）においてｐ＝０とした場合に当たるから、（２）の機能が実現できれば、浮動小数点表示された座標に対しても上記各手段を適用できる。
【０１９０】
上述したように、浮動小数点表示された座標から、固定小数点表示した場合の上位ｐ＋１桁目からｐ＋ｋ桁目までのｋ桁（ｃ１  ｃ２  …ｃｋ  とする）は、次のように決定できる（但し、ｋ＞０）。
（１）ｈ＝｛７（指数部の最大値）−指数部｝がｐ＋ｋ以下ならば、ｃ１  ，ｃ２  ，…，ｃｋ  はすべて０とする。
（２）ｔ＝｛１２（固定小数点表示の桁数）−指数部｝がｐ以下ならば、ｃ１  ，ｃ２  ，…，ｃｋ  はすべて０とする。
（３）（１）、（２）以外の場合、
ｐ＜ｈならば、ｃ１  ，ｃ２  ，…，ｃｈ−ｐ  はすべて０とする。
さらに、ｔ＜ｐ＋ｋならば、ｃｈ−ｐ＋１  ，…，ｃｈ−ｐ＋５  は仮数部のビット列とし、ｃｈ−ｐ＋６  ，ｃｈ−ｐ＋７  ，…，ｃｋ  はすべて０とする。
ｐ＋ｋ≦ｔならば、ｃｈ−ｐ＋１  ，…，ｃｋ  は仮数部の先頭ｋ−（ｈ−ｐ）ビットとする。
ｐ≧ｈで、さらにｔ＜ｐ＋ｋならば、ｃ１  ，…，ｃｔ−ｐ  は仮数部の末尾ｔ−ｐビットとし、ｃｔ−ｐ＋１  ，…，ｃｋ  はすべて０とする。
ｐ＋ｋ≦ｔならば、ｃ１  ，…，ｃｋ  は仮数部の末尾ｋビットとする。
【０１９１】
このようにして、浮動小数点表示された座標に対しても、上記第１実施形態と同様の装置を構成することができる。
【０１９２】
［３−３−２．分割の格納方法］
分割は桁数の列であるから、１項の最大値は座標の桁数であり、また、項数の最大値もやはり座標の桁数になる。この表現に必要な記憶領域をインデクス中の各座標に固定的に割り当てると、多量の記憶領域を要する。例えば、上述したように各座標が１２ビット固定小数点表示の場合、各次元の分割は４ビット×１２項＝４８ビットを要する。
【０１９３】
しかしながら、これらの前方列の多くは一致しているから、多数の分割で一致している前方列の組を表す記号と、それらを除いた後方列の部分との組合せとして格納することにより、記憶領域を節約できる。
これには、桁数列を格納する表を用意して、インデクスには、分割となる桁数列が格納されている表中の位置（桁数列へのポインタ）を格納するとともに、表として前方列が一致する多数の桁数列を効率よく格納するものを採用する。
【０１９４】
桁数列を格納する表としては、例えば、次のように構成されたものを用いる。
（１）２項以下の桁数列はそのまま格納する。
（２）３項以上の桁数列は、それより１項少ない前方列が同じ表中で格納されている位置（前方列へのポインタ）と末尾の１項との組合せとして格納する。
表中の（先頭からの）位置を記号［］を付けて図示すると、本例のインデクスは桁数列表とともに、図４７に示した（Ｔ−１０６）のような形で格納できる。
【０１９５】
また、桁数列表の別の構成として、図４８に示した（Ｔ−１０７）のようなものでもよい。
（１）２項以下の桁数列はそのまま格納する。また（２）に必要な２項以下の後方列も格納する。
（２）２ｋ  ＋１項以上、２ｋ＋１  項以下の桁数列は、前方２ｋ  項の数列を格納した位置と、前方２ｋ  項を除いた後方列を格納した位置との組として格納する。
【０１９６】
要するに、桁数列表としては、前方列が一致する多数の数列を効率よく格納するものならばどのようなものでも良く、表中の位置を桁数列の代りに格納することによって、インデクスに要する記憶容量が節約できる。
【０１９７】
［３−３−３．領域コードの短縮］
さらに、上記［３−２−２．探索手段に対するインデクスの作用］において説明したように、インデクスの探索の際にキーとして用いられる領域コードは、［ａ，ｍ］の領域コード、あるいは［ａ，ｍ］の領域の各座標の末尾の桁のみを変えた座標から、その項数ｍの分割によって生成される領域コードに限られるから、分割に従って各座標から取られる部分列の最後の桁のみを部分列の代りに連接したものを領域コードとして使用しても、インデクス中の領域群の並び順、及び二分探索の結果として全く同じ作用を得ることができる。
【０１９８】
すなわち、上述した本例のインデクスに関する領域コードとして、図４９に示した（Ｔ−１０８）のような短いコードで同様の効果を得ることができる。
この変形によって、インデクス中に、領域コードを領域群とともに格納する場合の記憶容量が節約されるとともに、二分探索等において領域コードを比較する際の効率が向上する。
【０１９９】
以上説明したように、第１実施形態は座標、分割、領域コードそれぞれの表現に関して種々変形して実施することができる。
【０２００】
［４．第２実施形態］
［４−１．第２実施形態の全体構成］
図１０は、第２実施形態の構成を示す機能ブロック図である。
すなわち、第２実施形態は、第１実施形態と同様に、座標データ１を格納するインデクス２及び範囲探索手段４、最近座標探索手段５を備えている。さらに、第１実施形態におけるインデクス生成手段の代りに、インデクスへの座標の追加・削除を行うインデクス変更手段１０を備えている。但し、空のインデクスに対して、探索対象となる座標をインデクス変更手段を用いて逐次追加すれば、インデクスを生成できるから、第２実施形態はインデクス生成機能も兼ね備えているといえる。
【０２０１】
また、第２実施形態においては、インデクスの各座標に付与される元分割の各項はすべて“１”とする。したがって、領域コードは、単に各次元の座標を上位桁から１桁づつ取り、一定の次元順に連接したものになる。
このように、元分割の各項はすべて“１”と決められているから、座標と対になる元分割を表すには、その項数をもってすれば足りる。
【０２０２】
一方、元分割にこのような制約を設けたことによって、第１実施形態のインデクスにおける各領域群が満たしていた次の条件、すなわち、「項数ｍの領域が一致する領域群が複数存在するとき、それらの項数ｍ＋１の共有領域は一致し、かつ、それらの項数ｍ＋１の領域には少なくとも２つ以上の異なる領域がある。」は必ずしも満たされない。
【０２０３】
但し、第２実施形態では、「項数ｍ＋１の共有領域」は常に「項数ｍの領域」になることから、これら２つの条件のうち第１の条件は満たされており、第２の条件、すなわち、「項数ｍ＋１の領域には少なくとも２つ以上の異なる領域がある」ことが保証されないだけである。
【０２０４】
しかし、前記第１の条件は満たされているので、第２実施形態のインデクスに対して第１実施形態の範囲探索手段、最近座標探索手段をそのまま使用しても、常に正しい探索結果を得ることができる。その理由は、前記第１の条件は、探索手続の正当性の必要条件であり、第２の条件は、探索の効率を左右する条件であるからである。
【０２０５】
このような理由で、第２実施形態においても、第１実施形態と同じ範囲探索手段及び最近座標探索手段を使用する。従って、以下では、第２実施形態に特徴的なインデクス及びインデクス変更手段に関してのみ説明する。
【０２０６】
［４−１−１．インデクスの構成］
本実施形態におけるインデクスを用いて、上記第１実施形態の説明で用いた１０個の座標を格納すると、例えば、図５０に示した（Ｔ−１０９）のような構成になる。
【０２０７】
第２実施形態のインデクスにおいては、インデクス変更手段が追加・削除を効率的に行なえるように、座標及び元分割の項数すなわち領域群を記憶装置の連続する番地に格納するのではなく、各領域群に加えて二分探索木を構成するためのポインタを格納した二分探索木として実現する。これには、１組の領域群を格納するためのノード領域として、例えば、図１１に示したような構成を採用する。
【０２０８】
なお、二分探索木の実現方法としては、領域群を領域コードの辞書順にソートしたものとして、「領域コード」あるいは「領域コードの前方列」で探索でき、かつ領域群の追加・削除が容易な構成であれば、これに限らず、どのような構成を用いてもよい。
また、探索や変更の効率を向上させるために、ｈｉｇｈｔ−ｂａｌａｎｃｅｄ  ｂｉｎａｒｙ  ｓｅａｒｃｈ  ｔｒｅｅ  やｓｅｌｆ−ａｄｊｕｓｔｉｎｇ  ｂｉｎａｒｙ  ｓｅａｒｃｈ  ｔｒｅｅ  のような構成を採用してもよい。
【０２０９】
図１２は、本例のインデクスを二分探索木として構成した一例を示したものである。
このように、二分探索木で実現された、領域コード順にソートされた領域群から成るインデクスは、第１実施形態においてそれらの領域群を記憶領域上の連続する番地に格納したインデクスと同じ機能・作用が提供できるだけでなく、インデクスへの領域群の追加・削除が、二分探索木へのノードの追加・削除として効率的に実行できるという特徴がある。
【０２１０】
［座標の削除］
本実施形態におけるインデクス変更手段は、上記の特徴を利用するとともに、領域群の元分割の項数に対して適切な設定・修正を行なう。例えば、上記インデクス例において、末尾から３番目の領域群（座標）ｈ、すなわち、図５０の（Ｔ−１１０）を削除する場合、これを格納しているノードを二分探索木から削除して、図５１に示した（Ｔ−１１１）のようなインデクスを表す二分探索木に変更する。
なお、この際、変更前のインデクスにおいて削除した領域群の直前及び直後に位置した領域群Ａ，Ｂに関して、次の条件をチェックして元分割の項数の修正を行なう。
【０２１１】
ここで、ＡとＢの領域コードが、先頭から長さ２単位で一致する長さを２ｎＡＢとする。また、Ａとその直前の領域群Ｃの領域コードが、同様に一致する長さを２ｎＡＣとする。さらに、Ｂとその直後の領域群Ｄの領域コードが、同様に一致する長さを２ｎＢＤとする。
但し、Ａがないとき  ｎＡＢ＝ｎＡＣ＝０、
Ｂがないとき  ｎＡＢ＝ｎＢＤ＝０、
Ｃがないとき  ｎＡＣ＝０、
Ｄがないとき  ｎＢＤ＝０
ｎＡＢ＜ｎＡＣならば、Ａの元分割の項数をｎＡＣ＋１とする。
ｎＡＢ≧ｎＡＣならば、Ａの元分割の項数をｎＡＢ＋１とする。
ｎＡＢ≧ｎＢＤならば、Ｂの元分割の項数をｎＡＢ＋１とする。
ｎＡＢ＜ｎＢＤならば、Ｂの元分割の項数をｎＢＤ＋１とする。
上記の場合、ｎＡＢ＝６、ｎＡＣ＝３、ｎＢＤ＝４だから、Ａ及びＢの元分割の項数はともに７に設定される。すなわち、Ａに関しては変化しなかったことになる。
【０２１２】
［座標の追加］
インデクスに座標（領域群）を追加する場合には、まず、追加する座標を、分割の項数が最大の領域群とした場合の領域コードでインデクスを二分探索し、追加位置を決定する。
例えば、上で削除した座標を再び追加する場合、まず、領域群（Ｔ−１１２）としてインデクスに追加する。この状態で二分探索を行なうと、この領域群を追加すべき位置は、上記Ａ、Ｂの間であると決定される。
なお、図５２に示した（Ｔ−１１３）は、この領域群を追加した後のインデクスを示したものであり、追加された領域群をＸとする。
【０２１３】
追加する際に次のチェックを行なって、Ｘ、Ａ、Ｂの元分割の項数の修正を行なう。
すなわち、ＸとＡの領域コードが先頭から長さ２単位で一致する長さを２ｎＸＡとする。また、Ａの元分割の項数をｍＡ  とする。
ＸとＢの領域コードが先頭から長さ２単位で一致する長さを２ｎＸＢとする。また、Ｂの元分割の項数をｍＢ  とする。
但し、ＡがないときｎＸＡ＝０、ＢがないときｎＸＢ＝０。
ｎＸＡ＞ｎＸＢのとき、
ｎＸＡ＝ｍＡ  ならば、（ＡとＸのｘ座標同士、ｙ座標同士の一致前方列長のうち小さい方）＋１を、Ａ，Ｘの元分割の項数とする。
ｎＸＡ＜ｍＡ  ならば、ｎＸＡ＋１をＸの元分割の項数とする。
ｎＸＡ＝ｎＸＢのとき、（必ずｍＡ  、ｍＢ  より小さい）Ｘの元分割の項数をｎＸＡ＋１＝ｎＸＢ＋１とする。
ｎＸＡ＜ｎＸＢのとき、
ｎＸＢ＝ｍＢ  ならば、（ＢとＸのｘ座標同士、ｙ座標同士の一致前方列長のうち小さい方）＋１を、Ｂ，Ｘの元分割の項数とする。
ｎＸＢ＜ｍＢ  ならば、ｎＸＢ＋１をＸの元分割の項数とする。
【０２１４】
この場合、ｎＸＡ＝６、ｎＸＢ＝７、ｍＡ  ＝７、ｍＢ  ＝７で、ＢとＸのｘ座標同士の一致前方列長は１２、ｙ座標同士の一致前方列長は７だから、Ｂ、Ｘの元分割の項数は７＋１＝８に設定される。その結果、インデクスは、図５３に示した（Ｔ−１１４）のようになる。
【０２１５】
［元分割の項数の省略］
第２実施形態においては、元分割の各項はすべて“１”とし、その項数のみを格納したが、範囲探索手段及び最近座標探索手段においてこの項数が使用されるのは、それぞれ［３−１−３．範囲探索手段の構成］及び［３−１−４．最近座標探索手段の構成］に示したステップ（６−１）においてのみである。
このステップ（６−１）において、「元分割の項数がｍか否か」で判定している条件（意味）は、領域［ｂ，ｍ］を含む領域群がｂ番地（のノード）に格納されたもの１つだけか否かということである。
【０２１６】
しかし、この判定は、各領域群に元分割の項数を予め格納しておかなくても、インデクス上でその領域群（座標）と直前及び直後の領域群（座標）との各次元の一致前方列長を調べれば判定できる。
すなわち、直前の座標との各次元の一致前方列長のうち最小のもの、及び直後の座標との各次元の一致前方列長のうち最小のもののうち大きい方（＝ｎ）がｍより小さいか否かで判定できる。なお、上述のインデクス更新手段の手続からもわかるように、ｎ＋１がその領域群（座標）の元分割の項数に一致する。
【０２１７】
［４−２．第２実施形態の効果］
このように、第２実施形態においては、領域コードが必要となるたびに、各次元の座標を先頭から１桁または一定の桁数づつ取り、定められた順序で連接して領域コードを生成（計算）することによって、インデクスの各ノードには座標のみを格納するという効率的な構成をとることが可能である。
【０２１８】
また、この構成においては、上記インデクス変更手段における元分割の項数の修正は省略でき、インデクスは単なる領域コードをキーとしてソートされた座標から成る二分探索木として追加・削除・探索を行なえばよい。
なお、領域コードの比較は、先頭から順次必要な長さだけ計算（生成）して行なうことができるので、元分割の項数を省略しても何ら効率の劣化を招くことはない。
【０２１９】
また、対象となる座標が固定的な場合、第２実施形態のインデクスを所定の座標に対して生成した後、二分探索木から第１実施形態で用いた記憶領域上の連続番地に移して格納し、探索時のインデクスのサイズをコンパクトにすることもできる。もちろん、最初から第１実施形態のように連続番地上でソーティングを行なってインデクスを生成してもよい。
【０２２０】
［５．第３実施形態］
［５−１．第３実施形態の構成］
［５−１−１．インデクスの構成］
第３実施形態のインデクスは、第１実施形態と同様の構成を有している。それゆえ同一のインデクス生成手段を備えているが、インデクスが探索手段に提供する作用として新たに次の作用を備えている。すなわち、
（４）ある番地ａの領域群のある項数ｍの領域を、同じく項数ｍの領域とする領域群の数を得る。
これは、第１実施形態におけるインデクスの作用（３）を実行しながら、数をカウントすれば得られるが、そのような実現方法では探索手段の効率化に寄与する可能性は小さい。
【０２２１】
そこで、本実施形態においては、次のようなより効率的な実現方法によってその作用を提供する。
すなわち、番地ａより前の番地で、その番地以前には領域［ａ，ｍ］を項数ｍの領域とする領域群は存在しないことが保証されている番地を“ｐ”、番地ａより後の番地で、その番地以後には領域［ａ，ｍ］を項数ｍの領域とする領域群は存在しないことが保証されている番地を“ｑ”とする。
【０２２２】
そして、番地ａ以前で領域［ａ，ｍ］を項数ｍの領域とする領域群が格納されている最小の番地“ｓ”を、次のようにして二分探索によって決定する。
（１）ｒ←ｐ、ｓ←ａとする。
（２）番地ｔ←（ｒ＋ｕ）／２（小数点以下切捨）とする。
（３）ｔ＝ｓなら終了。
ｔ＜ｓで、領域［ｔ，ｍ］＝領域［ａ，ｍ］ならば、ｓ←ｔ
領域［ｔ，ｍ］≠領域［ａ，ｍ］ならば、ｒ←ｔ
（４）（２）へ戻る。
【０２２３】
同様に、番地ａ以後で領域［ａ，ｍ］を項数ｍの領域とする領域群が格納されている最大の番地“ｕ”を、次のようにして決定する。
（１）ｕ←ａ、ｒ←ｑとする。
（２）番地ｔ←（ｕ＋ｒ）／２（小数点以下切捨）とする。
（３）ｕ＝ｔなら終了。
ｕ＜ｔで、領域［ｔ，ｍ］＝領域［ａ，ｍ］ならば、ｕ←ｔ
領域［ｔ，ｍ］≠領域［ａ，ｍ］ならば、ｒ←ｔ
（４）（２）へ戻る。
【０２２４】
このようにして決定された“ｓ”以後かつ“ｕ”以前の番地に格納された領域群は、すべて領域［ａ，ｍ］を項数ｍの領域としている。したがって、それらの個数は、ｕ−ｓ＋１個と計算される。
【０２２５】
以上の手続によれば、第１実施形態に述べたインデクスの作用（３）の実現方法のように、該当する番地を逐一列挙することなく、二分探索によって効率的に最小、最大の番地を決定することができる。
さらに、この決定にもとづいて、最小の番地“ｓ”から最大の番地“ｕ”までの領域群（座標）を単に列挙すれば、上記インデクスの作用（３）が、第１実施形態に述べた実現方法よりもずっと効率的に実現できる。
【０２２６】
このように、インデクスが、領域群［ａ，ｍ］を項数ｍの領域とする領域群の数およびその最小、最大の番地を得る機能を備えていることを前提にして、第３実施形態の範囲探索手段及び最近座標探索手段は次のような手続によって構成される。
【０２２７】
［５−１−２．範囲探索手段の構成］
本実施形態における範囲探索手段は、次のようなステップから成っている。  （１）結果リストを初期化する。
（２）領域キューを初期化する。
（３）インデクスの任意のデータ（例えば、０番地）を選び、項数０と組み合わせて［０，０］を処理対象とする。
（３−１）共有領域［０，１］が計算できない場合（元分割の項が０個）、０番地の座標が指定範囲に含まれていれば、結果リストに加える。
（３−２）共有領域［０，１］が指定範囲に含まれている場合、インデクス中の全データ（番地）を結果リストに加える。
（３−３）共有領域［０，１］が指定範囲に含まれてはいないが、指定範囲と共通部分を有する場合、［０，１］を領域キューに追加する。
（４）領域キューが空なら終了。空でなければ先頭要素を処理対象［ａ，ｍ］として取り出し、領域キューから削除する。
（５）共有領域［ａ，ｍ］の各座標の末尾に、桁数字０、１をそれぞれ追加して生成される２の２乗＝４つの領域のそれぞれについて、次の（６）を行なう。
（６）その領域を項数ｍの領域とする領域群がインデクス中に存在する場合に限り、その１つの番地を“ｂ”として、次の条件付きステップのいずれかを行なう。
なお、インデクスを二分探索して“ｂ”を得る過程で、ｂより小さい番地のうち最後に領域コードの比較を行なった番地を“ｐ”、ｂより大きい番地のうち最後に領域コードの比較を行なった番地を“ｑ”とする。
また、二分探索を開始する前の“ｐ”、“ｑ”の初期値は、それぞれインデクスの（最小番地−１）及び（最大の番地＋１）に設定しておく。
さらに、（ｐ＋ｑ）／２番地の領域コードが、ステップ（５）で作成された領域の領域コードを前方列としていれば探索を終了し、その番地を“ｂ”とする。それ以外で前者が後者より小さければ、（ｐ＋ｑ）／２を新たな“ｐ”とし、前者が後者より大きければ、（ｐ＋ｑ）／２を新たな“ｑ”とする。
（６−１）共有領域［ｂ，ｍ＋１］が計算できない場合（元分割の項がｍ個）、ｂ番地の座標が指定範囲に含まれていれば、結果リストに加える。
（６−４）共有領域［ｂ，ｍ＋１］が指定範囲と共通部分を有しない場合は、その領域に関して行なうべき処理はない。
（６−１）、（６−４）に該当しない場合、ｐ，ｑを用いて、上述のような手続で領域［ｂ，ｍ］を項数ｍの領域とする領域群が格納されている最小の番地“ｓ”と最大の番地“ｕ”を決定してから、次の条件をチェックする。
（６−２）共有領域［ｂ，ｍ＋１］が指定範囲に含まれている場合、ｂ番地と同じく領域［ｂ，ｍ］を項数ｍの領域とする領域群を格納した番地を全て結果リストに加える。これには、ｓ以上ｕ以下の番地を全て加えればよい。
（６−３）共有領域［ｂ，ｍ＋１］が指定範囲に含まれてはいないが、指定範囲と共通部分を有する場合、
ｕ−ｓ＜ｋすなわち、領域［ｂ，ｍ］を項数ｍの領域とする領域群がｋ個以下ならば、それらの座標を全てチェックして、指定範囲に含まれているものを結果リストに加える。
一方、ｕ−ｓ≧ｋすなわち、領域［ｂ，ｍ］を項数ｍの領域とする領域群がｋ個より多いならば、［ｂ，ｍ＋１］を領域キューに追加する。
（７）（４）へ戻る。
【０２２８】
［５−１−３．最近座標探索手段の構成］
本実施形態における最近座標探索手段は、次のようなステップから成っている。
（１）インデクス中の任意のデータ（例えば、０番地）を最近座標候補“ｐ”とし、指定座標との距離を“ｒ”とする。
（２）領域スタックを初期化する。
（３）０番地を項数０と組み合わせて［０，０］を処理対象とする。共有領域［０，１］が計算できる場合（元分割の項が１個以上）には、［０，１］を領域スタックに追加する。
（４）領域スタックが空なら終了。空でなければ先頭要素を処理対象［ａ，ｍ］として取り出し、領域スタックから削除する。
（５）共有領域［ａ，ｍ］と指定座標との距離がｒ以上の場合、（４）に戻る。一方、ｒ未満の場合には、共有領域［ａ，ｍ］の各座標の末尾に、桁数字０、１をそれぞれ追加して生成される２の２乗＝４つの領域のそれぞれについて、次の（６）を行なう。
（６）その領域を項数ｍの領域とする領域群がインデクス中に存在する場合に限り、その１つの番地を“ｂ”として、次の条件付きステップのいずれかを行なう。
なお、インデクスを二分探索してｂを得る過程で、ｂより小さい番地のうち最後に領域コードの比較を行なった番地を“ｐ”、ｂより大きい番地のうち最後に領域コードの比較を行なった番地を“ｑ”とする。
また、二分探索を開始する前の“ｐ”、“ｑ”の初期値は、それぞれインデクスの（最小番地−１）及び（最大の番地＋１）に設定しておく。
さらに、（ｐ＋ｑ）／２番地の領域コードが、ステップ（５）で作成された領域の領域コードを前方列としていれば探索を終了し、その番地を“ｂ”とする。それ以外で前者が後者より小さければ、（ｐ＋ｑ）／２を新たな“ｐ”とし、前者が後者より大きければ、（ｐ＋ｑ）／２を新たな“ｑ”とする。
（６−１）共有領域［ｂ，ｍ＋１］が計算できない場合（元分割の項がｍ個）、ｂ番地の点と指定座標との距離がｒ未満であれば、ｂを新たな最近座標候補“ｐ”とし、その距離を新たな“ｒ”とする。このとき、さらにｒ＝０なら処理を終了する。
（６−４）共有領域［ｂ，ｍ＋１］と指定座標との距離がｒ以上である場合は、その領域に関して行なうべき処理はない。
（６−１）、（６−４）に該当しない場合、ｐ、ｑを用いて、上述のような手段で、領域［ｂ，ｍ］を項数ｍの領域とする領域群が格納されている最小の番地“ｓ”と最大の番地“ｕ”を決定する。
（６−５）ｕ−ｓ＜ｋすなわち領域［ｂ，ｍ］を項数ｍの領域とする領域群がｋ個以下ならば、それらの座標をすべてチェックして、指定座標ｐとの距離が最小のものを選び、その距離がｒより小さければその座標を新たな最近座標候補“ｐ”とし、その距離を新たな“ｒ”とする。
（６−５）に該当しない場合、次の条件をチェックする。なお、この場合、（６−２）、（６−３）のいずれかには必ず該当する。
（６−２）共有領域［ｂ，ｍ＋１］が指定座標から距離ｒ以内（未満）の範囲に含まれている場合、ｂを新たな最近座標候補“ｐ”とし、ｂ番地の点と指定座標との距離を新たな“ｒ”とする。さらに、［ｂ，ｍ＋１］を領域スタックに追加する。
（６−３）共有領域［ｂ，ｍ＋１］が指定座標から距離ｒ以内（未満）の範囲に含まれてはいないが、指定座標との距離はｒ未満である場合、［ｂ，ｍ＋１］を領域スタックに追加する。
（７）（４）へ戻る。
【０２２９】
［５−２．インデクスの新たな作用を利用した探索手段の効果］
上記各探索手段において、第３実施形態のインデクスが新たに提供する作用（４）は、ステップ（６）において、領域［ｂ，ｍ］を項数ｍの領域とする領域群の数が所定数ｋ以下であるか否かを判定し、ｋ以下である場合には、それらの座標が探索結果あるいはその新たな候補となるか否かをチェックするという手続に使用されている。
【０２３０】
この場合、領域［ｂ，ｍ］を項数ｍの領域とする領域群、すなわち共有領域［ｂ，ｍ＋１］が同一である領域群の座標は、探索結果あるいはその新たな候補となる可能性があるので、第１実施形態では、範囲探索手段のステップ（６−３）、最近座標探索手段のステップ（６−２）、（６−３）において［ｂ，ｍ＋１］を領域キューまたは領域スタックに追加し、後にそれを取り出して再びステップ（５）において複数のより細分化された領域を生成するようになっていた。
【０２３１】
これに対して、本実施形態においては、所定数ｋを適切に設定すれば、領域［ｂ，ｍ］に含まれる探索結果あるいはその新たな候補となる可能性のある座標が少数の場合には、それらの座標についてその判定をその場で行ない、領域［ｂ，ｍ］を更に複数の領域に分割することを避けることができる。
【０２３２】
また、上記の各探索手段においては、領域あるいは共有領域に関しても、探索の過程で座標と同様の操作（包含の判定、距離の計算等）が実行されるから、対象となる座標の数がある程度少なくなったら、それらを含む領域をそれ以上分割せず、最終的な判定操作を行なうことで、分割に伴うオーバーヘッドを回避することができる。
【０２３３】
［５−３．第２実施形態への適用］
本実施形態は、上記第２実施形態のようにインデクスが二分探索木で構成されている場合でも、上記（４）の作用を次のようにして提供することができる。  すなわち、二分探索木の各ノードに部分区間長のフィールドを設け、各ノードに対応する区間の長さをすべて“１”として、「区間管理方法」によって部分区間長フィールドを設定・管理する。
【０２３４】
このとき、各ノードに対応づけられた区間の両端（同一）は、そのノードに格納された領域群に対応する領域コードを辞書順にソートしたインデクス中でのそのノード（領域コード）の順位を表している。従って、この順位を上述の手続における番地の代りに用いれば、第２実施形態と同様のインデクスに対して、本実施形態の範囲探索手段及び最近座標探索手段を適用することができる。
【０２３５】
なお、前記「区間管理方法」については、本出願人が別途特許出願した明細書に詳述されているので、説明は省略する。
【０２３６】
［６．第４実施形態］
［６−１．第４実施形態の構成］
［６−１−１．インデクスの構成］
第４実施形態のインデクスは、以下に述べるように構成されている。すなわち、インデクスの各領域群の元分割のうち、先頭ｎ項は、上記第１実施形態におけるインデクスの元分割の条件、「項数ｍの領域が一致する領域群が複数存在するとき、それらの項数ｍ＋１の共有領域は一致し、かつ、それらの項数ｍ＋１の領域には少なくとも２つ以上の異なる領域がある」を満たしており、ｎ＋１項以降は、上記第２実施形態におけるインデクスと同様に、すべて“１”である。但し、ｎは領域群毎に異なってもよい。
【０２３７】
第２実施形態で述べたように、各項が“１”の部分については元分割にそれを表現する必要はなく、領域コードは、ｎ＋１項以降はｎ項までの和だけの長さ（桁数）を先頭から取り去った各次元の座標から一定の次元順に１桁づつ採って、ｎ項までの分割に基づいて生成された領域コードに追加すればよい。なお、全ての桁を取り尽くした次元からは、それ以降追加しない。
【０２３８】
本実施形態におけるインデクスを用いて、上記第１実施形態の説明で用いた１０個の座標を格納すると、例えば、図５４に示した（Ｔ−１１５）のような構成になる。
【０２３９】
また、本実施形態は、第２実施形態と同様にインデクス変更手段を備えており、インデクスは効率良く変更できるように二分探索木で実現される。第３実施形態で述べたように、各ノードに部分区間長フィールドを設けて区間管理方法を適用することにより各領域群に順位を付与し、これを用いて、項数ｍの領域が同一の領域群の数を、それに対応する領域コードを前方列とする領域コードを持つ領域群の数として計算できる構成を採っている。
【０２４０】
したがって、範囲探索手段及び最近座標探索手段に関しては、第１実施形態及び第３実施形態に示した手続をそのまま用いることができる。また、インデクス変更手段は、インデクスへの座標の追加及びインデクスからの領域群（座標）の削除を扱う。
以下、それぞれの場合の手続について、説明する。
【０２４１】
［インデクスへの座標の追加］
（１）新たな座標を挿入すべき位置を決定するため、インデクスを二分探索する。二分探索の際の領域コードの比較は、新たな座標から比較すべきインデクス中の領域群の元分割を使用して領域コードの前方列を順次生成し、領域群の座標から生成される領域コードの前方列と比較する。そして、インデクス中の領域群で元分割に表示された項数ｎまでの領域コードが一致するものがみつかったら探索を中止する。
【０２４２】
（２）（１）の結果、元分割に表示された項数ｎまでの領域コードが一致する領域群（座標）がみつかった場合、その元分割のｎ＋１項以降をすべて“１”とした分割に基づいて新たな座標から生成した領域コードをキーとして二分探索を継続し、その結果決定された位置に、新たな座標と上記の項数ｎの元分割から成る領域群を挿入する。但し、各次元において分割の和が座標の桁数を超える場合は、元分割のｎ＋１項以降をすべて“０”とする。
【０２４３】
（３）（２）で挿入した領域群と項数ｎの領域を同じくする領域群の数を調べ、所定数“ｃ”より大きければ、それらの領域群の元分割にｎ＋１項目を加えて、元分割を分割として生成される領域コードを同じくする領域群の数がｃより多くならないようにする。
また、ｎ項の元分割を分割として生成される領域コードを同じくする領域群の元分割にｎ＋１項目を追加して（ｎ＋２項目以降はすべて１として）、それに対応する領域コードによってそれらの領域群を並べ替える手順は、第１実施形態のインデクス生成手段におけるステップ（３）〜（６）と同様である。
【０２４４】
（４）（１）の結果、元分割に表示された項数ｎよりも小さい“ｋ”について、項数ｋまでの領域コードは一致するが、項数ｋ＋１の領域コードは一致しない領域群のうち、最大の“ｋ”を持つものが決定された場合（（２）以外の場合は、すべてｋが決定できる）、二分探索によって決定された位置に、新たな座標と上記領域群の元分割のｋ項までを元分割として組合せた領域群を追加する。
【０２４５】
さらに、その領域群を含む、項数ｋまでの領域コードが一致する領域群の元分割を一旦項数ｋまで短縮したうえで、それらの領域群に関して、第１実施形態のインデクス生成手段と同様の手順でｋ＋１項以降の元分割を追加する。
【０２４６】
その際、伸長した元分割を分割とする領域コードが一致する領域群の数が、所定数ｃ以下になったら元分割の追加を停止する。すなわち、第１実施形態のインデクス生成手段のステップ（７−３）における条件、ｐ＜ｑをｑ−ｐ＋１≦ｃ（ｑ−ｐ＜ｃ）に変更した手順を用いる。
【０２４７】
［インデクスからの座標の削除］
（１）指定した座標の削除は、対応する領域群を表すノードをインデクスの二分探索木から削除すればよい。
（２）削除後のインデクスにおいて、その領域群の元分割を分割としてその座標から生成した領域コードを、同じく元分割を分割とする領域コードとする領域群の数が、一定数ｄより小さければ、それらの元分割の末尾の１項を削除して、以降の項がすべて“１”だとした場合の領域コードに基づいて、それらの領域群を並べ替える。
【０２４８】
このように、追加のステップ（２）に該当する場合、及び削除のステップ（２）に該当しない場合は、二分探索木への単なる追加、削除以外の手間は発生しないので、インデクスの変更はきわめて効率的である。
一方、インデクスは元分割の項数より少ない項数ｍに関しては、「項数ｍの領域が一致する領域群が複数存在するとき、それらの項数ｍ＋１の共有領域は一致し、かつ、それらの項数ｍ＋１の領域には少なくとも２つ以上の異なる領域がある」という条件が満たされるので、探索が効率的に実行できる。
【０２４９】
［７．第５実施形態］
第５実施形態は、第１実施形態と同じインデクスを用いて、より効率的な最近座標探索手段を提供するものである。
すなわち、第１実施形態の最近座標探索手段においては、領域を記憶するのに単なるスタックを使用していた。これに対して、本実施形態では、このスタックに代えて、各領域に指定座標との距離を付与し、この距離が最小のものが根となるように構成されたヒープ（整列二分木）を用いる。
なお、ヒープ（整列二分木）については、Ａｈｏ，  Ｈｏｐｃｒｏｆｔ，  Ｕｌｌｍａｎ  ”  Ｔｈｅ  Ｄｅｓｉｇｎ  ａｎｄ  Ａｎａｌｙｓｉｓ  ｏｆ  Ｃｏｍｐｕｔｅｒ  Ａｌｇｏｒｉｔｈｍｓ  ”  （Ａｄｄｉｓｏｎ  Ｗｅｓｌｅｙ，  １９７４）  ｐｐ８７−９２．に詳述されている。
【０２５０】
すなわち、指定座標との距離をキーとする「領域ヒープ」を使用した最近座標探索手段は、次のようなステップから成っている。
（１）インデクスの任意のデータ（例えば、０番地）を最近座標候補“ｐ”とし、指定座標との距離を“ｒ”とする。
（２）領域ヒープを初期化する。
（３）０番地を項数０と組み合わせて［０，０］を処理対象とする。
共有領域［０，１］が計算できる場合（元分割の項が１個以上）、共有領域［０，１］を指定座標との距離Ｒをキーとして領域ヒープに追加する。
（４）領域ヒープが空なら終了。空でなければ先頭要素及びその指定座標との距離を、処理対象［ａ，ｍ］及びＲとして取り出し、領域ヒープから削除する。
（５）共有領域［ａ，ｍ］と指定座標との距離Ｒがｒ以上の場合は終了する。  一方、ｒ未満の場合、共有領域［ａ，ｍ］の各座標の末尾に、桁数字０、１をそれぞれ追加して生成される２の２乗＝４つの領域のそれぞれについて、次の（６）を行う。
（６）その領域を項数ｍの領域とする領域群がインデクス中に存在する場合に限り、その１つの番地をｂとして、次の条件付きステップのいずれかを行なう。  （６−１）共有領域［ｂ，ｍ＋１］が計算できない場合（元分割の項がｍ個）、ｂ番地の座標と指定座標との距離がｒ未満であれば、ｂを新たな“ｐ”とし、その距離を新たな“ｒ”とする。このとき、さらにｒ＝０なら処理を終了する。
（６−２）共有領域［ｂ，ｍ＋１］が指定座標から距離ｒ以内（未満）の範囲に含まれている場合、ｂを新たな“ｐ”とし、ｂ番地の座標と指定座標との距離を新たな“ｒ”とする。さらに、共有領域［ｂ，ｍ＋１］を指定座標との距離Ｒをキーとして領域ヒープに追加する。
（６−３）共有領域［ｂ，ｍ＋１］が指定座標から距離ｒ以内（未満）の範囲に含まれてはいないが、指定座標との距離はｒ未満である場合、共有領域［ｂ，ｍ＋１］を指定座標との距離Ｒをキーとして領域ヒープに追加する。
（６−４）共有領域［ｂ，ｍ＋１］と指定座標との距離がｒ以上である場合は、その領域に関して行うべき処理はない。
（７）（４）へ戻る。
【０２５１】
本実施形態における最近座標探索手段と第１実施形態における最近座標探索手段との主な違いは、上記ステップ（５）に特徴的に現われている。
すなわち、第１実施形態の最近座標探索手段で用いられた領域スタックにおいては、第１実施形態のステップ（４）（５）において取り出したスタックの先頭の領域が指定座標からｒ以遠にあったとしても、スタックの残りの領域がすべてｒ以遠であるとは必ずしもいえない。したがって、スタックの残りの領域をすべて取り出してチェックする必要があった。
【０２５２】
これに対して、本実施形態の最近座標探索手段においては、ヒープの根となった領域は、指定座標との距離がヒープ中の領域のうちで最小であることが保証されているから、この距離がｒ以上であれば、これらすべての領域に含まれる座標を調べてもｒより近いものは見い出されない。したがって、ステップ（５）の判定によって、「共有領域［ａ，ｍ］と指定座標との距離Ｒがｒ以上である」と判定された場合には、その時点で探索処理を終了してよい。
【０２５３】
このように、本実施形態の最近座標探索手段によれば、第１実施形態の最近座標探索手段と比較しても、さらに効率的に最近座標を決定することができる。
【０２５４】
なお、本実施形態で用いたヒープの代りに、領域を指定座標との距離をキーとして格納し、指定座標との距離が最小の領域を決定・削除できるデータ構造であれば何を用いてもよい。
そのような機能を提供するデータ構造は、ｐｒｉｏｒｉｔｙ  ｑｕｅｕｅを実現するデータ構造として多数知られている。このｐｒｉｏｒｉｔｙ  ｑｕｅｕｅについてはＪｏｎｅｓ，  Ｄ．Ｗ．  Ａｎ  Ｅｍｐｉｒｉｃａｌ  Ｃｏｍｐａｒｉｓｏｎ  ｏｆ  Ｐｒｉｏｒｉｔｙ−Ｑｕｅｕｅ  ａｎｄ  Ｅｖｅｎｔ−Ｓｅｔ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎｓ．  Ｃｏｍｍｕｎ．  ＡＣＭ  ２９，  ４  （Ａｐｒｉｌ  １９８６），  ３００−３１１．  に詳述されている。
【０２５５】
なお、第３実施形態の最近座標探索手段においても、同様に、領域スタックの代わりに指定座標との距離をキーとする領域ヒープを用いて、共有領域を追加する際に指定座標との距離をキーとして追加し、ステップ（４）において、ヒープ中で指定座標との距離が最小の領域を処理対象として取り出し、ステップ（５）において、その距離がｒ以上と判定された場合には、即座に探索を終了してよい。
【０２５６】
このように、まだ処理を要するかもしれない領域を、指定座標との距離をキーとしてｐｒｉｏｒｉｔｙ  ｑｕｅｕｅに格納することによって、処理が不要な多数の領域に対して、「処理が不要である」という判断を一括して行うことができるので、それらに対する処理を効率的に省略でき、探索時間を大幅に短縮することができる。
【０２５７】
［８．第６実施形態］
第６実施形態は、本発明を浮動小数点表示の座標に適用したものである。
【０２５８】
［８−１．インデクスの構成］
本実施形態におけるインデクスとしては、探索対象である各座標データを、指数部３ビット、仮数部５ビットの浮動小数点（指数部“０００”の場合のみ、非正規表現を許す）で表した座標データを、後述する指数部領域コード及び仮数部領域コードの辞書順（昇順）に並べたものを用いる。
【０２５９】
すなわち、本実施形態においては、図５５の（Ｔ−１１６）に示したように、指数部３ビット、仮数部５ビットの浮動小数点で表された各座標データについて、まず、指数部の桁数字（ビット）列に関する元分割及び指数部領域コードを計算し、次に、仮数部に関する元分割及び仮数部領域コードを計算する。
そして、指数部領域コードを第１キーとし、仮数部領域コードを第２キーとして、第１キー及び第２キーをこの順に比較し、第１キーが等しい場合のみ、第２キーを比較することによって座標データの大小を決定し、各座標データをその順にソートしたものをインデクスとする。
【０２６０】
なお、図５５の（Ｔ−１１６）に示した座標データは、第２実施形態で用いた図５０の（Ｔ−１０９）に示した座標データａ〜ｊを、上位３ビットの指数部、下位５ビットの仮数部からなる８ビットで表したものである。
また、本実施形態においては、指数部及び仮数部の元分割及び領域コードとして、元分割の各項をすべて“１”とし、元分割の項数も省略したものを使用する。但し、（Ｔ−１１６）に示したインデクスにおいては、参考のために、元分割の項数を（）で示した。また、指数部の座標は同一のものが複数存在するが、その場合の指数部領域コードは座標桁数字をすべて使用し、元分割の項数は各座標の桁数とする。
【０２６１】
続いて、図５５の（Ｔ−１１６）に示したインデクスについて、より詳細に説明する。
すなわち、図５０の（Ｔ−１０９）に示した座標データａは、ｘ座標が“０００００００１０００１”、ｙ座標が“０００００１１０００００”であり、これを上位３ビットの指数部、下位５ビットの仮数部からなる８ビットで表すと、ｘ座標の指数部が    “０００  ”、仮数部が“１０００１  ”、ｙ座標の指数部が“０１０  ”、仮数部が“１１０００  ”となる。    また、本実施形態においては、元分割の各項はすべて“１”とされているので、指数部領域コードは、ｘ座標の指数部及びｙ座標の指数部から１桁ずつとって連接することによって得られ、本例においては“０００１００”となる。一方、仮数部領域コードは、ｘ座標の仮数部及びｙ座標の仮数部から１桁ずつとって連接することによって得られ、本例においては“１１０１００００１０”となる。
同様にして、図５０の（Ｔ−１０９）に示した座標データｂ〜ｊについて、指数部領域コード及び仮数部領域コードを求めると、図５５の（Ｔ−１１６）のようになる。
【０２６２】
この場合、座標データａ〜ｃについては、第１キーである指数部領域コードはいずれも“０００１００”で、互いに等しいので、第２キーである仮数部領域コードを比較し、ａ→ｂ→ｃの順に並ぶと決定される。
また、座標データｄ〜ｆについても、第１キーである指数部領域コードはいずれも“０００１１０”で、互いに等しいので、第２キーである仮数部領域コードを比較し、ｄ→ｅ→ｆの順に並ぶと決定される。
【０２６３】
次に、座標データｇ〜ｉについてみると、第１キーである指数部領域コードはいずれも“１００１００”で、互いに等しいので、第２キーである仮数部領域コードを比較し、ｇ→ｈ→ｉの順に並ぶと決定される。
ところが、座標データｊの指数部領域コードは“１０００００”となり、座標データｇ〜ｉの指数部領域コード“１００１００”より小さいので、座標データｊは、座標データｇ〜ｉより前に並ぶことになる。
【０２６４】
なお、図５５の（Ｔ−１１６）において、参考のために示した元分割の項数は、本実施形態において、浮動小数点表示された座標データを辞書順に並べるために参照する元分割の項数を示したものである。
例えば、座標データａ〜ｃについては、指数部領域コードは互いに等しいので、その元分割の項数は各座標の桁数である“３”となる。また、第２キーである仮数部領域コードを比較すると、座標データａと座標データｂとは７桁目で異なっているので、元分割の項数は“４”となる。したがって、座標データａ及び座標データｂについては、参照する元分割の項数の和はそれぞれ“７”となる。
【０２６５】
これに対して、座標データｃについては、指数部領域コードは座標データａ、ｂと等しいので、その元分割の項数は“３”となるが、仮数部領域コードを比較すると、座標データｂと座標データｃとは３桁目で異なっているので、元分割の項数は“２”となる。したがって、座標データｃについては、参照する元分割の項数の和は“５”となる。
【０２６６】
さらに、座標データｊについてみると、その指数部領域コードは他の座標データの指数部領域コードと異なっており、座標データｇ〜ｉと比較すると、４桁目で異なっているので、その元分割の項数は“２”となる。また、座標データｊの場合、仮数部領域コードを比較する必要はないので、参照する元分割の項数の和は“２”となる。
【０２６７】
このように、本実施形態のインデクスを用いた場合、元分割の項数は、図５０の（Ｔ−１０９）に示した元分割の項数より小さくなるので、領域コード（指数部領域コード＋仮数部領域コード）の桁数を低減することができ、インデクスの生成や探索の効率が大幅に向上する。
【０２６８】
なお、図５５の（Ｔ−１１６）に示したインデクスに用いられている領域コードは、座標コードの表現方法の違いを反映して、図５０の（Ｔ−１０９）に示したインデクスに用いられている領域コードとは異なる。それゆえ、同じ座標データａ〜ｊの並び順に一部異なるところがあるが、この違いはインデクスの生成や探索の手続の構成にはなんら影響しない。この点について、さらに詳しく説明する。
【０２６９】
［８−２．浮動小数点表示された座標データとその座標データが示す範囲］
浮動小数点表示された座標データは、その指数部ｎのコードが、
ｎ＝０００の場合、０以上２５  未満
ｎ≠０００の場合、２ｎ  ×２５  以上２ｎ＋１  ×２５  未満
の区間（範囲）に対応づけることができる。すなわち、仮数部のコードがどのようなものであっても、その座標値は上記ｎに対応づけられた区間に含まれているる。
【０２７０】
それゆえ、元分割の項数が“３”の指数部領域コードは、図５６又は図５７に示した格子（マス目）の１つに対応づけられる。例えば、図５５の（Ｔ−１１６）に示したインデクス中の座標データｇの指数部領域コード“１００１００”は、ｘ座標が“１００”、ｙ座標が“０１０”であるので、図５６又は図５７の“１００１００”の格子に対応づけられる。また、指数部領域コード“１０００”は、ｘ座標が“１０”、ｙ座標が“００”であるので、これに対応する領域は、図５６又は図５７の斜線部で示した４つの格子からなる。
【０２７１】
このように、指数部のみを座標（の上位桁）とみたてた場合、単に座標軸のスケールが対数になったのと同じである。但し、非正規表現を許すｎ＝０００の扱いが例外的になる。したがって、上記第１実施形態〜第５実施形態における座標データの取扱いを、すべて座標データの指数部に適用することができる。
【０２７２】
また、上述したように、指数部領域コード“１０００”に対応する領域は、図５６又は図５７の斜線部で示した４つの格子からなるが、これは、各座標軸のスケールが異なるだけで、座標コードの順序及び領域の配置は、同じ座標コードを３桁（ビット）固定小数点表示の２進整数と解釈した場合、図５８となんら変わらない。
【０２７３】
さらに、仮数部は、上記指数部が表す区間を、２５  ＝３２等分した区間の始点（左端）を表すから、各座標の指数部を上位桁とし、仮数部を下位桁とする８桁（ビット）の座標コードとし、指数部領域コードの末尾に、もしあれば、仮数部領域コードを連接して領域コードとした場合、座標コードの順序及び領域コードに対応する領域の配置は、同じ座標コードを８桁（ビット）の固定小数点表示の整数と解釈した場合となんら変わらない。
【０２７４】
したがって、本発明を浮動小数点表示の座標に適用した本実施形態においても、上記第２実施形態と同様に、インデクス生成手段、範囲探索手段、最近座標探索手段を構成することができる。第２実施形態との相違は、最近座標探索手段において、座標コードから距離を計算する手続であるが、これは、最近座標探索手段の構成（第１実施形態［３−１−４］のステップ（１）〜（７））には、なんら影響しない。もちろん、最近座標探索手段として、上記第５実施形態のステップ（１）〜（７）を用いても良い。
【０２７５】
［８−３．浮動小数点表示を座標コードとして使用する効果］
一般に浮動小数点表示を使用することの利点は、少ない桁数で広い範囲の値を表し得ることであるが、本実施形態においても、上記の各実施形態で各座標を１２ビットの固定小数点表示していたのに対して、座標データを表すのに必要な桁数は８ビットに減少している。
【０２７６】
また、本実施形態に固有の効果は、単に浮動小数点表示したことによって座標データの桁数が減少しただけではなく、領域コード（指数部領域コード＋仮数部領域コード）の桁数が減少し、インデクスの生成や探索の効率が向上することにある。説明に用いた座標データについて見ると、ａ〜ｊのすべてのデータにおいて、領域コードの長さ（元分割の項数）が減少している。
【０２７７】
［９．他の実施形態］
本発明は、浮動小数点表示のみならず、次の条件を満たす座標コードであれば、いかなる座標コードにも適用することができる。すなわち、座標コードの辞書順と、その座標コードが表す値のソート順（座標軸上での並び順）が一致していることが必要である。なお、上記第１実施形態〜第５実施形態に示した固定小数点表示や、第６実施形態に示した浮動小数点表示は、この条件を満たす座標コードの例である。
【０２７８】
したがって、第６実施形態に示した浮動小数点表示の座標において、指数部がさらに浮動小数点表示されているものや、仮数部の先頭の１を除く部分がさらに浮動小数点表示されているものも同様に扱うことができる。但し、この場合も、第６実施形態で述べたように、座標（領域）コードから距離を計算する手続は、適宜変更する必要がある。
【０２７９】
また、負数の扱いに関しては、座標コードの辞書順の定義及び比較手続を負数の表現方法に合わせて修正するか、正数に変換した後の座標コードによってインデクスを生成する等によって、本発明を適用することができる。
さらに、上記条件が満たされていれば、扱う座標コードが表す値の組が直交座標系でなくてもかまわない。例えば、極座標系に対しても、（１）指定範囲と領域の包含関係及び共通部分の有無を判定する手続、（２）座標コード及び領域コードから距離を計算する手続、を変更すれば、上記各実施形態のインデクス構成、インデクス生成手段、インデクス変更手段、範囲探索手段、最近座標探索手段を適用することができる。
【０２８０】
【発明の効果】
以上述べた様に、本発明によれば、データ領域の削減が可能で、しかも矩形探索及び最近傍図形探索の高速化を可能としたデータ管理装置及びデータ管理方法を提供することができる。
【図面の簡単な説明】
【図１】本発明の第１実施形態の構成を表す機能ブロック図
【図２】本発明のインデクスにおける領域群の格納形式を示す図
【図３】第１実施形態における「項数２の共有領域」と「項数２の領域」を示す図
【図４】第１実施形態のインデクス生成手段における処理の流れの前半部を示すフローチャート
【図５】第１実施形態のインデクス生成手段における処理の流れの後半部を示すフローチャート
【図６】第１実施形態の範囲探索手段における処理の流れの前半部を示すフローチャート
【図７】第１実施形態の範囲探索手段における処理の流れの後半部を示すフローチャート
【図８】第１実施形態の最近座標探索手段における処理の流れの前半部を示すフローチャート
【図９】第１実施形態の最近座標探索手段における処理の流れの後半部を示すフローチャート
【図１０】本発明の第２実施形態の構成を表す機能ブロック図
【図１１】第２実施形態において、１組の領域群を格納するためのノード領域の構成を示す図
【図１２】第２実施形態におけるインデクスを二分探索木として構成した一例を示す図
【図１３】ｑｕａｄ−ｔｒｅｅ法によるデータ管理方法の一例を示す図であって、（Ａ）は、全範囲中の分割された各範囲を示す図、（Ｂ）は、（Ａ）に示した各範囲を木構造のノードに対応付けた図
【図１４】（Ｔ−１）〜（Ｔ−４）を示す図
【図１５】（Ｔ−５）〜（Ｔ−７）を示す図
【図１６】（Ｔ−８）〜（Ｔ−１０）を示す図
【図１７】（Ｔ−１１）〜（Ｔ−１５）を示す図
【図１８】（Ｔ−１６）〜（Ｔ−１７）を示す図
【図１９】（Ｔ−１８）〜（Ｔ−２０）を示す図
【図２０】（Ｔ−２１）〜（Ｔ−２４）を示す図
【図２１】（Ｔ−２５）〜（Ｔ−２９）を示す図
【図２２】（Ｔ−３０）を示す図
【図２３】（Ｔ−３１）を示す図
【図２４】（Ｔ−３２）を示す図
【図２５】（Ｔ−３３）〜（Ｔ−３４）を示す図
【図２６】（Ｔ−３５）を示す図
【図２７】（Ｔ−３６）〜（Ｔ−３７）を示す図
【図２８】（Ｔ−３８）を示す図
【図２９】（Ｔ−３９）〜（Ｔ−４０）を示す図
【図３０】（Ｔ−４１）を示す図
【図３１】（Ｔ−４２）〜（Ｔ−４３）を示す図
【図３２】（Ｔ−４４）を示す図
【図３３】（Ｔ−４５）〜（Ｔ−４７）を示す図
【図３４】（Ｔ−４８）〜（Ｔ−５３）を示す図
【図３５】（Ｔ−５４）〜（Ｔ−５７）を示す図
【図３６】（Ｔ−５８）〜（Ｔ−６２）を示す図
【図３７】（Ｔ−６３）〜（Ｔ−６７）を示す図
【図３８】（Ｔ−６８）〜（Ｔ−７２）を示す図
【図３９】（Ｔ−７３）〜（Ｔ−７７）を示す図
【図４０】（Ｔ−７８）〜（Ｔ−８２）を示す図
【図４１】（Ｔ−８３）〜（Ｔ−８７）を示す図
【図４２】（Ｔ−８８）〜（Ｔ−９２）を示す図
【図４３】（Ｔ−９３）〜（Ｔ−９６）を示す図
【図４４】（Ｔ−９７）〜（Ｔ−１００）を示す図
【図４５】（Ｔ−１０１）〜（Ｔ−１０４）を示す図
【図４６】（Ｔ−１０５）を示す図
【図４７】（Ｔ−１０６）を示す図
【図４８】（Ｔ−１０７）を示す図
【図４９】（Ｔ−１０８）を示す図
【図５０】（Ｔ−１０９）〜（Ｔ−１１０）を示す図
【図５１】（Ｔ−１１１）〜（Ｔ−１１２）を示す図
【図５２】（Ｔ−１１３）を示す図
【図５３】（Ｔ−１１４）を示す図
【図５４】（Ｔ−１１５）を示す図
【図５５】（Ｔ−１１６）を示す図
【図５６】第６実施形態のインデクス中のある指数部領域コードに対応する範囲を示す図
【図５７】第６実施形態のインデクス中のある指数部領域コードに対応する範囲を示す図
【図５８】図５６又は図５７に示した範囲を、３桁の固定小数点表示の２進整数と解釈した場合を示す図
【符号の説明】
１…座標データ
２…インデクス
３…インデクス生成手段
４…範囲探索手段
５…最近座標探索手段
１０…インデクス変更手段
【図１】
0003607107.tif 000002
【図２】
0003607107.tif 000003
【図３】
0003607107.tif 000004
【図４】
0003607107.tif 000005
【図５】
0003607107.tif 000006
【図６】
0003607107.tif 000007
【図７】
0003607107.tif 000008
【図８】
0003607107.tif 000009
【図９】
0003607107.tif 000010
【図１０】
0003607107.tif 000011
【図１１】
0003607107.tif 000012
【図１２】
0003607107.tif 000013
【図１３】
0003607107.tif 000014
【図１４】
0003607107.tif 000015
【図１５】
0003607107.tif 000016
【図１６】
0003607107.tif 000017
【図１７】
0003607107.tif 000018
【図１８】
0003607107.tif 000019
【図１９】
0003607107.tif 000020
【図２０】
0003607107.tif 000021
【図２１】
0003607107.tif 000022
【図２２】
0003607107.tif 000023
【図２３】
0003607107.tif 000024
【図２４】
0003607107.tif 000025
【図２５】
0003607107.tif 000026
【図２６】
0003607107.tif 000027
【図２７】
0003607107.tif 000028
【図２８】
0003607107.tif 000029
【図２９】
0003607107.tif 000030
【図３０】
0003607107.tif 000031
【図３１】
0003607107.tif 000032
【図３２】
0003607107.tif 000033
【図３３】
0003607107.tif 000034
【図３４】
0003607107.tif 000035
【図３５】
0003607107.tif 000036
【図３６】
0003607107.tif 000037
【図３７】
0003607107.tif 000038
【図３８】
0003607107.tif 000039
【図３９】
0003607107.tif 000040
【図４０】
0003607107.tif 000041
【図４１】
0003607107.tif 000042
【図４２】
0003607107.tif 000043
【図４３】
0003607107.tif 000044
【図４４】
0003607107.tif 000045
【図４５】
0003607107.tif 000046
【図４６】
0003607107.tif 000047
【図４７】
0003607107.tif 000048
【図４８】
0003607107.tif 000049
【図４９】
0003607107.tif 000050
【図５０】
0003607107.tif 000051
【図５１】
0003607107.tif 000052
【図５２】
0003607107.tif 000053
【図５３】
0003607107.tif 000054
【図５４】
0003607107.tif 000055
【図５５】
0003607107.tif 000056
【図５６】
0003607107.tif 000057
【図５７】
0003607107.tif 000058
【図５８】
0003607107.tif 000059