(57)【特許請求の範囲】
【請求項１】
処理対象領域を所定ビット長に応じたブロックに分割認識し、入力された座標データが示す位置が基準位置から離れるのに応じて基準データと比較したビット値の相違数が徐々に増加する傾向で、前記座標データに対応する所定ビット長の付加データを生成する付加データ生成手段と、
前記生成された付加データを、記憶手段に格納された所定ビット長のデータに連結して前記所定ビット長の２倍のビット長のデータを生成し、該生成したデータを前記記憶手段に格納する連結処理手段と、
前記連結処理手段により前記記憶手段に格納されたデータのビット長を前記所定ビット長に指定して前記付加データ生成手段に付加データを生成させ、次いで前記連結処理手段にデータを連結して記憶手段に格納させることを繰り返し行う制御手段と、
を備える座標コード化装置。
【請求項２】
請求項１に記載の座標コード化装置であって、
前記付加データ生成手段は、前記ブロックに関して一つおきにビット値の相違数が増加するように、前記付加データを生成する手段である、
座標コード化装置。
【請求項３】
請求項２に記載の座標コード化装置であって、
前記付加データ生成手段は、次式に基づいて付加データを生成する手段であり、
付加データ＝〜｛（２ｎ／４−１）＜＜floor（ｋ／２−ｎ／４）｝、
式中、ｎは前記所定ビット長であり、〜はｎｏｔ演算子（反転）であり、＜＜は左方向への論理シフト演算子であり、floorは切り捨てを意味する関数であり、ｋは処理対象領域を所定ビット長に応じたブロックに分割認識した際に、入力された座標データがどのブロックに属するかを示す値である、
座標コード化装置。
【請求項４】
処理対象領域を所定ビット長に応じたブロックに分割認識し、入力された座標データが示す位置が基準位置から離れるのに応じて基準データと比較したビット値の相違数が徐々に増加する傾向で、前記座標データに対応する所定ビット長の付加データを生成する付加データ生成処理と、
前記生成された付加データを、記憶手段に格納された所定ビット長のデータに連結して前記所定ビット長の２倍のビット長のデータを生成し、該生成したデータを前記記憶手段に格納する連結処理と、
前記連結処理により前記記憶手段に格納されたデータのビット長を前記所定ビット長に指定して前記付加データ生成処理に付加データを生成させ、次いで前記連結処理にデータを連結して記憶手段に格納させることを繰り返し行う制御処理と、
をコンピュータが実行する座標コード化方法。
【請求項５】
処理対象領域を所定ビット長に応じたブロックに分割認識し、入力された座標データが示す位置が基準位置から離れるのに応じて基準データと比較したビット値の相違数が徐々に増加する傾向で、前記座標データに対応する所定ビット長の付加データを生成する付加データ生成処理と、
前記生成された付加データを、記憶手段に格納された所定ビット長のデータに連結して前記所定ビット長の２倍のビット長のデータを生成し、該生成したデータを前記記憶手段に格納する連結処理と、
前記連結処理により前記記憶手段に格納されたデータのビット長を前記所定ビット長に指定して前記付加データ生成処理に付加データを生成させ、次いで前記連結処理にデータを連結して記憶手段に格納させることを繰り返し行う制御処理と、
をコンピュータに実行させるプログラム。
【請求項６】
地理的な座標と距離保存性を満たすコードとが対応付けられ、請求項１乃至３のいずれか１項記載の座標コード化装置で生成されたマップデータを格納したマップデータ記憶手段と、
入力された複数の座標データを検索キーとして前記マップデータを検索し、該複数の座標データに対応する複数のコードを取得するデータ検索手段と、
該データ検索手段により取得された複数のコードを比較して前記複数の座標データ間の距離を算出する距離算出手段と、
を備える距離算出装置。
【請求項７】
入力された複数の座標データを検索キーとして、地理的な座標と距離保存性を満たすコードとが対応付けられ、請求項４記載の座標コード化方法で生成されたマップデータを検索し、該複数の座標データに対応する複数のコードを取得するコード取得処理と、
該取得された複数のコードを比較して前記複数の座標データ間の距離を算出する距離算出処理と、
をコンピュータが実行する距離算出方法。
【請求項８】
入力された複数の座標データを検索キーとして、地理的な座標と距離保存性を満たすコードとが対応付けられ、請求項５記載のプログラムで生成されたマップデータを検索し、該複数の座標データに対応する複数のコードを取得するコード取得処理と、
該取得された複数のコードを比較して前記複数の座標データ間の距離を算出する距離算出処理と、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、座標データをテキストデータで表現されるコードに変換する座標コード化装置及び方法並びにプログラム、二点の座標データを取得して二点間の距離を算出する距離算出装置及び方法並びにプログラムに関する。
【背景技術】
【０００２】
従来、座標データをコード（テキストデータ）に変換する技術として、ジオ・ハッシュと称される技術が知られている。ジオ・ハッシュでは、まず、緯度と経度を入力値とし、それぞれに対応するビット列を求め、経度に対応するビット列と緯度に対応するビット列から交互に１ビットずつ取り出して並べた合成ビット列を求める。そして、合成ビット列に所定の対応表を適用してコードを導出する。ジオ・ハッシュ技術は、地点にコードを割り振ってコンピュータ処理に用いたり、データベース等に地点情報を格納するのに好適に用いられる。
【０００３】
以下、ジオ・ハッシュにおける各段階の処理について説明する。前提として、緯度は［−９０〜９０］の値をとり得る入力値であり、経度は［−１８０〜１８０）の値をとり得る入力値であるものとする。緯度と経度からビット列を求めるには、次のような手法が用いられる。
【０００４】
ここで、丸括弧“（”及び“）”は開区間（その数値を含まない）を意味し、角括弧“［”及び“］”は閉区間（その数値を含む）を意味する。上記の［−１８０〜１８０）の場合、−１８０は含むが、１８０は含まない。以降、区間分割した時の中央値をどちらか一方の区間にしか含まないように確定させるため、上側を開区間とする。
【０００５】
まず、入力された緯度が、区間［−９０〜９０］の中央値０よりも右側（区間［０〜９０］）に在るときは１を、左側（区間［−９０〜０））に在るときは０を最上位のビット値として記憶装置に格納する。右側に在る場合、更に、該当する右側の区間［０〜９０］の中央値４５よりも右側（区間［４５〜９０］）に在るときは１を、左側（区間［０〜４５））に在るときは０を上位から２番目のビット値としてメモリ等に格納する。こうした処理を、十分な精度が得られるまで繰り返し行う。
【０００６】
図１は、ジオ・ハッシュ技術において、緯度に関するビット列（以下、緯度ビット列と称する）を生成する様子を示す図である。ここでは、入力された緯度が４２．６であるものとする。図示するように、一回目の判定では、入力値が区間［−９０〜９０］の中央値０よりも右側に在るために１が、二回目の判定では、入力値が区間［０〜９０］の中央値４５よりも左側に在るために０が格納される。同様に、三回目の判定では、入力値が区間［０〜４５）の中央値２２．５よりも右側に在るために１が格納され、四回目の判定では、入力値が区間［２２．５〜４５）の中央値３３．７５よりも右側に在るために１が格納される。そして、五回目の判定では、入力値が区間［３３．７５〜４５）の中央値３９．３８よりも右側に在るために１が格納される。このように区間を再帰的に分割することによって、経度ビット列「１０１１１」が得られる。
【０００７】
更に、入力された経度が−５．６であるものとすると、同様の処理により、経度に関するビット列（以下、経度ビット列と称する）「０１１１１」が得られる。
【０００８】
緯度ビット列及び経度ビット列が得られると、これを交互に並べて合成ビット列を生成する。上記の例では、経度ビット列の最上位ビット「０」、緯度ビット列の最上位ビット値「１」、経度ビット列の上位から２番目のビット「１」、緯度ビット列の上位から２番目のビット「０」、経度ビット列の上位から３番目のビット「１」、…の順に格納される。この結果、合成ビット列は「０１１０１１１１１１１」となる。図２は、緯度ビット列と経度ビット列から合成ビット列を得る様子を示す図である。
【０００９】
合成ビット列を得ると、更に、ｂａｓｅ３２等の変換手法を用いて、合成ビット列をテキストデータ（コード）に変換する。図３は、ｂａｓｅ３２に係る対応表である。図示するように、ｂａｓｅ３２では、５ビット分のビット値が数字又はアルファベットに対応付けられている。上記合成ビット列「０１１０１１１１１１１」は、「０１１０１」が「ｅ」に対応し、「１１１１１」が「ｚ」に対応するため、「ｅｚ」というコードに変換される。ジオ・ハッシュのコードは、任意の精度で表現でき、コード長が長いほど精度が高くなり、コードの末尾を削っていくと徐々に精度が落ちるという性質を有している。
【００１０】
具体例を挙げると、｛緯度５７．６４９１１、経度１０．４０７４４｝という座標からは、「ｕ４ｐｒｕｙｄｑｑｖｊ」というコードが導出される。なお、現在インターネット上では、「ｈｔｔｐ：／／ｇｅｏｈａｓｈ．ｏｒｇ／」の次にコードを連結したＵＲＬにアクセスすると、該当する地点の地図が表示されるというサービスが実施されている。このように、緯度及び経度座標をコード化することにより、データを短縮することができるため、情報の送受信や格納を簡便に行うことができる。
【００１１】
コードから座標を得るには、例えば上記「ｅｚ」を逆変換して「０１１０１１１１１１」というデータを取得し、これを１ビットおきに読み込んだ「０１１１１」と「１０１１１」を経度ビット列、緯度ビット列と認識して図１と逆の処理を行えばよい。
【００１２】
なお、座標をコード化する技術については、ジオ・ハッシュの他にも開示がなされている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】米国特許出願公開第２００５／００２３５２４号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、ジオ・ハッシュ技術は、コードや合成ビット列と座標とが一対一で対応している（唯一性を満たす）ものの、距離保存性を満たさないという問題を孕んでいる。「距離保存性を満たさない」とは、二点に付与されたコードや合成ビット列に関するいかなる距離の定義も、二点間の距離を保存しないことを意味する。ここで、ブロック距離とは、コードの精度に応じて対象領域をブロックに分割し、座標がいずれのブロックに該当するかで地図及び座標を表現する場合において、二点が何ブロック離れているかを示す値である。すなわち、ブロックとは、この種のコード化技術において座標そのものと同一視できる概念である。
【００１５】
図４は、ジオ・ハッシュにおけるブロック距離ＢＤと、ジオ・ハッシュに距離保存性が無いことを説明するための説明図である。本図では、経度が３ビット、緯度が２ビットの精度でコードが付与されている。また、前述の逆変換の都合から、合成ビット列を、上段部分を経度に割り当て、下段部分を緯度に割り当てた二段のデータとして表現している。図示するように、二ブロックにそれぞれ付与された合成ビット列において、対応するビット値が異なる数（図中、ハミング距離ＨＤと表記した）は、必ずしも二ブロック間のブロック距離と一致しない。また、この結果、二ブロック間におけるコードの擬似的な距離（例えばｒとｓなら１、ｒとｕなら３）も、ブロック距離ＢＤを表すものとならない。特に地球面にジオ・ハッシュを適用した場合、赤道や子午線、日付変更線付近等でハミング距離ＨＤとブロック距離ＢＤの関係が大きく変化してしまうことが知られている。
【００１６】
距離保存性が無いと、二点の（二ブロック分の）コードないし合成ビット列を与えられたとしても、即座にブロック距離を導出できないことになる。この結果、コードないし合成ビット列から座標を逆算した上で、別途演算式を立てて距離を演算する必要が生じ、処理負担増や処理遅延を招くおそれがある。
【００１７】
本発明はこのような課題を解決するためのものであり、距離保存性を満たすデータを生成することが可能な座標コード化装置等を提供することを、主たる目的とする。
【課題を解決するための手段】
【００１８】
上記目的を達成するための第１の態様は、
処理対象領域を所定ビット長に応じたブロックに分割認識し、入力された座標データが示す位置が基準位置から離れるのに応じて基準データと比較したビット値の相違数が徐々に増加する傾向で、前記座標データに対応する所定ビット長の付加データを生成する付加データ生成手段と、
前記生成された付加データを、記憶手段に格納された所定ビット長のデータに連結して前記所定ビット長の２倍のビット長のデータを生成し、該生成したデータを前記記憶手段に格納する連結処理手段と、
前記連結処理手段により前記記憶手段に格納されたデータのビット長を前記所定ビット長に指定して前記付加データ生成手段に付加データを生成させ、次いで前記連結処理手段にデータを連結して記憶手段に格納させることを繰り返し行う制御手段と、
を備える座標コード化装置である。
【発明の効果】
【００１９】
本発明によれば、距離保存性を満たすデータを生成することが可能な座標コード化装置等を提供することができる。
【図面の簡単な説明】
【００２０】
【図１】ジオ・ハッシュ技術において、緯度に関するビット列を生成する様子を示す図である。
【図２】緯度ビット列と経度ビット列から合成ビット列を得る様子を示す図である。
【図３】ｂａｓｅ３２に係る対応表である。
【図４】ジオ・ハッシュにおけるブロック距離ＢＤと、ジオ・ハッシュに距離保存性が無いことを説明するための説明図である。
【図５】本発明の第１実施例に係る距離算出装置１のハードウエア構成例である。
【図６】本発明の第１実施例に係る距離算出装置１の機能構成例である。
【図７】ビット長が２、４の場合に、唯一性と距離保存性を満たす合成ビット列の配置（合成ビット列マップ３６＃２、３６＃４）を示す図である。
【図８】ビット長が８の場合に、唯一性と距離保存性を満たす合成ビット列マップ３６＃８を示す図である。
【図９】合成ビット列マップ３６を生成するための処理の流れを示すフローチャートである。
【図１０】ビット長＝２の初期グリッドと、各ブロックの左上隅のブロックからのハミング距離を示す図である。
【図１１】図１０の初期グリッドから生成される、ビット長＝４のプレイス・ホルダグリッド３７＃４を例示した図である。
【図１２】２倍の大きさに拡張されたビット長＝４のプレイス・ホルダグリッド３７＃４！を例示した図である。
【図１３】ビット長＝４のマスクデータ３８＃４を例示した図である。
【図１４】プレイス・ホルダグリッド３７＃４とマスクデータ３８＃４から合成ビット列マップ３６＃４が生成される様子を示す図である。
【図１５】ビット長＝４の合成ビット列マップ３６＃４からビット長＝８のプレイス・ホルダグリッド３７＃８が生成される様子を示す図である。
【図１６】ビット長＝８のプレイス・ホルダグリッド３７＃８とビット長＝８のマスクデータ３８＃８から、ビット長＝８の合成ビット列マップ３６＃８が生成される様子を示す図である。
【図１７】本発明の第２実施例に係る座標コード化装置２の機能構成例である。
【図１８】平面を処理対象とする場合に、座標コード化装置２によって実行される処理の概要を示すフローチャートである。
【図１９】ビット列ｓｘとｓｙから合成ビット列ｓを生成する様子を示す図である。
【図２０】球面を処理対象とする場合に、座標コード化装置２によって実行される処理の概要を示すフローチャートである。
【図２１】座標コード化装置２により実行される、座標ｘ又はｖをビット列に変換する処理の流れを示すサブフローである。
【図２２】座標コード化装置２により実行される、座標ｙ又はｗをビット列に変換する処理の流れを示すサブフローである。
【図２３】合成ビット列ｓが決定される様子を、合成ビット列マップ３６に則して模式的に示す図である。
【図２４】第１実施例に係る距離算出装置１や第２実施例に係る座標コード化装置の適用例である。
【発明を実施するための形態】
【００２１】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【実施例】
【００２２】
＜第１実施例＞
以下、図面を参照し、本発明の第１実施例に係る距離算出装置１、距離算出方法、及びプログラムについて説明する。
【００２３】
［ハードウエア構成］
図５は、本発明の第１実施例に係る距離算出装置１のハードウエア構成例である。距離算出装置１は、例えば、ＣＰＵ（Central  Processing  Unit）１０と、ドライブ装置１２と、補助記憶装置１６と、メモリ装置１８と、インタフェース装置２０と、入力装置２２と、ディスプレイ装置２４と、を備える情報処理装置である。これらの構成要素は、バスやシリアル回線等を介して接続されている。
【００２４】
ＣＰＵ１０は、例えば、プログラムカウンタや命令デコーダ、各種演算器、ＬＳＵ（Load  Store  Unit）、汎用レジスタ等を有するプロセッサである。
【００２５】
ドライブ装置１２は、記憶媒体１４からプログラムやデータを読み込み可能な装置である。プログラムを記録した記録媒体１４がドライブ装置１２に装着されると、プログラムが記録媒体１４からドライブ装置１２を介して補助記憶装置１６にインストールされる。記録媒体１４は、例えば、ＣＤ−ＲＯＭ、ＤＶＤディスク、ＵＳＢメモリ等の可搬型の記録媒体である。また、補助記憶装置１６は、例えば、ＨＤＤ（Hard  Disk  Drive）やフラッシュメモリである。
【００２６】
プログラムのインストールは、上記のように記憶媒体１４を用いる他、インタフェース装置２０がネットワークを介して他のコンピュータよりダウンロードし、補助記憶装置１６にインストールすることによって行うこともできる。ネットワークは、インターネット、ＬＡＮ（Local  Area  Network）、携帯電話の電波網等である。また、プログラムは、情報処理装置の出荷時に、予め補助記憶装置１６やＲＯＭ（Read  Only  Memory）等に格納されていてもよい。
【００２７】
このようにしてインストール又は予め格納されたプログラムをＣＰＵ１０が実行することにより、図１に示す態様の情報処理装置が、本実施例の距離算出装置１として機能することができる。
【００２８】
メモリ装置１８は、例えば、ＲＡＭ（Random  Access  Memory）やＥＥＰＲＯＭ（Electrically  Erasable  and  Programmable  Read  Only  Memory）である。インタフェース装置２０は、上記ネットワークとの接続等を制御する。
【００２９】
入力装置２２は、例えば、キーボードやマウス、タッチパッド、タッチパネル、マイク等である。また、ディスプレイ装置２４は、例えば、ＬＣＤ（Liquid  Crystal  Display）やＣＲＴ（Cathode  Ray  Tube）等の表示装置である。距離算出装置１は、ディスプレイ装置２４の他、プリンタ、スピーカ等の他の種類の出力装置を備えてもよい。
【００３０】
［機能構成］
図６は、本発明の第１実施例に係る距離算出装置１の機能構成例である。距離算出装置１は、合成ビット列マップ生成部３０と、データ検索処理部３２と、距離算出部３４と、を備える。これらの機能ブロックは、補助記憶装置１６等に格納されたプログラム・ソフトウエアをＣＰＵ１０が実行することにより機能する。なお、これらの機能ブロックが明確に分離したプログラムによって実現される必要はなく、サブルーチンや関数として他のプログラムによって呼び出されるものであってもよい。また、機能ブロックの一部が、ＩＣ（Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等のハードウエア手段であっても構わない。
【００３１】
合成ビット列マップ生成部３０は、後述するように、所望のビット長の合成ビット列マップ３６を生成して補助記憶装置１６やメモリ装置１８に格納する。
【００３２】
データ検索処理部３２は、補助記憶装置１６やメモリ装置１８、ＲＯＭ等に格納された合成ビット列マップ３６を用いて、入力装置２２により入力された二点の座標データに対応する合成ビット列を出力する。入力されるデータには、上記座標データの他、精度を表す指標となる座標精度Ｎが含まれる。
【００３３】
座標データは、例えば処理対象が平面である場合は、ｘ軸とｙ軸が直交する座標系におけるｘ座標とｙ座標の組み合わせで表され、処理対象が球面である場合は、経度ｖ及び緯度ｗで表される。本発明は、平面と球面のいずれに対しても適用可能であり、双方に対して適用される原理は基本的に同じである。
【００３４】
図７は、ビット長が２、４と与えられた場合に、唯一性と距離保存性を満たす合成ビット列の配置（合成ビット列マップ３６＃２、３６＃４）を示す図である。また、図８は、ビット長が８と与えられた場合に、唯一性と距離保存性を満たす合成ビット列マップ３６＃８を示す図である。本実施例においても、合成ビット列を、上段部分を経度に割り当て、下段部分を緯度に割り当てた二段のデータとして表現する。なお、本図及び以下の説明では、合成ビット列の各ビット値は０か１の二値をとり得るものとする。
【００３５】
図中、直線で区画される矩形領域が、平面に対して適用可能な領域Ａｐであり、破線で区画される矩形領域が、球面に対して適用可能な領域Ａｓである。領域Ａｐは、基準位置である「００００００００」が左上、左下、右上、右下のうちいずれかの隅に位置し、領域Ａｓは、基準位置である「００００００００」が上端又は下端（左右は不問）に位置するように、合成ビット列マップ３６から切り出される。なお、これとは逆に、基準位置が、「１１１１１１１１」で表されるものとしてもよい。更に、基準位置が「０１１０１１０１」で表されると共に、最も遠いブロックが「１００１００１０」で表されてもよく、基準位置には任意のビット列を割り当ててよい。
【００３６】
図７、８に示すように、領域Ａｐにおいて、合成ビット列は全て異なっており（唯一性を満たす）、任意の二ブロック間でブロック距離ＢＤとハミング距離ＨＤは一致している（距離保存性を満たす）。ハミング距離ＨＤとは、前述のように、二ブロックにそれぞれ付与された合成ビット列において、対応するビット値が異なる数、すなわち反転ビット数である。また、領域Ａｓにおいても唯一性と距離保存性を満たすのであるが、日付変更線（＝左右の端部）をまたがって繋がるブロック間でもブロック距離ＢＤとハミング距離ＨＤが一致する点が領域Ａｐと異なる。
【００３７】
［合成ビット列マップ３６の生成］
以下、図７、８で示した合成ビット列マップ３６の生成方法について説明する。図９は、合成ビット列マップ３６を生成するための処理の流れを示すフローチャートである。本フローは、合成ビット列マップ生成部３０により実行される。
【００３８】
まず、合成ビット列マップ生成部３０は、最短ビット長であるビット長＝２の初期データを生成してメモリ装置１８等に格納する（Ｓ１００）。以下、図７、８で示したように領域が分割され、それぞれにビット列が割り当てられたデータ構造を、グリッドと称する。図１０は、ビット長＝２の初期グリッドと、各ブロックの左上隅のブロックからのハミング距離を示す図である。図１０から明らかなように、初期グリッドにおいて、ブロック距離ＢＤとハミング距離ＨＤは一致している。
【００３９】
次に、合成ビット列マップ生成部３０は、入力グリッド内のビット列を２倍にしたデータ領域を確保すると共に、元々のデータをデータ領域内に埋め込み、それ以外の部分をブランクデータとしたデータ構造を生成してメモリ装置１８等に格納する（Ｓ１０２）。以下、このようなグリッドデータを、プレイス・ホルダグリッド３７と称する。なお、始めて本ステップを実行する場合は、入力グリッド＝初期グリッドとなる。
【００４０】
図１１は、図１０の初期グリッドから生成される、ビット長＝４のプレイス・ホルダグリッド３７＃４を例示した図である。図中、ブランクデータを「＊」で表現した。プレイス・ホルダグリッド３７におけるブランクデータの配置は、図示するように「上段部分と下段部分のそれぞれの後半部分（下位ビット）」と定めてもよいし、上段部分と下段部分における他の部分（前半部分、中央部分等）と定めてもよい。なお、合成ビット列における上段部分は経度を表し、下段部分は緯度を表すのであるから、上段部分と下段部分に配分されるブランクデータは同数であることが望ましい（経度と緯度で精度が異なる場合はこの限りでない）。
【００４１】
合成ビット列が上段部分と下段部分を分けない場合、合成ビット列の末尾等の任意の位置に追加してもよい。例えば、合成ビット列「０＊１＊」の＊部分をブランクデータとしてもよいし、「＊０１＊」の＊部分をブランクデータとしてもよいし、「０１＊＊」の＊部分をブランクデータとしてもよい。
【００４２】
次に、合成ビット列マップ生成部３０は、プレイス・ホルダグリッド３７を、同一の合成ビット列が２×２の行列をなすように、縦横がそれぞれ２倍の大きさに拡張してメモリ装置１８等に格納する（Ｓ１０４）。図１２は、２倍の大きさに拡張されたビット長＝４のプレイス・ホルダグリッド３７＃４！を例示した図である。
【００４３】
次に、合成ビット列マップ生成部３０は、プレイス・ホルダグリッド３７のビット長に対応するマスクデータ３８を生成してメモリ装置１８等に格納する（Ｓ１０６）。マスクデータ３８は、例えば、グリッドの中央部分に０が多く配置され、周辺部分に１が多く配置されるような一定の規則で生成される。逆に、グリッドの中央部分に１が多く配置され、周辺部分に０が多く配置されるようにしてもよい。また、前述のように、中央部分に任意のデータが配置され、周辺部分に当該任意のデータからの反転ビット数が多くなるようなデータが配置されてもよい。
【００４４】
この結果、あるブロックと基準位置（例えば中央付近のブロック）との間のブロック距離が大きくなるほど、当該基準位置のブロックに格納された合成ビット列と比較して、ビット値の相違数（反転ビット数）が増加する傾向を示すことになる。図１３は、このような規則によって生成されるビット長＝４のマスクデータ３８＃４を例示した図である。
【００４５】
合成ビット列マップ生成部３０は、マスクデータ３８を生成すると、これをプレイス・ホルダグリッド３７のブランクデータ部分に代入して合成ビット列マップ３６を生成し、メモリ装置１８等に格納する（Ｓ１０８）。図１４は、プレイス・ホルダグリッド３７＃４！とマスクデータ３８＃４から合成ビット列マップ３６＃４が生成される様子を示す図である。図示するように、生成された合成ビット列マップ３６＃４から切り出された領域Ａｐ、Ａｓは、唯一性と距離保存性を満たしている。
【００４６】
次に、合成ビット列マップ生成部３０は、生成した合成ビット列マップのビット長ｎが２Ｎ以上であるか否かを判定する（Ｓ１１０）。座標精度Ｎは、（Ｈ−Ｌ）／２Ｎ以上離れている２地点を区別することを保証するという意味を有する指標値である。また、座標精度Ｎは、Ｓ１０２〜Ｓ１０８の領域分割処理を何回行うかを指定する値でもある。
【００４７】
ビット長ｎが２Ｎ未満であれば、直近に生成した合成ビット列マップ３６を入力グリッドに指定してＳ１０２に戻る。合成ビット列マップ生成部３０は、このような処理を、ビット長ｎが２Ｎ以上となるまで繰り返し実行する。
【００４８】
図１５は、ビット長＝４の合成ビット列マップ３６＃４からビット長＝８のプレイス・ホルダグリッド３７＃８が生成される様子を示す図である。そして、図１６は、ビット長＝８のプレイス・ホルダグリッド３７＃８とビット長＝８のマスクデータ３８＃８から、ビット長＝８の合成ビット列マップ３６＃８が生成される様子を示す図である。
【００４９】
このような処理によって、唯一性と距離保存性を満たす、所望のビット長の合成ビット列マップ３６を生成することができる。合成ビット列マップ３６は、例えば、座標データ、すなわち地理的な座標に対応付けられて格納される。合成ビット列マップ３６が地理的な座標に対応付けられた様子については、後述する第２実施例の図２３を援用する。図中、縦横の［−３００〜５００］が地理的な座標を示している。
【００５０】
データ検索処理部３２は、入力装置２２により入力された二点の座標データに対応するブロックを合成ビット列マップ３６上で検索し、当該二つのブロックに格納された合成ビット列を出力する。
【００５１】
距離算出部３４は、データ検索処理部３２が出力した二つの合成ビット列間の反転ビット数をカウントし、反転ビット数に応じたブロック距離を二点間の距離として出力する。合成ビット列マップ３６が唯一性と距離保存性を満たすことにより、「反転ビット数をカウントする」という簡易な処理によって二点間の距離を算出することができる。
【００５２】
なお、合成ビット列マップ３６は、予め補助記憶装置１６やＲＯＭ等に格納されているものを用いてもよい。この場合、合成ビット列マップ生成部３０は必須の構成でない。
【００５３】
［まとめ］
以上説明した本実施例の距離算出装置１によれば、唯一性と距離保存性を満たす合成ビット列マップ３６を用いて複数の座標に対応する合成ビット列を抽出し、反転ビット数をカウントすることによって、複数の座標間の距離を簡易に算出することができる。
【００５４】
＜第２実施例＞
以下、図面を参照し、本発明の第２実施例に係る座標コード化装置２、座標コード化方法、及びプログラムについて説明する。
【００５５】
［ハードウエア構成］については、第１実施例と共通するため、図５を参照すると共に同一の符号を援用し、各構成要素についての説明を省略する。
【００５６】
［機能構成］
図１７は、本発明の第２実施例に係る座標コード化装置２の機能構成例である。座標コード化装置２は、マスター制御部４０と、付加データ生成部４２と、連結処理部４４と、変換処理部４６と、を備える。これらの機能ブロックは、補助記憶装置１６等に格納されたプログラム・ソフトウエアをＣＰＵ１０が実行することにより機能する。なお、これらの機能ブロックが明確に分離したプログラムによって実現される必要はなく、サブルーチンや関数として他のプログラムによって呼び出されるものであってもよい。また、機能ブロックの一部が、ＩＣやＦＰＧＡ等のハードウエア手段であっても構わない。
【００５７】
マスター制御部４０は、入力装置２２により入力された座標データに対応する合成ビット列を出力するように、付加データ生成部４２及び連結処理部４４を制御する。入力されるデータには、上記座標データの他、精度を表す指標となる座標精度Ｎが含まれる。
【００５８】
座標データは、第１実施例と同様、例えば処理対象が平面である場合は、ｘ軸とｙ軸が直交する座標系におけるｘ座標とｙ座標の組み合わせで表され、処理対象が球面である場合は、経度ｖ及び緯度ｗで表される。本発明は、平面と球面のいずれに対しても適用可能であり、双方に対して適用される原理は基本的に同じである。
【００５９】
［座標データから合成ビット列を導出する処理］
付加データ生成部４２は、第１実施例で説明したマスクデータ３８を生成する処理に準じた処理を行う。また、連結処理部４４は、第１実施例で説明したプレイス・ホルダグリッド３７を用意してマスクデータ３８を格納し、合成ビット列マップ３６を生成する処理に準じた処理を行う。但し、いずれの機能ブロックも、具体的に第１実施例のようなマップデータ（グリッド）を生成せずに、以下に説明するアルゴリズムによって座標データをビット列に変換する。これらの機能ブロックの具体的な処理については、図２１、２２のフローに則して説明する。
【００６０】
図１８は、平面を処理対象とする場合に、座標コード化装置２によって実行される処理の概要を示すフローチャートである。ここでは、入力される座標データを（ｘ，ｙ）、出力される合成ビット列をｓ、ｘ座標の下限値をＬｘ，上限値をＨｘ、ｙ座標の下限値をＬｙ，上限値をＨｙ、座標精度をＮとする。
【００６１】
ここで、ｘ座標の下限値Ｌｘや上限値Ｈｘは、第１実施例で説明した領域Ａｐの外縁と一致するか、それよりも内側となるように、予め定めておく。同様に、ｙ座標の下限値Ｌｙや上限値Ｈｙは、第１実施例で説明した領域Ａｐの外縁と一致するか、それよりも内側となるように、予め定めておく。
【００６２】
まず、座標コード化装置２は、下限値Ｌｘと上限値Ｈｘの間の座標ｘをビット列に変換し、ｓｘを出力する（Ｓ２００）。
【００６３】
次に、座標コード化装置２は、下限値Ｌｙと上限値Ｈｙの間の座標ｙをビット列に変換し、ｓｙを出力する（Ｓ２０２）。
【００６４】
ここで、座標（ｘ，ｙ）のいずれかが下限値と上限値の間から逸脱している場合は、エラー出力等を行うものとする。
【００６５】
次に、座標コード化装置２は、ｓｘを偶数ビットとし、ｓｙを奇数ビットとする合成ビット列ｓを生成して出力する（Ｓ２０４）。図１９は、ビット列ｓｘとｓｙから合成ビット列ｓを生成する様子を示す図である。なお、合成ビット列の生成規則については、これに限らず、第１実施例で説明したように種々の規則を採用してよい。
【００６６】
また、図２０は、球面を処理対象とする場合に、座標コード化装置２によって実行される処理の概要を示すフローチャートである。ここでは、入力される座標データを（ｖ，ｗ）、出力される合成ビット列をｓ、経度ｖの下限値を−１８０，上限値を１８０、緯度ｗの下限値を−９０，上限値を９０、座標精度をＮとする。
【００６７】
ここで、ｘ座標の下限値Ｌｘや上限値Ｈｘは、第１実施例で説明した領域Ａｓの外縁と一致するか、それよりも内側となるように、予め定めておく。同様に、ｙ座標の下限値Ｌｙや上限値Ｈｙは、第１実施例で説明した領域Ａｓの外縁と一致するか、それよりも内側となるように、予め定めておく。
【００６８】
まず、座標コード化装置２は、下限値−１８０と上限値１８０の間の座標ｖをビット列に変換し、ｓｖを出力する（Ｓ３００）。
【００６９】
次に、座標コード化装置２は、下限値−９０と上限値９０の間の座標ｗをビット列に変換し、ｓｗを出力する（Ｓ３０２）。
【００７０】
ここで、座標（ｖ，ｗ）のいずれかが下限値と上限値の間から逸脱している場合は、エラー出力等を行うものとする。
【００７１】
次に、座標コード化装置２は、ｓｖを偶数ビットとし、ｓｗを奇数ビットとする合成ビット列ｓを生成して出力する（Ｓ３０４）。合成ビットの生成については、図１９を参照することとし、説明を省略する。
【００７２】
（詳細説明）
以下、図１８のＳ２００及びＳ２０２、並びに図２０のＳ３００及びＳ３０２における座標をビット列に変換する処理について、より詳細に説明する。
【００７３】
まず、横方向の座標ｘ又はｖをビット列に変換する処理について説明する。図２１は、座標コード化装置２により実行される、座標ｘ又はｖをビット列に変換する処理の流れを示すサブフローである。図１８のＳ２００、並びに図２０のＳ３００では、本図で示す処理に準じた処理が行われる。ここでは、座標ｘをビット列ｓｘに変換する処理についてのみ説明するが、座標ｖをビット列ｓｖに変換する処理についても同様である。
【００７４】
まず、マスター制御部４０は、合成ビット列ｓの初期ビット長ｎを２と定義し（Ｓ４００）、座標ｘが区間［Ｌｘ*，Ｍ）に含まれるかどうかを判定する（Ｓ４０２）。ここで、Ｌｘ*やＨｘ*は、領域ＡｐやＡｓを切り出す前の合成ビット列マップ３６の外縁（唯一性を満たす領域の外縁）を示しており、Ｍは、Ｌｘ*とＨｘ*の中間点｛（Ｌｘ*＋Ｈｘ*）／２｝である。
【００７５】
座標ｘが区間［Ｌｘ*，Ｍ）に含まれる場合は、ビット列ｓｘの初期値を０とする（Ｓ４０４）。一方、座標ｘが区間［Ｍ，Ｈｘ*］に含まれる場合は、ビット列ｓｘの初期値を１とする（Ｓ４０６）。
【００７６】
次に、マスター制御部４０は、ビット長ｎが２Ｎ以上であるか否かを判定する（Ｓ４０８）。座標精度Ｎは、（Ｈ−Ｌ）／２Ｎ以上離れている２地点を区別することを保証するという意味を有する指標値である。また、座標精度Ｎは、Ｓ４１０〜Ｓ４１６のループ処理を何回行うかを指定する値でもある。
【００７７】
ビット長ｎが２Ｎ未満である場合は、付加データ生成部４２が、ビット長ｎを２倍し（Ｓ４１０）、区間［Ｌｘ*，Ｈｘ*］をｎ等分した区間群のうち、座標ｘが属する区間の番号をｉと定義する（Ｓ４１２）。ここで、ｉは、１≦ｉ≦ｎを満たし、例えば左側の区間から順に１、２、３、…、ｎとカウントされる。
【００７８】
そして、次式（１）で表される付加データｂｅ，ｉを算出する（Ｓ４１４）。なお、付加データｂｅ，ｉの添え字「ｅ」は、「ｅｖｅｎ」すなわち偶数ビット（＝二段の合成ビット列の内、上段のビット列）を表している。式中、「〜」はｎｏｔ演算子（反転）であり、「＜＜」は左方向への論理シフト演算子であり、「floor」は切り捨てを意味する関数である。
【００７９】
ｂｅ，ｉ＝〜｛（２ｎ／４−１）＜＜floor（ｉ／２−ｎ／４）｝  …（１）
【００８０】
ここで、付加データｂｅ，ｉを算出する処理は、第１実施例で説明したビット長ｎのマスクデータ３８から、横方向の位置がｉで表されるブロックに格納されたビット列の上段部分を取り出す処理と等価である。第１実施例では全体のマスクデータ３８を生成した後に該当箇所のビット列を取り出すものとして説明したが、第２実施例では該当箇所のビット列を直接的に算出することができる。
【００８１】
付加データｂｅ，ｉが算出されると、連結処理部４４が、付加データｂｅ，ｉをビット列ｓｘに連結して新たなビット列ｓｘとしてメモリ装置１８等に格納する（Ｓ４１６）。そして、再度Ｓ４０８の判定を行う。
【００８２】
マスター制御部４０は、Ｓ４０８においてビット長ｎが２Ｎ以上であると判定した場合は、その時点でメモリ装置１８等に格納されているビット列ｓｘを出力して（Ｓ４１８）本フローを終了する。
【００８３】
次に、縦方向の座標ｙ又はｗをビット列に変換する処理について説明する。図２２は、座標コード化装置２により実行される、座標ｙ又はｗをビット列に変換する処理の流れを示すサブフローである。図１８のＳ２０２、並びに図２０のＳ３０２では、本図で示す処理に準じた処理が行われる。ここでは、座標ｙをビット列ｓｙに変換する処理についてのみ説明するが、座標ｗをビット列ｓｗに変換する処理についても同様である。
【００８４】
まず、マスター制御部４０は、合成ビット列ｓの初期ビット長ｎを２と定義し（Ｓ５００）、座標ｙが区間［Ｌｙ*，Ｍ）に含まれるかどうかを判定する（Ｓ５０２）。ここで、Ｍは、Ｌｙ*とＨｙ*の中間点｛（Ｌｙ*＋Ｈｙ*）／２｝である。なお、Ｌｙ*やＨｙ*は、領域ＡｐやＡｓを切り出す前の合成ビット列マップ３６の外縁を示している。
【００８５】
座標ｙが区間［Ｌｙ*，Ｍ）に含まれる場合は、ビット列ｓｙの初期値を０とする（Ｓ５０４）。一方、座標ｙが区間［Ｍ，Ｈｙ*］に含まれる場合は、ビット列ｓｙの初期値を１とする（Ｓ５０６）。
【００８６】
次に、マスター制御部４０は、ビット長ｎが２Ｎ以上であるか否かを判定する（Ｓ５０８）。座標精度Ｎは、（Ｈ−Ｌ）／２Ｎ以上離れている２地点を区別することを保証するという意味を有する指標値である。また、座標精度Ｎは、Ｓ５１０〜Ｓ５１６のループ処理を何回行うかを指定する値でもある。
【００８７】
ビット長ｎが２Ｎ未満である場合は、付加データ生成部４２が、ビット長ｎを２倍し（Ｓ５１０）、区間［Ｌｙ*，Ｈｙ*］をｎ等分した区間群のうち、座標ｙが属する区間の番号をｉと定義する（Ｓ５１２）。ここで、ｉは、１≦ｉ≦ｎを満たし、例えば下側の区間から順に１、２、３、…、ｎとカウントされる。
【００８８】
そして、次式（２）で表される付加データｂｏ，ｉを算出する（Ｓ５１４）。なお、付加データｂｏ，ｉの添え字「ｏ」は、「ｏｄｄ」すなわち奇数ビット（＝二段の合成ビット列の内、下段のビット列）を表している。式中、「〜」はｎｏｔ演算子（反転）であり、「＜＜」は論理シフト演算子である。
【００８９】
ｂｏ，ｉ＝〜｛（２ｎ／４−１）＜＜floor（ｊ／２−ｎ／４）｝  …（２）
【００９０】
ここで、付加データｂｏ，ｉを算出する処理は、第１実施例で説明したビット長ｎのマスクデータ３８から、縦方向の位置がｊで表されるブロックに格納されたビット列の下段部分を取り出す処理と等価である。第１実施例では全体のマスクデータ３８を生成した後に該当箇所のビット列を取り出す処理として説明したが、第２実施例では該当箇所のビット列を直接的に算出することができる。
【００９１】
付加データｂｏ，ｉが算出されると、連結処理部４４が、付加データｂｏ，ｉをビット列ｓｙに連結して新たなビット列ｓｙとしてメモリ装置１８等に格納する（Ｓ５１６）。
【００９２】
マスター制御部４０は、Ｓ５０８においてビット長ｎが２Ｎ以上であると判定した場合は、その時点でメモリ装置１８等に格納されているビット列ｓｙを出力して（Ｓ５１８）本フローを終了する。
【００９３】
ここで、付加データ生成部４２により算出される付加データの性質について補足する。付加データは、第１実施例におけるマスクデータ３８と同じ性質を有しており（図１３、１６を参照）、マスクデータ３８は、上式（１）、（２）を用いて生成することができる。換言すると、付加データ生成部４２が付加データを生成する処理は、マスクデータ３８を生成した上で所望のブロックからマスクデータを取り出す処理と同じ意義を有している。
【００９４】
付加データｂｅ，ｉ、ｂｏ，ｉのビット長は、それぞれビット長ｎの１／４となり、これらを合成して二段とした合成付加データのビット長は、ビット長ｎの１／２となる。
【００９５】
また、例えば、付加データｂｅ，ｉ（上段）は、水平方向に関して中央の２列分のブロックはすべてのビットが０となり、中央より右のブロックでは、一ブロックおきに、下位ビットから順に０から１に置き換えられ、右端ですべてのビットが１となる。中央より左のブロックでは、一ブロックおきに、上位ビットから０から１に置き換えられ、右端ですべてのビットが１となる。
【００９６】
また、付加データｂｏ，ｉ（下段）は、垂直方向に関して中央の２列分のブロックはすべてのビットが０となり、中央より下のブロックでは、一ブロックおきに、下位ビットから順に０から１に置き換えられ、下端ですべてのビットが１となる。中央より上のブロックでは、一ブロックおきに、上位ビットから０から１に置き換えられ、上端ですべてのビットが１となる。
【００９７】
なお、前述したように、付加データにおける０と１の関係は、逆でも構わないし、必ずしも中央付近のブロックに０又は１を偏在させる必要は無い。
【００９８】
また、連結処理部４４がデータを連結する処理は、拡大後のプレイス・ホルダグリッド３７にマスクデータ３８を代入する処理と同じ意義を有している。一見すると、第２実施例ではプレイス・ホルダグリッド３７の拡大処理に相当する処理は行っていないように見えるが、実際には、付加データの算出時に前回のビット列と比較して精度を２倍にしている関係で、拡大処理と代入処理がまとめて行われている。
【００９９】
これらより、付加データが変化しないブロック間では連結対象のビット列ｓｘ又はｓｙのビット値が変化し、付加データが変化するブロック間では連結対象のビット列ｓｘ又はｓｙが変化しないという関係が得られる。これらの結果、１ブロック毎にビット値が変化する傾向で合成ビット列ｓが決定されることになる。このような関係については、第１実施例で示した図１４を参照することにより、理解することができる。図１４における（ａ）で示すブロック間では、マスクデータ３８＃４の内容は変化しないが、プレイス・ホルダグリッド３７＃４！の内容は変化する。逆に、図１４における（ｂ）で示すブロック間では、マスクデータ３８＃４の内容は変化するが、プレイス・ホルダグリッド３７＃４！の内容は変化しない。マスクデータ３８と同様の性質を有する付加データは、プレイス・ホルダグリッド３７と同様の性質を有する連結対象のビット列との間で、同様の関係が成立している。従って、１ブロック毎にビット値が変化する傾向で合成ビット列ｓを決定することができる。
【０１００】
こうしてビット列ｓｘ、ｓｙが生成されると、これを合成して合成ビット列ｓを得ることになる（図１８のＳ２０４、並びに図２０のＳ３０４）。このように得られた合成ビット列ｓをそのままコードとして出力してもよいし、変換処理部４６がｂａｓｅ３２等を用いてテキストデータに変換して出力してもよい。いずれの場合も、唯一性と距離保存性を満たすコードを出力することができる。従って、二点の座標データに基づき出力されたコードを利用して、第１実施例と同様に距離を簡易に算出することができる。
【０１０１】
なお、合成ビット列ｓをアルゴリズムによって算出することを説明したが、予め合成ビット列マップ３６を作成又はインストールして補助記憶装置１６等に格納しておき、これを入力された座標データに適用して合成ビット列ｓを出力してもよい。
【０１０２】
更に付言すると、第１実施例で説明した合成ビット列マップ３６を生成する処理は、幾何的な領域分割に限らず、第２実施例に係るフローを領域内に存在し得る全ての座標データについて網羅的に行い、結果を格納することによっても行うことができる。
【０１０３】
前述したように、公知のジオ・ハッシュ等のように距離保存性が無いマップを用いた場合、二点のコードないし合成ビット列を与えられたとしても、即座にブロック距離を導出できない。この結果、コードないし合成ビット列から座標を逆算して距離を演算する必要が生じ、処理負担増や処理遅延を招くおそれがある。
【０１０４】
これに対し、座標コード化装置２では、唯一性と距離保存性を満たす合成ビット列を生成するため、これを用いて、簡易な処理によって二点間の距離を算出することができる。
【０１０５】
［動作例］
以下、本実施例の座標コード化装置２の動作例を示す。図２３は、合成ビット列ｓが決定される様子を、合成ビット列マップ３６に則して模式的に示す図である。本図は、対象領域が平面であるものとする、また、領域Ａｐの左上隅のブロックの座標を（０，０）、右下隅の座標を（５００，５００）とする（単位は［ｍ］等、任意に決定される。このとき、座標データ（３５０，１５０）に対応する合成ビット列ｓを、座標精度Ｎ＝３で取得する。ここで、合成ビット列マップ３６の唯一性を満たす領域は、ｘ：［−３００，５００］、ｙ：［−３００，５００］で表されるため、Ｌｘ*＝−３００、Ｈｘ*＝５００、Ｌｙ*＝−３００、Ｈｙ*＝５００である。
【０１０６】
まず、ｘ＝３５０から図２１のフローに基づき偶数ビット列ｓｘを生成する。Ｓ４００において合成ビット列の初期ビット長ｎが２と定義され、座標ｘ＝３５０が区間［１００，５００］に含まれるため、ビット列ｓｘの初期値が１となる（Ｓ４０２〜Ｓ４０６）。
【０１０７】
Ｓ４０８においては、ｎ＝２＜２３であるためＳ４１０に進む。Ｓ４１０においてｎが２倍されて４となり、Ｓ４１２においてｘ＝３５０は区間［−３００，５００］を４等分した区間群の左から４番目に当たるため、ｉ＝４と定義される。この結果、Ｓ４１４において付加データｂｅ，４は、次式（３）で示すように、１となる（１を１ビット論理シフトすると０、これの反転は１である）。
【０１０８】
ｂｅ，４＝〜｛（２４／４−１）＜＜floor（４／２−４／４）｝
＝〜（１＜＜１）＝１  …（３）
【０１０９】
そして、Ｓ４１６において、付加データｂｅ，４＝１をビット列ｓｘ＝１に連結して新たなビット列ｓｘ＝１１が生成され、Ｓ４０８に戻る。
【０１１０】
Ｓ４０８においては、ｎ＝４＜２３であるためＳ４１０に進む。Ｓ４１０においてｎが２倍されて８となり、Ｓ４１２においてｘ＝３５０は区間［−３００，５００］を８等分した区間群の左から７番目に当たるため、ｉ＝７と定義される。この結果、Ｓ４１４において付加データｂｅ，７は、次式（４）で示すように、０１となる（３すなわち１１を１ビット論理シフトすると１０、これの反転は０１である）。
【０１１１】
ｂｅ，７＝〜｛（２８／４−１）＜＜floor（７／２−８／４）｝
＝〜（３＜＜１）＝０１  …（４）
【０１１２】
そして、Ｓ４１６において、付加データｂｅ，７＝０１をビット列ｓｘ＝１１に連結して新たなビット列ｓｘ＝１１０１が生成され、Ｓ４０８に戻る。
【０１１３】
Ｓ４０８においては、ｎ＝８≧２３であるため、Ｓ４１８に進み、ビット列ｓｘ＝１１０１が出力される。
【０１１４】
次に、ｙ＝１５０から図２２のフローに基づき奇数ビット列ｓｙを生成する。Ｓ５００において合成ビット列の初期ビット長ｎが２と定義され、座標ｙ＝１５０が区間［１００，５００］に含まれるため、ビット列ｓｙの初期値が１となる（Ｓ５０２〜Ｓ５０６）。
【０１１５】
Ｓ５０８においては、ｎ＝２＜２３であるためＳ５１０に進む。Ｓ５１０においてｎが２倍されて４となり、Ｓ５１２においてｙ＝１５０は区間［−３００，５００］を４等分した区間群の上から３番目に当たるため、ｊ＝３と定義される。この結果、Ｓ５１４において付加データｂｏ，３は、次式（５）で示すように、０となる。
【０１１６】
ｂｏ，３＝〜｛（２４／４−１）＜＜floor（３／２−４／４）｝
＝〜（１＜＜０）＝０  …（５）
【０１１７】
そして、Ｓ５１６において、付加データｂｏ，３＝０をビット列ｓｙ＝１に連結して新たなビット列ｓｙ＝１０が生成され、Ｓ５０８に戻る。
【０１１８】
Ｓ５０８においては、ｎ＝４＜２３であるためＳ５１０に進む。Ｓ５１０においてｎが２倍されて８となり、Ｓ５１２においてｙ＝１５０は区間［−３００，５００］を８等分した区間群の上から５番目に当たるため、ｊ＝５と定義される。この結果、Ｓ５１４において付加データｂｏ，５は、次式（６）で示すように、００となる。
【０１１９】
ｂｏ，５＝〜｛（２８／４−１）＜＜floor（５／２−８／４）｝
＝〜（３＜＜０）＝００  …（６）
【０１２０】
そして、Ｓ５１６において、付加データｂｏ，５＝００をビット列ｓｘ＝１０に連結して新たなビット列ｓｙ＝１０００が生成され、Ｓ５０８に戻る。
【０１２１】
Ｓ５０８においては、ｎ＝８≧２３であるため、Ｓ５１８に進み、ビット列ｓｙ＝１０００が出力される。
【０１２２】
この結果、ビット列ｓｘとビット列ｓｙから交互に１ビットずつ上位ビットから読み出した合成ビット列ｓ＝１１１０００１０（二段で表すとすれば、上段１１０１、下段１０００）が座標データ（３５０，１５０）について得られる。
【０１２３】
また、同様の処理を座標データ（５０，５０）に対して行うと、合成ビット列ｓ＝００００００００（二段で表すとすれば、上段００００、下段００００）となる。また、座標データ（２５０，２５０）に対して行うと、合成ビット列ｓ＝１１００００１１（二段で表すとすれば、上段１００１、下段１００１）となる。
【０１２４】
以下、座標データ（３５０，１５０）を座標Ａ、座標データ（５０，５０）を座標Ｂ、座標データ（２５０，２５０）を座標Ｃとする。これらについて得られた合成ビット列ｓは、座標精度Ｎ＝３であるため、合成ビット列マップ３６の外縁｛５００−（−３００）｝を２３で除算した結果の「１００」以上離れた点を区別可能な精度を有する。
【０１２５】
座標Ａと座標Ｂの間のブロック距離ＢＤは、図２３を参照すると４ブロック（１ブロックの距離に相当する１００を乗算すれば４００）となる。ブロック距離ＢＤは、座標同士の差分の絶対和としても算出できる（｜３５０−５０｜＋｜１５０−５０｜＝４００；ブロック数でいうと４）。一方、座標Ａに対応する合成ビット列ｓＡ＝１１１０００１０、座標Ｂに対応する合成ビット列ｓＢ＝００００００００であるため、ハミング距離（反転ビット数）は４である。
【０１２６】
また、座標Ａと座標Ｃの間のブロック距離ＢＤは、図２３を参照すると２ブロック（１ブロックの距離に相当する１００を乗算すれば２００）となる。また、座標Ａに対応する合成ビット列ｓＡ＝１１１０００１０、座標Ｃに対応する合成ビット列ｓＢ＝１１００００１１であるため、ハミング距離（反転ビット数）は２である。
【０１２７】
このように、本実施例の座標コード化装置２の処理結果において、ブロック距離ＢＤとハミング距離ＨＤは一致する（又は保存される）ことが確かめられた。
【０１２８】
［まとめ］
以上説明した本実施例の座標コード化装置２によれば、入力された座標データを、唯一性と距離保存性を満たすコードに変換して出力することができる。この結果、コードから距離を導出する処理等を迅速且つ簡易に行わせることができる。
【０１２９】
＜変形等＞
以上、本発明を実施するための最良の形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【０１３０】
例えば、ハードウエアの面において、なお、距離算出装置１や座標コード化装置２は、入力から出力まで独立して動作するものに限らず、図２４に示すようにネットワーク６０に接続されたサーバ装置であってもよい。図２４は、第１実施例に係る距離算出装置１や第２実施例に係る座標コード化装置の適用例である。この場合、クライアントコンピュータ５０の入力装置５０＿１に入力された座標データが座標コード化装置２に送信され、座標コード化装置２がクライアントコンピュータ５０にコードを返す処理を行う。また、あるいはクライアントコンピュータ５０の入力装置５０＿１に入力されたコードが距離算出装置１に送信され、距離算出装置１がクライアントコンピュータ５０に距離を返す処理を行う。
【０１３１】
以上の説明に関し、さらに以下の項を開示する。
（付記１）
処理対象領域を所定ビット長に応じたブロックに分割認識し、入力された座標データが示す位置が基準位置から離れるのに応じて基準データと比較したビット値の相違数が徐々に増加する傾向で、前記座標データに対応する所定ビット長の付加データを生成する付加データ生成手段と、
前記生成された付加データを、記憶手段に格納された所定ビット長のデータに連結して前記所定ビット長の２倍のビット長のデータを生成し、該生成したデータを前記記憶手段に格納する連結処理手段と、
前記連結処理手段により前記記憶手段に格納されたデータのビット長を前記所定ビット長に指定して前記付加データ生成手段に付加データを生成させ、次いで前記連結処理手段にデータを連結して記憶手段に格納させることを繰り返し行う制御手段と、
を備える座標コード化装置。
（付記２）
付記１に記載の座標コード化装置であって、
前記付加データ生成手段は、前記ブロックに関して一つおきにビット値の相違数が増加するように、前記付加データを生成する手段である、
座標コード化装置。
（付記３）
付記２に記載の座標コード化装置であって、
前記付加データ生成手段は、次式に基づいて付加データを生成する手段であり、
付加データ＝〜｛（２ｎ／４−１）＜＜floor（ｋ／２−ｎ／４）｝、
式中、ｎは前記所定ビット長であり、〜はｎｏｔ演算子（反転）であり、＜＜は左方向への論理シフト演算子であり、floorは切り捨てを意味する関数であり、ｋは処理対象領域を所定ビット長に応じたブロックに分割認識した際に、入力された座標データがどのブロックに属するかを示す値である、
座標コード化装置。
（付記４）
処理対象領域を所定ビット長に応じたブロックに分割認識し、入力された座標データが示す位置が基準位置から離れるのに応じて基準データと比較したビット値の相違数が徐々に増加する傾向で、前記座標データに対応する所定ビット長の付加データを生成する処理と、
前記生成された付加データを、記憶手段に格納された所定ビット長のデータに連結して前記所定ビット長の２倍のビット長のデータを生成し、該生成したデータを前記記憶手段に格納する処理と、
前記連結処理手段により前記記憶手段に格納されたデータのビット長を前記所定ビット長に指定して前記付加データ生成手段に付加データを生成させ、次いで前記連結処理手段にデータを連結して記憶手段に格納させることを繰り返し行う処理と、
をコンピュータが実行する座標コード化方法。
（付記５）
処理対象領域を所定ビット長に応じたブロックに分割認識し、入力された座標データが示す位置が基準位置から離れるのに応じて基準データと比較したビット値の相違数が徐々に増加する傾向で、前記座標データに対応する所定ビット長の付加データを生成する処理と、
前記生成された付加データを、記憶手段に格納された所定ビット長のデータに連結して前記所定ビット長の２倍のビット長のデータを生成し、該生成したデータを前記記憶手段に格納する処理と、
前記連結処理手段により前記記憶手段に格納されたデータのビット長を前記所定ビット長に指定して前記付加データ生成手段に付加データを生成させ、次いで前記連結処理手段にデータを連結して記憶手段に格納させることを繰り返し行う処理と、
をコンピュータに実行させるプログラム。
（付記６）
地理的な座標と距離保存性を満たすコードとが対応付けられたマップデータを格納した記憶手段と、
入力された複数の座標データを検索キーとして前記マップデータを検索し、該複数の座標データに対応する複数のコードを取得するデータ検索手段と、
該データ検索手段により取得された複数のコードを比較して前記複数の座標データ間の距離を算出する距離算出手段と、
を備える距離算出装置。
（付記７）
入力された複数の座標データを検索キーとして、地理的な座標と距離保存性を満たすコードとが対応付けられたマップデータを検索し、該複数の座標データに対応する複数のコードを取得する処理と、
該取得された複数のコードを比較して前記複数の座標データ間の距離を算出する処理と、
をコンピュータが実行する距離算出方法。
（付記８）
入力された複数の座標データを検索キーとして、地理的な座標と距離保存性を満たすコードとが対応付けられたマップデータを検索し、該複数の座標データに対応する複数のコードを取得する処理と、
該取得された複数のコードを比較して前記複数の座標データ間の距離を算出する処理と、
をコンピュータに実行させるプログラム。
（付記９）
入力されたマップデータに格納されたデータに、それぞれブランクデータを連結した第１のマップデータを生成し、該第１のマップデータを連結したデータを縦横２倍に拡張する第１のマップデータ生成手段と、
基準位置から離れるのに応じて基準データと比較したビット値の相違数が徐々に増加する傾向のデータが格納された第２のマップデータを生成する第２のマップデータ生成手段と、を備え、
前記第１のマップデータ生成手段により拡張された第１のマップデータのブランクデータ部分に前記第２のマップデータに格納されたデータを代入して距離保存性を満たすマップデータを生成することを繰り返し行うことを特徴とする、
コードマップ作成装置。
（付記１０）
入力されたマップデータに格納されたデータに、それぞれブランクデータを連結した第１のマップデータを生成し、該第１のマップデータを連結したデータを縦横２倍に拡張する処理と、
基準位置から離れるのに応じて基準データと比較したビット値の相違数が徐々に増加する傾向のデータが格納された第２のマップデータを生成する処理と、
前記第１のマップデータ生成手段により拡張された第１のマップデータのブランクデータ部分に前記第２のマップデータに格納されたデータを代入して距離保存性を満たすマップデータを生成することを繰り返し行う処理と、
をコンピュータが実行するコードマップ作成方法。
（付記１１）
入力されたマップデータに格納されたデータに、それぞれブランクデータを連結した第１のマップデータを生成し、該第１のマップデータを連結したデータを縦横２倍に拡張する処理と、
基準位置から離れるのに応じて基準データと比較したビット値の相違数が徐々に増加する傾向のデータが格納された第２のマップデータを生成する処理と、
前記第１のマップデータ生成手段により拡張された第１のマップデータのブランクデータ部分に前記第２のマップデータに格納されたデータを代入して距離保存性を満たすマップデータを生成することを繰り返し行う処理と、
をコンピュータに実行させるプログラム。
（付記１２）
距離保存性を満たすマップデータが格納された記憶手段と、
入力された座標データを検索キーとして前記マップデータを検索し、該座標データに対応するコードを取得して出力するデータ検索手段と、
を備える座標コード化装置。
（付記１３）
地理的な座標と距離保存性を満たす複数のコードが入力されると、該入力された複数のコードを比較して距離を算出する距離算出装置。
【符号の説明】
【０１３２】
１    距離算出装置
２    座標コード化装置
３０  合成ビット列マップ生成部
３２  データ検索処理部
３４  距離算出部３４
３６  合成ビット列マップ
３７  プレイス・ホルダグリッド
３８  マスクデータ
４０  マスター制御部
４２  付加データ生成部
４４  連結処理部
４６  変換処理部
【図１】
0005712825.tif 000002
【図２】
0005712825.tif 000003
【図３】
0005712825.tif 000004
【図４】
0005712825.tif 000005
【図５】
0005712825.tif 000006
【図６】
0005712825.tif 000007
【図７】
0005712825.tif 000008
【図８】
0005712825.tif 000009
【図９】
0005712825.tif 000010
【図１０】
0005712825.tif 000011
【図１１】
0005712825.tif 000012
【図１２】
0005712825.tif 000013
【図１３】
0005712825.tif 000014
【図１４】
0005712825.tif 000015
【図１５】
0005712825.tif 000016
【図１６】
0005712825.tif 000017
【図１７】
0005712825.tif 000018
【図１８】
0005712825.tif 000019
【図１９】
0005712825.tif 000020
【図２０】
0005712825.tif 000021
【図２１】
0005712825.tif 000022
【図２２】
0005712825.tif 000023
【図２３】
0005712825.tif 000024
【図２４】
0005712825.tif 000025