(57)【要約】  表示画面上に配置する文字列のデータを取得する文字列データ取得部２と、文字列データ取得部２によって取得された文字列の配置を開始する表示画面上の文字列配置開始候補点を作成する文字列配置開始候補点作成部３と、文字列配置開始候補点作成部３で作成された文字列配置開始候補点を起点として表示画面上の相対する方向で読みがそれぞれ順方向となるように文字列を配置して、各配置の文字列同士の位置関係に基づいて、当該文字列の可読性に影響を与える因子を評価するコスト関数値を算出する最小コスト関数値算出部４と、コスト関数値が最小の位置候補を、文字列の配置開始位置を変更する際の文字列配置開始候補点として記憶する出力文字列配置開始候補点記憶部５とを備える。
2012077158.tif 000002
【特許請求の範囲】
【請求項１】
表示画面上に配置する文字列のデータを取得する文字列データ取得部と、
前記文字列データ取得部によって取得された文字列の配置を開始する前記表示画面上の位置候補を作成する位置候補作成部と、
前記位置候補作成部で作成された位置候補を起点として前記表示画面上の相対する方向で読みがそれぞれ順方向となるように前記文字列を配置して、前記各配置の文字列同士の位置関係に基づいて、当該文字列の可読性に影響を与える因子を評価するコスト関数値を算出するコスト関数値算出部と、
前記コスト関数値が最小の位置候補を、前記文字列の配置開始位置を変更する際の位置候補として記憶する記憶部とを備えた文字列配置装置。
【請求項２】
前記位置候補作成部は、前記表示画面上に表示される線状の画像を示す線分群に沿って前記文字列の配置を開始する位置候補を作成し、
前記コスト関数値算出部は、前記位置候補作成部で作成された位置候補を起点として、
前記線分群を境とした一方の側に前記表示画面上の一方向で読みが順方向となるように前記文字列を配置するとともに、前記線分群を境とした他方の側に前記表示画面上の前記一方向と相対する方向で読みが順方向となるように当該文字列を配置して、前記各配置の文字列同士の重複を示す関数、前記線分群の線分がなす角度を示す関数、及び当該文字列に設定された配置開始位置と前記位置候補との距離を示す関数の値をそれぞれ算出し、これらを足し合わせた値を、当該文字列の可読性に影響を与える因子を評価するコスト関数値として算出することを特徴とする請求項１記載の文字列配置装置。
【請求項３】
前記位置候補作成部は、前記位置候補を起点として、前記線分群を境とした一方の側に前記表示画面上の一方向で読みが順方向となるように前記文字列の文字を順に仮配置して、前記各文字及び順次仮配置した文字同士の位置関係から、文字ごとに当該文字列の配置の可否を判定する第１の文字列配置部と、前記線分群を境とした他方の側に前記表示画面上の前記一方向と相対する方向で読みが順方向となるように当該文字列の文字を順に仮配置して、前記各文字及び順次仮配置した文字同士の位置関係から、文字ごとに当該文字列の配置の可否を判定する第２の文字列配置部とを備え、
前記コスト関数値算出部は、前記第１及び前記第２の文字列配置部で配置可と判定された位置候補を起点として前記コスト関数値を算出することを特徴とする請求項２記載の文字列配置装置。
【請求項４】
前記第１及び前記第２の文字列配置部は、前記文字と前記線分群の線分の重複の有無、前記順次仮配置した文字の文字間隔が所定の閾値より狭いか広いか、及び前記順次仮配置した文字同士の重複の有無に基づいて、前記位置候補を起点とした前記文字列の配置可否を判定することを特徴とする請求項３記載の文字列配置装置。
【請求項５】
前記表示画面上に配置するシンボルのデータを取得するシンボルデータ取得部を備え、
前記コスト関数値算出部は、前記位置候補作成部で作成された位置候補を起点として前記表示画面上の相対する方向で読みがそれぞれ順方向となるように前記文字列を配置し、前記各配置の文字列同士の位置関係、及び前記シンボルデータ取得部で取得されたシンボルと前記文字列の位置関係に基づいて、当該文字列の可読性に影響を与える因子を評価するコスト関数値を算出することを特徴とする請求項１記載の文字列配置装置。
【請求項６】
遺伝的アルゴリズム（Ｇｅｎｅｔｉｃ  Ａｌｇｏｒｉｔｈｍ）を用いて、前記位置候補作成部で作成された前記文字列ごとの位置候補のうちから、最小のコスト関数値の位置候補を決定することを特徴とする請求項５記載の文字列配置装置。
【請求項７】
前記位置候補作成部で作成された文字列ごとの位置候補の組み合わせに対して、コスト関数値算出部で算出されたコスト関数値の大きさに応じた順番付けを行い、前記組み合わせの順番に応じて作成した確率分布に基づいて、コスト関数値の算出対象となる前記位置候補の新たな組み合わせを作成する再作成部と、
前記再作成部で作成された組み合わせから、所定の交叉確率で交叉対象の組み合わせを選択し、選択した組み合わせ間で位置候補を入れ替える交叉を実行する交叉部と、
前記再作成部で作成された組み合わせ、及び前記交叉部で交叉が実行された組み合わせの位置候補を、所定の突然変異確率で、これらの組み合わせに登録されている位置候補のうちから選択した別の位置候補点に変換する突然変異部とをを備え、
前記コスト関数値算出部は、前記文字列ごとの位置候補の組み合わせのコスト関数値が最小に収束するまで、前記再作成部で作成された組み合わせ、前記交叉部で交叉が実行された組み合わせ、及び前記突然変異部での処理が実行された組み合わせのコスト関数値の算出を繰り返すことを特徴とする請求項６記載の文字列配置装置。
【請求項８】
前記位置候補作成部は、前記表示画面上に表示される線状の画像を示す線分群に沿って前記文字列の配置を開始する位置候補を作成し、
前記コスト関数値算出部は、前記位置候補作成部で作成された位置候補を起点として、
前記線分群を境とした一方の側に前記表示画面上の一方向で読みが順方向となるように前記文字列を配置するとともに、前記線分群を境とした他方の側に前記表示画面上の前記一方向と相対する方向で読みが順方向となるように当該文字列を配置して、前記各配置の文字列同士の重複を示す関数、前記線分群の線分がなす角度を示す関数、当該文字列に設定された配置開始位置と前記位置候補との距離を示す関数、及びシンボルと当該文字列との重複を示す関数の値をそれぞれ算出し、これらを足し合わせた値を、当該文字列の可読性に影響を与える因子を評価するコスト関数値として算出することを特徴とする請求項５記載の文字列配置装置。
【請求項９】
前記コスト関数値算出部は、前記線分群を境とした一方の側に前記表示画面上の一方向で読みが順方向となるように配置した前記文字列の隣り合う２文字と、前記線分群を境とした他方の側に前記表示画面上の前記一方向と相対する方向で読みが順方向となるように配置した当該文字列における、前記隣り合う２文字に前記線分群の線分を介して対向する２文字とからなる４文字に外接する外接矩形を作成し、当該外接矩形とシンボルとの重複を示す関数の値を算出することを特徴とする請求項７記載の文字列配置装置。
【請求項１０】
文字列データ取得部、位置候補作成部及びコスト関数値算出部を備えた文字列配置装置の文字列配置位置候補決定方法において、
前記文字列データ取得部が、表示画面上に配置する文字列のデータを取得する文字列データ取得ステップと、
前記位置候補作成部が、前記文字列データ取得ステップで取得された文字列の配置を開始する前記表示画面上の位置候補を作成する位置候補作成ステップと、
前記コスト関数値算出部が、前記位置候補作成ステップで作成された位置候補を起点として前記表示画面上の相対する方向で読みがそれぞれ順方向となるように前記文字列を配置して、前記各配置の文字列同士の位置関係に基づいて、当該文字列の可読性に影響を与える因子を評価するコスト関数値を算出するコスト関数値算出ステップとを備え、
前記コスト関数値が最小の位置候補を、前記文字列の配置開始位置を変更する際の位置候補とすることを特徴とする文字列配置候補決定方法。
【請求項１１】
表示画面上に配置する文字列のデータを取得する文字列データ取得部、
前記文字列データ取得部によって取得された文字列の配置を開始する前記表示画面上の位置候補を作成する位置候補作成部、
前記位置候補作成部で作成された位置候補を起点として前記表示画面上の相対する方向で読みがそれぞれ順方向となるように前記文字列を配置して、前記各配置の文字列同士の位置関係に基づいて、当該文字列の可読性に影響を与える因子を評価するコスト関数値を算出するコスト関数値算出部、
前記コスト関数値が最小の位置候補を、前記文字列の配置開始位置を変更する際の位置候補として記憶する記憶部としてコンピュータを機能させるための文字列配置候補決定用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、例えば地名等の文字列を地図画面上に配置して表示する文字列配置装置、文字列配置候補決定方法、及び文字列配置候補決定用プログラムに関する。
【背景技術】
【０００２】
地名等の文字列を地図画面に配置して表示する従来の技術としては、例えば特許文献１に開示されるものがある。特許文献１では、道路や河川、鉄道等の名前の文字列を、地図画面で道路や河川、鉄道を表すリンクに沿って配置するにあたり、文字列の可読性を考慮して、画面上で文字列の配置を開始する文字列配置開始点を決定している。
【先行技術文献】
【特許文献】
【０００３】
【非特許文献１】Shawn Edmondson, “A General Cartographic Labeling Algorithm”, The International Journal for Geographic Information and Geovisualization, Volume 33, Number 4/ Winter 1996
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に代表される従来の技術では、道路の名前等の文字例を表示する際、図１に示すように、表示画面１００上で複数の道路リンク１０１を接続して道路を表現し、この道路の名前等の情報を示す文字列１０２を、道路リンク１０１上に設けた文字列配置開始点１０３を起点として、道路リンク１０１に沿って配置している。この場合、文字列配置開始点１０３を設ける位置によっては、文字列同士が重なり合ったり、文字列を道路リンクに沿って変形しなければならず、文字列の可読性が低下する。【０００５】
例えば、図２は、図１の道路リンク１０１が示す道路に交差する道路があり、その道路の道路リンク１０１に沿って文字配置開始点１０３ａを起点として文字列１０２ａを配置したことにより、文字列１０２と文字列１０２ａとが重なり合う場合を示している。この場合、重なった部分の文字は非常に読みにくく、可読性が悪くなる。
また、図３は、隣り合った道路リンク１０１をある程度の角度をもって互いに接続して道路の湾曲部分を表現しており、この湾曲部分に近い道路リンク１０１に文字列配置開始点１０３Ａを設けたために、文字列１０２が道路リンク１０１に沿って変形された場合を示している。この場合も、文字列中の文字の連続性が損なわれて可読性が悪くなり、一瞥して文字列の内容を把握しにくくなる。【０００６】
そこで、特許文献１に代表される従来の技術では、文字列同士の重複と文字列が沿う道路の湾曲度合いとをそれぞれ関数化して、これらの関数値が示す特性が最も小さい位置、つまり、文字列同士の重複と道路の湾曲度合いとが生じない位置を特定して、この位置に文字列配置開始点を変更する。
図４は、文字列同士の重複を示す関数を説明する図である。図４（ａ）に示す例では、複数の道路が交差しており、それぞれの道路の道路リンク１０１に沿って、文字列１０２，１０２ａ，１０２ｂが、文字列配置開始点１０３，１０３ａ，１０３ｂをそれぞれ起点として配置されている。
図４（ｂ）に示す関数ｏｖｅｒｌａｐ（ｉ）は、図４（ａ）における文字列同士の重複の数を表す関数である。例えば、文字列１０２，１０２ｂは、文字列１０２ａのみとそれぞれ重なり合うので、ｏｖｅｒｌａｐ（ｉ）＝１となり、文字列１０２ａは、文字列１０２，１０２ｂの双方と重なり合うので、ｏｖｅｒｌａｐ（ｉ）＝２となる。【０００７】
また、図５は、文字列が沿う道路の湾曲度合いを示す関数を説明するための図である。図５に示すように、道路ノードを介して複数の道路リンクを接続した道路において、道路ノードの線形近似ＡｖｅＬｉｎｅ（ｉ）を求めることにより、図５中に破線で示すＡｖｅＬｉｎｅ（ｉ）で表現される直線から、道路の湾曲によってどの程度はずれているかを、図５中に黒塗りの三角形で示す部分の面積の和をＡｖｅＬｉｎｅ（ｉ）で示される直線の長さで除算した値であるｆｌａｔ（ｉ）で表している。
これら関数ｏｖｅｒｌａｐ（ｉ），ｆｌａｔ（ｉ）を用い、下記式（１）に示すようなコスト関数ｆの値が最小になる位置に文字列配置開始点を変更する。
なお、文字列配置開始点の変更処理は、通常オフラインで行い、変更後の文字列配置開始点を記憶装置に記憶しておく。オンラインでは、この記憶装置に記憶しておいた文字列配置開始点を起点として文字列を配置する。下記式（１）において、α１，α２は、コスト関数ｆに対する各関数ｏｖｅｒｌａｐ（ｉ），ｆｌａｔ（ｉ）の値の寄与の度合いを調整するパラメータである。
ｆ＝α１ｏｖｅｒｌａｐ（ｉ）＋α２ｆｌａｔ（ｉ）      ・・・（１）【０００８】
また、特許文献１に代表される従来の技術は、地図の向きが変化しても文字列の配置が変化しない場合を前提としている。例えば、図６（ａ）に示すように、地図の向きが北（ノースアップ）で文字列１０２が道路リンク１０１の北側に沿って配置されている場合において、図６（ｂ）に示すように地図の向きを南（サウスアップ）に変更しても、同様に道路リンク１０１の北側に文字列１０２が配置される。【０００９】
一方、実際のカーナビゲーションシステムでは、地図の向きが自車の進行方向に応じて変化する場合（ヘディングアップ）がある。例えば、図７（ａ）に示すように、北に向かって自車が走行していれば、地図の向きは北になり、図７（ｂ）に示すように自車の進行方向が南西に変われば、地図の向きは南西となる。この場合において、従来のカーナビゲーションシステムでは、文字列の可読性を保つために、いかなる地図の向きであっても、文字を左読みできる上向きに表示させている。【００１０】
例えば、図８（ａ）に示すように、道路リンク１０１を挟んだ両側の一方が地図の向きになっても、この道路リンク１０１に沿って配置される文字列１０２が上向きになるように、向きの異なる文字列１０２の文字列配置パターンを、道路リンク１０１を挟んだ両側に対応してパターン１，２として保存しておく。ここで、図８（ｂ）に示すように、自車が北に進行していると地図の向きは北になるので、パターン１の文字列配置を用いることにより、文字列１０２が上向きに配置される。また、地図の向きが南になれば、図８（ｃ）に示すようにパターン２の文字列配置に切り替わる。
このように地図の向きに応じて文字列の配置を切り替える場合、特許文献１に代表される従来の技術を適用すると、文字列の可読性を損なう場合が生じるという課題があった。【００１１】
従来では、ある一方向の地図の向きでの文字列配置について可読性の高い向きの位置に文字列の配置位置が変更される。
この場合、例えば図９（ａ）に示すように、地図の向きが北のときに文字列の配置を変更すると文字列１０２，１０２ａは重なり合わないが、図９（ｂ）に示すように、地図の向きが南に変わると、文字を左読みできるように、文字列１０２ａの配置が上向きに切り替わるため、文字列１０２と文字列１０２ａが重複する。
このような不具合を避けるために、文字列同士の重複や文字列の変形表示が起こらない文字列配置開始点を地図の向きごとに決定しておけばよいが、１つの文字列に対して、文字列配置開始点に関する情報を地図の向きの数だけ用意する必要があり、膨大な記憶領域が必要とされる。【００１２】
この発明は、上記のような課題を解決するためになされたもので、用意すべき情報量の増大を招くことなく、可読性を損なわずに文字列を表示画面に配置することができる文字列配置装置、文字列配置候補決定方法、及び文字列配置候補決定用プログラムを得ることを目的とする。
【課題を解決するための手段】
【００１３】
この発明に係る文字列配置装置は、表示画面上に配置する文字列のデータを取得する文字列データ取得部と、文字列データ取得部によって取得された文字列の配置を開始する表示画面上の位置候補を作成する位置候補作成部と、位置候補作成部で作成された位置候補を起点として表示画面上の相対する方向で読みがそれぞれ順方向となるように文字列を配置して、各配置の文字列同士の位置関係に基づいて、当該文字列の可読性に影響を与える因子を評価するコスト関数値を算出するコスト関数値算出部と、コスト関数値が最小の位置候補を、文字列の配置開始位置を変更する際の位置候補として記憶する記憶部とを備える。
【発明の効果】
【００１４】
この発明によれば、表示画面上の方向が変化しても、用意すべき情報量の増大を招くことなく、可読性を損なわずに文字列を配置することができるという効果がある。
【図面の簡単な説明】
【００１５】
【図１】文字列の配置例を示す図である。
【図２】文字列同士が重なり合う場合の一例を示す図である。
【図３】文字列が変形される場合の一例を示す図である。
【図４】文字列同士の重複を示す関数を説明する図である。
【図５】文字列が沿う道路の湾曲度合いを示す関数を説明する図である。
【図６】地図の向きが変化しても文字列の配置が変化しない場合を示す図である。
【図７】地図の向きが自車の進行方向となる場合の地図表示を示す図である。
【図８】文字列を常に上向きに表示する処理の一例を示す図である。
【図９】地図の向きの変化に伴う文字列の配置変化を説明する図である。
【図１０】この発明の実施の形態１による文字列配置装置の構成を示すブロック図である。
【図１１】文字列配置開始候補点作成部の構成を示すブロック図である。
【図１２】文字列上向き配置部の構成を示すブロック図である。
【図１３】文字列下向き配置部の構成を示すブロック図である。
【図１４】判定処理部の構成を示すブロック図である。
【図１５】最小コスト関数値算出部の構成を示すブロック図である。
【図１６】実施の形態１の文字列配置装置による動作の流れを示すフローチャートである。
【図１７】文字列０と文字列１が沿う道路リンク及び文字列配置開始候補点を示す図である。
【図１８】文字列０と文字列１にそれぞれ含まれる文字のサイズを示す図である。
【図１９】実施の形態１の文字列配置装置による文字列配置開始候補点の作成の流れを示すフローチャートである。
【図２０】文字列０が沿う道路リンクと当該道路リンク上の文字列配置開始候補点を示す図である。
【図２１】文字列配置開始候補点に文字列を配置して配置可否を判定する処理の流れを示すフローチャートである。
【図２２】文字配置候補点を説明する図である。
【図２３】文字配置順序を説明する図である。
【図２４】文字配置候補点Ｐ’への文字の仮配置を説明する図である。
【図２５】判定処理部による文字の配置可否の判定処理の流れを示すフローチャートである。
【図２６】文字配置候補点Ｐ’への文字の仮配置を説明する図である。
【図２７】配置順序ｍが０番目の文字に続いて配置順序ｍが１番目の文字が仮配置された場合を示す図である。
【図２８】配置順序ｍが２番目の文字の仮配置の一例を示す図である。
【図２９】配置順序ｍが２番目の文字の仮配置の別の一例を示す図である。
【図３０】配置順序ｍが２番目の文字の仮配置のさらに別の一例を示す図である。
【図３１】文字列０の上向き配置の一例を示す図である。
【図３２】文字列０の上向き配置及び下向き配置の一例を示す図である。
【図３３】配置不可となる下向き配置の一例を示す図である。
【図３４】文字列０及び文字列１の文字列配置開始候補点を示す図である。
【図３５】コスト関数値が最小となる文字列配置の算出処理の流れを示すフローチャートである。
【図３６】文字列同士の重複関数値の算出処理の流れを示すフローチャートである。
【図３７】文字列０と文字列１を上向き配置及び下向き配置した場合を示す図である。
【図３８】文字列が沿う道路リンクの角度を示す関数値の算出処理の流れを示すフローチャートである。
【図３９】コスト関数値の一例を示す図である。
【図４０】この発明の実施の形態２による文字列配置装置の構成を示すブロック図である。
【図４１】個体毎のコスト関数値算出部の構成を示すブロック図である。
【図４２】個体再作成部の構成を示すブロック図である。
【図４３】交叉部の構成を示すブロック図である。
【図４４】個体の一例を示す図である。
【図４５】実施の形態２の文字列配置装置による動作の流れを示すフローチャートである。
【図４６】文字列０と文字列１が沿う道路リンク、文字列配置開始点及びシンボル位置の関係の一例を示す図である。
【図４７】個体の初期化の一例を示す図である。
【図４８】個体毎のコスト関数値の算出処理の流れを示すフローチャートである。
【図４９】初期化された個体におけるコスト関数値の一例を示す図である。
【図５０】文字とシンボルの重複を示すコスト関数値の算出処理の流れを示すフローチャートである。
【図５１】文字列の外接矩形の作成処理を説明する図である。
【図５２】個体の再作成処理を説明する図である。
【図５３】交叉処理の流れを示すフローチャートである。
【図５４】交叉処理を説明する図である。
【図５５】突然変異処理を説明する図である。
【図５６】再作成された個体を含む個体毎のコスト関数値の一例を示す図である。
【発明を実施するための形態】
【００１６】
以下、この発明をより詳細に説明するため、この発明を実施するための形態について、添付の図面に従って説明する。
実施の形態１．
図１０は、この発明の実施の形態１による文字列配置装置の構成を示すブロック図である。実施の形態１の文字列配置装置１は、例えばナビゲーション装置等に利用される地図表示装置を構成する装置であって、地図上の道路等を表現するリンクに沿ってその名称等の情報を示す文字列を配置する。以降の説明では、文字列配置装置１が、道路の名称等を示す文字列を当該道路の道路リンクに沿って配置する場合について述べる。
文字列配置装置１の構成としては、図１０に示すように、文字列データ取得部２、文字列配置開始候補点作成部３、最小コスト関数値算出部４及び出力文字列配置開始候補点記憶部５を備える。
【００１７】
文字列データ取得部２は、外部の記憶装置から文字列データを取得する構成部である。なお、文字列データとは、例えば、地図表示に利用される地図データに含まれ、地図画面に表示する道路名の文字列、文字列が沿う道路リンクを示す道路リンクデータ、及び地図画面で文字列の配置を開始する位置を示す文字列配置開始点を含むデータである。
文字列配置開始候補点作成部３は、文字列データ取得部２により文字列データから取得された文字列の文字列配置開始点を変更する場合に、地図画面で当該文字列の配置を開始する点の候補（以下、文字列配置開始候補点と呼ぶ）を作成する構成部である。
【００１８】
最小コスト関数値算出部４は、文字列配置開始候補点作成部３で作成された文字列配置開始候補点を起点として、これに対応する文字列を上向き配置及び下向き配置したとき、文字列の可読性に影響を与える因子として、各配置の文字列同士の重複を示す関数、文字列の変形表示の要因となる隣り合う道路リンクがなす角度を示す関数、及び文字列データに予め設定された文字列配置開始点と文字列配置開始候補点との距離を示す関数の値を足し合わせたコスト関数値を算出し、当該コスト関数値が最小となる文字列配置開始候補点を求める構成部である。
なお、この発明では、ある一定の地図の向きの画面（表示画面上の一方向）において、対象の文字列が沿う道路リンクを境として分けられた一方で当該文字列を左読みできる向きの配置を上向き配置とする。また、上向き配置での画面の地図の向きが逆になった際（表示画面上の一方向に相対する方向）に、道路リンクを境として分けられたもう一方側で当該文字列を左読みできる向きの配置を下向き配置とする。
【００１９】
出力文字列配置開始候補点記憶部５は、最小コスト関数値算出部４で算出されたコスト関数値が最小となる文字列配置開始候補点を記憶する記憶部である。
文字列配置装置１は、出力文字列配置開始候補点記憶部５に格納された文字列配置開始候補点を用いることで、いかなる地図の向きにおいても文字列同士の重複や道路の湾曲に応じた文字列の変形が起こらない位置に当該文字列を配置することが可能となる。
【００２０】
なお、文字列データ取得部２、文字列配置開始候補点作成部３、及び最小コスト関数値算出部４は、例えば、この発明の趣旨に従う文字列配置用プログラムをコンピュータに実行させることにより、ハードウェアとソフトウェアとが協働した具体的な手段として実現される。つまり、上記構成部２〜４の各機能は、上記文字列配置用プログラムを構成する各プログラムモジュールに規定される。また、出力文字列配置開始候補点記憶部５は、例えば、上記のコンピュータに搭載された記憶装置の記憶領域上に構築される。記憶装置としては、ハードディスク装置、半導体メモリ、ＣＤやＤＶＤ等の記憶メディアのドライブ装置等が挙げられる。
【００２１】
図１１は、図１０中の文字列配置開始候補点作成部の構成を示すブロック図である。図１１において、文字列配置開始候補点作成部３は、文字列データ取得部２で取得された文字列の文字列配置開始候補点を作成する構成部であり、候補点作成部６、文字列上向き配置部７、文字列下向き配置部８及び候補点削除部９を備える。
候補点作成部６は、文字列データ取得部２で文字列データから取得された文字列と道路リンクに関する情報に基づいて、当該文字列の文字列配置開始候補点を作成する構成部である。例えば、文字列が沿う１つ又は複数の連続した道路リンク上の所定の間隔の位置を当該文字列の文字列配置開始候補点とする。
【００２２】
文字列上向き配置部７は、候補点作成部６で作成された文字列配置開始候補点を起点として道路リンクに沿って文字列を上向きに仮配置して、文字と道路リンクの重複、文字が所定値以上の配置間隔であるか、及び文字列内の文字同士の重複を判定し、この判定結果から、文字列の上向き配置の可否を判定する構成部である。
文字列下向き配置部８は、候補点作成部６で作成された文字列配置開始候補点を起点として道路リンクに沿って文字列を下向きに仮配置して、文字と道路リンクの重複、文字が所定値以上の配置間隔であるか、及び文字列内の文字同士の重複を判定し、この判定結果から、文字列の下向き配置の可否を判定する構成部である。
候補点削除部９は、候補点作成部６で作成された文字列配置開始候補点のうち、文字列上向き配置部７及び文字列下向き配置部８によって、上向き配置又は下向き配置のいずれかで文字列が配置不可と判定された文字列配置開始候補点を削除する構成部である。
【００２３】
図１２は、図１１の文字列上向き配置部の構成を示すブロック図である。図１２において、文字列上向き配置部７は、文字配置候補点作成部１０ａ、開始文字配置候補点決定部１１ａ、上向き用文字配置順序決定部１２ａ、上向き用文字仮配置部１３ａ、判定処理部１４ａ及び文字位置登録部１５ａを備える。
文字配置候補点作成部１０ａは、候補点作成部６で作成された文字列配置開始候補点を起点として上向き配置する文字列の各文字を配置する位置の候補（以下、文字配置候補点と呼ぶ）を作成する構成部である。例えば、文字列配置開始候補点から所定の間隔で道路リンクに沿って並ぶ位置を文字配置候補点とする。
【００２４】
開始文字配置候補点決定部１１ａは、文字配置候補点作成部１０ａで作成された文字配置候補点のうちから、上向き配置する文字列の文字配置の開始点となる文字配置候補点を探索して決定する構成部である。
上向き用文字配置順序決定部１２ａは、開始文字配置候補点決定部１１ａで決定された文字配置の開始点となる文字配置候補点が存在する道路リンクの単位ベクトルの偏角に基づいて、当該文字列の文字配置順序を順方向又は逆方向のいずれにするかを決定する構成部である。ここで、順方向とは文字列を左読みできる文字の配置順序であり、逆方向とは文字列の読みが右読みになる配置順序である。
【００２５】
上向き用文字仮配置部１３ａは、上向き用文字配置順序決定部１２ａで決定された文字配置順序で、当該文字列の各文字を、開始文字配置候補点決定部１１ａで決定された文字配置の開始点から順に各文字配置候補点に仮配置する構成部である。
判定処理部１４ａは、上向き用文字仮配置部１３ａで仮配置された文字について、当該文字と道路リンクとの重複、当該文字とその直前に仮配置された文字とが所定値以上の配置間隔であるか及び当該文字とその直前に仮配置された文字との重複を判定し、この判定結果から当該文字の配置可否を判定する構成部である。
文字位置登録部１５ａは、判定処理部１４ａで配置可能と判定された文字の位置の座標情報を文字位置として登録する記憶部である。
【００２６】
図１３は、図１１の文字列下向き配置部の構成を示すブロック図である。図１３において、文字列下向き配置部８は、文字配置候補点作成部１０ｂ、開始文字配置候補点決定部１１ｂ、下向き用文字配置順序決定部１６ｂ、下向き用文字仮配置部１７ｂ、判定処理部１４ｂ、及び文字位置登録部１５ｂを備える。
文字配置候補点作成部１０ｂは、候補点作成部６で作成された文字列配置開始候補点を起点として下向き配置する文字列の各文字を配置する文字配置候補点を作成する構成部である。例えば、上向き用文字仮配置部１３ａと同様に、文字列配置開始候補点から所定の間隔で道路リンクに沿って並ぶ位置を文字配置候補点とする。
【００２７】
開始文字配置候補点決定部１１ｂは、文字配置候補点作成部１０ｂで作成された文字配置候補点のうちから、下向き配置する文字列の文字配置の開始点となる文字配置候補点を探索して決定する構成部である。
下向き用文字配置順序決定部１６ｂは、開始文字配置候補点決定部１１ｂで決定された文字配置の開始点となる文字配置候補点が存在する道路リンクの単位ベクトルの偏角に基づいて、当該文字列の文字配置順序を順方向又は逆方向のいずれにするかを決定する構成部である。
【００２８】
下向き用文字仮配置部１７ｂは、下向き用文字配置順序決定部１６ｂで決定された文字配置順序で、当該文字列の各文字を、開始文字配置候補点決定部１１ｂで決定された文字配置の開始点から順に各文字配置候補点に仮配置する構成部である。
判定処理部１４ｂは、下向き用文字仮配置部１７ｂにより仮配置された文字について、当該文字と道路リンクとの重複、当該文字とその直前に仮配置された文字とが所定値以上の配置間隔であるか及び当該文字とその直前に仮配置された文字との重複を判定し、この判定結果から当該文字の配置可否を判定する構成部である。
文字位置登録部１５ｂは、判定処理部１４ｂで配置可能と判定された文字の位置の座標情報を文字位置として登録する記憶部である。
【００２９】
図１４は、図１２又は図１３の判定処理部の構成を示すブロック図である。図１４において、判定処理部１４ａ，１４ｂは、文字と道路の重複判定部１８、文字間隔判定部１９及び文字同士の重複判定部２０を備える。
判定処理部１４ａの文字と道路の重複判定部１８は、上向き用文字仮配置部１３ａに仮配置された文字について、当該文字を含む文字列が沿う道路リンクとの重複有無を判定する構成部である。判定処理部１４ｂの文字と道路の重複判定部１８では、下向き用文字仮配置部１７ｂに仮配置された文字について、当該文字を含む文字列が沿う道路リンクとの重複有無を判定する構成部である。
【００３０】
判定処理部１４ａの文字間隔判定部１９は、上向き用文字仮配置部１３ａによって仮配置された文字と１つ前に仮配置された文字との間隔が所定の文字間隔よりも狭いか広いかを判定する構成部である。また、判定処理部１４ｂの文字間隔判定部１９は、下向き用文字仮配置部１７ｂに仮配置された文字と１つ前に仮配置された文字との間隔が所定の文字間隔よりも狭いか広いかを判定する構成部である。
判定処理部１４ａにおける文字同士の重複判定部２０は、上向き用文字仮配置部１３ａに仮配置された文字と１つ前に仮配置された文字との重複を判定する構成部である。判定処理部１４ｂの文字同士の重複判定部２０は、下向き用文字仮配置部１７ｂによって仮配置された文字と１つ前に仮配置された文字との重複を判定する構成部である。
【００３１】
図１５は、図１０の最小コスト関数値算出部の構成を示すブロック図であり、図１５（ａ）は最小コスト関数値算出部の構成を示しており、図１５（ｂ）は、図１５（ａ）中の文字列同士の重複関数算出部の構成を示している。
図１５（ａ）において、最小コスト関数値算出部４は、文字列同士の重複関数算出部２１、道路リンク角度関数算出部２２、距離関数算出部２３及び関数値足し合わせ部２４を備える。また、図１５（ｂ）に示すように、文字列同士の重複関数算出部２１は、文字列上向き配置部２５ａ、文字列下向き配置部２５ｂ及び文字列重複算出部２５ｃを備える。
【００３２】
文字列同士の重複関数算出部２１は、文字列データ取得部２で文字列データから取得された各文字列について、文字列配置開始候補点作成部３で配置可能と判定された文字列配置開始候補点を起点としてそれぞれ配置した場合における文字列同士の重複を、当該文字列同士の重複を示す関数を用いて判定する構成部である。
道路リンク角度関数算出部２２は、文字列データから取得された文字列が沿う道路リンクがなす角度を示す関数Ａｎｇｌｅ（ｉ）の値を算出する構成部である。
距離関数算出部２３は、文字列データ取得部２で文字列データから取得された文字列の文字列配置開始点と、文字列配置開始候補点作成部３で配置可能と判定された文字列配置開始候補点との距離を示す関数Ｄｉｓｔ（ｉ）の値を算出する構成部である。
【００３３】
文字列上向き配置部２５ａは、文字列データ取得部２で文字列データから取得された各文字列について、文字列配置開始候補点作成部３で配置可能と判定された文字列配置開始候補点を起点として上向き配置する構成部である。
また、文字列下向き配置部２５ｂは、文字列データ取得部２で文字列データから取得された各文字列について、文字列配置開始候補点作成部３で配置可能と判定された文字列配置開始候補点を起点として下向き配置する構成部である。
文字列重複算出部２５ｃは、文字列上向き配置部２５ａにより上向き配置された文字列同士の重複、文字列下向き配置部２５ｂにより下向き配置された文字列同士の重複、及び文字列上向き配置部２５ａと文字列下向き配置部２５ｂによって上向き配置及び下向き配置された文字列同士の重複判定で求められた文字列同士の重複数を用いて、文字列同士の重複を示す関数ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）の値を算出する構成部である。
【００３４】
関数値足し合わせ部２４は、関数ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）、関数Ａｎｇｌｅ（ｉ）及び関数Ｄｉｓｔ（ｉ）を足し合わせてなるコスト関数ｆ（ｉ）の値を、文字列データ取得部２で文字列データから取得された文字列の文字列配置開始点及び文字列配置開始候補点作成部３で配置可能と判定された文字列配置開始候補点にそれぞれ配置した文字列について算出し、当該コスト関数ｆ（ｉ）の値が最小となる点を最終的な文字列配置開始候補点とする構成部である。この最終的な文字列配置開始候補点が、出力文字列配置開始候補点記憶部５に記憶される。
【００３５】
次に動作について説明する。
図１６は、実施の形態１の文字列配置装置による動作の流れを示すフローチャートである。この図１６に沿って、文字列配置開始候補点を取得する処理の概要を説明する。
先ず、文字列データ取得部２が、地図データベース等の外部記憶装置から文字列データを取得し、当該文字列データに含まれる全ての文字列と、それぞれの文字列に対応する道路リンク及び文字列配置開始点を抽出する（ステップＳＴ１）。
次に、文字列配置開始候補点作成部３が、文字列データ取得部２によって取得された各文字列がそれぞれ沿う道路リンクにおける文字列配置開始候補点を作成する（ステップＳＴ２）。このとき、文字列配置開始候補点作成部３によって、各文字列の文字ごとに文字列配置開始候補点での配置可否が判定される。
この後、最小コスト関数値算出部４が、文字列配置開始候補点作成部３に作成されて配置可能と判定された各文字列配置開始候補点について、文字列同士の重複の度合い、文字列の変形表示の要因となる当該文字列が沿う道路リンクのなす角度、及び当該文字列配置開始候補点と文字列データに予め設定された文字列配置開始点との差の度合いを示す距離をそれぞれ示す関数からなるコスト関数を算出し、このコスト関数値が最小となる文字列配置開始候補点（文字列位置）を取得する（ステップＳＴ３）。
【００３６】
なお、以降では、文字列データ取得部２によって文字列データから文字列０と文字列１の２つの文字列が取得されたものとし、文字列０と文字列１、これらにそれぞれ対応する道路リンク及び文字列配置開始点は、下記のように規定されているものとして説明する。
図１７は、文字列０と文字列１がそれぞれ沿う道路リンク及び文字列配置開始候補点を示す図であり、地図の向きが北（ノースアップ）である地図画面において、東西方向をｘ軸、南北方向をｙ軸とした二次元座標系を設定している。
文字列０が沿う道路リンクは、ノードＡ（０，２０）、ノードＢ（１０，２０）、ノードＣ（１０，１０）及びノードＤ（３０，１０）を、それぞれリンク（図１７中に破線で示すリンク）で結んで構成される。また、文字列データに予め設定された文字列０の文字列配置開始点はＩ（１２，１０）であるものとする。
また、文字列１が沿う道路リンクは、ノードＥ（３０，０）、ノードＤ（３０，１０）及びノードＦ（３０，３０）を、それぞれリンク（図１７中に実線で示すリンク）で結んで構成される。文字列データに予め設定された文字列１の文字列配置開始点はＪ（３０，１２）であるものとする。
【００３７】
図１８は、文字列０と文字列１にそれぞれ含まれる文字のサイズを示す図であり、図１８（ａ）は文字列０の文字のサイズを示しており、図１８（ｂ）は文字列１の文字のサイズを示している。図１８（ａ）に示すように、文字列０に含まれる“文”、“字”、“列”、“０”の各文字は、縦幅が５で横幅が３である。また、図１８（ｂ）に示すように、文字列１に含まれる“文”、“字”、“列”、“１”の各文字についても、同様に縦幅が５で横幅が３であるものとする。
上記の道路リンクと文字列０及び文字列１の各文字との間隔ＲＣｇａｐは“３”、文字と文字の間隔ＣＣｇａｐは“√２（２の平方根）”であるものとする。
【００３８】
また、文字列配置開始候補点作成部３が、文字列ごとに作成する文字列配置開始候補点の候補点数ＰＡＴＴＥＲＮ＿ＮＵＭは５個であり、文字列の各文字を配置する文字配置候補点の間隔ＤＩＦ＿ＣＡＮＤ＿ＰＯＩＮＴが“２”であるものとし、文字列同士の重複数に関する閾値ＯｖｅｒｌａｐＳｔｒｉｎｇＴｈｒｅｓｈｏｌｄが“５”であるものとする。
【００３９】
さらに、後述するコスト関数値を算出する際のパラメータα１，α２，α３を全て“１”とする。文字列配置装置１として機能するコンピュータにより処理可能な上述の間隔ＲＣｇａｐ，ＣＣｇａｐ，ＤＩＦ＿ＣＡＮＤ＿ＰＯＩＮＴ等の最大値は“ＭＡＸ”とする。
なお、上述した各パラメータの値は、文字列データにおいて文字列ごとに予め設定されているものとする。
【００４０】
次に、文字列配置開始候補点を取得する処理の詳細を説明する。
（１）文字列配置開始候補点の作成処理
図１９は、実施の形態１の文字列配置装置による文字列配置開始候補点の作成の流れを示すフローチャートであり、図１６中のステップＳＴ２の処理の詳細を示している。文字列配置開始候補点作成部３の構成については、図１１を参照する。
先ず、候補点作成部６は、文字列データ取得部２から文字列データに含まれる全ての文字列、これらの文字列に対応する道路リンク及び文字列配置開始点を入力する。ここで、文字列データ取得部２から入力した各文字列を、０から文字列データに含まれる文字列の数−１までの値をとり得るインデックス番号ｉの文字列（ｉ）で表現する。
候補点作成部６は、文字列データ取得部２から入力された文字列のうち、ｉ＝０の文字列（０）から順に以降の処理を実施する（ステップＳＴ１ａ）。
【００４１】
候補点作成部６は、文字列（ｉ）が沿う道路リンクにおいて、文字列（ｉ）の候補点数ＰＡＴＴＥＲＮ＿ＮＵＭ（ここでは、５個）分の文字列配置開始候補点を作成する（ステップＳＴ２ａ）。すなわち、候補点作成部６は、文字列（ｉ）が沿う道路リンクに関するデータから当該道路リンクの全長ＬｉｎｋＬｅｎｇｔｈを取得し、文字列（ｉ）の文字列配置開始候補点の間隔ＣａｎｄＤｉｆを下記式から算出する。
ＣａｎｄＤｉｆ＝ＬｉｎｋＬｅｎｇｔｈ／ＰＡＴＴＥＲＮ＿ＮＵＭ
【００４２】
文字列０について、図１７に示すノードＡ〜Ｄがリンクで接続された道路リンクの全長ＬｉｎｋＬｅｎｇｔｈを“４０”とすると、候補点数ＰＡＴＴＥＲＮ＿ＮＵＭは５個であることから、文字列配置開始候補点の間隔ＣａｎｄＤｉｆ＝４０／５＝８となる。
続いて、候補点作成部６は、文字列（ｉ）が沿う道路リンクの初めのノードから、当該道路リンクに沿って間隔ＣａｎｄＤｉｆで候補点数ＰＡＴＴＥＲＮ＿ＮＵＭの分だけ文字列配置開始候補点を作成する。
なお、文字列（ｉ）が沿う道路リンクの初めのノードは、文字列配置開始候補点になり得るが、文字列（ｉ）が沿う道路リンクの終わりのノードは文字列配置開始候補点にはならないようにする。
このようにすることで、図２０に示すように、文字列０が沿う道路リンク（図２０中に破線で示す）上に、文字列配置開始候補点Ｑ０（０，２０）、Ｑ１（８，２０）、Ｑ２（１０，１４）、Ｑ３（１４，１０）、Ｑ４（２２，１０）が作成される。
各文字列配置開始候補点は、０から候補点数ＰＡＴＴＥＲＮ＿ＮＵＭまでの値をとり得るインデックス番号ｊの文字列配置開始候補点（ｊ）で表現する。
つまり、文字列配置開始候補点（０）がＱ０、文字列配置開始候補点（１）がＱ１、文字列配置開始候補点（２）がＱ２、文字列配置開始候補点（３）がＱ３、文字列配置開始候補点（４）がＱ４となる。
候補点作成部６は、ステップＳＴ２ａで作成した文字列配置開始候補点のうち、ｊ＝０の文字列配置開始候補点（０）から順に処理を実施する（ステップＳＴ３ａ）。
【００４３】
次に、文字列上向き配置部７が、文字列配置開始候補点（ｊ）から文字列（ｉ）を上向き配置して、文字列（ｉ）の配置可否を判定する（ステップＳＴ４ａ）。
続いて、文字列下向き配置部８が、文字列配置開始候補点（ｊ）から文字列（ｉ）を下向き配置して、文字列（ｉ）の配置可否を判定する（ステップＳＴ５ａ）。これらの処理の詳細については後述する。また、上向き配置による配置可否判定を先に行う場合を示したが、下向き配置による配置可否判定を先に行うようにしてもかまわない。
【００４４】
候補点削除部９は、文字列上向き配置部７及び文字列下向き配置部８による文字列配置可否の判定結果に基づいて、文字列配置開始候補点（ｊ）が文字列配置可能であるか否かを判定する（ステップＳＴ６ａ）。ここでは、文字列上向き配置部７で文字列（ｉ）を上向き配置した場合、若しくは文字列下向き配置部８で文字列（ｉ）を下向き配置した場合のいずれかで文字列配置不可と判定されていると、この文字列配置開始候補点（ｊ）は、文字列配置不可となる。
文字列配置不可である場合（ステップＳＴ６ａ；ＮＯ）、候補点削除部９は、当該文字列配置開始候補点（ｊ）を削除する（ステップＳＴ７ａ）。また、文字列配置可能である場合（ステップＳＴ６ａ；ＹＥＳ）には、当該文字列配置開始候補点（ｊ）を残し、ステップＳＴ８ａの処理へ移行する。
【００４５】
ステップＳＴ８ａにおいて、候補点作成部６が、全ての文字列配置開始候補点（ｊ）について、ステップＳＴ４ａ以降の処理を実施したか否かを判定する。
ここで、インデックス番号ｊが文字列配置開始候補点の数（ＰＡＴＴＥＲＮ＿ＮＵＭ＝５）未満であり、上記処理が未実施の文字列配置開始候補点（ｊ）がある場合（ステップＳＴ８ａ；ＹＥＳ）、候補点作成部６は、インデックス番号ｊを＋１加算した文字列配置開始候補点（ｊ）を、文字列上向き配置部７に出力する（ステップＳＴ９ａ）。これにより、続く文字列配置開始候補点（ｊ）について、ステップＳＴ４ａ以降の処理が実施される。
【００４６】
一方、パラメータｊの値が文字列配置開始候補点の数（ＰＡＴＴＥＲＮ＿ＮＵＭ＝５）以上となり、上記処理が未実施の文字列配置開始候補点（ｊ）がない場合（ステップＳＴ８ａ；ＮＯ）、候補点作成部６は、全ての文字列（ｉ）について、ステップＳＴ２ａ以降の処理を実施したか否かを判定する（ステップＳＴ１０ａ）。
ここで、インデックス番号ｉが文字列数未満で、上記処理が未実施の文字列（ｉ）があれば（ステップＳＴ１０ａ；ＹＥＳ）、候補点作成部６は、インデックス番号ｉを＋１加算した文字列（ｉ）を特定し（ステップＳＴ１１ａ）、ステップＳＴ２ａ以降の処理を実施する。また、全ての文字列（ｉ）について処理が完了していれば（ステップＳＴ１０ａ；ＮＯ）、処理を終了する。
【００４７】
次に、文字列上向き配置部７及び文字列下向き配置部８による文字列配置及び配置可否の判定処理の詳細について説明する。
図２１は、文字列配置開始候補点に文字列を配置して配置可否を判定する処理の流れを示すフローチャートであり、図１９中のステップＳＴ４ａ及びステップＳＴ５ａの処理に相当する。つまり、文字列上向き配置部７及び文字列下向き配置部８の双方は、図２１に示す処理の流れで文字列配置及び配置可否の判定を行う。文字列上向き配置部７及び文字列下向き配置部８の構成については、図７及び図８を参照する。
【００４８】
（１−１）文字列の上向き配置及び配置可否判定
図２１に沿って、文字列上向き配置部７が文字列配置開始候補点Ｑ０を起点として文字列０を上向きに配置する場合について説明する。
先ず、文字列上向き配置部７の文字配置候補点作成部１０ａは、図１７に示したノードＡから、間隔ＤＩＦ＿ＣＡＮＤ＿ＰＯＩＮＴ（＝２）で順に文字配置候補点を作成する（ステップＳＴ１ｂ）。例えば、図２２（ａ）に示すように、道路リンク上に文字配置候補点Ｐ０〜Ｐ２０が作成される。図２２（ｂ）は文字配置候補点Ｐ０〜Ｐ２０の座標値である。また、文字配置候補点作成部１０ａに作成された各文字配置候補点を、０から文字配置候補点の数−１までの値をとり得るインデックス番号ｋの文字配置候補点（ｋ）で表現する。つまり、文字配置候補点Ｐ０〜Ｐ２０は、インデックス番号ｋ＝０〜２０にそれぞれ相当するので、文字配置候補点（０）〜文字配置候補点（２０）で表される。
【００４９】
次に、開始文字配置候補点決定部１１ａが、文字配置を開始する文字配置候補点Ｐ’を探索する（ステップＳＴ２ｂ）。文字配置候補点Ｐ’は、文字配置候補点Ｐ０〜Ｐ２０のうち、文字列配置開始候補点Ｑ０との距離が最小の点である。ここでは、図２０と図２２（ａ）から、文字配置候補点Ｐ’は、文字配置候補点Ｐ０（文字配置候補点（０））となる。
【００５０】
続いて、上向き用文字配置順序決定部１２ａは、文字列０が沿う道路リンクを構成するリンクのうち、文字配置候補点Ｐ’が存在するリンクを特定し、このリンクの単位ベクトルＲｏａｄＶｅｃ（ｃｏｓθ，ｓｉｎθ）の偏角θを用いて、下記式（２）から文字配置順序を順方向か逆方向のどちらにするかを決定する（ステップＳＴ３ｂ）。
ここでは、文字配置候補点Ｐ’である点Ｐ０は、ノードＡとノードＢとを結ぶリンク（以下、道路リンク｛Ａ，Ｂ｝と表記する）に存在するので、単位ベクトルは（ｃｏｓ０，ｓｉｎ０）となる。そのため、文字配置順序は順方向となる。
なお、ここでの順方向及び逆方向の文字配置順序とは、図２３（ａ）及び図２３（ｂ）に示すように、文字列の文字を左読みできる方向が順方向であり、逆に右読みとなる方向が逆方向である。また、文字の配置順序は、０から文字列（ｉ）中の文字数−１までの値をとり得るインデックス番号ｍで表現する。
ｉｆ  −π／２＜θ≦π／２  順方向
ｅｌｓｅ                    逆方向      ・・・（２）
【００５１】
文字配置順序が決定されると、上向き用文字仮配置部１３ａは、文字配置を開始する文字配置候補点（文字配置候補点Ｐ’、ｋ＝０）について、文字列０で配置順序ｍ＝０の文字から順に、以降の処理を実施する（ステップＳＴ４ｂ）。
上向き用文字仮配置部１３ａは、下記式（３）を用いて配置順序がｍ番目の文字を文字配置候補点Ｐ’に仮配置する（ステップＳＴ５ｂ）。
ただし、Ｐｘｋ，Ｐｙｋは、ｋ番目の文字配置候補点のｘ座標、ｙ座標を示し、ＣｈａｒＶｅｃ（ｃｏｓφ，ｓｉｎφ）は、道路リンクから文字への単位ベクトルを示しており、ｃｈａｒ＿ｈｅｉｇｈｔｍは、ｍ番目の文字の縦幅、ｃｈａｒ＿ｗｉｄｔｈｍは、ｍ番目の文字の横幅を示している。
また、下記式（３）の（ｘｋＢｏｔｔｏｍＬｅｆｔ，ｙｋＢｏｔｔｏｍＬｅｆｔ）は、文字の左下座標を示しており、（ｘｋｍＴｏｐＬｅｆｔ，ｙｋｍＴｏｐＬｅｆｔ）は、文字の左上座標を示している。
さらに（ｘｋｍＢｏｔｔｏｍＲｉｇｈｔ，ｙｋｍＢｏｔｔｏｍＲｉｇｈｔ）は、文字の右下座標を示しており、（ｘｋｍＴｏｐＲｉｇｈｔ，ｙｋｍＴｏｐＲｉｇｈｔ）は、文字の右上座標を示している。
2012077158.tif 000003
【００５２】
図２４は、文字配置候補点Ｐ’への文字の仮配置を説明する図である。文字列０で配置順序が最も若い文字“文”（順方向）を文字配置候補点Ｐ’（文字配置候補点Ｐ０）に仮配置すると、上記式（３）で表される左下座標、左上座標、右下座標及び右上座標は、図２４のようになる。なお、破線の矩形は、文字“文”の外接矩形である。
また、図２４において、道路リンクから文字への単位ベクトルＣｈａｒＶｅｃ（ｃｏｓφ，ｓｉｎφ）は、ＲｏａｄＶｅｃ（ｃｏｓθ，ｓｉｎθ）の偏角θを用いて下記式（４）から算出される。
ｉｆ  −π／２≦θ＜π／２  φ＝θ−π／２
ｉｆ  π／２≦θ＜３π／２  φ＝θ＋π／２        ・・・（４）
【００５３】
次に、判定処理部１４ａは、上向き用文字仮配置部１３ａに仮配置された位置で、文字の可読性が損なわれる状態にあるか否かを判定し（ステップＳＴ６ｂ）、この判定結果に基づいて当該仮配置位置への文字配置の可否を判定する（ステップＳＴ７ｂ）。ここで、判定処理部１４ａが、文字配置が可能であると判定した場合（ステップＳＴ７ｂ；ＹＥＳ）、当該文字の配置位置を文字位置登録部１５ａに登録する（ステップＳＴ８ｂ）。このとき、当該文字の外接矩形の左下座標、左上座標、右下座標、右上座標の４頂点が文字位置として登録される。
【００５４】
次いで、上向き用文字仮配置部１３ａは、文字列（ｉ）（ここでは、文字列０）の全ての文字について、上述の処理が実施されたか否かを判定する（ステップＳＴ９ｂ）。
ここで、文字の配置順序ｍの値が文字列０の文字数−１と等しくなり、全ての文字について処理が実施された場合（ステップＳＴ９ｂ；ＹＥＳ）、ステップＳＴ１０ｂへ進む。ステップＳＴ１０ｂでは、判定処理部１４ａが、文字列０の全ての文字について配置可能であることから、文字列０の配置が可能と判定して処理を終了する。
【００５５】
文字の配置順序ｍの値が文字列０の文字数−１に至らず、未処理の文字があると判定した場合（ステップＳＴ９ｂ；ＮＯ）、上向き用文字仮配置部１３ａは、インデックス番号ｋの値が文字配置候補点の数に至らず、上記処理が未実施の文字配置候補点（ｋ）があれば、インデックス番号ｋ及びインデックス番号ｍをそれぞれ＋１加算して、次に処理する文字（ｍ＝１）を次の文字配置候補点（１）に仮配置する（ステップＳＴ１１ｂ）。これにより、この配置に対して、ステップＳＴ６ｂ以降の処理が実施される。
【００５６】
一方、判定処理部１４ａが、文字の配置不可であると判定した場合（ステップＳＴ７ｂ；ＮＯ）、上向き用文字仮配置部１３ａは、インデックス番号ｋが文字配置候補点の数に至らず、上記処理が未実施の文字配置候補点（ｋ）があれば、当該文字について次の文字配置候補点（ｋ）に仮配置し、ステップＳＴ６ｂの処理に戻る。また、全ての文字配置候補点（ｋ）について処理が完了していれば、文字列０の配置が不可であると判定して処理を終了する。これらの処理がステップＳＴ１２ｂに相当する。
【００５７】
（１−２）判定処理
図２５は、判定処理部による文字の配置可否の判定処理の流れを示すフローチャートであり、図２１中のステップＳＴ６ｂの処理の詳細を示している。判定処理部１４ａの構成については、図１４を参照する。
先ず、文字と道路の重複判定部１８は、上向き用文字仮配置部１３ａにより文字が仮配置されると、仮配置された位置での文字と道路の重複箇所を探索して、重複の有無を判定する（ステップＳＴ１ｃ）。図２０に示す例では、文字列０の配置順序ｍが０番目の文字“文”の外接矩形と当該文字列０が沿う道路リンクである道路リンク｛Ａ，Ｂ，Ｃ，Ｄ｝との重複が探索される。
【００５８】
図２６は、文字と道路の重複判定の流れを示すフローチャートであり、図２５中のステップＳＴ１ｃの処理の詳細を示している。
先ず、重複判定対象の道路リンクの各リンクを、０から当該道路リンクのリンク数までの値をとり得るインデックス番号ｎのリンク（ｎ）で表現する。文字と道路の重複判定部１８は、上向き用文字仮配置部１３ａにより仮配置された文字の文字列が沿う道路リンクのリンクのうち、ｎ＝０のリンク（０）から順に処理を実施する（ステップＳＴ１ｄ）。
文字と道路の重複判定部１８は、上向き用文字仮配置部１３ａにより仮配置された文字とリンク（ｎ）との重複を探索し（ステップＳＴ２ｄ）、この探索結果から重複の有無を判定する（ステップＳＴ３ｄ）。ここで、重複がなければ、その旨を判定結果データとして文字と道路の重複判定部１８が記憶し（ステップＳＴ４ｄ）、重複があれば、その旨を判定結果データとして記憶する（ステップＳＴ５ｄ）。
【００５９】
この後、文字と道路の重複判定部１８は、重複判定対象の道路リンクの全てのリンクとの重複判定を実施したか否かを判定する（ステップＳＴ６ｄ）。ここで、リンクのインデックス番号ｎの値が、重複判定対象の道路リンクのリンク数に至らず、全てのリンクについて処理が実施されていない場合（ステップＳＴ６ｄ；ＹＥＳ）、文字と道路の重複判定部１８は、インデックス番号ｎを＋１加算し、次に処理するリンク（ｎ＝１）を特定し（ステップＳＴ７ｄ）、ステップＳＴ２ｄ以降の処理を実施する。また、リンクのインデックス番号ｎの値が、重複判定対象の道路リンクのリンク数に至り、全てのリンクについて処理が実施された場合（ステップＳＴ６ｄ；ＮＯ）、処理を終了する。
【００６０】
図２０に示す例では、先ず、文字列０が沿う道路リンク｛Ａ，Ｂ，Ｃ，Ｄ｝のうち、リンク｛Ａ，Ｂ｝と文字“文”との重複が判定される。リンク｛Ａ，Ｂ｝と文字“文”とは重複していないと判定される。次に、リンク｛Ｂ，Ｃ｝と文字“文”との重複が判定される。同様の処理を繰り返すことにより、道路リンク｛Ａ，Ｂ，Ｃ，Ｄ｝と文字“文”との重複を判定すると、文字“文”は、道路リンク｛Ａ，Ｂ，Ｃ，Ｄ｝と重複しないことがわかる。このため、文字と道路の重複判定部１８で重複なしと判定される。
文字と道路の重複があれば、仮配置された位置での文字の配置は不可と判定され、重複がなければ、次の文字間隔判定処理へ移行する。
【００６１】
図２５の説明に戻る。
文字間隔判定部１９は、上向き用文字仮配置部１３ａにより仮配置されている文字と、１つ前に配置された全ての文字との間隔を算出し、当該文字間隔と所定の閾値を比較して文字間隔が広いか狭いかを判定する（ステップＳＴ２ｃ）。
文字間隔の計算方法は、先ず、仮配置されている文字の外接矩形の４頂点と、１つ前に配置された全ての文字の外接矩形の４頂点との頂点間の距離をそれぞれ求める。その後、求めた頂点間の距離のうち、最小の距離を当該文字同士の文字間隔とする。
このとき、仮配置されている文字が配置順序ｍが０番目の文字である場合、その前に配置された文字はないため、文字間隔をＭＡＸとする。つまり、文字列０では、文字“文”の前に配置された文字はないため、文字間隔はＭＡＸとなる。
次いで、上記文字間隔がＣＣｇａｐ以上であれば“文字間隔広”と判定し、ＣＣｇａｐ未満であれば“文字間隔狭”と判定される。文字列０の文字“文”は、文字間隔がＭＡＸであるため、“文字間隔広”となる。なお、閾値となるＣＣｇａｐは、上述したように文字列データに予め設定された値である。
文字間隔が“文字間隔狭”であれば、仮配置された位置での文字の配置は不可と判定され、“文字間隔広”であれば、次の文字同士の重複判定処理へ移行する。
【００６２】
文字同士の重複判定部２０は、上向き用文字仮配置部１３ａによって仮配置されている文字と、１つ前に配置された全ての文字との重複箇所を探索し、重複の有無を判定する（ステップＳＴ３ｃ）。ここで、文字同士の重複があると判定されると、仮配置された位置での文字の配置は不可と判定され、重複がなければ、処理を終了する。
仮配置されている文字が配置順序ｍが０番目の文字である場合、その前に配置された文字はないため、文字同士の重複はない。このため、文字同士の重複なしと判定される。
【００６３】
文字同士の重複判定部２０は、上述のようにして最終的に文字同士の重複もない旨を判定すると、仮配置された当該文字位置を文字位置登録部１５ａに登録する。
文字列０の文字“文”の場合、文字配置候補点Ｐ’に文字配置可能と判定されるため、文字位置登録部１５ａには、文字“文”の外接矩形の左下、左上、右下、右上の４頂点の座標が文字位置として登録される。つまり、図２４に示すように、文字位置登録部１５ａには、文字“文”の左下座標（０，１７）、左上座標（０，１２）、右下座標（３，１７）、右上座標（３，１２）が登録される。
【００６４】
この後、上向き用文字仮配置部１３ａによって、配置順序ｍが１番目の文字“字”が、次の文字配置候補点Ｐ１に仮配置される。
図２７は、配置順序ｍが０番目の文字に続いて配置順序ｍが１番目の文字が仮配置された場合を示す図である。図２７において、符号Ａを付した外接矩形は、配置順序ｍが０番目の文字“文”の配置位置であり、符号Ｂを付した外接矩形は、配置順序ｍが１番目の文字“字”の配置位置である。配置順序ｍが０番目の文字“文”は、文字配置を開始する文字配置候補点Ｐ’（文字配置候補点Ｐ０）を基準に配置されたが、配置順序ｍが１番目の文字“字”は、文字配置候補点Ｐ’の次の文字配置候補点Ｐ１を基準に仮配置される。
【００６５】
文字列０における次の文字が仮配置されると、文字と道路の重複判定部１８が、上述と同様にして文字と道路の重複を判定する。この場合、文字“字”は、道路との重複はなしと判定される。
この後、文字間隔判定部１９は、仮配置されている文字“字”と１つ前に配置された文字“文”との文字間隔を求め、この文字間隔に基づいて文字配置の可否を判定する。この場合、文字“文”の外接矩形Ａの４つの頂点と文字“字”の外接矩形Ｂの４つの頂点との各々の距離、すなわち合計１６個の頂点間距離が算出される。これら頂点間距離のうち、最小の頂点間距離は“１”となり、この頂点間距離は、閾値ＣＣｇａｐ（＝√２）以下であるため、“文字間隔狭”と判定される。
従って、文字配置候補点Ｐ１に文字“字”を配置することは不可と判定される。
【００６６】
文字配置候補点Ｐ１への配置が不可と判定されると、上向き用文字仮配置部１３ａが、続く文字配置候補点Ｐ２に文字“字”を仮配置することで、判定処理部１４ａは、上述の判定処理を繰り返す。ここで、文字配置候補点Ｐ２においても文字“字”の配置不可と判定されると、さらに、文字“字”を次の文字配置候補点Ｐ３に仮配置する。
【００６７】
図２８は、配置順序ｍが２番目の文字の仮配置の一例を示す図である。図２８において、符号Ａ１を付した外接矩形は、配置順序ｍが０番目の文字“文”の配置位置であり、符号Ａ２を付した外接矩形は、配置順序ｍが１番目の文字“字”の配置位置である。
また、符号Ｂ１を付した外接矩形は、配置順序ｍが２番目の文字“列”を仮配置した位置である。図２８では、文字“列”の外接矩形Ｂ１が、文字配置候補点Ｐ５を基準として外接矩形Ａ１，Ａ２と同様に、道路リンク｛Ａ，Ｂ｝に平行に仮配置される。
【００６８】
この後、文字と道路の重複判定部１８が、文字“列”と道路リンクの重複を判定する。このとき、図２８に示すように、文字“列”の外接矩形Ｂ１とリンク｛Ｂ，Ｃ｝とが重複していることが探索され、重複有りと判定する。従って、文字“列”は、文字配置候補点Ｐ５に配置不可となる。
【００６９】
図２９は、配置順序ｍが２番目の文字の仮配置の別の一例を示す図である。図２９において、外接矩形Ａ１は、図２８と同様に、配置順序ｍが０番目の文字“文”の配置位置であり、外接矩形Ａ２は、配置順序ｍが１番目の文字“字”の配置位置である。
図２９に示す例は、上向き用文字仮配置部１３ａが、配置順序ｍが２番目の文字“列”の外接矩形Ｂ１を、文字配置候補点Ｐ５を基準として道路リンク｛Ｂ，Ｃ｝に平行に仮配置している。この場合においても、図２９に示すように、文字“列”の外接矩形Ｂ１とリンク｛Ａ，Ｂ｝とが重複していることが探索され、重複有りと判定する。
従って、文字“列”は、文字配置候補点Ｐ５に配置不可となる。
【００７０】
図３０は、配置順序ｍが２番目の文字の仮配置のさらに別の一例を示す図である。図３０に示す例は、上述の処理を繰り返して、上向き用文字仮配置部１３ａが、文字“列”の外接矩形Ｂ１を文字配置候補点Ｐ８に仮配置した場合を示している。この場合、文字と道路の重複判定部１８は、文字と道路の重複がないと判定する。
また、文字間隔判定部１９は、文字“文”の外接矩形Ａ１及び文字“字”の外接矩形Ａ２と、文字“列”の外接矩形Ｂ１との文字間隔（頂点間距離の最小値）は、√２（２の平方根）となるので、閾値ＣＣｇａｐ以上であり、文字間隔広と判定する。
しかし、文字同士の重複判定部２０が、文字“列”の外接矩形Ｂ１が、文字“文”の外接矩形Ａ１と文字“字”の外接矩形Ａ２の双方との重複を探索して重複有りと判定する。
このため、文字“列”は文字配置候補点Ｐ８に配置不可と判定される。
【００７１】
上述の処理を繰り返して文字ごとに配置可否を判定することで、文字列０は、図３１に示すように上向き配置すると、可読性を維持して配置可能であることが判定される。
このとき、文字列０の可読性を維持した上向き配置における各文字の文字配置候補点が決定される。図３１の例では、文字“文”を文字配置候補点Ｐ０、文字“字”を文字配置候補点Ｐ３、文字“列”を文字配置候補点Ｐ１０、文字“０”を文字配置候補点Ｐ１１に配置する。この場合、文字列０中の全ての文字は、文字配置候補点Ｐ０〜Ｐ２０に対して道路リンクを境にした一方側（上向き）に配置できるため、文字列０は上向き配置が可能である。
【００７２】
（１−３）文字列の下向き配置及び配置可否判定
文字列上向き配置部７が文字列０を上向き配置して配置可否を判定した後、引き続き、文字列下向き配置部８が、文字列０を下向き配置して配置可否を判定する。
文字列下向き配置部８による文字列０の下向き配置及び配置可否判定の流れは、図２１と同様である。
先ず、文字列下向き配置部８の文字配置候補点作成部１０ｂは、文字配置候補点を作成する。この後、開始文字配置候補点決定部１１ｂが、上述と同様にして、文字配置を開始する文字配置候補点を探索する。これにより、文字列配置候補点は、図２２（ａ）に示すようになり、文字配置を開始する文字配置候補点Ｐ’は、文字配置候補点Ｐ０となる。
【００７３】
次に、下向き用文字配置順序決定部１６ｂが、文字配置候補点Ｐ’が存在するリンクの単位ベクトルＲｏａｄＶｅｃ（ｃｏｓθ，ｓｉｎθ）を用い、下記式（５）から文字配置順序を決定する。
ｉｆ  −π／２＜θ≦π／２  逆方向
ｅｌｓｅ                    順方向      ・・・（５）
【００７４】
この後、下向き用文字仮配置部１７ｂが、文字列０における配置順序ｍが０番目の文字“０”を、文字配置候補点Ｐ０を基準に仮配置する。なお、仮配置した文字の外接矩形の頂点座標（４頂点）は、下記式（６）から算出される。
2012077158.tif 000004
【００７５】
上記式（６）中のφは、下記式（７）で算出することができる。
ｉｆ  −π／２≦θ＜π／２  φ＝θ＋π／２
ｉｆ  π／２≦θ＜３π／２  φ＝θ−π／２      ・・・（７）
【００７６】
次に、判定処理部１４ｂが、文字“０”が文字配置候補点Ｐ０に配置可能か否かを判定する。この判定処理は、上述した判定処理部１４ａの場合と同様であるので、説明を省略する。これにより、文字列０の可読性を維持した下向き配置における各文字の文字配置候補点が決定される。
【００７７】
図３２は、文字列０の上向き配置及び下向き配置の一例を示す図である。文字列０を、上述の上向き配置及び下向き配置して文字ごとに配置可否判定を繰り返すことで、図３２に示すようになる。この場合、文字列０中の全ての文字は、文字配置候補点Ｐ０〜Ｐ２０に対して道路リンクを境にしたもう一方側（下向き）に配置できるため、文字列０は下向き配置が可能である。
【００７８】
（１−４）配置不可な文字列配置開始候補点の削除処理
文字列配置開始候補点作成部３の候補点削除部９は、上述のようにして上向き配置及び下向き配置での配置可否判定が完了すると、候補点作成部６で作成された文字列配置開始候補点のうちから、文字列を上向き配置又は下向き配置のいずれか一方が配置不可である文字列配置開始候補点を削除する。
図２０示す例では、文字列配置開始候補点Ｑ０から、道路リンク｛Ａ，Ｂ，Ｃ，Ｄ｝に沿って文字列０を上向き配置及び下向き配置できるため、文字列配置開始候補点Ｑ０は、削除されない。
この後、文字列上向き配置部７及び文字列下向き配置部８によって、文字列配置開始候補点Ｑ１を起点として、道路リンク｛Ａ，Ｂ，Ｃ，Ｄ｝に沿って、文字列０を上向き配置及び下向き配置してそれぞれ配置可否を判定する。
この場合においても、文字列配置開始候補点Ｑ１から、道路リンク｛Ａ，Ｂ，Ｃ，Ｄ｝に沿って、文字列０を上向き配置及び下向き配置できるため、文字列配置開始候補点Ｑ０は、削除されない。
【００７９】
次いで、文字列上向き配置部７が、文字列配置開始候補点Ｑ２を起点として道路リンク｛Ａ，Ｂ，Ｃ，Ｄ｝に沿って、文字列０を上向き配置して配置可否を判定する。
この後、文字列下向き配置部８が、文字列配置開始候補点Ｑ２を起点として道路リンク｛Ａ，Ｂ，Ｃ，Ｄ｝に沿って、文字列０を下向き配置して配置可否を判定する。
この場合、上述の処理を実施することで、図３３に示すように、文字列０の配置順序ｍが２番目の文字“字”を下向き配置できる。このとき、配置順序ｍが０番目の文字“０”の文字配置候補点が点Ｐ８となり、配置順序ｍが１番目の文字“列”の文字配置候補点が点Ｐ１５となり、配置順序ｍが２番目の文字“字”の文字配置候補点がＰ１８となる。
下向き用文字仮配置部１７ｂによって、配置順序ｍが３番目の文字“文”が、文字配置候補点Ｐ２０に仮配置されると、文字と道路の重複判定部１８が、文字“文”と道路との重複を判定する。ここでは、文字“文”と道路リンク｛Ａ，Ｂ，Ｃ，Ｄ｝との重複はないため、重複なしと判定される。
文字と道路との重複が判定されると、文字間隔判定部１９が文字間隔を判定する。この場合、文字間隔が“１”であるため、ＣＣｇａｐ未満となり、文字間隔狭と判定される。これにより、文字“文”を文字配置候補点Ｐ２０に配置することはできない。
続いて、下向き用文字仮配置部１７ｂは、文字“文”を次の文字配置候補点に仮配置しようとするが、Ｐ２０の次の文字配置候補点はない。このため、下向き用文字仮配置部１７ｂは、文字列配置開始候補点Ｑ２を起点にすると、文字列０を道路リンク｛Ａ，Ｂ，Ｃ，Ｄ｝に沿って配置を不可能であることを候補点削除部９へ通知する。これにより、候補点削除部９は、候補点作成部６で作成された文字列配置開始候補点のうちから、文字列配置開始候補点Ｑ２を削除する。
【００８０】
上述の処理を繰り返すことで、文字列０の文字列配置開始候補点はＱ０（０，２０）、Ｑ１（８，２０）となり、文字列１の文字列配置開始候補点は、図３４に示すように、Ｑ５（３０，０）、Ｑ６（３０，６）となる。なお、図３４において、破線で示すリンクが文字列０が沿う道路リンク｛Ａ，Ｂ，Ｃ，Ｄ｝のリンクであり、実線で示すリンクが文字列１が沿う道路リンク｛Ｅ，Ｄ，Ｆ｝のリンクである。
【００８１】
（２）コスト関数を用いた可読性の評価
上述のようにして、文字列配置開始候補点作成部３により文字列配置開始候補点が作成されると、最小コスト関数値算出部４が、下記式（８）で表されるコスト関数ｆを用いて当該コスト関数値が最小となる文字列位置を算出する。
ただし、下記式（８）において、Ｉは文字列の数であり、ｉは文字列を特定するインデックス番号である。
また、ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）は、文字列同士の重複を示す関数、Ａｎｇｌｅ（ｉ）は、道路リンクの最大角度を示す関数、Ｄｉｓｔ（ｉ）は、文字列配置開始候補点と入力文字列配置開始点との距離を示す関数である。なお、α１，α２，α３は、それぞれの関数値を調整するためのパラメータである。上述したように、パラメータα１，α２，α３は全て“１”であるものとする。
さらに、ｆ（ｉ）＝α１ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）＋α２Ａｎｇｌｅ（ｉ）＋α３Ｄｉｓｔ（ｉ）である。
ｆ＝Σ[ｉ＝０，Ｉ]ｆ（ｉ）      ・・・（８）
【００８２】
図３５は、コスト関数値が最小となる文字列配置の算出処理の流れを示すフローチャートであり、図１６中のステップＳＴ３の処理の詳細を示している。なお、最小コスト関数値算出部４の構成については、図１５を参照する。
先ず、文字列配置開始候補点作成部３で配置可能と判定された文字列配置開始候補点の各組み合わせを、０から当該文字列配置開始候補点の組み合わせの数までの値をとり得るインデックス番号ｎａの組み合わせ（ｎａ）で表現する。
最小コスト関数値算出部４は、文字列配置開始候補点作成部３から入力された文字列配置開始候補点の全ての組み合わせのうち、ｎａ＝０である組み合わせ（０）から順に処理を実施する（ステップＳＴ１ｅ）。また、コスト関数値の最小値の初期値を、文字列配置装置１として機能するコンピュータで扱える最大の値であるＭＡＸに設定する。
【００８３】
図３４に示した具体例では、上述までの処理により、文字列０の文字列配置開始候補点はＱ０（０，２０）、Ｑ１（８，２０）となり、文字列１の文字列配置開始候補点は、図３４に示すように、Ｑ５（３０，０）、Ｑ６（３０，６）となっている。
従って、文字列配置開始候補点の組み合わせは｛Ｑ０，Ｑ５｝，｛Ｑ０，Ｑ６｝，｛Ｑ１，Ｑ５｝，｛Ｑ１，Ｑ６｝となる。
最小コスト関数値算出部４は、最初に、組み合わせ｛Ｑ０，Ｑ５｝（組み合わせ（０））に対してコスト関数値を計算する。
【００８４】
文字列同士の重複関数算出部２１は、文字列配置開始候補点の組み合わせ（ｎａ）に対応する道路リンクに沿う全ての文字列について、コスト関数ｆにおける文字列同士の重複関数ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）の値をそれぞれ算出する（ステップＳＴ２ｅ）。
ここでは、文字列同士の重複関数算出部２１が、最初に重複度合いを計算する文字列とその他の文字列との重複度合いを計算する。文字列０から重複度合いを計算する場合は、文字列０以外の文字列である文字列１との重複が探索される。
【００８５】
次に、道路リンク角度関数算出部２２は、文字列配置開始候補点の組み合わせ（ｎａ）に対応する道路リンクに沿う全ての文字列について、コスト関数ｆにおける文字列が沿う道路リンクの角度を示す関数Ａｎｇｌｅ（ｉ）の値をそれぞれ算出する（ステップＳＴ３ｅ）。ここでは、道路リンク角度関数算出部２２が、文字列０が沿う道路リンク｛Ａ，Ｂ，Ｃ，Ｄ｝の各リンクがなす角度が算出される。
【００８６】
次いで、距離関数算出部２３は、文字列配置開始候補点の組み合わせ（ｎａ）の各文字列配置開始候補点と、文字列データ取得部２により文字列データから取得された文字列配置開始点との距離を示す関数Ｄｉｓｔ（ｉ）の値をそれぞれ算出する（ステップＳＴ４ｅ）。ここでは、文字列配置開始候補点Ｑ０，Ｑ１と、文字列０についての文字列配置開始点との距離、及び、文字列配置開始候補点Ｑ５，Ｑ６と、文字列１についての文字列配置開始点との距離が算出される。
【００８７】
ステップＳＴ５ｅにおいて、文字列同士の重複関数算出部２１、道路リンク角度関数算出部２２及び距離関数算出部２３は、文字列配置開始候補点の組み合わせ（ｎａ）に対応する道路リンクに沿う全ての文字列（ｉ）について処理したか否かを判定する。
ここで、未実施の文字列（ｉ）があれば（ステップＳＴ５ｅ；ＹＥＳ）、インデックス番号ｉが＋１加算されて（ステップＳＴ７ｅ）、次の文字列について、ステップＳＴ２ｅ以降の処理が繰り返される。
【００８８】
未実施の文字列（ｉ）がなくなれば（ステップＳＴ５ｅ；ＮＯ）、関数値足し合わせ部２４が、文字列同士の重複関数算出部２１、道路リンク角度関数算出部２２及び距離関数算出部２３によってそれぞれ算出された関数値を足し合わせて、文字列配置開始候補点の組み合わせ（ｎａ）に対応するコスト関数値を算出する（ステップＳＴ６ｅ）。
次に、関数値足し合わせ部２４は、ステップＳＴ６ｅで算出したコスト関数値が最小であるか否かを判定する（ステップＳＴ８ｅ）。
ここでは、前回に判定したコスト関数値と今回判定するコスト関数値が大小比較され、今回判定するコスト関数値が小さければ（ステップＳＴ８ｅ；ＹＥＳ）、関数値足し合わせ部２４が、最小なコスト関数値と当該コスト関数値に対応する組み合わせ（ｎａ）とを更新する（ステップＳＴ９ｅ）。
【００８９】
今回判定するコスト関数値が大きければ（ステップＳＴ８ｅ；ＮＯ）、関数値足し合わせ部２４は、文字列配置開始候補点の全ての組み合わせ（ｎａ）についてコスト関数の算出処理を実施したか否かを判定する（ステップＳＴ１０ｅ）。ここで、未実施の組み合わせ（ｎａ）がなければ（ステップＳＴ１０ｅ；ＮＯ）、処理を終了する。
未実施の組み合わせ（ｎａ）があれば（ステップＳＴ１０ｅ；ＹＥＳ）、インデックス番号ｎａが＋１加算されて（ステップＳＴ１１ｅ）、ステップＳＴ２ｅ以降の処理が繰り返される。
【００９０】
（２−１）文字列同士の重複関数値の算出処理
図３６は、文字列同士の重複関数値の算出処理の流れを示すフローチャートであり、図３５中のステップＳＴ２ｅの処理の詳細を示している。
文字列配置開始候補点の組み合わせ（ｎａ）に対応する道路リンクに沿う各文字列を、０から文字列数までの値をとり得るインデックス番号ｉの文字列（ｉ）で表現する。
また、文字列配置開始候補点の組み合わせ（ｎａ）に対応する道路リンクに沿う文字列のうち、重複度合いを計算する対象となる文字列以外の各文字列を、０から重複度合いを計算する対象となる文字列以外の文字列の数までの値をとり得るインデックス番号ｉａの文字列（ｉａ）で表現する。
さらに、文字同士の重複関数算出部２１は、文字列同士の重複数をカウントするカウンタを有し、カウンタの値をパラメータｃｏｕｎｔで表す。
【００９１】
先ず、文字同士の重複関数算出部２１が、文字列配置開始候補点の組み合わせ（ｎａ）に対応する道路リンクに沿う文字列のうち、ｉ＝０の文字列（０）から順に以降の処理を実施する（ステップＳＴ１ｆ）。このとき、カウンタの初期値としてｃｏｕｎｔ＝０を設定する。
次に、文字同士の重複関数算出部２１の文字列上向き配置部２５ａは、文字列配置開始候補点の組み合わせ（ｎａ）に対応する道路リンクに沿って、文字列（ｉ）を上向き配置する（ステップＳＴ２ｆ）。この後、文字列下向き配置部２５ｂが、文字列配置開始候補点の組み合わせ（ｎａ）に対応する道路リンクに沿って、文字列（ｉ）を下向き配置する（ステップＳＴ３ｆ）。この場合、重複計算の対象となる文字列は文字列０であるので、文字列０を、文字列配置開始候補点Ｑ０を起点として上向き配置及び下向き配置する。
なお、上向き配置及び下向き配置は、図２１を用いて説明した内容と同様の処理で実施する。
【００９２】
同様にして、文字列上向き配置部２５ａが、文字列配置開始候補点の組み合わせ（ｎａ）に対応する道路リンクに沿って、文字列（ｉ）以外の文字列（ｉａ）を上向き配置する（ステップＳＴ４ｆ）。なお、ｉａ＝０の文字列（０）から順に以降の処理を実施する。
次いで、文字列下向き配置部２５ｂが、文字列配置開始候補点の組み合わせ（ｎａ）に対応する道路リンクに沿って、文字列（ｉ）以外の文字列（ｉａ）を下向き配置する（ステップＳＴ５ｆ）。この場合、重複計算の対象となる文字列以外の文字列は文字列１であるので、文字列１を、文字列配置開始候補点Ｑ５を起点として上向き配置及び下向き配置する。
【００９３】
ここで、文字列（ｉ）における各文字を、０から文字列（ｉ）の文字数までの値をとり得るインデックス番号ｌａの文字（ｌａ）で表現し、文字列（ｉａ）における各文字を、０から文字列（ｉａ）の文字数までの値をとり得るインデックス番号ｌｂの文字（ｌｂ）で表現する。文字列重複算出部２５ｃは、文字列（ｉ）の文字のうちのｌａ＝０の文字（０）及び文字列（ｉａ）の文字のうちのｌｂ＝０の文字（０）から順に以降の処理を実施する（ステップＳＴ６ｆ）。
【００９４】
次に、文字列重複算出部２５ｃは、文字列（ｉ）の文字（ｌａ）と、文字列（ｉ）以外の文字列のうちの１つである文字列（ｉａ）の文字（ｌｂ）との重複を判定する（ステップＳＴ７ｆ）。ここでは、文字列（ｉ）が文字列０であり、文字列（ｉａ）が文字列１となる。図３７は、文字列配置開始候補点Ｑ０を起点として文字列０を上向き配置及び下向き配置し、文字列配置開始候補点Ｑ５を起点として文字列１を上向き配置及び下向き配置した場合を示す図である。文字列重複算出部２５ｃは、文字列０の０番目（ｌａ＝０）の文字と、文字列１の０番目（ｌｂ＝０）の文字との重複を判定する。
先ず、文字列０の０番目（ｌａ＝０）の上向き配置された文字“文”と、文字列１の０番目（ｌｂ＝０）の上向き配置された文字“文”との重複が調べられる。
次に、文字列０の０番目（ｌａ＝０）の上向き配置された文字“文”と、文字列１の０番目（ｌｂ＝０）の下向き配置された文字“１”との重複が調べられる。
同様にして、文字列０の０番目（ｌａ＝０）の下向き配置された文字“０”と、文字列１の０番目（ｌｂ＝０）の上向き配置された文字“文”との重複が調べられる。
文字列０の０番目（ｌａ＝０）の下向き配置された文字“０”と、文字列１の０番目（ｌｂ＝０）の上向き配置された文字“文”との重複がそれぞれ調べられる。
これらの合計４回の重複調査の結果、重複がなければ、文字列重複算出部２５ｃは、判定結果を重複なしとし、ステップＳＴ８ｆの処理に進む。一方、重複があれば、文字列重複算出部２５ｃは、判定結果を重複ありとし、カウンタのカウント値ｃｏｕｎｔを＋１加算する（ステップＳＴ９ｆ）。
この場合、文字列０の０番目（ｌａ＝０）の文字と、文字列１の０番目（ｌｂ＝０）の文字は、重複なしと判定される。
【００９５】
ステップＳＴ８ｆにおいて、文字列重複算出部２５ｃは、文字列（ｉａ）における全ての文字（ｌｂ）について重複調査したか否かを判定する。ここで、未調査の文字（ｌｂ）があれば（ステップＳＴ８ｆ；ＹＥＳ）、文字列重複算出部２５ｃは、インデックス番号ｌｂを＋１加算し（ステップＳＴ１０ｆ）、ステップＳＴ７ｆに戻って、文字列０の０番目（ｌａ＝０）の文字と、次の文字（ｌｂ）との重複調査を実施する。
ここでは、文字列０の０番目（ｌａ＝０）の文字と、文字列１の１番目（ｌｂ＝１）の文字との重複が調べられる。この場合、図３２及び図３７に示す配置であることから、文字列０の０番目（ｌａ＝０）の文字と、文字列１の１番目（ｌｂ＝１）の文字との重複はなしと判定される。
【００９６】
文字列１で未調査の文字（ｌｂ）がなくなると（ステップＳＴ８ｆ；ＮＯ）、文字列重複算出部２５ｃは、文字列（ｉ）における全ての文字（ｌａ）について重複調査したか否かを判定する（ステップＳＴ１１ｆ）。ここで、未調査の文字（ｌａ）があれば（ステップＳＴ１１ｆ；ＹＥＳ）、文字列重複算出部２５ｃは、インデックス番号ｌａを＋１加算し（ステップＳＴ１２ｆ）、ステップＳＴ７ｆに戻って、文字列０の次の文字と、文字列１の文字（ｌｂ）との重複調査を実施する。ここでは、文字列０の１番目（ｌａ＝１）の文字と、文字列１の文字（ｌｂ）との重複が調べられる。
【００９７】
文字列０で未調査の文字（ｌａ）がなくなると（ステップＳＴ１１ｆ；ＮＯ）、文字列重複算出部２５ｃは、文字列（ｉ）以外の全ての文字列（ｉａ）について重複調査したか否かを判定する（ステップＳＴ１３ｆ）。ここで、未調査の文字列（ｉａ）があれば（ステップＳＴ１３ｆ；ＹＥＳ）、文字列重複算出部２５ｃは、インデックス番号ｉａを＋１加算し（ステップＳＴ１４ｆ）、ステップＳＴ４ｆに戻って、文字列（ｉａ＝１）との重複調査を実施する。この場合、文字列０と文字列１との重複が無いため、カウンタの値である文字列０の重複数は“０”となる。
【００９８】
未調査の文字列（ｉａ）がなくなると（ステップＳＴ１３ｆ；ＮＯ）、文字列重複算出部２５ｃは、重複計算の対象の文字列（ｉ）の重複数を用いて、下記式（９）から文字列同士の重複関数ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）の値を算出する（ステップＳＴ１５ｆ）。
なお、下記式（９）中の重複数（ｉ）は、文字列（ｉ）の重複数である。この場合に、文字列０の重複数は“０”であるため、ＯｖｅｒｌａｐＳｔｒｉｎｇ（０）＝０となる。同様に他の文字列に対してもＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）を算出する。
ｉｆ  重複数（ｉ）≧ＯｖｅｒｌａｐＳｔｒｉｎｇＴｈｒｅｓｈｏｌｄ
ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）＝１００
ｅｌｓｅ
ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）
＝重複数（ｉ）×１００／ＯｖｅｒｌａｐＳｔｒｉｎｇＴｈｒｅｓｈｏｌｄ
・・・（９）
【００９９】
（２−２）道路リンクの角度関数値の算出処理
図３８は、道路リンクの角度関数値の算出処理の流れを示すフローチャートであり、図３５中のステップＳＴ３ｅの処理の詳細を示している。
文字列配置開始候補点の組み合わせに対応する道路リンクに沿う各文字列を、０から文字列の数までの値をとり得るインデックス番号ｉの文字列（ｉ）で表現する。
また、文字列（ｉ）が沿う道路リンクを構成する各ノードを、０から当該道路リンクのノード数−２までの値をとり得るインデックス番号ｌｃで特定する。
さらに、道路リンク角度関数算出部２２は、文字列（ｉ）が沿う道路リンクがなす角度をＡｎｇｌｅ（ｉ）で表す。
【０１００】
先ず、道路リンク角度関数算出部２２が、文字列（ｉ）が沿う道路リンク中のノード（ｌｃ）のうち、ｌｃ＝０から順に以降の処理を実施する（ステップＳＴ１ｇ）。このとき、角度Ａｎｇｌｅ（ｉ）＝０を設定する。
次に、道路リンク角度関数算出部２２は、文字列（ｉ）が沿う道路リンク中の３つのノードを用い、下記式（１０）に従って、隣り合う３つのノードのそれぞれに接続する２つのリンクの角度を示すＡｎｇｌｅｌｃ（ｉ）を算出する（ステップＳＴ２ｇ）。ただし、下記式（１０）において、ｎｌｃ，ｎｌｃ＋１，ｎｌｃ＋２は、文字列（ｉ）が沿う道路リンク中の連続して並ぶ３ノードである。図２０の例では、文字列０が沿う道路リンク中で連続して並ぶ３つのノードＡ，Ｂ，Ｃをそれぞれ結ぶリンク｛Ａ，Ｂ｝とリンク｛Ｂ，Ｃ｝が成す角度がπ／２であるので、Ａｎｇｌｅ（０）＝５０となる。
Ａｎｇｌｅｌｃ（ｉ）＝｛π−∠（ｍｌｃ，ｍｌｃ＋１，ｍｌｃ＋２）｝×１００／π
・・・（１０）
【０１０１】
次いで、道路リンク角度関数算出部２２は、下記式（１１）に示すように、今回算出した関数Ａｎｇｌｅｌｃ（ｉ）の値が、文字列（ｉ）が沿う道路リンク中で、前回角度関数の算出対象とした３つのノードをそれぞれ結ぶ２つのリンクがなす角度を示す関数値が設定されたＡｎｇｌｅ（ｉ）よりも大きいか否かを判定する（ステップＳＴ３ｇ）。
ここで、Ａｎｇｌｅｌｃ（ｉ）の値がＡｎｇｌｅ（ｉ）の値よりも大きければ（ステップＳＴ３ｇ；ＹＥＳ）、道路リンク角度関数算出部２２は、関数Ａｎｇｌｅ（ｉ）の値を、今回算出した関数Ａｎｇｌｅｌｃ（ｉ）の値で更新する（ステップＳＴ４ｇ）。
なお、初回の場合は、ステップＳＴ１ｇでＡｎｇｌｅ（ｉ）を“０”に設定するので、ｉ＝０のＡｎｇｌｅ（０）＜ＡｎｇｌｅＡ（０）である。よって、Ａｎｇｌｅ（ｉ）の値をＡｎｇｌｅＡ（０）の値で更新する。
Ａｎｇｌｅ（ｉ）＝ｍａｘ｛Ａｎｇｌｅｌｃ（ｉ）｝      ・・・（１１）
【０１０２】
Ａｎｇｌｅｌｃ（ｉ）の値がＡｎｇｌｅ（ｉ）以下であるか（ステップＳＴ３ｇ；ＮＯ）、若しくは、ステップＳＴ４ｇの処理が完了すると、道路リンク角度関数算出部２２は、文字列（ｉ）が沿う道路リンク中の全てのノードについて、上記処理を実施したか否かを判定する（ステップＳＴ５ｇ）。
ここで、インデックス番号ｌｃが、文字列（ｉ）が沿う道路リンクのノード数−２未満であり、文字列（ｉ）が沿う道路リンクに上記処理が未実施のノードがある場合（ステップＳＴ５ｇ；ＹＥＳ）、道路リンク角度関数算出部２２は、インデックス番号ｌｃに＋１加算して（ステップＳＴ６ｇ）、文字列（ｉ）が沿う道路リンク中の次の３つのノードについて、ステップＳＴ２ｇ以降の処理を実施する。
図２０に示す例では、ノードＡ，Ｂ，Ｃの次にノードＢ，Ｃ，Ｄが特定され、これらを結ぶリンク｛Ｂ，Ｃ｝とリンク｛Ｃ，Ｂ｝との成す角度が、上記式（１０）を用いて算出される。この場合は、ＡｎｇｌｅＢ（０）＝５０であるため、Ａｎｇｌｅ（０）＝ＡｎｇｌｅＢ（０）である。よって、Ａｎｇｌｅ（０）の値は更新されない。
【０１０３】
このように、文字列（ｉ）が沿う道路リンク中の全てのノードについて上記処理を実施したと判定されるまで（ステップＳＴ５ｇ；ＮＯ）、Ａｎｇｌｅｌｃ（ｉ）を繰り返して、上記式（１１）に従ってＡｎｇｌｅ（ｉ）の値を更新する。図２０では、文字列０が沿う道路リンクでの角度を示す関数Ａｎｇｌｅ（０）は５０となる。
【０１０４】
（２−３）文字列配置開始候補点と文字列配置開始点との距離を示す関数値の算出処理
図３５中のステップＳＴ４ｅにおける文字列配置開始点と文字列配置開始候補点との距離を示す関数の算出処理についての詳細を説明する。
距離関数算出部２３が、下記式（１２）に従って、文字列データに予め設定された文字列（ｉ）についての文字列配置開始点（以下、入力文字列配置開始点と呼ぶ）と、文字列配置開始候補点との距離を示す関数Ｄｉｓｔ（ｉ）の値を算出する。
ただし、下記式（１２）における、（Ｑｘｉ，Ｑｙｉ）は、文字列（ｉ）の文字列配置開始候補点の位置である。また、（Ｓｘｉ，Ｓｙｉ）は、文字列（ｉ）の入力文字列配置開始点である。図２０に示す場合には、文字列０の文字列配置開始候補点はＱ０であるので、（Ｑｘ０，Ｑｙ０）＝Ｑ０（０，２０）となる。また、上述したように、文字列０の文字列配置開始点Ｉは、（Ｓｘ０，Ｓｙ０）＝Ｉ（１２，１０）である。
従って、下記式（１２）より、Ｄｉｓｔ（０）＝√２４４（２４４の平方根）となる。
2012077158.tif 000005
【０１０５】
上述の処理を文字列１に対しても行った後、関数値足し合わせ部２４が、上記式（８）に従って、コスト関数値ｆを算出する。文字列０及び文字列１では下記式の関係となる。
ｆ（０）＝ＯｖｅｒｌａｐＳｔｒｉｎｇ（０）＋Ａｎｇｌｅ（０）＋Ｄｉｓｔ（０）
＝５０＋√２４４
ｆ（１）＝ＯｖｅｒｌａｐＳｔｒｉｎｇ（１）＋Ａｎｇｌｅ（１）＋Ｄｉｓｔ（１）
＝１２
よって、コスト関数値ｆは、ｆ＝ｆ（０）＋ｆ（１）＝６２＋√２４４となる。
【０１０６】
上述の処理を、文字列配置開始候補点の他の組み合わせ｛Ｑ０，Ｑ６｝，｛Ｑ１，Ｑ５｝，｛Ｑ１，Ｑ６｝に対しても行う。この結果、コスト関数値は、図３９に示すようになる。この場合、最小コスト関数値算出手段４は、｛Ｑ０，Ｑ６｝のとき、コスト関数値ｆが最小になると判定する。よって、この｛Ｑ０，Ｑ６｝を出力文字列配置開始候補点記憶領域５に保存する。
【０１０７】
実施の形態１による文字列配置装置１が、画面上に文字列を配置する際、出力文字列配置開始候補点記憶部５に保存された文字列配置開始候補点の組を用いることで、文字列同士の重複が少ない位置に文字列を配置することができる。上述した例では、文字列配置開始候補点の組｛Ｑ０，Ｑ６｝を文字列配置に用いる。
【０１０８】
以上のように、この実施の形態１によれば、表示画面上に配置する文字列のデータを取得する文字列データ取得部２と、文字列データ取得部２によって取得された文字列の配置を開始する表示画面上の文字列配置開始候補点を作成する文字列配置開始候補点作成部３と、文字列配置開始候補点作成部３で作成された文字列配置開始候補点を起点として表示画面上の相対する方向で読みがそれぞれ順方向となるように文字列を配置して、各配置の文字列同士の位置関係に基づいて、当該文字列の可読性に影響を与える因子（文字列同士の重複、道路リンクのなす角度、及び入力文字列配置開始点と文字列配置開始候補点との距離）を評価するコスト関数値を算出する最小コスト関数値算出部４と、コスト関数値が最小の位置候補を、文字列の配置開始位置を変更する際の文字列配置開始候補点として記憶する出力文字列配置開始候補点記憶部５とを備える。
このように構成することで、例えば、道路に関して上向き配置及び下向き配置した文字列同士の重複を示す関数を含むコスト関数値を最小化すれば、いかなる地図向きでも文字列同士の重複が少ない位置に文字列を配置することができる。
これにより、カーナビゲーションシステムのように自車の位置の変化により地図向きが変わる場合であっても、表示画面中に文字列同士が重複して表示されることを抑制でき、文字列を容易に認識することができる。
【０１０９】
実施の形態２．
上記実施の形態１では、道路リンクを挟んで上向き配置及び下向き配置した文字列ペアの重複を示すコスト関数値を最小化することで、いかなる地図の向きであっても、文字列同士の重複が少ない位置となる文字列配置開始候補点を決定し、文字列配置開始候補点を基に文字列を再配置する装置を示した。
この実施の形態２では、文字列同士の重複だけではなく、文字列とシンボルの重複が少ない位置を文字列配置開始候補点として決定する態様を述べる。また、実施の形態２は、コスト関数ｆの最小値を求める際に、遺伝的アルゴリズム（Ｇｅｎｅｔｉｃ  Ａｌｇｏｒｉｔｈｍ；以下、ＧＡと略す）を用いる点も、上記実施の形態１と異なる。
【０１１０】
図４０は、この発明の実施の形態２による文字列配置装置の構成を示すブロック図である。実施の形態２の文字列配置装置１Ａは、上記実施の形態１と同様に、例えばナビゲーション装置等に利用される地図表示装置を構成する装置であって、地図上の道路等を表現するリンクに沿ってその名称等の情報を示す文字列を配置する。以降の説明においても、文字列配置装置１Ａが、道路の名称等を示す文字列を当該道路の道路リンクに沿って配置する場合について述べる。
図４０において、実施の形態２による文字列配置装置１Ａは、文字列データ取得部２、文字列配置開始候補点作成部３、出力文字列配置開始候補点記憶部５ａ、シンボルデータ取得部２６、個体初期化部２７、個体毎のコスト関数値算出部２８、コスト関数値最小個体保存部２９、収束判定部３０、個体再作成部３１、交叉部３２、及び突然変異部３３を備える。上記構成部２７〜３３により、ＧＡを用いた最小のコスト関数値の抽出が実行される。
【０１１１】
文字列データ取得部２は、外部の記憶装置から文字列データを取得する構成部である。なお、文字列データとは、例えば、地図表示に利用される地図データに含まれる、地図画面に表示する道路名の文字列、文字列が沿う道路リンクを示す道路リンクデータ及び地図画面で文字列の配置を開始する位置を示す文字列配置開始点を含むデータである。
シンボルデータ取得部２６は、外部の記憶装置からシンボルデータを取得する構成部である。なお、シンボルデータとは、例えば、地図表示に利用される地図データに含まれ、地図画面上で道路上若しくは道路沿いに表示されるシンボルを示すデータ、及び当該シンボルを配置する位置を示すシンボル配置点を含むデータである。ナビゲーション装置であれば、自車の現在位置を示すシンボルが挙げられる。
【０１１２】
文字列配置開始候補点作成部３は、文字列データ取得部２により文字列データから取得された文字列の文字列配置開始点を変更する場合に、地図画面で当該文字列の配置を開始する点の候補（以下、文字列配置開始候補点と呼ぶ）を作成する構成部である。
個体初期化部２７は、文字列配置開始候補点作成部３で作成され配置可能と判定された文字列配置開始候補点の組み合わせから、最初に処理する文字列配置開始候補点の組み合わせを作成する構成部である。このように、文字列配置開始候補点作成部３で作成された文字列配置開始候補点から文字列毎に文字列配置開始候補点を等確率に選択して、最初に処理する個体を決定する処理を、個体の初期化という。この処理の詳細は図４４を用いて後述する。
【０１１３】
個体毎のコスト関数値算出部２８は、個体毎の文字列配置開始候補点を起点として上向き配置した文字列と下向き配置した文字列とのペアにおいて、文字列の可読性に影響を与える因子として、各配置の文字列同士の重複を示す関数、隣り合う道路リンク同士の角度を示す関数、文字列データから取得された文字列配置開始点と文字列配置開始候補点との距離を示す関数、シンボルと文字列との重複を示す関数の値を足し合わせたコスト関数値をそれぞれ算出し、当該コスト関数値が最小となる個体とそのコスト関数値を求める構成部である。
【０１１４】
コスト関数値最小個体保存部２９は、個体毎のコスト関数値算出部２８にて算出されたコスト関数値の最小値及びその個体を保存する構成部であり、保存した個体毎のコスト関数値の最小値のうち、さらに最小なコスト関数及びその個体を出力文字列配置開始候補点記憶部５ａに記憶する。出力文字列配置開始候補点記憶部５ａは、コスト関数値最小個体保存部２９に保存された個体及びそのコスト関数値のうち、最小のコスト関数値及びその個体をを記憶する記憶部である。
【０１１５】
収束判定部３０は、コスト関数値最小個体保存部２９に保存される個体毎のコスト関数値の最小値が一定に収束したか否かを判定する構成部である。
個体再作成部３１は、個体初期化部２７に初期化された個体、又は自身で前回作成した個体から、所定の選択確率で文字列配置開始候補点を選択することにより、所定数の個体を再作成する構成部である。
交叉部３２は、個体再作成部３１で作成された個体から所定の確率（交叉確率ＣＲＯＳＳＯＶＥＲ）で選択した複数の交叉対象の個体から２つずつ個体をさらに選択し、選択した個体間で文字列配置開始候補点の組み合わせの一部を入れ替える、いわゆる交叉処理を実行する構成部である。
突然変異部３３は、個体再作成部３１で作成された個体、及び交叉部３２で交叉処理が実行された個体の文字列配置開始候補点を、所定の確率（突然変異確率Ｍｕｔａｔｉｏｎ）で、これら個体に登録されている文字列配置開始候補点のうちから選択した別の文字列配置開始候補点に変換する構成部である。
【０１１６】
なお、文字列データ取得部２、文字列配置開始候補点作成部３、出力文字列配置開始候補点記憶部５ａ、シンボルデータ取得部２６、個体初期化部２７、個体毎のコスト関数値算出部２８、コスト関数値最小個体保存部２９、収束判定部３０、個体再作成部３１、交叉部３２、及び突然変異部３３は、例えば、この発明の趣旨に従う文字列配置用プログラムをコンピュータに実行させることにより、ハードウェアとソフトウェアが協働した具体的な手段として実現される。つまり、上記構成部２，３，２６〜３３の各機能は、上記文字列配置用プログラムを構成する各プログラムモジュールに規定される。また、出力文字列配置開始候補点記憶部５ａは、例えば、上記のコンピュータに搭載された記憶装置の記憶領域上に構築される。記憶装置としては、ハードディスク装置、半導体メモリ、ＣＤやＤＶＤ等の記憶メディアのドライブ装置等が挙げられる。
【０１１７】
図４１は、図４０中の個体毎のコスト関数値算出部の構成を示すブロック図であり、図４１（ａ）は、個体毎のコスト関数値算出部２８の全体構成を示しており、図４１（ｂ）は、図４１（ａ）中のシンボルと文字列の重複関数算出部３４の構成を示している。図４１（ａ）において、個体毎のコスト関数値算出部２８は、文字列同士の重複関数算出部２１ａ、道路リンク角度関数算出部２２ａ、距離関数算出部２３ａ、シンボルと文字列の重複関数算出部３４、及び関数値足し合わせ部２４ａを備える。
また、図４１（ｂ）に示すように、シンボルと文字列の重複関数算出部３４は、外接矩形作成部３５、外接矩形とシンボルの重複判定部３６、及び外接矩形とシンボルの重複関数算出部３７を備える。
【０１１８】
文字列同士の重複関数算出部２１ａは、個体初期化部２７で初期化された個体又は個体再作成部３１で作成された個体の文字列配置開始候補点を起点としてそれぞれ配置した場合における文字列同士の重複を、当該文字列同士の重複を示す関数を用いて判定する構成部である。
道路リンク角度関数算出部２２ａは、文字列データから取得された文字列が沿う道路リンクがなす角度を示す関数Ａｎｇｌｅ（ｉ）の値を算出する構成部である。
距離関数算出部２３ａは、文字列データ取得部２で文字列データから取得された文字列の文字列配置開始点と、個体初期化部２７で初期化された個体又は個体再作成部３１で作成された個体の文字列配置開始候補点との距離を示す関数Ｄｉｓｔ（ｉ）の値を算出する構成部である。
関数値足し合わせ部２４ａは、関数ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）、関数Ａｎｇｌｅ（ｉ）、関数Ｄｉｓｔ（ｉ）及び関数Ｏｖｅｒｌａｐｓｙｍｂｏｌ（ｉ）を足し合わせてなるコスト関数ｆ（ｉ）の値を、個体初期化部２７で初期化された個体又は個体再作成部３１で作成された個体の文字列配置開始候補点にそれぞれ配置した文字列について算出し、当該コスト関数ｆ（ｉ）の値が最小となる個体とそのコスト関数値を決定する構成部である。関数値足し合わせ部２４ａに決定された最小コスト関数値の個体とそのコスト関数値は、コスト関数値最小個体保存部２９に保存される。
【０１１９】
シンボルと文字列の重複関数算出部３４は、個体初期化部２７で初期化された個体又は個体再作成部３１で作成された個体の文字列配置開始候補点を起点としてそれぞれ配置した場合における文字列とシンボルとの重複を、文字列とシンボルの重複を示す関数を用いて判定する構成部である。
また、外接矩形作成部３５は、処理対象の文字列が沿う道路リンクを介して当該文字列を構成する文字を２文字ずつ上向き配置及び下向き配置し、これら上向き配置及び下向き配置された４つの文字に外接する外接矩形を作成する構成部である。
外接矩形とシンボルの重複判定部３６は、シンボルデータ取得部２６でシンボルデータから取得された各シンボルと、外接矩形作成部３５で作成された外接矩形との重複を判定する構成部である。
外接矩形とシンボルの重複関数算出部３７は、外接矩形とシンボルの重複判定部３６による重複判定で求められた外接矩形とシンボルの重複数を用いて、外接矩形とシンボルの重複関数Ｏｖｅｒｌａｐｓｙｍｂｏｌ（ｉ）の値を算出する構成部である。
【０１２０】
図４２は、図４０中の個体再作成部の構成を示すブロック図である。図４２において、個体再作成部３１は、個体順番付け部３８及び再作成部３９を備える。
個体順番付け部３８は、個体初期化部２７に初期化された個体、又は自身で前回作成した個体に対して、個体毎のコスト関数値算出部２８で算出されたコスト関数値に応じた順番を付与する構成部である。
再作成部３９は、個体順番付け部３８で付与された順番及びこれに対応するコスト関数値を用いて決定した所定の選択確率で、体初期化部２７に初期化された個体又は自身で前回作成した個体から文字列配置開始候補点を選択することにより、所定数の個体を再作成する構成部である。上記選択確率の算出方法は、図５２を用いて後述する。
【０１２１】
図４３は、図４０中の交叉部の構成を示すブロック図である。図４３において、交叉部３２は、交叉対象個体決定部４０、２個体決定部４１、交叉位置決定部４２、及び２個体交叉部４３を備える。
交叉対象個体決定部４０は、個体再作成部３１で作成された個体から所定の確率（交叉確率ＣＲＯＳＳＯＶＥＲ）で、交叉処理を実行する対象である交叉対象個体を選択する構成部である。
２個体決定部４１は、交叉対象個体決定部４０で選択された交叉対象個体から、交叉処理を実行する個体を２つずつ決定する構成部である。
交叉位置決定部４２は、２個体決定部４１で決定された２個体のうち、交叉処理を実行する文字列配置開始候補点（個体中の交叉位置）を決定する構成部である。
２個体交叉部４３は、２個体決定部４１で決定された２個体間で、交叉位置決定部４２で決定された交叉位置となる文字列配置開始候補点を入れ替える交叉処理を実行する構成部である。
【０１２２】
図４４は、実施の形態２で扱われる個体の一例を示す図である。図４４に示すように、個体とは、文字列配置開始候補点作成部３により文字列ごとに作成されて配置可能と判定された文字列配置開始候補点の組み合わせである。図４４の例では、個体０は、文字列０の文字列配置開始候補点Ｑ０，Ｑ１のうちのＱ０と、文字列１の文字列配置開始候補点Ｑ５，Ｑ６のうちのＱ６とを組み合わせて構成される。
また、個体は、図４４に示すように文字列配置開始候補点が原点に近い順に並べられたデータとなる。つまり、個体０は、文字列１の文字列配置開始候補点Ｑ６より文字列０の文字列配置開始候補点Ｑ０が原点に近いので、Ｑ０，Ｑ６の並びが規定されたデータとなる。
【０１２３】
次に動作について説明する。
図４５は、実施の形態２の文字列配置装置による動作の流れを示すフローチャートである。この図４５に沿って、文字列配置開始候補点を取得する処理の概要を説明する。
先ず、文字列データ取得部２が、地図データベース等の外部記憶装置から文字列データを取得し、当該文字列データに含まれる全ての文字列と、それぞれの文字列に対応する道路リンク及び文字列配置開始点を抽出する（ステップＳＴ１ｈ）。
次に、シンボルデータ取得部２６が、地図データベース等の外部記憶装置からシンボルデータを取得し、当該シンボルデータに含まれる全てのシンボル及びその配置位置を抽出する（ステップＳＴ２ｈ）。
【０１２４】
なお、以降では、文字列データ取得部２によって文字列データから文字列０と文字列１の２つの文字列が取得されたものとし、文字列０と文字列１、これらにそれぞれ対応する道路リンク及び文字列配置開始点は、下記のように規定されているものとして説明する。
図４６は、文字列０と文字列１が沿う道路リンク、文字列配置開始点及びシンボル位置の関係の一例を示す図であり、地図の向きが北（ノースアップ）である地図画面において東西方向をｘ軸、南北方向をｙ軸とした二次元座標系を設定している。
文字列０が沿う道路リンクは、ノードＡ（０，２０）、ノードＢ（１０，２０）、ノードＣ（１０，１０）及びノードＤ（３０，１０）を、それぞれリンク（図４６中に破線で示すリンク）で結んで構成される。また、文字列データに予め設定された文字列０の文字列配置開始点はＩ（１２，１０）であるものとする。
また、文字列１が沿う道路リンクは、ノードＥ（３０，０）、ノードＤ（３０，１０）及びノードＦ（３０，３０）を、それぞれリンク（図４６中に実線で示すリンク）で結んで構成される。文字列データに予め設定された文字列１の文字列配置開始点はＪ（３０，１２）であるものとする。
【０１２５】
また、文字列０に含まれる“文”、“字”、“列”、“０”の各文字は、縦幅が５で横幅が３であり、文字列１に含まれる“文”、“字”、“列”、“１”の各文字についても同様に縦幅が５で横幅が３であるものとする。
上記の道路リンクと文字列０及び文字列１の各文字との間隔ＲＣｇａｐは“３”、文字と文字の間隔ＣＣｇａｐは“√２（２の平方根）”であるものとする。
【０１２６】
さらに、文字列配置開始候補点作成部３が、文字列ごとに作成する文字列配置開始候補点の候補点数ＰＡＴＴＥＲＮ＿ＮＵＭは５個であり、文字列の各文字を配置する文字配置候補点の間隔ＤＩＦ＿ＣＡＮＤ＿ＰＯＩＮＴは“２”であるものとし、文字列同士の重複数に関する閾値ＯｖｅｒｌａｐＳｔｒｉｎｇＴｈｒｅｓｈｏｌｄが“５”であるものとする。
【０１２７】
後述するコスト関数値を算出する際のパラメータα１，α２，α３，α４は全て“１”とする。文字列配置装置１Ａとして機能するコンピュータによって処理可能な上述の間隔ＲＣｇａｐ，ＣＣｇａｐ，ＤＩＦ＿ＣＡＮＤ＿ＰＯＩＮＴ等の最大値は“ＭＡＸ”とする。
【０１２８】
シンボルデータ取得部２６によってシンボルデータからシンボル０とシンボル１の２つのシンボルが取得されたものとし、シンボル０の配置位置を、図４６中のＫ（５，２０）とし、シンボル１の配置位置をＬ（３０，２４）とする。
また、個体初期化部２７及び個体再作成部３１によって作成される個体の数ＰＯＰＵＬＡＴＩＯＮ＿ＳＩＺＥを“３”とし、交叉部３２で交叉対象の個体として選択する交叉確率ＣＲＯＳＳＯＶＥＲを６０％とし、突然変異部３３で突然変異処理として文字列配置開始候補点を変換する個体を選択する突然変異確率ＭＵＴＡＴＩＯＮを５％する。
さらに、収束判定部３０で収束判定に利用するＣＯＮＶＥＲＧＥＮＣＥ＿ＣＯＮＴＩＮＵＯＵＳを“５”とし、ＣＯＮＶＥＲＧＥＮＣＥ＿ＲＡＴＥを５０％とする。
なお、上述した各パラメータ及び確率の値は、文字列データに文字列ごとに予め設定されているものとする。
【０１２９】
文字列配置開始候補点作成部３は、文字列データ取得部２によって取得された各文字列がそれぞれ沿う道路リンクにおける文字列配置開始候補点を作成する（ステップＳＴ３ｈ）。このとき、文字列配置開始候補点作成部３によって、各文字列の文字ごとに文字列配置開始候補点での配置可否が判定される。文字列配置開始候補点の作成及びその配置可否の判定方法は、上記実施の形態１と同様である。この場合、上記実施の形態１と同様に、文字列０の文字列配置開始候補点Ｑ０，Ｑ１と、文字列１の文字列配置開始候補点Ｑ５，Ｑ６が作成される。
【０１３０】
次に、個体初期化部２７が、文字列配置開始候補点作成部３で作成されて配置可能と判定された文字列配置開始候補点から、ＰＯＰＵＬＡＴＩＯＮ＿ＳＩＺＥ個の文字列配置開始候補点の組み合わせ（個体）を作成する、いわゆる個体の初期化を実施する（ステップＳＴ４ｈ）。ここでは、文字列配置開始候補点作成部３で作成された文字列配置開始候補点から、文字列ごとに文字列配置開始候補点を等確率に選択して、最初に処理する個体を決定する。上述した前提として仮定した条件では、文字列０の文字列配置開始候補点としてＱ０，Ｑ１が作成され、文字列１の文字列配置開始候補点としてＱ５，Ｑ６が作成されているので、文字列毎に文字列配置開始候補点を等確率に選択すると、図４７に示す個体０〜２が作成される。
【０１３１】
個体毎のコスト関数値算出部２８は、下記式（１３）に従って、個体毎の文字列配置開始候補点を起点として、上向き配置した文字列と下向き配置した文字列とのペアにおける重複、隣り合う道路リンク同士の角度に応じた変形、文字列データ取得部２により文字列データから取得された文字列配置開始点と文字列配置開始候補点との距離、シンボルと文字列との重複をそれぞれ示す各関数を含むコスト関数をそれぞれ算出し、当該コスト関数値が最小となる個体とそのコスト関数値を算出する（ステップＳＴ５ｈ）。コスト関数値最小個体保存部２９は、個体毎のコスト関数値算出部２８にて算出されたコスト関数値の最小値及びその個体を保存する（ステップＳＴ６ｈ）。
なお、下記式（１３）中のパラメータｉは、文字列のインデックス番号を示しており、ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）、Ａｎｇｌｅ（ｉ）、Ｄｉｓｔ（ｉ）、α１，α２，α３は、全て上記式（８）と同様の関数、変数であるものとする。
また、ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）は、文字列とシンボルの重複を示す関数であり、α４は、関数Ｏｖｅｒｌａｐｓｙｍｂｏｌ（ｉ）の値を調整するパラメータである。
ただし、ｆ’（ｉ）＝α１ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）＋α２Ａｎｇｌｅ（ｉ）＋α３Ｄｉｓｔ（ｉ）＋α４Ｏｖｅｒｌａｐｓｙｍｂｏｌ（ｉ）である。
ｆ’＝Σ[ｉ]ｆ’（ｉ）      ・・・（１３）
【０１３２】
次に、収束判定部３０が、コスト関数値最小個体保存部２９に保存されている個体毎のコスト関数値の最小値が一定に収束したか否かを判定する（ステップＳＴ７ｈ）。
収束判定の方法としては、コスト関数値最小個体保存部２９に保存されている個体が、ＣＯＮＶＥＲＧＥＮＣＥ＿ＣＯＮＴＩＮＵＯＵＳ回だけ変化しない場合、もしくは、コスト関数値最小個体保存部２９に保存されている個体におけるＣＯＮＶＥＲＧＥＮＣＥ＿ＲＡＴＥ％以上の個体が同じコスト関数値である場合は、コスト関数値の最小値に収束ありと判定する。また、これ以外の場合には、収束なしと判定する。
ここで、収束ありと判定された場合（ステップＳＴ７ｈ；ＹＥＳ）、処理を終了する。
また、収束なしと判定された場合（ステップＳＴ７ｈ；ＮＯ）には、ステップＳＴ８ｈの処理へ進む。
【０１３３】
ステップＳＴ８ｈにおいて、個体再作成部３１が、個体初期化部２７に初期化された個体、又は自身で前回作成した個体から、所定の選択確率で文字列配置開始候補点を選択することにより、所定数の個体を再作成する。個体再作成の方法は、先ず、個体の選択確率を下記式（１７）から算出する。
下記式（１７）のうち、ｌは各個体を特定するためのインデックス番号であり、ｇｌは個体順番付け部３８により順番付けされた個体のコスト関数値の相対的な大きさである。また、Ｓｅｌｅｃｔｉｏｎ＿ｐｒｏｂｌは、新たな個体として個体ｌが選択される確率を示している。
2012077158.tif 000006
【０１３４】
次に、交叉部３２が、個体再作成部３１で作成された個体から所定の交叉確率ＣＲＯＳＳＯＶＥＲで選択した複数の交叉対象の個体から２つずつ個体をさらに選択し、選択した個体間で文字列配置開始候補点の組み合わせの一部を入れ替える交叉処理を実行する（ステップＳＴ９ｈ）。
次いで、突然変異部３３が、個体再作成部３１で作成された個体及び交叉部３２で交叉処理が実行された個体の文字列配置開始候補点を、所定の突然変異確率Ｍｕｔａｔｉｏｎで、これら個体に登録されている文字列配置開始候補点のうちから選択した別の文字列配置開始候補点に変換する（ステップＳＴ１０ｈ）。別の文字列配置開始候補点が、複数ある場合には、その中から等確率に１つを選択する。
【０１３５】
この後、個体毎のコスト関数値算出部２８が、収束判定部３０によって収束なしと判定されており、かつ上述までの処理を所定の反復回数だけ実行したか否かを判定する（ステップＳＴ１１ｈ）。ここで、収束判定部３０によって収束なしと判定されているが、上述までの処理を所定の反復回数だけ実行したと判定される場合（ステップＳＴ１１ｈ；ＹＥＳ）には、処理を終了する。
また、収束判定部３０に収束なしと判定されており、かつ上述までの処理を実行した回数が所定の反復回数に満たないと判定された場合（ステップＳＴ１１ｈ；ＮＯ）、個体毎のコスト関数値算出部２８は、個体再作成部３１で作成された個体、交叉部３２で交叉処理が実行された個体、及び突然変異部３３での処理が施された個体を入力して、ステップＳＴ５ｈ以降の処理を繰り返す。
【０１３６】
（１Ａ）個体毎のコスト関数値の算出処理
図４８は、個体毎のコスト関数値の算出処理の流れを示すフローチャートであり、図４５中のステップＳＴ５ｈの処理の詳細を示している。
ここで、コスト関数値を算出する対象となる各個体を０から個体数までの値をとり得るインデックス番号ｎｂの個体（ｎｂ）で表現する。
また、個体（ｎｂ）に対応する道路リンクに沿う各文字列を、０から文字列数までの値をとり得るインデックス番号ｉの文字列（ｉ）で表現する。
【０１３７】
文字同士の重複関数算出部２１ａは、ｎｂ＝０の個体（０）に対応する文字列（ｉ）のうち、ｉ＝０の文字列（０）から順に以降の処理を実施する（ステップＳＴ１ｉ）。
先ず、文字同士の重複関数算出部２１ａは、個体（ｎｂ）に対応する文字列（ｉ）について、文字列同士の重複を示す関数ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）の値を算出する（ステップＳＴ２ｉ）。関数ＯｖｅｒｌａｐＳｔｒｉｎｇ（ｉ）の値の算出方法は、上記実施の形態１の文字同士の重複関数算出部２１と同様である。
図４７に示した個体０、個体１、個体２では、図４９の（ａ）欄に示すように、個体０において文字列０と文字列１で０、個体１において文字列０と文字列１で４０、個体２においても文字列０と文字列１で４０となる。
【０１３８】
次に、道路リンク角度関数算出部２２ａが、個体（ｎｂ）に対応する文字列（ｉ）について、文字列（ｉ）が沿う道路リンクの角度を示す関数Ａｎｇｌｅ（ｉ）の値を算出する（ステップＳＴ３ｉ）。関数Ａｎｇｌｅ（ｉ）の値の算出方法は、上記実施の形態１の道路リンク角度関数算出部２２と同様である。
図４７に示した個体０、個体１、個体２では、図４９の（ｂ）欄に示すように、個体０において文字列０で５０、文字列１で０、個体１においても文字列０で５０、文字列１で０、個体２においても文字列０で５０、文字列１で０となる。
【０１３９】
次いで、距離関数算出部２３ａが、個体（ｎｂ）における各文字列配置開始候補点と、文字列データ取得部２によって文字列データから取得された文字列（ｉ）の文字列配置開始点との距離を示す関数Ｄｉｓｔ（ｉ）の値を算出する（ステップＳＴ４ｉ）。関数Ｄｉｓｔ（ｉ）の値の算出方法は、上記実施の形態１の距離関数算出部２３と同様である。
図４７に示した個体０、個体１、個体２では、図４９の（ｃ）欄に示すように、個体０において文字列０で√２４４、文字列１で１２、個体１において文字列０で√１１６、文字列１で６、個体２において文字列０で√１１６、文字列１で１２となる。
【０１４０】
この後、シンボルと文字列の重複関数算出部３４が、個体（ｎｂ）に対応する文字列（ｉ）とシンボルとの重複を示す関数値を算出する（ステップＳＴ５ｉ）。この処理の詳細は、図５０を用いて後述する。
ステップＳＴ６ｉにおいて、文字列同士の重複関数算出部２１ａ、道路リンク角度関数算出部２２ａ、距離関数算出部２３ａ及びシンボルと文字列の重複関数算出部３４は、個体（ｎｂ）に対応する全ての文字列（ｉ）について処理したか否かを判定する。
ここで、未実施の文字列（ｉ）があれば（ステップＳＴ６ｉ；ＹＥＳ）、インデックス番号ｉが＋１加算されて（ステップＳＴ７ｉ）、次の文字列について、ステップＳＴ２ｉ以降の処理が繰り返される。
【０１４１】
未実施の文字列（ｉ）がなくなれば（ステップＳＴ６ｉ；ＮＯ）、文字列同士の重複関数算出部２１ａ、道路リンク角度関数算出部２２ａ、距離関数算出部２３ａ及びシンボルと文字列の重複関数算出部３４は、全ての個体（ｎｂ）について処理したか否かを判定する（ステップＳＴ８ｉ）。ここで、未実施の個体（ｎｂ）があれば（ステップＳＴ８ｉ；ＹＥＳ）、インデックス番号ｎｂが＋１加算されて（ステップＳＴ９ｉ）、次の個体について、ステップＳＴ２ｉ以降の処理が繰り返される。未実施の個体（ｎｂ）がなければ（ステップＳＴ８ｉ；ＮＯ）、処理を終了する。
【０１４２】
（１Ａ−１）シンボルと文字列の重複関数値の算出処理
図５０は、シンボルと文字列の重複関数値の算出処理の流れを示すフローチャートであり、図４８中のステップＳＴ５ｉの処理の詳細を示している。
個体（ｎｂ）に対応する各文字列を、０から文字列数までの値をとり得るインデックス番号ｉの文字列（ｉ）で表現する。
また、上向き配置及び下向き配置した文字列（ｉ）中の各２文字からなる外接矩形を、０から文字列（ｉ）の文字数−１までの値をとり得るインデックス番号ｎｃの外接矩形（ｎｃ）で表現する。
さらに、重複度合いを計算する対象となる各シンボルを、０からシンボルの数までの値をとり得るインデックス番号ｋａのシンボル（ｋａ）で表現する。
さらに、シンボルと文字列の重複関数算出部３４は、文字列と重複するシンボルの数をカウントするカウンタを有し、カウンタの値をパラメータｃｏｕｎｔで表す。
【０１４３】
先ず、シンボルと文字列の重複関数算出部３４が、ｎｂ＝０の個体（０）に対応する文字列のうち、ｉ＝０の文字列（０）から順に以降の処理を実施する（ステップＳＴ１ｊ）。このとき、カウンタの初期値としてｃｏｕｎｔ＝０を設定し、ｎｃ＝０を設定する。
次に、外接矩形作成部３１が、個体（０）に対応する道路リンクに沿って文字列（０）を上向き配置する（ステップＳＴ２ｊ）。続いて、外接矩形作成部３１は、当該道路リンクに沿って文字列（０）を下向き配置する（ステップＳＴ３ｊ）。これにより、上記実施の形態１において、図３２で示したような配置となる。
【０１４４】
次いで、外接矩形作成部３１は、上向き配置及び下向き配置した文字列（ｉ）中の左側の２文字をそれぞれ特定し、これら４つの文字に外接する外接矩形（ｎｃ）を作成する（ステップＳＴ４ｊ）。図３２で示した配置の場合は、図５１に示すように、上向き配置及び下向き配置された文字列０の初めの各２文字から、頂点が、Ｔ０（０，１２）、Ｔ１（０，２８）、Ｔ２（９，２８）、Ｔ３（９，１２）である外接矩形０（ｎｃ＝０）が作成される。なお、図５１において、外接矩形Ａ３が道路リンクｂを境に上向き配置及び下向き配置した文字列１の各文字の外接矩形であり、外接矩形Ｂ３が道路リンクａを境に上向き配置及び下向き配置した文字列０の各文字の外接矩形である。また、図５１に示すＫ位置のシンボルがシンボル０であり、Ｌ位置のシンボルがシンボル１である。図４５中のステップＳＴ２ｈの説明で述べたように、シンボル０はＫ（５，２０）に位置し、シンボル１はＬ（３０，２４）に位置するものとする。
【０１４５】
この後、外接矩形とシンボルの重複判定部３６が、外接矩形（ｎｃ）とシンボル（ｋａ）との重複があるか否かを判定する（ステップＳＴ５ｊ）。ここでは、先ず、外接矩形とシンボルの重複判定部３６が、下記式（１４）に示すｏｖｅｒｌａｐ１〜ｏｖｅｒｌａｐ４を算出する。なお、下記式（１４）中の（ｘｒｅｃｔＴｏｐＬｅｆｔ，ｙｒｅｃｔＴｏｐＬｅｆｔ）は、外接矩形（ｎｃ）の左上座標、（ｘｒｅｃｔＢｏｔｔｏｍＬｅｆｔ，ｙｒｅｃｔＢｏｔｔｏｍＬｅｆｔ）は、外接矩形（ｎｃ）の左下座標、（ｘｒｅｃｔＢｏｔｔｏｍＲｉｇｈｔ，ｙｒｅｃｔＢｏｔｔｏｍＲｉｇｈｔ）は、外接矩形（ｎｃ）の右下座標、（ｘｒｅｃｔＴｏｐＲｉｇｈｔ，ｙｒｅｃｔＴｏｐＲｉｇｈｔ）は、外接矩形（ｎｃ）の右上座標を示している。また、（ｘｓｙｍｂｏｌ，ｙｓｙｍｂｏｌ）は、シンボルの座標を示している。
2012077158.tif 000007
【０１４６】
続いて、外接矩形とシンボルの重複判定部３６は、上記のｏｖｅｒｌａｐ１〜ｏｖｅｒｌａｐ４が、下記式（１５）を満たす場合には重複ありと判定し、そうでない場合は重複なしと判定する。図５１に示した例の場合、ｏｖｅｒｌａｐ１＝８０、ｏｖｅｒｌａｐ２＝７２、ｏｖｅｒｌａｐ３＝６４、ｏｖｅｒｌａｐ４＝７２となり、下記式（１５）を満たす。このため、外接矩形０（ｎｃ＝０）とシンボル０（ｋａ＝０、シンボル（０））とは重複ありと判定される。
ｏｖｅｒｌａｐ１＞０＆ｏｖｅｒｌａｐ２＞０＆ｏｖｅｒｌａｐ３＞０＆ｏｖｅｒｌａｐ４＞０      ・・・（１５）
【０１４７】
外接矩形（ｎｃ）とシンボル（ｋａ）との重複がないと判定すると、外接矩形とシンボルの重複判定部３６は、文字列（ｉ）から作成できる全ての外接矩形（ｎｃ）について、上記の処理を実行したか否かを判定する（ステップＳＴ６ｊ）。ここで、インデックス番号ｎｃが文字列（ｉ）の文字数−１に至らず、未処理の外接矩形（ｎｃ）があると判定される場合（ステップＳＴ６ｊ；ＹＥＳ）には、インデックス番号ｎｃが＋１加算されて（ステップＳＴ７ｊ）、ステップＳＴ４ｊに戻って、次の外接矩形とシンボルの重複が判定される。
【０１４８】
一方、ステップＳＴ５ｊで外接矩形（ｎｃ）とシンボル（ｋａ）との重複があると判定された場合、外接矩形とシンボルの重複判定部３６は、文字列（ｉ）と重複するシンボルの数のカウント値ｃｏｕｎｔを＋１加算する（ステップＳＴ８ｊ）。
インデックス番号ｎｃが文字列（ｉ）の文字数−１に至り、未処理の外接矩形（ｎｃ）がないと判定された場合（ステップＳＴ６ｊ；ＮＯ）若しくはステップＳＴ８ｊの処理が完了すると、外接矩形とシンボルの重複判定部３６は、全てのシンボル（ｋａ）について上記の処理を実行したか否かを判定する（ステップＳＴ９ｊ）。ここで、インデックス番号ｋａがシンボル数に至り、未処理のシンボル（ｋａ）がないと判定された場合（ステップＳＴ９ｊ；ＮＯ）、ステップＳＴ１０ｊに進む。
【０１４９】
また、インデックス番号ｋａがシンボル数に至らず、未処理のシンボル（ｋａ）があると判定された場合（ステップＳＴ９ｊ；ＹＥＳ）、インデックス番号ｋａが＋１加算されて（ステップＳＴ１１ｊ）、ステップＳＴ４ｊに戻り、次のシンボルと文字列（ｉ）の重複が判定される。このとき、図５１に示す例では、文字列０とシンボル１（ｋａ＝１、シンボル（１））との重複が判定される。先ず、文字列０について上述と同様にして外接矩形０を作成し、外接矩形０とシンボル１との重複が判定される。この場合、シンボル１の座標がＬ（３０，２４）であることから、ｏｖｅｒｌａｐ１＝４８０、ｏｖｅｒｌａｐ２＝３６、ｏｖｅｒｌａｐ３＝−３３６、ｏｖｅｒｌａｐ４＝１０８となり、上記式（１５）を満たさない。このため、外接矩形０とシンボル１は重複なしと判定される。
【０１５０】
上述の処理を繰り返して文字列０と重複するシンボルの数を求める。図５１の場合は、文字列０と重複するシンボルはシンボル０のみである。文字列（ｉ）と重複するシンボル（ｋａ）の数を文字列とシンボルの重複数とする。従って、文字列０とシンボルの重複数は“１”となる。
この後、外接矩形とシンボルの重複関数算出部３７は、下記式（１６）を用いて、外接矩形とシンボルの重複関数を算出する（ステップＳＴ１０ｊ）。なお、下記式（１６）中のｏｖｅｒｌａｐｓｙｍｂｏｌ数（ｉ）は、文字列ｉとシンボルとの重複数を示している。図５１の例では、ｏｖｅｒｌａｐｓｙｍｂｏｌ数（０）が１、ｏｖｅｒｌａｐｓｙｍｂｏｌ（０）が２０となる。
ｉｆ  ｏｖｅｒｌａｐｓｙｍｂｏｌ数（ｉ）≧ＯｖｅｒｌａｐｓｙｍｂｏｌＴｈｒｅｓｈｏｌｄ
ｏｖｅｒｌａｐｓｙｍｂｏｌ（ｉ）＝１００
ｅｌｓｅ
ｏｖｅｒｌａｐｓｙｍｂｏｌ（ｉ）
＝ｏｖｅｒｌａｐｓｙｍｂｏｌ数（ｉ）×１００／（ＯｖｅｒｌａｐｓｙｍｂｏｌＴｈｒｅｓｈｏｌｄ）
・・・（１６）
【０１５１】
上述のようにして、同様に、次の文字列、個体に対しても、文字列とシンボルの重複関数を計算する。これにより、図４９の（ｄ）欄に示すように、文字列０と文字列１のシンボルとのｏｖｅｒｌａｐｓｙｍｂｏｌ数は、個体０において文字列０で２０、文字列１で０、個体１において文字列０で０、文字列１で２０、個体２において文字列０で０、文字列１で０となる。
【０１５２】
この後、関数値足し合わせ部２４ａは、上記式（１３）によるコスト関数の足し合わせをする。この場合、各個体のコスト関数ｆの値は、図４９の（ｅ）欄に示すように、個体０で８２＋√２４４、個体１で１５６＋√１１６、個体２で１４２＋√１１６となる。
コスト関数値最小個体保存部２９は、各個体０〜２及びそのコスト関数ｆの値を保持しており、これらのうち、コスト関数ｆの値が最も低い個体と、そのコスト関数値を出力文字列配置開始候補点記憶部５ａに格納する。上述の例では、個体０のコスト関数ｆの値が最も低いことから、個体０の文字列配置開始候補点Ｑ０，Ｑ５と、個体０のコスト関数値８２＋√２４４が出力文字列配置開始候補点記憶部５ａに格納される。
【０１５３】
（２Ａ）個体再作成処理
ここで、図４５中のステップＳＴ８ｈの個体再作成処理について詳細に説明する。
先ず、個体順番付け部３８が、コスト関数値最小個体保存部２９に保存されている個体に対してコスト関数ｆの値が大きい順に順番付けする。
上述の例では、個体０のコスト関数ｆの値が８２＋√２４４、個体１のコスト関数ｆの値が１５６＋√１１６、個体２のコスト関数ｆの値が１４２＋√１１６であることから、個体０は３、個体１は２、個体３は１となる。
【０１５４】
次に、個体再作成部３９が、上記式（１７）に従ってＰＯＰＵＬＡＴＩＯＮ＿ＳＩＺＥ個の個体を再作成する。上述の例では、個体０の順番が３、個体１の順番が２、個体３の順番が１となることから、図４９の（ｆ）欄に示すように、選択確率Ｓｅｌｅｃｔｉｏｎ＿ｐｒｏｂは、個体０で３／６、個体１で１／６、個体２で２／６となる。
以降の説明では、個体初期化部２７によって作成された個体から、図４９の（ｆ）欄に示す選択確率で新たに個体を作成することで、例えば、図５２に示すような個体が新たに作成されたものとする。なお、新たな個体は古い個体から確率的に文字列配置開始候補点を選択して作成されるため、必ずしも毎回、図５２に示すような個体が作成されるとは限らない。
【０１５５】
（３Ａ）交叉処理
図５３は、交叉処理の流れを示すフローチャートであり、図４５中のステップＳＴ９ｈの処理の詳細を示している。交叉部３２の構成については図４３を参照する。また、個体初期化部２７で作成された個体における交叉対象個体の数を０から交叉対象の個体数までの値をとり得るインデックス番号ｎｄで表現する。
先ず、交叉対象個体決定部４０が、個体初期化部２７で作成された個体から、個体毎に交叉対象であるか否かを決定する（ステップＳＴ１ｋ）。ここで、各個体は、ＣＲＯＳＳＯＶＥＲ％の確率で交叉対象の個体（ｎｄ個）となり（ステップＳＴ２ｋ）、１００−ＣＲＯＳＳＯＶＥＲ％の確率で交叉対象でない個体となる。
図４５で述べた前提条件から交叉確率ＣＲＯＳＳＯＶＥＲが６０％であるので、個体が交叉対象個体になる確率は６０％であり、交叉対象個体にならない確率は４０％である。これらの確率で交叉対象個体を選択した結果、個体０と個体２が交叉対象として選択されたものとする。つまり、ｎｄ＝２である。
【０１５６】
次に、２個体決定部４１が、交叉対象個体決定部４０によって決定された交叉対象個体の中から、２つの個体を選択する（ステップＳＴ３ｋ）。上述の例では、交叉対象個体が２つしかないので、個体０と個体２が選択される。
この後、交叉位置決定部４２が、２個体決定部４１で選択された２つの個体間での交叉数を決定する（ステップＳＴ４ｋ）。ここでは、２つの個体間での交叉数として個体間で入れ替える文字列配置開始候補点（配置開始位置）を特定するので、便宜上交叉数を“交叉位置”と呼ぶ。
交叉位置の決定方法は、図４４で示したように、個体は文字列配置開始候補点が原点に近い順に並べられたデータであるので、個体の１番目から（交叉対象の個体に登録されている文字列配置開始候補点の数−１）番目までの文字列配置開始候補点のうち、等確率に１つの文字列配置開始候補点を決定する。
上述の例では、個体０と個体２に登録されている文字列配置開始候補点はそれぞれ２個であるため、交叉位置は１となる。
【０１５７】
次いで、２個体交叉部４３が、交叉位置決定部４２で決定された交叉位置から、２個体決定部４１で選択された２つの個体間で文字列配置開始候補点を入れ替える、交叉処理を実行する（ステップＳＴ５ｋ）。つまり、２つの個体の初めから交叉位置番目の文字列配置開始候補点を互いに入れ替える。上述の例では交叉位置が１であるので、個体０と個体２の１番目の文字列配置開始候補点が入れ替えられる。このようにすることで、図５４に示すようになる。
【０１５８】
この後、交叉した個体を交叉対象個体から除外し（ステップＳＴ６ｋ）、全ての交叉対象個体について交叉処理を実行するまで（ステップＳＴ７ｋ）、ステップＳＴ３ｋ以降の処理を繰り返す。上述の例では交叉対象個体は２個であるため、上述の交叉をした後に、処理を終了する。
【０１５９】
（４Ａ）突然変異処理
ここで、図４５中のステップＳＴ１０ｈの突然変異処理について詳細に説明する。
ステップＳＴ１０ｈにおいて、突然変異部３３は、一部の個体の文字列配置開始候補点を別の文字列配置開始候補点に変換する、いわゆる突然変異処理を実行する。
突然変異の方法は、個体に登録されている文字列配置開始候補点をＭｕｔａｔｉｏｎ％の確率で別の文字列配置開始候補点に変換する。別の文字列配置開始候補点が複数ある場合は、その中から等確率に１つを選択する。
上述した例では、図５５に示すように個体２の文字列０に対応する文字列配置開始候補点Ｑ１を突然変異によって別の文字列配置開始候補点に変換する。個体０〜２において、文字列０に対応する文字列配置開始候補点は、Ｑ１以外ではＱ０のみであるため、個体１のＱ１はＱ０に変わる。
【０１６０】
突然変異処理を施した後、上述と同様に、個体毎のコスト関数値算出部２８が各個体のコスト関数を計算する。上述の例では、各個体のコスト関数ｆの値は、図５６のようになる。コスト関数値最小個体保存部２９にはコスト関数の値が最も低い個体が保存される。図５６の例では、個体０、個体１が最もコスト関数値が低い個体である。この後、収束判定部３０が収束しているか否かを判定する。上述の例では、３つの個体のうち、２つの個体が、コスト関数ｆ値の最小値８２＋√２４４であるので収束ありと判定する。これにより、処理が終了する。
【０１６１】
実施の形態２による文字列配置装置１Ａが、画面上に文字列を配置する際、出力文字列配置開始候補点記憶部５ａに保存された文字列配置開始候補点の組を用いることで、文字列同士の重複や文字列とシンボルの重複が少ない位置に文字列を配置することができる。上述の例では、文字列配置開始候補点の組｛Ｑ０，Ｑ５｝を文字列配置に用いる。
【０１６２】
以上のように、この実施の形態２によれば、表示画面上に配置するシンボルのデータを取得するシンボルデータ取得部２６を備え、個体毎のコスト関数値算出部２８が、文字列配置開始候補点作成部３で作成された位置候補を起点として表示画面上の相対する方向で読みがそれぞれ順方向となるように文字列を配置し、各配置の文字列同士の位置関係及びシンボルデータ取得部２６で取得されたシンボルと文字列の位置関係に基づいて、当該文字列の可読性に影響を与える因子（文字列同士の重複、道路リンクのなす角度、入力文字列配置開始点と文字列配置開始候補点との距離、及び文字列とシンボルとの重複）を評価するコスト関数値を算出する。
このように構成することで、文字列とシンボルの重複を示す関数を含んだコスト関数値が最小の文字列配置開始候補点を決定することができ、文字列同士の重複だけでなく、文字列とシンボルの重複も避けた位置に文字配置を変更することができる。
これにより、カーナビゲーションシステムのように自車位置の変化によって地図の向きが変わる場合であっても、画面中に文字列同士若しくは文字列とシンボルが重複して表示されることを抑制することができる。従って、文字列を容易に認識することができる。
また、最小のコスト関数値となる文字列配置開始候補点の組み合わせを決定する処理にＧＡを用いることにより、文字列数が多くなった場合に上記実施の形態１と比べて少ない計算量で文字配置の変更が可能となる。
【０１６３】
上記実施の形態１及び上記実施の形態２では、文字列を道路に沿って配置する場合について説明したが、本願発明は、これに限定されるものではない。例えば、線状の地物の画像を示すリンク（線分）であれば、河川や鉄道の線路を示すリンクであってもよく、またある領域を区画する境界を示すリンクであっても適用することが可能である。
【０１６４】
なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
【産業上の利用可能性】
【０１６５】
この発明に係る文字列配置装置は、用意すべき情報量の増大を招くことなく、可読性を損なわずに文字列を表示画面に配置することができるので、カーナビゲーションシステムの地図表示画面上での文字列表示に好適である。
【符号の説明】
【０１６６】
１，１Ａ  文字列配置装置、２  文字列データ取得部、３  文字列配置開始候補点作成部、４  最小コスト関数値算出部、５，５ａ  出力文字列配置開始候補点記憶部、６  候補点作成部、７  文字列上向き配置部、８  文字列下向き配置部、９  候補点削除部、１０ａ，１０ｂ  文字配置候補点作成部、１１ａ，１１ｂ  開始文字配置候補点決定部、１２ａ  上向き用文字配置順序決定部、１３ａ  上向き用文字仮配置部、１４ａ，１４ｂ  判定処理部、１５ａ，１５ｂ  文字位置登録部、１６ｂ  下向き用文字配置順序決定部、１７ｂ  下向き用文字仮配置部、１８  文字と道路の重複判定部、１９  文字間隔判定部、２０  文字同士の重複判定部、２１，２１ａ  文字列同士の重複関数算出部、２２，２２ａ  道路リンク角度関数算出部、２３，２３ａ  距離関数算出部、２４，２４ａ  関数値足し合わせ部、２５ａ  文字列上向き配置部、２５ｂ  文字列下向き配置部、２５ｃ  文字列重複算出部、２６  シンボルデータ取得部、２７  個体初期化部、２８  個体毎のコスト関数値算出部、２９  コスト関数値最小個体保存部、３０  収束判定部、３１  個体再作成部、３２  交叉部、３３  突然変異部、３４  シンボルと文字列の重複関数算出部、３５  外接矩形作成部、３６  外接矩形とシンボルの重複判定部、３７  外接矩形とシンボルの重複関数算出部、３８  個体順番付け部、３９  再作成部、４０  交叉対象個体決定部、４１  ２個体決定部、４２  交叉位置決定部、４３  ２個体交叉部、１００  表示画面、１０１  道路リンク、１０２，１０２ａ，１０２ｂ  文字列、１０３，１０３ａ，１０３ｂ，１０３Ａ  文字列配置開始点。
【図１】
2012077158.tif 000008
【図２】
2012077158.tif 000009
【図３】
2012077158.tif 000010
【図４】
2012077158.tif 000011
【図５】
2012077158.tif 000012
【図６】
2012077158.tif 000013
【図７】
2012077158.tif 000014
【図８】
2012077158.tif 000015
【図９】
2012077158.tif 000016
【図１０】
2012077158.tif 000017
【図１１】
2012077158.tif 000018
【図１２】
2012077158.tif 000019
【図１３】
2012077158.tif 000020
【図１４】
2012077158.tif 000021
【図１５】
2012077158.tif 000022
【図１６】
2012077158.tif 000023
【図１７】
2012077158.tif 000024
【図１８】
2012077158.tif 000025
【図１９】
2012077158.tif 000026
【図２０】
2012077158.tif 000027
【図２１】
2012077158.tif 000028
【図２２】
2012077158.tif 000029
【図２３】
2012077158.tif 000030
【図２４】
2012077158.tif 000031
【図２５】
2012077158.tif 000032
【図２６】
2012077158.tif 000033
【図２７】
2012077158.tif 000034
【図２８】
2012077158.tif 000035
【図２９】
2012077158.tif 000036
【図３０】
2012077158.tif 000037
【図３１】
2012077158.tif 000038
【図３２】
2012077158.tif 000039
【図３３】
2012077158.tif 000040
【図３４】
2012077158.tif 000041
【図３５】
2012077158.tif 000042
【図３６】
2012077158.tif 000043
【図３７】
2012077158.tif 000044
【図３８】
2012077158.tif 000045
【図３９】
2012077158.tif 000046
【図４０】
2012077158.tif 000047
【図４１】
2012077158.tif 000048
【図４２】
2012077158.tif 000049
【図４３】
2012077158.tif 000050
【図４４】
2012077158.tif 000051
【図４５】
2012077158.tif 000052
【図４６】
2012077158.tif 000053
【図４７】
2012077158.tif 000054
【図４８】
2012077158.tif 000055
【図４９】
2012077158.tif 000056
【図５０】
2012077158.tif 000057
【図５１】
2012077158.tif 000058
【図５２】
2012077158.tif 000059
【図５３】
2012077158.tif 000060
【図５４】
2012077158.tif 000061
【図５５】
2012077158.tif 000062
【図５６】
2012077158.tif 000063
【国際調査報告】
2012077158.tif 000064
2012077158.tif 000065
2012077158.tif 000066
2012077158.tif 000067