はじめに
「建物名は分かるけど住所がわからない」「マンション名から住所を自動入力したい」——そんな場面、ありませんか?
ZENRIN Maps APIの「search/building_name」エンドポイントは、建物名・テナント名から詳細な住所情報を検索できる強力な機能です。建物名やマンション名を入力するだけで、郵便番号・住所・緯度経度まで一括で取得でき、住所入力フォームの利便性を大幅に向上させることができます。
この記事では、search/building_name
APIの魅力や使い方、実装のポイントをわかりやすく紹介します。
ZENRIN Maps API 2ヶ月無料お試しID
ZENRIN Maps APIを実際に試してみたい方は、2ヶ月無料のお試しIDをご利用いただけます!
📝 お申し込みはこちら
👉 ZENRIN Maps APIの始め方
お試し期間中は、本記事で紹介する機能をはじめ、ZENRIN Maps APIの豊富な機能をご利用いただけます。
「search/building_name」APIの特徴
- 建物名・マンション名・テナント名から住所情報を逆引き検索
- 郵便番号・詳細住所・緯度経度まで一括取得可能
- 複数の候補がある場合は全て取得し、ユーザーに選択させることも可能
- 部分一致・前方一致・完全一致の検索タイプを選択可能
- 住所コードでの絞り込み検索にも対応
API仕様
エンドポイント
GET/POST https://[domain]/search/building_name
Content-Type: application/x-www-form-urlencoded
リクエストパラメータ
検索方式による必須パラメータ
このAPIでは、検索のベースによって必須となるパラメータが異なります:
-
建物名・テナント名での検索:
word
が必須 -
住所コードでの検索:
address_code_list
が必須 -
座標を基準とした近傍検索:
proximity
が必須
パラメータ名 | 型 | 必須 | デフォルト値 | 内容・例・補足 |
---|---|---|---|---|
word | string | ※1 | - | 建物名・テナント名を指定(例: "田町ステーションタワー")。複数ワードはスペース区切りでAND検索。最大文字数:1024文字 ※1 建物名・テナント名検索時は必須 |
word_match_type | integer | 3 | 検索語句のマッチタイプを指定(word パラメータ指定時のみ有効)1:完全一致(スペースや記号が削除され、1ワードとして検索) 2:前方一致(スペースや記号が削除され、1ワードとして検索) 3:部分一致(デフォルト) |
|
address_code_list | array[string] | ※2 | - | 住所コードを指定して検索(前方一致)。複数指定時はOR検索。カンマ区切りで指定。最大50件まで ※2 住所コード検索時は必須 |
proximity | array[number] | ※3 | - | 中心座標と半径で範囲を指定した近傍検索。経度,緯度,半径(m) の形式で指定。半径の上限は5000m※3 座標基準の近傍検索時は必須 |
limit | array[integer] | - | 検索結果の取得件数を指定。[オフセット,件数] の形式で指定(例: [0,100] ) |
|
datum | string | JGD | 入出力座標の測地系を指定 JGD:世界測地系 TOKYO:日本測地系 TOKYO_NAVI:日本測地系(ゼンリン ナビ地図) |
|
sort | array[string] | - | 出力順を指定。カンマ区切りで複数指定可能。デフォルトは昇順。降順の場合は項目名の前に- を付加指定可能な値: name_read (名称読み)、distance (検索座標と代表点の直線距離) |
|
building_type | array[integer] | 3 | 建物タイプを指定(複数指定可能) 1:テナント(※プレミアム機能:別途契約が必要) 3:建物(デフォルト) |
|
building_use | array[integer] | - | 建物用途を指定(複数指定可能)。建物の利用用途を推定した情報 ※プレミアム機能:別途契約が必要 |
|
pastmap_year | array[integer] | - | 過去地図年度を指定(複数指定可能) ※プレミアム機能:別途契約が必要 |
- ヘッダー例:
Content-Type: application/x-www-form-urlencoded
x-api-key: <あなたのAPIキー>
Authorization: ip
レスポンスデータの構成
{
"status": "OK",
"result": {
"info": {
"hit": 20997
},
"item": [
{
"zid": "308659860004711896",
"zid_attr": "1750960214212924966",
"id": "0000308659860004711896",
"id_attr": "0001750960214212924966",
"building_name": "東京○",
"name": "東京○",
"name_read": null,
"name_read_through": null,
"post_code": "000-0000",
"address_code": "131010550010000900001",
"address": "東京都千代田区丸の内○○○○",
"building_type": 3,
"building_top_floor_num": 3,
"building_bottom_floor_num": 2,
"position": [
139.7659917535,
35.6811914063
],
"pastmap_id": null,
"pastmap_year": null,
"distance": null,
"room_count": 11,
"tenant_floor_type": 0,
"tenant_floor": null,
"tenant_floor_num": null,
"tenant_room_name": null,
"parking_exist_flag": 0,
"building_use": "2000",
"building_use_level": "D"
},
...
]
}
}
各項目の説明
フィールド名 | 型 | 説明 |
---|---|---|
status | string | レスポンスステータス(例: "OK") |
result.info.hit | integer | ヒット件数(該当する建物情報の総数) |
result.item | array | 建物情報の配列 |
zid | string | 建物ZID(建物等の地物毎に振られるパーマネントID) |
zid_attr | string | 属性ZID(地物内のテナント施設等の属性情報毎に振られるパーマネントID) |
id | string | 建物ID(0埋めされた建物ZID) |
id_attr | string | 属性ID(0埋めされた属性ZID) |
building_name | string | 建物名称 |
name | string/null | テナント名称(building_typeが3以外の場合のみ出力) |
name_read | string/null | テナント名称読み(ひらがな) |
name_read_through | string/null | テナント名称読み下し(全角カタカナ) |
post_code | string | 郵便番号 |
address_code | string | 住所コード |
address | string | 住所 |
building_type | integer | 建物タイプ(1:テナント, 3:建物) |
building_top_floor_num | integer | 建物の最上階数 |
building_bottom_floor_num | integer | 建物の地下階数(地下階が存在しない場合は0、不明な場合は-1) |
position | array[number] | 緯度経度配列 [経度, 緯度] |
pastmap_id | integer/null | 過去地図管理ID(過去地図データの場合のみ、プレミアム機能) |
pastmap_year | integer/null | 過去地図年度(過去地図データの場合のみ、プレミアム機能) |
distance | number/null | 検索座標と代表点の直線距離(proximityを指定した場合のみ返却) |
room_count | integer | 部屋数(プレミアム機能) |
tenant_floor_type | integer | 階数種別(0:無効値, 1:地上, 2:地下, 3:中地上, 4:中地下, 5:屋上、プレミアム機能) |
tenant_floor | string/null | テナント・部屋の階数(プレミアム機能) |
tenant_floor_num | string/null | テナント・部屋の階数数値(プレミアム機能) |
tenant_room_name | string/null | 部屋名称(プレミアム機能) |
parking_exist_flag | integer | 駐車場有無(0:未調査, 1:あり(一般車両), 2:あり(一般車両、大型車両)) |
building_use | string | 建物用途コード(プレミアム機能) |
building_use_level | string | 建物用途の推定情報レベル(B/X:ゼンリン住宅地図データと他社出典データ、プレミアム機能) |
仕様・注意点
- 建物名の表記揺れにも対応し、部分一致検索で幅広くヒット
- 複数の候補がある場合は全て返却されるため、ユーザーに選択肢を提示可能
-
address_code_list
で都道府県や市区町村を指定して検索範囲を絞り込み可能 - 位置情報(緯度経度)も取得できるため、地図連携や他APIとの組み合わせが容易
実装例
JavaScript(fetch)によるリクエスト例
const apiPath = 'https://test-web.zmaps-api.com/search/building_name';
const apiParams = {
word: '田町ステーションタワー',
word_match_type: 3,
limit: [0, 50],
sort: ['name_read'],
};
const queryString = new URLSearchParams(apiParams).toString();
const header = {
'Content-Type': 'application/x-www-form-urlencoded',
'x-api-key': 'あなたのAPIキー',
'Authorization': 'ip',
};
fetch(`${apiPath}?${queryString}`, {
method: 'GET',
headers: header,
})
.then(res => res.json())
.then(data => {
// 建物情報を取得
console.log(data.result.item);
});
Vue.jsを使った建物名検索例
以下のコードでは、ユーザーが建物名を入力した際にsearch/building_name
APIを呼び出し、検索結果に応じて以下の処理を行っています。:
- 複数の建物が見つかった場合: 都道府県順にソートした建物リストをサジェストとして表示
- 単一の建物が見つかった場合: 郵便番号・建物名・住所を自動入力し、さらに住所から詳細な建物情報を再取得
- エラー処理: API呼び出しが失敗した場合の適切なエラーハンドリング
const getAddressFromBuilding = async () => {
if (!state.form.building || !state.manual_input.building) {
return;
}
// loading
state.api.building_search.loading = true;
// init
state.api.building_search.result = null;
state.form.building_options = [];
triggerOptionsDisplay(false, false, false);
// apiPath
const apiPath = state.api.domain + 'search/building_name';
// params
const apiParams = {
word: state.form.building, // 入力した建物名
word_match_type: 3,
limit: [0, 100],
};
// queryString
const queryString = new URLSearchParams(apiParams).toString();
// headers
const header = {
'Content-Type': 'application/x-www-form-urlencoded',
'x-api-key': state.api.key,
'Authorization': 'ip',
};
try {
const response = await fetch(`${apiPath}?${queryString}`, {
method: 'GET',
headers: header,
});
const result = await response.json();
console.log('building_search.result', result.result);
// 結果が複数の場合
if (result.result.item.length > 1) {
// 都道府県順でソート
result.result.item.forEach((item) => {
item._prefecture = getPrefectureIndex(item.address);
});
result.result.item.sort((a, b) => a._prefecture - b._prefecture);
// 選択肢を作成
const options = result.result.item.map((item) => ({
name: item.building_name,
address: item.address,
post_code: item.post_code,
lat: item.position[1],
lng: item.position[0],
}));
state.form.building_options = options;
// 建物選択肢を表示
triggerOptionsDisplay(false, true, false);
}
// 結果が単一の場合
else if (result.result.item.length === 1) {
const item = result.result.item[0];
// 郵便番号を自動設定
if (item.post_code && item.post_code !== state.form.post_code) {
state.form.post_code = item.post_code;
state.manual_input.post_code = false;
blinkInputBox('post-code');
}
// 建物名を正規化
if (item.building_name && item.building_name !== state.form.building) {
state.form.building = item.building_name;
state.manual_input.building = false;
blinkInputBox('building');
}
// 住所を自動設定
if (item.address && item.address !== state.form.address) {
state.form.address = item.address;
state.manual_input.address = false;
blinkInputBox('address');
// 住所から建物情報を再取得
await getBuildingsFromAddress();
}
}
// loading
state.api.building_search.loading = false;
} catch (error) {
console.log('[error]getAddressFromBuilding:', error);
state.api.building_search.loading = false;
}
};
運用・UXのポイント
- 建物名の一部分でも検索できるため、ユーザーの記憶に頼らない入力支援が可能
- 複数の候補がある場合はサジェスト表示で選択肢を提示
- 建物名から郵便番号・住所まで自動入力でユーザーの入力負担を大幅削減
- 緯度経度情報を活用し、地図表示や他API(部屋・テナント情報取得)との連携も可能
- 都道府県別にソートすることで、遠方の同名建物との区別を容易に
導入のメリット
ユーザーにとってのメリット
- 建物名だけで住所入力が完結し、入力の手間が大幅に削減
- 建物名の一部やあいまいな記憶でも検索可能
- 正確な住所情報を簡単に入力できる
サービス提供者にとってのメリット
- 住所データの精度向上と入力ミスの削減
- ユーザー体験の大幅な改善
- 不正確な住所による業務トラブルの減少
- 地図連携や配送システムとの親和性向上
まとめ
ZENRIN Maps APIの建物・テナント名検索API(search/building_name)を使えば、建物名から住所を逆引きできる便利な機能を実現できます。
フロントエンドフレームワークと組み合わせることで、ユーザー体験の良い住所入力フォームを構築できます。
- 建物名入力→API呼び出し→住所・郵便番号自動入力
- 複数候補がある場合はサジェスト表示で選択
- 緯度経度を活用し、地図表示や他のAPIと連携することで、部屋・テナント情報まで自動補完も可能
不動産サイトや配送サービス、会員登録フォームなど、建物名から住所を特定したい場面で非常に有効です。
ZENRIN Maps API 2ヶ月無料お試しIDのご案内
本記事でご紹介したZENRIN Maps APIの機能を実際にお試しいただけます!
📝 お申し込みはこちら
👉 ZENRIN Maps APIの始め方
お試し期間中は、ZENRIN Maps APIの豊富な機能をご利用いただけるので、本格導入前の検証にぜひご活用ください。
【補足】search/building_nameとdata-coding/targetingの違い・比較
ZENRIN Maps APIには建物検索に関して「search/building_name」と「data-coding/targeting」の2つのエンドポイントがあります。
それぞれの主な違いは以下の通りです。
項目 | search/building_name | data-coding/targeting |
---|---|---|
主な用途 | 建物名・テナント名からの逆引き検索 | 建物情報をより詳細な条件で検索(建物ターゲティング) |
検索方式 | フリーワード検索(建物名・テナント名) | 住所コード・範囲指定・条件指定による詳細検索 |
入力パラメータ | word(必須), word_match_type, address_code_list など | boundary(ポリゴン範囲), building_type, building_use など |
検索範囲 | 全国の建物データから名称検索 | 指定範囲・条件内の建物データから詳細検索 |
利用シーン | 建物名がわかっている場合の住所特定 | 特定エリア内の建物を条件で絞り込みたい場合 |
レスポンス | 建物名に該当する全ての建物情報 | 指定条件に該当する建物の詳細情報一覧 |
選択のポイント
- search/building_nameは、ユーザーが建物名を知っている場合の逆引き検索に最適です。
- data-coding/targetingは、特定エリア内の建物を用途・階数・面積などの詳細条件で絞り込みたい場合に適しています。
- 住所入力フォームでの建物名検索には、search/building_nameが適しています。
- マーケティング分析や不動産調査など、エリア内建物の属性分析には、data-coding/targetingが有効です。
関連記事
- ZENRIN Maps APIのジオコーディングでマンション名やテナント名まで取得できる!住所入力の精度向上とUX改善
- ZENRIN Maps API 住所正規化API(ac_standard) - 仕様・実装・活用・UX向上ガイド
- ZENRIN Maps API 郵便番号検索API(postcode) - 仕様・実装・活用・UX向上ガイド
- ZENRIN Maps API 建物座標検索API(building_pos)- 仕様・実装・活用・UX向上ガイド
※本記事で使用しているAPIキーやURLはサンプルです。実際の導入時には、公式サイトから取得した正式なAPIキーを使用してください。