IPアドレスから緯度経度を取得しGooglePlaceSearchの対応まで

2016/02/03

// アクセス元のIPアドレスを取得する
$ipaddress = $_SERVER['REMOTE_ADDR'];

// ipinfo.ioから、緯度経度を取得する(レスポンスがない場合もあるらしい)
$ch = curl_init('ipinfo.io/' . $ipaddress);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$info = json_decode( curl_exec($ch), true );
curl_close($ch);

// Cakephpのhttpリクエスト用クラス
$httpSocket = new HttpSocket();

// Google Place Searchのgetリクエスト
// keyは、GoogleDeveloperConsoleで、サービスを作成し、API用のkeyを発行すること
// ※以下のサンプルでは、GOOGLE_API_KEYで定数化しています。
// 入力文字は、HTML側の、name="input"から取得する
$placeArr = $httpSocket->get('https://maps.googleapis.com/maps/api/place/autocomplete/json',
    array(
        'input'     => $this->request->data['input']
        ,'location'  => $info['loc']
        ,'radius'   => '20000' // locationからの半径(Max20km)
        ,'types'    => 'establishment'
        ,'language' => 'ja'
        ,'key'      => GOOGLE_API_KEY
    )
);
// レスポンスは、json形式なので、配列でデコードする(第2引数にtrueを指定する)
$tmp = json_decode( $placeArr->body, true );
$res = [];
if ( count( $tmp ) !== 0 )
{
    foreach( $tmp['predictions'] as $key => $val )
    {
        $res[] = $val['description'];
    }
}
// クロスオリジンリソースシェアリング(CORS)対策
// HTTPSも、上記のGOOGLE_API_KEYと同じく定数化しています。
// このスクリプトを利用しているURLドメインと、リクエスト元のドメインを一致させること
// (通常は自ドメインでOK)
header("Access-Control-Allow-Origin: " . HTTPS );
echo json_encode( $res );
exit();

contact us お問い合わせ

Contact お問い合わせ・ご相談

Webサービス・システム開発の
ご相談はお気軽にご連絡ください。

Recruit 求人へのご応募

サニージェムでは現在、プロジェクトの推進を
担う仲間を募集しています。