1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ZENRIN Maps API 建物・テナント名検索API(building_name) - 仕様・実装・活用・UX向上ガイド

Last updated at Posted at 2025-07-25

はじめに

「建物名は分かるけど住所がわからない」「マンション名から住所を自動入力したい」——そんな場面、ありませんか?

ZENRIN Maps APIの「search/building_name」エンドポイントは、建物名・テナント名から詳細な住所情報を検索できる強力な機能です。建物名やマンション名を入力するだけで、郵便番号・住所・緯度経度まで一括で取得でき、住所入力フォームの利便性を大幅に向上させることができます。

この記事では、search/building_nameAPIの魅力や使い方、実装のポイントをわかりやすく紹介します。

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_nameAPIを呼び出し、検索結果に応じて以下の処理を行っています。:

  • 複数の建物が見つかった場合: 都道府県順にソートした建物リストをサジェストとして表示
  • 単一の建物が見つかった場合: 郵便番号・建物名・住所を自動入力し、さらに住所から詳細な建物情報を再取得
  • エラー処理: 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が有効です。

関連記事


※本記事で使用しているAPIキーやURLはサンプルです。実際の導入時には、公式サイトから取得した正式なAPIキーを使用してください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?