6.ライブラリの利用
住所データベースが作成された後はライブラリが利用できるようになります。ライブラリの使用方法は次のとおりです。
6.1 住所データベースのメモリへの格納
ライブラリを使用する最初に、住所データベースをメモリにロードします。(例)
path = "/data/address_data"; // 住所データベースの格納ディレクトリ
loadLevel = 4; // 地番街区符号のデータまでをロード
retCode = gcjDbLoad( path, loadLevel );
6.2 文字コードの設定
次に、関数で受け渡しする住所文字列の文字コードを設定します。シフトJISの場合は設定しなくても構いません。
(例)
retCode = gcjSetArgEncoding( "EUC-JP" );
6.3 住所を緯度経度に変換
住所を緯度経度に変換する場合は、次の2つのステップで行います。
1)住所を住所コードに変換する。
2)住所コードを緯度経度に変換する。
(例)
char *address;
ADR_CODE adrCode;
double latitude,longitude;
address = "東京都千代田区丸の内一丁目2番3号"// 住所を住所コードに変換
retCode = gcjAdrStr2Code( address, &adrCode );// 住所コードを緯度経度に変換
retCode = gcjAdrCode2Point( &adrCode, &latitude, &longitude);
6.4 住所を正規化
住所を統一した書式に変換(正規化)する場合は、次の2つのステップで行います。
1)住所を住所コードに変換する。
2)住所コードを住所文字列に変換する。
(例)
char *address,kanji[256];
ADR_CODE adrCode;
double latitude,longitude;
address = "東京都千代田区丸ノ内1-2-3"// 住所を住所コードに変換
retCode = gcjAdrStr2Code( address, &adrCode );// 住所コードを住所文字列に変換
retCode = gcjAdrCode2Str( &adrCode, kanji, 256, NULL, 0 );// kanji[]には"東京都千代田区丸の内一丁目2番3号"が返ります。
出力形式を変更したい場合はgcjSetAdrStringFormat()で形式を設定します。
(例)丁目の数字を算用数字で出力する場合
retCode = gcjSetAdrStringFormat( 21, 0 );
retCode = gcjAdrCode2Str( &adrCode, kanji, 256, NULL, 0 );
// kanji[]には"東京都千代田区丸の内1丁目2番3号"が返ります
6.5 ライブラリの利用終了処理
ライブラリの使用が終了した場合は、住所データベースなどライブラリ用に確保したメモリを解放します。この処理は必ず行って下さい。
(例)
retCode = jcjDbEnd();
6.6 住所コード
ライブラリの関数で、住所を緯度経度へ変換したり、正規化するだけであれば、ライブラリで使われている住所コードに関して知る必要はありません。しかし、住所データベースの内容に直接アクセスして、より柔軟な対応を行うといった場合は、住所コードについての知識が必要です。以下に住所コードについて解説いたします。
住所コードは以下の構造体です。
typedef struct {
int codeLevel; /* コードが有効なレベル */
int cityCode; /* 市区町村コード(JIS) 5桁 :レベル1~4 */
int choCode; /* 町大字コード(独自) :レベル5 */
int azaCode; /* 丁目字コード(独自) :レベル6 */
int gaikuCode; /* 地番街区符号コード(独自) :レベル7 */
int jukyoCode; /* 枝番住居番号コード(独自) :レベル8 */
} ADR_CODE ;ここで、「コードが有効なレベル」とは、この構造体に格納されているコードのうち、上位レベルからどのコードまで有効な値が入っているかを示す値です。例えば、codeLevelの値が6の場合は丁目字コードまで有効な値として利用できる事を示します。また、コード番号が下位のレベルまで有効な値が入っていても、より上位のレベルのコード番号を関数に渡したい場合はcodeLevelを渡したいレベルの値にして使用するという使い方もできます。
市区町村コードはレベル1~4となっていますが、これは
都道府県レベル : レベル1
支庁レベル : レベル2
郡レベル : レベル3
市区町村レベル : レベル4
の4つのレベルをまとめています。これは5桁の市区町村コードの番号を解析する事で上位のコード番号を求める事ができるからです。
6.7 住所データベースへの直接アクセス
住所データベースのレコードを直接読み出す場合は次のようにします。
1.読み出したいデータの住所コードが分かっている場合
gcjGetAdrRecord()で直接読み出す事ができます。
2.ある市の町大字名を全て読み出したいといった場合
1)読み出したいレベルの住所データのレコード数を取得します。
2)そのレコード数のintの配列を確保します。
3)その配列にレコードのコード番号のリストを読み込みます。
4)配列のコード番号を指定してレコードを取得します。
(例)東京都新宿区の町大字レコードの最初のレコードを取得する場合
ADR_CODE adrCode;
int *codeNums;
CHO_RECORD choRecord;
adrCode.codeLevel = 5; // 町大字区域を表すコードは5
adrCode.cityCode = 13104; // 新宿区の市区町村コードは13104// numReordsに町の数が返されます。
numRecords = gcjGetNumAdrRecords( &adrCode );// 町の数分のintの配列を確保します。
codeNums = (int*) malloc( numRecords * sizeof(int) );// codeNumsの配列にコード番号が格納されます。
numCodes = gcjGetAdrRecordList( &adrCode, codeNums, numRecords );// 最初のレコードがrecordに格納されます。
adrCode.choCode = codeNums[0];
result = gcjGetAdrRecord( &adrCode, (void*) &choRecord, sizeof(record) );


