メインメニュー
昨日の利用数
アドレスマッチング
ユーザ数75
変換件数103798
月毎 統計(CSV形式)
ジオコーディング実験
変換件数63659
トップ  >  サンプルプログラム解説(C++)

サンプルプログラム解説

同梱されているC++サンプルコードsrc/dams.cppの動作を解説します。独自プログラムを開発する場合の参考にしてください。

#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <dams.h>

ヘッダファイルです。dams.hはデフォルトで /usr/local/include にインストールされますので、コンパイラがこのディレクトリをインクルードバスに含んでいない場合、コンパイル時に -I/usr/local/include オプションが必要になります。

int main(int argc, char **argv) {
  std::string dicpath(""), query("");
  if (argc == 2) {
    query = argv[1];
    damswrapper::init();
  } else if (argc == 3) {
    query = argv[1];
    damswrapper::init(argv[2]);
  } else {
    std::cout << "Usage: main <query> [<dictionary path>]" << std::endl;
    std::cout << "default dictionary path = '" << damswrapper::default_dic_path() << "'" << std::endl;
    std::exit(0);
  }

コマンドラインオプションを読み込み、ジオコーダを初期化します。第二パラメータが省略された場合は damswrapper::init(); を読んでデフォルトの辞書ファイルを読み込みます。第二パラメータが与えられた場合は damswrapper::init(argv[2]); の行で辞書ファイルを指定して初期化します。

  damswrapper::debugmode(false);

デバッグモードをオフにします。オンにすると住所を解析するプロセスが表示されます。

  int score;
  std::string tail;
  std::vector<damswrapper::Candidate> candidates;
  damswrapper::retrieve(score, tail, candidates, query);

damswrapper::retrieve(...) で、住所文字列(query)を解析し、その結果を candidates に格納します。scoreには一致度を表す数値が0から5の範囲で、tailには解析できなかった部分の文字列を返します。

  std::cout << "score=" << score << std::endl;
  std::cout << "tail=" << tail << std::endl;

scoreとtailを表示します。

  int cc = 0;
  for (std::vector<damswrapper::Candidate>::iterator it = candidates.begin(); it != candidates.end(); it++) {
    std::cout << "candidate[" << cc << "]:" << std::endl;
    for (damswrapper::Candidate::iterator itc = it->begin(); itc != it->end(); itc++) {
      std::cout << "  name=" << itc->get_name()
                << ", level=" << itc->get_level()
                << ", x=" << itc->get_x()
                << ", y=" << itc->get_y() << std::endl;
    }
  }

解析結果を表示します。まず、candidates には住所候補が複数格納される場合があります。たとえば「駒場四丁目」を解析した場合、「茨城県取手市駒場四丁目」と「東京都目黒区駒場四丁目」に該当するデータが入ります。そのため、外側の for ループですべての候補を繰り返し表示します。

内側の for ループでは、住所候補を構成する住所要素の情報を表示します。住所候補は、都道府県から順番に配列として格納されています。「東京都目黒区駒場四丁目」の場合、先頭要素は「東京都」、順に「目黒区」「駒場」「四丁目」となっています。各住所要素は name に「正しい(=マスタデータ上の)表記」を、level に住所レベル(1なら都道府県、3なら市町村または23特別区など)を、x, y にそれぞれ(その住所要素が表す領域の代表点の)経度と緯度を持っています。

これらの情報を利用することで、住所文字列の分割や正規化、ジオコーディングなどの処理が可能になります。

  std::cout << "elapsed=" << damswrapper::elapsedtime() << std::endl;
  return 0;
}

処理時間(秒)を表示して終了します。

プリンタ用画面
前
C++ API
カテゴリートップ
TOP
次
ダウンロード

Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Base Theme Designed by OCEAN-NET