0
0

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とGoogle Maps APIのジオコーディング機能比較 - 初心者向け実装・活用ガイド

Posted at

はじめに

「住所から地図上の位置を特定したい」「ユーザーが入力した住所を緯度経度に変換したい」——地図アプリケーション開発では必ず必要になる機能です。

この処理をジオコーディング(Geocoding)と呼びます。日本でよく使われるZENRIN Maps APIGoogle Maps APIは、それぞれ特徴的なジオコーディング機能を提供しています。

この記事では、両APIのジオコーディング機能を実際のコード例を交えながら比較します。

ZENRIN Maps API 2ヶ月無料お試しID

ZENRIN Maps APIを実際に試してみたい方は、2ヶ月無料のお試しIDをご利用いただけます!

📝 お申し込みはこちら
👉 ZENRIN Maps APIの始め方

お試し期間中は、本記事で紹介する機能をはじめ、ZENRIN Maps APIの豊富な機能をご利用いただけます。

両APIの基本情報

ZENRIN Maps API

  • 提供元: ゼンリングループ
  • 特徴: 日本国内の詳細な住所データに特化
  • 強み: 住宅地図レベルの精密な日本の住所情報、建物・テナント情報

Google Maps API

  • 提供元: Google
  • 特徴: 世界中の地図データをカバー
  • 強み: グローバル対応、豊富な関連サービスとの連携

ジオコーディングとは

ジオコーディングは、住所や地名といったテキスト情報を、地図上の座標(緯度・経度)に変換する処理です。

ジオコーディング(順方向)

住所から緯度・経度への変換を「順方向のジオコーディング」と呼びます。

変換例

入力: "東京都港区芝公園4-2-8"
 ↓
出力: 緯度 35.6585805, 経度 139.7454329

リバースジオコーディング(逆方向)

緯度・経度から住所への変換を「リバースジオコーディング(逆ジオコーディング)」と呼びます。

変換例

入力: 緯度 35.6585805, 経度 139.7454329
 ↓
出力: "東京都港区芝公園4-2-8"

リバースジオコーディングは、GPS座標から現在地の住所を特定したり、地図上でクリックした位置の住所を取得する際に使用されます。

活用場面

  • ジオコーディング
    • 地図上にマーカーを配置する
    • 住所から最寄りの店舗を検索する
    • 配送ルートを計算する
    • 顧客データを地図上で可視化する
    • 住所入力フォームの自動補完機能
  • リバースジオコーディング
    • GPS座標から現在地の住所を表示する
    • 地図上でクリックした地点の住所を取得する
    • 写真の位置情報から撮影場所の住所を特定する

実装例

1. ZENRIN Maps APIでの実装

ZENRIN Maps APIでは、いくつかジオコーディングを行えるAPIが用意されていますが、ここではもっとも基本的な「address」APIを利用してジオコーディングを行います。

// ZENRIN Maps API v2.0でのジオコーディング実装例
import axios from 'axios';

async function geocodeWithZenrin(address) {
    const apiUrl = 'https://web.zmaps-api.com/search/address';

    // Content-Type: application/x-www-form-urlencoded でのPOST送信
    const params = new URLSearchParams({
        word: address,        // 住所文字列(最大255文字)
        limit: '0,10',       // 取得件数制限
        datum: 'JGD'         // 測地系(JGD2011)
    });

    try {
        const response = await axios.post(apiUrl, params, {
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
                // 認証ヘッダーは実際の契約に応じて設定
                // 例:Authorization: 'Bearer YOUR_ACCESS_TOKEN'
            }
        });

        if (response.data.status === 'OK' && response.data.result?.item?.length > 0) {
            const item = response.data.result.item[0];
            return {
                lat: item.position[1],    // 緯度(position配列の2番目)
                lng: item.position[0],    // 経度(position配列の1番目)
                prefecture: item.address2,      // 都道府県
                city: item.address3,           // 市区町村
                town: item.address4,           // 町域
                address_code2: item.address_code2, // 都道府県コード
                address_code3: item.address_code3, // 市区町村コード
                postal_code: item.post_code,    // 郵便番号
                address_level: item.address_level // 住所階層レベル
            };
        } else {
            throw new Error(`該当する住所が見つかりませんでした(ヒット件数: ${response.data.result?.info?.hit || 0})`);
        }
    } catch (error) {
        throw new Error('ジオコーディングに失敗しました: ' + error.message);
    }
}

// 使用例
geocodeWithZenrin('東京都港区芝公園4-2-8').then(result => {
    console.log('緯度:', result.lat);
    console.log('経度:', result.lng);
    console.log('都道府県:', result.prefecture);
    console.log('市区町村:', result.city);
    console.log('町域:', result.town);
    console.log('都道府県コード:', result.address_code2);
    console.log('市区町村コード:', result.address_code3);
    console.log('郵便番号:', result.postal_code);
    console.log('住所レベル:', result.address_level);
}).catch(error => {
    console.error('エラー:', error.message);
});

2. Google Maps APIでの実装

Google Maps APIでは「Geocoder」クラスを利用してジオコーディングを行います。

// Google Maps APIでのジオコーディング実装例
// 前提: <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script> が読み込まれている
async function geocodeWithGoogle(address) {
    // Geocoderオブジェクトを作成
    const geocoder = new google.maps.Geocoder();

    return new Promise((resolve, reject) => {
        geocoder.geocode(
            { address: address },
            (results, status) => {
                if (status === 'OK') {
                    const location = results[0].geometry.location;
                    resolve({
                        lat: location.lat(),
                        lng: location.lng(),
                        formatted_address: results[0].formatted_address
                    });
                } else {
                    reject('ジオコーディングに失敗しました: ' + status);
                }
            }
        );
    });
}

// 使用例
geocodeWithGoogle('東京都港区芝公園4-2-8').then(result => {
    console.log('緯度:', result.lat);
    console.log('経度:', result.lng);
    console.log('整形済み住所:', result.formatted_address);
});

API仕様・機能比較

機能比較表

機能 ZENRIN Maps API Google Maps API
基本的な住所検索 対応 対応
リバースジオコーディング 対応(住所逆引き機能) 対応
曖昧な住所の補完 高精度(日本国内) 高精度(グローバル)
建物名での検索 詳細対応(別途building_name API) 基本対応
過去の住所での検索 対応(過去地図検索機能) 非対応
地番での検索 対応(地番検索機能) 非対応
住所コード取得 対応(address_code2, address_code3) 非対応
多言語対応 対応(英中韓、別途address_multi API) グローバル多言語
テナント情報取得 対応(別途building_pos API等) 非対応
認証方式 IP制限/OAuth2.0/リファラ制限 APIキー/OAuth2.0
グローバル対応 日本特化 全世界対応

日本特有の住所への対応力

ZENRIN Maps APIの特徴と強み

1. 表記揺れに強い住所マッチング

ZENRIN Maps APIでは「ac_standard(住所クレンジング標準版)」や「ac_premium(住所クレンジング高機能版)」を利用することで、日本語特有の表記揺れを吸収した高精度な住所マッチングが可能です。

// ac_standard/ac_premium利用時、以下の表記は全て同じ場所として認識されます
const variations = [
    "東京都港区芝公園4-2-8",  // 全角数字
    "東京都港区芝公園4-2-8",      // 半角数字
    "東京都港区芝公園四丁目2番8号", // 漢数字混在
    "港区芝公園4-2-8",            // 都道府県省略
];
// → すべて正確に位置を特定(住所クレンジング機能による正規化処理)

2. 詳細な住所階層情報とコード取得

// 上記のgeocodeWithZenrin関数を利用して住所を検索した場合
// 基本的な住所検索で取得可能な詳細情報
const result = await geocodeWithZenrin('東京都千代田区丸の内1-1');
console.log('都道府県:', result.prefecture);
console.log('市区町村:', result.city);
console.log('町域:', result.town);
console.log('都道府県コード:', result.address_code2);
console.log('市区町村コード:', result.address_code3);
console.log('郵便番号:', result.postal_code);
console.log('住所レベル:', result.address_level);

// 実際のAPIレスポンス構造例:
// {
//   status: "OK",
//   result: {
//     info: { hit: 1 },
//     item: [{
//       position: [139.7514046224, 35.6580729167], // [経度, 緯度]
//       address2: "東京都",              // 都道府県
//       address3: "千代田区",            // 市区町村
//       address4: "丸の内一丁目",        // 町域
//       address_code2: "13",             // 都道府県コード
//       address_code3: "13101",          // 市区町村コード
//       post_code: "100-0005",           // 郵便番号
//       address_level: "OAZ"             // 住所階層レベル
//     }]
//   }
// }

// 建物・テナント詳細情報は別途building_pos、building_name APIで取得可能
// ※これらの一部は別途契約が必要なプレミアム機能です

Google Maps APIの特徴と強み

1. Place IDによる確実な位置管理

// 一意のPlace IDで場所を確実に特定
geocoder.geocode(
    { placeId: 'ChIJN1t_tDeuEmsRUsoyG83frY4' },
    (results, status) => {
        // Place IDを使えば、常に同じ場所を特定可能
    }
);

2. 周辺施設情報との連携

// Places APIと連携して周辺施設を検索
const service = new google.maps.places.PlacesService(map);
service.nearbySearch({
    location: { lat: 35.6585805, lng: 139.7454329 },
    radius: 500,
    type: ['restaurant']
}, callback);
// 半径500m以内のレストランリストを取得

// 注意:Places APIは別サービスです

まとめ

両APIとも優れたジオコーディング機能を提供しており、それぞれ異なる強みを持っています。

ZENRIN Maps APIが適しているケース

  • 日本国内限定のサービス:不動産、物流、地域サービス等
  • 高精度な住所処理が必要:ECサイト、配送システム等
  • 建物・テナント情報が重要:オフィス検索、施設管理等
  • 過去住所や地番対応が必要:歴史的データとの照合等

Google Maps APIが適しているケース

  • グローバルサービス:国境を越えたアプリケーション
  • Googleエコシステムとの連携:Maps、Street View、Places等との統合
  • プロトタイプ開発:迅速な検証やMVP開発
  • 世界的コミュニティの活用:豊富な情報と事例の参考

ZENRIN Maps API 2ヶ月無料お試しIDのご案内

本記事でご紹介したZENRIN Maps APIの機能を実際にお試しいただけます!

📝 お申し込みはこちら
👉 ZENRIN Maps APIの始め方

お試し期間中は、ZENRIN Maps APIの豊富な機能をご利用いただけるので、本格導入前の検証にぜひご活用ください。

関連記事・公式ドキュメント


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

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?