Geocoder

Geocoder PHPライブラリに基づく包括的なジオコーディングAPIモジュールで、複数のジオコーディングサービスプロバイダーをサポートし、順方向および逆方向のジオコーディング操作を可能にします。

geocoder
35,776 sites
52
drupal.org

インストール

Drupal 11, 10, 9 v8.x-4.30
composer require 'drupal/geocoder:8.x-4.30'

概要

Geocoderモジュールは、Drupalでジオコーディング(住所を地理座標に変換)および逆ジオコーディング(座標を住所に変換)操作を実行するための堅牢なAPIを提供します。Geocoder PHPライブラリバージョン4.xの上に構築されており、30以上の異なるジオコーディングサービスプロバイダーをサポートする柔軟なプラグインベースのアーキテクチャを提供します。

このモジュールには、ジオコーディングプロバイダーの設定、APIキーの管理、キャッシュオプションの設定のための包括的な管理インターフェースが含まれています。結果は、Dumperプラグインシステムを通じてWKT、GeoJSON、KML、GPXなど、さまざまな地理データ形式にエクスポートできます。

サブモジュール(Geocoder Field、Geocoder Geofield、Geocoder Address)により、DrupalのField APIとシームレスに統合され、Entity保存時にテキストフィールドの自動ジオコーディングや地理フィールドの逆ジオコーディングが可能になります。また、プログラムによるジオコーディング操作のためのREST APIエンドポイントも公開しています。

Features

  • 順方向ジオコーディング:住所、地名、場所を地理座標(緯度/経度)に変換
  • 逆ジオコーディング:地理座標を人間が読める住所に変換
  • Google Maps、Nominatim、OpenStreetMap、Bing Maps、MapQuest、Mapboxなど、30以上のジオコーディングサービスプロバイダーをサポート
  • Provider、Dumper、Formatterプラグインの拡張可能なプラグインアーキテクチャ
  • 複数の出力形式:WKT、GeoJSON、KML、GPX、WKB、プレーンアドレステキスト
  • API呼び出しを削減しパフォーマンスを向上させる組み込みキャッシュシステム
  • プロバイダーのレート制限を尊重するリクエストスロットリング
  • ジオコーディング操作用のREST APIエンドポイント
  • 大量のジオコーディング操作のためのQueueベースの処理
  • Geocoder Fieldサブモジュールによるentity保存時の自動フィールドジオコーディング
  • 地理データの保存のためのGeofieldモジュールとの統合
  • 構造化された住所処理のためのAddressモジュールとの統合
  • 画像のEXIFデータ、GPX、KML、GeoJSONファイルからのファイルベースのジオコーディング
  • ジオコーディング候補による住所入力のオートコンプリート機能
  • 近接検索のためのGeofield Proximityソースプラグイン
  • プロバイダー固有の設定オプション(APIキー、地域、ロケールなど)のサポート

Use Cases

住所入力から位置座標を保存

コンテンツタイプのGeofieldを設定して、テキスト住所フィールドから自動的にジオコーディングします。ユーザーが住所を入力すると、座標が自動的にGeofieldに保存されます。geocoder_fieldとgeocoderサブモジュールを有効にし、住所入力用のテキストフィールドと座標用のGeofieldを追加してから、Geofieldの「Geocode」設定で希望のプロバイダーを使用して住所フィールドからジオコーディングするように設定します。

地図上の位置から人間が読める住所を表示

逆ジオコーディングを使用して、保存された座標からフォーマットされた住所を表示します。Geofieldから逆ジオコーディングするようにテキストフィールドを設定します。座標が保存される(例:地図ウィジェットから)と、住所が自動的に入力されます。

アップロードされた写真からGPS座標を抽出

GPS情報が埋め込まれた写真から位置データを自動的に抽出します。EXIF GPSデータを含む画像をアップロードすると、Fileジオコーダープロバイダーが座標を抽出してGeofieldに保存します。

住所オートコンプリート付きの近接検索を構築

「Geocode Origin」proximity sourceを使用してViewsの公開フィルターを作成します。ユーザーはオートコンプリート候補付きで住所を入力でき、結果はその場所からの距離でソートされます。

REST API経由で住所をジオコーディング

/geocoder/api/geocodeエンドポイントを使用してプログラムで住所をジオコーディングします。クエリパラメータとして住所とプロバイダーを渡すと、座標と住所コンポーネントを含むJSON結果を受け取ります。JavaScriptアプリケーションや外部統合に便利です。

既存コンテンツを一括ジオコーディング

Geocoder設定でQueue処理を有効にし、既存コンテンツの保存をトリガーします。ジオコーディングはCron経由で処理され、大規模データセットでのタイムアウトを回避します。進捗状況は「geocoder_field」Queueを監視してください。

GPX/KMLトラックデータのインポート

ルートデータを含むGPXまたはKMLファイルをアップロードし、地理情報を自動的にGeofield値に抽出します。ハイキングトレイル、配送ルート、境界データのインポートに便利です。

Tips

  • 本番サイトでは、APIコストを削減しパフォーマンスを向上させるために常にキャッシュを構成してください。キャッシュされた結果を永続化するために、Permanent Cache Binモジュールの使用を検討してください。
  • Nominatimなどの無料プロバイダーを使用する場合、スロットリングを構成してレート制限を尊重してください(例:2秒ごとに1リクエスト)。Nominatimにはデフォルトの組み込みスロットリングがあります。
  • フィールド統合を設定する前に、APIエンドポイントでジオコーディングをテストしてください:/geocoder/api/geocode?address=YOUR_ADDRESS&geocoder=YOUR_PROVIDER
  • フォールバックとして複数のプロバイダーを構成してください - 結果を返す最初のプロバイダーが使用され、失敗した場合に他のプロバイダーが試行されます。
  • コンテンツ移行時は、インポート中のジオコーディングを防ぐために一時的に「Geocoder Presave無効化」を有効にし、その後ジオコーディングを別途処理してください。
  • 「ターゲット値が空でない場合はジオコードをスキップ」オプションを使用して、新しいコンテンツを自動ジオコーディングしながら手動で入力した座標を保持してください。
  • WKTダンパー出力形式は通常、Geofieldに結果を保存する場合に必要であり、GeoJSONはAddressフィールドに必要です。
  • Google Mapsの場合、サーバーサイドのジオコーディングはブラウザでキーを公開しないため、リファラー制限のないAPIキーを使用してください。
  • 外部API呼び出しによる保存操作の遅延を防ぐため、トラフィックの多いサイトではQueue処理を有効にしてください。

Technical Details

Admin Pages 3
Geocoder設定 /admin/config/system/geocoder

キャッシュ動作、Queue処理、ジオコーディング操作のグローバルな無効化機能を含む、Geocoderモジュールのグローバル設定を構成します。

Geocoderプロバイダー /admin/config/system/geocoder/geocoder-provider

ジオコーディングプロバイダーを管理します。ドロップダウンからプロバイダータイプを選択し、設定を構成して新しいプロバイダーを追加します。既存のプロバイダーの表示、編集、削除ができます。ジオコーディング操作を使用する前に、ここでプロバイダーを作成する必要があります。

Geocoderプロバイダーを追加 /admin/config/system/geocoder/geocoder-provider/add/{geocoder_provider_id}

新しいジオコーダープロバイダーを設定します。設定はプロバイダータイプによって異なりますが、通常はAPIキー、地域、ユーザーエージェント、その他のプロバイダー固有のオプションが含まれます。

権限 2
Geocoder API URLエンドポイントへのアクセス

/geocoder/api/geocodeおよび/geocoder/api/reverse_geocodeのGeocoder REST APIエンドポイントへのアクセスを許可します。

サイト設定の管理(Drupal Core)

Geocoder設定の構成およびジオコーダープロバイダーの管理に必要です。

Hooks 10
hook_geocode_address_string_alter

モジュールがジオコーディングされる前の住所文字列を変更できるようにします。

hook_geocode_address_geocode_query

モジュールがジオコーディング前にGeocodeQueryオブジェクトを変更できるようにします。

hook_reverse_geocode_coordinates_alter

モジュールが逆ジオコーディング前に緯度・経度座標を変更できるようにします。

hook_geocode_country_code_alter

モジュールがジオコーディング結果から抽出された国コードを変更できるようにします。プロバイダーが標準の国コードを返さない場合に便利です。

hook_geocoder_provider_info_alter

モジュールが利用可能なジオコーダープロバイダープラグインのリストを変更できるようにします。デフォルト実装では、ハンドラークラスがインストールされていないプラグインを削除します。

hook_geocode_source_fields_alter

ジオコーディング操作のソースとして使用できるフィールドタイプのリストを変更します。geocoder_fieldサブモジュールで提供されます。

hook_reverse_geocode_source_fields_alter

逆ジオコーディング操作のソースとして使用できるフィールドタイプのリストを変更します。geocoder_fieldサブモジュールで提供されます。

hook_geocode_entity_field_address_string_alter

entity presave時にジオコーディングする住所文字列を変更します。geocoder_fieldサブモジュールで提供されます。

hook_reverse_geocode_entity_field_coordinates_alter

entity presave時の逆ジオコーディング前に座標を変更します。geocoder_fieldサブモジュールで提供されます。

hook_geocoder_address_values_alter

ジオコーディング前の住所値を変更します。geocoder_addressサブモジュールで提供されます。

Troubleshooting 7
プロバイダーがドロップダウンリストに表示されない

プロバイダーのComposerパッケージがインストールされていることを確認してください。例えばGoogle Mapsの場合:composer require geocoder-php/google-maps-provider。モジュールのsrc/Plugin/Geocoder/Providerフォルダを確認してください - そこにプラグインがあるプロバイダーのみがサポートされます。

ジオコーディングが結果を返さない、またはエラーが発生する

詳細なエラーメッセージについてはDrupalログを確認してください。APIキーが正しく、レート制限されていないことを確認してください。Nominatim/OpenStreetMapの場合、User-AgentとRefererヘッダーが設定されていることを確認してください。まずよく知られた単純な住所でテストしてください。

ジオコーディングが非常に遅い

繰り返しのAPI呼び出しを避けるため、Geocoder設定でキャッシュを有効にしてください。一括操作には、Queue処理を有効にしてください。キャッシュクリア後もキャッシュを永続化するために、Permanent Cache Binモジュールの使用を検討してください。

住所フィールドが正しく入力されない

一部のプロバイダーは不完全なデータ(国コードや郵便番号の欠落など)を返します。国コードの問題を修正するにはhook_geocode_country_code_alterフックを使用してください。選択したダンパー(Addressフィールドの場合はGeoJSON)がターゲットフィールドと互換性があることを確認してください。

entity保存時にジオコーディングが実行されない

設定で「Geocoder Presave無効化」がチェックされていないことを確認してください。フィールドの「Geocode」設定で少なくとも1つのプロバイダーが選択されていることを確認してください。ソースフィールドに値があり、前回の保存から変更されていないかどうか確認してください。

ジオコーディングプロバイダーからのレート制限エラー

プロバイダー設定でスロットリング(期間と制限)を構成してください。API呼び出しを減らすためにキャッシュを使用してください。Cron経由でリクエストを分散するためにQueue処理を有効にすることを検討してください。

プロキシ経由でのジオコーディングが機能しない

settings.phpでプロキシ設定を構成してください:$settings['http_client_config']['proxy']。geocoder.http_adapterサービスはこれらの設定を尊重するGuzzleを使用しています。

Security Notes 5
  • ジオコーディングプロバイダーのAPIキーは設定に保存されます。本番キーをバージョン管理から除外するために、環境固有のsettings.phpオーバーライドを使用してください。
  • 「access geocoder api endpoints」権限はREST APIへのアクセスを制御します。APIクォータを消費するため、信頼できるロールにのみ付与してください。
  • settings.phpでオーバーライドされているときに管理インターフェースでAPIキーを非表示にするために、COI(Config Override Inspector)モジュールの使用を検討してください。
  • 匿名ユーザーにオートコンプリート機能を公開する場合、APIクォータの悪用の可能性に注意してください。スロットリングを構成し、追加のレート制限の実装を検討してください。
  • ジオコーディング結果には個人の位置データが含まれる場合があります。ジオコーディングされたデータを保存するフィールドに適切なアクセス制御を確保し、GDPRの影響を考慮してください。