不動産DX記事まとめ

ZENRIN MAPs APIを活用する

作成者: 片山 幹健|24/03/25 0:00

今回は、自社の保有する不動産データ(住所表記の揺らぎや住所欠損が発生している)を、ZENRIN MAPs APIの建物情報を利用してクレンジングする(住所表記のゆらぎや欠損をなくす)プロセスを紹介します。

ZENRIN MAPs APIについて

ZENRIN MAPs APIsとは、地図の会社ゼンリングループが提供するAPIサービスです。地図コンテンツや検索機能、位置情報に関連する機能をWebサイトやWebアプリケーション、スマートフォンアプリ等に実装する為の開発ツールです。

建物属性情報・施設情報・各種統計データなどを過去から現在まで地図基盤に搭載。様々なコンテンツ表示や検索、過去情報等を活用し、地域の変遷を捉える事で、対象エリアの状況把握にご活用いただけます。

ゼンリンの位置情報コンテンツを活用してクレンジングし、最新かつ精度の高い位置情報(住所・座標)を返却。ビジネスで"使えるデータ"として活用シーンを拡大させます。

ZENRIN MAPs APIの紹介ページ

https://www.zenrin.co.jp/product/category/iot/api/index.html

不動産データベースを構築する上で、住所表記の揺らぎや住所の番地以降の情報が欠損している、同一住所に複数の物件があるなど、特に建物情報が一意にならず難航します。

国土交通省で不動産IDを整備する動きはありますが、まだ時間がかかりそうです。

https://www.mlit.go.jp/tochi_fudousan_kensetsugyo/tochi_fudousan_kensetsugyo_tk5_000001_00025.html

ZENRIN MAPs APIは、以下のように、ZIDと呼ばれるゼンリン独自のIDがすべての建物に割り振られており、住所や建物の情報がデータベース化されています。

有料サービスにはなりますが、こちらを活用することで住所表記の揺らぎや住所の番地以降の情報の欠損が発生していても、他の情報との整合から一意の不動産として識別できるようになるため、今回はZENRIN MAPs APIの活用について取り上げます。

APIの活用方法について

今回は、自社の保有する不動産データ(住所表記の揺らぎや住所欠損が発生している)を、ZENRIN MAPs APIの建物情報を利用してクレンジングする(住所表記のゆらぎや欠損をなくす)プロセスを紹介します。

今回はZENRIN MAPs APIの建物ターゲティングというサービスを利用します。

https://developers.zmaps-api.com/v20/reference/webAPI/targeting.html

ZENRIN MAPs APIを契約すると、APIを利用するための認証方法の設定とアクセスキーの取得ができるようになります。認証方法は、今回はOAuth2.0認証の場合を紹介します。

https://developers.zmaps-api.com/v20/reference/webAPI/oauth2/token.html

建物情報を取得してスプレッドシート上に転記する

APIで取得できるデータは以下です。

item zid
string
建物ZID
建物等の地物毎にふられるパーマネントのID
zid_attr
string
属性ZID
地物内のテナント施設等といった属性情報毎にふられるパーマネントのID
building_name
string
建物名称
name
string
名称
name_read_through
string
名称読み下し(全角カタカナ)
post_code
string
郵便番号
address_code
string
住所コード
address
string
住所
room_count
integer
部屋数
tenant_floor_type
integer
階数種別
該当階の地上、地下などの種別です。
  • 0

    無効値

  • 1

    地上

  • 2

    地下

  • 3

    中地上

  • 4

    中地下

  • 5

    屋上

tenant_floor
string
テナント・部屋の階数
tenant_floor_num
integer
テナント・部屋の階数数値
tenant_room_name
string
部屋名称
building_type
integer
建物・テナントを判別する区分
  • 1

    テナント

  • 3

    建物

building_top_floor_num
integer
建物の最上階数
building_bottom_floor_num
integer
建物の地下階数
(地下階が存在しない場合は0、地下階数が不明な場合は-1が返却されます。)
position ["経度","緯度"]
area_size
integer
面積(単位:m² 平方メートル)
total_area_size
integer
延べ床面積(単位:m² 平方メートル)
distance
number
検索座標と代表点の直線距離(proximityを指定した場合のみ返却)
単位はm

1. 実行環境の準備: APIを利用するためのコードを記述する場としてGoogle App Scriptを、データの出力先としてスプレッドシートを準備します。

まずはOAuth2.0認証で、APIを利用するためのトークンを取得します。

function fetchBuildingDataWithToken() {
  var tokenUrl = "https://[domain]/oauth2/token トークン取得先のURLです。[domain]の部分を適宜変更する必要あり";
  var clientId = 'クライアントID';
  var clientSecret = 'クライアントシークレットキー';
  var tokenCredentials = Utilities.base64Encode(clientId + ':' + clientSecret);

  var payload = {
    'grant_type': 'client_credentials'
  };

  var tokenOptions = {
    'method': 'post',
    'contentType': 'application/x-www-form-urlencoded',
    'headers': {
      'Authorization': 'Basic ' + tokenCredentials
    },
    'payload': payload
  };

  var tokenResponse = UrlFetchApp.fetch(tokenUrl, tokenOptions);
  var tokenJson = JSON.parse(tokenResponse.getContentText());
  var accessToken = tokenJson.access_token;

2. エリアの選定: 収集するデータの範囲を決めます。

次に建物情報を取得した範囲を決めます。

今回は、指定した緯度経度を中心に半径300m以内の建物情報を取得します。

var apiEndpoint = "[domain]/data-coding/targeting";
var queryParams = "?proximity=139.70054179438355,35.689749885276726,300&building_type=3&sort=distance";
var headers = {
"x-api-key": "APIキー",
"Authorization": "Bearer " + accessToken
};

var apiOptions = {
"method": "get",
"contentType": "application/x-www-form-urlencoded",
"headers": headers
};

var apiResponse = UrlFetchApp.fetch(apiEndpoint + queryParams, apiOptions);
var responseData = JSON.parse(apiResponse.getContentText());

var spreadsheet = SpreadsheetApp.openById("スプレッドシートのファイルID");
var sheet = spreadsheet.getSheetByName("シート1");

var items = responseData.result ? responseData.result.item : [];
if (items.length > 0) {
items.forEach(function(item) {
var row = [
item.zid,
item.zid_attr,
item.building_name,
item.name,
item.name_read_through,
item.post_code,
item.address_code,
item.address,
item.room_count,
item.tenant_floor_type,
item.tenant_floor,
item.tenant_floor_num,
item.tenant_room_name,
item.building_type,
item.building_top_floor_num,
item.building_bottom_floor_num,
item.position.join(","),
item.area_size,
item.total_area_size,
item.distance
];
sheet.appendRow(row);
});
} else {
Logger.log("No items found in response");
}

return responseData;
}

 

上記を実行すると、以下のようにスプレッドシートに建物情報が転記されます。

今回は、ZENRIN MAPs APIについて紹介しました。次回はここからデータクレンジングを行う流れをご紹介したいと思います。

不動産DXに関するご相談などもお気軽にどうぞ。