ホームページ >バックエンド開発 >PHPチュートリアル >どこにいるの?ジオコーダーPHPを使用したジオロケーションの実装

どこにいるの?ジオコーダーPHPを使用したジオロケーションの実装

Jennifer Aniston
Jennifer Anistonオリジナル
2025-02-19 09:45:09919ブラウズ

Where are you? Implementing geolocation with Geocoder PHP

感動的なプロジェクトや革新的なツールを強調するSitePointの能力は非常に貴重です。 Geocoder PHPは私にとってそのような発見の1つであり、私がこれまで遭遇したことのないライブラリです。 私の仕事には、多くの場合、優れたデータの豊富さに有料サービスを使用して、地図と地理的情報、特に逆のジオコーディングが頻繁に含まれます。しかし、ジオコーダーPHPは、私が利用するさまざまなサービスを統合するための欠けている作品であることが証明されました。

GeoCoder PHPは、ジオコーディングタスクを簡素化するための抽象化レイヤーを提供します。 ライブラリのアーキテクチャはモジュール式で、リクエストを処理するためのHTTPADAPTER、多様なジオコーディングプロバイダー、および出力管理用のフォーマッタ/ダンパーで構成されています。

主要な機能:

多様なジオロケーションサービス用の合理化された抽象化レイヤーを提供します。

HTTPADAPTER、複数のプロバイダー、およびフォーマッタ/ダンパーを使用した
    モジュラー設計
  • 簡単な作曲家のインストールと幅広いプロバイダーサポート(地理的およびIPベース)。
  • さまざまなジオコーダー全体で一貫した結果があり、前方と逆ジオコディングの両方をサポートします。
  • インストール(Composer経由):
  • これを

に追加します 代わりに、GeoCoder PHP Webサイトからアーカイブをダウンロードしてください

ジオコーディングアドレス:composer.json

<code class="language-json">{
    "require": {
        "willdurand/geocoder": "@stable"
    }
}</code>
ジオコーディングには、通常、アドレス(路上住所、近隣など)を地理的座標に変換することが含まれます。 結果の精度は、ジオコーダーの品質に依存します

GeoCoderは、Webサービスと対話するためにHTTPadapterを必要とします。 いくつかが含まれています(Curl、Socket)、他の人のサポート(Buzz、Guzzle、Zend HTTP、GeoIP2)が別々のプロジェクト統合を必要とします。 サポートされているジオコーダーは多数あり、分類されています

地理的コーダー:Googleマップ、OpenStreetMap、Bing Maps、MapQuestなど。

IPジオコーダー:

FreeGeoip、Hostip、IPINFODBなど

多くは無料で、一部はAPIキーを必要とし、使用制限があります(たとえば、Googleの2500リクエスト/日)。 ジオコーダーの品質は異なります。特定の地域で優れている人もいます

例(Google Maps):
  • には、緯度、経度、境界、およびアドレスコンポーネントが含まれます。 GeoCoderは、選択したプロバイダーに関係なく、一貫した結果構造を保証します。
  • ロケール感度:
GeoCoderは、

を使用してロケール固有の結果をサポートしています。 たとえば、ロシアのロケールの使用:

ジオコーダーのチェーン:

<code class="language-php">$address = 'Laan van Meerdervoort, Den Haag, Nederland';

$adapter  = new \Geocoder\HttpAdapter\CurlHttpAdapter();
$geocoder = new \Geocoder\Geocoder();
$geocoder->registerProvider(new \Geocoder\Provider\GoogleMapsProvider($adapter));

$result = $geocoder->geocode($address);</code>
最適な結果については、複数のジオコーダーをチェーンします。 GeoCoderは、最初の成功した結果を返します:

$result

リバースジオコーディング:

逆ジオコディングは、座標(緯度、経度)をアドレスに変換します。 順序を覚えておいてください:緯度、そして経度。

<code class="language-json">{
    "require": {
        "willdurand/geocoder": "@stable"
    }
}</code>

Geocoding IPアドレス:

ジオコーディングIPアドレス(例:$_SERVER['REMOTE_ADDR']から)は簡単です:

<code class="language-php">$address = 'Laan van Meerdervoort, Den Haag, Nederland';

$adapter  = new \Geocoder\HttpAdapter\CurlHttpAdapter();
$geocoder = new \Geocoder\Geocoder();
$geocoder->registerProvider(new \Geocoder\Provider\GoogleMapsProvider($adapter));

$result = $geocoder->geocode($address);</code>

IPジオコーディングの結果は、しばしば詳細ではないことが多いことに注意してください(多くの場合は国のみ)。

エラー処理:

常に

ブロックを使用して、潜在的な例外を処理します:try...catch

<code class="language-php">$geocoder->registerProvider(new \Geocoder\Provider\GoogleMapsProvider($adapter, 'Ru'));
$result = $geocoder->geocode('Laan van Medevoort 7, Den Haag, Nederland');</code>

出力フォーマット:

GeoCoderは、フォーマッタ(文字列ベース)とダンパー(Geojson、KML、GPX、WKB、WKTなどの言語固有の出力)を提供しています。

<code class="language-php">$chain = new \Geocoder\Provider\ChainProvider([
  new \Geocoder\Provider\OpenStreetMapProvider($adapter),
  new \Geocoder\Provider\GoogleMapsProvider($adapter),
  new \Geocoder\Provider\BingMapsProvider($adapter, $bingApiKey),
]);
$geocoder->registerProvider($chain);</code>
結論:

Geocoder PHPは、十分に構造化された使いやすいライブラリです。 強力ですが、潜在的な改善には、信頼レベルやアドレスエラーマージンなどの基準に基づいた高度な結果フィルタリングが含まれます。 これにより、チェーンジオコーダーの可能性が最大限に活用されます

以上がどこにいるの?ジオコーダーPHPを使用したジオロケーションの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。